@evandu/super-pi 0.1.16 → 0.1.17
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.
|
@@ -40,4 +40,4 @@ pi list
|
|
|
40
40
|
pi update npm:@evandu/super-pi
|
|
41
41
|
|
|
42
42
|
# 独立启动(无需 Pi 环境)
|
|
43
|
-
npx @evandu/super-pi`})})]}),(0,A.jsxs)(`div`,{className:`help-card`,children:[(0,A.jsx)(`h4`,{children:`🎯 键盘快捷键`}),(0,A.jsxs)(`div`,{className:`help-command-table`,children:[(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Enter`}),(0,A.jsx)(`span`,{children:`发送对话消息`})]}),(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Shift + Enter`}),(0,A.jsx)(`span`,{children:`输入框内换行`})]}),(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Esc`}),(0,A.jsx)(`span`,{children:`快速关闭当前顶层弹窗(使用指南、设置、工作区选择器等)`})]})]})]})]})}function bt(){return(0,A.jsx)(`div`,{className:`help-section-group`,children:(0,A.jsxs)(`div`,{className:`help-card`,children:[(0,A.jsx)(`h4`,{children:`🎨 4 款内置专业高对比度主题`}),(0,A.jsxs)(`div`,{className:`help-theme-list`,children:[(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`🌙 Midnight(午夜冷蓝)`}),(0,A.jsx)(`p`,{children:`深邃冷调分层界面,对比度鲜明,非常适合长时间夜间专注编程。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`⬛ Slate(中性石墨)`}),(0,A.jsx)(`p`,{children:`经典低饱和中性灰度质感,克制沉稳,专业工程界面的默认首选。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`🌊 Ocean(深海冷灰)`}),(0,A.jsx)(`p`,{children:`冷调浅蓝灰阶设计,边界轮廓清晰分明,视觉感受轻盈柔和。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`☀️ Dawn(破晓暖色)`}),(0,A.jsx)(`p`,{children:`清爽明亮浅色主题,适合白天自然光线充足环境下的阅读与工作。`})]})]}),(0,A.jsxs)(`p`,{className:`help-hint`,children:[`可在左侧栏底部的 `,(0,A.jsx)(`strong`,{children:`⚙ 设置`}),` 中一键切换主题,设置会自动持久化保存在本地。`]})]})})}var xt=e=>e.nativeEvent.isComposing||e.keyCode===229,St=`super-pi.theme`,Ct=[{id:`midnight`,name:`午夜`,blurb:`冷暗调鸭的分层画面,适合长时间。`},{id:`slate`,name:`石板`,blurb:`低饱和的冷调,对视觉负荷最少。`},{id:`ocean`,name:`晴空`,blurb:`浅色的界面清澈,适合天天明亮的环境。`},{id:`dawn`,name:`黎明`,blurb:`温暖低调的纸感柔和,适合大量阅读文档。`}],wt=`midnight`,Tt=e=>typeof e==`string`&&Ct.some(t=>t.id===e);function Et(){try{let e=window.localStorage.getItem(St);if(!e)return wt;let t=JSON.parse(e),n=typeof t==`string`?t:t?.id;return Tt(n)?n:wt}catch{return wt}}function N(e){document.documentElement.setAttribute(`data-theme`,e);try{window.localStorage.setItem(St,JSON.stringify({id:e,version:1}))}catch{}}function Dt(){let[e,t]=(0,l.useState)(wt);return(0,l.useEffect)(()=>{t(Et());let e=e=>{if(e.key===`super-pi.theme`&&e.newValue)try{let n=JSON.parse(e.newValue),r=typeof n==`string`?n:n?.id;Tt(r)&&(document.documentElement.setAttribute(`data-theme`,r),t(r))}catch{}};return window.addEventListener(`storage`,e),()=>window.removeEventListener(`storage`,e)},[]),{theme:e,setTheme:(0,l.useCallback)(e=>{N(e),t(e)},[])}}function Ot({theme:e,onChooseTheme:t,onClose:n}){let r=Ct.find(t=>t.id===e);return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`settings-scope`,children:`主题只影响这台设备的显示,不改变任何内容;切换立即生效。`}),Ct.length===0?(0,A.jsx)(`div`,{className:`theme-empty`,"data-theme-empty":`1`,children:`没有可用的主题。界面将继续使用默认配色,你可以在主题文件恢复后重试。`}):(0,A.jsx)(`div`,{className:`theme-options`,role:`radiogroup`,"aria-label":`主题`,children:Ct.map(n=>{let r=n.id===e;return(0,A.jsxs)(`button`,{type:`button`,className:`theme-option`,role:`radio`,"aria-checked":r,"aria-pressed":r,"data-theme-option":n.id,"data-theme-current":r?`1`:`0`,onClick:()=>t(n.id),children:[(0,A.jsxs)(`span`,{className:`theme-preview`,"data-preview":n.id,"aria-hidden":`true`,children:[(0,A.jsx)(`span`,{className:`theme-preview-rail`}),(0,A.jsxs)(`span`,{className:`theme-preview-body`,children:[(0,A.jsx)(`span`,{className:`theme-preview-line`}),(0,A.jsx)(`span`,{className:`theme-preview-line dim`}),(0,A.jsx)(`span`,{className:`theme-preview-line accent`}),(0,A.jsx)(`span`,{className:`theme-preview-panel`})]})]}),(0,A.jsxs)(`span`,{className:`theme-option-name`,children:[n.name,(0,A.jsx)(`small`,{children:n.id}),r&&(0,A.jsx)(`span`,{className:`theme-option-current`,children:`当前 ✓`})]}),(0,A.jsx)(`span`,{className:`theme-option-blurb`,children:n.blurb})]},n.id)})}),(0,A.jsx)(`div`,{className:`picker-actions`,children:(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,"data-theme-close":`1`,onClick:n,children:`完成`})}),(0,A.jsxs)(`div`,{className:`settings-scope theme-current-line`,children:[`当前:`,r?`${r.name}(${r.id})`:`默认`]})]})}function kt({context:e}){let[t,n]=(0,l.useState)(``),[r,i]=(0,l.useState)(``),[a,o]=(0,l.useState)(!1),s=e.agentCatalog,c=e.subagentCatalog,u=s?.agents??[],d=c?.agents??[],f=[...u,...d],p=[...s?.problems??[],...c?.problems??[]],m=[...new Set([...s?.directories??(s?.directory?[s.directory]:[]),...e.customAgentDirs??[]])],h=e.customAgentDirs??[],g=r=>{if(r.preventDefault(),e.pendingSettings)return;let a=t.trim();a&&(h.includes(a)?i(`该路径已存在于自定义目录列表中`):(e.onSetCustomAgentDirs?.([...h,a]),n(``),i(``)))},_=t=>{let n=h.filter(e=>e!==t);e.onSetCustomAgentDirs?.(n)};return(0,A.jsxs)(`div`,{className:`settings-agents-container`,children:[(0,A.jsxs)(`div`,{className:`settings-agents-header`,children:[(0,A.jsx)(`p`,{className:`settings-agents-desc`,children:`Super Pi 支持多目录发现智能体。系统会按优先级自上而下合并扫描目录;若存在同名配置,高优先级目录的文件将覆盖低优先级目录。`}),(0,A.jsx)(`button`,{type:`button`,className:`settings-agent-rescan-btn`,onClick:()=>{o(!0),e.onRescanAgents?.(),setTimeout(()=>o(!1),600)},disabled:a,title:`重新扫描所有目录中的智能体定义文件`,children:a?`正在扫描…`:`🔄 立即重新扫描`})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsx)(`h4`,{className:`settings-section-title`,children:`发现路径清单(按优先级自高到低)`}),(0,A.jsx)(`div`,{className:`settings-dirs-list`,children:m.length===0?(0,A.jsx)(`div`,{className:`settings-empty-hint`,children:`暂无活跃的发现路径`}):m.map((t,n)=>{let r=h.includes(t),i=t.includes(`.super_pi`)||t.includes(`.super-pi`)||t.includes(`.pi`),a=!r&&!i,o=f.filter(e=>e.sourceDir===t).length;return(0,A.jsxs)(`div`,{className:`settings-dir-row`,children:[(0,A.jsxs)(`div`,{className:`settings-dir-info`,children:[(0,A.jsxs)(`span`,{className:`settings-dir-priority`,children:[`#`,n+1]}),(0,A.jsx)(`span`,{className:`settings-dir-path`,title:t,children:t}),(0,A.jsx)(`span`,{className:`settings-dir-tag`,children:r?`自定义`:i?`用户全局`:a?`内置`:`环境`}),(0,A.jsxs)(`span`,{className:`settings-dir-count`,children:[`(发现 `,o,` 个智能体)`]})]}),r&&(0,A.jsx)(`button`,{type:`button`,className:`settings-dir-remove-btn`,disabled:e.pendingSettings,onClick:()=>_(t),title:`移除此自定义扫描路径`,children:`移除`})]},t)})})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsx)(`h4`,{className:`settings-section-title`,children:`添加自定义路径`}),(0,A.jsxs)(`form`,{onSubmit:g,className:`settings-add-dir-form`,children:[(0,A.jsx)(`input`,{type:`text`,className:`settings-dir-input`,value:t,onChange:e=>{n(e.target.value),r&&i(``)},onKeyDown:e=>{e.key===`Enter`&&xt(e)&&e.preventDefault()},placeholder:`输入本地目录绝对路径或 ~/ 开头路径,如 D:\\agents 或 ~/.super_pi/agents`}),(0,A.jsx)(`button`,{type:`submit`,className:`settings-dir-add-btn`,disabled:e.pendingSettings||!t.trim(),children:`添加目录`})]}),r&&(0,A.jsx)(`div`,{className:`settings-dir-error`,children:r})]}),p.length>0&&(0,A.jsxs)(`section`,{className:`settings-section settings-problems-section`,children:[(0,A.jsxs)(`h4`,{className:`settings-problems-title`,children:[`⚠️ 发现 `,p.length,` 个文件解析问题`]}),(0,A.jsx)(`div`,{className:`settings-problems-list`,children:p.map((e,t)=>(0,A.jsxs)(`div`,{className:`settings-problem-row`,children:[(0,A.jsx)(`span`,{className:`settings-problem-file`,children:e.file}),`: `,e.message]},t))})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsxs)(`h4`,{className:`settings-section-title`,children:[`已发现的智能体(共 `,f.length,` 个)`]}),f.length===0?(0,A.jsxs)(`div`,{className:`settings-empty-hint`,children:[`当前未发现任何智能体。请在上述目录中添加 `,(0,A.jsx)(`code`,{children:`.md`}),` 文件(需包含 YAML frontmatter)。`]}):(0,A.jsx)(`div`,{className:`settings-agent-grid`,children:f.map(e=>(0,A.jsxs)(`div`,{className:`settings-agent-card`,children:[(0,A.jsxs)(`div`,{className:`settings-agent-card-header`,children:[(0,A.jsx)(`span`,{className:`settings-agent-name`,children:e.name}),(0,A.jsxs)(`span`,{className:`settings-agent-id`,children:[`(`,e.id,`)`]}),(0,A.jsx)(`span`,{className:`settings-agent-mode-badge ${e.mode}`,children:e.mode===`primary`?`主智能体`:`子智能体`})]}),e.sourceDir&&(0,A.jsxs)(`div`,{className:`settings-agent-source`,title:e.sourceDir,children:[`来源:`,e.sourceDir]}),e.description&&(0,A.jsx)(`div`,{className:`settings-agent-desc`,children:e.description}),(0,A.jsxs)(`div`,{className:`settings-agent-footer`,children:[(0,A.jsx)(`span`,{className:`settings-agent-tools`,children:e.toolSummary}),e.model&&(0,A.jsxs)(`span`,{className:`settings-agent-model`,children:[e.model.provider,`/`,e.model.modelId]})]})]},`${e.sourceDir}-${e.id}`))})]}),(0,A.jsx)(`div`,{className:`picker-actions`,children:(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,onClick:e.onClose,children:`完成`})})]})}function At(e){return(0,A.jsx)(kt,{context:e})}function jt({context:e}){let[t,n]=(0,l.useState)(``),[r,i]=(0,l.useState)(``),[a,o]=(0,l.useState)(),s=e=>{try{return new RegExp(e,`i`),!1}catch{return!0}},c=s(t),u=s(r),d=e.modelFilterRules??[];return(0,A.jsx)(`section`,{"data-model-rules":`1`,children:(0,A.jsxs)(`fieldset`,{disabled:e.pendingSettings,className:`model-rules-fields`,children:[(0,A.jsx)(`p`,{children:`匹配工作区名称后,仅允许匹配模型名称或 provider/modelId 的模型。多条命中规则必须全部满足。`}),d.map(t=>(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`code`,{children:[t.workspacePattern,` → `,t.modelPattern]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>{o(t.id),n(t.workspacePattern),i(t.modelPattern)},children:`编辑`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>e.onSetModelRules?.(d.filter(e=>e.id!==t.id)),children:`删除`})]},t.id)),(0,A.jsxs)(`label`,{children:[`工作区名正则`,(0,A.jsx)(`input`,{"data-rule-workspace":`1`,value:t,"aria-invalid":c,onChange:e=>n(e.target.value)})]}),(0,A.jsxs)(`label`,{children:[`允许的模型名正则`,(0,A.jsx)(`input`,{"data-rule-model":`1`,value:r,"aria-invalid":u,onChange:e=>i(e.target.value)})]}),(c||u)&&(0,A.jsx)(`p`,{role:`alert`,children:`正则表达式不合法,请修正后保存。`}),(0,A.jsx)(`button`,{type:`button`,"data-rule-save":`1`,disabled:!t||!r||c||u,onClick:()=>{let s={id:a??crypto.randomUUID(),workspacePattern:t,modelPattern:r};e.onSetModelRules?.([...d.filter(e=>e.id!==s.id),s]),n(``),i(``),o(void 0)},children:`保存规则`})]})})}var Mt=[{id:`appearance`,label:`外观`,render:Ot},{id:`agents`,label:`智能体`,render:At},{id:`model-rules`,label:`模型过滤`,render:e=>(0,A.jsx)(jt,{context:e})}],P=Mt[0]?.id;function Nt({theme:e,onChooseTheme:t,onClose:n,agentCatalog:r,subagentCatalog:i,modelFilterRules:a,onSetModelRules:o,customAgentDirs:s,pendingSettings:c,onSetCustomAgentDirs:u,onRescanAgents:d}){let[f,p]=(0,l.useState)(P);(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.defaultPrevented&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]);let m=Mt.find(e=>e.id===f)??Mt[0];return(0,A.jsx)(`div`,{className:`overlay`,onClick:n,children:(0,A.jsxs)(`div`,{className:`picker settings-window`,"data-theme-dialog":`1`,"data-settings-window":`1`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`div`,{className:`settings-window-head`,children:(0,A.jsx)(`h2`,{children:`设置`})}),(0,A.jsxs)(`div`,{className:`settings-window-body`,children:[(0,A.jsxs)(`nav`,{className:`settings-nav`,role:`tablist`,"aria-orientation":`vertical`,"aria-label":`设置分类`,"data-settings-nav":`1`,children:[(0,A.jsx)(`div`,{className:`settings-nav-label`,children:`分类`}),Mt.map(e=>(0,A.jsx)(`button`,{type:`button`,id:`settings-tab-${e.id}`,className:`settings-category`,role:`tab`,"aria-selected":e.id===m?.id,"aria-controls":`settings-panel`,tabIndex:e.id===m?.id?0:-1,"data-settings-category":e.id,onClick:()=>p(e.id),children:e.label},e.id))]}),m&&(0,A.jsxs)(`div`,{className:`settings-panel`,id:`settings-panel`,role:`tabpanel`,"aria-labelledby":`settings-tab-${m.id}`,"data-settings-panel":m.id,children:[(0,A.jsx)(`h3`,{className:`settings-panel-title`,"data-settings-panel-title":m.id,children:m.label}),m.render({theme:e,onChooseTheme:t,onClose:n,agentCatalog:r,subagentCatalog:i,modelFilterRules:a,onSetModelRules:o,customAgentDirs:s,pendingSettings:c,onSetCustomAgentDirs:u,onRescanAgents:d})]})]})]})})}var Pt=[{kind:`calculator`,name:`计算器`,glyph:`∑`,blurb:`算术表达式,四则运算与乘方。除零会明确报错。`},{kind:`timestamp`,name:`时间戳`,glyph:`◷`,blurb:`Unix 时间戳与日期互转,本地计算,不联网。`}],Ft=[{id:`preset_calculator`,kind:`calculator`,name:`计算器`,glyph:`∑`}],It=40,Lt=2048,Rt=`super-pi:tools:v1`;function zt(e){return typeof e==`string`?e.replace(/\s+/g,` `).trim().slice(0,It):``}function Bt(e){let t=e.trim();if(!t)return{ok:!1,reason:`请填写网址。`};if(t.length>Lt)return{ok:!1,reason:`网址太长了,请控制在 ${Lt} 个字符以内。`};let n=h(t);return n?{ok:!0,url:n}:{ok:!1,reason:`这个网址不是允许的协议。只支持 http / https / mailto 开头的网址。`}}function Vt(e){if(!e)return[];let t;try{t=JSON.parse(e)}catch{return[]}if(!Array.isArray(t))return[];let n=[],r=new Set;for(let e of t){if(typeof e!=`object`||!e)continue;let t=e,i=t.kind;if(typeof i!=`string`||i!==`calculator`&&i!==`timestamp`&&i!==`link`)continue;let a=zt(t.name);if(!a)continue;let o=typeof t.glyph==`string`&&t.glyph.trim()?t.glyph.trim().slice(0,4):``;if(!o)continue;let s=typeof t.id==`string`&&t.id.trim()?t.id.trim().slice(0,64):``;if(s&&!r.has(s)){if(i===`link`){let e=h(typeof t.url==`string`?t.url:``);if(!e)continue;r.add(s),n.push({id:s,kind:`link`,name:a,glyph:o,url:e})}else if(r.add(s),n.push({id:s,kind:i,name:a,glyph:o}),n.length>=32)break}}return n}function Ht(e){return JSON.stringify(e.map(e=>e.kind===`link`?{...e}:{id:e.id,kind:e.kind,name:e.name,glyph:e.glyph}))}function Ut(e,t){let n=e===`link`?`link`:`preset_${e}`,r=typeof globalThis<`u`?globalThis.crypto:void 0,i=typeof r?.randomUUID==`function`?r.randomUUID().slice(0,8):``;i||=Math.random().toString(36).slice(2,10);let a=`${n}_${i}`,o=1;for(;t.includes(a);)a=`${n}_${i}_${o}`,o+=1;return a}function Wt(e,t){if(e.some(e=>e.kind===t))return e.slice();let n=Pt.find(e=>e.kind===t);return n?[...e,{id:Ut(t,e.map(e=>e.id)),kind:t,name:n.name,glyph:n.glyph}]:e.slice()}function Gt(e,t){return e.filter(e=>e.id!==t)}var Kt=e=>({ok:!1,reason:e}),qt=`除数不能为 0:除以零没有结果,请换一个非零的除数。`,Jt=new Set([`/`,`%`]),Yt=e=>e!==void 0&&e>=`0`&&e<=`9`,F=e=>e!==void 0&&/\s/.test(e);function Xt(e){for(;F(e.source[e.at]);)e.at+=1}function Zt(e){let t=e.at,n=0;for(;Yt(e.source[e.at]);)e.at+=1,n+=1;if(e.source[e.at]===`.`)for(e.at+=1;Yt(e.source[e.at]);)e.at+=1,n+=1;if(!n)return e.at=t,Kt(`「${e.source[t]}」不是有效的数字。`);let r=Number(e.source.slice(t,e.at));return Number.isFinite(r)?{ok:!0,value:r}:Kt(`数字太长了,无法表示。`)}function Qt(e){Xt(e);let t=e.source[e.at];if(t===void 0)return Kt(`算式不完整:末尾还缺一个数字或右括号。`);if(t===`(`){e.at+=1;let t=nn(e);return t.ok?(Xt(e),e.source[e.at]===`)`?(e.at+=1,t):Kt(`括号不匹配:少了一个右括号「)」。`)):t}return Yt(t)||t===`.`?Zt(e):Kt(`无法识别的字符「${t}」。`)}function $t(e){let t=Qt(e);if(!t.ok||(Xt(e),e.source[e.at]!==`^`))return t;e.at+=1;let n=en(e);if(!n.ok)return n;let r=t.value**n.value;return Number.isFinite(r)?{ok:!0,value:r}:Kt(`结果超出了可计算的数值范围。`)}function en(e){Xt(e);let t=e.source[e.at];if(t!==`+`&&t!==`-`)return $t(e);e.at+=1;let n=en(e);if(!n.ok)return n;let r=t===`-`?-n.value:n.value;return Number.isFinite(r)?{ok:!0,value:r}:Kt(`结果超出了可计算的数值范围。`)}function tn(e){let t=en(e);if(!t.ok)return t;for(;;){Xt(e);let n=e.source[e.at];if(n!==`*`&&!Jt.has(n))return t;e.at+=1;let r=en(e);if(!r.ok)return r;if(Jt.has(n)&&r.value===0)return Kt(qt);let i=n===`*`?t.value*r.value:n===`%`?t.value%r.value:t.value/r.value;if(!Number.isFinite(i))return Kt(`结果超出了可计算的数值范围。`);t={ok:!0,value:i}}}function nn(e){let t=tn(e);if(!t.ok)return t;for(;;){Xt(e);let n=e.source[e.at];if(n!==`+`&&n!==`-`)return t;e.at+=1;let r=tn(e);if(!r.ok)return r;let i=n===`+`?t.value+r.value:t.value-r.value;if(!Number.isFinite(i))return Kt(`结果超出了可计算的数值范围。`);t={ok:!0,value:i}}}function rn(e){let t=e.trim();if(!t)return Kt(`请输入算式。`);if(t.length>200)return Kt(`算式太长了,请控制在 200 个字符以内。`);let n={source:t,at:0},r=nn(n);return r.ok?(Xt(n),n.at===t.length?Number.isFinite(r.value)?r:Kt(`结果不是有限数字。`):Kt(`「${t[n.at]}」后面的内容无法识别,请检查是否漏了运算符。`)):r}function an(e){return String(!Number.isFinite(e)||Number.isInteger(e)&&Math.abs(e)<1e21?e:Number(e.toPrecision(12)))}function on(e){let t=e.trim();if(!t)return{ok:!1,reason:`请输入时间戳或日期。`};if(/^\d+$/.test(t)){let e=Number(t);if(!Number.isFinite(e))return{ok:!1,reason:`这个数字太大,无法表示。`};let n=t.length<=11?e*1e3:e;return!Number.isFinite(n)||Math.abs(n)>864e13?{ok:!1,reason:`这个时间戳超出了日期能表示的范围。`}:{ok:!0,ms:n}}let n=Date.parse(t);return Number.isNaN(n)?{ok:!1,reason:`看不懂这个日期。试试 1757000000、2026-10-08 或 2026-10-08T09:00:00。`}:{ok:!0,ms:n}}var sn=e=>String(Math.abs(e)).padStart(2,`0`);function cn(e){let t=new Date(e);return Number.isNaN(t.getTime())?null:{local:`${t.getFullYear()}-${sn(t.getMonth()+1)}-${sn(t.getDate())} ${sn(t.getHours())}:${sn(t.getMinutes())}:${sn(t.getSeconds())}`,iso:t.toISOString(),seconds:String(Math.floor(e/1e3)),milliseconds:String(e)}}var ln={workspaces:[],conversations:[],subagentRuns:[],queuedMessages:[]},un=e=>e.nativeEvent.isComposing||e.keyCode===229,dn=e=>{if(typeof e!=`string`||e.length===0)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:new Intl.DateTimeFormat(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}).format(t)},fn=6e4,pn=60*fn,mn=24*pn,hn=7*mn,gn=30*mn,_n=365*mn,vn=(e,t)=>{let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=t-n.getTime();return r<3e4?`now`:r<pn?`${Math.max(1,Math.floor(r/fn))}m ago`:r<mn?`${Math.floor(r/pn)}h ago`:r<hn?`${Math.floor(r/mn)}d ago`:r<gn?`${Math.floor(r/hn)}w ago`:r<_n?`${Math.floor(r/gn)}mo ago`:`${Math.floor(r/_n)}y ago`},yn=(e,t)=>e.updatedAt<t.updatedAt?1:e.updatedAt>t.updatedAt?-1:0,bn=(e,t)=>{let n=e.archivedAt??``,r=t.archivedAt??``;return n<r?1:n>r?-1:0},xn=e=>{if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`},Sn=1e3,Cn=3e4,wn=async e=>{try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.cssText=`position:fixed;top:0;left:0;width:1px;height:1px;padding:0;border:0;opacity:0;pointer-events:none`,document.body.appendChild(t);try{return t.select(),t.setSelectionRange(0,t.value.length),document.execCommand(`copy`)}catch{return!1}finally{t.remove()}},Tn={model:`模型`,thinking:`思考`,agent:`智能体`,subagent:`子智能体`},En={model:`模型`,thinking:`思考等级`,agent:`智能体`,subagent:`子智能体`},Dn={model:`选择模型`,thinking:`选择思考等级`,agent:`选择智能体`,subagent:`选择子智能体`},On=`图文`,kn=e=>e.imageInput?On:void 0,An=e=>e.normalize(`NFKD`).replace(/\p{M}/gu,``).toLowerCase(),jn=(e,t)=>{let n=An(t.trim());return n?e.filter(e=>An(`${e.label} ${e.detail??``} ${e.badge??``}`).includes(n)):e};function Mn({onClose:e,onCreate:t}){let[n,r]=(0,l.useState)(),[i,a]=(0,l.useState)(!0),[o,s]=(0,l.useState)(),[c,u]=(0,l.useState)(``),[d,f]=(0,l.useState)(``),p=async e=>{a(!0),s(void 0);try{let t=await fetch(`/api/fs/dirs${e?`?path=${encodeURIComponent(e)}`:``}`),n=await t.json();if(!t.ok)throw Error(n.error??`HTTP ${t.status}`);let i=n;r(i),f(i.path),u(i.suggestedName)}catch(e){s(e instanceof Error?e.message:`目录加载失败`)}finally{a(!1)}};(0,l.useEffect)(()=>{p()},[]),(0,l.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e]);let m=e=>{e?.preventDefault();let t=d.trim();t&&p(t)};return(0,A.jsx)(`div`,{className:`overlay`,onClick:e,children:(0,A.jsxs)(`div`,{className:`picker workspace-picker`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`h2`,{children:`选择工作区目录`}),(0,A.jsxs)(`form`,{className:`picker-path-bar`,onSubmit:m,children:[(0,A.jsx)(`input`,{className:`picker-path-input`,value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(un(e)?e.preventDefault():(e.preventDefault(),m()))},placeholder:`输入或粘贴目录绝对路径(如 D:\\projects 或 ~/code)`}),(0,A.jsx)(`button`,{type:`submit`,className:`picker-go-btn`,disabled:!d.trim()||i,children:`跳转`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-up-btn`,disabled:!n?.parent||i,onClick:()=>n?.parent&&void p(n.parent),title:`返回上一级目录`,children:`上一级`})]}),n?.drives?.length||n?.homeDir?(0,A.jsxs)(`div`,{className:`picker-shortcuts`,children:[(0,A.jsx)(`span`,{className:`picker-shortcuts-label`,children:`快捷位置:`}),n?.homeDir&&(0,A.jsx)(`button`,{type:`button`,className:`picker-shortcut`,onClick:()=>void p(`~`),title:n.homeDir,children:`🏠 主目录`}),n?.drives?.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`picker-shortcut`,onClick:()=>void p(e),children:e},e))]}):null,(0,A.jsxs)(`div`,{className:`picker-list`,children:[i&&(0,A.jsx)(`div`,{className:`picker-status`,children:`加载中…`}),!i&&o&&(0,A.jsxs)(`div`,{className:`picker-error`,children:[o,(0,A.jsx)(`button`,{onClick:()=>void p(n?.path||d),children:`重试`})]}),!i&&!o&&n?.entries.map(e=>(0,A.jsxs)(`button`,{className:`picker-dir`,onClick:()=>void p(e.path),children:[`📁 `,e.name]},e.path)),!i&&!o&&n&&n.entries.length===0&&(0,A.jsx)(`div`,{className:`picker-status`,children:`此目录下没有子目录`}),!i&&!o&&n?.truncated&&(0,A.jsx)(`div`,{className:`picker-status`,children:`目录过多,仅显示前 2000 项`})]}),(0,A.jsxs)(`label`,{className:`picker-name`,children:[`工作区名称`,(0,A.jsx)(`input`,{value:c,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(un(e)?e.preventDefault():(e.preventDefault(),c.trim()&&n&&t(c.trim(),n.path)))},placeholder:`工作区名称`})]}),(0,A.jsxs)(`div`,{className:`picker-actions`,children:[(0,A.jsx)(`button`,{className:`picker-cancel`,onClick:e,children:`取消`}),(0,A.jsx)(`button`,{className:`picker-ok`,disabled:!c.trim()||i||!!o||!n,onClick:()=>n&&t(c.trim(),n.path),children:`使用这个目录`})]})]})})}var Nn={timeout:`扩展提问超时,已取消`,aborted:`运行已停止,扩展提问已取消`,expired:`运行已结束,扩展提问已取消`},Pn=10;function Fn(e,t){if(!t)return`正在从 Pi 读取${e}列表…`;if(t.source!==`pi`)return`读取 Pi ${e}列表失败:${t.error??`未知原因`}`}function In(e){if(!e)return`正在读取 agent 列表…`;if(e.source!==`directory`)return`读取 agent 列表失败:${e.error??`未知原因`}`;if(e.problems.length)return`${e.problems.length} 个 agent 文件无法使用:${e.problems.map(e=>e.file).join(`、`)}`;if(!e.agents.length)return`${e.directory} 下没有 primary agent`}var Ln=e=>Math.abs(e)<1e3?String(e):`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`;function Rn(e){if(e===void 0||!Number.isFinite(e))return``;let t=Math.max(0,e);return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}分${Math.round(t%6e4/1e3)}秒`}var zn={dispatch:`派发时(子进程还没起来)`,prompt:`派活时(Pi 拒收了任务)`,turn:`生成回答时`,tool:`调用工具时`,settle:`收尾时`};function Bn({call:e,index:t,expanded:n,onToggle:r}){let i=e.args??[];return(0,A.jsxs)(`div`,{className:`call-block call-block-${e.status??`running`}`,"data-call-block":t,"data-call-tool":e.label,"data-call-detail":e.detail??void 0,"data-call-status":e.status??`running`,"data-call-expanded":n?`true`:`false`,"data-call-arg-count":i.length,children:[(0,A.jsx)(`button`,{type:`button`,className:`call-fold-edge`,"data-call-fold-edge":t,"aria-expanded":n,"aria-label":`${n?`折叠`:`展开`} ${e.label} 调用`,title:n?`折叠这次调用`:`展开这次调用`,onClick:r}),(0,A.jsxs)(`div`,{className:`call-head-row`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`call-head`,"data-call-head":t,"aria-expanded":n,onClick:r,children:[(0,A.jsx)(`span`,{className:`call-chevron`,"aria-hidden":`true`,children:n?`▾`:`▸`}),(0,A.jsx)(`span`,{className:`call-glyph`,"aria-hidden":`true`,children:e.status===`error`?`✕`:e.status===`ok`?`✓`:`·`}),(0,A.jsx)(`span`,{className:`call-label`,children:e.label}),e.detail&&(0,A.jsx)(`span`,{className:`call-detail`,title:e.detail,children:e.detail}),e.durationMs!==void 0&&(0,A.jsx)(`span`,{className:`call-duration`,children:Rn(e.durationMs)})]}),n&&(0,A.jsx)(`button`,{type:`button`,className:`call-fold-top`,"data-call-fold-top":t,onClick:r,children:`收起`})]}),n&&(0,A.jsx)(`div`,{className:`call-args`,"data-call-args":i.length,children:i.length===0?(0,A.jsx)(`div`,{className:`call-arg call-arg-empty`,"data-call-arg-empty":t,children:`(这次调用没有可显示的参数)`}):i.map(e=>(0,A.jsxs)(`div`,{className:`call-arg`,"data-call-arg":e.key,"data-call-arg-value":e.value,children:[(0,A.jsx)(`span`,{className:`call-arg-key`,children:e.key}),(0,A.jsx)(`span`,{className:`call-arg-value`,title:e.value,children:e.value})]},e.key))})]})}function Vn({run:e,name:t,expanded:n,onToggle:r,onStop:i,stopping:a}){let o=e.toolCalls??[],s=n?o:o.slice(-10),c=o.length-s.length,u=e.status===`running`,d=e.output??``,f=e.dispatchedBy===`model`,[p,m]=(0,l.useState)(0);(0,l.useEffect)(()=>{if(!u)return;m(Date.now());let e=window.setInterval(()=>m(Date.now()),200);return()=>window.clearInterval(e)},[u,e.startedAt]);let h=Date.parse(e.startedAt),g=u&&p>0&&Number.isFinite(h)?p-h:void 0,_=[...o].reverse().find(e=>e.status===void 0)?.label;return(0,A.jsxs)(`article`,{className:`subagent-card subagent-${e.status}${f?` subagent-by-model`:``}`,"data-subagent-card":e.id,"data-subagent-status":e.status,"data-subagent-agent":e.agentId,"data-subagent-tools":o.length,"data-subagent-dispatched-by":f?`model`:`human`,children:[(0,A.jsxs)(`div`,{className:`subagent-head`,children:[(0,A.jsx)(`span`,{className:`subagent-badge`,children:`子智能体`}),f&&(0,A.jsxs)(`span`,{className:`subagent-source`,"data-subagent-source":`model`,title:`primary 模型自己决定派这个子智能体去干活`,children:[(0,A.jsx)(`span`,{className:`subagent-source-glyph`,"aria-hidden":`true`,children:`⚡`}),`模型自主派发`]}),(0,A.jsx)(`strong`,{className:`subagent-name`,"data-subagent-name":`1`,children:t||e.agentId}),(0,A.jsx)(`span`,{className:`subagent-status`,"data-subagent-status-text":`1`,children:u?`运行中`:e.status===`completed`?`已完成`:e.status===`stopped`?`已停止`:`失败`}),u?g!==void 0&&(0,A.jsxs)(`span`,{className:`subagent-clock`,"data-subagent-elapsed":`1`,"data-subagent-elapsed-ms":g,children:[`已运行 `,Rn(g)]}):e.durationMs!==void 0&&(0,A.jsxs)(`span`,{className:`subagent-duration`,"data-subagent-duration":`1`,"data-subagent-duration-ms":e.durationMs,children:[`用时 `,Rn(e.durationMs)]}),u&&(0,A.jsx)(`button`,{type:`button`,className:`subagent-stop`,"data-subagent-stop":e.id,disabled:a,onClick:i,children:`停止`})]}),u&&e.activity&&(0,A.jsxs)(`div`,{className:`subagent-activity`,"data-subagent-activity":e.activity.kind,"data-subagent-activity-at":e.activity.at,children:[(0,A.jsx)(`span`,{className:`subagent-activity-dot`,"aria-hidden":`true`}),e.activity.kind===`tool`?`正在调用 ${e.activity.label??`工具`}`:`正在思考…`]}),(0,A.jsxs)(`div`,{className:`subagent-task`,"data-subagent-task":`1`,children:[f&&(0,A.jsx)(`span`,{className:`subagent-task-source`,"data-subagent-model-task":`1`,children:`模型给的任务`}),e.task]}),(0,A.jsx)(`div`,{className:`subagent-output`,"data-subagent-output":`1`,"data-live-length":d.length,children:d||(u?`…`:e.outputTruncated?`(已按 50 KB 上限截断,浏览器仍收到完整内容)`:`(没有输出)`)}),e.failure&&(0,A.jsxs)(`div`,{className:`subagent-failure`,"data-subagent-failure":`1`,"data-subagent-failure-stage":e.failure.stage,children:[(0,A.jsx)(`span`,{className:`subagent-failure-label`,children:`卡在`}),(0,A.jsx)(`span`,{className:`subagent-failure-stage`,"data-subagent-failure-text":`1`,children:zn[e.failure.stage]}),e.failure.stage===`tool`&&_&&(0,A.jsxs)(`span`,{className:`subagent-failure-tool`,"data-subagent-failure-tool":`1`,children:[`· 正在跑 `,_]}),o.length>0&&(0,A.jsxs)(`span`,{className:`subagent-failure-progress`,children:[`· 死前已尝试 `,o.length,` 次工具调用`]})]}),e.error&&(0,A.jsx)(`div`,{className:`subagent-error`,"data-subagent-error":`1`,children:e.error}),o.length>0&&(0,A.jsxs)(`div`,{className:`subagent-tools`,"data-subagent-tool-count":o.length,children:[c>0&&!n&&(0,A.jsxs)(`button`,{type:`button`,className:`subagent-more`,"data-subagent-hidden":c,onClick:r,children:[`… 另有 `,c,` 条工具调用`]}),s.map((e,t)=>(0,A.jsxs)(`div`,{className:`subagent-tool${e.status?` subagent-tool-${e.status}`:``}`,"data-subagent-tool":e.label,"data-subagent-tool-detail":e.detail??void 0,"data-subagent-tool-status":e.status??`running`,children:[(0,A.jsx)(`span`,{className:`subagent-tool-glyph`,"aria-hidden":`true`,children:e.status===`error`?`✕`:e.status===`ok`?`✓`:`·`}),(0,A.jsx)(`span`,{className:`subagent-tool-label`,children:e.label}),e.detail&&(0,A.jsx)(`span`,{className:`subagent-tool-detail`,title:e.detail,children:e.detail}),e.durationMs!==void 0&&(0,A.jsx)(`span`,{className:`subagent-tool-duration`,children:Rn(e.durationMs)})]},`${t}:${e.label}`))]}),e.usage&&(0,A.jsxs)(`div`,{className:`subagent-usage`,"data-subagent-usage":`1`,"data-subagent-turns":e.usage.turns,children:[(0,A.jsxs)(`span`,{children:[e.usage.turns,` turns`]}),(0,A.jsxs)(`span`,{children:[`↑`,Ln(e.usage.input)]}),(0,A.jsxs)(`span`,{children:[`↓`,Ln(e.usage.output)]}),e.usage.cacheRead>0&&(0,A.jsxs)(`span`,{children:[`cache↓`,Ln(e.usage.cacheRead)]}),e.usage.cacheWrite>0&&(0,A.jsxs)(`span`,{children:[`cache↑`,Ln(e.usage.cacheWrite)]}),e.usage.cost>0&&(0,A.jsxs)(`span`,{children:[`$`,e.usage.cost.toFixed(4)]})]}),o.length>10&&(0,A.jsx)(`button`,{type:`button`,className:`subagent-collapse`,"data-subagent-collapse":e.id,"aria-expanded":n,onClick:r,children:n?`收起`:`展开全部 ${o.length} 条`})]})}function Hn({items:e,pi:t,running:n,onCancel:r,onSteer:i}){let[a,o]=(0,l.useState)(!1);if(!e.length)return null;let s=e.filter(e=>e.state===`sending`);return(0,A.jsxs)(`section`,{className:`queue-dock`,"data-queue-dock":`1`,"data-queue-count":e.length,"data-queue-sending":s.length,"aria-label":`排队等待发送的消息`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`queue-dock-head`,"data-queue-collapse":`1`,"aria-expanded":!a,onClick:()=>o(e=>!e),children:[(0,A.jsx)(`span`,{className:`chevron`,children:a?`▸`:`▾`}),(0,A.jsxs)(`strong`,{children:[e.length,` 条待发送`]}),s.length>0&&(0,A.jsxs)(`span`,{className:`queue-dock-badge`,"data-queue-badge":`sending`,children:[s.length,` 条已交给 Agent`]}),a&&(0,A.jsx)(`span`,{className:`queue-dock-preview`,children:e[0].content})]}),!a&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`p`,{className:`queue-dock-note`,"data-queue-note":`steer`,children:[n?`「插队」= 当前这一批工具调用跑完就插进来,不用等整个任务结束;正在跑单个长工具时无法打断。`:`当前没有正在运行的这一轮,「插队」会等下一轮开始时发出。`,t&&t.steering.length>0&&` Pi 手上还有 ${t.steering.length} 条插队消息在等下一个工具调用边界。`]}),(0,A.jsx)(`ul`,{className:`queue-dock-list`,children:e.map((e,t)=>{let a=e.state===`sending`,o=e.content||(e.images?.length?`【图片】(${e.images.length})`:``);return(0,A.jsxs)(`li`,{className:`queue-row ${a?`queue-row-sending`:`queue-row-queued`}`,"data-queue-id":e.id,"data-queue-state":e.state,children:[(0,A.jsx)(`span`,{className:`queue-index`,"aria-hidden":`true`,children:t+1}),(0,A.jsx)(`span`,{className:`queue-text`,title:o,children:o}),(0,A.jsx)(`span`,{className:`queue-state`,"data-queue-state-label":a?`sending`:`queued`,children:a?`投递中…`:`待发送`}),a?(0,A.jsx)(`span`,{className:`queue-locked`,"data-queue-locked":e.id,children:`已交给 Agent,取消不掉`}):(0,A.jsxs)(A.Fragment,{children:[n?(0,A.jsx)(`button`,{type:`button`,className:`queue-steer`,"data-queue-steer":e.id,title:`插队:当前这一批工具调用跑完后插入,不用等整个任务结束`,"aria-label":`把「${o}」插队发送:当前这一批工具调用跑完后插入`,onClick:()=>i(e.id),children:`插队`}):(0,A.jsx)(`span`,{className:`queue-steer-idle`,"data-queue-steer-idle":e.id,title:`没有正在运行的这一轮,现在无法插队`,children:`未运行,暂不能插队`}),(0,A.jsx)(`button`,{type:`button`,className:`queue-cancel`,"data-queue-cancel":e.id,title:`取消这条排队消息,它不会被发出`,"aria-label":`取消排队消息「${o}」`,onClick:()=>r(e.id),children:`取消`})]})]},e.id)})})]})]})}function Un({request:e,onAnswer:t,pending:n}){let[r,i]=(0,l.useState)(e.prefill??``),a=e.method===`input`||e.method===`editor`,o=(0,A.jsx)(`button`,{type:`button`,className:`extui-cancel`,onClick:()=>t({cancelled:!0}),children:`取消提问`});return(0,A.jsxs)(`article`,{className:`extui-card extui-${e.method}`,"data-request-id":e.requestId,"data-method":e.method,children:[(0,A.jsxs)(`div`,{className:`extui-head`,children:[(0,A.jsx)(`span`,{className:`extui-badge`,children:`扩展提问`}),e.timeoutMs!==void 0&&(0,A.jsxs)(`span`,{className:`extui-deadline`,children:[Math.round(e.timeoutMs/1e3),`s 超时`]})]}),n&&(0,A.jsx)(`p`,{role:`status`,children:`提交中…`}),(0,A.jsxs)(`fieldset`,{disabled:n,style:{border:0,padding:0,margin:0},children:[(0,A.jsx)(`h3`,{className:`extui-title`,children:e.title||e.method}),e.method===`confirm`&&(0,A.jsx)(`p`,{className:`extui-body`,children:e.message}),e.method===`select`&&(0,A.jsxs)(`div`,{className:`extui-options`,children:[(e.options??[]).map(e=>(0,A.jsx)(`button`,{type:`button`,className:`extui-option`,onClick:()=>t({value:e}),children:e},e)),(e.options??[]).length===0&&(0,A.jsx)(`p`,{className:`extui-body`,children:`扩展没有提供任何选项`})]}),a&&(0,A.jsxs)(`form`,{className:`extui-form`,onSubmit:e=>{e.preventDefault(),!n&&r.trim()&&t({value:r})},children:[e.method===`input`?(0,A.jsx)(`input`,{className:`extui-field`,value:r,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&un(e)&&e.preventDefault()},placeholder:e.placeholder??``}):(0,A.jsx)(`textarea`,{className:`extui-field`,value:r,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&un(e)&&e.preventDefault()}}),(0,A.jsxs)(`div`,{className:`extui-actions`,children:[(0,A.jsx)(`button`,{type:`submit`,className:`extui-primary`,disabled:!r.trim(),children:`提交`}),o]})]}),!a&&(0,A.jsxs)(`div`,{className:`extui-actions`,children:[e.method===`confirm`&&(0,A.jsx)(`button`,{type:`button`,className:`extui-primary`,onClick:()=>t({confirmed:!0}),children:`确认`}),e.method===`confirm`&&(0,A.jsx)(`button`,{type:`button`,className:`extui-no`,onClick:()=>t({confirmed:!1}),children:`拒绝`}),o]})]})]})}function Wn({initial:e,label:t,onCommit:n,onClose:r}){let[i,a]=(0,l.useState)(e),o=(0,l.useRef)(null),s=(0,l.useRef)(!1);(0,l.useEffect)(()=>{o.current?.focus(),o.current?.select()},[]);let c=!i.trim(),u=()=>{s.current=!0,r()},d=()=>{if(c)return;let t=i.trim();(t===e||n(t))&&u()};return(0,A.jsxs)(`div`,{className:`inline-edit`,"data-editing":`1`,children:[(0,A.jsx)(`input`,{ref:o,className:`inline-edit-input`,value:i,"aria-label":t,onChange:e=>a(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){if(un(e))return;e.preventDefault(),d()}else e.key===`Escape`&&(e.preventDefault(),u())},onBlur:()=>{s.current||r()}}),(0,A.jsx)(`button`,{type:`button`,className:`inline-edit-ok`,title:`确认重命名`,"aria-label":`确认重命名`,disabled:c,onMouseDown:e=>e.preventDefault(),onClick:d,children:`✓`}),(0,A.jsx)(`button`,{type:`button`,className:`inline-edit-cancel`,title:`取消重命名`,"aria-label":`取消重命名`,onMouseDown:e=>e.preventDefault(),onClick:u,children:`✗`})]})}function Gn({kind:e,label:t,value:n,detail:r,options:i,disabled:a,note:o,onChoose:s,scope:c}){let[u,d]=(0,l.useState)(!1),[f,p]=(0,l.useState)(``),[m,h]=(0,l.useState)(0),g=(0,l.useRef)(null),_=(0,l.useRef)(null),v=(0,l.useRef)(null),y=(0,l.useRef)(null),b=(0,l.useRef)([]),x=i.find(e=>e.selected),S=jn(i,f),C=S.length===0?-1:Math.min(Math.max(m,0),S.length-1),ee=C<0?void 0:S[C],w=(e=!1)=>{d(!1),e&&_.current?.focus()},te=()=>{p(``),h(Math.max(i.findIndex(e=>e.selected),0)),d(!0)},T=e=>h(t=>S.length?Math.min(Math.max(t+e,0),S.length-1):0);(0,l.useEffect)(()=>{if(!u)return;let e=e=>{g.current?.contains(e.target)||w()};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[u]),(0,l.useEffect)(()=>{if(!u)return;let e=g.current,t=t=>{e?.contains(t.relatedTarget)||w()};return e?.addEventListener(`focusout`,t),()=>e?.removeEventListener(`focusout`,t)},[u]),(0,l.useEffect)(()=>{u&&y.current?.focus()},[u]),(0,l.useEffect)(()=>{u&&C>=0&&b.current[C]?.scrollIntoView({block:`nearest`})},[u,C]),(0,l.useLayoutEffect)(()=>{if(!u)return;let e=v.current;if(!e)return;e.style.setProperty(`--picker-nudge`,`0px`),e.style.setProperty(`--picker-drop`,`0px`);let t=e.getBoundingClientRect(),n=Math.min(window.innerWidth-8-t.right,Math.max(8-t.left,0)),r=Math.min(window.innerHeight-8-t.bottom,Math.max(8-t.top,0));e.style.setProperty(`--picker-nudge`,`${n}px`),e.style.setProperty(`--picker-drop`,`${r}px`)},[u,S.length,i.length]);let ne=e=>{if(u){if(e.key===`Escape`)e.preventDefault(),w(!0);else if(e.key===`ArrowDown`)e.preventDefault(),T(1);else if(e.key===`ArrowUp`)e.preventDefault(),T(-1);else if(e.key===`Home`)e.preventDefault(),h(0);else if(e.key===`End`)e.preventDefault(),h(Math.max(S.length-1,0));else if(e.key===`Enter`){if(un(e))return;e.preventDefault(),ee&&(s(ee.key),w(!0))}}},re=`picker-list-${c??e}`,ie=t=>`picker-option-${c??e}-${t}`;return(0,A.jsxs)(`div`,{className:`session-picker-item session-picker-${e}`,ref:g,onKeyDown:u?ne:void 0,children:[(0,A.jsxs)(`button`,{ref:_,type:`button`,className:`session-picker-trigger`,disabled:a,"aria-haspopup":`listbox`,"aria-expanded":u,title:o??`${Tn[e]}:${r?`${t} · ${r}`:t}`,"data-picker-trigger":e,"data-picker-value":n??t,"data-picker-selected":i.some(e=>e.selected),onClick:()=>u?w():te(),children:[(0,A.jsx)(`span`,{className:`session-picker-kind`,children:Tn[e]}),(0,A.jsx)(`span`,{className:`session-picker-name`,children:t}),r&&(0,A.jsx)(`span`,{className:`session-picker-detail`,children:r}),(0,A.jsx)(`span`,{className:`session-picker-caret`,"aria-hidden":`true`,children:`▾`})]}),u&&(0,A.jsxs)(`div`,{className:`picker-menu`,ref:v,"data-picker-menu":e,"data-picker-highlight":C,children:[(0,A.jsxs)(`div`,{className:`picker-filter`,children:[(0,A.jsx)(`span`,{className:`picker-filter-icon`,"aria-hidden":`true`,children:`🔍`}),(0,A.jsx)(`input`,{ref:y,className:`picker-filter-input`,"data-picker-filter":e,role:`combobox`,"aria-label":`筛选${En[e]}选项`,"aria-expanded":`true`,"aria-controls":re,"aria-autocomplete":`list`,"aria-activedescendant":ee?ie(C):void 0,value:f,placeholder:`输入以筛选…`,autoComplete:`off`,spellCheck:!1,onChange:e=>{p(e.target.value),h(0)}}),f&&(0,A.jsx)(`button`,{type:`button`,className:`picker-filter-clear`,"data-picker-filter-clear":e,title:`清空筛选`,"aria-label":`清空筛选`,onMouseDown:e=>e.preventDefault(),onClick:()=>{p(``),h(0),y.current?.focus()},children:`✕`})]}),x&&!S.some(e=>e.key===x.key)&&(0,A.jsxs)(`div`,{className:`picker-current`,"data-picker-current":e,"data-picker-current-value":x.key,children:[(0,A.jsx)(`span`,{className:`picker-current-label`,children:`当前`}),(0,A.jsx)(`span`,{className:`picker-current-value`,children:x.label})]}),(0,A.jsxs)(`div`,{className:`picker-list`,role:`listbox`,id:re,"aria-label":Dn[e],children:[S.map((e,t)=>(0,A.jsxs)(`button`,{id:ie(t),type:`button`,role:`option`,"aria-selected":e.selected,ref:e=>{b.current[t]=e},className:`picker-option${e.selected?` selected`:``}${t===C&&!e.selected?` preview`:``}`,"data-picker-option":e.key,"data-picker-option-selected":e.selected,"data-picker-highlight":t===C,onClick:()=>{s(e.key),w(!0)},children:[e.color&&(0,A.jsx)(`span`,{className:`picker-option-swatch`,style:{background:e.color},"aria-hidden":`true`}),(0,A.jsx)(`span`,{className:`picker-option-name`,children:e.label}),e.badge&&(0,A.jsx)(`span`,{className:`picker-option-badge`,"data-picker-option-badge":e.badge,children:e.badge}),e.detail&&(0,A.jsx)(`span`,{className:`picker-option-detail`,children:e.detail}),e.selected&&(0,A.jsx)(`span`,{className:`picker-option-mark`,"aria-hidden":`true`,children:`✓`})]},e.key)),S.length===0&&(0,A.jsx)(`div`,{className:`picker-empty`,"data-picker-empty":e,children:`没有匹配「${f.trim()}」的${En[e]}`})]})]})]})}var Kn=`__pi_default__`;function qn({workspace:e,catalog:t,agents:n,onSave:r,onRename:i,onClose:a}){let[o,s]=(0,l.useState)(e.defaultAgentId),[c,u]=(0,l.useState)(e.defaultModel),[d,f]=(0,l.useState)(e.defaultThinkingLevel);(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.defaultPrevented&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let p=t?.source===`pi`,m=[{key:Kn,label:`跟随 Pi 默认`,detail:`不为新会话指定模型`,selected:c===void 0},...(t?.models??[]).map(e=>({key:`${e.provider}/${e.modelId}`,label:e.label,detail:e.detail,badge:kn(e),selected:c?.provider===e.provider&&c.modelId===e.modelId}))],h=[{key:Kn,label:`跟随 Pi 默认`,detail:`不为新会话指定思考等级`,selected:d===void 0},...(t?.levels??[]).map(e=>({key:e,label:e,selected:e===d}))],g=e=>{if(e===Kn){u(void 0);return}let n=(t?.models??[]).find(t=>t.provider===e.split(`/`)[0]&&t.modelId===e.split(`/`)[1]);n&&u({provider:n.provider,modelId:n.modelId,label:n.label})},_=e=>f(e===Kn?void 0:e),v=[{key:Kn,label:`跟随 Pi 默认`,detail:`新会话不使用任何 agent 角色`,selected:o===void 0},...(n?.agents??[]).map(e=>({key:e.id,label:e.name,detail:e.toolSummary,color:e.color,selected:o===e.id}))];return(0,A.jsx)(`div`,{className:`overlay`,onClick:a,children:(0,A.jsxs)(`div`,{className:`picker settings-dialog`,"data-settings-dialog":`1`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`h2`,{children:`工作区设置`}),(0,A.jsxs)(`div`,{className:`settings-scope`,children:[e.name,` · 默认值只影响之后新建的会话,已有会话不变`]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`默认智能体`}),(0,A.jsx)(Gn,{kind:`agent`,scope:`settings-agent`,label:n?.agents.find(e=>e.id===o)?.name??`跟随 Pi 默认`,value:o??Kn,detail:o?`${n?.agents.find(e=>e.id===o)?.toolSummary??``}`:void 0,options:v,disabled:!n||n.source===`unavailable`,note:In(n),onChoose:e=>s(e===Kn?void 0:e)})]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`默认模型`}),(0,A.jsx)(Gn,{kind:`model`,scope:`settings-model`,label:c?.label??`跟随 Pi 默认`,value:c?`${c.provider}/${c.modelId}`:Kn,detail:c?`${c.provider}/${c.modelId}`:void 0,options:m,disabled:!p,note:Fn(`模型`,t),onChoose:g})]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`思考强度`}),(0,A.jsx)(Gn,{kind:`thinking`,scope:`settings-thinking`,label:d??`跟随 Pi 默认`,value:d??Kn,options:h,disabled:!p,note:Fn(`思考等级`,t),onChoose:_})]}),(0,A.jsxs)(`div`,{className:`picker-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`settings-rename`,"data-settings-rename":`1`,onClick:i,children:`重命名工作区`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,"data-settings-cancel":`1`,onClick:a,children:`取消`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-ok`,"data-settings-save":`1`,onClick:()=>r(o,c,d),children:`保存`})]})]})})}var Jn=[{id:`main`,label:`主`,name:`主 tab`},{id:`tools`,label:`工具`,name:`工具 tab`},{id:`files`,label:`文件`,name:`文件 tab`}],Yn={pending:`未开始`,in_progress:`进行中`,completed:`已完成`},Xn={pending:`○`,in_progress:`◐`,completed:`✓`},Zn={high:`高`,medium:`中`,low:`低`};function Qn(e){let t=e.filter(e=>e.status!==`completed`).length;return e.length?t?`${t} 个未完成 / 共 ${e.length} 个`:`全部完成:${e.length} 个`:`0 个待办任务`}function $n({todo:e,index:t}){let n=e.id??`todo_${t}`;return(0,A.jsxs)(`li`,{className:`todo-item todo-${e.status}`,"data-todo-item":n,"data-todo-status":e.status,children:[(0,A.jsx)(`span`,{className:`todo-mark`,"aria-hidden":`true`,children:Xn[e.status]}),(0,A.jsx)(`span`,{className:`todo-text`,children:e.content}),(0,A.jsx)(`span`,{className:`todo-status`,"data-todo-status-text":`1`,children:Yn[e.status]}),e.priority&&(0,A.jsx)(`span`,{className:`todo-priority`,"data-todo-priority":e.priority,children:Zn[e.priority]})]})}function er({tasks:e}){return(0,A.jsx)(`ul`,{className:`bg-list`,"data-bg-task-count":e.length,children:e.map((e,t)=>{let n=e.id||`bg_${t}`,r=e.status?.trim()||`未知状态`;return(0,A.jsxs)(`li`,{className:`bg-item`,"data-bg-task":n,"data-bg-task-status":e.status??`unknown`,children:[(0,A.jsx)(`span`,{className:`bg-title`,children:e.title?.trim()||e.id||`未命名任务 ${t+1}`}),(0,A.jsxs)(`span`,{className:`bg-meta`,children:[e.agentId?.trim()&&(0,A.jsx)(`span`,{className:`bg-agent`,"data-bg-agent":e.agentId,children:e.agentId}),(0,A.jsx)(`span`,{className:`bg-status`,children:r})]})]},n)})})}function tr({todos:e,tasks:t,collapsed:n,onToggle:r,workspaceId:i,files:a,onOpenFile:o,activeTab:s,onSelectTab:c}){return(0,A.jsx)(`div`,{className:`right-rail${n?` right-rail-collapsed`:``}`,role:`complementary`,"aria-label":`右侧栏`,"data-right-rail":`1`,"data-right-rail-collapsed":n,children:n?(0,A.jsx)(`button`,{type:`button`,className:`right-rail-open`,"data-right-rail-open":`1`,title:`展开右侧栏`,"aria-label":`展开右侧栏`,onClick:r,children:`‹`}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`right-rail-head`,children:[(0,A.jsx)(`div`,{className:`right-tabs`,role:`tablist`,"aria-label":`右侧栏 tab`,"data-right-tab-count":Jn.length,children:Jn.map(e=>(0,A.jsx)(`button`,{type:`button`,role:`tab`,id:`right-tab-${e.id}`,className:`right-tab${e.id===s?` right-tab-active`:``}`,"data-right-tab":e.id,"aria-selected":e.id===s,"aria-controls":`right-panel-${e.id}`,title:e.name,"aria-label":e.name,onClick:()=>c(e.id),children:e.label},e.id))}),(0,A.jsx)(`button`,{type:`button`,className:`right-rail-collapse`,"data-right-rail-collapse":`1`,title:`收起右侧栏(聊天区会变宽)`,"aria-label":`收起右侧栏`,onClick:r,children:`›`})]}),Jn.filter(e=>e.id===s).map(n=>(0,A.jsxs)(`div`,{className:`right-rail-body`,role:`tabpanel`,id:`right-panel-${n.id}`,"aria-labelledby":`right-tab-${n.id}`,"data-right-panel":n.id,children:[n.id===`main`&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`待办任务`}),(0,A.jsx)(`span`,{className:`rail-section-count`,"data-todo-summary":`1`,children:Qn(e)})]}),e.length>0?(0,A.jsx)(`ol`,{className:`todo-list`,"data-todo-count":e.length,children:e.map((e,t)=>(0,A.jsx)($n,{todo:e,index:t},e.id??`todo_${t}`))}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-todo-empty":`1`,children:`暂无待办任务。Agent 开始处理多步骤任务时,会自己把待办写到这里。`}),(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`后台任务`}),(0,A.jsx)(`span`,{className:`rail-section-count`,"data-bg-summary":`1`,children:t.length?`${t.length} 个运行中`:`0 个`})]}),t.length>0?(0,A.jsx)(er,{tasks:t}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-bg-empty":`1`,children:`当前没有正在运行的后台任务。`})]}),n.id===`tools`&&(0,A.jsx)(ir,{}),n.id===`files`&&(0,A.jsx)(tt,{workspaceId:i,files:a,onOpenFile:o})]},n.id))]})})}function nr(){try{if(typeof window>`u`)return Ft.slice();let e=Vt(window.localStorage.getItem(Rt));return window.localStorage.getItem(`super-pi:tools:v1`)===null?Ft.slice():e}catch{return Ft.slice()}}function rr(e){try{if(typeof window>`u`)return;window.localStorage.setItem(Rt,Ht(e))}catch{}}function ir(){let[e,t]=(0,l.useState)(nr),[n,r]=(0,l.useState)(),[i,a]=(0,l.useState)(``),[o,s]=(0,l.useState)(``),[c,u]=(0,l.useState)(),d=e.find(e=>e.id===n);return(0,l.useEffect)(()=>{rr(e)},[e]),(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`工具`}),(0,A.jsxs)(`span`,{className:`rail-section-count`,"data-tool-summary":`1`,children:[e.length,` 个`]})]}),e.length>0?(0,A.jsx)(`ul`,{className:`tool-grid`,"data-tool-count":e.length,children:e.map(e=>(0,A.jsxs)(`li`,{className:`tool-slot`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`tool-icon`,"data-tool-icon":e.id,"data-tool-kind":e.kind,"data-tool-state":e.id===n?`open`:`idle`,title:`打开${e.name}`,"aria-label":`打开${e.name}`,"aria-current":e.id===n?`true`:void 0,onClick:()=>r(t=>t===e.id?void 0:e.id),children:[(0,A.jsx)(`span`,{className:`tool-icon-glyph`,"aria-hidden":`true`,children:e.glyph}),(0,A.jsx)(`span`,{className:`tool-icon-name`,children:e.name})]}),e.kind===`link`&&(0,A.jsx)(`button`,{type:`button`,className:`tool-remove`,"data-tool-remove":e.id,title:`移除${e.name}`,"aria-label":`移除${e.name}`,onClick:()=>{t(t=>Gt(t,e.id)),n===e.id&&r(void 0)},children:`✕`})]},e.id))}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-tool-empty":`1`,children:`还没有工具。从下面的预置列表挑一个,或者填一个自己的网址。`}),(0,A.jsx)(`div`,{className:`rail-section-head`,children:(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`从预置列表添加`})}),(0,A.jsx)(`div`,{className:`tool-presets`,"data-tool-presets":Pt.length,children:Pt.map(n=>{let r=e.some(e=>e.kind===n.kind);return(0,A.jsxs)(`div`,{className:`tool-preset`,"data-tool-preset":n.kind,children:[(0,A.jsx)(`span`,{className:`tool-preset-glyph`,"aria-hidden":`true`,children:n.glyph}),(0,A.jsxs)(`span`,{className:`tool-preset-text`,children:[(0,A.jsx)(`strong`,{children:n.name}),(0,A.jsx)(`small`,{children:n.blurb})]}),(0,A.jsx)(`button`,{type:`button`,className:`tool-preset-add`,"data-tool-add-preset":n.kind,disabled:r,title:r?`${n.name}已经在工具栏里了`:`添加${n.name}`,"aria-label":r?`${n.name}已添加`:`添加${n.name}`,onClick:()=>t(e=>Wt(e,n.kind)),children:r?`已添加`:`添加`})]},n.kind)})}),(0,A.jsx)(`div`,{className:`rail-section-head`,children:(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`添加网址工具`})}),(0,A.jsx)(`p`,{className:`tool-hint`,children:`填一个网址,它会变成一个图标;点开后在弹窗里用按钮在新标签页打开。网址只接受 http / https / mailto。`}),(0,A.jsx)(`input`,{className:`tool-input`,"data-tool-url-input":`1`,value:i,maxLength:2048,placeholder:`https://example.com/工具`,"aria-label":`工具网址`,onChange:e=>{a(e.target.value),u(void 0)}}),(0,A.jsx)(`input`,{className:`tool-input`,"data-tool-url-name":`1`,value:o,maxLength:40,placeholder:`名称(可留空,默认用域名)`,"aria-label":`工具名称(可选)`,onChange:e=>s(e.target.value)}),(0,A.jsx)(`button`,{type:`button`,className:`tool-url-add`,"data-tool-url-add":`1`,disabled:!i.trim(),onClick:()=>{let n=Bt(i);if(!n.ok){u(n.reason);return}if(e.length>=32){u(`工具最多 32 个,先删掉一个再加。`);return}let r=e.map(e=>e.id);t(e=>[...e,{id:Ut(`link`,r),kind:`link`,name:o.trim()||ar(n.url),glyph:`↗`,url:n.url}]),a(``),s(``),u(void 0)},children:`添加网址工具`}),c&&(0,A.jsx)(`p`,{className:`tool-error`,"data-tool-error":`1`,role:`alert`,children:c}),(0,A.jsxs)(`p`,{className:`tool-hint`,"data-tool-scope-note":`1`,children:[`能自定义到哪:从上面挑预置工具,或自己填一个网址。`,(0,A.jsx)(`b`,{children:`没有开放「写一段脚本来执行」这一档`}),`——它在浏览器里等同于任意代码执行,会拿着本应用的权限跑。计算器是手写的算术解析器,不含 eval,也认不出变量名。`]}),d&&(0,A.jsx)(or,{tool:d,onClose:()=>r(void 0)})]})}function ar(e){try{return new URL(e,typeof window>`u`?`http://localhost`:window.location.href).hostname||e.slice(0,30)}catch{return e.slice(0,30)}}function or({tool:e,onClose:t}){return(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]),(0,u.createPortal)((0,A.jsx)(`div`,{className:`tool-overlay`,"data-tool-overlay":e.id,onClick:e=>{e.target===e.currentTarget&&t()},children:(0,A.jsxs)(`div`,{className:`tool-dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`tool-dialog-title`,"data-tool-dialog":e.id,children:[(0,A.jsxs)(`div`,{className:`tool-dialog-head`,children:[(0,A.jsxs)(`h2`,{className:`tool-dialog-title`,id:`tool-dialog-title`,children:[(0,A.jsx)(`span`,{className:`tool-dialog-glyph`,"aria-hidden":`true`,children:e.glyph}),e.name]}),(0,A.jsx)(`button`,{type:`button`,className:`tool-dialog-close`,"data-tool-close":`1`,title:`关闭(Esc)`,"aria-label":`关闭${e.name}`,onClick:t,children:`✕`})]}),(0,A.jsxs)(`div`,{className:`tool-dialog-body`,children:[e.kind===`calculator`&&(0,A.jsx)(cr,{}),e.kind===`timestamp`&&(0,A.jsx)(lr,{}),e.kind===`link`&&(0,A.jsx)(ur,{tool:e})]})]})}),document.body)}function sr({image:e,onClose:t}){return(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]),(0,u.createPortal)((0,A.jsx)(`div`,{className:`lightbox-overlay`,"data-lightbox-overlay":`1`,onClick:e=>{e.target===e.currentTarget&&t()},children:(0,A.jsxs)(`div`,{className:`lightbox-dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lightbox-title`,"data-lightbox-dialog":`1`,children:[(0,A.jsxs)(`div`,{className:`lightbox-head`,children:[(0,A.jsx)(`h2`,{className:`lightbox-title`,id:`lightbox-title`,children:e.name||`图片大图`}),(0,A.jsx)(`button`,{type:`button`,className:`lightbox-close`,"data-lightbox-close":`1`,title:`关闭(Esc)`,"aria-label":`关闭大图`,onClick:t,children:`✕`})]}),(0,A.jsx)(`div`,{className:`lightbox-body`,children:(0,A.jsx)(`img`,{src:e.url,alt:e.name||`图片大图`,className:`lightbox-image`})})]})}),document.body)}function cr(){let[e,t]=(0,l.useState)(`12 * (3 + 4)`),[n,r]=(0,l.useState)(!1),i=rn(e),a=e=>{r(!1),t(t=>n?e:t+e)};return(0,A.jsxs)(`div`,{className:`tool-calc`,"data-tool-calc":`1`,children:[(0,A.jsx)(`input`,{className:`tool-input tool-calc-input`,"data-calc-input":`1`,value:e,maxLength:240,"aria-label":`算式`,spellCheck:!1,autoComplete:`off`,placeholder:`例如 (12 + 8) / 4`,onChange:e=>{r(!1),t(e.target.value)},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}}),(0,A.jsx)(`div`,{className:`tool-calc-keys`,"data-calc-keys":`1`,children:[[`7`,`7`],[`8`,`8`],[`9`,`9`],[`÷`,`/`],[`(`,`(`],[`)`,`)`],[`4`,`4`],[`5`,`5`],[`6`,`6`],[`×`,`*`],[`^`,`^`],[`%`,`%`],[`1`,`1`],[`2`,`2`],[`3`,`3`],[`-`,`-`],[`←`,`back`],[`C`,`clear`],[`0`,`0`],[`.`,`.`],[`+`,`+`]].map(([e,n])=>(0,A.jsx)(`button`,{type:`button`,className:`tool-calc-key`,"data-calc-key":n,"aria-label":e===`C`?`清空`:e===`←`?`退格`:`输入 ${e}`,onClick:()=>{n===`clear`?(t(``),r(!1)):n===`back`?(t(e=>e.slice(0,-1)),r(!1)):a(n)},children:e},e))}),i.ok?(0,A.jsx)(`p`,{className:`tool-calc-result`,"data-calc-result":`1`,"data-calc-value":String(i.value),children:an(i.value)}):(0,A.jsx)(`p`,{className:`tool-calc-error`,"data-calc-error":`1`,role:`alert`,children:i.reason})]})}function lr(){let[e,t]=(0,l.useState)(``),n=on(e),r=n.ok?cn(n.ms):null;return(0,A.jsxs)(`div`,{className:`tool-stamp`,"data-tool-stamp":`1`,children:[(0,A.jsx)(`input`,{className:`tool-input`,"data-stamp-input":`1`,value:e,maxLength:64,spellCheck:!1,"aria-label":`时间戳或日期`,placeholder:`1757000000 或 2026-10-08T09:00:00`,onChange:e=>t(e.target.value)}),r?(0,A.jsxs)(`dl`,{className:`tool-stamp-out`,"data-stamp-result":`1`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`本地时间`}),(0,A.jsx)(`dd`,{"data-stamp-local":`1`,children:r.local})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`ISO(UTC)`}),(0,A.jsx)(`dd`,{"data-stamp-iso":`1`,children:r.iso})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`秒`}),(0,A.jsx)(`dd`,{"data-stamp-seconds":`1`,children:r.seconds})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`毫秒`}),(0,A.jsx)(`dd`,{"data-stamp-ms":`1`,children:r.milliseconds})]})]}):(0,A.jsx)(`p`,{className:`tool-stamp-error`,"data-stamp-error":`1`,role:`alert`,children:n.ok?`这个日期无法显示。`:n.reason})]})}function ur({tool:e}){return(0,A.jsxs)(`div`,{className:`tool-link`,"data-tool-link":e.id,children:[(0,A.jsx)(`p`,{className:`tool-hint`,children:`这个网址工具保存了一个地址。点下面的按钮由浏览器在新标签页打开它。`}),(0,A.jsx)(`code`,{className:`tool-link-url`,"data-tool-link-url":e.id,children:e.url}),(0,A.jsx)(`a`,{className:`tool-link-open`,"data-tool-link-open":e.id,href:e.url,target:`_blank`,rel:`noopener noreferrer`,title:e.url,children:`在新标签页打开 ↗`})]})}var dr=`(max-width: 1100px)`,fr=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n));function pr(e,t,n){let r=Math.max(0,Math.round(n)-480),i=fr(520,180,Math.max(180,r-240)),a=fr(Math.round(e),180,i),o=fr(640,240,Math.max(240,r-a));return{sidebar:a,rail:fr(Math.round(t),240,o),sidebarMin:180,sidebarMax:i,railMin:240,railMax:o,sumCap:r}}var mr=`super-pi.rail-widths.v1`;function hr(){try{if(typeof window>`u`)return{};let e=window.localStorage.getItem(mr);if(e===null)return{};let t=JSON.parse(e),n=e=>typeof e==`number`&&Number.isFinite(e)&&e>0?Math.round(e):void 0;return{sidebar:n(t.sidebar),rail:n(t.rail)}}catch{return{}}}function gr(e){try{if(typeof window>`u`)return;window.localStorage.setItem(mr,JSON.stringify(e))}catch{}}function _r({side:e,width:t,min:n,max:r,label:i,onWidth:a}){let[o,s]=(0,l.useState)(!1),c=e=>e.shiftKey?64:16;return(0,A.jsx)(`div`,{className:`rail-resizer rail-resizer-${e}${o?` rail-resizer-dragging`:``}`,"data-rail-resizer":e,"data-rail-resizer-dragging":o?`true`:`false`,"data-rail-resizer-width":t,role:`separator`,"aria-orientation":`vertical`,"aria-label":i,"aria-valuenow":t,"aria-valuemin":n,"aria-valuemax":r,tabIndex:0,onMouseDown:i=>{i.preventDefault(),i.currentTarget.focus();let o=i.clientX,c=t;s(!0);let l=document.body,u=l.style.cursor,d=l.style.userSelect;l.style.cursor=`col-resize`,l.style.userSelect=`none`;let f=t=>{let i=e===`left`?t.clientX-o:o-t.clientX;a(fr(c+i,n,r))},p=()=>{l.style.cursor=u,l.style.userSelect=d,s(!1),window.removeEventListener(`mousemove`,f),window.removeEventListener(`mouseup`,p)};window.addEventListener(`mousemove`,f),window.addEventListener(`mouseup`,p)},onKeyDown:i=>{let o=c(i);i.key===`ArrowLeft`?(i.preventDefault(),a(fr(e===`left`?t-o:t+o,n,r))):i.key===`ArrowRight`?(i.preventDefault(),a(fr(e===`left`?t+o:t-o,n,r))):i.key===`Home`?(i.preventDefault(),a(n)):i.key===`End`&&(i.preventDefault(),a(r))}})}function vr(){let[e,t]=(0,l.useState)(ln),[n,r]=(0,l.useState)([]),i=(0,l.useRef)([]),a=n.reduce((e,t)=>t.apply(e),e),[o,s]=(0,l.useState)(),[c,u]=(0,l.useState)(!1),[d,f]=(0,l.useState)(),[p,m]=(0,l.useState)({}),[h,g]=(0,l.useState)(),[_,v]=(0,l.useState)(!1),y=(0,l.useRef)(void 0),[b,x]=(0,l.useState)({}),[S,C]=(0,l.useState)([]),[ee,w]=(0,l.useState)([]),[te,T]=(0,l.useState)(new Map),[ne,re]=(0,l.useState)(new Map),[ie,ae]=(0,l.useState)(),[E,oe]=(0,l.useState)(),[se,ce]=(0,l.useState)(),[le,ue]=(0,l.useState)(),[de,fe]=(0,l.useState)(),[pe,me]=(0,l.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 1100px)`).matches),[he,ge]=(0,l.useState)(()=>typeof window>`u`?1440:window.innerWidth);(0,l.useEffect)(()=>{let e=()=>ge(window.innerWidth);return window.addEventListener(`resize`,e),e(),()=>window.removeEventListener(`resize`,e)},[]);let[_e,ve]=(0,l.useState)(hr),ye=pr(_e.sidebar??270,_e.rail??320,he);(0,l.useEffect)(()=>{gr({sidebar:ye.sidebar,rail:ye.rail})},[ye.sidebar,ye.rail]);let be=e=>ve(t=>({...t,sidebar:e})),xe=e=>ve(t=>({...t,rail:e}));(0,l.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(dr),t=e=>{e.matches&&me(!0)};return e.addEventListener(`change`,t),e.matches&&me(!0),()=>e.removeEventListener(`change`,t)},[]);let[Se,Ce]=(0,l.useState)(new Map),[D,O]=(0,l.useState)({}),[we,Te]=(0,l.useState)({}),[Ee,De]=(0,l.useState)(),[Oe,k]=(0,l.useState)({}),ke=(0,l.useRef)(new Set),[je,Me]=(0,l.useState)([]),[Ne,Pe]=(0,l.useState)([]),[Fe,Ie]=(0,l.useState)(),[Le,Re]=(0,l.useState)(!1),ze=(0,l.useRef)(null),Be=(0,l.useRef)(!1),Ve=(0,l.useRef)(0),He=(0,l.useRef)([]),Ue=(0,l.useRef)(void 0),We=(0,l.useRef)(!1),[Ge,Ke]=(0,l.useState)(()=>Date.now());(0,l.useEffect)(()=>{let e=window.setInterval(()=>Ke(Date.now()),3e4);return()=>window.clearInterval(e)},[]);let qe=(0,l.useMemo)(()=>a.conversations.filter(e=>!e.archivedAt),[a.conversations]),j=(0,l.useMemo)(()=>qe.find(e=>e.id===o)??qe.find(e=>e.workspaceId===h)??(h&&a.workspaces.some(e=>e.id===h)?void 0:qe[0]),[o,qe,h,a.workspaces]),Je=(0,l.useRef)(h);Je.current=h,(0,l.useEffect)(()=>{j&&g(j.workspaceId)},[j?.id]),(0,l.useEffect)(()=>{Ue.current=j?.id});let Ye=Oe[j?.id??``]??{text:``,images:[],uploading:0},Xe=Ye.text,Ze=Ye.images,$e=Ye.uploading,tt=(e,t)=>k(n=>({...n,[e]:t(n[e]??{text:``,images:[],uploading:0})})),nt=e=>tt(j?.id??``,t=>({...t,text:e})),rt=e=>tt(j?.id??``,t=>({...t,images:typeof e==`function`?e(t.images):e})),[it,ot]=(0,l.useState)([]),st=it.length>0?it:j?[j.id]:[],ct=(0,l.useMemo)(()=>st.map(e=>qe.find(t=>t.id===e)).filter(e=>e!==void 0),[st,qe]),lt=(0,l.useCallback)(e=>{s(e);let t=qe.find(t=>t.id===e)?.workspaceId;t&&g(t),gt(`session`),ot(t=>t.includes(e)?t:t.length>0?[...t,e]:[...j?.id&&j.id!==e?[j.id]:[],e])},[j]),ut=(0,l.useCallback)(e=>{let t=it.indexOf(e);if(t<0)return;let n=it.filter(t=>t!==e);if(ot(n),j?.id!==e)return;let r=n[Math.min(t,n.length-1)];r&&s(r)},[it,j]),M=et(h),[dt,pt]=(0,l.useState)(Jn[0].id),[ht,gt]=(0,l.useState)(`session`);(0,l.useEffect)(()=>{ht===`file`&&!M.active&>(`session`)},[ht,M.active]);let _t=(0,l.useCallback)(e=>{M.setActivePath(e),gt(`file`),pt(`files`)},[M.setActivePath]),vt=(0,l.useCallback)(async e=>{await M.openFile(e),gt(`file`)},[M.openFile]),yt=(0,l.useMemo)(()=>ct.map(e=>({id:`session:${e.id}`,rawId:e.id,kind:`session`,label:e.title,title:e.title,closable:ct.length>1||M.open.length>0})),[ct,M.open.length]),bt=(0,l.useMemo)(()=>M.open.map(e=>({id:`file:${e.path}`,rawId:e.path,kind:`file`,label:e.name,title:e.path,closable:!0,badge:e.dirty?(0,A.jsx)(`span`,{className:`file-tab-badge`,"data-file-tab-dirty":e.path,"aria-label":`未保存`,children:`●`}):void 0})),[M.open]),xt=(0,l.useMemo)(()=>[...yt,...bt],[yt,bt]),St=ht===`file`&&M.activePath?`file:${M.activePath}`:j?.id?`session:${j.id}`:void 0,Ct=(0,l.useCallback)(e=>{if(e.startsWith(`file:`)){let t=e.slice(5);_t(t)}else if(e.startsWith(`session:`)){let t=e.slice(8);lt(t)}},[_t,lt]),wt=(0,l.useCallback)(e=>{if(e.startsWith(`file:`)){let t=e.slice(5);M.closeFile(t),M.activePath===t&&M.open.length<=1&>(`session`)}else if(e.startsWith(`session:`)){let t=e.slice(8);ut(t)}},[M,ut]),Tt=M.active,Et=j?.id;(0,l.useEffect)(()=>{Et&&!Et.startsWith(`pending:`)&&Mt({type:`conversation.select`,conversationId:Et})},[Et]);let N=(e,t=`info`)=>{if(!e)return;let n=++Ve.current;w(r=>[...r,{key:n,text:e,kind:t}]),He.current.push(window.setTimeout(()=>w(e=>e.filter(e=>e.key!==n)),7e3))},Ot=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n<0)return[t,...e];let r=[...e];return r[n]=t,r},kt=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n<0)return[t,...e];let r=[...e];return r[n]=t,r},At=(e,t)=>{if(t.blocking)C(n=>[...n.filter(n=>n.conversationId!==e||n.request.requestId!==t.requestId),{conversationId:e,request:t}]);else if(t.method===`notify`)N(t.message||t.title,t.notifyType??`info`);else if(t.method===`setStatus`){let e=t.statusKey??``;T(n=>{let r=new Map(n);return t.statusText===void 0?r.delete(e):r.set(e,t.statusText),r})}else if(t.method===`setWidget`){let e=t.widgetKey??``;re(n=>{let r=new Map(n);return t.widgetLines===void 0?r.delete(e):r.set(e,{lines:t.widgetLines,placement:t.widgetPlacement??`aboveEditor`}),r})}else t.method===`setTitle`?ae(t.title):t.method===`set_editor_text`&&e===Ue.current&&nt(t.text??``)},jt=(e,t,n)=>{C(n=>n.filter(n=>n.conversationId!==e||n.request.requestId!==t));let r=Nn[n];r&&N(r,`warning`)};(0,l.useEffect)(()=>{let e=!1,n=0,a,o=()=>{if(e)return;let c=location.protocol===`https:`?`wss`:`ws`,l=new WebSocket(`${c}://${location.host}/ws`);y.current=l,l.onopen=()=>{e||(n=0,u(!0),l.send(JSON.stringify({type:`catalog.fetch`,conversationId:Ue.current})),l.send(JSON.stringify({type:`agent.catalog.fetch`})),l.send(JSON.stringify({type:`subagent.catalog.fetch`})))},l.onclose=()=>{if(!e){We.current=!1;for(let e of i.current)e.onFailure?.();i.current=[],r([]),u(!1),a=window.setTimeout(o,Math.min(Cn,Sn*2**n++))}},l.onmessage=({data:n})=>{if(e)return;let a=JSON.parse(n);if(a.type===`state`)We.current=!1,i.current=i.current.filter(e=>!e.accepted?.(a.state)),r(i.current),t(a.state),s(e=>{let t=a.state.conversations.filter(e=>!e.archivedAt);return e&&(t.some(t=>t.id===e)||i.current.some(t=>t.temporaryId===e))?e:t.find(e=>e.workspaceId===Je.current)?.id}),g(e=>e&&(a.state.workspaces.some(t=>t.id===e)||i.current.some(t=>t.temporaryId===e))?e:a.state.workspaces[0]?.id);else if(a.type===`message.delta`)t(e=>({...e,conversations:e.conversations.map(e=>e.id===a.conversationId?{...e,messages:e.messages.map(e=>e.id===a.messageId?{...e,content:e.content+a.delta}:e)}:e)}));else if(a.type===`message.revert.result`)br(void 0),De(void 0),a.ok||f(a.message);else if(a.type===`operation.result`){let e=i.current.find(e=>e.id===a.requestId);if(i.current=i.current.filter(e=>e.id!==a.requestId),r(i.current),e?.temporaryId){let t=e.temporaryId;s(n=>n===t?a.ok?a.entityId:e.previousActiveId:n),ot(e=>e.flatMap(e=>e===t?a.ok&&a.entityId?[a.entityId]:[]:[e])),g(e=>e===t?a.ok?a.entityId:void 0:e)}a.ok||(e?.onFailure?.(),f(a.message??`操作失败`))}else a.type===`error`?(f(a.message),We.current&&(We.current=!1,N(`重命名失败:${a.message}`,`error`))):a.type===`extension.ui`?At(a.conversationId,a.request):a.type===`extension.ui.closed`?jt(a.conversationId,a.requestId,a.reason):a.type===`model.catalog`?(!a.conversationId||a.conversationId===Ue.current)&&oe(a.catalog):a.type===`agent.catalog`?ce(a.catalog):a.type===`subagent.catalog`?ue(a.catalog):a.type===`server.version`?(fe(a.version),a.version.needsRestart&&N(`检测到 Super Pi 代码已更新(v${a.version.runningVersion} → v${a.version.diskVersion}),请执行 /web restart 重启服务生效`,`warning`)):a.type===`subagent.event`?t(e=>({...e,subagentRuns:Ot(e.subagentRuns??[],a.run)})):a.type===`workflow.event`?t(e=>({...e,workflows:kt(e.workflows??[],a.workflow)})):a.type===`message.tools`?t(e=>({...e,conversations:e.conversations.map(e=>e.id===a.conversationId?{...e,messages:e.messages.map(e=>e.id===a.messageId?{...e,toolCalls:a.toolCalls}:e)}:e)})):a.type===`pi.queue`?Ce(e=>{let t=new Map(e);return t.set(a.conversationId,{steering:a.steering,followUp:a.followUp}),t}):a.type===`conversation.fork.result`&&(Dr(e=>e===a.conversationId?void 0:e),N(a.ok?`已从「${a.title}」分叉出新会话,放在侧边栏最上面;没有切换过去。${a.messagesCopied?`复制了 ${a.messagesCopied} 条消息。`:`原会话还没有消息,只复制了会话本身。`}`:`分叉失败:${a.message}`,a.ok?`info`:`error`))}};return o(),()=>{e=!0,window.clearTimeout(a);for(let e of He.current)window.clearTimeout(e);y.current?.close()}},[]);let Mt=e=>y.current?.readyState===WebSocket.OPEN&&(y.current.send(JSON.stringify(e)),!0),P=(e,t,n,a,o,s)=>{if(y.current?.readyState!==WebSocket.OPEN||i.current.some(e=>e.key===t))return!1;let c=crypto.randomUUID(),l={id:c,key:t,apply:n,temporaryId:a,previousActiveId:Ue.current,onFailure:o,accepted:s};return i.current=[...i.current,l],r(i.current),y.current.send(JSON.stringify({...e,operationRequestId:c})),!0},Pt=(e,t)=>n=>({...n,conversations:n.conversations.map(n=>n.id===e?{...n,...t}:n)}),Ft=(e,t)=>n=>({...n,workspaces:n.workspaces.map(n=>n.id===e?{...n,...t}:n)}),It=n.some(e=>e.key===`send:${j?.id}`||e.key===`configuration:${j?.id}`||e.temporaryId===j?.id||e.key===`archive:${j?.id}`),Lt=(e,t,n)=>P({type:`extension.ui.answer`,conversationId:e,requestId:t,...n},`answer:${e}:${t}`,e=>e),Rt=j?.model??E?.defaultModel,zt=j?.thinkingLevel??E?.defaultThinkingLevel,Bt=E?.source===`pi`,Vt=!!E?.models.find(e=>e.provider===Rt?.provider&&e.modelId===Rt?.modelId)?.imageInput,Ht=(e,t)=>!e||!t?e:{...e,models:e.models.filter(e=>(a.modelFilterRules??[]).every(n=>{try{return!new RegExp(n.workspacePattern,`i`).test(t.name)||new RegExp(n.modelPattern,`i`).test(e.label)||new RegExp(n.modelPattern,`i`).test(`${e.provider}/${e.modelId}`)}catch{return!0}}))},Ut=(Ht(E,a.workspaces.find(e=>e.id===j?.workspaceId))?.models??[]).map(e=>({key:`${e.provider}/${e.modelId}`,label:e.label,detail:e.detail,badge:kn(e),selected:Rt?.provider===e.provider&&Rt.modelId===e.modelId})),Wt=(E?.levels??[]).map(e=>({key:e,label:e,selected:e===zt})),Gt=e=>{if(!j)return;let[t,n]=e.split(`/`);t&&n&&P({type:`conversation.model`,conversationId:j.id,provider:t,modelId:n},`configuration:${j.id}`,Pt(j.id,{model:E?.models.find(e=>e.provider===t&&e.modelId===n)??{provider:t,modelId:n,label:n}}))},Kt=e=>{j&&P({type:`conversation.thinking`,conversationId:j.id,level:e},`configuration:${j.id}`,Pt(j.id,{thinkingLevel:e}))},qt=se?.agents.find(e=>e.id===j?.agentId),Jt=[{key:Kn,label:`跟随 Pi 默认`,detail:`不使用任何 agent 角色`,selected:!j?.agentId},...(se?.agents??[]).map(e=>({key:e.id,label:e.name,detail:e.toolSummary,color:e.color,selected:j?.agentId===e.id}))],Yt=qt?.model,F=!!(Yt&&j?.model&&j.model.provider===Yt.provider&&j.model.modelId===Yt.modelId);qt?.thinkingLevel&&(j?.thinkingLevel,qt.thinkingLevel);let Xt=e=>{if(j){let t=se?.agents.find(t=>t.id===e);P({type:`conversation.agent`,conversationId:j.id,agentId:e===Kn?null:e},`configuration:${j.id}`,Pt(j.id,{agentId:t?.id,...t?.model?{model:{...t.model,label:t.model.modelId}}:{},...t?.thinkingLevel?{thinkingLevel:t.thinkingLevel}:{}}))}},Zt=S.filter(e=>e.conversationId===j?.id),Qt=(0,l.useMemo)(()=>(a.subagentRuns??[]).filter(e=>e.conversationId===j?.id),[a.subagentRuns,j?.id]),$t=(0,l.useMemo)(()=>(a.workflows??[]).filter(e=>e.conversationId===j?.id),[a.workflows,j?.id]),en=(0,l.useMemo)(()=>new Map($t.map(e=>[e.id,e])),[$t]),tn=(0,l.useMemo)(()=>new Map((le?.agents??[]).map(e=>[e.id,e.name])),[le]),nn=(0,l.useMemo)(()=>new Map((j?.messages??[]).map(e=>[e.id,e])),[j?.messages]),rn=(0,l.useMemo)(()=>new Map(Qt.map(e=>[e.id,e])),[Qt]),an=(0,l.useMemo)(()=>{if(!j)return[];let e=Ee?.conversationId===j.id?`m:${Ee.messageId}`:void 0,t=j.messages.filter(t=>`m:${t.id}`!==e).map((e,t)=>({at:Date.parse(e.createdAt)||0,seq:t,key:`m:${e.id}`}));return Qt.forEach((e,n)=>t.push({at:Date.parse(e.startedAt)||0,seq:t.length+n,key:`r:${e.id}`})),$t.forEach((e,n)=>t.push({at:Date.parse(e.startedAt)||0,seq:t.length+n,key:`w:${e.id}`})),t.sort((e,t)=>e.at-t.at||e.seq-t.seq).map(e=>e.key)},[j,Qt,$t,Ee]),on=e=>O(t=>({...t,[e]:!t[e]})),sn=(e,t)=>Te(n=>({...n,[`${e}:${t}`]:!n[`${e}:${t}`]})),cn=e=>{P({type:`subagent.stop`,runId:e},`stop:${e}`,e=>e)||N(`连接断开,无法停止子智能体,请重试`,`error`)},fn=e=>{P({type:`workflow.stop`,workflowId:e},`stop:${e}`,e=>e)||N(`连接断开,无法停止编排,请重试`,`error`)},pn=e=>[...ne].filter(([,t])=>t.placement===e).map(([e,t])=>{let n=t.lines;return(0,A.jsxs)(`div`,{className:`extui-widget`,"data-widget-key":e,"data-widget-lines":n.length,children:[n.slice(0,Pn).map((e,t)=>(0,A.jsx)(`div`,{children:e},`${t}:${e}`)),n.length>Pn&&(0,A.jsx)(`div`,{children:`… (widget truncated)`})]},e)}),mn=(e,t)=>{let n=`pending:${crypto.randomUUID()}`,r={id:n,name:e,path:t,updatedAt:new Date().toISOString()};P({type:`workspace.create`,name:e,path:t},`create-workspace`,e=>({...e,workspaces:[...e.workspaces,r]}),n)&&(g(n),s(void 0),v(!1))},[hn,gn]=(0,l.useState)(),_n=(e,t)=>gn(n=>n?.kind===e&&n.id===t?n:{kind:e,id:t}),Tn=()=>gn(void 0),En=(e,t)=>hn?.kind===e&&hn.id===t,Dn=(e,t,n)=>t.startsWith(`pending:`)?!1:P(e===`workspace`?{type:`workspace.rename`,workspaceId:t,name:n}:{type:`conversation.rename`,conversationId:t,name:n},`rename:${t}`,e===`workspace`?Ft(t,{name:n}):Pt(t,{title:n}))?(We.current=!0,Tn(),!0):(N(`连接断开,改名未保存,请重试`,`error`),!1),On=e=>{if(e.id.startsWith(`pending:`))return;let t=a.conversations.filter(t=>t.workspaceId===e.id).length;window.confirm(`删除工作区「${e.name}」?${t?`其中 ${t} 条会话将一并删除,`:``}此操作不可撤销。`)&&P({type:`workspace.delete`,workspaceId:e.id},`delete:${e.id}`,t=>({...t,workspaces:t.workspaces.filter(t=>t.id!==e.id),conversations:t.conversations.filter(t=>t.workspaceId!==e.id)}))},[An,jn]=(0,l.useState)(),Ln=An?a.workspaces.find(e=>e.id===An):void 0,{theme:Rn,setTheme:zn}=Dt(),[Yn,Xn]=(0,l.useState)(!1),[Zn,Qn]=(0,l.useState)(!1),$n=(e,t,n,r)=>{e.startsWith(`pending:`)||(P({type:`workspace.settings`,workspaceId:e,model:n?{provider:n.provider,modelId:n.modelId}:null,thinkingLevel:r??null,agentId:t??null},`defaults:${e}`,Ft(e,{defaultModel:n,defaultThinkingLevel:r,defaultAgentId:t}))?jn(void 0):N(`连接断开,设置未保存,请重试`,`error`))},er=e=>{if(e.startsWith(`pending:`)||i.current.some(t=>t.key===`defaults:${e}`))return;let t=`pending:${crypto.randomUUID()}`,n={id:t,workspaceId:e,title:`新会话`,status:`idle`,updatedAt:new Date().toISOString(),messages:[]};P({type:`conversation.create`,workspaceId:e},`create-session:${e}`,e=>({...e,conversations:[n,...e.conversations]}),t)&&(g(e),s(t),gt(`session`),ot(e=>[...e.filter(e=>e!==t),t]))},nr=e=>{e.startsWith(`pending:`)||P({type:`conversation.archive`,conversationId:e},`archive:${e}`,Pt(e,{archivedAt:new Date().toISOString()}))},rr=e=>P({type:`conversation.unarchive`,conversationId:e},`archive:${e}`,Pt(e,{archivedAt:void 0})),ir=async e=>{if(!j){N(`请先选择或创建会话`,`error`);return}if(!Vt){N(`当前模型不支持图片输入`,`error`);return}let t=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`],n=e.filter(e=>t.includes(e.type)?e.size>5242880?(N(`图片「${e.name}」超过 5MB 上限`,`error`),!1):!0:(N(`不支持的文件格式「${e.name}」,仅支持 PNG/JPEG/GIF/WebP`,`error`),!1));if(n.length===0)return;let r=j.id;tt(r,e=>({...e,uploading:e.uploading+n.length}));let i=n.map(e=>({id:crypto.randomUUID(),conversationId:r,name:e.name,url:URL.createObjectURL(e)}));Pe(e=>[...e,...i]);for(let[e,t]of n.entries()){let n=i[e];try{let e=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>{let t=r.result,n=t.indexOf(`,`);e(n>=0?t.slice(n+1):t)},r.onerror=n,r.readAsDataURL(t)}),i=await fetch(`/api/upload`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({conversationId:r,name:t.name,mimeType:t.type,data:e})});if(!(i.headers.get(`content-type`)??``).includes(`application/json`)){N(`服务器未返回 JSON 响应,请刷新或重启服务`,`error`);continue}if(i.ok){let e=await i.json();if(ke.current.has(n.id))continue;Pe(e=>e.filter(e=>e.id!==n.id)),URL.revokeObjectURL(n.url),tt(r,t=>({...t,images:[...t.images,{id:e.id,name:e.name,mimeType:e.mimeType,bytes:e.bytes}]}))}else{let e=await i.json().catch(()=>({error:`上传失败`}));N(e.error||`上传失败: ${i.status}`,`error`)}}catch(e){N(`上传错误: ${e instanceof Error?e.message:`网络错误`}`,`error`)}finally{Pe(e=>e.map(e=>e.id===n.id?{...e,failed:!0}:e)),tt(r,e=>({...e,uploading:Math.max(0,e.uploading-1)}))}}},ar=e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e=0;e<t.length;e++){let r=t[e];if(r.type.startsWith(`image/`)){let e=r.getAsFile();e&&n.push(e)}}if(n.length>0){if(!Vt){N(`当前模型不支持图片输入`,`error`);return}e.preventDefault(),ir(n)}},or=e=>{e.dataTransfer?.types?.includes(`Files`)&&(e.preventDefault(),Re(!0))},cr=e=>{e.currentTarget.contains(e.relatedTarget)||Re(!1)},lr=e=>{Re(!1);let t=Array.from(e.dataTransfer?.files??[]).filter(e=>e.type.startsWith(`image/`));if(t.length>0){if(e.preventDefault(),!Vt){N(`当前模型不支持图片输入`,`error`);return}ir(t)}},ur=t=>{if(t.preventDefault(),!j||It||!Xe.trim()&&Ze.length===0)return;if(Ze.length>0&&!Vt){N(`当前模型不支持图片输入,请移除图片或切换至支持图文的模型`,`error`);return}if($e>0){N(`图片正在上传中,请稍候…`,`info`);return}let n=`pending:${crypto.randomUUID()}`,r=j.id,i=Xe,a=Ze,o=new Set([...e.conversations.find(e=>e.id===r)?.messages.map(e=>e.id)??[],...e.queuedMessages?.map(e=>e.id)??[]]);P({type:`message.send`,conversationId:j.id,content:Xe,...Ze.length>0?{images:Ze}:{}},`send:${r}`,e=>e.conversations.find(e=>e.id===r)?.messages.some(e=>!o.has(e.id)&&e.role===`user`&&e.content===i.trim())||e.queuedMessages?.some(e=>!o.has(e.id)&&e.conversationId===r&&e.content===i.trim())?e:{...e,conversations:e.conversations.map(e=>e.id===r?{...e,messages:[...e.messages,{id:n,role:`user`,content:i,images:a,createdAt:new Date().toISOString()}]}:e)},void 0,()=>{Me(e=>[...e,{id:n,conversationId:r,content:i,images:a}]),tt(r,e=>e.text||e.images.length?e:{...e,text:i,images:a})},e=>!!(e.conversations.find(e=>e.id===r)?.messages.some(e=>!o.has(e.id)&&e.role===`user`&&e.content===i.trim())||e.queuedMessages?.some(e=>!o.has(e.id)&&e.conversationId===r&&e.content===i.trim())))?tt(j.id,e=>({...e,text:``,images:[]})):N(`连接断开,消息未发送,草稿已保留,请重试`,`error`)},fr=(0,l.useMemo)(()=>(a.queuedMessages??[]).filter(e=>e.conversationId===j?.id),[a.queuedMessages,j?.id]),mr=e=>{P({type:`message.cancel`,conversationId:j?.id??``,queueId:e},`queue:${e}`,t=>({...t,queuedMessages:t.queuedMessages?.filter(t=>t.id!==e)}))||N(`连接断开,取消没有生效,请重试`,`error`)},vr=e=>{P({type:`message.steer`,conversationId:j?.id??``,queueId:e},`queue:${e}`,t=>({...t,queuedMessages:t.queuedMessages?.map(t=>t.id===e?{...t,state:`sending`}:t)}))||N(`连接断开,插队没有生效,请重试`,`error`)},[yr,br]=(0,l.useState)(),xr=(e,t=!1)=>{if(!j||yr)return;let n=t?j.messages.find(t=>t.id===e):void 0;n&&(k(e=>{let t=e[j.id]??{text:``,images:[],uploading:0};return t.text.trim()||t.images.length?e:{...e,[j.id]:{...t,text:n.content,images:n.images??[]}}}),De({conversationId:j.id,messageId:e})),Mt({type:`message.revert`,conversationId:j.id,messageId:e,withdraw:t})?br(e):(De(void 0),N(`连接断开,回退未执行,请重试`,`error`))},[Sr,Cr]=(0,l.useState)(),wr=(0,l.useRef)(void 0),Tr=async(e,t)=>{wr.current&&clearTimeout(wr.current);let n=await wn(t);Cr({id:e,kind:n?`copied`:`error`}),n||N(`复制失败:浏览器拒绝了剪贴板写入,可以手动选中这条消息的文字复制`,`error`),wr.current=setTimeout(()=>Cr(void 0),2e3)};(0,l.useEffect)(()=>()=>{wr.current&&clearTimeout(wr.current)},[]);let[Er,Dr]=(0,l.useState)(),Or=e=>{Er||e.startsWith(`pending:`)||(Mt({type:`conversation.fork`,conversationId:e})?Dr(e):N(`连接断开,分叉没有执行,请重试`,`error`))};return(0,A.jsxs)(`main`,{className:`shell${pe?` shell-rail-collapsed`:``}`,"data-rail-collapsed":pe,style:{"--sidebar-width":`${ye.sidebar}px`,"--rail-col":pe?void 0:`${ye.rail}px`},children:[(0,A.jsxs)(`aside`,{children:[(0,A.jsxs)(`div`,{className:`brand`,children:[(0,A.jsx)(`span`,{children:`π`}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:`SUPER PI`}),(0,A.jsx)(`small`,{children:`agent workspace`})]})]}),(0,A.jsx)(`div`,{className:`sidebar-actions`,children:(0,A.jsx)(`button`,{className:`workspace-new`,onClick:()=>v(!0),children:`+ 工作区`})}),(0,A.jsx)(`div`,{className:`label`,children:`工作区`}),(0,A.jsx)(`nav`,{children:a.workspaces.map(e=>{let t=a.conversations.filter(t=>t.workspaceId===e.id),n=t.filter(e=>!e.archivedAt).sort(yn),r=t.filter(e=>e.archivedAt).sort(bn),i=p[e.id]??!1,o=b[e.id]??!0;return(0,A.jsxs)(`section`,{className:`workspace-group`,children:[(0,A.jsx)(`div`,{className:`workspace-header`,children:En(`workspace`,e.id)?(0,A.jsx)(Wn,{initial:e.name,label:`重命名工作区 ${e.name}`,onCommit:t=>Dn(`workspace`,e.id,t),onClose:Tn}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`button`,{className:`workspace-toggle`,title:e.path,onClick:()=>{g(e.id),s(qe.find(t=>t.workspaceId===e.id)?.id),m(t=>({...t,[e.id]:!i}))},children:[(0,A.jsx)(`span`,{className:`chevron`,children:i?`▸`:`▾`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{onDoubleClick:()=>_n(`workspace`,e.id),children:e.name}),(0,A.jsx)(`small`,{children:e.path})]})]}),(0,A.jsx)(`button`,{className:`workspace-add`,title:`在此工作区新建会话`,onClick:()=>er(e.id),children:`+`}),(0,A.jsx)(`button`,{className:`workspace-settings`,title:`工作区设置(默认智能体 / 模型 / 思考强度)`,"aria-label":`工作区设置 ${e.name}`,onClick:()=>jn(e.id),children:`⚙`}),(0,A.jsx)(`button`,{className:`workspace-delete`,title:`删除工作区`,onClick:()=>On(e),children:`×`})]})}),!i&&(n.length?n.map(t=>(0,A.jsx)(`div`,{className:`conversation-row`,children:En(`conversation`,t.id)?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(Wn,{initial:t.title,label:`重命名会话 ${t.title}`,onCommit:e=>Dn(`conversation`,t.id,e),onClose:Tn}),(0,A.jsx)(`small`,{className:`conversation-time`,children:vn(t.updatedAt,Ge)})]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`button`,{className:`conversation ${j?.id===t.id?`selected`:``}`,"data-conversation":t.id,title:t.title,"aria-label":`打开会话 ${t.title}`,onClick:()=>{lt(t.id),g(e.id)},children:[(0,A.jsxs)(`span`,{onDoubleClick:()=>_n(`conversation`,t.id),children:[`· `,t.title]}),(0,A.jsx)(`small`,{children:vn(t.updatedAt,Ge)})]}),(0,A.jsx)(`button`,{type:`button`,className:`conversation-fork`,"data-fork-conversation":t.id,"data-fork-state":Er===t.id?`pending`:`idle`,disabled:!!Er,title:`从此会话分叉出一个新会话`,"aria-label":`从会话 ${t.title} 分叉出一个新会话`,onClick:()=>Or(t.id),children:`⑂`}),(0,A.jsx)(`button`,{className:`conversation-archive`,title:`归档会话`,"aria-label":`归档会话 ${t.title}`,onClick:()=>nr(t.id),children:`×`})]})},t.id)):(0,A.jsx)(`div`,{className:`conversation-empty`,children:`暂无会话`})),!i&&r.length>0&&(0,A.jsxs)(`div`,{className:`archived-group`,"data-archived-count":r.length,children:[(0,A.jsxs)(`button`,{className:`archived-toggle`,title:o?`展开已归档会话`:`收起已归档会话`,"aria-expanded":!o,onClick:()=>x(t=>({...t,[e.id]:!o})),children:[(0,A.jsx)(`span`,{className:`chevron`,children:o?`▸`:`▾`}),(0,A.jsxs)(`span`,{className:`archived-label`,children:[`Archived (`,r.length,`)`]})]}),!o&&r.map(e=>(0,A.jsx)(`div`,{className:`conversation-archived`,"data-archived-at":e.archivedAt,children:En(`conversation`,e.id)?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(Wn,{initial:e.title,label:`重命名已归档会话 ${e.title}`,onCommit:t=>Dn(`conversation`,e.id,t),onClose:Tn}),(0,A.jsx)(`small`,{children:xn(e.archivedAt)})]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{onDoubleClick:()=>_n(`conversation`,e.id),children:[`· `,e.title]}),(0,A.jsx)(`small`,{children:xn(e.archivedAt)}),(0,A.jsx)(`button`,{type:`button`,className:`conversation-fork`,"data-fork-conversation":e.id,"data-fork-state":Er===e.id?`pending`:`idle`,disabled:!!Er,title:`从此会话分叉出一个新会话`,"aria-label":`从已归档会话 ${e.title} 分叉出一个新会话`,onClick:()=>Or(e.id),children:`⑂`}),(0,A.jsx)(`button`,{className:`conversation-restore`,title:`恢复为正常会话`,"aria-label":`恢复会话 ${e.title}`,onClick:()=>rr(e.id),children:`↑`})]})},e.id))]})]},e.id)})}),(0,A.jsxs)(`footer`,{children:[(0,A.jsxs)(`div`,{className:`footer-status`,children:[(0,A.jsx)(`i`,{className:c?`online`:`offline`}),c?`已连接`:`正在连接`,(0,A.jsx)(`span`,{children:`本地持久化`})]}),(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger`,"data-theme-open":`1`,"aria-haspopup":`dialog`,"aria-expanded":Yn,onClick:()=>Xn(!0),children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`⚙`}),`设置`]}),(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger`,"data-help-open":`1`,"aria-haspopup":`dialog`,"aria-expanded":Zn,onClick:()=>Qn(!0),children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`📖`}),`使用指南`]}),de?.needsRestart&&(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger restart-needed-trigger`,title:`代码已更新:当前运行 v${de.runningVersion},磁盘版本 v${de.diskVersion}。点击复制重启命令 /web restart`,onClick:()=>{navigator.clipboard.writeText(`/web restart`),N(`已复制重启命令:/web restart`,`info`)},children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`⚠️`}),`重启服务生效`]})]})]}),(0,A.jsx)(_r,{side:`left`,width:ye.sidebar,min:ye.sidebarMin,max:ye.sidebarMax,label:`调整左侧栏宽度`,onWidth:be}),(0,A.jsxs)(`section`,{className:`chat`,"data-main-view":ht,"data-main-view-kind":ht,children:[xt.length>0&&(0,A.jsx)(`div`,{className:`chat-tab-strip`,"data-chat-tab-strip":`1`,"data-session-count":ct.length,"data-file-count":M.open.length,children:(0,A.jsx)(at,{tabs:xt,prefix:`workspace-tab`,ariaLabel:`工作区标签页`,activeId:St,onSelect:Ct,onClose:wt,minWidth:120,maxWidth:320})}),(0,A.jsxs)(`header`,{children:[(0,A.jsxs)(`div`,{className:`chat-head`,children:[(0,A.jsx)(`h1`,{children:j?.title??`准备开始`}),te.size>0?[...te].map(([e,t])=>(0,A.jsx)(`p`,{"data-role":`run-status`,"data-status-key":e,children:`扩展状态:${e?`${e} · `:``}${t}`},e)):(0,A.jsx)(`p`,{"data-role":`run-status`,children:j?.status===`running`?`Agent 正在工作`:`Pi runtime · Web 控制台`})]}),(0,A.jsxs)(`span`,{className:`chat-view chat-view-${ht}`,"data-main-view-indicator":ht,"data-main-view-kind":ht,title:ht===`file`?`中间主画面正在显示文件 ${M.active?.path??``}`:`中间主画面正在显示这个会话的消息流`,children:[(0,A.jsx)(`span`,{className:`chat-view-label`,children:`主区显示`}),(0,A.jsx)(`span`,{className:`chat-view-kind`,children:ht===`file`?`文件`:`会话`}),ht===`file`&&M.active&&(0,A.jsx)(`span`,{className:`chat-view-name`,"data-main-view-name":M.active.name,children:M.active.name})]}),(0,A.jsx)(`div`,{className:`badge`,children:j?.status??`idle`})]}),d&&(0,A.jsx)(`div`,{className:`error`,children:d}),j?.error&&(0,A.jsx)(`div`,{className:`error`,"data-role":`conversation-error`,children:j.error}),ie&&(0,A.jsxs)(`div`,{className:`extui-title-note`,children:[`扩展建议标题:`,ie]}),ee.length>0&&(0,A.jsx)(`div`,{className:`toasts`,role:`status`,"aria-live":`polite`,"data-toast-count":ee.length,children:ee.map(e=>(0,A.jsx)(`div`,{className:`toast toast-${e.kind}`,"data-toast-kind":e.kind,children:e.text},e.key))}),ht===`file`?(0,A.jsx)(`div`,{className:`chat-file-view`,"data-main-file-view":Tt?.path,"data-file-view-kind":`editor`,children:Tt?(0,A.jsx)(Qe,{file:Tt,state:M.saves[Tt.path]?.state??`idle`,message:M.saves[Tt.path]?.message??``,external:M.external[Tt.path]===!0,onChange:e=>M.updateBuffer(Tt.path,e),onSave:()=>void M.save(Tt.path,!1),onReload:()=>void M.reload(Tt.path),onOverwrite:()=>void M.save(Tt.path,!0)}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-main-file-empty":`1`,children:`没有选中的文件。`})}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`messages`,children:[!j&&(0,A.jsxs)(`div`,{className:`empty`,children:[(0,A.jsx)(`div`,{className:`orb`,children:`π`}),(0,A.jsx)(`h2`,{children:`开始一个新会话`}),(0,A.jsx)(`p`,{children:a.workspaces.length?`选择一个工作区创建会话,即可从浏览器向 Super Pi 发送任务。`:`先创建一个工作区,再开始会话。`}),a.workspaces.map(e=>(0,A.jsxs)(`button`,{onClick:()=>er(e.id),children:[`在「`,e.name,`」中创建会话`]},e.id)),(0,A.jsx)(`button`,{onClick:()=>v(!0),children:`+ 新建工作区`})]}),an.map(e=>{if(e.startsWith(`m:`)){let t=nn.get(e.slice(2));if(!t)return null;let n=!j?.messages.some(n=>n.id!==t.id&&n.role===`user`&&an.indexOf(`m:${n.id}`)>an.indexOf(e)),r=t.role===`user`&&j?.status!==`running`&&yr!==t.id,i=r&&n&&!t.id.startsWith(`pending:`),a=r&&!n&&!!t.piEntryId,o=t.content?(0,A.jsx)(Ae,{source:t.content}):(0,A.jsx)(`span`,{className:`typing`,children:`正在思考`}),s=t.toolCalls??[];if(t.role===`user`){let n=Sr?.id===t.id?Sr.kind:void 0,r=t.content||(t.images?.length?`[图片]`:``);return(0,A.jsxs)(`article`,{className:`message user`,children:[(0,A.jsxs)(`div`,{className:`message-body`,children:[(0,A.jsxs)(`div`,{className:`bubble`,children:[(0,A.jsxs)(`div`,{className:`meta`,children:[`你`,(0,A.jsx)(`time`,{children:dn(t.createdAt)})]}),t.images&&t.images.length>0&&(0,A.jsx)(`div`,{className:`message-images`,"data-message-images":`1`,children:t.images.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`message-image-btn`,"data-message-image-id":e.id,onClick:()=>Ie({url:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,name:e.name,bytes:e.bytes}),title:e.name?`查看大图:${e.name}`:`查看大图`,children:(0,A.jsx)(`img`,{src:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,alt:e.name||`图片`,className:`message-image-thumb`,loading:`lazy`})},e.id))}),(0,A.jsx)(`div`,{className:`content`,children:o})]}),(0,A.jsxs)(`div`,{className:`message-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`message-copy`,"data-copy-message":t.id,"data-copy-state":n,"aria-label":`复制这条消息:${r}`,onClick:()=>Tr(t.id,r),children:n===`copied`?`已复制`:n===`error`?`复制失败`:`复制`}),i&&(0,A.jsx)(`button`,{type:`button`,className:`message-revert`,"data-withdraw-message":t.id,title:`撤回并编辑:删除这条消息并将文字恢复到输入框继续编辑`,onClick:()=>xr(t.id,!0),children:`撤回`}),a&&(0,A.jsx)(`button`,{type:`button`,className:`message-revert`,"data-revert-message":t.id,title:`回退到这里:删除后续全部内容(Pi 的记录和这里的历史一起清掉,不会新建会话,也不动任何代码文件)`,onClick:()=>xr(t.id),children:`回退`})]})]}),(0,A.jsx)(`div`,{className:`avatar`,children:`你`})]},e)}let c=(e,n)=>{let r=typeof e.at==`number`&&Number.isFinite(e.at)?e.at:n;return Math.max(0,Math.min(r,t.content.length))},l=[],u=0,d=s.map((e,t)=>({call:e,index:t,at:c(e,t)})).sort((e,t)=>e.at-t.at||e.index-t.index);for(let{call:e,index:n,at:r}of d){let i=Math.max(u,r);i>u&&l.push({text:t.content.slice(u,i)}),u=i,l.push({call:e,index:n})}return l.push({text:t.content.slice(u)}),(0,A.jsxs)(`article`,{className:`message assistant`,children:[(0,A.jsx)(`div`,{className:`avatar`,children:`π`}),(0,A.jsxs)(`div`,{className:`message-body`,children:[(0,A.jsxs)(`div`,{className:`meta`,children:[t.agentIdentity?.name??`Super Pi`,(0,A.jsx)(`time`,{children:dn(t.createdAt)})]}),l.map((e,n)=>`text`in e?e.text?(0,A.jsx)(`div`,{className:`content`,children:(0,A.jsx)(Ae,{source:e.text})},`t${n}`):null:(0,A.jsx)(`div`,{className:`call-blocks`,"data-call-block-index":e.index,children:(0,A.jsx)(Bn,{call:e.call,index:e.index,expanded:!!we[`${t.id}:${e.index}`],onToggle:()=>sn(t.id,e.index)})},`c${n}`))]})]},e)}if(e.startsWith(`w:`)){let t=en.get(e.slice(2));return t?(0,A.jsxs)(`div`,{children:[n.some(e=>e.key===`stop:${t.id}`)&&(0,A.jsx)(`span`,{children:`停止中…`}),(0,A.jsx)(ft,{workflow:t,names:tn,stopping:n.some(e=>e.key===`stop:${t.id}`),onStop:()=>fn(t.id)},e)]},e):null}let t=rn.get(e.slice(2));return t?(0,A.jsxs)(`div`,{children:[n.some(e=>e.key===`stop:${t.id}`)&&(0,A.jsx)(`span`,{children:`停止中…`}),(0,A.jsx)(Vn,{run:t,stopping:n.some(e=>e.key===`stop:${t.id}`),name:tn.get(t.agentId)??``,expanded:!!D[t.id],onToggle:()=>on(t.id),onStop:()=>cn(t.id)},e)]},e):null})]}),(0,A.jsx)(Hn,{items:fr,pi:Se.get(j?.id??``),running:j?.status===`running`,onCancel:mr,onSteer:vr}),(Zt.length>0||[...ne.values()].some(e=>e.placement===`aboveEditor`))&&(0,A.jsxs)(`div`,{className:`extui`,"data-extui-count":Zt.length,children:[Zt.map(e=>(0,A.jsx)(Un,{request:e.request,pending:n.some(t=>t.key===`answer:${e.conversationId}:${e.request.requestId}`),onAnswer:t=>Lt(e.conversationId,e.request.requestId,t)},e.request.requestId)),pn(`aboveEditor`)]}),(0,A.jsxs)(`form`,{onSubmit:ur,onPaste:ar,onDragOver:or,onDragLeave:cr,onDrop:lr,className:Le?`composer-dropzone-active`:void 0,children:[(0,A.jsxs)(`div`,{className:`session-picker`,"data-session-picker":`1`,children:[(0,A.jsx)(Gn,{kind:`agent`,label:qt?.name??`跟随 Pi 默认`,value:j?.agentId??Kn,detail:qt?.description||void 0,options:Jt,disabled:!se||se.source===`unavailable`||It,note:In(se),onChoose:Xt}),(0,A.jsx)(Gn,{kind:`model`,label:Rt?.label??(E?`Pi 默认`:`读取中…`),value:Rt?`${Rt.provider}/${Rt.modelId}`:void 0,detail:F?`来自 ${qt?.name}`:Rt&&E?.source===`pi`&&!j?.model?`Pi 默认模型`:Rt?`${Rt.provider}/${Rt.modelId}`:void 0,options:Ut,disabled:!Bt||It,note:Fn(`模型`,E),onChoose:Gt}),(0,A.jsx)(Gn,{kind:`thinking`,label:zt??(E?`Pi 默认`:`读取中…`),value:zt,options:Wt,disabled:!Bt||It,note:Fn(`思考等级`,E),onChoose:Kt})]}),(0,A.jsx)(`textarea`,{value:Xe,onCompositionStart:()=>{Be.current=!0},onCompositionEnd:()=>{Be.current=!1},onChange:e=>nt(e.target.value),placeholder:j?Vt?`描述你要完成的任务(支持粘贴/拖放图片)…`:`描述你要完成的任务…`:`先创建会话`,disabled:!j,onKeyDown:e=>{Be.current||un(e)||e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),je.filter(e=>e.conversationId===j?.id).map(e=>(0,A.jsxs)(`div`,{"data-failed-send":e.id,children:[(0,A.jsxs)(`span`,{children:[`发送失败:`,e.content]}),(0,A.jsx)(`button`,{type:`button`,disabled:!!(Xe||Ze.length),onClick:()=>{tt(e.conversationId,t=>({...t,text:e.content,images:e.images})),Me(t=>t.filter(t=>t.id!==e.id))},children:`恢复草稿`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>Me(t=>t.filter(t=>t.id!==e.id)),children:`移除`})]},e.id)),Ne.filter(e=>e.conversationId===j?.id).map(e=>(0,A.jsxs)(`div`,{"data-upload-preview":e.id,children:[(0,A.jsx)(`img`,{src:e.url,alt:e.name,width:48,height:48}),(0,A.jsx)(`span`,{children:e.failed?`上传失败`:`上传中…`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>{ke.current.add(e.id),URL.revokeObjectURL(e.url),Pe(t=>t.filter(t=>t.id!==e.id))},children:`移除`})]},e.id)),(Ze.length>0||$e>0)&&(0,A.jsxs)(`div`,{className:`composer-attachments`,"data-composer-attachments":`1`,children:[Ze.map((e,t)=>(0,A.jsxs)(`div`,{className:`composer-attachment-item`,"data-composer-attachment-id":e.id,children:[(0,A.jsx)(`img`,{src:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,alt:e.name||`已附图片`,className:`composer-attachment-thumb`,onClick:()=>Ie({url:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,name:e.name,bytes:e.bytes}),title:`点击查看大图`}),(0,A.jsx)(`span`,{className:`composer-attachment-name`,title:e.name,children:e.name||`图片`}),(0,A.jsx)(`button`,{type:`button`,className:`composer-attachment-remove`,"data-composer-attachment-remove":e.id,onClick:()=>rt(e=>e.filter((e,n)=>n!==t)),"aria-label":`移除 ${e.name||`图片`}`,title:`移除图片`,children:`✕`})]},e.id)),$e>0&&(0,A.jsx)(`div`,{className:`composer-attachment-item composer-attachment-uploading`,children:(0,A.jsxs)(`span`,{children:[`图片上传中 (`,$e,`)…`]})})]}),(0,A.jsxs)(`div`,{className:`composer`,children:[(0,A.jsxs)(`div`,{className:`composer-hints`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`composer-attach-btn`,"data-composer-attach":`1`,onClick:()=>ze.current?.click(),disabled:!j||!Vt||$e>0,title:j?Vt?`添加图片(支持剪贴板粘贴与拖拽)`:`当前模型不支持图片输入`:`请先创建或选择会话`,"aria-label":`添加图片`,children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`+`}),` 图片`]}),(0,A.jsx)(`input`,{ref:ze,type:`file`,accept:`image/png,image/jpeg,image/gif,image/webp`,multiple:!0,style:{display:`none`},onChange:e=>{e.target.files?.length&&(ir(Array.from(e.target.files)),e.target.value=``)}}),(0,A.jsx)(`span`,{children:`Enter 发送 · Shift + Enter 换行`})]}),(0,A.jsxs)(`div`,{className:`composer-actions`,children:[j?.status===`running`&&(0,A.jsx)(`button`,{type:`button`,className:`stop`,"data-stop-run":j.id,disabled:n.some(e=>e.key===`stop:${j.id}`),onClick:()=>P({type:`run.stop`,conversationId:j.id},`stop:${j.id}`,e=>e),children:`停止`}),(0,A.jsx)(`button`,{className:`send ${j?.status===`running`?`send-queued`:``}`,"data-send-mode":j?.status===`running`?`queued`:`direct`,disabled:!Xe.trim()&&Ze.length===0||!j||$e>0||!!yr||It,title:j?yr?`正在撤回:Pi 的历史还没截断完成,撤回结束后即可发送`:!Xe.trim()&&Ze.length===0?`请输入消息或添加图片后发送`:$e>0?`图片上传中…`:j.status===`running`?`这一轮结束后发送(发送后可在上面的排队区取消或插队)`:void 0:`请先创建或选择会话`,children:yr?`撤回中…`:j?.status===`running`?`排队发送 ↑`:`发送 ↑`})]})]})]}),pn(`belowEditor`)]})]}),(0,A.jsx)(_r,{side:`right`,width:pe?30:ye.rail,min:ye.railMin,max:ye.railMax,label:`调整右侧栏宽度`,onWidth:xe}),_&&(0,A.jsx)(Mn,{onClose:()=>v(!1),onCreate:mn}),Yn&&(0,A.jsx)(Nt,{theme:Rn,onChooseTheme:e=>zn(e),onClose:()=>Xn(!1),agentCatalog:se,subagentCatalog:le,modelFilterRules:a.modelFilterRules??[],pendingSettings:n.some(e=>e.key===`model-rules`||e.key===`agent-directories`),onSetModelRules:e=>P({type:`model.rules.set`,rules:e},`model-rules`,t=>({...t,modelFilterRules:e})),customAgentDirs:a.customAgentDirs??[],onSetCustomAgentDirs:e=>P({type:`agents.setCustomDirs`,dirs:e},`agent-directories`,t=>({...t,customAgentDirs:e})),onRescanAgents:()=>Mt({type:`agents.rescan`})}),Zn&&(0,A.jsx)(mt,{onClose:()=>Qn(!1)}),Ln&&(0,A.jsx)(qn,{workspace:Ln,catalog:Ht(E,Ln),agents:se,onClose:()=>jn(void 0),onRename:()=>{let e=Ln.id;jn(void 0),_n(`workspace`,e)},onSave:(e,t,n)=>$n(Ln.id,e,t,n)}),Fe&&(0,A.jsx)(sr,{image:Fe,onClose:()=>Ie(void 0)}),(0,A.jsx)(tr,{todos:a.todos??[],tasks:a.backgroundTasks??[],collapsed:pe,onToggle:()=>me(e=>!e),workspaceId:h,files:M,onOpenFile:e=>void vt(e),activeTab:dt,onSelectTab:pt})]})}N(Et()),(0,d.createRoot)(document.getElementById(`root`)).render((0,A.jsx)(l.StrictMode,{children:(0,A.jsx)(vr,{})}));
|
|
43
|
+
npx @evandu/super-pi`})})]}),(0,A.jsxs)(`div`,{className:`help-card`,children:[(0,A.jsx)(`h4`,{children:`🎯 键盘快捷键`}),(0,A.jsxs)(`div`,{className:`help-command-table`,children:[(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Enter`}),(0,A.jsx)(`span`,{children:`发送对话消息`})]}),(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Shift + Enter`}),(0,A.jsx)(`span`,{children:`输入框内换行`})]}),(0,A.jsxs)(`div`,{className:`cmd-row`,children:[(0,A.jsx)(`code`,{children:`Esc`}),(0,A.jsx)(`span`,{children:`快速关闭当前顶层弹窗(使用指南、设置、工作区选择器等)`})]})]})]})]})}function bt(){return(0,A.jsx)(`div`,{className:`help-section-group`,children:(0,A.jsxs)(`div`,{className:`help-card`,children:[(0,A.jsx)(`h4`,{children:`🎨 4 款内置专业高对比度主题`}),(0,A.jsxs)(`div`,{className:`help-theme-list`,children:[(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`🌙 Midnight(午夜冷蓝)`}),(0,A.jsx)(`p`,{children:`深邃冷调分层界面,对比度鲜明,非常适合长时间夜间专注编程。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`⬛ Slate(中性石墨)`}),(0,A.jsx)(`p`,{children:`经典低饱和中性灰度质感,克制沉稳,专业工程界面的默认首选。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`🌊 Ocean(深海冷灰)`}),(0,A.jsx)(`p`,{children:`冷调浅蓝灰阶设计,边界轮廓清晰分明,视觉感受轻盈柔和。`})]}),(0,A.jsxs)(`div`,{className:`help-theme-item`,children:[(0,A.jsx)(`strong`,{children:`☀️ Dawn(破晓暖色)`}),(0,A.jsx)(`p`,{children:`清爽明亮浅色主题,适合白天自然光线充足环境下的阅读与工作。`})]})]}),(0,A.jsxs)(`p`,{className:`help-hint`,children:[`可在左侧栏底部的 `,(0,A.jsx)(`strong`,{children:`⚙ 设置`}),` 中一键切换主题,设置会自动持久化保存在本地。`]})]})})}var xt=e=>e.nativeEvent.isComposing||e.keyCode===229,St=`super-pi.theme`,Ct=[{id:`midnight`,name:`午夜`,blurb:`冷暗调鸭的分层画面,适合长时间。`},{id:`slate`,name:`石板`,blurb:`低饱和的冷调,对视觉负荷最少。`},{id:`ocean`,name:`晴空`,blurb:`浅色的界面清澈,适合天天明亮的环境。`},{id:`dawn`,name:`黎明`,blurb:`温暖低调的纸感柔和,适合大量阅读文档。`}],wt=`midnight`,Tt=e=>typeof e==`string`&&Ct.some(t=>t.id===e);function Et(){try{let e=window.localStorage.getItem(St);if(!e)return wt;let t=JSON.parse(e),n=typeof t==`string`?t:t?.id;return Tt(n)?n:wt}catch{return wt}}function N(e){document.documentElement.setAttribute(`data-theme`,e);try{window.localStorage.setItem(St,JSON.stringify({id:e,version:1}))}catch{}}function Dt(){let[e,t]=(0,l.useState)(wt);return(0,l.useEffect)(()=>{t(Et());let e=e=>{if(e.key===`super-pi.theme`&&e.newValue)try{let n=JSON.parse(e.newValue),r=typeof n==`string`?n:n?.id;Tt(r)&&(document.documentElement.setAttribute(`data-theme`,r),t(r))}catch{}};return window.addEventListener(`storage`,e),()=>window.removeEventListener(`storage`,e)},[]),{theme:e,setTheme:(0,l.useCallback)(e=>{N(e),t(e)},[])}}function Ot({theme:e,onChooseTheme:t,onClose:n}){let r=Ct.find(t=>t.id===e);return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`settings-scope`,children:`主题只影响这台设备的显示,不改变任何内容;切换立即生效。`}),Ct.length===0?(0,A.jsx)(`div`,{className:`theme-empty`,"data-theme-empty":`1`,children:`没有可用的主题。界面将继续使用默认配色,你可以在主题文件恢复后重试。`}):(0,A.jsx)(`div`,{className:`theme-options`,role:`radiogroup`,"aria-label":`主题`,children:Ct.map(n=>{let r=n.id===e;return(0,A.jsxs)(`button`,{type:`button`,className:`theme-option`,role:`radio`,"aria-checked":r,"aria-pressed":r,"data-theme-option":n.id,"data-theme-current":r?`1`:`0`,onClick:()=>t(n.id),children:[(0,A.jsxs)(`span`,{className:`theme-preview`,"data-preview":n.id,"aria-hidden":`true`,children:[(0,A.jsx)(`span`,{className:`theme-preview-rail`}),(0,A.jsxs)(`span`,{className:`theme-preview-body`,children:[(0,A.jsx)(`span`,{className:`theme-preview-line`}),(0,A.jsx)(`span`,{className:`theme-preview-line dim`}),(0,A.jsx)(`span`,{className:`theme-preview-line accent`}),(0,A.jsx)(`span`,{className:`theme-preview-panel`})]})]}),(0,A.jsxs)(`span`,{className:`theme-option-name`,children:[n.name,(0,A.jsx)(`small`,{children:n.id}),r&&(0,A.jsx)(`span`,{className:`theme-option-current`,children:`当前 ✓`})]}),(0,A.jsx)(`span`,{className:`theme-option-blurb`,children:n.blurb})]},n.id)})}),(0,A.jsx)(`div`,{className:`picker-actions`,children:(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,"data-theme-close":`1`,onClick:n,children:`完成`})}),(0,A.jsxs)(`div`,{className:`settings-scope theme-current-line`,children:[`当前:`,r?`${r.name}(${r.id})`:`默认`]})]})}function kt({context:e}){let[t,n]=(0,l.useState)(``),[r,i]=(0,l.useState)(``),[a,o]=(0,l.useState)(!1),s=e.agentCatalog,c=e.subagentCatalog,u=s?.agents??[],d=c?.agents??[],f=[...u,...d],p=[...s?.problems??[],...c?.problems??[]],m=[...new Set([...s?.directories??(s?.directory?[s.directory]:[]),...e.customAgentDirs??[]])],h=e.customAgentDirs??[],g=r=>{if(r.preventDefault(),e.pendingSettings)return;let a=t.trim();a&&(h.includes(a)?i(`该路径已存在于自定义目录列表中`):(e.onSetCustomAgentDirs?.([...h,a]),n(``),i(``)))},_=t=>{let n=h.filter(e=>e!==t);e.onSetCustomAgentDirs?.(n)};return(0,A.jsxs)(`div`,{className:`settings-agents-container`,children:[(0,A.jsxs)(`div`,{className:`settings-agents-header`,children:[(0,A.jsx)(`p`,{className:`settings-agents-desc`,children:`Super Pi 支持多目录发现智能体。系统会按优先级自上而下合并扫描目录;若存在同名配置,高优先级目录的文件将覆盖低优先级目录。`}),(0,A.jsx)(`button`,{type:`button`,className:`settings-agent-rescan-btn`,onClick:()=>{o(!0),e.onRescanAgents?.(),setTimeout(()=>o(!1),600)},disabled:a,title:`重新扫描所有目录中的智能体定义文件`,children:a?`正在扫描…`:`🔄 立即重新扫描`})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsx)(`h4`,{className:`settings-section-title`,children:`发现路径清单(按优先级自高到低)`}),(0,A.jsx)(`div`,{className:`settings-dirs-list`,children:m.length===0?(0,A.jsx)(`div`,{className:`settings-empty-hint`,children:`暂无活跃的发现路径`}):m.map((t,n)=>{let r=h.includes(t),i=t.includes(`.super_pi`)||t.includes(`.super-pi`)||t.includes(`.pi`),a=!r&&!i,o=f.filter(e=>e.sourceDir===t).length;return(0,A.jsxs)(`div`,{className:`settings-dir-row`,children:[(0,A.jsxs)(`div`,{className:`settings-dir-info`,children:[(0,A.jsxs)(`span`,{className:`settings-dir-priority`,children:[`#`,n+1]}),(0,A.jsx)(`span`,{className:`settings-dir-path`,title:t,children:t}),(0,A.jsx)(`span`,{className:`settings-dir-tag`,children:r?`自定义`:i?`用户全局`:a?`内置`:`环境`}),(0,A.jsxs)(`span`,{className:`settings-dir-count`,children:[`(发现 `,o,` 个智能体)`]})]}),r&&(0,A.jsx)(`button`,{type:`button`,className:`settings-dir-remove-btn`,disabled:e.pendingSettings,onClick:()=>_(t),title:`移除此自定义扫描路径`,children:`移除`})]},t)})})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsx)(`h4`,{className:`settings-section-title`,children:`添加自定义路径`}),(0,A.jsxs)(`form`,{onSubmit:g,className:`settings-add-dir-form`,children:[(0,A.jsx)(`input`,{type:`text`,className:`settings-dir-input`,value:t,onChange:e=>{n(e.target.value),r&&i(``)},onKeyDown:e=>{e.key===`Enter`&&xt(e)&&e.preventDefault()},placeholder:`输入本地目录绝对路径或 ~/ 开头路径,如 D:\\agents 或 ~/.super_pi/agents`}),(0,A.jsx)(`button`,{type:`submit`,className:`settings-dir-add-btn`,disabled:e.pendingSettings||!t.trim(),children:`添加目录`})]}),r&&(0,A.jsx)(`div`,{className:`settings-dir-error`,children:r})]}),p.length>0&&(0,A.jsxs)(`section`,{className:`settings-section settings-problems-section`,children:[(0,A.jsxs)(`h4`,{className:`settings-problems-title`,children:[`⚠️ 发现 `,p.length,` 个文件解析问题`]}),(0,A.jsx)(`div`,{className:`settings-problems-list`,children:p.map((e,t)=>(0,A.jsxs)(`div`,{className:`settings-problem-row`,children:[(0,A.jsx)(`span`,{className:`settings-problem-file`,children:e.file}),`: `,e.message]},t))})]}),(0,A.jsxs)(`section`,{className:`settings-section`,children:[(0,A.jsxs)(`h4`,{className:`settings-section-title`,children:[`已发现的智能体(共 `,f.length,` 个)`]}),f.length===0?(0,A.jsxs)(`div`,{className:`settings-empty-hint`,children:[`当前未发现任何智能体。请在上述目录中添加 `,(0,A.jsx)(`code`,{children:`.md`}),` 文件(需包含 YAML frontmatter)。`]}):(0,A.jsx)(`div`,{className:`settings-agent-grid`,children:f.map(e=>(0,A.jsxs)(`div`,{className:`settings-agent-card`,children:[(0,A.jsxs)(`div`,{className:`settings-agent-card-header`,children:[(0,A.jsx)(`span`,{className:`settings-agent-name`,children:e.name}),(0,A.jsxs)(`span`,{className:`settings-agent-id`,children:[`(`,e.id,`)`]}),(0,A.jsx)(`span`,{className:`settings-agent-mode-badge ${e.mode}`,children:e.mode===`primary`?`主智能体`:`子智能体`})]}),e.sourceDir&&(0,A.jsxs)(`div`,{className:`settings-agent-source`,title:e.sourceDir,children:[`来源:`,e.sourceDir]}),e.description&&(0,A.jsx)(`div`,{className:`settings-agent-desc`,children:e.description}),(0,A.jsxs)(`div`,{className:`settings-agent-footer`,children:[(0,A.jsx)(`span`,{className:`settings-agent-tools`,children:e.toolSummary}),e.model&&(0,A.jsxs)(`span`,{className:`settings-agent-model`,children:[e.model.provider,`/`,e.model.modelId]})]})]},`${e.sourceDir}-${e.id}`))})]}),(0,A.jsx)(`div`,{className:`picker-actions`,children:(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,onClick:e.onClose,children:`完成`})})]})}function At(e){return(0,A.jsx)(kt,{context:e})}function jt({context:e}){let[t,n]=(0,l.useState)(``),[r,i]=(0,l.useState)(``),[a,o]=(0,l.useState)(),s=e=>{try{return new RegExp(e,`i`),!1}catch{return!0}},c=s(t),u=s(r),d=e.modelFilterRules??[];return(0,A.jsx)(`section`,{"data-model-rules":`1`,children:(0,A.jsxs)(`fieldset`,{disabled:e.pendingSettings,className:`model-rules-fields`,children:[(0,A.jsx)(`p`,{children:`匹配工作区名称后,仅允许匹配模型名称或 provider/modelId 的模型。多条命中规则必须全部满足。`}),d.map(t=>(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`code`,{children:[t.workspacePattern,` → `,t.modelPattern]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>{o(t.id),n(t.workspacePattern),i(t.modelPattern)},children:`编辑`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>e.onSetModelRules?.(d.filter(e=>e.id!==t.id)),children:`删除`})]},t.id)),(0,A.jsxs)(`label`,{children:[`工作区名正则`,(0,A.jsx)(`input`,{"data-rule-workspace":`1`,value:t,"aria-invalid":c,onChange:e=>n(e.target.value)})]}),(0,A.jsxs)(`label`,{children:[`允许的模型名正则`,(0,A.jsx)(`input`,{"data-rule-model":`1`,value:r,"aria-invalid":u,onChange:e=>i(e.target.value)})]}),(c||u)&&(0,A.jsx)(`p`,{role:`alert`,children:`正则表达式不合法,请修正后保存。`}),(0,A.jsx)(`button`,{type:`button`,"data-rule-save":`1`,disabled:!t||!r||c||u,onClick:()=>{let s={id:a??crypto.randomUUID(),workspacePattern:t,modelPattern:r};e.onSetModelRules?.([...d.filter(e=>e.id!==s.id),s]),n(``),i(``),o(void 0)},children:`保存规则`})]})})}var Mt=[{id:`appearance`,label:`外观`,render:Ot},{id:`agents`,label:`智能体`,render:At},{id:`model-rules`,label:`模型过滤`,render:e=>(0,A.jsx)(jt,{context:e})}],P=Mt[0]?.id;function Nt({theme:e,onChooseTheme:t,onClose:n,agentCatalog:r,subagentCatalog:i,modelFilterRules:a,onSetModelRules:o,customAgentDirs:s,pendingSettings:c,onSetCustomAgentDirs:u,onRescanAgents:d}){let[f,p]=(0,l.useState)(P);(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.defaultPrevented&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]);let m=Mt.find(e=>e.id===f)??Mt[0];return(0,A.jsx)(`div`,{className:`overlay`,onClick:n,children:(0,A.jsxs)(`div`,{className:`picker settings-window`,"data-theme-dialog":`1`,"data-settings-window":`1`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`div`,{className:`settings-window-head`,children:(0,A.jsx)(`h2`,{children:`设置`})}),(0,A.jsxs)(`div`,{className:`settings-window-body`,children:[(0,A.jsxs)(`nav`,{className:`settings-nav`,role:`tablist`,"aria-orientation":`vertical`,"aria-label":`设置分类`,"data-settings-nav":`1`,children:[(0,A.jsx)(`div`,{className:`settings-nav-label`,children:`分类`}),Mt.map(e=>(0,A.jsx)(`button`,{type:`button`,id:`settings-tab-${e.id}`,className:`settings-category`,role:`tab`,"aria-selected":e.id===m?.id,"aria-controls":`settings-panel`,tabIndex:e.id===m?.id?0:-1,"data-settings-category":e.id,onClick:()=>p(e.id),children:e.label},e.id))]}),m&&(0,A.jsxs)(`div`,{className:`settings-panel`,id:`settings-panel`,role:`tabpanel`,"aria-labelledby":`settings-tab-${m.id}`,"data-settings-panel":m.id,children:[(0,A.jsx)(`h3`,{className:`settings-panel-title`,"data-settings-panel-title":m.id,children:m.label}),m.render({theme:e,onChooseTheme:t,onClose:n,agentCatalog:r,subagentCatalog:i,modelFilterRules:a,onSetModelRules:o,customAgentDirs:s,pendingSettings:c,onSetCustomAgentDirs:u,onRescanAgents:d})]})]})]})})}var Pt=[{kind:`calculator`,name:`计算器`,glyph:`∑`,blurb:`算术表达式,四则运算与乘方。除零会明确报错。`},{kind:`timestamp`,name:`时间戳`,glyph:`◷`,blurb:`Unix 时间戳与日期互转,本地计算,不联网。`}],Ft=[{id:`preset_calculator`,kind:`calculator`,name:`计算器`,glyph:`∑`}],It=40,Lt=2048,Rt=`super-pi:tools:v1`;function zt(e){return typeof e==`string`?e.replace(/\s+/g,` `).trim().slice(0,It):``}function Bt(e){let t=e.trim();if(!t)return{ok:!1,reason:`请填写网址。`};if(t.length>Lt)return{ok:!1,reason:`网址太长了,请控制在 ${Lt} 个字符以内。`};let n=h(t);return n?{ok:!0,url:n}:{ok:!1,reason:`这个网址不是允许的协议。只支持 http / https / mailto 开头的网址。`}}function Vt(e){if(!e)return[];let t;try{t=JSON.parse(e)}catch{return[]}if(!Array.isArray(t))return[];let n=[],r=new Set;for(let e of t){if(typeof e!=`object`||!e)continue;let t=e,i=t.kind;if(typeof i!=`string`||i!==`calculator`&&i!==`timestamp`&&i!==`link`)continue;let a=zt(t.name);if(!a)continue;let o=typeof t.glyph==`string`&&t.glyph.trim()?t.glyph.trim().slice(0,4):``;if(!o)continue;let s=typeof t.id==`string`&&t.id.trim()?t.id.trim().slice(0,64):``;if(s&&!r.has(s)){if(i===`link`){let e=h(typeof t.url==`string`?t.url:``);if(!e)continue;r.add(s),n.push({id:s,kind:`link`,name:a,glyph:o,url:e})}else if(r.add(s),n.push({id:s,kind:i,name:a,glyph:o}),n.length>=32)break}}return n}function Ht(e){return JSON.stringify(e.map(e=>e.kind===`link`?{...e}:{id:e.id,kind:e.kind,name:e.name,glyph:e.glyph}))}function Ut(e,t){let n=e===`link`?`link`:`preset_${e}`,r=typeof globalThis<`u`?globalThis.crypto:void 0,i=typeof r?.randomUUID==`function`?r.randomUUID().slice(0,8):``;i||=Math.random().toString(36).slice(2,10);let a=`${n}_${i}`,o=1;for(;t.includes(a);)a=`${n}_${i}_${o}`,o+=1;return a}function Wt(e,t){if(e.some(e=>e.kind===t))return e.slice();let n=Pt.find(e=>e.kind===t);return n?[...e,{id:Ut(t,e.map(e=>e.id)),kind:t,name:n.name,glyph:n.glyph}]:e.slice()}function Gt(e,t){return e.filter(e=>e.id!==t)}var Kt=e=>({ok:!1,reason:e}),qt=`除数不能为 0:除以零没有结果,请换一个非零的除数。`,Jt=new Set([`/`,`%`]),Yt=e=>e!==void 0&&e>=`0`&&e<=`9`,F=e=>e!==void 0&&/\s/.test(e);function Xt(e){for(;F(e.source[e.at]);)e.at+=1}function Zt(e){let t=e.at,n=0;for(;Yt(e.source[e.at]);)e.at+=1,n+=1;if(e.source[e.at]===`.`)for(e.at+=1;Yt(e.source[e.at]);)e.at+=1,n+=1;if(!n)return e.at=t,Kt(`「${e.source[t]}」不是有效的数字。`);let r=Number(e.source.slice(t,e.at));return Number.isFinite(r)?{ok:!0,value:r}:Kt(`数字太长了,无法表示。`)}function Qt(e){Xt(e);let t=e.source[e.at];if(t===void 0)return Kt(`算式不完整:末尾还缺一个数字或右括号。`);if(t===`(`){e.at+=1;let t=nn(e);return t.ok?(Xt(e),e.source[e.at]===`)`?(e.at+=1,t):Kt(`括号不匹配:少了一个右括号「)」。`)):t}return Yt(t)||t===`.`?Zt(e):Kt(`无法识别的字符「${t}」。`)}function $t(e){let t=Qt(e);if(!t.ok||(Xt(e),e.source[e.at]!==`^`))return t;e.at+=1;let n=en(e);if(!n.ok)return n;let r=t.value**n.value;return Number.isFinite(r)?{ok:!0,value:r}:Kt(`结果超出了可计算的数值范围。`)}function en(e){Xt(e);let t=e.source[e.at];if(t!==`+`&&t!==`-`)return $t(e);e.at+=1;let n=en(e);if(!n.ok)return n;let r=t===`-`?-n.value:n.value;return Number.isFinite(r)?{ok:!0,value:r}:Kt(`结果超出了可计算的数值范围。`)}function tn(e){let t=en(e);if(!t.ok)return t;for(;;){Xt(e);let n=e.source[e.at];if(n!==`*`&&!Jt.has(n))return t;e.at+=1;let r=en(e);if(!r.ok)return r;if(Jt.has(n)&&r.value===0)return Kt(qt);let i=n===`*`?t.value*r.value:n===`%`?t.value%r.value:t.value/r.value;if(!Number.isFinite(i))return Kt(`结果超出了可计算的数值范围。`);t={ok:!0,value:i}}}function nn(e){let t=tn(e);if(!t.ok)return t;for(;;){Xt(e);let n=e.source[e.at];if(n!==`+`&&n!==`-`)return t;e.at+=1;let r=tn(e);if(!r.ok)return r;let i=n===`+`?t.value+r.value:t.value-r.value;if(!Number.isFinite(i))return Kt(`结果超出了可计算的数值范围。`);t={ok:!0,value:i}}}function rn(e){let t=e.trim();if(!t)return Kt(`请输入算式。`);if(t.length>200)return Kt(`算式太长了,请控制在 200 个字符以内。`);let n={source:t,at:0},r=nn(n);return r.ok?(Xt(n),n.at===t.length?Number.isFinite(r.value)?r:Kt(`结果不是有限数字。`):Kt(`「${t[n.at]}」后面的内容无法识别,请检查是否漏了运算符。`)):r}function an(e){return String(!Number.isFinite(e)||Number.isInteger(e)&&Math.abs(e)<1e21?e:Number(e.toPrecision(12)))}function on(e){let t=e.trim();if(!t)return{ok:!1,reason:`请输入时间戳或日期。`};if(/^\d+$/.test(t)){let e=Number(t);if(!Number.isFinite(e))return{ok:!1,reason:`这个数字太大,无法表示。`};let n=t.length<=11?e*1e3:e;return!Number.isFinite(n)||Math.abs(n)>864e13?{ok:!1,reason:`这个时间戳超出了日期能表示的范围。`}:{ok:!0,ms:n}}let n=Date.parse(t);return Number.isNaN(n)?{ok:!1,reason:`看不懂这个日期。试试 1757000000、2026-10-08 或 2026-10-08T09:00:00。`}:{ok:!0,ms:n}}var sn=e=>String(Math.abs(e)).padStart(2,`0`);function cn(e){let t=new Date(e);return Number.isNaN(t.getTime())?null:{local:`${t.getFullYear()}-${sn(t.getMonth()+1)}-${sn(t.getDate())} ${sn(t.getHours())}:${sn(t.getMinutes())}:${sn(t.getSeconds())}`,iso:t.toISOString(),seconds:String(Math.floor(e/1e3)),milliseconds:String(e)}}var ln={workspaces:[],conversations:[],subagentRuns:[],queuedMessages:[]},un=e=>e.nativeEvent.isComposing||e.keyCode===229,dn=e=>{if(typeof e!=`string`||e.length===0)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:new Intl.DateTimeFormat(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}).format(t)},fn=6e4,pn=60*fn,mn=24*pn,hn=7*mn,gn=30*mn,_n=365*mn,vn=(e,t)=>{let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=t-n.getTime();return r<3e4?`now`:r<pn?`${Math.max(1,Math.floor(r/fn))}m ago`:r<mn?`${Math.floor(r/pn)}h ago`:r<hn?`${Math.floor(r/mn)}d ago`:r<gn?`${Math.floor(r/hn)}w ago`:r<_n?`${Math.floor(r/gn)}mo ago`:`${Math.floor(r/_n)}y ago`},yn=(e,t)=>e.updatedAt<t.updatedAt?1:e.updatedAt>t.updatedAt?-1:0,bn=(e,t)=>{let n=e.archivedAt??``,r=t.archivedAt??``;return n<r?1:n>r?-1:0},xn=e=>{if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`},Sn=1e3,Cn=3e4,wn=async e=>{try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.cssText=`position:fixed;top:0;left:0;width:1px;height:1px;padding:0;border:0;opacity:0;pointer-events:none`,document.body.appendChild(t);try{return t.select(),t.setSelectionRange(0,t.value.length),document.execCommand(`copy`)}catch{return!1}finally{t.remove()}},Tn={model:`模型`,thinking:`思考`,agent:`智能体`,subagent:`子智能体`},En={model:`模型`,thinking:`思考等级`,agent:`智能体`,subagent:`子智能体`},Dn={model:`选择模型`,thinking:`选择思考等级`,agent:`选择智能体`,subagent:`选择子智能体`},On=`图文`,kn=e=>e.imageInput?On:void 0,An=e=>e.normalize(`NFKD`).replace(/\p{M}/gu,``).toLowerCase(),jn=(e,t)=>{let n=An(t.trim());return n?e.filter(e=>An(`${e.label} ${e.detail??``} ${e.badge??``}`).includes(n)):e};function Mn({onClose:e,onCreate:t}){let[n,r]=(0,l.useState)(),[i,a]=(0,l.useState)(!0),[o,s]=(0,l.useState)(),[c,u]=(0,l.useState)(``),[d,f]=(0,l.useState)(``),p=async e=>{a(!0),s(void 0);try{let t=await fetch(`/api/fs/dirs${e?`?path=${encodeURIComponent(e)}`:``}`),n=await t.json();if(!t.ok)throw Error(n.error??`HTTP ${t.status}`);let i=n;r(i),f(i.path),u(i.suggestedName)}catch(e){s(e instanceof Error?e.message:`目录加载失败`)}finally{a(!1)}};(0,l.useEffect)(()=>{p()},[]),(0,l.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e]);let m=e=>{e?.preventDefault();let t=d.trim();t&&p(t)};return(0,A.jsx)(`div`,{className:`overlay`,onClick:e,children:(0,A.jsxs)(`div`,{className:`picker workspace-picker`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`h2`,{children:`选择工作区目录`}),(0,A.jsxs)(`form`,{className:`picker-path-bar`,onSubmit:m,children:[(0,A.jsx)(`input`,{className:`picker-path-input`,value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(un(e)?e.preventDefault():(e.preventDefault(),m()))},placeholder:`输入或粘贴目录绝对路径(如 D:\\projects 或 ~/code)`}),(0,A.jsx)(`button`,{type:`submit`,className:`picker-go-btn`,disabled:!d.trim()||i,children:`跳转`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-up-btn`,disabled:!n?.parent||i,onClick:()=>n?.parent&&void p(n.parent),title:`返回上一级目录`,children:`上一级`})]}),n?.drives?.length||n?.homeDir?(0,A.jsxs)(`div`,{className:`picker-shortcuts`,children:[(0,A.jsx)(`span`,{className:`picker-shortcuts-label`,children:`快捷位置:`}),n?.homeDir&&(0,A.jsx)(`button`,{type:`button`,className:`picker-shortcut`,onClick:()=>void p(`~`),title:n.homeDir,children:`🏠 主目录`}),n?.drives?.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`picker-shortcut`,onClick:()=>void p(e),children:e},e))]}):null,(0,A.jsxs)(`div`,{className:`picker-list`,children:[i&&(0,A.jsx)(`div`,{className:`picker-status`,children:`加载中…`}),!i&&o&&(0,A.jsxs)(`div`,{className:`picker-error`,children:[o,(0,A.jsx)(`button`,{onClick:()=>void p(n?.path||d),children:`重试`})]}),!i&&!o&&n?.entries.map(e=>(0,A.jsxs)(`button`,{className:`picker-dir`,onClick:()=>void p(e.path),children:[`📁 `,e.name]},e.path)),!i&&!o&&n&&n.entries.length===0&&(0,A.jsx)(`div`,{className:`picker-status`,children:`此目录下没有子目录`}),!i&&!o&&n?.truncated&&(0,A.jsx)(`div`,{className:`picker-status`,children:`目录过多,仅显示前 2000 项`})]}),(0,A.jsxs)(`label`,{className:`picker-name`,children:[`工作区名称`,(0,A.jsx)(`input`,{value:c,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(un(e)?e.preventDefault():(e.preventDefault(),c.trim()&&n&&t(c.trim(),n.path)))},placeholder:`工作区名称`})]}),(0,A.jsxs)(`div`,{className:`picker-actions`,children:[(0,A.jsx)(`button`,{className:`picker-cancel`,onClick:e,children:`取消`}),(0,A.jsx)(`button`,{className:`picker-ok`,disabled:!c.trim()||i||!!o||!n,onClick:()=>n&&t(c.trim(),n.path),children:`使用这个目录`})]})]})})}var Nn={timeout:`扩展提问超时,已取消`,aborted:`运行已停止,扩展提问已取消`,expired:`运行已结束,扩展提问已取消`},Pn=10;function Fn(e,t){if(!t)return`正在从 Pi 读取${e}列表…`;if(t.source!==`pi`)return`读取 Pi ${e}列表失败:${t.error??`未知原因`}`}function In(e){if(!e)return`正在读取 agent 列表…`;if(e.source!==`directory`)return`读取 agent 列表失败:${e.error??`未知原因`}`;if(e.problems.length)return`${e.problems.length} 个 agent 文件无法使用:${e.problems.map(e=>e.file).join(`、`)}`;if(!e.agents.length)return`${e.directory} 下没有 primary agent`}var Ln=e=>Math.abs(e)<1e3?String(e):`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`;function Rn(e){if(e===void 0||!Number.isFinite(e))return``;let t=Math.max(0,e);return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}分${Math.round(t%6e4/1e3)}秒`}var zn={dispatch:`派发时(子进程还没起来)`,prompt:`派活时(Pi 拒收了任务)`,turn:`生成回答时`,tool:`调用工具时`,settle:`收尾时`};function Bn({call:e,index:t,expanded:n,onToggle:r}){let i=e.args??[];return(0,A.jsxs)(`div`,{className:`call-block call-block-${e.status??`running`}`,"data-call-block":t,"data-call-tool":e.label,"data-call-detail":e.detail??void 0,"data-call-status":e.status??`running`,"data-call-expanded":n?`true`:`false`,"data-call-arg-count":i.length,children:[(0,A.jsx)(`button`,{type:`button`,className:`call-fold-edge`,"data-call-fold-edge":t,"aria-expanded":n,"aria-label":`${n?`折叠`:`展开`} ${e.label} 调用`,title:n?`折叠这次调用`:`展开这次调用`,onClick:r}),(0,A.jsxs)(`div`,{className:`call-head-row`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`call-head`,"data-call-head":t,"aria-expanded":n,onClick:r,children:[(0,A.jsx)(`span`,{className:`call-chevron`,"aria-hidden":`true`,children:n?`▾`:`▸`}),(0,A.jsx)(`span`,{className:`call-glyph`,"aria-hidden":`true`,children:e.status===`error`?`✕`:e.status===`ok`?`✓`:`·`}),(0,A.jsx)(`span`,{className:`call-label`,children:e.label}),e.detail&&(0,A.jsx)(`span`,{className:`call-detail`,title:e.detail,children:e.detail}),e.durationMs!==void 0&&(0,A.jsx)(`span`,{className:`call-duration`,children:Rn(e.durationMs)})]}),n&&(0,A.jsx)(`button`,{type:`button`,className:`call-fold-top`,"data-call-fold-top":t,onClick:r,children:`收起`})]}),n&&(0,A.jsx)(`div`,{className:`call-args`,"data-call-args":i.length,children:i.length===0?(0,A.jsx)(`div`,{className:`call-arg call-arg-empty`,"data-call-arg-empty":t,children:`(这次调用没有可显示的参数)`}):i.map(e=>(0,A.jsxs)(`div`,{className:`call-arg`,"data-call-arg":e.key,"data-call-arg-value":e.value,children:[(0,A.jsx)(`span`,{className:`call-arg-key`,children:e.key}),(0,A.jsx)(`span`,{className:`call-arg-value`,title:e.value,children:e.value})]},e.key))})]})}function Vn({run:e,name:t,expanded:n,onToggle:r,onStop:i,stopping:a}){let o=e.toolCalls??[],s=n?o:o.slice(-10),c=o.length-s.length,u=e.status===`running`,d=e.output??``,f=e.dispatchedBy===`model`,[p,m]=(0,l.useState)(0);(0,l.useEffect)(()=>{if(!u)return;m(Date.now());let e=window.setInterval(()=>m(Date.now()),200);return()=>window.clearInterval(e)},[u,e.startedAt]);let h=Date.parse(e.startedAt),g=u&&p>0&&Number.isFinite(h)?p-h:void 0,_=[...o].reverse().find(e=>e.status===void 0)?.label;return(0,A.jsxs)(`article`,{className:`subagent-card subagent-${e.status}${f?` subagent-by-model`:``}`,"data-subagent-card":e.id,"data-subagent-status":e.status,"data-subagent-agent":e.agentId,"data-subagent-tools":o.length,"data-subagent-dispatched-by":f?`model`:`human`,children:[(0,A.jsxs)(`div`,{className:`subagent-head`,children:[(0,A.jsx)(`span`,{className:`subagent-badge`,children:`子智能体`}),f&&(0,A.jsxs)(`span`,{className:`subagent-source`,"data-subagent-source":`model`,title:`primary 模型自己决定派这个子智能体去干活`,children:[(0,A.jsx)(`span`,{className:`subagent-source-glyph`,"aria-hidden":`true`,children:`⚡`}),`模型自主派发`]}),(0,A.jsx)(`strong`,{className:`subagent-name`,"data-subagent-name":`1`,children:t||e.agentId}),(0,A.jsx)(`span`,{className:`subagent-status`,"data-subagent-status-text":`1`,children:u?`运行中`:e.status===`completed`?`已完成`:e.status===`stopped`?`已停止`:`失败`}),u?g!==void 0&&(0,A.jsxs)(`span`,{className:`subagent-clock`,"data-subagent-elapsed":`1`,"data-subagent-elapsed-ms":g,children:[`已运行 `,Rn(g)]}):e.durationMs!==void 0&&(0,A.jsxs)(`span`,{className:`subagent-duration`,"data-subagent-duration":`1`,"data-subagent-duration-ms":e.durationMs,children:[`用时 `,Rn(e.durationMs)]}),u&&(0,A.jsx)(`button`,{type:`button`,className:`subagent-stop`,"data-subagent-stop":e.id,disabled:a,onClick:i,children:`停止`})]}),u&&e.activity&&(0,A.jsxs)(`div`,{className:`subagent-activity`,"data-subagent-activity":e.activity.kind,"data-subagent-activity-at":e.activity.at,children:[(0,A.jsx)(`span`,{className:`subagent-activity-dot`,"aria-hidden":`true`}),e.activity.kind===`tool`?`正在调用 ${e.activity.label??`工具`}`:`正在思考…`]}),(0,A.jsxs)(`div`,{className:`subagent-task`,"data-subagent-task":`1`,children:[f&&(0,A.jsx)(`span`,{className:`subagent-task-source`,"data-subagent-model-task":`1`,children:`模型给的任务`}),e.task]}),(0,A.jsx)(`div`,{className:`subagent-output`,"data-subagent-output":`1`,"data-live-length":d.length,children:d||(u?`…`:e.outputTruncated?`(已按 50 KB 上限截断,浏览器仍收到完整内容)`:`(没有输出)`)}),e.failure&&(0,A.jsxs)(`div`,{className:`subagent-failure`,"data-subagent-failure":`1`,"data-subagent-failure-stage":e.failure.stage,children:[(0,A.jsx)(`span`,{className:`subagent-failure-label`,children:`卡在`}),(0,A.jsx)(`span`,{className:`subagent-failure-stage`,"data-subagent-failure-text":`1`,children:zn[e.failure.stage]}),e.failure.stage===`tool`&&_&&(0,A.jsxs)(`span`,{className:`subagent-failure-tool`,"data-subagent-failure-tool":`1`,children:[`· 正在跑 `,_]}),o.length>0&&(0,A.jsxs)(`span`,{className:`subagent-failure-progress`,children:[`· 死前已尝试 `,o.length,` 次工具调用`]})]}),e.error&&(0,A.jsx)(`div`,{className:`subagent-error`,"data-subagent-error":`1`,children:e.error}),o.length>0&&(0,A.jsxs)(`div`,{className:`subagent-tools`,"data-subagent-tool-count":o.length,children:[c>0&&!n&&(0,A.jsxs)(`button`,{type:`button`,className:`subagent-more`,"data-subagent-hidden":c,onClick:r,children:[`… 另有 `,c,` 条工具调用`]}),s.map((e,t)=>(0,A.jsxs)(`div`,{className:`subagent-tool${e.status?` subagent-tool-${e.status}`:``}`,"data-subagent-tool":e.label,"data-subagent-tool-detail":e.detail??void 0,"data-subagent-tool-status":e.status??`running`,children:[(0,A.jsx)(`span`,{className:`subagent-tool-glyph`,"aria-hidden":`true`,children:e.status===`error`?`✕`:e.status===`ok`?`✓`:`·`}),(0,A.jsx)(`span`,{className:`subagent-tool-label`,children:e.label}),e.detail&&(0,A.jsx)(`span`,{className:`subagent-tool-detail`,title:e.detail,children:e.detail}),e.durationMs!==void 0&&(0,A.jsx)(`span`,{className:`subagent-tool-duration`,children:Rn(e.durationMs)})]},`${t}:${e.label}`))]}),e.usage&&(0,A.jsxs)(`div`,{className:`subagent-usage`,"data-subagent-usage":`1`,"data-subagent-turns":e.usage.turns,children:[(0,A.jsxs)(`span`,{children:[e.usage.turns,` turns`]}),(0,A.jsxs)(`span`,{children:[`↑`,Ln(e.usage.input)]}),(0,A.jsxs)(`span`,{children:[`↓`,Ln(e.usage.output)]}),e.usage.cacheRead>0&&(0,A.jsxs)(`span`,{children:[`cache↓`,Ln(e.usage.cacheRead)]}),e.usage.cacheWrite>0&&(0,A.jsxs)(`span`,{children:[`cache↑`,Ln(e.usage.cacheWrite)]}),e.usage.cost>0&&(0,A.jsxs)(`span`,{children:[`$`,e.usage.cost.toFixed(4)]})]}),o.length>10&&(0,A.jsx)(`button`,{type:`button`,className:`subagent-collapse`,"data-subagent-collapse":e.id,"aria-expanded":n,onClick:r,children:n?`收起`:`展开全部 ${o.length} 条`})]})}function Hn({items:e,pi:t,running:n,onCancel:r,onSteer:i}){let[a,o]=(0,l.useState)(!1);if(!e.length)return null;let s=e.filter(e=>e.state===`sending`);return(0,A.jsxs)(`section`,{className:`queue-dock`,"data-queue-dock":`1`,"data-queue-count":e.length,"data-queue-sending":s.length,"aria-label":`排队等待发送的消息`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`queue-dock-head`,"data-queue-collapse":`1`,"aria-expanded":!a,onClick:()=>o(e=>!e),children:[(0,A.jsx)(`span`,{className:`chevron`,children:a?`▸`:`▾`}),(0,A.jsxs)(`strong`,{children:[e.length,` 条待发送`]}),s.length>0&&(0,A.jsxs)(`span`,{className:`queue-dock-badge`,"data-queue-badge":`sending`,children:[s.length,` 条已交给 Agent`]}),a&&(0,A.jsx)(`span`,{className:`queue-dock-preview`,children:e[0].content})]}),!a&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`p`,{className:`queue-dock-note`,"data-queue-note":`steer`,children:[n?`「插队」= 当前这一批工具调用跑完就插进来,不用等整个任务结束;正在跑单个长工具时无法打断。`:`当前没有正在运行的这一轮,「插队」会等下一轮开始时发出。`,t&&t.steering.length>0&&` Pi 手上还有 ${t.steering.length} 条插队消息在等下一个工具调用边界。`]}),(0,A.jsx)(`ul`,{className:`queue-dock-list`,children:e.map((e,t)=>{let a=e.state===`sending`,o=e.content||(e.images?.length?`【图片】(${e.images.length})`:``);return(0,A.jsxs)(`li`,{className:`queue-row ${a?`queue-row-sending`:`queue-row-queued`}`,"data-queue-id":e.id,"data-queue-state":e.state,children:[(0,A.jsx)(`span`,{className:`queue-index`,"aria-hidden":`true`,children:t+1}),(0,A.jsx)(`span`,{className:`queue-text`,title:o,children:o}),(0,A.jsx)(`span`,{className:`queue-state`,"data-queue-state-label":a?`sending`:`queued`,children:a?`投递中…`:`待发送`}),a?(0,A.jsx)(`span`,{className:`queue-locked`,"data-queue-locked":e.id,children:`已交给 Agent,取消不掉`}):(0,A.jsxs)(A.Fragment,{children:[n?(0,A.jsx)(`button`,{type:`button`,className:`queue-steer`,"data-queue-steer":e.id,title:`插队:当前这一批工具调用跑完后插入,不用等整个任务结束`,"aria-label":`把「${o}」插队发送:当前这一批工具调用跑完后插入`,onClick:()=>i(e.id),children:`插队`}):(0,A.jsx)(`span`,{className:`queue-steer-idle`,"data-queue-steer-idle":e.id,title:`没有正在运行的这一轮,现在无法插队`,children:`未运行,暂不能插队`}),(0,A.jsx)(`button`,{type:`button`,className:`queue-cancel`,"data-queue-cancel":e.id,title:`取消这条排队消息,它不会被发出`,"aria-label":`取消排队消息「${o}」`,onClick:()=>r(e.id),children:`取消`})]})]},e.id)})})]})]})}function Un({request:e,onAnswer:t,pending:n}){let[r,i]=(0,l.useState)(e.prefill??``),a=e.method===`input`||e.method===`editor`,o=(0,A.jsx)(`button`,{type:`button`,className:`extui-cancel`,onClick:()=>t({cancelled:!0}),children:`取消提问`});return(0,A.jsxs)(`article`,{className:`extui-card extui-${e.method}`,"data-request-id":e.requestId,"data-method":e.method,children:[(0,A.jsxs)(`div`,{className:`extui-head`,children:[(0,A.jsx)(`span`,{className:`extui-badge`,children:`扩展提问`}),e.timeoutMs!==void 0&&(0,A.jsxs)(`span`,{className:`extui-deadline`,children:[Math.round(e.timeoutMs/1e3),`s 超时`]})]}),n&&(0,A.jsx)(`p`,{role:`status`,children:`提交中…`}),(0,A.jsxs)(`fieldset`,{disabled:n,style:{border:0,padding:0,margin:0},children:[(0,A.jsx)(`h3`,{className:`extui-title`,children:e.title||e.method}),e.method===`confirm`&&(0,A.jsx)(`p`,{className:`extui-body`,children:e.message}),e.method===`select`&&(0,A.jsxs)(`div`,{className:`extui-options`,children:[(e.options??[]).map(e=>(0,A.jsx)(`button`,{type:`button`,className:`extui-option`,onClick:()=>t({value:e}),children:e},e)),(e.options??[]).length===0&&(0,A.jsx)(`p`,{className:`extui-body`,children:`扩展没有提供任何选项`})]}),a&&(0,A.jsxs)(`form`,{className:`extui-form`,onSubmit:e=>{e.preventDefault(),!n&&r.trim()&&t({value:r})},children:[e.method===`input`?(0,A.jsx)(`input`,{className:`extui-field`,value:r,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&un(e)&&e.preventDefault()},placeholder:e.placeholder??``}):(0,A.jsx)(`textarea`,{className:`extui-field`,value:r,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&un(e)&&e.preventDefault()}}),(0,A.jsxs)(`div`,{className:`extui-actions`,children:[(0,A.jsx)(`button`,{type:`submit`,className:`extui-primary`,disabled:!r.trim(),children:`提交`}),o]})]}),!a&&(0,A.jsxs)(`div`,{className:`extui-actions`,children:[e.method===`confirm`&&(0,A.jsx)(`button`,{type:`button`,className:`extui-primary`,onClick:()=>t({confirmed:!0}),children:`确认`}),e.method===`confirm`&&(0,A.jsx)(`button`,{type:`button`,className:`extui-no`,onClick:()=>t({confirmed:!1}),children:`拒绝`}),o]})]})]})}function Wn({initial:e,label:t,onCommit:n,onClose:r}){let[i,a]=(0,l.useState)(e),o=(0,l.useRef)(null),s=(0,l.useRef)(!1);(0,l.useEffect)(()=>{o.current?.focus(),o.current?.select()},[]);let c=!i.trim(),u=()=>{s.current=!0,r()},d=()=>{if(c)return;let t=i.trim();(t===e||n(t))&&u()};return(0,A.jsxs)(`div`,{className:`inline-edit`,"data-editing":`1`,children:[(0,A.jsx)(`input`,{ref:o,className:`inline-edit-input`,value:i,"aria-label":t,onChange:e=>a(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){if(un(e))return;e.preventDefault(),d()}else e.key===`Escape`&&(e.preventDefault(),u())},onBlur:()=>{s.current||r()}}),(0,A.jsx)(`button`,{type:`button`,className:`inline-edit-ok`,title:`确认重命名`,"aria-label":`确认重命名`,disabled:c,onMouseDown:e=>e.preventDefault(),onClick:d,children:`✓`}),(0,A.jsx)(`button`,{type:`button`,className:`inline-edit-cancel`,title:`取消重命名`,"aria-label":`取消重命名`,onMouseDown:e=>e.preventDefault(),onClick:u,children:`✗`})]})}function Gn({kind:e,label:t,value:n,detail:r,options:i,disabled:a,note:o,onChoose:s,scope:c}){let[u,d]=(0,l.useState)(!1),[f,p]=(0,l.useState)(``),[m,h]=(0,l.useState)(0),g=(0,l.useRef)(null),_=(0,l.useRef)(null),v=(0,l.useRef)(null),y=(0,l.useRef)(null),b=(0,l.useRef)([]),x=i.find(e=>e.selected),S=jn(i,f),C=S.length===0?-1:Math.min(Math.max(m,0),S.length-1),ee=C<0?void 0:S[C],w=(e=!1)=>{d(!1),e&&_.current?.focus()},te=()=>{p(``),h(Math.max(i.findIndex(e=>e.selected),0)),d(!0)},T=e=>h(t=>S.length?Math.min(Math.max(t+e,0),S.length-1):0);(0,l.useEffect)(()=>{if(!u)return;let e=e=>{g.current?.contains(e.target)||w()};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[u]),(0,l.useEffect)(()=>{if(!u)return;let e=g.current,t=t=>{e?.contains(t.relatedTarget)||w()};return e?.addEventListener(`focusout`,t),()=>e?.removeEventListener(`focusout`,t)},[u]),(0,l.useEffect)(()=>{u&&y.current?.focus()},[u]),(0,l.useEffect)(()=>{u&&C>=0&&b.current[C]?.scrollIntoView({block:`nearest`})},[u,C]),(0,l.useLayoutEffect)(()=>{if(!u)return;let e=v.current;if(!e)return;e.style.setProperty(`--picker-nudge`,`0px`),e.style.setProperty(`--picker-drop`,`0px`);let t=e.getBoundingClientRect(),n=Math.min(window.innerWidth-8-t.right,Math.max(8-t.left,0)),r=Math.min(window.innerHeight-8-t.bottom,Math.max(8-t.top,0));e.style.setProperty(`--picker-nudge`,`${n}px`),e.style.setProperty(`--picker-drop`,`${r}px`)},[u,S.length,i.length]);let ne=e=>{if(u){if(e.key===`Escape`)e.preventDefault(),w(!0);else if(e.key===`ArrowDown`)e.preventDefault(),T(1);else if(e.key===`ArrowUp`)e.preventDefault(),T(-1);else if(e.key===`Home`)e.preventDefault(),h(0);else if(e.key===`End`)e.preventDefault(),h(Math.max(S.length-1,0));else if(e.key===`Enter`){if(un(e))return;e.preventDefault(),ee&&(s(ee.key),w(!0))}}},re=`picker-list-${c??e}`,ie=t=>`picker-option-${c??e}-${t}`;return(0,A.jsxs)(`div`,{className:`session-picker-item session-picker-${e}`,ref:g,onKeyDown:u?ne:void 0,children:[(0,A.jsxs)(`button`,{ref:_,type:`button`,className:`session-picker-trigger`,disabled:a,"aria-haspopup":`listbox`,"aria-expanded":u,title:o??`${Tn[e]}:${r?`${t} · ${r}`:t}`,"data-picker-trigger":e,"data-picker-value":n??t,"data-picker-selected":i.some(e=>e.selected),onClick:()=>u?w():te(),children:[(0,A.jsx)(`span`,{className:`session-picker-kind`,children:Tn[e]}),(0,A.jsx)(`span`,{className:`session-picker-name`,children:t}),r&&(0,A.jsx)(`span`,{className:`session-picker-detail`,children:r}),(0,A.jsx)(`span`,{className:`session-picker-caret`,"aria-hidden":`true`,children:`▾`})]}),u&&(0,A.jsxs)(`div`,{className:`picker-menu`,ref:v,"data-picker-menu":e,"data-picker-highlight":C,children:[(0,A.jsxs)(`div`,{className:`picker-filter`,children:[(0,A.jsx)(`span`,{className:`picker-filter-icon`,"aria-hidden":`true`,children:`🔍`}),(0,A.jsx)(`input`,{ref:y,className:`picker-filter-input`,"data-picker-filter":e,role:`combobox`,"aria-label":`筛选${En[e]}选项`,"aria-expanded":`true`,"aria-controls":re,"aria-autocomplete":`list`,"aria-activedescendant":ee?ie(C):void 0,value:f,placeholder:`输入以筛选…`,autoComplete:`off`,spellCheck:!1,onChange:e=>{p(e.target.value),h(0)}}),f&&(0,A.jsx)(`button`,{type:`button`,className:`picker-filter-clear`,"data-picker-filter-clear":e,title:`清空筛选`,"aria-label":`清空筛选`,onMouseDown:e=>e.preventDefault(),onClick:()=>{p(``),h(0),y.current?.focus()},children:`✕`})]}),x&&!S.some(e=>e.key===x.key)&&(0,A.jsxs)(`div`,{className:`picker-current`,"data-picker-current":e,"data-picker-current-value":x.key,children:[(0,A.jsx)(`span`,{className:`picker-current-label`,children:`当前`}),(0,A.jsx)(`span`,{className:`picker-current-value`,children:x.label})]}),(0,A.jsxs)(`div`,{className:`picker-list`,role:`listbox`,id:re,"aria-label":Dn[e],children:[S.map((e,t)=>(0,A.jsxs)(`button`,{id:ie(t),type:`button`,role:`option`,"aria-selected":e.selected,ref:e=>{b.current[t]=e},className:`picker-option${e.selected?` selected`:``}${t===C&&!e.selected?` preview`:``}`,"data-picker-option":e.key,"data-picker-option-selected":e.selected,"data-picker-highlight":t===C,onClick:()=>{s(e.key),w(!0)},children:[e.color&&(0,A.jsx)(`span`,{className:`picker-option-swatch`,style:{background:e.color},"aria-hidden":`true`}),(0,A.jsx)(`span`,{className:`picker-option-name`,children:e.label}),e.badge&&(0,A.jsx)(`span`,{className:`picker-option-badge`,"data-picker-option-badge":e.badge,children:e.badge}),e.detail&&(0,A.jsx)(`span`,{className:`picker-option-detail`,children:e.detail}),e.selected&&(0,A.jsx)(`span`,{className:`picker-option-mark`,"aria-hidden":`true`,children:`✓`})]},e.key)),S.length===0&&(0,A.jsx)(`div`,{className:`picker-empty`,"data-picker-empty":e,children:`没有匹配「${f.trim()}」的${En[e]}`})]})]})]})}var Kn=`__pi_default__`;function qn({workspace:e,catalog:t,agents:n,onSave:r,onRename:i,onClose:a}){let[o,s]=(0,l.useState)(e.defaultAgentId),[c,u]=(0,l.useState)(e.defaultModel),[d,f]=(0,l.useState)(e.defaultThinkingLevel);(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.defaultPrevented&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let p=t?.source===`pi`,m=[{key:Kn,label:`跟随 Pi 默认`,detail:`不为新会话指定模型`,selected:c===void 0},...(t?.models??[]).map(e=>({key:`${e.provider}/${e.modelId}`,label:e.label,detail:e.detail,badge:kn(e),selected:c?.provider===e.provider&&c.modelId===e.modelId}))],h=[{key:Kn,label:`跟随 Pi 默认`,detail:`不为新会话指定思考等级`,selected:d===void 0},...(t?.levels??[]).map(e=>({key:e,label:e,selected:e===d}))],g=e=>{if(e===Kn){u(void 0);return}let n=(t?.models??[]).find(t=>t.provider===e.split(`/`)[0]&&t.modelId===e.split(`/`)[1]);n&&u({provider:n.provider,modelId:n.modelId,label:n.label})},_=e=>f(e===Kn?void 0:e),v=[{key:Kn,label:`跟随 Pi 默认`,detail:`新会话不使用任何 agent 角色`,selected:o===void 0},...(n?.agents??[]).map(e=>({key:e.id,label:e.name,detail:e.toolSummary,color:e.color,selected:o===e.id}))];return(0,A.jsx)(`div`,{className:`overlay`,onClick:a,children:(0,A.jsxs)(`div`,{className:`picker settings-dialog`,"data-settings-dialog":`1`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`h2`,{children:`工作区设置`}),(0,A.jsxs)(`div`,{className:`settings-scope`,children:[e.name,` · 默认值只影响之后新建的会话,已有会话不变`]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`默认智能体`}),(0,A.jsx)(Gn,{kind:`agent`,scope:`settings-agent`,label:n?.agents.find(e=>e.id===o)?.name??`跟随 Pi 默认`,value:o??Kn,detail:o?`${n?.agents.find(e=>e.id===o)?.toolSummary??``}`:void 0,options:v,disabled:!n||n.source===`unavailable`,note:In(n),onChoose:e=>s(e===Kn?void 0:e)})]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`默认模型`}),(0,A.jsx)(Gn,{kind:`model`,scope:`settings-model`,label:c?.label??`跟随 Pi 默认`,value:c?`${c.provider}/${c.modelId}`:Kn,detail:c?`${c.provider}/${c.modelId}`:void 0,options:m,disabled:!p,note:Fn(`模型`,t),onChoose:g})]}),(0,A.jsxs)(`div`,{className:`settings-row`,children:[(0,A.jsx)(`span`,{className:`settings-label`,children:`思考强度`}),(0,A.jsx)(Gn,{kind:`thinking`,scope:`settings-thinking`,label:d??`跟随 Pi 默认`,value:d??Kn,options:h,disabled:!p,note:Fn(`思考等级`,t),onChoose:_})]}),(0,A.jsxs)(`div`,{className:`picker-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`settings-rename`,"data-settings-rename":`1`,onClick:i,children:`重命名工作区`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-cancel`,"data-settings-cancel":`1`,onClick:a,children:`取消`}),(0,A.jsx)(`button`,{type:`button`,className:`picker-ok`,"data-settings-save":`1`,onClick:()=>r(o,c,d),children:`保存`})]})]})})}var Jn=[{id:`main`,label:`主`,name:`主 tab`},{id:`tools`,label:`工具`,name:`工具 tab`},{id:`files`,label:`文件`,name:`文件 tab`}],Yn={pending:`未开始`,in_progress:`进行中`,completed:`已完成`},Xn={pending:`○`,in_progress:`◐`,completed:`✓`},Zn={high:`高`,medium:`中`,low:`低`};function Qn(e){let t=e.filter(e=>e.status!==`completed`).length;return e.length?t?`${t} 个未完成 / 共 ${e.length} 个`:`全部完成:${e.length} 个`:`0 个待办任务`}function $n({todo:e,index:t}){let n=e.id??`todo_${t}`;return(0,A.jsxs)(`li`,{className:`todo-item todo-${e.status}`,"data-todo-item":n,"data-todo-status":e.status,children:[(0,A.jsx)(`span`,{className:`todo-mark`,"aria-hidden":`true`,children:Xn[e.status]}),(0,A.jsx)(`span`,{className:`todo-text`,children:e.content}),(0,A.jsx)(`span`,{className:`todo-status`,"data-todo-status-text":`1`,children:Yn[e.status]}),e.priority&&(0,A.jsx)(`span`,{className:`todo-priority`,"data-todo-priority":e.priority,children:Zn[e.priority]})]})}function er({tasks:e}){return(0,A.jsx)(`ul`,{className:`bg-list`,"data-bg-task-count":e.length,children:e.map((e,t)=>{let n=e.id||`bg_${t}`,r=e.status?.trim()||`未知状态`;return(0,A.jsxs)(`li`,{className:`bg-item`,"data-bg-task":n,"data-bg-task-status":e.status??`unknown`,children:[(0,A.jsx)(`span`,{className:`bg-title`,children:e.title?.trim()||e.id||`未命名任务 ${t+1}`}),(0,A.jsxs)(`span`,{className:`bg-meta`,children:[e.agentId?.trim()&&(0,A.jsx)(`span`,{className:`bg-agent`,"data-bg-agent":e.agentId,children:e.agentId}),(0,A.jsx)(`span`,{className:`bg-status`,children:r})]})]},n)})})}function tr({todos:e,tasks:t,collapsed:n,onToggle:r,workspaceId:i,files:a,onOpenFile:o,activeTab:s,onSelectTab:c}){return(0,A.jsx)(`div`,{className:`right-rail${n?` right-rail-collapsed`:``}`,role:`complementary`,"aria-label":`右侧栏`,"data-right-rail":`1`,"data-right-rail-collapsed":n,children:n?(0,A.jsx)(`button`,{type:`button`,className:`right-rail-open`,"data-right-rail-open":`1`,title:`展开右侧栏`,"aria-label":`展开右侧栏`,onClick:r,children:`‹`}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`right-rail-head`,children:[(0,A.jsx)(`div`,{className:`right-tabs`,role:`tablist`,"aria-label":`右侧栏 tab`,"data-right-tab-count":Jn.length,children:Jn.map(e=>(0,A.jsx)(`button`,{type:`button`,role:`tab`,id:`right-tab-${e.id}`,className:`right-tab${e.id===s?` right-tab-active`:``}`,"data-right-tab":e.id,"aria-selected":e.id===s,"aria-controls":`right-panel-${e.id}`,title:e.name,"aria-label":e.name,onClick:()=>c(e.id),children:e.label},e.id))}),(0,A.jsx)(`button`,{type:`button`,className:`right-rail-collapse`,"data-right-rail-collapse":`1`,title:`收起右侧栏(聊天区会变宽)`,"aria-label":`收起右侧栏`,onClick:r,children:`›`})]}),Jn.filter(e=>e.id===s).map(n=>(0,A.jsxs)(`div`,{className:`right-rail-body`,role:`tabpanel`,id:`right-panel-${n.id}`,"aria-labelledby":`right-tab-${n.id}`,"data-right-panel":n.id,children:[n.id===`main`&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`待办任务`}),(0,A.jsx)(`span`,{className:`rail-section-count`,"data-todo-summary":`1`,children:Qn(e)})]}),e.length>0?(0,A.jsx)(`ol`,{className:`todo-list`,"data-todo-count":e.length,children:e.map((e,t)=>(0,A.jsx)($n,{todo:e,index:t},e.id??`todo_${t}`))}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-todo-empty":`1`,children:`暂无待办任务。Agent 开始处理多步骤任务时,会自己把待办写到这里。`}),(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`后台任务`}),(0,A.jsx)(`span`,{className:`rail-section-count`,"data-bg-summary":`1`,children:t.length?`${t.length} 个运行中`:`0 个`})]}),t.length>0?(0,A.jsx)(er,{tasks:t}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-bg-empty":`1`,children:`当前没有正在运行的后台任务。`})]}),n.id===`tools`&&(0,A.jsx)(ir,{}),n.id===`files`&&(0,A.jsx)(tt,{workspaceId:i,files:a,onOpenFile:o})]},n.id))]})})}function nr(){try{if(typeof window>`u`)return Ft.slice();let e=Vt(window.localStorage.getItem(Rt));return window.localStorage.getItem(`super-pi:tools:v1`)===null?Ft.slice():e}catch{return Ft.slice()}}function rr(e){try{if(typeof window>`u`)return;window.localStorage.setItem(Rt,Ht(e))}catch{}}function ir(){let[e,t]=(0,l.useState)(nr),[n,r]=(0,l.useState)(),[i,a]=(0,l.useState)(``),[o,s]=(0,l.useState)(``),[c,u]=(0,l.useState)(),d=e.find(e=>e.id===n);return(0,l.useEffect)(()=>{rr(e)},[e]),(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`rail-section-head`,children:[(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`工具`}),(0,A.jsxs)(`span`,{className:`rail-section-count`,"data-tool-summary":`1`,children:[e.length,` 个`]})]}),e.length>0?(0,A.jsx)(`ul`,{className:`tool-grid`,"data-tool-count":e.length,children:e.map(e=>(0,A.jsxs)(`li`,{className:`tool-slot`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`tool-icon`,"data-tool-icon":e.id,"data-tool-kind":e.kind,"data-tool-state":e.id===n?`open`:`idle`,title:`打开${e.name}`,"aria-label":`打开${e.name}`,"aria-current":e.id===n?`true`:void 0,onClick:()=>r(t=>t===e.id?void 0:e.id),children:[(0,A.jsx)(`span`,{className:`tool-icon-glyph`,"aria-hidden":`true`,children:e.glyph}),(0,A.jsx)(`span`,{className:`tool-icon-name`,children:e.name})]}),e.kind===`link`&&(0,A.jsx)(`button`,{type:`button`,className:`tool-remove`,"data-tool-remove":e.id,title:`移除${e.name}`,"aria-label":`移除${e.name}`,onClick:()=>{t(t=>Gt(t,e.id)),n===e.id&&r(void 0)},children:`✕`})]},e.id))}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-tool-empty":`1`,children:`还没有工具。从下面的预置列表挑一个,或者填一个自己的网址。`}),(0,A.jsx)(`div`,{className:`rail-section-head`,children:(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`从预置列表添加`})}),(0,A.jsx)(`div`,{className:`tool-presets`,"data-tool-presets":Pt.length,children:Pt.map(n=>{let r=e.some(e=>e.kind===n.kind);return(0,A.jsxs)(`div`,{className:`tool-preset`,"data-tool-preset":n.kind,children:[(0,A.jsx)(`span`,{className:`tool-preset-glyph`,"aria-hidden":`true`,children:n.glyph}),(0,A.jsxs)(`span`,{className:`tool-preset-text`,children:[(0,A.jsx)(`strong`,{children:n.name}),(0,A.jsx)(`small`,{children:n.blurb})]}),(0,A.jsx)(`button`,{type:`button`,className:`tool-preset-add`,"data-tool-add-preset":n.kind,disabled:r,title:r?`${n.name}已经在工具栏里了`:`添加${n.name}`,"aria-label":r?`${n.name}已添加`:`添加${n.name}`,onClick:()=>t(e=>Wt(e,n.kind)),children:r?`已添加`:`添加`})]},n.kind)})}),(0,A.jsx)(`div`,{className:`rail-section-head`,children:(0,A.jsx)(`h2`,{className:`rail-section-title`,children:`添加网址工具`})}),(0,A.jsx)(`p`,{className:`tool-hint`,children:`填一个网址,它会变成一个图标;点开后在弹窗里用按钮在新标签页打开。网址只接受 http / https / mailto。`}),(0,A.jsx)(`input`,{className:`tool-input`,"data-tool-url-input":`1`,value:i,maxLength:2048,placeholder:`https://example.com/工具`,"aria-label":`工具网址`,onChange:e=>{a(e.target.value),u(void 0)}}),(0,A.jsx)(`input`,{className:`tool-input`,"data-tool-url-name":`1`,value:o,maxLength:40,placeholder:`名称(可留空,默认用域名)`,"aria-label":`工具名称(可选)`,onChange:e=>s(e.target.value)}),(0,A.jsx)(`button`,{type:`button`,className:`tool-url-add`,"data-tool-url-add":`1`,disabled:!i.trim(),onClick:()=>{let n=Bt(i);if(!n.ok){u(n.reason);return}if(e.length>=32){u(`工具最多 32 个,先删掉一个再加。`);return}let r=e.map(e=>e.id);t(e=>[...e,{id:Ut(`link`,r),kind:`link`,name:o.trim()||ar(n.url),glyph:`↗`,url:n.url}]),a(``),s(``),u(void 0)},children:`添加网址工具`}),c&&(0,A.jsx)(`p`,{className:`tool-error`,"data-tool-error":`1`,role:`alert`,children:c}),(0,A.jsxs)(`p`,{className:`tool-hint`,"data-tool-scope-note":`1`,children:[`能自定义到哪:从上面挑预置工具,或自己填一个网址。`,(0,A.jsx)(`b`,{children:`没有开放「写一段脚本来执行」这一档`}),`——它在浏览器里等同于任意代码执行,会拿着本应用的权限跑。计算器是手写的算术解析器,不含 eval,也认不出变量名。`]}),d&&(0,A.jsx)(or,{tool:d,onClose:()=>r(void 0)})]})}function ar(e){try{return new URL(e,typeof window>`u`?`http://localhost`:window.location.href).hostname||e.slice(0,30)}catch{return e.slice(0,30)}}function or({tool:e,onClose:t}){return(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]),(0,u.createPortal)((0,A.jsx)(`div`,{className:`tool-overlay`,"data-tool-overlay":e.id,onClick:e=>{e.target===e.currentTarget&&t()},children:(0,A.jsxs)(`div`,{className:`tool-dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`tool-dialog-title`,"data-tool-dialog":e.id,children:[(0,A.jsxs)(`div`,{className:`tool-dialog-head`,children:[(0,A.jsxs)(`h2`,{className:`tool-dialog-title`,id:`tool-dialog-title`,children:[(0,A.jsx)(`span`,{className:`tool-dialog-glyph`,"aria-hidden":`true`,children:e.glyph}),e.name]}),(0,A.jsx)(`button`,{type:`button`,className:`tool-dialog-close`,"data-tool-close":`1`,title:`关闭(Esc)`,"aria-label":`关闭${e.name}`,onClick:t,children:`✕`})]}),(0,A.jsxs)(`div`,{className:`tool-dialog-body`,children:[e.kind===`calculator`&&(0,A.jsx)(cr,{}),e.kind===`timestamp`&&(0,A.jsx)(lr,{}),e.kind===`link`&&(0,A.jsx)(ur,{tool:e})]})]})}),document.body)}function sr({image:e,onClose:t}){return(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]),(0,u.createPortal)((0,A.jsx)(`div`,{className:`lightbox-overlay`,"data-lightbox-overlay":`1`,onClick:e=>{e.target===e.currentTarget&&t()},children:(0,A.jsxs)(`div`,{className:`lightbox-dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lightbox-title`,"data-lightbox-dialog":`1`,children:[(0,A.jsxs)(`div`,{className:`lightbox-head`,children:[(0,A.jsx)(`h2`,{className:`lightbox-title`,id:`lightbox-title`,children:e.name||`图片大图`}),(0,A.jsx)(`button`,{type:`button`,className:`lightbox-close`,"data-lightbox-close":`1`,title:`关闭(Esc)`,"aria-label":`关闭大图`,onClick:t,children:`✕`})]}),(0,A.jsx)(`div`,{className:`lightbox-body`,children:(0,A.jsx)(`img`,{src:e.url,alt:e.name||`图片大图`,className:`lightbox-image`})})]})}),document.body)}function cr(){let[e,t]=(0,l.useState)(`12 * (3 + 4)`),[n,r]=(0,l.useState)(!1),i=rn(e),a=e=>{r(!1),t(t=>n?e:t+e)};return(0,A.jsxs)(`div`,{className:`tool-calc`,"data-tool-calc":`1`,children:[(0,A.jsx)(`input`,{className:`tool-input tool-calc-input`,"data-calc-input":`1`,value:e,maxLength:240,"aria-label":`算式`,spellCheck:!1,autoComplete:`off`,placeholder:`例如 (12 + 8) / 4`,onChange:e=>{r(!1),t(e.target.value)},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}}),(0,A.jsx)(`div`,{className:`tool-calc-keys`,"data-calc-keys":`1`,children:[[`7`,`7`],[`8`,`8`],[`9`,`9`],[`÷`,`/`],[`(`,`(`],[`)`,`)`],[`4`,`4`],[`5`,`5`],[`6`,`6`],[`×`,`*`],[`^`,`^`],[`%`,`%`],[`1`,`1`],[`2`,`2`],[`3`,`3`],[`-`,`-`],[`←`,`back`],[`C`,`clear`],[`0`,`0`],[`.`,`.`],[`+`,`+`]].map(([e,n])=>(0,A.jsx)(`button`,{type:`button`,className:`tool-calc-key`,"data-calc-key":n,"aria-label":e===`C`?`清空`:e===`←`?`退格`:`输入 ${e}`,onClick:()=>{n===`clear`?(t(``),r(!1)):n===`back`?(t(e=>e.slice(0,-1)),r(!1)):a(n)},children:e},e))}),i.ok?(0,A.jsx)(`p`,{className:`tool-calc-result`,"data-calc-result":`1`,"data-calc-value":String(i.value),children:an(i.value)}):(0,A.jsx)(`p`,{className:`tool-calc-error`,"data-calc-error":`1`,role:`alert`,children:i.reason})]})}function lr(){let[e,t]=(0,l.useState)(``),n=on(e),r=n.ok?cn(n.ms):null;return(0,A.jsxs)(`div`,{className:`tool-stamp`,"data-tool-stamp":`1`,children:[(0,A.jsx)(`input`,{className:`tool-input`,"data-stamp-input":`1`,value:e,maxLength:64,spellCheck:!1,"aria-label":`时间戳或日期`,placeholder:`1757000000 或 2026-10-08T09:00:00`,onChange:e=>t(e.target.value)}),r?(0,A.jsxs)(`dl`,{className:`tool-stamp-out`,"data-stamp-result":`1`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`本地时间`}),(0,A.jsx)(`dd`,{"data-stamp-local":`1`,children:r.local})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`ISO(UTC)`}),(0,A.jsx)(`dd`,{"data-stamp-iso":`1`,children:r.iso})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`秒`}),(0,A.jsx)(`dd`,{"data-stamp-seconds":`1`,children:r.seconds})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{children:`毫秒`}),(0,A.jsx)(`dd`,{"data-stamp-ms":`1`,children:r.milliseconds})]})]}):(0,A.jsx)(`p`,{className:`tool-stamp-error`,"data-stamp-error":`1`,role:`alert`,children:n.ok?`这个日期无法显示。`:n.reason})]})}function ur({tool:e}){return(0,A.jsxs)(`div`,{className:`tool-link`,"data-tool-link":e.id,children:[(0,A.jsx)(`p`,{className:`tool-hint`,children:`这个网址工具保存了一个地址。点下面的按钮由浏览器在新标签页打开它。`}),(0,A.jsx)(`code`,{className:`tool-link-url`,"data-tool-link-url":e.id,children:e.url}),(0,A.jsx)(`a`,{className:`tool-link-open`,"data-tool-link-open":e.id,href:e.url,target:`_blank`,rel:`noopener noreferrer`,title:e.url,children:`在新标签页打开 ↗`})]})}var dr=`(max-width: 1100px)`,fr=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n));function pr(e,t,n){let r=Math.max(0,Math.round(n)-480),i=fr(520,180,Math.max(180,r-240)),a=fr(Math.round(e),180,i),o=fr(640,240,Math.max(240,r-a));return{sidebar:a,rail:fr(Math.round(t),240,o),sidebarMin:180,sidebarMax:i,railMin:240,railMax:o,sumCap:r}}var mr=`super-pi.rail-widths.v1`;function hr(){try{if(typeof window>`u`)return{};let e=window.localStorage.getItem(mr);if(e===null)return{};let t=JSON.parse(e),n=e=>typeof e==`number`&&Number.isFinite(e)&&e>0?Math.round(e):void 0;return{sidebar:n(t.sidebar),rail:n(t.rail)}}catch{return{}}}function gr(e){try{if(typeof window>`u`)return;window.localStorage.setItem(mr,JSON.stringify(e))}catch{}}function _r({side:e,width:t,min:n,max:r,label:i,onWidth:a}){let[o,s]=(0,l.useState)(!1),c=e=>e.shiftKey?64:16;return(0,A.jsx)(`div`,{className:`rail-resizer rail-resizer-${e}${o?` rail-resizer-dragging`:``}`,"data-rail-resizer":e,"data-rail-resizer-dragging":o?`true`:`false`,"data-rail-resizer-width":t,role:`separator`,"aria-orientation":`vertical`,"aria-label":i,"aria-valuenow":t,"aria-valuemin":n,"aria-valuemax":r,tabIndex:0,onMouseDown:i=>{i.preventDefault(),i.currentTarget.focus();let o=i.clientX,c=t;s(!0);let l=document.body,u=l.style.cursor,d=l.style.userSelect;l.style.cursor=`col-resize`,l.style.userSelect=`none`;let f=t=>{let i=e===`left`?t.clientX-o:o-t.clientX;a(fr(c+i,n,r))},p=()=>{l.style.cursor=u,l.style.userSelect=d,s(!1),window.removeEventListener(`mousemove`,f),window.removeEventListener(`mouseup`,p)};window.addEventListener(`mousemove`,f),window.addEventListener(`mouseup`,p)},onKeyDown:i=>{let o=c(i);i.key===`ArrowLeft`?(i.preventDefault(),a(fr(e===`left`?t-o:t+o,n,r))):i.key===`ArrowRight`?(i.preventDefault(),a(fr(e===`left`?t+o:t-o,n,r))):i.key===`Home`?(i.preventDefault(),a(n)):i.key===`End`&&(i.preventDefault(),a(r))}})}function vr(){let[e,t]=(0,l.useState)(ln),[n,r]=(0,l.useState)([]),i=(0,l.useRef)([]),a=n.reduce((e,t)=>t.apply(e),e),[o,s]=(0,l.useState)(),[c,u]=(0,l.useState)(!1),[d,f]=(0,l.useState)(),[p,m]=(0,l.useState)({}),[h,g]=(0,l.useState)(),[_,v]=(0,l.useState)(!1),y=(0,l.useRef)(void 0),[b,x]=(0,l.useState)({}),[S,C]=(0,l.useState)([]),[ee,w]=(0,l.useState)([]),[te,T]=(0,l.useState)(new Map),[ne,re]=(0,l.useState)(new Map),[ie,ae]=(0,l.useState)(),[E,oe]=(0,l.useState)(),[se,ce]=(0,l.useState)(),[le,ue]=(0,l.useState)(),[de,fe]=(0,l.useState)(),[pe,me]=(0,l.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 1100px)`).matches),[he,ge]=(0,l.useState)(()=>typeof window>`u`?1440:window.innerWidth);(0,l.useEffect)(()=>{let e=()=>ge(window.innerWidth);return window.addEventListener(`resize`,e),e(),()=>window.removeEventListener(`resize`,e)},[]);let[_e,ve]=(0,l.useState)(hr),ye=pr(_e.sidebar??270,_e.rail??320,he);(0,l.useEffect)(()=>{gr({sidebar:ye.sidebar,rail:ye.rail})},[ye.sidebar,ye.rail]);let be=e=>ve(t=>({...t,sidebar:e})),xe=e=>ve(t=>({...t,rail:e}));(0,l.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(dr),t=e=>{e.matches&&me(!0)};return e.addEventListener(`change`,t),e.matches&&me(!0),()=>e.removeEventListener(`change`,t)},[]);let[Se,Ce]=(0,l.useState)(new Map),[D,O]=(0,l.useState)({}),[we,Te]=(0,l.useState)({}),[Ee,De]=(0,l.useState)(),[Oe,k]=(0,l.useState)({}),ke=(0,l.useRef)(new Set),[je,Me]=(0,l.useState)([]),[Ne,Pe]=(0,l.useState)([]),[Fe,Ie]=(0,l.useState)(),[Le,Re]=(0,l.useState)(!1),ze=(0,l.useRef)(null),Be=(0,l.useRef)(!1),Ve=(0,l.useRef)(0),He=(0,l.useRef)([]),Ue=(0,l.useRef)(void 0),We=(0,l.useRef)(!1),[Ge,Ke]=(0,l.useState)(()=>Date.now());(0,l.useEffect)(()=>{let e=window.setInterval(()=>Ke(Date.now()),3e4);return()=>window.clearInterval(e)},[]);let qe=(0,l.useMemo)(()=>a.conversations.filter(e=>!e.archivedAt),[a.conversations]),j=(0,l.useMemo)(()=>qe.find(e=>e.id===o)??qe.find(e=>e.workspaceId===h)??(h&&a.workspaces.some(e=>e.id===h)?void 0:qe[0]),[o,qe,h,a.workspaces]),Je=(0,l.useRef)(h);Je.current=h,(0,l.useEffect)(()=>{j&&g(j.workspaceId)},[j?.id]),(0,l.useEffect)(()=>{Ue.current=j?.id});let Ye=Oe[j?.id??``]??{text:``,images:[],uploading:0},Xe=Ye.text,Ze=Ye.images,$e=Ye.uploading,tt=(e,t)=>k(n=>({...n,[e]:t(n[e]??{text:``,images:[],uploading:0})})),nt=e=>tt(j?.id??``,t=>({...t,text:e})),rt=e=>tt(j?.id??``,t=>({...t,images:typeof e==`function`?e(t.images):e})),[it,ot]=(0,l.useState)([]),st=it.length>0?it:j?[j.id]:[],ct=(0,l.useMemo)(()=>st.map(e=>qe.find(t=>t.id===e)).filter(e=>e!==void 0),[st,qe]),lt=(0,l.useCallback)(e=>{s(e);let t=qe.find(t=>t.id===e)?.workspaceId;t&&g(t),gt(`session`),ot(t=>t.includes(e)?t:t.length>0?[...t,e]:[...j?.id&&j.id!==e?[j.id]:[],e])},[j]),ut=(0,l.useCallback)(e=>{let t=it.indexOf(e);if(t<0)return;let n=it.filter(t=>t!==e);if(ot(n),j?.id!==e)return;let r=n[Math.min(t,n.length-1)];r&&s(r)},[it,j]),M=et(h),[dt,pt]=(0,l.useState)(Jn[0].id),[ht,gt]=(0,l.useState)(`session`);(0,l.useEffect)(()=>{ht===`file`&&!M.active&>(`session`)},[ht,M.active]);let _t=(0,l.useCallback)(e=>{M.setActivePath(e),gt(`file`),pt(`files`)},[M.setActivePath]),vt=(0,l.useCallback)(async e=>{await M.openFile(e),gt(`file`)},[M.openFile]),yt=(0,l.useMemo)(()=>ct.map(e=>({id:`session:${e.id}`,rawId:e.id,kind:`session`,label:e.title,title:e.title,closable:ct.length>1||M.open.length>0})),[ct,M.open.length]),bt=(0,l.useMemo)(()=>M.open.map(e=>({id:`file:${e.path}`,rawId:e.path,kind:`file`,label:e.name,title:e.path,closable:!0,badge:e.dirty?(0,A.jsx)(`span`,{className:`file-tab-badge`,"data-file-tab-dirty":e.path,"aria-label":`未保存`,children:`●`}):void 0})),[M.open]),xt=(0,l.useMemo)(()=>[...yt,...bt],[yt,bt]),St=ht===`file`&&M.activePath?`file:${M.activePath}`:j?.id?`session:${j.id}`:void 0,Ct=(0,l.useCallback)(e=>{if(e.startsWith(`file:`)){let t=e.slice(5);_t(t)}else if(e.startsWith(`session:`)){let t=e.slice(8);lt(t)}},[_t,lt]),wt=(0,l.useCallback)(e=>{if(e.startsWith(`file:`)){let t=e.slice(5);M.closeFile(t),M.activePath===t&&M.open.length<=1&>(`session`)}else if(e.startsWith(`session:`)){let t=e.slice(8);ut(t)}},[M,ut]),Tt=M.active,Et=j?.id;(0,l.useEffect)(()=>{Et&&!Et.startsWith(`pending:`)&&Mt({type:`conversation.select`,conversationId:Et})},[Et]);let N=(e,t=`info`)=>{if(!e)return;let n=++Ve.current;w(r=>[...r,{key:n,text:e,kind:t}]),He.current.push(window.setTimeout(()=>w(e=>e.filter(e=>e.key!==n)),7e3))},Ot=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n<0)return[t,...e];let r=[...e];return r[n]=t,r},kt=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n<0)return[t,...e];let r=[...e];return r[n]=t,r},At=(e,t)=>{if(t.blocking)C(n=>[...n.filter(n=>n.conversationId!==e||n.request.requestId!==t.requestId),{conversationId:e,request:t}]);else if(t.method===`notify`)N(t.message||t.title,t.notifyType??`info`);else if(t.method===`setStatus`){let e=t.statusKey??``;T(n=>{let r=new Map(n);return t.statusText===void 0?r.delete(e):r.set(e,t.statusText),r})}else if(t.method===`setWidget`){let e=t.widgetKey??``;re(n=>{let r=new Map(n);return t.widgetLines===void 0?r.delete(e):r.set(e,{lines:t.widgetLines,placement:t.widgetPlacement??`aboveEditor`}),r})}else t.method===`setTitle`?ae(t.title):t.method===`set_editor_text`&&e===Ue.current&&nt(t.text??``)},jt=(e,t,n)=>{C(n=>n.filter(n=>n.conversationId!==e||n.request.requestId!==t));let r=Nn[n];r&&N(r,`warning`)};(0,l.useEffect)(()=>{let e=!1,n=0,a,o=()=>{if(e)return;let c=location.protocol===`https:`?`wss`:`ws`,l=new WebSocket(`${c}://${location.host}/ws`);y.current=l,l.onopen=()=>{e||(n=0,u(!0),l.send(JSON.stringify({type:`catalog.fetch`,conversationId:Ue.current})),l.send(JSON.stringify({type:`agent.catalog.fetch`})),l.send(JSON.stringify({type:`subagent.catalog.fetch`})))},l.onclose=()=>{if(!e){We.current=!1;for(let e of i.current)e.onFailure?.();i.current=[],r([]),u(!1),a=window.setTimeout(o,Math.min(Cn,Sn*2**n++))}},l.onmessage=({data:n})=>{if(e)return;let a=JSON.parse(n);if(a.type===`state`)We.current=!1,i.current=i.current.filter(e=>!e.accepted?.(a.state)),r(i.current),t(a.state),s(e=>{let t=a.state.conversations.filter(e=>!e.archivedAt);return e&&(t.some(t=>t.id===e)||i.current.some(t=>t.temporaryId===e))?e:t.find(e=>e.workspaceId===Je.current)?.id}),g(e=>e&&(a.state.workspaces.some(t=>t.id===e)||i.current.some(t=>t.temporaryId===e))?e:a.state.workspaces[0]?.id);else if(a.type===`message.delta`)t(e=>({...e,conversations:e.conversations.map(e=>e.id===a.conversationId?{...e,messages:e.messages.map(e=>e.id===a.messageId?{...e,content:e.content+a.delta}:e)}:e)}));else if(a.type===`message.revert.result`)br(void 0),De(void 0),a.ok||f(a.message);else if(a.type===`operation.result`){let e=i.current.find(e=>e.id===a.requestId);if(i.current=i.current.filter(e=>e.id!==a.requestId),r(i.current),e?.temporaryId){let t=e.temporaryId;s(n=>n===t?a.ok?a.entityId:e.previousActiveId:n),ot(e=>e.flatMap(e=>e===t?a.ok&&a.entityId?[a.entityId]:[]:[e])),g(e=>e===t?a.ok?a.entityId:void 0:e)}a.ok||(e?.onFailure?.(),f(a.message??`操作失败`))}else a.type===`error`?(f(a.message),We.current&&(We.current=!1,N(`重命名失败:${a.message}`,`error`))):a.type===`extension.ui`?At(a.conversationId,a.request):a.type===`extension.ui.closed`?jt(a.conversationId,a.requestId,a.reason):a.type===`model.catalog`?(!a.conversationId||a.conversationId===Ue.current)&&oe(a.catalog):a.type===`agent.catalog`?ce(a.catalog):a.type===`subagent.catalog`?ue(a.catalog):a.type===`server.version`?(fe(a.version),a.version.needsRestart&&N(`检测到 Super Pi 代码已更新(v${a.version.runningVersion} → v${a.version.diskVersion}),请执行 /web restart 重启服务生效`,`warning`)):a.type===`subagent.event`?t(e=>({...e,subagentRuns:Ot(e.subagentRuns??[],a.run)})):a.type===`workflow.event`?t(e=>({...e,workflows:kt(e.workflows??[],a.workflow)})):a.type===`message.tools`?t(e=>({...e,conversations:e.conversations.map(e=>e.id===a.conversationId?{...e,messages:e.messages.map(e=>e.id===a.messageId?{...e,toolCalls:a.toolCalls}:e)}:e)})):a.type===`pi.queue`?Ce(e=>{let t=new Map(e);return t.set(a.conversationId,{steering:a.steering,followUp:a.followUp}),t}):a.type===`conversation.fork.result`&&(Dr(e=>e===a.conversationId?void 0:e),N(a.ok?`已从「${a.title}」分叉出新会话,放在侧边栏最上面;没有切换过去。${a.messagesCopied?`复制了 ${a.messagesCopied} 条消息。`:`原会话还没有消息,只复制了会话本身。`}`:`分叉失败:${a.message}`,a.ok?`info`:`error`))}};return o(),()=>{e=!0,window.clearTimeout(a);for(let e of He.current)window.clearTimeout(e);y.current?.close()}},[]);let Mt=e=>y.current?.readyState===WebSocket.OPEN&&(y.current.send(JSON.stringify(e)),!0),P=(e,t,n,a,o,s)=>{if(y.current?.readyState!==WebSocket.OPEN||i.current.some(e=>e.key===t))return!1;let c=crypto.randomUUID(),l={id:c,key:t,apply:n,temporaryId:a,previousActiveId:Ue.current,onFailure:o,accepted:s};return i.current=[...i.current,l],r(i.current),y.current.send(JSON.stringify({...e,operationRequestId:c})),!0},Pt=(e,t)=>n=>({...n,conversations:n.conversations.map(n=>n.id===e?{...n,...t}:n)}),Ft=(e,t)=>n=>({...n,workspaces:n.workspaces.map(n=>n.id===e?{...n,...t}:n)}),It=n.some(e=>e.key===`send:${j?.id}`||e.key===`configuration:${j?.id}`||e.temporaryId===j?.id||e.key===`archive:${j?.id}`),Lt=(e,t,n)=>P({type:`extension.ui.answer`,conversationId:e,requestId:t,...n},`answer:${e}:${t}`,e=>e),Rt=j?.model??E?.defaultModel,zt=j?.thinkingLevel??E?.defaultThinkingLevel,Bt=E?.source===`pi`,Vt=!!E?.models.find(e=>e.provider===Rt?.provider&&e.modelId===Rt?.modelId)?.imageInput,Ht=(e,t)=>!e||!t?e:{...e,models:e.models.filter(e=>(a.modelFilterRules??[]).every(n=>{try{return!new RegExp(n.workspacePattern,`i`).test(t.name)||new RegExp(n.modelPattern,`i`).test(e.label)||new RegExp(n.modelPattern,`i`).test(`${e.provider}/${e.modelId}`)}catch{return!0}}))},Ut=(Ht(E,a.workspaces.find(e=>e.id===j?.workspaceId))?.models??[]).map(e=>({key:`${e.provider}/${e.modelId}`,label:e.label,detail:e.detail,badge:kn(e),selected:Rt?.provider===e.provider&&Rt.modelId===e.modelId})),Wt=(E?.levels??[]).map(e=>({key:e,label:e,selected:e===zt})),Gt=e=>{if(!j)return;let[t,n]=e.split(`/`);t&&n&&P({type:`conversation.model`,conversationId:j.id,provider:t,modelId:n},`configuration:${j.id}`,Pt(j.id,{model:E?.models.find(e=>e.provider===t&&e.modelId===n)??{provider:t,modelId:n,label:n}}))},Kt=e=>{j&&P({type:`conversation.thinking`,conversationId:j.id,level:e},`configuration:${j.id}`,Pt(j.id,{thinkingLevel:e}))},qt=se?.agents.find(e=>e.id===j?.agentId),Jt=[{key:Kn,label:`跟随 Pi 默认`,detail:`不使用任何 agent 角色`,selected:!j?.agentId},...(se?.agents??[]).map(e=>({key:e.id,label:e.name,detail:e.toolSummary,color:e.color,selected:j?.agentId===e.id}))],Yt=qt?.model,F=!!(Yt&&j?.model&&j.model.provider===Yt.provider&&j.model.modelId===Yt.modelId);qt?.thinkingLevel&&(j?.thinkingLevel,qt.thinkingLevel);let Xt=e=>{if(j){let t=se?.agents.find(t=>t.id===e);P({type:`conversation.agent`,conversationId:j.id,agentId:e===Kn?null:e},`configuration:${j.id}`,Pt(j.id,{agentId:t?.id,...t?.model?{model:{...t.model,label:t.model.modelId}}:{},...t?.thinkingLevel?{thinkingLevel:t.thinkingLevel}:{}}))}},Zt=S.filter(e=>e.conversationId===j?.id),Qt=(0,l.useMemo)(()=>(a.subagentRuns??[]).filter(e=>e.conversationId===j?.id),[a.subagentRuns,j?.id]),$t=(0,l.useMemo)(()=>(a.workflows??[]).filter(e=>e.conversationId===j?.id),[a.workflows,j?.id]),en=(0,l.useMemo)(()=>new Map($t.map(e=>[e.id,e])),[$t]),tn=(0,l.useMemo)(()=>new Map((le?.agents??[]).map(e=>[e.id,e.name])),[le]),nn=(0,l.useMemo)(()=>new Map((j?.messages??[]).map(e=>[e.id,e])),[j?.messages]),rn=(0,l.useMemo)(()=>new Map(Qt.map(e=>[e.id,e])),[Qt]),an=(0,l.useMemo)(()=>{if(!j)return[];let e=Ee?.conversationId===j.id?`m:${Ee.messageId}`:void 0,t=j.messages.filter(t=>`m:${t.id}`!==e).map((e,t)=>({at:Date.parse(e.createdAt)||0,seq:t,key:`m:${e.id}`}));return Qt.forEach((e,n)=>t.push({at:Date.parse(e.startedAt)||0,seq:t.length+n,key:`r:${e.id}`})),$t.forEach((e,n)=>t.push({at:Date.parse(e.startedAt)||0,seq:t.length+n,key:`w:${e.id}`})),t.sort((e,t)=>e.at-t.at||e.seq-t.seq).map(e=>e.key)},[j,Qt,$t,Ee]),on=e=>O(t=>({...t,[e]:!t[e]})),sn=(e,t)=>Te(n=>({...n,[`${e}:${t}`]:!n[`${e}:${t}`]})),cn=e=>{P({type:`subagent.stop`,runId:e},`stop:${e}`,e=>e)||N(`连接断开,无法停止子智能体,请重试`,`error`)},fn=e=>{P({type:`workflow.stop`,workflowId:e},`stop:${e}`,e=>e)||N(`连接断开,无法停止编排,请重试`,`error`)},pn=e=>[...ne].filter(([,t])=>t.placement===e).map(([e,t])=>{let n=t.lines;return(0,A.jsxs)(`div`,{className:`extui-widget`,"data-widget-key":e,"data-widget-lines":n.length,children:[n.slice(0,Pn).map((e,t)=>(0,A.jsx)(`div`,{children:e},`${t}:${e}`)),n.length>Pn&&(0,A.jsx)(`div`,{children:`… (widget truncated)`})]},e)}),mn=(e,t)=>{let n=`pending:${crypto.randomUUID()}`,r={id:n,name:e,path:t,updatedAt:new Date().toISOString()};P({type:`workspace.create`,name:e,path:t},`create-workspace`,e=>({...e,workspaces:[...e.workspaces,r]}),n)&&(g(n),s(void 0),v(!1))},[hn,gn]=(0,l.useState)(),_n=(e,t)=>gn(n=>n?.kind===e&&n.id===t?n:{kind:e,id:t}),Tn=()=>gn(void 0),En=(e,t)=>hn?.kind===e&&hn.id===t,Dn=(e,t,n)=>t.startsWith(`pending:`)?!1:P(e===`workspace`?{type:`workspace.rename`,workspaceId:t,name:n}:{type:`conversation.rename`,conversationId:t,name:n},`rename:${t}`,e===`workspace`?Ft(t,{name:n}):Pt(t,{title:n}))?(We.current=!0,Tn(),!0):(N(`连接断开,改名未保存,请重试`,`error`),!1),On=e=>{if(e.id.startsWith(`pending:`))return;let t=a.conversations.filter(t=>t.workspaceId===e.id).length;window.confirm(`删除工作区「${e.name}」?${t?`其中 ${t} 条会话将一并删除,`:``}此操作不可撤销。`)&&P({type:`workspace.delete`,workspaceId:e.id},`delete:${e.id}`,t=>({...t,workspaces:t.workspaces.filter(t=>t.id!==e.id),conversations:t.conversations.filter(t=>t.workspaceId!==e.id)}))},[An,jn]=(0,l.useState)(),Ln=An?a.workspaces.find(e=>e.id===An):void 0,{theme:Rn,setTheme:zn}=Dt(),[Yn,Xn]=(0,l.useState)(!1),[Zn,Qn]=(0,l.useState)(!1),$n=(e,t,n,r)=>{e.startsWith(`pending:`)||(P({type:`workspace.settings`,workspaceId:e,model:n?{provider:n.provider,modelId:n.modelId}:null,thinkingLevel:r??null,agentId:t??null},`defaults:${e}`,Ft(e,{defaultModel:n,defaultThinkingLevel:r,defaultAgentId:t}))?jn(void 0):N(`连接断开,设置未保存,请重试`,`error`))},er=e=>{if(e.startsWith(`pending:`)||i.current.some(t=>t.key===`defaults:${e}`))return;let t=`pending:${crypto.randomUUID()}`,n={id:t,workspaceId:e,title:`新会话`,status:`idle`,updatedAt:new Date().toISOString(),messages:[]};P({type:`conversation.create`,workspaceId:e},`create-session:${e}`,e=>({...e,conversations:[n,...e.conversations]}),t)&&(g(e),s(t),gt(`session`),ot(e=>[...e.filter(e=>e!==t),t]))},nr=e=>{e.startsWith(`pending:`)||P({type:`conversation.archive`,conversationId:e},`archive:${e}`,Pt(e,{archivedAt:new Date().toISOString()}))},rr=e=>P({type:`conversation.unarchive`,conversationId:e},`archive:${e}`,Pt(e,{archivedAt:void 0})),ir=async e=>{if(!j){N(`请先选择或创建会话`,`error`);return}if(!Vt){N(`当前模型不支持图片输入`,`error`);return}let t=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`],n=e.filter(e=>t.includes(e.type)?e.size>5242880?(N(`图片「${e.name}」超过 5MB 上限`,`error`),!1):!0:(N(`不支持的文件格式「${e.name}」,仅支持 PNG/JPEG/GIF/WebP`,`error`),!1));if(n.length===0)return;let r=j.id;tt(r,e=>({...e,uploading:e.uploading+n.length}));let i=n.map(e=>({id:crypto.randomUUID(),conversationId:r,name:e.name,url:URL.createObjectURL(e)}));Pe(e=>[...e,...i]);for(let[e,t]of n.entries()){let n=i[e];try{let e=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>{let t=r.result,n=t.indexOf(`,`);e(n>=0?t.slice(n+1):t)},r.onerror=n,r.readAsDataURL(t)}),i=await fetch(`/api/upload`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({conversationId:r,name:t.name,mimeType:t.type,data:e})});if(!(i.headers.get(`content-type`)??``).includes(`application/json`)){N(`服务器未返回 JSON 响应,请刷新或重启服务`,`error`);continue}if(i.ok){let e=await i.json();if(ke.current.has(n.id))continue;Pe(e=>e.filter(e=>e.id!==n.id)),URL.revokeObjectURL(n.url),tt(r,t=>({...t,images:[...t.images,{id:e.id,name:e.name,mimeType:e.mimeType,bytes:e.bytes}]}))}else{let e=await i.json().catch(()=>({error:`上传失败`}));N(e.error||`上传失败: ${i.status}`,`error`)}}catch(e){N(`上传错误: ${e instanceof Error?e.message:`网络错误`}`,`error`)}finally{Pe(e=>e.map(e=>e.id===n.id?{...e,failed:!0}:e)),tt(r,e=>({...e,uploading:Math.max(0,e.uploading-1)}))}}},ar=e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e=0;e<t.length;e++){let r=t[e];if(r.type.startsWith(`image/`)){let e=r.getAsFile();e&&n.push(e)}}if(n.length>0){if(!Vt){N(`当前模型不支持图片输入`,`error`);return}e.preventDefault(),ir(n)}},or=e=>{e.dataTransfer?.types?.includes(`Files`)&&(e.preventDefault(),Re(!0))},cr=e=>{e.currentTarget.contains(e.relatedTarget)||Re(!1)},lr=e=>{Re(!1);let t=Array.from(e.dataTransfer?.files??[]).filter(e=>e.type.startsWith(`image/`));if(t.length>0){if(e.preventDefault(),!Vt){N(`当前模型不支持图片输入`,`error`);return}ir(t)}},ur=t=>{if(t.preventDefault(),!j||It||!Xe.trim()&&Ze.length===0)return;if(Ze.length>0&&!Vt){N(`当前模型不支持图片输入,请移除图片或切换至支持图文的模型`,`error`);return}if($e>0){N(`图片正在上传中,请稍候…`,`info`);return}let n=`pending:${crypto.randomUUID()}`,r=j.id,i=Xe,a=Ze,o=new Set([...e.conversations.find(e=>e.id===r)?.messages.map(e=>e.id)??[],...e.queuedMessages?.map(e=>e.id)??[]]);P({type:`message.send`,conversationId:j.id,content:Xe,...Ze.length>0?{images:Ze}:{}},`send:${r}`,e=>e.conversations.find(e=>e.id===r)?.messages.some(e=>!o.has(e.id)&&e.role===`user`&&e.content===i.trim())||e.queuedMessages?.some(e=>!o.has(e.id)&&e.conversationId===r&&e.content===i.trim())?e:{...e,conversations:e.conversations.map(e=>e.id===r?{...e,messages:[...e.messages,{id:n,role:`user`,content:i,images:a,createdAt:new Date().toISOString()}]}:e)},void 0,()=>{Me(e=>[...e,{id:n,conversationId:r,content:i,images:a}]),tt(r,e=>e.text||e.images.length?e:{...e,text:i,images:a})},e=>!!(e.conversations.find(e=>e.id===r)?.messages.some(e=>!o.has(e.id)&&e.role===`user`&&e.content===i.trim())||e.queuedMessages?.some(e=>!o.has(e.id)&&e.conversationId===r&&e.content===i.trim())))?tt(j.id,e=>({...e,text:``,images:[]})):N(`连接断开,消息未发送,草稿已保留,请重试`,`error`)},fr=(0,l.useMemo)(()=>(a.queuedMessages??[]).filter(e=>e.conversationId===j?.id),[a.queuedMessages,j?.id]),mr=e=>{P({type:`message.cancel`,conversationId:j?.id??``,queueId:e},`queue:${e}`,t=>({...t,queuedMessages:t.queuedMessages?.filter(t=>t.id!==e)}))||N(`连接断开,取消没有生效,请重试`,`error`)},vr=e=>{P({type:`message.steer`,conversationId:j?.id??``,queueId:e},`queue:${e}`,t=>({...t,queuedMessages:t.queuedMessages?.map(t=>t.id===e?{...t,state:`sending`}:t)}))||N(`连接断开,插队没有生效,请重试`,`error`)},[yr,br]=(0,l.useState)(),xr=(e,t=!1)=>{if(!j||yr)return;let n=t?j.messages.find(t=>t.id===e):void 0;n&&(k(e=>{let t=e[j.id]??{text:``,images:[],uploading:0};return t.text.trim()||t.images.length?e:{...e,[j.id]:{...t,text:n.content,images:n.images??[]}}}),De({conversationId:j.id,messageId:e})),Mt({type:`message.revert`,conversationId:j.id,messageId:e,withdraw:t})?br(e):(De(void 0),N(`连接断开,回退未执行,请重试`,`error`))},[Sr,Cr]=(0,l.useState)(),wr=(0,l.useRef)(void 0),Tr=async(e,t)=>{wr.current&&clearTimeout(wr.current);let n=await wn(t);Cr({id:e,kind:n?`copied`:`error`}),n||N(`复制失败:浏览器拒绝了剪贴板写入,可以手动选中这条消息的文字复制`,`error`),wr.current=setTimeout(()=>Cr(void 0),2e3)};(0,l.useEffect)(()=>()=>{wr.current&&clearTimeout(wr.current)},[]);let[Er,Dr]=(0,l.useState)(),Or=e=>{Er||e.startsWith(`pending:`)||(Mt({type:`conversation.fork`,conversationId:e})?Dr(e):N(`连接断开,分叉没有执行,请重试`,`error`))};return(0,A.jsxs)(`main`,{className:`shell${pe?` shell-rail-collapsed`:``}`,"data-rail-collapsed":pe,style:{"--sidebar-width":`${ye.sidebar}px`,"--rail-col":pe?void 0:`${ye.rail}px`},children:[(0,A.jsxs)(`aside`,{children:[(0,A.jsxs)(`div`,{className:`brand`,children:[(0,A.jsx)(`span`,{children:`π`}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:`SUPER PI`}),(0,A.jsx)(`small`,{children:`agent workspace`})]})]}),(0,A.jsx)(`div`,{className:`sidebar-actions`,children:(0,A.jsx)(`button`,{className:`workspace-new`,onClick:()=>v(!0),children:`+ 工作区`})}),(0,A.jsx)(`div`,{className:`label`,children:`工作区`}),(0,A.jsx)(`nav`,{children:a.workspaces.map(e=>{let t=a.conversations.filter(t=>t.workspaceId===e.id),n=t.filter(e=>!e.archivedAt).sort(yn),r=t.filter(e=>e.archivedAt).sort(bn),i=p[e.id]??!1,o=b[e.id]??!0;return(0,A.jsxs)(`section`,{className:`workspace-group`,children:[(0,A.jsx)(`div`,{className:`workspace-header`,children:En(`workspace`,e.id)?(0,A.jsx)(Wn,{initial:e.name,label:`重命名工作区 ${e.name}`,onCommit:t=>Dn(`workspace`,e.id,t),onClose:Tn}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`button`,{className:`workspace-toggle`,"aria-expanded":!i,title:e.path,onClick:()=>{g(e.id),s(qe.find(t=>t.workspaceId===e.id)?.id),m(t=>({...t,[e.id]:!i}))},children:[(0,A.jsx)(`span`,{className:`chevron chevron-folder`,"aria-hidden":`true`,children:i?`📁`:`📂`}),(0,A.jsxs)(`span`,{children:[(0,A.jsx)(`strong`,{onDoubleClick:()=>_n(`workspace`,e.id),children:e.name}),(0,A.jsx)(`small`,{children:e.path})]})]}),(0,A.jsx)(`button`,{className:`workspace-add`,title:`在此工作区新建会话`,onClick:()=>er(e.id),children:`+`}),(0,A.jsx)(`button`,{className:`workspace-settings`,title:`工作区设置(默认智能体 / 模型 / 思考强度)`,"aria-label":`工作区设置 ${e.name}`,onClick:()=>jn(e.id),children:`⚙`}),(0,A.jsx)(`button`,{className:`workspace-delete`,title:`删除工作区`,onClick:()=>On(e),children:`×`})]})}),!i&&(n.length?n.map(t=>(0,A.jsx)(`div`,{className:`conversation-row`,children:En(`conversation`,t.id)?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(Wn,{initial:t.title,label:`重命名会话 ${t.title}`,onCommit:e=>Dn(`conversation`,t.id,e),onClose:Tn}),(0,A.jsx)(`small`,{className:`conversation-time`,children:vn(t.updatedAt,Ge)})]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`button`,{className:`conversation ${j?.id===t.id?`selected`:``}`,"data-conversation":t.id,title:t.title,"aria-label":`打开会话 ${t.title}`,onClick:()=>{lt(t.id),g(e.id)},children:[(0,A.jsxs)(`span`,{onDoubleClick:()=>_n(`conversation`,t.id),children:[`· `,t.title]}),(0,A.jsx)(`small`,{children:vn(t.updatedAt,Ge)})]}),(0,A.jsx)(`button`,{type:`button`,className:`conversation-fork`,"data-fork-conversation":t.id,"data-fork-state":Er===t.id?`pending`:`idle`,disabled:!!Er,title:`从此会话分叉出一个新会话`,"aria-label":`从会话 ${t.title} 分叉出一个新会话`,onClick:()=>Or(t.id),children:`⑂`}),(0,A.jsx)(`button`,{className:`conversation-archive`,title:`归档会话`,"aria-label":`归档会话 ${t.title}`,onClick:()=>nr(t.id),children:`×`})]})},t.id)):(0,A.jsx)(`div`,{className:`conversation-empty`,children:`暂无会话`})),!i&&r.length>0&&(0,A.jsxs)(`div`,{className:`archived-group`,"data-archived-count":r.length,children:[(0,A.jsxs)(`button`,{className:`archived-toggle`,title:o?`展开已归档会话`:`收起已归档会话`,"aria-expanded":!o,onClick:()=>x(t=>({...t,[e.id]:!o})),children:[(0,A.jsx)(`span`,{className:`chevron chevron-folder`,"aria-hidden":`true`,children:o?`📁`:`📂`}),(0,A.jsxs)(`span`,{className:`archived-label`,children:[`Archived (`,r.length,`)`]})]}),!o&&r.map(e=>(0,A.jsx)(`div`,{className:`conversation-archived`,"data-archived-at":e.archivedAt,children:En(`conversation`,e.id)?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(Wn,{initial:e.title,label:`重命名已归档会话 ${e.title}`,onCommit:t=>Dn(`conversation`,e.id,t),onClose:Tn}),(0,A.jsx)(`small`,{children:xn(e.archivedAt)})]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{onDoubleClick:()=>_n(`conversation`,e.id),children:[`· `,e.title]}),(0,A.jsx)(`small`,{children:xn(e.archivedAt)}),(0,A.jsx)(`button`,{type:`button`,className:`conversation-fork`,"data-fork-conversation":e.id,"data-fork-state":Er===e.id?`pending`:`idle`,disabled:!!Er,title:`从此会话分叉出一个新会话`,"aria-label":`从已归档会话 ${e.title} 分叉出一个新会话`,onClick:()=>Or(e.id),children:`⑂`}),(0,A.jsx)(`button`,{className:`conversation-restore`,title:`恢复为正常会话`,"aria-label":`恢复会话 ${e.title}`,onClick:()=>rr(e.id),children:`↑`})]})},e.id))]})]},e.id)})}),(0,A.jsxs)(`footer`,{children:[(0,A.jsxs)(`div`,{className:`footer-status`,children:[(0,A.jsx)(`i`,{className:c?`online`:`offline`}),c?`已连接`:`正在连接`,(0,A.jsx)(`span`,{children:`本地持久化`})]}),(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger`,"data-theme-open":`1`,"aria-haspopup":`dialog`,"aria-expanded":Yn,onClick:()=>Xn(!0),children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`⚙`}),`设置`]}),(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger`,"data-help-open":`1`,"aria-haspopup":`dialog`,"aria-expanded":Zn,onClick:()=>Qn(!0),children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`📖`}),`使用指南`]}),de?.needsRestart&&(0,A.jsxs)(`button`,{type:`button`,className:`theme-settings-trigger restart-needed-trigger`,title:`代码已更新:当前运行 v${de.runningVersion},磁盘版本 v${de.diskVersion}。点击复制重启命令 /web restart`,onClick:()=>{navigator.clipboard.writeText(`/web restart`),N(`已复制重启命令:/web restart`,`info`)},children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`⚠️`}),`重启服务生效`]})]})]}),(0,A.jsx)(_r,{side:`left`,width:ye.sidebar,min:ye.sidebarMin,max:ye.sidebarMax,label:`调整左侧栏宽度`,onWidth:be}),(0,A.jsxs)(`section`,{className:`chat`,"data-main-view":ht,"data-main-view-kind":ht,children:[xt.length>0&&(0,A.jsx)(`div`,{className:`chat-tab-strip`,"data-chat-tab-strip":`1`,"data-session-count":ct.length,"data-file-count":M.open.length,children:(0,A.jsx)(at,{tabs:xt,prefix:`workspace-tab`,ariaLabel:`工作区标签页`,activeId:St,onSelect:Ct,onClose:wt,minWidth:120,maxWidth:320})}),(0,A.jsxs)(`header`,{children:[(0,A.jsxs)(`div`,{className:`chat-head`,children:[(0,A.jsx)(`h1`,{children:j?.title??`准备开始`}),te.size>0?[...te].map(([e,t])=>(0,A.jsx)(`p`,{"data-role":`run-status`,"data-status-key":e,children:`扩展状态:${e?`${e} · `:``}${t}`},e)):(0,A.jsx)(`p`,{"data-role":`run-status`,children:j?.status===`running`?`Agent 正在工作`:`Pi runtime · Web 控制台`})]}),(0,A.jsxs)(`span`,{className:`chat-view chat-view-${ht}`,"data-main-view-indicator":ht,"data-main-view-kind":ht,title:ht===`file`?`中间主画面正在显示文件 ${M.active?.path??``}`:`中间主画面正在显示这个会话的消息流`,children:[(0,A.jsx)(`span`,{className:`chat-view-label`,children:`主区显示`}),(0,A.jsx)(`span`,{className:`chat-view-kind`,children:ht===`file`?`文件`:`会话`}),ht===`file`&&M.active&&(0,A.jsx)(`span`,{className:`chat-view-name`,"data-main-view-name":M.active.name,children:M.active.name})]}),(0,A.jsx)(`div`,{className:`badge`,children:j?.status??`idle`})]}),d&&(0,A.jsx)(`div`,{className:`error`,children:d}),j?.error&&(0,A.jsx)(`div`,{className:`error`,"data-role":`conversation-error`,children:j.error}),ie&&(0,A.jsxs)(`div`,{className:`extui-title-note`,children:[`扩展建议标题:`,ie]}),ee.length>0&&(0,A.jsx)(`div`,{className:`toasts`,role:`status`,"aria-live":`polite`,"data-toast-count":ee.length,children:ee.map(e=>(0,A.jsx)(`div`,{className:`toast toast-${e.kind}`,"data-toast-kind":e.kind,children:e.text},e.key))}),ht===`file`?(0,A.jsx)(`div`,{className:`chat-file-view`,"data-main-file-view":Tt?.path,"data-file-view-kind":`editor`,children:Tt?(0,A.jsx)(Qe,{file:Tt,state:M.saves[Tt.path]?.state??`idle`,message:M.saves[Tt.path]?.message??``,external:M.external[Tt.path]===!0,onChange:e=>M.updateBuffer(Tt.path,e),onSave:()=>void M.save(Tt.path,!1),onReload:()=>void M.reload(Tt.path),onOverwrite:()=>void M.save(Tt.path,!0)}):(0,A.jsx)(`p`,{className:`rail-empty`,"data-main-file-empty":`1`,children:`没有选中的文件。`})}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`messages`,children:[!j&&(0,A.jsxs)(`div`,{className:`empty`,children:[(0,A.jsx)(`div`,{className:`orb`,children:`π`}),(0,A.jsx)(`h2`,{children:`开始一个新会话`}),(0,A.jsx)(`p`,{children:a.workspaces.length?`选择一个工作区创建会话,即可从浏览器向 Super Pi 发送任务。`:`先创建一个工作区,再开始会话。`}),a.workspaces.map(e=>(0,A.jsxs)(`button`,{onClick:()=>er(e.id),children:[`在「`,e.name,`」中创建会话`]},e.id)),(0,A.jsx)(`button`,{onClick:()=>v(!0),children:`+ 新建工作区`})]}),an.map(e=>{if(e.startsWith(`m:`)){let t=nn.get(e.slice(2));if(!t)return null;let n=!j?.messages.some(n=>n.id!==t.id&&n.role===`user`&&an.indexOf(`m:${n.id}`)>an.indexOf(e)),r=t.role===`user`&&j?.status!==`running`&&yr!==t.id,i=r&&n&&!t.id.startsWith(`pending:`),a=r&&!n&&!!t.piEntryId,o=t.content?(0,A.jsx)(Ae,{source:t.content}):(0,A.jsx)(`span`,{className:`typing`,children:`正在思考`}),s=t.toolCalls??[];if(t.role===`user`){let n=Sr?.id===t.id?Sr.kind:void 0,r=t.content||(t.images?.length?`[图片]`:``);return(0,A.jsxs)(`article`,{className:`message user`,children:[(0,A.jsxs)(`div`,{className:`message-body`,children:[(0,A.jsxs)(`div`,{className:`bubble`,children:[(0,A.jsxs)(`div`,{className:`meta`,children:[`你`,(0,A.jsx)(`time`,{children:dn(t.createdAt)})]}),t.images&&t.images.length>0&&(0,A.jsx)(`div`,{className:`message-images`,"data-message-images":`1`,children:t.images.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`message-image-btn`,"data-message-image-id":e.id,onClick:()=>Ie({url:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,name:e.name,bytes:e.bytes}),title:e.name?`查看大图:${e.name}`:`查看大图`,children:(0,A.jsx)(`img`,{src:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,alt:e.name||`图片`,className:`message-image-thumb`,loading:`lazy`})},e.id))}),(0,A.jsx)(`div`,{className:`content`,children:o})]}),(0,A.jsxs)(`div`,{className:`message-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`message-copy`,"data-copy-message":t.id,"data-copy-state":n,"aria-label":`复制这条消息:${r}`,onClick:()=>Tr(t.id,r),children:n===`copied`?`已复制`:n===`error`?`复制失败`:`复制`}),i&&(0,A.jsx)(`button`,{type:`button`,className:`message-revert`,"data-withdraw-message":t.id,title:`撤回并编辑:删除这条消息并将文字恢复到输入框继续编辑`,onClick:()=>xr(t.id,!0),children:`撤回`}),a&&(0,A.jsx)(`button`,{type:`button`,className:`message-revert`,"data-revert-message":t.id,title:`回退到这里:删除后续全部内容(Pi 的记录和这里的历史一起清掉,不会新建会话,也不动任何代码文件)`,onClick:()=>xr(t.id),children:`回退`})]})]}),(0,A.jsx)(`div`,{className:`avatar`,children:`你`})]},e)}let c=(e,n)=>{let r=typeof e.at==`number`&&Number.isFinite(e.at)?e.at:n;return Math.max(0,Math.min(r,t.content.length))},l=[],u=0,d=s.map((e,t)=>({call:e,index:t,at:c(e,t)})).sort((e,t)=>e.at-t.at||e.index-t.index);for(let{call:e,index:n,at:r}of d){let i=Math.max(u,r);i>u&&l.push({text:t.content.slice(u,i)}),u=i,l.push({call:e,index:n})}return l.push({text:t.content.slice(u)}),(0,A.jsxs)(`article`,{className:`message assistant`,children:[(0,A.jsx)(`div`,{className:`avatar`,children:`π`}),(0,A.jsxs)(`div`,{className:`message-body`,children:[(0,A.jsxs)(`div`,{className:`meta`,children:[t.agentIdentity?.name??`Super Pi`,(0,A.jsx)(`time`,{children:dn(t.createdAt)})]}),l.map((e,n)=>`text`in e?e.text?(0,A.jsx)(`div`,{className:`content`,children:(0,A.jsx)(Ae,{source:e.text})},`t${n}`):null:(0,A.jsx)(`div`,{className:`call-blocks`,"data-call-block-index":e.index,children:(0,A.jsx)(Bn,{call:e.call,index:e.index,expanded:!!we[`${t.id}:${e.index}`],onToggle:()=>sn(t.id,e.index)})},`c${n}`))]})]},e)}if(e.startsWith(`w:`)){let t=en.get(e.slice(2));return t?(0,A.jsxs)(`div`,{children:[n.some(e=>e.key===`stop:${t.id}`)&&(0,A.jsx)(`span`,{children:`停止中…`}),(0,A.jsx)(ft,{workflow:t,names:tn,stopping:n.some(e=>e.key===`stop:${t.id}`),onStop:()=>fn(t.id)},e)]},e):null}let t=rn.get(e.slice(2));return t?(0,A.jsxs)(`div`,{children:[n.some(e=>e.key===`stop:${t.id}`)&&(0,A.jsx)(`span`,{children:`停止中…`}),(0,A.jsx)(Vn,{run:t,stopping:n.some(e=>e.key===`stop:${t.id}`),name:tn.get(t.agentId)??``,expanded:!!D[t.id],onToggle:()=>on(t.id),onStop:()=>cn(t.id)},e)]},e):null})]}),(0,A.jsx)(Hn,{items:fr,pi:Se.get(j?.id??``),running:j?.status===`running`,onCancel:mr,onSteer:vr}),(Zt.length>0||[...ne.values()].some(e=>e.placement===`aboveEditor`))&&(0,A.jsxs)(`div`,{className:`extui`,"data-extui-count":Zt.length,children:[Zt.map(e=>(0,A.jsx)(Un,{request:e.request,pending:n.some(t=>t.key===`answer:${e.conversationId}:${e.request.requestId}`),onAnswer:t=>Lt(e.conversationId,e.request.requestId,t)},e.request.requestId)),pn(`aboveEditor`)]}),(0,A.jsxs)(`form`,{onSubmit:ur,onPaste:ar,onDragOver:or,onDragLeave:cr,onDrop:lr,className:Le?`composer-dropzone-active`:void 0,children:[(0,A.jsxs)(`div`,{className:`session-picker`,"data-session-picker":`1`,children:[(0,A.jsx)(Gn,{kind:`agent`,label:qt?.name??`跟随 Pi 默认`,value:j?.agentId??Kn,detail:qt?.description||void 0,options:Jt,disabled:!se||se.source===`unavailable`||It,note:In(se),onChoose:Xt}),(0,A.jsx)(Gn,{kind:`model`,label:Rt?.label??(E?`Pi 默认`:`读取中…`),value:Rt?`${Rt.provider}/${Rt.modelId}`:void 0,detail:F?`来自 ${qt?.name}`:Rt&&E?.source===`pi`&&!j?.model?`Pi 默认模型`:Rt?`${Rt.provider}/${Rt.modelId}`:void 0,options:Ut,disabled:!Bt||It,note:Fn(`模型`,E),onChoose:Gt}),(0,A.jsx)(Gn,{kind:`thinking`,label:zt??(E?`Pi 默认`:`读取中…`),value:zt,options:Wt,disabled:!Bt||It,note:Fn(`思考等级`,E),onChoose:Kt})]}),(0,A.jsx)(`textarea`,{value:Xe,onCompositionStart:()=>{Be.current=!0},onCompositionEnd:()=>{Be.current=!1},onChange:e=>nt(e.target.value),placeholder:j?Vt?`描述你要完成的任务(支持粘贴/拖放图片)…`:`描述你要完成的任务…`:`先创建会话`,disabled:!j,onKeyDown:e=>{Be.current||un(e)||e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),je.filter(e=>e.conversationId===j?.id).map(e=>(0,A.jsxs)(`div`,{"data-failed-send":e.id,children:[(0,A.jsxs)(`span`,{children:[`发送失败:`,e.content]}),(0,A.jsx)(`button`,{type:`button`,disabled:!!(Xe||Ze.length),onClick:()=>{tt(e.conversationId,t=>({...t,text:e.content,images:e.images})),Me(t=>t.filter(t=>t.id!==e.id))},children:`恢复草稿`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>Me(t=>t.filter(t=>t.id!==e.id)),children:`移除`})]},e.id)),Ne.filter(e=>e.conversationId===j?.id).map(e=>(0,A.jsxs)(`div`,{"data-upload-preview":e.id,children:[(0,A.jsx)(`img`,{src:e.url,alt:e.name,width:48,height:48}),(0,A.jsx)(`span`,{children:e.failed?`上传失败`:`上传中…`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>{ke.current.add(e.id),URL.revokeObjectURL(e.url),Pe(t=>t.filter(t=>t.id!==e.id))},children:`移除`})]},e.id)),(Ze.length>0||$e>0)&&(0,A.jsxs)(`div`,{className:`composer-attachments`,"data-composer-attachments":`1`,children:[Ze.map((e,t)=>(0,A.jsxs)(`div`,{className:`composer-attachment-item`,"data-composer-attachment-id":e.id,children:[(0,A.jsx)(`img`,{src:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,alt:e.name||`已附图片`,className:`composer-attachment-thumb`,onClick:()=>Ie({url:`/api/upload/${encodeURIComponent(j?.id??``)}/${encodeURIComponent(e.id)}`,name:e.name,bytes:e.bytes}),title:`点击查看大图`}),(0,A.jsx)(`span`,{className:`composer-attachment-name`,title:e.name,children:e.name||`图片`}),(0,A.jsx)(`button`,{type:`button`,className:`composer-attachment-remove`,"data-composer-attachment-remove":e.id,onClick:()=>rt(e=>e.filter((e,n)=>n!==t)),"aria-label":`移除 ${e.name||`图片`}`,title:`移除图片`,children:`✕`})]},e.id)),$e>0&&(0,A.jsx)(`div`,{className:`composer-attachment-item composer-attachment-uploading`,children:(0,A.jsxs)(`span`,{children:[`图片上传中 (`,$e,`)…`]})})]}),(0,A.jsxs)(`div`,{className:`composer`,children:[(0,A.jsxs)(`div`,{className:`composer-hints`,children:[(0,A.jsxs)(`button`,{type:`button`,className:`composer-attach-btn`,"data-composer-attach":`1`,onClick:()=>ze.current?.click(),disabled:!j||!Vt||$e>0,title:j?Vt?`添加图片(支持剪贴板粘贴与拖拽)`:`当前模型不支持图片输入`:`请先创建或选择会话`,"aria-label":`添加图片`,children:[(0,A.jsx)(`span`,{"aria-hidden":`true`,children:`+`}),` 图片`]}),(0,A.jsx)(`input`,{ref:ze,type:`file`,accept:`image/png,image/jpeg,image/gif,image/webp`,multiple:!0,style:{display:`none`},onChange:e=>{e.target.files?.length&&(ir(Array.from(e.target.files)),e.target.value=``)}}),(0,A.jsx)(`span`,{children:`Enter 发送 · Shift + Enter 换行`})]}),(0,A.jsxs)(`div`,{className:`composer-actions`,children:[j?.status===`running`&&(0,A.jsx)(`button`,{type:`button`,className:`stop`,"data-stop-run":j.id,disabled:n.some(e=>e.key===`stop:${j.id}`),onClick:()=>P({type:`run.stop`,conversationId:j.id},`stop:${j.id}`,e=>e),children:n.some(e=>e.key===`stop:${j.id}`)?`停止中…`:`停止`}),(0,A.jsx)(`button`,{className:`send ${j?.status===`running`?`send-queued`:``}`,"data-send-mode":j?.status===`running`?`queued`:`direct`,disabled:!Xe.trim()&&Ze.length===0||!j||$e>0||!!yr||It,title:j?yr?`正在撤回:Pi 的历史还没截断完成,撤回结束后即可发送`:!Xe.trim()&&Ze.length===0?`请输入消息或添加图片后发送`:$e>0?`图片上传中…`:j.status===`running`?`这一轮结束后发送(发送后可在上面的排队区取消或插队)`:void 0:`请先创建或选择会话`,children:yr?`撤回中…`:j?.status===`running`?`排队发送 ↑`:`发送 ↑`})]})]})]}),pn(`belowEditor`)]})]}),(0,A.jsx)(_r,{side:`right`,width:pe?30:ye.rail,min:ye.railMin,max:ye.railMax,label:`调整右侧栏宽度`,onWidth:xe}),_&&(0,A.jsx)(Mn,{onClose:()=>v(!1),onCreate:mn}),Yn&&(0,A.jsx)(Nt,{theme:Rn,onChooseTheme:e=>zn(e),onClose:()=>Xn(!1),agentCatalog:se,subagentCatalog:le,modelFilterRules:a.modelFilterRules??[],pendingSettings:n.some(e=>e.key===`model-rules`||e.key===`agent-directories`),onSetModelRules:e=>P({type:`model.rules.set`,rules:e},`model-rules`,t=>({...t,modelFilterRules:e})),customAgentDirs:a.customAgentDirs??[],onSetCustomAgentDirs:e=>P({type:`agents.setCustomDirs`,dirs:e},`agent-directories`,t=>({...t,customAgentDirs:e})),onRescanAgents:()=>Mt({type:`agents.rescan`})}),Zn&&(0,A.jsx)(mt,{onClose:()=>Qn(!1)}),Ln&&(0,A.jsx)(qn,{workspace:Ln,catalog:Ht(E,Ln),agents:se,onClose:()=>jn(void 0),onRename:()=>{let e=Ln.id;jn(void 0),_n(`workspace`,e)},onSave:(e,t,n)=>$n(Ln.id,e,t,n)}),Fe&&(0,A.jsx)(sr,{image:Fe,onClose:()=>Ie(void 0)}),(0,A.jsx)(tr,{todos:a.todos??[],tasks:a.backgroundTasks??[],collapsed:pe,onToggle:()=>me(e=>!e),workspaceId:h,files:M,onOpenFile:e=>void vt(e),activeTab:dt,onSelectTab:pt})]})}N(Et()),(0,d.createRoot)(document.getElementById(`root`)).render((0,A.jsx)(l.StrictMode,{children:(0,A.jsx)(vr,{})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";:root{--picker-drop:0px;--picker-nudge:0px;--sidebar-width:270px;--bg-app:#05070c;--bg-panel:#0c1220;--bg-elevated:#1e2937;--bg-input:#080e17;--bg-hover:#25334a;--bg-raised:#1a2433;--bg-inset:#010208;--text-primary:#f2f6ff;--text-secondary:#b4c1d6;--text-muted:#95a2b7;--text-inverse:#05070c;--border-subtle:#1c2534;--border-default:#36455e;--border-strong:#7284a0;--accent:#5fd4b0;--accent-hover:#7ee2c3;--accent-contrast:#022019;--accent-bg:#123a33;--accent-border:#2f6d5f;--selected:#9cb4d9;--selected-bg:#33455f;--selected-border:#5f789f;--tab-active-bg:#33455f;--danger:#f2a3a8;--danger-bg:#2c1418;--danger-border:#6b2a34;--danger-contrast:#2c1418;--warning:#e0a862;--warning-bg:#2a2013;--warning-border:#6b5a2a;--success:#6fd8b6;--info:#8fb4e8;--overlay:#04070ccc;--shadow:#000000a8;--shadow-faint:#0005;--focus-ring:#7ee2c3;--focus-ring-glow:#5fd4b433;--scrollbar-thumb:#6f7f96;--scrollbar-track:#010208;--scrollbar-thumb-active:#9aa8bd}[data-theme=midnight],[data-preview=midnight]{--bg-app:#05070c;--bg-panel:#0c1220;--bg-elevated:#1e2937;--bg-raised:#1a2433;--bg-hover:#25334a;--bg-input:#080e17;--bg-inset:#010208;--text-primary:#f2f6ff;--text-secondary:#b4c1d6;--text-muted:#95a2b7;--text-inverse:#05070c;--border-subtle:#1c2534;--border-default:#36455e;--border-strong:#7284a0;--accent:#5fd4b0;--accent-hover:#7ee2c3;--accent-contrast:#022019;--accent-bg:#123a33;--accent-border:#2f6d5f;--selected:#9cb4d9;--selected-bg:#33455f;--selected-border:#5f789f;--tab-active-bg:#33455f;--danger:#f2a3a8;--danger-bg:#2c1418;--danger-border:#6b2a34;--danger-contrast:#2c1418;--warning:#e0a862;--warning-bg:#2a2013;--warning-border:#6b5a2a;--success:#6fd8b6;--info:#8fb4e8;--overlay:#04070ccc;--shadow:#000000a8;--shadow-faint:#0005;--focus-ring:#7ee2c3;--focus-ring-glow:#5fd4b433;--scrollbar-thumb:#6f7f96;--scrollbar-track:#010208;--scrollbar-thumb-active:#9aa8bd}[data-theme=slate],[data-preview=slate]{--bg-app:#0d0d0d;--bg-panel:#121212;--bg-elevated:#242424;--bg-raised:#232323;--bg-hover:#262626;--bg-input:#0f0f0f;--bg-inset:#020202;--text-primary:#babdbb;--text-secondary:#969b98;--text-muted:#949896;--text-inverse:#0d0d0d;--border-subtle:#242424;--border-default:#3c3c3c;--border-strong:#707070;--accent:#d9a441;--accent-hover:#e8bb63;--accent-contrast:#1a1408;--accent-bg:#2a2110;--accent-border:#5c4724;--selected:#b6bbc0;--selected-bg:#3d4145;--selected-border:#6e7379;--tab-active-bg:#3d4145;--danger:#e08a8f;--danger-bg:#2a1618;--danger-border:#5e2b30;--danger-contrast:#2a1618;--warning:#d9a45c;--warning-bg:#251c11;--warning-border:#5a4522;--success:#86b37a;--info:#9aa7b8;--overlay:#000000bf;--shadow:#000000b3;--shadow-faint:#00000070;--focus-ring:#e8bb63;--focus-ring-glow:#d9a44133;--scrollbar-thumb:#6f6f6f;--scrollbar-track:#020202;--scrollbar-thumb-active:#9ba0a3}[data-theme=ocean],[data-preview=ocean]{--bg-app:#e8eff2;--bg-panel:#f4f9fa;--bg-elevated:#fbfdfe;--bg-raised:#fff;--bg-hover:#d5e2e7;--bg-input:#dee9ed;--bg-inset:#d5dfe3;--text-primary:#07202a;--text-secondary:#2e4f5c;--text-muted:#4b5c63;--text-inverse:#fff;--border-subtle:#c6d5da;--border-default:#9ab2ba;--border-strong:#4a626b;--accent:#0a6068;--accent-hover:#084b52;--accent-contrast:#fff;--accent-bg:#d3e8ea;--accent-border:#6fa7ad;--selected:#26507f;--selected-bg:#a8c6d4;--selected-border:#5c82ab;--tab-active-bg:#fbfdfe;--danger:#9c2f3a;--danger-bg:#fbe4e7;--danger-border:#d79aa0;--danger-contrast:#fff;--warning:#7d520f;--warning-bg:#fbeed8;--warning-border:#d3b078;--success:#18604a;--info:#22527f;--overlay:#0f202999;--shadow:#0f20291f;--shadow-faint:#0f202914;--focus-ring:#084b52;--focus-ring-glow:#0a606822;--scrollbar-thumb:#6b7f86;--scrollbar-track:#bccbd0;--scrollbar-thumb-active:#3f545c}[data-theme=dawn],[data-preview=dawn]{--bg-app:#f2ece1;--bg-panel:#f9f5ee;--bg-elevated:#fefcf8;--bg-raised:#fffdfa;--bg-hover:#e9e1d3;--bg-input:#eee7da;--bg-inset:#e0d9cb;--text-primary:#3c362e;--text-secondary:#59513f;--text-muted:#675e4e;--text-inverse:#fffdf9;--border-subtle:#e0d7c8;--border-default:#c6b9a4;--border-strong:#8a7c6a;--accent:#9a4a2c;--accent-hover:#7d3820;--accent-contrast:#fffdf9;--accent-bg:#f6e2d7;--accent-border:#d3a087;--selected:#38496b;--selected-bg:#b6b8c8;--selected-border:#7b83a0;--tab-active-bg:#fefcf8;--danger:#9c2b34;--danger-bg:#fbe2e4;--danger-border:#d99fa4;--danger-contrast:#fff;--warning:#7f5210;--warning-bg:#faeed6;--warning-border:#d3b784;--success:#356342;--info:#2a5070;--overlay:#2a262299;--shadow:#2a26221f;--shadow-faint:#2a262214;--focus-ring:#7d3820;--focus-ring-glow:#9a4a2c22;--scrollbar-thumb:#8b8171;--scrollbar-track:#e0d9cb;--scrollbar-thumb-active:#655c4e}.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){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}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}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){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}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-info{border-color:var(--border-default)}.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){.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}.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;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);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin-bottom:11px;padding:9px 10px 0 15px;display:flex}.session-picker-item{min-width:0;max-width:100%;position:relative}.session-picker-trigger{border:1px solid var(--border-default);background:var(--bg-raised);min-width:0;max-width:100%;color:var(--text-primary);cursor:pointer;border-radius:9px;align-items:baseline;gap:7px;padding:5px 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}.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}.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}.settings-row .session-picker-trigger{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;flex:none;font:10px DM Mono,monospace}.subagent-clock{color:var(--text-secondary)}.subagent-duration{color:var(--text-muted)}.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{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;overflow:hidden}.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{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;overflow:hidden}.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);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-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;align-items:baseline;gap:8px;padding:3px 8px;font:11px DM Mono,monospace;display:flex}.call-arg-key{color:var(--selected);flex:none}.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-note{color:var(--text-secondary);overflow-wrap:anywhere;margin:0;padding:0 12px 9px;font:11px/1.7 Manrope}.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-row-sending{background:var(--bg-raised)}.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{border:1px solid var(--selected-border);background:var(--selected-bg);color:var(--text-secondary);cursor:pointer;border-radius:7px;flex:none;padding:4px 10px;font:700 11px Manrope}.queue-steer:hover{background:var(--selected-bg)}.queue-steer:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.queue-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-cancel:hover{background:var(--bg-hover);color:var(--danger);border-color:var(--danger-border)}.queue-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-steer-idle{color:var(--text-muted);flex:none;font:10px DM Mono,monospace}.send-queued{border-color:var(--warning-border);background:var(--warning-bg);color:var(--warning)}@media (width<=700px){.queue-dock-list{max-height:min(30vh,220px)}.queue-dock-note{font-size:10px}.queue-row{flex-wrap:wrap}}.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}: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-raised);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-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-x:auto}.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}.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{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}.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{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-left-width:3px;border-radius:7px;flex:0 auto;align-items:baseline;gap:6px;padding:3px 9px;display:flex}.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{border-left-color:var(--warning)}.chat-view-session{border-left-color:var(--selected)}.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{background:var(--bg-raised);color:var(--text-primary);grid-area:1/2}.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-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)}@media (width<=700px){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}}@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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.session-tab-strip::-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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.session-tab-strip::-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}.queue-dock-list: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}.file-tab-strip:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip: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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip::-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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip::-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{width:min(720px,100vw - 32px);padding:0}.settings-window-head{padding:18px 20px 0}.settings-window-body{border-top:1px solid var(--border-subtle);grid-template-columns:156px minmax(0,1fr);margin-top:13px;display:grid}.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{align-content:start;min-width:0;padding:16px 20px 20px;display:grid}.settings-panel-title{color:var(--text-primary);margin:0 0 2px;font:600 13px Manrope}.settings-window .picker-actions{margin-top:20px}.theme-options{grid-template-columns:1fr 1fr;gap:10px;margin:16px 0 0;display:grid}.theme-option{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;text-align:left;border-radius:11px;gap:8px;padding:10px;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);box-shadow:0 0 0 1px var(--selected)}.theme-option-name{align-items:baseline;gap:7px;font:600 13px Manrope;display:flex}.theme-option-name small,.theme-option-blurb{color:var(--text-muted);font:11px DM Mono,monospace}.theme-current-line{margin-top:10px}.theme-preview{border:1px solid var(--border-default);background:var(--bg-app);border-radius:7px;grid-template-columns:22px 1fr;gap:5px;height:52px;padding:5px;display:grid;overflow:hidden}.theme-preview-rail{background:var(--bg-panel);border-radius:3px}.theme-preview-body{align-content:start;gap:3px;display:grid}.theme-preview-line{background:var(--text-primary);opacity:.9;border-radius:2px;height:5px}.theme-preview-line.dim{background:var(--text-muted)}.theme-preview-line.accent{background:var(--accent)}.theme-preview-panel{background:var(--bg-elevated);border-radius:3px;height:100%}.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-empty{text-align:center;color:var(--text-muted);overflow-wrap:anywhere;padding:26px 14px;font:11px DM Mono,monospace}@media (width<=560px){.theme-options{grid-template-columns:1fr}}@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)}.toasts{z-index:55;pointer-events:none;gap:8px;width:max-content;max-width:min(560px,100vw - 32px);margin:0;display:grid;position:fixed;top:14px;left:50%;transform:translate(-50%)}.toast{pointer-events:auto;box-shadow:0 10px 28px var(--shadow-faint)}.workspace-picker{width:min(580px,100vw - 32px)}.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-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 label{gap:6px;display:grid}.model-rules-fields input[aria-invalid=true]{border-color:var(--danger)}.model-rules-fields [role=alert]{color:var(--danger)}
|
|
1
|
+
@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";:root{--picker-drop:0px;--picker-nudge:0px;--sidebar-width:270px;--bg-app:#05070c;--bg-panel:#0c1220;--bg-elevated:#1e2937;--bg-input:#080e17;--bg-hover:#25334a;--bg-raised:#1a2433;--bg-inset:#010208;--text-primary:#f2f6ff;--text-secondary:#b4c1d6;--text-muted:#95a2b7;--text-inverse:#05070c;--border-subtle:#1c2534;--border-default:#36455e;--border-strong:#7284a0;--accent:#5fd4b0;--accent-hover:#7ee2c3;--accent-contrast:#022019;--accent-bg:#123a33;--accent-border:#2f6d5f;--selected:#9cb4d9;--selected-bg:#33455f;--selected-border:#5f789f;--tab-active-bg:#33455f;--danger:#f2a3a8;--danger-bg:#2c1418;--danger-border:#6b2a34;--danger-contrast:#2c1418;--warning:#e0a862;--warning-bg:#2a2013;--warning-border:#6b5a2a;--success:#6fd8b6;--info:#8fb4e8;--overlay:#04070ccc;--shadow:#000000a8;--shadow-faint:#0005;--focus-ring:#7ee2c3;--focus-ring-glow:#5fd4b433;--scrollbar-thumb:#6f7f96;--scrollbar-track:#010208;--scrollbar-thumb-active:#9aa8bd}[data-theme=midnight],[data-preview=midnight]{--bg-app:#05070c;--bg-panel:#0c1220;--bg-elevated:#1e2937;--bg-raised:#1a2433;--bg-hover:#25334a;--bg-input:#080e17;--bg-inset:#010208;--text-primary:#f2f6ff;--text-secondary:#b4c1d6;--text-muted:#95a2b7;--text-inverse:#05070c;--border-subtle:#1c2534;--border-default:#36455e;--border-strong:#7284a0;--accent:#5fd4b0;--accent-hover:#7ee2c3;--accent-contrast:#022019;--accent-bg:#123a33;--accent-border:#2f6d5f;--selected:#9cb4d9;--selected-bg:#33455f;--selected-border:#5f789f;--tab-active-bg:#33455f;--danger:#f2a3a8;--danger-bg:#2c1418;--danger-border:#6b2a34;--danger-contrast:#2c1418;--warning:#e0a862;--warning-bg:#2a2013;--warning-border:#6b5a2a;--success:#6fd8b6;--info:#8fb4e8;--overlay:#04070ccc;--shadow:#000000a8;--shadow-faint:#0005;--focus-ring:#7ee2c3;--focus-ring-glow:#5fd4b433;--scrollbar-thumb:#6f7f96;--scrollbar-track:#010208;--scrollbar-thumb-active:#9aa8bd}[data-theme=slate],[data-preview=slate]{--bg-app:#0d0d0d;--bg-panel:#121212;--bg-elevated:#242424;--bg-raised:#232323;--bg-hover:#262626;--bg-input:#0f0f0f;--bg-inset:#020202;--text-primary:#babdbb;--text-secondary:#969b98;--text-muted:#949896;--text-inverse:#0d0d0d;--border-subtle:#242424;--border-default:#3c3c3c;--border-strong:#707070;--accent:#d9a441;--accent-hover:#e8bb63;--accent-contrast:#1a1408;--accent-bg:#2a2110;--accent-border:#5c4724;--selected:#b6bbc0;--selected-bg:#3d4145;--selected-border:#6e7379;--tab-active-bg:#3d4145;--danger:#e08a8f;--danger-bg:#2a1618;--danger-border:#5e2b30;--danger-contrast:#2a1618;--warning:#d9a45c;--warning-bg:#251c11;--warning-border:#5a4522;--success:#86b37a;--info:#9aa7b8;--overlay:#000000bf;--shadow:#000000b3;--shadow-faint:#00000070;--focus-ring:#e8bb63;--focus-ring-glow:#d9a44133;--scrollbar-thumb:#6f6f6f;--scrollbar-track:#020202;--scrollbar-thumb-active:#9ba0a3}[data-theme=ocean],[data-preview=ocean]{--bg-app:#e8eff2;--bg-panel:#f4f9fa;--bg-elevated:#fbfdfe;--bg-raised:#fff;--bg-hover:#d5e2e7;--bg-input:#dee9ed;--bg-inset:#d5dfe3;--text-primary:#07202a;--text-secondary:#2e4f5c;--text-muted:#4b5c63;--text-inverse:#fff;--border-subtle:#c6d5da;--border-default:#9ab2ba;--border-strong:#4a626b;--accent:#0a6068;--accent-hover:#084b52;--accent-contrast:#fff;--accent-bg:#d3e8ea;--accent-border:#6fa7ad;--selected:#26507f;--selected-bg:#a8c6d4;--selected-border:#5c82ab;--tab-active-bg:#fbfdfe;--danger:#9c2f3a;--danger-bg:#fbe4e7;--danger-border:#d79aa0;--danger-contrast:#fff;--warning:#7d520f;--warning-bg:#fbeed8;--warning-border:#d3b078;--success:#18604a;--info:#22527f;--overlay:#0f202999;--shadow:#0f20291f;--shadow-faint:#0f202914;--focus-ring:#084b52;--focus-ring-glow:#0a606822;--scrollbar-thumb:#6b7f86;--scrollbar-track:#bccbd0;--scrollbar-thumb-active:#3f545c}[data-theme=dawn],[data-preview=dawn]{--bg-app:#f2ece1;--bg-panel:#f9f5ee;--bg-elevated:#fefcf8;--bg-raised:#fffdfa;--bg-hover:#e9e1d3;--bg-input:#eee7da;--bg-inset:#e0d9cb;--text-primary:#3c362e;--text-secondary:#59513f;--text-muted:#675e4e;--text-inverse:#fffdf9;--border-subtle:#e0d7c8;--border-default:#c6b9a4;--border-strong:#8a7c6a;--accent:#9a4a2c;--accent-hover:#7d3820;--accent-contrast:#fffdf9;--accent-bg:#f6e2d7;--accent-border:#d3a087;--selected:#38496b;--selected-bg:#b6b8c8;--selected-border:#7b83a0;--tab-active-bg:#fefcf8;--danger:#9c2b34;--danger-bg:#fbe2e4;--danger-border:#d99fa4;--danger-contrast:#fff;--warning:#7f5210;--warning-bg:#faeed6;--warning-border:#d3b784;--success:#356342;--info:#2a5070;--overlay:#2a262299;--shadow:#2a26221f;--shadow-faint:#2a262214;--focus-ring:#7d3820;--focus-ring-glow:#9a4a2c22;--scrollbar-thumb:#8b8171;--scrollbar-track:#e0d9cb;--scrollbar-thumb-active:#655c4e}.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){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}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}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){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}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-info{border-color:var(--border-default)}.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){.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}.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;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);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin-bottom:11px;padding:9px 10px 0 15px;display:flex}.session-picker-item{min-width:0;max-width:100%;position:relative}.session-picker-trigger{border:1px solid var(--border-default);background:var(--bg-raised);min-width:0;max-width:100%;color:var(--text-primary);cursor:pointer;border-radius:9px;align-items:baseline;gap:7px;padding:5px 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}.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}.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}.settings-row .session-picker-trigger{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;flex:none;font:10px DM Mono,monospace}.subagent-clock{color:var(--text-secondary)}.subagent-duration{color:var(--text-muted)}.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{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;overflow:hidden}.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{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-primary);flex:0 auto;overflow:hidden}.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);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-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;align-items:baseline;gap:8px;padding:3px 8px;font:11px DM Mono,monospace;display:flex}.call-arg-key{color:var(--selected);flex:none}.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-note{color:var(--text-secondary);overflow-wrap:anywhere;margin:0;padding:0 12px 9px;font:11px/1.7 Manrope}.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-row-sending{background:var(--bg-raised)}.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{border:1px solid var(--selected-border);background:var(--selected-bg);color:var(--text-secondary);cursor:pointer;border-radius:7px;flex:none;padding:4px 10px;font:700 11px Manrope}.queue-steer:hover{background:var(--selected-bg)}.queue-steer:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}.queue-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-cancel:hover{background:var(--bg-hover);color:var(--danger);border-color:var(--danger-border)}.queue-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-steer-idle{color:var(--text-muted);flex:none;font:10px DM Mono,monospace}.send-queued{border-color:var(--warning-border);background:var(--warning-bg);color:var(--warning)}@media (width<=700px){.queue-dock-list{max-height:min(30vh,220px)}.queue-dock-note{font-size:10px}.queue-row{flex-wrap:wrap}}.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}: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-raised);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-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-x:auto}.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}.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{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}.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{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-left-width:3px;border-radius:7px;flex:0 auto;align-items:baseline;gap:6px;padding:3px 9px;display:flex}.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{border-left-color:var(--warning)}.chat-view-session{border-left-color:var(--selected)}.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{background:var(--bg-raised);color:var(--text-primary);grid-area:1/2}.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-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)}@media (width<=700px){.shell{grid-template-rows:minmax(0,auto) minmax(254px,1fr);grid-template-columns:minmax(0,1fr)}}@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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar{background:var(--bg-inset);width:12px;height:12px}.session-tab-strip::-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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);background-clip:padding-box;border:3px solid #0000;border-radius:99px}.session-tab-strip::-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}.queue-dock-list: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}.file-tab-strip:hover::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip: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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip::-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}.queue-dock-list::-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}.file-tab-strip::-webkit-scrollbar-thumb:active{background:var(--scrollbar-thumb-active);border-width:1px}.session-tab-strip::-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{width:min(720px,100vw - 32px);padding:0}.settings-window-head{padding:18px 20px 0}.settings-window-body{border-top:1px solid var(--border-subtle);grid-template-columns:156px minmax(0,1fr);margin-top:13px;display:grid}.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{align-content:start;min-width:0;padding:16px 20px 20px;display:grid}.settings-panel-title{color:var(--text-primary);margin:0 0 2px;font:600 13px Manrope}.settings-window .picker-actions{margin-top:20px}.theme-options{grid-template-columns:1fr 1fr;gap:10px;margin:16px 0 0;display:grid}.theme-option{border:1px solid var(--border-default);background:var(--bg-input);color:var(--text-primary);cursor:pointer;text-align:left;border-radius:11px;gap:8px;padding:10px;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);box-shadow:0 0 0 1px var(--selected)}.theme-option-name{align-items:baseline;gap:7px;font:600 13px Manrope;display:flex}.theme-option-name small,.theme-option-blurb{color:var(--text-muted);font:11px DM Mono,monospace}.theme-current-line{margin-top:10px}.theme-preview{border:1px solid var(--border-default);background:var(--bg-app);border-radius:7px;grid-template-columns:22px 1fr;gap:5px;height:52px;padding:5px;display:grid;overflow:hidden}.theme-preview-rail{background:var(--bg-panel);border-radius:3px}.theme-preview-body{align-content:start;gap:3px;display:grid}.theme-preview-line{background:var(--text-primary);opacity:.9;border-radius:2px;height:5px}.theme-preview-line.dim{background:var(--text-muted)}.theme-preview-line.accent{background:var(--accent)}.theme-preview-panel{background:var(--bg-elevated);border-radius:3px;height:100%}.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-empty{text-align:center;color:var(--text-muted);overflow-wrap:anywhere;padding:26px 14px;font:11px DM Mono,monospace}@media (width<=560px){.theme-options{grid-template-columns:1fr}}@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}.toasts{z-index:55;pointer-events:none;gap:8px;width:max-content;max-width:min(560px,100vw - 32px);margin:0;display:grid;position:fixed;top:14px;left:50%;transform:translate(-50%)}.toast{pointer-events:auto;box-shadow:0 10px 28px var(--shadow-faint)}.workspace-picker{width:min(580px,100vw - 32px)}.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-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 label{gap:6px;display:grid}.model-rules-fields input[aria-invalid=true]{border-color:var(--danger)}.model-rules-fields [role=alert]{color:var(--danger)}
|
package/dist/client/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="theme-color" content="#101828" />
|
|
7
7
|
<title>Super Pi</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-DX6T9v5s.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Rg9IAglS.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|