@evandu/super-pi 0.1.105 → 0.1.106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.super-pi-check-inputs.json +2 -2
- package/dist/client/.super-pi-client-sources.json +8 -7
- package/dist/client/assets/index-DBR_t9lF.js +79 -0
- package/dist/client/assets/index-mo5Dvh_v.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/server/application/provider-service.d.ts +14 -0
- package/dist/server/application/provider-service.js +29 -0
- package/dist/server/application/run-service.d.ts +19 -0
- package/dist/server/application/run-service.js +78 -0
- package/dist/server/command-handler.js +6 -0
- package/dist/server/content-search.d.ts +32 -0
- package/dist/server/content-search.js +155 -0
- package/dist/server/file-changes.d.ts +119 -0
- package/dist/server/file-changes.js +278 -0
- package/dist/server/file-diff.d.ts +38 -0
- package/dist/server/file-diff.js +97 -0
- package/dist/server/file-index.d.ts +56 -0
- package/dist/server/file-index.js +150 -0
- package/dist/server/files.d.ts +8 -0
- package/dist/server/files.js +3 -1
- package/dist/server/git.d.ts +17 -0
- package/dist/server/git.js +39 -0
- package/dist/server/http-server.js +121 -1
- package/dist/server/index.js +15 -0
- package/dist/server/pi-session-events.d.ts +9 -0
- package/dist/server/pi-session-events.js +12 -0
- package/dist/server/runtime.d.ts +22 -0
- package/dist/server/runtime.js +16 -1
- package/dist/server/server-context.d.ts +12 -0
- package/dist/server/types.d.ts +71 -0
- package/package.json +11 -1
- package/dist/client/assets/index-UiqTcZca.css +0 -1
- package/dist/client/assets/index-tBfBUY_8.js +0 -74
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.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{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;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;pointer-events:none;position:absolute;top:0;right:0}.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;z-index:11;background:0 0;transition:opacity .1s linear}.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{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}:root{--picker-drop:0px;--picker-nudge:0px;--sidebar-width:270px;--composer-height:148px;--bg-app:#060709;--bg-panel:#11151c;--bg-elevated:#222935;--bg-raised:#1e242f;--bg-hover:#2c3646;--bg-input:#0c0e13;--bg-inset:#040507;--text-primary:#f4f5f6;--text-secondary:#caced3;--text-muted:#b5b9c0;--border-subtle:#1d2026;--border-default:#626b7a;--border-strong:#a0a7b0;--accent:#62d6da;--accent-hover:#84e8eb;--accent-contrast:#022021;--selected:#b7bcc2;--selected-bg:#364254;--selected-border:#6a7fa0;--tab-active-bg:#334157;--danger:#f3afb4;--danger-bg:#220c0d;--danger-border:#68272b;--danger-contrast:#220c0d;--warning:#eead58;--warning-bg:#2a1e0f;--warning-border:#684c27;--success:#86dfa1;--success-bg:#0e2417;--info:#96b6ee;--overlay:#060709cc;--shadow:#000000a8;--shadow-faint:#0005;--focus-ring:#80ecef;--focus-ring-glow:#62d6da33;--scrollbar-thumb:#8b929c;--scrollbar-track:#040507;--scrollbar-thumb-active:#b8bcc1}[data-theme=dracula],[data-preview=dracula]{--bg-app:#20212b;--bg-panel:#21222c;--bg-elevated:#303040;--bg-raised:#333547;--bg-hover:#393b50;--bg-input:#1e1f29;--bg-inset:#1e1f29;--text-primary:#f8f8f2;--text-secondary:#c8c8d0;--text-muted:#b1b1c1;--border-subtle:#3b3b50;--border-default:#6272a4;--border-strong:#b0b0d0;--accent:#bd93f9;--accent-hover:#d8b3fc;--accent-contrast:#1e1f29;--selected:#f8f8f2;--selected-bg:#565a72;--selected-border:#bd93f9;--tab-active-bg:#44475a;--danger:#f77;--danger-bg:#3b1f1f;--danger-border:#f55;--danger-contrast:#21222c;--warning:#ffb86c;--warning-bg:#3b2f1f;--warning-border:#ffb86c;--success:#50fa7b;--success-bg:#15301e;--info:#8be9fd;--overlay:#282a36cc;--shadow:#000000b3;--shadow-faint:#0005;--focus-ring:#bd93f9;--focus-ring-glow:#bd93f933;--scrollbar-thumb:#a0accf;--scrollbar-track:#1e1f29;--scrollbar-thumb-active:#f8f8f2}[data-theme=monokai],[data-preview=monokai]{--bg-app:#242424;--bg-panel:#282828;--bg-elevated:#2b2b2b;--bg-raised:#383838;--bg-hover:#414141;--bg-input:#1e1e1e;--bg-inset:#1e1e1e;--text-primary:#f8f8f2;--text-secondary:#c8c8c8;--text-muted:#b1b1b1;--border-subtle:#3a3a3a;--border-default:#b0a476;--border-strong:#d0d0d0;--accent:#ff6188;--accent-hover:#ff89a0;--accent-contrast:#1e1e1e;--selected:#f8f8f2;--selected-bg:#606060;--selected-border:#ff6188;--tab-active-bg:#4a4a4a;--danger:#ff5c52;--danger-bg:#3b1f1f;--danger-border:#ff5c52;--danger-contrast:#1e1e1e;--warning:#ffb86c;--warning-bg:#3b2f1f;--warning-border:#ffb86c;--success:#a6e22e;--success-bg:#222c0f;--info:#78dce8;--overlay:#2d2d2dcc;--shadow:#000000b3;--shadow-faint:#0005;--focus-ring:#ff6188;--focus-ring-glow:#ff618833;--scrollbar-thumb:#8a8a8a;--scrollbar-track:#1e1e1e;--scrollbar-thumb-active:#ff6188}[data-theme=solarized-light],[data-preview=solarized-light]{--bg-app:#fdf6e3;--bg-panel:#eee8d5;--bg-elevated:#f5f0e0;--bg-raised:#fffffe;--bg-hover:#e8e0cc;--bg-input:#eee8d5;--bg-inset:#d9d3c0;--text-primary:#40565e;--text-secondary:#465b62;--text-muted:#495d62;--border-subtle:#d4ceb8;--border-default:#93a1a1;--border-strong:#586e75;--accent:#176da8;--accent-hover:#1a6aa0;--accent-contrast:#fdf6e3;--selected:#002b36;--selected-bg:#93a1a1;--selected-border:#268bd2;--tab-active-bg:#fffffe;--danger:#b52826;--danger-bg:#fce4e4;--danger-border:#dc322f;--danger-contrast:#fdf6e3;--warning:#806000;--warning-bg:#f8ecb8;--warning-border:#b58900;--success:#5d7000;--success-bg:#eef0e2;--info:#176da8;--overlay:#fdf6e3cc;--shadow:#93a1a133;--shadow-faint:#93a1a119;--focus-ring:#268bd2;--focus-ring-glow:#268bd222;--scrollbar-thumb:#748585;--scrollbar-track:#d9d3c0;--scrollbar-thumb-active:#586e75}[data-theme=github-light],[data-preview=github-light]{--bg-app:#fff;--bg-panel:#f6f8fa;--bg-elevated:#fff;--bg-raised:#fff;--bg-hover:#eaeef2;--bg-input:#f6f8fa;--bg-inset:#d9dde3;--text-primary:#24292e;--text-secondary:#57606a;--text-muted:#555f69;--border-subtle:#d0d7de;--border-default:#8c959f;--border-strong:#373e47;--accent:#0969da;--accent-hover:#0550ae;--accent-contrast:#fff;--selected:#24292e;--selected-bg:#b9c5d3;--selected-border:#0969da;--tab-active-bg:#fff;--danger:#c51e2a;--danger-bg:#ffe4e4;--danger-border:#cf222e;--danger-contrast:#fff;--warning:#8f6400;--warning-bg:#fff3c4;--warning-border:#bf8700;--success:#1a7f37;--success-bg:#e4f3e9;--info:#0969da;--overlay:#fffd;--shadow:#0000001a;--shadow-faint:#0000000f;--focus-ring:#0969da;--focus-ring-glow:#0969da22;--scrollbar-thumb:#818b95;--scrollbar-track:#e1e4e8;--scrollbar-thumb-active:#57606a}.shell{background:radial-gradient(circle at 75% 5%,var(--bg-raised) 0,transparent 28rem),var(--bg-app);grid-template-rows:minmax(0,1fr);grid-template-columns:270px minmax(0,1fr);height:100dvh;display:grid;overflow:hidden}.message-revert{border:1px solid var(--border-default);color:var(--text-muted);cursor:pointer;opacity:.55;background:0 0;border-radius:6px;margin-left:12px;padding:2px 8px;font:11px Manrope;transition:opacity .12s,color .12s,border-color .12s}.message:hover .message-revert,.message-revert:focus-visible{opacity:1}.message-revert:hover{color:var(--text-primary);border-color:var(--border-strong)}@keyframes pulse{50%{opacity:.25}}@media (width<=700px){aside{border-right:0;border-bottom:1px solid var(--border-subtle);min-height:0;padding:12px}.brand{padding:3px 8px 12px}.label,aside footer{display:none}nav{flex:0 auto;min-height:0;max-height:min(30vh,190px);display:grid;overflow:auto}.workspace-group{min-width:0}.chat{padding:0 17px}header{min-height:0;padding:14px 0;overflow:clip}form{margin-bottom:14px}.messages{padding:14px 0}.picker{padding:14px}.picker-list{height:min(320px,45vh)}}:root{color:var(--text-primary);background:var(--bg-app);font-family:Manrope,system-ui,sans-serif}*{box-sizing:border-box}body{min-width:320px;margin:0}.shell{grid-template-columns:var(--sidebar-width,270px) minmax(0,1fr) var(--rail-col,320px);--rail-col:var(--rail-width);background:radial-gradient(circle at 75% 5%,var(--bg-raised) 0,transparent 28rem),var(--bg-app);grid-template-rows:minmax(0,1fr);height:100dvh;display:grid;position:relative;overflow:hidden}aside{border-right:1px solid var(--border-subtle);background:var(--bg-panel);flex-direction:column;min-height:0;padding:20px 13px;display:flex}.brand{align-items:center;gap:10px;padding:3px 8px 24px;display:flex}.brand>span,.orb{background:linear-gradient(135deg,var(--selected),var(--info));width:34px;height:34px;color:var(--bg-app);border-radius:11px;place-items:center;font:700 25px Georgia;display:grid}.brand strong{letter-spacing:.14em;font-size:13px}.brand small,aside footer,aside footer span{color:var(--text-muted);margin-top:2px;font:11px DM Mono,monospace;display:block}.sidebar-actions{display:grid}.workspace-new{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:10px;padding:10px 9px;font-size:12px}.empty button{background:var(--accent);color:var(--accent-contrast);cursor:pointer;border:0;border-radius:10px;padding:12px;font-weight:800}.label{text-transform:uppercase;letter-spacing:.13em;color:var(--text-muted);margin:27px 9px 9px;font:700 12px DM Mono,monospace}nav{flex:1;grid-template-columns:minmax(0,1fr);align-content:start;gap:7px;min-height:0;display:grid;overflow:auto}.workspace-group{border-bottom:1px solid var(--border-subtle);padding-bottom:7px}.workspace-header{align-items:center;gap:3px;display:flex}.workspace-toggle{min-width:0;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:7px;padding:8px 6px;display:flex}.workspace-toggle strong,.workspace-toggle small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.workspace-toggle strong{font-size:12px}.workspace-toggle>span{min-width:0;overflow:hidden}.workspace-toggle small{color:var(--text-muted);margin-top:3px;font:10px DM Mono,monospace}.chevron{color:var(--text-muted);font-size:14px}.workspace-add,.workspace-settings,.workspace-delete{color:var(--text-muted);cursor:pointer;background:0 0;border:0;padding:5px;font-size:16px}.workspace-settings,.workspace-delete{font-size:13px}.conversation{color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;justify-content:space-between;gap:8px;min-width:0;padding:8px 9px 8px 25px;font:500 12px Manrope;display:flex}.conversation small{color:var(--text-muted);flex:none;font:10px DM Mono,monospace}.conversation.selected{background:var(--bg-hover);color:var(--text-primary)}.conversation.selected small{color:var(--text-secondary)}.conversation-empty{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;padding:7px 9px 7px 29px;font:700 11px DM Mono,monospace;overflow:hidden}aside footer{flex-direction:column;align-items:stretch;gap:8px;margin-top:auto;padding:20px 8px 3px;display:flex}aside footer .footer-status{border-bottom:1px solid var(--border-subtle);align-items:center;gap:7px;padding-bottom:9px;display:flex}aside footer .footer-status>span{margin-left:auto}.online,.offline{background:var(--success);border-radius:50%;width:7px;height:7px}.offline{background:var(--warning)}.chat{flex-direction:column;width:100%;max-width:1080px;min-height:0;margin:0 auto;padding:0 42px;display:flex}header{border-bottom:1px solid var(--border-subtle);flex-shrink:0;justify-content:space-between;align-items:center;padding:27px 0 23px;display:flex}h1{margin:0;font-size:19px}header p{color:var(--text-muted);margin:5px 0 0;font-size:12px}.badge{text-transform:uppercase;border:1px solid var(--border-default);color:var(--text-secondary);border-radius:99px;padding:6px 9px;font:11px DM Mono,monospace}.messages{flex:1;align-content:start;gap:26px;min-height:0;padding:32px 0;display:grid;overflow:auto}.message{grid-template-columns:34px minmax(0,1fr);gap:13px;display:grid}.avatar{background:var(--bg-raised);width:32px;height:32px;color:var(--text-primary);border-radius:50%;place-items:center;font:700 12px Manrope;display:grid}.assistant .avatar{background:var(--bg-elevated);color:var(--text-primary)}.meta{margin:2px 0 7px;font-size:12px;font-weight:700}.meta time{color:var(--text-muted);margin-left:10px;font:400 10px DM Mono,monospace}.content{white-space:pre-wrap;color:var(--text-primary);font-size:14px;line-height:1.75}.typing:after{content:"路路路";animation:1s infinite pulse}.error{background:var(--danger-bg);color:var(--danger);border-radius:8px;margin-top:14px;padding:10px 13px;font-size:13px}.error[data-global-error]{justify-content:space-between;align-items:center;gap:12px;display:flex}.error[data-global-error] button{color:inherit;cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:18px;line-height:1}.footer-version{color:var(--text-muted);padding:0 2px;font:10px DM Mono,monospace}form{border:1px solid var(--border-default);background:var(--bg-raised);box-shadow:0 15px 40px var(--shadow-faint);border-radius:13px;flex-shrink:0;margin:0 0 30px}textarea{resize:none;width:100%;height:88px;color:var(--text-primary);background:0 0;border:0;outline:0;padding:15px;font:14px Manrope}.composer{color:var(--text-muted);justify-content:space-between;align-items:center;padding:0 10px 10px 15px;font:10px DM Mono,monospace;display:flex}.composer button{background:var(--accent);color:var(--accent-contrast);cursor:pointer;border:0;border-radius:8px;padding:8px 13px;font-weight:800}.composer .stop{background:var(--danger)}.composer .send:disabled{opacity:1;cursor:not-allowed;background:var(--bg-raised);border:1px solid var(--border-default);color:var(--text-secondary);box-shadow:inset 0 1px var(--shadow-faint)}.overlay{background:var(--overlay);z-index:10;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.picker{background:var(--bg-raised);border:1px solid var(--border-default);width:min(480px,100%);box-shadow:0 25px 60px var(--shadow-faint);border-radius:14px;padding:20px}.picker h2{margin:0 0 12px;font-size:15px}.picker-path{color:var(--text-secondary);word-break:break-all;margin-bottom:9px;font:12px DM Mono,monospace}.picker-list{border:1px solid var(--border-subtle);background:var(--bg-input);border-radius:9px;height:320px;overflow:auto}.picker-dir{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:8px 11px;font:12px DM Mono,monospace;display:flex}.picker-dir:hover{background:var(--bg-hover)}.picker-status{color:var(--text-muted);padding:12px;font:11px DM Mono,monospace}.picker-error{background:var(--danger-bg);color:var(--danger);border-radius:8px;justify-content:space-between;align-items:center;gap:10px;margin:12px;padding:10px 13px;font-size:12px;display:flex}.picker-error button{border:1px solid var(--danger-border);color:var(--danger);cursor:pointer;background:0 0;border-radius:6px;padding:3px 9px}.picker-name{color:var(--text-secondary);align-items:center;gap:9px;margin-top:14px;font-size:12px;display:flex}.picker-name input{border:1px solid var(--border-default);background:var(--bg-input);min-width:0;color:var(--text-primary);border-radius:8px;outline:0;flex:1;padding:8px 10px;font:13px Manrope}.picker-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.picker-actions button{cursor:pointer;border:0;border-radius:8px;padding:9px 14px;font-weight:700}.picker-cancel{border:1px solid var(--border-default);color:var(--text-secondary);background:0 0}.picker-ok{background:var(--accent);color:var(--accent-contrast)}.picker-ok:disabled{opacity:.4;cursor:not-allowed}.empty{text-align:center;color:var(--text-secondary);place-self:center;margin-top:20vh}.empty .orb{width:55px;height:55px;margin:auto;font-size:38px}.empty h2{color:var(--text-primary);margin-bottom:5px}.empty p{font-size:13px}.empty button{margin-top:14px}@media (width<=700px){aside{border-right:0;border-bottom:1px solid var(--border-subtle);min-height:0;padding:12px}.brand{padding:3px 8px 12px}.label,aside footer{display:none}nav{flex:0 auto;min-height:0;max-height:min(30vh,190px);display:grid;overflow:auto}.workspace-group{min-width:0}.chat{padding:0 17px}header{min-height:0;padding:14px 0;overflow:clip}form{margin-bottom:14px}.messages{padding:14px 0}.picker{padding:14px}.picker-list{height:min(320px,45vh)}}.extui{flex:0 auto;gap:10px;min-width:0;max-height:min(45vh,420px);margin-bottom:12px;display:grid;overflow:auto}.extui-card{border:1px solid var(--border-default);background:var(--bg-elevated);min-width:0;box-shadow:0 12px 30px var(--shadow-faint);border-radius:12px;gap:9px;padding:13px 14px;display:grid}.extui-head{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.extui-badge{letter-spacing:.1em;text-transform:uppercase;color:var(--info);border:1px solid var(--info);border-radius:99px;padding:3px 8px;font:10px DM Mono,monospace}.extui-deadline{color:var(--warning);font:10px DM Mono,monospace}.extui-title{color:var(--text-primary);overflow-wrap:anywhere;min-width:0;margin:0;font-size:14px;line-height:1.5}.extui-body{color:var(--text-secondary);overflow-wrap:anywhere;min-width:0;margin:0;font-size:13px;line-height:1.7}.extui-options{gap:6px;min-width:0;display:grid}.extui-option{border:1px solid var(--border-default);background:var(--bg-input);width:100%;min-width:0;color:var(--text-primary);cursor:pointer;text-align:left;overflow-wrap:anywhere;border-radius:8px;padding:9px 11px;font:12px DM Mono,monospace}.extui-option:hover{background:var(--bg-hover)}.extui-form{gap:9px;min-width:0;display:grid}.extui-field{box-sizing:border-box;border:1px solid var(--border-default);background:var(--bg-inset);width:100%;min-width:0;color:var(--text-primary);resize:vertical;border-radius:8px;outline:0;padding:9px 11px;font:13px Manrope}.extui-field:focus{border-color:var(--focus-ring)}.extui-actions{flex-wrap:wrap;gap:8px;min-width:0;display:flex}.extui-actions button{cursor:pointer;border:0;border-radius:8px;padding:8px 13px;font-size:12px;font-weight:700}.extui-primary{background:var(--accent);color:var(--accent-contrast)}.extui-primary:disabled{opacity:.4;cursor:not-allowed}.extui-no{background:var(--danger);color:var(--danger-contrast)}.extui-cancel{border:1px solid var(--border-default);color:var(--text-secondary);background:0 0}.extui-widget{border:1px dashed var(--border-default);background:var(--bg-raised);min-width:0;max-height:min(30vh,220px);color:var(--text-secondary);overflow-wrap:anywhere;border-radius:10px;gap:3px;margin-bottom:10px;padding:9px 12px;font:11px DM Mono,monospace;display:grid;overflow:auto}.extui-title-note{border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-secondary);overflow-wrap:anywhere;border-radius:8px;min-width:0;margin-top:12px;padding:7px 11px;font:11px DM Mono,monospace}.toasts{gap:8px;min-width:0;margin:12px 0 0;display:grid}.toast{border:1px solid var(--border-default);background:var(--bg-raised);min-width:0;color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;border-radius:10px;padding:10px 13px;font-size:12px;line-height:1.6}.toast-warning{border-color:var(--warning-border);background:var(--warning-bg);color:var(--warning)}.toast-error{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}@media (width<=700px){.toasts{width:min(560px,100vw - 32px);max-width:calc(100vw - 32px);left:50%}.extui{max-height:min(38vh,320px)}.extui-card{padding:11px 12px}.extui-title{font-size:13px}.extui-body{font-size:12px}.extui-actions button{padding:7px 11px}}.extui-form{box-shadow:none;background:0 0;border:0;border-radius:0;flex-shrink:0;gap:9px;min-width:0;margin:0;padding:0;display:grid}.stream-tail{border:1px solid var(--border-default);background:var(--bg-raised);min-height:38px;color:var(--text-secondary);border-bottom:0;border-radius:9px 9px 0 0;grid-template-columns:1fr auto 1fr;align-items:center;margin:0;padding:0 15px;font:10px DM Mono,monospace;display:grid;position:relative}.stream-tail-status{white-space:nowrap;text-overflow:ellipsis;justify-self:start;overflow:hidden}.stream-tail-jump{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;border-radius:7px;justify-self:center;padding:6px 12px;font:700 11px Manrope}.stream-tail-jump:hover{border-color:var(--focus-ring)}.stream-tail-mode{color:var(--text-secondary);white-space:nowrap;justify-self:end}.stream-tail-mode[data-follow-tail=true]{color:var(--info)}@media (width<=700px){.stream-tail{grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:5px 15px}.stream-tail-mode{grid-column:1/-1;justify-self:start;font-size:9px}}.conversation-row{align-items:center;gap:2px;min-width:0;display:flex}.conversation{flex:1 1 0}.conversation>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.conversation>small{flex:none}.conversation-archive{width:20px;height:20px;color:var(--text-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:0 0 20px;place-items:center;font-size:14px;line-height:1;transition:color .12s,background .12s;display:grid}.conversation-archive:hover{background:var(--bg-hover);color:var(--text-primary)}.conversation-archive:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.archived-group{border-top:1px dashed var(--border-subtle);margin-top:5px;padding-top:5px}.archived-toggle{width:100%;min-width:0;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;padding:6px 6px 6px 25px;font:11px DM Mono,monospace;display:flex}.archived-toggle:hover{color:var(--text-secondary)}.archived-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.conversation-archived{color:var(--text-muted);cursor:default;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;min-width:0;padding:8px 9px 8px 25px;font:500 12px Manrope;display:flex}.conversation-archived>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.conversation-archived small{color:var(--text-muted);flex:none;font:500 10px DM Mono,monospace}.conversation-restore{color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;padding:1px 3px;font-size:14px;line-height:1}.conversation-restore:hover{background:var(--bg-hover);color:var(--text-primary)}@media (width<=700px){.conversation-archived{padding-left:25px}}.inline-edit{flex:1 1 0;align-items:center;gap:3px;min-width:0;display:flex}.inline-edit-input{border:1px solid var(--border-default);background:var(--bg-raised);min-width:0;color:var(--text-primary);border-radius:7px;outline:0;flex:1 1 0;padding:6px 8px;font:600 12px Manrope}.inline-edit-input:focus{border-color:var(--focus-ring);box-shadow:0 0 0 2px var(--focus-ring-glow)}.inline-edit-ok,.inline-edit-cancel{border:1px solid var(--border-strong);background:var(--bg-raised);width:22px;height:22px;color:var(--text-primary);cursor:pointer;border-radius:6px;flex:0 0 22px;place-items:center;font-size:12px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:grid}.inline-edit-ok:hover{background:var(--accent);border-color:var(--border-strong);color:var(--accent-contrast)}.inline-edit-cancel:hover{background:var(--bg-hover);border-color:var(--border-strong);color:var(--text-primary)}.inline-edit-ok:focus-visible,.inline-edit-cancel:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.inline-edit-ok:disabled{background:var(--bg-raised);border-color:var(--border-default);color:var(--text-muted);cursor:not-allowed}.conversation-time{color:var(--text-secondary);flex:none;font:10px DM Mono,monospace}.session-picker{border-bottom:1px solid var(--border-subtle);scrollbar-width:none;flex-wrap:nowrap;align-items:center;gap:6px;min-width:0;margin-bottom:11px;padding:8px 10px 0 15px;display:flex;overflow-x:auto}.session-picker::-webkit-scrollbar{display:none}.session-picker-item{min-width:0;max-width:100%;position:relative}.session-picker-trigger{white-space:nowrap;border:1px solid var(--border-default);background:var(--bg-raised);min-width:max-content;max-width:none;color:var(--text-primary);cursor:pointer;border-radius:9px;align-items:center;gap:5px;padding:6px 9px;transition:border-color .12s,background .12s;display:flex}.session-picker-trigger:hover{border-color:var(--border-default);background:var(--bg-hover)}.session-picker-trigger:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.session-picker-name{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;font:700 12px Manrope;overflow:hidden}.session-picker-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);flex:0 auto;font:10px DM Mono,monospace;overflow:hidden}.session-picker-caret{color:var(--text-secondary);flex:none;font-size:10px}.session-picker-trigger:disabled{cursor:not-allowed;background:var(--bg-raised);border-color:var(--border-default)}.session-picker-trigger:disabled .session-picker-name,.session-picker-trigger:disabled .session-picker-detail,.session-picker-trigger:disabled .session-picker-caret{color:var(--text-secondary)}.picker-menu{z-index:20;border:1px solid var(--border-default);background:var(--bg-elevated);width:max-content;min-width:100%;max-width:min(420px,88vw);box-shadow:0 18px 44px var(--shadow);transform:translate(var(--picker-nudge,0px),var(--picker-drop,0px));border-radius:12px;padding:6px;position:absolute;bottom:calc(100% + 7px);left:0}.picker-list{background:var(--bg-input);border:0;border-radius:9px;align-content:start;height:auto;max-height:min(46vh,340px);display:grid;overflow:auto}.picker-option{width:100%;min-width:0;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;align-items:baseline;gap:8px;padding:8px 10px;display:flex}.picker-option:hover{background:var(--bg-hover);color:var(--text-primary)}.picker-option:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px}.picker-option.selected{background:var(--bg-raised)}.picker-option.selected:hover{background:var(--bg-hover)}.picker-option-name{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;font:600 12px Manrope;overflow:hidden}.picker-option.selected .picker-option-name{color:var(--text-primary)}.picker-option-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);text-align:right;flex:auto;font:10px DM Mono,monospace;overflow:hidden}.composer-resize{z-index:9;cursor:ns-resize;touch-action:none;height:9px;position:absolute;top:-4px;left:0;right:0}.composer-resize:before{content:"";background:var(--border-default);opacity:.65;border-radius:2px;height:2px;position:absolute;top:3px;left:20%;right:20%}.composer-resize:hover:before,.composer-resize:focus-visible:before,.composer-resize-dragging:before{background:var(--focus-ring);opacity:1}.composer-resize:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px;border-radius:3px}.picker-option-swatch{border-radius:50%;flex:none;align-self:center;width:7px;height:7px}.session-picker-agent .picker-menu{min-width:min(330px,78vw)}.picker-option:hover .picker-option-detail{color:var(--text-primary)}.picker-option-mark{color:var(--selected);flex:none;font-size:12px}@media (width<=700px){.session-picker{gap:6px;padding:8px 9px 0 12px}.session-picker-trigger{padding:5px 7px}.picker-menu{max-width:calc(100vw - 44px)}.picker-list{max-height:min(38vh,260px)}}.session-picker-kind{border-right:1px solid var(--border-default);color:var(--text-muted);letter-spacing:.06em;flex:none;align-self:stretch;align-items:center;padding-right:7px;font:700 10px Manrope;display:flex}.session-picker-trigger:disabled .session-picker-kind{color:var(--text-secondary);border-right-color:var(--border-default)}.session-picker-trigger:hover .session-picker-kind{color:var(--text-muted)}.chat>form{flex-direction:column;flex:0 auto;min-height:0;display:flex}.chat>form textarea{flex:auto;min-height:56px}@media (width<=700px){nav{max-height:min(190px,max(84px,44vh - 113px))}}@media (width<=440px){.session-picker-detail{display:none}}.picker-filter{border:1px solid var(--border-default);background:var(--bg-inset);border-radius:9px;align-items:center;gap:7px;margin:0 2px 6px;padding:0 9px;display:flex}.picker-filter:focus-within{border-color:var(--focus-ring)}.picker-filter-icon{color:var(--text-muted);flex:none;font-size:11px;line-height:1}.picker-filter-input{min-width:0;color:var(--text-primary);background:0 0;border:0;outline:0;flex:1 1 0;padding:8px 0;font:12px Manrope}.picker-filter-input::placeholder{color:var(--text-muted)}.picker-filter-clear{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;padding:2px 5px;font-size:11px;line-height:1}.picker-filter-clear:hover{background:var(--bg-hover);color:var(--text-primary)}.picker-current{background:var(--bg-raised);border-radius:9px;align-items:baseline;gap:7px;min-width:0;margin:0 2px 6px;padding:6px 9px;display:flex}.picker-current-label{color:var(--selected);letter-spacing:.06em;flex:none;font:700 10px Manrope}.picker-current-value{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;font:600 12px Manrope;overflow:hidden}.picker-empty{color:var(--text-secondary);text-align:center;overflow-wrap:anywhere;padding:14px 10px;font:11px DM Mono,monospace}.slash-menu{border:1px solid var(--border-default);background:var(--bg-elevated);width:max-content;min-width:260px;max-width:min(400px,90vw);box-shadow:0 18px 44px var(--shadow);transform:translate(var(--slash-nudge,0px),var(--slash-drop,0px));scrollbar-width:thin;scrollbar-color:var(--border-default) transparent;border-radius:12px;max-height:min(320px,55vh);padding:6px;overflow-y:auto}.slash-menu-item{width:100%;min-width:0;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;align-items:baseline;gap:0;padding:9px 12px;font:12px Manrope;display:flex}.slash-menu-item:hover{background:var(--bg-hover);color:var(--text-primary)}.slash-menu-item:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px}.slash-menu-item.selected{background:var(--bg-raised)}.slash-menu-item-id{color:var(--text-primary);flex:none;font-weight:700}.slash-menu-item-sep{color:var(--text-secondary);flex:none;margin:0 4px}.slash-menu-item-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);flex:auto;overflow:hidden}.slash-menu-item.selected .slash-menu-item-label{color:var(--text-primary)}.slash-menu-item-examples{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:0 auto;margin-left:6px;font:10px DM Mono,monospace;overflow:hidden}.slash-menu-empty{color:var(--text-secondary);text-align:center;padding:14px 10px;font:11px DM Mono,monospace}.picker-option.preview{background:var(--bg-hover);box-shadow:inset 2px 0 0 var(--border-strong)}.picker-option.preview .picker-option-name,.picker-option.preview .picker-option-detail{color:var(--text-primary)}.settings-dialog{width:min(440px,100%)}.settings-scope{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;margin:-6px 0 2px;font:11px DM Mono,monospace;overflow:hidden}.settings-row{grid-template-columns:76px minmax(0,1fr);align-items:center;gap:10px;margin-top:12px;display:grid}.settings-label{color:var(--text-secondary);font-size:12px}.general-nickname{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.general-nickname-label{color:var(--text-secondary);min-width:36px;font-size:12px}.general-nickname-input{border:1px solid var(--border-default);background:var(--bg-input);min-width:0;color:var(--text-primary);border-radius:8px;outline:0;flex:180px;padding:8px 10px;font:13px Manrope}.general-nickname-input:focus{border-color:var(--focus-ring)}.general-nickname-hint{color:var(--text-muted);flex:1 0 100%;font:11px DM Mono,monospace}.settings-row .session-picker-trigger{width:100%;min-width:0;max-width:100%}.picker-actions .settings-rename{border:1px solid var(--border-default);color:var(--text-secondary);background:0 0;margin-right:auto}@media (width<=700px){.settings-row{grid-template-columns:1fr;gap:5px}}.subagent-card{border:1px solid var(--border-strong);background:var(--bg-elevated);min-width:0;box-shadow:0 10px 26px var(--shadow-faint);border-radius:12px;gap:8px;margin:2px 0 14px 46px;padding:12px 14px;display:grid}.subagent-card.subagent-running{border-color:var(--info)}.subagent-card.subagent-failed{border-color:var(--danger-border)}.subagent-head{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.subagent-badge{letter-spacing:.1em;text-transform:uppercase;color:var(--info);border:1px solid var(--info);border-radius:99px;flex:none;padding:3px 8px;font:10px DM Mono,monospace}.subagent-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;font:700 13px Manrope;overflow:hidden}.subagent-status{color:var(--text-secondary);border-left:1px solid var(--border-default);flex:none;padding-left:8px;font:10px DM Mono,monospace}.subagent-running .subagent-status{color:var(--info)}.subagent-failed .subagent-status{color:var(--danger)}.subagent-clock,.subagent-duration{letter-spacing:.02em;white-space:nowrap;color:var(--text-secondary);flex:none;font:10px DM Mono,monospace}.subagent-activity{min-width:0;color:var(--text-secondary);overflow-wrap:anywhere;align-items:center;gap:7px;font:11px DM Mono,monospace;display:flex}.subagent-activity-dot{background:var(--info);border-radius:99px;flex:none;width:6px;height:6px;animation:1.2s ease-in-out infinite subagent-pulse}@keyframes subagent-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}@media (prefers-reduced-motion:reduce){.subagent-activity-dot{animation:none}}.subagent-failure{min-width:0;color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border);overflow-wrap:anywhere;border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:8px;padding:6px 9px;font:11px DM Mono,monospace;display:flex}.subagent-failure-label{letter-spacing:.06em;color:var(--danger);flex:none;font-weight:700}.subagent-failure-stage{min-width:0;color:var(--danger);flex:0 auto}.subagent-failure-tool,.subagent-failure-progress{min-width:0;color:var(--danger);overflow-wrap:anywhere;flex:0 auto}.subagent-stop{border:1px solid var(--border-default);background:var(--bg-raised);color:var(--text-primary);cursor:pointer;border-radius:8px;flex:none;margin-left:auto;padding:4px 11px;font:700 11px Manrope}.subagent-stop:hover{background:var(--danger);border-color:var(--danger-border);color:var(--danger-contrast)}.subagent-stop:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.subagent-task{min-width:0;color:var(--text-secondary);overflow-wrap:anywhere;border-left:2px solid var(--border-default);padding-left:9px;font:11px DM Mono,monospace}.subagent-by-model{border-color:var(--warning-border)}.subagent-source{letter-spacing:.04em;color:var(--warning);background:var(--warning-bg);border:1px solid var(--warning-border);white-space:nowrap;border-radius:99px;flex:none;align-items:center;gap:5px;padding:3px 9px;font:700 10px Manrope;display:inline-flex}.subagent-source-glyph{flex:none;font-size:11px;line-height:1}.subagent-task-source{letter-spacing:.06em;color:var(--warning);margin-right:7px;font:700 10px Manrope;display:inline-block}.subagent-output{min-width:0;max-height:min(38vh,300px);color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.7 Manrope;overflow:auto}.subagent-error{min-width:0;color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border);overflow-wrap:anywhere;border-radius:8px;padding:8px 10px;font:12px/1.6 Manrope}.subagent-tools{gap:3px;min-width:0;display:grid}.subagent-tool{min-width:0;color:var(--text-muted);background:var(--bg-raised);border-radius:6px;align-items:baseline;gap:7px;padding:4px 8px;font:11px DM Mono,monospace;display:flex}.subagent-tool-glyph{color:var(--text-secondary);flex:none}.subagent-tool-label{white-space:nowrap;min-width:max-content;color:var(--text-primary);flex:none;overflow:visible}.subagent-tool-error .subagent-tool-glyph{color:var(--danger)}.subagent-tool-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);text-align:right;flex:auto;overflow:hidden}.subagent-tool-duration{color:var(--text-muted);flex:none;padding-left:2px;font-size:10px}.subagent-more{color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:0;flex:none;padding:2px 0;font:11px DM Mono,monospace}.subagent-more:hover{color:var(--text-primary)}.subagent-usage{border-top:1px solid var(--border-subtle);min-width:0;color:var(--text-secondary);flex-wrap:wrap;gap:10px;padding-top:8px;font:10px DM Mono,monospace;display:flex}.subagent-collapse{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:7px;flex:none;align-self:flex-start;padding:3px 9px;font:11px DM Mono,monospace}.subagent-collapse:hover{background:var(--bg-hover);color:var(--text-primary)}@media (width<=700px){.subagent-card{margin-left:0}.subagent-output{max-height:min(34vh,240px)}}.call-blocks{gap:5px;min-width:0;margin-top:8px;margin-bottom:8px;display:grid}.call-block{border:1px solid var(--border-default);border-left:1px solid var(--border-strong);background:var(--bg-elevated);border-radius:8px;min-width:0;padding:5px 9px 5px 15px;position:relative}.call-fold-edge{cursor:pointer;z-index:1;background:0 0;border:0;width:12px;min-width:12px;padding:0;position:absolute;inset-block:0;inset-inline-start:0}.call-fold-edge:before{content:"";background:var(--bg-raised);border-radius:99px;width:3px;transition:background .12s linear,width .12s linear,inset-inline-start .12s linear;position:absolute;inset-block:4px;inset-inline-start:4px}.call-fold-edge:hover:before,.call-fold-edge:focus-visible:before{background:var(--border-strong);width:7px;inset-inline-start:2px}.call-fold-edge:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px;border-radius:4px}.call-head-row{align-items:center;gap:6px;min-width:0;display:flex}.call-head{min-width:0;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;flex:auto;align-items:baseline;gap:7px;padding:2px 0;font:11px DM Mono,monospace;display:flex}.call-chevron{color:var(--text-muted);flex:none;font-size:10px}.call-glyph{color:var(--text-secondary);flex:none}.call-block-error .call-glyph{color:var(--danger)}.call-label{white-space:nowrap;min-width:max-content;color:var(--text-primary);flex:none;overflow:visible}.call-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:auto;overflow:hidden}.call-duration{color:var(--text-muted);white-space:nowrap;flex:none;padding-left:2px;font-size:10px}.call-fold-top{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px;font:11px DM Mono,monospace}.call-fold-top:hover{background:var(--bg-hover);color:var(--text-primary)}.call-live-preview{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-left:2px dashed var(--border-subtle);cursor:pointer;margin-top:4px;margin-left:18px;padding:2px 8px;font:10px/1.4 DM Mono,monospace;overflow:hidden}.call-fold-top:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.call-args{border-top:1px solid var(--border-subtle);gap:2px;min-width:0;max-height:min(40vh,320px);margin-top:5px;padding-top:5px;display:grid;overflow:auto}.call-arg{min-width:0;color:var(--text-muted);background:var(--bg-raised);border-radius:5px;grid-template-columns:max-content minmax(0,1fr);align-items:baseline;gap:8px;padding:3px 8px;font:11px DM Mono,monospace;display:grid}.call-arg-key{min-width:0;color:var(--selected);overflow-wrap:anywhere}.call-arg-value{overflow-wrap:anywhere;min-width:0;color:var(--text-muted);flex:auto}.call-arg-empty{color:var(--text-muted)}@media (width<=700px){.call-fold-edge{width:10px;min-width:10px}.call-fold-edge:before{inset-inline-start:3px}.call-block{padding-left:13px}}.queue-dock{border:1px solid var(--border-default);background:var(--bg-raised);border-radius:11px;flex-direction:column;flex:none;gap:0;min-width:0;margin-bottom:10px;display:flex;overflow:hidden}.queue-dock-head{background:var(--bg-raised);width:100%;min-width:0;color:var(--text-primary);cursor:pointer;text-align:left;border:0;align-items:center;gap:8px;padding:9px 12px;font:12px Manrope;display:flex}.queue-dock-head:hover{background:var(--bg-hover)}.queue-dock-head strong{color:var(--text-primary);flex:none;font-weight:700}.queue-dock-head .chevron{color:var(--text-muted);flex:none}.queue-dock-preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:auto;font:11px DM Mono,monospace;overflow:hidden}.queue-dock-badge{color:var(--warning);border:1px solid var(--warning-border);border-radius:99px;flex:none;padding:2px 8px;font:10px DM Mono,monospace}.queue-dock-list{flex-direction:column;gap:5px;min-width:0;max-height:min(26vh,190px);margin:0;padding:0 6px 7px;list-style:none;display:flex;overflow-y:auto}.queue-row{background:var(--bg-raised);border-radius:8px;align-items:center;gap:8px;min-width:0;padding:6px 8px;display:flex}.queue-index{background:var(--bg-hover);width:17px;height:17px;color:var(--text-muted);border-radius:99px;flex:none;place-items:center;font:10px DM Mono,monospace;display:grid}.queue-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:auto;font:12px Manrope;overflow:hidden}.queue-state{color:var(--text-muted);border:1px solid var(--border-default);border-radius:99px;flex:none;padding:2px 8px;font:10px DM Mono,monospace}.queue-row-sending .queue-state{color:var(--warning);border-color:var(--warning-border)}.queue-steer,.queue-interrupt,.queue-edit,.queue-cancel,.queue-edit-save,.queue-edit-cancel{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:7px;flex:none;padding:4px 10px;font:11px Manrope}.queue-steer{border-color:var(--selected-border);background:var(--selected-bg);font-weight:700}.queue-interrupt{border-color:var(--danger-border);color:var(--danger);font-weight:700}.queue-cancel:hover{background:var(--bg-hover);color:var(--danger);border-color:var(--danger-border)}.queue-steer:hover,.queue-interrupt:hover,.queue-edit:hover,.queue-edit-save:hover,.queue-edit-cancel:hover{background:var(--bg-hover)}.queue-steer:focus-visible,.queue-interrupt:focus-visible,.queue-edit:focus-visible,.queue-cancel:focus-visible,.queue-edit-save:focus-visible,.queue-edit-cancel:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.queue-locked{color:var(--warning);flex:none;font:10px DM Mono,monospace}.queue-row-edit{flex:auto;align-items:flex-start;gap:8px;min-width:0;display:flex}.queue-row-edit textarea{resize:vertical;min-width:0;color:var(--text-primary);background:var(--bg-input);border:1px solid var(--selected-border);border-radius:8px;flex:auto;padding:6px 8px;font:12px/1.6 Manrope}.queue-row-edit textarea:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.queue-bg-result{flex:auto;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.queue-bg-result .bg-result-glyph{font-size:12px}.queue-bg-result .bg-result-label{color:var(--text-muted);letter-spacing:.04em;flex:none;font:10px DM Mono,monospace}.queue-bg-result .bg-result-summary{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font:12px Manrope;overflow:hidden}.queue-row.queue-row-bg-result{border-left:3px solid var(--info);padding-left:6px}.queue-row.queue-row-bg-result[data-bg-result-state=error]{border-left-color:var(--danger)}@media (width<=700px){.queue-dock-list{max-height:min(30vh,220px)}.queue-row{flex-wrap:wrap}.queue-text{flex-basis:100%}}.md{white-space:normal}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md-p{white-space:pre-wrap;margin:0 0 11px}.md-h{color:var(--text-primary);margin:19px 0 9px;font-weight:800;line-height:1.35}.md-h1{font-size:19px}.md-h2{font-size:17px}.md-h3{font-size:15px}.md-h4,.md-h5,.md-h6{color:var(--text-primary);font-size:14px}.md-strong{color:var(--text-primary);font-weight:800}.md-em{font-style:italic}.md-del{opacity:.62}.md-ul,.md-ol{margin:0 0 11px;padding-left:23px}.md-li{margin:3px 0}.md-li>.md-ul,.md-li>.md-ol{margin:3px 0 0}.md-li>.md-p:last-child{margin-bottom:0}.md-quote{border-left:3px solid var(--border-default);color:var(--text-secondary);margin:0 0 11px;padding:2px 0 2px 12px}.md-rule{border:0;border-top:1px solid var(--border-subtle);margin:16px 0}.md-link{color:var(--accent);text-underline-offset:2px;overflow-wrap:anywhere;text-decoration:underline}.md-link:hover{color:var(--accent-hover)}.md-code-inline{background:var(--bg-raised);border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:5px;padding:1px 5px;font:12px DM Mono,ui-monospace,monospace}.md-pre{background:var(--bg-inset);border:1px solid var(--border-subtle);border-radius:9px;max-width:100%;margin:0 0 12px;padding:11px 13px;overflow:auto}.md-code{color:var(--text-primary);white-space:pre;font:12px/1.6 DM Mono,ui-monospace,monospace}.md-pre[data-md-lang]:before{content:attr(data-md-lang);color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:7px;font:10px DM Mono,monospace;display:block}.md-table-wrap{max-width:100%;margin:0 0 12px;overflow-x:auto}.md-table{border-collapse:collapse;width:100%;font-size:13px}.md-table th,.md-table td{border:1px solid var(--border-subtle);text-align:left;vertical-align:top;padding:6px 10px}.md-table th{background:var(--bg-raised);color:var(--text-primary);font-weight:800}.md-table tbody tr:nth-child(2n){background:var(--bg-raised)}.md-math{color:var(--text-primary);font-family:DM Mono,ui-monospace,monospace}.md-math-block{text-align:center;margin:0 0 12px;padding:9px 0;font-size:15px;display:block;overflow-x:auto}.md-m-var{color:var(--text-primary);font-style:italic}.md-m-fn{color:var(--text-secondary);font-style:normal}.md-m-op{color:var(--text-primary)}.md-m-number{color:var(--text-secondary)}.md-m-script{white-space:nowrap}.md-m-sup,.md-m-sub{font-size:.72em}.md-m-sup{vertical-align:.55em}.md-m-sub{vertical-align:-.25em}.md-m-frac{vertical-align:middle;text-align:center;flex-direction:column;align-items:center;margin:0 .2em;line-height:1.2;display:inline-flex}.md-m-num{padding:0 .3em}.md-m-den{border-top:1.4px solid;padding:0 .3em}.md-m-root{white-space:nowrap}.md-m-body{border-top:1.4px solid;padding:0 .12em 0 .05em}.md-m-radical{font-size:1.15em}.md-m-index{font-size:.65em}.md-m-rowbreak{height:0;display:block}.md-m-unsupported{color:var(--warning);border-bottom:1px dashed var(--warning-border);cursor:help}.md-inline{display:inline}.md-inline+.md-inline{margin-left:4px}:root{--rail-width:320px}.shell.shell-rail-collapsed{--rail-width:30px}.right-rail{border-left:1px solid var(--border-subtle);background:var(--bg-panel);flex-direction:column;min-width:0;min-height:0;display:flex}.right-rail-collapsed{border-left-color:var(--border-subtle);background:var(--bg-inset)}.right-rail-open{border:1px solid var(--border-default);background:var(--bg-elevated);width:26px;height:34px;color:var(--text-secondary);cursor:pointer;border-radius:8px;align-self:center;margin-top:14px;font-size:15px;line-height:1}.right-rail-open:hover{border-color:var(--border-strong);color:var(--text-primary)}.right-rail-open:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.right-rail-head{border-bottom:1px solid var(--border-subtle);align-items:center;gap:6px;min-width:0;padding:14px 10px 0 13px;display:flex}.right-tabs{flex-wrap:wrap;flex:auto;align-items:center;gap:4px;min-width:0;display:flex}.right-tab{color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px 8px 0 0;padding:6px 11px;font:700 12px Manrope}.right-tab:hover{color:var(--text-primary);background:var(--bg-elevated)}.right-tab-active{border-color:var(--border-default);border-bottom-color:var(--selected);background:var(--bg-elevated);color:var(--text-primary)}.right-tab:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.right-rail-collapse{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:8px;flex:none;padding:5px 9px;font-size:14px;line-height:1}.right-rail-collapse:hover{border-color:var(--border-strong);color:var(--text-primary)}.right-rail-collapse:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.right-rail-body{flex:1;min-height:0;padding:0 13px 16px;overflow-y:auto}.rail-section-head{justify-content:space-between;align-items:baseline;gap:8px;min-width:0;margin:15px 0 8px;display:flex}.rail-section-head:first-child{margin-top:14px}.rail-section-title{text-overflow:ellipsis;white-space:nowrap;letter-spacing:.1em;text-transform:uppercase;min-width:0;color:var(--text-muted);flex:0 auto;margin:0;font:700 11px DM Mono,monospace;overflow:hidden}.rail-section-count{color:var(--text-muted);white-space:nowrap;flex:none;font:10px DM Mono,monospace}.rail-empty{border:1px dashed var(--border-default);background:var(--bg-input);color:var(--text-secondary);overflow-wrap:anywhere;border-radius:10px;margin:0;padding:11px 12px;font:11px/1.7 Manrope}.todo-list{gap:5px;min-width:0;margin:0;padding:0;list-style:none;display:grid}.todo-item{border:1px solid var(--border-subtle);border-left-width:3px;border-radius:8px;align-items:baseline;gap:7px;min-width:0;padding:7px 9px;font:12px/1.55 Manrope;display:flex}.todo-text{overflow-wrap:anywhere;flex:auto;min-width:0}.todo-status{color:inherit;opacity:.9;white-space:nowrap;flex:none;font:10px DM Mono,monospace}.todo-priority{border:1px solid var(--border-default);color:var(--text-secondary);border-radius:99px;flex:none;padding:1px 6px;font:10px DM Mono,monospace}.todo-mark{flex:none;font-size:11px;line-height:1.6}.todo-pending{border-left-color:var(--border-strong);background:var(--bg-elevated);color:var(--text-secondary)}.todo-in_progress{border-left-color:var(--info);background:var(--selected-bg);color:var(--text-primary)}.todo-in_progress .todo-priority{border-color:var(--info);color:var(--info)}.todo-completed{border-left-color:var(--border-subtle);background:var(--bg-inset);color:var(--text-muted)}.todo-completed .todo-text{text-decoration:line-through;text-decoration-thickness:1px}.bg-list{gap:5px;min-width:0;margin:0;padding:0;list-style:none;display:grid}.bg-item{border:1px solid var(--border-subtle);background:var(--bg-raised);border-radius:8px;gap:3px;min-width:0;padding:7px 9px;display:grid}.bg-title{min-width:0;color:var(--text-primary);overflow-wrap:anywhere;font:600 12px Manrope}.bg-meta{min-width:0;color:var(--text-muted);align-items:baseline;gap:8px;font:10px DM Mono,monospace;display:flex}.bg-agent{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--selected);overflow:hidden}.bg-status{white-space:nowrap;flex:none}@media (width<=1100px){.shell{grid-template-columns:var(--sidebar-width,270px) minmax(0,1fr)}.right-rail{z-index:15;width:min(var(--rail-width),86vw);box-shadow:-14px 0 34px var(--shadow-faint);position:absolute;top:0;bottom:0;right:0}}@media (width<=700px){.right-rail{width:min(var(--rail-width),94vw)}.right-rail-body{padding:0 11px 14px}}.tool-grid{grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:8px;min-width:0;margin:0;padding:0;list-style:none;display:grid}.tool-slot{min-width:0;position:relative}.tool-icon{border:1px solid var(--border-default);background:var(--bg-raised);cursor:pointer;width:100%;min-width:0;color:var(--text-muted);border-radius:11px;align-content:center;place-items:center;gap:3px;padding:9px 5px 7px;display:grid}.tool-icon:hover{border-color:var(--border-strong);color:var(--text-primary)}.tool-icon:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-icon{aspect-ratio:1;min-height:74px}.tool-icon[data-tool-state=open]{border-color:var(--selected-border);background:var(--selected-bg);color:var(--text-primary)}.tool-icon-glyph{pointer-events:none;font:400 26px/1 Manrope,system-ui,sans-serif}.tool-icon-name{text-overflow:ellipsis;white-space:nowrap;max-width:100%;color:inherit;opacity:.95;font:10px DM Mono,monospace;overflow:hidden}.tool-remove{border:1px solid var(--border-default);background:var(--bg-elevated);width:19px;height:19px;color:var(--text-secondary);cursor:pointer;border-radius:99px;place-items:center;padding:0;font:11px/1 Manrope;display:grid;position:absolute;top:-5px;right:-5px}.tool-remove:hover{border-color:var(--danger-border);color:var(--danger)}.tool-remove:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-presets{gap:6px;min-width:0;display:grid}.tool-preset{border:1px solid var(--border-subtle);background:var(--bg-raised);border-radius:9px;align-items:center;gap:9px;min-width:0;padding:8px 9px;display:flex}.tool-preset-glyph{border:1px solid var(--border-default);background:var(--bg-elevated);width:28px;height:28px;color:var(--text-secondary);border-radius:8px;flex:none;place-items:center;font:400 16px/1 Manrope,system-ui,sans-serif;display:grid}.tool-preset-text{flex:auto;gap:2px;min-width:0;display:grid}.tool-preset-text strong{color:var(--text-primary);font:600 12px Manrope}.tool-preset-text small{color:var(--text-muted);overflow-wrap:anywhere;font:10px/1.5 Manrope}.tool-preset-add{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;flex:none;padding:5px 9px;font:600 11px Manrope}.tool-preset-add:hover:not(:disabled){border-color:var(--border-strong);color:var(--text-primary)}.tool-preset-add:disabled{opacity:.5;cursor:not-allowed}.tool-preset-add:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-hint{color:var(--text-secondary);overflow-wrap:anywhere;margin:0 0 8px;font:11px/1.65 Manrope}.tool-hint b{color:var(--text-primary)}.tool-input{border:1px solid var(--border-default);background:var(--bg-input);width:100%;min-width:0;color:var(--text-primary);border-radius:9px;outline:0;margin:0 0 6px;padding:8px 10px;font:12px DM Mono,monospace;display:block}.tool-input:focus-visible{border-color:var(--focus-ring)}.tool-url-add{border:1px solid var(--border-default);background:var(--bg-elevated);width:100%;color:var(--text-secondary);cursor:pointer;border-radius:9px;padding:8px 10px;font:600 12px Manrope;display:block}.tool-url-add:hover:not(:disabled){border-color:var(--border-strong);color:var(--text-primary)}.tool-url-add:disabled{opacity:.45;cursor:not-allowed}.tool-url-add:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-error{border:1px solid var(--danger-border);background:var(--danger-bg);color:var(--danger);overflow-wrap:anywhere;border-radius:9px;margin:8px 0 0;padding:8px 10px;font:11px/1.6 Manrope}.tool-share-row{border:1px solid var(--border-subtle);background:var(--bg-raised);border-radius:9px;align-items:center;gap:9px;min-width:0;padding:8px 9px;display:flex}.tool-share-review{gap:2px;min-width:0;display:grid}.tool-share-title{color:var(--text-primary);overflow-wrap:anywhere;margin:0;font:600 13px Manrope}.tool-share-tabs{flex-wrap:wrap;gap:6px;margin:8px 0 0;display:flex}.tool-share-tab{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;overflow-wrap:anywhere;text-align:left;background:0 0;border-radius:8px;padding:4px 8px;font:600 10px DM Mono,monospace}.tool-share-tab[aria-pressed=true]{border-color:var(--border-strong);color:var(--text-primary);background:var(--bg-elevated)}.tool-share-tab:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-import-files{border:1px solid var(--border-subtle);background:var(--bg-raised);border-radius:9px;margin:10px 0 0;padding:8px 10px}.tool-import-files>summary{cursor:pointer;color:var(--text-secondary);font:600 11px Manrope}.tool-import-files>summary:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-import-code{border:1px solid var(--border-default);background:var(--bg-inset);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:300px;margin:8px 0 0;padding:10px 12px;font:11px/1.6 DM Mono,monospace;overflow:auto}.tool-import-warn{border:1px solid var(--warning-border);background:var(--warning-bg);color:var(--warning);overflow-wrap:anywhere;border-radius:9px;margin:8px 0 0;padding:9px 11px;font:11px/1.65 Manrope}.tool-import-warn b{color:var(--warning)}.tool-import-note{border:1px solid var(--border-subtle);background:var(--bg-raised);color:var(--text-secondary);overflow-wrap:anywhere;border-radius:9px;margin:8px 0 0;padding:9px 11px;font:11px/1.65 Manrope}.tool-import-note b{color:var(--text-primary)}.tool-share-actions{grid-template-columns:1fr 1fr;gap:8px;margin:12px 0 0;display:grid}.tools-settings-btn{border:1px dashed var(--border-default);width:100%;color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:10px;margin-top:10px;padding:9px 10px;font:600 11px Manrope;display:block}.tools-settings-btn:hover{border-color:var(--border-strong);color:var(--text-primary)}.tools-settings-btn:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-overlay{z-index:60;background:var(--overlay);place-items:center;padding:16px;display:grid;position:fixed;inset:0}.tool-dialog{border:1px solid var(--border-default);background:var(--bg-raised);width:min(760px,100%);max-height:min(86vh,760px);box-shadow:0 25px 60px var(--shadow-faint);border-radius:14px;flex-direction:column;display:flex;overflow:auto}.tool-dialog-head{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:13px 14px;display:flex}.tool-dialog-title{min-width:0;color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:8px;margin:0;font:700 14px Manrope;display:flex;overflow:hidden}.tool-dialog-glyph{border:1px solid var(--border-default);background:var(--bg-elevated);width:26px;height:26px;color:var(--text-secondary);border-radius:7px;flex:none;place-items:center;font:400 16px/1 Manrope,system-ui,sans-serif;display:grid}.tool-dialog-close{border:1px solid var(--border-default);width:28px;height:28px;color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:8px;flex:none;place-items:center;padding:0;font:13px/1 Manrope;display:grid}.tool-dialog-close:hover{border-color:var(--border-strong);color:var(--text-primary)}.tool-dialog-close:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-dialog-body{min-width:0;padding:14px}.tool-calc{gap:10px;min-width:0;display:grid}.tool-calc-input{text-align:right;min-height:40px;font:15px DM Mono,monospace}.tool-calc-keys{grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;min-width:0;display:grid}.tool-calc-key{border:1px solid var(--border-default);background:var(--bg-elevated);min-width:0;min-height:44px;color:var(--text-primary);cursor:pointer;border-radius:9px;padding:0;font:600 14px Manrope}.tool-calc-key:hover{border-color:var(--border-strong);color:var(--text-primary)}.tool-calc-key:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.tool-calc-result{border:1px solid var(--border-default);background:var(--bg-raised);color:var(--text-secondary);text-align:right;overflow-wrap:anywhere;border-radius:11px;margin:0;padding:14px;font:700 26px DM Mono,monospace}.tool-calc-error{border:1px solid var(--danger-border);background:var(--danger-bg);color:var(--danger);overflow-wrap:anywhere;border-radius:11px;margin:0;padding:12px 14px;font:12px/1.6 Manrope}.tool-stamp{gap:8px;min-width:0;display:grid}.tool-stamp-out{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px;margin:0;display:grid}.tool-stamp-out>div{border:1px solid var(--border-default);background:var(--bg-input);border-radius:9px;min-width:0;padding:9px 10px}.tool-stamp-out dt{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font:700 10px DM Mono,monospace}.tool-stamp-out dd{color:var(--text-primary);overflow-wrap:anywhere;margin:5px 0 0;font:600 13px DM Mono,monospace}.tool-stamp-error{border:1px dashed var(--border-default);background:var(--bg-input);color:var(--text-secondary);overflow-wrap:anywhere;border-radius:9px;margin:0;padding:11px 12px;font:11px/1.7 Manrope}.tool-link{gap:10px;min-width:0;display:grid}.tool-link-url{border:1px solid var(--border-default);background:var(--bg-input);min-width:0;color:var(--text-muted);overflow-wrap:anywhere;border-radius:9px;padding:10px 11px;font:12px DM Mono,monospace;display:block}.tool-link-open{border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-primary);border-radius:9px;justify-self:start;padding:9px 14px;font:600 12px Manrope;text-decoration:none}.tool-link-open:hover{border-color:var(--border-strong);color:var(--text-primary)}.tool-link-open:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}@media (width<=700px){.tool-overlay{padding:10px}.tool-calc-keys{grid-template-columns:repeat(3,minmax(0,1fr))}}.workspace-tab-strip,.file-tab-strip,.session-tab-strip{background:var(--bg-inset);border-bottom:1px solid var(--border-subtle);--tab-h:34px;--tab-fs:12px;--tab-close:20px;flex-direction:column;flex:auto;align-items:stretch;gap:0;min-width:0;display:flex;overflow:hidden}.workspace-tab-row,.file-tab-row,.session-tab-row{flex-wrap:nowrap;align-items:stretch;min-width:0;display:flex}.workspace-tab-row+.workspace-tab-row,.file-tab-row+.file-tab-row,.session-tab-row+.session-tab-row{border-top:1px solid var(--border-subtle)}.workspace-tab-strip[data-workspace-tab-frozen],.file-tab-strip[data-file-tab-frozen],.session-tab-strip[data-session-tab-frozen]{outline:1px dashed var(--focus-ring);outline-offset:-1px;border-radius:6px}.workspace-tab,.file-tab,.session-tab{min-width:0;height:var(--tab-h);border:0;border-right:1px solid var(--border-subtle);color:var(--text-muted);font:600 var(--tab-fs) Manrope;cursor:pointer;background:0 0;flex:none;align-items:center;gap:6px;padding:0 8px 0 10px;display:flex}.workspace-tab:hover,.file-tab:hover,.session-tab:hover{background:var(--bg-elevated);color:var(--text-primary)}.workspace-tab:focus-visible,.file-tab:focus-visible,.session-tab:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-2px}.workspace-tab-active,.session-tab-active{background:var(--bg-elevated);color:var(--text-primary);box-shadow:inset 0 -2px 0 var(--focus-ring-glow)}.workspace-tab-label,.file-tab-label,.session-tab-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:auto;min-width:0;overflow:hidden}.workspace-tab-badge,.file-tab-badge{color:var(--text-muted);flex:none;font-size:9px;line-height:1}.workspace-tab-close,.file-tab-close,.session-tab-close{flex:0 0 var(--tab-close);width:var(--tab-close);height:var(--tab-close);color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;margin-right:-2px;padding:0;font:700 13px/1 Manrope;display:flex}.workspace-tab-close:hover,.file-tab-close:hover,.session-tab-close:hover{background:var(--bg-raised);color:var(--danger)}.workspace-tab-close:focus-visible,.file-tab-close:focus-visible,.session-tab-close:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.chat-tab-strip{background:var(--bg-inset);border-bottom:1px solid var(--border-subtle);flex-direction:row;flex:none;align-items:stretch;min-width:0;display:flex;overflow:hidden}.chat-tab-strip>.workspace-tab-strip,.chat-tab-strip>.session-tab-strip,.chat-tab-strip>.file-tab-strip{background:0 0;border-bottom:0;flex:auto;align-self:stretch;min-width:0}.chat-tab-divider{display:none}.file-tab-strip{background:var(--bg-elevated)}.file-tab{color:var(--text-secondary)}.file-tab:before{content:"▤";color:var(--text-muted);flex:none;font:600 10px/1 DM Mono,monospace}.file-tab:hover{background:var(--bg-hover);color:var(--text-primary)}.file-tab:hover:before{color:var(--text-primary)}.file-tab-active{background:var(--tab-active-bg);color:var(--text-primary);box-shadow:inset 0 -2px 0 var(--warning)}.file-tab-active:before{color:var(--warning)}.file-tab-active .file-tab-badge,.file-tab-active .file-tab-close{color:var(--text-primary)}.file-tab-active .file-tab-close:hover{background:var(--danger-bg);color:var(--danger)}.file-tab-close{color:var(--text-muted)}.file-tab-close:hover{background:var(--danger-bg);color:var(--danger)}.file-tab:focus-visible{outline:1px solid var(--warning);outline-offset:-2px}.file-tab-close:focus-visible{outline:1px solid var(--warning);outline-offset:1px}.file-open-mark{color:var(--warning);flex:none;font-size:9px;line-height:1}.chat>header{gap:14px;padding:10px 0 9px}.chat-head{flex:1;align-items:baseline;gap:10px;min-width:0;display:flex;overflow:hidden}.chat-head h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-size:15px;line-height:1.35;overflow:hidden}.chat-head p{text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:100%;margin:0;overflow:hidden}.chat>header .badge{flex:none;padding:4px 8px}.files-panel{flex-direction:column;gap:9px;padding-top:13px;display:flex}.files-search{align-items:center;gap:6px;display:flex}.files-search-input{box-sizing:border-box;border:1px solid var(--border-subtle);background:var(--bg-input);min-width:0;color:var(--text-primary);border-radius:8px;flex:auto;padding:5px 9px;font:11px Manrope}.files-search-input:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.files-refresh{border:1px solid var(--border-subtle);background:var(--bg-elevated);width:26px;height:26px;color:var(--text-secondary);cursor:pointer;border-radius:8px;flex:none;font-size:13px;line-height:1}.files-refresh:hover{border-color:var(--border-strong);color:var(--text-primary)}.files-refresh:disabled{opacity:.4;cursor:not-allowed}.files-refresh:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.files-tree{border:1px solid var(--border-subtle);background:var(--bg-input);border-radius:9px;min-width:0;max-height:min(300px,38vh);padding:4px 0;overflow:auto}.file-list,.file-children{min-width:0;margin:0;padding:0;list-style:none}.file-row{box-sizing:border-box;width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;min-width:0;padding:3px 8px;font:11px Manrope;display:flex}.file-row:hover:not(:disabled){background:var(--bg-elevated);color:var(--text-primary)}.file-row:disabled{cursor:not-allowed;color:var(--text-muted)}.file-row:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-2px}.file-caret{width:10px;color:var(--text-muted);flex:0 0 10px;font-size:9px;line-height:1}.file-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.file-badge,.picker-option-badge{border:1px solid var(--border-default);color:var(--text-muted);white-space:nowrap;border-radius:5px;flex:none;padding:1px 5px;font:9px DM Mono,monospace}.file-badge-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:0 auto;font:9px DM Mono,monospace;overflow:hidden}.file-row-loading,.file-row-empty,.file-row-error{color:var(--text-muted);padding:3px 10px;font:10px/1.6 Manrope;display:block}.file-row-error{color:var(--danger);overflow-wrap:anywhere}.file-search-note{border:1px dashed var(--border-default);color:var(--text-muted);overflow-wrap:anywhere;border-radius:8px;margin:0 0 5px;padding:5px 8px;font:10px/1.6 Manrope}.file-problem{border-style:solid;border-left:3px solid var(--danger-border)}.file-problem-title{color:var(--danger);margin:0 0 4px;font:600 11px/1.6 Manrope}.file-problem-hint{color:var(--text-muted);margin:0 0 5px;font:10px/1.7 Manrope}.file-problem-path{background:var(--bg-inset);color:var(--text-primary);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;border-radius:7px;margin:0;padding:5px 7px;font:10px/1.6 DM Mono,monospace;display:block}.files-footnote{color:var(--text-muted);overflow-wrap:anywhere;margin:2px 0 0;font:10px/1.6 Manrope}.file-editor{flex-direction:column;gap:7px;min-width:0;display:flex}.file-editor-head{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.file-editor-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:auto;font:10px DM Mono,monospace;overflow:hidden}.file-editor-flags{flex:none;align-items:center;gap:7px;display:flex}.file-dirty{color:var(--warning);font:9px DM Mono,monospace}.file-save{border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;border-radius:7px;padding:3px 10px;font:700 10px Manrope}.file-save:hover{border-color:var(--border-strong);color:var(--text-primary)}.file-save:disabled{opacity:.5;cursor:not-allowed}.file-save:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.file-conflict{border:1px solid var(--warning-border);border-left:3px solid var(--warning-border);background:var(--warning-bg);border-radius:9px;padding:8px 10px}.file-conflict p{color:var(--warning);margin:0 0 7px;font:11px/1.6 Manrope}.file-conflict-actions{flex-wrap:wrap;gap:6px;display:flex}.file-conflict-actions button{border:1px solid var(--warning-border);background:var(--warning-bg);color:var(--warning);cursor:pointer;border-radius:7px;padding:3px 9px;font:600 10px Manrope}.file-conflict-actions button:hover{border-color:var(--warning-border)}.file-conflict-actions button:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.file-editor-message{overflow-wrap:anywhere;margin:0;font:10px/1.6 Manrope}.file-message-saved{color:var(--success)}.file-message-error{color:var(--danger)}.file-textarea-highlight-wrap{box-sizing:border-box;resize:vertical;width:100%;min-width:0;max-width:100%;height:min(340px,42vh);position:relative}.file-textarea-highlight{pointer-events:none;z-index:0;box-sizing:border-box;white-space:pre;tab-size:2;border:1px solid var(--border-subtle);background:var(--bg-inset);border-radius:9px;padding:8px 9px;font:12px/1.65 DM Mono,ui-monospace,monospace;position:absolute;inset:0;overflow:auto}.file-textarea-highlight-wrap>.file-textarea{z-index:1;color:#0000;caret-color:var(--text-primary);background:0 0;border-color:#0000}.file-textarea-highlight-wrap>.file-textarea:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px;border-color:var(--border-subtle)}.file-textarea{box-sizing:border-box;resize:vertical;border:1px solid var(--border-subtle);background:var(--bg-inset);width:100%;min-width:0;max-width:100%;height:min(340px,42vh);color:var(--text-primary);white-space:pre;tab-size:2;border-radius:9px;padding:8px 9px;font:12px/1.65 DM Mono,ui-monospace,monospace;overflow:auto}.file-textarea:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.git-panel{flex-direction:column;gap:9px;padding-top:13px;display:flex}.git-head{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.git-branch{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font:700 12px Manrope;overflow:hidden}.git-ahead-behind{color:var(--text-muted);white-space:nowrap;font:11px DM Mono,monospace}.git-refresh{border:1px solid var(--border-subtle);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;border-radius:8px;min-width:0;padding:3px 9px;font:700 11px Manrope}.git-refresh:hover{background:var(--bg-hover)}.git-refresh:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.git-group-head{color:var(--text-secondary);letter-spacing:.02em;margin-top:4px;font:700 11px Manrope}.git-file-row{box-sizing:border-box;width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;align-items:center;gap:6px;min-width:0;padding:3px 8px;font:11px Manrope;display:flex}.git-file-row:hover:not(:disabled){background:var(--bg-elevated)}.git-file-row:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-2px}.git-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.git-diff{border:1px solid var(--border-subtle);background:var(--bg-inset);min-width:0;max-height:min(320px,40vh);color:var(--text-primary);white-space:pre;border-radius:9px;margin:0;padding:8px 10px;font:11px/1.6 DM Mono,monospace;overflow:auto}.git-log{border:1px solid var(--border-subtle);background:var(--bg-input);border-radius:9px;flex-direction:column;gap:2px;min-width:0;max-height:min(240px,30vh);padding:4px 0;display:flex;overflow:auto}.git-log-row{color:var(--text-primary);min-width:0;padding:3px 8px;font:11px Manrope}.git-log-meta{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font:10px DM Mono,monospace;overflow:hidden}.git-error{border:1px solid var(--border-subtle);background:var(--bg-input);color:var(--text-primary);border-radius:9px;padding:8px 10px;font:11px Manrope}.git-state-card{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);border-radius:11px;grid-template-columns:24px minmax(0,1fr);gap:5px 9px;padding:14px 12px;display:grid}.git-state-card-empty{border-color:var(--border-subtle);background:linear-gradient(145deg,var(--bg-input),var(--bg-raised))}.git-state-icon{border:1px solid var(--border-default);width:24px;height:24px;color:var(--text-secondary);border-radius:7px;grid-row:span 2;place-items:center;font:700 17px DM Mono,monospace;display:grid}.git-state-card strong{align-self:end;font:700 12px Manrope}.git-state-card p{color:var(--text-secondary);grid-column:2;margin:0;font:11px/1.6 Manrope}.git-state-action{border:1px solid var(--border-default);color:var(--text-primary);cursor:pointer;background:0 0;border-radius:7px;grid-column:2;justify-self:start;margin-top:4px;padding:5px 9px;font:600 11px Manrope}.git-state-action:hover{background:var(--bg-hover)}.chat>.chat-file-view{max-width:none;padding:32px 24px}.chat-file-view{flex-direction:column;flex:auto;min-height:0;display:flex}.chat-file-view>.file-editor{flex:auto;min-height:0}.chat-file-view>.file-editor>.file-textarea-highlight-wrap{resize:none;flex:auto;height:auto;min-height:120px}.chat-file-view>.file-editor>.file-textarea{flex:auto;height:auto;min-height:120px}@media (width<=700px){.chat-file-view{padding:14px 6px}}.chat-view{border:1px solid var(--border-default);min-width:0;color:var(--text-secondary);white-space:nowrap;border-radius:7px;flex:0 auto;align-items:baseline;gap:6px;padding:3px 9px;display:flex}.chat-view:before{content:"";background:var(--selected);border-radius:50%;flex:0 0 6px;width:6px;height:6px}.chat-view-label{color:var(--text-muted);font:10px DM Mono,monospace}.chat-view-kind{color:var(--text-primary);font:700 11px Manrope}.chat-view-name{text-overflow:ellipsis;min-width:0;color:var(--text-muted);font:10px DM Mono,monospace;overflow:hidden}.chat-view-file:before{background:var(--warning)}.chat-view-name{max-width:30ch}.conversation-fork{width:20px;height:20px;color:var(--text-secondary);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:5px;flex:0 0 20px;place-items:center;font-size:13px;line-height:1;transition:color .12s,background .12s;display:grid}.conversation-row:hover .conversation-fork,.conversation-row:focus-within .conversation-fork,.conversation-archived:hover .conversation-fork,.conversation-archived:focus-within .conversation-fork,.conversation-fork:focus-visible{opacity:1}.conversation-row:has(.conversation.selected) .conversation-fork{opacity:1}.conversation-fork:hover{background:var(--bg-hover);color:var(--text-primary)}.conversation-fork:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.conversation-fork[data-fork-state=pending]{opacity:1;color:var(--warning);cursor:progress}.conversation-fork:disabled{cursor:progress}.conversation-fork:disabled:hover{color:var(--text-muted);background:0 0}.rail-resizer{z-index:5;cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;border:0;width:10px;padding:0;position:absolute;top:0;bottom:0}.rail-resizer:before{content:"";background:0 0;width:1px;transition:background .12s,width .12s;position:absolute;left:50%;transform:translate(-50%)}.rail-resizer-left{left:calc(var(--sidebar-width,270px) - 5px)}.rail-resizer-right{right:calc(var(--rail-col,320px) - 5px)}.rail-resizer:hover:before,.rail-resizer:focus-visible:before{background:var(--border-strong);width:2px}.rail-resizer:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px}.rail-resizer.rail-resizer-dragging:before{background:var(--selected);width:3px;transition:none}@media (width<=1100px){.rail-resizer-right{display:none}}@media (width<=700px){.rail-resizer-left{display:none}}@media (prefers-reduced-motion:reduce){.rail-resizer:before{transition:none}}.chat{max-width:1680px}.chat>:not(.messages),.chat>.chat-tab-strip{width:100%;max-width:none;margin-inline:0;padding-inline:0}.chat-tab-strip>.workspace-tab-strip>.workspace-tab-row,.chat-tab-strip>.session-tab-strip>.session-tab-row,.chat-tab-strip>.file-tab-strip>.file-tab-row{width:100%;max-width:none;margin-inline:0}.messages{grid-template-columns:minmax(0,1fr);padding:32px 24px}.messages>*,.message-body{min-width:0}.message.assistant .message-body{width:100%}.message.assistant .content{min-width:0}.message.user{grid-template-columns:minmax(0,1fr) 34px}.message.user .avatar{letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;border-radius:16px;width:auto;min-width:32px;max-width:88px;height:32px;padding:0 10px;font-size:11px;overflow:hidden}.message.user>.message-body{flex-direction:column;grid-area:1/1;align-items:flex-end;min-width:0;max-width:100%;display:flex}.message.user .meta{color:var(--text-secondary);margin:0 0 5px;font-size:11px;font-weight:600}.bubble{border:1px solid var(--border-default);background:var(--bg-raised);overflow-wrap:anywhere;border-radius:14px;width:fit-content;min-width:0;max-width:min(78%,720px);padding:10px 14px}.message.user .content{min-width:0}.message-actions{opacity:.42;align-items:center;gap:6px;margin-top:5px;transition:opacity .12s;display:flex}.message.user:hover .message-actions,.message.user:focus-within .message-actions,.message-actions:focus-within{opacity:1}@media (hover:none){.message-actions{opacity:1}}.message.tool{grid-template-columns:minmax(0,1fr)}.message.tool>.message-body{flex-direction:column;grid-area:1/1;align-items:stretch;gap:6px;min-width:0;max-width:100%;display:flex}.message.tool[data-tool-state=error] .bg-result-toggle{color:var(--danger)}.bg-result-head{width:100%}.bg-result-toggle{border:1px solid var(--border-default);border-left:3px solid var(--info);background:var(--bg-raised);width:100%;color:var(--text-primary);cursor:pointer;text-align:left;border-radius:8px;align-items:center;gap:10px;padding:8px 12px;font:12px Manrope;transition:background .12s,border-color .12s;display:flex}.message.tool[data-tool-state=error] .bg-result-toggle{border-left-color:var(--danger)}.bg-result-toggle:hover{background:var(--bg-elevated);border-color:var(--border-strong)}.bg-result-glyph{color:var(--info);flex:none;font-size:14px;line-height:1}.message.tool[data-tool-state=error] .bg-result-glyph{color:var(--danger)}.bg-result-label{color:var(--text-primary);letter-spacing:.04em;flex:none;font-size:11px;font-weight:700}.bg-result-summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);flex:auto;font-size:12px;overflow:hidden}.bg-result-preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:42%;color:var(--text-muted);flex:none;font:11px DM Mono,monospace;overflow:hidden}.bg-result-chevron{color:var(--text-muted);flex:none;font-size:12px;line-height:1}.bg-result-body{margin:0;padding:0}.bg-result-pre{border:1px solid var(--border-default);background:var(--bg-inset);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:360px;margin:0;padding:10px 12px;font:11px DM Mono,monospace;overflow:auto}.message-copy,.message-revert{opacity:1;border:1px solid var(--border-default);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;margin-left:0;padding:2px 8px;font:11px Manrope;transition:opacity .12s,color .12s,border-color .12s}.message-copy:hover,.message-revert:hover{color:var(--text-primary);border-color:var(--border-strong)}.message-copy:focus-visible,.message-revert:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.message-copy[data-copy-state=copied]{color:var(--success);border-color:var(--success)}.message-copy[data-copy-state=error]{color:var(--danger);border-color:var(--danger-border)}.mobile-nav{display:none}@media (width<=700px){html,body,#root{width:100%;min-width:0;height:100%;overflow:hidden}.shell{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr);height:100dvh;min-height:0;overflow:hidden}aside{max-height:min(34dvh,250px);padding:8px 10px 6px;overflow:hidden}.brand{padding:2px 4px 8px}.brand>span{width:30px;height:30px;font-size:22px}.brand small{display:none}.sidebar-actions{display:block}.workspace-new{width:100%;min-height:42px;padding:9px 11px}.label{margin:10px 4px 6px;font-size:11px}nav{scrollbar-gutter:stable;gap:4px;max-height:min(22dvh,160px)}.workspace-group{padding-bottom:4px}.workspace-toggle,.conversation,.archived-toggle{min-height:42px}.workspace-toggle{padding:7px 5px}.workspace-add,.workspace-settings,.workspace-delete,.conversation-fork,.conversation-archive,.conversation-restore{min-width:38px;min-height:38px}.conversation{gap:6px;padding:7px 5px 7px 7px}aside footer{display:none}.chat{min-width:0;max-width:none;padding:0 10px}header{gap:8px;padding:10px 0 9px}header h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:72%;font-size:16px;overflow:hidden}header p{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.badge{flex:none;padding:6px 8px}.messages{overscroll-behavior:contain;gap:18px;padding:14px 0 12px}.message{grid-template-columns:30px minmax(0,1fr);gap:9px}.avatar{width:30px;height:30px}.content{overflow-wrap:anywhere;font-size:14px;line-height:1.65}form{margin-bottom:max(8px, env(safe-area-inset-bottom));border-radius:11px}textarea{height:72px;min-height:72px;padding:12px;font-size:16px}.composer{min-height:48px;padding:5px 8px 8px 12px}.composer button{min-height:40px;padding:9px 15px}.chat-tab-strip{min-height:36px}.workspace-tab,.file-tab,.session-tab{height:40px;min-height:40px;padding-inline:9px}.right-rail{width:min(94vw,380px);max-width:100vw}.right-rail-head{min-height:52px;padding:8px 9px 0}.right-tab{min-height:42px;padding:9px 11px}.right-rail-collapse,.right-rail-open{min-width:40px;min-height:40px}.right-rail-body{padding:0 10px max(14px, env(safe-area-inset-bottom))}.tool-overlay{padding:8px}.tool-dialog{border-radius:12px;width:100%;max-height:calc(100dvh - 16px)}.mobile-nav{z-index:30;inset-inline:0;height:calc(58px + env(safe-area-inset-bottom));padding:4px 8px env(safe-area-inset-bottom);background:var(--bg-panel);border-top:1px solid var(--border-subtle);justify-content:space-around;gap:6px;display:flex;position:fixed;bottom:0}.mobile-nav button{color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:1;place-items:center;gap:1px;font-size:17px;display:grid}.mobile-nav button span{font:10px Manrope}.mobile-nav button.active{color:var(--selected);background:var(--selected-bg)}.shell{padding-bottom:calc(58px + env(safe-area-inset-bottom))}.shell.mobile-panel-workspaces>.chat,.shell.mobile-panel-workspaces>.right-rail{display:none}.shell.mobile-panel-workspaces>aside{height:100%;max-height:none;display:flex;overflow:auto}.shell.mobile-panel-chat>aside,.shell.mobile-panel-chat>.right-rail{display:none}.shell.mobile-panel-chat>.chat{grid-column:1}.shell.mobile-panel-rail>aside,.shell.mobile-panel-rail>.chat{display:none}.shell.mobile-panel-rail>.right-rail{width:100%;max-width:none;box-shadow:none;grid-column:1;display:flex;position:static}.shell.mobile-panel-rail>.right-rail .right-rail-open{display:none}}@media (width<=380px){aside{max-height:30dvh}nav{max-height:18dvh}.chat{padding-inline:8px}header p{display:none}.message{grid-template-columns:26px minmax(0,1fr);gap:7px}.avatar{width:26px;height:26px}.session-tab,.file-tab,.workspace-tab{padding-inline:7px}}@supports not selector(::-webkit-scrollbar){:root{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}}nav::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.messages::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.picker-list::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.extui::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.extui-widget::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.subagent-output::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.call-args::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.right-rail-body::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.tool-dialog::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.files-tree::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.md-pre::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.file-textarea::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.md-table-wrap::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.md-math-block::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.queue-dock-list::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}nav::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.messages::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.picker-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.extui::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.extui-widget::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.subagent-output::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.call-args::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.right-rail-body::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.tool-dialog::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.files-tree::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.md-pre::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.file-textarea::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.md-table-wrap::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.md-math-block::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.queue-dock-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}nav:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.messages:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.picker-list:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.extui:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.extui-widget:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.subagent-output:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.call-args:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.right-rail-body:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.tool-dialog:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.files-tree:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.md-pre:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.file-textarea:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.md-table-wrap:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.md-math-block:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.queue-dock-list:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}nav::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.messages::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.picker-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.extui::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.extui-widget::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.subagent-output::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.call-args::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.right-rail-body::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.tool-dialog::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.files-tree::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.md-pre::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.file-textarea::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.md-table-wrap::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.md-math-block::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.queue-dock-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}nav::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.messages::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.picker-list::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.extui::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.extui-widget::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.subagent-output::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.call-args::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.right-rail-body::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.tool-dialog::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.files-tree::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.md-pre::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.file-textarea::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.md-table-wrap::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.md-math-block::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.queue-dock-list::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}nav,.messages,.picker-list,.extui,.extui-widget,.subagent-output,.call-args,.queue-dock-list,.right-rail-body,.tool-dialog,.files-tree{scrollbar-gutter:stable}.theme-settings-trigger{border:1px solid var(--border-default);background:var(--bg-raised);width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;border-radius:8px;align-items:center;gap:7px;padding:7px 8px;font:11px DM Mono,monospace;transition:background .12s,border-color .12s,color .12s;display:flex}.theme-settings-trigger:hover{background:var(--bg-hover);border-color:var(--border-strong);color:var(--text-primary)}.theme-settings-trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-1px}.theme-settings-trigger[aria-expanded=true]{background:var(--bg-hover);border-color:var(--border-strong);color:var(--text-primary)}.settings-window{flex-direction:column;width:min(720px,100vw - 32px);height:min(540px,100vh - 80px);padding:0;display:flex}.settings-window-head{flex:none;padding:18px 20px 0}.settings-window-body{border-top:1px solid var(--border-subtle);flex:auto;grid-template-columns:156px minmax(0,1fr);min-height:0;margin-top:13px;display:grid;overflow:hidden}.settings-nav{border-right:1px solid var(--border-subtle);background:var(--bg-panel);align-content:start;gap:2px;padding:14px 10px;display:grid}.settings-nav-label{letter-spacing:.13em;text-transform:uppercase;color:var(--text-muted);padding:0 9px 7px;font:700 10px Manrope}.settings-category{width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;padding:8px 9px;font:600 12px Manrope}.settings-category:hover{background:var(--bg-hover);color:var(--text-primary)}.settings-category:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px}.settings-category[aria-selected=true]{background:var(--selected-bg);color:var(--text-primary);box-shadow:inset 2px 0 0 var(--selected-border)}.settings-panel{flex-direction:column;flex:auto;align-content:start;min-width:0;max-width:100%;min-height:0;padding:16px 20px 20px;display:flex;overflow-y:auto}.settings-panel-title{color:var(--text-primary);margin:0 0 2px;font:600 13px Manrope}.settings-window .picker-actions{margin-top:20px}.theme-options{flex-direction:column;gap:8px;margin:16px 0 0;display:flex}.theme-option{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;text-align:left;border-radius:11px;grid-template-columns:auto 1fr;align-items:center;gap:12px;padding:10px 12px;display:grid;position:relative}.theme-option:hover{border-color:var(--border-strong)}.theme-option:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.theme-option[aria-pressed=true]{border-color:var(--selected-border);box-shadow:0 0 0 1px var(--selected-border)}.theme-preview-strip{background:var(--bg-app);border-radius:3px;flex-direction:column;flex-shrink:0;gap:2px;width:6px;height:32px;display:flex;overflow:hidden}.theme-preview-strip:before{content:"";background:var(--accent);flex:1}.theme-preview-strip:after{content:"";background:var(--bg-raised);flex:1}.theme-option-name{align-items:baseline;gap:8px;min-width:0;font:600 13px Manrope;display:flex}.theme-option-blurb{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;flex:auto;font:11px/1.4 DM Mono,monospace;overflow:hidden}.theme-option-current{letter-spacing:.06em;color:var(--selected);align-items:center;gap:4px;margin-left:auto;font:700 10px Manrope;display:inline-flex}.theme-current-line{margin-top:10px}.theme-empty{text-align:center;color:var(--text-muted);overflow-wrap:anywhere;padding:26px 14px;font:11px DM Mono,monospace}@media (width<=620px){.settings-window-body{grid-template-columns:1fr}.settings-nav{border-right:0;border-bottom:1px solid var(--border-subtle);grid-auto-columns:max-content;grid-auto-flow:column;justify-content:start;padding:10px}.settings-nav-label{align-self:center;padding:0 9px 0 0}}.settings-agents-container{gap:16px;min-width:0;display:grid}.settings-agents-header{background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:10px;justify-content:space-between;align-items:flex-start;gap:14px;padding:12px 14px;display:flex}.settings-agents-desc{color:var(--text-secondary);flex:1;margin:0;font-size:12px;line-height:1.6}.settings-agent-rescan-btn{background:var(--bg-input);border:1px solid var(--border-default);color:var(--text-primary);cursor:pointer;border-radius:8px;flex-shrink:0;padding:6px 12px;font:600 12px Manrope}.settings-agent-rescan-btn:hover{background:var(--bg-hover);border-color:var(--border-strong)}.settings-agent-rescan-btn:disabled{opacity:.5;cursor:not-allowed}.settings-section{gap:10px;display:grid}.settings-section-title{color:var(--text-primary);letter-spacing:.02em;margin:0;font:600 12px Manrope}.settings-dirs-list{gap:6px;display:grid}.settings-dir-row{border:1px solid var(--border-default);background:var(--bg-input);border-radius:8px;justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:8px 12px;display:flex}.settings-dir-info{flex:1;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.settings-dir-priority{color:var(--text-muted);flex-shrink:0;font:700 11px DM Mono,monospace}.settings-dir-path{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font:12px DM Mono,monospace;overflow:hidden}.settings-dir-tag{border:1px solid var(--border-subtle);background:var(--bg-raised);color:var(--text-secondary);border-radius:4px;flex-shrink:0;padding:2px 6px;font:10px Manrope}.settings-dir-count{color:var(--text-muted);flex-shrink:0;font:11px Manrope}.settings-dir-remove-btn{border:1px solid var(--danger-border);background:var(--danger-bg);color:var(--danger);cursor:pointer;border-radius:6px;flex-shrink:0;padding:3px 8px;font:11px Manrope}.settings-dir-remove-btn:hover{filter:brightness(1.1)}.settings-add-dir-form{gap:8px;display:flex}.settings-dir-input{border:1px solid var(--border-default);background:var(--bg-input);min-width:0;color:var(--text-primary);border-radius:8px;outline:0;flex:1;padding:8px 11px;font:12px DM Mono,monospace}.settings-dir-input:focus{border-color:var(--focus-ring)}.settings-dir-add-btn{border:1px solid var(--border-default);background:var(--bg-hover);color:var(--text-primary);cursor:pointer;border-radius:8px;flex-shrink:0;padding:8px 14px;font:600 12px Manrope}.settings-dir-add-btn:hover:not(:disabled){border-color:var(--border-strong)}.settings-dir-add-btn:disabled{opacity:.4;cursor:not-allowed}.settings-dir-error{color:var(--danger);font:11px Manrope}.settings-problems-section{border:1px solid var(--warning-border);background:var(--warning-bg);border-radius:10px;padding:12px}.settings-problems-title{color:var(--warning)}.settings-problems-list{color:var(--text-primary);gap:4px;font:11px DM Mono,monospace;display:grid}.settings-problem-row{overflow-wrap:anywhere}.settings-problem-file{color:var(--warning);font-weight:700}.settings-empty-hint{color:var(--text-muted);border:1px dashed var(--border-subtle);text-align:center;border-radius:8px;padding:14px;font:12px Manrope}.settings-agent-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;max-height:260px;padding-right:4px;display:grid;overflow-y:auto}.settings-agent-card{border:1px solid var(--border-default);background:var(--bg-input);border-radius:9px;gap:6px;padding:10px 12px;display:grid}.settings-agent-card:hover{border-color:var(--border-strong)}.settings-agent-card-header{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.settings-agent-name{color:var(--text-primary);font:600 13px Manrope}.settings-agent-id{color:var(--text-muted);font:11px DM Mono,monospace}.settings-agent-mode-badge{border:1px solid var(--border-subtle);background:var(--bg-raised);color:var(--text-secondary);border-radius:99px;margin-left:auto;padding:1px 6px;font:10px Manrope}.settings-agent-mode-badge.subagent{color:var(--info);border-color:var(--info)}.settings-agent-source{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font:10px DM Mono,monospace;overflow:hidden}.settings-agent-desc{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font:11px/1.4 Manrope;display:-webkit-box;overflow:hidden}.settings-agent-footer{border-top:1px solid var(--border-subtle);color:var(--text-muted);justify-content:space-between;align-items:center;gap:6px;padding-top:6px;font:10px DM Mono,monospace;display:flex}.settings-agent-tools{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.settings-agent-model{color:var(--text-secondary);flex-shrink:0}.restart-needed-trigger{border-color:var(--warning-border);color:var(--warning);background:var(--warning-bg)}.restart-needed-trigger:hover{border-color:var(--warning)}.chevron-folder{text-align:center;font-size:15px;line-height:1}.workspace-toggle>.chevron-folder,.archived-toggle>.chevron-folder{flex:none;min-width:auto;overflow:visible}.ctx-menu{z-index:45;border:1px solid var(--border-default);background:var(--bg-raised);min-width:190px;max-width:min(320px,100vw - 16px);box-shadow:0 12px 32px var(--shadow-faint);border-radius:10px;gap:1px;padding:5px;display:grid;position:fixed}.ctx-menu-item{width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;padding:7px 10px;font:12px Manrope;display:block}.ctx-menu-item:hover{background:var(--bg-hover)}.ctx-menu-item:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.ctx-menu-hint{color:var(--text-muted);overflow-wrap:anywhere;padding:2px 10px 4px;font:10px DM Mono,monospace}.toasts{z-index:55;pointer-events:none;justify-items:end;gap:8px;width:max-content;max-width:min(360px,100vw - 32px);margin:0;display:grid;position:fixed;top:14px;right:16px}.toast{pointer-events:auto;border:1px solid var(--border-default);background:var(--bg-raised);min-width:0;color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;box-shadow:0 10px 24px var(--shadow-faint);border-radius:10px;padding:10px 13px;font-size:12px;line-height:1.6}.toast-info{border-color:var(--info)}.toast{pointer-events:auto;box-shadow:0 10px 28px var(--shadow-faint)}.workspace-picker{width:min(580px,100vw - 32px)}.knowledge-picker{width:min(620px,100vw - 32px)}.knowledge-picker .picker-dir[aria-pressed=true]{border-color:var(--focus-ring);background:var(--bg-hover);color:var(--text-primary)}.picker-path-bar{gap:7px;margin-bottom:8px;display:flex}.picker-path-input{border:1px solid var(--border-default);background:var(--bg-input);min-width:0;color:var(--text-primary);border-radius:8px;outline:0;flex:1;padding:7px 10px;font:12px DM Mono,monospace}.picker-path-input:focus{border-color:var(--focus-ring)}.picker-go-btn{border:1px solid var(--border-default);background:var(--bg-hover);color:var(--text-primary);cursor:pointer;border-radius:8px;flex-shrink:0;padding:7px 13px;font:600 12px Manrope}.picker-go-btn:hover:not(:disabled){border-color:var(--border-strong)}.picker-go-btn:disabled{opacity:.4;cursor:not-allowed}.picker-up-btn{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-secondary);cursor:pointer;border-radius:8px;flex-shrink:0;padding:7px 11px;font:12px Manrope}.picker-up-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-strong)}.picker-up-btn:disabled{opacity:.4;cursor:not-allowed}.picker-shortcuts{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:9px;display:flex}.picker-shortcuts-label{color:var(--text-muted);font:11px Manrope}.picker-shortcut{border:1px solid var(--border-subtle);background:var(--bg-input);color:var(--text-secondary);cursor:pointer;border-radius:6px;padding:3px 8px;font:11px DM Mono,monospace}.picker-shortcut:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-default)}.message-images{flex-wrap:wrap;gap:8px;margin-bottom:8px;display:flex}.message-image-btn{border:1px solid var(--border-default);background:var(--bg-raised);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;max-width:240px;max-height:180px;padding:0;transition:border-color .12s;display:inline-flex;overflow:hidden}.message-image-btn:hover{border-color:var(--border-strong)}.message-image-btn:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.message-image-thumb{object-fit:cover;border-radius:7px;max-width:100%;max-height:180px;display:block}.composer-dropzone-active{outline:2px dashed var(--border-strong);outline-offset:-2px}.composer-attachments{border-top:1px solid var(--border-subtle);background:var(--bg-raised);flex-wrap:wrap;gap:8px;padding:8px 14px;display:flex}.composer-attachment-item{background:var(--bg-panel);border:1px solid var(--border-default);color:var(--text-secondary);border-radius:6px;align-items:center;gap:6px;max-width:220px;padding:3px 8px;font:11px DM Mono,monospace;display:inline-flex}.composer-attachment-thumb{object-fit:cover;cursor:pointer;border-radius:4px;flex-shrink:0;width:26px;height:26px}.composer-attachment-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.composer-attachment-remove{color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:3px;flex-shrink:0;padding:1px 4px;font-size:11px;line-height:1}.composer-attachment-remove:hover{color:var(--danger);background:var(--bg-hover)}.composer-attachment-uploading{color:var(--text-muted);font:italic 11px Manrope}.composer-attachment-skill{border-left:2px solid var(--info)}.composer-attachment-glyph{color:var(--info);flex:none;font-size:13px;line-height:1}.message-attachments{flex-direction:column;align-self:flex-end;gap:6px;width:fit-content;max-width:min(78%,720px);margin-top:8px;display:flex}.message-attachment{border:1px solid var(--border-default);border-left:3px solid var(--info);background:var(--bg-raised);border-radius:8px;overflow:hidden}.message-attachment-head{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:9px;padding:7px 11px;font:12px Manrope;display:flex}.message-attachment-head:hover{background:var(--bg-elevated)}.message-attachment-glyph{color:var(--info);flex:none;font-size:13px;line-height:1}.message-attachment-label{color:var(--text-primary);letter-spacing:.04em;flex:none;font-size:11px;font-weight:700}.message-attachment-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);flex:auto;font-size:12px;overflow:hidden}.message-attachment-chevron{color:var(--text-muted);flex:none;font-size:12px;line-height:1}.message-attachment-body{border-top:1px solid var(--border-subtle);background:var(--bg-inset);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:360px;margin:0;padding:10px 12px;font:11px DM Mono,monospace;overflow:auto}.composer-hints{align-items:center;gap:10px;min-width:0;display:flex}.composer-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.composer button.composer-attach-btn{border:1px solid var(--border-default);background:var(--bg-panel);color:var(--text-secondary);cursor:pointer;border-radius:6px;align-items:center;gap:4px;padding:4px 9px;font:600 11px Manrope;transition:border-color .12s,color .12s,background .12s;display:inline-flex}.composer button.composer-attach-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-strong)}.composer button.composer-attach-btn:disabled{opacity:.4;cursor:not-allowed}.lightbox-overlay{z-index:70;background:var(--overlay);place-items:center;padding:16px;display:grid;position:fixed;inset:0}.lightbox-dialog{border:1px solid var(--border-strong);background:var(--bg-raised);width:min(900px,100%);max-height:min(90vh,860px);box-shadow:0 25px 60px var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.lightbox-head{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:12px 16px;display:flex}.lightbox-title{min-width:0;color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:8px;margin:0;font:700 13px Manrope;display:flex;overflow:hidden}.lightbox-close{color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:16px;line-height:1;transition:color .12s,background .12s}.lightbox-close:hover{color:var(--text-primary);background:var(--bg-hover)}.lightbox-close:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.lightbox-body{background:var(--bg-inset);justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.lightbox-image{object-fit:contain;border-radius:6px;max-width:100%;max-height:calc(min(90vh,860px) - 70px);display:block}.workflow-card{border:1px solid var(--border-subtle);background:var(--bg-panel);border-radius:8px;margin:8px 0;padding:10px 12px}.workflow-running{border-left:3px solid var(--info)}.workflow-completed{border-left:3px solid var(--success)}.workflow-failed{border-left:3px solid var(--danger)}.workflow-stopped{border-left:3px solid var(--border-strong)}.workflow-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.workflow-badge{color:var(--text-muted);border:1px solid var(--border-subtle);border-radius:999px;flex:none;padding:0 6px;font-size:11px}.workflow-summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:auto;font-size:13px;overflow:hidden}.workflow-progress{color:var(--text-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:12px}.workflow-policy{color:var(--text-muted);flex:none;font-size:11px}.workflow-status{color:var(--text-secondary);flex:none;font-size:12px}.workflow-clock{color:var(--text-muted);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.workflow-stop{color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border);cursor:pointer;border-radius:4px;flex:none;padding:1px 8px;font-size:11px}.workflow-stop:hover{background:var(--bg-hover)}.workflow-stop:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.workflow-steps{flex-direction:column;gap:2px;margin:8px 0 0;padding:0;list-style:none;display:flex}.workflow-step{border-left:2px solid var(--border-subtle);align-items:baseline;gap:8px;padding:3px 6px 3px 8px;font-size:12px;line-height:1.5;display:flex}.workflow-step-completed{border-left-color:var(--success)}.workflow-step-running{border-left-color:var(--info)}.workflow-step-failed{border-left-color:var(--danger)}.workflow-step-skipped{border-left-color:var(--warning)}.workflow-step-stopped{border-left-color:var(--border-strong)}.workflow-step-mark{width:1em;color:var(--text-muted);flex:none;font-size:11px}.workflow-step-completed .workflow-step-mark{color:var(--success)}.workflow-step-running .workflow-step-mark{color:var(--info)}.workflow-step-failed .workflow-step-mark{color:var(--danger)}.workflow-step-skipped .workflow-step-mark{color:var(--warning)}.workflow-step-n{color:var(--text-muted);font-variant-numeric:tabular-nums;flex:none}.workflow-step-name{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.workflow-step-skipped .workflow-step-name,.workflow-step-stopped .workflow-step-name{color:var(--text-muted)}.workflow-step-agent{color:var(--text-muted);flex:none;font-size:11px}.workflow-step-tries{color:var(--warning);flex:none;font-size:11px}.workflow-step-status{color:var(--text-secondary);flex:none;margin-left:auto;font-size:11px}.workflow-step-why{color:var(--danger);flex:1 0 100%;margin:2px 0 0;font-size:11px;line-height:1.5}.help-window{width:min(780px,100vw - 32px)}.help-window-head{justify-content:space-between;align-items:center;padding:18px 20px 0;display:flex}.help-head-title{align-items:center;gap:10px;display:flex}.help-badge{background:var(--bg-hover);color:var(--text-muted);border:1px solid var(--border-subtle);border-radius:4px;padding:2px 6px;font:700 10px DM Mono,monospace}.help-close-button{color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:14px;transition:background .12s,color .12s}.help-close-button:hover{background:var(--bg-hover);color:var(--text-primary)}.help-close-button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-1px}.help-window-body{max-height:min(75vh,640px)}.help-nav{overflow-y:auto}.help-category{align-items:center;gap:8px;display:flex}.help-tab-icon{font-size:13px;line-height:1}.help-panel{max-height:min(75vh,640px);padding:18px 24px;overflow-y:auto}.help-panel-header{border-bottom:1px solid var(--border-subtle);margin-bottom:16px;padding-bottom:12px}.help-panel-title{color:var(--text-primary);margin:0 0 4px;font:700 15px Manrope}.help-panel-desc{color:var(--text-muted);margin:0;font:12px/1.5 DM Mono,monospace}.help-panel-content{flex-direction:column;gap:14px;display:flex}.help-section-group{flex-direction:column;gap:12px;display:flex}.help-card{border:1px solid var(--border-default);background:var(--bg-raised);border-radius:9px;padding:14px 16px}.help-card.highlight{background:var(--bg-elevated);border-color:var(--border-strong)}.help-card h4{color:var(--text-primary);margin:0 0 8px;font:700 13px Manrope}.help-card p{color:var(--text-secondary);margin:0;font:12px/1.6 Manrope,system-ui}.help-list{color:var(--text-secondary);flex-direction:column;gap:6px;margin:8px 0 0;padding-left:18px;font:12px/1.6 Manrope,system-ui;display:flex}.help-steps{flex-direction:column;gap:12px;margin-top:10px;display:flex}.help-step{align-items:flex-start;gap:10px;display:flex}.step-num{background:var(--bg-hover);width:22px;height:22px;color:var(--text-primary);border:1px solid var(--border-default);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font:700 11px DM Mono,monospace;display:flex}.step-body{min-width:0;color:var(--text-secondary);flex:1;font:12px/1.6 Manrope,system-ui}.step-body strong{color:var(--text-primary);margin-bottom:2px;display:block}.help-code-block{background:var(--bg-inset);border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:6px;margin:8px 0 0;padding:10px 12px;font:11px/1.5 DM Mono,monospace;overflow-x:auto}.help-command-table{flex-direction:column;gap:8px;margin-top:8px;display:flex}.cmd-row{background:var(--bg-inset);border:1px solid var(--border-subtle);border-radius:6px;flex-direction:column;gap:3px;padding:8px 10px;font:12px Manrope,system-ui;display:flex}.cmd-row code{color:var(--text-primary);width:fit-content;font:500 11px DM Mono,monospace}.cmd-row span{color:var(--text-muted);font-size:11px}.help-theme-list{grid-template-columns:1fr 1fr;gap:10px;margin-top:10px;display:grid}.help-theme-item{background:var(--bg-inset);border:1px solid var(--border-subtle);border-radius:6px;padding:10px 12px}.help-theme-item strong{color:var(--text-primary);margin-bottom:4px;font:600 12px Manrope;display:block}.help-theme-item p{color:var(--text-muted);margin:0;font:11px/1.5 Manrope}.help-hint{color:var(--text-muted);margin:10px 0 0;font:11px DM Mono,monospace}.help-actions{justify-content:flex-end;margin-top:16px;display:flex}.model-rules-fields{border:0;gap:12px;margin:0;padding:0;display:grid}.model-rules-fields [role=alert]{color:var(--danger)}.settings-panel-container{gap:16px;min-width:0;display:grid}.settings-rule-card{border:1px solid var(--border-default);background:var(--bg-input);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:10px 14px;transition:border-color .15s;display:flex}.settings-rule-card:hover{border-color:var(--border-strong)}.settings-rule-card.editing{border-color:var(--focus-ring);background:var(--bg-raised)}.settings-rule-info{flex:1;align-items:center;gap:10px;min-width:0;display:flex;overflow:hidden}.settings-rule-patterns{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.settings-rule-pill{align-items:center;gap:6px;min-width:0;display:inline-flex}.settings-rule-pill-tag{border:1px solid var(--border-subtle);background:var(--bg-raised);color:var(--text-secondary);border-radius:4px;flex-shrink:0;padding:2px 6px;font:600 10px Manrope}.settings-rule-code{color:var(--text-primary);background:var(--bg-inset);border:1px solid var(--border-subtle);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:180px;padding:3px 7px;font:11px/1.4 DM Mono,monospace;overflow:hidden}.settings-rule-arrow{color:var(--text-muted);flex-shrink:0;font-size:12px;font-weight:700}.settings-rule-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.settings-rule-edit-btn{border:1px solid var(--border-default);background:var(--bg-hover);color:var(--text-primary);cursor:pointer;border-radius:6px;flex-shrink:0;padding:4px 10px;font:600 11px Manrope;transition:border-color .15s}.settings-rule-edit-btn:hover{border-color:var(--border-strong)}.settings-rule-cancel-btn{border:1px solid var(--border-subtle);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:8px;flex-shrink:0;padding:8px 14px;font:500 12px Manrope;transition:color .15s,border-color .15s}.settings-rule-cancel-btn:hover{color:var(--text-primary);border-color:var(--border-default)}.settings-rule-fieldset{border:0;gap:12px;margin:0;padding:0;display:grid}.settings-rule-form-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=600px){.settings-rule-form-grid{grid-template-columns:1fr}}.settings-rule-input-group{gap:6px;display:grid}.settings-rule-label-text{color:var(--text-secondary);letter-spacing:.02em;font:600 11px Manrope}.settings-rule-form-buttons{align-items:center;gap:10px;margin-top:2px;display:flex}.settings-memory-fieldset{border:0;gap:16px;margin:0;padding:0;display:grid}.settings-memory-switches{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.settings-checkbox-label{color:var(--text-primary);cursor:pointer;align-items:center;gap:8px;font:500 12px Manrope;display:inline-flex}.settings-checkbox-label input[type=checkbox]{cursor:pointer;accent-color:var(--selected)}.settings-memory-interval-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.settings-memory-interval-label{color:var(--text-secondary);align-items:center;gap:8px;font:500 12px Manrope;display:inline-flex}.settings-interval-input{text-align:center;width:70px;padding:6px 8px}.settings-memory-category-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.settings-memory-select{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;border-radius:8px;outline:0;padding:6px 12px;font:500 12px Manrope}.settings-memory-select:focus{border-color:var(--focus-ring)}.settings-memory-entries-list{gap:8px;max-height:220px;padding-right:4px;display:grid;overflow-y:auto}.settings-memory-card{border:1px solid var(--border-default);background:var(--bg-input);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:12px;min-width:0;padding:10px 14px;display:flex}.settings-memory-card:hover{border-color:var(--border-strong)}.settings-memory-content{color:var(--text-primary);white-space:pre-wrap;word-break:break-word;flex:1;min-width:0;margin:0;font:12px/1.5 DM Mono,monospace}.settings-memory-card-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.settings-memory-editor{background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:8px;gap:8px;padding:12px 14px;display:grid}.settings-memory-editor-title{color:var(--text-primary);margin:0;font:600 12px Manrope}.settings-memory-textarea{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);resize:vertical;box-sizing:border-box;border-radius:8px;outline:0;min-height:80px;padding:10px 12px;font:12px/1.5 DM Mono,monospace}.settings-memory-textarea:focus{border-color:var(--focus-ring)}.settings-proposal-card{border:1px solid var(--border-default);background:var(--bg-input);border-radius:8px;gap:8px;padding:10px 14px;display:grid}.settings-proposal-header{align-items:center;gap:8px;display:flex}.settings-proposal-badge{border:1px solid var(--info);background:var(--bg-raised);color:var(--info);border-radius:4px;padding:2px 6px;font:600 10px Manrope}.settings-proposal-action{color:var(--text-muted);font:700 11px DM Mono,monospace}.settings-proposal-diff{white-space:pre-wrap;word-break:break-word;border-radius:6px;margin:0;padding:6px 10px;font:11px/1.4 DM Mono,monospace}.settings-proposal-diff.old{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-border)}.settings-proposal-diff.new{background:var(--bg-inset);color:var(--text-primary);border:1px solid var(--border-subtle)}.settings-proposal-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.empty-workspace-select{color:var(--text-secondary);justify-content:center;align-items:center;gap:8px;margin-top:14px;font-size:13px;display:flex}.empty-workspace-select select{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;border-radius:8px;outline:0;padding:6px 12px;font:500 13px Manrope}.empty-workspace-select select:focus{border-color:var(--focus-ring)}.empty-secondary-action{color:var(--text-muted);cursor:pointer;background:0 0;border:0;margin-top:14px;padding:0;font-size:12px;display:block}.empty-secondary-action:hover{color:var(--text-primary);text-decoration:underline}:root{--term-ansi-0:#1c2129;--term-ansi-1:#e05263;--term-ansi-2:#4ec98a;--term-ansi-3:#d9a441;--term-ansi-4:#5aa2f0;--term-ansi-5:#c07ce8;--term-ansi-6:#3fc0c9;--term-ansi-7:#c8d3e0;--term-ansi-8:#5a6675;--term-ansi-9:#ff6b7d;--term-ansi-10:#6ee7a3;--term-ansi-11:#f2c563;--term-ansi-12:#7cbcff;--term-ansi-13:#d9a6ff;--term-ansi-14:#5fe0e8;--term-ansi-15:#eef4fb;--term-bg:#05070c;--term-bg-top:#080b12;--term-fg:#dbe4f0;--term-border:#65718a;--term-highlight:#ffffff0a;--term-shadow:#0000002e;--term-glow:#dbe4f02e}.terminal-panel{flex-direction:column;gap:8px;height:100%;min-height:0;display:flex}.terminal-strip{align-items:stretch;gap:4px;min-width:0;margin:0 -2px;padding:0 2px;display:flex}.terminal-tab{border:1px solid #0000;border-radius:7px 7px 0 0;flex:none;align-items:center;transition:background .12s,border-color .12s;display:inline-flex}.terminal-tab:hover{background:var(--bg-elevated)}.terminal-tab.is-active{background:var(--bg-elevated);border-color:var(--border-default);border-bottom-color:#0000}.terminal-tab-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:5px 4px 5px 9px;font:700 11px Manrope;display:inline-flex}.terminal-tab.is-active .terminal-tab-btn{color:var(--text-primary)}.terminal-tab-close{color:var(--text-muted);cursor:pointer;opacity:0;background:0 0;border:0;padding:4px 7px 5px 2px;font-size:13px;line-height:1}.terminal-tab:hover .terminal-tab-close,.terminal-tab.is-active .terminal-tab-close,.terminal-tab-close:focus-visible{opacity:1}.terminal-tab-close:hover{color:var(--danger)}.terminal-tab-dot{background:var(--border-default);border-radius:50%;flex:0 0 6px;width:6px;height:6px}.terminal-tab-dot-running{background:var(--success)}.terminal-tab-dot-starting,.terminal-tab-dot-checking{background:var(--text-muted);animation:1.1s ease-in-out infinite terminal-status-pulse}.terminal-strip-add{border:1px dashed var(--border-default);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:7px 7px 0 0;flex:none;padding:5px 9px;font-size:13px;line-height:1}.terminal-strip-add:hover{color:var(--text-primary);border-style:solid;border-color:var(--border-strong)}.terminal-toolbar-right{align-items:center;gap:8px;min-width:0;display:inline-flex}.terminal-toolbar{justify-content:space-between;align-items:center;gap:8px;min-height:24px;display:flex}.terminal-status{color:var(--text-secondary);align-items:center;gap:6px;font:600 11px Manrope;display:inline-flex}.terminal-status-dot{background:var(--text-muted);border-radius:50%;flex:0 0 6px;width:6px;height:6px}.terminal-status-running{color:var(--success)}.terminal-status-running .terminal-status-dot{background:var(--success)}.terminal-status-starting,.terminal-status-checking,.terminal-status-exited,.terminal-status-unavailable{color:var(--text-muted)}.terminal-status-starting .terminal-status-dot,.terminal-status-checking .terminal-status-dot{animation:1.1s ease-in-out infinite terminal-status-pulse}.terminal-status-exited .terminal-status-dot{background:var(--border-default)}@keyframes terminal-status-pulse{50%{opacity:.25}}.terminal-cwd{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;margin:0;font:11px DM Mono,monospace;overflow:hidden}.terminal-unavailable{gap:8px;display:grid}.terminal-unavailable-reason{color:var(--text-primary);margin:0;font:500 12px Manrope}.terminal-close-btn,.terminal-restart-btn{border:1px solid var(--border-default);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:3px 9px;font:600 11px Manrope;transition:border-color .15s,color .15s}.terminal-close-btn:hover{border-color:var(--danger-border);color:var(--danger)}.terminal-restart-btn:hover{border-color:var(--border-strong);color:var(--text-primary)}.terminal-surface{background:linear-gradient(180deg,var(--term-bg-top) 0%,var(--term-bg) 100%);border:1px solid var(--term-border);cursor:text;min-height:260px;box-shadow:inset 0 1px 0 var(--term-highlight),0 8px 24px var(--term-shadow);border-radius:10px;outline:0;flex:auto;padding:10px 9px;position:relative;overflow:hidden}.terminal-surface:focus-visible{border-color:var(--focus-ring);box-shadow:0 0 0 2px var(--focus-ring-glow)}.tool-link-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.tool-link-copy-prompt{border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-secondary);cursor:pointer;border-radius:6px;padding:6px 10px}.tool-link-copy-prompt:hover{color:var(--text-primary);border-color:var(--border-strong)}.tool-link-frame{border:1px solid var(--border-default);background:var(--bg-inset);border-radius:8px;width:100%;height:360px;margin-top:14px;display:block}.stream-tail-status[data-stream-state=ready]{color:var(--success)}.stream-tail-status[data-stream-state=waiting]{color:var(--warning)}.stream-tail-status[data-stream-state=streaming]{color:var(--info)}.stream-tail-status[data-stream-state=failed]{color:var(--danger)}.stream-tail+form{border-radius:0 0 13px 13px}.stream-tail-status[data-stream-state=streaming]:before{content:"";vertical-align:-2px;border:1.5px solid;border-right-color:#0000;border-radius:50%;width:11px;height:11px;margin-right:6px;animation:.8s linear infinite session-state-spin;display:inline-block}.call-result{border-top:1px dashed var(--border-subtle);margin-top:8px;padding-top:8px}.call-result-head{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.call-result-title{color:var(--text-muted);letter-spacing:.02em;font-size:11px;font-weight:700}.call-result-copy{border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-secondary);cursor:pointer;border-radius:4px;padding:2px 8px;font-size:10px}.call-result-copy:hover{color:var(--text-primary);border-color:var(--border-strong)}.call-result-body{background:var(--bg-inset);border:1px solid var(--border-subtle);min-width:0;max-width:100%;color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal;border-radius:6px;max-height:240px;margin:0;padding:8px 10px;font:11px/1.45 DM Mono,monospace;overflow:auto}.call-block-error .call-result-body{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}.call-result-truncated{color:var(--text-muted);margin-top:4px;font-size:10px}.call-background-status{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:0 auto;font:10px DM Mono,monospace;overflow:hidden}.call-block[data-background-status=running] .call-background-status{color:var(--info)}.call-block[data-background-status=failed] .call-background-status{color:var(--danger)}.call-block[data-background-status=failed] .call-result-body[data-background-output]{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}.session-state{flex:none;align-items:center;gap:4px;font-size:11px;line-height:1;display:inline-flex}.workspace-tab .session-state{order:-1;margin-right:2px}.session-state-mark{flex:none;width:14px;height:14px;font-size:11px;line-height:1;display:inline-block;position:relative}.session-state-waiting{color:var(--warning);position:relative}.session-state-waiting .session-state-mark{transform-origin:50%;animation:1.6s ease-in-out infinite session-state-breathing}@keyframes session-state-breathing{0%,to{opacity:.5}50%{opacity:1}}.session-state-running .session-state-mark:before,.session-state-running .session-state-mark:after{content:"";box-sizing:border-box;border-radius:50%;position:absolute;top:0;left:0}.session-state-running .session-state-mark{width:16px;height:16px}.session-state-running .session-state-mark:before{border:2px solid var(--info);border-right-color:#0000;width:16px;height:16px;animation:.6s linear infinite session-state-spin}.session-state-running .session-state-mark:after{background:var(--info);width:6px;height:6px;animation:1.2s ease-in-out infinite session-state-pulse;top:5px;left:5px}.session-state-running{position:relative}.session-state-running:before{content:"";box-sizing:border-box;pointer-events:none;border-radius:50%;width:16px;height:16px;animation:1.4s ease-out infinite session-state-halo;position:absolute;top:0;left:0}@keyframes session-state-spin{to{transform:rotate(360deg)}}@keyframes session-state-pulse{0%,to{opacity:.35;transform:scale(.6)}50%{opacity:1;transform:scale(1)}}@keyframes session-state-halo{0%{opacity:.55;border:2px solid var(--info);transform:scale(.6)}80%{opacity:0;border:1px solid var(--info);transform:scale(2.2)}to{opacity:0;border:0;transform:scale(2.2)}}.session-state-failed{color:var(--danger)}.session-state-question{color:var(--warning)}.session-state-unread{color:var(--info)}@media (prefers-reduced-motion:reduce){.session-state-running .session-state-mark:before,.session-state-running .session-state-mark:after,.session-state-running:before{animation:none}.session-state-running .session-state-mark:after{opacity:1;transform:none}.session-state-running:before{display:none}.session-state-waiting .session-state-mark{opacity:1;animation:none}}.call-preparing{color:var(--info);white-space:nowrap;flex:none;font:10px DM Mono,monospace;animation:1.1s ease-in-out infinite call-preparing-pulse}@keyframes call-preparing-pulse{0%,to{opacity:.45}50%{opacity:1}}@media (prefers-reduced-motion:reduce){.call-preparing{opacity:.85;animation:none}}.shell{background:var(--bg-app)}aside,.right-rail{background:var(--bg-panel)}.chat{background:var(--bg-app)}.label,.rail-section-title{letter-spacing:.08em;color:var(--text-muted)}.workspace-toggle:hover,.conversation:hover{background:var(--bg-hover)}.conversation.selected{box-shadow:inset 2px 0 0 var(--selected-border);background:var(--selected-bg)}.messages{gap:22px}.message{padding:0 2px}.assistant .content{max-width:none}.user .content{border:1px solid var(--border-subtle);background:var(--bg-raised);border-radius:12px;max-width:min(78ch,100%);padding:10px 13px;display:inline-block}header{border-bottom-color:var(--border-subtle)}form{border-color:var(--border-default);background:var(--bg-raised);box-shadow:0 10px 30px var(--shadow-faint)}textarea:focus{box-shadow:inset 0 0 0 1px var(--focus-ring)}.right-rail-head{background:var(--bg-panel);padding-top:10px}.right-tab{color:var(--text-muted);padding:8px 11px}.right-tab-active{background:var(--bg-elevated);border-color:var(--border-subtle);border-bottom-color:var(--selected-border)}.stream-tail{background:var(--bg-elevated);border-color:var(--border-default);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);column-gap:12px;min-width:0;padding-inline:18px}.stream-tail-status,.stream-tail-mode{text-overflow:ellipsis;min-width:0;max-width:100%;padding-inline:4px;overflow:hidden}.stream-tail-status{justify-self:start}.stream-tail-mode{justify-self:end}.stream-tail-jump{white-space:nowrap;background:var(--bg-input);min-width:112px;padding-inline:12px}.stream-tail+form{border-top:0;border-radius:0 0 13px 13px;margin-top:0}.stream-tail{border-bottom:0;border-radius:13px 13px 0 0}.stream-tail-status,.stream-tail-mode{border:1px solid var(--border-subtle);background:var(--bg-input);border-radius:999px;align-items:center;min-height:26px;padding:0 10px;line-height:1;display:inline-flex}.stream-tail-status{margin-inline-start:4px}.stream-tail-mode{grid-column:3;justify-self:end;margin-inline-end:4px}.chat>form{height:var(--composer-height);min-height:148px;max-height:55vh}.stream-tail:hover{border-top-color:var(--selected-border)}.todo-item,.subagent-card,.call-block{border-top-color:var(--border-subtle);border-right-color:var(--border-subtle);border-bottom-color:var(--border-subtle)}.rail-empty{border-style:solid;border-color:var(--border-subtle);background:var(--bg-inset)}.tool-dialog,.picker,.settings-window{border-color:var(--border-subtle);box-shadow:0 24px 70px var(--shadow)}button,a,input,textarea,select{transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s}@media (width<=700px){.chat>form{height:var(--composer-height);min-height:148px;max-height:55dvh}.stream-tail{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;padding-inline:10px}.stream-tail-status,.stream-tail-mode{background:var(--bg-elevated);border-color:var(--border-subtle);padding-inline:8px}.stream-tail-mode{grid-column:3;justify-self:end;margin-inline-end:0;font-size:9px}.stream-tail-jump{min-width:0}.user .content{max-width:100%}.assistant .content{max-width:none}}.conversation{justify-content:flex-start;padding:8px 9px}.conversation-mark{width:13px;color:var(--text-secondary);flex:0 0 13px;place-items:center;font-style:normal;display:grid}.conversation>span{flex:auto}.conversation-archived{justify-content:flex-start;padding:8px 9px}.conversation-archived>span{flex:auto}.thinking-block{border:1px solid var(--border-default);border-left:2px solid var(--info);background:var(--bg-inset);border-radius:8px;min-width:0;margin:0 0 10px;position:relative;overflow:hidden}.thinking-head{width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;box-sizing:border-box;background:0 0;border:0;align-items:baseline;gap:6px;padding:7px 12px;font:11px DM Mono,monospace;display:flex}.thinking-head:hover{background:var(--bg-hover)}.thinking-head[aria-expanded=false]{border-radius:7px 7px 0 0}.thinking-chevron{color:var(--info);flex-shrink:0;font-size:10px;line-height:1}.thinking-label{color:var(--info);letter-spacing:.04em;text-transform:uppercase;flex-shrink:0;font-size:10px;font-weight:700}.thinking-count{color:var(--text-muted);flex-shrink:0;font-size:10px}.thinking-live{color:var(--text-secondary);border:1px solid var(--warning-border);white-space:nowrap;text-overflow:ellipsis;border-radius:99px;flex:none;align-items:center;gap:4px;max-width:16em;padding:1px 7px;font-size:10px;display:inline-flex;overflow:hidden}.thinking-live-glyph{color:var(--warning);font-size:9px;line-height:1}.thinking-preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);flex:auto;font-style:italic;overflow:hidden}.thinking-body{border-top:1px solid var(--border-subtle);color:var(--text-secondary);white-space:pre-wrap;padding:8px 12px 10px;font-size:12px;line-height:1.5}.thinking-body .call-block,.thinking-body .call-blocks{margin-top:6px}.thinking-text{color:var(--text-secondary);opacity:.8;margin-top:6px}.slash-menu{z-index:8;background:var(--bg-elevated);border:1px solid var(--border-default);max-height:260px;box-shadow:0 12px 30px var(--shadow-faint);border-radius:10px;padding:6px;position:absolute;bottom:calc(100% - 2px);left:14px;right:14px;overflow:auto}.slash-menu-title{color:var(--text-muted);text-transform:uppercase;padding:5px 9px;font:10px DM Mono,monospace}.slash-item{width:100%;color:var(--text-secondary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;gap:12px;padding:8px 9px;display:flex}.slash-item code{min-width:90px;color:var(--text-secondary);font:12px DM Mono,monospace}.slash-item span{font-size:12px}.slash-menu{z-index:8;background:var(--bg-elevated);border:1px solid var(--border-default);border-radius:10px;max-height:260px;padding:6px;position:absolute;bottom:calc(100% - 2px);left:14px;right:14px;overflow:auto}.slash-menu-title{color:var(--text-muted);padding:5px 9px;font:10px DM Mono,monospace}.slash-item{width:100%;color:var(--text-secondary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;gap:12px;padding:8px 9px;display:flex}.slash-item.selected,.slash-item:hover{background:var(--bg-hover);color:var(--text-primary)}.slash-item code{min-width:90px;color:var(--text-secondary)}:root,[data-theme=dracula],[data-preview=dracula]{--code-comment:#6272a4;--code-string:#f1fa8c;--code-number:#bd93f9;--code-keyword:#ff79c6}[data-theme=monokai],[data-preview=monokai]{--code-comment:#75715e;--code-string:#a6e22e;--code-number:#ae81ff;--code-keyword:#f92672}[data-theme=solarized-light],[data-preview=solarized-light]{--code-comment:#586e75;--code-string:#b58900;--code-number:#2aa198;--code-keyword:#268bd2}[data-theme=github-light],[data-preview=github-light]{--code-comment:#6a737d;--code-string:#d1242f;--code-number:#a371f7;--code-keyword:#22863a}.code-token-comment{color:var(--code-comment)}.code-token-string{color:var(--code-string)}.code-token-number{color:var(--code-number)}.code-token-keyword{color:var(--code-keyword)}.file-preview-toggle{background:var(--bg-elevated);color:var(--text-secondary);border:1px solid var(--border-default);border-radius:4px;padding:3px 8px}.file-code-preview,.file-markdown-preview{background:var(--bg-elevated);white-space:pre;flex:1;min-height:120px;padding:14px;font:12px/1.6 DM Mono,monospace;overflow:auto}.file-markdown-preview{white-space:normal;font-family:inherit}.composer .session-picker{border-bottom:0;flex:0 auto;gap:6px;min-width:0;margin:0 10px 0 0;padding:0;overflow:visible}.composer .composer-hints{margin-left:auto}.composer{gap:12px}.composer .session-picker-item{flex:0 auto;min-width:0}.composer button.session-picker-trigger{border:1px solid var(--border-default);background:var(--bg-panel);color:var(--text-secondary);white-space:nowrap;cursor:pointer;border-radius:6px;gap:4px;min-width:0;max-width:100%;padding:4px 9px;font:600 11px Manrope;transition:border-color .12s,color .12s,background .12s}.composer button.session-picker-trigger:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-strong)}.composer button.session-picker-trigger:disabled{opacity:.4;cursor:not-allowed}.composer .session-picker-kind{letter-spacing:.04em;color:var(--text-muted);border-right-color:var(--border-default);padding-right:6px;font:600 10px Manrope}.composer .session-picker-name{color:inherit;flex:0 auto;max-width:16ch;font:600 11px Manrope}.composer .session-picker-detail{display:none}.composer .session-picker-caret{color:var(--text-muted);font-size:9px}@media (width<=1100px){.composer .composer-hints>span{display:none}}@media (width<=700px){.composer{flex-wrap:wrap;row-gap:6px}.composer .session-picker{flex:100%;margin:0;padding:2px 0 0;overflow:visible}.composer .session-picker-name{max-width:9ch}}.composer button.picker-option{color:var(--text-primary);text-align:left;background:0 0;border:0;border-radius:7px;padding:8px 10px;font-weight:400}.composer button.picker-option:hover{background:var(--bg-hover);color:var(--text-primary)}.composer button.picker-option.selected{background:var(--bg-raised)}.composer button.picker-option.selected:hover{background:var(--bg-hover)}.composer button.picker-option.preview{background:var(--bg-hover);box-shadow:inset 2px 0 0 var(--border-strong)}.composer button.picker-filter-clear{color:var(--text-secondary);background:0 0;border:0;border-radius:5px;padding:2px 5px;font-size:11px;font-weight:400;line-height:1}.composer button.picker-filter-clear:hover{background:var(--bg-hover);color:var(--text-primary)}.question-block{border:1px solid var(--border-default);background:var(--bg-elevated);min-width:0;box-shadow:0 12px 30px var(--shadow-faint);border-radius:12px;gap:9px;margin:10px 0;padding:13px 14px;display:grid}.question-pending{border-color:var(--border-strong);box-shadow:0 12px 30px var(--shadow-faint),inset 3px 0 0 var(--warning)}.question-text{color:var(--text-primary);font:700 14px/1.5 Manrope;display:block}.question-header{font-weight:700}.question-sep{color:var(--text-secondary);margin:0 4px;font-weight:400}.question-options{gap:6px;min-width:0;display:grid}.question-options label{border:1px solid var(--border-subtle);background:var(--bg-raised);cursor:pointer;color:var(--text-secondary);border-radius:9px;align-items:flex-start;gap:9px;padding:8px 11px;font:500 13px/1.5 Manrope;transition:border-color .12s,background .12s,color .12s;display:flex}.question-options label:hover{border-color:var(--border-default);color:var(--text-primary)}.question-options input{accent-color:var(--selected);cursor:pointer;flex:none;margin:2px 0 0}.question-options label:has(input:checked){border-color:var(--selected-border);background:var(--bg-elevated);color:var(--text-primary)}.question-options label:focus-within{border-color:var(--focus-ring);box-shadow:0 0 0 2px var(--focus-ring-glow)}.question-block textarea{resize:vertical;border:1px solid var(--border-subtle);background:var(--bg-input);width:100%;min-height:62px;color:var(--text-primary);border-radius:9px;outline:0;padding:9px 11px;font:13px/1.55 Manrope}.question-block textarea:focus{border-color:var(--focus-ring);box-shadow:0 0 0 2px var(--focus-ring-glow)}.question-block button{background:var(--accent);color:var(--accent-contrast);cursor:pointer;border:0;border-radius:8px;justify-self:start;padding:7px 15px;font:800 12px Manrope}.question-block button:hover:not(:disabled){background:var(--accent-hover)}.question-block button:disabled{opacity:.4;cursor:not-allowed}.question-answered{background:var(--bg-inset);border-color:var(--border-subtle);box-shadow:none}.question-answered .question-text{color:var(--text-secondary);font-weight:600}.question-answered .question-options{display:none}.question-summary{color:var(--text-secondary);font:500 13px/1.6 Manrope}.question-summary .question-note{color:var(--text-muted);margin-top:4px;font-size:12px;display:block}.question-answered .question-summary{color:var(--text-secondary)}.question-cancelled{background:var(--bg-inset);border-color:var(--border-subtle);box-shadow:none}.question-cancelled .question-text{color:var(--text-muted);font-weight:600}.question-body{padding:4px 0 2px}.question-item{gap:8px;min-width:0;display:grid}.question-item+.question-item{border-top:1px solid var(--border-subtle);padding-top:11px}.question-actions{align-items:center;gap:8px;display:flex}.question-skip{border:1px solid var(--border-default);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:8px;padding:7px 13px;font:600 12px Manrope}.question-skip:hover{border-color:var(--border-strong);color:var(--text-secondary)}.question-options label[data-chosen]{border-color:var(--selected-border);background:var(--bg-elevated);color:var(--text-primary)}.question-options label:has(input:disabled){cursor:default;opacity:1}.question-options input:disabled{opacity:1;cursor:default}.question-options label.is-chosen{font-weight:700}.question-mark{color:var(--selected);margin-left:auto;padding-left:10px;font-weight:700}.question-cancelled .question-options label{color:var(--text-muted);background:0 0}.question-cancelled .question-summary{color:var(--text-muted)}.terminal-xterm-host{width:100%;min-width:0;height:100%;min-height:0}.terminal-xterm-host .xterm{width:100%;height:100%;padding:0}.terminal-xterm-host .xterm-viewport{overflow-y:auto;background:0 0!important}.terminal-xterm-host .xterm-screen{width:100%!important}.md{overflow-wrap:anywhere}.md-pre,.md-math,.md-table{overflow-wrap:normal}.settings-model-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=600px){.settings-model-grid{grid-template-columns:1fr}}.settings-model-group{gap:6px;min-width:0;display:grid}.settings-model-label{color:var(--text-secondary);letter-spacing:.02em;font:600 11px Manrope}.settings-model-select{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;border-radius:8px;outline:0;width:100%;min-width:0;padding:8px 11px;font:12px Manrope}.settings-model-select:focus{border-color:var(--focus-ring)}.settings-model-select:disabled{opacity:.5;cursor:not-allowed}.settings-model-current{color:var(--text-primary);flex-wrap:wrap;align-items:baseline;gap:8px;font:12px Manrope;display:flex}.settings-model-current-name{font-weight:600}.settings-model-current-pair{color:var(--text-secondary);background:var(--bg-inset);border-radius:6px;padding:2px 7px;font:12px DM Mono,monospace}.settings-model-current-none{color:var(--text-secondary)}.settings-provider-list{gap:10px;margin-top:12px;display:grid}.settings-provider-card{border:1px solid var(--border-subtle);background:var(--bg-inset);border-radius:10px;gap:6px;padding:11px 13px;display:grid}.settings-provider-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.settings-provider-id{color:var(--text-primary);font:600 12px DM Mono,monospace}.settings-provider-name{color:var(--text-secondary);font:12px Manrope}.settings-provider-badge{color:var(--text-secondary);border:1px solid var(--border-default);border-radius:999px;padding:2px 8px;font:600 10px Manrope}.settings-provider-meta{color:var(--text-muted);overflow-wrap:anywhere;font:11px DM Mono,monospace}.settings-provider-models{flex-wrap:wrap;gap:6px;display:flex}.settings-provider-model{color:var(--text-secondary);background:var(--bg-input);border:1px solid var(--border-subtle);border-radius:6px;padding:2px 7px;font:11px Manrope}.settings-provider-actions{gap:8px;margin-top:2px;display:flex}.settings-provider-form{gap:12px;margin-top:14px;display:grid}.settings-provider-numbers{grid-template-columns:1fr 1fr;gap:8px;display:grid}.settings-provider-switches{flex-wrap:wrap;gap:14px;display:flex}.file-badge-changed{border-color:var(--warning-border);color:var(--warning)}.files-changed{gap:4px;margin-bottom:2px;display:grid}.files-changed-head{color:var(--text-secondary);margin:0;font:600 10px Manrope}.file-diff{flex-direction:column;flex:auto;gap:8px;min-width:0;min-height:0;display:flex}.file-diff-baseline{color:var(--text-muted);font:9px DM Mono,monospace}.file-diff-count{color:var(--text-secondary);font:9px DM Mono,monospace}.file-diff-warning{border:1px solid var(--warning-border);background:var(--warning-bg);color:var(--warning);border-radius:8px;margin:0;padding:6px 9px;font:10px/1.6 Manrope}.file-diff-nobaseline{color:var(--text-muted);margin:0;font:11px/1.6 Manrope}.file-diff-body{border:1px solid var(--border-subtle);background:var(--bg-inset);border-radius:9px;flex:auto;min-height:0;padding:6px 0;overflow:auto}.file-diff-line{white-space:pre;grid-template-columns:16px 42px 42px 1fr;align-items:baseline;min-width:0;font:12px/1.6 DM Mono,ui-monospace,monospace;display:grid}.file-diff-mark{color:var(--text-muted);text-align:center}.file-diff-number{color:var(--text-muted);text-align:right;-webkit-user-select:none;user-select:none;padding-right:8px;font-size:10px}.file-diff-text{min-width:0;color:var(--text-primary);overflow:visible}.file-diff-added{background:var(--success-bg)}.file-diff-added .file-diff-mark,.file-diff-added .file-diff-text{color:var(--success)}.file-diff-removed{background:var(--danger-bg)}.file-diff-removed .file-diff-mark,.file-diff-removed .file-diff-text{color:var(--danger)}.file-diff-fold{color:var(--text-muted);background:var(--bg-panel);border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);white-space:normal;grid-template-columns:1fr;padding:3px 10px;font:10px/1.6 Manrope}.file-diff-switch{border:1px solid var(--border-subtle);border-radius:7px;gap:0;display:inline-flex;overflow:hidden}.file-diff-switch-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:0;padding:2px 8px;font:9px DM Mono,monospace}.file-diff-switch-btn:hover{background:var(--bg-elevated);color:var(--text-primary)}.file-diff-switch-btn.file-diff-switch-active{background:var(--tab-active-bg);color:var(--text-primary)}.file-diff-switch-btn:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-2px}.quick-open-backdrop{z-index:1000;background:var(--overlay);justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.quick-open{background:var(--bg-panel);border:1px solid var(--border-subtle);width:min(680px,100vw - 32px);box-shadow:0 16px 60px var(--shadow);border-radius:10px;overflow:hidden}.quick-open-input{box-sizing:border-box;border:0;border-bottom:1px solid var(--border-subtle);background:var(--bg-inset);width:100%;color:var(--text-primary);outline:none;padding:14px 16px;font:14px Manrope}.quick-open-status{color:var(--text-muted);margin:0;padding:6px 16px;font:10px DM Mono,monospace}.quick-open-results{max-height:52vh;margin:0;padding:0 6px 8px;list-style:none;overflow:auto}.quick-open-result{width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:baseline;gap:12px;padding:8px 10px;font:12px Manrope;display:flex}.quick-open-result small{color:var(--text-muted);margin-left:auto;font:10px DM Mono,monospace}.quick-open-result-active,.quick-open-result:hover{background:var(--tab-active-bg)}.content-search-result{flex-direction:column;align-items:flex-start;gap:3px}.content-search-result small{text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin-left:0;overflow:hidden}.content-search-skipped-paths{white-space:pre-wrap;overflow-wrap:anywhere;max-height:100px;overflow:auto}.chat-file-view .file-textarea-highlight-wrap>.file-textarea{resize:none;height:100%}.settings-provider-model-row{border-top:1px solid var(--border-subtle);flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.settings-provider-model-row:first-child{border-top:0}.settings-provider-model-id{color:var(--text-muted);overflow-wrap:anywhere;font:11px DM Mono,monospace}.settings-provider-model-actions{gap:8px;margin-left:auto;display:flex}.settings-provider-link{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:2px 4px;font:500 11px Manrope}.settings-provider-link:hover{color:var(--text-primary);background:var(--bg-hover)}.settings-provider-link.danger:hover{color:var(--danger)}
|
package/dist/client/index.html
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<link rel="alternate icon" href="/favicon.ico" />
|
|
9
9
|
<link rel="apple-touch-icon" href="/favicon.svg" />
|
|
10
10
|
<title>Super Pi</title>
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-DBR_t9lF.js"></script>
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-mo5Dvh_v.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="root"></div>
|
|
@@ -51,6 +51,20 @@ export declare class ProviderService {
|
|
|
51
51
|
set(input: unknown): Promise<PublicProvider[]>;
|
|
52
52
|
/** Removes a provider Super Pi manages, and only one it manages. */
|
|
53
53
|
remove(providerId: string): Promise<PublicProvider[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Removes ONE model from a provider, leaving the provider and its other models alone.
|
|
56
|
+
*
|
|
57
|
+
* WHY THIS IS NOT JUST A DELETE-AND-RE-ADD. A provider is a group of models sharing one address,
|
|
58
|
+
* one API type and one key, so removing a model must not touch any of those - and the key in
|
|
59
|
+
* particular is not something to re-type. The provider's entry in Pi's file is rewritten with the
|
|
60
|
+
* remaining models, and its credential stays exactly where it was.
|
|
61
|
+
*
|
|
62
|
+
* THE LAST MODEL GOES WITH THE PROVIDER. A provider with no models offers nothing, and Pi's file
|
|
63
|
+
* would keep an entry that can never be selected - so the provider is removed, and with it the
|
|
64
|
+
* credential, because a credential for a provider that no longer exists is a secret left lying in
|
|
65
|
+
* a file for nothing.
|
|
66
|
+
*/
|
|
67
|
+
removeModel(providerId: string, modelId: string): Promise<PublicProvider[]>;
|
|
54
68
|
/**
|
|
55
69
|
* What has to happen after the files are written, for the change to be REAL rather than pending.
|
|
56
70
|
*
|
|
@@ -106,6 +106,35 @@ export class ProviderService {
|
|
|
106
106
|
await this.afterChange();
|
|
107
107
|
return publicProviders(next);
|
|
108
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Removes ONE model from a provider, leaving the provider and its other models alone.
|
|
111
|
+
*
|
|
112
|
+
* WHY THIS IS NOT JUST A DELETE-AND-RE-ADD. A provider is a group of models sharing one address,
|
|
113
|
+
* one API type and one key, so removing a model must not touch any of those - and the key in
|
|
114
|
+
* particular is not something to re-type. The provider's entry in Pi's file is rewritten with the
|
|
115
|
+
* remaining models, and its credential stays exactly where it was.
|
|
116
|
+
*
|
|
117
|
+
* THE LAST MODEL GOES WITH THE PROVIDER. A provider with no models offers nothing, and Pi's file
|
|
118
|
+
* would keep an entry that can never be selected - so the provider is removed, and with it the
|
|
119
|
+
* credential, because a credential for a provider that no longer exists is a secret left lying in
|
|
120
|
+
* a file for nothing.
|
|
121
|
+
*/
|
|
122
|
+
async removeModel(providerId, modelId) {
|
|
123
|
+
const previous = await this.registry.load();
|
|
124
|
+
const existing = previous.find((provider) => provider.id === providerId);
|
|
125
|
+
if (!existing)
|
|
126
|
+
throw new Error(`Super Pi 没有管理供应商「${providerId}」`);
|
|
127
|
+
const remaining = existing.models.filter((model) => model.id !== modelId);
|
|
128
|
+
if (remaining.length === existing.models.length)
|
|
129
|
+
throw new Error(`供应商「${providerId}」里没有模型「${modelId}」`);
|
|
130
|
+
if (!remaining.length)
|
|
131
|
+
return this.remove(providerId);
|
|
132
|
+
const next = previous.map((provider) => (provider.id === providerId ? { ...provider, models: remaining } : provider));
|
|
133
|
+
await this.registry.applyToPi(previous, next);
|
|
134
|
+
await this.registry.save(next);
|
|
135
|
+
await this.afterChange();
|
|
136
|
+
return publicProviders(next);
|
|
137
|
+
}
|
|
109
138
|
/**
|
|
110
139
|
* What has to happen after the files are written, for the change to be REAL rather than pending.
|
|
111
140
|
*
|
|
@@ -5,6 +5,7 @@ import type { Conversation, Message, MessageImage, PiQueueSnapshot, QuestionAnsw
|
|
|
5
5
|
import type { EventBroadcaster } from "../server-context.js";
|
|
6
6
|
import type { ExtensionUiService } from "./extension-ui-service.js";
|
|
7
7
|
import type { WorkflowEngine } from "../workflow-engine.js";
|
|
8
|
+
import { FileChangeTracker } from "../file-changes.js";
|
|
8
9
|
export interface SubagentDispatchRequestBody {
|
|
9
10
|
conversationId?: string;
|
|
10
11
|
subagent_type?: string;
|
|
@@ -62,6 +63,16 @@ export declare class RunService {
|
|
|
62
63
|
private readonly workflows;
|
|
63
64
|
private memory?;
|
|
64
65
|
setMemory(memory: import("../active-memory.js").ActiveMemory): void;
|
|
66
|
+
/**
|
|
67
|
+
* WHAT THE AGENT CHANGED, and what each file looked like before.
|
|
68
|
+
*
|
|
69
|
+
* The tracker is a SETTER rather than a constructor argument, for the same reason `memory` is: it is
|
|
70
|
+
* optional, and a service that must be handed one cannot be built before the thing that builds it.
|
|
71
|
+
*/
|
|
72
|
+
private fileChanges?;
|
|
73
|
+
private fileIndexes?;
|
|
74
|
+
setFileChanges(tracker: FileChangeTracker): void;
|
|
75
|
+
setFileIndexes(indexes: Map<string, import("../file-index.js").FileIndex>): void;
|
|
65
76
|
reviewMemoryBoundary(conversationId: string): void;
|
|
66
77
|
private readonly activeRuns;
|
|
67
78
|
/**
|
|
@@ -129,6 +140,14 @@ export declare class RunService {
|
|
|
129
140
|
private readonly detached;
|
|
130
141
|
constructor(store: Store, runtime: AgentRuntime, subagents: SubagentRunRecorder, broadcaster: EventBroadcaster, extensionUiService: ExtensionUiService, agentsDir: string | string[], workflows: WorkflowEngine);
|
|
131
142
|
setAgentsDir(dir: string | string[]): void;
|
|
143
|
+
/**
|
|
144
|
+
* TELLS THE BROWSER WHICH FILES THE AGENT CHANGED.
|
|
145
|
+
*
|
|
146
|
+
* The whole list goes every time rather than just the newest file, because the event is a SNAPSHOT
|
|
147
|
+
* (like `state` and `subagent.event`): a browser that missed one rebuilds the list from the next
|
|
148
|
+
* one, instead of holding a list assembled from a partial sequence of deltas.
|
|
149
|
+
*/
|
|
150
|
+
broadcastFileChanges(workspaceId: string): void;
|
|
132
151
|
/**
|
|
133
152
|
* RECORDS WHAT THE PERSON CHOSE, ON THE `question` CALL THAT ASKED.
|
|
134
153
|
*
|
|
@@ -137,6 +137,16 @@ export class RunService {
|
|
|
137
137
|
workflows;
|
|
138
138
|
memory;
|
|
139
139
|
setMemory(memory) { this.memory = memory; }
|
|
140
|
+
/**
|
|
141
|
+
* WHAT THE AGENT CHANGED, and what each file looked like before.
|
|
142
|
+
*
|
|
143
|
+
* The tracker is a SETTER rather than a constructor argument, for the same reason `memory` is: it is
|
|
144
|
+
* optional, and a service that must be handed one cannot be built before the thing that builds it.
|
|
145
|
+
*/
|
|
146
|
+
fileChanges;
|
|
147
|
+
fileIndexes;
|
|
148
|
+
setFileChanges(tracker) { this.fileChanges = tracker; }
|
|
149
|
+
setFileIndexes(indexes) { this.fileIndexes = indexes; }
|
|
140
150
|
reviewMemoryBoundary(conversationId) {
|
|
141
151
|
const conversation = this.store.snapshot().conversations.find(c => c.id === conversationId);
|
|
142
152
|
if (conversation)
|
|
@@ -317,6 +327,31 @@ export class RunService {
|
|
|
317
327
|
setAgentsDir(dir) {
|
|
318
328
|
this.agentsDir = dir;
|
|
319
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* TELLS THE BROWSER WHICH FILES THE AGENT CHANGED.
|
|
332
|
+
*
|
|
333
|
+
* The whole list goes every time rather than just the newest file, because the event is a SNAPSHOT
|
|
334
|
+
* (like `state` and `subagent.event`): a browser that missed one rebuilds the list from the next
|
|
335
|
+
* one, instead of holding a list assembled from a partial sequence of deltas.
|
|
336
|
+
*/
|
|
337
|
+
broadcastFileChanges(workspaceId) {
|
|
338
|
+
const tracker = this.fileChanges;
|
|
339
|
+
if (!tracker)
|
|
340
|
+
return;
|
|
341
|
+
const { changes, dropped } = tracker.list(workspaceId);
|
|
342
|
+
this.broadcaster.broadcast({
|
|
343
|
+
type: "files.changed",
|
|
344
|
+
workspaceId,
|
|
345
|
+
dropped,
|
|
346
|
+
changes: changes.map((change) => ({
|
|
347
|
+
path: change.path,
|
|
348
|
+
baseline: change.before,
|
|
349
|
+
...(change.beforeUnknown ? { baselineUnknown: true } : {}),
|
|
350
|
+
...(change.conversationId ? { conversationId: change.conversationId } : {}),
|
|
351
|
+
at: change.at,
|
|
352
|
+
})),
|
|
353
|
+
});
|
|
354
|
+
}
|
|
320
355
|
/**
|
|
321
356
|
* RECORDS WHAT THE PERSON CHOSE, ON THE `question` CALL THAT ASKED.
|
|
322
357
|
*
|
|
@@ -867,6 +902,36 @@ export class RunService {
|
|
|
867
902
|
}));
|
|
868
903
|
preparingRows.set(call.contentIndex, { row, name: call.name });
|
|
869
904
|
};
|
|
905
|
+
/**
|
|
906
|
+
* THE AGENT IS ABOUT TO WRITE A FILE.
|
|
907
|
+
*
|
|
908
|
+
* The baseline is captured HERE, at the announcement, because this is the last moment the old content
|
|
909
|
+
* is still on the disk. By the time the tool has finished, the file holds the new content and the
|
|
910
|
+
* "before" is gone - which is why a diff cannot be reconstructed afterwards from the file itself.
|
|
911
|
+
*
|
|
912
|
+
* The read inside `record` is SYNCHRONOUS on purpose (see `file-changes.ts` for the race it
|
|
913
|
+
* closes), and it is bounded by a size cap, so it costs a fraction of a millisecond for an
|
|
914
|
+
* ordinary source file.
|
|
915
|
+
*/
|
|
916
|
+
/**
|
|
917
|
+
* THE PATHS THE AGENT IS WRITING, keyed by tool call id.
|
|
918
|
+
*
|
|
919
|
+
* The key is what lets the tool's END confirm the baseline of the right file. The alternative - the
|
|
920
|
+
* tool card's one-line summary - is a DISPLAY string: whitespace-collapsed and length-capped, so
|
|
921
|
+
* it is not a path the server can read a file by, and a path with a run of spaces in it would come
|
|
922
|
+
* back as a path with one space.
|
|
923
|
+
*/
|
|
924
|
+
const fileWritePaths = new Map();
|
|
925
|
+
const onFileWrite = (path, _toolName, toolCallId) => {
|
|
926
|
+
const tracker = this.fileChanges;
|
|
927
|
+
if (!tracker)
|
|
928
|
+
return;
|
|
929
|
+
tracker.record(workspace.id, path, { root: workspace.path, conversationId: conversation.id });
|
|
930
|
+
void this.fileIndexes?.get(workspace.id)?.refresh(path);
|
|
931
|
+
if (toolCallId)
|
|
932
|
+
fileWritePaths.set(toolCallId, path);
|
|
933
|
+
this.broadcastFileChanges(workspace.id);
|
|
934
|
+
};
|
|
870
935
|
const onToolCall = (call) => {
|
|
871
936
|
const at = spoken;
|
|
872
937
|
// THE PLACEHOLDER THAT BELONGS TO THIS CALL, IF ONE IS ON SCREEN.
|
|
@@ -920,6 +985,18 @@ export class RunService {
|
|
|
920
985
|
enqueueTools("a tool call update", () => this.store.updateToolCall(conversation.id, assistant.id, index, { ...(call.args ? { args: call.args } : {}), ...(call.live !== undefined ? { live: call.live } : {}) }));
|
|
921
986
|
};
|
|
922
987
|
const onToolEnd = (call) => {
|
|
988
|
+
// THE WRITE IS FINISHED, so the baseline can be CHECKED. The tracker recorded the file's etag when
|
|
989
|
+
// the write was announced; if the file's etag now differs, the baseline really is the content
|
|
990
|
+
// from before the write. If it does not, the baseline was taken too late to be shown, and the
|
|
991
|
+
// tracker says so rather than letting the diff view claim two identical versions are the same.
|
|
992
|
+
const writtenPath = call.id ? fileWritePaths.get(call.id) : undefined;
|
|
993
|
+
if (writtenPath) {
|
|
994
|
+
this.fileChanges?.confirm(workspace.id, writtenPath, workspace.path);
|
|
995
|
+
void this.fileIndexes?.get(workspace.id)?.refresh(writtenPath);
|
|
996
|
+
if (call.id)
|
|
997
|
+
fileWritePaths.delete(call.id);
|
|
998
|
+
this.broadcastFileChanges(workspace.id);
|
|
999
|
+
}
|
|
923
1000
|
const index = call.id ? rowByToolCallId.get(call.id) : undefined;
|
|
924
1001
|
if (index === undefined)
|
|
925
1002
|
return;
|
|
@@ -992,6 +1069,7 @@ export class RunService {
|
|
|
992
1069
|
onUserEntry: (entryId) => this.store.setMessagePiEntryId(conversation.id, userMessageId, entryId),
|
|
993
1070
|
onSessionFile: (path) => this.store.setConversationPiSessionFile(conversation.id, path),
|
|
994
1071
|
onToolCall,
|
|
1072
|
+
onFileWrite,
|
|
995
1073
|
onToolPreparing,
|
|
996
1074
|
onToolUpdate,
|
|
997
1075
|
onToolEnd,
|
|
@@ -95,6 +95,12 @@ export class CommandHandler {
|
|
|
95
95
|
await this.providerService.remove(command.providerId);
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
|
+
if (command.type === "providers.removeModel") {
|
|
99
|
+
if (!this.providerService)
|
|
100
|
+
throw new Error("供应商功能不可用");
|
|
101
|
+
await this.providerService.removeModel(command.providerId, command.modelId);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
98
104
|
if (command.type === "providers.fetch") {
|
|
99
105
|
if (!this.providerService)
|
|
100
106
|
throw new Error("供应商功能不可用");
|