@dreb/dashboard 2.45.4 → 2.47.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/dist/server/runtime-pool.d.ts +1 -7
- package/dist/server/runtime-pool.d.ts.map +1 -1
- package/dist/server/runtime-pool.js +23 -1
- package/dist/server/runtime-pool.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +14 -2
- package/dist/server/server.js.map +1 -1
- package/dist/server/subagent-log.d.ts +3 -0
- package/dist/server/subagent-log.d.ts.map +1 -1
- package/dist/server/subagent-log.js +7 -1
- package/dist/server/subagent-log.js.map +1 -1
- package/dist/shared/protocol.d.ts +43 -0
- package/dist/shared/protocol.d.ts.map +1 -1
- package/dist/shared/protocol.js.map +1 -1
- package/dist/static/assets/{index-BcGevXt-.css → index-B5A5826r.css} +1 -1
- package/dist/static/assets/{index-d9zGbh25.js → index-m66yYlvT.js} +7 -7
- package/dist/static/index.html +2 -2
- package/dist/static/sw.js +1 -1
- package/package.json +1 -1
|
@@ -63,17 +63,17 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
63
63
|
`).length}function Es(e){if(e.kind===`user`)return e.text;if(e.kind===`assistant`)return e.blocks.filter(e=>e.kind===`text`).map(e=>e.text).join(`
|
|
64
64
|
`)}function Ds(e){return e.match(/^\/skill:([\w-]+)/)?.[1]}function Os(e){if(e.status===`running`){let t=Math.floor((Date.now()-e.startedAt)/1e3);return{text:`● running${t>2?` ${t}s`:``}`,cls:`running`}}return e.status===`error`?{text:`✕ error`,cls:`error`}:{text:`done`,cls:``}}var ks=new Set([`subagent`,`skill`,`web_fetch`]);function As(e){let t=e.args;if(!t||typeof t!=`object`)return[];switch(e.toolName){case`bash`:case`bash (user)`:return[];case`read`:case`ls`:case`edit`:return[];case`suggest_next`:return[];case`write`:return e.resultText&&typeof t.content==`string`?[{label:`content`,text:String(t.content),language:bs(xs(t))}]:[];case`subagent`:{let e=[];return typeof t.task==`string`&&e.push({label:`task`,text:t.task,markdown:!0}),Array.isArray(t.tasks)&&t.tasks.forEach((t,n)=>{typeof t?.task==`string`&&e.push({label:`task ${n+1}${t.agent?` (${t.agent})`:``}`,text:t.task,markdown:!0})}),Array.isArray(t.chain)&&t.chain.forEach((t,n)=>{typeof t?.task==`string`&&e.push({label:`step ${n+1}${t.agent?` (${t.agent})`:``}`,text:t.task,markdown:!0})}),e}default:{let e=[];for(let[n,r]of Object.entries(t)){let t=typeof r==`string`?r:JSON.stringify(r,null,2);t&&t.length>80&&e.push({label:n,text:t})}return e}}}function js(e){return(()=>{var t=Ro();return X(t,U(W,{get each(){return e.text.split(`
|
|
65
65
|
`)},children:e=>[(()=>{var t=zo();return X(t,e),j(n=>{var r=!!e.startsWith(`+`),i=!!e.startsWith(`-`);return r!==n.e&&t.classList.toggle(`diff-add`,n.e=r),i!==n.t&&t.classList.toggle(`diff-del`,n.t=i),n},{e:void 0,t:void 0}),t})(),`
|
|
66
|
-
`]})),t})()}function Ms(e){if(e.toolName!==`edit`)return;let t=e.details?.diff;return typeof t==`string`?t:void 0}var Ns=new Set([`image/png`,`image/jpeg`,`image/gif`,`image/webp`]),Ps=/^[0-9a-f]{64}$/,Fs=1024*1024;function Is(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.ceil(e/1024)} KB`:`${e} B`}var Ls={alt:`Tool result`,originalAriaLabel:`Original tool-result image`,enlargedAlt:`Enlarged tool-result preview`},Rs={alt:`Uploaded image`,originalAriaLabel:`Original uploaded image`,enlargedAlt:`Enlarged uploaded-image preview`};function zs(e){let[t,n]=k(),[r,i]=k(),[a,o]=k(),[s,c]=k(!1),l=t=>lt(e.scope.runtimeKey,e.image.id,t,e.scope.agentId),u=e=>{let t=l(e);if(!t){o(`Invalid image reference`);return}o(void 0),i(e),n(t)};M(()=>{let e=Ao();c(!1),o(void 0),e===`previews`?u(`preview`):e===`originals`?u(`original`):(n(void 0),i(void 0))});let d=()=>{e.image.size>Fs&&!window.confirm(`Load the ${Is(e.image.size)} original image? This may use significant data.`)||u(`original`)},f=e=>{e.key===`Escape`&&c(!1)};return R(()=>window.addEventListener(`keydown`,f)),z(()=>window.removeEventListener(`keydown`,f)),(()=>{var l=Ho(),f=l.firstChild,p=f.firstChild,m=p.firstChild;return X(l,U(G,{get when(){return t()},get fallback(){return(()=>{var t=Uo(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(n,()=>e.image.mimeType.replace(`image/`,``).toUpperCase(),r),X(n,()=>Is(e.image.size),null),i.$$click=()=>u(`preview`),X(i,()=>a()?`retry preview`:`load preview`),t})()},children:t=>(()=>{var a=Wo(),s=a.firstChild;return a.$$click=()=>r()===`preview`&&c(!0),s.addEventListener(`error`,()=>{o(`Could not load ${r()??`image`}`),n(void 0),i(void 0)}),j(n=>{var i=r()!==`preview`,o=r()===`preview`?`Enlarge image preview`:e.labels.originalAriaLabel,c=e.labels.alt,l=t();return i!==n.e&&(a.disabled=n.e=i),o!==n.t&&Y(a,`aria-label`,n.t=o),c!==n.a&&Y(s,`alt`,n.a=c),l!==n.o&&Y(s,`src`,n.o=l),n},{e:void 0,t:void 0,a:void 0,o:void 0}),a})()}),f),X(p,()=>e.image.mimeType.replace(`image/`,``).toUpperCase(),m),X(p,()=>Is(e.image.size),null),X(f,U(G,{get when(){return r()!==`original`},get children(){var t=Bo();return t.firstChild,t.$$click=d,X(t,()=>Is(e.image.size),null),t}}),null),X(l,U(G,{get when(){return a()},children:e=>(()=>{var t=Go();return X(t,e),t})()}),null),X(l,U(G,{get when(){return q(()=>!!(s()&&r()===`preview`))()&&t()},get children(){var n=Vo(),r=n.firstChild,i=r.nextSibling.firstChild,a=i.nextSibling;return r.$$click=()=>c(!1),a.$$click=()=>c(!1),j(n=>{var r=t(),a=e.labels.enlargedAlt;return r!==n.e&&Y(i,`src`,n.e=r),a!==n.t&&Y(i,`alt`,n.t=a),n},{e:void 0,t:void 0}),n}}),null),l})()}function Bs(e){let t=()=>e.images.filter(e=>Ns.has(e.mimeType)&&Ps.test(e.id)&&Number.isSafeInteger(e.size)&&e.size>0);return U(G,{get when(){return t().length>0},get children(){var n=Ko();return X(n,U(W,{get each(){return t()},children:t=>U(zs,{image:t,get scope(){return e.scope},get labels(){return e.labels}})})),n}})}function Vs(e){let[t,n]=k(!1),r=()=>e.text.length>hs;M(()=>{r()||n(!1)});let i=()=>r()&&!t()?e.text.slice(-204800):e.text;return[U(G,{get when(){return q(()=>!!r())()&&!t()},get children(){var t=qo(),r=t.firstChild.nextSibling,i=r.nextSibling.nextSibling,a=i.nextSibling.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,X(t,()=>vs(hs),r),X(t,()=>vs(e.text.length),i),a.$$click=()=>n(!0),X(a,()=>vs(e.text.length),o),t}}),U(G,{get when(){return e.markdown},get fallback(){return U(Cs,{get text(){return i()},get language(){return e.language},get autoScroll(){return e.autoScroll},get throttle(){return e.throttle}})},get children(){return U(ys,{get text(){return i()},get throttle(){return e.throttle}})}})]}function Hs(e){let t=()=>Os(e.entry),n=()=>e.entry.args,r=()=>{if(e.entry.toolName===`suggest_next`)return e.entry.details},i=()=>Ms(e.entry),a=()=>e.entry.toolName===`write`&&!e.entry.resultText&&typeof n()?.content==`string`?String(n()?.content):e.entry.resultText,o=()=>{if(e.entry.toolName===`read`||e.entry.toolName===`write`&&!e.entry.resultText)return bs(xs(n()))},s=()=>ks.has(e.entry.toolName)&&e.entry.status!==`error`,c=()=>e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`,l=()=>As(e.entry),u=()=>Po(e.entry.toolName),[d,f]=k(u()||e.entry.status===`running`),p=e.entry.status===`running`,m=!1,h=!1,g,_=e=>{d()!==e&&(h=!0,f(e),g&&clearTimeout(g),g=setTimeout(()=>{h=!1,g=void 0},0))};return M(()=>{let t=e.entry.status===`running`,n=u();t?(m=!1,_(!0)):p?(m=!1,_(n)):m||_(n),p=t}),z(()=>{g&&clearTimeout(g)}),(()=>{var u=Xo(),p=u.firstChild.firstChild,_=p.nextSibling,v=_.nextSibling;return u.addEventListener(`toggle`,t=>{let n=t.currentTarget.open;if(h){f(n);return}if(e.entry.status===`running`&&!n){h=!0,t.currentTarget.open=!0,f(!0),g&&clearTimeout(g),g=setTimeout(()=>{h=!1,g=void 0},0);return}m=!0,f(n)}),X(p,()=>e.entry.toolName),X(_,()=>ws(e.entry)),X(v,()=>t().text),X(u,U(G,{get when(){return d()},get children(){return[U(G,{get when(){return e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`},get children(){var e=Jo(),t=e.firstChild;return X(t,()=>String(n()?.command??``)),e}}),U(W,{get each(){return l()},children:e=>(()=>{var t=Zo(),n=t.firstChild;return X(n,()=>e.label),X(t,U(G,{get when(){return e.markdown},get fallback(){return U(Cs,{get text(){return e.text},get language(){return e.language}})},get children(){return U(ys,{get text(){return e.text}})}}),null),t})()}),U(G,{get when(){return e.entry.images?.length},get children(){var t=Yo();return X(t,U(Bs,{get images(){return e.entry.images},get scope(){return e.imageScope},labels:Ls})),t}}),U(Ee,{get children(){return[U(K,{get when(){return r()},children:e=>(()=>{var t=Qo(),n=t.firstChild,r=n.firstChild.nextSibling;return X(t,U(G,{get when(){return e().summary},get children(){return U(ys,{get text(){return e().summary}})}}),n),X(r,()=>e().suggestion),t})()}),U(K,{get when(){return i()},children:e=>(()=>{var t=Yo();return X(t,U(js,{get text(){return e()}})),t})()}),U(K,{get when(){return a()},children:t=>(()=>{var n=Yo();return X(n,U(Vs,{get text(){return t()},get language(){return o()},get markdown(){return s()},get autoScroll(){return c()},get throttle(){return e.entry.status===`running`}})),n})()})]}})]}}),null),j(e=>{var n=d(),r=`tool-status ${t().cls}`;return n!==e.e&&(u.open=e.e=n),r!==e.t&&je(v,e.t=r),e},{e:void 0,t:void 0}),u})()}function Us(e){let[t,n]=k(`idle`);async function r(){if(e.text){try{await navigator.clipboard.writeText(e.text),n(`copied`)}catch{n(`failed`)}setTimeout(()=>n(`idle`),1200)}}return(()=>{var n=$o();return n.$$click=r,X(n,(()=>{var e=q(()=>t()===`copied`);return()=>e()?`copied`:t()===`failed`?`copy failed`:`copy`})()),j(()=>n.disabled=!e.text),n})()}function Ws(e){let t=()=>e.entry.blocks.filter(t=>e.entry.streaming||e.entry.stopReason!==`error`||t.kind!==`thinking`||t.text.trim().length>0);return(()=>{var n=ns(),r=n.firstChild,i=r.firstChild;return X(i,()=>e.who),X(r,U(G,{get when(){return e.entry.model},get children(){return[es(),(()=>{var t=zo();return X(t,()=>e.entry.model),t})()]}}),null),X(r,U(G,{get when(){return e.entry.streaming},get children(){return[es(),ts()]}}),null),X(r,U(Us,{get text(){return Es(e.entry)}}),null),X(n,U(W,{get each(){return t()},children:(n,r)=>U(G,{get when(){return n.kind===`thinking`},get fallback(){return(()=>{var i=is();return X(i,U(ys,{get text(){return n.text},get classList(){return{"streaming-cursor":e.entry.streaming&&r()===t().length-1}},get throttle(){return e.entry.streaming}})),i})()},get children(){var t=rs();return t.firstChild,X(t,U(ys,{get text(){return n.text},class:`thinking-body markdown-body`,get throttle(){return e.entry.streaming}}),null),j(()=>t.open=ko()),t}})}),null),X(n,U(G,{get when(){return q(()=>e.entry.stopReason===`error`)()&&e.entry.errorMessage},children:e=>(()=>{var t=as();return t.firstChild,X(t,e,null),t})()}),null),n})()}function Gs(e,t){return e?.kind===`entry`&&e.entry===t}function Ks(e){let[t,n]=k(e);return{kind:`assistant-turn`,lead:e[0],entries:t,setEntries:n}}function qs(e,t=[]){let n=[],r=0;for(;r<e.length;){let i=e[r];if(i?.kind===`assistant`){let a=[i];for(r+=1;e[r]?.kind===`tool`;)a.push(e[r]),r+=1;let o=t[n.length];if(o?.kind===`assistant-turn`&&o.lead===i){let e=L(o.entries);(e.length!==a.length||a.some((t,n)=>t!==e[n]))&&o.setEntries(a),n.push(o)}else n.push(Ks(a));continue}if(i){let e=t[n.length];n.push(Gs(e,i)?e:{kind:`entry`,entry:i})}r+=1}return n}function Js(e){return U(Ee,{get children(){return[U(K,{get when(){return e.entry.kind===`user`},get children(){var t=os(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(n,U(G,{get when(){return Ds(e.entry.text)},children:e=>(()=>{var t=ls();return t.firstChild,X(t,e,null),t})()}),r),X(n,U(Us,{get text(){return Es(e.entry)}}),r),X(r,()=>e.userLabel),X(i,()=>e.entry.text),X(t,U(G,{get when(){return e.entry.images?.length},get children(){return U(Bs,{get images(){return e.entry.images},get scope(){return e.imageScope},labels:Rs})}}),null),t}}),U(K,{get when(){return e.entry.kind===`agent-result`},get children(){return U(Ys,{get entry(){return e.entry}})}}),U(K,{get when(){return e.entry.kind===`assistant`},get children(){return U(Ws,{get entry(){return e.entry},get who(){return e.who}})}}),U(K,{get when(){return e.entry.kind===`tool`},get children(){return U(Hs,{get entry(){return e.entry},get imageScope(){return e.imageScope}})}}),U(K,{get when(){return e.entry.kind===`summary`},get children(){var t=ss(),n=t.firstChild.firstChild,r=n.nextSibling;return X(n,()=>e.entry.label===`compaction`?`context compacted`:`branch summary`,null),X(n,U(G,{get when(){return e.entry.tokensBefore},get children(){return[` `,`— `,q(()=>e.entry.tokensBefore.toLocaleString()),` tokens summarized`]}}),null),X(r,()=>e.entry.text),t}}),U(K,{get when(){return e.entry.kind===`custom`},get children(){var t=cs(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(r,()=>e.entry.tag),X(i,()=>e.entry.text),t}})]}})}function Ys(e){return(()=>{var t=ds(),n=t.firstChild,r=n.firstChild;return r.firstChild,X(r,U(G,{get when(){return e.entry.header},get children(){var t=us();return X(t,()=>e.entry.header),t}}),null),X(n,U(ys,{get text(){return e.entry.text},class:`entry-body markdown-body`}),null),t})()}function Xs(e){let t=()=>e.who??`dreb`,n=()=>e.userLabel??`you`,r=()=>e.imageScope??{runtimeKey:``},i=N(t=>qs(e.entries,t)),[a,o]=k(150),s;M(()=>{let t=e.resetKey??e.entries;t!==s&&(s=t,o(150))});let c=N(()=>{let e=i(),t=a();return e.length>t?e.slice(-t):e}),l=()=>Math.max(0,i().length-c().length);return[U(G,{get when(){return l()>0},get children(){var e=fs(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return r.nextSibling,t.$$click=()=>o(Math.min(i().length,a()+150)),X(t,()=>Math.min(150,l()),n),X(t,l,r),e}}),U(W,{get each(){return c()},children:e=>U(Ee,{get children(){return[U(K,{get when(){return e.kind===`assistant-turn`},get children(){var i=ps();return X(i,U(W,{get each(){return e.entries()},children:e=>U(Js,{entry:e,get who(){return t()},get userLabel(){return n()},get imageScope(){return r()}})})),i}}),U(K,{get when(){return e.kind===`entry`},get children(){return U(Js,{get entry(){return e.entry},get who(){return t()},get userLabel(){return n()},get imageScope(){return r()}})}})]}})})]}Ae([`click`]);function Zs(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`?!0:typeof e==`object`&&!!e&&`name`in e&&e.name===`AbortError`}var Qs=new Map,$s=new Map;function ec(e){return $s.get(e)}function tc(e,t){$s.set(e,t)}function nc(e){return Qs.get(e)??[]}function rc(e,t){let n=Qs.get(e)??[];n.push(t),Qs.set(e,n.slice(-100))}function ic(e){Qs.delete(e),$s.delete(e)}var ac=J(`<p style=margin-bottom:12px>`),oc=J(`<div class=recent-projects>`),sc=J(`<div class=field><input type=text>`),cc=J(`<div class=field><textarea rows=8>`),lc=J(`<button type=button class="btn btn-small">cancel`),uc=J(`<button type=button class="btn btn-small btn-primary">confirm`),dc=J(`<button type=button class="btn btn-small btn-primary">submit`),fc=J(`<button type=button>`),pc=J(`<ul>`),mc=J(`<section class=context-section><h3>`),hc=J(`<p class="muted small">none`),gc=J(`<p class=pair-error>`),_c=J(`<p class="muted small">loading…`),vc=J(`<p class="muted small">system prompt: custom`),yc=J(`<div class=context-modal-body>`),bc=J(`<li>`),xc=J(`<span class=muted> — `),Sc=J(`<li><span>`),Cc=J(`<li><span></span><span class=muted> — `),wc=J(`<div class=model-scope-tabs role=tablist aria-label="model scope"><button type=button role=tab>scoped</button><button type=button role=tab>all`),Tc=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Ec=J(`<div class="model-list session-model-list"style=max-height:320px>`),Dc=J(`<p class="muted small">No matching models.`),Oc=J(`<section class=model-provider-group><div class=model-provider-heading>`),kc=J(`<span class=model-name>`),Ac=J(`<span class=model-reasoning>think`),jc=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),Mc=J(`<span class=project>`),Nc=J(`<output class=switcher><span class=label>ctx</span> `),Pc=J(`<span class=right><button type=button class="switcher optional model-switcher"><span class=label>model</span> <span class=value></span></button><button type=button class="switcher optional"><span class=label>think</span> </button><button type=button class=switcher>⋯`),Fc=J(`<div class=stats-popover>`),Ic=J(`<div class="session-bar-inner session-info-bar"><span class=session-info-left></span><button type=button class="session-info-right stats-trigger">`),Lc=J(`<button type=button class="btn btn-small">model: `),Rc=J(`<button type=button class="btn btn-small">think: `),zc=J(`<div class=session-bar-inner style=justify-content:flex-end;gap:8px><a class="btn btn-small">export HTML</a><button type=button class="btn btn-small">compact now</button><button type=button class="btn btn-small">expand tools</button><button type=button class="btn btn-small">collapse tools</button><button type=button class="btn btn-small">rename</button><button type=button class="btn btn-small">fork</button><button type=button class="btn btn-small">loaded context</button><button type=button class="btn btn-small btn-danger">`),Bc=J(`<div class=container style=padding-top:8px><div class=fallback-banner><span>◆ </span><button type=button class="btn btn-small dismiss">dismiss`),Vc=J(`<span class=dock-collapsed-hint>`),Hc=J(`<details class=tasks><summary>tasks — <!> of <!> done</summary><ul>`),Uc=J(`<span class=collapsed-hint>subagent panel hidden`),Wc=J(`<div class=subagent-strip><button type=button class=subagent-toggle></button><span class=count>⚡ <!> running · <!> done`),Gc=J(`<span class=working>● working`),Kc=J(`<span class=error>`),qc=J(`<button type=button class="btn btn-small btn-danger">`),Jc=J(`<div class=status-line>`),Yc=J(`<div class=queued-message-row><button type=button class="btn btn-small">restore to composer`),Xc=J(`<div class=attachment-strip>`),Zc=J(`<div class=command-popover role=listbox id=command-listbox aria-label="slash commands">`),Qc=J(`<span class=mode-toggle role=radiogroup aria-label="send mode"><button type=button title="Deliver now — injected into the running turn">steer</button><button type=button title="Queue — delivered after the agent finishes">follow-up`),$c=J(`<button type=button class=ghost-suggest>suggested: <code></code> <span class=key>tap`),el=J(`<div class=dock-inner><div class=composer><textarea></textarea><div class=composer-row><input type=file multiple class=hidden-file-input><input type=file accept=image/* multiple class=hidden-file-input><button type=button class="btn btn-small"title="attach file (uploads to workspace and sends path)">📎 file</button><button type=button class="btn btn-small"title="attach image inline">🖼 photo</button><button type=button class="btn btn-primary btn-small send">send ↵`),tl=J(`<p>Summarize older context to free window space. The transcript keeps a summary card.`),nl=J(`<div class=fork-message-list>`),rl=J(`<div class=session-screen><header class=session-bar><div class="session-bar-inner session-bar-main"><a class=back href=#/>← fleet</a><span class=title></span><button type=button class=chrome-toggle></button></div></header><main class=chat><div class=chat-inner></div></main><footer class=dock><div class=dock-collapse-row><button type=button class=chrome-toggle>`),il=J(`<span>`),al=J(`<p class="muted small">loading stats…`),ol=J(`<div class=stats-grid><span>user messages</span><strong></strong><span>assistant messages</span><strong></strong><span>tool calls/results</span><strong>/</strong><span>input/output</span><strong> / </strong><span>cache read/write</span><strong> / </strong><span>total tokens</span><strong></strong><span>cost</span><strong>$`),sl=J(`<p class=muted>loading transcript…`),cl=J(`<div class=widget-block>`),ll=J(`<li> `),ul=J(`<button type=button class=agent-chip title="view this subagent's session"><span></span><span class=task> — `),dl=J(`<button type=button class="btn btn-small btn-danger inline-stop">stop`),fl=J(`<span class=queued-chip><span class=queued-kind>`),pl=J(`<span class=attachment-file><span>📎 </span><span class=muted></span><button type=button aria-label="remove file attachment">×`),ml=J(`<span class=attachment-thumb><img><button type=button aria-label="remove image">×`),hl=J(`<span class=command-description>`),gl=J(`<button type=button role=option class=command-option><span class=command-name>/</span><span class=command-source>`),_l=J(`<button type=button class="btn btn-small btn-primary">compact`),vl=J(`<p class="muted small">loading forkable messages…`),yl=J(`<button type=button class=fork-message><span class=fork-entry-id></span><span>`),bl=J(`<button type=button class="btn btn-small btn-primary">rename`),xl=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Sl=10*1024*1024,Cl=`.dreb-dashboard-uploads`;function wl(e){return e?`${e.provider}/${e.id}`:`—`}function Tl(e){if(!e)return`—`;let t=`${e.provider}/${e.id}`;return e.name?`${t} — ${e.name}`:t}function El(e){return e<1e3?e.toString():e<1e4?`${(e/1e3).toFixed(1)}k`:e<1e6?`${Math.round(e/1e3)}k`:e<1e7?`${(e/1e6).toFixed(1)}M`:`${Math.round(e/1e6)}M`}function Dl(e){return e.replace(/^\/home\/[^/]+/,`~`)}function Ol(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function kl(e){let t=e.trim().replace(/[\\/\0]/g,`_`);return t&&t!==`.`&&t!==`..`?t:`upload.bin`}function Al(e,t){return`${new Date().toISOString().replace(/[:.]/g,`-`)}-${t+1}-${kl(e.name||`upload.bin`)}`}function jl(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Ml(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Nl(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 Pl(e){e.style.height=`auto`;let t=Math.max(120,Math.floor((window.innerHeight||800)*.4)),n=Math.min(e.scrollHeight,t);n>0&&(e.style.height=`${n}px`),e.style.overflowY=e.scrollHeight>t?`auto`:`hidden`}function Fl(e){let[t,n]=k(e.request.prefill??``),r=t=>e.onRespond({type:`extension_ui_response`,id:e.request.id,...t});return U(nt,{get title(){return e.request.title},onDismiss:()=>r({cancelled:!0}),get actions(){return U(G,{get when(){return e.request.method!==`select`},get children(){return[(()=>{var e=lc();return e.$$click=()=>r({cancelled:!0}),e})(),U(G,{get when(){return e.request.method===`confirm`},get children(){var e=uc();return e.$$click=()=>r({confirmed:!0}),e}}),U(G,{get when(){return e.request.method===`input`||e.request.method===`editor`},get children(){var e=dc();return e.$$click=()=>r({value:t()}),e}})]}})},get children(){return[U(G,{get when(){return e.request.message},get children(){var t=ac();return X(t,()=>e.request.message),t}}),U(G,{get when(){return e.request.method===`select`},get children(){var t=oc();return X(t,U(W,{get each(){return e.request.options??[]},children:e=>(()=>{var t=fc();return t.$$click=()=>r({value:e}),X(t,e),t})()})),t}}),U(G,{get when(){return e.request.method===`input`},get children(){var r=sc(),i=r.firstChild;return i.$$input=e=>n(e.currentTarget.value),j(()=>Y(i,`placeholder`,e.request.placeholder)),j(()=>i.value=t()),r}}),U(G,{get when(){return e.request.method===`editor`},get children(){var e=cc(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})]}})}function Il(e){let t=(e,t)=>(()=>{var n=mc(),r=n.firstChild;return X(r,e),X(n,U(G,{get when(){return t.length>0},get fallback(){return hc()},get children(){var e=pc();return X(e,t),e}}),null),n})();return U(nt,{title:`loaded context`,get onDismiss(){return e.onClose},get children(){return[U(G,{get when(){return e.error},get children(){var t=gc();return X(t,()=>e.error),t}}),U(G,{get when(){return e.resources},get fallback(){return _c()},children:e=>(()=>{var n=yc();return X(n,()=>t(`context files`,e().contextFiles.map(e=>(()=>{var t=bc();return X(t,()=>Dl(e.path)),j(()=>Y(t,`title`,e.path)),t})())),null),X(n,()=>t(`skills`,e().skills.map(e=>(()=>{var t=Sc(),n=t.firstChild;return X(n,()=>e.name),X(t,U(G,{get when(){return e.description},get children(){var t=xc();return t.firstChild,X(t,()=>e.description,null),t}}),null),t})())),null),X(n,()=>t(`extensions`,e().extensions.map(e=>(()=>{var t=Cc(),n=t.firstChild,r=n.nextSibling;return r.firstChild,X(n,()=>e.name??`extension`),X(r,()=>Dl(e.path),null),j(()=>Y(t,`title`,e.path)),t})())),null),X(n,()=>t(`prompt templates`,e().promptTemplates.map(e=>(()=>{var t=bc();return X(t,()=>e.name),t})())),null),X(n,U(G,{get when(){return e().systemPromptPresent},get children(){return vc()}}),null),n})()})]}})}function Ll(e){let[t,n]=k([]),[r,i]=k(``),[a,o]=k((e.state?.scopedModels?.length??0)>0?`scoped`:`all`),[s,c]=k();R(async()=>{try{let{models:t}=await Q.models(e.sessionKey);n(t)}catch(e){c(e instanceof Error?e.message:String(e))}});let l=N(()=>(e.state?.scopedModels??[]).map(e=>({provider:e.provider,id:e.id,name:e.name,reasoning:e.reasoning}))),u=()=>l().length>0,d=()=>a()===`scoped`&&u()?l():t(),f=N(()=>{let e=r().toLowerCase();return Nl(d().filter(t=>!e||Ml(t,e)).slice(0,100))}),p=t=>e.state?.model?.provider===t.provider&&e.state?.model?.id===t.id;async function m(t){try{let n=await Q.setModel(e.sessionKey,t.provider,t.id);e.onSelected(n),e.onClose()}catch(e){c(e instanceof Error?e.message:String(e))}}return U(nt,{title:`select model`,get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[U(G,{get when(){return u()},get children(){var e=wc(),t=e.firstChild,n=t.nextSibling;return t.$$click=()=>o(`scoped`),n.$$click=()=>o(`all`),j(e=>{var r=a()===`scoped`,i=a()===`scoped`,o=a()===`all`,s=a()===`all`;return r!==e.e&&Y(t,`aria-selected`,e.e=r),i!==e.t&&t.classList.toggle(`selected`,e.t=i),o!==e.a&&Y(n,`aria-selected`,e.a=o),s!==e.o&&n.classList.toggle(`selected`,e.o=s),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),(()=>{var e=Tc(),t=e.firstChild;return t.$$input=e=>i(e.currentTarget.value),j(()=>t.value=r()),e})(),U(G,{get when(){return s()},get children(){var e=gc();return X(e,s),e}}),(()=>{var e=Ec();return X(e,U(G,{get when(){return f().length>0},get fallback(){return Dc()},get children(){return U(W,{get each(){return f()},children:e=>(()=>{var t=Oc(),n=t.firstChild;return X(n,()=>e.provider),X(t,U(W,{get each(){return e.models},children:e=>(()=>{var t=jc(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return t.$$click=()=>m(e),X(n,()=>p(e)?`✓`:``),X(r,()=>e.id),X(t,U(G,{get when(){return e.name},get children(){var t=kc();return X(t,()=>e.name),t}}),i),X(i,()=>e.provider),X(t,U(G,{get when(){return e.reasoning},get children(){return Ac()}}),null),j(n=>{var r=!!p(e),i=Tl(e);return r!==n.e&&t.classList.toggle(`current`,n.e=r),i!==n.t&&Y(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),t})()})}})),e})()]}})}function Rl(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),[r,i]=k(ec(e.sessionKey)??``),[a,o]=k(`steer`),[s,c]=k(!1),[l,u]=k(!1),[d,f]=k(!1),[p,m]=k(!1),[h,g]=k(!1),[_,v]=k(!1),[y,b]=k(!1),[x,S]=k(!1),[C,w]=k(!1),[T,E]=k(!1),[D,O]=k(!1),[A,P]=k(),[F,I]=k(0),[L,ee]=k(),[te,ne]=k(),[re,ie]=k(),[ae,B]=k(),[oe,V]=k([]),[se,H]=k(!1),[ce,le]=k(0),[ue,de]=k(),[fe,pe]=k(),[me,he]=k({steering:[],followUp:[]}),[ge,_e]=k([]),[ve,ye]=k([]),[be,xe]=k(),[Se,Ce]=k(!1),[we,Te]=k([]),[Ee,K]=k(),[De,Oe]=k(!1),[ke,J]=k(),Ae,Me,Ne,Fe,Ie,Le,Re=!1,ze=()=>t()?.streaming??!1,Be=()=>t()?.compacting??!1,Ve=()=>(t()?.statusEntries??[]).some(e=>e.key===`paused`),He=()=>Object.values(t()?.backgroundAgents??{}).some(e=>e.status===`running`),Ue=()=>ze()||Be()||Ve()||He(),We=oo({scroller:()=>Ae});async function Ge(t=!1){let[n,r,i]=await Promise.allSettled([Q.stats(e.sessionKey),Q.performance(e.sessionKey),Q.branch(e.sessionKey)]),a=t?await Promise.allSettled([Q.dailyCost()]):void 0;if(Re)return;n.status===`fulfilled`&&ee(n.value),r.status===`fulfilled`&&ne(r.value),i.status===`fulfilled`&&ie(i.value.branch),a?.[0]?.status===`fulfilled`&&B(a[0].value.cost);let o=[n,r,i,...a??[]].find(e=>e.status===`rejected`);o?.status===`rejected`&&P(o.reason instanceof Error?o.reason.message:String(o.reason))}async function Ke(){try{let{commands:t}=await Q.commands(e.sessionKey);Re||V(t)}catch(e){Re||P(e instanceof Error?e.message:String(e))}}async function qe(){E(!0),pe(void 0);try{de(await Q.resources(e.sessionKey))}catch(e){pe(e instanceof Error?e.message:String(e))}}async function Je(){try{he(await Q.pending(e.sessionKey))}catch(e){P(e instanceof Error?e.message:String(e))}}function Ye(e){let t=atob(e);return Uint8Array.from(t,e=>e.charCodeAt(0))}function Xe(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}async function Ze(e){return Xe(new Uint8Array(await e.arrayBuffer()))}function Qe(e){URL.revokeObjectURL(e.previewUrl)}function $e(){for(let e of ge())Qe(e);_e([])}function et(e){_e(t=>{let n=t[e];return n&&Qe(n),t.filter((t,n)=>n!==e)})}function rt(e){if(ge().reduce((e,t)=>e+t.size,0)+e>Dn)throw Error(`Images too large: total inline images exceed ${jl(Dn)}`)}function it(e,t,n){return{blob:e,mimeType:t,fileName:n,size:e.size,previewUrl:URL.createObjectURL(e)}}function at(e,t,n){let r=Ye(e.data);return it(new Blob([r],{type:e.mimeType}),e.mimeType,`queued-image-${t+1}-${n+1}`)}function ot(e){return[...e.steeringMessages??e.steering.map(e=>({text:e})),...e.followUpMessages??e.followUp.map(e=>({text:e}))]}function Z(e){let t=[];for(let[n,r]of e.entries())for(let[e,i]of(r.images??[]).entries())t.push(at(i,n,e));return t}function st(e){for(let t of e)Qe(t)}function ct(e){let t=e.map(e=>e.text).join(`
|
|
66
|
+
`]})),t})()}function Ms(e){if(e.toolName!==`edit`)return;let t=e.details?.diff;return typeof t==`string`?t:void 0}var Ns=new Set([`image/png`,`image/jpeg`,`image/gif`,`image/webp`]),Ps=/^[0-9a-f]{64}$/,Fs=1024*1024;function Is(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.ceil(e/1024)} KB`:`${e} B`}var Ls={alt:`Tool result`,originalAriaLabel:`Original tool-result image`,enlargedAlt:`Enlarged tool-result preview`},Rs={alt:`Uploaded image`,originalAriaLabel:`Original uploaded image`,enlargedAlt:`Enlarged uploaded-image preview`};function zs(e){let[t,n]=k(),[r,i]=k(),[a,o]=k(),[s,c]=k(!1),l=t=>lt(e.scope.runtimeKey,e.image.id,t,e.scope.agentId),u=e=>{let t=l(e);if(!t){o(`Invalid image reference`);return}o(void 0),i(e),n(t)};M(()=>{let e=Ao();c(!1),o(void 0),e===`previews`?u(`preview`):e===`originals`?u(`original`):(n(void 0),i(void 0))});let d=()=>{e.image.size>Fs&&!window.confirm(`Load the ${Is(e.image.size)} original image? This may use significant data.`)||u(`original`)},f=e=>{e.key===`Escape`&&c(!1)};return R(()=>window.addEventListener(`keydown`,f)),z(()=>window.removeEventListener(`keydown`,f)),(()=>{var l=Ho(),f=l.firstChild,p=f.firstChild,m=p.firstChild;return X(l,U(G,{get when(){return t()},get fallback(){return(()=>{var t=Uo(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(n,()=>e.image.mimeType.replace(`image/`,``).toUpperCase(),r),X(n,()=>Is(e.image.size),null),i.$$click=()=>u(`preview`),X(i,()=>a()?`retry preview`:`load preview`),t})()},children:t=>(()=>{var a=Wo(),s=a.firstChild;return a.$$click=()=>r()===`preview`&&c(!0),s.addEventListener(`error`,()=>{o(`Could not load ${r()??`image`}`),n(void 0),i(void 0)}),j(n=>{var i=r()!==`preview`,o=r()===`preview`?`Enlarge image preview`:e.labels.originalAriaLabel,c=e.labels.alt,l=t();return i!==n.e&&(a.disabled=n.e=i),o!==n.t&&Y(a,`aria-label`,n.t=o),c!==n.a&&Y(s,`alt`,n.a=c),l!==n.o&&Y(s,`src`,n.o=l),n},{e:void 0,t:void 0,a:void 0,o:void 0}),a})()}),f),X(p,()=>e.image.mimeType.replace(`image/`,``).toUpperCase(),m),X(p,()=>Is(e.image.size),null),X(f,U(G,{get when(){return r()!==`original`},get children(){var t=Bo();return t.firstChild,t.$$click=d,X(t,()=>Is(e.image.size),null),t}}),null),X(l,U(G,{get when(){return a()},children:e=>(()=>{var t=Go();return X(t,e),t})()}),null),X(l,U(G,{get when(){return q(()=>!!(s()&&r()===`preview`))()&&t()},get children(){var n=Vo(),r=n.firstChild,i=r.nextSibling.firstChild,a=i.nextSibling;return r.$$click=()=>c(!1),a.$$click=()=>c(!1),j(n=>{var r=t(),a=e.labels.enlargedAlt;return r!==n.e&&Y(i,`src`,n.e=r),a!==n.t&&Y(i,`alt`,n.t=a),n},{e:void 0,t:void 0}),n}}),null),l})()}function Bs(e){let t=()=>e.images.filter(e=>Ns.has(e.mimeType)&&Ps.test(e.id)&&Number.isSafeInteger(e.size)&&e.size>0);return U(G,{get when(){return t().length>0},get children(){var n=Ko();return X(n,U(W,{get each(){return t()},children:t=>U(zs,{image:t,get scope(){return e.scope},get labels(){return e.labels}})})),n}})}function Vs(e){let[t,n]=k(!1),r=()=>e.text.length>hs;M(()=>{r()||n(!1)});let i=()=>r()&&!t()?e.text.slice(-204800):e.text;return[U(G,{get when(){return q(()=>!!r())()&&!t()},get children(){var t=qo(),r=t.firstChild.nextSibling,i=r.nextSibling.nextSibling,a=i.nextSibling.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,X(t,()=>vs(hs),r),X(t,()=>vs(e.text.length),i),a.$$click=()=>n(!0),X(a,()=>vs(e.text.length),o),t}}),U(G,{get when(){return e.markdown},get fallback(){return U(Cs,{get text(){return i()},get language(){return e.language},get autoScroll(){return e.autoScroll},get throttle(){return e.throttle}})},get children(){return U(ys,{get text(){return i()},get throttle(){return e.throttle}})}})]}function Hs(e){let t=()=>Os(e.entry),n=()=>e.entry.args,r=()=>{if(e.entry.toolName===`suggest_next`)return e.entry.details},i=()=>Ms(e.entry),a=()=>e.entry.toolName===`write`&&!e.entry.resultText&&typeof n()?.content==`string`?String(n()?.content):e.entry.resultText,o=()=>{if(e.entry.toolName===`read`||e.entry.toolName===`write`&&!e.entry.resultText)return bs(xs(n()))},s=()=>ks.has(e.entry.toolName)&&e.entry.status!==`error`,c=()=>e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`,l=()=>As(e.entry),u=()=>Po(e.entry.toolName),d=e.entry.toolName!==`ask_user`,[f,p]=k(u()||e.entry.status===`running`&&d),m=e.entry.status===`running`,h=!1,g=!1,_,v=e=>{f()!==e&&(g=!0,p(e),_&&clearTimeout(_),_=setTimeout(()=>{g=!1,_=void 0},0))};return M(()=>{let t=e.entry.status===`running`,n=u();t&&d?(h=!1,v(!0)):m?(h=!1,v(n)):h||v(n),m=t}),z(()=>{_&&clearTimeout(_)}),(()=>{var u=Xo(),m=u.firstChild.firstChild,v=m.nextSibling,y=v.nextSibling;return u.addEventListener(`toggle`,t=>{let n=t.currentTarget.open;if(g){p(n);return}if(e.entry.status===`running`&&d&&!n){g=!0,t.currentTarget.open=!0,p(!0),_&&clearTimeout(_),_=setTimeout(()=>{g=!1,_=void 0},0);return}h=!0,p(n)}),X(m,()=>e.entry.toolName),X(v,()=>ws(e.entry)),X(y,()=>t().text),X(u,U(G,{get when(){return f()},get children(){return[U(G,{get when(){return e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`},get children(){var e=Jo(),t=e.firstChild;return X(t,()=>String(n()?.command??``)),e}}),U(W,{get each(){return l()},children:e=>(()=>{var t=Zo(),n=t.firstChild;return X(n,()=>e.label),X(t,U(G,{get when(){return e.markdown},get fallback(){return U(Cs,{get text(){return e.text},get language(){return e.language}})},get children(){return U(ys,{get text(){return e.text}})}}),null),t})()}),U(G,{get when(){return e.entry.images?.length},get children(){var t=Yo();return X(t,U(Bs,{get images(){return e.entry.images},get scope(){return e.imageScope},labels:Ls})),t}}),U(Ee,{get children(){return[U(K,{get when(){return r()},children:e=>(()=>{var t=Qo(),n=t.firstChild,r=n.firstChild.nextSibling;return X(t,U(G,{get when(){return e().summary},get children(){return U(ys,{get text(){return e().summary}})}}),n),X(r,()=>e().suggestion),t})()}),U(K,{get when(){return i()},children:e=>(()=>{var t=Yo();return X(t,U(js,{get text(){return e()}})),t})()}),U(K,{get when(){return a()},children:t=>(()=>{var n=Yo();return X(n,U(Vs,{get text(){return t()},get language(){return o()},get markdown(){return s()},get autoScroll(){return c()},get throttle(){return e.entry.status===`running`}})),n})()})]}})]}}),null),j(e=>{var n=f(),r=`tool-status ${t().cls}`;return n!==e.e&&(u.open=e.e=n),r!==e.t&&je(y,e.t=r),e},{e:void 0,t:void 0}),u})()}function Us(e){let[t,n]=k(`idle`);async function r(){if(e.text){try{await navigator.clipboard.writeText(e.text),n(`copied`)}catch{n(`failed`)}setTimeout(()=>n(`idle`),1200)}}return(()=>{var n=$o();return n.$$click=r,X(n,(()=>{var e=q(()=>t()===`copied`);return()=>e()?`copied`:t()===`failed`?`copy failed`:`copy`})()),j(()=>n.disabled=!e.text),n})()}function Ws(e){let t=()=>e.entry.blocks.filter(t=>e.entry.streaming||e.entry.stopReason!==`error`||t.kind!==`thinking`||t.text.trim().length>0);return(()=>{var n=ns(),r=n.firstChild,i=r.firstChild;return X(i,()=>e.who),X(r,U(G,{get when(){return e.entry.model},get children(){return[es(),(()=>{var t=zo();return X(t,()=>e.entry.model),t})()]}}),null),X(r,U(G,{get when(){return e.entry.streaming},get children(){return[es(),ts()]}}),null),X(r,U(Us,{get text(){return Es(e.entry)}}),null),X(n,U(W,{get each(){return t()},children:(n,r)=>U(G,{get when(){return n.kind===`thinking`},get fallback(){return(()=>{var i=is();return X(i,U(ys,{get text(){return n.text},get classList(){return{"streaming-cursor":e.entry.streaming&&r()===t().length-1}},get throttle(){return e.entry.streaming}})),i})()},get children(){var t=rs();return t.firstChild,X(t,U(ys,{get text(){return n.text},class:`thinking-body markdown-body`,get throttle(){return e.entry.streaming}}),null),j(()=>t.open=ko()),t}})}),null),X(n,U(G,{get when(){return q(()=>e.entry.stopReason===`error`)()&&e.entry.errorMessage},children:e=>(()=>{var t=as();return t.firstChild,X(t,e,null),t})()}),null),n})()}function Gs(e,t){return e?.kind===`entry`&&e.entry===t}function Ks(e){let[t,n]=k(e);return{kind:`assistant-turn`,lead:e[0],entries:t,setEntries:n}}function qs(e,t=[]){let n=[],r=0;for(;r<e.length;){let i=e[r];if(i?.kind===`assistant`){let a=[i];for(r+=1;e[r]?.kind===`tool`;)a.push(e[r]),r+=1;let o=t[n.length];if(o?.kind===`assistant-turn`&&o.lead===i){let e=L(o.entries);(e.length!==a.length||a.some((t,n)=>t!==e[n]))&&o.setEntries(a),n.push(o)}else n.push(Ks(a));continue}if(i){let e=t[n.length];n.push(Gs(e,i)?e:{kind:`entry`,entry:i})}r+=1}return n}function Js(e){return U(Ee,{get children(){return[U(K,{get when(){return e.entry.kind===`user`},get children(){var t=os(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(n,U(G,{get when(){return Ds(e.entry.text)},children:e=>(()=>{var t=ls();return t.firstChild,X(t,e,null),t})()}),r),X(n,U(Us,{get text(){return Es(e.entry)}}),r),X(r,()=>e.userLabel),X(i,()=>e.entry.text),X(t,U(G,{get when(){return e.entry.images?.length},get children(){return U(Bs,{get images(){return e.entry.images},get scope(){return e.imageScope},labels:Rs})}}),null),t}}),U(K,{get when(){return e.entry.kind===`agent-result`},get children(){return U(Ys,{get entry(){return e.entry}})}}),U(K,{get when(){return e.entry.kind===`assistant`},get children(){return U(Ws,{get entry(){return e.entry},get who(){return e.who}})}}),U(K,{get when(){return e.entry.kind===`tool`},get children(){return U(Hs,{get entry(){return e.entry},get imageScope(){return e.imageScope}})}}),U(K,{get when(){return e.entry.kind===`summary`},get children(){var t=ss(),n=t.firstChild.firstChild,r=n.nextSibling;return X(n,()=>e.entry.label===`compaction`?`context compacted`:`branch summary`,null),X(n,U(G,{get when(){return e.entry.tokensBefore},get children(){return[` `,`— `,q(()=>e.entry.tokensBefore.toLocaleString()),` tokens summarized`]}}),null),X(r,()=>e.entry.text),t}}),U(K,{get when(){return e.entry.kind===`custom`},get children(){var t=cs(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return X(r,()=>e.entry.tag),X(i,()=>e.entry.text),t}})]}})}function Ys(e){return(()=>{var t=ds(),n=t.firstChild,r=n.firstChild;return r.firstChild,X(r,U(G,{get when(){return e.entry.header},get children(){var t=us();return X(t,()=>e.entry.header),t}}),null),X(n,U(ys,{get text(){return e.entry.text},class:`entry-body markdown-body`}),null),t})()}function Xs(e){let t=()=>e.who??`dreb`,n=()=>e.userLabel??`you`,r=()=>e.imageScope??{runtimeKey:``},i=N(t=>qs(e.entries,t)),[a,o]=k(150),s;M(()=>{let t=e.resetKey??e.entries;t!==s&&(s=t,o(150))});let c=N(()=>{let e=i(),t=a();return e.length>t?e.slice(-t):e}),l=()=>Math.max(0,i().length-c().length);return[U(G,{get when(){return l()>0},get children(){var e=fs(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return r.nextSibling,t.$$click=()=>o(Math.min(i().length,a()+150)),X(t,()=>Math.min(150,l()),n),X(t,l,r),e}}),U(W,{get each(){return c()},children:e=>U(Ee,{get children(){return[U(K,{get when(){return e.kind===`assistant-turn`},get children(){var i=ps();return X(i,U(W,{get each(){return e.entries()},children:e=>U(Js,{entry:e,get who(){return t()},get userLabel(){return n()},get imageScope(){return r()}})})),i}}),U(K,{get when(){return e.kind===`entry`},get children(){return U(Js,{get entry(){return e.entry},get who(){return t()},get userLabel(){return n()},get imageScope(){return r()}})}})]}})})]}Ae([`click`]);function Zs(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`?!0:typeof e==`object`&&!!e&&`name`in e&&e.name===`AbortError`}var Qs=new Map,$s=new Map;function ec(e){return $s.get(e)}function tc(e,t){$s.set(e,t)}function nc(e){return Qs.get(e)??[]}function rc(e,t){let n=Qs.get(e)??[];n.push(t),Qs.set(e,n.slice(-100))}function ic(e){Qs.delete(e),$s.delete(e)}var ac=J(`<p style=margin-bottom:12px>`),oc=J(`<div class=recent-projects>`),sc=J(`<div class=field><input type=text>`),cc=J(`<div class=field><textarea rows=8>`),lc=J(`<button type=button class="btn btn-small">cancel`),uc=J(`<button type=button class="btn btn-small btn-primary">confirm`),dc=J(`<button type=button class="btn btn-small btn-primary">submit`),fc=J(`<button type=button>`),pc=J(`<span class=ask-inline-countdown> (auto-stops in <!>s)`),mc=J(`<fieldset class=ask-options><legend class=ask-options-legend>Answer options`),hc=J(`<textarea rows=5>`),gc=J(`<div class=field><label class=ask-custom-label>`),_c=J(`<section class=ask-inline><header class=ask-inline-header></header><div class=ask-inline-actions><button type=button class="btn btn-small btn-danger"></button><button type=button class="btn btn-small btn-primary">submit`),vc=J(`<label class=ask-option><input><span>`),yc=J(`<input type=text placeholder="Type a different answer…">`),bc=J(`<ul>`),xc=J(`<section class=context-section><h3>`),Sc=J(`<p class="muted small">none`),Cc=J(`<p class=pair-error>`),wc=J(`<p class="muted small">loading…`),Tc=J(`<p class="muted small">system prompt: custom`),Ec=J(`<div class=context-modal-body>`),Dc=J(`<li>`),Oc=J(`<span class=muted> — `),kc=J(`<li><span>`),Ac=J(`<li><span></span><span class=muted> — `),jc=J(`<div class=model-scope-tabs role=tablist aria-label="model scope"><button type=button role=tab>scoped</button><button type=button role=tab>all`),Mc=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Nc=J(`<div class="model-list session-model-list"style=max-height:320px>`),Pc=J(`<p class="muted small">No matching models.`),Fc=J(`<section class=model-provider-group><div class=model-provider-heading>`),Ic=J(`<span class=model-name>`),Lc=J(`<span class=model-reasoning>think`),Rc=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),zc=J(`<span class=project>`),Bc=J(`<output class=switcher><span class=label>ctx</span> `),Vc=J(`<span class=right><button type=button class="switcher optional model-switcher"><span class=label>model</span> <span class=value></span></button><button type=button class="switcher optional"><span class=label>think</span> </button><button type=button class=switcher>⋯`),Hc=J(`<div class=stats-popover>`),Uc=J(`<div class="session-bar-inner session-info-bar"><span class=session-info-left></span><button type=button class="session-info-right stats-trigger">`),Wc=J(`<button type=button class="btn btn-small">model: `),Gc=J(`<button type=button class="btn btn-small">think: `),Kc=J(`<div class=session-bar-inner style=justify-content:flex-end;gap:8px><a class="btn btn-small">export HTML</a><button type=button class="btn btn-small">compact now</button><button type=button class="btn btn-small">expand tools</button><button type=button class="btn btn-small">collapse tools</button><button type=button class="btn btn-small">rename</button><button type=button class="btn btn-small">fork</button><button type=button class="btn btn-small">loaded context</button><button type=button class="btn btn-small btn-danger">`),qc=J(`<div class=container style=padding-top:8px><div class=fallback-banner><span>◆ </span><button type=button class="btn btn-small dismiss">dismiss`),Jc=J(`<span class=dock-collapsed-hint>`),Yc=J(`<details class=tasks><summary>tasks — <!> of <!> done</summary><ul>`),Xc=J(`<span class=collapsed-hint>subagent panel hidden`),Zc=J(`<div class=subagent-strip><button type=button class=subagent-toggle></button><span class=count>⚡ <!> running · <!> done`),Qc=J(`<span class=working>● working`),$c=J(`<span class=error>`),el=J(`<button type=button class="btn btn-small btn-danger">`),tl=J(`<div class=status-line>`),nl=J(`<div class=queued-message-row><button type=button class="btn btn-small">restore to composer`),rl=J(`<div class=attachment-strip>`),il=J(`<div class=command-popover role=listbox id=command-listbox aria-label="slash commands">`),al=J(`<span class=mode-toggle role=radiogroup aria-label="send mode"><button type=button title="Deliver now — injected into the running turn">steer</button><button type=button title="Queue — delivered after the agent finishes">follow-up`),ol=J(`<button type=button class=ghost-suggest>suggested: <code></code> <span class=key>tap`),sl=J(`<div class=dock-inner><div class=composer><textarea></textarea><div class=composer-row><input type=file multiple class=hidden-file-input><input type=file accept=image/* multiple class=hidden-file-input><button type=button class="btn btn-small"title="attach file (uploads to workspace and sends path)">📎 file</button><button type=button class="btn btn-small"title="attach image inline">🖼 photo</button><button type=button class="btn btn-primary btn-small send">send ↵`),cl=J(`<p>Summarize older context to free window space. The transcript keeps a summary card.`),ll=J(`<div class=fork-message-list>`),ul=J(`<div class=session-screen><header class=session-bar><div class="session-bar-inner session-bar-main"><a class=back href=#/>← fleet</a><span class=title></span><button type=button class=chrome-toggle></button></div></header><main class=chat><div class=chat-inner></div></main><footer class=dock><div class=dock-collapse-row><button type=button class=chrome-toggle>`),dl=J(`<span>`),fl=J(`<p class="muted small">loading stats…`),pl=J(`<div class=stats-grid><span>user messages</span><strong></strong><span>assistant messages</span><strong></strong><span>tool calls/results</span><strong>/</strong><span>input/output</span><strong> / </strong><span>cache read/write</span><strong> / </strong><span>total tokens</span><strong></strong><span>cost</span><strong>$`),ml=J(`<p class=muted>loading transcript…`),hl=J(`<div class=widget-block>`),gl=J(`<li> `),_l=J(`<button type=button class=agent-chip title="view this subagent's session"><span></span><span class=task> — `),vl=J(`<button type=button class="btn btn-small btn-danger inline-stop">stop`),yl=J(`<span class=queued-chip><span class=queued-kind>`),bl=J(`<span class=attachment-file><span>📎 </span><span class=muted></span><button type=button aria-label="remove file attachment">×`),xl=J(`<span class=attachment-thumb><img><button type=button aria-label="remove image">×`),Sl=J(`<span class=command-description>`),Cl=J(`<button type=button role=option class=command-option><span class=command-name>/</span><span class=command-source>`),wl=J(`<button type=button class="btn btn-small btn-primary">compact`),Tl=J(`<p class="muted small">loading forkable messages…`),El=J(`<button type=button class=fork-message><span class=fork-entry-id></span><span>`),Dl=J(`<button type=button class="btn btn-small btn-primary">rename`),Ol=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],kl=10*1024*1024,Al=`.dreb-dashboard-uploads`;function jl(e){return e?`${e.provider}/${e.id}`:`—`}function Ml(e){if(!e)return`—`;let t=`${e.provider}/${e.id}`;return e.name?`${t} — ${e.name}`:t}function Nl(e){return e<1e3?e.toString():e<1e4?`${(e/1e3).toFixed(1)}k`:e<1e6?`${Math.round(e/1e3)}k`:e<1e7?`${(e/1e6).toFixed(1)}M`:`${Math.round(e/1e6)}M`}function Pl(e){return e.replace(/^\/home\/[^/]+/,`~`)}function Fl(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function Il(e){let t=e.trim().replace(/[\\/\0]/g,`_`);return t&&t!==`.`&&t!==`..`?t:`upload.bin`}function Ll(e,t){return`${new Date().toISOString().replace(/[:.]/g,`-`)}-${t+1}-${Il(e.name||`upload.bin`)}`}function Rl(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function zl(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Bl(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 Vl(e){e.style.height=`auto`;let t=Math.max(120,Math.floor((window.innerHeight||800)*.4)),n=Math.min(e.scrollHeight,t);n>0&&(e.style.height=`${n}px`),e.style.overflowY=e.scrollHeight>t?`auto`:`hidden`}function Hl(e){let[t,n]=k(e.request.prefill??``),r=t=>e.onRespond({type:`extension_ui_response`,id:e.request.id,...t});return U(nt,{get title(){return e.request.title},onDismiss:()=>r({cancelled:!0}),get actions(){return U(G,{get when(){return e.request.method!==`select`},get children(){return[(()=>{var e=lc();return e.$$click=()=>r({cancelled:!0}),e})(),U(G,{get when(){return e.request.method===`confirm`},get children(){var e=uc();return e.$$click=()=>r({confirmed:!0}),e}}),U(G,{get when(){return e.request.method===`input`||e.request.method===`editor`},get children(){var e=dc();return e.$$click=()=>r({value:t()}),e}})]}})},get children(){return[U(G,{get when(){return e.request.message},get children(){var t=ac();return X(t,()=>e.request.message),t}}),U(G,{get when(){return e.request.method===`select`},get children(){var t=oc();return X(t,U(W,{get each(){return e.request.options??[]},children:e=>(()=>{var t=fc();return t.$$click=()=>r({value:e}),X(t,e),t})()})),t}}),U(G,{get when(){return e.request.method===`input`},get children(){var r=sc(),i=r.firstChild;return i.$$input=e=>n(e.currentTarget.value),j(()=>Y(i,`placeholder`,e.request.placeholder)),j(()=>i.value=t()),r}}),U(G,{get when(){return e.request.method===`editor`},get children(){var e=cc(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})]}})}function Ul(e){let t=()=>e.request.options??[],n=()=>e.request.allowFreeText!==!1,r=()=>e.request.multiSelect===!0&&t().length>0,[i,a]=k([]),[o,s]=k(``),c=t=>e.onRespond({type:`extension_ui_response`,id:e.request.id,...t}),l=e=>{r()?a(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]):a([e])},u=()=>{let e=o().trim();return{selected:i(),customText:e||void 0}},d=()=>u().selected.length>0||u().customText!==void 0,f=()=>{d()&&c(u())},p=()=>{e.stopping||e.onStop()},m=e=>{e.key===`Escape`&&(e.preventDefault(),p())};R(()=>window.addEventListener(`keydown`,m)),z(()=>window.removeEventListener(`keydown`,m));let h=typeof e.request.expiresAt==`number`?e.request.expiresAt:e.request.timeout&&e.request.timeout>0?Date.now()+e.request.timeout:void 0,g=()=>h===void 0?0:Math.max(0,Math.ceil((h-Date.now())/1e3)),[_,v]=k(g());if(h!==void 0){let e,t=()=>{let t=g();v(t),t<=0&&(e!==void 0&&clearInterval(e),e=void 0,p())};R(()=>{t(),h>Date.now()&&(e=setInterval(t,1e3))}),z(()=>{e!==void 0&&clearInterval(e)})}return(()=>{var a=_c(),c=a.firstChild,u=c.nextSibling,m=u.firstChild,g=m.nextSibling;return X(c,()=>e.request.title,null),X(c,U(G,{when:h!==void 0,get children(){var e=pc(),t=e.firstChild.nextSibling;return t.nextSibling,X(e,_,t),e}}),null),X(a,U(G,{get when(){return e.request.question},get children(){return U(ys,{get text(){return e.request.question??``},class:`ask-inline-question markdown-body`})}}),u),X(a,U(G,{get when(){return t().length>0},get children(){var n=mc();return n.firstChild,X(n,U(W,{get each(){return t()},children:t=>(()=>{var n=vc(),a=n.firstChild,o=a.nextSibling;return a.addEventListener(`change`,()=>l(t)),X(o,t),j(o=>{var s=!!i().includes(t),c=r()?`checkbox`:`radio`,l=`ask-${e.request.id}`;return s!==o.e&&n.classList.toggle(`selected`,o.e=s),c!==o.t&&Y(a,`type`,o.t=c),l!==o.a&&Y(a,`name`,o.a=l),o},{e:void 0,t:void 0,a:void 0}),j(()=>a.checked=i().includes(t)),n})()}),null),n}}),u),X(a,U(G,{get when(){return n()},get children(){var n=gc(),r=n.firstChild;return X(r,()=>t().length>0?`Or type your own answer`:`Your answer`),X(n,U(G,{get when(){return e.request.multiline},get fallback(){return(()=>{var t=yc();return t.$$input=e=>s(e.currentTarget.value),j(()=>Y(t,`id`,`ask-custom-${e.request.id}`)),j(()=>t.value=o()),t})()},get children(){var t=hc();return t.$$input=e=>s(e.currentTarget.value),j(()=>Y(t,`id`,`ask-custom-${e.request.id}`)),j(()=>t.value=o()),t}}),null),j(()=>Y(r,`for`,`ask-custom-${e.request.id}`)),n}}),u),m.$$click=p,X(m,()=>e.stopping?`stopping…`:`■ stop agent`),g.$$click=f,j(t=>{var n=e.request.title,r=e.stopping,i=!d();return n!==t.e&&Y(a,`aria-label`,t.e=n),r!==t.t&&(m.disabled=t.t=r),i!==t.a&&(g.disabled=t.a=i),t},{e:void 0,t:void 0,a:void 0}),a})()}function Wl(e){let t=(e,t)=>(()=>{var n=xc(),r=n.firstChild;return X(r,e),X(n,U(G,{get when(){return t.length>0},get fallback(){return Sc()},get children(){var e=bc();return X(e,t),e}}),null),n})();return U(nt,{title:`loaded context`,get onDismiss(){return e.onClose},get children(){return[U(G,{get when(){return e.error},get children(){var t=Cc();return X(t,()=>e.error),t}}),U(G,{get when(){return e.resources},get fallback(){return wc()},children:e=>(()=>{var n=Ec();return X(n,()=>t(`context files`,e().contextFiles.map(e=>(()=>{var t=Dc();return X(t,()=>Pl(e.path)),j(()=>Y(t,`title`,e.path)),t})())),null),X(n,()=>t(`skills`,e().skills.map(e=>(()=>{var t=kc(),n=t.firstChild;return X(n,()=>e.name),X(t,U(G,{get when(){return e.description},get children(){var t=Oc();return t.firstChild,X(t,()=>e.description,null),t}}),null),t})())),null),X(n,()=>t(`extensions`,e().extensions.map(e=>(()=>{var t=Ac(),n=t.firstChild,r=n.nextSibling;return r.firstChild,X(n,()=>e.name??`extension`),X(r,()=>Pl(e.path),null),j(()=>Y(t,`title`,e.path)),t})())),null),X(n,()=>t(`prompt templates`,e().promptTemplates.map(e=>(()=>{var t=Dc();return X(t,()=>e.name),t})())),null),X(n,U(G,{get when(){return e().systemPromptPresent},get children(){return Tc()}}),null),n})()})]}})}function Gl(e){let[t,n]=k([]),[r,i]=k(``),[a,o]=k((e.state?.scopedModels?.length??0)>0?`scoped`:`all`),[s,c]=k();R(async()=>{try{let{models:t}=await Q.models(e.sessionKey);n(t)}catch(e){c(e instanceof Error?e.message:String(e))}});let l=N(()=>(e.state?.scopedModels??[]).map(e=>({provider:e.provider,id:e.id,name:e.name,reasoning:e.reasoning}))),u=()=>l().length>0,d=()=>a()===`scoped`&&u()?l():t(),f=N(()=>{let e=r().toLowerCase();return Bl(d().filter(t=>!e||zl(t,e)).slice(0,100))}),p=t=>e.state?.model?.provider===t.provider&&e.state?.model?.id===t.id;async function m(t){try{let n=await Q.setModel(e.sessionKey,t.provider,t.id);e.onSelected(n),e.onClose()}catch(e){c(e instanceof Error?e.message:String(e))}}return U(nt,{title:`select model`,get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[U(G,{get when(){return u()},get children(){var e=jc(),t=e.firstChild,n=t.nextSibling;return t.$$click=()=>o(`scoped`),n.$$click=()=>o(`all`),j(e=>{var r=a()===`scoped`,i=a()===`scoped`,o=a()===`all`,s=a()===`all`;return r!==e.e&&Y(t,`aria-selected`,e.e=r),i!==e.t&&t.classList.toggle(`selected`,e.t=i),o!==e.a&&Y(n,`aria-selected`,e.a=o),s!==e.o&&n.classList.toggle(`selected`,e.o=s),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),(()=>{var e=Mc(),t=e.firstChild;return t.$$input=e=>i(e.currentTarget.value),j(()=>t.value=r()),e})(),U(G,{get when(){return s()},get children(){var e=Cc();return X(e,s),e}}),(()=>{var e=Nc();return X(e,U(G,{get when(){return f().length>0},get fallback(){return Pc()},get children(){return U(W,{get each(){return f()},children:e=>(()=>{var t=Fc(),n=t.firstChild;return X(n,()=>e.provider),X(t,U(W,{get each(){return e.models},children:e=>(()=>{var t=Rc(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return t.$$click=()=>m(e),X(n,()=>p(e)?`✓`:``),X(r,()=>e.id),X(t,U(G,{get when(){return e.name},get children(){var t=Ic();return X(t,()=>e.name),t}}),i),X(i,()=>e.provider),X(t,U(G,{get when(){return e.reasoning},get children(){return Lc()}}),null),j(n=>{var r=!!p(e),i=Ml(e);return r!==n.e&&t.classList.toggle(`current`,n.e=r),i!==n.t&&Y(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),t})()})}})),e})()]}})}function Kl(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),[r,i]=k(ec(e.sessionKey)??``),[a,o]=k(`steer`),[s,c]=k(!1),[l,u]=k(!1),[d,f]=k(!1),[p,m]=k(!1),[h,g]=k(!1),[_,v]=k(!1),[y,b]=k(!1),[x,S]=k(!1),[C,w]=k(!1),[T,E]=k(!1),[D,O]=k(!1),[A,P]=k(),[F,I]=k(0),[L,ee]=k(),[te,ne]=k(),[re,ie]=k(),[ae,B]=k(),[oe,V]=k([]),[se,H]=k(!1),[ce,le]=k(0),[ue,de]=k(),[fe,pe]=k(),[me,he]=k({steering:[],followUp:[]}),[ge,_e]=k([]),[ve,ye]=k([]),[be,xe]=k(),[Se,Ce]=k(!1),[we,Te]=k([]),[Ee,K]=k(),[De,Oe]=k(!1),[ke,J]=k(),Ae,Me,Ne,Fe,Ie,Le,Re=!1,ze=()=>t()?.streaming??!1,Be=()=>t()?.compacting??!1,Ve=()=>(t()?.statusEntries??[]).some(e=>e.key===`paused`),He=()=>Object.values(t()?.backgroundAgents??{}).some(e=>e.status===`running`),Ue=()=>ze()||Be()||Ve()||He(),We=oo({scroller:()=>Ae});async function Ge(t=!1){let[n,r,i]=await Promise.allSettled([Q.stats(e.sessionKey),Q.performance(e.sessionKey),Q.branch(e.sessionKey)]),a=t?await Promise.allSettled([Q.dailyCost()]):void 0;if(Re)return;n.status===`fulfilled`&&ee(n.value),r.status===`fulfilled`&&ne(r.value),i.status===`fulfilled`&&ie(i.value.branch),a?.[0]?.status===`fulfilled`&&B(a[0].value.cost);let o=[n,r,i,...a??[]].find(e=>e.status===`rejected`);o?.status===`rejected`&&P(o.reason instanceof Error?o.reason.message:String(o.reason))}async function Ke(){try{let{commands:t}=await Q.commands(e.sessionKey);Re||V(t)}catch(e){Re||P(e instanceof Error?e.message:String(e))}}async function qe(){E(!0),pe(void 0);try{de(await Q.resources(e.sessionKey))}catch(e){pe(e instanceof Error?e.message:String(e))}}async function Je(){try{he(await Q.pending(e.sessionKey))}catch(e){P(e instanceof Error?e.message:String(e))}}let Ye=new Set,Xe=async t=>{let n=typeof t.id==`string`?t.id:void 0;if(!(n&&Ye.has(n))){n&&Ye.add(n);try{await Q.extensionUiResponse(e.sessionKey,t),n&&e.store.resolveUiRequest(e.sessionKey,n)}catch(e){P(e instanceof Error?e.message:String(e))}finally{n&&Ye.delete(n)}}};function Ze(e){let t=atob(e);return Uint8Array.from(t,e=>e.charCodeAt(0))}function Qe(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}async function $e(e){return Qe(new Uint8Array(await e.arrayBuffer()))}function et(e){URL.revokeObjectURL(e.previewUrl)}function rt(){for(let e of ge())et(e);_e([])}function it(e){_e(t=>{let n=t[e];return n&&et(n),t.filter((t,n)=>n!==e)})}function at(e){if(ge().reduce((e,t)=>e+t.size,0)+e>Dn)throw Error(`Images too large: total inline images exceed ${Rl(Dn)}`)}function ot(e,t,n){return{blob:e,mimeType:t,fileName:n,size:e.size,previewUrl:URL.createObjectURL(e)}}function Z(e,t,n){let r=Ze(e.data);return ot(new Blob([r],{type:e.mimeType}),e.mimeType,`queued-image-${t+1}-${n+1}`)}function st(e){return[...e.steeringMessages??e.steering.map(e=>({text:e})),...e.followUpMessages??e.followUp.map(e=>({text:e}))]}function ct(e){let t=[];for(let[n,r]of e.entries())for(let[e,i]of(r.images??[]).entries())t.push(Z(i,n,e));return t}function lt(e){for(let t of e)et(t)}function ut(e){let t=e.map(e=>e.text).join(`
|
|
67
67
|
|
|
68
68
|
`),n=r();i([t,n].filter(e=>e.trim()).join(`
|
|
69
69
|
|
|
70
|
-
`))}async function
|
|
71
|
-
`)),ge().length>0&&t.push([`Attached images included inline with this turn:`,...ge().map((e,t)=>`- image ${t+1}: ${e.fileName} (${
|
|
70
|
+
`))}async function dt(){let t=[];try{let n=await Q.pending(e.sessionKey);t.push(...ct(st(n))),at(t.reduce((e,t)=>e+t.size,0))}catch(e){lt(t),P(e instanceof Error?e.message:String(e));return}lt(t);let n=[],r=!1;try{let t=st(await Q.dequeue(e.sessionKey));he({steering:[],followUp:[],steeringMessages:[],followUpMessages:[]}),ut(t);try{n.push(...ct(t)),at(n.reduce((e,t)=>e+t.size,0))}catch(e){throw Error(`Queued image restore failed after restoring text: ${e instanceof Error?e.message:String(e)}`)}n.length>0&&(_e(e=>[...n,...e]),r=!0),queueMicrotask(()=>Ne?.focus())}catch(e){r||lt(n),P(e instanceof Error?e.message:String(e))}}function ft(e){if(!e.type.startsWith(`image/`))throw Error(`Not an image: ${e.name||e.type}`);if(e.size>kl)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`);return ot(e,e.type,e.name||`image`)}async function pt(e){let t=[...e];if(t.length===0)return;let n=[];try{for(let e of t){if(!e.type.startsWith(`image/`))throw Error(`Not an image: ${e.name||e.type}`);if(e.size>kl)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`)}at(t.reduce((e,t)=>e+t.size,0));for(let e of t)n.push(ft(e));_e(e=>[...e,...n])}catch(e){for(let e of n)et(e);P(e instanceof Error?e.message:String(e))}}async function mt(e){let t=Fl(e,Al);try{return await Q.listFiles(t),t}catch{return await Q.mkdir(e,Al),t}}async function ht(e){let t=[...e];if(t.length===0)return;let r=n()?.cwd;if(!r){P(`Cannot attach files until the runtime is loaded.`);return}P(void 0);try{let e=await mt(r),n=[];for(let[r,i]of t.entries()){let t=Ll(i,r),a=await Q.upload(e,new File([i],t,{type:i.type}),!1);n.push({fileName:i.name||t,size:i.size,mimeType:i.type||`application/octet-stream`,path:a.path})}ye(e=>[...e,...n])}catch(e){P(e instanceof Error?e.message:String(e))}}async function gt(){Ce(!0),K(void 0),Te([]);try{let{messages:t}=await Q.forkMessages(e.sessionKey);Te(t)}catch(e){K(e instanceof Error?e.message:String(e))}}async function _t(t){K(void 0);try{let n=await Q.fork(e.sessionKey,t);n.cancelled||i(n.text),await e.store.hydrateSession(e.sessionKey),await e.store.refreshDiskSessions(),Ce(!1)}catch(e){K(e instanceof Error?e.message:String(e))}}async function vt(){Oe(!0),J(void 0);try{ee(await Q.stats(e.sessionKey))}catch(e){J(e instanceof Error?e.message:String(e))}}R(()=>{let t=new AbortController;e.store.hydrateSession(e.sessionKey,t.signal).catch(e=>{t.signal.aborted&&Zs(e)||P(e instanceof Error?e.message:String(e))}),Ge(!0),Ke(),Je();let n=setInterval(()=>void Ge(!1),5e3);z(()=>{Re=!0,t.abort(),clearInterval(n)})});let yt=e=>{if(!De())return;let t=e.target;t&&Le?.contains(t)||Oe(!1)},bt=e=>{e.key===`Escape`&&Oe(!1)};document.addEventListener(`mousedown`,yt),document.addEventListener(`keydown`,bt),z(()=>{document.removeEventListener(`mousedown`,yt),document.removeEventListener(`keydown`,bt)});let xt=setInterval(()=>{let e=t()?.workingSince;I(e?Math.floor((Date.now()-e)/1e3):0)},1e3);z(()=>{clearInterval(xt),We.dispose(),rt()}),M(()=>{let e=t()?.composerPrefill;e&&i(e)}),M(()=>{r(),Ne&&queueMicrotask(()=>Ne&&Vl(Ne))}),M(()=>{e.store.revisions[e.sessionKey],t()?.entries.length,We.notifyContentChanged()}),R(()=>{We.observeContent(Me),We.observeViewport(Ae),Ae&&z(co(We,Ae,{keyboard:`window`}))});let St=!1;M(()=>{let e=ze();St&&!e&&Ge(!0),St!==e&&Je(),St=e}),M(()=>{n()?.state.pendingMessageCount,Je()}),M(()=>{tc(e.sessionKey,r())});function Ct(e){let t=[];return ve().length>0&&t.push([`Attached files uploaded to the host (paths only; inspect deliberately if needed):`,...ve().map(e=>`- ${e.path} (${e.fileName}, ${Rl(e.size)}, ${e.mimeType||`unknown type`})`)].join(`
|
|
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),rc(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()}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),await e.store.removeRuntime(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`${Dl(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(`↑${El(e.input)}`),e.output&&t.push(`↓${El(e.output)}`),e.cacheRead&&t.push(`R${El(e.cacheRead)}`),e.cacheWrite&&t.push(`W${El(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)}%`}/${El(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=rl(),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=Mc();return X(e,(()=>{var e=q(()=>!!n()?.cwd);return()=>e()?Dl(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=Pc(),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,()=>wl(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=xl[(xl.indexOf(t)+1)%xl.length];try{await Q.setThinking(e.sessionKey,r),e.store.setRuntimeThinkingLevel(e.sessionKey,r)}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=Nc();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`,Tl(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=Ic(),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=il();return X(t,e),t})()})),X(e,U(G,{get when(){return De()},get children(){var e=Fc(),t=Le;return typeof t==`function`?Pe(t,e):Le=e,X(e,U(G,{get when(){return ke()},get children(){var e=gc();return X(e,ke),e}}),null),X(e,U(G,{get when(){return L()},get fallback(){return al()},children:e=>(()=>{var t=ol(),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,()=>El(e().tokens.input),s),X(o,()=>El(e().tokens.output),null),X(c,()=>El(e().tokens.cacheRead),l),X(c,()=>El(e().tokens.cacheWrite),null),X(u,()=>El(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=zc(),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,()=>wl(n()?.state.model),null),e})(),(()=>{var t=Rc();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=xl[(xl.indexOf(t)+1)%xl.length];try{await Q.setThinking(e.sessionKey,r),e.store.setRuntimeThinkingLevel(e.sessionKey,r)}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=Bc(),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 sl()},get children(){return[U(W,{get each(){return t().widgets.above},children:e=>(()=>{var t=cl();return X(t,e),t})()}),U(Xs,{get entries(){return t().entries},get resetKey(){return e.sessionKey},get imageScope(){return{runtimeKey:e.sessionKey}}}),U(W,{get each(){return t().widgets.below},children:e=>(()=>{var t=cl();return X(t,e),t})()})]}})),te.$$click=()=>v(!_()),X(te,()=>_()?`compose ▴`:`compose ▾`),X(ee,U(G,{get when(){return _()},get children(){var e=Vc();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=el(),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=Hc(),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=ll(),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=Wc(),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 Uc()}}),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=ul(),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=Jc();return X(e,U(G,{get when(){return ze()},get children(){var e=Gc();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=il();return X(t,()=>e.text,null),X(t,U(G,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=dl();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=Kc();return X(e,A),e}}),null),X(e,U(G,{get when(){return Ue()},get children(){var e=qc();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=Yc(),t=e.firstChild;return X(e,U(W,{get each(){return Ht()},children:e=>(()=>{var t=fl(),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=Xc();return X(e,U(W,{get each(){return ve()},children:(e,t)=>(()=>{var n=pl(),r=n.firstChild;r.firstChild;var i=r.nextSibling,a=i.nextSibling;return X(r,()=>e.fileName,null),X(i,()=>jl(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=ml(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>et(t()),j(t=>{var i=`${e.fileName} (${jl(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=Zc();return X(e,U(W,{get each(){return Wt()},children:(e,t)=>(()=>{var n=gl(),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=hl();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=nc(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),Pl(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=Qc(),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=$c(),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(Fl,{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:t=>e.store.setRuntimeModel(e.sessionKey,t)})}}),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=lc();return e.$$click=()=>S(!1),e})(),(()=>{var t=_l();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 tl()}})}}),null),X(c,U(G,{get when(){return T()},get children(){return U(Il,{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=gc();return X(e,Ee),e}}),U(G,{get when(){return we().length>0},get fallback(){return vl()},get children(){var e=nl();return X(e,U(W,{get each(){return we()},children:e=>(()=>{var t=yl(),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(zl,{get current(){return Nt()??``},onClose:()=>w(!1),onRename:async t=>{try{await Q.rename(e.sessionKey,t),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 zl(e){let[t,n]=k(e.current);return U(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=lc();return Me(t,`click`,e.onClose,!0),t})(),(()=>{var n=bl();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=sc(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Ae([`input`,`click`,`keydown`]);var Bl=[{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)`}],Vl=Bl.map(e=>e.id),Hl=[`system`,`light`,`dark`],Ul=`dreb.dashboard.theme`,Wl=`dreb.dashboard.colorMode`,Gl=`default`,Kl=`system`;function ql(e){return typeof e==`string`&&Vl.includes(e)}function Jl(e){return typeof e==`string`&&Hl.includes(e)}function Yl(){if(typeof window>`u`)return Gl;try{let e=window.localStorage.getItem(Ul);return ql(e)?e:Gl}catch{return Gl}}function Xl(){if(typeof window>`u`)return Kl;try{let e=window.localStorage.getItem(Wl);return Jl(e)?e:Kl}catch{return Kl}}function Zl(e,t,n){if(!(typeof window>`u`))try{t===n?window.localStorage.removeItem(e):window.localStorage.setItem(e,t)}catch{}}var[Ql,$l]=k(Yl()),[eu,tu]=k(Xl()),nu=Ql,ru=eu;function iu(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 au(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=t.documentElement;if(!n)return;let r=Ql(),i=eu();if(r===Gl?n.removeAttribute(`data-theme`):n.setAttribute(`data-theme`,r),i===Kl?n.removeAttribute(`data-color-mode`):n.setAttribute(`data-color-mode`,i),!(r!==Gl||i!==Kl))n.style.removeProperty(`color-scheme`);else{let e=i===`light`?`light`:i===`dark`?`dark`:`light dark`;n.style.setProperty(`color-scheme`,e)}}catch{}}function ou(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=iu(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 su(e){let t=ql(e)?e:Gl;$l(t),Zl(Ul,t,Gl),au(),ou()}function cu(e){let t=Jl(e)?e:Kl;tu(t),Zl(Wl,t,Kl),au(),ou()}var lu=null,uu=!1;function du(){eu()===Kl&&ou()}function fu(e){e.key!==null&&e.key!==`dreb.dashboard.theme`&&e.key!==`dreb.dashboard.colorMode`||pu()}function pu(){$l(Yl()),tu(Xl()),au(),ou()}function mu(){if(!(typeof window>`u`)){try{typeof window.matchMedia==`function`&&(lu=window.matchMedia(`(prefers-color-scheme: dark)`),typeof lu.addEventListener==`function`?lu.addEventListener(`change`,du):typeof lu.addListener==`function`&&lu.addListener(du))}catch{}try{window.addEventListener(`storage`,fu)}catch{}}}function hu(){pu(),!uu&&(uu=!0,mu())}var gu=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>`),_u=J(`<option>`),vu=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>
|
|
74
|
+
`)}async function wt(){let t=r().trim();if(!t&&ve().length===0&&ge().length===0)return;let n=Ct(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 $e(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),rc(e.sessionKey,n),xe(void 0),i(``),rt(),ye([]),Je()}catch(e){P(e instanceof Error?e.message:String(e))}}async function Tt(){c(!0);try{await Q.abort(e.sessionKey),await dt()}catch(e){P(e instanceof Error?e.message:String(e))}finally{c(!1)}}async function Et(){if(!l()){u(!0),P(void 0);try{await Q.stopRuntime(e.sessionKey),await e.store.removeRuntime(e.sessionKey),e.store.navigate({screen:`fleet`})}catch(e){P(e instanceof Error?e.message:String(e))}finally{u(!1)}}}async function Dt(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 Ot(e){Ae?.querySelectorAll(`details.tool`).forEach(t=>{t.open=e})}let kt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status===`running`),At=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status!==`running`),jt=()=>t()?.tasks??[],Mt=()=>jt().filter(e=>e.status===`completed`).length,Nt=()=>n()?.state.contextUsage??L()?.contextUsage,Pt=()=>typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 700px)`).matches,Ft=()=>t()?.sessionName??n()?.state.sessionName,It=()=>Ft()??t()?.title??e.sessionKey,Lt=()=>{let e=n()?.cwd;if(!e)return;let t=re();return`${Pl(e)}${t?` (${t})`:``}`},Rt=()=>{let e=Lt(),t=Ft();return e&&t?`${e} • ${t}`:e??t??`session`},zt=()=>{let e=L()?.tokens;if(!e)return;let t=[];return e.input&&t.push(`↑${Nl(e.input)}`),e.output&&t.push(`↓${Nl(e.output)}`),e.cacheRead&&t.push(`R${Nl(e.cacheRead)}`),e.cacheWrite&&t.push(`W${Nl(e.cacheWrite)}`),t.length>0?t.join(` `):void 0},Bt=()=>{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},Vt=()=>{let e=Nt();if(e)return`ctx ${e.percent===null?`?`:`${e.percent.toFixed(0)}%`}/${Nl(e.contextWindow)}`},Ht=()=>{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`},Ut=()=>[zt(),Bt(),Vt(),Ht()].filter(Boolean),Wt=()=>[...(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}))],Gt=()=>{let e=r();if(se()||!e.startsWith(`/`))return;let t=e.slice(1);if(!/\s/.test(t))return t.toLowerCase()},Kt=N(()=>{let e=Gt();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)}),qt=()=>Kt().length>0,Jt=e=>{i(`/${e.name} `),H(!0),queueMicrotask(()=>Ne?.focus())};return M(()=>{let e=Kt().length;ce()>=e&&le(Math.max(0,e-1))}),(()=>{var c=ul(),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,It),X(k,U(G,{get when(){return!h()},get children(){var e=zc();return X(e,(()=>{var e=q(()=>!!n()?.cwd);return()=>e()?Pl(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=Vc(),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,()=>jl(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=Ol[(Ol.indexOf(t)+1)%Ol.length];try{await Q.setThinking(e.sessionKey,r),e.store.setRuntimeThinkingLevel(e.sessionKey,r)}catch(e){P(e instanceof Error?e.message:String(e))}},X(a,()=>n()?.state.thinkingLevel??`—`,null),X(t,U(G,{get when(){return Nt()},get children(){var e=Bc();return e.firstChild.nextSibling,X(e,(()=>{var e=q(()=>Nt().percent===null);return()=>e()?`?`:`${Nt().percent.toFixed(0)}%`})(),null),e}}),o),o.$$click=()=>m(!p()),j(()=>Y(r,`title`,Ml(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=Uc(),t=e.firstChild,n=t.nextSibling;return X(t,Rt),n.$$click=vt,X(n,U(W,{get each(){return Ut()},children:e=>(()=>{var t=dl();return X(t,e),t})()})),X(e,U(G,{get when(){return De()},get children(){var e=Hc(),t=Le;return typeof t==`function`?Pe(t,e):Le=e,X(e,U(G,{get when(){return ke()},get children(){var e=Cc();return X(e,ke),e}}),null),X(e,U(G,{get when(){return L()},get fallback(){return fl()},children:e=>(()=>{var t=pl(),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,()=>Nl(e().tokens.input),s),X(o,()=>Nl(e().tokens.output),null),X(c,()=>Nl(e().tokens.cacheRead),l),X(c,()=>Nl(e().tokens.cacheWrite),null),X(u,()=>Nl(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=Kc(),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=()=>Ot(!0),o.$$click=()=>Ot(!1),s.$$click=()=>w(!0),c.$$click=gt,u.$$click=qe,X(t,U(G,{get when(){return Pt()},get children(){return[(()=>{var e=Wc();return e.firstChild,e.$$click=()=>f(!0),X(e,()=>jl(n()?.state.model),null),e})(),(()=>{var t=Gc();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=Ol[(Ol.indexOf(t)+1)%Ol.length];try{await Q.setThinking(e.sessionKey,r),e.store.setRuntimeThinkingLevel(e.sessionKey,r)}catch(e){P(e instanceof Error?e.message:String(e))}},X(t,()=>n()?.state.thinkingLevel??`—`,null),t})()]}}),d),d.$$click=Et,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=qc(),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 ml()},get children(){return[U(W,{get each(){return t().widgets.above},children:e=>(()=>{var t=hl();return X(t,e),t})()}),U(Xs,{get entries(){return t().entries},get resetKey(){return e.sessionKey},get imageScope(){return{runtimeKey:e.sessionKey}}}),U(G,{get when(){return t().uiRequests[0]},keyed:!0,children:e=>U(G,{get when(){return e.method===`ask`},get children(){return U(Ul,{request:e,onRespond:Xe,onStop:()=>void Tt(),get stopping(){return s()}})}})}),U(W,{get each(){return t().widgets.below},children:e=>(()=>{var t=hl();return X(t,e),t})()})]}})),te.$$click=()=>v(!_()),X(te,()=>_()?`compose ▴`:`compose ▾`),X(ee,U(G,{get when(){return _()},get children(){var e=Jc();return X(e,(()=>{var e=q(()=>!!Ue());return()=>e()?`agent working — open controls to stop or steer`:q(()=>Wt().length>0)()?`${Wt().length} queued message(s)`:`composer hidden for transcript reading`})()),e}}),null),X(z,U(G,{get when(){return!_()},get children(){var n=sl(),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 jt().length>0},get children(){var e=Yc(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;r.nextSibling;var i=t.nextSibling;return X(t,Mt,n),X(t,()=>jt().length,r),X(i,U(W,{get each(){return jt()},children:e=>(()=>{var t=gl(),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=!Pt()),e}}),c),X(n,U(G,{get when(){return kt().length+At().length>0},get children(){var t=Zc(),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,()=>kt().length,i),X(r,()=>At().length,a),X(t,U(G,{get when(){return y()},get children(){return Xc()}}),null),X(t,U(G,{get when(){return!y()},get children(){return U(W,{get each(){return[...kt(),...At()].slice(0,4)},children:t=>(()=>{var n=_l(),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),X(i,U(G,{get when(){return t.arbitrations?.at(-1)},children:e=>e().status===`failure`?` · arbitration failed`:` · ${e().final?.model??e().proposed.model} @ ${e().final?.thinking??e().proposed.thinking}`}),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=tl();return X(e,U(G,{get when(){return ze()},get children(){var e=Qc();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=dl();return X(t,()=>e.text,null),X(t,U(G,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=vl();return t.$$click=()=>Dt(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=$c();return X(e,A),e}}),null),X(e,U(G,{get when(){return Ue()},get children(){var e=el();return e.$$click=Tt,X(e,()=>s()?`stopping…`:`■ stop`),j(()=>e.disabled=s()),e}}),null),e}}),c),X(c,U(G,{get when(){return Wt().length>0},get children(){var e=nl(),t=e.firstChild;return X(e,U(W,{get each(){return Wt()},children:e=>(()=>{var t=yl(),n=t.firstChild;return X(n,()=>e.kind),X(t,()=>e.text,null),j(()=>Y(t,`title`,e.text)),t})()}),t),t.$$click=dt,e}}),l),X(c,U(G,{get when(){return ve().length>0||ge().length>0},get children(){var e=rl();return X(e,U(W,{get each(){return ve()},children:(e,t)=>(()=>{var n=bl(),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=xl(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>it(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 qt()},get children(){var e=il();return X(e,U(W,{get each(){return Kt()},children:(e,t)=>(()=>{var n=Cl(),r=n.firstChild;r.firstChild;var i=r.nextSibling;return n.$$click=()=>Jt(e),n.addEventListener(`mouseenter`,()=>le(t())),X(r,()=>e.name,null),X(n,U(G,{get when(){return e.description},get children(){var t=Sl();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(qt()){if(t.key===`ArrowDown`){t.preventDefault(),le((ce()+1)%Kt().length);return}if(t.key===`ArrowUp`){t.preventDefault(),le((ce()-1+Kt().length)%Kt().length);return}if(t.key===`Tab`||t.key===`Enter`&&!t.shiftKey&&!Pt()){t.preventDefault();let e=Kt()[ce()];e&&Jt(e);return}if(t.key===`Escape`){t.preventDefault(),H(!0);return}}if((t.key===`ArrowUp`||t.key===`ArrowDown`)&&(r()===``||be()!==void 0)){let n=nc(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&&!Pt()&&(t.preventDefault(),wt())},l.$$input=e=>{H(!1),le(0),xe(void 0),i(e.currentTarget.value),Vl(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(),pt(t))});var g=Ne;typeof g==`function`?Pe(g,l):Ne=l,d.addEventListener(`change`,e=>{ht(e.currentTarget.files??[]),e.currentTarget.value=``});var _=Fe;typeof _==`function`?Pe(_,d):Fe=d,f.addEventListener(`change`,e=>{pt(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=al(),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=ol(),n=e.firstChild.nextSibling;return e.$$click=()=>i(t().suggestedCommand),X(n,()=>t().suggestedCommand),e}}),h),h.$$click=wt,j(e=>{var t=ze()?`Message dreb — sends as steer while it works…`:`Message dreb…`,n=qt()?`command-listbox`:void 0,r=qt()?`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]},keyed:!0,children:e=>U(G,{get when(){return e.method!==`ask`},get children(){return U(Hl,{request:e,onRespond:Xe})}})}),null),X(c,U(G,{get when(){return d()},get children(){return U(Gl,{get sessionKey(){return e.sessionKey},get state(){return n()?.state},onClose:()=>f(!1),onSelected:t=>e.store.setRuntimeModel(e.sessionKey,t)})}}),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=lc();return e.$$click=()=>S(!1),e})(),(()=>{var t=wl();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 cl()}})}}),null),X(c,U(G,{get when(){return T()},get children(){return U(Wl,{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=Cc();return X(e,Ee),e}}),U(G,{get when(){return we().length>0},get fallback(){return Tl()},get children(){var e=ll();return X(e,U(W,{get each(){return we()},children:e=>(()=>{var t=El(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>_t(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(ql,{get current(){return Ft()??``},onClose:()=>w(!1),onRename:async t=>{try{await Q.rename(e.sessionKey,t),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 ql(e){let[t,n]=k(e.current);return U(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=lc();return Me(t,`click`,e.onClose,!0),t})(),(()=>{var n=Dl();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=sc(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Ae([`input`,`click`,`keydown`]);var Jl=[{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)`}],Yl=Jl.map(e=>e.id),Xl=[`system`,`light`,`dark`],Zl=`dreb.dashboard.theme`,Ql=`dreb.dashboard.colorMode`,$l=`default`,eu=`system`;function tu(e){return typeof e==`string`&&Yl.includes(e)}function nu(e){return typeof e==`string`&&Xl.includes(e)}function ru(){if(typeof window>`u`)return $l;try{let e=window.localStorage.getItem(Zl);return tu(e)?e:$l}catch{return $l}}function iu(){if(typeof window>`u`)return eu;try{let e=window.localStorage.getItem(Ql);return nu(e)?e:eu}catch{return eu}}function au(e,t,n){if(!(typeof window>`u`))try{t===n?window.localStorage.removeItem(e):window.localStorage.setItem(e,t)}catch{}}var[ou,su]=k(ru()),[cu,lu]=k(iu()),uu=ou,du=cu;function fu(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 pu(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=t.documentElement;if(!n)return;let r=ou(),i=cu();if(r===$l?n.removeAttribute(`data-theme`):n.setAttribute(`data-theme`,r),i===eu?n.removeAttribute(`data-color-mode`):n.setAttribute(`data-color-mode`,i),!(r!==$l||i!==eu))n.style.removeProperty(`color-scheme`);else{let e=i===`light`?`light`:i===`dark`?`dark`:`light dark`;n.style.setProperty(`color-scheme`,e)}}catch{}}function mu(e){try{let t=e??(typeof document<`u`?document:void 0);if(!t)return;let n=fu(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 hu(e){let t=tu(e)?e:$l;su(t),au(Zl,t,$l),pu(),mu()}function gu(e){let t=nu(e)?e:eu;lu(t),au(Ql,t,eu),pu(),mu()}var _u=null,vu=!1;function yu(){cu()===eu&&mu()}function bu(e){e.key!==null&&e.key!==`dreb.dashboard.theme`&&e.key!==`dreb.dashboard.colorMode`||xu()}function xu(){su(ru()),lu(iu()),pu(),mu()}function Su(){if(!(typeof window>`u`)){try{typeof window.matchMedia==`function`&&(_u=window.matchMedia(`(prefers-color-scheme: dark)`),typeof _u.addEventListener==`function`?_u.addEventListener(`change`,yu):typeof _u.addListener==`function`&&_u.addListener(yu))}catch{}try{window.addEventListener(`storage`,bu)}catch{}}}function Cu(){xu(),!vu&&(vu=!0,Su())}var wu=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>`),Tu=J(`<option>`),Eu=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
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>`),yu=[`running`,`attention`,`idle`,`error`];function bu(){let e=()=>{let e=ru();return e===`system`?void 0:e};return(()=>{var t=gu(),n=t.firstChild,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling;return r.addEventListener(`change`,e=>cu(e.currentTarget.value)),X(r,U(W,{each:Hl,children:e=>(()=>{var t=_u();return t.value=e,X(t,e),t})()})),X(i,U(W,{each:Bl,children:t=>{let n=()=>nu()===t.id;return(()=>{var r=vu(),i=r.firstChild,a=i.firstChild,o=a.firstChild,s=a.nextSibling,c=i.nextSibling.firstChild,l=c.nextSibling;return r.$$click=()=>su(t.id),X(o,()=>t.label),X(s,U(W,{each:yu,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=ru()),t})()}Ae([`click`]);var xu=J(`<select><option value=on>on</option><option value=off>off`),Su=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Cu=J(`<div class=model-list style=max-height:320px>`),wu=J(`<p class="muted small">No matching models.`),Tu=J(`<section class=model-provider-group><div class=model-provider-heading>`),Eu=J(`<span class=model-name>`),Du=J(`<span class=model-reasoning>think`),Ou=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),ku=J(`<div class=settings-error>`),Au=J(`<div class=settings-warning>`),ju=J(`<p class="muted small"style=margin-bottom:16px>✓ saved`),Mu=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>`),Nu=J(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow <identity></code> to enable Tailscale access.`),Pu=J(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),Fu=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><label class=setting-label for=pref-image-display-mode><span class=name>tool-result images</span><span class=hint>this browser only — placeholders make no automatic request, previews are bounded to 1024 px and 256 KiB, and originals automatically transfer full files. Choosing originals is the informed network-data opt-in.</span></label><span class=setting-control><select id=pref-image-display-mode><option value=placeholders>placeholders</option><option value=previews>bounded previews</option><option value=originals>automatic originals</option></select></span></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`),Iu=J(`<div>`),Lu=J(`<p class=muted>`),Ru=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>`),zu=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`),Bu=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.`),Vu=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>`),Hu=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>`),Uu=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>`),Wu=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>`),Gu=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.`),Ku=J(`<option>`),qu=J(`<p class="muted small">No agent definitions found.`),Ju=J(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),Yu=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">`),Xu=J(`<span class="muted small">default`),Zu=J(`<span class=agent-model-chip>. `),Qu=J(`<p class="muted small">Using the default model.`),$u=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">×`),ed=J(`<p class="muted small trusted-context-empty">No trusted folders. Use the Files view to trust a project folder and its descendants.`),td=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">`),nd=J(`<label class=checkbox-control><input type=checkbox><span>`),rd=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`),id=J(`<button type=button class="btn btn-small">cancel`),ad=J(`<button type=button class="btn btn-small btn-danger">restart`),od=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],sd=[`all`,`one-at-a-time`],cd=[`sse`,`websocket`,`auto`];function ld(e){return`${e.provider}/${e.id}`}function ud(e){let t=ld(e);return e.name?`${t} — ${e.name}`:t}function dd(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function fd(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function pd(){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 md(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 hd(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 gd(e){return(()=>{var t=xu();return t.addEventListener(`change`,t=>e.onChange(t.currentTarget.value===`on`)),j(()=>t.value=e.value?`on`:`off`),t})()}function _d(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return md(e.models.filter(e=>!n||fd(e,n)).slice(0,100))}),a=e=>r().has(ld(e));return U(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=Su(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=Cu();return X(t,U(G,{get when(){return i().length>0},get fallback(){return wu()},get children(){return U(W,{get each(){return i()},children:t=>(()=>{var n=Tu(),r=n.firstChild;return X(r,()=>t.provider),X(n,U(W,{get each(){return t.models},children:t=>(()=>{var n=Ou(),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=Eu();return X(e,()=>t.name),e}}),o),X(o,()=>t.provider),X(n,U(G,{get when(){return t.reasoning},get children(){return Du()}}),null),j(e=>{var r=!!a(t),i=ud(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 vd(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(pd()),[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=Fu(),i=n.firstChild,o=i.firstChild.nextSibling.nextSibling,g=o.firstChild.nextSibling;g.firstChild;var v=g.nextSibling,b=v.firstChild.nextSibling.firstChild,x=v.nextSibling,O=x.firstChild.nextSibling.firstChild.firstChild,k=x.nextSibling,A=k.firstChild.nextSibling,M=k.nextSibling,N=M.firstChild,P=N.firstChild.nextSibling,F=N.nextSibling.firstChild.firstChild,I=F.nextSibling,R=M.nextSibling.firstChild,z=R.firstChild.nextSibling,ie=R.nextSibling.firstChild,B=o.nextSibling,fe=B.firstChild.nextSibling.firstChild.firstChild.nextSibling,pe=B.nextSibling,me=pe.firstChild.nextSibling;return me.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=ku();return X(e,t),e}}),o),X(i,U(G,{get when(){return r().length>0},get children(){var e=Au();return X(e,U(W,{get each(){return r()},children:e=>(()=>{var t=Iu();return X(t,e),t})()})),e}}),o),X(i,U(G,{get when(){return a()},get children(){return ju()}}),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=Ru(),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,()=>dd(e())),X(o,()=>od.join(` · `)),s.addEventListener(`change`,e=>V({defaultThinkingLevel:e.currentTarget.value})),X(s,U(W,{each:od,children:e=>(()=>{var t=Ku();return t.value=e,X(t,e),t})()})),l.addEventListener(`change`,e=>V({transport:e.currentTarget.value})),X(l,U(W,{get each(){return[...cd]},children:e=>(()=>{var t=Ku();return t.value=e,X(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=Bu();return t.firstChild.nextSibling,X(t,U(G,{get when(){return C().length>0},get children(){var e=zu(),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=Ku();return t.value=e,X(t,e),t})()}),null),j(()=>Y(t,`title`,d()??`global/home only`)),j(()=>t.value=d()??``),e}}),null),X(t,U(G,{get when(){return(w()??[]).length>0},get fallback(){return qu()},get children(){return U(W,{get each(){return w()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=Yu(),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 Xu()},get children(){return U(W,{get each(){return n()},children:(e,t)=>(()=>{var n=Zu(),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=Ju(),r=e.firstChild;return X(e,U(G,{get when(){return n().length>0},get fallback(){return Qu()},get children(){return U(W,{get each(){return n()},children:(e,r)=>(()=>{var i=$u(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return X(a,e),o.$$click=()=>void se(t.name,hd(n(),r(),-1)),s.$$click=()=>void se(t.name,hd(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=Vu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(gd,{get value(){return e().imageAutoResize!==!1},onChange:e=>V({imageAutoResize:e})})),X(i,U(gd,{get value(){return e().blockImages===!0},onChange:e=>V({blockImages:e})})),t})(),(()=>{var t=Hu(),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[...sd]},children:e=>(()=>{var t=Ku();return t.value=e,X(t,e),t})()})),i.addEventListener(`change`,e=>V({followUpMode:e.currentTarget.value})),X(i,U(W,{get each(){return[...sd]},children:e=>(()=>{var t=Ku();return t.value=e,X(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=Uu(),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(gd,{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 ed()},get children(){return U(W,{get each(){return e().trustedContextFolders??[]},children:e=>(()=>{var t=td(),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(gd,{get value(){return e().autoLoadNestedContext===!0},onChange:e=>V({autoLoadNestedContext:e})})),X(u,U(gd,{get value(){return e().hideThinkingBlock===!0},onChange:e=>V({hideThinkingBlock:e})})),j(()=>s.disabled=h()||!p().trim()),j(()=>o.value=p()),t})(),(()=>{var t=Wu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(gd,{get value(){return e().compactionEnabled!==!1},onChange:e=>V({compactionEnabled:e})})),X(i,U(gd,{get value(){return e().retryEnabled!==!1},onChange:e=>V({retryEnabled:e})})),t})(),Gu()]}),o),X(g,U(bu,{}),null),b.addEventListener(`change`,e=>Mo(e.currentTarget.value)),O.addEventListener(`change`,e=>jo(e.currentTarget.checked)),X(A,U(W,{each:po,children:e=>(()=>{var t=nd(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>No(e,t.currentTarget.checked)),Y(n,`id`,`pref-tool-expand-${e}`),X(r,e),j(()=>n.checked=Po(e)),t})()})),X(P,(()=>{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)`})()),F.addEventListener(`change`,e=>{e.currentTarget.checked&&ue()}),X(I,()=>_()===`granted`?`enabled`:`enable notifications`),X(z,()=>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`),ie.$$click=()=>ne(!0),X(ie,()=>re()?`restarting…`:`restart`),X(o,U(G,{get when(){return ae()},get children(){var e=ku();return X(e,ae),e}}),null),X(fe,()=>de()?.mode===`local`?`local`:`host`),X(B,U(G,{get when(){return q(()=>!!D()?.enabled)()&&D()?.code},get children(){var e=Mu(),t=e.firstChild.nextSibling.firstChild;return X(t,()=>D().code),e}}),null),X(B,U(W,{get each(){return T()??[]},children:e=>(()=>{var t=rd(),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(B,U(G,{get when(){return(T()??[]).length===0},get children(){return Nu()}}),null),X(pe,(()=>{var e=q(()=>!!ee()?.version);return()=>e()?` v${ee().version}`:q(()=>!!L())()?` v${L()}`:``})(),me),X(pe,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=id();return e.$$click=()=>ne(!1),e})(),(()=>{var e=ad();return e.$$click=()=>{ne(!1),oe()},e})()]},get children(){var e=Pu();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(_d,{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=ld(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&&(F.disabled=e.e=t),n!==e.t&&(ie.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>b.value=Ao()),j(()=>O.checked=ko()),j(()=>F.checked=_()===`granted`),n})()}Ae([`input`,`click`]);var yd=J(`<p class=pair-error>`),bd=J(`<div class=status-line><span class=working>● working`),xd=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.`),Sd=J(`<p class=muted>`);function Cd(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=oo({scroller:()=>c});return R(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&Zs(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(co(u,c,{keyboard:`window`}))}),z(()=>u.dispose()),(()=>{var t=xd(),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=yd();return X(e,o),e}}),null),X(m,U(G,{get when(){return q(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=Sd();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(Xs,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`},get imageScope(){return{runtimeKey:e.sessionKey,agentId:e.agentId}}})}}),null),X(h,U(G,{get when(){return r()?.streaming},get children(){return bd()}}),g),j(()=>Y(s,`href`,`#/session/${e.sessionKey}`)),t})()}function wd(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}var Td=new Set([`image/png`,`image/jpeg`,`image/gif`,`image/webp`]),Ed=/^[0-9a-f]{64}$/;function Dd(e){if(typeof e==`string`)return{text:e,images:[]};if(!Array.isArray(e))return{text:``,images:[]};let t=[],n=[];for(let r of e){let e=r;typeof e?.text==`string`?t.push(e.text):e?.type===`image_reference`&&typeof e.id==`string`&&Ed.test(e.id)&&typeof e.mimeType==`string`&&Td.has(e.mimeType)&&typeof e.size==`number`&&Number.isSafeInteger(e.size)&&e.size>0&&n.push({id:e.id,mimeType:e.mimeType,size:e.size})}return{text:t.join(`
|
|
77
|
-
`),images:n}}function
|
|
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>`),Du=[`running`,`attention`,`idle`,`error`];function Ou(){let e=()=>{let e=du();return e===`system`?void 0:e};return(()=>{var t=wu(),n=t.firstChild,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling;return r.addEventListener(`change`,e=>gu(e.currentTarget.value)),X(r,U(W,{each:Xl,children:e=>(()=>{var t=Tu();return t.value=e,X(t,e),t})()})),X(i,U(W,{each:Jl,children:t=>{let n=()=>uu()===t.id;return(()=>{var r=Eu(),i=r.firstChild,a=i.firstChild,o=a.firstChild,s=a.nextSibling,c=i.nextSibling.firstChild,l=c.nextSibling;return r.$$click=()=>hu(t.id),X(o,()=>t.label),X(s,U(W,{each:Du,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=du()),t})()}Ae([`click`]);var ku=J(`<select><option value=on>on</option><option value=off>off`),Au=J(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),ju=J(`<div class=model-list style=max-height:320px>`),Mu=J(`<p class="muted small">No matching models.`),Nu=J(`<section class=model-provider-group><div class=model-provider-heading>`),Pu=J(`<span class=model-name>`),Fu=J(`<span class=model-reasoning>think`),Iu=J(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),Lu=J(`<div class=settings-error>`),Ru=J(`<div class=settings-warning>`),zu=J(`<p class="muted small"style=margin-bottom:16px>✓ saved`),Bu=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>`),Vu=J(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow <identity></code> to enable Tailscale access.`),Hu=J(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),Uu=J(`<div class=screen-fill><main class="container settings-wrap"><h1>settings</h1><p class=settings-intro>Ordinary defaults apply only to new sessions. Dispatch Arbiter changes apply to subsequent child spawns. 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><label class=setting-label for=pref-image-display-mode><span class=name>tool-result images</span><span class=hint>this browser only — placeholders make no automatic request, previews are bounded to 1024 px and 256 KiB, and originals automatically transfer full files. Choosing originals is the informed network-data opt-in.</span></label><span class=setting-control><select id=pref-image-display-mode><option value=placeholders>placeholders</option><option value=previews>bounded previews</option><option value=originals>automatic originals</option></select></span></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`),Wu=J(`<div>`),Gu=J(`<p class=muted>`),Ku=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>`),qu=J(`<section class="settings-section dispatch-arbiter-settings"><h2>dispatch arbiter</h2><p class="muted small"style=margin-bottom:8px>Global-only, fully headless pre-spawn routing. Project settings cannot change it. When enabled, invalid model, scope, guide, inference, or output prevents the affected child from spawning.</p><div class=setting-row><span class=setting-label><span class=name>enabled</span><span class=hint>disabled by default; fail closed when enabled</span></span><span class=setting-control></span></div><div class=setting-row><span class=setting-label><span class=name>arbiter model</span><span class=hint>exact authenticated provider/model; no fallback</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>arbiter thinking</span><span class=hint>validated against the selected arbiter model</span></span><span class=setting-control><select></select></span></div><div class=setting-row><label class=setting-label for=dispatch-arbiter-guide-path><span class=name>routing guide path</span><span class=hint>blank uses ~/.dreb/agent/model-routing-guide.md</span></label><span class=setting-control><input id=dispatch-arbiter-guide-path type=text placeholder=~/.dreb/agent/model-routing-guide.md></span></div><div data-testid=dispatch-arbiter-readiness><strong>status:</strong> `),Ju=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`),Yu=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.`),Xu=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>`),Zu=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>`),Qu=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>`),$u=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>`),ed=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.`),td=J(`<option>`),nd=J(`<p class="muted small">No agent definitions found.`),rd=J(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),id=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">`),ad=J(`<span class="muted small">default`),od=J(`<span class=agent-model-chip>. `),sd=J(`<p class="muted small">Using the default model.`),cd=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">×`),ld=J(`<p class="muted small trusted-context-empty">No trusted folders. Use the Files view to trust a project folder and its descendants.`),ud=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">`),dd=J(`<label class=checkbox-control><input type=checkbox><span>`),fd=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`),pd=J(`<button type=button class="btn btn-small">cancel`),md=J(`<button type=button class="btn btn-small btn-danger">restart`),hd=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],gd=[`all`,`one-at-a-time`],_d=[`sse`,`websocket`,`auto`];function vd(e){return`${e.provider}/${e.id}`}function yd(e){let t=vd(e);return e.name?`${t} — ${e.name}`:t}function bd(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function xd(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Sd(){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 Cd(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 wd(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 Td(e){return(()=>{var t=ku();return t.addEventListener(`change`,t=>{e.onChange(t.currentTarget.value===`on`)===!1&&(t.currentTarget.value=e.value?`on`:`off`)}),j(()=>t.value=e.value?`on`:`off`),t})()}function Ed(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return Cd(e.models.filter(e=>!n||xd(e,n)).slice(0,100))}),a=e=>r().has(vd(e));return U(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=Au(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=ju();return X(t,U(G,{get when(){return i().length>0},get fallback(){return Mu()},get children(){return U(W,{get each(){return i()},children:t=>(()=>{var n=Nu(),r=n.firstChild;return X(r,()=>t.provider),X(n,U(W,{get each(){return t.models},children:t=>(()=>{var n=Iu(),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=Pu();return X(e,()=>t.name),e}}),o),X(o,()=>t.provider),X(n,U(G,{get when(){return t.reasoning},get children(){return Fu()}}),null),j(e=>{var r=!!a(t),i=yd(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 Dd(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(Sd()),[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()}}let se=Promise.resolve(),H;function ce(){return H??y()?.subagentArbiter??{}}function le(e){let t={...ce(),...e};H=t;let r=y();r&&b({...r,subagentArbiter:t}),se=se.then(async()=>{n(void 0),i([]),o(!1);try{let e=await Q.saveSettings({subagentArbiter:t});i(e.warnings??[]),o(!0),setTimeout(()=>o(!1),2e3),H===t?(H=e.subagentArbiter??void 0,b(e)):b({...e,subagentArbiter:H})}catch(e){let r=e instanceof Error?e.message:String(e),i=await x();n(r),H===t?H=i?.subagentArbiter??void 0:i&&b({...i,subagentArbiter:H})}})}async function ue(e,t){await V({agentModels:{[e]:t}})}async function de(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 fe(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 pe(e){return y()?.agentModels?.[e]??[]}function me(e){let t=e.subagentArbiter;return t?.enabled===!0?typeof t.model!=`string`||!t.model.trim()?{ready:!1,message:`not ready — choose an arbiter model`}:t.thinking!==void 0&&!hd.some(e=>e===t.thinking)?{ready:!1,message:`not ready — arbiter thinking setting is invalid`}:t.guidePath!==void 0&&typeof t.guidePath!=`string`?{ready:!1,message:`not ready — routing guide path is invalid`}:t.guidePath?.trim()?{ready:!0,message:`enabled — live scope and guide are validated before every child spawn`}:{ready:!0,message:`enabled — using ~/.dreb/agent/model-routing-guide.md; live scope/guide checked at dispatch`}:{ready:!1,message:`disabled`}}async function he(){typeof Notification>`u`||v(await Notification.requestPermission())}R(()=>void I()),z(M);let ge=()=>e.store.auth();return(()=>{var i=Uu(),o=i.firstChild,g=o.firstChild.nextSibling.nextSibling,v=g.firstChild.nextSibling;v.firstChild;var b=v.nextSibling,x=b.firstChild.nextSibling.firstChild,O=b.nextSibling,k=O.firstChild.nextSibling.firstChild.firstChild,A=O.nextSibling,M=A.firstChild.nextSibling,N=A.nextSibling,P=N.firstChild,F=P.firstChild.nextSibling,I=P.nextSibling.firstChild.firstChild,R=I.nextSibling,z=N.nextSibling.firstChild,ie=z.firstChild.nextSibling,B=z.nextSibling.firstChild,se=g.nextSibling,H=se.firstChild.nextSibling.firstChild.firstChild.nextSibling,_e=se.nextSibling,ve=_e.firstChild.nextSibling;return ve.nextSibling,X(i,U(et,{get store(){return e.store},active:`settings`}),o),X(o,U(G,{get when(){return t()},get children(){var e=Lu();return X(e,t),e}}),g),X(o,U(G,{get when(){return r().length>0},get children(){var e=Ru();return X(e,U(W,{get each(){return r()},children:e=>(()=>{var t=Wu();return X(t,e),t})()})),e}}),g),X(o,U(G,{get when(){return a()},get children(){return zu()}}),g),X(o,U(G,{get when(){return y()},get fallback(){return(()=>{var e=Gu();return X(e,()=>t()?`Settings could not be loaded — see the error above.`:`Loading settings…`),e})()},children:e=>[(()=>{var t=Ku(),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,()=>bd(e())),X(o,()=>hd.join(` · `)),s.addEventListener(`change`,e=>V({defaultThinkingLevel:e.currentTarget.value})),X(s,U(W,{each:hd,children:e=>(()=>{var t=td();return t.value=e,X(t,e),t})()})),l.addEventListener(`change`,e=>V({transport:e.currentTarget.value})),X(l,U(W,{get each(){return[..._d]},children:e=>(()=>{var t=td();return t.value=e,X(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=qu(),r=t.firstChild.nextSibling.nextSibling,i=r.firstChild.nextSibling,a=r.nextSibling,o=a.firstChild.nextSibling.firstChild,s=a.nextSibling,l=s.firstChild.nextSibling.firstChild,u=s.nextSibling,d=u.firstChild.nextSibling.firstChild,f=u.nextSibling;return f.firstChild.nextSibling,X(i,U(Td,{get value(){return e().subagentArbiter?.enabled===!0},onChange:e=>{let t=ce();return e&&(typeof t.model!=`string`||!t.model.trim())?(n(`Choose an exact Dispatch Arbiter model before enabling it.`),c({kind:`arbiter`}),!1):(le({enabled:e}),!0)}})),o.$$click=()=>c({kind:`arbiter`}),X(o,(()=>{var t=q(()=>typeof e().subagentArbiter?.model==`string`);return()=>t()?e().subagentArbiter?.model:`choose model…`})()),l.addEventListener(`change`,e=>le({thinking:e.currentTarget.value})),X(l,U(W,{each:hd,children:e=>(()=>{var t=td();return t.value=e,X(t,e),t})()})),d.addEventListener(`change`,e=>{le({guidePath:e.currentTarget.value.trim()||void 0})}),X(f,()=>me(e()).message,null),j(()=>je(f,me(e()).ready?`settings-warning`:`muted small`)),j(()=>l.value=typeof e().subagentArbiter?.thinking==`string`&&hd.some(t=>t===e().subagentArbiter?.thinking)?e().subagentArbiter?.thinking:`off`),j(()=>d.value=typeof e().subagentArbiter?.guidePath==`string`?e().subagentArbiter?.guidePath:``),t})(),(()=>{var t=Yu();return t.firstChild.nextSibling,X(t,U(G,{get when(){return C().length>0},get children(){var e=Ju(),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=td();return t.value=e,X(t,e),t})()}),null),j(()=>Y(t,`title`,d()??`global/home only`)),j(()=>t.value=d()??``),e}}),null),X(t,U(G,{get when(){return(w()??[]).length>0},get fallback(){return nd()},get children(){return U(W,{get each(){return w()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=id(),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 ad()},get children(){return U(W,{get each(){return n()},children:(e,t)=>(()=>{var n=od(),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=rd(),r=e.firstChild;return X(e,U(G,{get when(){return n().length>0},get fallback(){return sd()},get children(){return U(W,{get each(){return n()},children:(e,r)=>(()=>{var i=cd(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return X(a,e),o.$$click=()=>void ue(t.name,wd(n(),r(),-1)),s.$$click=()=>void ue(t.name,wd(n(),r(),1)),c.$$click=()=>void ue(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=Xu(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(Td,{get value(){return e().imageAutoResize!==!1},onChange:e=>V({imageAutoResize:e})})),X(i,U(Td,{get value(){return e().blockImages===!0},onChange:e=>V({blockImages:e})})),t})(),(()=>{var t=Zu(),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[...gd]},children:e=>(()=>{var t=td();return t.value=e,X(t,e),t})()})),i.addEventListener(`change`,e=>V({followUpMode:e.currentTarget.value})),X(i,U(W,{get each(){return[...gd]},children:e=>(()=>{var t=td();return t.value=e,X(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=Qu(),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(Td,{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 ld()},get children(){return U(W,{get each(){return e().trustedContextFolders??[]},children:e=>(()=>{var t=ud(),n=t.firstChild,r=n.nextSibling.nextSibling;return X(n,e),r.$$click=()=>void fe(e),X(r,()=>h()?`revoking…`:`revoke trust`),j(()=>r.disabled=h()),t})()})}}),a),a.addEventListener(`submit`,e=>{e.preventDefault();let t=p().trim();t&&de(t)}),o.$$input=e=>m(e.currentTarget.value),X(s,()=>h()?`trusting…`:`trust folder`),X(l,U(Td,{get value(){return e().autoLoadNestedContext===!0},onChange:e=>V({autoLoadNestedContext:e})})),X(u,U(Td,{get value(){return e().hideThinkingBlock===!0},onChange:e=>V({hideThinkingBlock:e})})),j(()=>s.disabled=h()||!p().trim()),j(()=>o.value=p()),t})(),(()=>{var t=$u(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return X(r,U(Td,{get value(){return e().compactionEnabled!==!1},onChange:e=>V({compactionEnabled:e})})),X(i,U(Td,{get value(){return e().retryEnabled!==!1},onChange:e=>V({retryEnabled:e})})),t})(),ed()]}),g),X(v,U(Ou,{}),null),x.addEventListener(`change`,e=>Mo(e.currentTarget.value)),k.addEventListener(`change`,e=>jo(e.currentTarget.checked)),X(M,U(W,{each:po,children:e=>(()=>{var t=dd(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>No(e,t.currentTarget.checked)),Y(n,`id`,`pref-tool-expand-${e}`),X(r,e),j(()=>n.checked=Po(e)),t})()})),X(F,(()=>{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)`})()),I.addEventListener(`change`,e=>{e.currentTarget.checked&&he()}),X(R,()=>_()===`granted`?`enabled`:`enable notifications`),X(ie,()=>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`),B.$$click=()=>ne(!0),X(B,()=>re()?`restarting…`:`restart`),X(g,U(G,{get when(){return ae()},get children(){var e=Lu();return X(e,ae),e}}),null),X(H,()=>ge()?.mode===`local`?`local`:`host`),X(se,U(G,{get when(){return q(()=>!!D()?.enabled)()&&D()?.code},get children(){var e=Bu(),t=e.firstChild.nextSibling.firstChild;return X(t,()=>D().code),e}}),null),X(se,U(W,{get each(){return T()??[]},children:e=>(()=>{var t=fd(),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(se,U(G,{get when(){return(T()??[]).length===0},get children(){return Vu()}}),null),X(_e,(()=>{var e=q(()=>!!ee()?.version);return()=>e()?` v${ee().version}`:q(()=>!!L())()?` v${L()}`:``})(),ve),X(_e,U(G,{get when(){return ee()?.startedAt},get children(){return[` · server build, up `,q(()=>it(ee().startedAt))]}}),null),X(i,U(G,{get when(){return te()},get children(){return U(nt,{title:`restart dashboard service?`,onDismiss:()=>ne(!1),get actions(){return[(()=>{var e=pd();return e.$$click=()=>ne(!1),e})(),(()=>{var e=md();return e.$$click=()=>{ne(!1),oe()},e})()]},get children(){var e=Hu();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(i,U(G,{get when(){return s()},children:e=>{let t=()=>{let t=e();return t.kind==="default"?`select default model`:t.kind===`arbiter`?`select Dispatch Arbiter model`:`add model for ${t.agentName}`},n=()=>{let t=e();return t.kind==="default"?y()?.defaultProvider&&y()?.defaultModel?[`${y().defaultProvider}/${y().defaultModel}`]:[]:t.kind===`arbiter`?y()?.subagentArbiter?.model?[y().subagentArbiter.model]:[]:pe(t.agentName)};return U(Ed,{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}if(n.kind===`arbiter`){le({model:vd(t)});return}let r=vd(t),i=pe(n.agentName);i.includes(r)||ue(n.agentName,[...i,r])}})}}),null),j(e=>{var t=_()===`denied`||_()===`unsupported`||_()===`ios-install`||_()===`insecure`,n=re();return t!==e.e&&(I.disabled=e.e=t),n!==e.t&&(B.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>x.value=Ao()),j(()=>k.checked=ko()),j(()=>I.checked=_()===`granted`),i})()}Ae([`input`,`click`]);var Od=J(`<div class="status-line arbitration-history">`),kd=J(`<p class=pair-error>`),Ad=J(`<div class=status-line><span class=working>● working`),jd=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.`),Md=J(`<span>arbiter: `),Nd=J(`<p class=muted>`);function Pd(e){let t=e.step===void 0?``:`step ${e.step}: `;return e.status===`failure`?`${t}failed — ${e.errorMessage??e.errorCode??`unknown error`}`:!e.final||e.changed.length===0?`${t}kept ${e.proposed.agent} · ${e.proposed.model} · ${e.proposed.thinking}`:`${t}${e.changed.join(`, `)} changed → ${e.final.agent} · ${e.final.model} · ${e.final.thinking}`}function Fd(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=oo({scroller:()=>c});return R(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&Zs(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(co(u,c,{keyboard:`window`}))}),z(()=>u.dispose()),(()=>{var t=jd(),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(n()?.arbitrations?.length??0)>0},get children(){var e=Od();return X(e,U(W,{get each(){return n()?.arbitrations??[]},children:e=>(()=>{var t=Md();return t.firstChild,X(t,()=>Pd(e),null),j(()=>je(t,e.status===`failure`?`error-reason`:`muted`)),t})()})),e}}),null),X(m,U(G,{get when(){return o()},get children(){var e=kd();return X(e,o),e}}),null),X(m,U(G,{get when(){return q(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=Nd();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(Xs,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`},get imageScope(){return{runtimeKey:e.sessionKey,agentId:e.agentId}}})}}),null),X(h,U(G,{get when(){return r()?.streaming},get children(){return Ad()}}),g),j(()=>Y(s,`href`,`#/session/${e.sessionKey}`)),t})()}function Id(e){let t=e?.method;if(t===`select`||t===`confirm`||t===`input`||t===`editor`)return{id:String(e.id),method:t,title:String(e.title??``),message:e.message,options:e.options,prefill:e.prefill,placeholder:e.placeholder};if(t===`ask`)return{id:String(e.id),method:`ask`,title:String(e.title??`Question`),question:String(e.question??``),options:e.options,allowFreeText:e.allowFreeText,multiSelect:e.multiSelect,multiline:e.multiline,timeout:typeof e.timeout==`number`?e.timeout:void 0,expiresAt:typeof e.expiresAt==`number`?e.expiresAt:void 0}}function Ld(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}var Rd=new Set([`image/png`,`image/jpeg`,`image/gif`,`image/webp`]),zd=/^[0-9a-f]{64}$/;function Bd(e){if(typeof e==`string`)return{text:e,images:[]};if(!Array.isArray(e))return{text:``,images:[]};let t=[],n=[];for(let r of e){let e=r;typeof e?.text==`string`?t.push(e.text):e?.type===`image_reference`&&typeof e.id==`string`&&zd.test(e.id)&&typeof e.mimeType==`string`&&Rd.has(e.mimeType)&&typeof e.size==`number`&&Number.isSafeInteger(e.size)&&e.size>0&&n.push({id:e.id,mimeType:e.mimeType,size:e.size})}return{text:t.join(`
|
|
77
|
+
`),images:n}}function Vd(e){return Bd(e).text}function Hd(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(`
|
|
78
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(`
|
|
79
|
-
`).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function Ad(e){let{text:t,images:n}=Dd(e.content);return kd(t,e.timestamp)??{kind:`user`,text:t,images:n.length>0?n:void 0,timestamp:e.timestamp}}function jd(e){if(!(e?.role!==`assistant`||e.stopReason!==`error`))return typeof e.errorMessage==`string`&&e.errorMessage.trim().length>0?e.errorMessage:`Unknown error`}function Md(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push(Ad(r));else if(r.role===`assistant`){let e=[],i=[],a=()=>{if(e.length===0)return;let n={kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp};i.push(n),t.push(n),e=[]};if(Array.isArray(r.content)){for(let i of r.content)if(i.type===`text`&&typeof i.text==`string`)e.push({kind:`text`,text:i.text});else if(i.type===`thinking`&&typeof i.thinking==`string`)e.push({kind:`thinking`,text:i.thinking});else if(i.type===`toolCall`){a();let e=i,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)}}a();let o=jd(r);if(o&&i.length===0){let e={kind:`assistant`,blocks:[],model:r.model,streaming:!1,timestamp:r.timestamp};i.push(e),t.push(e)}let s=i.at(-1);s&&(s.stopReason=r.stopReason,s.errorMessage=o)}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));if(e){e.status=r.isError?`error`:`done`;let t=Dd(r.content);e.resultText=t.text,t.images.length>0&&(e.images=t.images),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??Od(r.content)})}return t}var Nd=0,Pd=20;function Fd(e){let t=e.toasts.length-Pd;t>0&&e.toasts.splice(0,t)}function Id(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function Ld(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 Rd(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}var zd=`provider-error`;function Bd(e){e.statusEntries=e.statusEntries.filter(e=>e.key!==zd),e.lastError=void 0}function Vd(e,t){Bd(e),e.statusEntries.push({key:zd,text:t,tone:`error`}),e.lastError=t}function Hd(e,t,n){if(Bd(e),!n)for(let n=t.length-1;n>=0;--n){let r=t[n];if(r?.role!==`assistant`)continue;let i=jd(r);i&&Vd(e,i);break}Rd(e)}function Ud(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function Wd(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 Gd(e,t,n){let r=e.entries.indexOf(t);if(r<0)return;let i=new Set,a=n.map(t=>{if(t.kind!==`tool`)return t;let n=Wd(e,t.toolCallId);return n?(i.add(n),n):t}),o=new Set([t,...i]),s=e.entries.slice(0,r).filter(e=>!o.has(e)).length,c=e.entries.filter(e=>!o.has(e));c.splice(s,0,...a),e.entries.splice(0,e.entries.length,...c)}function Kd(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=Ud(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push(Ad(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=Ud(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=Ud(e),r=Md([n]);t?.streaming?Gd(e,t,r):e.entries.push(...r)}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=Ad(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text?r.images&&(t.images=r.images):e.entries.push(r)}break}case`tool_execution_start`:{let n=String(t.toolCallId),r=Wd(e,n);r?(r.toolName=String(t.toolName),r.args=t.args,r.status=`running`,r.resultText=``,r.images=void 0,r.details=void 0,r.startedAt=Date.now(),r.endedAt=void 0):e.entries.push({kind:`tool`,toolCallId:n,toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break}case`tool_execution_update`:{let n=Wd(e,String(t.toolCallId));if(n){let e=t.partialResult;if(typeof e==`string`)n.resultText=e,n.images=void 0;else if(e?.content){let t=Dd(e.content);n.resultText=t.text,n.images=t.images.length>0?t.images:void 0}}break}case`tool_execution_end`:{let n=Wd(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;if(typeof e==`string`)n.resultText=e,n.images=void 0;else if(e?.content){let t=Dd(e.content);n.resultText=t.text,n.images=t.images.length>0?t.images:void 0}n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function qd(e,t){switch(Kd(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),Bd(e),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`message_end`:{let n=t.message;if(n?.role===`assistant`){let t=jd(n);t?Vd(e,t):Bd(e)}break}case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,t.reason===`overflow`&&Bd(e),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`:Bd(e),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?Vd(e,String(t.finalError)):t.success&&Bd(e);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=Ud(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=Ud(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),Ld(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),Kd(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`){Nd+=1;let n=t.notifyType??`info`;e.toasts.push({id:Nd,text:String(t.message??``),tone:n}),Fd(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`:Nd+=1,e.toasts.push({id:Nd,text:`extension error: ${t.error}`,tone:`error`}),Fd(e);break;default:break}Rd(e)}function Jd(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}var Yd=Symbol(`store-raw`),Xd=Symbol(`store-node`),Zd=Symbol(`store-has`),Qd=Symbol(`store-self`);function $d(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,cf)}),!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 ef(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function tf(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[Yd])return n;if(!ef(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=tf(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=tf(i,t))!==i&&(e[a]=r))}return e}function nf(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function rf(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 af(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===Xd?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function of(e){ee()&&rf(nf(e,Xd),Qd)()}function sf(e){return of(e),Reflect.ownKeys(e)}var cf={get(e,t,n){if(t===Yd)return e;if(t===p)return n;if(t===m)return of(e),n;let r=nf(e,Xd),i=r[t],a=i?i():e[t];if(t===Xd||t===Zd||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=rf(r,t,a)())}return ef(a)?$d(a):a},has(e,t){return t===Yd||t===p||t===m||t===Xd||t===Zd||t===`__proto__`?!0:(ee()&&rf(nf(e,Zd),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:sf,getOwnPropertyDescriptor:af};function lf(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[Zd]&&e[Zd][t]&&i!==void 0&&e[Zd][t].$()):(e[t]=n,e[Zd]&&e[Zd][t]&&i===void 0&&e[Zd][t].$());let o=nf(e,Xd),s;if((s=rf(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=rf(o,`length`,a))&&s.$(e.length)}(s=o[Qd])&&s.$()}function uf(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];df(i)||lf(e,i,t[i])}}function df(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function ff(e,t){if(typeof t==`function`&&(t=t(e)),t=tf(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&&lf(e,n,r)}lf(e,`length`,r)}else uf(e,t)}function pf(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&&df(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)pf(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&pf(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)pf(e,[r].concat(t),n);return}else if(t.length>1){pf(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=tf(a),r===void 0||ef(i)&&ef(a)&&!Array.isArray(a)?uf(i,a):lf(e,r,a))}function mf(...[e,t]){let n=tf(e||{}),r=Array.isArray(n),i=$d(n);function a(...e){I(()=>{r&&e.length===1?ff(n,e[0]):pf(n,e)})}return[i,a]}var hf=new WeakMap,gf={get(e,t){if(t===Yd)return e;let n=e[t];if(t===p||t===m||t===Xd||t===Zd||t===`__proto__`)return n;let r;return ef(n)?hf.get(n)||(hf.set(n,r=new Proxy(n,gf)),r):n},set(e,t,n){return lf(e,t,tf(n)),!0},deleteProperty(e,t){return lf(e,t,void 0,!0),!0}};function _f(e){return t=>{if(ef(t)){let n;(n=hf.get(t))||hf.set(t,n=new Proxy(t,gf)),e(n)}return t}}function vf(){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 yf(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 bf=2e3,xf=3*1024*1024,Sf=bf,Cf=xf,wf=3e4,Tf=1e4,Ef=1e3,Df=3e4,Of=new TextEncoder;function kf(e,t,n){e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`);let r=n.retryAttempt??0;if(n.isRetrying&&r>0){let t=e.entries.findLast(e=>e.kind===`assistant`&&e.stopReason===`error`),n=t?.errorMessage?` — ${t.errorMessage}`:``;e.statusEntries.push({key:`retry`,text:`retrying (attempt ${r})${n}`,tone:`warning`})}Hd(e,t,n.isStreaming||n.isRetrying||n.isCompacting)}function Af(){let[e,t]=mf({}),[n,r]=mf({}),[i,a]=k(vf()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(),[m,h]=k(!1),[g,_]=k(),[v,y]=k({state:`disconnected`,attempt:0}),b=()=>v().state===`connected`,[x,S]=k([]),C=new Map,w=new Map,T=new Map,E=0,D=0,O,A,j,M,N=!1,P=0,F=!1,I,L=0,R=new Map,z=new Map,ee=new Map,te=0,ne=0,re,ie=new Set,ae=!1;window.addEventListener(`hashchange`,()=>a(vf()));function B(e){window.location.hash=yf(e)}function oe(e){return n[e]??0}function V(e){return C.get(e)??0}function se(e){return w.get(e)??0}function H(e){w.set(e,se(e)+1)}function ce(e){C.set(e,V(e)+1)}function le(e){return{revision:oe(e),generation:V(e),epoch:E}}function ue(e,t){return V(e)===t.generation&&E===t.epoch}function de(e,t){return oe(e)===t.revision&&ue(e,t)}function fe(e,t){t&&T.get(e)!==t||(T.delete(e),t&&(t.queued=[],t.queuedBytes=0))}function pe(e){r(e,oe(e)+1)}function me(n){e[n]||t(n,wd(n))}function he(e,n){me(e),t(e,_f(n)),pe(e)}function ge(e){fe(e),ce(e),w.delete(e),t(e,void 0),r(e,void 0),ic(e)}function _e(){let e=vf();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function ve(e,t=`info`){--D,S(n=>[...n,{id:D,text:e,tone:t}].slice(-20))}function ye(e){return R.get(e)??0}function be(e,t,n){let r=new Map(e.map(e=>[e.key,JSON.stringify(e.state)])),i=new Map(t.map(e=>[e.key,JSON.stringify(e.state)]));for(let e of new Set([...r.keys(),...i.keys()])){if(r.get(e)===i.get(e))continue;let t=ye(e)+1;R.set(e,t),n===void 0?z.set(e,t):ee.set(e,Math.max(ee.get(e)??-1,n))}}function xe(e,t){s(n=>{let r=e(n);return L+=1,be(n.runtimes,r.runtimes,t),r})}function Se(e){ie.clear(),xe(()=>e)}function Ce(e,t){let n=new Set(e.filter(e=>!ie.has(e.key)).map(e=>e.key)),r=n.size!==o().runtimes.length||o().runtimes.some(e=>!n.has(e.key));xe(t=>{let n=new Map(t.runtimes.map(e=>[e.key,e]));return{...t,runtimes:e.filter(e=>!ie.has(e.key)).map(e=>{let t=n.get(e.key);return{...e,state:{...e.state,contextUsage:t?.state.contextUsage??e.state.contextUsage},...t?.stats===void 0?{}:{stats:t.stats},...t?.lastAssistantText===void 0?{}:{lastAssistantText:t.lastAssistantText}}})}},t),r&&Te().catch(()=>{})}function we(e){let t=ie.has(e);return ie.add(e),t?(ge(e),Promise.resolve()):(xe(t=>({...t,runtimes:t.runtimes.filter(t=>t.key!==e)})),ge(e),Te())}function U(){let e=++te,t=L;return Q.fleet().then(n=>{e!==te||t!==L||(Se(n),l(void 0))},n=>{throw e===te&&t===L&&l(n instanceof Error?n.message:String(n)),n})}function Te(){let e=++ne;return Q.sessions().then(t=>{e===ne&&(xe(e=>({...e,diskSessions:t.sessions})),l(void 0))},t=>{throw e===ne&&l(t instanceof Error?t.message:String(t)),t})}function W(e){ie.delete(e.key),xe(t=>{let n=t.runtimes.findIndex(t=>t.key===e.key);if(n===-1)return{...t,runtimes:[...t.runtimes,e]};let r=[...t.runtimes];return r[n]=e,{...t,runtimes:r}})}function G(e,t,n,r){if(o().runtimes.some(t=>t.key===e)){if(n!==void 0&&ye(e)!==n){let t=z.get(e)??0,i=ee.get(e);if(t>n||i===void 0||i>r)return}xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:t}:n)}))}}function Ee(e,t){xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:{...n.state,model:t}}:n)}))}function K(e,t){xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:{...n.state,thinkingLevel:t}}:n)}))}function q(e,t,n){return{...e,state:{...e.state,...t.contextUsage===void 0?{}:{contextUsage:t.contextUsage},messageCount:n?e.state.messageCount:t.totalMessages},stats:{tokensTotal:t.tokens.total,cost:t.cost}}}function De(e){let t=new AbortController,n,r=new Promise((r,i)=>{n=setTimeout(()=>{let n=Error(`Stats request for runtime ${e} timed out after ${Tf} ms`);i(n),t.abort(n)},Tf)});return Promise.race([Q.stats(e,t.signal),r]).finally(()=>{n!==void 0&&clearTimeout(n)})}function Oe(){if(re)return re;let e=o().runtimes.map(e=>e.key),t=new Map(e.map(e=>[e,ye(e)])),n=e.map(e=>De(e)),r=Promise.allSettled(n).then(n=>{let r=new Map,i=[];for(let[t,a]of n.entries())a.status===`fulfilled`?r.set(e[t],a.value):i.push(a.reason instanceof Error?a.reason.message:String(a.reason));r.size>0&&xe(e=>({...e,runtimes:e.runtimes.map(e=>{let n=r.get(e.key),i=t.get(e.key),a=i===void 0||ye(e.key)!==i;return n?q(e,n,a):e})})),d(i.length>0?i.join(`; `):void 0)}).finally(()=>{re===r&&(re=void 0)});return re=r,r}function ke(e){return Of.encode(JSON.stringify(e)).byteLength}function J(e){e.queued=[],e.queuedBytes=0}function Ae(){j!==void 0&&clearTimeout(j),j=void 0}function Y(){return Math.min(Df,Ef*2**Math.max(0,P-1))}function je(){if(ae||j!==void 0)return;P+=1;let e=Y();h(!1),M||=v(),y(t=>t.state===`auth_failed`?t:(N=!0,{...t,state:`retrying`,attempt:Math.max(t.attempt,P),retryDelayMs:e,retryAt:Date.now()+e})),j=setTimeout(()=>{j=void 0,Fe()},e)}function Me(){let e=M,t=N;M=void 0,N=!1,!(!t||e?.state!==`connected`||v().state!==`retrying`)&&y({state:`connected`,attempt:e.attempt,lastAppliedSeq:e.lastAppliedSeq})}function Ne(e){let t=e.event?.type;if(t===`fleet_snapshot`)Ce(e.event.runtimes,e.seq);else if(t===`disk_sessions_changed`)Te().catch(()=>{});else if(t===`runtime_removed`){if(e.key){let t=_e()===e.key;we(e.key).catch(()=>{}),t&&(ve(`session ${e.key} was stopped`,`warning`),B({screen:`fleet`}))}}else e.key&&(he(e.key,t=>qd(t,e.event)),t===`tasks_update`&&H(e.key))}function Pe(e){let t=e.subagent;he(e.key,n=>{let r=e.messages;if(n.entries=Md(r),n.tasks=(e.state.tasks??[]).map(e=>({...e})),n.streaming=e.state.isStreaming,n.compacting=e.state.isCompacting,n.sessionName=e.state.sessionName,n.model=e.state.model?.id,n.contextUsage=e.state.contextUsage,n.uiRequests=[],n.statusEntries=[],n.suggestedCommand=void 0,n.lastError=void 0,n.widgets={above:[],below:[]},n.toasts=[],n.title=void 0,n.composerPrefill=void 0,kf(n,r,e.state),n.streaming?(n.workingSince=Date.now(),n.workingText=`working`):(n.workingSince=void 0,n.workingText=void 0),n.backgroundAgents=Object.fromEntries(e.backgroundAgents.map(e=>[e.agentId,e])),Ld(n),t){let r=e.backgroundAgents.find(e=>e.agentId===t.agentId)??t.agent;n.backgroundAgents[t.agentId]=r,n.subagents[t.agentId]={agentId:t.agentId,entries:Md(t.messages),streaming:r.status===`running`}}}),H(e.key)}function X(e,t){if(A!==e||e.state!==`active`||e.barrierSeq===void 0)return;Ae(),P=0,Me();let n=e.barrierSeq;if(I=n,Se(t.fleet),l(void 0),t.active)Pe(t.active);else{let e=_e();e&&(ge(e),ve(`session ${e} was stopped`,`warning`),B({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&&Ne(e);for(let e of r)e.seq>n&&Ne(e);J(e),A=void 0,h(!1),p(void 0)}function Fe(e=!1){if(ae)return Promise.resolve();if(O)return(e||A?.state===`failed`)&&(F=!0),O;Ae();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};A=a,E+=1;for(let[e,t]of T)fe(e,t);h(!0),p(void 0);let o=setTimeout(()=>a.controller.abort(`Dashboard recovery timed out`),wf),s=Q.resync(n,r,a.controller.signal).then(e=>{a.barrierSeq=e.barrierSeq,X(a,e)}).catch(e=>{if(A!==a)return;a.state=`failed`,J(a);let t=a.controller.signal.reason;p(typeof t==`string`?t:e instanceof Error?e.message:String(e)),je(),j===void 0&&h(!1)}).finally(()=>{clearTimeout(o),O===s&&(O=void 0),!ae&&F&&(F=!1,Fe())});return O=s,s}function Ie(){return Fe(!0)}function Le(e){if(e.event?.type===`dashboard_resync`){Fe(!0);return}if(A){if(A.state===`failed`)throw je(),Error(`Dashboard recovery is failed; refusing to acknowledge live envelope before resync succeeds`);let t=ke(e);if(A.queued.length>=bf||A.queuedBytes+t>xf){J(A),A.state=`failed`;let e=`Dashboard recovery queue overflowed; waiting for a newer authoritative snapshot`;throw p(e),A.controller.abort(e),je(),j===void 0&&h(!1),Error(e)}A.queued.push(e),A.queuedBytes+=t;return}if(I!==void 0&&e.seq<=I)return;let t=e.key?T.get(e.key):void 0;if(t){let n=ke(e);if(t.queued.length>=Sf||t.queuedBytes+n>Cf)throw fe(e.key,t),Error(`Dashboard hydration queue overflowed for ${e.key}; refusing an incomplete snapshot replay`);t.queued.push(e),t.queuedBytes+=n}Ne(e)}let Re;async function ze(){ae=!1;try{let e=await Q.auth();_(e)}catch(e){_({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),B({screen:`pairing`});return}await U().catch(()=>{}),Re=ht({onEnvelope:Le,onStatusChange:e=>{N=!1,M=e.state===`connected`?e:void 0,y(e)},onRecovery:()=>{Fe()}})}function Be(){ae=!0,Re?.(),Ae(),M=void 0,N=!1,F=!1;let e=A;A=void 0,e&&J(e),e?.controller.abort(`Dashboard stopped`);for(let[e,t]of T)fe(e,t)}function Ve(t){if(x().some(e=>e.id===t)){S(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){he(n,e=>Jd(e,t));return}}async function He(e,t){fe(e);let n=ye(e),r={guard:le(e),queued:[],queuedBytes:0};T.set(e,r);let i=()=>fe(e,r);t?.addEventListener(`abort`,i,{once:!0}),t?.aborted&&i();try{let i=await Q.hydrate(e,t);if(t?.aborted||T.get(e)!==r||!ue(e,r.guard))return;he(e,e=>{let t=i.messages;e.entries=Md(t),e.backgroundAgents=Object.fromEntries(i.backgroundAgents.map(e=>[e.agentId,e])),Ld(e),e.streaming=i.state.isStreaming,e.compacting=i.state.isCompacting,e.tasks=(i.state.tasks??[]).map(e=>({...e})),i.state.isStreaming?(e.workingSince=Date.now(),e.workingText=`working`):(e.workingSince=void 0,e.workingText=void 0),kf(e,t,i.state)}),H(e),G(e,i.state,n,i.barrierSeq);for(let e of[...r.queued].sort((e,t)=>e.seq-t.seq))e.seq>i.barrierSeq&&Ne(e)}finally{t?.removeEventListener(`abort`,i),fe(e,r)}}async function Ue(e,t,n){let r=le(e),{agent:i,messages:a}=await Q.subagentMessages(e,t,n);n?.aborted||!de(e,r)||he(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=Md(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:B,fleet:o,fleetError:c,fleetStatsError:u,refreshFleet:U,refreshDiskSessions:Te,refreshFleetStats:Oe,removeRuntime:we,upsertRuntime:W,setRuntimeModel:Ee,setRuntimeThinkingLevel:K,resyncing:m,resyncError:f,retryResync:Ie,auth:g,connected:b,connection:v,notices:x,start:ze,stop:Be,dismissToast:Ve,hydrateSession:He,hydrateSubagent:Ue}}var jf=5e3;function Mf(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),jf)})]).finally(()=>{t&&clearTimeout(t)})}function Nf(){let e=Af();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),Mf(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(bn,{store:e})},get children(){return[U(K,{get when(){return e.route().screen===`session`},get children(){return U(Rl,{store:e,get sessionKey(){return e.route().key}})}}),U(K,{get when(){return e.route().screen===`subagent`},get children(){return U(Cd,{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(Ft,{store:e,get initialPath(){return e.route().path}})}}),U(K,{get when(){return e.route().screen===`settings`},get children(){return U(vd,{store:e})}}),U(K,{get when(){return e.route().screen===`pairing`},get children(){return U(En,{store:e})}})]}}),U(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}hu();var Pf=document.getElementById(`root`);if(!Pf)throw Error(`dashboard: #root element missing from index.html`);ke(()=>U(Nf,{}),Pf);
|
|
79
|
+
`).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function Ud(e){let{text:t,images:n}=Bd(e.content);return Hd(t,e.timestamp)??{kind:`user`,text:t,images:n.length>0?n:void 0,timestamp:e.timestamp}}function Wd(e){if(!(e?.role!==`assistant`||e.stopReason!==`error`))return typeof e.errorMessage==`string`&&e.errorMessage.trim().length>0?e.errorMessage:`Unknown error`}function Gd(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push(Ud(r));else if(r.role===`assistant`){let e=[],i=[],a=()=>{if(e.length===0)return;let n={kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp};i.push(n),t.push(n),e=[]};if(Array.isArray(r.content)){for(let i of r.content)if(i.type===`text`&&typeof i.text==`string`)e.push({kind:`text`,text:i.text});else if(i.type===`thinking`&&typeof i.thinking==`string`)e.push({kind:`thinking`,text:i.thinking});else if(i.type===`toolCall`){a();let e=i,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)}}a();let o=Wd(r);if(o&&i.length===0){let e={kind:`assistant`,blocks:[],model:r.model,streaming:!1,timestamp:r.timestamp};i.push(e),t.push(e)}let s=i.at(-1);s&&(s.stopReason=r.stopReason,s.errorMessage=o)}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));if(e){e.status=r.isError?`error`:`done`;let t=Bd(r.content);e.resultText=t.text,t.images.length>0&&(e.images=t.images),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??Vd(r.content)})}return t}var Kd=0,qd=20;function Jd(e){let t=e.toasts.length-qd;t>0&&e.toasts.splice(0,t)}function Yd(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function Xd(e){let t=Object.values(e.backgroundAgents).filter(e=>e.status!==`running`).sort((e,t)=>Yd(e)-Yd(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 Zd(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}var Qd=`provider-error`;function $d(e){e.statusEntries=e.statusEntries.filter(e=>e.key!==Qd),e.lastError=void 0}function ef(e,t){$d(e),e.statusEntries.push({key:Qd,text:t,tone:`error`}),e.lastError=t}function tf(e,t,n){if($d(e),!n)for(let n=t.length-1;n>=0;--n){let r=t[n];if(r?.role!==`assistant`)continue;let i=Wd(r);i&&ef(e,i);break}Zd(e)}function nf(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function rf(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 af(e,t,n){let r=e.entries.indexOf(t);if(r<0)return;let i=new Set,a=n.map(t=>{if(t.kind!==`tool`)return t;let n=rf(e,t.toolCallId);return n?(i.add(n),n):t}),o=new Set([t,...i]),s=e.entries.slice(0,r).filter(e=>!o.has(e)).length,c=e.entries.filter(e=>!o.has(e));c.splice(s,0,...a),e.entries.splice(0,e.entries.length,...c)}function of(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=nf(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push(Ud(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=nf(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=nf(e),r=Gd([n]);t?.streaming?af(e,t,r):e.entries.push(...r)}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=Ud(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text?r.images&&(t.images=r.images):e.entries.push(r)}break}case`tool_execution_start`:{let n=String(t.toolCallId),r=rf(e,n);r?(r.toolName=String(t.toolName),r.args=t.args,r.status=`running`,r.resultText=``,r.images=void 0,r.details=void 0,r.startedAt=Date.now(),r.endedAt=void 0):e.entries.push({kind:`tool`,toolCallId:n,toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break}case`tool_execution_update`:{let n=rf(e,String(t.toolCallId));if(n){let e=t.partialResult;if(typeof e==`string`)n.resultText=e,n.images=void 0;else if(e?.content){let t=Bd(e.content);n.resultText=t.text,n.images=t.images.length>0?t.images:void 0}}break}case`tool_execution_end`:{let n=rf(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;if(typeof e==`string`)n.resultText=e,n.images=void 0;else if(e?.content){let t=Bd(e.content);n.resultText=t.text,n.images=t.images.length>0?t.images:void 0}n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function sf(e,t){switch(of(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),$d(e),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`message_end`:{let n=t.message;if(n?.role===`assistant`){let t=Wd(n);t?ef(e,t):$d(e)}break}case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,t.reason===`overflow`&&$d(e),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`:$d(e),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?ef(e,String(t.finalError)):t.success&&$d(e);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=nf(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=nf(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`subagent_arbitration`:{let n=e.backgroundAgents[String(t.agentId)];if(n){let e={status:t.status,proposed:t.proposed,final:t.final??null,changed:t.changed??[],step:t.step,errorCode:t.errorCode,errorMessage:t.errorMessage};n.arbitrations=[...n.arbitrations??[],e],e.status===`success`&&e.final&&(n.agentType=e.final.agent)}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),Xd(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),of(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_response_handled`:lf(e,String(t.id));break;case`extension_ui_request`:{let n=t.method,r=Id(t);if(r)e.uiRequests.push(r);else if(n===`notify`){Kd+=1;let n=t.notifyType??`info`;e.toasts.push({id:Kd,text:String(t.message??``),tone:n}),Jd(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`:Kd+=1,e.toasts.push({id:Kd,text:`extension error: ${t.error}`,tone:`error`}),Jd(e);break;default:break}Zd(e)}function cf(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}function lf(e,t){e.uiRequests=e.uiRequests.filter(e=>e.id!==t),Zd(e)}var uf=Symbol(`store-raw`),df=Symbol(`store-node`),ff=Symbol(`store-has`),pf=Symbol(`store-self`);function mf(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,Sf)}),!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 hf(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function gf(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[uf])return n;if(!hf(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=gf(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=gf(i,t))!==i&&(e[a]=r))}return e}function _f(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function vf(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 yf(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===df?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function bf(e){ee()&&vf(_f(e,df),pf)()}function xf(e){return bf(e),Reflect.ownKeys(e)}var Sf={get(e,t,n){if(t===uf)return e;if(t===p)return n;if(t===m)return bf(e),n;let r=_f(e,df),i=r[t],a=i?i():e[t];if(t===df||t===ff||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=vf(r,t,a)())}return hf(a)?mf(a):a},has(e,t){return t===uf||t===p||t===m||t===df||t===ff||t===`__proto__`?!0:(ee()&&vf(_f(e,ff),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:xf,getOwnPropertyDescriptor:yf};function Cf(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[ff]&&e[ff][t]&&i!==void 0&&e[ff][t].$()):(e[t]=n,e[ff]&&e[ff][t]&&i===void 0&&e[ff][t].$());let o=_f(e,df),s;if((s=vf(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=vf(o,`length`,a))&&s.$(e.length)}(s=o[pf])&&s.$()}function wf(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Tf(i)||Cf(e,i,t[i])}}function Tf(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Ef(e,t){if(typeof t==`function`&&(t=t(e)),t=gf(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&&Cf(e,n,r)}Cf(e,`length`,r)}else wf(e,t)}function Df(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&&Tf(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)Df(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&Df(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)Df(e,[r].concat(t),n);return}else if(t.length>1){Df(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=gf(a),r===void 0||hf(i)&&hf(a)&&!Array.isArray(a)?wf(i,a):Cf(e,r,a))}function Of(...[e,t]){let n=gf(e||{}),r=Array.isArray(n),i=mf(n);function a(...e){I(()=>{r&&e.length===1?Ef(n,e[0]):Df(n,e)})}return[i,a]}var kf=new WeakMap,Af={get(e,t){if(t===uf)return e;let n=e[t];if(t===p||t===m||t===df||t===ff||t===`__proto__`)return n;let r;return hf(n)?kf.get(n)||(kf.set(n,r=new Proxy(n,Af)),r):n},set(e,t,n){return Cf(e,t,gf(n)),!0},deleteProperty(e,t){return Cf(e,t,void 0,!0),!0}};function jf(e){return t=>{if(hf(t)){let n;(n=kf.get(t))||kf.set(t,n=new Proxy(t,Af)),e(n)}return t}}function Mf(){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 Nf(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 Pf=2e3,Ff=3*1024*1024,If=Pf,Lf=Ff,Rf=3e4,zf=1e4,Bf=1e3,Vf=3e4,Hf=new TextEncoder;function Uf(e,t,n){e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`);let r=n.retryAttempt??0;if(n.isRetrying&&r>0){let t=e.entries.findLast(e=>e.kind===`assistant`&&e.stopReason===`error`),n=t?.errorMessage?` — ${t.errorMessage}`:``;e.statusEntries.push({key:`retry`,text:`retrying (attempt ${r})${n}`,tone:`warning`})}tf(e,t,n.isStreaming||n.isRetrying||n.isCompacting)}function Wf(){let[e,t]=Of({}),[n,r]=Of({}),[i,a]=k(Mf()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(),[m,h]=k(!1),[g,_]=k(),[v,y]=k({state:`disconnected`,attempt:0}),b=()=>v().state===`connected`,[x,S]=k([]),C=new Map,w=new Map,T=new Map,E=0,D=0,O,A,j,M,N=!1,P=0,F=!1,I,L=0,R=new Map,z=new Map,ee=new Map,te=0,ne=0,re,ie=new Set,ae=!1;window.addEventListener(`hashchange`,()=>a(Mf()));function B(e){window.location.hash=Nf(e)}function oe(e){return n[e]??0}function V(e){return C.get(e)??0}function se(e){return w.get(e)??0}function H(e){w.set(e,se(e)+1)}function ce(e){C.set(e,V(e)+1)}function le(e){return{revision:oe(e),generation:V(e),epoch:E}}function ue(e,t){return V(e)===t.generation&&E===t.epoch}function de(e,t){return oe(e)===t.revision&&ue(e,t)}function fe(e,t){t&&T.get(e)!==t||(T.delete(e),t&&(t.queued=[],t.queuedBytes=0))}function pe(e){r(e,oe(e)+1)}function me(n){e[n]||t(n,Ld(n))}function he(e,n){me(e),t(e,jf(n)),pe(e)}function ge(e){fe(e),ce(e),w.delete(e),t(e,void 0),r(e,void 0),ic(e)}function _e(){let e=Mf();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function ve(e,t=`info`){--D,S(n=>[...n,{id:D,text:e,tone:t}].slice(-20))}function ye(e){return R.get(e)??0}function be(e,t,n){let r=new Map(e.map(e=>[e.key,JSON.stringify(e.state)])),i=new Map(t.map(e=>[e.key,JSON.stringify(e.state)]));for(let e of new Set([...r.keys(),...i.keys()])){if(r.get(e)===i.get(e))continue;let t=ye(e)+1;R.set(e,t),n===void 0?z.set(e,t):ee.set(e,Math.max(ee.get(e)??-1,n))}}function xe(e,t){s(n=>{let r=e(n);return L+=1,be(n.runtimes,r.runtimes,t),r})}function Se(e){ie.clear(),xe(()=>e)}function Ce(e,t){let n=new Set(e.filter(e=>!ie.has(e.key)).map(e=>e.key)),r=n.size!==o().runtimes.length||o().runtimes.some(e=>!n.has(e.key));xe(t=>{let n=new Map(t.runtimes.map(e=>[e.key,e]));return{...t,runtimes:e.filter(e=>!ie.has(e.key)).map(e=>{let t=n.get(e.key);return{...e,state:{...e.state,contextUsage:t?.state.contextUsage??e.state.contextUsage},...t?.stats===void 0?{}:{stats:t.stats},...t?.lastAssistantText===void 0?{}:{lastAssistantText:t.lastAssistantText}}})}},t),r&&Te().catch(()=>{})}function we(e){let t=ie.has(e);return ie.add(e),t?(ge(e),Promise.resolve()):(xe(t=>({...t,runtimes:t.runtimes.filter(t=>t.key!==e)})),ge(e),Te())}function U(){let e=++te,t=L;return Q.fleet().then(n=>{e!==te||t!==L||(Se(n),l(void 0))},n=>{throw e===te&&t===L&&l(n instanceof Error?n.message:String(n)),n})}function Te(){let e=++ne;return Q.sessions().then(t=>{e===ne&&(xe(e=>({...e,diskSessions:t.sessions})),l(void 0))},t=>{throw e===ne&&l(t instanceof Error?t.message:String(t)),t})}function W(e){ie.delete(e.key),xe(t=>{let n=t.runtimes.findIndex(t=>t.key===e.key);if(n===-1)return{...t,runtimes:[...t.runtimes,e]};let r=[...t.runtimes];return r[n]=e,{...t,runtimes:r}})}function G(e,t,n,r){if(o().runtimes.some(t=>t.key===e)){if(n!==void 0&&ye(e)!==n){let t=z.get(e)??0,i=ee.get(e);if(t>n||i===void 0||i>r)return}xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:t}:n)}))}}function Ee(e,t){xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:{...n.state,model:t}}:n)}))}function K(e,t){xe(n=>({...n,runtimes:n.runtimes.map(n=>n.key===e?{...n,state:{...n.state,thinkingLevel:t}}:n)}))}function q(e,t,n){return{...e,state:{...e.state,...t.contextUsage===void 0?{}:{contextUsage:t.contextUsage},messageCount:n?e.state.messageCount:t.totalMessages},stats:{tokensTotal:t.tokens.total,cost:t.cost}}}function De(e){let t=new AbortController,n,r=new Promise((r,i)=>{n=setTimeout(()=>{let n=Error(`Stats request for runtime ${e} timed out after ${zf} ms`);i(n),t.abort(n)},zf)});return Promise.race([Q.stats(e,t.signal),r]).finally(()=>{n!==void 0&&clearTimeout(n)})}function Oe(){if(re)return re;let e=o().runtimes.map(e=>e.key),t=new Map(e.map(e=>[e,ye(e)])),n=e.map(e=>De(e)),r=Promise.allSettled(n).then(n=>{let r=new Map,i=[];for(let[t,a]of n.entries())a.status===`fulfilled`?r.set(e[t],a.value):i.push(a.reason instanceof Error?a.reason.message:String(a.reason));r.size>0&&xe(e=>({...e,runtimes:e.runtimes.map(e=>{let n=r.get(e.key),i=t.get(e.key),a=i===void 0||ye(e.key)!==i;return n?q(e,n,a):e})})),d(i.length>0?i.join(`; `):void 0)}).finally(()=>{re===r&&(re=void 0)});return re=r,r}function ke(e){return Hf.encode(JSON.stringify(e)).byteLength}function J(e){e.queued=[],e.queuedBytes=0}function Ae(){j!==void 0&&clearTimeout(j),j=void 0}function Y(){return Math.min(Vf,Bf*2**Math.max(0,P-1))}function je(){if(ae||j!==void 0)return;P+=1;let e=Y();h(!1),M||=v(),y(t=>t.state===`auth_failed`?t:(N=!0,{...t,state:`retrying`,attempt:Math.max(t.attempt,P),retryDelayMs:e,retryAt:Date.now()+e})),j=setTimeout(()=>{j=void 0,Fe()},e)}function Me(){let e=M,t=N;M=void 0,N=!1,!(!t||e?.state!==`connected`||v().state!==`retrying`)&&y({state:`connected`,attempt:e.attempt,lastAppliedSeq:e.lastAppliedSeq})}function Ne(e){let t=e.event?.type;if(t===`fleet_snapshot`)Ce(e.event.runtimes,e.seq);else if(t===`disk_sessions_changed`)Te().catch(()=>{});else if(t===`runtime_removed`){if(e.key){let t=_e()===e.key;we(e.key).catch(()=>{}),t&&(ve(`session ${e.key} was stopped`,`warning`),B({screen:`fleet`}))}}else e.key&&(he(e.key,t=>sf(t,e.event)),t===`tasks_update`&&H(e.key))}function Pe(e){let t=e.subagent;he(e.key,n=>{let r=e.messages;if(n.entries=Gd(r),n.tasks=(e.state.tasks??[]).map(e=>({...e})),n.streaming=e.state.isStreaming,n.compacting=e.state.isCompacting,n.sessionName=e.state.sessionName,n.model=e.state.model?.id,n.contextUsage=e.state.contextUsage,n.uiRequests=(e.pendingExtensionUiRequests??[]).map(e=>Id(e)).filter(e=>e!==void 0),n.statusEntries=[],n.suggestedCommand=void 0,n.lastError=void 0,n.widgets={above:[],below:[]},n.toasts=[],n.title=void 0,n.composerPrefill=void 0,Uf(n,r,e.state),n.streaming?(n.workingSince=Date.now(),n.workingText=`working`):(n.workingSince=void 0,n.workingText=void 0),n.backgroundAgents=Object.fromEntries(e.backgroundAgents.map(e=>[e.agentId,e])),Xd(n),t){let r=e.backgroundAgents.find(e=>e.agentId===t.agentId)??t.agent;n.backgroundAgents[t.agentId]=r,n.subagents[t.agentId]={agentId:t.agentId,entries:Gd(t.messages),streaming:r.status===`running`}}Zd(n)}),H(e.key)}function X(e,t){if(A!==e||e.state!==`active`||e.barrierSeq===void 0)return;Ae(),P=0,Me();let n=e.barrierSeq;if(I=n,Se(t.fleet),l(void 0),t.active)Pe(t.active);else{let e=_e();e&&(ge(e),ve(`session ${e} was stopped`,`warning`),B({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&&Ne(e);for(let e of r)e.seq>n&&Ne(e);J(e),A=void 0,h(!1),p(void 0)}function Fe(e=!1){if(ae)return Promise.resolve();if(O)return(e||A?.state===`failed`)&&(F=!0),O;Ae();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};A=a,E+=1;for(let[e,t]of T)fe(e,t);h(!0),p(void 0);let o=setTimeout(()=>a.controller.abort(`Dashboard recovery timed out`),Rf),s=Q.resync(n,r,a.controller.signal).then(e=>{a.barrierSeq=e.barrierSeq,X(a,e)}).catch(e=>{if(A!==a)return;a.state=`failed`,J(a);let t=a.controller.signal.reason;p(typeof t==`string`?t:e instanceof Error?e.message:String(e)),je(),j===void 0&&h(!1)}).finally(()=>{clearTimeout(o),O===s&&(O=void 0),!ae&&F&&(F=!1,Fe())});return O=s,s}function Ie(){return Fe(!0)}function Le(e){if(e.event?.type===`dashboard_resync`){Fe(!0);return}if(A){if(A.state===`failed`)throw je(),Error(`Dashboard recovery is failed; refusing to acknowledge live envelope before resync succeeds`);let t=ke(e);if(A.queued.length>=Pf||A.queuedBytes+t>Ff){J(A),A.state=`failed`;let e=`Dashboard recovery queue overflowed; waiting for a newer authoritative snapshot`;throw p(e),A.controller.abort(e),je(),j===void 0&&h(!1),Error(e)}A.queued.push(e),A.queuedBytes+=t;return}if(I!==void 0&&e.seq<=I)return;let t=e.key?T.get(e.key):void 0;if(t){let n=ke(e);if(t.queued.length>=If||t.queuedBytes+n>Lf)throw fe(e.key,t),Error(`Dashboard hydration queue overflowed for ${e.key}; refusing an incomplete snapshot replay`);t.queued.push(e),t.queuedBytes+=n}Ne(e)}let Re;async function ze(){ae=!1;try{let e=await Q.auth();_(e)}catch(e){_({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),B({screen:`pairing`});return}await U().catch(()=>{}),Re=ht({onEnvelope:Le,onStatusChange:e=>{N=!1,M=e.state===`connected`?e:void 0,y(e)},onRecovery:()=>{Fe()}})}function Be(){ae=!0,Re?.(),Ae(),M=void 0,N=!1,F=!1;let e=A;A=void 0,e&&J(e),e?.controller.abort(`Dashboard stopped`);for(let[e,t]of T)fe(e,t)}function Ve(t){if(x().some(e=>e.id===t)){S(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){he(n,e=>cf(e,t));return}}async function He(e,t){fe(e);let n=ye(e),r={guard:le(e),queued:[],queuedBytes:0};T.set(e,r);let i=()=>fe(e,r);t?.addEventListener(`abort`,i,{once:!0}),t?.aborted&&i();try{let i=await Q.hydrate(e,t);if(t?.aborted||T.get(e)!==r||!ue(e,r.guard))return;he(e,e=>{let t=i.messages;e.entries=Gd(t),e.backgroundAgents=Object.fromEntries(i.backgroundAgents.map(e=>[e.agentId,e])),Xd(e),e.streaming=i.state.isStreaming,e.compacting=i.state.isCompacting,e.tasks=(i.state.tasks??[]).map(e=>({...e})),i.state.isStreaming?(e.workingSince=Date.now(),e.workingText=`working`):(e.workingSince=void 0,e.workingText=void 0),e.uiRequests=(i.pendingExtensionUiRequests??[]).map(e=>Id(e)).filter(e=>e!==void 0),Uf(e,t,i.state),Zd(e)}),H(e),G(e,i.state,n,i.barrierSeq);for(let e of[...r.queued].sort((e,t)=>e.seq-t.seq))e.seq>i.barrierSeq&&Ne(e)}finally{t?.removeEventListener(`abort`,i),fe(e,r)}}async function Ue(e,t,n){let r=le(e),{agent:i,messages:a}=await Q.subagentMessages(e,t,n);n?.aborted||!de(e,r)||he(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=Gd(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:B,fleet:o,fleetError:c,fleetStatsError:u,refreshFleet:U,refreshDiskSessions:Te,refreshFleetStats:Oe,removeRuntime:we,upsertRuntime:W,setRuntimeModel:Ee,setRuntimeThinkingLevel:K,resyncing:m,resyncError:f,retryResync:Ie,auth:g,connected:b,connection:v,notices:x,start:ze,stop:Be,dismissToast:Ve,resolveUiRequest(e,t){he(e,e=>lf(e,t))},hydrateSession:He,hydrateSubagent:Ue}}var Gf=5e3;function Kf(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),Gf)})]).finally(()=>{t&&clearTimeout(t)})}function qf(){let e=Wf();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),Kf(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(bn,{store:e})},get children(){return[U(K,{get when(){return e.route().screen===`session`},get children(){return U(Kl,{store:e,get sessionKey(){return e.route().key}})}}),U(K,{get when(){return e.route().screen===`subagent`},get children(){return U(Fd,{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(Ft,{store:e,get initialPath(){return e.route().path}})}}),U(K,{get when(){return e.route().screen===`settings`},get children(){return U(Dd,{store:e})}}),U(K,{get when(){return e.route().screen===`pairing`},get children(){return U(En,{store:e})}})]}}),U(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}Cu();var Jf=document.getElementById(`root`);if(!Jf)throw Error(`dashboard: #root element missing from index.html`);ke(()=>U(qf,{}),Jf);
|