@dreb/dashboard 2.42.0 → 2.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -65,7 +65,11 @@ Open `http://127.0.0.1:5343`.
65
65
  failures are shown instead of stale values. Trust changes are observed by
66
66
  active processes for future lazy loads and cannot retract already injected
67
67
  context. Also includes dashboard-local preferences (thinking expansion and
68
- notification permission), current pairing code, and paired-devices management.
68
+ notification permission), an appearance section with a curated-theme gallery
69
+ (entropist.ca / Dim / Solarized / Gruvbox / Caves of Qud / Van Gogh /
70
+ Okabe-Ito / Paul Tol — the last two colorblind-safe — live preview cards,
71
+ system/light/dark mode selector, saved per browser), current pairing code,
72
+ and paired-devices management.
69
73
  - **Pairing** — remote first-login rotating-code flow.
70
74
 
71
75
  ## Live connection and recovery
@@ -217,8 +221,23 @@ Browser (SolidJS, hash-routed SPA)
217
221
  `background_agent_event` relay (see `docs/rpc.md` in
218
222
  `@dreb/coding-agent`) — no session-file tailing.
219
223
  - The visual language is `tokens.css` (`src/client/styles/tokens.css`),
220
- the dashboard's design system, adopted unmodified from the accepted
221
- design phase.
224
+ the dashboard's design system. Its defaults are unchanged; `themes.css` is
225
+ an **additive layer** on top that overrides the design tokens only when a
226
+ curated theme or a forced color mode is active.
227
+ - **Appearance system** (`src/client/state/appearance.ts` + `styles/themes.css`
228
+ + `components/theme-gallery.tsx`) — a dashboard-native theming surface,
229
+ independent of the TUI themes. Eight curated themes (entropist.ca, Dim,
230
+ Solarized, Gruvbox, Caves of Qud, Van Gogh, and the colorblind-safe Okabe-Ito
231
+ and Paul Tol palettes), each with light and dark palettes, plus a
232
+ system/light/dark mode.
233
+ A settings theme gallery renders live preview cards; selections persist per
234
+ browser in `localStorage` (a pristine entropist.ca + system install leaves no
235
+ keys and matches the `tokens.css` baseline exactly). Most themes use IBM Plex Mono;
236
+ Gruvbox uses self-hosted JetBrains Mono (OFL, in `src/client/assets/fonts/`),
237
+ lazy-loaded only when active. No `light-dark()` (iOS Safari 16.4 floor); a
238
+ synchronous `index.html` bootstrap prevents a wrong-theme flash. The static
239
+ `manifest.webmanifest` keeps white (default-light) launch colors as the
240
+ fallback, while the live `theme-color` meta follows the active appearance.
222
241
 
223
242
  ## Development
224
243
 
@@ -71,7 +71,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
71
71
  `)),ge().length>0&&t.push([`Attached images included inline with this turn:`,...ge().map((e,t)=>`- image ${t+1}: ${e.fileName} (${rl(e.size)}, ${e.mimeType})`)].join(`
72
72
  `)),[e,...t].filter(e=>e.trim()).join(`
73
73
 
