@dreb/dashboard 2.38.1 → 2.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -87,6 +87,16 @@ upload/download. Every file operation is logged server-side. Browser
87
87
  notifications are opt-in per device from settings; the tab-title attention
88
88
  badge works without permission.
89
89
 
90
+ ## WSL2 gotcha — intermittent "access denied" / pairing screen on localhost
91
+
92
+ Running the dashboard inside **WSL2** and reaching it from a Windows browser can
93
+ intermittently show an access-denied / pairing screen on `http://127.0.0.1`
94
+ right after the WSL VM has been idle. It's a WSL mirrored-networking quirk (the
95
+ loopback source address is transiently `10.255.255.254`, which fails local-mode
96
+ auth's `127.x`/`::1` check), not a dreb bug. Keeping a WSL terminal open — or a
97
+ headless keep-alive — avoids it. Full explanation and workarounds:
98
+ [WSL2 gotcha](../coding-agent/docs/dashboard.md#wsl2-gotcha).
99
+
90
100
  ## Options
91
101
 
92
102
  | Flag | Description |
@@ -59,19 +59,19 @@ ${e}</tr>
59
59
  `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
60
60
  `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Oa(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=ka(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+Oa(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=ka(e);if(i===null)return Oa(n);e=i;let a=`<img src="${e}" alt="${n}"`;return t&&(a+=` title="${Oa(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Oa(e.text)}},Ra=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}},za=class e{options;renderer;textRenderer;constructor(e){this.options=e||xi,this.options.renderer=this.options.renderer||new La,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Ra}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=i,t=this.options.extensions.renderers[e.type].call({parser:this},e);if(t!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`paragraph`,`text`].includes(e.type)){n+=t||``;continue}}let a=i;switch(a.type){case`space`:n+=this.renderer.space(a);continue;case`hr`:n+=this.renderer.hr(a);continue;case`heading`:n+=this.renderer.heading(a);continue;case`code`:n+=this.renderer.code(a);continue;case`table`:n+=this.renderer.table(a);continue;case`blockquote`:n+=this.renderer.blockquote(a);continue;case`list`:n+=this.renderer.list(a);continue;case`html`:n+=this.renderer.html(a);continue;case`paragraph`:n+=this.renderer.paragraph(a);continue;case`text`:{let i=a,o=this.renderer.text(i);for(;r+1<e.length&&e[r+1].type===`text`;)i=e[++r],o+=`
61
61
  `+this.renderer.text(i);t?n+=this.renderer.paragraph({type:`paragraph`,raw:o,text:o,tokens:[{type:`text`,raw:o,text:o,escaped:!0}]}):n+=o;continue}default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}parseInline(e,t=this.renderer){let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},Ba=class{options;block;constructor(e){this.options=e||xi}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?Ia.lex:Ia.lexInline}provideParser(){return this.block?za.parse:za.parseInline}},Va=new class{defaults=bi();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=za;Renderer=La;TextRenderer=Ra;Lexer=Ia;Tokenizer=Fa;Hooks=Ba;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new La(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new Fa(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Ba;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];Ba.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(t,e)).then(e=>a.call(t,e));let n=i.call(t,e);return a.call(t,n)}:t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Ia.lex(e,t??this.defaults)}parser(e,t){return za.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(t==null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));i.hooks&&(i.hooks.options=i,i.hooks.block=e);let o=i.hooks?i.hooks.provideLexer():e?Ia.lex:Ia.lexInline,s=i.hooks?i.hooks.provideParser():e?za.parse:za.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(t):t).then(e=>o(e,i)).then(e=>i.hooks?i.hooks.processAllTokens(e):e).then(e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then(()=>e):e).then(e=>s(e,i)).then(e=>i.hooks?i.hooks.postprocess(e):e).catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let e=o(t,i);i.hooks&&(e=i.hooks.processAllTokens(e)),i.walkTokens&&this.walkTokens(e,i.walkTokens);let n=s(e,i);return i.hooks&&(n=i.hooks.postprocess(n)),n}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
62
- Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Oa(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function $(e,t){return Va.parse(e,t)}$.options=$.setOptions=function(e){return Va.setOptions(e),$.defaults=Va.defaults,Si($.defaults),$},$.getDefaults=bi,$.defaults=xi,$.use=function(...e){return Va.use(...e),$.defaults=Va.defaults,Si($.defaults),$},$.walkTokens=function(e,t){return Va.walkTokens(e,t)},$.parseInline=Va.parseInline,$.Parser=za,$.parser=za.parse,$.Renderer=La,$.TextRenderer=Ra,$.Lexer=Ia,$.lexer=Ia.lex,$.Tokenizer=Fa,$.Hooks=Ba,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,za.parse,Ia.lex;function Ha(e){let t=e.requestAnimationFrame??requestAnimationFrame,n=e.cancelAnimationFrame??cancelAnimationFrame,r,i;function a(){r!==void 0&&n(r),i!==void 0&&n(i),r=void 0,i=void 0}function o(){r!==void 0||i!==void 0||(r=t(()=>{r=void 0,i=t(()=>{i=void 0;let t=e.element();t&&e.shouldScroll()&&(t.scrollTop=t.scrollHeight)})}))}return{request:o,cancel:a}}var Ua=`dreb.dashboard.expandThinking`,Wa=`dreb.dashboard.toolAutoExpand`,Ga=[`read`,`edit`,`write`,`suggest_next`,`bash`],Ka=!0,qa=new Set(Ga),Ja=Object.fromEntries(Ga.map(e=>[e,!0]));function Ya(e,t){if(typeof window>`u`)return t;try{let n=window.localStorage.getItem(e);return n===null?t:n===`true`}catch{return t}}function Xa(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(e,t?`true`:`false`)}catch{}}function Za(){if(typeof window>`u`)return{...Ja};try{let e=window.localStorage.getItem(Wa);if(e===null)return{...Ja};let t=JSON.parse(e),n={...Ja};for(let e of Ga)typeof t[e]==`boolean`&&(n[e]=t[e]);return n}catch{return{...Ja}}}function Qa(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Wa,JSON.stringify(e))}catch{}}var[$a,eo]=k(Ya(Ua,Ka)),[to,no]=k(Za()),ro=$a;function io(e){eo(e),Xa(Ua,e)}function ao(e,t){let n={...to(),[e]:t};no(n),Qa(n)}function oo(e){return to()[e]??qa.has(e)}var so=K(`<div>`),co=K(`<pre>`),lo=K(`<code class=hljs>`),uo=K(`<span>`),fo=K(`<div class=tool-output-truncated>output truncated — showing last <!> of <!>. <button type=button class=entry-action>show full (<!>)`),po=K(`<div class=tool-command><code>`),mo=K(`<details class=tool><summary><span class=tool-name></span><span class=tool-arg></span><span>`),ho=K(`<div class=tool-input><span class=tool-input-label>`),go=K(`<div class=tool-result><p class=suggested-command>→ <code>`),_o=K(`<div class=tool-result>`),vo=K(`<button type=button class=entry-action>`),yo=K(`<span>·`),bo=K(`<span>streaming`),xo=K(`<div class="entry assistant"><div class=entry-head><span>`),So=K(`<details class=thinking><summary>thinking`),Co=K(`<div class=entry-body>`),wo=K(`<div class="entry user"><div class=entry-head><span></span></div><div class=entry-body>`),To=K(`<div class="entry summary-card"><details><summary></summary><div class=entry-body style=margin-top:8px>`),Eo=K(`<div class="entry custom-card"><div class=entry-head><span></span></div><div class=entry-body>`),Do=K(`<span class=skill-badge>skill: `),Oo=K(`<span class=agent-result-header>`),ko=K(`<div class="entry agent-result-card"><details><summary><span>background agent result`),Ao=K(`<div class=transcript-window-control><button type=button class="btn btn-small">show earlier <!> (<!> hidden)`),jo=K(`<div class=assistant-turn data-testid=assistant-turn>`),Mo=150,No=200*1024;function Po(e){let t=$.parse(e,{async:!1});return Fr.sanitize(t)}function Fo(e,t,n=Mo){let[r,i]=k(e()),a,o=e(),s=()=>{a&&clearTimeout(a),a=void 0};return M(()=>{let r=e(),c=t();if(o=r,!c){s(),i(r);return}a||=setTimeout(()=>{a=void 0,i(o)},n)}),L(s),r}function Io(e){let t=e/1024;return t<1024?`${Math.round(t)} KB`:`${(t/1024).toFixed(1)} MB`}function Lo(e){let t=Fo(()=>e.text,()=>e.throttle===!0),n=N(()=>Po(t()));return(()=>{var t=so();return j(r=>{var i=e.class??`markdown-body`,a=e.classList,o=n();return i!==r.e&&Ne(t,r.e=i),r.t=Fe(t,a,r.t),o!==r.a&&(t.innerHTML=r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()}function Ro(e){if(typeof e!=`string`||!e)return;let t=e.split(/[\\/]/).pop()?.toLowerCase()??``,n=t.includes(`.`)?t.split(`.`).pop():t;return n?{ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,py:`python`,rb:`ruby`,rs:`rust`,go:`go`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,hpp:`cpp`,cs:`csharp`,php:`php`,sh:`bash`,bash:`bash`,zsh:`bash`,sql:`sql`,html:`html`,css:`css`,scss:`scss`,json:`json`,yaml:`yaml`,yml:`yaml`,xml:`xml`,md:`markdown`,dockerfile:`dockerfile`}[n]:void 0}function zo(e){return e?.path??e?.file_path}function Bo(e,t){if(!(!t||!yi.getLanguage(t)))return Fr.sanitize(yi.highlight(e,{language:t,ignoreIllegals:!0}).value)}function Vo(e){let t,n=!0,r=!1,i,a=Fo(()=>e.text,()=>e.throttle===!0),o=N(()=>Bo(a(),e.language)),s=()=>!t||t.scrollTop+t.clientHeight>=t.scrollHeight-24,c=Ha({element:()=>t,shouldScroll:()=>n&&!r}),l=()=>{i&&clearTimeout(i),i=setTimeout(()=>{r=!1,n=s()},250)};return M(()=>{a(),e.language,!(!e.autoScroll||!n||r)&&c.request()}),L(()=>{i&&clearTimeout(i),c.cancel()}),(()=>{var i=co();i.addEventListener(`scroll`,()=>{e.autoScroll&&(n=s())}),i.$$touchend=()=>{e.autoScroll&&(r=!1,n=s())},i.$$touchstart=()=>{e.autoScroll&&(r=!0)},i.addEventListener(`wheel`,()=>{e.autoScroll&&(r=!0,l())});var c=t;return typeof c==`function`?Ie(c,i):t=i,J(i,V(U,{get when(){return o()},get fallback(){return a()},children:e=>(()=>{var t=lo();return j(()=>t.innerHTML=e()),t})()})),i})()}function Ho(e){let t=e.args;if(!t||typeof t!=`object`)return``;switch(e.toolName){case`read`:{let n=Uo(e);return`${String(t.path??``)}${n?` · ${n} lines`:``}`}case`write`:return String(t.path??``);case`edit`:return String(t.path??``);case`bash`:case`bash (user)`:return String(t.command??``);case`grep`:case`search`:return String(t.pattern??t.query??``);case`find`:return String(t.pattern??``);case`ls`:return String(t.path??`.`);case`web_fetch`:return String(t.url??``);case`web_search`:return String(t.query??``);case`subagent`:return typeof t.task==`string`?t.task.slice(0,120):Array.isArray(t.tasks)?`${t.tasks.length} parallel tasks`:Array.isArray(t.chain)?`${t.chain.length}-step chain`:``;case`skill`:return String(t.skill??``);default:{let e=Object.values(t)[0];return typeof e==`string`?e.slice(0,120):``}}}function Uo(e){if(!(e.toolName!==`read`||!e.resultText))return e.resultText.split(`
63
- `).length}function Wo(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
- `)}function Go(e){return e.match(/^\/skill:([\w-]+)/)?.[1]}function Ko(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 qo=new Set([`subagent`,`skill`,`web_fetch`]);function Jo(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:Ro(zo(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 Yo(e){return(()=>{var t=co();return J(t,V(H,{get each(){return e.text.split(`
65
- `)},children:e=>[(()=>{var t=uo();return J(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 Xo(e){if(e.toolName!==`edit`)return;let t=e.details?.diff;return typeof t==`string`?t:void 0}function Zo(e){let[t,n]=k(!1),r=()=>e.text.length>No;M(()=>{r()||n(!1)});let i=()=>r()&&!t()?e.text.slice(-204800):e.text;return[V(U,{get when(){return G(()=>!!r())()&&!t()},get children(){var t=fo(),r=t.firstChild.nextSibling,i=r.nextSibling.nextSibling,a=i.nextSibling.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,J(t,()=>Io(No),r),J(t,()=>Io(e.text.length),i),a.$$click=()=>n(!0),J(a,()=>Io(e.text.length),o),t}}),V(U,{get when(){return e.markdown},get fallback(){return V(Vo,{get text(){return i()},get language(){return e.language},get autoScroll(){return e.autoScroll},get throttle(){return e.throttle}})},get children(){return V(Lo,{get text(){return i()},get throttle(){return e.throttle}})}})]}function Qo(e){let t=()=>Ko(e.entry),n=()=>e.entry.args,r=()=>{if(e.entry.toolName===`suggest_next`)return e.entry.details},i=()=>Xo(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 Ro(zo(n()))},s=()=>qo.has(e.entry.toolName)&&e.entry.status!==`error`,c=()=>e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`,l=()=>Jo(e.entry),u=()=>oo(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}),L(()=>{g&&clearTimeout(g)}),(()=>{var u=mo(),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)}),J(p,()=>e.entry.toolName),J(_,()=>Ho(e.entry)),J(v,()=>t().text),J(u,V(U,{get when(){return d()},get children(){return[V(U,{get when(){return e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`},get children(){var e=po(),t=e.firstChild;return J(t,()=>String(n()?.command??``)),e}}),V(H,{get each(){return l()},children:e=>(()=>{var t=ho(),n=t.firstChild;return J(n,()=>e.label),J(t,V(U,{get when(){return e.markdown},get fallback(){return V(Vo,{get text(){return e.text},get language(){return e.language}})},get children(){return V(Lo,{get text(){return e.text}})}}),null),t})()}),V(Oe,{get children(){return[V(W,{get when(){return r()},children:e=>(()=>{var t=go(),n=t.firstChild,r=n.firstChild.nextSibling;return J(t,V(U,{get when(){return e().summary},get children(){return V(Lo,{get text(){return e().summary}})}}),n),J(r,()=>e().suggestion),t})()}),V(W,{get when(){return i()},children:e=>(()=>{var t=_o();return J(t,V(Yo,{get text(){return e()}})),t})()}),V(W,{get when(){return a()},children:t=>(()=>{var n=_o();return J(n,V(Zo,{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&&Ne(v,e.t=r),e},{e:void 0,t:void 0}),u})()}function $o(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=vo();return n.$$click=r,J(n,(()=>{var e=G(()=>t()===`copied`);return()=>e()?`copied`:t()===`failed`?`copy failed`:`copy`})()),j(()=>n.disabled=!e.text),n})()}function es(e){return(()=>{var t=xo(),n=t.firstChild,r=n.firstChild;return J(r,()=>e.who),J(n,V(U,{get when(){return e.entry.model},get children(){return[yo(),(()=>{var t=uo();return J(t,()=>e.entry.model),t})()]}}),null),J(n,V(U,{get when(){return e.entry.streaming},get children(){return[yo(),bo()]}}),null),J(n,V($o,{get text(){return Wo(e.entry)}}),null),J(t,V(H,{get each(){return e.entry.blocks},children:(t,n)=>V(U,{get when(){return t.kind===`thinking`},get fallback(){return(()=>{var r=Co();return J(r,V(Lo,{get text(){return t.text},get classList(){return{"streaming-cursor":e.entry.streaming&&n()===e.entry.blocks.length-1}},get throttle(){return e.entry.streaming}})),r})()},get children(){var n=So();return n.firstChild,J(n,V(Lo,{get text(){return t.text},class:`thinking-body markdown-body`,get throttle(){return e.entry.streaming}}),null),j(()=>n.open=ro()),n}})}),null),t})()}function ts(e,t){return e?.kind===`entry`&&e.entry===t}function ns(e,t){return e?.kind===`assistant-turn`&&e.entries.length===t.length&&e.entries.every((e,n)=>e===t[n])}function rs(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];n.push(ns(o,a)?o:{kind:`assistant-turn`,entries:a});continue}if(i){let e=t[n.length];n.push(ts(e,i)?e:{kind:`entry`,entry:i})}r+=1}return n}function is(e){return V(Oe,{get children(){return[V(W,{get when(){return e.entry.kind===`user`},get children(){var t=wo(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return J(n,V(U,{get when(){return Go(e.entry.text)},children:e=>(()=>{var t=Do();return t.firstChild,J(t,e,null),t})()}),r),J(n,V($o,{get text(){return Wo(e.entry)}}),r),J(r,()=>e.userLabel),J(i,()=>e.entry.text),t}}),V(W,{get when(){return e.entry.kind===`agent-result`},get children(){return V(as,{get entry(){return e.entry}})}}),V(W,{get when(){return e.entry.kind===`assistant`},get children(){return V(es,{get entry(){return e.entry},get who(){return e.who}})}}),V(W,{get when(){return e.entry.kind===`tool`},get children(){return V(Qo,{get entry(){return e.entry}})}}),V(W,{get when(){return e.entry.kind===`summary`},get children(){var t=To(),n=t.firstChild.firstChild,r=n.nextSibling;return J(n,()=>e.entry.label===`compaction`?`context compacted`:`branch summary`,null),J(n,V(U,{get when(){return e.entry.tokensBefore},get children(){return[` `,`— `,G(()=>e.entry.tokensBefore.toLocaleString()),` tokens summarized`]}}),null),J(r,()=>e.entry.text),t}}),V(W,{get when(){return e.entry.kind===`custom`},get children(){var t=Eo(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return J(r,()=>e.entry.tag),J(i,()=>e.entry.text),t}})]}})}function as(e){return(()=>{var t=ko(),n=t.firstChild,r=n.firstChild;return r.firstChild,J(r,V(U,{get when(){return e.entry.header},get children(){var t=Oo();return J(t,()=>e.entry.header),t}}),null),J(n,V(Lo,{get text(){return e.entry.text},class:`entry-body markdown-body`}),null),t})()}function os(e){let t=()=>e.who??`dreb`,n=()=>e.userLabel??`you`,r=N(t=>rs(e.entries,t)),[i,a]=k(150),o;M(()=>{let t=e.resetKey??e.entries;t!==o&&(o=t,a(150))});let s=N(()=>{let e=r(),t=i();return e.length>t?e.slice(-t):e}),c=()=>Math.max(0,r().length-s().length);return[V(U,{get when(){return c()>0},get children(){var e=Ao(),t=e.firstChild,n=t.firstChild.nextSibling,o=n.nextSibling.nextSibling;return o.nextSibling,t.$$click=()=>a(Math.min(r().length,i()+150)),J(t,()=>Math.min(150,c()),n),J(t,c,o),e}}),V(H,{get each(){return s()},children:e=>V(Oe,{get children(){return[V(W,{get when(){return e.kind===`assistant-turn`},get children(){var r=jo();return J(r,V(H,{get each(){return e.entries},children:e=>V(is,{entry:e,get who(){return t()},get userLabel(){return n()}})})),r}}),V(W,{get when(){return e.kind===`entry`},get children(){return V(is,{get entry(){return e.entry},get who(){return t()},get userLabel(){return n()}})}})]}})})]}Me([`touchstart`,`touchend`,`click`]);function ss(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`?!0:typeof e==`object`&&!!e&&`name`in e&&e.name===`AbortError`}var cs=new Map,ls=new Map;function us(e){return ls.get(e)}function ds(e,t){ls.set(e,t)}function fs(e){return cs.get(e)??[]}function ps(e,t){let n=cs.get(e)??[];n.push(t),cs.set(e,n.slice(-100))}function ms(e){cs.delete(e),ls.delete(e)}var hs=K(`<p style=margin-bottom:12px>`),gs=K(`<div class=recent-projects>`),_s=K(`<div class=field><input type=text>`),vs=K(`<div class=field><textarea rows=8>`),ys=K(`<button type=button class="btn btn-small">cancel`),bs=K(`<button type=button class="btn btn-small btn-primary">confirm`),xs=K(`<button type=button class="btn btn-small btn-primary">submit`),Ss=K(`<button type=button>`),Cs=K(`<ul>`),ws=K(`<section class=context-section><h3>`),Ts=K(`<p class="muted small">none`),Es=K(`<p class=pair-error>`),Ds=K(`<p class="muted small">loading…`),Os=K(`<p class="muted small">system prompt: custom`),ks=K(`<div class=context-modal-body>`),As=K(`<li>`),js=K(`<span class=muted> — `),Ms=K(`<li><span>`),Ns=K(`<li><span></span><span class=muted> — `),Ps=K(`<div class=model-scope-tabs role=tablist aria-label="model scope"><button type=button role=tab>scoped</button><button type=button role=tab>all`),Fs=K(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Is=K(`<div class="model-list session-model-list"style=max-height:320px>`),Ls=K(`<p class="muted small">No matching models.`),Rs=K(`<section class=model-provider-group><div class=model-provider-heading>`),zs=K(`<span class=model-name>`),Bs=K(`<span class=model-reasoning>think`),Vs=K(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),Hs=K(`<span class=project>`),Us=K(`<output class=switcher><span class=label>ctx</span> `),Ws=K(`<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>⋯`),Gs=K(`<div class=stats-popover>`),Ks=K(`<div class="session-bar-inner session-info-bar"><span class=session-info-left></span><button type=button class="session-info-right stats-trigger">`),qs=K(`<button type=button class="btn btn-small">model: `),Js=K(`<button type=button class="btn btn-small">think: `),Ys=K(`<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">`),Xs=K(`<div class=container style=padding-top:8px><div class=fallback-banner><span>◆ </span><button type=button class="btn btn-small dismiss">dismiss`),Zs=K(`<span class=dock-collapsed-hint>`),Qs=K(`<details class=tasks><summary>tasks — <!> of <!> done</summary><ul>`),$s=K(`<span class=collapsed-hint>subagent panel hidden`),ec=K(`<div class=subagent-strip><button type=button class=subagent-toggle></button><span class=count>⚡ <!> running · <!> done`),tc=K(`<span class=working>● working`),nc=K(`<span class=error>`),rc=K(`<button type=button class="btn btn-small btn-danger">`),ic=K(`<div class=status-line>`),ac=K(`<div class=queued-message-row><button type=button class="btn btn-small">restore to composer`),oc=K(`<div class=attachment-strip>`),sc=K(`<div class=command-popover role=listbox id=command-listbox aria-label="slash commands">`),cc=K(`<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`),lc=K(`<button type=button class=ghost-suggest>suggested: <code></code> <span class=key>tap`),uc=K(`<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 ↵`),dc=K(`<p>Summarize older context to free window space. The transcript keeps a summary card.`),fc=K(`<div class=fork-message-list>`),pc=K(`<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>`),mc=K(`<span>`),hc=K(`<p class="muted small">loading stats…`),gc=K(`<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>$`),_c=K(`<p class=muted>loading transcript…`),vc=K(`<div class=widget-block>`),yc=K(`<li> `),bc=K(`<button type=button class=agent-chip title="view this subagent's session"><span></span><span class=task> — `),xc=K(`<button type=button class="btn btn-small btn-danger inline-stop">stop`),Sc=K(`<span class=queued-chip><span class=queued-kind>`),Cc=K(`<span class=attachment-file><span>📎 </span><span class=muted></span><button type=button aria-label="remove file attachment">×`),wc=K(`<span class=attachment-thumb><img><button type=button aria-label="remove image">×`),Tc=K(`<span class=command-description>`),Ec=K(`<button type=button role=option class=command-option><span class=command-name>/</span><span class=command-source>`),Dc=K(`<button type=button class="btn btn-small btn-primary">compact`),Oc=K(`<p class="muted small">loading forkable messages…`),kc=K(`<button type=button class=fork-message><span class=fork-entry-id></span><span>`),Ac=K(`<button type=button class="btn btn-small btn-primary">rename`),jc=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Mc=10*1024*1024,Nc=`.dreb-dashboard-uploads`;function Pc(e){return e?`${e.provider}/${e.id}`:`—`}function Fc(e){if(!e)return`—`;let t=`${e.provider}/${e.id}`;return e.name?`${t} — ${e.name}`:t}function Ic(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 Lc(e){return e.replace(/^\/home\/[^/]+/,`~`)}function Rc(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function zc(e){let t=e.trim().replace(/[\\/\0]/g,`_`);return t&&t!==`.`&&t!==`..`?t:`upload.bin`}function Bc(e,t){return`${new Date().toISOString().replace(/[:.]/g,`-`)}-${t+1}-${zc(e.name||`upload.bin`)}`}function Vc(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 Hc(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Uc(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 Wc(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 Gc(e){let[t,n]=k(e.request.prefill??``),r=t=>e.onRespond({type:`extension_ui_response`,id:e.request.id,...t});return V(nt,{get title(){return e.request.title},onDismiss:()=>r({cancelled:!0}),get actions(){return V(U,{get when(){return e.request.method!==`select`},get children(){return[(()=>{var e=ys();return e.$$click=()=>r({cancelled:!0}),e})(),V(U,{get when(){return e.request.method===`confirm`},get children(){var e=bs();return e.$$click=()=>r({confirmed:!0}),e}}),V(U,{get when(){return e.request.method===`input`||e.request.method===`editor`},get children(){var e=xs();return e.$$click=()=>r({value:t()}),e}})]}})},get children(){return[V(U,{get when(){return e.request.message},get children(){var t=hs();return J(t,()=>e.request.message),t}}),V(U,{get when(){return e.request.method===`select`},get children(){var t=gs();return J(t,V(H,{get each(){return e.request.options??[]},children:e=>(()=>{var t=Ss();return t.$$click=()=>r({value:e}),J(t,e),t})()})),t}}),V(U,{get when(){return e.request.method===`input`},get children(){var r=_s(),i=r.firstChild;return i.$$input=e=>n(e.currentTarget.value),j(()=>q(i,`placeholder`,e.request.placeholder)),j(()=>i.value=t()),r}}),V(U,{get when(){return e.request.method===`editor`},get children(){var e=vs(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})]}})}function Kc(e){let t=(e,t)=>(()=>{var n=ws(),r=n.firstChild;return J(r,e),J(n,V(U,{get when(){return t.length>0},get fallback(){return Ts()},get children(){var e=Cs();return J(e,t),e}}),null),n})();return V(nt,{title:`loaded context`,get onDismiss(){return e.onClose},get children(){return[V(U,{get when(){return e.error},get children(){var t=Es();return J(t,()=>e.error),t}}),V(U,{get when(){return e.resources},get fallback(){return Ds()},children:e=>(()=>{var n=ks();return J(n,()=>t(`context files`,e().contextFiles.map(e=>(()=>{var t=As();return J(t,()=>Lc(e.path)),j(()=>q(t,`title`,e.path)),t})())),null),J(n,()=>t(`skills`,e().skills.map(e=>(()=>{var t=Ms(),n=t.firstChild;return J(n,()=>e.name),J(t,V(U,{get when(){return e.description},get children(){var t=js();return t.firstChild,J(t,()=>e.description,null),t}}),null),t})())),null),J(n,()=>t(`extensions`,e().extensions.map(e=>(()=>{var t=Ns(),n=t.firstChild,r=n.nextSibling;return r.firstChild,J(n,()=>e.name??`extension`),J(r,()=>Lc(e.path),null),j(()=>q(t,`title`,e.path)),t})())),null),J(n,()=>t(`prompt templates`,e().promptTemplates.map(e=>(()=>{var t=As();return J(t,()=>e.name),t})())),null),J(n,V(U,{get when(){return e().systemPromptPresent},get children(){return Os()}}),null),n})()})]}})}function qc(e){let[t,n]=k([]),[r,i]=k(``),[a,o]=k((e.state?.scopedModels?.length??0)>0?`scoped`:`all`),[s,c]=k();te(async()=>{try{let{models:t}=await X.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 Uc(d().filter(t=>!e||Hc(t,e)).slice(0,100))}),p=t=>e.state?.model?.provider===t.provider&&e.state?.model?.id===t.id;async function m(t){try{await X.setModel(e.sessionKey,t.provider,t.id),e.onSelected(),e.onClose()}catch(e){c(e instanceof Error?e.message:String(e))}}return V(nt,{title:`select model`,get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[V(U,{get when(){return u()},get children(){var e=Ps(),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&&q(t,`aria-selected`,e.e=r),i!==e.t&&t.classList.toggle(`selected`,e.t=i),o!==e.a&&q(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=Fs(),t=e.firstChild;return t.$$input=e=>i(e.currentTarget.value),j(()=>t.value=r()),e})(),V(U,{get when(){return s()},get children(){var e=Es();return J(e,s),e}}),(()=>{var e=Is();return J(e,V(U,{get when(){return f().length>0},get fallback(){return Ls()},get children(){return V(H,{get each(){return f()},children:e=>(()=>{var t=Rs(),n=t.firstChild;return J(n,()=>e.provider),J(t,V(H,{get each(){return e.models},children:e=>(()=>{var t=Vs(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return t.$$click=()=>m(e),J(n,()=>p(e)?`✓`:``),J(r,()=>e.id),J(t,V(U,{get when(){return e.name},get children(){var t=zs();return J(t,()=>e.name),t}}),i),J(i,()=>e.provider),J(t,V(U,{get when(){return e.reasoning},get children(){return Bs()}}),null),j(n=>{var r=!!p(e),i=Fc(e);return r!==n.e&&t.classList.toggle(`current`,n.e=r),i!==n.t&&q(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),t})()})}})),e})()]}})}function Jc(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),[r,i]=k(us(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(),[ee,F]=k(0),[I,ne]=k(),[re,ie]=k(),[ae,oe]=k(),[se,R]=k(),[ce,z]=k([]),[le,B]=k(!1),[ue,de]=k(0),[fe,pe]=k(),[me,he]=k(),[ge,_e]=k({steering:[],followUp:[]}),[ve,ye]=k([]),[be,xe]=k([]),[Se,Ce]=k(),[we,Te]=k(!1),[Ee,De]=k([]),[Oe,W]=k(),[ke,Ae]=k(!1),[je,K]=k(),Me,Pe,Fe,Le,Re,ze=!0,Be=!1,Ve,He=!1,Ue=()=>t()?.streaming??!1,We=()=>t()?.compacting??!1,Ge=()=>(t()?.statusEntries??[]).some(e=>e.key===`paused`),Ke=()=>Object.values(t()?.backgroundAgents??{}).some(e=>e.status===`running`),qe=()=>Ue()||We()||Ge()||Ke(),Je=()=>!Me||Me.scrollTop+Me.clientHeight>=Me.scrollHeight-40,Ye=Ha({element:()=>Me,shouldScroll:()=>ze&&!Be});function Xe(){Ve&&clearTimeout(Ve),Ve=setTimeout(()=>{Be=!1,ze=Je()},250)}function Ze(){Ye.request()}async function Qe(t=!1){let[n,r,i]=await Promise.allSettled([X.stats(e.sessionKey),X.performance(e.sessionKey),X.branch(e.sessionKey)]),a=t?await Promise.allSettled([X.dailyCost()]):void 0;if(He)return;n.status===`fulfilled`&&ne(n.value),r.status===`fulfilled`&&ie(r.value),i.status===`fulfilled`&&oe(i.value.branch),a?.[0]?.status===`fulfilled`&&R(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 $e(){try{let{commands:t}=await X.commands(e.sessionKey);He||z(t)}catch(e){He||P(e instanceof Error?e.message:String(e))}}async function et(){E(!0),he(void 0);try{pe(await X.resources(e.sessionKey))}catch(e){he(e instanceof Error?e.message:String(e))}}async function tt(){try{_e(await X.pending(e.sessionKey))}catch(e){P(e instanceof Error?e.message:String(e))}}function rt(e){let t=atob(e);return Uint8Array.from(t,e=>e.charCodeAt(0))}function it(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 at(e){return it(new Uint8Array(await e.arrayBuffer()))}function ot(e){URL.revokeObjectURL(e.previewUrl)}function Y(){for(let e of ve())ot(e);ye([])}function st(e){ye(t=>{let n=t[e];return n&&ot(n),t.filter((t,n)=>n!==e)})}function ct(e){if(ve().reduce((e,t)=>e+t.size,0)+e>pn)throw Error(`Images too large: total inline images exceed ${Vc(pn)}`)}function lt(e,t,n){return{blob:e,mimeType:t,fileName:n,size:e.size,previewUrl:URL.createObjectURL(e)}}function ut(e,t,n){let r=rt(e.data);return lt(new Blob([r],{type:e.mimeType}),e.mimeType,`queued-image-${t+1}-${n+1}`)}function dt(e){return[...e.steeringMessages??e.steering.map(e=>({text:e})),...e.followUpMessages??e.followUp.map(e=>({text:e}))]}function ft(e){let t=[];for(let[n,r]of e.entries())for(let[e,i]of(r.images??[]).entries())t.push(ut(i,n,e));return t}function pt(e){for(let t of e)ot(t)}function mt(e){let t=e.map(e=>e.text).join(`
62
+ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Oa(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function $(e,t){return Va.parse(e,t)}$.options=$.setOptions=function(e){return Va.setOptions(e),$.defaults=Va.defaults,Si($.defaults),$},$.getDefaults=bi,$.defaults=xi,$.use=function(...e){return Va.use(...e),$.defaults=Va.defaults,Si($.defaults),$},$.walkTokens=function(e,t){return Va.walkTokens(e,t)},$.parseInline=Va.parseInline,$.Parser=za,$.parser=za.parse,$.Renderer=La,$.TextRenderer=Ra,$.Lexer=Ia,$.lexer=Ia.lex,$.Tokenizer=Fa,$.Hooks=Ba,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,za.parse,Ia.lex;function Ha(e){let t=e.requestAnimationFrame??requestAnimationFrame,n=e.cancelAnimationFrame??cancelAnimationFrame,r,i;function a(){r!==void 0&&n(r),i!==void 0&&n(i),r=void 0,i=void 0}function o(){r!==void 0||i!==void 0||(r=t(()=>{r=void 0,i=t(()=>{i=void 0;let t=e.element();t&&e.shouldScroll()&&(t.scrollTop=t.scrollHeight)})}))}return{request:o,cancel:a}}function Ua(e,t,n){let r=e instanceof Node?e:null;for(;r&&r!==t;){if(r instanceof HTMLElement&&r.scrollHeight>r.clientHeight+1){let e=n===`up`?r.scrollTop>0:r.scrollTop+r.clientHeight<r.scrollHeight-1,t=typeof getComputedStyle==`function`?getComputedStyle(r).overflowY:``;if(e&&(t===`auto`||t===`scroll`))return!0}r=r.parentNode}return!1}function Wa(e){let t=e.threshold??40,n=e.now??(()=>Date.now()),r=e.intentWindowMs??400,i=e.ResizeObserverImpl??globalThis.ResizeObserver,a=!0,o=!1,s,c=!1,l=!1,u=!1,d=-1/0,f=-1/0,p=0,m=0,h,g,_=!1,v=Ha({element:e.scroller,shouldScroll:()=>{if(!(a&&!o))return!1;let t=e.scroller();return t&&(p=Math.max(0,t.scrollHeight-t.clientHeight),m=p),!0},requestAnimationFrame:e.requestAnimationFrame,cancelAnimationFrame:e.cancelAnimationFrame});function y(){if(S(),n()-d>r){let t=e.scroller()?.scrollTop??p;m=Math.max(p,t)}d=n()}function b(){x(),m=p,f=n()}function x(){d=-1/0}function S(){f=-1/0}function C(e){x(),m=e}function w(){return o&&c||u||n()-d<=r}function T(){return o&&l||u||n()-f<=r}function E(){a&&!o&&v.request()}function D(){let n=e.scroller();if(!n)return;let r=n.scrollTop,i=r>p;r+n.clientHeight>=n.scrollHeight-t&&(a||i&&T())?(a=!0,(!w()||i)&&C(r)):a&&r<m-1&&w()?a=!1:i?C(r):w()||(m=r),p=r}function O(){x(),S(),m=p}let k=new Set([`ArrowUp`,`PageUp`,`Home`]);function A(t,n){let r=e.scroller();if(t<0){if(r&&n&&Ua(n,r,`up`))return;y()}else if(t>0){if(r&&n&&Ua(n,r,`down`))return;b()}}function j(t,n=!1,r){let i=e.scroller();if(k.has(t)||n&&t===` `){if(i&&r&&Ua(r,i,`up`))return;y()}else if(t===`ArrowDown`||t===`PageDown`||t===`End`||!n&&t===` `){if(i&&r&&Ua(r,i,`down`))return;b()}}function M(e){e&&(u=!0)}function N(){u=!1}function P(e){o=!0,s=Number.isFinite(e)?e:void 0,c=!1,l=!1}function ee(t,n){if(!(!o||!Number.isFinite(t))){if(s!==void 0){let r=e.scroller();t>s+1?r&&n&&Ua(n,r,`up`)?(c=!1,l=!1,x(),S()):(c=!0,l=!1,y()):t<s-1&&(r&&n&&Ua(n,r,`down`)?(c=!1,l=!1,x(),S()):(c=!1,l=!0,b()))}s=t}}function F(){o=!1,s=void 0,c?y():l&&b(),c=!1,l=!1,a&&v.request()}function I(){F()}function te(){F()}function L(e){if(!i){_||(_=!0,console.warn(`[dashboard] ResizeObserver unavailable — stick-to-bottom async re-pin disabled; the transcript may lag behind live output until the next envelope arrives.`));return}let t=new i(()=>E());return t.observe(e),t}function ne(e){e&&(h?.disconnect(),h=L(e))}function re(e){e&&(g?.disconnect(),g=L(e))}function ie(){h?.disconnect(),g?.disconnect(),h=void 0,g=void 0,v.cancel()}return{notifyContentChanged:E,handleScroll:D,handleScrollEnd:O,handleWheel:A,handleKeyDown:j,handlePointerDown:M,handlePointerUp:N,handleTouchStart:P,handleTouchMove:ee,handleTouchEnd:I,handleTouchCancel:te,observeContent:ne,observeViewport:re,isFollowing:()=>a,dispose:ie}}function Ga(e){return e instanceof Element&&e.closest(`input, textarea, select, [contenteditable]`)!==null}function Ka(e,t,n){let r=n.enabled??(()=>!0),i=[];function a(e,t,n){let a=(e=>{r()&&n(e)});e.addEventListener(t,a,{passive:!0}),i.push(()=>e.removeEventListener(t,a))}return a(t,`scroll`,()=>e.handleScroll()),a(t,`scrollend`,()=>e.handleScrollEnd()),a(t,`wheel`,t=>e.handleWheel(t.deltaY,t.target)),a(t,`touchstart`,t=>e.handleTouchStart(t.touches?.[0]?.clientY)),a(t,`touchmove`,t=>{let n=t.touches?.[0]?.clientY;n!==void 0&&e.handleTouchMove(n,t.target)}),a(t,`touchend`,()=>e.handleTouchEnd()),a(t,`touchcancel`,()=>e.handleTouchCancel()),a(t,`pointerdown`,n=>{e.handlePointerDown(n.pointerType===`mouse`&&n.offsetX>=t.clientWidth)}),a(window,`pointerup`,()=>e.handlePointerUp()),a(window,`pointercancel`,()=>e.handlePointerUp()),n.keyboard===`window`?a(window,`keydown`,t=>{Ga(t.target)||e.handleKeyDown(t.key,t.shiftKey,t.target)}):a(t,`keydown`,t=>{Ga(t.target)||e.handleKeyDown(t.key,t.shiftKey,t.target)}),()=>{for(let e of i)e()}}var qa=`dreb.dashboard.expandThinking`,Ja=`dreb.dashboard.toolAutoExpand`,Ya=[`read`,`edit`,`write`,`suggest_next`,`bash`],Xa=!0,Za=new Set(Ya),Qa=Object.fromEntries(Ya.map(e=>[e,!0]));function $a(e,t){if(typeof window>`u`)return t;try{let n=window.localStorage.getItem(e);return n===null?t:n===`true`}catch{return t}}function eo(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(e,t?`true`:`false`)}catch{}}function to(){if(typeof window>`u`)return{...Qa};try{let e=window.localStorage.getItem(Ja);if(e===null)return{...Qa};let t=JSON.parse(e),n={...Qa};for(let e of Ya)typeof t[e]==`boolean`&&(n[e]=t[e]);return n}catch{return{...Qa}}}function no(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Ja,JSON.stringify(e))}catch{}}var[ro,io]=k($a(qa,Xa)),[ao,oo]=k(to()),so=ro;function co(e){io(e),eo(qa,e)}function lo(e,t){let n={...ao(),[e]:t};oo(n),no(n)}function uo(e){return ao()[e]??Za.has(e)}var fo=K(`<div>`),po=K(`<pre tabindex=0>`),mo=K(`<code class=hljs>`),ho=K(`<pre>`),go=K(`<span>`),_o=K(`<div class=tool-output-truncated>output truncated — showing last <!> of <!>. <button type=button class=entry-action>show full (<!>)`),vo=K(`<div class=tool-command><code>`),yo=K(`<details class=tool><summary><span class=tool-name></span><span class=tool-arg></span><span>`),bo=K(`<div class=tool-input><span class=tool-input-label>`),xo=K(`<div class=tool-result><p class=suggested-command>→ <code>`),So=K(`<div class=tool-result>`),Co=K(`<button type=button class=entry-action>`),wo=K(`<span>·`),To=K(`<span>streaming`),Eo=K(`<div class="entry assistant"><div class=entry-head><span>`),Do=K(`<details class=thinking><summary>thinking`),Oo=K(`<div class=entry-body>`),ko=K(`<div class="entry user"><div class=entry-head><span></span></div><div class=entry-body>`),Ao=K(`<div class="entry summary-card"><details><summary></summary><div class=entry-body style=margin-top:8px>`),jo=K(`<div class="entry custom-card"><div class=entry-head><span></span></div><div class=entry-body>`),Mo=K(`<span class=skill-badge>skill: `),No=K(`<span class=agent-result-header>`),Po=K(`<div class="entry agent-result-card"><details><summary><span>background agent result`),Fo=K(`<div class=transcript-window-control><button type=button class="btn btn-small">show earlier <!> (<!> hidden)`),Io=K(`<div class=assistant-turn data-testid=assistant-turn>`),Lo=150,Ro=200*1024;function zo(e){let t=$.parse(e,{async:!1});return Fr.sanitize(t)}function Bo(e,t,n=Lo){let[r,i]=k(e()),a,o=e(),s=()=>{a&&clearTimeout(a),a=void 0};return M(()=>{let r=e(),c=t();if(o=r,!c){s(),i(r);return}a||=setTimeout(()=>{a=void 0,i(o)},n)}),L(s),r}function Vo(e){let t=e/1024;return t<1024?`${Math.round(t)} KB`:`${(t/1024).toFixed(1)} MB`}function Ho(e){let t=Bo(()=>e.text,()=>e.throttle===!0),n=N(()=>zo(t()));return(()=>{var t=fo();return j(r=>{var i=e.class??`markdown-body`,a=e.classList,o=n();return i!==r.e&&Ne(t,r.e=i),r.t=Fe(t,a,r.t),o!==r.a&&(t.innerHTML=r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()}function Uo(e){if(typeof e!=`string`||!e)return;let t=e.split(/[\\/]/).pop()?.toLowerCase()??``,n=t.includes(`.`)?t.split(`.`).pop():t;return n?{ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,py:`python`,rb:`ruby`,rs:`rust`,go:`go`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,hpp:`cpp`,cs:`csharp`,php:`php`,sh:`bash`,bash:`bash`,zsh:`bash`,sql:`sql`,html:`html`,css:`css`,scss:`scss`,json:`json`,yaml:`yaml`,yml:`yaml`,xml:`xml`,md:`markdown`,dockerfile:`dockerfile`}[n]:void 0}function Wo(e){return e?.path??e?.file_path}function Go(e,t){if(!(!t||!yi.getLanguage(t)))return Fr.sanitize(yi.highlight(e,{language:t,ignoreIllegals:!0}).value)}function Ko(e){let t,n=Bo(()=>e.text,()=>e.throttle===!0),r=N(()=>Go(n(),e.language)),i=Wa({scroller:()=>t,threshold:24});return M(()=>{n(),e.language,e.autoScroll&&i.notifyContentChanged()}),te(()=>{t&&L(Ka(i,t,{enabled:()=>e.autoScroll===!0,keyboard:`element`}))}),L(()=>i.dispose()),(()=>{var e=po(),i=t;return typeof i==`function`?Ie(i,e):t=e,J(e,V(U,{get when(){return r()},get fallback(){return n()},children:e=>(()=>{var t=mo();return j(()=>t.innerHTML=e()),t})()})),e})()}function qo(e){let t=e.args;if(!t||typeof t!=`object`)return``;switch(e.toolName){case`read`:{let n=Jo(e);return`${String(t.path??``)}${n?` · ${n} lines`:``}`}case`write`:return String(t.path??``);case`edit`:return String(t.path??``);case`bash`:case`bash (user)`:return String(t.command??``);case`grep`:case`search`:return String(t.pattern??t.query??``);case`find`:return String(t.pattern??``);case`ls`:return String(t.path??`.`);case`web_fetch`:return String(t.url??``);case`web_search`:return String(t.query??``);case`subagent`:return typeof t.task==`string`?t.task.slice(0,120):Array.isArray(t.tasks)?`${t.tasks.length} parallel tasks`:Array.isArray(t.chain)?`${t.chain.length}-step chain`:``;case`skill`:return String(t.skill??``);default:{let e=Object.values(t)[0];return typeof e==`string`?e.slice(0,120):``}}}function Jo(e){if(!(e.toolName!==`read`||!e.resultText))return e.resultText.split(`
63
+ `).length}function Yo(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
+ `)}function Xo(e){return e.match(/^\/skill:([\w-]+)/)?.[1]}function Zo(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 Qo=new Set([`subagent`,`skill`,`web_fetch`]);function $o(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:Uo(Wo(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 es(e){return(()=>{var t=ho();return J(t,V(H,{get each(){return e.text.split(`
65
+ `)},children:e=>[(()=>{var t=go();return J(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 ts(e){if(e.toolName!==`edit`)return;let t=e.details?.diff;return typeof t==`string`?t:void 0}function ns(e){let[t,n]=k(!1),r=()=>e.text.length>Ro;M(()=>{r()||n(!1)});let i=()=>r()&&!t()?e.text.slice(-204800):e.text;return[V(U,{get when(){return G(()=>!!r())()&&!t()},get children(){var t=_o(),r=t.firstChild.nextSibling,i=r.nextSibling.nextSibling,a=i.nextSibling.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,J(t,()=>Vo(Ro),r),J(t,()=>Vo(e.text.length),i),a.$$click=()=>n(!0),J(a,()=>Vo(e.text.length),o),t}}),V(U,{get when(){return e.markdown},get fallback(){return V(Ko,{get text(){return i()},get language(){return e.language},get autoScroll(){return e.autoScroll},get throttle(){return e.throttle}})},get children(){return V(Ho,{get text(){return i()},get throttle(){return e.throttle}})}})]}function rs(e){let t=()=>Zo(e.entry),n=()=>e.entry.args,r=()=>{if(e.entry.toolName===`suggest_next`)return e.entry.details},i=()=>ts(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 Uo(Wo(n()))},s=()=>Qo.has(e.entry.toolName)&&e.entry.status!==`error`,c=()=>e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`,l=()=>$o(e.entry),u=()=>uo(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}),L(()=>{g&&clearTimeout(g)}),(()=>{var u=yo(),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)}),J(p,()=>e.entry.toolName),J(_,()=>qo(e.entry)),J(v,()=>t().text),J(u,V(U,{get when(){return d()},get children(){return[V(U,{get when(){return e.entry.toolName===`bash`||e.entry.toolName===`bash (user)`},get children(){var e=vo(),t=e.firstChild;return J(t,()=>String(n()?.command??``)),e}}),V(H,{get each(){return l()},children:e=>(()=>{var t=bo(),n=t.firstChild;return J(n,()=>e.label),J(t,V(U,{get when(){return e.markdown},get fallback(){return V(Ko,{get text(){return e.text},get language(){return e.language}})},get children(){return V(Ho,{get text(){return e.text}})}}),null),t})()}),V(Oe,{get children(){return[V(W,{get when(){return r()},children:e=>(()=>{var t=xo(),n=t.firstChild,r=n.firstChild.nextSibling;return J(t,V(U,{get when(){return e().summary},get children(){return V(Ho,{get text(){return e().summary}})}}),n),J(r,()=>e().suggestion),t})()}),V(W,{get when(){return i()},children:e=>(()=>{var t=So();return J(t,V(es,{get text(){return e()}})),t})()}),V(W,{get when(){return a()},children:t=>(()=>{var n=So();return J(n,V(ns,{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&&Ne(v,e.t=r),e},{e:void 0,t:void 0}),u})()}function is(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=Co();return n.$$click=r,J(n,(()=>{var e=G(()=>t()===`copied`);return()=>e()?`copied`:t()===`failed`?`copy failed`:`copy`})()),j(()=>n.disabled=!e.text),n})()}function as(e){return(()=>{var t=Eo(),n=t.firstChild,r=n.firstChild;return J(r,()=>e.who),J(n,V(U,{get when(){return e.entry.model},get children(){return[wo(),(()=>{var t=go();return J(t,()=>e.entry.model),t})()]}}),null),J(n,V(U,{get when(){return e.entry.streaming},get children(){return[wo(),To()]}}),null),J(n,V(is,{get text(){return Yo(e.entry)}}),null),J(t,V(H,{get each(){return e.entry.blocks},children:(t,n)=>V(U,{get when(){return t.kind===`thinking`},get fallback(){return(()=>{var r=Oo();return J(r,V(Ho,{get text(){return t.text},get classList(){return{"streaming-cursor":e.entry.streaming&&n()===e.entry.blocks.length-1}},get throttle(){return e.entry.streaming}})),r})()},get children(){var n=Do();return n.firstChild,J(n,V(Ho,{get text(){return t.text},class:`thinking-body markdown-body`,get throttle(){return e.entry.streaming}}),null),j(()=>n.open=so()),n}})}),null),t})()}function os(e,t){return e?.kind===`entry`&&e.entry===t}function ss(e){let[t,n]=k(e);return{kind:`assistant-turn`,lead:e[0],entries:t,setEntries:n}}function cs(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=I(o.entries);(e.length!==a.length||a.some((t,n)=>t!==e[n]))&&o.setEntries(a),n.push(o)}else n.push(ss(a));continue}if(i){let e=t[n.length];n.push(os(e,i)?e:{kind:`entry`,entry:i})}r+=1}return n}function ls(e){return V(Oe,{get children(){return[V(W,{get when(){return e.entry.kind===`user`},get children(){var t=ko(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return J(n,V(U,{get when(){return Xo(e.entry.text)},children:e=>(()=>{var t=Mo();return t.firstChild,J(t,e,null),t})()}),r),J(n,V(is,{get text(){return Yo(e.entry)}}),r),J(r,()=>e.userLabel),J(i,()=>e.entry.text),t}}),V(W,{get when(){return e.entry.kind===`agent-result`},get children(){return V(us,{get entry(){return e.entry}})}}),V(W,{get when(){return e.entry.kind===`assistant`},get children(){return V(as,{get entry(){return e.entry},get who(){return e.who}})}}),V(W,{get when(){return e.entry.kind===`tool`},get children(){return V(rs,{get entry(){return e.entry}})}}),V(W,{get when(){return e.entry.kind===`summary`},get children(){var t=Ao(),n=t.firstChild.firstChild,r=n.nextSibling;return J(n,()=>e.entry.label===`compaction`?`context compacted`:`branch summary`,null),J(n,V(U,{get when(){return e.entry.tokensBefore},get children(){return[` `,`— `,G(()=>e.entry.tokensBefore.toLocaleString()),` tokens summarized`]}}),null),J(r,()=>e.entry.text),t}}),V(W,{get when(){return e.entry.kind===`custom`},get children(){var t=jo(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return J(r,()=>e.entry.tag),J(i,()=>e.entry.text),t}})]}})}function us(e){return(()=>{var t=Po(),n=t.firstChild,r=n.firstChild;return r.firstChild,J(r,V(U,{get when(){return e.entry.header},get children(){var t=No();return J(t,()=>e.entry.header),t}}),null),J(n,V(Ho,{get text(){return e.entry.text},class:`entry-body markdown-body`}),null),t})()}function ds(e){let t=()=>e.who??`dreb`,n=()=>e.userLabel??`you`,r=N(t=>cs(e.entries,t)),[i,a]=k(150),o;M(()=>{let t=e.resetKey??e.entries;t!==o&&(o=t,a(150))});let s=N(()=>{let e=r(),t=i();return e.length>t?e.slice(-t):e}),c=()=>Math.max(0,r().length-s().length);return[V(U,{get when(){return c()>0},get children(){var e=Fo(),t=e.firstChild,n=t.firstChild.nextSibling,o=n.nextSibling.nextSibling;return o.nextSibling,t.$$click=()=>a(Math.min(r().length,i()+150)),J(t,()=>Math.min(150,c()),n),J(t,c,o),e}}),V(H,{get each(){return s()},children:e=>V(Oe,{get children(){return[V(W,{get when(){return e.kind===`assistant-turn`},get children(){var r=Io();return J(r,V(H,{get each(){return e.entries()},children:e=>V(ls,{entry:e,get who(){return t()},get userLabel(){return n()}})})),r}}),V(W,{get when(){return e.kind===`entry`},get children(){return V(ls,{get entry(){return e.entry},get who(){return t()},get userLabel(){return n()}})}})]}})})]}Me([`click`]);function fs(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`?!0:typeof e==`object`&&!!e&&`name`in e&&e.name===`AbortError`}var ps=new Map,ms=new Map;function hs(e){return ms.get(e)}function gs(e,t){ms.set(e,t)}function _s(e){return ps.get(e)??[]}function vs(e,t){let n=ps.get(e)??[];n.push(t),ps.set(e,n.slice(-100))}function ys(e){ps.delete(e),ms.delete(e)}var bs=K(`<p style=margin-bottom:12px>`),xs=K(`<div class=recent-projects>`),Ss=K(`<div class=field><input type=text>`),Cs=K(`<div class=field><textarea rows=8>`),ws=K(`<button type=button class="btn btn-small">cancel`),Ts=K(`<button type=button class="btn btn-small btn-primary">confirm`),Es=K(`<button type=button class="btn btn-small btn-primary">submit`),Ds=K(`<button type=button>`),Os=K(`<ul>`),ks=K(`<section class=context-section><h3>`),As=K(`<p class="muted small">none`),js=K(`<p class=pair-error>`),Ms=K(`<p class="muted small">loading…`),Ns=K(`<p class="muted small">system prompt: custom`),Ps=K(`<div class=context-modal-body>`),Fs=K(`<li>`),Is=K(`<span class=muted> — `),Ls=K(`<li><span>`),Rs=K(`<li><span></span><span class=muted> — `),zs=K(`<div class=model-scope-tabs role=tablist aria-label="model scope"><button type=button role=tab>scoped</button><button type=button role=tab>all`),Bs=K(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Vs=K(`<div class="model-list session-model-list"style=max-height:320px>`),Hs=K(`<p class="muted small">No matching models.`),Us=K(`<section class=model-provider-group><div class=model-provider-heading>`),Ws=K(`<span class=model-name>`),Gs=K(`<span class=model-reasoning>think`),Ks=K(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),qs=K(`<span class=project>`),Js=K(`<output class=switcher><span class=label>ctx</span> `),Ys=K(`<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>⋯`),Xs=K(`<div class=stats-popover>`),Zs=K(`<div class="session-bar-inner session-info-bar"><span class=session-info-left></span><button type=button class="session-info-right stats-trigger">`),Qs=K(`<button type=button class="btn btn-small">model: `),$s=K(`<button type=button class="btn btn-small">think: `),ec=K(`<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">`),tc=K(`<div class=container style=padding-top:8px><div class=fallback-banner><span>◆ </span><button type=button class="btn btn-small dismiss">dismiss`),nc=K(`<span class=dock-collapsed-hint>`),rc=K(`<details class=tasks><summary>tasks — <!> of <!> done</summary><ul>`),ic=K(`<span class=collapsed-hint>subagent panel hidden`),ac=K(`<div class=subagent-strip><button type=button class=subagent-toggle></button><span class=count>⚡ <!> running · <!> done`),oc=K(`<span class=working>● working`),sc=K(`<span class=error>`),cc=K(`<button type=button class="btn btn-small btn-danger">`),lc=K(`<div class=status-line>`),uc=K(`<div class=queued-message-row><button type=button class="btn btn-small">restore to composer`),dc=K(`<div class=attachment-strip>`),fc=K(`<div class=command-popover role=listbox id=command-listbox aria-label="slash commands">`),pc=K(`<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`),mc=K(`<button type=button class=ghost-suggest>suggested: <code></code> <span class=key>tap`),hc=K(`<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 ↵`),gc=K(`<p>Summarize older context to free window space. The transcript keeps a summary card.`),_c=K(`<div class=fork-message-list>`),vc=K(`<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>`),yc=K(`<span>`),bc=K(`<p class="muted small">loading stats…`),xc=K(`<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>$`),Sc=K(`<p class=muted>loading transcript…`),Cc=K(`<div class=widget-block>`),wc=K(`<li> `),Tc=K(`<button type=button class=agent-chip title="view this subagent's session"><span></span><span class=task> — `),Ec=K(`<button type=button class="btn btn-small btn-danger inline-stop">stop`),Dc=K(`<span class=queued-chip><span class=queued-kind>`),Oc=K(`<span class=attachment-file><span>📎 </span><span class=muted></span><button type=button aria-label="remove file attachment">×`),kc=K(`<span class=attachment-thumb><img><button type=button aria-label="remove image">×`),Ac=K(`<span class=command-description>`),jc=K(`<button type=button role=option class=command-option><span class=command-name>/</span><span class=command-source>`),Mc=K(`<button type=button class="btn btn-small btn-primary">compact`),Nc=K(`<p class="muted small">loading forkable messages…`),Pc=K(`<button type=button class=fork-message><span class=fork-entry-id></span><span>`),Fc=K(`<button type=button class="btn btn-small btn-primary">rename`),Ic=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Lc=10*1024*1024,Rc=`.dreb-dashboard-uploads`;function zc(e){return e?`${e.provider}/${e.id}`:`—`}function Bc(e){if(!e)return`—`;let t=`${e.provider}/${e.id}`;return e.name?`${t} — ${e.name}`:t}function Vc(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 Hc(e){return e.replace(/^\/home\/[^/]+/,`~`)}function Uc(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function Wc(e){let t=e.trim().replace(/[\\/\0]/g,`_`);return t&&t!==`.`&&t!==`..`?t:`upload.bin`}function Gc(e,t){return`${new Date().toISOString().replace(/[:.]/g,`-`)}-${t+1}-${Wc(e.name||`upload.bin`)}`}function Kc(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 qc(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Jc(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 Yc(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 Xc(e){let[t,n]=k(e.request.prefill??``),r=t=>e.onRespond({type:`extension_ui_response`,id:e.request.id,...t});return V(nt,{get title(){return e.request.title},onDismiss:()=>r({cancelled:!0}),get actions(){return V(U,{get when(){return e.request.method!==`select`},get children(){return[(()=>{var e=ws();return e.$$click=()=>r({cancelled:!0}),e})(),V(U,{get when(){return e.request.method===`confirm`},get children(){var e=Ts();return e.$$click=()=>r({confirmed:!0}),e}}),V(U,{get when(){return e.request.method===`input`||e.request.method===`editor`},get children(){var e=Es();return e.$$click=()=>r({value:t()}),e}})]}})},get children(){return[V(U,{get when(){return e.request.message},get children(){var t=bs();return J(t,()=>e.request.message),t}}),V(U,{get when(){return e.request.method===`select`},get children(){var t=xs();return J(t,V(H,{get each(){return e.request.options??[]},children:e=>(()=>{var t=Ds();return t.$$click=()=>r({value:e}),J(t,e),t})()})),t}}),V(U,{get when(){return e.request.method===`input`},get children(){var r=Ss(),i=r.firstChild;return i.$$input=e=>n(e.currentTarget.value),j(()=>q(i,`placeholder`,e.request.placeholder)),j(()=>i.value=t()),r}}),V(U,{get when(){return e.request.method===`editor`},get children(){var e=Cs(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})]}})}function Zc(e){let t=(e,t)=>(()=>{var n=ks(),r=n.firstChild;return J(r,e),J(n,V(U,{get when(){return t.length>0},get fallback(){return As()},get children(){var e=Os();return J(e,t),e}}),null),n})();return V(nt,{title:`loaded context`,get onDismiss(){return e.onClose},get children(){return[V(U,{get when(){return e.error},get children(){var t=js();return J(t,()=>e.error),t}}),V(U,{get when(){return e.resources},get fallback(){return Ms()},children:e=>(()=>{var n=Ps();return J(n,()=>t(`context files`,e().contextFiles.map(e=>(()=>{var t=Fs();return J(t,()=>Hc(e.path)),j(()=>q(t,`title`,e.path)),t})())),null),J(n,()=>t(`skills`,e().skills.map(e=>(()=>{var t=Ls(),n=t.firstChild;return J(n,()=>e.name),J(t,V(U,{get when(){return e.description},get children(){var t=Is();return t.firstChild,J(t,()=>e.description,null),t}}),null),t})())),null),J(n,()=>t(`extensions`,e().extensions.map(e=>(()=>{var t=Rs(),n=t.firstChild,r=n.nextSibling;return r.firstChild,J(n,()=>e.name??`extension`),J(r,()=>Hc(e.path),null),j(()=>q(t,`title`,e.path)),t})())),null),J(n,()=>t(`prompt templates`,e().promptTemplates.map(e=>(()=>{var t=Fs();return J(t,()=>e.name),t})())),null),J(n,V(U,{get when(){return e().systemPromptPresent},get children(){return Ns()}}),null),n})()})]}})}function Qc(e){let[t,n]=k([]),[r,i]=k(``),[a,o]=k((e.state?.scopedModels?.length??0)>0?`scoped`:`all`),[s,c]=k();te(async()=>{try{let{models:t}=await X.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 Jc(d().filter(t=>!e||qc(t,e)).slice(0,100))}),p=t=>e.state?.model?.provider===t.provider&&e.state?.model?.id===t.id;async function m(t){try{await X.setModel(e.sessionKey,t.provider,t.id),e.onSelected(),e.onClose()}catch(e){c(e instanceof Error?e.message:String(e))}}return V(nt,{title:`select model`,get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[V(U,{get when(){return u()},get children(){var e=zs(),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&&q(t,`aria-selected`,e.e=r),i!==e.t&&t.classList.toggle(`selected`,e.t=i),o!==e.a&&q(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=Bs(),t=e.firstChild;return t.$$input=e=>i(e.currentTarget.value),j(()=>t.value=r()),e})(),V(U,{get when(){return s()},get children(){var e=js();return J(e,s),e}}),(()=>{var e=Vs();return J(e,V(U,{get when(){return f().length>0},get fallback(){return Hs()},get children(){return V(H,{get each(){return f()},children:e=>(()=>{var t=Us(),n=t.firstChild;return J(n,()=>e.provider),J(t,V(H,{get each(){return e.models},children:e=>(()=>{var t=Ks(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return t.$$click=()=>m(e),J(n,()=>p(e)?`✓`:``),J(r,()=>e.id),J(t,V(U,{get when(){return e.name},get children(){var t=Ws();return J(t,()=>e.name),t}}),i),J(i,()=>e.provider),J(t,V(U,{get when(){return e.reasoning},get children(){return Gs()}}),null),j(n=>{var r=!!p(e),i=Bc(e);return r!==n.e&&t.classList.toggle(`current`,n.e=r),i!==n.t&&q(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),t})()})}})),e})()]}})}function $c(e){let t=()=>e.store.sessions[e.sessionKey],n=N(()=>e.store.fleet().runtimes.find(t=>t.key===e.sessionKey)),[r,i]=k(hs(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(),[ee,F]=k(0),[I,ne]=k(),[re,ie]=k(),[ae,oe]=k(),[se,R]=k(),[ce,z]=k([]),[le,B]=k(!1),[ue,de]=k(0),[fe,pe]=k(),[me,he]=k(),[ge,_e]=k({steering:[],followUp:[]}),[ve,ye]=k([]),[be,xe]=k([]),[Se,Ce]=k(),[we,Te]=k(!1),[Ee,De]=k([]),[Oe,W]=k(),[ke,Ae]=k(!1),[je,K]=k(),Me,Pe,Fe,Le,Re,ze,Be=!1,Ve=()=>t()?.streaming??!1,He=()=>t()?.compacting??!1,Ue=()=>(t()?.statusEntries??[]).some(e=>e.key===`paused`),We=()=>Object.values(t()?.backgroundAgents??{}).some(e=>e.status===`running`),Ge=()=>Ve()||He()||Ue()||We(),Ke=Wa({scroller:()=>Me});async function qe(t=!1){let[n,r,i]=await Promise.allSettled([X.stats(e.sessionKey),X.performance(e.sessionKey),X.branch(e.sessionKey)]),a=t?await Promise.allSettled([X.dailyCost()]):void 0;if(Be)return;n.status===`fulfilled`&&ne(n.value),r.status===`fulfilled`&&ie(r.value),i.status===`fulfilled`&&oe(i.value.branch),a?.[0]?.status===`fulfilled`&&R(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 Je(){try{let{commands:t}=await X.commands(e.sessionKey);Be||z(t)}catch(e){Be||P(e instanceof Error?e.message:String(e))}}async function Ye(){E(!0),he(void 0);try{pe(await X.resources(e.sessionKey))}catch(e){he(e instanceof Error?e.message:String(e))}}async function Xe(){try{_e(await X.pending(e.sessionKey))}catch(e){P(e instanceof Error?e.message:String(e))}}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 tt(){for(let e of ve())et(e);ye([])}function rt(e){ye(t=>{let n=t[e];return n&&et(n),t.filter((t,n)=>n!==e)})}function it(e){if(ve().reduce((e,t)=>e+t.size,0)+e>pn)throw Error(`Images too large: total inline images exceed ${Kc(pn)}`)}function at(e,t,n){return{blob:e,mimeType:t,fileName:n,size:e.size,previewUrl:URL.createObjectURL(e)}}function ot(e,t,n){let r=Ze(e.data);return at(new Blob([r],{type:e.mimeType}),e.mimeType,`queued-image-${t+1}-${n+1}`)}function Y(e){return[...e.steeringMessages??e.steering.map(e=>({text:e})),...e.followUpMessages??e.followUp.map(e=>({text:e}))]}function st(e){let t=[];for(let[n,r]of e.entries())for(let[e,i]of(r.images??[]).entries())t.push(ot(i,n,e));return t}function ct(e){for(let t of e)et(t)}function lt(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 ht(){let t=[];try{let n=await X.pending(e.sessionKey);t.push(...ft(dt(n))),ct(t.reduce((e,t)=>e+t.size,0))}catch(e){pt(t),P(e instanceof Error?e.message:String(e));return}pt(t);let n=[],r=!1;try{let t=dt(await X.dequeue(e.sessionKey));_e({steering:[],followUp:[],steeringMessages:[],followUpMessages:[]}),mt(t);try{n.push(...ft(t)),ct(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&&(ye(e=>[...n,...e]),r=!0),await e.store.refreshFleet(),queueMicrotask(()=>Pe?.focus())}catch(e){r||pt(n),P(e instanceof Error?e.message:String(e))}}function gt(e){if(!e.type.startsWith(`image/`))throw Error(`Not an image: ${e.name||e.type}`);if(e.size>Mc)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`);return lt(e,e.type,e.name||`image`)}async function _t(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>Mc)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`)}ct(t.reduce((e,t)=>e+t.size,0));for(let e of t)n.push(gt(e));ye(e=>[...e,...n])}catch(e){for(let e of n)ot(e);P(e instanceof Error?e.message:String(e))}}async function vt(e){let t=Rc(e,Nc);try{return await X.listFiles(t),t}catch{return await X.mkdir(e,Nc),t}}async function yt(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 vt(r),n=[];for(let[r,i]of t.entries()){let t=Bc(i,r),a=await X.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})}xe(e=>[...e,...n])}catch(e){P(e instanceof Error?e.message:String(e))}}async function bt(){Te(!0),W(void 0),De([]);try{let{messages:t}=await X.forkMessages(e.sessionKey);De(t)}catch(e){W(e instanceof Error?e.message:String(e))}}async function xt(t){W(void 0);try{let n=await X.fork(e.sessionKey,t);n.cancelled||i(n.text),await e.store.hydrateSession(e.sessionKey),await e.store.refreshFleet(),Te(!1)}catch(e){W(e instanceof Error?e.message:String(e))}}async function St(){Ae(!0),K(void 0);try{ne(await X.stats(e.sessionKey))}catch(e){K(e instanceof Error?e.message:String(e))}}te(()=>{let t=new AbortController;e.store.hydrateSession(e.sessionKey,t.signal).catch(e=>{t.signal.aborted&&ss(e)||P(e instanceof Error?e.message:String(e))}),Qe(!0),$e(),tt();let n=setInterval(()=>void Qe(!1),5e3);L(()=>{He=!0,t.abort(),clearInterval(n)})});let Ct=e=>{if(!ke())return;let t=e.target;t&&Re?.contains(t)||Ae(!1)},wt=e=>{e.key===`Escape`&&Ae(!1)};document.addEventListener(`mousedown`,Ct),document.addEventListener(`keydown`,wt),L(()=>{document.removeEventListener(`mousedown`,Ct),document.removeEventListener(`keydown`,wt)});let Tt=setInterval(()=>{let e=t()?.workingSince;F(e?Math.floor((Date.now()-e)/1e3):0)},1e3);L(()=>{clearInterval(Tt),Ve&&clearTimeout(Ve),Ye.cancel(),Y()}),M(()=>{let e=t()?.composerPrefill;e&&i(e)}),M(()=>{r(),Pe&&queueMicrotask(()=>Pe&&Wc(Pe))}),M(()=>{e.store.revisions[e.sessionKey],t()?.entries.length,ze&&!Be&&Ze()});let Et=!1;M(()=>{let e=Ue();Et&&!e&&Qe(!0),Et!==e&&tt(),Et=e}),M(()=>{n()?.state.pendingMessageCount,tt()}),M(()=>{ds(e.sessionKey,r())});function Dt(e){let t=[];return be().length>0&&t.push([`Attached files uploaded to the host (paths only; inspect deliberately if needed):`,...be().map(e=>`- ${e.path} (${e.fileName}, ${Vc(e.size)}, ${e.mimeType||`unknown type`})`)].join(`
71
- `)),ve().length>0&&t.push([`Attached images included inline with this turn:`,...ve().map((e,t)=>`- image ${t+1}: ${e.fileName} (${Vc(e.size)}, ${e.mimeType})`)].join(`
70
+ `))}async function ut(){let t=[];try{let n=await X.pending(e.sessionKey);t.push(...st(Y(n))),it(t.reduce((e,t)=>e+t.size,0))}catch(e){ct(t),P(e instanceof Error?e.message:String(e));return}ct(t);let n=[],r=!1;try{let t=Y(await X.dequeue(e.sessionKey));_e({steering:[],followUp:[],steeringMessages:[],followUpMessages:[]}),lt(t);try{n.push(...st(t)),it(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&&(ye(e=>[...n,...e]),r=!0),await e.store.refreshFleet(),queueMicrotask(()=>Fe?.focus())}catch(e){r||ct(n),P(e instanceof Error?e.message:String(e))}}function dt(e){if(!e.type.startsWith(`image/`))throw Error(`Not an image: ${e.name||e.type}`);if(e.size>Lc)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`);return at(e,e.type,e.name||`image`)}async function ft(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>Lc)throw Error(`Image too large: ${e.name||e.type} exceeds 10MB`)}it(t.reduce((e,t)=>e+t.size,0));for(let e of t)n.push(dt(e));ye(e=>[...e,...n])}catch(e){for(let e of n)et(e);P(e instanceof Error?e.message:String(e))}}async function pt(e){let t=Uc(e,Rc);try{return await X.listFiles(t),t}catch{return await X.mkdir(e,Rc),t}}async function mt(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 pt(r),n=[];for(let[r,i]of t.entries()){let t=Gc(i,r),a=await X.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})}xe(e=>[...e,...n])}catch(e){P(e instanceof Error?e.message:String(e))}}async function ht(){Te(!0),W(void 0),De([]);try{let{messages:t}=await X.forkMessages(e.sessionKey);De(t)}catch(e){W(e instanceof Error?e.message:String(e))}}async function gt(t){W(void 0);try{let n=await X.fork(e.sessionKey,t);n.cancelled||i(n.text),await e.store.hydrateSession(e.sessionKey),await e.store.refreshFleet(),Te(!1)}catch(e){W(e instanceof Error?e.message:String(e))}}async function _t(){Ae(!0),K(void 0);try{ne(await X.stats(e.sessionKey))}catch(e){K(e instanceof Error?e.message:String(e))}}te(()=>{let t=new AbortController;e.store.hydrateSession(e.sessionKey,t.signal).catch(e=>{t.signal.aborted&&fs(e)||P(e instanceof Error?e.message:String(e))}),qe(!0),Je(),Xe();let n=setInterval(()=>void qe(!1),5e3);L(()=>{Be=!0,t.abort(),clearInterval(n)})});let vt=e=>{if(!ke())return;let t=e.target;t&&ze?.contains(t)||Ae(!1)},yt=e=>{e.key===`Escape`&&Ae(!1)};document.addEventListener(`mousedown`,vt),document.addEventListener(`keydown`,yt),L(()=>{document.removeEventListener(`mousedown`,vt),document.removeEventListener(`keydown`,yt)});let bt=setInterval(()=>{let e=t()?.workingSince;F(e?Math.floor((Date.now()-e)/1e3):0)},1e3);L(()=>{clearInterval(bt),Ke.dispose(),tt()}),M(()=>{let e=t()?.composerPrefill;e&&i(e)}),M(()=>{r(),Fe&&queueMicrotask(()=>Fe&&Yc(Fe))}),M(()=>{e.store.revisions[e.sessionKey],t()?.entries.length,Ke.notifyContentChanged()}),te(()=>{Ke.observeContent(Pe),Ke.observeViewport(Me),Me&&L(Ka(Ke,Me,{keyboard:`window`}))});let xt=!1;M(()=>{let e=Ve();xt&&!e&&qe(!0),xt!==e&&Xe(),xt=e}),M(()=>{n()?.state.pendingMessageCount,Xe()}),M(()=>{gs(e.sessionKey,r())});function St(e){let t=[];return be().length>0&&t.push([`Attached files uploaded to the host (paths only; inspect deliberately if needed):`,...be().map(e=>`- ${e.path} (${e.fileName}, ${Kc(e.size)}, ${e.mimeType||`unknown type`})`)].join(`
71
+ `)),ve().length>0&&t.push([`Attached images included inline with this turn:`,...ve().map((e,t)=>`- image ${t+1}: ${e.fileName} (${Kc(e.size)}, ${e.mimeType})`)].join(`
72
72
  `)),[e,...t].filter(e=>e.trim()).join(`
73
73
 
74
- `)}async function Ot(){let t=r().trim();if(!t&&be().length===0&&ve().length===0)return;let n=Dt(t||`Please review the attached item(s). `);P(void 0);try{let t=ve(),r=t.length>0?await Promise.all(t.map(async({blob:e,mimeType:t})=>({data:await at(e),mimeType:t}))):void 0;Ue()?await X.prompt(e.sessionKey,n,a(),r):r?await X.prompt(e.sessionKey,n,void 0,r):await X.prompt(e.sessionKey,n),ps(e.sessionKey,n),Ce(void 0),i(``),Y(),xe([]),tt()}catch(e){P(e instanceof Error?e.message:String(e))}}async function kt(){c(!0);try{await X.abort(e.sessionKey),await ht(),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}finally{c(!1)}}async function At(){if(!l()){u(!0),P(void 0);try{await X.stopRuntime(e.sessionKey),e.store.navigate({screen:`fleet`})}catch(e){P(e instanceof Error?e.message:String(e))}finally{u(!1)}}}async function jt(t){try{t===`compaction`?await X.abortCompaction(e.sessionKey):t===`retry`&&await X.abortRetry(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}}function Mt(e){Me?.querySelectorAll(`details.tool`).forEach(t=>{t.open=e})}let Nt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status===`running`),Pt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status!==`running`),Ft=()=>t()?.tasks??[],It=()=>Ft().filter(e=>e.status===`completed`).length,Lt=()=>n()?.state.contextUsage??I()?.contextUsage,Rt=()=>typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 700px)`).matches,zt=()=>t()?.sessionName??n()?.state.sessionName,Bt=()=>zt()??t()?.title??e.sessionKey,Vt=()=>{let e=n()?.cwd;if(!e)return;let t=ae();return`${Lc(e)}${t?` (${t})`:``}`},Ht=()=>{let e=Vt(),t=zt();return e&&t?`${e} • ${t}`:e??t??`session`},Ut=()=>{let e=I()?.tokens;if(!e)return;let t=[];return e.input&&t.push(`↑${Ic(e.input)}`),e.output&&t.push(`↓${Ic(e.output)}`),e.cacheRead&&t.push(`R${Ic(e.cacheRead)}`),e.cacheWrite&&t.push(`W${Ic(e.cacheWrite)}`),t.length>0?t.join(` `):void 0},Wt=()=>{let e=I()?.cost??0,t=n()?.state.usingSubscription??!1;if(!e&&!t)return;let r=`$${e.toFixed(3)}${t?` (sub)`:``}`,i=se();return i!==void 0&&i>e&&(r+=`, today: $${i.toFixed(2)}`),r},Gt=()=>{let e=Lt();if(e)return`ctx ${e.percent===null?`?`:`${e.percent.toFixed(0)}%`}/${Ic(e.contextWindow)}`},Kt=()=>{let e=n()?.state.model;if(!e)return;let t=re()?.models.find(t=>t.provider===e.provider&&t.modelId===e.id);if(!(!t||t.count<3))return`${Math.round(t.median)} tok/s`},qt=()=>[Ut(),Wt(),Gt(),Kt()].filter(Boolean),Jt=()=>[...(ge().steeringMessages??ge().steering.map(e=>({text:e}))).map(e=>({kind:`steer`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text})),...(ge().followUpMessages??ge().followUp.map(e=>({text:e}))).map(e=>({kind:`follow-up`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text}))],Yt=()=>{let e=r();if(le()||!e.startsWith(`/`))return;let t=e.slice(1);if(!/\s/.test(t))return t.toLowerCase()},Xt=N(()=>{let e=Yt();return e===void 0?[]:ce().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)}),Zt=()=>Xt().length>0,Qt=e=>{i(`/${e.name} `),B(!0),queueMicrotask(()=>Pe?.focus())};return M(()=>{let e=Xt().length;ue()>=e&&de(Math.max(0,e-1))}),(()=>{var c=pc(),u=c.firstChild,k=u.firstChild,M=k.firstChild.nextSibling,N=M.nextSibling,F=u.nextSibling,te=F.firstChild,L=F.nextSibling,ne=L.firstChild,re=ne.firstChild;J(M,Bt),J(k,V(U,{get when(){return!h()},get children(){var e=Hs();return J(e,(()=>{var e=G(()=>!!n()?.cwd);return()=>e()?Lc(n().cwd):void 0})()),e}}),N),J(k,V(U,{get when(){return!h()},get children(){var t=Ws(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling,a=r.nextSibling;a.firstChild.nextSibling;var o=a.nextSibling;return r.$$click=()=>f(!0),J(i,()=>Pc(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=jc[(jc.indexOf(t)+1)%jc.length];try{await X.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},J(a,()=>n()?.state.thinkingLevel??`—`,null),J(t,V(U,{get when(){return Lt()},get children(){var e=Us();return e.firstChild.nextSibling,J(e,(()=>{var e=G(()=>Lt().percent===null);return()=>e()?`?`:`${Lt().percent.toFixed(0)}%`})(),null),e}}),o),o.$$click=()=>m(!p()),j(()=>q(r,`title`,Fc(n()?.state.model))),t}}),N),N.$$click=()=>g(!h()),J(N,()=>h()?`details ▾`:`details ▴`),J(u,V(U,{get when(){return!h()},get children(){return[(()=>{var e=Ks(),t=e.firstChild,n=t.nextSibling;return J(t,Ht),n.$$click=St,J(n,V(H,{get each(){return qt()},children:e=>(()=>{var t=mc();return J(t,e),t})()})),J(e,V(U,{get when(){return ke()},get children(){var e=Gs(),t=Re;return typeof t==`function`?Ie(t,e):Re=e,J(e,V(U,{get when(){return je()},get children(){var e=Es();return J(e,je),e}}),null),J(e,V(U,{get when(){return I()},get fallback(){return hc()},children:e=>(()=>{var t=gc(),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,J(n,()=>e().userMessages),J(r,()=>e().assistantMessages),J(i,()=>e().toolCalls,a),J(i,()=>e().toolResults,null),J(o,()=>Ic(e().tokens.input),s),J(o,()=>Ic(e().tokens.output),null),J(c,()=>Ic(e().tokens.cacheRead),l),J(c,()=>Ic(e().tokens.cacheWrite),null),J(u,()=>Ic(e().tokens.total)),J(d,()=>e().cost.toFixed(4),null),t})()}),null),e}}),null),e})(),V(U,{get when(){return p()},get children(){var t=Ys(),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=()=>Mt(!0),o.$$click=()=>Mt(!1),s.$$click=()=>w(!0),c.$$click=bt,u.$$click=et,J(t,V(U,{get when(){return Rt()},get children(){return[(()=>{var e=qs();return e.firstChild,e.$$click=()=>f(!0),J(e,()=>Pc(n()?.state.model),null),e})(),(()=>{var t=Js();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=jc[(jc.indexOf(t)+1)%jc.length];try{await X.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},J(t,()=>n()?.state.thinkingLevel??`—`,null),t})()]}}),d),d.$$click=At,J(d,()=>l()?`stopping runtime…`:`stop runtime`),j(t=>{var n=X.exportHtmlUrl(e.sessionKey),i=l();return n!==t.e&&q(r,`href`,t.e=n),i!==t.t&&(d.disabled=t.t=i),t},{e:void 0,t:void 0}),t}})]}}),null),J(c,V(U,{get when(){return G(()=>!!(!h()&&n()?.state.modelFallbackMessage))()&&!D()},get children(){var e=Xs(),t=e.firstChild.firstChild;t.firstChild;var r=t.nextSibling;return J(t,()=>n().state.modelFallbackMessage,null),r.$$click=()=>O(!0),e}}),F),F.addEventListener(`scroll`,()=>{ze=Je()}),F.$$touchend=()=>{Be=!1,ze=Je()},F.$$touchstart=()=>{Be=!0},F.addEventListener(`wheel`,()=>{Be=!0,Xe()});var ie=Me;return typeof ie==`function`?Ie(ie,F):Me=F,J(te,V(U,{get when(){return t()},get fallback(){return _c()},get children(){return[V(H,{get each(){return t().widgets.above},children:e=>(()=>{var t=vc();return J(t,e),t})()}),V(os,{get entries(){return t().entries},get resetKey(){return e.sessionKey}}),V(H,{get each(){return t().widgets.below},children:e=>(()=>{var t=vc();return J(t,e),t})()})]}})),re.$$click=()=>v(!_()),J(re,()=>_()?`compose ▴`:`compose ▾`),J(ne,V(U,{get when(){return _()},get children(){var e=Zs();return J(e,(()=>{var e=G(()=>!!qe());return()=>e()?`agent working — open controls to stop or steer`:G(()=>Jt().length>0)()?`${Jt().length} queued message(s)`:`composer hidden for transcript reading`})()),e}}),null),J(L,V(U,{get when(){return!_()},get children(){var n=uc(),c=n.firstChild,l=c.firstChild,u=l.nextSibling,d=u.firstChild,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling;J(n,V(U,{get when(){return Ft().length>0},get children(){var e=Qs(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;r.nextSibling;var i=t.nextSibling;return J(t,It,n),J(t,()=>Ft().length,r),J(i,V(H,{get each(){return Ft()},children:e=>(()=>{var t=yc(),n=t.firstChild;return J(t,(()=>{var t=G(()=>e.status===`completed`);return()=>t()?`☑`:e.status===`in_progress`?`⧖`:`☐`})(),n),J(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=!Rt()),e}}),c),J(n,V(U,{get when(){return Nt().length+Pt().length>0},get children(){var t=ec(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,n.$$click=()=>b(!y()),J(n,()=>y()?`subagents ▴`:`subagents ▾`),J(r,()=>Nt().length,i),J(r,()=>Pt().length,a),J(t,V(U,{get when(){return y()},get children(){return $s()}}),null),J(t,V(U,{get when(){return!y()},get children(){return V(H,{get each(){return[...Nt(),...Pt()].slice(0,4)},children:t=>(()=>{var n=bc(),r=n.firstChild,i=r.nextSibling,a=i.firstChild;return n.$$click=()=>e.store.navigate({screen:`subagent`,key:e.sessionKey,agentId:t.agentId}),J(r,(()=>{var e=G(()=>t.status===`running`);return()=>e()?`●`:t.status===`completed`?`✓`:`✕`})()),J(i,()=>t.agentType,a),J(i,()=>t.taskSummary,null),j(()=>Ne(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&&q(n,`title`,e.t=i),e},{e:void 0,t:void 0}),t}}),c),J(n,V(U,{get when(){return qe()||(t()?.statusEntries.length??0)>0||A()},get children(){var e=ic();return J(e,V(U,{get when(){return Ue()},get children(){var e=tc();return e.firstChild,J(e,(()=>{var e=G(()=>!!t()?.workingText);return()=>e()?` — ${t().workingText}`:``})(),null),J(e,(()=>{var e=G(()=>ee()>2);return()=>e()?` (${ee()}s)`:``})(),null),e}}),null),J(e,V(H,{get each(){return t()?.statusEntries??[]},children:e=>(()=>{var t=mc();return J(t,()=>e.text,null),J(t,V(U,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=xc();return t.$$click=()=>jt(e.key),t}}),null),j(()=>Ne(t,e.tone===`info`?`queued`:e.tone)),t})()}),null),J(e,V(U,{get when(){return A()},get children(){var e=nc();return J(e,A),e}}),null),J(e,V(U,{get when(){return qe()},get children(){var e=rc();return e.$$click=kt,J(e,()=>s()?`stopping…`:`■ stop`),j(()=>e.disabled=s()),e}}),null),e}}),c),J(c,V(U,{get when(){return Jt().length>0},get children(){var e=ac(),t=e.firstChild;return J(e,V(H,{get each(){return Jt()},children:e=>(()=>{var t=Sc(),n=t.firstChild;return J(n,()=>e.kind),J(t,()=>e.text,null),j(()=>q(t,`title`,e.text)),t})()}),t),t.$$click=ht,e}}),l),J(c,V(U,{get when(){return be().length>0||ve().length>0},get children(){var e=oc();return J(e,V(H,{get each(){return be()},children:(e,t)=>(()=>{var n=Cc(),r=n.firstChild;r.firstChild;var i=r.nextSibling,a=i.nextSibling;return J(r,()=>e.fileName,null),J(i,()=>Vc(e.size)),a.$$click=()=>xe(e=>e.filter((e,n)=>n!==t())),j(()=>q(n,`title`,e.path)),n})()}),null),J(e,V(H,{get each(){return ve()},children:(e,t)=>(()=>{var n=wc(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>st(t()),j(t=>{var i=`${e.fileName} (${Vc(e.size)})`,a=e.previewUrl,o=e.fileName;return i!==t.e&&q(n,`title`,t.e=i),a!==t.t&&q(r,`src`,t.t=a),o!==t.a&&q(r,`alt`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),n})()}),null),e}}),l),J(c,V(U,{get when(){return Zt()},get children(){var e=sc();return J(e,V(H,{get each(){return Xt()},children:(e,t)=>(()=>{var n=Ec(),r=n.firstChild;r.firstChild;var i=r.nextSibling;return n.$$click=()=>Qt(e),n.addEventListener(`mouseenter`,()=>de(t())),J(r,()=>e.name,null),J(n,V(U,{get when(){return e.description},get children(){var t=Tc();return J(t,()=>e.description),t}}),i),J(i,()=>e.source),j(e=>{var r=`command-option-${t()}`,i=ue()===t(),a=ue()===t();return r!==e.e&&q(n,`id`,e.e=r),i!==e.t&&q(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(Zt()){if(t.key===`ArrowDown`){t.preventDefault(),de((ue()+1)%Xt().length);return}if(t.key===`ArrowUp`){t.preventDefault(),de((ue()-1+Xt().length)%Xt().length);return}if(t.key===`Tab`||t.key===`Enter`&&!t.shiftKey&&!Rt()){t.preventDefault();let e=Xt()[ue()];e&&Qt(e);return}if(t.key===`Escape`){t.preventDefault(),B(!0);return}}if((t.key===`ArrowUp`||t.key===`ArrowDown`)&&(r()===``||Se()!==void 0)){let n=fs(e.sessionKey);if(n.length>0){if(t.preventDefault(),t.key===`ArrowUp`){let e=Se()===void 0?n.length-1:Math.max(0,Se()-1);Ce(e),i(n[e]??``)}else if(Se()!==void 0){let e=Se()+1;e>=n.length?(Ce(void 0),i(``)):(Ce(e),i(n[e]??``))}}return}t.key===`Enter`&&!t.shiftKey&&!Rt()&&(t.preventDefault(),Ot())},l.$$input=e=>{B(!1),de(0),Ce(void 0),i(e.currentTarget.value),Wc(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(),_t(t))});var g=Pe;typeof g==`function`?Ie(g,l):Pe=l,d.addEventListener(`change`,e=>{yt(e.currentTarget.files??[]),e.currentTarget.value=``});var _=Fe;typeof _==`function`?Ie(_,d):Fe=d,f.addEventListener(`change`,e=>{_t(e.currentTarget.files??[]),e.currentTarget.value=``});var v=Le;return typeof v==`function`?Ie(v,f):Le=f,p.$$click=()=>Fe?.click(),m.$$click=()=>Le?.click(),J(u,V(U,{get when(){return Ue()},get children(){var e=cc(),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),J(u,V(U,{get when(){return t()?.suggestedCommand},get children(){var e=lc(),n=e.firstChild.nextSibling;return e.$$click=()=>i(t().suggestedCommand),J(n,()=>t().suggestedCommand),e}}),h),h.$$click=Ot,j(e=>{var t=Ue()?`Message dreb — sends as steer while it works…`:`Message dreb…`,n=Zt()?`command-listbox`:void 0,r=Zt()?`command-option-${ue()}`:void 0;return t!==e.e&&q(l,`placeholder`,e.e=t),n!==e.t&&q(l,`aria-controls`,e.t=n),r!==e.a&&q(l,`aria-activedescendant`,e.a=r),e},{e:void 0,t:void 0,a:void 0}),j(()=>l.value=r()),n}}),null),J(c,V(U,{get when(){return t()?.uiRequests[0]},children:t=>V(Gc,{get request(){return t()},onRespond:async t=>{try{await X.extensionUiResponse(e.sessionKey,t)}catch(e){P(e instanceof Error?e.message:String(e))}}})}),null),J(c,V(U,{get when(){return d()},get children(){return V(qc,{get sessionKey(){return e.sessionKey},get state(){return n()?.state},onClose:()=>f(!1),onSelected:()=>e.store.refreshFleet()})}}),null),J(c,V(U,{get when(){return x()},get children(){return V(nt,{title:`compact context`,onDismiss:()=>S(!1),get actions(){return[(()=>{var e=ys();return e.$$click=()=>S(!1),e})(),(()=>{var t=Dc();return t.$$click=async()=>{S(!1);try{await X.compact(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}},t})()]},get children(){return dc()}})}}),null),J(c,V(U,{get when(){return T()},get children(){return V(Kc,{get resources(){return fe()},get error(){return me()},onClose:()=>E(!1)})}}),null),J(c,V(U,{get when(){return we()},get children(){return V(nt,{title:`fork from message`,onDismiss:()=>Te(!1),get children(){return[V(U,{get when(){return Oe()},get children(){var e=Es();return J(e,Oe),e}}),V(U,{get when(){return Ee().length>0},get fallback(){return Oc()},get children(){var e=fc();return J(e,V(H,{get each(){return Ee()},children:e=>(()=>{var t=kc(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>xt(e.entryId),J(n,()=>e.entryId),J(r,()=>e.text),t})()})),e}})]}})}}),null),J(c,V(U,{get when(){return C()},get children(){return V(Yc,{get current(){return zt()??``},onClose:()=>w(!1),onRename:async t=>{try{await X.rename(e.sessionKey,t),await e.store.refreshFleet(),w(!1)}catch(e){P(e instanceof Error?e.message:String(e))}}})}}),null),j(e=>{var t=!!h(),n=h()?`show session details`:`hide session details`,r=!!_(),i=_()?`show composer and controls`:`hide composer and controls`;return t!==e.e&&u.classList.toggle(`collapsed`,e.e=t),n!==e.t&&q(N,`title`,e.t=n),r!==e.a&&L.classList.toggle(`collapsed`,e.a=r),i!==e.o&&q(re,`title`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}function Yc(e){let[t,n]=k(e.current);return V(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=ys();return Pe(t,`click`,e.onClose,!0),t})(),(()=>{var n=Ac();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=_s(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Me([`input`,`click`,`touchstart`,`touchend`,`keydown`]);var Xc=K(`<select><option value=on>on</option><option value=off>off`),Zc=K(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),Qc=K(`<div class=model-list style=max-height:320px>`),$c=K(`<p class="muted small">No matching models.`),el=K(`<section class=model-provider-group><div class=model-provider-heading>`),tl=K(`<span class=model-name>`),nl=K(`<span class=model-reasoning>think`),rl=K(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),il=K(`<div class=settings-error>`),al=K(`<div class=settings-warning>`),ol=K(`<p class="muted small"style=margin-bottom:16px>✓ saved`),sl=K(`<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>`),cl=K(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow &lt;identity&gt;</code> to enable Tailscale access.`),ll=K(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),ul=K(`<div class=screen-fill><main class="container settings-wrap"><h1>settings</h1><p class=settings-intro>Defaults for new sessions. Live sessions keep their current values — change those from the session view. Writes go to the global settings file on the host.</p><section class=settings-section><h2>dashboard</h2><div class=setting-row><span class=setting-label><span class=name>always expand thinking</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control><label class=checkbox-control><input id=pref-expand-thinking type=checkbox><span>open by default</span></label></span></div><div class=setting-row><span class=setting-label><span class=name>auto-expand tool cards</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control style=display:grid;gap:6px></span></div><div class=setting-row><span class=setting-label><span class=name>needs-attention notifications</span><span class=hint></span></span><span class=setting-control><label class=checkbox-control><input id=pref-notifications type=checkbox><span></span></label></span></div><div class=setting-row><span class=setting-label><span class=name>restart dashboard service</span><span class=hint></span></span><span class=setting-control><button type=button class="btn btn-small btn-danger"></button></span></div></section><section class=settings-section><h2>devices</h2><div class=device-row><span>this machine <span class=this-device></span></span><span class=meta>local · always allowed</span></div></section><footer>dreb<!> · dashboard`),dl=K(`<div>`),fl=K(`<p class=muted>`),pl=K(`<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>`),ml=K(`<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`),hl=K(`<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.`),gl=K(`<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>`),_l=K(`<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>`),vl=K(`<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=setting-row><span class=setting-label><span class=name>auto-load nested context</span><span class=hint>load nested AGENTS.md/CLAUDE.md when tools enter subdirectories</span></span><span class=setting-control></span></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>`),yl=K(`<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>`),bl=K(`<p class="muted small settings-footnote">TUI-only settings (theme, cursor, editor) are managed in the terminal /settings menu.`),xl=K(`<option>`),Sl=K(`<p class="muted small">No agent definitions found.`),Cl=K(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),wl=K(`<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">`),Tl=K(`<span class="muted small">default`),El=K(`<span class=agent-model-chip>. `),Dl=K(`<p class="muted small">Using the default model.`),Ol=K(`<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">×`),kl=K(`<label class=checkbox-control><input type=checkbox><span>`),Al=K(`<div class=device-row><span></span><span class=meta> · paired </span><span class=actions><button type=button class="btn btn-small btn-danger">unpair`),jl=K(`<button type=button class="btn btn-small">cancel`),Ml=K(`<button type=button class="btn btn-small btn-danger">restart`),Nl=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Pl=[`all`,`one-at-a-time`],Fl=[`sse`,`websocket`,`auto`];function Il(e){return`${e.provider}/${e.id}`}function Ll(e){let t=Il(e);return e.name?`${t} — ${e.name}`:t}function Rl(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function zl(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Bl(){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 Vl(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 Hl(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 Ul(e){return(()=>{var t=Xc();return t.addEventListener(`change`,t=>e.onChange(t.currentTarget.value===`on`)),j(()=>t.value=e.value?`on`:`off`),t})()}function Wl(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return Vl(e.models.filter(e=>!n||zl(e,n)).slice(0,100))}),a=e=>r().has(Il(e));return V(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=Zc(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=Qc();return J(t,V(U,{get when(){return i().length>0},get fallback(){return $c()},get children(){return V(H,{get each(){return i()},children:t=>(()=>{var n=el(),r=n.firstChild;return J(r,()=>t.provider),J(n,V(H,{get each(){return t.models},children:t=>(()=>{var n=rl(),r=n.firstChild,i=r.nextSibling,o=i.nextSibling;return n.$$click=()=>e.onPick(t),J(r,()=>a(t)?`✓`:``),J(i,()=>t.id),J(n,V(U,{get when(){return t.name},get children(){var e=tl();return J(e,()=>t.name),e}}),o),J(o,()=>t.provider),J(n,V(U,{get when(){return t.reasoning},get children(){return nl()}}),null),j(e=>{var r=!!a(t),i=Ll(t);return r!==e.e&&n.classList.toggle(`current`,e.e=r),i!==e.t&&q(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),n})()})}})),t})()]}})}function Gl(e){let[t,n]=k(),[r,i]=k([]),[a,o]=k(!1),[s,c]=k(),[l,u]=k(),[d,f]=k(),[p,m]=k(Bl()),[h,{mutate:g,refetch:_}]=ee(async()=>{n(void 0);try{return await X.settings()}catch(e){n(e instanceof Error?e.message:String(e));return}}),[v]=ee(h,async()=>{try{let{models:e}=await X.settingsModels();return e}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),y=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))}),[b]=ee(()=>({settings:h(),cwd:d()}),async({cwd:e})=>{if(!h())return[];try{let{agentTypes:t}=await X.agentTypes(e);return t}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),[x,{refetch:S}]=ee(async()=>{let{devices:e}=await X.devices();return e}),[C,w]=k(),T;function E(){T&&clearTimeout(T),T=void 0}function D(e){E();let t=Math.max(250,e??3e4)+100;T=setTimeout(()=>void O(),t)}async function O(){try{let e=await X.pairingCode();if(!e.enabled||!e.code){w(void 0),E();return}w(e),D(e.expiresInMs)}catch(e){console.warn(`pairing code unavailable`,e),w(void 0),E()}}let[A]=ee(async()=>{try{let{version:e}=await X.version();return e}catch{return}}),[M]=ee(async()=>{try{return await X.serverInfo()}catch{return}}),[P,F]=k(!1),[I,ne]=k(!1),[re,ie]=k();async function ae(){ie(void 0),ne(!0);try{await X.restartServer()}catch(e){ie(e instanceof Error?e.message:String(e)),ne(!1)}}async function oe(e){n(void 0),i([]),o(!1);try{let t=await X.saveSettings(e);g(t),i(t.warnings??[]),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){n(e instanceof Error?e.message:String(e)),await _()}}async function se(e,t){await oe({agentModels:{[e]:t}})}function R(e){return h()?.agentModels?.[e]??[]}async function ce(){typeof Notification>`u`||m(await Notification.requestPermission())}te(()=>void O()),L(E);let z=()=>e.store.auth();return(()=>{var n=ul(),i=n.firstChild,o=i.firstChild.nextSibling.nextSibling,m=o.firstChild.nextSibling,g=m.firstChild.nextSibling.firstChild.firstChild,_=m.nextSibling,w=_.firstChild.nextSibling,T=_.nextSibling,E=T.firstChild,D=E.firstChild.nextSibling,O=E.nextSibling.firstChild.firstChild,k=O.nextSibling,N=T.nextSibling.firstChild,ee=N.firstChild.nextSibling,te=N.nextSibling.firstChild,L=o.nextSibling,ne=L.firstChild.nextSibling.firstChild.firstChild.nextSibling,ie=L.nextSibling,le=ie.firstChild.nextSibling;return le.nextSibling,J(n,V(tt,{get store(){return e.store},active:`settings`}),i),J(i,V(U,{get when(){return t()},get children(){var e=il();return J(e,t),e}}),o),J(i,V(U,{get when(){return r().length>0},get children(){var e=al();return J(e,V(H,{get each(){return r()},children:e=>(()=>{var t=dl();return J(t,e),t})()})),e}}),o),J(i,V(U,{get when(){return a()},get children(){return ol()}}),o),J(i,V(U,{get when(){return h()},get fallback(){return(()=>{var e=fl();return J(e,()=>t()?`Settings could not be loaded — see the error above.`:`Loading settings…`),e})()},children:e=>[(()=>{var t=pl(),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`}),J(r,()=>Rl(e())),J(o,()=>Nl.join(` · `)),s.addEventListener(`change`,e=>oe({defaultThinkingLevel:e.currentTarget.value})),J(s,V(H,{each:Nl,children:e=>(()=>{var t=xl();return t.value=e,J(t,e),t})()})),l.addEventListener(`change`,e=>oe({transport:e.currentTarget.value})),J(l,V(H,{get each(){return[...Fl]},children:e=>(()=>{var t=xl();return t.value=e,J(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=hl();return t.firstChild.nextSibling,J(t,V(U,{get when(){return y().length>0},get children(){var e=ml(),t=e.firstChild.nextSibling.firstChild;return t.firstChild,t.addEventListener(`change`,e=>f(e.currentTarget.value||void 0)),J(t,V(H,{get each(){return y()},children:e=>(()=>{var t=xl();return t.value=e,J(t,e),t})()}),null),j(()=>t.value=d()??``),e}}),null),J(t,V(U,{get when(){return(b()??[]).length>0},get fallback(){return Sl()},get children(){return V(H,{get each(){return b()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=wl(),r=e.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling,s=o.nextSibling;return J(i,()=>t.name),J(a,()=>t.description),J(o,V(U,{get when(){return n().length>0},get fallback(){return Tl()},get children(){return V(H,{get each(){return n()},children:(e,t)=>(()=>{var n=El(),r=n.firstChild;return J(n,()=>t()+1,r),J(n,e,null),n})()})}})),s.$$click=()=>u(l()===t.name?void 0:t.name),J(s,()=>l()===t.name?`done`:`edit`),J(e,V(U,{get when(){return l()===t.name},get children(){var e=Cl(),r=e.firstChild;return J(e,V(U,{get when(){return n().length>0},get fallback(){return Dl()},get children(){return V(H,{get each(){return n()},children:(e,r)=>(()=>{var i=Ol(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return J(a,e),o.$$click=()=>void se(t.name,Hl(n(),r(),-1)),s.$$click=()=>void se(t.name,Hl(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=gl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return J(r,V(Ul,{get value(){return e().imageAutoResize!==!1},onChange:e=>oe({imageAutoResize:e})})),J(i,V(Ul,{get value(){return e().blockImages===!0},onChange:e=>oe({blockImages:e})})),t})(),(()=>{var t=_l(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling.firstChild.nextSibling.firstChild;return r.addEventListener(`change`,e=>oe({steeringMode:e.currentTarget.value})),J(r,V(H,{get each(){return[...Pl]},children:e=>(()=>{var t=xl();return t.value=e,J(t,e),t})()})),i.addEventListener(`change`,e=>oe({followUpMode:e.currentTarget.value})),J(i,V(H,{get each(){return[...Pl]},children:e=>(()=>{var t=xl();return t.value=e,J(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=vl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling;return J(r,V(Ul,{get value(){return e().enableSkillCommands!==!1},onChange:e=>oe({enableSkillCommands:e})})),J(a,V(Ul,{get value(){return e().autoLoadNestedContext!==!1},onChange:e=>oe({autoLoadNestedContext:e})})),J(o,V(Ul,{get value(){return e().hideThinkingBlock===!0},onChange:e=>oe({hideThinkingBlock:e})})),t})(),(()=>{var t=yl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return J(r,V(Ul,{get value(){return e().compactionEnabled!==!1},onChange:e=>oe({compactionEnabled:e})})),J(i,V(Ul,{get value(){return e().retryEnabled!==!1},onChange:e=>oe({retryEnabled:e})})),t})(),bl()]}),o),g.addEventListener(`change`,e=>io(e.currentTarget.checked)),J(w,V(H,{each:Ga,children:e=>(()=>{var t=kl(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>ao(e,t.currentTarget.checked)),q(n,`id`,`pref-tool-expand-${e}`),J(r,e),j(()=>n.checked=oo(e)),t})()})),J(D,(()=>{var e=G(()=>p()===`denied`);return()=>e()?`blocked by browser settings — re-enable notifications in site permissions`:G(()=>p()===`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`:G(()=>p()===`ios-install`)()?`iOS notifications need the installed PWA — tap Share → Add to Home Screen, then open dreb from the home screen icon`:p()===`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)`})()),O.addEventListener(`change`,e=>{e.currentTarget.checked&&ce()}),J(k,()=>p()===`granted`?`enabled`:`enable notifications`),J(ee,()=>M()?.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`),te.$$click=()=>F(!0),J(te,()=>I()?`restarting…`:`restart`),J(o,V(U,{get when(){return re()},get children(){var e=il();return J(e,re),e}}),null),J(ne,()=>z()?.mode===`local`?`local`:`host`),J(L,V(U,{get when(){return G(()=>!!C()?.enabled)()&&C()?.code},get children(){var e=sl(),t=e.firstChild.nextSibling.firstChild;return J(t,()=>C().code),e}}),null),J(L,V(H,{get each(){return x()??[]},children:e=>(()=>{var t=Al(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=r.nextSibling.firstChild;return J(n,()=>e.device??e.id),J(r,()=>e.identity,i),J(r,()=>it(e.createdAt),null),a.$$click=async()=>{await X.unpair(e.id),await S()},t})()}),null),J(L,V(U,{get when(){return(x()??[]).length===0},get children(){return cl()}}),null),J(ie,(()=>{var e=G(()=>!!M()?.version);return()=>e()?` v${M().version}`:G(()=>!!A())()?` v${A()}`:``})(),le),J(ie,V(U,{get when(){return M()?.startedAt},get children(){return[` · server build, up `,G(()=>it(M().startedAt))]}}),null),J(n,V(U,{get when(){return P()},get children(){return V(nt,{title:`restart dashboard service?`,onDismiss:()=>F(!1),get actions(){return[(()=>{var e=jl();return e.$$click=()=>F(!1),e})(),(()=>{var e=Ml();return e.$$click=()=>{F(!1),ae()},e})()]},get children(){var e=ll();return e.firstChild.nextSibling.nextSibling,J(e,()=>M()?.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),J(n,V(U,{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"?h()?.defaultProvider&&h()?.defaultModel?[`${h().defaultProvider}/${h().defaultModel}`]:[]:R(t.agentName)};return V(Wl,{get title(){return t()},get models(){return v()??[]},get selected(){return n()},onClose:()=>c(void 0),onPick:t=>{let n=e();if(c(void 0),n.kind==="default"){oe({defaultProvider:t.provider,defaultModel:t.id});return}let r=Il(t),i=R(n.agentName);i.includes(r)||se(n.agentName,[...i,r])}})}}),null),j(e=>{var t=p()===`denied`||p()===`unsupported`||p()===`ios-install`||p()===`insecure`,n=I();return t!==e.e&&(O.disabled=e.e=t),n!==e.t&&(te.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>g.checked=ro()),j(()=>O.checked=p()===`granted`),n})()}Me([`input`,`click`]);var Kl=K(`<p class=pair-error>`),ql=K(`<div class=status-line><span class=working>● working`),Jl=K(`<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.`),Yl=K(`<p class=muted>`);function Xl(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=!0,u=()=>!c||c.scrollTop+c.clientHeight>=c.scrollHeight-40,d=Ha({element:()=>c,shouldScroll:()=>l});return te(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&ss(e)||s(e instanceof Error?e.message:String(e))}),L(()=>t.abort())}),M(()=>{e.store.revisions[e.sessionKey],l&&d.request()}),L(()=>d.cancel()),(()=>{var t=Jl(),i=t.firstChild,s=i.firstChild.firstChild;s.firstChild;var d=s.nextSibling;d.firstChild;var f=d.nextSibling,p=f.nextSibling,m=i.nextSibling,h=m.firstChild,g=m.nextSibling.firstChild,_=g.firstChild;J(s,a,null),J(d,()=>n()?.agentType??`unknown`,null),J(f,()=>n()?.taskSummary??e.agentId),J(p,V(U,{get when(){return n()?.status===`running`},get fallback(){return V($e,{get status(){return n()?.status===`failed`?`error`:`idle`},get label(){return n()?.status}})},get children(){return V($e,{status:`running`})}})),m.addEventListener(`scroll`,()=>{l=u()});var v=c;return typeof v==`function`?Ie(v,m):c=m,J(h,V(U,{get when(){return o()},get children(){var e=Kl();return J(e,o),e}}),null),J(h,V(U,{get when(){return G(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=Yl();return J(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 V(os,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`}})}}),null),J(g,V(U,{get when(){return r()?.streaming},get children(){return ql()}}),_),j(()=>q(s,`href`,`#/session/${e.sessionKey}`)),t})()}function Zl(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}function Ql(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
75
- `):``}function $l(e,t){let n=e.match(/<background-agent-complete>\n?([\s\S]*?)\n?<\/background-agent-complete>/)?.[1]?.trim();if(!n)return;let r=n.split(`
74
+ `)}async function Ct(){let t=r().trim();if(!t&&be().length===0&&ve().length===0)return;let n=St(t||`Please review the attached item(s). `);P(void 0);try{let t=ve(),r=t.length>0?await Promise.all(t.map(async({blob:e,mimeType:t})=>({data:await $e(e),mimeType:t}))):void 0;Ve()?await X.prompt(e.sessionKey,n,a(),r):r?await X.prompt(e.sessionKey,n,void 0,r):await X.prompt(e.sessionKey,n),vs(e.sessionKey,n),Ce(void 0),i(``),tt(),xe([]),Xe()}catch(e){P(e instanceof Error?e.message:String(e))}}async function wt(){c(!0);try{await X.abort(e.sessionKey),await ut(),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}finally{c(!1)}}async function Tt(){if(!l()){u(!0),P(void 0);try{await X.stopRuntime(e.sessionKey),e.store.navigate({screen:`fleet`})}catch(e){P(e instanceof Error?e.message:String(e))}finally{u(!1)}}}async function Et(t){try{t===`compaction`?await X.abortCompaction(e.sessionKey):t===`retry`&&await X.abortRetry(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}}function Dt(e){Me?.querySelectorAll(`details.tool`).forEach(t=>{t.open=e})}let Ot=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status===`running`),kt=()=>Object.values(t()?.backgroundAgents??{}).filter(e=>e.status!==`running`),At=()=>t()?.tasks??[],jt=()=>At().filter(e=>e.status===`completed`).length,Mt=()=>n()?.state.contextUsage??I()?.contextUsage,Nt=()=>typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 700px)`).matches,Pt=()=>t()?.sessionName??n()?.state.sessionName,Ft=()=>Pt()??t()?.title??e.sessionKey,It=()=>{let e=n()?.cwd;if(!e)return;let t=ae();return`${Hc(e)}${t?` (${t})`:``}`},Lt=()=>{let e=It(),t=Pt();return e&&t?`${e} • ${t}`:e??t??`session`},Rt=()=>{let e=I()?.tokens;if(!e)return;let t=[];return e.input&&t.push(`↑${Vc(e.input)}`),e.output&&t.push(`↓${Vc(e.output)}`),e.cacheRead&&t.push(`R${Vc(e.cacheRead)}`),e.cacheWrite&&t.push(`W${Vc(e.cacheWrite)}`),t.length>0?t.join(` `):void 0},zt=()=>{let e=I()?.cost??0,t=n()?.state.usingSubscription??!1;if(!e&&!t)return;let r=`$${e.toFixed(3)}${t?` (sub)`:``}`,i=se();return i!==void 0&&i>e&&(r+=`, today: $${i.toFixed(2)}`),r},Bt=()=>{let e=Mt();if(e)return`ctx ${e.percent===null?`?`:`${e.percent.toFixed(0)}%`}/${Vc(e.contextWindow)}`},Vt=()=>{let e=n()?.state.model;if(!e)return;let t=re()?.models.find(t=>t.provider===e.provider&&t.modelId===e.id);if(!(!t||t.count<3))return`${Math.round(t.median)} tok/s`},Ht=()=>[Rt(),zt(),Bt(),Vt()].filter(Boolean),Ut=()=>[...(ge().steeringMessages??ge().steering.map(e=>({text:e}))).map(e=>({kind:`steer`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text})),...(ge().followUpMessages??ge().followUp.map(e=>({text:e}))).map(e=>({kind:`follow-up`,text:e.images?.length?`${e.text} (${e.images.length} image(s))`:e.text}))],Wt=()=>{let e=r();if(le()||!e.startsWith(`/`))return;let t=e.slice(1);if(!/\s/.test(t))return t.toLowerCase()},Gt=N(()=>{let e=Wt();return e===void 0?[]:ce().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)}),Kt=()=>Gt().length>0,qt=e=>{i(`/${e.name} `),B(!0),queueMicrotask(()=>Fe?.focus())};return M(()=>{let e=Gt().length;ue()>=e&&de(Math.max(0,e-1))}),(()=>{var c=vc(),u=c.firstChild,k=u.firstChild,M=k.firstChild.nextSibling,N=M.nextSibling,F=u.nextSibling,te=F.firstChild,L=F.nextSibling,ne=L.firstChild,re=ne.firstChild;J(M,Ft),J(k,V(U,{get when(){return!h()},get children(){var e=qs();return J(e,(()=>{var e=G(()=>!!n()?.cwd);return()=>e()?Hc(n().cwd):void 0})()),e}}),N),J(k,V(U,{get when(){return!h()},get children(){var t=Ys(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling,a=r.nextSibling;a.firstChild.nextSibling;var o=a.nextSibling;return r.$$click=()=>f(!0),J(i,()=>zc(n()?.state.model)),a.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=Ic[(Ic.indexOf(t)+1)%Ic.length];try{await X.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},J(a,()=>n()?.state.thinkingLevel??`—`,null),J(t,V(U,{get when(){return Mt()},get children(){var e=Js();return e.firstChild.nextSibling,J(e,(()=>{var e=G(()=>Mt().percent===null);return()=>e()?`?`:`${Mt().percent.toFixed(0)}%`})(),null),e}}),o),o.$$click=()=>m(!p()),j(()=>q(r,`title`,Bc(n()?.state.model))),t}}),N),N.$$click=()=>g(!h()),J(N,()=>h()?`details ▾`:`details ▴`),J(u,V(U,{get when(){return!h()},get children(){return[(()=>{var e=Zs(),t=e.firstChild,n=t.nextSibling;return J(t,Lt),n.$$click=_t,J(n,V(H,{get each(){return Ht()},children:e=>(()=>{var t=yc();return J(t,e),t})()})),J(e,V(U,{get when(){return ke()},get children(){var e=Xs(),t=ze;return typeof t==`function`?Ie(t,e):ze=e,J(e,V(U,{get when(){return je()},get children(){var e=js();return J(e,je),e}}),null),J(e,V(U,{get when(){return I()},get fallback(){return bc()},children:e=>(()=>{var t=xc(),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,J(n,()=>e().userMessages),J(r,()=>e().assistantMessages),J(i,()=>e().toolCalls,a),J(i,()=>e().toolResults,null),J(o,()=>Vc(e().tokens.input),s),J(o,()=>Vc(e().tokens.output),null),J(c,()=>Vc(e().tokens.cacheRead),l),J(c,()=>Vc(e().tokens.cacheWrite),null),J(u,()=>Vc(e().tokens.total)),J(d,()=>e().cost.toFixed(4),null),t})()}),null),e}}),null),e})(),V(U,{get when(){return p()},get children(){var t=ec(),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=()=>Dt(!0),o.$$click=()=>Dt(!1),s.$$click=()=>w(!0),c.$$click=ht,u.$$click=Ye,J(t,V(U,{get when(){return Nt()},get children(){return[(()=>{var e=Qs();return e.firstChild,e.$$click=()=>f(!0),J(e,()=>zc(n()?.state.model),null),e})(),(()=>{var t=$s();return t.firstChild,t.$$click=async()=>{let t=n()?.state.thinkingLevel??`off`,r=Ic[(Ic.indexOf(t)+1)%Ic.length];try{await X.setThinking(e.sessionKey,r),await e.store.refreshFleet()}catch(e){P(e instanceof Error?e.message:String(e))}},J(t,()=>n()?.state.thinkingLevel??`—`,null),t})()]}}),d),d.$$click=Tt,J(d,()=>l()?`stopping runtime…`:`stop runtime`),j(t=>{var n=X.exportHtmlUrl(e.sessionKey),i=l();return n!==t.e&&q(r,`href`,t.e=n),i!==t.t&&(d.disabled=t.t=i),t},{e:void 0,t:void 0}),t}})]}}),null),J(c,V(U,{get when(){return G(()=>!!(!h()&&n()?.state.modelFallbackMessage))()&&!D()},get children(){var e=tc(),t=e.firstChild.firstChild;t.firstChild;var r=t.nextSibling;return J(t,()=>n().state.modelFallbackMessage,null),r.$$click=()=>O(!0),e}}),F);var ie=Me;typeof ie==`function`?Ie(ie,F):Me=F;var ae=Pe;return typeof ae==`function`?Ie(ae,te):Pe=te,J(te,V(U,{get when(){return t()},get fallback(){return Sc()},get children(){return[V(H,{get each(){return t().widgets.above},children:e=>(()=>{var t=Cc();return J(t,e),t})()}),V(ds,{get entries(){return t().entries},get resetKey(){return e.sessionKey}}),V(H,{get each(){return t().widgets.below},children:e=>(()=>{var t=Cc();return J(t,e),t})()})]}})),re.$$click=()=>v(!_()),J(re,()=>_()?`compose ▴`:`compose ▾`),J(ne,V(U,{get when(){return _()},get children(){var e=nc();return J(e,(()=>{var e=G(()=>!!Ge());return()=>e()?`agent working — open controls to stop or steer`:G(()=>Ut().length>0)()?`${Ut().length} queued message(s)`:`composer hidden for transcript reading`})()),e}}),null),J(L,V(U,{get when(){return!_()},get children(){var n=hc(),c=n.firstChild,l=c.firstChild,u=l.nextSibling,d=u.firstChild,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling;J(n,V(U,{get when(){return At().length>0},get children(){var e=rc(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;r.nextSibling;var i=t.nextSibling;return J(t,jt,n),J(t,()=>At().length,r),J(i,V(H,{get each(){return At()},children:e=>(()=>{var t=wc(),n=t.firstChild;return J(t,(()=>{var t=G(()=>e.status===`completed`);return()=>t()?`☑`:e.status===`in_progress`?`⧖`:`☐`})(),n),J(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=!Nt()),e}}),c),J(n,V(U,{get when(){return Ot().length+kt().length>0},get children(){var t=ac(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,n.$$click=()=>b(!y()),J(n,()=>y()?`subagents ▴`:`subagents ▾`),J(r,()=>Ot().length,i),J(r,()=>kt().length,a),J(t,V(U,{get when(){return y()},get children(){return ic()}}),null),J(t,V(U,{get when(){return!y()},get children(){return V(H,{get each(){return[...Ot(),...kt()].slice(0,4)},children:t=>(()=>{var n=Tc(),r=n.firstChild,i=r.nextSibling,a=i.firstChild;return n.$$click=()=>e.store.navigate({screen:`subagent`,key:e.sessionKey,agentId:t.agentId}),J(r,(()=>{var e=G(()=>t.status===`running`);return()=>e()?`●`:t.status===`completed`?`✓`:`✕`})()),J(i,()=>t.agentType,a),J(i,()=>t.taskSummary,null),j(()=>Ne(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&&q(n,`title`,e.t=i),e},{e:void 0,t:void 0}),t}}),c),J(n,V(U,{get when(){return Ge()||(t()?.statusEntries.length??0)>0||A()},get children(){var e=lc();return J(e,V(U,{get when(){return Ve()},get children(){var e=oc();return e.firstChild,J(e,(()=>{var e=G(()=>!!t()?.workingText);return()=>e()?` — ${t().workingText}`:``})(),null),J(e,(()=>{var e=G(()=>ee()>2);return()=>e()?` (${ee()}s)`:``})(),null),e}}),null),J(e,V(H,{get each(){return t()?.statusEntries??[]},children:e=>(()=>{var t=yc();return J(t,()=>e.text,null),J(t,V(U,{get when(){return e.key===`compaction`||e.key===`retry`},get children(){var t=Ec();return t.$$click=()=>Et(e.key),t}}),null),j(()=>Ne(t,e.tone===`info`?`queued`:e.tone)),t})()}),null),J(e,V(U,{get when(){return A()},get children(){var e=sc();return J(e,A),e}}),null),J(e,V(U,{get when(){return Ge()},get children(){var e=cc();return e.$$click=wt,J(e,()=>s()?`stopping…`:`■ stop`),j(()=>e.disabled=s()),e}}),null),e}}),c),J(c,V(U,{get when(){return Ut().length>0},get children(){var e=uc(),t=e.firstChild;return J(e,V(H,{get each(){return Ut()},children:e=>(()=>{var t=Dc(),n=t.firstChild;return J(n,()=>e.kind),J(t,()=>e.text,null),j(()=>q(t,`title`,e.text)),t})()}),t),t.$$click=ut,e}}),l),J(c,V(U,{get when(){return be().length>0||ve().length>0},get children(){var e=dc();return J(e,V(H,{get each(){return be()},children:(e,t)=>(()=>{var n=Oc(),r=n.firstChild;r.firstChild;var i=r.nextSibling,a=i.nextSibling;return J(r,()=>e.fileName,null),J(i,()=>Kc(e.size)),a.$$click=()=>xe(e=>e.filter((e,n)=>n!==t())),j(()=>q(n,`title`,e.path)),n})()}),null),J(e,V(H,{get each(){return ve()},children:(e,t)=>(()=>{var n=kc(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>rt(t()),j(t=>{var i=`${e.fileName} (${Kc(e.size)})`,a=e.previewUrl,o=e.fileName;return i!==t.e&&q(n,`title`,t.e=i),a!==t.t&&q(r,`src`,t.t=a),o!==t.a&&q(r,`alt`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),n})()}),null),e}}),l),J(c,V(U,{get when(){return Kt()},get children(){var e=fc();return J(e,V(H,{get each(){return Gt()},children:(e,t)=>(()=>{var n=jc(),r=n.firstChild;r.firstChild;var i=r.nextSibling;return n.$$click=()=>qt(e),n.addEventListener(`mouseenter`,()=>de(t())),J(r,()=>e.name,null),J(n,V(U,{get when(){return e.description},get children(){var t=Ac();return J(t,()=>e.description),t}}),i),J(i,()=>e.source),j(e=>{var r=`command-option-${t()}`,i=ue()===t(),a=ue()===t();return r!==e.e&&q(n,`id`,e.e=r),i!==e.t&&q(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(Kt()){if(t.key===`ArrowDown`){t.preventDefault(),de((ue()+1)%Gt().length);return}if(t.key===`ArrowUp`){t.preventDefault(),de((ue()-1+Gt().length)%Gt().length);return}if(t.key===`Tab`||t.key===`Enter`&&!t.shiftKey&&!Nt()){t.preventDefault();let e=Gt()[ue()];e&&qt(e);return}if(t.key===`Escape`){t.preventDefault(),B(!0);return}}if((t.key===`ArrowUp`||t.key===`ArrowDown`)&&(r()===``||Se()!==void 0)){let n=_s(e.sessionKey);if(n.length>0){if(t.preventDefault(),t.key===`ArrowUp`){let e=Se()===void 0?n.length-1:Math.max(0,Se()-1);Ce(e),i(n[e]??``)}else if(Se()!==void 0){let e=Se()+1;e>=n.length?(Ce(void 0),i(``)):(Ce(e),i(n[e]??``))}}return}t.key===`Enter`&&!t.shiftKey&&!Nt()&&(t.preventDefault(),Ct())},l.$$input=e=>{B(!1),de(0),Ce(void 0),i(e.currentTarget.value),Yc(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(),ft(t))});var g=Fe;typeof g==`function`?Ie(g,l):Fe=l,d.addEventListener(`change`,e=>{mt(e.currentTarget.files??[]),e.currentTarget.value=``});var _=Le;typeof _==`function`?Ie(_,d):Le=d,f.addEventListener(`change`,e=>{ft(e.currentTarget.files??[]),e.currentTarget.value=``});var v=Re;return typeof v==`function`?Ie(v,f):Re=f,p.$$click=()=>Le?.click(),m.$$click=()=>Re?.click(),J(u,V(U,{get when(){return Ve()},get children(){var e=pc(),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),J(u,V(U,{get when(){return t()?.suggestedCommand},get children(){var e=mc(),n=e.firstChild.nextSibling;return e.$$click=()=>i(t().suggestedCommand),J(n,()=>t().suggestedCommand),e}}),h),h.$$click=Ct,j(e=>{var t=Ve()?`Message dreb — sends as steer while it works…`:`Message dreb…`,n=Kt()?`command-listbox`:void 0,r=Kt()?`command-option-${ue()}`:void 0;return t!==e.e&&q(l,`placeholder`,e.e=t),n!==e.t&&q(l,`aria-controls`,e.t=n),r!==e.a&&q(l,`aria-activedescendant`,e.a=r),e},{e:void 0,t:void 0,a:void 0}),j(()=>l.value=r()),n}}),null),J(c,V(U,{get when(){return t()?.uiRequests[0]},children:t=>V(Xc,{get request(){return t()},onRespond:async t=>{try{await X.extensionUiResponse(e.sessionKey,t)}catch(e){P(e instanceof Error?e.message:String(e))}}})}),null),J(c,V(U,{get when(){return d()},get children(){return V(Qc,{get sessionKey(){return e.sessionKey},get state(){return n()?.state},onClose:()=>f(!1),onSelected:()=>e.store.refreshFleet()})}}),null),J(c,V(U,{get when(){return x()},get children(){return V(nt,{title:`compact context`,onDismiss:()=>S(!1),get actions(){return[(()=>{var e=ws();return e.$$click=()=>S(!1),e})(),(()=>{var t=Mc();return t.$$click=async()=>{S(!1);try{await X.compact(e.sessionKey)}catch(e){P(e instanceof Error?e.message:String(e))}},t})()]},get children(){return gc()}})}}),null),J(c,V(U,{get when(){return T()},get children(){return V(Zc,{get resources(){return fe()},get error(){return me()},onClose:()=>E(!1)})}}),null),J(c,V(U,{get when(){return we()},get children(){return V(nt,{title:`fork from message`,onDismiss:()=>Te(!1),get children(){return[V(U,{get when(){return Oe()},get children(){var e=js();return J(e,Oe),e}}),V(U,{get when(){return Ee().length>0},get fallback(){return Nc()},get children(){var e=_c();return J(e,V(H,{get each(){return Ee()},children:e=>(()=>{var t=Pc(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>gt(e.entryId),J(n,()=>e.entryId),J(r,()=>e.text),t})()})),e}})]}})}}),null),J(c,V(U,{get when(){return C()},get children(){return V(el,{get current(){return Pt()??``},onClose:()=>w(!1),onRename:async t=>{try{await X.rename(e.sessionKey,t),await e.store.refreshFleet(),w(!1)}catch(e){P(e instanceof Error?e.message:String(e))}}})}}),null),j(e=>{var t=!!h(),n=h()?`show session details`:`hide session details`,r=!!_(),i=_()?`show composer and controls`:`hide composer and controls`;return t!==e.e&&u.classList.toggle(`collapsed`,e.e=t),n!==e.t&&q(N,`title`,e.t=n),r!==e.a&&L.classList.toggle(`collapsed`,e.a=r),i!==e.o&&q(re,`title`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}function el(e){let[t,n]=k(e.current);return V(nt,{title:`rename session`,get onDismiss(){return e.onClose},get actions(){return[(()=>{var t=ws();return Pe(t,`click`,e.onClose,!0),t})(),(()=>{var n=Fc();return n.$$click=()=>e.onRename(t().trim()),j(()=>n.disabled=!t().trim()),n})()]},get children(){var e=Ss(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e}})}Me([`input`,`click`,`keydown`]);var tl=K(`<select><option value=on>on</option><option value=off>off`),nl=K(`<div class=field style=margin-bottom:8px><input type=text placeholder="search models…">`),rl=K(`<div class=model-list style=max-height:320px>`),il=K(`<p class="muted small">No matching models.`),al=K(`<section class=model-provider-group><div class=model-provider-heading>`),ol=K(`<span class=model-name>`),sl=K(`<span class=model-reasoning>think`),cl=K(`<button type=button class=model-row><span class=model-current></span><span class=model-id></span><span class=model-provider-badge>`),ll=K(`<div class=settings-error>`),ul=K(`<div class=settings-warning>`),dl=K(`<p class="muted small"style=margin-bottom:16px>✓ saved`),fl=K(`<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>`),pl=K(`<p class="muted small"style=padding-top:8px>No remote devices paired. Launch with <code>--remote --allow &lt;identity&gt;</code> to enable Tailscale access.`),ml=K(`<p>This exits the dashboard server process and terminates <strong>all running sessions</strong>.`),hl=K(`<div class=screen-fill><main class="container settings-wrap"><h1>settings</h1><p class=settings-intro>Defaults for new sessions. Live sessions keep their current values — change those from the session view. Writes go to the global settings file on the host.</p><section class=settings-section><h2>dashboard</h2><div class=setting-row><span class=setting-label><span class=name>always expand thinking</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control><label class=checkbox-control><input id=pref-expand-thinking type=checkbox><span>open by default</span></label></span></div><div class=setting-row><span class=setting-label><span class=name>auto-expand tool cards</span><span class=hint>this browser only — stored in localStorage, not the host settings file</span></span><span class=setting-control style=display:grid;gap:6px></span></div><div class=setting-row><span class=setting-label><span class=name>needs-attention notifications</span><span class=hint></span></span><span class=setting-control><label class=checkbox-control><input id=pref-notifications type=checkbox><span></span></label></span></div><div class=setting-row><span class=setting-label><span class=name>restart dashboard service</span><span class=hint></span></span><span class=setting-control><button type=button class="btn btn-small btn-danger"></button></span></div></section><section class=settings-section><h2>devices</h2><div class=device-row><span>this machine <span class=this-device></span></span><span class=meta>local · always allowed</span></div></section><footer>dreb<!> · dashboard`),gl=K(`<div>`),_l=K(`<p class=muted>`),vl=K(`<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>`),yl=K(`<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`),bl=K(`<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.`),xl=K(`<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>`),Sl=K(`<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>`),Cl=K(`<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=setting-row><span class=setting-label><span class=name>auto-load nested context</span><span class=hint>load nested AGENTS.md/CLAUDE.md when tools enter subdirectories</span></span><span class=setting-control></span></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>`),wl=K(`<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>`),Tl=K(`<p class="muted small settings-footnote">TUI-only settings (theme, cursor, editor) are managed in the terminal /settings menu.`),El=K(`<option>`),Dl=K(`<p class="muted small">No agent definitions found.`),Ol=K(`<div class=agent-model-editor><button type=button class="btn btn-small">add model…`),kl=K(`<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">`),Al=K(`<span class="muted small">default`),jl=K(`<span class=agent-model-chip>. `),Ml=K(`<p class="muted small">Using the default model.`),Nl=K(`<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">×`),Pl=K(`<label class=checkbox-control><input type=checkbox><span>`),Fl=K(`<div class=device-row><span></span><span class=meta> · paired </span><span class=actions><button type=button class="btn btn-small btn-danger">unpair`),Il=K(`<button type=button class="btn btn-small">cancel`),Ll=K(`<button type=button class="btn btn-small btn-danger">restart`),Rl=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],zl=[`all`,`one-at-a-time`],Bl=[`sse`,`websocket`,`auto`];function Vl(e){return`${e.provider}/${e.id}`}function Hl(e){let t=Vl(e);return e.name?`${t} — ${e.name}`:t}function Ul(e){return e.defaultProvider&&e.defaultModel?`${e.defaultProvider}/${e.defaultModel}`:`choose model…`}function Wl(e,t){return`${e.provider}/${e.id} ${e.name??``}`.toLowerCase().includes(t)}function Gl(){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 Kl(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 ql(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 Jl(e){return(()=>{var t=tl();return t.addEventListener(`change`,t=>e.onChange(t.currentTarget.value===`on`)),j(()=>t.value=e.value?`on`:`off`),t})()}function Yl(e){let[t,n]=k(``),r=()=>new Set(e.selected??[]),i=N(()=>{let n=t().toLowerCase();return Kl(e.models.filter(e=>!n||Wl(e,n)).slice(0,100))}),a=e=>r().has(Vl(e));return V(nt,{get title(){return e.title},get onDismiss(){return e.onClose},class:`model-picker-modal`,get children(){return[(()=>{var e=nl(),r=e.firstChild;return r.$$input=e=>n(e.currentTarget.value),j(()=>r.value=t()),e})(),(()=>{var t=rl();return J(t,V(U,{get when(){return i().length>0},get fallback(){return il()},get children(){return V(H,{get each(){return i()},children:t=>(()=>{var n=al(),r=n.firstChild;return J(r,()=>t.provider),J(n,V(H,{get each(){return t.models},children:t=>(()=>{var n=cl(),r=n.firstChild,i=r.nextSibling,o=i.nextSibling;return n.$$click=()=>e.onPick(t),J(r,()=>a(t)?`✓`:``),J(i,()=>t.id),J(n,V(U,{get when(){return t.name},get children(){var e=ol();return J(e,()=>t.name),e}}),o),J(o,()=>t.provider),J(n,V(U,{get when(){return t.reasoning},get children(){return sl()}}),null),j(e=>{var r=!!a(t),i=Hl(t);return r!==e.e&&n.classList.toggle(`current`,e.e=r),i!==e.t&&q(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),n})()})}})),t})()]}})}function Xl(e){let[t,n]=k(),[r,i]=k([]),[a,o]=k(!1),[s,c]=k(),[l,u]=k(),[d,f]=k(),[p,m]=k(Gl()),[h,{mutate:g,refetch:_}]=ee(async()=>{n(void 0);try{return await X.settings()}catch(e){n(e instanceof Error?e.message:String(e));return}}),[v]=ee(h,async()=>{try{let{models:e}=await X.settingsModels();return e}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),y=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))}),[b]=ee(()=>({settings:h(),cwd:d()}),async({cwd:e})=>{if(!h())return[];try{let{agentTypes:t}=await X.agentTypes(e);return t}catch(e){return n(e instanceof Error?e.message:String(e)),[]}}),[x,{refetch:S}]=ee(async()=>{let{devices:e}=await X.devices();return e}),[C,w]=k(),T;function E(){T&&clearTimeout(T),T=void 0}function D(e){E();let t=Math.max(250,e??3e4)+100;T=setTimeout(()=>void O(),t)}async function O(){try{let e=await X.pairingCode();if(!e.enabled||!e.code){w(void 0),E();return}w(e),D(e.expiresInMs)}catch(e){console.warn(`pairing code unavailable`,e),w(void 0),E()}}let[A]=ee(async()=>{try{let{version:e}=await X.version();return e}catch{return}}),[M]=ee(async()=>{try{return await X.serverInfo()}catch{return}}),[P,F]=k(!1),[I,ne]=k(!1),[re,ie]=k();async function ae(){ie(void 0),ne(!0);try{await X.restartServer()}catch(e){ie(e instanceof Error?e.message:String(e)),ne(!1)}}async function oe(e){n(void 0),i([]),o(!1);try{let t=await X.saveSettings(e);g(t),i(t.warnings??[]),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){n(e instanceof Error?e.message:String(e)),await _()}}async function se(e,t){await oe({agentModels:{[e]:t}})}function R(e){return h()?.agentModels?.[e]??[]}async function ce(){typeof Notification>`u`||m(await Notification.requestPermission())}te(()=>void O()),L(E);let z=()=>e.store.auth();return(()=>{var n=hl(),i=n.firstChild,o=i.firstChild.nextSibling.nextSibling,m=o.firstChild.nextSibling,g=m.firstChild.nextSibling.firstChild.firstChild,_=m.nextSibling,w=_.firstChild.nextSibling,T=_.nextSibling,E=T.firstChild,D=E.firstChild.nextSibling,O=E.nextSibling.firstChild.firstChild,k=O.nextSibling,N=T.nextSibling.firstChild,ee=N.firstChild.nextSibling,te=N.nextSibling.firstChild,L=o.nextSibling,ne=L.firstChild.nextSibling.firstChild.firstChild.nextSibling,ie=L.nextSibling,le=ie.firstChild.nextSibling;return le.nextSibling,J(n,V(tt,{get store(){return e.store},active:`settings`}),i),J(i,V(U,{get when(){return t()},get children(){var e=ll();return J(e,t),e}}),o),J(i,V(U,{get when(){return r().length>0},get children(){var e=ul();return J(e,V(H,{get each(){return r()},children:e=>(()=>{var t=gl();return J(t,e),t})()})),e}}),o),J(i,V(U,{get when(){return a()},get children(){return dl()}}),o),J(i,V(U,{get when(){return h()},get fallback(){return(()=>{var e=_l();return J(e,()=>t()?`Settings could not be loaded — see the error above.`:`Loading settings…`),e})()},children:e=>[(()=>{var t=vl(),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`}),J(r,()=>Ul(e())),J(o,()=>Rl.join(` · `)),s.addEventListener(`change`,e=>oe({defaultThinkingLevel:e.currentTarget.value})),J(s,V(H,{each:Rl,children:e=>(()=>{var t=El();return t.value=e,J(t,e),t})()})),l.addEventListener(`change`,e=>oe({transport:e.currentTarget.value})),J(l,V(H,{get each(){return[...Bl]},children:e=>(()=>{var t=El();return t.value=e,J(t,e),t})()})),j(()=>s.value=e().defaultThinkingLevel??`off`),j(()=>l.value=e().transport??`sse`),t})(),(()=>{var t=bl();return t.firstChild.nextSibling,J(t,V(U,{get when(){return y().length>0},get children(){var e=yl(),t=e.firstChild.nextSibling.firstChild;return t.firstChild,t.addEventListener(`change`,e=>f(e.currentTarget.value||void 0)),J(t,V(H,{get each(){return y()},children:e=>(()=>{var t=El();return t.value=e,J(t,e),t})()}),null),j(()=>t.value=d()??``),e}}),null),J(t,V(U,{get when(){return(b()??[]).length>0},get fallback(){return Dl()},get children(){return V(H,{get each(){return b()??[]},children:t=>{let n=()=>e().agentModels?.[t.name]??[];return(()=>{var e=kl(),r=e.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling,s=o.nextSibling;return J(i,()=>t.name),J(a,()=>t.description),J(o,V(U,{get when(){return n().length>0},get fallback(){return Al()},get children(){return V(H,{get each(){return n()},children:(e,t)=>(()=>{var n=jl(),r=n.firstChild;return J(n,()=>t()+1,r),J(n,e,null),n})()})}})),s.$$click=()=>u(l()===t.name?void 0:t.name),J(s,()=>l()===t.name?`done`:`edit`),J(e,V(U,{get when(){return l()===t.name},get children(){var e=Ol(),r=e.firstChild;return J(e,V(U,{get when(){return n().length>0},get fallback(){return Ml()},get children(){return V(H,{get each(){return n()},children:(e,r)=>(()=>{var i=Nl(),a=i.firstChild,o=a.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling;return J(a,e),o.$$click=()=>void se(t.name,ql(n(),r(),-1)),s.$$click=()=>void se(t.name,ql(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=xl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return J(r,V(Jl,{get value(){return e().imageAutoResize!==!1},onChange:e=>oe({imageAutoResize:e})})),J(i,V(Jl,{get value(){return e().blockImages===!0},onChange:e=>oe({blockImages:e})})),t})(),(()=>{var t=Sl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling.firstChild,i=n.nextSibling.firstChild.nextSibling.firstChild;return r.addEventListener(`change`,e=>oe({steeringMode:e.currentTarget.value})),J(r,V(H,{get each(){return[...zl]},children:e=>(()=>{var t=El();return t.value=e,J(t,e),t})()})),i.addEventListener(`change`,e=>oe({followUpMode:e.currentTarget.value})),J(i,V(H,{get each(){return[...zl]},children:e=>(()=>{var t=El();return t.value=e,J(t,e),t})()})),j(()=>r.value=e().steeringMode??`all`),j(()=>i.value=e().followUpMode??`all`),t})(),(()=>{var t=Cl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling;return J(r,V(Jl,{get value(){return e().enableSkillCommands!==!1},onChange:e=>oe({enableSkillCommands:e})})),J(a,V(Jl,{get value(){return e().autoLoadNestedContext!==!1},onChange:e=>oe({autoLoadNestedContext:e})})),J(o,V(Jl,{get value(){return e().hideThinkingBlock===!0},onChange:e=>oe({hideThinkingBlock:e})})),t})(),(()=>{var t=wl(),n=t.firstChild.nextSibling,r=n.firstChild.nextSibling,i=n.nextSibling.firstChild.nextSibling;return J(r,V(Jl,{get value(){return e().compactionEnabled!==!1},onChange:e=>oe({compactionEnabled:e})})),J(i,V(Jl,{get value(){return e().retryEnabled!==!1},onChange:e=>oe({retryEnabled:e})})),t})(),Tl()]}),o),g.addEventListener(`change`,e=>co(e.currentTarget.checked)),J(w,V(H,{each:Ya,children:e=>(()=>{var t=Pl(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>lo(e,t.currentTarget.checked)),q(n,`id`,`pref-tool-expand-${e}`),J(r,e),j(()=>n.checked=uo(e)),t})()})),J(D,(()=>{var e=G(()=>p()===`denied`);return()=>e()?`blocked by browser settings — re-enable notifications in site permissions`:G(()=>p()===`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`:G(()=>p()===`ios-install`)()?`iOS notifications need the installed PWA — tap Share → Add to Home Screen, then open dreb from the home screen icon`:p()===`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)`})()),O.addEventListener(`change`,e=>{e.currentTarget.checked&&ce()}),J(k,()=>p()===`granted`?`enabled`:`enable notifications`),J(ee,()=>M()?.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`),te.$$click=()=>F(!0),J(te,()=>I()?`restarting…`:`restart`),J(o,V(U,{get when(){return re()},get children(){var e=ll();return J(e,re),e}}),null),J(ne,()=>z()?.mode===`local`?`local`:`host`),J(L,V(U,{get when(){return G(()=>!!C()?.enabled)()&&C()?.code},get children(){var e=fl(),t=e.firstChild.nextSibling.firstChild;return J(t,()=>C().code),e}}),null),J(L,V(H,{get each(){return x()??[]},children:e=>(()=>{var t=Fl(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=r.nextSibling.firstChild;return J(n,()=>e.device??e.id),J(r,()=>e.identity,i),J(r,()=>it(e.createdAt),null),a.$$click=async()=>{await X.unpair(e.id),await S()},t})()}),null),J(L,V(U,{get when(){return(x()??[]).length===0},get children(){return pl()}}),null),J(ie,(()=>{var e=G(()=>!!M()?.version);return()=>e()?` v${M().version}`:G(()=>!!A())()?` v${A()}`:``})(),le),J(ie,V(U,{get when(){return M()?.startedAt},get children(){return[` · server build, up `,G(()=>it(M().startedAt))]}}),null),J(n,V(U,{get when(){return P()},get children(){return V(nt,{title:`restart dashboard service?`,onDismiss:()=>F(!1),get actions(){return[(()=>{var e=Il();return e.$$click=()=>F(!1),e})(),(()=>{var e=Ll();return e.$$click=()=>{F(!1),ae()},e})()]},get children(){var e=ml();return e.firstChild.nextSibling.nextSibling,J(e,()=>M()?.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),J(n,V(U,{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"?h()?.defaultProvider&&h()?.defaultModel?[`${h().defaultProvider}/${h().defaultModel}`]:[]:R(t.agentName)};return V(Yl,{get title(){return t()},get models(){return v()??[]},get selected(){return n()},onClose:()=>c(void 0),onPick:t=>{let n=e();if(c(void 0),n.kind==="default"){oe({defaultProvider:t.provider,defaultModel:t.id});return}let r=Vl(t),i=R(n.agentName);i.includes(r)||se(n.agentName,[...i,r])}})}}),null),j(e=>{var t=p()===`denied`||p()===`unsupported`||p()===`ios-install`||p()===`insecure`,n=I();return t!==e.e&&(O.disabled=e.e=t),n!==e.t&&(te.disabled=e.t=n),e},{e:void 0,t:void 0}),j(()=>g.checked=so()),j(()=>O.checked=p()===`granted`),n})()}Me([`input`,`click`]);var Zl=K(`<p class=pair-error>`),Ql=K(`<div class=status-line><span class=working>● working`),$l=K(`<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.`),eu=K(`<p class=muted>`);function tu(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=Wa({scroller:()=>c});return te(()=>{let t=new AbortController;e.store.hydrateSubagent(e.sessionKey,e.agentId,t.signal).catch(e=>{t.signal.aborted&&fs(e)||s(e instanceof Error?e.message:String(e))}),L(()=>t.abort())}),M(()=>{e.store.revisions[e.sessionKey],u.notifyContentChanged()}),te(()=>{u.observeContent(l),u.observeViewport(c),c&&L(Ka(u,c,{keyboard:`window`}))}),L(()=>u.dispose()),(()=>{var t=$l(),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;J(s,a,null),J(u,()=>n()?.agentType??`unknown`,null),J(d,()=>n()?.taskSummary??e.agentId),J(f,V(U,{get when(){return n()?.status===`running`},get fallback(){return V($e,{get status(){return n()?.status===`failed`?`error`:`idle`},get label(){return n()?.status}})},get children(){return V($e,{status:`running`})}}));var _=c;typeof _==`function`?Ie(_,p):c=p;var v=l;return typeof v==`function`?Ie(v,m):l=m,J(m,V(U,{get when(){return o()},get children(){var e=Zl();return J(e,o),e}}),null),J(m,V(U,{get when(){return G(()=>!!r())()&&r().entries.length>0},get fallback(){return(()=>{var e=eu();return J(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 V(ds,{get entries(){return r().entries},get who(){return n()?.agentType??`agent`},userLabel:`task from parent`,get resetKey(){return`${e.sessionKey}:${e.agentId}`}})}}),null),J(h,V(U,{get when(){return r()?.streaming},get children(){return Ql()}}),g),j(()=>q(s,`href`,`#/session/${e.sessionKey}`)),t})()}function nu(e){return{key:e,entries:[],streaming:!1,compacting:!1,statusEntries:[],tasks:[],backgroundAgents:{},uiRequests:[],toasts:[],widgets:{above:[],below:[]},needsAttention:!1,subagents:{}}}function ru(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
75
+ `):``}function iu(e,t){let n=e.match(/<background-agent-complete>\n?([\s\S]*?)\n?<\/background-agent-complete>/)?.[1]?.trim();if(!n)return;let r=n.split(`
76
76
  `),i=r.findIndex(e=>e.trim().length>0),a,o=n;return i>=0&&/^Background agent .+\.$/.test(r[i]?.trim()??``)&&(a=r[i].trim(),o=r.slice(i+1).join(`
77
- `).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function eu(e){let t=Ql(e.content);return $l(t,e.timestamp)??{kind:`user`,text:t,timestamp:e.timestamp}}function tu(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push(eu(r));else if(r.role===`assistant`){let e=[],i=()=>{e.length!==0&&(t.push({kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp}),e=[])};if(Array.isArray(r.content)){for(let a of r.content)if(a.type===`text`&&typeof a.text==`string`)e.push({kind:`text`,text:a.text});else if(a.type===`thinking`&&typeof a.thinking==`string`)e.push({kind:`thinking`,text:a.thinking});else if(a.type===`toolCall`){i();let e=a,o={kind:`tool`,toolCallId:String(e.id??``),toolName:String(e.name??`tool`),args:e.arguments,status:`running`,resultText:``,startedAt:r.timestamp??Date.now()};n.set(o.toolCallId,o),t.push(o)}}i()}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));e&&(e.status=r.isError?`error`:`done`,e.resultText=Ql(r.content),e.details=r.details,e.endedAt=r.timestamp)}else if(r.role===`bashExecution`){let e=r;t.push({kind:`tool`,toolCallId:`bash-exec-${t.length}`,toolName:`bash (user)`,args:{command:e.command},status:`done`,resultText:e.output??``,startedAt:r.timestamp??Date.now()})}else if(r.role===`custom`){let e=r;t.push({kind:`custom`,tag:e.customType??`extension`,text:e.displayText??Ql(r.content)})}return t}var nu=0,ru=20;function iu(e){let t=e.toasts.length-ru;t>0&&e.toasts.splice(0,t)}function au(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function ou(e){let t=Object.values(e.backgroundAgents).filter(e=>e.status!==`running`).sort((e,t)=>au(e)-au(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 su(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}function cu(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function lu(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 uu(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=cu(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push(eu(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=cu(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=cu(e);if(t?.streaming){let e=tu([n]).find(e=>e.kind===`assistant`);e&&(t.blocks=e.blocks,t.model=e.model),t.streaming=!1}else t||e.entries.push(...tu([n]))}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=eu(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text||e.entries.push(r)}break}case`tool_execution_start`:e.entries.push({kind:`tool`,toolCallId:String(t.toolCallId),toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break;case`tool_execution_update`:{let n=lu(e,String(t.toolCallId));if(n){let e=t.partialResult;n.resultText=typeof e==`string`?e:e?.content?Ql(e.content):n.resultText}break}case`tool_execution_end`:{let n=lu(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;n.resultText=typeof e==`string`?e:e?.content?Ql(e.content):n.resultText,n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function du(e,t){switch(uu(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),e.lastError=void 0,e.suggestedCommand=void 0,e.uiRequests=[];break;case`agent_end`:e.workingText=void 0,e.workingSince=void 0,e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`&&e.key!==`paused`);break;case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,e.statusEntries.push({key:`compaction`,text:`compacting context…`,tone:`info`});break;case`auto_compaction_end`:{e.compacting=!1,e.statusEntries=e.statusEntries.filter(e=>e.key!==`compaction`);let n=t.result;n&&!t.aborted&&e.entries.push({kind:`summary`,label:`compaction`,text:n.summary??`context compacted`,tokensBefore:n.tokensBefore}),t.errorMessage&&e.statusEntries.push({key:`compaction-error`,text:String(t.errorMessage),tone:`error`});break}case`auto_retry_start`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`retrying (${t.attempt}/${t.maxAttempts}) — ${t.errorMessage}`,tone:`warning`});break;case`auto_retry_end`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),!t.success&&t.finalError&&(e.statusEntries.push({key:`error`,text:String(t.finalError),tone:`error`}),e.lastError=String(t.finalError));break;case`stream_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`stream dropped, retrying (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=cu(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=cu(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),ou(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),uu(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`){nu+=1;let n=t.notifyType??`info`;e.toasts.push({id:nu,text:String(t.message??``),tone:n}),iu(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`:nu+=1,e.toasts.push({id:nu,text:`extension error: ${t.error}`,tone:`error`}),iu(e);break;default:break}su(e)}function fu(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}var pu=Symbol(`store-raw`),mu=Symbol(`store-node`),hu=Symbol(`store-has`),gu=Symbol(`store-self`);function _u(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,Tu)}),!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 vu(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function yu(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[pu])return n;if(!vu(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=yu(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=yu(i,t))!==i&&(e[a]=r))}return e}function bu(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function xu(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 Su(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===mu?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function Cu(e){ne()&&xu(bu(e,mu),gu)()}function wu(e){return Cu(e),Reflect.ownKeys(e)}var Tu={get(e,t,n){if(t===pu)return e;if(t===p)return n;if(t===m)return Cu(e),n;let r=bu(e,mu),i=r[t],a=i?i():e[t];if(t===mu||t===hu||t===`__proto__`)return a;if(!i){let n=Object.getOwnPropertyDescriptor(e,t);ne()&&(typeof a!=`function`||Object.prototype.hasOwnProperty.call(e,t))&&!(n&&n.get)&&(a=xu(r,t,a)())}return vu(a)?_u(a):a},has(e,t){return t===pu||t===p||t===m||t===mu||t===hu||t===`__proto__`?!0:(ne()&&xu(bu(e,hu),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:wu,getOwnPropertyDescriptor:Su};function Eu(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[hu]&&e[hu][t]&&i!==void 0&&e[hu][t].$()):(e[t]=n,e[hu]&&e[hu][t]&&i===void 0&&e[hu][t].$());let o=bu(e,mu),s;if((s=xu(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=xu(o,`length`,a))&&s.$(e.length)}(s=o[gu])&&s.$()}function Du(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Ou(i)||Eu(e,i,t[i])}}function Ou(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function ku(e,t){if(typeof t==`function`&&(t=t(e)),t=yu(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&&Eu(e,n,r)}Eu(e,`length`,r)}else Du(e,t)}function Au(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&&Ou(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)Au(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&Au(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)Au(e,[r].concat(t),n);return}else if(t.length>1){Au(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=yu(a),r===void 0||vu(i)&&vu(a)&&!Array.isArray(a)?Du(i,a):Eu(e,r,a))}function ju(...[e,t]){let n=yu(e||{}),r=Array.isArray(n),i=_u(n);function a(...e){F(()=>{r&&e.length===1?ku(n,e[0]):Au(n,e)})}return[i,a]}var Mu=Symbol(`store-root`);function Nu(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Pu(e,t,n,r,i){if(Nu(n))return;let a=t[n];if(e===a)return;let o=Array.isArray(e);if(n!==Mu&&(!vu(e)||!vu(a)||o!==Array.isArray(a)||i&&e[i]!==a[i])){Eu(t,n,e);return}if(o){if(e.length&&a.length&&(!r||i&&e[0]&&e[0][i]!=null)){let t,n,o,s,c,l,u,d;for(o=0,s=Math.min(a.length,e.length);o<s&&(a[o]===e[o]||i&&a[o]&&e[o]&&a[o][i]&&a[o][i]===e[o][i]);o++)Pu(e[o],a,o,r,i);let f=Array(e.length),p=new Map;for(s=a.length-1,c=e.length-1;s>=o&&c>=o&&(a[s]===e[c]||i&&a[s]&&e[c]&&a[s][i]&&a[s][i]===e[c][i]);s--,c--)f[c]=a[s];if(o>c||o>s){for(n=o;n<=c;n++)Eu(a,n,e[n]);for(;n<e.length;n++)Eu(a,n,f[n]),Pu(e[n],a,n,r,i);a.length>e.length&&Eu(a,`length`,e.length);return}for(u=Array(c+1),n=c;n>=o;n--)l=e[n],d=i&&l?l[i]:l,t=p.get(d),u[n]=t===void 0?-1:t,p.set(d,n);for(t=o;t<=s;t++)l=a[t],d=i&&l?l[i]:l,n=p.get(d),n!==void 0&&n!==-1&&(f[n]=a[t],n=u[n],p.set(d,n));for(n=o;n<e.length;n++)n in f?(Eu(a,n,f[n]),Pu(e[n],a,n,r,i)):Eu(a,n,e[n])}else for(let t=0,n=e.length;t<n;t++)Pu(e[t],a,t,r,i);a.length>e.length&&Eu(a,`length`,e.length);return}let s=Object.keys(e);for(let t=0,n=s.length;t<n;t++)Nu(s[t])||Pu(e[s[t]],a,s[t],r,i);let c=Object.keys(a);for(let t=0,n=c.length;t<n;t++)e[c[t]]===void 0&&Eu(a,c[t],void 0)}function Fu(e,t={}){let{merge:n,key:r=`id`}=t,i=yu(e);return e=>{if(!vu(e)||!vu(i))return i;let t=Pu(i,{[Mu]:e},Mu,n,r);return t===void 0?e:t}}var Iu=new WeakMap,Lu={get(e,t){if(t===pu)return e;let n=e[t];if(t===p||t===m||t===mu||t===hu||t===`__proto__`)return n;let r;return vu(n)?Iu.get(n)||(Iu.set(n,r=new Proxy(n,Lu)),r):n},set(e,t,n){return Eu(e,t,yu(n)),!0},deleteProperty(e,t){return Eu(e,t,void 0,!0),!0}};function Ru(e){return t=>{if(vu(t)){let n;(n=Iu.get(t))||Iu.set(t,n=new Proxy(t,Lu)),e(n)}return t}}function zu(){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 Bu(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`}}function Vu(){let[e,t]=ju({}),[n,r]=ju({}),[i,a]=k(zu()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(!1),[m,h]=k([]),g=new Map,_=0,v=0;window.addEventListener(`hashchange`,()=>a(zu()));function y(e){window.location.hash=Bu(e)}function b(e){return n[e]??0}function x(e){return g.get(e)??0}function S(e){g.set(e,x(e)+1)}function C(e){return{revision:b(e),generation:x(e),epoch:_}}function w(e,t){return b(e)===t.revision&&x(e)===t.generation&&_===t.epoch}function T(e){r(e,b(e)+1)}function E(n){e[n]||t(n,Zl(n))}function D(e,n){E(e),t(e,Ru(n)),T(e)}function O(e){S(e),t(e,void 0),r(e,void 0),ms(e)}function A(){let e=zu();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function j(e,t=`info`){--v,h(n=>[...n,{id:v,text:e,tone:t}].slice(-20))}async function M(){try{s(await X.fleet()),l(void 0)}catch(e){throw l(e instanceof Error?e.message:String(e)),e}}function N(e){let n=e.event?.type;if(n===`dashboard_resync`)_+=1,t(Fu({})),r(Fu({}));else if(n===`runtime_removed`){if(e.key){let t=A()===e.key;O(e.key),t&&(j(`session ${e.key} was stopped`,`warning`),y({screen:`fleet`}))}}else e.key&&D(e.key,t=>du(t,e.event));(n===`agent_start`||n===`agent_end`||n===`background_agent_start`||n===`background_agent_end`||n===`runtime_removed`)&&M().catch(()=>{})}async function P(){await M().catch(()=>{});let e=i();try{e.screen===`session`?await L(e.key):e.screen===`subagent`&&(await L(e.key),await ne(e.key,e.agentId))}catch{}}let ee;async function F(){try{let e=await X.auth();d(e)}catch(e){d({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),y({screen:`pairing`});return}await M().catch(()=>{}),ee=ct({onEnvelope:N,onStatusChange:p,onResync:()=>{P().catch(()=>{})}})}function I(){ee?.()}function te(t){if(m().some(e=>e.id===t)){h(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){D(n,e=>fu(e,t));return}}async function L(e,t){let n=C(e),[r,i,a]=await Promise.allSettled([X.messages(e,t),X.backgroundAgents(e,t),X.runtime(e,t)]);!t?.aborted&&w(e,n)&&D(e,e=>{if(r.status===`fulfilled`&&(e.entries=tu(r.value.messages)),i.status===`fulfilled`){for(let t of i.value.agents)e.backgroundAgents[t.agentId]=t;ou(e)}if(a.status===`fulfilled`&&a.value?.state){let t=a.value.state;e.streaming=t.isStreaming,e.compacting=t.isCompacting,t.isStreaming&&!e.workingSince?(e.workingSince=Date.now(),e.workingText=e.workingText??`working`):t.isStreaming||(e.workingSince=void 0)}});let o=[r,i,a].find(e=>e.status===`rejected`);if(o?.status===`rejected`)throw o.reason instanceof Error?o.reason:Error(String(o.reason))}async function ne(e,t,n){let r=C(e),{agent:i,messages:a}=await X.subagentMessages(e,t,n);n?.aborted||!w(e,r)||D(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=tu(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:y,fleet:o,fleetError:c,refreshFleet:M,auth:u,connected:f,notices:m,start:F,stop:I,dismissToast:te,hydrateSession:L,hydrateSubagent:ne}}var Hu=5e3;function Uu(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),Hu)})]).finally(()=>{t&&clearTimeout(t)})}function Wu(){let e=Vu();te(()=>{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)}))}),L(()=>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),Uu(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[V(Oe,{get fallback(){return V(on,{store:e})},get children(){return[V(W,{get when(){return e.route().screen===`session`},get children(){return V(Jc,{store:e,get sessionKey(){return e.route().key}})}}),V(W,{get when(){return e.route().screen===`subagent`},get children(){return V(Xl,{store:e,get sessionKey(){return e.route().key},get agentId(){return e.route().agentId}})}}),V(W,{get when(){return e.route().screen===`files`},get children(){return V(wt,{store:e,get initialPath(){return e.route().path}})}}),V(W,{get when(){return e.route().screen===`settings`},get children(){return V(Gl,{store:e})}}),V(W,{get when(){return e.route().screen===`pairing`},get children(){return V(fn,{store:e})}})]}}),V(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}var Gu=document.getElementById(`root`);if(!Gu)throw Error(`dashboard: #root element missing from index.html`);je(()=>V(Wu,{}),Gu);
77
+ `).trim()||a),{kind:`agent-result`,text:o,header:a,raw:e,timestamp:t}}function au(e){let t=ru(e.content);return iu(t,e.timestamp)??{kind:`user`,text:t,timestamp:e.timestamp}}function ou(e){let t=[],n=new Map;for(let r of e)if(r.role===`user`)t.push(au(r));else if(r.role===`assistant`){let e=[],i=()=>{e.length!==0&&(t.push({kind:`assistant`,blocks:e,model:r.model,streaming:!1,timestamp:r.timestamp}),e=[])};if(Array.isArray(r.content)){for(let a of r.content)if(a.type===`text`&&typeof a.text==`string`)e.push({kind:`text`,text:a.text});else if(a.type===`thinking`&&typeof a.thinking==`string`)e.push({kind:`thinking`,text:a.thinking});else if(a.type===`toolCall`){i();let e=a,o={kind:`tool`,toolCallId:String(e.id??``),toolName:String(e.name??`tool`),args:e.arguments,status:`running`,resultText:``,startedAt:r.timestamp??Date.now()};n.set(o.toolCallId,o),t.push(o)}}i()}else if(r.role===`toolResult`){let e=n.get(String(r.toolCallId));e&&(e.status=r.isError?`error`:`done`,e.resultText=ru(r.content),e.details=r.details,e.endedAt=r.timestamp)}else if(r.role===`bashExecution`){let e=r;t.push({kind:`tool`,toolCallId:`bash-exec-${t.length}`,toolName:`bash (user)`,args:{command:e.command},status:`done`,resultText:e.output??``,startedAt:r.timestamp??Date.now()})}else if(r.role===`custom`){let e=r;t.push({kind:`custom`,tag:e.customType??`extension`,text:e.displayText??ru(r.content)})}return t}var su=0,cu=20;function lu(e){let t=e.toasts.length-cu;t>0&&e.toasts.splice(0,t)}function uu(e){let t=Date.parse(e.startedAt);return Number.isFinite(t)?t:0}function du(e){let t=Object.values(e.backgroundAgents).filter(e=>e.status!==`running`).sort((e,t)=>uu(e)-uu(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 fu(e){e.needsAttention=e.uiRequests.length>0||e.statusEntries.some(e=>e.tone===`error`)||!!e.suggestedCommand}function pu(e){for(let t=e.entries.length-1;t>=0;t--){let n=e.entries[t];if(n.kind===`assistant`)return n}}function mu(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 hu(e,t){switch(t.type){case`agent_start`:e.streaming=!0;break;case`agent_end`:{e.streaming=!1;let t=pu(e);t&&(t.streaming=!1);break}case`message_start`:{let n=t.message;n?.role===`user`?e.entries.push(au(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=pu(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=pu(e);if(t?.streaming){let e=ou([n]).find(e=>e.kind===`assistant`);e&&(t.blocks=e.blocks,t.model=e.model),t.streaming=!1}else t||e.entries.push(...ou([n]))}else if(n?.role===`user`){let t=e.entries[e.entries.length-1],r=au(n);r.kind===`agent-result`?t?.kind===`agent-result`&&t.raw===r.raw||e.entries.push(r):t?.kind===`user`&&t.text===r.text||e.entries.push(r)}break}case`tool_execution_start`:e.entries.push({kind:`tool`,toolCallId:String(t.toolCallId),toolName:String(t.toolName),args:t.args,status:`running`,resultText:``,startedAt:Date.now()});break;case`tool_execution_update`:{let n=mu(e,String(t.toolCallId));if(n){let e=t.partialResult;n.resultText=typeof e==`string`?e:e?.content?ru(e.content):n.resultText}break}case`tool_execution_end`:{let n=mu(e,String(t.toolCallId));if(n){n.status=t.isError?`error`:`done`;let e=t.result;n.resultText=typeof e==`string`?e:e?.content?ru(e.content):n.resultText,n.details=t.result?.details,n.endedAt=Date.now()}break}default:break}}function gu(e,t){switch(hu(e,t),t.type){case`agent_start`:e.workingText=`working`,e.workingSince=Date.now(),e.lastError=void 0,e.suggestedCommand=void 0,e.uiRequests=[];break;case`agent_end`:e.workingText=void 0,e.workingSince=void 0,e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`&&e.key!==`paused`);break;case`tool_execution_start`:e.workingText=`${t.toolName}`;break;case`auto_compaction_start`:e.compacting=!0,e.statusEntries.push({key:`compaction`,text:`compacting context…`,tone:`info`});break;case`auto_compaction_end`:{e.compacting=!1,e.statusEntries=e.statusEntries.filter(e=>e.key!==`compaction`);let n=t.result;n&&!t.aborted&&e.entries.push({kind:`summary`,label:`compaction`,text:n.summary??`context compacted`,tokensBefore:n.tokensBefore}),t.errorMessage&&e.statusEntries.push({key:`compaction-error`,text:String(t.errorMessage),tone:`error`});break}case`auto_retry_start`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`retrying (${t.attempt}/${t.maxAttempts}) — ${t.errorMessage}`,tone:`warning`});break;case`auto_retry_end`:e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),!t.success&&t.finalError&&(e.statusEntries.push({key:`error`,text:String(t.finalError),tone:`error`}),e.lastError=String(t.finalError));break;case`stream_retry`:{e.statusEntries=e.statusEntries.filter(e=>e.key!==`retry`),e.statusEntries.push({key:`retry`,text:`stream dropped, retrying (${t.attempt}/${t.maxAttempts})`,tone:`warning`});let n=pu(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=pu(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),du(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),hu(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`){su+=1;let n=t.notifyType??`info`;e.toasts.push({id:su,text:String(t.message??``),tone:n}),lu(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`:su+=1,e.toasts.push({id:su,text:`extension error: ${t.error}`,tone:`error`}),lu(e);break;default:break}fu(e)}function _u(e,t){e.toasts=e.toasts.filter(e=>e.id!==t)}var vu=Symbol(`store-raw`),yu=Symbol(`store-node`),bu=Symbol(`store-has`),xu=Symbol(`store-self`);function Su(e){let t=e[p];if(!t&&(Object.defineProperty(e,p,{value:t=new Proxy(e,Au)}),!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 Cu(e){let t;return typeof e==`object`&&!!e&&(e[p]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function wu(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[vu])return n;if(!Cu(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=wu(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=wu(i,t))!==i&&(e[a]=r))}return e}function Tu(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function Eu(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 Du(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===p||t===yu?n:(delete n.value,delete n.writable,n.get=()=>e[p][t],n)}function Ou(e){ne()&&Eu(Tu(e,yu),xu)()}function ku(e){return Ou(e),Reflect.ownKeys(e)}var Au={get(e,t,n){if(t===vu)return e;if(t===p)return n;if(t===m)return Ou(e),n;let r=Tu(e,yu),i=r[t],a=i?i():e[t];if(t===yu||t===bu||t===`__proto__`)return a;if(!i){let n=Object.getOwnPropertyDescriptor(e,t);ne()&&(typeof a!=`function`||Object.prototype.hasOwnProperty.call(e,t))&&!(n&&n.get)&&(a=Eu(r,t,a)())}return Cu(a)?Su(a):a},has(e,t){return t===vu||t===p||t===m||t===yu||t===bu||t===`__proto__`?!0:(ne()&&Eu(Tu(e,bu),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:ku,getOwnPropertyDescriptor:Du};function ju(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[bu]&&e[bu][t]&&i!==void 0&&e[bu][t].$()):(e[t]=n,e[bu]&&e[bu][t]&&i===void 0&&e[bu][t].$());let o=Tu(e,yu),s;if((s=Eu(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=Eu(o,`length`,a))&&s.$(e.length)}(s=o[xu])&&s.$()}function Mu(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Nu(i)||ju(e,i,t[i])}}function Nu(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Pu(e,t){if(typeof t==`function`&&(t=t(e)),t=wu(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&&ju(e,n,r)}ju(e,`length`,r)}else Mu(e,t)}function Fu(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&&Nu(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)Fu(e,[r[i]].concat(t),n);return}else if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&Fu(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)Fu(e,[r].concat(t),n);return}else if(t.length>1){Fu(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=wu(a),r===void 0||Cu(i)&&Cu(a)&&!Array.isArray(a)?Mu(i,a):ju(e,r,a))}function Iu(...[e,t]){let n=wu(e||{}),r=Array.isArray(n),i=Su(n);function a(...e){F(()=>{r&&e.length===1?Pu(n,e[0]):Fu(n,e)})}return[i,a]}var Lu=Symbol(`store-root`);function Ru(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function zu(e,t,n,r,i){if(Ru(n))return;let a=t[n];if(e===a)return;let o=Array.isArray(e);if(n!==Lu&&(!Cu(e)||!Cu(a)||o!==Array.isArray(a)||i&&e[i]!==a[i])){ju(t,n,e);return}if(o){if(e.length&&a.length&&(!r||i&&e[0]&&e[0][i]!=null)){let t,n,o,s,c,l,u,d;for(o=0,s=Math.min(a.length,e.length);o<s&&(a[o]===e[o]||i&&a[o]&&e[o]&&a[o][i]&&a[o][i]===e[o][i]);o++)zu(e[o],a,o,r,i);let f=Array(e.length),p=new Map;for(s=a.length-1,c=e.length-1;s>=o&&c>=o&&(a[s]===e[c]||i&&a[s]&&e[c]&&a[s][i]&&a[s][i]===e[c][i]);s--,c--)f[c]=a[s];if(o>c||o>s){for(n=o;n<=c;n++)ju(a,n,e[n]);for(;n<e.length;n++)ju(a,n,f[n]),zu(e[n],a,n,r,i);a.length>e.length&&ju(a,`length`,e.length);return}for(u=Array(c+1),n=c;n>=o;n--)l=e[n],d=i&&l?l[i]:l,t=p.get(d),u[n]=t===void 0?-1:t,p.set(d,n);for(t=o;t<=s;t++)l=a[t],d=i&&l?l[i]:l,n=p.get(d),n!==void 0&&n!==-1&&(f[n]=a[t],n=u[n],p.set(d,n));for(n=o;n<e.length;n++)n in f?(ju(a,n,f[n]),zu(e[n],a,n,r,i)):ju(a,n,e[n])}else for(let t=0,n=e.length;t<n;t++)zu(e[t],a,t,r,i);a.length>e.length&&ju(a,`length`,e.length);return}let s=Object.keys(e);for(let t=0,n=s.length;t<n;t++)Ru(s[t])||zu(e[s[t]],a,s[t],r,i);let c=Object.keys(a);for(let t=0,n=c.length;t<n;t++)e[c[t]]===void 0&&ju(a,c[t],void 0)}function Bu(e,t={}){let{merge:n,key:r=`id`}=t,i=wu(e);return e=>{if(!Cu(e)||!Cu(i))return i;let t=zu(i,{[Lu]:e},Lu,n,r);return t===void 0?e:t}}var Vu=new WeakMap,Hu={get(e,t){if(t===vu)return e;let n=e[t];if(t===p||t===m||t===yu||t===bu||t===`__proto__`)return n;let r;return Cu(n)?Vu.get(n)||(Vu.set(n,r=new Proxy(n,Hu)),r):n},set(e,t,n){return ju(e,t,wu(n)),!0},deleteProperty(e,t){return ju(e,t,void 0,!0),!0}};function Uu(e){return t=>{if(Cu(t)){let n;(n=Vu.get(t))||Vu.set(t,n=new Proxy(t,Hu)),e(n)}return t}}function Wu(){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 Gu(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`}}function Ku(){let[e,t]=Iu({}),[n,r]=Iu({}),[i,a]=k(Wu()),[o,s]=k({runtimes:[],diskSessions:[]}),[c,l]=k(),[u,d]=k(),[f,p]=k(!1),[m,h]=k([]),g=new Map,_=0,v=0;window.addEventListener(`hashchange`,()=>a(Wu()));function y(e){window.location.hash=Gu(e)}function b(e){return n[e]??0}function x(e){return g.get(e)??0}function S(e){g.set(e,x(e)+1)}function C(e){return{revision:b(e),generation:x(e),epoch:_}}function w(e,t){return b(e)===t.revision&&x(e)===t.generation&&_===t.epoch}function T(e){r(e,b(e)+1)}function E(n){e[n]||t(n,nu(n))}function D(e,n){E(e),t(e,Uu(n)),T(e)}function O(e){S(e),t(e,void 0),r(e,void 0),ys(e)}function A(){let e=Wu();return e.screen===`session`||e.screen===`subagent`?e.key:void 0}function j(e,t=`info`){--v,h(n=>[...n,{id:v,text:e,tone:t}].slice(-20))}async function M(){try{s(await X.fleet()),l(void 0)}catch(e){throw l(e instanceof Error?e.message:String(e)),e}}function N(e){let n=e.event?.type;if(n===`dashboard_resync`)_+=1,t(Bu({})),r(Bu({}));else if(n===`runtime_removed`){if(e.key){let t=A()===e.key;O(e.key),t&&(j(`session ${e.key} was stopped`,`warning`),y({screen:`fleet`}))}}else e.key&&D(e.key,t=>gu(t,e.event));(n===`agent_start`||n===`agent_end`||n===`background_agent_start`||n===`background_agent_end`||n===`runtime_removed`)&&M().catch(()=>{})}async function P(){await M().catch(()=>{});let e=i();try{e.screen===`session`?await L(e.key):e.screen===`subagent`&&(await L(e.key),await ne(e.key,e.agentId))}catch{}}let ee;async function F(){try{let e=await X.auth();d(e)}catch(e){d({mode:`remote`,needsPairing:e?.body?.needsPairing??!1,identity:e?.body?.identity,error:e?.message}),y({screen:`pairing`});return}await M().catch(()=>{}),ee=ct({onEnvelope:N,onStatusChange:p,onResync:()=>{P().catch(()=>{})}})}function I(){ee?.()}function te(t){if(m().some(e=>e.id===t)){h(e=>e.filter(e=>e.id!==t));return}for(let[n,r]of Object.entries(e))if(r.toasts.some(e=>e.id===t)){D(n,e=>_u(e,t));return}}async function L(e,t){let n=C(e),[r,i,a]=await Promise.allSettled([X.messages(e,t),X.backgroundAgents(e,t),X.runtime(e,t)]);!t?.aborted&&w(e,n)&&D(e,e=>{if(r.status===`fulfilled`&&(e.entries=ou(r.value.messages)),i.status===`fulfilled`){for(let t of i.value.agents)e.backgroundAgents[t.agentId]=t;du(e)}if(a.status===`fulfilled`&&a.value?.state){let t=a.value.state;e.streaming=t.isStreaming,e.compacting=t.isCompacting,t.isStreaming&&!e.workingSince?(e.workingSince=Date.now(),e.workingText=e.workingText??`working`):t.isStreaming||(e.workingSince=void 0)}});let o=[r,i,a].find(e=>e.status===`rejected`);if(o?.status===`rejected`)throw o.reason instanceof Error?o.reason:Error(String(o.reason))}async function ne(e,t,n){let r=C(e),{agent:i,messages:a}=await X.subagentMessages(e,t,n);n?.aborted||!w(e,r)||D(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=ou(a)),n.streaming=i.status===`running`})}return{sessions:e,revisions:n,route:i,navigate:y,fleet:o,fleetError:c,refreshFleet:M,auth:u,connected:f,notices:m,start:F,stop:I,dismissToast:te,hydrateSession:L,hydrateSubagent:ne}}var qu=5e3;function Ju(e){let t;return Promise.race([e,new Promise((e,n)=>{t=setTimeout(()=>n(Error(`service worker not ready`)),qu)})]).finally(()=>{t&&clearTimeout(t)})}function Yu(){let e=Ku();te(()=>{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)}))}),L(()=>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),Ju(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[V(Oe,{get fallback(){return V(on,{store:e})},get children(){return[V(W,{get when(){return e.route().screen===`session`},get children(){return V($c,{store:e,get sessionKey(){return e.route().key}})}}),V(W,{get when(){return e.route().screen===`subagent`},get children(){return V(tu,{store:e,get sessionKey(){return e.route().key},get agentId(){return e.route().agentId}})}}),V(W,{get when(){return e.route().screen===`files`},get children(){return V(wt,{store:e,get initialPath(){return e.route().path}})}}),V(W,{get when(){return e.route().screen===`settings`},get children(){return V(Xl,{store:e})}}),V(W,{get when(){return e.route().screen===`pairing`},get children(){return V(fn,{store:e})}})]}}),V(rt,{get toasts(){return i()},onDismiss:t=>e.dismissToast(t)})]}var Xu=document.getElementById(`root`);if(!Xu)throw Error(`dashboard: #root element missing from index.html`);je(()=>V(Yu,{}),Xu);
@@ -23,7 +23,7 @@
23
23
  href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;1,400&display=swap"
24
24
  rel="stylesheet"
25
25
  />
26
- <script type="module" crossorigin src="./assets/index-QfqUl5mR.js"></script>
26
+ <script type="module" crossorigin src="./assets/index-zwsAsNOu.js"></script>
27
27
  <link rel="stylesheet" crossorigin href="./assets/index-C2Pmdt07.css">
28
28
  </head>
29
29
  <body>
package/dist/static/sw.js CHANGED
@@ -14,7 +14,7 @@
14
14
  */
15
15
 
16
16
  // Replaced at build time; see vite.config.ts generateBundle hook.
17
- const SW_CACHE_VERSION = "2.38.1";
17
+ const SW_CACHE_VERSION = "2.40.0";
18
18
  const SHELL_CACHE = `dreb-dashboard-shell-v${SW_CACHE_VERSION}`;
19
19
 
20
20
  // Shell assets (HTML, JS, CSS) get a network-first strategy. The dashboard
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreb/dashboard",
3
- "version": "2.38.1",
3
+ "version": "2.40.0",
4
4
  "description": "Web dashboard for dreb — fleet overview, chat parity, subagent observability",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -37,9 +37,11 @@
37
37
  "@types/express": "^5.0.5",
38
38
  "@types/node": "^24.3.0",
39
39
  "dompurify": "^3.4.11",
40
+ "esbuild": "^0.27.4",
40
41
  "highlight.js": "^11.11.1",
41
42
  "jsdom": "^28.0.0",
42
43
  "marked": "^15.0.12",
44
+ "playwright": "^1.61.1",
43
45
  "solid-js": "^1.9.14",
44
46
  "typescript": "^5.9.2",
45
47
  "vite": "^8.1.3",