74
- `)}async function St(){let t=r().trim();if(!t&&ve().length===0&&ge().length===0)return;let n=xt(t||`Please review the attached item(s). `);P(void 0);try{let t=ge(),r=t.length>0?await Promise.all(t.map(async({blob:e,mimeType:t})=>({data:await Ze(e),mimeType:t}))):void 0;ze()?await Q.prompt(e.sessionKey,n,a(),r):r?await Q.prompt(e.sessionKey,n,void 0,r):await Q.prompt(e.sessionKey,n),ks(e.sessionKey,n),xe(void 0),i(``),$e(),ye([]),Je()}catch(e){P(e instanceof Error?e.message:String(e))}}async function Ct(){c(!0);try{await Q.abort(e.sessionKey),await lt(),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}finally{c(!1)}}async function wt(){if(!l()){u(!0),P(void 0);try{await Q.stopRuntime(e.sessionKey),e.store.navigate({screen:`fleet`})}catch(e){P(e instanceof Error?e.message:String(e))}finally{u(!1)}}}async function Tt(t){try{t===`compaction`?await Q.abortCompaction(e.sessionKey):t===`retry`&&await Q.abortRetry(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}}function Et(e){Ae?.querySelectorAll(`details.tool`).forEach(t=>{t.open=e})}let Dt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status===`running`),Ot=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status!==`running`),kt=()=>t()?.tasks??[],At=()=>kt().filter(e=>e.status===`completed`).length,jt=()=>n()?.state.contextUsage??L()?.contextUsage,Mt=()=>typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 700px)`).matches,Nt=()=>t()?.sessionName??n()?.state.sessionName,Pt=()=>Nt()??t()?.title??e.sessionKey,Ft=()=>{let e=n()?.cwd;if(!e)return;let t=re();return`${$c(e)}${t?` (${t})`:``}`},It=()=>{let e=Ft(),t=Nt();return e&&t?`${e} • ${t}`:e??t??`session`},Lt=()=>{let e=L()?.tokens;if(!e)return;let t=[];return e.input&&t.push(`↑${Qc(e.input)}`),e.output&&t.push(`↓${Qc(e.output)}`),e.cacheRead&&t.push(`R${Qc(e.cacheRead)}`),e.cacheWrite&&t.push(`W${Qc(e.cacheWrite)}`),t.length>0?t.join(` `):void 0},Rt=()=>{let e=L()?.cost??0,t=n()?.state.usingSubscription??!1;if(!e&&!t)return;let r=`$${e.toFixed(3)}${t?` (sub)`:``}`,i=ae();return i!==void 0&&i>e&&(r+=`, today: $${i.toFixed(2)}`),r},zt=()=>{let e=jt();if(e)return`ctx ${e.percent===null?`?`:`${e.percent.toFixed(0)}%`}/${Qc(e.contextWindow)}`},Bt=()=>{let e=n()?.state.model;if(!e)return;let t=te()?.models.find(t=>t.provider===e.provider&&t.modelId===e.id);if(!(!t||t.count<3))return`${Math.round(t.median)} tok/s`},Vt=()=>[Lt(),Rt(),zt(),Bt()].filter(Boolean),Ht=()=>[...(me().steeringMessages??me().steering.map(e=>({text:e}))).map(e=>({kind:`steer`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text})),...(me().followUpMessages??me().followUp.map(e=>({text:e}))).map(e=>({kind:`follow-up`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text}))],Ut=()=>{let e=r();if(se()||!e.startsWith(`/`))return;let t=e.slice(1);if(!/\s/.test(t))return t.toLowerCase()},Wt=N(()=>{let e=Ut();return e===void 0?[]:oe().filter(t=>{let n=t.name.toLowerCase();return!e||n.startsWith(e)||n.includes(e)}).sort((t,n)=>!t.name.toLowerCase().startsWith(e)-+!n.name.toLowerCase().startsWith(e)||t.name.localeCompare(n.name)).slice(0,8)}),Gt=()=>Wt().length>0,Kt=e=>{i(`/${e.name} `),H(!0),queueMicrotask(()=>Ne?.focus())};return M(()=>{let e=Wt().length;ce()>=e&&le(Math.max(0,e-1))}),(()=>{var c=kc(),u=c.firstChild,k=u.firstChild,M=k.firstChild.nextSibling,N=M.nextSibling,I=u.nextSibling,R=I.firstChild,z=I.nextSibling,ee=z.firstChild,te=ee.firstChild;X(M,Pt),X(k,U(G,{get when(){return!h()},get children(){var e=ic();return X(e,(()=>{var e=q(()=>!!n()?.cwd);return()=>e()?$c(n().cwd):void 0})()),e}}),N),X(k,U(tt,{get store(){return e.store},class:`session-connection-indicator`}),N),X(k,U(G,{get when(){return!h()},get children(){var t=oc(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling,a=r.nextSibling;a.firstChild.nextSibling;var o=a.nextSibling;return r.$$click=()=>f(!0),X(i,()=>Xc(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=qc[(qc.indexOf(t)+1)%qc.length];try{await Q.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},X(a,()=>n()?.state.thinkingLevel??`—`,null),X(t,U(G,{get when(){return jt()},get children(){var e=ac();return e.firstChild.nextSibling,X(e,(()=>{var e=q(()=>jt().percent===null);return()=>e()?`?`:`${jt().percent.toFixed(0)}%`})(),null),e}}),o),o.$$click=()=>m(!p()),j(()=>Y(r,`title`,Zc(n()?.state.model))),t}}),N),N.$$click=()=>g(!h()),X(N,()=>h()?`details ▾`:`details ▴`),X(u,U(G,{get when(){return!h()},get children(){return[(()=>{var e=cc(),t=e.firstChild,n=t.nextSibling;return X(t,It),n.$$click=gt,X(n,U(W,{get each(){return Vt()},children:e=>(()=>{var t=Ac();return X(t,e),t})()})),X(e,U(G,{get when(){return De()},get children(){var e=sc(),t=Le;return typeof t==`function`?Pe(t,e):Le=e,X(e,U(G,{get when(){return ke()},get children(){var e=Hs();return X(e,ke),e}}),null),X(e,U(G,{get when(){return L()},get fallback(){return jc()},children:e=>(()=>{var t=Mc(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling,a=i.firstChild,o=i.nextSibling.nextSibling,s=o.firstChild,c=o.nextSibling.nextSibling,l=c.firstChild,u=c.nextSibling.nextSibling,d=u.nextSibling.nextSibling;return d.firstChild,X(n,()=>e().userMessages),X(r,()=>e().assistantMessages),X(i,()=>e().toolCalls,a),X(i,()=>e().toolResults,null),X(o,()=>Qc(e().tokens.input),s),X(o,()=>Qc(e().tokens.output),null),X(c,()=>Qc(e().tokens.cacheRead),l),X(c,()=>Qc(e().tokens.cacheWrite),null),X(u,()=>Qc(e().tokens.total)),X(d,()=>e().cost.toFixed(4),null),t})()}),null),e}}),null),e})(),U(G,{get when(){return p()},get children(){var t=dc(),r=t.firstChild,i=r.nextSibling,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,u=c.nextSibling,d=u.nextSibling;return i.$$click=()=>S(!0),a.$$click=()=>Et(!0),o.$$click=()=>Et(!1),s.$$click=()=>w(!0),c.$$click=mt,u.$$click=qe,X(t,U(G,{get when(){return Mt()},get children(){return[(()=>{var e=lc();return e.firstChild,e.$$click=()=>f(!0),X(e,()=>Xc(n()?.state.model),null),e})(),(()=>{var t=uc();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=qc[(qc.indexOf(t)+1)%qc.length];try{await Q.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},X(t,()=>n()?.state.thinkingLevel??`—`,null),t})()]}}),d),d.$$click=wt,X(d,()=>l()?`stopping runtime…`:`stop runtime`),j(t=>{var n=Q.exportHtmlUrl(e.sessionKey),i=l();return n!==t.e&&Y(r,`href`,t.e=n),i!==t.t&&(d.disabled=t.t=i),t},{e:void 0,t:void 0}),t}})]}}),null),X(c,U(G,{get when(){return q(()=>!!(!h()&&n()?.state.modelFallbackMessage))()&&!D()},get children(){var e=fc(),t=e.firstChild.firstChild;t.firstChild;var r=t.nextSibling;return X(t,()=>n().state.modelFallbackMessage,null),r.$$click=()=>O(!0),e}}),I);var ne=Ae;typeof ne==`function`?Pe(ne,I):Ae=I;var re=Me;return typeof re==`function`?Pe(re,R):Me=R,X(R,U(G,{get when(){return t()},get fallback(){return Nc()},get children(){return[U(W,{get each(){return t().widgets.above},children:e=>(()=>{var t=Pc();return X(t,e),t})()}),U(Ss,{get entries(){return t().entries},get resetKey(){return e.sessionKey}}),U(W,{get each(){return t().widgets.below},children:e=>(()=>{var t=Pc();return X(t,e),t})()})]}})),te.$$click=()=>v(!_()),X(te,()=>_()?`compose ▴`:`compose ▾`),X(ee,U(G,{get when(){return _()},get children(){var e=pc();return X(e,(()=>{var e=q(()=>!!Ue());return()=>e()?`agent working — open controls to stop or steer`:q(()=>Ht().length>0)()?`${Ht().length} queued message(s)`:`composer hidden for transcript reading`})()),e}}),null),X(z,U(G,{get when(){return!_()},get children(){var n=Ec(),c=n.firstChild,l=c.firstChild,u=l.nextSibling,d=u.firstChild,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling;X(n,U(G,{get when(){return kt().length>0},get children(){var e=mc(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;r.nextSibling;var i=t.nextSibling;return X(t,At,n),X(t,()=>kt().length,r),X(i,U(W,{get each(){return kt()},children:e=>(()=>{var t=Fc(),n=t.firstChild;return X(t,(()=>{var t=q(()=>e.status===`completed`);return()=>t()?`☑`:e.status===`in_progress`?`⧖`:`☐`})(),n),X(t,()=>e.title,null),j(n=>{var r=e.status===`completed`,i=e.status===`in_progress`;return r!==n.e&&t.classList.toggle(`done`,n.e=r),i!==n.t&&t.classList.toggle(`active`,n.t=i),n},{e:void 0,t:void 0}),t})()})),j(()=>e.open=!Mt()),e}}),c),X(n,U(G,{get when(){return Dt().length+Ot().length>0},get children(){var t=gc(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,n.$$click=()=>b(!y()),X(n,()=>y()?`subagents ▴`:`subagents ▾`),X(r,()=>Dt().length,i),X(r,()=>Ot().length,a),X(t,U(G,{get when(){return y()},get children(){return hc()}}),null),X(t,U(G,{get when(){return!y()},get children(){return U(W,{get each(){return[...Dt(),...Ot()].slice(0,4)},children:t=>(()=>{var n=Ic(),r=n.firstChild,i=r.nextSibling,a=i.firstChild;return n.$$click=()=>e.store.navigate({screen:`subagent`,key:e.sessionKey,agentId:t.agentId}),X(r,(()=>{var e=q(()=>t.status===`running`);return()=>e()?`●`:t.status===`completed`?`✓`:`✕`})()),X(i,()=>t.agentType,a),X(i,()=>t.taskSummary,null),j(()=>je(r,t.status===`running`?`live`:`done`)),n})()})}}),null),j(e=>{var r=!!y(),i=y()?`show subagents`:`hide subagents`;return r!==e.e&&t.classList.toggle(`collapsed`,e.e=r),i!==e.t&&Y(n,`title`,e.t=i),e},{e:void 0,t:void 0}),t}}),c),X(n,U(G,{get when(){return Ue()||(t()?.statusEntries.length??0)>0||A()},get children(){var e=bc();return X(e,U(G,{get when(){return ze()},get children(){var e=_c();return e.firstChild,X(e,(()=>{var e=q(()=>!!t()?.workingText);return()=>e()?` — ${t().workingText}`:``})(),null),X(e,(()=>{var e=q(()=>F()>2);return()=>e()?` (${F()}s)`:``})(),null),e}}),null),X(e,U(W,{get each(){return t()?.statusEntries??[]},children:e=>(()=>{var t=Ac();return X(t,()=>e.text,null),X(t,U(G,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=Lc();return t.$$click=()=>Tt(e.key),t}}),null),j(()=>je(t,e.tone===`info`?`queued`:e.tone)),t})()}),null),X(e,U(G,{get when(){return A()},get children(){var e=vc();return X(e,A),e}}),null),X(e,U(G,{get when(){return Ue()},get children(){var e=yc();return e.$$click=Ct,X(e,()=>s()?`stopping…`:`■ stop`),j(()=>e.disabled=s()),e}}),null),e}}),c),X(c,U(G,{get when(){return Ht().length>0},get children(){var e=xc(),t=e.firstChild;return X(e,U(W,{get each(){return Ht()},children:e=>(()=>{var t=Rc(),n=t.firstChild;return X(n,()=>e.kind),X(t,()=>e.text,null),j(()=>Y(t,`title`,e.text)),t})()}),t),t.$$click=lt,e}}),l),X(c,U(G,{get when(){return ve().length>0||ge().length>0},get children(){var e=Sc();return X(e,U(W,{get each(){return ve()},children:(e,t)=>(()=>{var n=zc(),r=n.firstChild;r.firstChild;var i=r.nextSibling,a=i.nextSibling;return X(r,()=>e.fileName,null),X(i,()=>rl(e.size)),a.$$click=()=>ye(e=>e.filter((e,n)=>n!==t())),j(()=>Y(n,`title`,e.path)),n})()}),null),X(e,U(W,{get each(){return ge()},children:(e,t)=>(()=>{var n=Bc(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>et(t()),j(t=>{var i=`${e.fileName} (${rl(e.size)})`,a=e.previewUrl,o=e.fileName;return i!==t.e&&Y(n,`title`,t.e=i),a!==t.t&&Y(r,`src`,t.t=a),o!==t.a&&Y(r,`alt`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),n})()}),null),e}}),l),X(c,U(G,{get when(){return Gt()},get children(){var e=Cc();return X(e,U(W,{get each(){return Wt()},children:(e,t)=>(()=>{var n=Hc(),r=n.firstChild;r.firstChild;var i=r.nextSibling;return n.$$click=()=>Kt(e),n.addEventListener(`mouseenter`,()=>le(t())),X(r,()=>e.name,null),X(n,U(G,{get when(){return e.description},get children(){var t=Vc();return X(t,()=>e.description),t}}),i),X(i,()=>e.source),j(e=>{var r=`command-option-${t()}`,i=ce()===t(),a=ce()===t();return r!==e.e&&Y(n,`id`,e.e=r),i!==e.t&&Y(n,`aria-selected`,e.t=i),a!==e.a&&n.classList.toggle(`selected`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),n})()})),e}}),l),l.$$keydown=t=>{if(Gt()){if(t.key===`ArrowDown`){t.preventDefault(),le((ce()+1)%Wt().length);return}if(t.key===`ArrowUp`){t.preventDefault(),le((ce()-1+Wt().length)%Wt().length);return}if(t.key===`Tab`||t.key===`Enter`&&!t.shiftKey&&!Mt()){t.preventDefault();let e=Wt()[ce()];e&&Kt(e);return}if(t.key===`Escape`){t.preventDefault(),H(!0);return}}if((t.key===`ArrowUp`||t.key===`ArrowDown`)&&(r()===``||be()!==void 0)){let n=Os(e.sessionKey);if(n.length>0){if(t.preventDefault(),t.key===`ArrowUp`){let e=be()===void 0?n.length-1:Math.max(0,be()-1);xe(e),i(n[e]??``)}else if(be()!==void 0){let e=be()+1;e>=n.length?(xe(void 0),i(``)):(xe(e),i(n[e]??``))}}return}t.key===`Enter`&&!t.shiftKey&&!Mt()&&(t.preventDefault(),St())},l.$$input=e=>{H(!1),le(0),xe(void 0),i(e.currentTarget.value),ol(e.currentTarget)},l.addEventListener(`paste`,e=>{let t=[...e.clipboardData?.items??[]].filter(e=>e.type.startsWith(`image/`)).map(e=>e.getAsFile()).filter(e=>!!e);t.length>0&&(e.preventDefault(),dt(t))});var g=Ne;typeof g==`function`?Pe(g,l):Ne=l,d.addEventListener(`change`,e=>{pt(e.currentTarget.files??[]),e.currentTarget.value=``});var _=Fe;typeof _==`function`?Pe(_,d):Fe=d,f.addEventListener(`change`,e=>{dt(e.currentTarget.files??[]),e.currentTarget.value=``});var v=Ie;return typeof v==`function`?Pe(v,f):Ie=f,p.$$click=()=>Fe?.click(),m.$$click=()=>Ie?.click(),X(u,U(G,{get when(){return ze()},get children(){var e=wc(),t=e.firstChild,n=t.nextSibling;return t.$$click=()=>o(`steer`),n.$$click=()=>o(`follow_up`),j(e=>{var r=a()===`steer`,i=a()===`follow_up`;return r!==e.e&&t.classList.toggle(`selected`,e.e=r),i!==e.t&&n.classList.toggle(`selected`,e.t=i),e},{e:void 0,t:void 0}),e}}),h),X(u,U(G,{get when(){return t()?.suggestedCommand},get children(){var e=Tc(),n=e.firstChild.nextSibling;return e.$$click=()=>i(t().suggestedCommand),X(n,()=>t().suggestedCommand),e}}),h),h.$$click=St,j(e=>{var t=ze()?`Message dreb — sends as steer while it works…`:`Message dreb…`,n=Gt()?`command-listbox`:void 0,r=Gt()?`command-option-${ce()}`:void 0;return t!==e.e&&Y(l,`placeholder`,e.e=t),n!==e.t&&Y(l,`aria-controls`,e.t=n),r!==e.a&&Y(l,`aria-activedescendant`,e.a=r),e},{e:void 0,t:void 0,a:void 0}),j(()=>l.value=r()),n}}),null),X(c,U(G,{get when(){return t()?.uiRequests[0]},children:t=>U(sl,{get request(){return t()},onRespond:async t=>{try{await Q.extensionUiResponse(e.sessionKey,t)}catch(e){P(e instanceof Error?e.message:String(e))}}})}),null),X(c,U(G,{get when(){return d()},get children(){return U(ll,{get sessionKey(){return e.sessionKey},get state(){return n()?.state},onClose:()=>f(!1),onSelected:()=>e.store.refreshFleet()})}}),null),X(c,U(G,{get when(){return x()},get children(){return U(nt,{title:`compact context`,onDismiss:()=>S(!1),get actions(){return[(()=>{var e=Fs();return e.$$click=()=>S(!1),e})(),(()=>{var t=Uc();return t.$$click=async()=>{S(!1);try{await Q.compact(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}},t})()]},get children(){return Dc()}})}}),null),X(c,U(G,{get when(){return T()},get children(){return U(cl,{get resources(){return ue()},get error(){return fe()},onClose:()=>E(!1)})}}),null),X(c,U(G,{get when(){return Se()},get children(){return U(nt,{title:`fork from message`,onDismiss:()=>Ce(!1),get children(){return[U(G,{get when(){return Ee()},get children(){var e=Hs();return X(e,Ee),e}}),U(G,{get when(){return we().length>0},get fallback(){return Wc()},get children(){var e=Oc();return X(e,U(W,{get each(){return we()},children:e=>(()=>{var t=Gc(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>ht(e.entryId),X(n,()=>e.entryId),X(r,()=>e.text),t})()})),e}})]}})}}),null),X(c,U(G,{get when(){return C()},get children(){return U(dl,{get current(){return Nt()??``},onClose:()=>w(!1),onRename:async t=>{try{await Q.rename(e.sessionKey,t),await e.store.refreshFleet(),w(!1)}catch(e){P(e instanceof Error?e.message:String(e))}}})}}),null),j(e=>{var t=!!h(),n=h()?`show session details`:`hide session details`,r=!!_(),i=_()?`show composer and controls`:`hide composer and controls`;return t!==e.e&&u.classList.toggle(`collapsed`,e.e=t),n!==e.t&&Y(N,`title`,e.t=n),r!==e.a&&z.classList.toggle(`collapsed`,e.a=r),i!==e.o&&Y(te,`title`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}function dl(e){let[t,n]=k(e.current);return U(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=Fs();return Me(t,`click`,e.onClose,!0),t})(),(()=>{var n=Kc();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=Ns(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Ae([`input`,`click`,`keydown`]);var fl=J(`<select><option value=on>on</option><option value=off>off`),pl=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),ml=J(`<div class=model-list style=max-height:320px>`),hl=J(`<p class="muted small">No matching models.`),gl=J(`<section class=model-provider-group><div class=model-provider-heading>`),_l=J(`<span class=model-name>`),vl=J(`<span class=model-reasoning>think`),yl=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),bl=J(`<div class=settings-error>`),xl=J(`<div class=settings-warning>`),Sl=J(`<p class="muted small"style=margin-bottom:16px>✓ saved`),Cl=J(`<div class=setting-row><span class=setting-label><span class=name>pairing code</span><span class=hint>new devices enter this in the pairing screen; it rotates every 30s</span></span><span class=setting-control><code style=font-size:var(--fs-h2);letter-spacing:0.08em>`),wl=J(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow &lt;identity&gt;</code> to enable Tailscale access.`),Tl=J(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),El=J(`<div class=screen-fill><main class="container settings-wrap"><h1>settings</h1><p class=settings-intro>Ordinary defaults apply only to new sessions. Context trust changes apply to subsequent lazy loads in live sessions; already injected content cannot be retracted. Writes go to the global settings file on the host.</p><section class=settings-section><h2>dashboard</h2><div class=setting-row><span class=setting-label><span class=name>always expand thinking</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control><label class=checkbox-control><input id=pref-expand-thinking type=checkbox><span>open by default</span></label></span></div><div class=setting-row><span class=setting-label><span class=name>auto-expand tool cards</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control style=display:grid;gap:6px></span></div><div class=setting-row><span class=setting-label><span class=name>needs-attention notifications</span><span class=hint></span></span><span class=setting-control><label class=checkbox-control><input id=pref-notifications type=checkbox><span></span></label></span></div><div class=setting-row><span class=setting-label><span class=name>restart dashboard service</span><span class=hint></span></span><span class=setting-control><button type=button class="btn btn-small btn-danger"></button></span></div></section><section class=settings-section><h2>devices</h2><div class=device-row><span>this machine <span class=this-device></span></span><span class=meta>local · always allowed</span></div></section><footer>dreb<!> · dashboard`),Dl=J(`<div>`),Ol=J(`<p class=muted>`),kl=J(`<section class=settings-section><h2>model</h2><div class=setting-row><span class=setting-label><span class=name>default model</span><span class=hint>used by new sessions; validated against configured providers</span></span><span class=setting-control><button type=button class="btn btn-small model-picker-button"></button></span></div><div class=setting-row><span class=setting-label><span class=name>default thinking level</span><span class=hint></span></span><span class=setting-control><select></select></span></div><div class=setting-row><span class=setting-label><span class=name>transport</span><span class=hint>preferred model transport for new sessions</span></span><span class=setting-control><select>`),Al=J(`<div class="setting-row agent-context-row"><span class=setting-label><span class=name>agent definition context</span><span class=hint>choose a project to include its .dreb/agents definitions</span></span><span class=setting-control><select><option value>global/home only`),jl=J(`<section class=settings-section><h2>agent models</h2><p class="muted small"style=margin-bottom:8px>Per-agent fallback lists. First available model wins; empty lists revert to the default model. Agent definitions are loaded from an explicit project context so project-local agents do not depend on which runtime opened first.`),Ml=J(`<section class=settings-section><h2>images</h2><div class=setting-row><span class=setting-label><span class=name>auto-resize images</span><span class=hint>resize image inputs before sending them to providers</span></span><span class=setting-control></span></div><div class=setting-row><span class=setting-label><span class=name>block images</span><span class=hint>prevent image inputs from being sent to providers</span></span><span class=setting-control>`),Nl=J(`<section class=settings-section><h2>queueing</h2><div class=setting-row><span class=setting-label><span class=name>steering delivery</span><span class=hint>deliver queued steers all at once, or one per turn</span></span><span class=setting-control><select></select></span></div><div class=setting-row><span class=setting-label><span class=name>follow-up delivery</span><span class=hint>deliver queued follow-ups all at once, or one per turn</span></span><span class=setting-control><select>`),Pl=J(`<section class=settings-section><h2>behavior</h2><div class=setting-row><span class=setting-label><span class=name>skill slash commands</span><span class=hint>register skills as slash commands in new sessions</span></span><span class=setting-control></span></div><div class=context-trust-subsection><h3>trusted context folders</h3><p class="muted small">Specific global roots that may lazy-load nested AGENTS.md/CLAUDE.md and all descendants.</p><div class="settings-warning context-trust-global-warning"><strong>Global-only policy.</strong> Project <code>.dreb/settings.json</code> cannot enable, disable, or extend nested-context trust. Only these global settings and the Files view can; a cloned repository cannot grant itself trust.</div><form class=trusted-context-folder-add><label for=trusted-context-folder-path>add folder by path</label><input id=trusted-context-folder-path type=text placeholder=/path/to/project><button type=submit class="btn btn-small"></button></form></div><div class=setting-row><span class=setting-label><span class=name>global expert nested-context trust</span><span class=hint>allow nested AGENTS.md/CLAUDE.md from any resolvable directory</span></span><span class=setting-control></span></div><div class="settings-warning context-expert-warning"><strong>Expert global override.</strong> Project <code>.dreb/settings.json</code> cannot enable, disable, or extend nested-context trust; a cloned repository cannot grant itself trust. When ON, nested instructions from any resolvable directory may load, including untrusted prompt-injection content. Leave this OFF and use trusted folders for projects you control.</div><div class=setting-row><span class=setting-label><span class=name>hide thinking blocks</span><span class=hint>hide raw thinking blocks in rendered transcripts</span></span><span class=setting-control>`),Fl=J(`<section class=settings-section><h2>reliability</h2><div class=setting-row><span class=setting-label><span class=name>auto-compaction</span><span class=hint>summarize old context when the window fills</span></span><span class=setting-control></span></div><div class=setting-row><span class=setting-label><span class=name>auto-retry</span><span class=hint>retry transient stream errors (rate limits, 5xx)</span></span><span class=setting-control>`),Il=J(`<p class="muted small settings-footnote">TUI-only settings (theme, cursor, editor) are managed in the terminal /settings menu.`),Ll=J(`<option>`),Rl=J(`<p class="muted small">No agent definitions found.`),zl=J(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),Bl=J(`<div class=agent-model-row><div class=agent-model-summary><span class=agent-model-name></span><span class=agent-model-description></span></div><div class=agent-model-fallbacks></div><button type=button class="btn btn-small agent-model-edit">`),Vl=J(`<span class="muted small">default`),Hl=J(`<span class=agent-model-chip>. `),Ul=J(`<p class="muted small">Using the default model.`),Wl=J(`<div class=agent-model-entry><span></span><div class=agent-model-entry-actions><button type=button class="btn btn-small">↑</button><button type=button class="btn btn-small">↓</button><button type=button class="btn btn-small">×`),Gl=J(`<p class="muted small trusted-context-empty">No trusted folders. Use the Files view to trust a project folder and its descendants.`),Kl=J(`<div class=trusted-context-folder-row><code></code><span class=meta>and all descendants</span><button type=button class="btn btn-small btn-danger">`),ql=J(`<label class=checkbox-control><input type=checkbox><span>`),Jl=J(`<div class=device-row><span></span><span class=meta> · paired </span><span class=actions><button type=button class="btn btn-small btn-danger">unpair`),Yl=J(`<button type=button class="btn btn-small">cancel`),Xl=J(`<button type=button class="btn btn-small btn-danger">restart`),Zl=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Ql=[`all`,`one-at-a-time`],$l=[`sse`,`websocket`,`auto`];function eu(e){return`${e.provider}/${e.id}`}function tu(e){let t=eu(e);return e.name?`${t} — ${e.name}`:t}function nu(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function ru(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function iu(){if(typeof Notification>`u`){if(window.isSecureContext===!1)return`insecure`;let e=/iPad|iPhone|iPod/.test(navigator.userAgent),t=navigator.standalone===!0||window.matchMedia?.(`(display-mode: standalone)`)?.matches===!0;return e&&!t?`ios-install`:`unsupported`}return Notification.permission}function au(e){let t=new Map;for(let n of e){let e=t.get(n.provider)??[];e.push(n),t.set(n.provider,e)}return[...t.entries()].map(([e,t])=>({provider:e,models:t}))}function ou(e,t,n){let r=t+n;if(r<0||r>=e.length)return e;let i=[...e];return[i[t],i[r]]=[i[r],i[t]],i}function su(e){return(()=>{var t=fl();return t.addEventListener(`change`,t=>e.onChange(t.currentTarget.value===`on`)),j(()=>t.value=e.value?`on`:`off`),t})()}function cu(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return au(e.models.filter(e=>!n||ru(e,n)).slice(0,100))}),a=e=>r().has(eu(e));return U(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=pl(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=ml();return X(t,U(G,{get when(){return i().length>0},get fallback(){return hl()},get children(){return U(W,{get each(){return i()},children:t=>(()=>{var n=gl(),r=n.firstChild;return X(r,()=>t.provider),X(n,U(W,{get each(){return t.models},children:t=>(()=>{var n=yl(),r=n.firstChild,i=r.nextSibling,o=i.nextSibling;return n.$$click=()=>e.onPick(t),X(r,()=>a(t)?`✓`:``),X(i,()=>t.id),X(n,U(G,{get when(){return t.name},get children(){var e=_l();return X(e,()=>t.name),e}}),o),X(o,()=>t.provider),X(n,U(G,{get when(){return t.reasoning},get children(){return vl()}}),null),j(e=>{var r=!!a(t),i=tu(t);return r!==e.e&&n.classList.toggle(`current`,e.e=r),i!==e.t&&Y(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),n})()})}})),t})()]}})}function lu(e){let[t,n]=k(),[r,i]=k([]),[a,o]=k(!1),[s,c]=k(),[l,u]=k(),[d,f]=k(),[p,m]=k(``),[h,g]=k(!1),[_,v]=k(iu()),[y,{mutate:b,refetch:x}]=F(async()=>{n(void 0);try{return await Q.settings()}catch(e){n(e instanceof Error?e.message:String(e));return}}),[S]=F(y,async()=>{try{let{models:e}=await Q.settingsModels();return e}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),C=N(()=>{let t=new Set;for(let n of e.store.fleet().runtimes)t.add(n.cwd);for(let n of e.store.fleet().diskSessions)t.add(n.cwd);return[...t].sort((e,t)=>e.localeCompare(t))}),[w]=F(()=>({settings:y(),cwd:d()}),async({cwd:e})=>{if(!y())return[];try{let{agentTypes:t}=await Q.agentTypes(e);return t}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),[T,{refetch:E}]=F(async()=>{let{devices:e}=await Q.devices();return e}),[D,O]=k(),A;function M(){A&&clearTimeout(A),A=void 0}function P(e){M();let t=Math.max(250,e??3e4)+100;A=setTimeout(()=>void I(),t)}async function I(){try{let e=await Q.pairingCode();if(!e.enabled||!e.code){O(void 0),M();return}O(e),P(e.expiresInMs)}catch(e){console.warn(`pairing code unavailable`,e),O(void 0),M()}}let[L]=F(async()=>{try{let{version:e}=await Q.version();return e}catch{return}}),[ee]=F(async()=>{try{return await Q.serverInfo()}catch{return}}),[te,ne]=k(!1),[re,ie]=k(!1),[ae,B]=k();async function oe(){B(void 0),ie(!0);try{await Q.restartServer()}catch(e){B(e instanceof Error?e.message:String(e)),ie(!1)}}async function V(e){n(void 0),i([]),o(!1);try{let t=await Q.saveSettings(e);b(t),i(t.warnings??[]),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){n(e instanceof Error?e.message:String(e)),await x()}}async function se(e,t){await V({agentModels:{[e]:t}})}async function H(e){n(void 0),g(!0);try{let t=await Q.trustContextFolder(e);b(t.settings),m(``)}catch(e){n(e instanceof Error?e.message:String(e))}finally{g(!1)}}async function ce(e){n(void 0),g(!0);try{let t=await Q.removeTrustedContextFolder(e);b(t.settings)}catch(e){n(e instanceof Error?e.message:String(e))}finally{g(!1)}}function le(e){return y()?.agentModels?.[e]??[]}async function ue(){typeof Notification>`u`||v(await Notification.requestPermission())}R(()=>void I()),z(M);let de=()=>e.store.auth();return(()=>{var n=El(),i=n.firstChild,o=i.firstChild.nextSibling.nextSibling,g=o.firstChild.nextSibling,v=g.firstChild.nextSibling.firstChild.firstChild,b=g.nextSibling,x=b.firstChild.nextSibling,O=b.nextSibling,k=O.firstChild,A=k.firstChild.nextSibling,M=k.nextSibling.firstChild.firstChild,N=M.nextSibling,P=O.nextSibling.firstChild,F=P.firstChild.nextSibling,I=P.nextSibling.firstChild,R=o.nextSibling,z=R.firstChild.nextSibling.firstChild.firstChild.nextSibling,ie=R.nextSibling,B=ie.firstChild.nextSibling;return B.nextSibling,X(n,U(et,{get store(){return e.store},active:`settings`}),i),X(i,U(G,{get when(){return t()},get children(){var e=bl();return X(e,t),e}}),o),X(i,U(G,{get when(){return r().length>0},get children(){var e=xl();return X(e,U(W,{get each(){return r()},children:e=>(()=>{var t=Dl();return X(t,e),t})()})),e}}),o),X(i,U(G,{get when(){return a()},get children(){return Sl()}}),o),X(i,U(G,{get when(){return y()},get fallback(){return(()=>{var e=Ol();return X(e,()=>t()?`Settings could not be loaded — see the error above.`:`Loading settings…`),e})()},children:e=>[(()=>{var t=kl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling,a=i.firstChild,o=a.firstChild.nextSibling,s=a.nextSibling.firstChild,l=i.nextSibling.firstChild.nextSibling.firstChild;return r.$$click=()=>c({kind:`default`}),X(r,()=>nu(e())),X(o,()=>Zl.join(` · `)),s.addEventListener(`change`,e=>V({defaultThinkingLevel:e.currentTarget.value})),X(s,U(W,{each:Zl,children:e=>(()=>{var t=Ll();return t.value=e,X(t,e),t})()})),l.addEventListener(`change`,e=>V({transport:e.currentTarget.value})),X(l,U(W,{get each(){return[...$l]},children:e=>(()=>{var t=Ll();return t.value=e,X(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=jl();return t.firstChild.nextSibling,X(t,U(G,{get when(){return C().length>0},get children(){var e=Al(),t=e.firstChild.nextSibling.firstChild;return t.firstChild,t.addEventListener(`change`,e=>f(e.currentTarget.value||void 0)),X(t,U(W,{get each(){return C()},children:e=>(()=>{var t=Ll();return t.value=e,X(t,e),t})()}),null),j(()=>t.value=d()??``),e}}),null),X(t,U(G,{get when(){return(w()??[]).length>0},get fallback(){return Rl()},get children(){return U(W,{get each(){return w()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=Bl(),r=e.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling,s=o.nextSibling;return X(i,()=>t.name),X(a,()=>t.description),X(o,U(G,{get when(){return n().length>0},get fallback(){return Vl()},get children(){return U(W,{get each(){return n()},children:(e,t)=>(()=>{var n=Hl(),r=n.firstChild;return X(n,()=>t()+1,r),X(n,e,null),n})()})}})),s.$$click=()=>u(l()===t.name?void 0:t.name),X(s,()=>l()===t.name?`done`:`edit`),X(e,U(G,{get when(){return l()===t.name},get children(){var e=zl(),r=e.firstChild;return X(e,U(G,{get when(){return n().length>0},get fallback(){return Ul()},get children(){return U(W,{get each(){return n()},children:(e,r)=>(()=>{var i=Wl(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return X(a,e),o.$$click=()=>void se(t.name,ou(n(),r(),-1)),s.$$click=()=>void se(t.name,ou(n(),r(),1)),c.$$click=()=>void se(t.name,n().filter((e,t)=>t!==r())),j(e=>{var t=r()===0,i=r()===n().length-1;return t!==e.e&&(o.disabled=e.e=t),i!==e.t&&(s.disabled=e.t=i),e},{e:void 0,t:void 0}),i})()})}}),r),r.$$click=()=>c({kind:`agent`,agentName:t.name}),e}}),null),e})()}})}}),null),t})(),(()=>{var t=Ml(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(su,{get value(){return e().imageAutoResize!==!1},onChange:e=>V({imageAutoResize:e})})),X(i,U(su,{get value(){return e().blockImages===!0},onChange:e=>V({blockImages:e})})),t})(),(()=>{var t=Nl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling.firstChild.nextSibling.firstChild;return r.addEventListener(`change`,e=>V({steeringMode:e.currentTarget.value})),X(r,U(W,{get each(){return[...Ql]},children:e=>(()=>{var t=Ll();return t.value=e,X(t,e),t})()})),i.addEventListener(`change`,e=>V({followUpMode:e.currentTarget.value})),X(i,U(W,{get each(){return[...Ql]},children:e=>(()=>{var t=Ll();return t.value=e,X(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=Pl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling.nextSibling.nextSibling,o=a.firstChild.nextSibling,s=o.nextSibling,c=i.nextSibling,l=c.firstChild.nextSibling,u=c.nextSibling.nextSibling.firstChild.nextSibling;return X(r,U(su,{get value(){return e().enableSkillCommands!==!1},onChange:e=>V({enableSkillCommands:e})})),X(i,U(G,{get when(){return(e().trustedContextFolders??[]).length>0},get fallback(){return Gl()},get children(){return U(W,{get each(){return e().trustedContextFolders??[]},children:e=>(()=>{var t=Kl(),n=t.firstChild,r=n.nextSibling.nextSibling;return X(n,e),r.$$click=()=>void ce(e),X(r,()=>h()?`revoking…`:`revoke trust`),j(()=>r.disabled=h()),t})()})}}),a),a.addEventListener(`submit`,e=>{e.preventDefault();let t=p().trim();t&&H(t)}),o.$$input=e=>m(e.currentTarget.value),X(s,()=>h()?`trusting…`:`trust folder`),X(l,U(su,{get value(){return e().autoLoadNestedContext===!0},onChange:e=>V({autoLoadNestedContext:e})})),X(u,U(su,{get value(){return e().hideThinkingBlock===!0},onChange:e=>V({hideThinkingBlock:e})})),j(()=>s.disabled=h()||!p().trim()),j(()=>o.value=p()),t})(),(()=>{var t=Fl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(su,{get value(){return e().compactionEnabled!==!1},onChange:e=>V({compactionEnabled:e})})),X(i,U(su,{get value(){return e().retryEnabled!==!1},onChange:e=>V({retryEnabled:e})})),t})(),Il()]}),o),v.addEventListener(`change`,e=>bo(e.currentTarget.checked)),X(x,U(W,{each:oo,children:e=>(()=>{var t=ql(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>xo(e,t.currentTarget.checked)),Y(n,`id`,`pref-tool-expand-${e}`),X(r,e),j(()=>n.checked=So(e)),t})()})),X(A,(()=>{var e=q(()=>_()===`denied`);return()=>e()?`blocked by browser settings — re-enable notifications in site permissions`:q(()=>_()===`insecure`)()?`this page is not a secure context — notifications need HTTPS. Run the server with --https (tailscale cert <host>.<tailnet>.ts.net) and open it via the https:// hostname`:q(()=>_()===`ios-install`)()?`iOS notifications need the installed PWA — tap Share → Add to Home Screen, then open dreb from the home screen icon`:_()===`unsupported`?`browser notifications are unavailable in this environment`:`show a notification when the tab needs input (Android/desktop need the app installed on mobile; works over HTTPS or localhost)`})()),M.addEventListener(`change`,e=>{e.currentTarget.checked&&ue()}),X(N,()=>_()===`granted`?`enabled`:`enable notifications`),X(F,()=>ee()?.supervised?`restarts the server process (a supervisor respawns it with the latest build) — kills all running sessions`:`exits the server process — only auto-restarts if run under a supervisor (systemd, pm2, …); otherwise the dashboard goes down. kills all running sessions`),I.$$click=()=>ne(!0),X(I,()=>re()?`restarting…`:`restart`),X(o,U(G,{get when(){return ae()},get children(){var e=bl();return X(e,ae),e}}),null),X(z,()=>de()?.mode===`local`?`local`:`host`),X(R,U(G,{get when(){return q(()=>!!D()?.enabled)()&&D()?.code},get children(){var e=Cl(),t=e.firstChild.nextSibling.firstChild;return X(t,()=>D().code),e}}),null),X(R,U(W,{get each(){return T()??[]},children:e=>(()=>{var t=Jl(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=r.nextSibling.firstChild;return X(n,()=>e.device??e.id),X(r,()=>e.identity,i),X(r,()=>it(e.createdAt),null),a.$$click=async()=>{await Q.unpair(e.id),await E()},t})()}),null),X(R,U(G,{get when(){return(T()??[]).length===0},get children(){return wl()}}),null),X(ie,(()=>{var e=q(()=>!!ee()?.version);return()=>e()?` v${ee().version}`:q(()=>!!L())()?` v${L()}`:``})(),B),X(ie,U(G,{get when(){return ee()?.startedAt},get children(){return[` · server build, up `,q(()=>it(ee().startedAt))]}}),null),X(n,U(G,{get when(){return te()},get children(){return U(nt,{title:`restart dashboard service?`,onDismiss:()=>ne(!1),get actions(){return[(()=>{var e=Yl();return e.$$click=()=>ne(!1),e})(),(()=>{var e=Xl();return e.$$click=()=>{ne(!1),oe()},e})()]},get children(){var e=Tl();return e.firstChild.nextSibling.nextSibling,X(e,()=>ee()?.supervised?` A supervisor is detected — the server should respawn automatically with the latest build.`:` No supervisor was detected — the dashboard will NOT come back on its own; you'll need to relaunch it manually.`,null),e}})}}),null),X(n,U(G,{get when(){return s()},children:e=>{let t=()=>{let t=e();return t.kind==="default"?`select default model`:`add model for ${t.agentName}`},n=()=>{let t=e();return t.kind==="default"?y()?.defaultProvider&&y()?.defaultModel?[`${y().defaultProvider}/${y().defaultModel}`]:[]:le(t.agentName)};return U(cu,{get title(){return t()},get models(){return S()??[]},get selected(){return n()},onClose:()=>c(void 0),onPick:t=>{let n=e();if(c(void 0),n.kind==="default"){V({defaultProvider:t.provider,defaultModel:t.id});return}let r=eu(t),i=le(n.agentName);i.includes(r)||se(n.agentName,[...i,r])}})}}),null),j(e=>{var t=_()===`denied`||_()===`unsupported`||_()===`ios-install`||_()===`insecure`,n=re();return t!==e.e&&(M.disabled=e.e=t),n!==e.t&&(I.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>v.checked=yo()),j(()=>M.checked=_()===`granted`),n})()}Ae([`input`,`click`]);var uu=J(`<p class=pair-error>`),du=J(`<div class=status-line><span class=working>● working`),fu=J(`<div class=session-screen><header class=session-bar><div class=session-bar-inner><a class=back>← </a><span class=agent-type>subagent · </span><span class=title></span><span class=right></span></div></header><main class=chat><div class=chat-inner></div></main><footer class=dock><div class=dock-inner><div class=readonly-note>viewing live — subagents can't be steered yet; the parent session controls this agent.`),pu=J(`<p class=muted>`);function mu(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>t()?.backgroundAgents[e.agentId]),r=()=>t()?.subagents[e.agentId],i=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),a=()=>i()?.state.sessionName??e.sessionKey,[o,s]=k(),c,l,u=to({scroller:()=>c});return R(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&Cs(e)||s(e instanceof Error?e.message:String(e))}),z(()=>t.abort())}),M(()=>{e.store.revisions[e.sessionKey],u.notifyContentChanged()}),R(()=>{u.observeContent(l),u.observeViewport(c),c&&z(ro(u,c,{keyboard:`window`}))}),z(()=>u.dispose()),(()=>{var t=fu(),i=t.firstChild,s=i.firstChild.firstChild;s.firstChild;var u=s.nextSibling;u.firstChild;var d=u.nextSibling,f=d.nextSibling,p=i.nextSibling,m=p.firstChild,h=p.nextSibling.firstChild,g=h.firstChild;X(s,a,null),X(u,()=>n()?.agentType??`unknown`,null),X(d,()=>n()?.taskSummary??e.agentId),X(f,U(G,{get when(){return n()?.status===`running`},get fallback(){return U(Qe,{get status(){return n()?.status===`failed`?`error`:`idle`},get label(){return n()?.status}})},get children(){return U(Qe,{status:`running`})}}));var _=c;typeof _==`function`?Pe(_,p):c=p;var v=l;return typeof v==`function`?Pe(v,m):l=m,X(m,U(G,{get when(){return o()},get children(){var e=uu();return X(e,o),e}}),null),X(m,U(G,{get when(){return q(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=pu();return X(e,()=>n()?`waiting for output from this agent…`:`no data for this agent — it may not have started writing its session log yet.`),e})()},get children(){return U(Ss,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`}})}}),null),X(h,U(G,{get when(){return r()?.streaming},get children(){return du()}}),g),j(()=>Y(s,`href`,`#/session/${e.sessionKey}`)),t})()}function hu(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}function gu(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
75
- `):``}function _u(e,t){let n=e.match(/<background-agent-complete>\n?([\s\S]*?)\n?<\/background-agent-complete>/)?.[1]?.trim();if(!n)return;let r=n.split(`
74
+ `)}async function St(){let t=r().trim();if(!t&&ve().length===0&&ge().length===0)return;let n=xt(t||`Please review the attached item(s). `);P(void 0);try{let t=ge(),r=t.length>0?await Promise.all(t.map(async({blob:e,mimeType:t})=>({data:await Ze(e),mimeType:t}))):void 0;ze()?await Q.prompt(e.sessionKey,n,a(),r):r?await Q.prompt(e.sessionKey,n,void 0,r):await Q.prompt(e.sessionKey,n),ks(e.sessionKey,n),xe(void 0),i(``),$e(),ye([]),Je()}catch(e){P(e instanceof Error?e.message:String(e))}}async function Ct(){c(!0);try{await Q.abort(e.sessionKey),await lt(),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}finally{c(!1)}}async function wt(){if(!l()){u(!0),P(void 0);try{await Q.stopRuntime(e.sessionKey),e.store.navigate({screen:`fleet`})}catch(e){P(e instanceof Error?e.message:String(e))}finally{u(!1)}}}async function Tt(t){try{t===`compaction`?await Q.abortCompaction(e.sessionKey):t===`retry`&&await Q.abortRetry(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}}function Et(e){Ae?.querySelectorAll(`details.tool`).forEach(t=>{t.open=e})}let Dt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status===`running`),Ot=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status!==`running`),kt=()=>t()?.tasks??[],At=()=>kt().filter(e=>e.status===`completed`).length,jt=()=>n()?.state.contextUsage??L()?.contextUsage,Mt=()=>typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 700px)`).matches,Nt=()=>t()?.sessionName??n()?.state.sessionName,Pt=()=>Nt()??t()?.title??e.sessionKey,Ft=()=>{let e=n()?.cwd;if(!e)return;let t=re();return`${$c(e)}${t?` (${t})`:``}`},It=()=>{let e=Ft(),t=Nt();return e&&t?`${e} • ${t}`:e??t??`session`},Lt=()=>{let e=L()?.tokens;if(!e)return;let t=[];return e.input&&t.push(`↑${Qc(e.input)}`),e.output&&t.push(`↓${Qc(e.output)}`),e.cacheRead&&t.push(`R${Qc(e.cacheRead)}`),e.cacheWrite&&t.push(`W${Qc(e.cacheWrite)}`),t.length>0?t.join(` `):void 0},Rt=()=>{let e=L()?.cost??0,t=n()?.state.usingSubscription??!1;if(!e&&!t)return;let r=`$${e.toFixed(3)}${t?` (sub)`:``}`,i=ae();return i!==void 0&&i>e&&(r+=`, today: $${i.toFixed(2)}`),r},zt=()=>{let e=jt();if(e)return`ctx ${e.percent===null?`?`:`${e.percent.toFixed(0)}%`}/${Qc(e.contextWindow)}`},Bt=()=>{let e=n()?.state.model;if(!e)return;let t=te()?.models.find(t=>t.provider===e.provider&&t.modelId===e.id);if(!(!t||t.count<3))return`${Math.round(t.median)} tok/s`},Vt=()=>[Lt(),Rt(),zt(),Bt()].filter(Boolean),Ht=()=>[...(me().steeringMessages??me().steering.map(e=>({text:e}))).map(e=>({kind:`steer`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text})),...(me().followUpMessages??me().followUp.map(e=>({text:e}))).map(e=>({kind:`follow-up`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text}))],Ut=()=>{let e=r();if(se()||!e.startsWith(`/`))return;let t=e.slice(1);if(!/\s/.test(t))return t.toLowerCase()},Wt=N(()=>{let e=Ut();return e===void 0?[]:oe().filter(t=>{let n=t.name.toLowerCase();return!e||n.startsWith(e)||n.includes(e)}).sort((t,n)=>!t.name.toLowerCase().startsWith(e)-+!n.name.toLowerCase().startsWith(e)||t.name.localeCompare(n.name)).slice(0,8)}),Gt=()=>Wt().length>0,Kt=e=>{i(`/${e.name} `),H(!0),queueMicrotask(()=>Ne?.focus())};return M(()=>{let e=Wt().length;ce()>=e&&le(Math.max(0,e-1))}),(()=>{var c=kc(),u=c.firstChild,k=u.firstChild,M=k.firstChild.nextSibling,N=M.nextSibling,I=u.nextSibling,R=I.firstChild,z=I.nextSibling,ee=z.firstChild,te=ee.firstChild;X(M,Pt),X(k,U(G,{get when(){return!h()},get children(){var e=ic();return X(e,(()=>{var e=q(()=>!!n()?.cwd);return()=>e()?$c(n().cwd):void 0})()),e}}),N),X(k,U(tt,{get store(){return e.store},class:`session-connection-indicator`}),N),X(k,U(G,{get when(){return!h()},get children(){var t=oc(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling,a=r.nextSibling;a.firstChild.nextSibling;var o=a.nextSibling;return r.$$click=()=>f(!0),X(i,()=>Xc(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=qc[(qc.indexOf(t)+1)%qc.length];try{await Q.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},X(a,()=>n()?.state.thinkingLevel??`—`,null),X(t,U(G,{get when(){return jt()},get children(){var e=ac();return e.firstChild.nextSibling,X(e,(()=>{var e=q(()=>jt().percent===null);return()=>e()?`?`:`${jt().percent.toFixed(0)}%`})(),null),e}}),o),o.$$click=()=>m(!p()),j(()=>Y(r,`title`,Zc(n()?.state.model))),t}}),N),N.$$click=()=>g(!h()),X(N,()=>h()?`details ▾`:`details ▴`),X(u,U(G,{get when(){return!h()},get children(){return[(()=>{var e=cc(),t=e.firstChild,n=t.nextSibling;return X(t,It),n.$$click=gt,X(n,U(W,{get each(){return Vt()},children:e=>(()=>{var t=Ac();return X(t,e),t})()})),X(e,U(G,{get when(){return De()},get children(){var e=sc(),t=Le;return typeof t==`function`?Pe(t,e):Le=e,X(e,U(G,{get when(){return ke()},get children(){var e=Hs();return X(e,ke),e}}),null),X(e,U(G,{get when(){return L()},get fallback(){return jc()},children:e=>(()=>{var t=Mc(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling,a=i.firstChild,o=i.nextSibling.nextSibling,s=o.firstChild,c=o.nextSibling.nextSibling,l=c.firstChild,u=c.nextSibling.nextSibling,d=u.nextSibling.nextSibling;return d.firstChild,X(n,()=>e().userMessages),X(r,()=>e().assistantMessages),X(i,()=>e().toolCalls,a),X(i,()=>e().toolResults,null),X(o,()=>Qc(e().tokens.input),s),X(o,()=>Qc(e().tokens.output),null),X(c,()=>Qc(e().tokens.cacheRead),l),X(c,()=>Qc(e().tokens.cacheWrite),null),X(u,()=>Qc(e().tokens.total)),X(d,()=>e().cost.toFixed(4),null),t})()}),null),e}}),null),e})(),U(G,{get when(){return p()},get children(){var t=dc(),r=t.firstChild,i=r.nextSibling,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,u=c.nextSibling,d=u.nextSibling;return i.$$click=()=>S(!0),a.$$click=()=>Et(!0),o.$$click=()=>Et(!1),s.$$click=()=>w(!0),c.$$click=mt,u.$$click=qe,X(t,U(G,{get when(){return Mt()},get children(){return[(()=>{var e=lc();return e.firstChild,e.$$click=()=>f(!0),X(e,()=>Xc(n()?.state.model),null),e})(),(()=>{var t=uc();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=qc[(qc.indexOf(t)+1)%qc.length];try{await Q.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},X(t,()=>n()?.state.thinkingLevel??`—`,null),t})()]}}),d),d.$$click=wt,X(d,()=>l()?`stopping runtime…`:`stop runtime`),j(t=>{var n=Q.exportHtmlUrl(e.sessionKey),i=l();return n!==t.e&&Y(r,`href`,t.e=n),i!==t.t&&(d.disabled=t.t=i),t},{e:void 0,t:void 0}),t}})]}}),null),X(c,U(G,{get when(){return q(()=>!!(!h()&&n()?.state.modelFallbackMessage))()&&!D()},get children(){var e=fc(),t=e.firstChild.firstChild;t.firstChild;var r=t.nextSibling;return X(t,()=>n().state.modelFallbackMessage,null),r.$$click=()=>O(!0),e}}),I);var ne=Ae;typeof ne==`function`?Pe(ne,I):Ae=I;var re=Me;return typeof re==`function`?Pe(re,R):Me=R,X(R,U(G,{get when(){return t()},get fallback(){return Nc()},get children(){return[U(W,{get each(){return t().widgets.above},children:e=>(()=>{var t=Pc();return X(t,e),t})()}),U(Ss,{get entries(){return t().entries},get resetKey(){return e.sessionKey}}),U(W,{get each(){return t().widgets.below},children:e=>(()=>{var t=Pc();return X(t,e),t})()})]}})),te.$$click=()=>v(!_()),X(te,()=>_()?`compose ▴`:`compose ▾`),X(ee,U(G,{get when(){return _()},get children(){var e=pc();return X(e,(()=>{var e=q(()=>!!Ue());return()=>e()?`agent working — open controls to stop or steer`:q(()=>Ht().length>0)()?`${Ht().length} queued message(s)`:`composer hidden for transcript reading`})()),e}}),null),X(z,U(G,{get when(){return!_()},get children(){var n=Ec(),c=n.firstChild,l=c.firstChild,u=l.nextSibling,d=u.firstChild,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling;X(n,U(G,{get when(){return kt().length>0},get children(){var e=mc(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;r.nextSibling;var i=t.nextSibling;return X(t,At,n),X(t,()=>kt().length,r),X(i,U(W,{get each(){return kt()},children:e=>(()=>{var t=Fc(),n=t.firstChild;return X(t,(()=>{var t=q(()=>e.status===`completed`);return()=>t()?`☑`:e.status===`in_progress`?`⧖`:`☐`})(),n),X(t,()=>e.title,null),j(n=>{var r=e.status===`completed`,i=e.status===`in_progress`;return r!==n.e&&t.classList.toggle(`done`,n.e=r),i!==n.t&&t.classList.toggle(`active`,n.t=i),n},{e:void 0,t:void 0}),t})()})),j(()=>e.open=!Mt()),e}}),c),X(n,U(G,{get when(){return Dt().length+Ot().length>0},get children(){var t=gc(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,n.$$click=()=>b(!y()),X(n,()=>y()?`subagents ▴`:`subagents ▾`),X(r,()=>Dt().length,i),X(r,()=>Ot().length,a),X(t,U(G,{get when(){return y()},get children(){return hc()}}),null),X(t,U(G,{get when(){return!y()},get children(){return U(W,{get each(){return[...Dt(),...Ot()].slice(0,4)},children:t=>(()=>{var n=Ic(),r=n.firstChild,i=r.nextSibling,a=i.firstChild;return n.$$click=()=>e.store.navigate({screen:`subagent`,key:e.sessionKey,agentId:t.agentId}),X(r,(()=>{var e=q(()=>t.status===`running`);return()=>e()?`●`:t.status===`completed`?`✓`:`✕`})()),X(i,()=>t.agentType,a),X(i,()=>t.taskSummary,null),j(()=>je(r,t.status===`running`?`live`:`done`)),n})()})}}),null),j(e=>{var r=!!y(),i=y()?`show subagents`:`hide subagents`;return r!==e.e&&t.classList.toggle(`collapsed`,e.e=r),i!==e.t&&Y(n,`title`,e.t=i),e},{e:void 0,t:void 0}),t}}),c),X(n,U(G,{get when(){return Ue()||(t()?.statusEntries.length??0)>0||A()},get children(){var e=bc();return X(e,U(G,{get when(){return ze()},get children(){var e=_c();return e.firstChild,X(e,(()=>{var e=q(()=>!!t()?.workingText);return()=>e()?` — ${t().workingText}`:``})(),null),X(e,(()=>{var e=q(()=>F()>2);return()=>e()?` (${F()}s)`:``})(),null),e}}),null),X(e,U(W,{get each(){return t()?.statusEntries??[]},children:e=>(()=>{var t=Ac();return X(t,()=>e.text,null),X(t,U(G,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=Lc();return t.$$click=()=>Tt(e.key),t}}),null),j(()=>je(t,e.tone===`info`?`queued`:e.tone)),t})()}),null),X(e,U(G,{get when(){return A()},get children(){var e=vc();return X(e,A),e}}),null),X(e,U(G,{get when(){return Ue()},get children(){var e=yc();return e.$$click=Ct,X(e,()=>s()?`stopping…`:`■ stop`),j(()=>e.disabled=s()),e}}),null),e}}),c),X(c,U(G,{get when(){return Ht().length>0},get children(){var e=xc(),t=e.firstChild;return X(e,U(W,{get each(){return Ht()},children:e=>(()=>{var t=Rc(),n=t.firstChild;return X(n,()=>e.kind),X(t,()=>e.text,null),j(()=>Y(t,`title`,e.text)),t})()}),t),t.$$click=lt,e}}),l),X(c,U(G,{get when(){return ve().length>0||ge().length>0},get children(){var e=Sc();return X(e,U(W,{get each(){return ve()},children:(e,t)=>(()=>{var n=zc(),r=n.firstChild;r.firstChild;var i=r.nextSibling,a=i.nextSibling;return X(r,()=>e.fileName,null),X(i,()=>rl(e.size)),a.$$click=()=>ye(e=>e.filter((e,n)=>n!==t())),j(()=>Y(n,`title`,e.path)),n})()}),null),X(e,U(W,{get each(){return ge()},children:(e,t)=>(()=>{var n=Bc(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>et(t()),j(t=>{var i=`${e.fileName} (${rl(e.size)})`,a=e.previewUrl,o=e.fileName;return i!==t.e&&Y(n,`title`,t.e=i),a!==t.t&&Y(r,`src`,t.t=a),o!==t.a&&Y(r,`alt`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),n})()}),null),e}}),l),X(c,U(G,{get when(){return Gt()},get children(){var e=Cc();return X(e,U(W,{get each(){return Wt()},children:(e,t)=>(()=>{var n=Hc(),r=n.firstChild;r.firstChild;var i=r.nextSibling;return n.$$click=()=>Kt(e),n.addEventListener(`mouseenter`,()=>le(t())),X(r,()=>e.name,null),X(n,U(G,{get when(){return e.description},get children(){var t=Vc();return X(t,()=>e.description),t}}),i),X(i,()=>e.source),j(e=>{var r=`command-option-${t()}`,i=ce()===t(),a=ce()===t();return r!==e.e&&Y(n,`id`,e.e=r),i!==e.t&&Y(n,`aria-selected`,e.t=i),a!==e.a&&n.classList.toggle(`selected`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),n})()})),e}}),l),l.$$keydown=t=>{if(Gt()){if(t.key===`ArrowDown`){t.preventDefault(),le((ce()+1)%Wt().length);return}if(t.key===`ArrowUp`){t.preventDefault(),le((ce()-1+Wt().length)%Wt().length);return}if(t.key===`Tab`||t.key===`Enter`&&!t.shiftKey&&!Mt()){t.preventDefault();let e=Wt()[ce()];e&&Kt(e);return}if(t.key===`Escape`){t.preventDefault(),H(!0);return}}if((t.key===`ArrowUp`||t.key===`ArrowDown`)&&(r()===``||be()!==void 0)){let n=Os(e.sessionKey);if(n.length>0){if(t.preventDefault(),t.key===`ArrowUp`){let e=be()===void 0?n.length-1:Math.max(0,be()-1);xe(e),i(n[e]??``)}else if(be()!==void 0){let e=be()+1;e>=n.length?(xe(void 0),i(``)):(xe(e),i(n[e]??``))}}return}t.key===`Enter`&&!t.shiftKey&&!Mt()&&(t.preventDefault(),St())},l.$$input=e=>{H(!1),le(0),xe(void 0),i(e.currentTarget.value),ol(e.currentTarget)},l.addEventListener(`paste`,e=>{let t=[...e.clipboardData?.items??[]].filter(e=>e.type.startsWith(`image/`)).map(e=>e.getAsFile()).filter(e=>!!e);t.length>0&&(e.preventDefault(),dt(t))});var g=Ne;typeof g==`function`?Pe(g,l):Ne=l,d.addEventListener(`change`,e=>{pt(e.currentTarget.files??[]),e.currentTarget.value=``});var _=Fe;typeof _==`function`?Pe(_,d):Fe=d,f.addEventListener(`change`,e=>{dt(e.currentTarget.files??[]),e.currentTarget.value=``});var v=Ie;return typeof v==`function`?Pe(v,f):Ie=f,p.$$click=()=>Fe?.click(),m.$$click=()=>Ie?.click(),X(u,U(G,{get when(){return ze()},get children(){var e=wc(),t=e.firstChild,n=t.nextSibling;return t.$$click=()=>o(`steer`),n.$$click=()=>o(`follow_up`),j(e=>{var r=a()===`steer`,i=a()===`follow_up`;return r!==e.e&&t.classList.toggle(`selected`,e.e=r),i!==e.t&&n.classList.toggle(`selected`,e.t=i),e},{e:void 0,t:void 0}),e}}),h),X(u,U(G,{get when(){return t()?.suggestedCommand},get children(){var e=Tc(),n=e.firstChild.nextSibling;return e.$$click=()=>i(t().suggestedCommand),X(n,()=>t().suggestedCommand),e}}),h),h.$$click=St,j(e=>{var t=ze()?`Message dreb — sends as steer while it works…`:`Message dreb…`,n=Gt()?`command-listbox`:void 0,r=Gt()?`command-option-${ce()}`:void 0;return t!==e.e&&Y(l,`placeholder`,e.e=t),n!==e.t&&Y(l,`aria-controls`,e.t=n),r!==e.a&&Y(l,`aria-activedescendant`,e.a=r),e},{e:void 0,t:void 0,a:void 0}),j(()=>l.value=r()),n}}),null),X(c,U(G,{get when(){return t()?.uiRequests[0]},children:t=>U(sl,{get request(){return t()},onRespond:async t=>{try{await Q.extensionUiResponse(e.sessionKey,t)}catch(e){P(e instanceof Error?e.message:String(e))}}})}),null),X(c,U(G,{get when(){return d()},get children(){return U(ll,{get sessionKey(){return e.sessionKey},get state(){return n()?.state},onClose:()=>f(!1),onSelected:()=>e.store.refreshFleet()})}}),null),X(c,U(G,{get when(){return x()},get children(){return U(nt,{title:`compact context`,onDismiss:()=>S(!1),get actions(){return[(()=>{var e=Fs();return e.$$click=()=>S(!1),e})(),(()=>{var t=Uc();return t.$$click=async()=>{S(!1);try{await Q.compact(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}},t})()]},get children(){return Dc()}})}}),null),X(c,U(G,{get when(){return T()},get children(){return U(cl,{get resources(){return ue()},get error(){return fe()},onClose:()=>E(!1)})}}),null),X(c,U(G,{get when(){return Se()},get children(){return U(nt,{title:`fork from message`,onDismiss:()=>Ce(!1),get children(){return[U(G,{get when(){return Ee()},get children(){var e=Hs();return X(e,Ee),e}}),U(G,{get when(){return we().length>0},get fallback(){return Wc()},get children(){var e=Oc();return X(e,U(W,{get each(){return we()},children:e=>(()=>{var t=Gc(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>ht(e.entryId),X(n,()=>e.entryId),X(r,()=>e.text),t})()})),e}})]}})}}),null),X(c,U(G,{get when(){return C()},get children(){return U(dl,{get current(){return Nt()??``},onClose:()=>w(!1),onRename:async t=>{try{await Q.rename(e.sessionKey,t),await e.store.refreshFleet(),w(!1)}catch(e){P(e instanceof Error?e.message:String(e))}}})}}),null),j(e=>{var t=!!h(),n=h()?`show session details`:`hide session details`,r=!!_(),i=_()?`show composer and controls`:`hide composer and controls`;return t!==e.e&&u.classList.toggle(`collapsed`,e.e=t),n!==e.t&&Y(N,`title`,e.t=n),r!==e.a&&z.classList.toggle(`collapsed`,e.a=r),i!==e.o&&Y(te,`title`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}function dl(e){let[t,n]=k(e.current);return U(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=Fs();return Me(t,`click`,e.onClose,!0),t})(),(()=>{var n=Kc();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=Ns(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Ae([`input`,`click`,`keydown`]);var fl=[{id:`default`,label:`entropist.ca`},{id:`dim`,label:`Dim`},{id:`solarized`,label:`Solarized`},{id:`gruvbox`,label:`Gruvbox`},{id:`qud`,label:`Caves of Qud`},{id:`vangogh`,label:`Van Gogh`},{id:`okabe`,label:`Colorblind-safe (Okabe-Ito)`},{id:`tol`,label:`Colorblind-safe (Paul Tol)`}],pl=fl.map(e=>e.id),ml=[`system`,`light`,`dark`],hl=`dreb.dashboard.theme`,gl=`dreb.dashboard.colorMode`,_l=`default`,vl=`system`;function yl(e){return typeof e==`string`&&pl.includes(e)}function bl(e){return typeof e==`string`&&ml.includes(e)}function xl(){if(typeof window>`u`)return _l;try{let e=window.localStorage.getItem(hl);return yl(e)?e:_l}catch{return _l}}function Sl(){if(typeof window>`u`)return vl;try{let e=window.localStorage.getItem(gl);return bl(e)?e:vl}catch{return vl}}function Cl(e,t,n){if(!(typeof window>`u`))try{t===n?window.localStorage.removeItem(e):window.localStorage.setItem(e,t)}catch{}}var[wl,Tl]=k(xl()),[El,Dl]=k(Sl()),Ol=wl,kl=El;function Al(e){let t=e.defaultView??(typeof window<`u`?window:void 0);return!t||typeof t.getComputedStyle!=`function`?``:t.getComputedStyle(e.documentElement).getPropertyValue(`--bg`).trim()}function jl(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=t.documentElement;if(!n)return;let r=wl(),i=El();if(r===_l?n.removeAttribute(`data-theme`):n.setAttribute(`data-theme`,r),i===vl?n.removeAttribute(`data-color-mode`):n.setAttribute(`data-color-mode`,i),!(r!==_l||i!==vl))n.style.removeProperty(`color-scheme`);else{let e=i===`light`?`light`:i===`dark`?`dark`:`light dark`;n.style.setProperty(`color-scheme`,e)}}catch{}}function Ml(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=Al(t);if(!n)return;let r=t.querySelector(`meta[name="theme-color"]:not([media])`);if(!r){r=t.createElement(`meta`),r.setAttribute(`name`,`theme-color`);let e=t.head??t.getElementsByTagName(`head`)[0];e&&e.insertBefore(r,e.firstChild)}r.setAttribute(`content`,n)}catch{}}function Nl(e){let t=yl(e)?e:_l;Tl(t),Cl(hl,t,_l),jl(),Ml()}function Pl(e){let t=bl(e)?e:vl;Dl(t),Cl(gl,t,vl),jl(),Ml()}var Fl=null,Il=!1;function Ll(){El()===vl&&Ml()}function Rl(e){e.key!==null&&e.key!==`dreb.dashboard.theme`&&e.key!==`dreb.dashboard.colorMode`||zl()}function zl(){Tl(xl()),Dl(Sl()),jl(),Ml()}function Bl(){if(!(typeof window>`u`)){try{typeof window.matchMedia==`function`&&(Fl=window.matchMedia(`(prefers-color-scheme: dark)`),typeof Fl.addEventListener==`function`?Fl.addEventListener(`change`,Ll):typeof Fl.addListener==`function`&&Fl.addListener(Ll))}catch{}try{window.addEventListener(`storage`,Rl)}catch{}}}function Vl(){zl(),!Il&&(Il=!0,Bl())}var Hl=J(`<div class=appearance-controls><div class=setting-row><span class=setting-label><span class=name>color mode</span><span class=hint>this browser only — “system” follows your OS light/dark preference</span></span><span class=setting-control><select id=pref-color-mode></select></span></div><div class=theme-gallery>`),Ul=J(`<option>`),Wl=J(`<button type=button class=theme-card><div class=theme-card-preview><div class=theme-card-swatch><span class=theme-card-name></span><span class=theme-card-muted>The quick brown fox.</span></div><div class=theme-card-chips></div><pre class=theme-card-code><code class=hljs><span class=hljs-keyword>const</span> <span class=hljs-variable>count</span><span class=hljs-operator> = </span><span class=hljs-number>42</span><span class=hljs-punctuation>;</span>
75
+ <span class=hljs-comment>// preview</span>
76
+ <span class=hljs-function>render</span><span class=hljs-punctuation>(</span><span class=hljs-string>"ok"</span><span class=hljs-punctuation>)</span><span class=hljs-punctuation>;</span></code></pre></div><span class=theme-card-footer><span class=theme-card-title></span><span class=theme-card-state>`),Gl=[`running`,`attention`,`idle`,`error`];function Kl(){let e=()=>{let e=kl();return e===`system`?void 0:e};return(()=>{var t=Hl(),n=t.firstChild,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling;return r.addEventListener(`change`,e=>Pl(e.currentTarget.value)),X(r,U(W,{each:ml,children:e=>(()=>{var t=Ul();return t.value=e,X(t,e),t})()})),X(i,U(W,{each:fl,children:t=>{let n=()=>Ol()===t.id;return(()=>{var r=Wl(),i=r.firstChild,a=i.firstChild,o=a.firstChild,s=a.nextSibling,c=i.nextSibling.firstChild,l=c.nextSibling;return r.$$click=()=>Nl(t.id),X(o,()=>t.label),X(s,U(W,{each:Gl,children:e=>U(Qe,{status:e,label:``})})),X(c,()=>t.label),X(l,()=>n()?`✓ active`:`select`),j(i=>{var a=!!n(),o=t.id,s=t.id,c=e(),l=n(),u=n()?`true`:void 0,d=`use the ${t.label} theme`;return a!==i.e&&r.classList.toggle(`active`,i.e=a),o!==i.t&&Y(r,`data-theme-card`,i.t=o),s!==i.a&&Y(r,`data-theme`,i.a=s),c!==i.o&&Y(r,`data-color-mode`,i.o=c),l!==i.i&&Y(r,`aria-pressed`,i.i=l),u!==i.n&&Y(r,`aria-current`,i.n=u),d!==i.s&&Y(r,`title`,i.s=d),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),r})()}})),j(()=>r.value=kl()),t})()}Ae([`click`]);var ql=J(`<select><option value=on>on</option><option value=off>off`),Jl=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Yl=J(`<div class=model-list style=max-height:320px>`),Xl=J(`<p class="muted small">No matching models.`),Zl=J(`<section class=model-provider-group><div class=model-provider-heading>`),Ql=J(`<span class=model-name>`),$l=J(`<span class=model-reasoning>think`),eu=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),tu=J(`<div class=settings-error>`),nu=J(`<div class=settings-warning>`),ru=J(`<p class="muted small"style=margin-bottom:16px>✓ saved`),iu=J(`<div class=setting-row><span class=setting-label><span class=name>pairing code</span><span class=hint>new devices enter this in the pairing screen; it rotates every 30s</span></span><span class=setting-control><code style=font-size:var(--fs-h2);letter-spacing:0.08em>`),au=J(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow &lt;identity&gt;</code> to enable Tailscale access.`),ou=J(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),su=J(`<div class=screen-fill><main class="container settings-wrap"><h1>settings</h1><p class=settings-intro>Ordinary defaults apply only to new sessions. Context trust changes apply to subsequent lazy loads in live sessions; already injected content cannot be retracted. Writes go to the global settings file on the host.</p><section class=settings-section><h2>dashboard</h2><div class=appearance-block><div class="setting-row appearance-heading-row"><span class=setting-label><span class=name>appearance</span><span class=hint>this browser only — theme and light/dark mode are stored in localStorage and are independent of the TUI theme. Okabe-Ito and Paul Tol are colorblind-safe palettes.</span></span></div></div><div class=setting-row><span class=setting-label><span class=name>always expand thinking</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control><label class=checkbox-control><input id=pref-expand-thinking type=checkbox><span>open by default</span></label></span></div><div class=setting-row><span class=setting-label><span class=name>auto-expand tool cards</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control style=display:grid;gap:6px></span></div><div class=setting-row><span class=setting-label><span class=name>needs-attention notifications</span><span class=hint></span></span><span class=setting-control><label class=checkbox-control><input id=pref-notifications type=checkbox><span></span></label></span></div><div class=setting-row><span class=setting-label><span class=name>restart dashboard service</span><span class=hint></span></span><span class=setting-control><button type=button class="btn btn-small btn-danger"></button></span></div></section><section class=settings-section><h2>devices</h2><div class=device-row><span>this machine <span class=this-device></span></span><span class=meta>local · always allowed</span></div></section><footer>dreb<!> · dashboard`),cu=J(`<div>`),lu=J(`<p class=muted>`),uu=J(`<section class=settings-section><h2>model</h2><div class=setting-row><span class=setting-label><span class=name>default model</span><span class=hint>used by new sessions; validated against configured providers</span></span><span class=setting-control><button type=button class="btn btn-small model-picker-button"></button></span></div><div class=setting-row><span class=setting-label><span class=name>default thinking level</span><span class=hint></span></span><span class=setting-control><select></select></span></div><div class=setting-row><span class=setting-label><span class=name>transport</span><span class=hint>preferred model transport for new sessions</span></span><span class=setting-control><select>`),du=J(`<div class="setting-row agent-context-row"><span class=setting-label><span class=name>agent definition context</span><span class=hint>choose a project to include its .dreb/agents definitions</span></span><span class=setting-control><select><option value>global/home only`),fu=J(`<section class=settings-section><h2>agent models</h2><p class="muted small"style=margin-bottom:8px>Per-agent fallback lists. First available model wins; empty lists revert to the default model. Agent definitions are loaded from an explicit project context so project-local agents do not depend on which runtime opened first.`),pu=J(`<section class=settings-section><h2>images</h2><div class=setting-row><span class=setting-label><span class=name>auto-resize images</span><span class=hint>resize image inputs before sending them to providers</span></span><span class=setting-control></span></div><div class=setting-row><span class=setting-label><span class=name>block images</span><span class=hint>prevent image inputs from being sent to providers</span></span><span class=setting-control>`),mu=J(`<section class=settings-section><h2>queueing</h2><div class=setting-row><span class=setting-label><span class=name>steering delivery</span><span class=hint>deliver queued steers all at once, or one per turn</span></span><span class=setting-control><select></select></span></div><div class=setting-row><span class=setting-label><span class=name>follow-up delivery</span><span class=hint>deliver queued follow-ups all at once, or one per turn</span></span><span class=setting-control><select>`),hu=J(`<section class=settings-section><h2>behavior</h2><div class=setting-row><span class=setting-label><span class=name>skill slash commands</span><span class=hint>register skills as slash commands in new sessions</span></span><span class=setting-control></span></div><div class=context-trust-subsection><h3>trusted context folders</h3><p class="muted small">Specific global roots that may lazy-load nested AGENTS.md/CLAUDE.md and all descendants.</p><div class="settings-warning context-trust-global-warning"><strong>Global-only policy.</strong> Project <code>.dreb/settings.json</code> cannot enable, disable, or extend nested-context trust. Only these global settings and the Files view can; a cloned repository cannot grant itself trust.</div><form class=trusted-context-folder-add><label for=trusted-context-folder-path>add folder by path</label><input id=trusted-context-folder-path type=text placeholder=/path/to/project><button type=submit class="btn btn-small"></button></form></div><div class=setting-row><span class=setting-label><span class=name>global expert nested-context trust</span><span class=hint>allow nested AGENTS.md/CLAUDE.md from any resolvable directory</span></span><span class=setting-control></span></div><div class="settings-warning context-expert-warning"><strong>Expert global override.</strong> Project <code>.dreb/settings.json</code> cannot enable, disable, or extend nested-context trust; a cloned repository cannot grant itself trust. When ON, nested instructions from any resolvable directory may load, including untrusted prompt-injection content. Leave this OFF and use trusted folders for projects you control.</div><div class=setting-row><span class=setting-label><span class=name>hide thinking blocks</span><span class=hint>hide raw thinking blocks in rendered transcripts</span></span><span class=setting-control>`),gu=J(`<section class=settings-section><h2>reliability</h2><div class=setting-row><span class=setting-label><span class=name>auto-compaction</span><span class=hint>summarize old context when the window fills</span></span><span class=setting-control></span></div><div class=setting-row><span class=setting-label><span class=name>auto-retry</span><span class=hint>retry transient stream errors (rate limits, 5xx)</span></span><span class=setting-control>`),_u=J(`<p class="muted small settings-footnote">TUI-only settings (cursor, editor) are managed in the terminal /settings menu. The dashboard appearance (theme + light/dark mode) is set here, per-browser, and is independent of the TUI theme.`),vu=J(`<option>`),yu=J(`<p class="muted small">No agent definitions found.`),bu=J(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),xu=J(`<div class=agent-model-row><div class=agent-model-summary><span class=agent-model-name></span><span class=agent-model-description></span></div><div class=agent-model-fallbacks></div><button type=button class="btn btn-small agent-model-edit">`),Su=J(`<span class="muted small">default`),Cu=J(`<span class=agent-model-chip>. `),wu=J(`<p class="muted small">Using the default model.`),Tu=J(`<div class=agent-model-entry><span></span><div class=agent-model-entry-actions><button type=button class="btn btn-small">↑</button><button type=button class="btn btn-small">↓</button><button type=button class="btn btn-small">×`),Eu=J(`<p class="muted small trusted-context-empty">No trusted folders. Use the Files view to trust a project folder and its descendants.`),Du=J(`<div class=trusted-context-folder-row><code></code><span class=meta>and all descendants</span><button type=button class="btn btn-small btn-danger">`),Ou=J(`<label class=checkbox-control><input type=checkbox><span>`),ku=J(`<div class=device-row><span></span><span class=meta> · paired </span><span class=actions><button type=button class="btn btn-small btn-danger">unpair`),Au=J(`<button type=button class="btn btn-small">cancel`),ju=J(`<button type=button class="btn btn-small btn-danger">restart`),Mu=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Nu=[`all`,`one-at-a-time`],Pu=[`sse`,`websocket`,`auto`];function Fu(e){return`${e.provider}/${e.id}`}function Iu(e){let t=Fu(e);return e.name?`${t} — ${e.name}`:t}function Lu(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function Ru(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function zu(){if(typeof Notification>`u`){if(window.isSecureContext===!1)return`insecure`;let e=/iPad|iPhone|iPod/.test(navigator.userAgent),t=navigator.standalone===!0||window.matchMedia?.(`(display-mode: standalone)`)?.matches===!0;return e&&!t?`ios-install`:`unsupported`}return Notification.permission}function Bu(e){let t=new Map;for(let n of e){let e=t.get(n.provider)??[];e.push(n),t.set(n.provider,e)}return[...t.entries()].map(([e,t])=>({provider:e,models:t}))}function Vu(e,t,n){let r=t+n;if(r<0||r>=e.length)return e;let i=[...e];return[i[t],i[r]]=[i[r],i[t]],i}function Hu(e){return(()=>{var t=ql();return t.addEventListener(`change`,t=>e.onChange(t.currentTarget.value===`on`)),j(()=>t.value=e.value?`on`:`off`),t})()}function Uu(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return Bu(e.models.filter(e=>!n||Ru(e,n)).slice(0,100))}),a=e=>r().has(Fu(e));return U(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=Jl(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=Yl();return X(t,U(G,{get when(){return i().length>0},get fallback(){return Xl()},get children(){return U(W,{get each(){return i()},children:t=>(()=>{var n=Zl(),r=n.firstChild;return X(r,()=>t.provider),X(n,U(W,{get each(){return t.models},children:t=>(()=>{var n=eu(),r=n.firstChild,i=r.nextSibling,o=i.nextSibling;return n.$$click=()=>e.onPick(t),X(r,()=>a(t)?`✓`:``),X(i,()=>t.id),X(n,U(G,{get when(){return t.name},get children(){var e=Ql();return X(e,()=>t.name),e}}),o),X(o,()=>t.provider),X(n,U(G,{get when(){return t.reasoning},get children(){return $l()}}),null),j(e=>{var r=!!a(t),i=Iu(t);return r!==e.e&&n.classList.toggle(`current`,e.e=r),i!==e.t&&Y(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),n})()})}})),t})()]}})}function Wu(e){let[t,n]=k(),[r,i]=k([]),[a,o]=k(!1),[s,c]=k(),[l,u]=k(),[d,f]=k(),[p,m]=k(``),[h,g]=k(!1),[_,v]=k(zu()),[y,{mutate:b,refetch:x}]=F(async()=>{n(void 0);try{return await Q.settings()}catch(e){n(e instanceof Error?e.message:String(e));return}}),[S]=F(y,async()=>{try{let{models:e}=await Q.settingsModels();return e}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),C=N(()=>{let t=new Set;for(let n of e.store.fleet().runtimes)t.add(n.cwd);for(let n of e.store.fleet().diskSessions)t.add(n.cwd);return[...t].sort((e,t)=>e.localeCompare(t))}),[w]=F(()=>({settings:y(),cwd:d()}),async({cwd:e})=>{if(!y())return[];try{let{agentTypes:t}=await Q.agentTypes(e);return t}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),[T,{refetch:E}]=F(async()=>{let{devices:e}=await Q.devices();return e}),[D,O]=k(),A;function M(){A&&clearTimeout(A),A=void 0}function P(e){M();let t=Math.max(250,e??3e4)+100;A=setTimeout(()=>void I(),t)}async function I(){try{let e=await Q.pairingCode();if(!e.enabled||!e.code){O(void 0),M();return}O(e),P(e.expiresInMs)}catch(e){console.warn(`pairing code unavailable`,e),O(void 0),M()}}let[L]=F(async()=>{try{let{version:e}=await Q.version();return e}catch{return}}),[ee]=F(async()=>{try{return await Q.serverInfo()}catch{return}}),[te,ne]=k(!1),[re,ie]=k(!1),[ae,B]=k();async function oe(){B(void 0),ie(!0);try{await Q.restartServer()}catch(e){B(e instanceof Error?e.message:String(e)),ie(!1)}}async function V(e){n(void 0),i([]),o(!1);try{let t=await Q.saveSettings(e);b(t),i(t.warnings??[]),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){n(e instanceof Error?e.message:String(e)),await x()}}async function se(e,t){await V({agentModels:{[e]:t}})}async function H(e){n(void 0),g(!0);try{let t=await Q.trustContextFolder(e);b(t.settings),m(``)}catch(e){n(e instanceof Error?e.message:String(e))}finally{g(!1)}}async function ce(e){n(void 0),g(!0);try{let t=await Q.removeTrustedContextFolder(e);b(t.settings)}catch(e){n(e instanceof Error?e.message:String(e))}finally{g(!1)}}function le(e){return y()?.agentModels?.[e]??[]}async function ue(){typeof Notification>`u`||v(await Notification.requestPermission())}R(()=>void I()),z(M);let de=()=>e.store.auth();return(()=>{var n=su(),i=n.firstChild,o=i.firstChild.nextSibling.nextSibling,g=o.firstChild.nextSibling;g.firstChild;var v=g.nextSibling,b=v.firstChild.nextSibling.firstChild.firstChild,x=v.nextSibling,O=x.firstChild.nextSibling,k=x.nextSibling,A=k.firstChild,M=A.firstChild.nextSibling,N=A.nextSibling.firstChild.firstChild,P=N.nextSibling,F=k.nextSibling.firstChild,I=F.firstChild.nextSibling,R=F.nextSibling.firstChild,z=o.nextSibling,ie=z.firstChild.nextSibling.firstChild.firstChild.nextSibling,B=z.nextSibling,fe=B.firstChild.nextSibling;return fe.nextSibling,X(n,U(et,{get store(){return e.store},active:`settings`}),i),X(i,U(G,{get when(){return t()},get children(){var e=tu();return X(e,t),e}}),o),X(i,U(G,{get when(){return r().length>0},get children(){var e=nu();return X(e,U(W,{get each(){return r()},children:e=>(()=>{var t=cu();return X(t,e),t})()})),e}}),o),X(i,U(G,{get when(){return a()},get children(){return ru()}}),o),X(i,U(G,{get when(){return y()},get fallback(){return(()=>{var e=lu();return X(e,()=>t()?`Settings could not be loaded — see the error above.`:`Loading settings…`),e})()},children:e=>[(()=>{var t=uu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling,a=i.firstChild,o=a.firstChild.nextSibling,s=a.nextSibling.firstChild,l=i.nextSibling.firstChild.nextSibling.firstChild;return r.$$click=()=>c({kind:`default`}),X(r,()=>Lu(e())),X(o,()=>Mu.join(` · `)),s.addEventListener(`change`,e=>V({defaultThinkingLevel:e.currentTarget.value})),X(s,U(W,{each:Mu,children:e=>(()=>{var t=vu();return t.value=e,X(t,e),t})()})),l.addEventListener(`change`,e=>V({transport:e.currentTarget.value})),X(l,U(W,{get each(){return[...Pu]},children:e=>(()=>{var t=vu();return t.value=e,X(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=fu();return t.firstChild.nextSibling,X(t,U(G,{get when(){return C().length>0},get children(){var e=du(),t=e.firstChild.nextSibling.firstChild;return t.firstChild,t.addEventListener(`change`,e=>f(e.currentTarget.value||void 0)),X(t,U(W,{get each(){return C()},children:e=>(()=>{var t=vu();return t.value=e,X(t,e),t})()}),null),j(()=>t.value=d()??``),e}}),null),X(t,U(G,{get when(){return(w()??[]).length>0},get fallback(){return yu()},get children(){return U(W,{get each(){return w()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=xu(),r=e.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling,s=o.nextSibling;return X(i,()=>t.name),X(a,()=>t.description),X(o,U(G,{get when(){return n().length>0},get fallback(){return Su()},get children(){return U(W,{get each(){return n()},children:(e,t)=>(()=>{var n=Cu(),r=n.firstChild;return X(n,()=>t()+1,r),X(n,e,null),n})()})}})),s.$$click=()=>u(l()===t.name?void 0:t.name),X(s,()=>l()===t.name?`done`:`edit`),X(e,U(G,{get when(){return l()===t.name},get children(){var e=bu(),r=e.firstChild;return X(e,U(G,{get when(){return n().length>0},get fallback(){return wu()},get children(){return U(W,{get each(){return n()},children:(e,r)=>(()=>{var i=Tu(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return X(a,e),o.$$click=()=>void se(t.name,Vu(n(),r(),-1)),s.$$click=()=>void se(t.name,Vu(n(),r(),1)),c.$$click=()=>void se(t.name,n().filter((e,t)=>t!==r())),j(e=>{var t=r()===0,i=r()===n().length-1;return t!==e.e&&(o.disabled=e.e=t),i!==e.t&&(s.disabled=e.t=i),e},{e:void 0,t:void 0}),i})()})}}),r),r.$$click=()=>c({kind:`agent`,agentName:t.name}),e}}),null),e})()}})}}),null),t})(),(()=>{var t=pu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(Hu,{get value(){return e().imageAutoResize!==!1},onChange:e=>V({imageAutoResize:e})})),X(i,U(Hu,{get value(){return e().blockImages===!0},onChange:e=>V({blockImages:e})})),t})(),(()=>{var t=mu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling.firstChild.nextSibling.firstChild;return r.addEventListener(`change`,e=>V({steeringMode:e.currentTarget.value})),X(r,U(W,{get each(){return[...Nu]},children:e=>(()=>{var t=vu();return t.value=e,X(t,e),t})()})),i.addEventListener(`change`,e=>V({followUpMode:e.currentTarget.value})),X(i,U(W,{get each(){return[...Nu]},children:e=>(()=>{var t=vu();return t.value=e,X(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=hu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling.nextSibling.nextSibling,o=a.firstChild.nextSibling,s=o.nextSibling,c=i.nextSibling,l=c.firstChild.nextSibling,u=c.nextSibling.nextSibling.firstChild.nextSibling;return X(r,U(Hu,{get value(){return e().enableSkillCommands!==!1},onChange:e=>V({enableSkillCommands:e})})),X(i,U(G,{get when(){return(e().trustedContextFolders??[]).length>0},get fallback(){return Eu()},get children(){return U(W,{get each(){return e().trustedContextFolders??[]},children:e=>(()=>{var t=Du(),n=t.firstChild,r=n.nextSibling.nextSibling;return X(n,e),r.$$click=()=>void ce(e),X(r,()=>h()?`revoking…`:`revoke trust`),j(()=>r.disabled=h()),t})()})}}),a),a.addEventListener(`submit`,e=>{e.preventDefault();let t=p().trim();t&&H(t)}),o.$$input=e=>m(e.currentTarget.value),X(s,()=>h()?`trusting…`:`trust folder`),X(l,U(Hu,{get value(){return e().autoLoadNestedContext===!0},onChange:e=>V({autoLoadNestedContext:e})})),X(u,U(Hu,{get value(){return e().hideThinkingBlock===!0},onChange:e=>V({hideThinkingBlock:e})})),j(()=>s.disabled=h()||!p().trim()),j(()=>o.value=p()),t})(),(()=>{var t=gu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(Hu,{get value(){return e().compactionEnabled!==!1},onChange:e=>V({compactionEnabled:e})})),X(i,U(Hu,{get value(){return e().retryEnabled!==!1},onChange:e=>V({retryEnabled:e})})),t})(),_u()]}),o),X(g,U(Kl,{}),null),b.addEventListener(`change`,e=>bo(e.currentTarget.checked)),X(O,U(W,{each:oo,children:e=>(()=>{var t=Ou(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>xo(e,t.currentTarget.checked)),Y(n,`id`,`pref-tool-expand-${e}`),X(r,e),j(()=>n.checked=So(e)),t})()})),X(M,(()=>{var e=q(()=>_()===`denied`);return()=>e()?`blocked by browser settings — re-enable notifications in site permissions`:q(()=>_()===`insecure`)()?`this page is not a secure context — notifications need HTTPS. Run the server with --https (tailscale cert <host>.<tailnet>.ts.net) and open it via the https:// hostname`:q(()=>_()===`ios-install`)()?`iOS notifications need the installed PWA — tap Share → Add to Home Screen, then open dreb from the home screen icon`:_()===`unsupported`?`browser notifications are unavailable in this environment`:`show a notification when the tab needs input (Android/desktop need the app installed on mobile; works over HTTPS or localhost)`})()),N.addEventListener(`change`,e=>{e.currentTarget.checked&&ue()}),X(P,()=>_()===`granted`?`enabled`:`enable notifications`),X(I,()=>ee()?.supervised?`restarts the server process (a supervisor respawns it with the latest build) — kills all running sessions`:`exits the server process — only auto-restarts if run under a supervisor (systemd, pm2, …); otherwise the dashboard goes down. kills all running sessions`),R.$$click=()=>ne(!0),X(R,()=>re()?`restarting…`:`restart`),X(o,U(G,{get when(){return ae()},get children(){var e=tu();return X(e,ae),e}}),null),X(ie,()=>de()?.mode===`local`?`local`:`host`),X(z,U(G,{get when(){return q(()=>!!D()?.enabled)()&&D()?.code},get children(){var e=iu(),t=e.firstChild.nextSibling.firstChild;return X(t,()=>D().code),e}}),null),X(z,U(W,{get each(){return T()??[]},children:e=>(()=>{var t=ku(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=r.nextSibling.firstChild;return X(n,()=>e.device??e.id),X(r,()=>e.identity,i),X(r,()=>it(e.createdAt),null),a.$$click=async()=>{await Q.unpair(e.id),await E()},t})()}),null),X(z,U(G,{get when(){return(T()??[]).length===0},get children(){return au()}}),null),X(B,(()=>{var e=q(()=>!!ee()?.version);return()=>e()?` v${ee().version}`:q(()=>!!L())()?` v${L()}`:``})(),fe),X(B,U(G,{get when(){return ee()?.startedAt},get children(){return[` · server build, up `,q(()=>it(ee().startedAt))]}}),null),X(n,U(G,{get when(){return te()},get children(){return U(nt,{title:`restart dashboard service?`,onDismiss:()=>ne(!1),get actions(){return[(()=>{var e=Au();return e.$$click=()=>ne(!1),e})(),(()=>{var e=ju();return e.$$click=()=>{ne(!1),oe()},e})()]},get children(){var e=ou();return e.firstChild.nextSibling.nextSibling,X(e,()=>ee()?.supervised?` A supervisor is detected — the server should respawn automatically with the latest build.`:` No supervisor was detected — the dashboard will NOT come back on its own; you'll need to relaunch it manually.`,null),e}})}}),null),X(n,U(G,{get when(){return s()},children:e=>{let t=()=>{let t=e();return t.kind==="default"?`select default model`:`add model for ${t.agentName}`},n=()=>{let t=e();return t.kind==="default"?y()?.defaultProvider&&y()?.defaultModel?[`${y().defaultProvider}/${y().defaultModel}`]:[]:le(t.agentName)};return U(Uu,{get title(){return t()},get models(){return S()??[]},get selected(){return n()},onClose:()=>c(void 0),onPick:t=>{let n=e();if(c(void 0),n.kind==="default"){V({defaultProvider:t.provider,defaultModel:t.id});return}let r=Fu(t),i=le(n.agentName);i.includes(r)||se(n.agentName,[...i,r])}})}}),null),j(e=>{var t=_()===`denied`||_()===`unsupported`||_()===`ios-install`||_()===`insecure`,n=re();return t!==e.e&&(N.disabled=e.e=t),n!==e.t&&(R.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>b.checked=yo()),j(()=>N.checked=_()===`granted`),n})()}Ae([`input`,`click`]);var Gu=J(`<p class=pair-error>`),Ku=J(`<div class=status-line><span class=working>● working`),qu=J(`<div class=session-screen><header class=session-bar><div class=session-bar-inner><a class=back>← </a><span class=agent-type>subagent · </span><span class=title></span><span class=right></span></div></header><main class=chat><div class=chat-inner></div></main><footer class=dock><div class=dock-inner><div class=readonly-note>viewing live — subagents can't be steered yet; the parent session controls this agent.`),Ju=J(`<p class=muted>`);function Yu(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>t()?.backgroundAgents[e.agentId]),r=()=>t()?.subagents[e.agentId],i=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),a=()=>i()?.state.sessionName??e.sessionKey,[o,s]=k(),c,l,u=to({scroller:()=>c});return R(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&Cs(e)||s(e instanceof Error?e.message:String(e))}),z(()=>t.abort())}),M(()=>{e.store.revisions[e.sessionKey],u.notifyContentChanged()}),R(()=>{u.observeContent(l),u.observeViewport(c),c&&z(ro(u,c,{keyboard:`window`}))}),z(()=>u.dispose()),(()=>{var t=qu(),i=t.firstChild,s=i.firstChild.firstChild;s.firstChild;var u=s.nextSibling;u.firstChild;var d=u.nextSibling,f=d.nextSibling,p=i.nextSibling,m=p.firstChild,h=p.nextSibling.firstChild,g=h.firstChild;X(s,a,null),X(u,()=>n()?.agentType??`unknown`,null),X(d,()=>n()?.taskSummary??e.agentId),X(f,U(G,{get when(){return n()?.status===`running`},get fallback(){return U(Qe,{get status(){return n()?.status===`failed`?`error`:`idle`},get label(){return n()?.status}})},get children(){return U(Qe,{status:`running`})}}));var _=c;typeof _==`function`?Pe(_,p):c=p;var v=l;return typeof v==`function`?Pe(v,m):l=m,X(m,U(G,{get when(){return o()},get children(){var e=Gu();return X(e,o),e}}),null),X(m,U(G,{get when(){return q(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=Ju();return X(e,()=>n()?`waiting for output from this agent…`:`no data for this agent — it may not have started writing its session log yet.`),e})()},get children(){return U(Ss,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`}})}}),null),X(h,U(G,{get when(){return r()?.streaming},get children(){return Ku()}}),g),j(()=>Y(s,`href`,`#/session/${e.sessionKey}`)),t})()}function Xu(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}function Zu(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
77
+ `):``}function Qu(e,t){let n=e.match(/<background-agent-complete>\n?([\s\S]*?)\n?<\/background-agent-complete>/)?.[1]?.trim();if(!n)return;let r=n.split(`
76
78
  `),i=r.findIndex(e=>e.trim().length>0),a,o=n;return i>=0&&/^Background agent .+\.$/.test(r[i]?.trim()??``)&&(a=r[i].trim(),o=r.slice(i+1).join(`
77
- `).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function vu(e){let t=gu(e.content);return _u(t,e.timestamp)??{kind:`user`,text:t,timestamp:e.timestamp}}function yu(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push(vu(r));else if(r.role===`assistant`){let e=[],i=()=>{e.length!==0&&(t.push({kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp}),e=[])};if(Array.isArray(r.content)){for(let a of r.content)if(a.type===`text`&&typeof a.text==`string`)e.push({kind:`text`,text:a.text});else if(a.type===`thinking`&&typeof a.thinking==`string`)e.push({kind:`thinking`,text:a.thinking});else if(a.type===`toolCall`){i();let e=a,o={kind:`tool`,toolCallId:String(e.id??``),toolName:String(e.name??`tool`),args:e.arguments,status:`running`,resultText:``,startedAt:r.timestamp??Date.now()};n.set(o.toolCallId,o),t.push(o)}}i()}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));e&&(e.status=r.isError?`error`:`done`,e.resultText=gu(r.content),e.details=r.details,e.endedAt=r.timestamp)}else if(r.role===`bashExecution`){let e=r;t.push({kind:`tool`,toolCallId:`bash-exec-${t.length}`,toolName:`bash (user)`,args:{command:e.command},status:`done`,resultText:e.output??``,startedAt:r.timestamp??Date.now()})}else if(r.role===`custom`){let e=r;t.push({kind:`custom`,tag:e.customType??`extension`,text:e.displayText??gu(r.content)})}return t}var bu=0,xu=20;function Su(e){let t=e.toasts.length-xu;t>0&&e.toasts.splice(0,t)}function Cu(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function wu(e){let t=Object.values(e.backgroundAgents).filter(e=>e.status!==`running`).sort((e,t)=>Cu(e)-Cu(t)||e.agentId.localeCompare(t.agentId)),n=t.length-20;if(!(n<=0))for(let r of t.slice(0,n))delete e.backgroundAgents[r.agentId],delete e.subagents[r.agentId]}function Tu(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}function Eu(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function Du(e,t){for(let n=e.entries.length-1;n>=0;n--){let r=e.entries[n];if(r.kind===`tool`&&r.toolCallId===t)return r}}function Ou(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=Eu(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push(vu(n)):n?.role===`assistant`&&e.entries.push({kind:`assistant`,blocks:[],model:n.model,streaming:!0,timestamp:n.timestamp});break}case`message_update`:{let n=t.assistantMessageEvent;if(!n)break;let r=Eu(e);if((!r||!r.streaming)&&(r={kind:`assistant`,blocks:[],streaming:!0},e.entries.push(r)),n.type===`text_start`)r.blocks.push({kind:`text`,text:``});else if(n.type===`thinking_start`)r.blocks.push({kind:`thinking`,text:``});else if(n.type===`text_delta`||n.type===`thinking_delta`){let e=r.blocks[r.blocks.length-1];e&&(e.text+=n.delta??``)}else if(n.type===`text_end`||n.type===`thinking_end`){let e=r.blocks[r.blocks.length-1];e&&typeof n.content==`string`&&(e.text=n.content)}break}case`message_end`:{let n=t.message;if(n?.role===`assistant`){let t=Eu(e);if(t?.streaming){let e=yu([n]).find(e=>e.kind===`assistant`);e&&(t.blocks=e.blocks,t.model=e.model),t.streaming=!1}else t||e.entries.push(...yu([n]))}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=vu(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text||e.entries.push(r)}break}case`tool_execution_start`:e.entries.push({kind:`tool`,toolCallId:String(t.toolCallId),toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break;case`tool_execution_update`:{let n=Du(e,String(t.toolCallId));if(n){let e=t.partialResult;n.resultText=typeof e==`string`?e:e?.content?gu(e.content):n.resultText}break}case`tool_execution_end`:{let n=Du(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;n.resultText=typeof e==`string`?e:e?.content?gu(e.content):n.resultText,n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function ku(e,t){switch(Ou(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),e.lastError=void 0,e.suggestedCommand=void 0,e.uiRequests=[];break;case`agent_end`:e.workingText=void 0,e.workingSince=void 0,e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`&&e.key!==`paused`);break;case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,e.statusEntries.push({key:`compaction`,text:`compacting context…`,tone:`info`});break;case`auto_compaction_end`:{e.compacting=!1,e.statusEntries=e.statusEntries.filter(e=>e.key!==`compaction`);let n=t.result;n&&!t.aborted&&e.entries.push({kind:`summary`,label:`compaction`,text:n.summary??`context compacted`,tokensBefore:n.tokensBefore}),t.errorMessage&&e.statusEntries.push({key:`compaction-error`,text:String(t.errorMessage),tone:`error`});break}case`auto_retry_start`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`retrying (${t.attempt}/${t.maxAttempts}) — ${t.errorMessage}`,tone:`warning`});break;case`auto_retry_end`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),!t.success&&t.finalError&&(e.statusEntries.push({key:`error`,text:String(t.finalError),tone:`error`}),e.lastError=String(t.finalError));break;case`stream_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`stream dropped, retrying (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=Eu(e);n?.streaming&&e.entries.splice(e.entries.indexOf(n),1);break}case`length_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`response truncated, retrying with larger budget (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=Eu(e);n?.streaming&&e.entries.splice(e.entries.indexOf(n),1);break}case`tasks_update`:e.tasks=t.tasks??[];break;case`suggest_next`:e.suggestedCommand=String(t.command);break;case`session_name_changed`:e.sessionName=String(t.name??``);break;case`background_agent_start`:e.backgroundAgents[String(t.agentId)]={agentId:String(t.agentId),agentType:String(t.agentType),taskSummary:String(t.taskSummary),startedAt:new Date().toISOString(),status:`running`,sessionDir:t.sessionDir};break;case`background_agent_end`:{let n=e.backgroundAgents[String(t.agentId)];n&&(n.status=t.success?`completed`:`failed`,n.sessionFile=t.sessionFile??n.sessionFile);let r=e.subagents[String(t.agentId)];r&&(r.streaming=!1),wu(e);break}case`background_agent_event`:{let n=String(t.agentId),r=e.subagents[n];r||(r={agentId:n,entries:[],streaming:!0},e.subagents[n]=r);let i=t.event;if(i?.type===`session`)break;i?.type===`agent_start`&&i.model&&(r.model=i.model.id),Ou(r,i);break}case`parent_paused_for_background_agents`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`paused`),e.statusEntries.push({key:`paused`,text:`paused — waiting on ${t.runningAgentCount} background agent${t.runningAgentCount===1?``:`s`}`,tone:`warning`});break;case`extension_ui_request`:{let n=t.method;if(n===`select`||n===`confirm`||n===`input`||n===`editor`)e.uiRequests.push({id:String(t.id),method:n,title:String(t.title??``),message:t.message,options:t.options,prefill:t.prefill,placeholder:t.placeholder});else if(n===`notify`){bu+=1;let n=t.notifyType??`info`;e.toasts.push({id:bu,text:String(t.message??``),tone:n}),Su(e)}else if(n===`setStatus`){let n=`ext:${t.statusKey??`default`}`;e.statusEntries=e.statusEntries.filter(e=>e.key!==n),t.statusText&&e.statusEntries.push({key:n,text:String(t.statusText),tone:`info`})}else if(n===`setWidget`){let n=t.widgetPlacement===`belowEditor`?`below`:`above`;e.widgets[n]=Array.isArray(t.widgetLines)?t.widgetLines:[]}else n===`setTitle`?e.title=String(t.title??``):n===`set_editor_text`&&(e.composerPrefill=String(t.text??``));break}case`extension_error`:bu+=1,e.toasts.push({id:bu,text:`extension error: ${t.error}`,tone:`error`}),Su(e);break;default:break}Tu(e)}function Au(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}var ju=Symbol(`store-raw`),Mu=Symbol(`store-node`),Nu=Symbol(`store-has`),Pu=Symbol(`store-self`);function Fu(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,Uu)}),!Array.isArray(e))){let n=Object.keys(e),r=Object.getOwnPropertyDescriptors(e),i=Object.getPrototypeOf(e),a=i!==null&&typeof e==`object`&&!!e&&!Array.isArray(e)&&i!==Object.prototype;if(a){let e=Object.getOwnPropertyDescriptors(i);n.push(...Object.keys(e)),Object.assign(r,e)}for(let i=0,o=n.length;i<o;i++){let o=n[i];a&&o===`constructor`||r[o].get&&Object.defineProperty(e,o,{configurable:!0,enumerable:r[o].enumerable,get:r[o].get.bind(t)})}}return t}function Iu(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function Lu(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[ju])return n;if(!Iu(e)||t.has(e))return e;if(Array.isArray(e)){Object.isFrozen(e)?e=e.slice(0):t.add(e);for(let n=0,a=e.length;n<a;n++)i=e[n],(r=Lu(i,t))!==i&&(e[n]=r)}else{Object.isFrozen(e)?e=Object.assign({},e):t.add(e);let n=Object.keys(e),o=Object.getOwnPropertyDescriptors(e);for(let s=0,c=n.length;s<c;s++)a=n[s],!o[a].get&&(i=e[a],(r=Lu(i,t))!==i&&(e[a]=r))}return e}function Ru(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function zu(e,t,n){if(e[t])return e[t];let[r,i]=k(n,{equals:!1,internal:!0});return r.$=i,e[t]=r}function Bu(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===Mu?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function Vu(e){ee()&&zu(Ru(e,Mu),Pu)()}function Hu(e){return Vu(e),Reflect.ownKeys(e)}var Uu={get(e,t,n){if(t===ju)return e;if(t===p)return n;if(t===m)return Vu(e),n;let r=Ru(e,Mu),i=r[t],a=i?i():e[t];if(t===Mu||t===Nu||t===`__proto__`)return a;if(!i){let n=Object.getOwnPropertyDescriptor(e,t);ee()&&(typeof a!=`function`||Object.prototype.hasOwnProperty.call(e,t))&&!(n&&n.get)&&(a=zu(r,t,a)())}return Iu(a)?Fu(a):a},has(e,t){return t===ju||t===p||t===m||t===Mu||t===Nu||t===`__proto__`?!0:(ee()&&zu(Ru(e,Nu),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:Hu,getOwnPropertyDescriptor:Bu};function Wu(e,t,n,r=!1){if(t===`__proto__`||!r&&e[t]===n)return;let i=e[t],a=e.length;n===void 0?(delete e[t],e[Nu]&&e[Nu][t]&&i!==void 0&&e[Nu][t].$()):(e[t]=n,e[Nu]&&e[Nu][t]&&i===void 0&&e[Nu][t].$());let o=Ru(e,Mu),s;if((s=zu(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=zu(o,`length`,a))&&s.$(e.length)}(s=o[Pu])&&s.$()}function Gu(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Ku(i)||Wu(e,i,t[i])}}function Ku(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function qu(e,t){if(typeof t==`function`&&(t=t(e)),t=Lu(t),Array.isArray(t)){if(e===t)return;let n=0,r=t.length;for(;n<r;n++){let r=t[n];e[n]!==r&&Wu(e,n,r)}Wu(e,`length`,r)}else Gu(e,t)}function Ju(e,t,n=[]){let r,i=e;if(t.length>1){r=t.shift();let a=typeof r,o=Array.isArray(e);if(a===`string`&&(r===`__proto__`||t.length>1&&Ku(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)Ju(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&Ju(e,[i].concat(t),n);return}else if(o&&a===`object`){let{from:i=0,to:a=e.length-1,by:o=1}=r;for(let r=i;r<=a;r+=o)Ju(e,[r].concat(t),n);return}else if(t.length>1){Ju(e[r],t,[r].concat(n));return}i=e[r],n=[r].concat(n)}let a=t[0];typeof a==`function`&&(a=a(i,n),a===i)||r===void 0&&a==null||(a=Lu(a),r===void 0||Iu(i)&&Iu(a)&&!Array.isArray(a)?Gu(i,a):Wu(e,r,a))}function Yu(...[e,t]){let n=Lu(e||{}),r=Array.isArray(n),i=Fu(n);function a(...e){I(()=>{r&&e.length===1?qu(n,e[0]):Ju(n,e)})}return[i,a]}var Xu=new WeakMap,Zu={get(e,t){if(t===ju)return e;let n=e[t];if(t===p||t===m||t===Mu||t===Nu||t===`__proto__`)return n;let r;return Iu(n)?Xu.get(n)||(Xu.set(n,r=new Proxy(n,Zu)),r):n},set(e,t,n){return Wu(e,t,Lu(n)),!0},deleteProperty(e,t){return Wu(e,t,void 0,!0),!0}};function Qu(e){return t=>{if(Iu(t)){let n;(n=Xu.get(t))||Xu.set(t,n=new Proxy(t,Zu)),e(n)}return t}}function $u(){let[e,...t]=window.location.hash.replace(/^#\/?/,``).split(`/`);return e===`session`&&t[0]?t[1]===`subagent`&&t[2]?{screen:`subagent`,key:t[0],agentId:t[2]}:{screen:`session`,key:t[0]}:e===`files`?{screen:`files`,path:t.length?decodeURIComponent(t.join(`/`)):void 0}:e===`settings`?{screen:`settings`}:e===`pairing`?{screen:`pairing`}:{screen:`fleet`}}function ed(e){switch(e.screen){case`fleet`:return`#/`;case`session`:return`#/session/${e.key}`;case`subagent`:return`#/session/${e.key}/subagent/${e.agentId}`;case`files`:return e.path?`#/files/${encodeURIComponent(e.path)}`:`#/files`;case`settings`:return`#/settings`;case`pairing`:return`#/pairing`}}var td=2e3,nd=3*1024*1024,rd=3e4,id=1e3,ad=3e4,od=new TextEncoder;function sd(){let[e,t]=Yu({}),[n,r]=Yu({}),[i,a]=k($u()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(!1),[m,h]=k(),[g,_]=k({state:`disconnected`,attempt:0}),v=()=>g().state===`connected`,[y,b]=k([]),x=new Map,S=new Map,C=0,w=0,T,E,D,O,A=!1,j=0,M=!1,N,P=!1;window.addEventListener(`hashchange`,()=>a($u()));function F(e){window.location.hash=ed(e)}function I(e){return n[e]??0}function L(e){return x.get(e)??0}function R(e){return S.get(e)??0}function z(e){S.set(e,R(e)+1)}function ee(e){x.set(e,L(e)+1)}function te(e){return{revision:I(e),generation:L(e),epoch:C,taskRevision:R(e)}}function ne(e,t){return L(e)===t.generation&&C===t.epoch}function re(e,t){return I(e)===t.revision&&ne(e,t)}function ie(e,t){return R(e)===t.taskRevision&&ne(e,t)}function ae(e){r(e,I(e)+1)}function B(n){e[n]||t(n,hu(n))}function oe(e,n){B(e),t(e,Qu(n)),ae(e)}function V(e){ee(e),S.delete(e),t(e,void 0),r(e,void 0),As(e)}function se(){let e=$u();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function H(e,t=`info`){--w,b(n=>[...n,{id:w,text:e,tone:t}].slice(-20))}async function ce(){try{s(await Q.fleet()),l(void 0)}catch(e){throw l(e instanceof Error?e.message:String(e)),e}}function le(e){return od.encode(JSON.stringify(e)).byteLength}function ue(e){e.queued=[],e.queuedBytes=0}function de(){D!==void 0&&clearTimeout(D),D=void 0}function fe(){return Math.min(ad,id*2**Math.max(0,j-1))}function pe(){if(P||D!==void 0)return;j+=1;let e=fe();p(!1),O||=g(),_(t=>t.state===`auth_failed`?t:(A=!0,{...t,state:`retrying`,attempt:Math.max(t.attempt,j),retryDelayMs:e,retryAt:Date.now()+e})),D=setTimeout(()=>{D=void 0,ve()},e)}function me(){let e=O,t=A;O=void 0,A=!1,!(!t||e?.state!==`connected`||g().state!==`retrying`)&&_({state:`connected`,attempt:e.attempt,lastAppliedSeq:e.lastAppliedSeq})}function he(e){let t=e.event?.type;if(t===`runtime_removed`){if(e.key){let t=se()===e.key;V(e.key),t&&(H(`session ${e.key} was stopped`,`warning`),F({screen:`fleet`}))}}else e.key&&(oe(e.key,t=>ku(t,e.event)),t===`tasks_update`&&z(e.key));(t===`agent_start`||t===`agent_end`||t===`background_agent_start`||t===`background_agent_end`||t===`runtime_removed`)&&ce().catch(()=>{})}function ge(e){oe(e.key,t=>{if(t.entries=yu(e.messages),t.tasks=(e.state.tasks??[]).map(e=>({...e})),t.streaming=e.state.isStreaming,t.compacting=e.state.isCompacting,t.sessionName=e.state.sessionName,t.model=e.state.model?.id,t.contextUsage=e.state.contextUsage,t.uiRequests=[],t.statusEntries=[],t.suggestedCommand=void 0,t.lastError=void 0,t.widgets={above:[],below:[]},t.toasts=[],t.title=void 0,t.composerPrefill=void 0,Tu(t),t.streaming?(t.workingSince=Date.now(),t.workingText=`working`):(t.workingSince=void 0,t.workingText=void 0),t.backgroundAgents=Object.fromEntries(e.backgroundAgents.map(e=>[e.agentId,e])),wu(t),e.subagent){let n=e.backgroundAgents.find(t=>t.agentId===e.subagent.agentId)??e.subagent.agent;t.backgroundAgents[e.subagent.agentId]=n,t.subagents[e.subagent.agentId]={agentId:e.subagent.agentId,entries:yu(e.subagent.messages),streaming:n.status===`running`}}}),z(e.key)}function _e(e,t){if(E!==e||e.state!==`active`||e.barrierSeq===void 0)return;de(),j=0,me();let n=e.barrierSeq;if(N=n,s(t.fleet),l(void 0),t.active)ge(t.active);else{let e=se();e&&(V(e),H(`session ${e} was stopped`,`warning`),F({screen:`fleet`}))}let r=[...e.queued].sort((e,t)=>e.seq-t.seq),i=t.active?.subagent;if(i&&t.active)for(let e of r)e.seq>i.barrierSeq&&e.seq<=n&&e.key===t.active.key&&e.event.type===`background_agent_event`&&String(e.event.agentId)===i.agentId&&he(e);for(let e of r)e.seq>n&&he(e);ue(e),E=void 0,p(!1),d(void 0)}function ve(e=!1){if(P)return Promise.resolve();if(T)return(e||E?.state===`failed`)&&(M=!0),T;de();let t=i(),n=t.screen===`session`||t.screen===`subagent`?t.key:void 0,r=t.screen===`subagent`?t.agentId:void 0,a={queued:[],queuedBytes:0,state:`active`,controller:new AbortController};E=a,C+=1,p(!0),d(void 0);let o=setTimeout(()=>a.controller.abort(`Dashboard recovery timed out`),rd),s=Q.resync(n,r,a.controller.signal).then(e=>{a.barrierSeq=e.barrierSeq,_e(a,e)}).catch(e=>{if(E!==a)return;a.state=`failed`,ue(a);let t=a.controller.signal.reason;d(typeof t==`string`?t:e instanceof Error?e.message:String(e)),pe(),D===void 0&&p(!1)}).finally(()=>{clearTimeout(o),T===s&&(T=void 0),!P&&M&&(M=!1,ve())});return T=s,s}function ye(){return ve(!0)}function be(e){if(e.event?.type===`dashboard_resync`){ve(!0);return}if(E){if(E.state===`failed`)throw pe(),Error(`Dashboard recovery is failed; refusing to acknowledge live envelope before resync succeeds`);let t=le(e);if(E.queued.length>=td||E.queuedBytes+t>nd){ue(E),E.state=`failed`;let e=`Dashboard recovery queue overflowed; waiting for a newer authoritative snapshot`;throw d(e),E.controller.abort(e),pe(),D===void 0&&p(!1),Error(e)}E.queued.push(e),E.queuedBytes+=t;return}N!==void 0&&e.seq<=N||he(e)}let xe;async function Se(){P=!1;try{let e=await Q.auth();h(e)}catch(e){h({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),F({screen:`pairing`});return}await ce().catch(()=>{}),xe=pt({onEnvelope:be,onStatusChange:e=>{A=!1,O=e.state===`connected`?e:void 0,_(e)},onRecovery:()=>{ve()}})}function Ce(){P=!0,xe?.(),de(),O=void 0,A=!1,M=!1;let e=E;E=void 0,e&&ue(e),e?.controller.abort(`Dashboard stopped`)}function we(t){if(y().some(e=>e.id===t)){b(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){oe(n,e=>Au(e,t));return}}async function U(e,t){let n=te(e),[r,i,a]=await Promise.allSettled([Q.messages(e,t),Q.backgroundAgents(e,t),Q.runtime(e,t)]);if(!t?.aborted&&ne(e,n)){let t=re(e,n),o=ie(e,n),s=!1;oe(e,e=>{if(t&&r.status===`fulfilled`&&(e.entries=yu(r.value.messages)),t&&i.status===`fulfilled`){for(let t of i.value.agents)e.backgroundAgents[t.agentId]=t;wu(e)}if(a.status===`fulfilled`&&a.value?.state){let n=a.value.state;o&&(e.tasks=(n.tasks??[]).map(e=>({...e})),s=!0),t&&(e.streaming=n.isStreaming,e.compacting=n.isCompacting,n.isStreaming&&!e.workingSince?(e.workingSince=Date.now(),e.workingText=e.workingText??`working`):n.isStreaming||(e.workingSince=void 0))}}),s&&z(e)}let o=[r,i,a].find(e=>e.status===`rejected`);if(o?.status===`rejected`)throw o.reason instanceof Error?o.reason:Error(String(o.reason))}async function Te(e,t,n){let r=te(e),{agent:i,messages:a}=await Q.subagentMessages(e,t,n);n?.aborted||!re(e,r)||oe(e,e=>{e.backgroundAgents[t]=i;let n=e.subagents[t];n||(n={agentId:t,entries:[],streaming:i.status===`running`},e.subagents[t]=n),a.length>0&&(n.entries=yu(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:F,fleet:o,fleetError:c,refreshFleet:ce,resyncing:f,resyncError:u,retryResync:ye,auth:m,connected:v,connection:g,notices:y,start:Se,stop:Ce,dismissToast:we,hydrateSession:U,hydrateSubagent:Te}}var cd=5e3;function ld(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),cd)})]).finally(()=>{t&&clearTimeout(t)})}function ud(){let e=sd();R(()=>{e.start(),`serviceWorker`in navigator&&(navigator.serviceWorker.addEventListener(`message`,t=>{if(t.data?.type===`navigate-session`&&typeof t.data.sessionKey==`string`){let n=t.data.sessionKey,r=!!e.sessions[n]||e.fleet().runtimes.some(e=>e.key===n);e.navigate(r?{screen:`session`,key:n}:{screen:`fleet`})}}),navigator.serviceWorker.register(`./sw.js`).catch(e=>{console.warn(`dashboard: service worker registration failed`,e)}))}),z(()=>e.stop());let t=new Set,n=new Set,r=t=>!!(e.fleet().runtimes.find(e=>e.key===t)?.needsAttention||e.sessions[t]?.needsAttention);M(()=>{let i=new Map;for(let t of e.fleet().runtimes)t.needsAttention&&i.set(t.key,{name:t.state.sessionName??t.state.sessionId.slice(0,8),reason:`needs attention`});for(let t of Object.values(e.sessions))t.needsAttention&&i.set(t.key,{name:t.sessionName??t.title??t.key,reason:t.uiRequests[0]?.title?`waiting for input — ${t.uiRequests[0].title}`:t.statusEntries.find(e=>e.tone===`error`)?.text??`needs attention`});let a=i.size>0,o=e.route(),s=o.screen===`session`||o.screen===`subagent`?o.key:void 0,c=s?e.sessions[s]:void 0,l=s?e.fleet().runtimes.find(e=>e.key===s):void 0,u=c?.title??c?.sessionName??l?.state.sessionName,d=u?`${u} — dreb`:`dreb`;document.title=a?`◆ ${d}`:d;for(let[e,a]of i)n.has(e)||t.has(e)||typeof Notification<`u`&&Notification.permission===`granted`&&document.visibilityState!==`visible`&&`serviceWorker`in navigator&&(t.add(e),ld(navigator.serviceWorker.ready).then(t=>t.showNotification(`dreb — ${a.name}`,{body:a.reason,tag:e,data:{sessionKey:e}})).then(()=>{t.delete(e),r(e)?n.add(e):n.delete(e)}).catch(n=>{t.delete(e),console.warn(`dashboard: showNotification failed`,n)}));for(let e of[...n])i.has(e)||n.delete(e);for(let e of[...t])i.has(e)||t.delete(e)});let i=()=>[...Object.values(e.sessions).flatMap(e=>e.toasts.map(t=>({...t,sessionKey:e.key}))),...e.notices()].slice(-5);return[U(Ee,{get fallback(){return U(hn,{store:e})},get children(){return[U(K,{get when(){return e.route().screen===`session`},get children(){return U(ul,{store:e,get sessionKey(){return e.route().key}})}}),U(K,{get when(){return e.route().screen===`subagent`},get children(){return U(mu,{store:e,get sessionKey(){return e.route().key},get agentId(){return e.route().agentId}})}}),U(K,{get when(){return e.route().screen===`files`},get children(){return U(Nt,{store:e,get initialPath(){return e.route().path}})}}),U(K,{get when(){return e.route().screen===`settings`},get children(){return U(lu,{store:e})}}),U(K,{get when(){return e.route().screen===`pairing`},get children(){return U(xn,{store:e})}})]}}),U(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}var dd=document.getElementById(`root`);if(!dd)throw Error(`dashboard: #root element missing from index.html`);ke(()=>U(ud,{}),dd);
79
+ `).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function $u(e){let t=Zu(e.content);return Qu(t,e.timestamp)??{kind:`user`,text:t,timestamp:e.timestamp}}function ed(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push($u(r));else if(r.role===`assistant`){let e=[],i=()=>{e.length!==0&&(t.push({kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp}),e=[])};if(Array.isArray(r.content)){for(let a of r.content)if(a.type===`text`&&typeof a.text==`string`)e.push({kind:`text`,text:a.text});else if(a.type===`thinking`&&typeof a.thinking==`string`)e.push({kind:`thinking`,text:a.thinking});else if(a.type===`toolCall`){i();let e=a,o={kind:`tool`,toolCallId:String(e.id??``),toolName:String(e.name??`tool`),args:e.arguments,status:`running`,resultText:``,startedAt:r.timestamp??Date.now()};n.set(o.toolCallId,o),t.push(o)}}i()}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));e&&(e.status=r.isError?`error`:`done`,e.resultText=Zu(r.content),e.details=r.details,e.endedAt=r.timestamp)}else if(r.role===`bashExecution`){let e=r;t.push({kind:`tool`,toolCallId:`bash-exec-${t.length}`,toolName:`bash (user)`,args:{command:e.command},status:`done`,resultText:e.output??``,startedAt:r.timestamp??Date.now()})}else if(r.role===`custom`){let e=r;t.push({kind:`custom`,tag:e.customType??`extension`,text:e.displayText??Zu(r.content)})}return t}var td=0,nd=20;function rd(e){let t=e.toasts.length-nd;t>0&&e.toasts.splice(0,t)}function id(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function ad(e){let t=Object.values(e.backgroundAgents).filter(e=>e.status!==`running`).sort((e,t)=>id(e)-id(t)||e.agentId.localeCompare(t.agentId)),n=t.length-20;if(!(n<=0))for(let r of t.slice(0,n))delete e.backgroundAgents[r.agentId],delete e.subagents[r.agentId]}function od(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}function sd(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function cd(e,t){for(let n=e.entries.length-1;n>=0;n--){let r=e.entries[n];if(r.kind===`tool`&&r.toolCallId===t)return r}}function ld(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=sd(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push($u(n)):n?.role===`assistant`&&e.entries.push({kind:`assistant`,blocks:[],model:n.model,streaming:!0,timestamp:n.timestamp});break}case`message_update`:{let n=t.assistantMessageEvent;if(!n)break;let r=sd(e);if((!r||!r.streaming)&&(r={kind:`assistant`,blocks:[],streaming:!0},e.entries.push(r)),n.type===`text_start`)r.blocks.push({kind:`text`,text:``});else if(n.type===`thinking_start`)r.blocks.push({kind:`thinking`,text:``});else if(n.type===`text_delta`||n.type===`thinking_delta`){let e=r.blocks[r.blocks.length-1];e&&(e.text+=n.delta??``)}else if(n.type===`text_end`||n.type===`thinking_end`){let e=r.blocks[r.blocks.length-1];e&&typeof n.content==`string`&&(e.text=n.content)}break}case`message_end`:{let n=t.message;if(n?.role===`assistant`){let t=sd(e);if(t?.streaming){let e=ed([n]).find(e=>e.kind===`assistant`);e&&(t.blocks=e.blocks,t.model=e.model),t.streaming=!1}else t||e.entries.push(...ed([n]))}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=$u(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text||e.entries.push(r)}break}case`tool_execution_start`:e.entries.push({kind:`tool`,toolCallId:String(t.toolCallId),toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break;case`tool_execution_update`:{let n=cd(e,String(t.toolCallId));if(n){let e=t.partialResult;n.resultText=typeof e==`string`?e:e?.content?Zu(e.content):n.resultText}break}case`tool_execution_end`:{let n=cd(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;n.resultText=typeof e==`string`?e:e?.content?Zu(e.content):n.resultText,n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function ud(e,t){switch(ld(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),e.lastError=void 0,e.suggestedCommand=void 0,e.uiRequests=[];break;case`agent_end`:e.workingText=void 0,e.workingSince=void 0,e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`&&e.key!==`paused`);break;case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,e.statusEntries.push({key:`compaction`,text:`compacting context…`,tone:`info`});break;case`auto_compaction_end`:{e.compacting=!1,e.statusEntries=e.statusEntries.filter(e=>e.key!==`compaction`);let n=t.result;n&&!t.aborted&&e.entries.push({kind:`summary`,label:`compaction`,text:n.summary??`context compacted`,tokensBefore:n.tokensBefore}),t.errorMessage&&e.statusEntries.push({key:`compaction-error`,text:String(t.errorMessage),tone:`error`});break}case`auto_retry_start`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`retrying (${t.attempt}/${t.maxAttempts}) — ${t.errorMessage}`,tone:`warning`});break;case`auto_retry_end`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),!t.success&&t.finalError&&(e.statusEntries.push({key:`error`,text:String(t.finalError),tone:`error`}),e.lastError=String(t.finalError));break;case`stream_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`stream dropped, retrying (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=sd(e);n?.streaming&&e.entries.splice(e.entries.indexOf(n),1);break}case`length_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`response truncated, retrying with larger budget (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=sd(e);n?.streaming&&e.entries.splice(e.entries.indexOf(n),1);break}case`tasks_update`:e.tasks=t.tasks??[];break;case`suggest_next`:e.suggestedCommand=String(t.command);break;case`session_name_changed`:e.sessionName=String(t.name??``);break;case`background_agent_start`:e.backgroundAgents[String(t.agentId)]={agentId:String(t.agentId),agentType:String(t.agentType),taskSummary:String(t.taskSummary),startedAt:new Date().toISOString(),status:`running`,sessionDir:t.sessionDir};break;case`background_agent_end`:{let n=e.backgroundAgents[String(t.agentId)];n&&(n.status=t.success?`completed`:`failed`,n.sessionFile=t.sessionFile??n.sessionFile);let r=e.subagents[String(t.agentId)];r&&(r.streaming=!1),ad(e);break}case`background_agent_event`:{let n=String(t.agentId),r=e.subagents[n];r||(r={agentId:n,entries:[],streaming:!0},e.subagents[n]=r);let i=t.event;if(i?.type===`session`)break;i?.type===`agent_start`&&i.model&&(r.model=i.model.id),ld(r,i);break}case`parent_paused_for_background_agents`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`paused`),e.statusEntries.push({key:`paused`,text:`paused — waiting on ${t.runningAgentCount} background agent${t.runningAgentCount===1?``:`s`}`,tone:`warning`});break;case`extension_ui_request`:{let n=t.method;if(n===`select`||n===`confirm`||n===`input`||n===`editor`)e.uiRequests.push({id:String(t.id),method:n,title:String(t.title??``),message:t.message,options:t.options,prefill:t.prefill,placeholder:t.placeholder});else if(n===`notify`){td+=1;let n=t.notifyType??`info`;e.toasts.push({id:td,text:String(t.message??``),tone:n}),rd(e)}else if(n===`setStatus`){let n=`ext:${t.statusKey??`default`}`;e.statusEntries=e.statusEntries.filter(e=>e.key!==n),t.statusText&&e.statusEntries.push({key:n,text:String(t.statusText),tone:`info`})}else if(n===`setWidget`){let n=t.widgetPlacement===`belowEditor`?`below`:`above`;e.widgets[n]=Array.isArray(t.widgetLines)?t.widgetLines:[]}else n===`setTitle`?e.title=String(t.title??``):n===`set_editor_text`&&(e.composerPrefill=String(t.text??``));break}case`extension_error`:td+=1,e.toasts.push({id:td,text:`extension error: ${t.error}`,tone:`error`}),rd(e);break;default:break}od(e)}function dd(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}var fd=Symbol(`store-raw`),pd=Symbol(`store-node`),md=Symbol(`store-has`),hd=Symbol(`store-self`);function gd(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,wd)}),!Array.isArray(e))){let n=Object.keys(e),r=Object.getOwnPropertyDescriptors(e),i=Object.getPrototypeOf(e),a=i!==null&&typeof e==`object`&&!!e&&!Array.isArray(e)&&i!==Object.prototype;if(a){let e=Object.getOwnPropertyDescriptors(i);n.push(...Object.keys(e)),Object.assign(r,e)}for(let i=0,o=n.length;i<o;i++){let o=n[i];a&&o===`constructor`||r[o].get&&Object.defineProperty(e,o,{configurable:!0,enumerable:r[o].enumerable,get:r[o].get.bind(t)})}}return t}function _d(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function vd(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[fd])return n;if(!_d(e)||t.has(e))return e;if(Array.isArray(e)){Object.isFrozen(e)?e=e.slice(0):t.add(e);for(let n=0,a=e.length;n<a;n++)i=e[n],(r=vd(i,t))!==i&&(e[n]=r)}else{Object.isFrozen(e)?e=Object.assign({},e):t.add(e);let n=Object.keys(e),o=Object.getOwnPropertyDescriptors(e);for(let s=0,c=n.length;s<c;s++)a=n[s],!o[a].get&&(i=e[a],(r=vd(i,t))!==i&&(e[a]=r))}return e}function yd(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function bd(e,t,n){if(e[t])return e[t];let[r,i]=k(n,{equals:!1,internal:!0});return r.$=i,e[t]=r}function xd(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===pd?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function Sd(e){ee()&&bd(yd(e,pd),hd)()}function Cd(e){return Sd(e),Reflect.ownKeys(e)}var wd={get(e,t,n){if(t===fd)return e;if(t===p)return n;if(t===m)return Sd(e),n;let r=yd(e,pd),i=r[t],a=i?i():e[t];if(t===pd||t===md||t===`__proto__`)return a;if(!i){let n=Object.getOwnPropertyDescriptor(e,t);ee()&&(typeof a!=`function`||Object.prototype.hasOwnProperty.call(e,t))&&!(n&&n.get)&&(a=bd(r,t,a)())}return _d(a)?gd(a):a},has(e,t){return t===fd||t===p||t===m||t===pd||t===md||t===`__proto__`?!0:(ee()&&bd(yd(e,md),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:Cd,getOwnPropertyDescriptor:xd};function Td(e,t,n,r=!1){if(t===`__proto__`||!r&&e[t]===n)return;let i=e[t],a=e.length;n===void 0?(delete e[t],e[md]&&e[md][t]&&i!==void 0&&e[md][t].$()):(e[t]=n,e[md]&&e[md][t]&&i===void 0&&e[md][t].$());let o=yd(e,pd),s;if((s=bd(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=bd(o,`length`,a))&&s.$(e.length)}(s=o[hd])&&s.$()}function Ed(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Dd(i)||Td(e,i,t[i])}}function Dd(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Od(e,t){if(typeof t==`function`&&(t=t(e)),t=vd(t),Array.isArray(t)){if(e===t)return;let n=0,r=t.length;for(;n<r;n++){let r=t[n];e[n]!==r&&Td(e,n,r)}Td(e,`length`,r)}else Ed(e,t)}function kd(e,t,n=[]){let r,i=e;if(t.length>1){r=t.shift();let a=typeof r,o=Array.isArray(e);if(a===`string`&&(r===`__proto__`||t.length>1&&Dd(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)kd(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&kd(e,[i].concat(t),n);return}else if(o&&a===`object`){let{from:i=0,to:a=e.length-1,by:o=1}=r;for(let r=i;r<=a;r+=o)kd(e,[r].concat(t),n);return}else if(t.length>1){kd(e[r],t,[r].concat(n));return}i=e[r],n=[r].concat(n)}let a=t[0];typeof a==`function`&&(a=a(i,n),a===i)||r===void 0&&a==null||(a=vd(a),r===void 0||_d(i)&&_d(a)&&!Array.isArray(a)?Ed(i,a):Td(e,r,a))}function Ad(...[e,t]){let n=vd(e||{}),r=Array.isArray(n),i=gd(n);function a(...e){I(()=>{r&&e.length===1?Od(n,e[0]):kd(n,e)})}return[i,a]}var jd=new WeakMap,Md={get(e,t){if(t===fd)return e;let n=e[t];if(t===p||t===m||t===pd||t===md||t===`__proto__`)return n;let r;return _d(n)?jd.get(n)||(jd.set(n,r=new Proxy(n,Md)),r):n},set(e,t,n){return Td(e,t,vd(n)),!0},deleteProperty(e,t){return Td(e,t,void 0,!0),!0}};function Nd(e){return t=>{if(_d(t)){let n;(n=jd.get(t))||jd.set(t,n=new Proxy(t,Md)),e(n)}return t}}function Pd(){let[e,...t]=window.location.hash.replace(/^#\/?/,``).split(`/`);return e===`session`&&t[0]?t[1]===`subagent`&&t[2]?{screen:`subagent`,key:t[0],agentId:t[2]}:{screen:`session`,key:t[0]}:e===`files`?{screen:`files`,path:t.length?decodeURIComponent(t.join(`/`)):void 0}:e===`settings`?{screen:`settings`}:e===`pairing`?{screen:`pairing`}:{screen:`fleet`}}function Fd(e){switch(e.screen){case`fleet`:return`#/`;case`session`:return`#/session/${e.key}`;case`subagent`:return`#/session/${e.key}/subagent/${e.agentId}`;case`files`:return e.path?`#/files/${encodeURIComponent(e.path)}`:`#/files`;case`settings`:return`#/settings`;case`pairing`:return`#/pairing`}}var Id=2e3,Ld=3*1024*1024,Rd=3e4,zd=1e3,Bd=3e4,Vd=new TextEncoder;function Hd(){let[e,t]=Ad({}),[n,r]=Ad({}),[i,a]=k(Pd()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(!1),[m,h]=k(),[g,_]=k({state:`disconnected`,attempt:0}),v=()=>g().state===`connected`,[y,b]=k([]),x=new Map,S=new Map,C=0,w=0,T,E,D,O,A=!1,j=0,M=!1,N,P=!1;window.addEventListener(`hashchange`,()=>a(Pd()));function F(e){window.location.hash=Fd(e)}function I(e){return n[e]??0}function L(e){return x.get(e)??0}function R(e){return S.get(e)??0}function z(e){S.set(e,R(e)+1)}function ee(e){x.set(e,L(e)+1)}function te(e){return{revision:I(e),generation:L(e),epoch:C,taskRevision:R(e)}}function ne(e,t){return L(e)===t.generation&&C===t.epoch}function re(e,t){return I(e)===t.revision&&ne(e,t)}function ie(e,t){return R(e)===t.taskRevision&&ne(e,t)}function ae(e){r(e,I(e)+1)}function B(n){e[n]||t(n,Xu(n))}function oe(e,n){B(e),t(e,Nd(n)),ae(e)}function V(e){ee(e),S.delete(e),t(e,void 0),r(e,void 0),As(e)}function se(){let e=Pd();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function H(e,t=`info`){--w,b(n=>[...n,{id:w,text:e,tone:t}].slice(-20))}async function ce(){try{s(await Q.fleet()),l(void 0)}catch(e){throw l(e instanceof Error?e.message:String(e)),e}}function le(e){return Vd.encode(JSON.stringify(e)).byteLength}function ue(e){e.queued=[],e.queuedBytes=0}function de(){D!==void 0&&clearTimeout(D),D=void 0}function fe(){return Math.min(Bd,zd*2**Math.max(0,j-1))}function pe(){if(P||D!==void 0)return;j+=1;let e=fe();p(!1),O||=g(),_(t=>t.state===`auth_failed`?t:(A=!0,{...t,state:`retrying`,attempt:Math.max(t.attempt,j),retryDelayMs:e,retryAt:Date.now()+e})),D=setTimeout(()=>{D=void 0,ve()},e)}function me(){let e=O,t=A;O=void 0,A=!1,!(!t||e?.state!==`connected`||g().state!==`retrying`)&&_({state:`connected`,attempt:e.attempt,lastAppliedSeq:e.lastAppliedSeq})}function he(e){let t=e.event?.type;if(t===`runtime_removed`){if(e.key){let t=se()===e.key;V(e.key),t&&(H(`session ${e.key} was stopped`,`warning`),F({screen:`fleet`}))}}else e.key&&(oe(e.key,t=>ud(t,e.event)),t===`tasks_update`&&z(e.key));(t===`agent_start`||t===`agent_end`||t===`background_agent_start`||t===`background_agent_end`||t===`runtime_removed`)&&ce().catch(()=>{})}function ge(e){oe(e.key,t=>{if(t.entries=ed(e.messages),t.tasks=(e.state.tasks??[]).map(e=>({...e})),t.streaming=e.state.isStreaming,t.compacting=e.state.isCompacting,t.sessionName=e.state.sessionName,t.model=e.state.model?.id,t.contextUsage=e.state.contextUsage,t.uiRequests=[],t.statusEntries=[],t.suggestedCommand=void 0,t.lastError=void 0,t.widgets={above:[],below:[]},t.toasts=[],t.title=void 0,t.composerPrefill=void 0,od(t),t.streaming?(t.workingSince=Date.now(),t.workingText=`working`):(t.workingSince=void 0,t.workingText=void 0),t.backgroundAgents=Object.fromEntries(e.backgroundAgents.map(e=>[e.agentId,e])),ad(t),e.subagent){let n=e.backgroundAgents.find(t=>t.agentId===e.subagent.agentId)??e.subagent.agent;t.backgroundAgents[e.subagent.agentId]=n,t.subagents[e.subagent.agentId]={agentId:e.subagent.agentId,entries:ed(e.subagent.messages),streaming:n.status===`running`}}}),z(e.key)}function _e(e,t){if(E!==e||e.state!==`active`||e.barrierSeq===void 0)return;de(),j=0,me();let n=e.barrierSeq;if(N=n,s(t.fleet),l(void 0),t.active)ge(t.active);else{let e=se();e&&(V(e),H(`session ${e} was stopped`,`warning`),F({screen:`fleet`}))}let r=[...e.queued].sort((e,t)=>e.seq-t.seq),i=t.active?.subagent;if(i&&t.active)for(let e of r)e.seq>i.barrierSeq&&e.seq<=n&&e.key===t.active.key&&e.event.type===`background_agent_event`&&String(e.event.agentId)===i.agentId&&he(e);for(let e of r)e.seq>n&&he(e);ue(e),E=void 0,p(!1),d(void 0)}function ve(e=!1){if(P)return Promise.resolve();if(T)return(e||E?.state===`failed`)&&(M=!0),T;de();let t=i(),n=t.screen===`session`||t.screen===`subagent`?t.key:void 0,r=t.screen===`subagent`?t.agentId:void 0,a={queued:[],queuedBytes:0,state:`active`,controller:new AbortController};E=a,C+=1,p(!0),d(void 0);let o=setTimeout(()=>a.controller.abort(`Dashboard recovery timed out`),Rd),s=Q.resync(n,r,a.controller.signal).then(e=>{a.barrierSeq=e.barrierSeq,_e(a,e)}).catch(e=>{if(E!==a)return;a.state=`failed`,ue(a);let t=a.controller.signal.reason;d(typeof t==`string`?t:e instanceof Error?e.message:String(e)),pe(),D===void 0&&p(!1)}).finally(()=>{clearTimeout(o),T===s&&(T=void 0),!P&&M&&(M=!1,ve())});return T=s,s}function ye(){return ve(!0)}function be(e){if(e.event?.type===`dashboard_resync`){ve(!0);return}if(E){if(E.state===`failed`)throw pe(),Error(`Dashboard recovery is failed; refusing to acknowledge live envelope before resync succeeds`);let t=le(e);if(E.queued.length>=Id||E.queuedBytes+t>Ld){ue(E),E.state=`failed`;let e=`Dashboard recovery queue overflowed; waiting for a newer authoritative snapshot`;throw d(e),E.controller.abort(e),pe(),D===void 0&&p(!1),Error(e)}E.queued.push(e),E.queuedBytes+=t;return}N!==void 0&&e.seq<=N||he(e)}let xe;async function Se(){P=!1;try{let e=await Q.auth();h(e)}catch(e){h({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),F({screen:`pairing`});return}await ce().catch(()=>{}),xe=pt({onEnvelope:be,onStatusChange:e=>{A=!1,O=e.state===`connected`?e:void 0,_(e)},onRecovery:()=>{ve()}})}function Ce(){P=!0,xe?.(),de(),O=void 0,A=!1,M=!1;let e=E;E=void 0,e&&ue(e),e?.controller.abort(`Dashboard stopped`)}function we(t){if(y().some(e=>e.id===t)){b(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){oe(n,e=>dd(e,t));return}}async function U(e,t){let n=te(e),[r,i,a]=await Promise.allSettled([Q.messages(e,t),Q.backgroundAgents(e,t),Q.runtime(e,t)]);if(!t?.aborted&&ne(e,n)){let t=re(e,n),o=ie(e,n),s=!1;oe(e,e=>{if(t&&r.status===`fulfilled`&&(e.entries=ed(r.value.messages)),t&&i.status===`fulfilled`){for(let t of i.value.agents)e.backgroundAgents[t.agentId]=t;ad(e)}if(a.status===`fulfilled`&&a.value?.state){let n=a.value.state;o&&(e.tasks=(n.tasks??[]).map(e=>({...e})),s=!0),t&&(e.streaming=n.isStreaming,e.compacting=n.isCompacting,n.isStreaming&&!e.workingSince?(e.workingSince=Date.now(),e.workingText=e.workingText??`working`):n.isStreaming||(e.workingSince=void 0))}}),s&&z(e)}let o=[r,i,a].find(e=>e.status===`rejected`);if(o?.status===`rejected`)throw o.reason instanceof Error?o.reason:Error(String(o.reason))}async function Te(e,t,n){let r=te(e),{agent:i,messages:a}=await Q.subagentMessages(e,t,n);n?.aborted||!re(e,r)||oe(e,e=>{e.backgroundAgents[t]=i;let n=e.subagents[t];n||(n={agentId:t,entries:[],streaming:i.status===`running`},e.subagents[t]=n),a.length>0&&(n.entries=ed(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:F,fleet:o,fleetError:c,refreshFleet:ce,resyncing:f,resyncError:u,retryResync:ye,auth:m,connected:v,connection:g,notices:y,start:Se,stop:Ce,dismissToast:we,hydrateSession:U,hydrateSubagent:Te}}var Ud=5e3;function Wd(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),Ud)})]).finally(()=>{t&&clearTimeout(t)})}function Gd(){let e=Hd();R(()=>{e.start(),`serviceWorker`in navigator&&(navigator.serviceWorker.addEventListener(`message`,t=>{if(t.data?.type===`navigate-session`&&typeof t.data.sessionKey==`string`){let n=t.data.sessionKey,r=!!e.sessions[n]||e.fleet().runtimes.some(e=>e.key===n);e.navigate(r?{screen:`session`,key:n}:{screen:`fleet`})}}),navigator.serviceWorker.register(`./sw.js`).catch(e=>{console.warn(`dashboard: service worker registration failed`,e)}))}),z(()=>e.stop());let t=new Set,n=new Set,r=t=>!!(e.fleet().runtimes.find(e=>e.key===t)?.needsAttention||e.sessions[t]?.needsAttention);M(()=>{let i=new Map;for(let t of e.fleet().runtimes)t.needsAttention&&i.set(t.key,{name:t.state.sessionName??t.state.sessionId.slice(0,8),reason:`needs attention`});for(let t of Object.values(e.sessions))t.needsAttention&&i.set(t.key,{name:t.sessionName??t.title??t.key,reason:t.uiRequests[0]?.title?`waiting for input — ${t.uiRequests[0].title}`:t.statusEntries.find(e=>e.tone===`error`)?.text??`needs attention`});let a=i.size>0,o=e.route(),s=o.screen===`session`||o.screen===`subagent`?o.key:void 0,c=s?e.sessions[s]:void 0,l=s?e.fleet().runtimes.find(e=>e.key===s):void 0,u=c?.title??c?.sessionName??l?.state.sessionName,d=u?`${u} — dreb`:`dreb`;document.title=a?`◆ ${d}`:d;for(let[e,a]of i)n.has(e)||t.has(e)||typeof Notification<`u`&&Notification.permission===`granted`&&document.visibilityState!==`visible`&&`serviceWorker`in navigator&&(t.add(e),Wd(navigator.serviceWorker.ready).then(t=>t.showNotification(`dreb — ${a.name}`,{body:a.reason,tag:e,data:{sessionKey:e}})).then(()=>{t.delete(e),r(e)?n.add(e):n.delete(e)}).catch(n=>{t.delete(e),console.warn(`dashboard: showNotification failed`,n)}));for(let e of[...n])i.has(e)||n.delete(e);for(let e of[...t])i.has(e)||t.delete(e)});let i=()=>[...Object.values(e.sessions).flatMap(e=>e.toasts.map(t=>({...t,sessionKey:e.key}))),...e.notices()].slice(-5);return[U(Ee,{get fallback(){return U(hn,{store:e})},get children(){return[U(K,{get when(){return e.route().screen===`session`},get children(){return U(ul,{store:e,get sessionKey(){return e.route().key}})}}),U(K,{get when(){return e.route().screen===`subagent`},get children(){return U(Yu,{store:e,get sessionKey(){return e.route().key},get agentId(){return e.route().agentId}})}}),U(K,{get when(){return e.route().screen===`files`},get children(){return U(Nt,{store:e,get initialPath(){return e.route().path}})}}),U(K,{get when(){return e.route().screen===`settings`},get children(){return U(Wu,{store:e})}}),U(K,{get when(){return e.route().screen===`pairing`},get children(){return U(xn,{store:e})}})]}}),U(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}Vl();var Kd=document.getElementById(`root`);if(!Kd)throw Error(`dashboard: #root element missing from index.html`);ke(()=>U(Gd,{}),Kd);
@@ -0,0 +1 @@
1
+ :root{--bg:#fff;--text:#000;--border:#e0e0e0;--muted:#666;--status-running:#00871f;--status-attention:#8a5400;--status-idle:#666;--status-error:#d10041;--mono-font:"IBM Plex Mono", "Courier New", monospace;--fs-small:12px;--fs-secondary:13px;--fs-body:14px;--fs-h3:16px;--fs-h2:18px;--fs-h1:24px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--radius:3px;--hairline:1px solid var(--border)}@media (prefers-color-scheme:dark){:root{--bg:#000;--text:#fff;--border:#333;--muted:#999;--status-running:#00e436;--status-attention:#ffa300;--status-idle:#999;--status-error:#ff004d}}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}img,svg{max-width:100%;display:block}button,input,textarea,select{font:inherit;color:inherit}*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}::-webkit-scrollbar-corner{background:0 0}body{background:var(--bg);color:var(--text);font-family:var(--mono-font);font-size:var(--fs-body);overflow-wrap:break-word;line-height:1.6;overflow-x:hidden}h1{font-size:var(--fs-h1);font-weight:500}h2{font-size:var(--fs-h2);font-weight:500}h3{font-size:var(--fs-h3);font-weight:500}a{color:var(--text);cursor:pointer}a:hover{color:var(--muted)}code,pre{font-family:var(--mono-font);font-size:var(--fs-secondary)}pre{border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);white-space:pre-wrap;word-break:break-word;overflow-x:auto}::placeholder{color:var(--muted);opacity:1}:focus-visible{outline:1px solid var(--text);outline-offset:2px}.muted{color:var(--muted)}.small{font-size:var(--fs-small)}.container{width:100%;max-width:1200px;padding:var(--space-4) var(--space-5);margin:0 auto}.topbar{border-bottom:var(--hairline);padding-top:env(safe-area-inset-top,0px)}.topbar-inner{max-width:1200px;padding:var(--space-3) var(--space-5);align-items:center;gap:var(--space-4);flex-wrap:wrap;margin:0 auto;display:flex}.wordmark{font-size:var(--fs-h2);letter-spacing:.04em;font-weight:600;text-decoration:none}.topbar nav{gap:var(--space-4);align-items:center;display:flex}.topbar nav a{padding:var(--space-1) 0;border-bottom:1px solid #0000;text-decoration:none}.topbar nav a:hover{color:var(--text);border-bottom-color:var(--text)}.topbar nav a[aria-current=page]{border-bottom-color:var(--text)}.topbar-spacer{margin-left:auto}.connection-indicator{align-items:center;gap:var(--space-2);display:inline-flex}footer{border-top:var(--hairline);margin-top:var(--space-7);padding:var(--space-4) 0;font-size:var(--fs-secondary);color:var(--muted)}.btn{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);cursor:pointer;font-size:var(--fs-body);text-decoration:none;transition:border-color .2s;display:inline-flex}.btn:hover{border-color:var(--text);color:var(--text)}.btn-primary{background:var(--text);color:var(--bg);border-color:var(--text)}.btn-primary:hover{color:var(--bg)}.btn-danger:hover{border-color:var(--status-error);color:var(--status-error)}.btn-small{padding:2px var(--space-2);font-size:var(--fs-small)}.chip{padding:1px var(--space-2);border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);white-space:nowrap;align-items:center;gap:6px;line-height:1.5;display:inline-flex}.chip .dot{font-size:10px}.chip-running{border-color:var(--status-running);color:var(--status-running)}.chip-attention{background:var(--status-attention);border-color:var(--status-attention);color:var(--bg);font-weight:600}.chip-idle{border-color:var(--border);color:var(--status-idle)}.chip-error{border-color:var(--status-error);color:var(--status-error)}.chip-plain{border-color:var(--border);color:var(--muted)}.card{border:var(--hairline);border-radius:var(--radius);padding:var(--space-4);transition:border-color .2s}a.card{text-decoration:none;display:block}.card:hover{border-color:var(--text);color:var(--text)}.input,.textarea,.select{width:100%;padding:var(--space-2) var(--space-3);border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-size:var(--fs-body);transition:border-color .2s}.input:hover,.textarea:hover,.select:hover{border-color:var(--text)}.textarea{resize:vertical;min-height:72px;line-height:1.6}.field{gap:var(--space-1);margin-bottom:var(--space-4);flex-direction:column;display:flex}.field>label{font-size:var(--fs-secondary)}.field>.hint{font-size:var(--fs-small);color:var(--muted)}.toggle{border:var(--hairline);border-radius:var(--radius);display:inline-flex;overflow:hidden}.toggle span{padding:2px var(--space-3);font-size:var(--fs-small);color:var(--muted)}.toggle .on{background:var(--text);color:var(--bg)}.table{border-collapse:collapse;width:100%;font-size:var(--fs-body)}.table th{text-align:left;font-weight:500;font-size:var(--fs-small);color:var(--muted);padding:var(--space-2) var(--space-3);border-bottom:var(--hairline)}.table td{padding:var(--space-2) var(--space-3);border-bottom:var(--hairline)}.modal-backdrop{padding:var(--space-4);background:#80808040;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg);border:1px solid var(--text);border-radius:var(--radius);width:100%;max-width:480px;padding:var(--space-5)}.modal h3{margin-bottom:var(--space-3)}.modal-actions{gap:var(--space-2);margin-top:var(--space-5);justify-content:flex-end;display:flex}.row{align-items:center;gap:var(--space-2);display:flex}.stack{gap:var(--space-2);flex-direction:column;display:flex}.hidden{display:none}:root{--syntax-comment:green;--syntax-keyword:#00f;--syntax-string:#a31515;--syntax-number:#098658;--syntax-function:#795e26;--syntax-type:#267f99;--syntax-variable:#001080;--syntax-operator:#000;--syntax-punctuation:#000}@media (prefers-color-scheme:dark){:root{--syntax-comment:#6a9955;--syntax-keyword:#569cd6;--syntax-string:#ce9178;--syntax-number:#b5cea8;--syntax-function:#dcdcaa;--syntax-type:#4ec9b0;--syntax-variable:#9cdcfe;--syntax-operator:#d4d4d4;--syntax-punctuation:#d4d4d4}}html,body,#root{width:100%;min-width:0;max-width:100%}#root{flex-direction:column;min-height:100vh;display:flex}.screen-fill{flex-direction:column;flex:1;min-height:0;display:flex}.fleet-head{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin:var(--space-5) 0 var(--space-6);flex-wrap:wrap;display:flex}.live-sessions{margin-bottom:var(--space-6)}.past-sessions-head{font-size:var(--fs-h3);color:var(--muted);border-bottom:var(--hairline);padding-bottom:var(--space-2);margin-bottom:var(--space-4)}.project-group{margin-bottom:var(--space-5)}.group-head{align-items:baseline;gap:var(--space-3);padding-bottom:var(--space-1);margin-bottom:var(--space-1);flex-wrap:wrap;display:flex}.group-head h2,.group-head h3{font-size:var(--fs-secondary);font-weight:600}.group-head .btn{margin-left:auto}.session-grid{gap:var(--space-4);margin-bottom:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(340px,1fr));display:grid}.session-card{border:var(--hairline);border-radius:var(--radius);min-width:0;padding:var(--space-4);gap:var(--space-2);flex-direction:column;transition:border-color .2s;display:flex}.session-card:hover{border-color:var(--text)}.session-card.attention{border-color:var(--status-attention)}.session-card.error{border-color:var(--status-error)}.session-title{justify-content:space-between;align-items:baseline;gap:var(--space-2);min-width:0;display:flex}.session-title .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.session-project{font-size:var(--fs-small);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.attention-reason{font-weight:600;font-size:var(--fs-secondary)}.error-reason{color:var(--status-error);font-size:var(--fs-secondary)}.activity{font-size:var(--fs-secondary);color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.subagents{border-left:var(--hairline);padding-left:var(--space-3);font-size:var(--fs-small);flex-direction:column;gap:2px;display:flex}.subagents .agent-line{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.subagents .agent-line .live{color:var(--status-running)}.session-meta{font-size:var(--fs-small);color:var(--muted);gap:var(--space-1);flex-wrap:wrap;display:flex}.session-actions{gap:var(--space-2);padding-top:var(--space-2);flex-wrap:wrap;margin-top:auto;display:flex}.disk-row{align-items:center;gap:var(--space-3);border-bottom:var(--hairline);font-size:var(--fs-secondary);padding:2px 0;display:flex}.disk-row .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.disk-row .meta{color:var(--muted);font-size:var(--fs-small);white-space:nowrap;margin-left:auto}.disk-row .actions{gap:var(--space-2);flex-shrink:0;display:flex}.disk-more{margin-top:var(--space-1);font-size:var(--fs-small);color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;text-decoration:underline;display:inline-block}.disk-more:hover{color:var(--text)}.empty-state{border:var(--hairline);border-radius:var(--radius);padding:var(--space-6);text-align:center;color:var(--muted);margin-top:var(--space-6)}.session-screen{flex-direction:column;width:100%;min-width:0;max-width:100%;height:100dvh;display:flex;overflow:hidden}.session-bar{border-bottom:var(--hairline);padding-top:env(safe-area-inset-top,0px);flex-shrink:0}.session-bar-inner{width:100%;min-width:0;max-width:960px;padding:var(--space-2) var(--space-4);align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:0 auto;display:flex}.session-bar .back{white-space:nowrap;text-decoration:none}.session-bar .title{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.session-bar .project,.session-bar .agent-type{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.session-bar .right{align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0;margin-left:auto;display:flex}.session-connection-indicator{flex-wrap:wrap;flex:0 auto;min-width:0}.session-connection-indicator .chip,.session-connection-indicator .btn{font-size:var(--fs-small);padding:1px var(--space-2)}.session-info-bar{font-size:var(--fs-small);color:var(--muted);justify-content:space-between;padding-top:0}.session-info-left{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.session-info-right{gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;margin-left:auto;display:flex}.stats-trigger{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:none;padding:0}.stats-popover{right:max(var(--space-4), calc((100vw - 960px) / 2 + var(--space-4)));z-index:10;border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-3);min-width:280px;position:absolute;top:78px;box-shadow:0 12px 32px #0000002e}.stats-grid{gap:var(--space-1) var(--space-3);font-size:var(--fs-small);grid-template-columns:1fr auto;display:grid}.stats-grid span{color:var(--muted)}.session-info-right span+span:before{content:"·";margin-right:var(--space-2);color:var(--muted)}.switcher{min-width:0;padding:1px var(--space-2);border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-family:inherit;transition:border-color .2s;display:inline-flex}.switcher:hover{border-color:var(--text)}.switcher .label{color:var(--muted)}.switcher .value{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.model-switcher{max-width:min(340px,45vw)}.session-bar.collapsed{background:var(--bg)}.session-bar-main .chrome-toggle{margin-left:auto}.chrome-toggle{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--muted);font:inherit;font-size:var(--fs-small);padding:1px var(--space-2);cursor:pointer;white-space:nowrap}.chrome-toggle:hover{border-color:var(--text);color:var(--text)}.chat{flex:1;min-height:0;overflow-y:auto}.chat-inner{max-width:960px;padding:var(--space-4);gap:var(--space-4);flex-direction:column;margin:0 auto;display:flex}.assistant-turn{border-left:var(--hairline);padding-left:var(--space-3);gap:var(--space-3);flex-direction:column;display:flex}.entry{min-width:0}.entry-head{font-size:var(--fs-small);color:var(--muted);margin-bottom:var(--space-1);gap:var(--space-2);align-items:baseline;display:flex}.entry-action{color:var(--muted);font:inherit;font-size:var(--fs-small);cursor:pointer;opacity:.65;background:0 0;border:none;padding:0}.entry-action:hover{opacity:1;text-decoration:underline}.skill-badge,.queued-kind{border:var(--hairline);border-radius:var(--radius);padding:0 var(--space-1);font-size:var(--fs-small);color:var(--muted)}.entry.user{align-self:flex-end;max-width:85%}.entry.user .entry-body{border:1px solid var(--text);border-radius:var(--radius);padding:var(--space-2) var(--space-3);white-space:pre-wrap}.entry.user .entry-head{justify-content:flex-end}.entry.assistant{max-width:100%}.entry.assistant .entry-body{white-space:normal}.markdown-body{color:var(--text)}.markdown-body,.markdown-body *{-webkit-text-fill-color:currentColor}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body pre,.markdown-body blockquote,.markdown-body table{margin:0 0 var(--space-2)}.markdown-body :last-child{margin-bottom:0}.markdown-body ul,.markdown-body ol{padding-left:var(--space-5)}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{font-size:var(--fs-h3);margin:var(--space-2) 0 var(--space-1);font-weight:500}.markdown-body code{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary);padding:0 4px}.markdown-body pre{background:var(--bg);margin-top:var(--space-1)}.markdown-body pre code{border:none;padding:0}.markdown-body a{text-decoration:underline}.markdown-body table{border-collapse:collapse;width:100%;font-size:var(--fs-secondary)}.markdown-body th,.markdown-body td{border:var(--hairline);padding:var(--space-1) var(--space-2);text-align:left}.markdown-body blockquote{border-left:var(--hairline);padding-left:var(--space-3);color:var(--muted)}.entry-body code{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary);padding:0 4px}details.thinking{border-left:var(--hairline);padding-left:var(--space-3);margin-bottom:var(--space-3)}details.thinking summary{cursor:pointer;font-size:var(--fs-small);color:var(--muted);-webkit-user-select:none;user-select:none;list-style:none}details.thinking summary:before{content:"▸ "}details.thinking[open] summary:before{content:"▾ "}details.thinking .thinking-body{color:var(--muted);font-size:var(--fs-secondary);padding-top:var(--space-1);white-space:pre-wrap}.tool{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary)}.tool summary{cursor:pointer;-webkit-user-select:none;user-select:none;gap:var(--space-2);padding:var(--space-1) var(--space-3);align-items:baseline;list-style:none;display:flex}.tool summary:before{content:"▸";color:var(--muted)}.tool[open] summary:before{content:"▾"}.tool .tool-name{font-weight:600}.tool .tool-arg{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tool .tool-status{white-space:nowrap;font-size:var(--fs-small);color:var(--muted);margin-left:auto}.tool .tool-status.running{color:var(--status-running)}.tool .tool-status.error{color:var(--status-error)}.tool .tool-command{border-top:var(--hairline);padding:var(--space-2) var(--space-3) 0;overflow-x:auto}.tool .tool-command code{border:var(--hairline);border-radius:var(--radius);padding:var(--space-1) var(--space-2);white-space:pre-wrap;display:block}.tool .tool-input{border-top:var(--hairline);padding:var(--space-2) var(--space-3);overflow-x:auto}.tool .tool-input-label{font-size:var(--fs-small);color:var(--muted);margin-bottom:var(--space-1);display:block}.tool .tool-input pre{font-size:var(--fs-small);white-space:pre-wrap;border:none;padding:0}.tool .suggested-command{margin-top:var(--space-1)}.tool .suggested-command code{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2)}.tool .tool-result{border-top:var(--hairline);padding:var(--space-2) var(--space-3);overflow-x:auto}.tool-output-truncated,.transcript-window-control{color:var(--muted);font-size:var(--fs-small);margin-bottom:var(--space-2)}.transcript-window-control{text-align:center}.tool .tool-command+.tool-result,.tool .tool-input+.tool-result{border-top:none}.tool .tool-result pre{font-size:var(--fs-small);border:none;padding:0}.tool .tool-result pre,.tool .tool-input pre{max-height:340px;overflow-y:auto}.hljs{color:var(--text);background:0 0}.hljs-comment,.hljs-quote{color:var(--syntax-comment)}.hljs-keyword,.hljs-selector-tag{color:var(--syntax-keyword)}.hljs-number,.hljs-literal{color:var(--syntax-number)}.hljs-string,.hljs-doctag{color:var(--syntax-string)}.hljs-function,.hljs-title,.hljs-title.function_,.hljs-section,.hljs-name{color:var(--syntax-function)}.hljs-type,.hljs-class,.hljs-title.class_,.hljs-built_in{color:var(--syntax-type)}.hljs-attr,.hljs-variable,.hljs-variable.language_,.hljs-params,.hljs-property{color:var(--syntax-variable)}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:var(--syntax-keyword)}.hljs-operator{color:var(--syntax-operator)}.hljs-punctuation{color:var(--syntax-punctuation)}.hljs-subst{color:var(--text)}.diff-add{color:var(--status-running)}.diff-del{color:var(--status-error)}.entry.summary-card .entry-body{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);color:var(--muted);font-size:var(--fs-secondary)}.entry.summary-card summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:var(--fs-secondary);list-style:none}.entry.summary-card summary:before{content:"▸ "}.entry.summary-card details[open] summary:before{content:"▾ "}.entry.custom-card .entry-body,.entry.agent-result-card details{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary)}.entry.agent-result-card summary{cursor:pointer;-webkit-user-select:none;user-select:none;gap:var(--space-2);color:var(--muted);align-items:baseline;list-style:none;display:flex}.entry.agent-result-card summary:before{content:"▸ "}.entry.agent-result-card details[open] summary:before{content:"▾ "}.agent-result-header{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.entry.agent-result-card .entry-body{margin-top:var(--space-2)}.streaming-cursor:after{content:"▌";color:var(--status-running)}.dock{border-top:var(--hairline);flex-shrink:0}.dock.collapsed{background:var(--bg)}.dock-collapse-row{max-width:960px;padding:var(--space-1) calc(var(--space-4) + env(safe-area-inset-right,0px)) calc(var(--space-1) + env(safe-area-inset-bottom,0px)) calc(var(--space-4) + env(safe-area-inset-left,0px));align-items:center;gap:var(--space-3);font-size:var(--fs-small);color:var(--muted);flex-wrap:wrap;margin:0 auto;display:flex}.dock-collapsed-hint{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.dock-inner{max-width:960px;padding:var(--space-3) calc(var(--space-4) + env(safe-area-inset-right,0px)) calc(var(--space-3) + env(safe-area-inset-bottom,0px)) calc(var(--space-4) + env(safe-area-inset-left,0px));gap:var(--space-2);flex-direction:column;margin:0 auto;display:flex}.tasks{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary)}.tasks summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:var(--fs-small);list-style:none}.tasks summary:before{content:"▸ "}.tasks[open] summary:before{content:"▾ "}.tasks ul{padding-top:var(--space-1);list-style:none}.tasks .done{color:var(--muted)}.tasks .active{font-weight:600}.subagent-strip{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.subagent-strip .count,.subagent-strip .collapsed-hint{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.subagent-strip .subagent-toggle{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-small);padding:1px var(--space-2);cursor:pointer}.subagent-strip .subagent-toggle:hover{border-color:var(--text)}.subagent-strip.collapsed{padding-block:var(--space-1)}.subagent-strip .agent-chip{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;align-items:center;gap:6px;max-width:260px;font-family:inherit;transition:border-color .2s;display:inline-flex}.subagent-strip .agent-chip:hover{border-color:var(--text)}.subagent-strip .agent-chip .live{color:var(--status-running)}.subagent-strip .agent-chip .done{color:var(--muted)}.subagent-strip .agent-chip .task{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.status-line{align-items:center;gap:var(--space-3);font-size:var(--fs-secondary);flex-wrap:wrap;display:flex}.status-line .working{color:var(--status-running)}.status-line .warning{color:var(--status-attention)}.status-line .error{color:var(--status-error)}.status-line .queued{color:var(--muted);font-size:var(--fs-small)}.status-line .btn{margin-left:auto}.status-line .inline-stop{margin-left:var(--space-2)}.composer{gap:var(--space-2);flex-direction:column;display:flex;position:relative}.queued-message-row{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2);align-items:center;gap:var(--space-2);font-size:var(--fs-small);flex-wrap:wrap;display:flex}.queued-chip{align-items:baseline;gap:var(--space-1);text-overflow:ellipsis;white-space:nowrap;max-width:240px;color:var(--muted);display:inline-flex;overflow:hidden}.attachment-strip{gap:var(--space-2);flex-wrap:wrap;display:flex}.attachment-thumb,.attachment-file{border:var(--hairline);border-radius:var(--radius);padding:2px;position:relative}.attachment-file{align-items:baseline;gap:var(--space-2);padding:2px var(--space-2);font-size:var(--fs-small);overflow-wrap:anywhere;max-width:100%;display:inline-flex}.attachment-thumb img{object-fit:cover;width:72px;height:54px;display:block}.attachment-thumb button,.attachment-file button{border:var(--hairline);background:var(--bg);color:var(--text);cursor:pointer;border-radius:999px;position:absolute;top:-8px;right:-8px}.command-popover{left:0;right:0;bottom:calc(100% + var(--space-2));border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-1);z-index:5;max-height:260px;position:absolute;overflow-y:auto}.command-option{background:var(--bg);width:100%;color:var(--text);font:inherit;text-align:left;padding:var(--space-2);border-radius:var(--radius);gap:var(--space-2);cursor:pointer;border:none;grid-template-columns:minmax(120px,max-content) 1fr max-content;align-items:baseline;display:grid}.command-option:hover,.command-option.selected{background:var(--text);color:var(--bg)}.command-name{font-weight:500}.command-description{color:var(--muted);font-size:var(--fs-small);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.command-source{border:var(--hairline);border-radius:var(--radius);color:var(--muted);font-size:var(--fs-small);padding:0 var(--space-1)}.command-option.selected .command-description,.command-option:hover .command-description,.command-option.selected .command-source,.command-option:hover .command-source{color:var(--bg)}.composer textarea{border:var(--hairline);border-radius:var(--radius);background:var(--bg);width:100%;color:var(--text);padding:var(--space-2) var(--space-3);font-size:var(--fs-body);resize:vertical;min-height:60px;max-height:40vh;font-family:inherit;line-height:1.6;transition:border-color .2s;overflow-y:hidden}.composer textarea:hover,.composer textarea:focus{border-color:var(--text);outline:none}.hidden-file-input{display:none}.composer-row{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.mode-toggle{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);display:inline-flex;overflow:hidden}.mode-toggle button{background:var(--bg);color:var(--muted);padding:2px var(--space-3);cursor:pointer;border:none;font-family:inherit}.mode-toggle button.selected{background:var(--text);color:var(--bg)}.composer-row .send{margin-left:auto}.ghost-suggest{font-size:var(--fs-small);color:var(--muted);cursor:pointer;background:0 0;border:none;font-family:inherit}.ghost-suggest .key{border:var(--hairline);border-radius:var(--radius);padding:0 4px}.readonly-note{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);color:var(--muted)}.fallback-banner{border:1px solid var(--status-attention);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);gap:var(--space-3);align-items:baseline;display:flex}.fallback-banner .dismiss{margin-left:auto}.widget-block{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-small);color:var(--muted);white-space:pre-wrap}.toast-region{bottom:var(--space-4);right:var(--space-4);gap:var(--space-2);z-index:50;flex-direction:column;max-width:360px;display:flex;position:fixed}.toast{border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);gap:var(--space-2);align-items:baseline;display:flex}.toast.warning{border-color:var(--status-attention)}.toast.error{border-color:var(--status-error)}.files-head{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin:var(--space-5) 0 var(--space-4);flex-wrap:wrap;display:flex}.crumbs{font-size:var(--fs-secondary);flex-wrap:wrap;align-items:baseline;gap:2px;display:flex}.crumbs .sep{color:var(--muted);margin:0 2px}.scope-note{color:var(--muted);font-size:var(--fs-small);margin-top:var(--space-1)}.context-trust{border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);margin-bottom:var(--space-4);font-size:var(--fs-secondary)}.context-trust p{color:var(--muted);font-size:var(--fs-small);margin:var(--space-1) 0 var(--space-2);overflow-wrap:anywhere}.context-trust-impact{margin-bottom:0!important}.context-trust-warning{color:var(--status-attention)}.context-trust-warning a{color:inherit}.head-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.places{gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;align-items:baseline;display:flex}.places .label{color:var(--muted);font-size:var(--fs-small)}.place-chip{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;font-family:inherit;text-decoration:none;transition:border-color .2s}.place-chip:hover{border-color:var(--text)}.file-table{border-collapse:collapse;width:100%;font-size:var(--fs-secondary)}.file-table th{text-align:left;font-size:var(--fs-small);color:var(--muted);border-bottom:var(--hairline);padding:var(--space-1) var(--space-2);font-weight:400}.file-table td{border-bottom:var(--hairline);padding:var(--space-2)}.file-table .name{color:var(--text);cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.file-table .name .icon{color:var(--muted);margin-right:var(--space-1)}.file-table .meta{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.file-table .actions{text-align:right}.drop-zone{border:1px dashed var(--border);border-radius:var(--radius);padding:var(--space-4);text-align:center;color:var(--muted);font-size:var(--fs-small);margin-top:var(--space-4);transition:border-color .2s}.drop-zone.active{border-color:var(--text);color:var(--text)}.upload-warning{font-size:var(--fs-small);color:var(--muted);margin-top:var(--space-2)}.settings-wrap{max-width:720px}.settings-intro{color:var(--muted);font-size:var(--fs-secondary);margin:var(--space-2) 0 var(--space-5)}.settings-section{margin-bottom:var(--space-6)}.settings-section h2{font-size:var(--fs-h3);border-bottom:var(--hairline);padding-bottom:var(--space-2);margin-bottom:var(--space-3)}.setting-row{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-2) 0;display:flex}.setting-label{flex-direction:column;gap:2px;min-width:0;display:flex}.setting-label .name{font-size:var(--fs-secondary)}.setting-label .hint{font-size:var(--fs-small);color:var(--muted)}.setting-control select,.setting-control input{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:2px var(--space-2)}.checkbox-control{align-items:center;gap:var(--space-2);font-size:var(--fs-secondary);display:inline-flex}.checkbox-control input{width:auto}.settings-error{border:1px solid var(--status-error);border-radius:var(--radius);color:var(--status-error);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);margin-bottom:var(--space-4);white-space:pre-wrap}.settings-warning{border:1px solid var(--status-attention);border-radius:var(--radius);color:var(--status-attention);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);margin-bottom:var(--space-4);white-space:pre-wrap}.model-picker-button{white-space:normal;overflow-wrap:anywhere;text-align:left;min-width:0;max-width:min(100%,520px)}.agent-model-row{gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;align-items:start;display:grid}.agent-model-summary{flex-direction:column;gap:2px;min-width:0;display:flex}.agent-model-name{font-size:var(--fs-secondary);font-weight:600}.agent-model-description{color:var(--muted);font-size:var(--fs-small)}.agent-model-fallbacks{gap:var(--space-1);flex-wrap:wrap;min-width:0;display:flex}.agent-model-chip{border:var(--hairline);border-radius:var(--radius);color:var(--muted);font-size:var(--fs-small);padding:0 var(--space-1);overflow-wrap:anywhere;white-space:normal;min-width:0;max-width:100%}.agent-model-editor{gap:var(--space-2);border:var(--hairline);border-radius:var(--radius);padding:var(--space-2);flex-direction:column;grid-column:1/-1;display:flex}.agent-model-entry{justify-content:space-between;gap:var(--space-2);font-size:var(--fs-secondary);align-items:center;min-width:0;display:flex}.agent-model-entry>span:first-child{overflow-wrap:anywhere;min-width:0}.agent-model-entry-actions{gap:var(--space-1);flex-shrink:0;display:flex}.context-trust-subsection{margin:var(--space-4) 0}.context-trust-subsection h3{font-size:var(--fs-secondary);margin-bottom:var(--space-1)}.context-trust-global-warning,.trusted-context-empty{margin:var(--space-3) 0}.trusted-context-folder-row{align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);font-size:var(--fs-secondary);display:flex}.trusted-context-folder-row code{overflow-wrap:anywhere;min-width:0}.trusted-context-folder-row .meta{color:var(--muted);font-size:var(--fs-small);margin-left:auto}.trusted-context-folder-row .btn{flex-shrink:0}.trusted-context-folder-add{align-items:center;gap:var(--space-2);margin-top:var(--space-3);display:flex}.trusted-context-folder-add label{font-size:var(--fs-small);white-space:nowrap}.trusted-context-folder-add input{border:var(--hairline);border-radius:var(--radius);background:var(--bg);min-width:0;color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:2px var(--space-2);flex:1}.settings-footnote{margin-top:calc(-1 * var(--space-3));margin-bottom:var(--space-5)}.appearance-block{margin-bottom:var(--space-4)}.appearance-heading-row .name{font-weight:600}.theme-gallery{gap:var(--space-3);margin-top:var(--space-2);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.theme-card{gap:var(--space-2);border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);padding:var(--space-2);text-align:left;cursor:pointer;flex-direction:column;font-family:inherit;transition:border-color .2s;display:flex}.theme-card:hover{border-color:var(--muted)}.theme-card.active{border-color:var(--text)}.theme-card-preview{gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-2);flex-direction:column;display:flex;overflow:hidden}.theme-card-swatch{flex-direction:column;gap:2px;min-width:0;display:flex}.theme-card-name{font-size:var(--fs-secondary);color:var(--text);font-weight:600}.theme-card-muted{font-size:var(--fs-small);color:var(--muted)}.theme-card-chips{gap:var(--space-1);flex-wrap:wrap;display:flex}.theme-card-code{font-size:var(--fs-small);white-space:pre;margin:0;font-family:IBM Plex Mono,Courier New,monospace;line-height:1.4;overflow:hidden}.theme-card-code .hljs{background:0 0;padding:0}.theme-card-footer{justify-content:space-between;align-items:baseline;gap:var(--space-2);font-size:var(--fs-small);display:flex}.theme-card-title{font-size:var(--fs-secondary);color:var(--text)}.theme-card-state{color:var(--muted)}.theme-card.active .theme-card-state{color:var(--text)}@media (width<=700px){.theme-gallery{grid-template-columns:1fr}}.device-row{align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);font-size:var(--fs-secondary);display:flex}.device-row .meta{color:var(--muted);font-size:var(--fs-small);margin-left:auto}.this-device{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);color:var(--muted);padding:0 var(--space-1);margin-left:var(--space-1)}.pair-wrap{min-height:100vh;padding:var(--space-4);justify-content:center;align-items:center;display:flex}.pair-card{border:var(--hairline);border-radius:var(--radius);width:100%;max-width:460px;padding:var(--space-6);gap:var(--space-4);flex-direction:column;display:flex}.pair-card h1{font-size:var(--fs-h2)}.pair-card .sub{color:var(--muted);font-size:var(--fs-secondary)}.identity{gap:var(--space-2);border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);font-size:var(--fs-secondary);flex-direction:column;display:flex}.identity .row-line{justify-content:space-between;gap:var(--space-3);display:flex}.identity .k{color:var(--muted);font-size:var(--fs-small)}.pin-input{text-align:center;width:100%;font-size:var(--fs-h1);letter-spacing:.5em;border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);padding:var(--space-2);font-family:inherit}.pin-input:focus{border-color:var(--text);outline:none}.pin-hint{font-size:var(--fs-small);color:var(--muted)}.security-note{border-top:var(--hairline);padding-top:var(--space-3);gap:var(--space-2);font-size:var(--fs-small);color:var(--muted);flex-direction:column;display:flex}.pair-error{color:var(--status-error);font-size:var(--fs-secondary)}.denied-card{border:1px solid var(--status-error);border-radius:var(--radius);width:100%;max-width:460px;padding:var(--space-6);gap:var(--space-3);flex-direction:column;display:flex}.field{gap:var(--space-1);flex-direction:column;display:flex}.field label{font-size:var(--fs-small);color:var(--muted)}.field input,.field textarea,.field select{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-2)}.field input:focus,.field textarea:focus{border-color:var(--text);outline:none}.recent-projects{flex-direction:column;gap:2px;max-height:160px;display:flex;overflow-y:auto}.recent-projects button{text-align:left;color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-1) var(--space-2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none}.recent-projects button:hover{background:var(--border)}.model-scope-tabs{border:var(--hairline);border-radius:var(--radius);margin-bottom:var(--space-3);font-size:var(--fs-small);display:inline-flex;overflow:hidden}.model-scope-tabs button{background:var(--bg);color:var(--muted);padding:2px var(--space-3);cursor:pointer;border:none;font-family:inherit}.model-scope-tabs button.selected{background:var(--text);color:var(--bg)}.model-picker-modal{min-width:min(360px,100vw - 32px);max-width:min(900px,100vw - 32px);overflow:auto}@media (width>=701px){.model-picker-modal{resize:horizontal}}.model-list{gap:var(--space-2);flex-direction:column;min-width:0;display:flex;overflow:hidden auto}.model-provider-group{flex-direction:column;gap:2px;display:flex}.model-provider-heading{background:var(--bg);color:var(--muted);font-size:var(--fs-small);border-bottom:var(--hairline);padding:var(--space-1) var(--space-2);z-index:1;position:sticky;top:0}.model-row{align-items:start;gap:2px var(--space-2);text-align:left;border:var(--hairline);border-radius:var(--radius);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-1) var(--space-2);cursor:pointer;background:0 0;grid-template-columns:18px minmax(0,1fr) auto auto;min-width:0;display:grid}.model-row:hover,.model-row.current{border-color:var(--text)}.model-current{color:var(--status-running);grid-area:1/1}.model-id{overflow-wrap:anywhere;white-space:normal;grid-area:1/2;min-width:0;font-weight:600}.model-name{color:var(--muted);font-size:var(--fs-small);overflow-wrap:anywhere;white-space:normal;grid-area:2/2/auto/-1;min-width:0}.model-provider-badge,.model-reasoning{color:var(--muted);font-size:var(--fs-small);white-space:nowrap;border:var(--hairline);border-radius:var(--radius);padding:0 var(--space-1);grid-row:1}.model-provider-badge{grid-column:3}.model-reasoning{grid-column:4}.context-modal-body{gap:var(--space-4);flex-direction:column;display:flex}.context-section h3{font-size:var(--fs-secondary);margin-bottom:var(--space-1)}.context-section ul{gap:var(--space-1);font-size:var(--fs-small);flex-direction:column;list-style:none;display:flex}.context-section li{overflow-wrap:anywhere}.fork-message-list{gap:var(--space-2);flex-direction:column;max-height:360px;display:flex;overflow-y:auto}.fork-message{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font:inherit;text-align:left;padding:var(--space-2);cursor:pointer;gap:var(--space-2);display:flex}.fork-message:hover{border-color:var(--text)}.fork-entry-id{color:var(--muted);font-size:var(--fs-small);flex:none}@media (width<=700px){.container,.topbar-inner,.session-bar-inner,.dock-inner,.dock-collapse-row,.chat-inner{width:100%;min-width:0;max-width:100%;padding-left:var(--space-3);padding-right:var(--space-3)}.session-grid{grid-template-columns:minmax(0,1fr)}.session-card,.disk-row,.session-meta,.session-actions,.disk-row .actions{min-width:0;max-width:100%}.disk-row,.session-meta,.session-actions,.disk-row .actions{flex-wrap:wrap}.session-title{flex-wrap:wrap;justify-content:flex-start;min-width:0;max-width:100%}.session-title .name{text-overflow:clip;white-space:normal;overflow-wrap:anywhere;flex:12rem;min-width:0;max-width:100%;overflow:visible}.session-title .chip{flex:none;max-width:100%}.session-project,.attention-reason,.error-reason,.activity,.subagents,.session-meta,.group-head h3{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.session-project{text-overflow:clip;overflow:visible}.activity{text-overflow:clip}.subagents .agent-line{text-overflow:clip;white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%;overflow:visible}.session-meta>span{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.group-head h3{flex:1 1 0}.disk-row .name,.disk-row .meta{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.disk-row .name{text-overflow:clip;flex:1 1 0;overflow:visible}.disk-row .meta{order:3;width:100%;margin-left:0}.session-bar .project{display:none}.session-bar .right{align-items:stretch;width:100%;margin-left:0}.session-bar .right .switcher{justify-content:center}.session-bar .right .model-switcher{flex:100%;max-width:100%}.entry.user{max-width:100%}.file-table .cols{display:none}.setting-row{flex-direction:column;align-items:stretch}.setting-control{align-self:flex-end}.agent-model-row{grid-template-columns:1fr}.agent-model-edit{justify-self:start}.agent-model-entry{flex-direction:column;align-items:flex-start}.trusted-context-folder-row{flex-wrap:wrap;align-items:flex-start}.trusted-context-folder-row code{flex-basis:100%}.trusted-context-folder-row .meta{margin-left:0}.trusted-context-folder-add{flex-direction:column;align-items:stretch}.trusted-context-folder-add label{white-space:normal}.trusted-context-folder-add .btn{align-self:flex-start}.subagent-strip{align-items:stretch;gap:var(--space-2)}.subagent-strip .subagent-toggle{flex:none;min-height:32px}.subagent-strip .count,.subagent-strip .collapsed-hint{white-space:normal}.subagent-strip .agent-chip{max-width:100%}.head-actions .btn{flex:1}.composer textarea{font-size:16px}}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(./jetbrains-mono-BCtJif-v.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:italic;font-weight:100 800;font-display:swap;src:url(./jetbrains-mono-italic-WKDR0M8A.woff2)format("woff2")}[data-color-mode=light]:not([data-theme]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--text:#000;--border:#e0e0e0;--muted:#666;--status-running:#00871f;--status-attention:#8a5400;--status-idle:#666;--status-error:#d10041;--syntax-comment:green;--syntax-keyword:#00f;--syntax-string:#a31515;--syntax-number:#098658;--syntax-function:#795e26;--syntax-type:#267f99;--syntax-variable:#001080;--syntax-operator:#000;--syntax-punctuation:#000}[data-color-mode=dark]:not([data-theme]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--text:#fff;--border:#333;--muted:#999;--status-running:#00e436;--status-attention:#ffa300;--status-idle:#999;--status-error:#ff004d;--syntax-comment:#6a9955;--syntax-keyword:#569cd6;--syntax-string:#ce9178;--syntax-number:#b5cea8;--syntax-function:#dcdcaa;--syntax-type:#4ec9b0;--syntax-variable:#9cdcfe;--syntax-operator:#d4d4d4;--syntax-punctuation:#d4d4d4}[data-theme=default]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:#fff;--text:#000;--border:#e0e0e0;--muted:#666;--status-running:#00871f;--status-attention:#8a5400;--status-idle:#666;--status-error:#d10041;--syntax-comment:green;--syntax-keyword:#00f;--syntax-string:#a31515;--syntax-number:#098658;--syntax-function:#795e26;--syntax-type:#267f99;--syntax-variable:#001080;--syntax-operator:#000;--syntax-punctuation:#000}[data-theme=default][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--text:#fff;--border:#333;--muted:#999;--status-running:#00e436;--status-attention:#ffa300;--status-idle:#999;--status-error:#ff004d;--syntax-comment:#6a9955;--syntax-keyword:#569cd6;--syntax-string:#ce9178;--syntax-number:#b5cea8;--syntax-function:#dcdcaa;--syntax-type:#4ec9b0;--syntax-variable:#9cdcfe;--syntax-operator:#d4d4d4;--syntax-punctuation:#d4d4d4}@media (prefers-color-scheme:dark){[data-theme=default]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--text:#fff;--border:#333;--muted:#999;--status-running:#00e436;--status-attention:#ffa300;--status-idle:#999;--status-error:#ff004d;--syntax-comment:#6a9955;--syntax-keyword:#569cd6;--syntax-string:#ce9178;--syntax-number:#b5cea8;--syntax-function:#dcdcaa;--syntax-type:#4ec9b0;--syntax-variable:#9cdcfe;--syntax-operator:#d4d4d4;--syntax-punctuation:#d4d4d4}}[data-theme=dim]{--dim-d-bg:#1e1f22;--dim-d-text:#d7d8da;--dim-d-border:#3a3c40;--dim-d-muted:#9a9ea6;--dim-d-running:#5ec27a;--dim-d-attention:#d8a341;--dim-d-idle:#9a9ea6;--dim-d-error:#f0637f;--dim-d-comment:#8b9199;--dim-d-keyword:#8ab4f8;--dim-d-string:#c3956a;--dim-d-number:#9fce8a;--dim-d-function:#d9c46e;--dim-d-type:#5cc2b0;--dim-d-variable:#9cc7e8;--dim-d-operator:#c3c6cb;--dim-d-punctuation:#c3c6cb;--dim-l-bg:#f0f0ee;--dim-l-text:#33353a;--dim-l-border:#d3d4d1;--dim-l-muted:#5c5f66;--dim-l-running:#1c7a37;--dim-l-attention:#8a5400;--dim-l-idle:#5c5f66;--dim-l-error:#c01743;--dim-l-comment:#4f6e42;--dim-l-keyword:#1a4fc0;--dim-l-string:#9a3a20;--dim-l-number:#1f7a4a;--dim-l-function:#6f5a12;--dim-l-type:#136b7a;--dim-l-variable:#123a9c;--dim-l-operator:#33353a;--dim-l-punctuation:#33353a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--dim-l-bg);--text:var(--dim-l-text);--border:var(--dim-l-border);--muted:var(--dim-l-muted);--status-running:var(--dim-l-running);--status-attention:var(--dim-l-attention);--status-idle:var(--dim-l-idle);--status-error:var(--dim-l-error);--syntax-comment:var(--dim-l-comment);--syntax-keyword:var(--dim-l-keyword);--syntax-string:var(--dim-l-string);--syntax-number:var(--dim-l-number);--syntax-function:var(--dim-l-function);--syntax-type:var(--dim-l-type);--syntax-variable:var(--dim-l-variable);--syntax-operator:var(--dim-l-operator);--syntax-punctuation:var(--dim-l-punctuation)}[data-theme=dim][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--dim-d-bg);--text:var(--dim-d-text);--border:var(--dim-d-border);--muted:var(--dim-d-muted);--status-running:var(--dim-d-running);--status-attention:var(--dim-d-attention);--status-idle:var(--dim-d-idle);--status-error:var(--dim-d-error);--syntax-comment:var(--dim-d-comment);--syntax-keyword:var(--dim-d-keyword);--syntax-string:var(--dim-d-string);--syntax-number:var(--dim-d-number);--syntax-function:var(--dim-d-function);--syntax-type:var(--dim-d-type);--syntax-variable:var(--dim-d-variable);--syntax-operator:var(--dim-d-operator);--syntax-punctuation:var(--dim-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=dim]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--dim-d-bg);--text:var(--dim-d-text);--border:var(--dim-d-border);--muted:var(--dim-d-muted);--status-running:var(--dim-d-running);--status-attention:var(--dim-d-attention);--status-idle:var(--dim-d-idle);--status-error:var(--dim-d-error);--syntax-comment:var(--dim-d-comment);--syntax-keyword:var(--dim-d-keyword);--syntax-string:var(--dim-d-string);--syntax-number:var(--dim-d-number);--syntax-function:var(--dim-d-function);--syntax-type:var(--dim-d-type);--syntax-variable:var(--dim-d-variable);--syntax-operator:var(--dim-d-operator);--syntax-punctuation:var(--dim-d-punctuation)}}[data-theme=solarized]{--sol-d-bg:#002b36;--sol-d-text:#93a1a1;--sol-d-border:#0a4b5a;--sol-d-muted:#839496;--sol-d-running:#859900;--sol-d-attention:#cb8b18;--sol-d-idle:#839496;--sol-d-error:#fa6459;--sol-d-comment:#7e9295;--sol-d-keyword:#6c8fd6;--sol-d-string:#2aa198;--sol-d-number:#b58900;--sol-d-function:#4a9fdb;--sol-d-type:#b58900;--sol-d-variable:#93a1a1;--sol-d-operator:#93a1a1;--sol-d-punctuation:#93a1a1;--sol-l-bg:#fdf6e3;--sol-l-text:#586e75;--sol-l-border:#e7e0cb;--sol-l-muted:#5b6f76;--sol-l-running:#567500;--sol-l-attention:#a35700;--sol-l-idle:#5b6f76;--sol-l-error:#c9412f;--sol-l-comment:#5e7272;--sol-l-keyword:#5d62bd;--sol-l-string:#147878;--sol-l-number:#8a6d00;--sol-l-function:#1f6fa8;--sol-l-type:#a35700;--sol-l-variable:#586e75;--sol-l-operator:#586e75;--sol-l-punctuation:#586e75;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--sol-l-bg);--text:var(--sol-l-text);--border:var(--sol-l-border);--muted:var(--sol-l-muted);--status-running:var(--sol-l-running);--status-attention:var(--sol-l-attention);--status-idle:var(--sol-l-idle);--status-error:var(--sol-l-error);--syntax-comment:var(--sol-l-comment);--syntax-keyword:var(--sol-l-keyword);--syntax-string:var(--sol-l-string);--syntax-number:var(--sol-l-number);--syntax-function:var(--sol-l-function);--syntax-type:var(--sol-l-type);--syntax-variable:var(--sol-l-variable);--syntax-operator:var(--sol-l-operator);--syntax-punctuation:var(--sol-l-punctuation)}[data-theme=solarized][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--sol-d-bg);--text:var(--sol-d-text);--border:var(--sol-d-border);--muted:var(--sol-d-muted);--status-running:var(--sol-d-running);--status-attention:var(--sol-d-attention);--status-idle:var(--sol-d-idle);--status-error:var(--sol-d-error);--syntax-comment:var(--sol-d-comment);--syntax-keyword:var(--sol-d-keyword);--syntax-string:var(--sol-d-string);--syntax-number:var(--sol-d-number);--syntax-function:var(--sol-d-function);--syntax-type:var(--sol-d-type);--syntax-variable:var(--sol-d-variable);--syntax-operator:var(--sol-d-operator);--syntax-punctuation:var(--sol-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=solarized]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--sol-d-bg);--text:var(--sol-d-text);--border:var(--sol-d-border);--muted:var(--sol-d-muted);--status-running:var(--sol-d-running);--status-attention:var(--sol-d-attention);--status-idle:var(--sol-d-idle);--status-error:var(--sol-d-error);--syntax-comment:var(--sol-d-comment);--syntax-keyword:var(--sol-d-keyword);--syntax-string:var(--sol-d-string);--syntax-number:var(--sol-d-number);--syntax-function:var(--sol-d-function);--syntax-type:var(--sol-d-type);--syntax-variable:var(--sol-d-variable);--syntax-operator:var(--sol-d-operator);--syntax-punctuation:var(--sol-d-punctuation)}}[data-theme=gruvbox]{--gruv-d-bg:#282828;--gruv-d-text:#ebdbb2;--gruv-d-border:#504945;--gruv-d-muted:#a89984;--gruv-d-running:#b8bb26;--gruv-d-attention:#fabd2f;--gruv-d-idle:#a89984;--gruv-d-error:#fc6a58;--gruv-d-comment:#a08f7d;--gruv-d-keyword:#fc6a58;--gruv-d-string:#b8bb26;--gruv-d-number:#d3869b;--gruv-d-function:#b8bb26;--gruv-d-type:#fabd2f;--gruv-d-variable:#83a598;--gruv-d-operator:#ebdbb2;--gruv-d-punctuation:#ebdbb2;--gruv-l-bg:#fbf1c7;--gruv-l-text:#3c3836;--gruv-l-border:#e6dcae;--gruv-l-muted:#665c54;--gruv-l-running:#557000;--gruv-l-attention:#a35a00;--gruv-l-idle:#665c54;--gruv-l-error:#9d0006;--gruv-l-comment:#6f6358;--gruv-l-keyword:#9d0006;--gruv-l-string:#557000;--gruv-l-number:#8f3f71;--gruv-l-function:#6d680c;--gruv-l-type:#97600f;--gruv-l-variable:#076678;--gruv-l-operator:#3c3836;--gruv-l-punctuation:#3c3836;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"JetBrains Mono", "IBM Plex Mono", "Courier New", monospace;--bg:var(--gruv-l-bg);--text:var(--gruv-l-text);--border:var(--gruv-l-border);--muted:var(--gruv-l-muted);--status-running:var(--gruv-l-running);--status-attention:var(--gruv-l-attention);--status-idle:var(--gruv-l-idle);--status-error:var(--gruv-l-error);--syntax-comment:var(--gruv-l-comment);--syntax-keyword:var(--gruv-l-keyword);--syntax-string:var(--gruv-l-string);--syntax-number:var(--gruv-l-number);--syntax-function:var(--gruv-l-function);--syntax-type:var(--gruv-l-type);--syntax-variable:var(--gruv-l-variable);--syntax-operator:var(--gruv-l-operator);--syntax-punctuation:var(--gruv-l-punctuation)}[data-theme=gruvbox][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--gruv-d-bg);--text:var(--gruv-d-text);--border:var(--gruv-d-border);--muted:var(--gruv-d-muted);--status-running:var(--gruv-d-running);--status-attention:var(--gruv-d-attention);--status-idle:var(--gruv-d-idle);--status-error:var(--gruv-d-error);--syntax-comment:var(--gruv-d-comment);--syntax-keyword:var(--gruv-d-keyword);--syntax-string:var(--gruv-d-string);--syntax-number:var(--gruv-d-number);--syntax-function:var(--gruv-d-function);--syntax-type:var(--gruv-d-type);--syntax-variable:var(--gruv-d-variable);--syntax-operator:var(--gruv-d-operator);--syntax-punctuation:var(--gruv-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=gruvbox]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--gruv-d-bg);--text:var(--gruv-d-text);--border:var(--gruv-d-border);--muted:var(--gruv-d-muted);--status-running:var(--gruv-d-running);--status-attention:var(--gruv-d-attention);--status-idle:var(--gruv-d-idle);--status-error:var(--gruv-d-error);--syntax-comment:var(--gruv-d-comment);--syntax-keyword:var(--gruv-d-keyword);--syntax-string:var(--gruv-d-string);--syntax-number:var(--gruv-d-number);--syntax-function:var(--gruv-d-function);--syntax-type:var(--gruv-d-type);--syntax-variable:var(--gruv-d-variable);--syntax-operator:var(--gruv-d-operator);--syntax-punctuation:var(--gruv-d-punctuation)}}[data-theme=qud]{--qud-d-bg:#0f3b3a;--qud-d-text:#d7e4de;--qud-d-border:#1f5b57;--qud-d-muted:#8fb3aa;--qud-d-running:#00c420;--qud-d-attention:#e99f10;--qud-d-idle:#8fb3aa;--qud-d-error:#ff8a70;--qud-d-comment:#8ab0a1;--qud-d-keyword:#3aa6ff;--qud-d-string:#cfc041;--qud-d-number:#e894e2;--qud-d-function:#3fd45f;--qud-d-type:#77bfcf;--qud-d-variable:#8fd0dd;--qud-d-operator:#b1c9c3;--qud-d-punctuation:#b1c9c3;--qud-l-bg:#e8efe9;--qud-l-text:#123b38;--qud-l-border:#cdddd6;--qud-l-muted:#3c655d;--qud-l-running:#0a6b1f;--qud-l-attention:#8a5400;--qud-l-idle:#3c655d;--qud-l-error:#b3341a;--qud-l-comment:#3f6a5e;--qud-l-keyword:#12489c;--qud-l-string:#7a6a00;--qud-l-number:#8f3a86;--qud-l-function:#0a6b1f;--qud-l-type:#0f6070;--qud-l-variable:#155352;--qud-l-operator:#123b38;--qud-l-punctuation:#123b38;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--qud-l-bg);--text:var(--qud-l-text);--border:var(--qud-l-border);--muted:var(--qud-l-muted);--status-running:var(--qud-l-running);--status-attention:var(--qud-l-attention);--status-idle:var(--qud-l-idle);--status-error:var(--qud-l-error);--syntax-comment:var(--qud-l-comment);--syntax-keyword:var(--qud-l-keyword);--syntax-string:var(--qud-l-string);--syntax-number:var(--qud-l-number);--syntax-function:var(--qud-l-function);--syntax-type:var(--qud-l-type);--syntax-variable:var(--qud-l-variable);--syntax-operator:var(--qud-l-operator);--syntax-punctuation:var(--qud-l-punctuation)}[data-theme=qud][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--qud-d-bg);--text:var(--qud-d-text);--border:var(--qud-d-border);--muted:var(--qud-d-muted);--status-running:var(--qud-d-running);--status-attention:var(--qud-d-attention);--status-idle:var(--qud-d-idle);--status-error:var(--qud-d-error);--syntax-comment:var(--qud-d-comment);--syntax-keyword:var(--qud-d-keyword);--syntax-string:var(--qud-d-string);--syntax-number:var(--qud-d-number);--syntax-function:var(--qud-d-function);--syntax-type:var(--qud-d-type);--syntax-variable:var(--qud-d-variable);--syntax-operator:var(--qud-d-operator);--syntax-punctuation:var(--qud-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=qud]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--qud-d-bg);--text:var(--qud-d-text);--border:var(--qud-d-border);--muted:var(--qud-d-muted);--status-running:var(--qud-d-running);--status-attention:var(--qud-d-attention);--status-idle:var(--qud-d-idle);--status-error:var(--qud-d-error);--syntax-comment:var(--qud-d-comment);--syntax-keyword:var(--qud-d-keyword);--syntax-string:var(--qud-d-string);--syntax-number:var(--qud-d-number);--syntax-function:var(--qud-d-function);--syntax-type:var(--qud-d-type);--syntax-variable:var(--qud-d-variable);--syntax-operator:var(--qud-d-operator);--syntax-punctuation:var(--qud-d-punctuation)}}[data-theme=vangogh]{--vg-d-bg:#0d1b3d;--vg-d-text:#f0e6c8;--vg-d-border:#2a3e6a;--vg-d-muted:#aab4d2;--vg-d-running:#8fbf6a;--vg-d-attention:#f5db37;--vg-d-idle:#aab4d2;--vg-d-error:#f07a52;--vg-d-comment:#8c96b8;--vg-d-keyword:#f5db37;--vg-d-string:#7fc5dc;--vg-d-number:#e0a95a;--vg-d-function:#5fb0e0;--vg-d-type:#c9b26a;--vg-d-variable:#a9c7ea;--vg-d-operator:#dad69f;--vg-d-punctuation:#dad69f;--vg-l-bg:#f4ecd2;--vg-l-text:#1a2a52;--vg-l-border:#e0d4ad;--vg-l-muted:#4a557d;--vg-l-running:#4a6b1f;--vg-l-attention:#855000;--vg-l-idle:#4a557d;--vg-l-error:#b03a1a;--vg-l-comment:#5a6488;--vg-l-keyword:#1a3a8c;--vg-l-string:#1f6f8c;--vg-l-number:#8a5a12;--vg-l-function:#2a4e93;--vg-l-type:#6a5a12;--vg-l-variable:#2a3e83;--vg-l-operator:#1a2a52;--vg-l-punctuation:#1a2a52;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--vg-l-bg);--text:var(--vg-l-text);--border:var(--vg-l-border);--muted:var(--vg-l-muted);--status-running:var(--vg-l-running);--status-attention:var(--vg-l-attention);--status-idle:var(--vg-l-idle);--status-error:var(--vg-l-error);--syntax-comment:var(--vg-l-comment);--syntax-keyword:var(--vg-l-keyword);--syntax-string:var(--vg-l-string);--syntax-number:var(--vg-l-number);--syntax-function:var(--vg-l-function);--syntax-type:var(--vg-l-type);--syntax-variable:var(--vg-l-variable);--syntax-operator:var(--vg-l-operator);--syntax-punctuation:var(--vg-l-punctuation)}[data-theme=vangogh][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--vg-d-bg);--text:var(--vg-d-text);--border:var(--vg-d-border);--muted:var(--vg-d-muted);--status-running:var(--vg-d-running);--status-attention:var(--vg-d-attention);--status-idle:var(--vg-d-idle);--status-error:var(--vg-d-error);--syntax-comment:var(--vg-d-comment);--syntax-keyword:var(--vg-d-keyword);--syntax-string:var(--vg-d-string);--syntax-number:var(--vg-d-number);--syntax-function:var(--vg-d-function);--syntax-type:var(--vg-d-type);--syntax-variable:var(--vg-d-variable);--syntax-operator:var(--vg-d-operator);--syntax-punctuation:var(--vg-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=vangogh]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--vg-d-bg);--text:var(--vg-d-text);--border:var(--vg-d-border);--muted:var(--vg-d-muted);--status-running:var(--vg-d-running);--status-attention:var(--vg-d-attention);--status-idle:var(--vg-d-idle);--status-error:var(--vg-d-error);--syntax-comment:var(--vg-d-comment);--syntax-keyword:var(--vg-d-keyword);--syntax-string:var(--vg-d-string);--syntax-number:var(--vg-d-number);--syntax-function:var(--vg-d-function);--syntax-type:var(--vg-d-type);--syntax-variable:var(--vg-d-variable);--syntax-operator:var(--vg-d-operator);--syntax-punctuation:var(--vg-d-punctuation)}}[data-theme=okabe]{--okabe-d-bg:#16181d;--okabe-d-text:#eceef2;--okabe-d-border:#363a42;--okabe-d-muted:#9ba1ab;--okabe-d-running:#56b4e9;--okabe-d-attention:#f0e442;--okabe-d-idle:#9ba1ab;--okabe-d-error:#f57a48;--okabe-d-comment:#8b95a3;--okabe-d-keyword:#56b4e9;--okabe-d-string:#4fc6a0;--okabe-d-number:#e08cc6;--okabe-d-function:#f0c04a;--okabe-d-type:#8fd4f0;--okabe-d-variable:#d7dbe1;--okabe-d-operator:#cdd2d9;--okabe-d-punctuation:#cdd2d9;--okabe-l-bg:#f6f6f3;--okabe-l-text:#1a1a1a;--okabe-l-border:#dcdcd6;--okabe-l-muted:#565b62;--okabe-l-running:#0067a3;--okabe-l-attention:#8a5a00;--okabe-l-idle:#565b62;--okabe-l-error:#b8430a;--okabe-l-comment:#4a5560;--okabe-l-keyword:#0067a3;--okabe-l-string:#077a5a;--okabe-l-number:#9a4a86;--okabe-l-function:#7a5500;--okabe-l-type:#0f6a86;--okabe-l-variable:#333;--okabe-l-operator:#1a1a1a;--okabe-l-punctuation:#1a1a1a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--okabe-l-bg);--text:var(--okabe-l-text);--border:var(--okabe-l-border);--muted:var(--okabe-l-muted);--status-running:var(--okabe-l-running);--status-attention:var(--okabe-l-attention);--status-idle:var(--okabe-l-idle);--status-error:var(--okabe-l-error);--syntax-comment:var(--okabe-l-comment);--syntax-keyword:var(--okabe-l-keyword);--syntax-string:var(--okabe-l-string);--syntax-number:var(--okabe-l-number);--syntax-function:var(--okabe-l-function);--syntax-type:var(--okabe-l-type);--syntax-variable:var(--okabe-l-variable);--syntax-operator:var(--okabe-l-operator);--syntax-punctuation:var(--okabe-l-punctuation)}[data-theme=okabe][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--okabe-d-bg);--text:var(--okabe-d-text);--border:var(--okabe-d-border);--muted:var(--okabe-d-muted);--status-running:var(--okabe-d-running);--status-attention:var(--okabe-d-attention);--status-idle:var(--okabe-d-idle);--status-error:var(--okabe-d-error);--syntax-comment:var(--okabe-d-comment);--syntax-keyword:var(--okabe-d-keyword);--syntax-string:var(--okabe-d-string);--syntax-number:var(--okabe-d-number);--syntax-function:var(--okabe-d-function);--syntax-type:var(--okabe-d-type);--syntax-variable:var(--okabe-d-variable);--syntax-operator:var(--okabe-d-operator);--syntax-punctuation:var(--okabe-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=okabe]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--okabe-d-bg);--text:var(--okabe-d-text);--border:var(--okabe-d-border);--muted:var(--okabe-d-muted);--status-running:var(--okabe-d-running);--status-attention:var(--okabe-d-attention);--status-idle:var(--okabe-d-idle);--status-error:var(--okabe-d-error);--syntax-comment:var(--okabe-d-comment);--syntax-keyword:var(--okabe-d-keyword);--syntax-string:var(--okabe-d-string);--syntax-number:var(--okabe-d-number);--syntax-function:var(--okabe-d-function);--syntax-type:var(--okabe-d-type);--syntax-variable:var(--okabe-d-variable);--syntax-operator:var(--okabe-d-operator);--syntax-punctuation:var(--okabe-d-punctuation)}}[data-theme=tol]{--tol-d-bg:#1b1d21;--tol-d-text:#e9eaec;--tol-d-border:#363a43;--tol-d-muted:#9a9ea6;--tol-d-running:#3fc0a8;--tol-d-attention:#d9c94a;--tol-d-idle:#9a9ea6;--tol-d-error:#f0687a;--tol-d-comment:#8a929c;--tol-d-keyword:#6ce;--tol-d-string:#4fc08a;--tol-d-number:#c9d;--tol-d-function:#eb5;--tol-d-type:#7fd0f0;--tol-d-variable:#d6d9de;--tol-d-operator:#cbcfd5;--tol-d-punctuation:#cbcfd5;--tol-l-bg:#f4f4f6;--tol-l-text:#1a1c22;--tol-l-border:#dadae0;--tol-l-muted:#565a62;--tol-l-running:#007a68;--tol-l-attention:#8a6a00;--tol-l-idle:#565a62;--tol-l-error:#c23346;--tol-l-comment:#565a62;--tol-l-keyword:#1a5a8c;--tol-l-string:#0a6a52;--tol-l-number:#8a3a77;--tol-l-function:#8a5a12;--tol-l-type:#0f6a86;--tol-l-variable:#2a2e83;--tol-l-operator:#1a1c22;--tol-l-punctuation:#1a1c22;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono-font:"IBM Plex Mono", "Courier New", monospace;--bg:var(--tol-l-bg);--text:var(--tol-l-text);--border:var(--tol-l-border);--muted:var(--tol-l-muted);--status-running:var(--tol-l-running);--status-attention:var(--tol-l-attention);--status-idle:var(--tol-l-idle);--status-error:var(--tol-l-error);--syntax-comment:var(--tol-l-comment);--syntax-keyword:var(--tol-l-keyword);--syntax-string:var(--tol-l-string);--syntax-number:var(--tol-l-number);--syntax-function:var(--tol-l-function);--syntax-type:var(--tol-l-type);--syntax-variable:var(--tol-l-variable);--syntax-operator:var(--tol-l-operator);--syntax-punctuation:var(--tol-l-punctuation)}[data-theme=tol][data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--tol-d-bg);--text:var(--tol-d-text);--border:var(--tol-d-border);--muted:var(--tol-d-muted);--status-running:var(--tol-d-running);--status-attention:var(--tol-d-attention);--status-idle:var(--tol-d-idle);--status-error:var(--tol-d-error);--syntax-comment:var(--tol-d-comment);--syntax-keyword:var(--tol-d-keyword);--syntax-string:var(--tol-d-string);--syntax-number:var(--tol-d-number);--syntax-function:var(--tol-d-function);--syntax-type:var(--tol-d-type);--syntax-variable:var(--tol-d-variable);--syntax-operator:var(--tol-d-operator);--syntax-punctuation:var(--tol-d-punctuation)}@media (prefers-color-scheme:dark){[data-theme=tol]:not([data-color-mode=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--tol-d-bg);--text:var(--tol-d-text);--border:var(--tol-d-border);--muted:var(--tol-d-muted);--status-running:var(--tol-d-running);--status-attention:var(--tol-d-attention);--status-idle:var(--tol-d-idle);--status-error:var(--tol-d-error);--syntax-comment:var(--tol-d-comment);--syntax-keyword:var(--tol-d-keyword);--syntax-string:var(--tol-d-string);--syntax-number:var(--tol-d-number);--syntax-function:var(--tol-d-function);--syntax-type:var(--tol-d-type);--syntax-variable:var(--tol-d-variable);--syntax-operator:var(--tol-d-operator);--syntax-punctuation:var(--tol-d-punctuation)}}
@@ -23,8 +23,40 @@
23
23
  href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;1,400&display=swap"
24
24
  rel="stylesheet"
25
25
  />
26
- <script type="module" crossorigin src="./assets/index-CBUAw_qM.js"></script>
27
- <link rel="stylesheet" crossorigin href="./assets/index-C36pWEQW.css">
26
+ <!--
27
+ Appearance bootstrap runs synchronously BEFORE the stylesheets so the
28
+ persisted theme/mode paints on first frame with no wrong-theme flash. The
29
+ allowlists here are literal copies of the appearance.ts catalog (default
30
+ theme + system mode are the no-attribute cases and are intentionally
31
+ absent); a contract test keeps the two in sync. Wrapped in try/catch so a
32
+ disabled/broken localStorage can never block the page.
33
+ -->
34
+ <script>
35
+ (function () {
36
+ try {
37
+ var THEMES = ["dim", "solarized", "gruvbox", "qud", "vangogh", "okabe", "tol"];
38
+ var MODES = ["light", "dark"];
39
+ var el = document.documentElement;
40
+ var t = null;
41
+ var m = null;
42
+ try {
43
+ t = localStorage.getItem("dreb.dashboard.theme");
44
+ m = localStorage.getItem("dreb.dashboard.colorMode");
45
+ } catch (e) {}
46
+ if (THEMES.indexOf(t) !== -1) el.setAttribute("data-theme", t);
47
+ if (MODES.indexOf(m) !== -1) el.setAttribute("data-color-mode", m);
48
+ var active = THEMES.indexOf(t) !== -1 || MODES.indexOf(m) !== -1;
49
+ if (active) {
50
+ el.style.setProperty(
51
+ "color-scheme",
52
+ m === "light" ? "light" : m === "dark" ? "dark" : "light dark",
53
+ );
54
+ }
55
+ } catch (e) {}
56
+ })();
57
+ </script>
58
+ <script type="module" crossorigin src="./assets/index-6P56WbA0.js"></script>
59
+ <link rel="stylesheet" crossorigin href="./assets/index-C4zHEMzs.css">
28
60
  </head>
29
61
  <body>
30
62
  <div id="root"></div>
package/dist/static/sw.js CHANGED
@@ -14,7 +14,7 @@
14
14
  */
15
15
 
16
16
  // Replaced at build time; see vite.config.ts generateBundle hook.
17
- const SW_CACHE_VERSION = "2.42.0";
17
+ const SW_CACHE_VERSION = "2.43.0";
18
18
  const SHELL_CACHE = `dreb-dashboard-shell-v${SW_CACHE_VERSION}`;
19
19
 
20
20
  // Shell assets (HTML, JS, CSS) get a network-first strategy. The dashboard
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreb/dashboard",
3
- "version": "2.42.0",
3
+ "version": "2.43.0",
4
4
  "description": "Web dashboard for dreb — fleet overview, chat parity, subagent observability",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -20,7 +20,9 @@
20
20
  },
21
21
  "files": [
22
22
  "dist",
23
- "README.md"
23
+ "README.md",
24
+ "src/client/assets/fonts/OFL.txt",
25
+ "src/client/assets/fonts/PROVENANCE.md"
24
26
  ],
25
27
  "scripts": {
26
28
  "clean": "shx rm -rf dist",
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,45 @@
1
+ # JetBrains Mono — self-hosted web font
2
+
3
+ These WOFF2 files back the **gruvbox** dashboard appearance theme (see
4
+ `../../styles/themes.css`). They are fetched by the browser only when gruvbox is
5
+ the active theme; the default, dim, and solarized themes use IBM Plex Mono.
6
+
7
+ ## Source
8
+
9
+ - **Font:** JetBrains Mono (variable, `wght` axis)
10
+ - **Upstream:** https://github.com/JetBrains/JetBrainsMono
11
+ - **Release:** v2.304 —
12
+ https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip
13
+ - **Files used from the release:**
14
+ - `fonts/variable/JetBrainsMono[wght].ttf` → `jetbrains-mono.woff2`
15
+ - `fonts/variable/JetBrainsMono-Italic[wght].ttf` → `jetbrains-mono-italic.woff2`
16
+
17
+ ## Processing
18
+
19
+ The upstream variable TTFs were **subset and re-encoded to WOFF2** with
20
+ `fonttools` (`pyftsubset`). The glyph outlines are **unmodified**; only the
21
+ codepoint coverage was narrowed and the container converted TTF → WOFF2:
22
+
23
+ ```
24
+ pyftsubset "JetBrainsMono[wght].ttf" \
25
+ --output-file=jetbrains-mono.woff2 --flavor=woff2 \
26
+ --unicodes="U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2070-209F,\
27
+ U+20A0-20BF,U+2100-214F,U+2190-21FF,U+2200-22FF,U+2500-257F,U+2580-259F,\
28
+ U+25A0-25FF,U+2700-27BF" \
29
+ --layout-features='*' --glyph-names --no-hinting --desubroutinize
30
+ ```
31
+
32
+ (The italic file uses the same command against `JetBrainsMono-Italic[wght].ttf`.)
33
+
34
+ The subset keeps Basic Latin + Latin-1, general/superscript punctuation,
35
+ currency, letterlike symbols, arrows, math operators, box drawing, block
36
+ elements, **geometric shapes**, and dingbats — enough to render every glyph the
37
+ dashboard uses, including the status-chip glyphs `●` `◆` `○` `✕`. Cyrillic,
38
+ Greek, and Vietnamese ranges were dropped to keep the payload small
39
+ (~64 KB normal / ~69 KB italic). The `wght` variable axis (100–800) is
40
+ preserved, so weights 400/500/600 render natively without faux-bold synthesis.
41
+
42
+ ## License
43
+
44
+ SIL Open Font License 1.1 — see `OFL.txt` (copied verbatim from the release).
45
+ Copyright 2020 The JetBrains Mono Project Authors.
@@ -1 +0,0 @@
1
- :root{--bg:#fff;--text:#000;--border:#e0e0e0;--muted:#666;--status-running:#00871f;--status-attention:#8a5400;--status-idle:#666;--status-error:#d10041;--mono-font:"IBM Plex Mono", "Courier New", monospace;--fs-small:12px;--fs-secondary:13px;--fs-body:14px;--fs-h3:16px;--fs-h2:18px;--fs-h1:24px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--radius:3px;--hairline:1px solid var(--border)}@media (prefers-color-scheme:dark){:root{--bg:#000;--text:#fff;--border:#333;--muted:#999;--status-running:#00e436;--status-attention:#ffa300;--status-idle:#999;--status-error:#ff004d}}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}img,svg{max-width:100%;display:block}button,input,textarea,select{font:inherit;color:inherit}*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}::-webkit-scrollbar-corner{background:0 0}body{background:var(--bg);color:var(--text);font-family:var(--mono-font);font-size:var(--fs-body);overflow-wrap:break-word;line-height:1.6;overflow-x:hidden}h1{font-size:var(--fs-h1);font-weight:500}h2{font-size:var(--fs-h2);font-weight:500}h3{font-size:var(--fs-h3);font-weight:500}a{color:var(--text);cursor:pointer}a:hover{color:var(--muted)}code,pre{font-family:var(--mono-font);font-size:var(--fs-secondary)}pre{border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);white-space:pre-wrap;word-break:break-word;overflow-x:auto}::placeholder{color:var(--muted);opacity:1}:focus-visible{outline:1px solid var(--text);outline-offset:2px}.muted{color:var(--muted)}.small{font-size:var(--fs-small)}.container{width:100%;max-width:1200px;padding:var(--space-4) var(--space-5);margin:0 auto}.topbar{border-bottom:var(--hairline);padding-top:env(safe-area-inset-top,0px)}.topbar-inner{max-width:1200px;padding:var(--space-3) var(--space-5);align-items:center;gap:var(--space-4);flex-wrap:wrap;margin:0 auto;display:flex}.wordmark{font-size:var(--fs-h2);letter-spacing:.04em;font-weight:600;text-decoration:none}.topbar nav{gap:var(--space-4);align-items:center;display:flex}.topbar nav a{padding:var(--space-1) 0;border-bottom:1px solid #0000;text-decoration:none}.topbar nav a:hover{color:var(--text);border-bottom-color:var(--text)}.topbar nav a[aria-current=page]{border-bottom-color:var(--text)}.topbar-spacer{margin-left:auto}.connection-indicator{align-items:center;gap:var(--space-2);display:inline-flex}footer{border-top:var(--hairline);margin-top:var(--space-7);padding:var(--space-4) 0;font-size:var(--fs-secondary);color:var(--muted)}.btn{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);cursor:pointer;font-size:var(--fs-body);text-decoration:none;transition:border-color .2s;display:inline-flex}.btn:hover{border-color:var(--text);color:var(--text)}.btn-primary{background:var(--text);color:var(--bg);border-color:var(--text)}.btn-primary:hover{color:var(--bg)}.btn-danger:hover{border-color:var(--status-error);color:var(--status-error)}.btn-small{padding:2px var(--space-2);font-size:var(--fs-small)}.chip{padding:1px var(--space-2);border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);white-space:nowrap;align-items:center;gap:6px;line-height:1.5;display:inline-flex}.chip .dot{font-size:10px}.chip-running{border-color:var(--status-running);color:var(--status-running)}.chip-attention{background:var(--status-attention);border-color:var(--status-attention);color:var(--bg);font-weight:600}.chip-idle{border-color:var(--border);color:var(--status-idle)}.chip-error{border-color:var(--status-error);color:var(--status-error)}.chip-plain{border-color:var(--border);color:var(--muted)}.card{border:var(--hairline);border-radius:var(--radius);padding:var(--space-4);transition:border-color .2s}a.card{text-decoration:none;display:block}.card:hover{border-color:var(--text);color:var(--text)}.input,.textarea,.select{width:100%;padding:var(--space-2) var(--space-3);border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-size:var(--fs-body);transition:border-color .2s}.input:hover,.textarea:hover,.select:hover{border-color:var(--text)}.textarea{resize:vertical;min-height:72px;line-height:1.6}.field{gap:var(--space-1);margin-bottom:var(--space-4);flex-direction:column;display:flex}.field>label{font-size:var(--fs-secondary)}.field>.hint{font-size:var(--fs-small);color:var(--muted)}.toggle{border:var(--hairline);border-radius:var(--radius);display:inline-flex;overflow:hidden}.toggle span{padding:2px var(--space-3);font-size:var(--fs-small);color:var(--muted)}.toggle .on{background:var(--text);color:var(--bg)}.table{border-collapse:collapse;width:100%;font-size:var(--fs-body)}.table th{text-align:left;font-weight:500;font-size:var(--fs-small);color:var(--muted);padding:var(--space-2) var(--space-3);border-bottom:var(--hairline)}.table td{padding:var(--space-2) var(--space-3);border-bottom:var(--hairline)}.modal-backdrop{padding:var(--space-4);background:#80808040;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg);border:1px solid var(--text);border-radius:var(--radius);width:100%;max-width:480px;padding:var(--space-5)}.modal h3{margin-bottom:var(--space-3)}.modal-actions{gap:var(--space-2);margin-top:var(--space-5);justify-content:flex-end;display:flex}.row{align-items:center;gap:var(--space-2);display:flex}.stack{gap:var(--space-2);flex-direction:column;display:flex}.hidden{display:none}:root{--syntax-comment:green;--syntax-keyword:#00f;--syntax-string:#a31515;--syntax-number:#098658;--syntax-function:#795e26;--syntax-type:#267f99;--syntax-variable:#001080;--syntax-operator:#000;--syntax-punctuation:#000}@media (prefers-color-scheme:dark){:root{--syntax-comment:#6a9955;--syntax-keyword:#569cd6;--syntax-string:#ce9178;--syntax-number:#b5cea8;--syntax-function:#dcdcaa;--syntax-type:#4ec9b0;--syntax-variable:#9cdcfe;--syntax-operator:#d4d4d4;--syntax-punctuation:#d4d4d4}}html,body,#root{width:100%;min-width:0;max-width:100%}#root{flex-direction:column;min-height:100vh;display:flex}.screen-fill{flex-direction:column;flex:1;min-height:0;display:flex}.fleet-head{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin:var(--space-5) 0 var(--space-6);flex-wrap:wrap;display:flex}.live-sessions{margin-bottom:var(--space-6)}.past-sessions-head{font-size:var(--fs-h3);color:var(--muted);border-bottom:var(--hairline);padding-bottom:var(--space-2);margin-bottom:var(--space-4)}.project-group{margin-bottom:var(--space-5)}.group-head{align-items:baseline;gap:var(--space-3);padding-bottom:var(--space-1);margin-bottom:var(--space-1);flex-wrap:wrap;display:flex}.group-head h2,.group-head h3{font-size:var(--fs-secondary);font-weight:600}.group-head .btn{margin-left:auto}.session-grid{gap:var(--space-4);margin-bottom:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(340px,1fr));display:grid}.session-card{border:var(--hairline);border-radius:var(--radius);min-width:0;padding:var(--space-4);gap:var(--space-2);flex-direction:column;transition:border-color .2s;display:flex}.session-card:hover{border-color:var(--text)}.session-card.attention{border-color:var(--status-attention)}.session-card.error{border-color:var(--status-error)}.session-title{justify-content:space-between;align-items:baseline;gap:var(--space-2);min-width:0;display:flex}.session-title .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.session-project{font-size:var(--fs-small);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.attention-reason{font-weight:600;font-size:var(--fs-secondary)}.error-reason{color:var(--status-error);font-size:var(--fs-secondary)}.activity{font-size:var(--fs-secondary);color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.subagents{border-left:var(--hairline);padding-left:var(--space-3);font-size:var(--fs-small);flex-direction:column;gap:2px;display:flex}.subagents .agent-line{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.subagents .agent-line .live{color:var(--status-running)}.session-meta{font-size:var(--fs-small);color:var(--muted);gap:var(--space-1);flex-wrap:wrap;display:flex}.session-actions{gap:var(--space-2);padding-top:var(--space-2);flex-wrap:wrap;margin-top:auto;display:flex}.disk-row{align-items:center;gap:var(--space-3);border-bottom:var(--hairline);font-size:var(--fs-secondary);padding:2px 0;display:flex}.disk-row .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.disk-row .meta{color:var(--muted);font-size:var(--fs-small);white-space:nowrap;margin-left:auto}.disk-row .actions{gap:var(--space-2);flex-shrink:0;display:flex}.disk-more{margin-top:var(--space-1);font-size:var(--fs-small);color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;text-decoration:underline;display:inline-block}.disk-more:hover{color:var(--text)}.empty-state{border:var(--hairline);border-radius:var(--radius);padding:var(--space-6);text-align:center;color:var(--muted);margin-top:var(--space-6)}.session-screen{flex-direction:column;width:100%;min-width:0;max-width:100%;height:100dvh;display:flex;overflow:hidden}.session-bar{border-bottom:var(--hairline);padding-top:env(safe-area-inset-top,0px);flex-shrink:0}.session-bar-inner{width:100%;min-width:0;max-width:960px;padding:var(--space-2) var(--space-4);align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:0 auto;display:flex}.session-bar .back{white-space:nowrap;text-decoration:none}.session-bar .title{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.session-bar .project,.session-bar .agent-type{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.session-bar .right{align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0;margin-left:auto;display:flex}.session-connection-indicator{flex-wrap:wrap;flex:0 auto;min-width:0}.session-connection-indicator .chip,.session-connection-indicator .btn{font-size:var(--fs-small);padding:1px var(--space-2)}.session-info-bar{font-size:var(--fs-small);color:var(--muted);justify-content:space-between;padding-top:0}.session-info-left{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.session-info-right{gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;margin-left:auto;display:flex}.stats-trigger{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:none;padding:0}.stats-popover{right:max(var(--space-4), calc((100vw - 960px) / 2 + var(--space-4)));z-index:10;border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-3);min-width:280px;position:absolute;top:78px;box-shadow:0 12px 32px #0000002e}.stats-grid{gap:var(--space-1) var(--space-3);font-size:var(--fs-small);grid-template-columns:1fr auto;display:grid}.stats-grid span{color:var(--muted)}.session-info-right span+span:before{content:"·";margin-right:var(--space-2);color:var(--muted)}.switcher{min-width:0;padding:1px var(--space-2);border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-family:inherit;transition:border-color .2s;display:inline-flex}.switcher:hover{border-color:var(--text)}.switcher .label{color:var(--muted)}.switcher .value{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.model-switcher{max-width:min(340px,45vw)}.session-bar.collapsed{background:var(--bg)}.session-bar-main .chrome-toggle{margin-left:auto}.chrome-toggle{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--muted);font:inherit;font-size:var(--fs-small);padding:1px var(--space-2);cursor:pointer;white-space:nowrap}.chrome-toggle:hover{border-color:var(--text);color:var(--text)}.chat{flex:1;min-height:0;overflow-y:auto}.chat-inner{max-width:960px;padding:var(--space-4);gap:var(--space-4);flex-direction:column;margin:0 auto;display:flex}.assistant-turn{border-left:var(--hairline);padding-left:var(--space-3);gap:var(--space-3);flex-direction:column;display:flex}.entry{min-width:0}.entry-head{font-size:var(--fs-small);color:var(--muted);margin-bottom:var(--space-1);gap:var(--space-2);align-items:baseline;display:flex}.entry-action{color:var(--muted);font:inherit;font-size:var(--fs-small);cursor:pointer;opacity:.65;background:0 0;border:none;padding:0}.entry-action:hover{opacity:1;text-decoration:underline}.skill-badge,.queued-kind{border:var(--hairline);border-radius:var(--radius);padding:0 var(--space-1);font-size:var(--fs-small);color:var(--muted)}.entry.user{align-self:flex-end;max-width:85%}.entry.user .entry-body{border:1px solid var(--text);border-radius:var(--radius);padding:var(--space-2) var(--space-3);white-space:pre-wrap}.entry.user .entry-head{justify-content:flex-end}.entry.assistant{max-width:100%}.entry.assistant .entry-body{white-space:normal}.markdown-body{color:var(--text)}.markdown-body,.markdown-body *{-webkit-text-fill-color:currentColor}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body pre,.markdown-body blockquote,.markdown-body table{margin:0 0 var(--space-2)}.markdown-body :last-child{margin-bottom:0}.markdown-body ul,.markdown-body ol{padding-left:var(--space-5)}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{font-size:var(--fs-h3);margin:var(--space-2) 0 var(--space-1);font-weight:500}.markdown-body code{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary);padding:0 4px}.markdown-body pre{background:var(--bg);margin-top:var(--space-1)}.markdown-body pre code{border:none;padding:0}.markdown-body a{text-decoration:underline}.markdown-body table{border-collapse:collapse;width:100%;font-size:var(--fs-secondary)}.markdown-body th,.markdown-body td{border:var(--hairline);padding:var(--space-1) var(--space-2);text-align:left}.markdown-body blockquote{border-left:var(--hairline);padding-left:var(--space-3);color:var(--muted)}.entry-body code{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary);padding:0 4px}details.thinking{border-left:var(--hairline);padding-left:var(--space-3);margin-bottom:var(--space-3)}details.thinking summary{cursor:pointer;font-size:var(--fs-small);color:var(--muted);-webkit-user-select:none;user-select:none;list-style:none}details.thinking summary:before{content:"▸ "}details.thinking[open] summary:before{content:"▾ "}details.thinking .thinking-body{color:var(--muted);font-size:var(--fs-secondary);padding-top:var(--space-1);white-space:pre-wrap}.tool{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-secondary)}.tool summary{cursor:pointer;-webkit-user-select:none;user-select:none;gap:var(--space-2);padding:var(--space-1) var(--space-3);align-items:baseline;list-style:none;display:flex}.tool summary:before{content:"▸";color:var(--muted)}.tool[open] summary:before{content:"▾"}.tool .tool-name{font-weight:600}.tool .tool-arg{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tool .tool-status{white-space:nowrap;font-size:var(--fs-small);color:var(--muted);margin-left:auto}.tool .tool-status.running{color:var(--status-running)}.tool .tool-status.error{color:var(--status-error)}.tool .tool-command{border-top:var(--hairline);padding:var(--space-2) var(--space-3) 0;overflow-x:auto}.tool .tool-command code{border:var(--hairline);border-radius:var(--radius);padding:var(--space-1) var(--space-2);white-space:pre-wrap;display:block}.tool .tool-input{border-top:var(--hairline);padding:var(--space-2) var(--space-3);overflow-x:auto}.tool .tool-input-label{font-size:var(--fs-small);color:var(--muted);margin-bottom:var(--space-1);display:block}.tool .tool-input pre{font-size:var(--fs-small);white-space:pre-wrap;border:none;padding:0}.tool .suggested-command{margin-top:var(--space-1)}.tool .suggested-command code{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2)}.tool .tool-result{border-top:var(--hairline);padding:var(--space-2) var(--space-3);overflow-x:auto}.tool-output-truncated,.transcript-window-control{color:var(--muted);font-size:var(--fs-small);margin-bottom:var(--space-2)}.transcript-window-control{text-align:center}.tool .tool-command+.tool-result,.tool .tool-input+.tool-result{border-top:none}.tool .tool-result pre{font-size:var(--fs-small);border:none;padding:0}.tool .tool-result pre,.tool .tool-input pre{max-height:340px;overflow-y:auto}.hljs{color:var(--text);background:0 0}.hljs-comment,.hljs-quote{color:var(--syntax-comment)}.hljs-keyword,.hljs-selector-tag{color:var(--syntax-keyword)}.hljs-number,.hljs-literal{color:var(--syntax-number)}.hljs-string,.hljs-doctag{color:var(--syntax-string)}.hljs-function,.hljs-title,.hljs-title.function_,.hljs-section,.hljs-name{color:var(--syntax-function)}.hljs-type,.hljs-class,.hljs-title.class_,.hljs-built_in{color:var(--syntax-type)}.hljs-attr,.hljs-variable,.hljs-variable.language_,.hljs-params,.hljs-property{color:var(--syntax-variable)}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:var(--syntax-keyword)}.hljs-operator{color:var(--syntax-operator)}.hljs-punctuation{color:var(--syntax-punctuation)}.hljs-subst{color:var(--text)}.diff-add{color:var(--status-running)}.diff-del{color:var(--status-error)}.entry.summary-card .entry-body{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);color:var(--muted);font-size:var(--fs-secondary)}.entry.summary-card summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:var(--fs-secondary);list-style:none}.entry.summary-card summary:before{content:"▸ "}.entry.summary-card details[open] summary:before{content:"▾ "}.entry.custom-card .entry-body,.entry.agent-result-card details{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary)}.entry.agent-result-card summary{cursor:pointer;-webkit-user-select:none;user-select:none;gap:var(--space-2);color:var(--muted);align-items:baseline;list-style:none;display:flex}.entry.agent-result-card summary:before{content:"▸ "}.entry.agent-result-card details[open] summary:before{content:"▾ "}.agent-result-header{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.entry.agent-result-card .entry-body{margin-top:var(--space-2)}.streaming-cursor:after{content:"▌";color:var(--status-running)}.dock{border-top:var(--hairline);flex-shrink:0}.dock.collapsed{background:var(--bg)}.dock-collapse-row{max-width:960px;padding:var(--space-1) calc(var(--space-4) + env(safe-area-inset-right,0px)) calc(var(--space-1) + env(safe-area-inset-bottom,0px)) calc(var(--space-4) + env(safe-area-inset-left,0px));align-items:center;gap:var(--space-3);font-size:var(--fs-small);color:var(--muted);flex-wrap:wrap;margin:0 auto;display:flex}.dock-collapsed-hint{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.dock-inner{max-width:960px;padding:var(--space-3) calc(var(--space-4) + env(safe-area-inset-right,0px)) calc(var(--space-3) + env(safe-area-inset-bottom,0px)) calc(var(--space-4) + env(safe-area-inset-left,0px));gap:var(--space-2);flex-direction:column;margin:0 auto;display:flex}.tasks{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary)}.tasks summary{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);font-size:var(--fs-small);list-style:none}.tasks summary:before{content:"▸ "}.tasks[open] summary:before{content:"▾ "}.tasks ul{padding-top:var(--space-1);list-style:none}.tasks .done{color:var(--muted)}.tasks .active{font-weight:600}.subagent-strip{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.subagent-strip .count,.subagent-strip .collapsed-hint{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.subagent-strip .subagent-toggle{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-small);padding:1px var(--space-2);cursor:pointer}.subagent-strip .subagent-toggle:hover{border-color:var(--text)}.subagent-strip.collapsed{padding-block:var(--space-1)}.subagent-strip .agent-chip{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;align-items:center;gap:6px;max-width:260px;font-family:inherit;transition:border-color .2s;display:inline-flex}.subagent-strip .agent-chip:hover{border-color:var(--text)}.subagent-strip .agent-chip .live{color:var(--status-running)}.subagent-strip .agent-chip .done{color:var(--muted)}.subagent-strip .agent-chip .task{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.status-line{align-items:center;gap:var(--space-3);font-size:var(--fs-secondary);flex-wrap:wrap;display:flex}.status-line .working{color:var(--status-running)}.status-line .warning{color:var(--status-attention)}.status-line .error{color:var(--status-error)}.status-line .queued{color:var(--muted);font-size:var(--fs-small)}.status-line .btn{margin-left:auto}.status-line .inline-stop{margin-left:var(--space-2)}.composer{gap:var(--space-2);flex-direction:column;display:flex;position:relative}.queued-message-row{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2);align-items:center;gap:var(--space-2);font-size:var(--fs-small);flex-wrap:wrap;display:flex}.queued-chip{align-items:baseline;gap:var(--space-1);text-overflow:ellipsis;white-space:nowrap;max-width:240px;color:var(--muted);display:inline-flex;overflow:hidden}.attachment-strip{gap:var(--space-2);flex-wrap:wrap;display:flex}.attachment-thumb,.attachment-file{border:var(--hairline);border-radius:var(--radius);padding:2px;position:relative}.attachment-file{align-items:baseline;gap:var(--space-2);padding:2px var(--space-2);font-size:var(--fs-small);overflow-wrap:anywhere;max-width:100%;display:inline-flex}.attachment-thumb img{object-fit:cover;width:72px;height:54px;display:block}.attachment-thumb button,.attachment-file button{border:var(--hairline);background:var(--bg);color:var(--text);cursor:pointer;border-radius:999px;position:absolute;top:-8px;right:-8px}.command-popover{left:0;right:0;bottom:calc(100% + var(--space-2));border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-1);z-index:5;max-height:260px;position:absolute;overflow-y:auto}.command-option{background:var(--bg);width:100%;color:var(--text);font:inherit;text-align:left;padding:var(--space-2);border-radius:var(--radius);gap:var(--space-2);cursor:pointer;border:none;grid-template-columns:minmax(120px,max-content) 1fr max-content;align-items:baseline;display:grid}.command-option:hover,.command-option.selected{background:var(--text);color:var(--bg)}.command-name{font-weight:500}.command-description{color:var(--muted);font-size:var(--fs-small);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.command-source{border:var(--hairline);border-radius:var(--radius);color:var(--muted);font-size:var(--fs-small);padding:0 var(--space-1)}.command-option.selected .command-description,.command-option:hover .command-description,.command-option.selected .command-source,.command-option:hover .command-source{color:var(--bg)}.composer textarea{border:var(--hairline);border-radius:var(--radius);background:var(--bg);width:100%;color:var(--text);padding:var(--space-2) var(--space-3);font-size:var(--fs-body);resize:vertical;min-height:60px;max-height:40vh;font-family:inherit;line-height:1.6;transition:border-color .2s;overflow-y:hidden}.composer textarea:hover,.composer textarea:focus{border-color:var(--text);outline:none}.hidden-file-input{display:none}.composer-row{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.mode-toggle{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);display:inline-flex;overflow:hidden}.mode-toggle button{background:var(--bg);color:var(--muted);padding:2px var(--space-3);cursor:pointer;border:none;font-family:inherit}.mode-toggle button.selected{background:var(--text);color:var(--bg)}.composer-row .send{margin-left:auto}.ghost-suggest{font-size:var(--fs-small);color:var(--muted);cursor:pointer;background:0 0;border:none;font-family:inherit}.ghost-suggest .key{border:var(--hairline);border-radius:var(--radius);padding:0 4px}.readonly-note{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);color:var(--muted)}.fallback-banner{border:1px solid var(--status-attention);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);gap:var(--space-3);align-items:baseline;display:flex}.fallback-banner .dismiss{margin-left:auto}.widget-block{border:var(--hairline);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--fs-small);color:var(--muted);white-space:pre-wrap}.toast-region{bottom:var(--space-4);right:var(--space-4);gap:var(--space-2);z-index:50;flex-direction:column;max-width:360px;display:flex;position:fixed}.toast{border:var(--hairline);border-radius:var(--radius);background:var(--bg);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);gap:var(--space-2);align-items:baseline;display:flex}.toast.warning{border-color:var(--status-attention)}.toast.error{border-color:var(--status-error)}.files-head{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin:var(--space-5) 0 var(--space-4);flex-wrap:wrap;display:flex}.crumbs{font-size:var(--fs-secondary);flex-wrap:wrap;align-items:baseline;gap:2px;display:flex}.crumbs .sep{color:var(--muted);margin:0 2px}.scope-note{color:var(--muted);font-size:var(--fs-small);margin-top:var(--space-1)}.context-trust{border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);margin-bottom:var(--space-4);font-size:var(--fs-secondary)}.context-trust p{color:var(--muted);font-size:var(--fs-small);margin:var(--space-1) 0 var(--space-2);overflow-wrap:anywhere}.context-trust-impact{margin-bottom:0!important}.context-trust-warning{color:var(--status-attention)}.context-trust-warning a{color:inherit}.head-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.places{gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;align-items:baseline;display:flex}.places .label{color:var(--muted);font-size:var(--fs-small)}.place-chip{border:var(--hairline);border-radius:var(--radius);padding:1px var(--space-2);font-size:var(--fs-small);background:var(--bg);color:var(--text);cursor:pointer;font-family:inherit;text-decoration:none;transition:border-color .2s}.place-chip:hover{border-color:var(--text)}.file-table{border-collapse:collapse;width:100%;font-size:var(--fs-secondary)}.file-table th{text-align:left;font-size:var(--fs-small);color:var(--muted);border-bottom:var(--hairline);padding:var(--space-1) var(--space-2);font-weight:400}.file-table td{border-bottom:var(--hairline);padding:var(--space-2)}.file-table .name{color:var(--text);cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.file-table .name .icon{color:var(--muted);margin-right:var(--space-1)}.file-table .meta{color:var(--muted);font-size:var(--fs-small);white-space:nowrap}.file-table .actions{text-align:right}.drop-zone{border:1px dashed var(--border);border-radius:var(--radius);padding:var(--space-4);text-align:center;color:var(--muted);font-size:var(--fs-small);margin-top:var(--space-4);transition:border-color .2s}.drop-zone.active{border-color:var(--text);color:var(--text)}.upload-warning{font-size:var(--fs-small);color:var(--muted);margin-top:var(--space-2)}.settings-wrap{max-width:720px}.settings-intro{color:var(--muted);font-size:var(--fs-secondary);margin:var(--space-2) 0 var(--space-5)}.settings-section{margin-bottom:var(--space-6)}.settings-section h2{font-size:var(--fs-h3);border-bottom:var(--hairline);padding-bottom:var(--space-2);margin-bottom:var(--space-3)}.setting-row{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-2) 0;display:flex}.setting-label{flex-direction:column;gap:2px;min-width:0;display:flex}.setting-label .name{font-size:var(--fs-secondary)}.setting-label .hint{font-size:var(--fs-small);color:var(--muted)}.setting-control select,.setting-control input{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:2px var(--space-2)}.checkbox-control{align-items:center;gap:var(--space-2);font-size:var(--fs-secondary);display:inline-flex}.checkbox-control input{width:auto}.settings-error{border:1px solid var(--status-error);border-radius:var(--radius);color:var(--status-error);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);margin-bottom:var(--space-4);white-space:pre-wrap}.settings-warning{border:1px solid var(--status-attention);border-radius:var(--radius);color:var(--status-attention);padding:var(--space-2) var(--space-3);font-size:var(--fs-secondary);margin-bottom:var(--space-4);white-space:pre-wrap}.model-picker-button{white-space:normal;overflow-wrap:anywhere;text-align:left;min-width:0;max-width:min(100%,520px)}.agent-model-row{gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;align-items:start;display:grid}.agent-model-summary{flex-direction:column;gap:2px;min-width:0;display:flex}.agent-model-name{font-size:var(--fs-secondary);font-weight:600}.agent-model-description{color:var(--muted);font-size:var(--fs-small)}.agent-model-fallbacks{gap:var(--space-1);flex-wrap:wrap;min-width:0;display:flex}.agent-model-chip{border:var(--hairline);border-radius:var(--radius);color:var(--muted);font-size:var(--fs-small);padding:0 var(--space-1);overflow-wrap:anywhere;white-space:normal;min-width:0;max-width:100%}.agent-model-editor{gap:var(--space-2);border:var(--hairline);border-radius:var(--radius);padding:var(--space-2);flex-direction:column;grid-column:1/-1;display:flex}.agent-model-entry{justify-content:space-between;gap:var(--space-2);font-size:var(--fs-secondary);align-items:center;min-width:0;display:flex}.agent-model-entry>span:first-child{overflow-wrap:anywhere;min-width:0}.agent-model-entry-actions{gap:var(--space-1);flex-shrink:0;display:flex}.context-trust-subsection{margin:var(--space-4) 0}.context-trust-subsection h3{font-size:var(--fs-secondary);margin-bottom:var(--space-1)}.context-trust-global-warning,.trusted-context-empty{margin:var(--space-3) 0}.trusted-context-folder-row{align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);font-size:var(--fs-secondary);display:flex}.trusted-context-folder-row code{overflow-wrap:anywhere;min-width:0}.trusted-context-folder-row .meta{color:var(--muted);font-size:var(--fs-small);margin-left:auto}.trusted-context-folder-row .btn{flex-shrink:0}.trusted-context-folder-add{align-items:center;gap:var(--space-2);margin-top:var(--space-3);display:flex}.trusted-context-folder-add label{font-size:var(--fs-small);white-space:nowrap}.trusted-context-folder-add input{border:var(--hairline);border-radius:var(--radius);background:var(--bg);min-width:0;color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:2px var(--space-2);flex:1}.settings-footnote{margin-top:calc(-1 * var(--space-3));margin-bottom:var(--space-5)}.device-row{align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:var(--hairline);font-size:var(--fs-secondary);display:flex}.device-row .meta{color:var(--muted);font-size:var(--fs-small);margin-left:auto}.this-device{border:var(--hairline);border-radius:var(--radius);font-size:var(--fs-small);color:var(--muted);padding:0 var(--space-1);margin-left:var(--space-1)}.pair-wrap{min-height:100vh;padding:var(--space-4);justify-content:center;align-items:center;display:flex}.pair-card{border:var(--hairline);border-radius:var(--radius);width:100%;max-width:460px;padding:var(--space-6);gap:var(--space-4);flex-direction:column;display:flex}.pair-card h1{font-size:var(--fs-h2)}.pair-card .sub{color:var(--muted);font-size:var(--fs-secondary)}.identity{gap:var(--space-2);border:var(--hairline);border-radius:var(--radius);padding:var(--space-3);font-size:var(--fs-secondary);flex-direction:column;display:flex}.identity .row-line{justify-content:space-between;gap:var(--space-3);display:flex}.identity .k{color:var(--muted);font-size:var(--fs-small)}.pin-input{text-align:center;width:100%;font-size:var(--fs-h1);letter-spacing:.5em;border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);padding:var(--space-2);font-family:inherit}.pin-input:focus{border-color:var(--text);outline:none}.pin-hint{font-size:var(--fs-small);color:var(--muted)}.security-note{border-top:var(--hairline);padding-top:var(--space-3);gap:var(--space-2);font-size:var(--fs-small);color:var(--muted);flex-direction:column;display:flex}.pair-error{color:var(--status-error);font-size:var(--fs-secondary)}.denied-card{border:1px solid var(--status-error);border-radius:var(--radius);width:100%;max-width:460px;padding:var(--space-6);gap:var(--space-3);flex-direction:column;display:flex}.field{gap:var(--space-1);flex-direction:column;display:flex}.field label{font-size:var(--fs-small);color:var(--muted)}.field input,.field textarea,.field select{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-2)}.field input:focus,.field textarea:focus{border-color:var(--text);outline:none}.recent-projects{flex-direction:column;gap:2px;max-height:160px;display:flex;overflow-y:auto}.recent-projects button{text-align:left;color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-1) var(--space-2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none}.recent-projects button:hover{background:var(--border)}.model-scope-tabs{border:var(--hairline);border-radius:var(--radius);margin-bottom:var(--space-3);font-size:var(--fs-small);display:inline-flex;overflow:hidden}.model-scope-tabs button{background:var(--bg);color:var(--muted);padding:2px var(--space-3);cursor:pointer;border:none;font-family:inherit}.model-scope-tabs button.selected{background:var(--text);color:var(--bg)}.model-picker-modal{min-width:min(360px,100vw - 32px);max-width:min(900px,100vw - 32px);overflow:auto}@media (width>=701px){.model-picker-modal{resize:horizontal}}.model-list{gap:var(--space-2);flex-direction:column;min-width:0;display:flex;overflow:hidden auto}.model-provider-group{flex-direction:column;gap:2px;display:flex}.model-provider-heading{background:var(--bg);color:var(--muted);font-size:var(--fs-small);border-bottom:var(--hairline);padding:var(--space-1) var(--space-2);z-index:1;position:sticky;top:0}.model-row{align-items:start;gap:2px var(--space-2);text-align:left;border:var(--hairline);border-radius:var(--radius);color:var(--text);font-family:inherit;font-size:var(--fs-secondary);padding:var(--space-1) var(--space-2);cursor:pointer;background:0 0;grid-template-columns:18px minmax(0,1fr) auto auto;min-width:0;display:grid}.model-row:hover,.model-row.current{border-color:var(--text)}.model-current{color:var(--status-running);grid-area:1/1}.model-id{overflow-wrap:anywhere;white-space:normal;grid-area:1/2;min-width:0;font-weight:600}.model-name{color:var(--muted);font-size:var(--fs-small);overflow-wrap:anywhere;white-space:normal;grid-area:2/2/auto/-1;min-width:0}.model-provider-badge,.model-reasoning{color:var(--muted);font-size:var(--fs-small);white-space:nowrap;border:var(--hairline);border-radius:var(--radius);padding:0 var(--space-1);grid-row:1}.model-provider-badge{grid-column:3}.model-reasoning{grid-column:4}.context-modal-body{gap:var(--space-4);flex-direction:column;display:flex}.context-section h3{font-size:var(--fs-secondary);margin-bottom:var(--space-1)}.context-section ul{gap:var(--space-1);font-size:var(--fs-small);flex-direction:column;list-style:none;display:flex}.context-section li{overflow-wrap:anywhere}.fork-message-list{gap:var(--space-2);flex-direction:column;max-height:360px;display:flex;overflow-y:auto}.fork-message{border:var(--hairline);border-radius:var(--radius);background:var(--bg);color:var(--text);font:inherit;text-align:left;padding:var(--space-2);cursor:pointer;gap:var(--space-2);display:flex}.fork-message:hover{border-color:var(--text)}.fork-entry-id{color:var(--muted);font-size:var(--fs-small);flex:none}@media (width<=700px){.container,.topbar-inner,.session-bar-inner,.dock-inner,.dock-collapse-row,.chat-inner{width:100%;min-width:0;max-width:100%;padding-left:var(--space-3);padding-right:var(--space-3)}.session-grid{grid-template-columns:minmax(0,1fr)}.session-card,.disk-row,.session-meta,.session-actions,.disk-row .actions{min-width:0;max-width:100%}.disk-row,.session-meta,.session-actions,.disk-row .actions{flex-wrap:wrap}.session-title{flex-wrap:wrap;justify-content:flex-start;min-width:0;max-width:100%}.session-title .name{text-overflow:clip;white-space:normal;overflow-wrap:anywhere;flex:12rem;min-width:0;max-width:100%;overflow:visible}.session-title .chip{flex:none;max-width:100%}.session-project,.attention-reason,.error-reason,.activity,.subagents,.session-meta,.group-head h3{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.session-project{text-overflow:clip;overflow:visible}.activity{text-overflow:clip}.subagents .agent-line{text-overflow:clip;white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%;overflow:visible}.session-meta>span{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.group-head h3{flex:1 1 0}.disk-row .name,.disk-row .meta{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.disk-row .name{text-overflow:clip;flex:1 1 0;overflow:visible}.disk-row .meta{order:3;width:100%;margin-left:0}.session-bar .project{display:none}.session-bar .right{align-items:stretch;width:100%;margin-left:0}.session-bar .right .switcher{justify-content:center}.session-bar .right .model-switcher{flex:100%;max-width:100%}.entry.user{max-width:100%}.file-table .cols{display:none}.setting-row{flex-direction:column;align-items:stretch}.setting-control{align-self:flex-end}.agent-model-row{grid-template-columns:1fr}.agent-model-edit{justify-self:start}.agent-model-entry{flex-direction:column;align-items:flex-start}.trusted-context-folder-row{flex-wrap:wrap;align-items:flex-start}.trusted-context-folder-row code{flex-basis:100%}.trusted-context-folder-row .meta{margin-left:0}.trusted-context-folder-add{flex-direction:column;align-items:stretch}.trusted-context-folder-add label{white-space:normal}.trusted-context-folder-add .btn{align-self:flex-start}.subagent-strip{align-items:stretch;gap:var(--space-2)}.subagent-strip .subagent-toggle{flex:none;min-height:32px}.subagent-strip .count,.subagent-strip .collapsed-hint{white-space:normal}.subagent-strip .agent-chip{max-width:100%}.head-actions .btn{flex:1}.composer textarea{font-size:16px}}