@timqi/pier 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/packages.js +22 -1
- package/dist/service.js +4 -2
- package/dist/tasks/routes.js +1 -0
- package/dist/web/public/assets/activity-DR5gTwpG.js +5 -0
- package/dist/web/public/assets/activity-DR5gTwpG.js.br +0 -0
- package/dist/web/public/assets/activity-DR5gTwpG.js.gz +0 -0
- package/dist/web/public/assets/boards-DBO30B54.js +1 -0
- package/dist/web/public/assets/boards-DBO30B54.js.br +0 -0
- package/dist/web/public/assets/boards-DBO30B54.js.gz +0 -0
- package/dist/web/public/assets/explorer-ZeVls41v.js +4 -0
- package/dist/web/public/assets/explorer-ZeVls41v.js.br +0 -0
- package/dist/web/public/assets/explorer-ZeVls41v.js.gz +0 -0
- package/dist/web/public/assets/index-DMq4awU8.css +2 -0
- package/dist/web/public/assets/index-DMq4awU8.css.br +0 -0
- package/dist/web/public/assets/index-DMq4awU8.css.gz +0 -0
- package/dist/web/public/assets/{index-BrNHu2qj.js → index-b8jrYmUt.js} +12 -12
- package/dist/web/public/assets/index-b8jrYmUt.js.br +0 -0
- package/dist/web/public/assets/index-b8jrYmUt.js.gz +0 -0
- package/dist/web/public/assets/runs-C0GaHPSU.js +1 -0
- package/dist/web/public/assets/runs-C0GaHPSU.js.br +0 -0
- package/dist/web/public/assets/runs-C0GaHPSU.js.gz +0 -0
- package/dist/web/public/assets/settings-avLEQHdY.js +5 -0
- package/dist/web/public/assets/settings-avLEQHdY.js.br +0 -0
- package/dist/web/public/assets/settings-avLEQHdY.js.gz +0 -0
- package/dist/web/public/assets/task-runs-BCbKn_zb.js +3 -0
- package/dist/web/public/assets/task-runs-BCbKn_zb.js.br +0 -0
- package/dist/web/public/assets/task-runs-BCbKn_zb.js.gz +0 -0
- package/dist/web/public/assets/tasks-CReIwEMw.js +4 -0
- package/dist/web/public/assets/tasks-CReIwEMw.js.br +0 -0
- package/dist/web/public/assets/tasks-CReIwEMw.js.gz +0 -0
- package/dist/web/public/icon-maskable-512.png +0 -0
- package/dist/web/public/icon.svg +3 -1
- package/dist/web/public/icon.svg.br +0 -0
- package/dist/web/public/icon.svg.gz +0 -0
- package/dist/web/public/index.html +3 -3
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/server.js +5 -4
- package/docs/deploy.md +1 -1
- package/package.json +1 -1
- package/dist/web/public/assets/activity-CrybM-E8.js +0 -5
- package/dist/web/public/assets/activity-CrybM-E8.js.br +0 -0
- package/dist/web/public/assets/activity-CrybM-E8.js.gz +0 -0
- package/dist/web/public/assets/boards-Cw7_6J6L.js +0 -1
- package/dist/web/public/assets/boards-Cw7_6J6L.js.br +0 -0
- package/dist/web/public/assets/boards-Cw7_6J6L.js.gz +0 -0
- package/dist/web/public/assets/explorer-DV066dUD.js +0 -4
- package/dist/web/public/assets/explorer-DV066dUD.js.br +0 -0
- package/dist/web/public/assets/explorer-DV066dUD.js.gz +0 -0
- package/dist/web/public/assets/index-BrNHu2qj.js.br +0 -0
- package/dist/web/public/assets/index-BrNHu2qj.js.gz +0 -0
- package/dist/web/public/assets/index-DLszkDUV.css +0 -2
- package/dist/web/public/assets/index-DLszkDUV.css.br +0 -0
- package/dist/web/public/assets/index-DLszkDUV.css.gz +0 -0
- package/dist/web/public/assets/runs-DDagTNaM.js +0 -1
- package/dist/web/public/assets/runs-DDagTNaM.js.br +0 -0
- package/dist/web/public/assets/runs-DDagTNaM.js.gz +0 -0
- package/dist/web/public/assets/settings-BEdSeXpm.js +0 -5
- package/dist/web/public/assets/settings-BEdSeXpm.js.br +0 -0
- package/dist/web/public/assets/settings-BEdSeXpm.js.gz +0 -0
- package/dist/web/public/assets/task-runs-BnMack9t.js +0 -3
- package/dist/web/public/assets/task-runs-BnMack9t.js.br +0 -0
- package/dist/web/public/assets/task-runs-BnMack9t.js.gz +0 -0
- package/dist/web/public/assets/tasks-BkW7YShZ.js +0 -4
- package/dist/web/public/assets/tasks-BkW7YShZ.js.br +0 -0
- package/dist/web/public/assets/tasks-BkW7YShZ.js.gz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tasks-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tasks-CReIwEMw.js","assets/task-runs-BCbKn_zb.js","assets/runs-C0GaHPSU.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},t=([e,n,r])=>{let i=document.createElementNS(`http://www.w3.org/2000/svg`,e);return Object.keys(n).forEach(e=>{i.setAttribute(e,String(n[e]))}),r?.length&&r.forEach(e=>{let n=t(e);i.appendChild(n)}),i},n=(n,r={})=>t([`svg`,{...e,...r},n]),r=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],i=[[`path`,{d:`M7 7h10v10`}],[`path`,{d:`M7 17 17 7`}]],a=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]],o=[[`path`,{d:`M20 6 9 17l-5-5`}]],s=[[`path`,{d:`m6 9 6 6 6-6`}]],c=[[`path`,{d:`m15 18-6-6 6-6`}]],l=[[`path`,{d:`m9 18 6-6-6-6`}]],u=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`}],[`path`,{d:`M12 17h.01`}]],d=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],f=[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`}],[`path`,{d:`m9 10-5 5 5 5`}]],p=[[`path`,{d:`M12 15V3`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}],[`path`,{d:`m7 10 5 5 5-5`}]],m=[[`circle`,{cx:`12`,cy:`12`,r:`1`}],[`circle`,{cx:`19`,cy:`12`,r:`1`}],[`circle`,{cx:`5`,cy:`12`,r:`1`}]],ee=[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],te=[[`path`,{d:`M12 10v6`}],[`path`,{d:`M9 13h6`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`}]],ne=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]],re=[[`path`,{d:`M13 5h8`}],[`path`,{d:`M13 12h8`}],[`path`,{d:`M13 19h8`}],[`path`,{d:`m3 17 2 2 4-4`}],[`rect`,{x:`3`,y:`4`,width:`6`,height:`6`,rx:`1`}]],h=[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`}]],ie=[[`path`,{d:`M4 5h16`}],[`path`,{d:`M4 12h16`}],[`path`,{d:`M4 19h16`}]],ae=[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`}]],oe=[[`path`,{d:`M5 12h14`}]],se=[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`}]],g=[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`}]],ce=[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`}]],le=[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`}],[`path`,{d:`m15 5 4 4`}]],ue=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],de=[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}]],fe=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],pe=[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],me=[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}]],he=[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M12 20v2`}],[`path`,{d:`m4.93 4.93 1.41 1.41`}],[`path`,{d:`m17.66 17.66 1.41 1.41`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`m6.34 17.66-1.41 1.41`}],[`path`,{d:`m19.07 4.93-1.41 1.41`}]],ge=[[`path`,{d:`M9 14 4 9l5-5`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`}]],_e=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],_=(e,t=`h-3.5 w-3.5`)=>n(e,{class:`flex-none ${t}`,"aria-hidden":`true`,focusable:`false`});function ve(){let e={ArrowUp:a,ChevronLeft:c,ChevronRight:l,Clock:d,Ellipsis:m,LayoutDashboard:ne,ListTodo:re,Menu:ie,Plus:ue,RotateCw:de,Search:fe,Settings:pe,Square:me,Undo2:ge,X:_e};for(let t of document.querySelectorAll(`[data-icon]`)){let n=e[t.dataset.icon];if(!n)throw Error(`Unknown shell icon: ${t.dataset.icon}`);t.replaceChildren(_(n,`h-full w-full`))}let t=_(s);t.setAttribute(`stroke`,`#737373`),document.documentElement.style.setProperty(`--select-chevron`,`url("data:image/svg+xml,${encodeURIComponent(t.outerHTML)}")`)}var ye=/[\u201c\u201d"\u2018\u2019'()\uff08\uff09\u300c\u300d\u300e\u300f\u3010\u3011\u300a\u300b\u3008\u3009[\]]/;function be(e){let t=[],n=e=>`\uE010${t.push(e)-1}\uE011`,r=e.replace(/```[\s\S]*?```/g,e=>n(e)).replace(/`[^`\n]+`/g,e=>n(e));return r=r.replace(/\*\*(\S|\S[\s\S]*?\S)\*\*/g,(e,t)=>{let n=``,r=``,i=t;for(;i.length>1&&ye.test(i[0]);)n+=i[0],i=i.slice(1);for(;i.length>1&&ye.test(i.at(-1));)r=i.at(-1)+r,i=i.slice(0,-1);return n||r?`${n}**${i}**${r}`:e}),r.replace(/\uE010(\d+)\uE011/g,(e,n)=>t[Number(n)]??``)}var v=e=>!e.text.trim()&&e.suggestions.length===0,xe=e=>e===`xhigh`?`Extra high`:e[0].toUpperCase()+e.slice(1),Se=e=>{if(e<1e3)return String(e);let t=e/1e3;return t>=9.95?`${Math.round(t)}K`:`${t.toFixed(1)}K`},Ce=/(?:^|\n)[ \t]*-{3,}[ \t]*\r?\n((?:[ \t]*\[[^\]\r\n]+\][ \t]*(?:[||][ \t]*)?)+)\s*$/,we=/\[([^\]\r\n]+)\]/g,Te=5,Ee=String.raw`[\u200B-\u200D\u2060\uFEFF]*`,De=e=>e.split(``).join(Ee),Oe=RegExp(`${De(`<silent>`)}([\\s\\S]*?)${De(`</silent>`)}`,`gi`),ke=RegExp(`<(\\/?)${De(`silent>`)}`,`gi`);function y(e){let t=[...e.matchAll(Oe)].map(e=>(e[1]??``).trim()).filter(Boolean);return t.length?t.join(` · `):void 0}function Ae(e,t){let n=b(e),r=y(e),i=Ce.exec(n);if(!i?.[1])return{text:n,suggestions:[],meta:t,silence:r};let a=[...i[1].matchAll(we)].map(e=>(e[1]??``).trim()).filter(Boolean).slice(0,Te);return a.length?{text:n.slice(0,i.index).trimEnd(),suggestions:a,meta:t,silence:r}:{text:n,suggestions:[],meta:t,silence:r}}var b=e=>be(e.replace(Oe,``).trim()),je=/^(?:\s|[-*+>]|\d+[.)])/;function Me(e,t=0){let n=e.lastIndexOf(`
|
|
3
3
|
`)+1,r=``,i=!1,a=t,o=-1,s=``;for(let c=t;c<n;){let t=e.indexOf(`
|
|
4
4
|
`,c),n=e.slice(c,t);c=t+1;let l=/^\s*(`{3,}|~{3,})(.*)$/.exec(n);if(!r&&!i&&!n.trim()){o<0&&s&&(o=c);continue}!r&&!i&&o>=0&&!(je.test(s)&&je.test(n))&&(a=o);let u=l?.[1]??``;if(!r&&u&&!i?r=u:r&&u[0]===r[0]&&u.length>=r.length&&!l?.[2]?.trim()&&(r=``),!r&&(!u||i))for(let e of n.matchAll(ke))i=!e[1];o=-1,s=n}return a}var Ne=String.raw`(?<when>(?:\d{4}-\d{2}-\d{2} )?\d{1,2}:\d{2})`,Pe=new RegExp(String.raw`^\[(?:(?<name>[^\n[\]<>]*)<(?<id>[^\n[\]<>]+)>)? ?${Ne}? ?(?<where>[a-z]+:[^\s[\]<>]+)?\]\n`),Fe=new RegExp(String.raw`^\[(?<name>[^\n[\]<>]*?) ${Ne}(?: (?<where>[a-z]+))?\]\n`);function Ie(e){let t=Pe.exec(e),{id:n,when:r,where:i}=t?.groups??{},a=n||r||i?t:Fe.exec(e);return a?.groups?{...a.groups.name?{name:a.groups.name}:{},...a.groups.id?{id:a.groups.id}:{},...a.groups.when?{when:a.groups.when}:{},...a.groups.where?{where:a.groups.where}:{},text:e.slice(a[0].length)}:{text:e}}var Le=/(?:\n\[[^\]\n]*(?:\]\(\s*<?file:\/\/[^\n]*|$))+$/,Re=/^\s*`[^`\n]{40,}`\s+(\S[\s\S]*)$/;function ze(e){if(!e)return e;let{text:t}=Ie(e);return t===e?e:t.replace(Le,``).replace(Re,`$1`).replace(/\s+/g,` `).trim()||e}var Be=e=>[...new Set([...e].sort((e,t)=>t.createdAt-e.createdAt).map(e=>e.cwd))];function Ve(e){let t=Be(e),n=new Set(t);return t.filter(e=>{let t=e.lastIndexOf(`/`),r=e.indexOf(`.`,t+2);return r<0||!n.has(e.slice(0,r))})}function He(e){let t,n=!1;return()=>(n=!0,t??=(async()=>{for(;n;)n=!1,await e()})().finally(()=>{t=void 0}))}var Ue=(e,t)=>({method:t,headers:{"content-type":`application/json`},body:JSON.stringify(e)}),x=(e,t,n=`POST`)=>fetch(e,Ue(t,n)),We=(e,t,n,r=`POST`)=>C(e,n,Ue(t,r));async function S(e,t){return(await e.json().catch(()=>({}))).error??`${t} (${e.status})`}async function C(e,t,n){let r;try{r=await fetch(e,n)}catch(e){return{ok:!1,error:`${t}: ${String(e)}`}}if(!r.ok)return{ok:!1,error:await S(r,t)};try{return{ok:!0,value:await r.json()}}catch(e){return{ok:!1,error:`${t}: ${String(e)}`}}}async function Ge(e,t,n){let r=await C(e,t,n);if(!r.ok)throw Error(r.error);return r.value}async function Ke(e,t,n){try{let r=await fetch(e,{method:t});return r.ok?void 0:await S(r,n)}catch(e){return`${n}: ${String(e)}`}}function qe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Je(e){if(Array.isArray(e))return e}function Ye(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function Xe(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
@@ -67,19 +67,19 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
67
67
|
${e}</tr>
|
|
68
68
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
69
69
|
`}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>${jr(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=Mr(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+jr(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=Mr(e);if(i===null)return jr(n);e=i;let a=`<img src="${e}" alt="${jr(n)}"`;return t&&(a+=` title="${jr(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:jr(e.text)}},Ur=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``}checkbox({raw:e}){return e}},Wr=class e{options;renderer;textRenderer;constructor(e){this.options=e||mn,this.options.renderer=this.options.renderer||new Hr,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Ur}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;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`,`checkbox`,`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`checkbox`:n+=t.checkbox(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}},Gr=class{options;block;constructor(e){this.options=e||mn}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?Vr.lex:Vr.lexInline}provideParser(e=this.block){return e?Wr.parse:Wr.parseInline}},Kr=new class{defaults=pn();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=Wr;Renderer=Hr;TextRenderer=Ur;Lexer=Vr;Tokenizer=Br;Hooks=Gr;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 Hr(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 Br(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 Gr;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];t[r]=Gr.passThroughHooks.has(n)?e=>{if(this.defaults.async&&Gr.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();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 Vr.lex(e,t??this.defaults)}parser(e,t){return Wr.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(typeof t>`u`||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`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?Vr.lex:Vr.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?Wr.parse:Wr.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?Vr.lex:Vr.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?Wr.parse:Wr.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
70
|
-
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+jr(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function F(e,t){return Kr.parse(e,t)}F.options=F.setOptions=function(e){return Kr.setOptions(e),F.defaults=Kr.defaults,hn(F.defaults),F},F.getDefaults=pn,F.defaults=mn;function qr(...e){return Kr.use(...e),F.defaults=Kr.defaults,hn(F.defaults),F}F.use=qr,F.walkTokens=function(e,t){return Kr.walkTokens(e,t)},F.parseInline=Kr.parseInline,F.Parser=Wr,F.parser=Wr.parse,F.Renderer=Hr,F.TextRenderer=Ur,F.Lexer=Vr,F.lexer=Vr.lex,F.Tokenizer=Br,F.Hooks=Gr,F.parse=F,F.options,F.setOptions,F.walkTokens,F.parseInline,Wr.parse,Vr.lex;var I=e=>{let t=document.querySelector(e);if(!t)throw Error(`missing element: ${e}`);return t};function Jr(e){let t=Math.round((Date.now()-e)/6e4);return t<1?`now`:t<60?`${t}m`:t<1440?`${Math.round(t/60)}h`:`${Math.round(t/1440)}d`}var Yr=e=>{let t=Jr(e);return t===`now`?`just now`:`${t} ago`};function L(e,t,...n){let r=document.createElement(e);return t&&(r.className=t),r.append(...n),r}var Xr=e=>e.split(`/`).filter(Boolean).pop()??e,Zr=e=>`New session in ${Xr(e)}`;function Qr(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function $r(e){let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function ei(e,t,n){return{visible:!1,show(n,r){this.visible=!0,e.classList.remove(`hidden`),e.classList.add(`flex`),t(n,r)},hide(){n?.(),this.visible=!1,e.classList.add(`hidden`),e.classList.remove(`flex`)}}}function ti(e){let t=L(`span`,`help`);return t.innerHTML=fn.sanitize(F.parseInline(e,{async:!1})),ni(t),t}function ni(e){for(let t of e.querySelectorAll(`a`))(t.getAttribute(`href`)??``).startsWith(`#`)||(t.target=`_blank`,t.rel=`noreferrer`)}async function ri(e){if(navigator.clipboard)return navigator.clipboard.writeText(e);let t=document.createElement(`textarea`);t.value=e,t.className=`fixed opacity-0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);if(t.remove(),!n)throw Error(`clipboard unavailable`)}function ii(e,t){let n=L(`button`,e,`Copy`);n.title=`Copy to clipboard`;let r;return n.onclick=async e=>{e.stopPropagation(),n.textContent=await ri(t()).then(()=>`Copied`,()=>`Failed`),clearTimeout(r),r=setTimeout(()=>n.textContent=`Copy`,1200)},n}var ai=450,oi=8,si=700;function ci(e,t){let n,r,i={x:0,y:0},a=!1,o=()=>clearTimeout(n),s=t=>{e.classList.remove(`bg-emerald-100`,`bg-red-100`),e.classList.add(t),clearTimeout(r),r=setTimeout(()=>e.classList.remove(t),si)};e.addEventListener(`pointerdown`,e=>{a=!1,i={x:e.clientX,y:e.clientY},o(),n=setTimeout(()=>{a=!0,ri(t()).then(()=>s(`bg-emerald-100`),()=>s(`bg-red-100`))},ai)}),e.addEventListener(`pointermove`,e=>{Math.hypot(e.clientX-i.x,e.clientY-i.y)>oi&&o()});for(let t of[`pointerup`,`pointercancel`,`pointerleave`])e.addEventListener(t,o);e.addEventListener(`click`,e=>{a&&(e.preventDefault(),e.stopImmediatePropagation())})}function li(e,t){let n=document.createElement(`details`);n.className=e;let r=L(`summary`,`flex cursor-pointer select-none items-center gap-1.5`);return r.append(_(l,`chev h-3 w-3`),...t),n.append(r),{el:n,summary:r}}var ui=(e,t=!1)=>di(e,`${t?`btn btn-primary`:`btn`} text-[12.5px]`),di=(e,t=``)=>{let n=L(`button`,t,e);return n.type=`button`,n},fi=e=>L(`span`,`mr-1 flex-none font-medium max-md:hidden`,e),pi=(...e)=>L(`div`,`toolbar flex min-h-10 flex-none flex-wrap items-center gap-2 px-4 py-2`,...e);function mi(e,t,n){let r=L(`div`,`inline-flex flex-none items-center gap-0.5 rounded-full bg-neutral-100 p-1`);for(let[i,a]of e){let e=a===t,
|
|
70
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+jr(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function F(e,t){return Kr.parse(e,t)}F.options=F.setOptions=function(e){return Kr.setOptions(e),F.defaults=Kr.defaults,hn(F.defaults),F},F.getDefaults=pn,F.defaults=mn;function qr(...e){return Kr.use(...e),F.defaults=Kr.defaults,hn(F.defaults),F}F.use=qr,F.walkTokens=function(e,t){return Kr.walkTokens(e,t)},F.parseInline=Kr.parseInline,F.Parser=Wr,F.parser=Wr.parse,F.Renderer=Hr,F.TextRenderer=Ur,F.Lexer=Vr,F.lexer=Vr.lex,F.Tokenizer=Br,F.Hooks=Gr,F.parse=F,F.options,F.setOptions,F.walkTokens,F.parseInline,Wr.parse,Vr.lex;var I=e=>{let t=document.querySelector(e);if(!t)throw Error(`missing element: ${e}`);return t};function Jr(e){let t=Math.round((Date.now()-e)/6e4);return t<1?`now`:t<60?`${t}m`:t<1440?`${Math.round(t/60)}h`:`${Math.round(t/1440)}d`}var Yr=e=>{let t=Jr(e);return t===`now`?`just now`:`${t} ago`};function L(e,t,...n){let r=document.createElement(e);return t&&(r.className=t),r.append(...n),r}var Xr=e=>e.split(`/`).filter(Boolean).pop()??e,Zr=e=>`New session in ${Xr(e)}`;function Qr(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function $r(e){let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function ei(e,t,n){return{visible:!1,show(n,r){this.visible=!0,e.classList.remove(`hidden`),e.classList.add(`flex`),t(n,r)},hide(){n?.(),this.visible=!1,e.classList.add(`hidden`),e.classList.remove(`flex`)}}}function ti(e){let t=L(`span`,`help`);return t.innerHTML=fn.sanitize(F.parseInline(e,{async:!1})),ni(t),t}function ni(e){for(let t of e.querySelectorAll(`a`))(t.getAttribute(`href`)??``).startsWith(`#`)||(t.target=`_blank`,t.rel=`noreferrer`)}async function ri(e){if(navigator.clipboard)return navigator.clipboard.writeText(e);let t=document.createElement(`textarea`);t.value=e,t.className=`fixed opacity-0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);if(t.remove(),!n)throw Error(`clipboard unavailable`)}function ii(e,t){let n=L(`button`,e,`Copy`);n.title=`Copy to clipboard`;let r;return n.onclick=async e=>{e.stopPropagation(),n.textContent=await ri(t()).then(()=>`Copied`,()=>`Failed`),clearTimeout(r),r=setTimeout(()=>n.textContent=`Copy`,1200)},n}var ai=450,oi=8,si=700;function ci(e,t){let n,r,i={x:0,y:0},a=!1,o=()=>clearTimeout(n),s=t=>{e.classList.remove(`bg-emerald-100`,`bg-red-100`),e.classList.add(t),clearTimeout(r),r=setTimeout(()=>e.classList.remove(t),si)};e.addEventListener(`pointerdown`,e=>{a=!1,i={x:e.clientX,y:e.clientY},o(),n=setTimeout(()=>{a=!0,ri(t()).then(()=>s(`bg-emerald-100`),()=>s(`bg-red-100`))},ai)}),e.addEventListener(`pointermove`,e=>{Math.hypot(e.clientX-i.x,e.clientY-i.y)>oi&&o()});for(let t of[`pointerup`,`pointercancel`,`pointerleave`])e.addEventListener(t,o);e.addEventListener(`click`,e=>{a&&(e.preventDefault(),e.stopImmediatePropagation())})}function li(e,t){let n=document.createElement(`details`);n.className=e;let r=L(`summary`,`flex cursor-pointer select-none items-center gap-1.5`);return r.append(_(l,`chev h-3 w-3`),...t),n.append(r),{el:n,summary:r}}var ui=(e,t=!1)=>di(e,`${t?`btn btn-primary`:`btn`} text-[12.5px]`),di=(e,t=``)=>{let n=L(`button`,t,e);return n.type=`button`,n},fi=e=>L(`span`,`mr-1 flex-none font-medium max-md:hidden`,e),pi=(...e)=>L(`div`,`toolbar flex min-h-10 flex-none flex-wrap items-center gap-2 px-4 py-2`,...e);function mi(e,t,n){let r=L(`div`,`inline-flex flex-none items-center gap-0.5 rounded-full bg-neutral-100 p-1`);for(let[i,a,o]of e){let e=a===t,s=di(o?``:i,`cursor-pointer whitespace-nowrap rounded-full text-[12px] transition-colors ${o?`flex h-7 w-7 items-center justify-center`:`px-3 py-1`} ${e?`bg-white font-medium text-neutral-800 shadow-xs`:`text-neutral-500 hover:text-neutral-700`}`);o&&(s.append(_(o,`h-4 w-4`)),s.setAttribute(`aria-label`,i),s.title=i),s.setAttribute(`aria-pressed`,String(e)),s.onclick=()=>n(a),r.append(s)}return r}function hi(e,t,n){let r=di(e,`flex cursor-pointer items-center gap-1.5 rounded-full px-3.5 py-2 text-[13px] transition-colors ${t?`bg-indigo-50 font-medium text-indigo-700 ring-1 ring-indigo-200/70`:`text-neutral-600 hover:bg-neutral-100`}`);return r.onclick=n,r}var gi=`rounded-3xl border border-neutral-200 bg-white shadow-sm`,_i=`border-b border-neutral-200/70 bg-neutral-50/50`,vi=`${gi} flex flex-col overflow-hidden`,yi=`${_i} flex flex-none items-center`;function bi(e,t,...n){let r=L(`section`,gi),i=L(`div`,`rounded-t-3xl ${_i} px-5 py-4`);return i.append(L(`h2`,`text-[14px] font-semibold text-neutral-800`,e)),t&&i.append(L(`p`,`mt-1 text-[12px] leading-normal text-neutral-500`,t)),r.append(i,L(`div`,`flex flex-col gap-4 px-5 py-5`,...n)),r}function xi(e,t,n={}){let r=L(`div`,`flex flex-col gap-1.5`),i=L(`div`,`flex items-center gap-1.5`,L(`span`,`field-label`,e));return n.help&&i.append(n.help),r.append(i,t),n.hint&&r.append(L(`span`,`text-[11.5px] leading-snug text-neutral-400`,n.hint)),r}var Si=`w-full rounded-xl border border-neutral-200 bg-neutral-50/60 px-3 py-2.5 text-[12.5px] transition-colors placeholder:text-neutral-400 hover:border-neutral-300 focus:border-indigo-400 focus:ring-2 focus:ring-indigo-100 focus:outline-none`,Ci=`${Si} cursor-pointer truncate text-left hover:bg-neutral-50`,wi=(e,t,n,r=!1)=>{let i=document.createElement(`input`);return i.className=r?`${Si} font-mono`:Si,i.value=e,i.placeholder=t,i.oninput=()=>n(i.value),i},Ti=(e=``,t=`text`)=>{let n=document.createElement(`input`);return n.type=t,n.className=Si,n.value=e,n},Ei=(e,t)=>{let n=document.createElement(`select`);return n.className=`${Si} select`,n.append(...e.map(([e,t])=>new Option(e,t))),n.value=t,n},Di=(e=``,t=4)=>{let n=document.createElement(`textarea`);return n.className=`${Si} resize-y font-mono`,n.value=e,n.rows=t,n.spellcheck=!1,n};function Oi(e,t,n,r,i){let a=document.createElement(`input`);a.type=`checkbox`,a.className=`peer sr-only`,a.checked=n,a.onchange=()=>r(a.checked);let o=L(`span`,`relative h-4 w-7 flex-none rounded-full bg-neutral-300 transition-colors after:absolute after:left-0.5 after:top-0.5 after:h-3 after:w-3 after:rounded-full after:bg-white dark:after:bg-neutral-950 after:shadow-sm after:transition-transform peer-checked:bg-indigo-600 peer-checked:after:translate-x-3 peer-focus-visible:ring-2 peer-focus-visible:ring-indigo-200 peer-disabled:cursor-not-allowed peer-disabled:opacity-45`),s=L(`label`,`flex cursor-pointer gap-2.5 ${e?`items-start`:`items-center`}`);if(s.append(a,o),e){let n=L(`span`,`flex items-center gap-1.5`,L(`span`,`text-[13px] text-neutral-700`,e));i&&n.append(i);let r=L(`span`,`flex min-w-0 flex-col`,n);t&&r.append(L(`span`,`text-[11.5px] leading-snug text-neutral-400`,t)),s.append(r)}return s}var ki={idle:`text-neutral-400`,saving:`text-neutral-400`,saved:`text-green-700`,failed:`text-red-600`};function Ai(e,t,n){e.className=`text-[11.5px] ${ki[t]}`,e.textContent=n}var ji=(e,t,n)=>L(`span`,`inline-flex flex-none items-center gap-1 rounded-full px-1.5 py-px text-[10px] font-medium uppercase tracking-wide ring-1 ${t}`,...n?[L(`span`,`inline-block h-1.5 w-1.5 flex-none rounded-full ${n}`)]:[],e),Mi=e=>L(`p`,`rounded-lg border border-dashed border-neutral-200 px-3 py-4 text-center text-[12.5px] text-neutral-400`,e);function Ni(e,t){let n=L(`span`,`group relative inline-flex`),r=di(``,`flex h-4 w-4 cursor-help items-center justify-center text-neutral-400 transition-colors group-hover:text-indigo-500`);r.append(_(u,`h-full w-full`)),r.setAttribute(`aria-label`,e);let i=L(`span`,`absolute left-0 top-full z-20 hidden w-[min(27rem,calc(100vw-3rem))] pt-1.5 group-hover:block`),a=L(`span`,`flex flex-col gap-2 rounded-xl border border-neutral-200 bg-white p-3.5 text-[12px] font-normal normal-case leading-[1.55] tracking-normal text-neutral-600 shadow-xl`);a.append(L(`span`,`text-[12.5px] font-semibold text-neutral-800`,e));let o=L(`ol`,`flex list-decimal flex-col gap-1.5 pl-4`);for(let e of t){let t=L(`li`,`marker:text-neutral-400`);t.append(typeof e==`string`?ti(e):e),o.append(t)}return a.append(o),i.append(a),r.onclick=()=>{let e=i.classList.contains(`hidden`);i.classList.toggle(`hidden`,!e),i.classList.toggle(`block`,e),r.classList.toggle(`text-indigo-500`,e)},n.append(r,i),n}var Pi=(e,t)=>L(`span`,`flex flex-col gap-1`,ti(e),t),Fi=e=>`[${e.split(`/`).pop()??`file`}](file://${encodeURI(e).replace(/\(/g,`%28`).replace(/\)/g,`%29`)})`,Ii=/^ {0,3}(`{3,}|~{3,})/;function Li(e){let t=[],n,r=0;for(let i of e.split(`
|
|
71
71
|
`)){let e=Ii.exec(i)?.[1];if(n!==void 0)t.push([r,r+i.length]),e&&e[0]===n[0]&&e.length>=n.length&&(n=void 0);else if(e)n=e,t.push([r,r+i.length]);else{let e=[...i.matchAll(/`+/g)];for(let n=0;n<e.length;n++){let i=e[n],a=n+1;for(;a<e.length&&e[a][0].length!==i[0].length;)a++;if(a===e.length)break;t.push([r+i.index,r+e[a].index+e[a][0].length]),n=a}}r+=i.length+1}return t}function Ri(e,t,n){let r=Li(e),i=``,a=0;for(let o of e.matchAll(t)){let t=o.index,s=t+o[0].length;r.some(([e,n])=>t<n&&s>e)||(i+=e.slice(a,t)+n(o),a=s)}return i+e.slice(a)}var zi=/^\[[^\]\n]*\]\(\s*<?file:\/\/(\/[^)>\s]*)>?\s*\)$/;function Bi(e){let t=e.split(`
|
|
72
72
|
`),n=t.length;for(;n>0&&zi.test(t[n-1].trim());)n--;let r=t.slice(n).map(e=>{let t=zi.exec(e.trim())[1];try{return decodeURIComponent(t)}catch{return t}});return{text:t.slice(0,n).join(`
|
|
73
73
|
`).trimEnd(),paths:r}}var Vi=`modulepreload`,Hi=function(e){return`/`+e},Ui={},Wi=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Hi(t,n),t=s(t),t in Ui)return;Ui[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Vi,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Gi,Ki;function qi(){return Ki??=Wi(()=>import(`./hljs-tWqyD59G.js`).then(e=>Gi=e.default,e=>{console.warn(`highlighting unavailable — code stays plain text`,e)}),[]),Ki}async function Ji(e){let t=await qi();if(t)for(let n of e.querySelectorAll(`pre code[class]`)){let e=/(?:language|lang)-(\S+)/.exec(n.className)?.[1]?.toLowerCase();!e||!t.getLanguage(e)||(n.innerHTML=t.highlight(n.textContent??``,{language:e}).value)}}var Yi={ts:`typescript`,tsx:`typescript`,mts:`typescript`,cts:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,py:`python`,rs:`rust`,sh:`bash`,zsh:`bash`,md:`markdown`,yml:`yaml`,html:`xml`,htm:`xml`,svg:`xml`,patch:`diff`};async function Xi(e){let t=await qi(),n=e.split(`.`).pop()?.toLowerCase()??``,r=Yi[n]??n;return t?.getLanguage(r)?r:null}function Zi(e,t){let n=document.createElement(`span`);return Gi&&t&&e.length<=500?n.innerHTML=Gi.highlight(e,{language:t}).value:n.textContent=e,n}var Qi=2e4;function $i(e){let t=e.split(`
|
|
74
|
-
`);return t.at(-1)===``&&t.pop(),t.map((e,t)=>({nums:[t+1],text:e,tone:``}))}function ea(e,t){let n=e.length<=Qi?t:null,r=Math.max(2,...e.map(e=>e.nums.reduce((e,t)=>Math.max(e,String(t).length),0))),i=L(`div`,`py-2 font-mono text-[12px] leading-[1.5]`);for(let t of e){let e=L(`div`,`flex pl-2 pr-4 ${t.tone===`add`?`bg-emerald-50`:t.tone===`del`?`bg-red-50`:``}`);for(let n of t.nums){let t=L(`span`,`flex-none select-none pr-1.5 text-right text-neutral-300`,n===``?``:String(n));t.style.width=`calc(${r}ch + 0.375rem)`,e.append(t)}t.nums.length===1&&typeof t.nums[0]==`number`&&(e.dataset.line=String(t.nums[0])),e.append(ta(t,n)),i.append(e)}return i}function ta(e,t){let n=`min-w-0 flex-1 whitespace-pre-wrap [overflow-wrap:anywhere]`;if(!e.mark||e.mark[0]>=e.mark[1]){let r=Zi(e.text,t);return r.className=n,r}let[r,i]=e.mark,a=Zi(e.text.slice(r,i),t);return a.className=`rounded-xs ${e.tone===`add`?`bg-emerald-200/80`:`bg-red-200/70`}`,L(`span`,n,Zi(e.text.slice(0,r),t),a,Zi(e.text.slice(i),t))}var na=I(`#image-dialog`),R=I(`#image-stage`),ra=I(`#image-full`),ia=I(`#image-prev`),aa=I(`#image-next`),oa=I(`#image-close`),sa=[],ca=0;function la(e){sa.length<2||(ca=(ca+e+sa.length)%sa.length,fa(!1),ra.src=sa[ca])}var ua=2.5,da=()=>R.dataset.zoom!==void 0;function fa(e,t){if(!e){delete R.dataset.zoom,ra.style.cssText=``;return}let n=ra.getBoundingClientRect(),r=R.getBoundingClientRect(),i=t?(t.x-n.left)/n.width:.5,a=t?(t.y-n.top)/n.height:.5,o=n.width*ua,s=n.height*ua;R.dataset.zoom=``,ra.style.width=`${String(o)}px`,ra.style.height=`${String(s)}px`,R.scrollLeft=i*o-r.width/2,R.scrollTop=a*s-r.height/2}function pa(e){let t=e.closest(`[data-gallery]`);sa=t?[...t.querySelectorAll(`img.thumb`)].map(e=>e.src):[e.src],ca=Math.max(0,sa.indexOf(e.src)),ra.src=e.src;let n=sa.length<2?`none`:`flex`;ia.style.display=n,aa.style.display=n,na.showModal()}var ma=4,ha,ga=!1;R.onpointerdown=e=>{ga=!1,!(!da()||e.button!==0)&&(ha={x:e.clientX,y:e.clientY,left:R.scrollLeft,top:R.scrollTop},R.setPointerCapture(e.pointerId))},R.onpointermove=e=>{if(!ha)return;let t=e.clientX-ha.x,n=e.clientY-ha.y;(Math.abs(t)>ma||Math.abs(n)>ma)&&(ga=!0),R.scrollLeft=ha.left-t,R.scrollTop=ha.top-n};var _a=()=>{ha=void 0};R.onpointerup=_a,R.onpointercancel=_a,R.onclick=e=>{ga||(e.target===ra?fa(!da(),{x:e.clientX,y:e.clientY}):na.close())},oa.onclick=()=>na.close(),na.onclose=()=>fa(!1),ia.onclick=()=>la(-1),aa.onclick=()=>la(1),na.onkeydown=e=>{(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.preventDefault(),la(e.key===`ArrowLeft`?-1:1))};function va(e){let t=e.querySelector(`:scope > .thumbs`);if(t)return t;let n=L(`div`,`thumbs`);return e.append(n),n}function ya(e){let t=document.createElement(`img`);return t.src=e,t.loading=`lazy`,t.className=`thumb`,t.onclick=()=>pa(t),t}var ba=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`,`bmp`]),xa=524288,Sa=I(`#file-dialog`),Ca=I(`#file-name`),wa=I(`#file-text`),Ta=I(`#file-download`);I(`#file-close`).onclick=()=>Sa.close();var Ea=e=>e.split(`.`).pop()?.toLowerCase()??``,Da=(e,t,n=!1)=>`/api/sessions/${encodeURIComponent(e)}/files?path=${encodeURIComponent(t)}${n?`&download=1`:``}`;function Oa(e,t){return Ri(e,/\]\(\s*<?file:\/\/(\/[^)>\s]*)>?\s*\)/g,e=>{let n=e[1];try{n=decodeURIComponent(n)}catch{}return`](${Da(t,n)})`})}var ka=e=>/^\/api\/sessions\/[^/]+\/files\?/.test(e);function Aa(e,t){let n=Xr(t)||`file`,r=Da(e,t);return ba.has(Ea(n))?Ra(r,n):za(r,n)}function ja(e){return new URLSearchParams(e.slice(e.indexOf(`?`)+1)).get(`path`)??``}var Ma=(e,t=`text-neutral-500`)=>L(`div`,`px-3 py-2 text-[12.5px] [overflow-wrap:anywhere] ${t}`,e),Na=0;async function Pa(e,t,n){let r=++Na;Ca.textContent=t,Ta.href=`${e}&download=1`,wa.replaceChildren(Ma(`loading…`)),Sa.showModal();let i=e=>{r===Na&&wa.replaceChildren(e)},a;try{a=await fetch(e)}catch(e){return i(Ma(`failed to load: ${String(e)}`,`text-red-600`))}if(!a.ok)return i(Ma(`${await S(a,`failed to load`)}: ${ja(e)}`,`text-red-600`));let o=a.headers.get(`content-type`)??``;if(!o.startsWith(`text/`)&&!o.startsWith(`image/svg+xml`))return i(Ma(`Binary file — use Download.`));let s=await a.text(),c=s.length>xa?`${s.slice(0,xa)}\n…`:s,l=await Xi(t),u=ea($i(c),l);if(i(u),n===void 0||r!==Na)return;let d=u.querySelector(`[data-line="${String(n)}"]`);d?.classList.add(`bg-indigo-100`),d?.scrollIntoView({block:`center`})}var Fa=new Set(`ts.tsx.mts.cts.js.jsx.mjs.cjs.json.md.css.html.py.rs.go.rb.java.c.h.cpp.hpp.sh.sql.yml.yaml.toml.ini.conf.txt.lock`.split(`.`));function Ia(e){let t=/^([^\s`"'()[\]{}<>]+?)(?::(\d+))?(?::\d+)?$/.exec(e);if(!t||e.includes(`://`))return null;let n=t[1],r=n.includes(`.`)?Ea(n):``;return!r||!Fa.has(r)&&!n.includes(`/`)?null:{path:n,line:t[2]===void 0?void 0:Number(t[2])}}function La(e,t,n){for(let r of e.querySelectorAll(`:not(pre) > code`)){let e=Ia(r.textContent?.trim()??``);if(!e||r.closest(`a`))continue;let i=e.path.startsWith(`/`)?e.path:n?`${n}/${e.path}`:null;if(!i)continue;let a=()=>void Pa(Da(t,i),Xr(i),e.line);r.classList.add(`fileref`),r.tabIndex=0,r.setAttribute(`role`,`button`),r.title=e.line===void 0?i:`${i}:${String(e.line)}`,r.onclick=a,r.addEventListener(`pointerup`,()=>r.blur()),r.onkeydown=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())}}}function Ra(e,t){let n=ya(e);return n.alt=t,n}function za(e,t){let n=Ea(t),r=L(`span`,`inline-flex max-w-full items-center gap-2.5 rounded-lg border border-neutral-200 bg-neutral-50 px-2.5 py-1.5 no-underline`),i=L(`span`,`flex h-7 w-7 flex-none items-center justify-center rounded-md bg-indigo-50 text-[10px] font-semibold uppercase text-indigo-600`,n.slice(0,4)||`file`),a=L(`span`,`min-w-0 truncate text-[13px] font-medium text-neutral-800`,t),o=L(`span`,`ml-1 flex flex-none items-center gap-0.5`),s=L(`button`,`icon-btn h-6 w-6 text-[13px]`,_(ee));s.setAttribute(`aria-label`,`Preview`),s.title=`Preview`,s.onclick=r=>{r.preventDefault(),n===`pdf`?window.open(e,`_blank`,`noopener`):Pa(e,t)},o.append(s);let c=document.createElement(`a`);return c.className=`icon-btn h-6 w-6 text-[13px] no-underline`,c.href=`${e}&download=1`,c.download=t,c.title=`Download`,c.append(_(p)),c.setAttribute(`aria-label`,`Download`),o.append(c),r.append(i,a,o),r}function Ba(e){let t=new Set;for(let n of e)n.parentElement&&t.add(n.parentElement);for(let n of t){let t=[...n.children].filter(t=>e.includes(t));if([...n.childNodes].every(e=>e.nodeType===Node.TEXT_NODE?!e.textContent?.trim():t.includes(e))){n.classList.add(`thumbs`);continue}let r=L(`div`,`thumbs`);r.append(...t),n.after(r)}}function Va(e){let t=[];for(let n of e.querySelectorAll(`img`)){let e=n.getAttribute(`src`)??``;if(!ka(e))continue;let r=Ra(e,Xr(ja(e)));n.replaceWith(r),t.push(r)}for(let n of e.querySelectorAll(`a`)){let e=n.getAttribute(`href`)??``;if(!ka(e))continue;let r=Xr(ja(e))||n.textContent?.trim()||`file`,i=ba.has(Ea(r))?Ra(e,r):za(e,r);n.replaceWith(i),t.push(i)}t.length&&Ba(t)}var Ha=null,Ua=`max-w-full cursor-pointer break-words rounded-full border border-indigo-200 bg-indigo-50 px-2.5 py-0.5 text-left text-[12.5px] text-indigo-700 transition-colors hover:border-indigo-300 hover:bg-indigo-100`;function Wa(){Ha=null}function Ga(e,t,n){if(Ha?.remove(),Ha=null,!t.length)return;let r=L(`div`,`mt-1.5 flex flex-wrap gap-1.5`);for(let e of t){let t=L(`button`,Ua,e);t.type=`button`,t.onclick=()=>{Ha===r&&(Ha=null),r.remove(),n(e)},r.append(t)}e.append(r),Ha=r}var Ka=8e3,qa=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`],Ja=e=>typeof e==`string`&&qa.includes(e),Ya,Xa;function Za(e,t){Ya=e,Xa=t}var Qa=e=>e.slice(0,8),$a=e=>`system-card group relative mt-1.5 rounded-xl px-4 py-2.5 ${e}`,eo=e=>L(`div`,$a(e));function to(e){let t=e.length>240||e.split(`
|
|
75
|
-
`).length>4,n=[`max-h-[4lh]`,`overflow-hidden`],r=L(`div`,`mt-1 whitespace-pre-wrap break-words text-[12.5px] leading-normal text-neutral-500 ${n.join(` `)}`,e),i=L(`button`,`mt-1 hidden w-fit rounded-md px-1 py-1 text-[11px] pointer-coarse:min-h-11 pointer-coarse:px-2 text-neutral-500 hover:bg-neutral-100 hover:text-neutral-700`,`Show full message`);return i.setAttribute(`type`,`button`),i.setAttribute(`aria-expanded`,`false`),i.onclick=()=>{let e=r.getBoundingClientRect().height;r.getAnimations().forEach(e=>e.cancel());let t=r.classList.toggle(n[0]),a=r.getBoundingClientRect().height,o=matchMedia(`(prefers-reduced-motion: reduce)`).matches;r.animate(o?[{opacity:.8},{opacity:1}]:[{maxHeight:`${e}px`,opacity:.8},{maxHeight:`${a}px`,opacity:1}],{duration:o?120:180,easing:`cubic-bezier(0.2, 0.8, 0.2, 1)`}),i.textContent=t?`Show full message`:`Collapse message`,i.setAttribute(`aria-expanded`,String(!t)),r.tabIndex=-1,r.focus({preventScroll:!0})},queueMicrotask(()=>{(r.clientHeight?r.scrollHeight>r.clientHeight+1:t)?i.classList.remove(`hidden`):r.classList.remove(...n)}),[r,i]}function
|
|
76
|
-
`).filter(Boolean).pop()??`thinking…`,t=
|
|
74
|
+
`);return t.at(-1)===``&&t.pop(),t.map((e,t)=>({nums:[t+1],text:e,tone:``}))}function ea(e,t){let n=e.length<=Qi?t:null,r=Math.max(2,...e.map(e=>e.nums.reduce((e,t)=>Math.max(e,String(t).length),0))),i=L(`div`,`py-2 font-mono text-[12px] leading-[1.5]`);for(let t of e){let e=L(`div`,`flex pl-2 pr-4 ${t.tone===`add`?`bg-emerald-50`:t.tone===`del`?`bg-red-50`:``}`);for(let n of t.nums){let t=L(`span`,`flex-none select-none pr-1.5 text-right text-neutral-300`,n===``?``:String(n));t.style.width=`calc(${r}ch + 0.375rem)`,e.append(t)}t.nums.length===1&&typeof t.nums[0]==`number`&&(e.dataset.line=String(t.nums[0])),e.append(ta(t,n)),i.append(e)}return i}function ta(e,t){let n=`min-w-0 flex-1 whitespace-pre-wrap [overflow-wrap:anywhere]`;if(!e.mark||e.mark[0]>=e.mark[1]){let r=Zi(e.text,t);return r.className=n,r}let[r,i]=e.mark,a=Zi(e.text.slice(r,i),t);return a.className=`rounded-xs ${e.tone===`add`?`bg-emerald-200/80`:`bg-red-200/70`}`,L(`span`,n,Zi(e.text.slice(0,r),t),a,Zi(e.text.slice(i),t))}var R=null,na=null,ra=null;function ia(e){R&&!R.contains(e.target)&&e.target!==ra&&z()}var aa={ArrowDown:1,ArrowUp:-1},oa={n:1,j:1,p:-1,k:-1},sa=()=>R!==null;function ca(e){if(!(e.altKey||e.metaKey||e.shiftKey||!e.key))return e.ctrlKey?oa[e.key.toLowerCase()]:aa[e.key]}function la(e,t){let n=[...e.querySelectorAll(`button:not(:disabled)`)];if(!n.length)return!1;let r=n.indexOf(document.activeElement);return n[t===`first`?0:t===`last`?n.length-1:r<0?t>0?0:n.length-1:(r+t+n.length)%n.length]?.focus(),!0}function ua(e){if(e.dataset.menu===`true`)return{rows:e,ends:!0};let t=e.querySelector(`[data-list]`);return t?{rows:t,ends:!1}:null}function da(e){let t=R?ua(R):null;if(t){let n=(t.ends?e.key===`Home`?`first`:e.key===`End`?`last`:void 0:void 0)??ca(e);if(n!==void 0&&la(t.rows,n)){e.preventDefault();return}}e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),z())}function fa(e){R&&!R.contains(e.target)&&z()}function z(){if(!R)return;document.removeEventListener(`pointerdown`,ia,!0),document.removeEventListener(`focusin`,ia,!0),document.removeEventListener(`keydown`,da,!0),window.removeEventListener(`scroll`,fa,!0),window.removeEventListener(`resize`,z);let e=R;R=null,ra?.remove(),ra=null,e.contains(document.activeElement)&&na?.focus({preventScroll:!0}),na?.removeAttribute(`aria-expanded`),na=null,e.inert=!0,e.dataset.closing=``,Promise.allSettled(e.getAnimations().map(e=>e.finished)).then(()=>e.remove())}var pa=null;function ma(e){let t=e.getBoundingClientRect(),n={top:t.bottom+4,left:t.left};return t.width||t.height?n:pa?.anchor===e?{top:pa.top,left:pa.left}:n}var ha=()=>window.innerWidth<640;function ga(e,t){z(),document.querySelectorAll(`.glass-menu[data-closing]`).forEach(e=>e.remove());let n=ha();R=L(`div`,`glass-menu fixed z-50 border border-neutral-200 p-2 font-sans leading-6 ${n?`rounded-3xl inset-x-2 bottom-2 max-h-[70dvh] overflow-y-auto pb-[calc(0.25rem+env(safe-area-inset-bottom))] text-[16px]`:`rounded-2xl min-w-60 max-w-[min(42rem,calc(100vw-1rem))] max-h-[calc(100dvh-1rem)] overflow-y-auto text-[15px]`}`),R.dataset.presentation=n?`sheet`:`popover`,R.append(t);let r=e.closest(`dialog[open]`)??document.body;if(n&&(ra=L(`div`,`fixed inset-0 z-50 bg-black/15`),ra.onclick=e=>{e.stopPropagation(),z()},r.append(ra)),r.append(R),!n){let t=ma(e);pa={anchor:e,...t},R.style.top=`${Math.max(8,Math.min(t.top,window.innerHeight-R.offsetHeight-8))}px`,R.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-R.offsetWidth-8))}px`}return na=e,na.setAttribute(`aria-expanded`,`true`),R.tabIndex=-1,(R.querySelector(`button, input, select, [tabindex='0']`)??R).focus({preventScroll:!0}),document.addEventListener(`pointerdown`,ia,!0),document.addEventListener(`focusin`,ia,!0),document.addEventListener(`keydown`,da,!0),window.addEventListener(`scroll`,fa,!0),window.addEventListener(`resize`,z),R}function _a(e){let t=L(`button`,`flex w-full cursor-pointer items-center gap-2 rounded-xl px-3 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100 ${ha()?`min-h-12 py-3`:`min-h-10 py-2`}`,...e.checked===void 0?[]:[_(o,`h-3 w-3 text-indigo-600 ${e.checked?``:`invisible`}`)],L(`span`,`min-w-0 truncate`,e.label));if(e.hint){let n=L(`span`,`ml-auto max-w-28 shrink-[999] truncate text-[13px] text-neutral-500`,e.hint);n.title=e.hint,t.append(n)}return e.disabled&&(t.disabled=!0,t.classList.add(`cursor-default`,`text-neutral-400`,`hover:bg-transparent`,`hover:text-neutral-400`)),t.onclick=()=>e.onSelect(),t}function va(e,t,n){let r=L(`div`,``);if(n&&ha()){let e=L(`button`,`icon-btn h-11 w-11`,_(_e));e.setAttribute(`aria-label`,`Close session actions`),e.onclick=z,r.append(L(`div`,`flex items-center gap-3 border-b border-neutral-200 px-3 pb-1 mb-1`,L(`span`,`min-w-0 flex-1 truncate text-sm font-medium text-neutral-500`,n),e))}for(let e of t)e.separatorBefore&&r.append(L(`hr`,`my-2 border-neutral-200`)),r.append(_a(e));ga(e,r),R&&(R.dataset.menu=`true`,R.setAttribute(`aria-label`,n?`Actions for ${n}`:`Actions`),R.setAttribute(`role`,`group`))}var ya=async e=>{let t=await C(`/api/fs/ls${e?.startsWith(`/`)?`?path=${encodeURIComponent(e)}`:``}`,`Could not list directories`);return t.ok?t.value:null},ba=e=>e.entries.filter(e=>e.dir&&!e.name.startsWith(`.`)).map(e=>e.name),xa=`flex w-full min-h-10 cursor-pointer items-center gap-2 rounded-xl px-3 py-2 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100`,Sa=`font-mono text-[0.875rem]`,Ca=(e,t,n)=>{let r=di(e,`${xa} ${t}`);return r.onclick=n,r};function wa(e,t){let n=L(`div`,`mt-2 flex-none border-t border-neutral-200 pt-2`),r=Ca(`New folder`,`text-neutral-500`,()=>{let r=document.createElement(`input`);r.className=`w-full rounded-xl border-0 bg-neutral-100 px-3 py-2 ${Sa} focus:outline-none`,r.placeholder=`folder-name`;let i=L(`p`,`hidden px-3 pt-1 text-[0.8125rem] text-red-600`);r.onkeydown=async n=>{if(n.key!==`Enter`)return;n.preventDefault();let a=await x(`/api/fs/mkdir`,{path:e,name:r.value});if(!a.ok){i.textContent=(await a.json()).error??`could not create`,i.classList.remove(`hidden`);return}t((await a.json()).path)},n.replaceChildren(r,i),r.focus()});return r.prepend(_(ue)),n.append(r),n}function Ta(e,t,n){let r=e=>{n(e),z()};async function i(t){let n=await ya(t);if(!n)return;let a=L(`div`,`flex max-h-[60dvh] w-full flex-col sm:w-88`),o=di(`Use`,`btn btn-primary ml-auto flex-none px-3 py-1 text-[0.8125rem]`);o.onclick=()=>r(n.path);let s=document.createElement(`input`);s.className=`min-w-0 flex-1 border-0 bg-transparent ${Sa} text-neutral-600 focus:outline-none`,s.value=n.path,s.spellcheck=!1,s.title=`Type or paste a path, then Enter`,s.onfocus=()=>s.select();let c=L(`p`,`hidden flex-none px-3 pb-1 text-[0.8125rem] text-red-600`);s.onkeydown=async e=>{if(e.key!==`Enter`)return;e.preventDefault(),e.stopPropagation();let t=s.value.trim();if(!t)return;let n=await ya(t);if(!n){c.textContent=`${t} is not a folder this can read`,c.classList.remove(`hidden`);return}r(n.path)};let l=L(`div`,`mb-2 flex flex-none items-center gap-2 border-b border-neutral-200 px-3 pb-2 pt-1`,s,o),u=L(`div`,`min-h-0 flex-1 overflow-y-auto`);u.dataset.list=``,n.parent&&u.append(Ca(`../`,`${Sa} text-neutral-500`,()=>void i(n.parent)));let d=ba(n);for(let e of d)u.append(Ca(e,`truncate`,()=>void i(`${n.path}/${e}`.replace(`//`,`/`))));d.length||u.append(L(`p`,`px-3 py-2 text-[0.8125rem] text-neutral-400`,`No sub-folders.`)),a.append(l,c,u,wa(n.path,e=>void i(e))),ga(e,a)}i(t)}function Ea(e,t,n,r){va(e,[...t.map(e=>({label:e.path,...e.hint?{hint:e.hint}:{},checked:e.path===n,onSelect:()=>{z(),r(e.path)}})),{label:`Browse…`,onSelect:()=>Ta(e,n||void 0,r)}])}var Da=(e,t)=>n=>{e.value=n,e.dispatchEvent(new Event(`input`,{bubbles:!0})),t?.(n)};function Oa(e,t){let n=di(`Browse…`,`flex-none cursor-pointer rounded-md border border-neutral-300 px-2 py-1 text-[12px] text-neutral-600 hover:bg-neutral-100`);return n.onclick=()=>Ta(n,e.value.trim()||void 0,Da(e,t)),n}function ka(e,t,n){let r=document.createElement(`input`);return r.className=`min-w-0 flex-1 rounded-md border border-neutral-300 bg-white px-2 py-1 font-mono text-[12.5px] focus:border-indigo-400 focus:outline-none`,r.value=e,r.placeholder=t,r.oninput=()=>n(r.value),{el:L(`div`,`flex items-center gap-1.5`,r,Oa(r,n)),input:r}}var Aa=I(`#image-dialog`),B=I(`#image-stage`),ja=I(`#image-full`),Ma=I(`#image-prev`),Na=I(`#image-next`),Pa=I(`#image-close`),Fa=[],Ia=0;function La(e){Fa.length<2||(Ia=(Ia+e+Fa.length)%Fa.length,Ba(!1),ja.src=Fa[Ia])}var Ra=2.5,za=()=>B.dataset.zoom!==void 0;function Ba(e,t){if(!e){delete B.dataset.zoom,ja.style.cssText=``;return}let n=ja.getBoundingClientRect(),r=B.getBoundingClientRect(),i=t?(t.x-n.left)/n.width:.5,a=t?(t.y-n.top)/n.height:.5,o=n.width*Ra,s=n.height*Ra;B.dataset.zoom=``,ja.style.width=`${String(o)}px`,ja.style.height=`${String(s)}px`,B.scrollLeft=i*o-r.width/2,B.scrollTop=a*s-r.height/2}function Va(e){let t=e.closest(`[data-gallery]`);Fa=t?[...t.querySelectorAll(`img.thumb`)].map(e=>e.src):[e.src],Ia=Math.max(0,Fa.indexOf(e.src)),ja.src=e.src;let n=Fa.length<2?`none`:`flex`;Ma.style.display=n,Na.style.display=n,Aa.showModal()}var Ha=4,Ua,Wa=!1;B.onpointerdown=e=>{Wa=!1,!(!za()||e.button!==0)&&(Ua={x:e.clientX,y:e.clientY,left:B.scrollLeft,top:B.scrollTop},B.setPointerCapture(e.pointerId))},B.onpointermove=e=>{if(!Ua)return;let t=e.clientX-Ua.x,n=e.clientY-Ua.y;(Math.abs(t)>Ha||Math.abs(n)>Ha)&&(Wa=!0),B.scrollLeft=Ua.left-t,B.scrollTop=Ua.top-n};var Ga=()=>{Ua=void 0};B.onpointerup=Ga,B.onpointercancel=Ga,B.onclick=e=>{Wa||(e.target===ja?Ba(!za(),{x:e.clientX,y:e.clientY}):Aa.close())},Pa.onclick=()=>Aa.close(),Aa.onclose=()=>Ba(!1),Ma.onclick=()=>La(-1),Na.onclick=()=>La(1),Aa.onkeydown=e=>{(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.preventDefault(),La(e.key===`ArrowLeft`?-1:1))};function Ka(e){let t=e.querySelector(`:scope > .thumbs`);if(t)return t;let n=L(`div`,`thumbs`);return e.append(n),n}function qa(e){let t=document.createElement(`img`);return t.src=e,t.loading=`lazy`,t.className=`thumb`,t.onclick=()=>Va(t),t}var Ja=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`,`bmp`]),Ya=524288,Xa=I(`#file-dialog`),Za=I(`#file-name`),Qa=I(`#file-text`),$a=I(`#file-download`);I(`#file-close`).onclick=()=>Xa.close();var eo=e=>e.split(`.`).pop()?.toLowerCase()??``,to=(e,t,n=!1)=>`/api/sessions/${encodeURIComponent(e)}/files?path=${encodeURIComponent(t)}${n?`&download=1`:``}`,no=e=>decodeURIComponent(/^\/api\/sessions\/([^/]+)\//.exec(e)?.[1]??``),ro=e=>e.slice(0,e.lastIndexOf(`/`))||`/`,io=(e,t)=>`${e===`/`?``:e}/${t}`;function ao(e,t){return Ri(e,/\]\(\s*<?file:\/\/(\/[^)>\s]*)>?\s*\)/g,e=>{let n=e[1];try{n=decodeURIComponent(n)}catch{}return`](${to(t,n)})`})}var oo=e=>/^\/api\/sessions\/[^/]+\/files\?/.test(e);function so(e,t){let n=Xr(t)||`file`,r=to(e,t);return Ja.has(eo(n))?So(r,n):Co(r,n)}function co(e){return new URLSearchParams(e.slice(e.indexOf(`?`)+1)).get(`path`)??``}var lo=(e,t=`text-neutral-500`)=>L(`div`,`px-3 py-2 text-[12.5px] [overflow-wrap:anywhere] ${t}`,e),uo=0;function fo(e,t,n){if($a.hidden=n,n){Za.replaceChildren(t);return}let r=ro(t),i=di(`${r}/`,`min-w-0 cursor-pointer truncate text-neutral-400 hover:text-indigo-600`);i.title=`Browse ${r}`,i.onclick=()=>void mo(e,r),Za.replaceChildren(i,L(`span`,`flex-none`,Xr(t)))}function po(e,t){let n=L(`div`,`flex flex-col py-1`),r=(e,t,n)=>{let r=di(e,`flex w-full cursor-pointer items-center px-3 py-1.5 text-left font-mono text-[12.5px] hover:bg-indigo-50 hover:text-indigo-700 ${t}`);return r.onclick=n,r};t.parent&&n.append(r(`../`,`text-neutral-500`,()=>void mo(e,t.parent)));for(let i of t.entries){let a=io(t.path,i.name);n.append(i.dir?r(`${i.name}/`,`text-neutral-800`,()=>void mo(e,a)):r(i.name,`text-neutral-600`,()=>void ho(to(e,a),i.name)))}return t.entries.length||n.append(lo(`Empty folder.`)),n}async function mo(e,t){let n=++uo;fo(e,t,!0),Qa.replaceChildren(lo(`loading…`)),Xa.open||Xa.showModal();let r=await ya(t);n===uo&&Qa.replaceChildren(r?po(e,r):lo(`failed to list: ${t}`,`text-red-600`))}async function ho(e,t,n){let r=++uo;fo(no(e),co(e)||t,!1),$a.href=`${e}&download=1`,Qa.replaceChildren(lo(`loading…`)),Xa.open||Xa.showModal();let i=e=>{r===uo&&Qa.replaceChildren(e)},a;try{a=await fetch(e)}catch(e){return i(lo(`failed to load: ${String(e)}`,`text-red-600`))}if(!a.ok){let t=co(e),n=a.status===404?await ya(t):null;return r===uo?n?void mo(no(e),t):i(lo(`${await S(a,`failed to load`)}: ${t}`,`text-red-600`)):void 0}let o=a.headers.get(`content-type`)??``;if(!o.startsWith(`text/`)&&!o.startsWith(`image/svg+xml`))return i(lo(`Binary file — use Download.`));let s=await a.text(),c=s.length>Ya?`${s.slice(0,Ya)}\n…`:s,l=await Xi(t),u=ea($i(c),l);if(i(u),n===void 0||r!==uo)return;let d=u.querySelector(`[data-line="${String(n)}"]`);d?.classList.add(`bg-indigo-100`),d?.scrollIntoView({block:`center`})}var go=new Set(`ts.tsx.mts.cts.js.jsx.mjs.cjs.json.md.css.html.py.rs.go.rb.java.c.h.cpp.hpp.sh.sql.yml.yaml.toml.ini.conf.txt.lock`.split(`.`)),_o=/^(?:~|\/(?:home|Users|root|tmp|var|opt|etc|srv|mnt|media|data|usr))(?:\/|$)/;function vo(e){let t=/^([^\s`"'()[\]{}<>]+?)(?::(\d+))?(?::\d+)?$/.exec(e);if(!t||e.includes(`://`))return null;let n=t[1],r=n.includes(`.`)?eo(n):``;return!_o.test(n)&&(!r||!go.has(r)&&!n.includes(`/`))?null:{path:n,line:t[2]===void 0?void 0:Number(t[2])}}var yo;async function bo(e,t,n){let r=t;r.startsWith(`~`)&&(yo??=ya().then(e=>e?.path??null),r=`${await yo??`~`}${r.slice(1)}`),await ho(to(e,r),Xr(r),n)}function xo(e,t,n){for(let r of e.querySelectorAll(`:not(pre) > code`)){let e=vo(r.textContent?.trim()??``);if(!e||r.closest(`a`))continue;let i=e.path.startsWith(`/`)||e.path.startsWith(`~`)?e.path:n?`${n}/${e.path}`:null;if(!i)continue;let a=()=>void bo(t,i,e.line);r.classList.add(`fileref`),r.tabIndex=0,r.setAttribute(`role`,`button`),r.title=e.line===void 0?i:`${i}:${String(e.line)}`,r.onclick=a,r.addEventListener(`pointerup`,()=>r.blur()),r.onkeydown=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())}}}function So(e,t){let n=qa(e);return n.alt=t,n}function Co(e,t){let n=eo(t),r=L(`span`,`inline-flex max-w-full items-center gap-2.5 rounded-lg border border-neutral-200 bg-neutral-50 px-2.5 py-1.5 no-underline`),i=L(`span`,`flex h-7 w-7 flex-none items-center justify-center rounded-md bg-indigo-50 text-[10px] font-semibold uppercase text-indigo-600`,n.slice(0,4)||`file`),a=L(`span`,`min-w-0 truncate text-[13px] font-medium text-neutral-800`,t),o=L(`span`,`ml-1 flex flex-none items-center gap-0.5`),s=L(`button`,`icon-btn h-6 w-6 text-[13px]`,_(ee));s.setAttribute(`aria-label`,`Preview`),s.title=`Preview`,s.onclick=r=>{r.preventDefault(),n===`pdf`?window.open(e,`_blank`,`noopener`):ho(e,t)},o.append(s);let c=document.createElement(`a`);return c.className=`icon-btn h-6 w-6 text-[13px] no-underline`,c.href=`${e}&download=1`,c.download=t,c.title=`Download`,c.append(_(p)),c.setAttribute(`aria-label`,`Download`),o.append(c),r.append(i,a,o),r}function wo(e){let t=new Set;for(let n of e)n.parentElement&&t.add(n.parentElement);for(let n of t){let t=[...n.children].filter(t=>e.includes(t));if([...n.childNodes].every(e=>e.nodeType===Node.TEXT_NODE?!e.textContent?.trim():t.includes(e))){n.classList.add(`thumbs`);continue}let r=L(`div`,`thumbs`);r.append(...t),n.after(r)}}function To(e){let t=[];for(let n of e.querySelectorAll(`img`)){let e=n.getAttribute(`src`)??``;if(!oo(e))continue;let r=So(e,Xr(co(e)));n.replaceWith(r),t.push(r)}for(let n of e.querySelectorAll(`a`)){let e=n.getAttribute(`href`)??``;if(!oo(e))continue;let r=Xr(co(e))||n.textContent?.trim()||`file`,i=Ja.has(eo(r))?So(e,r):Co(e,r);n.replaceWith(i),t.push(i)}t.length&&wo(t)}var Eo=null,Do=`max-w-full cursor-pointer break-words rounded-full border border-indigo-200 bg-indigo-50 px-2.5 py-0.5 text-left text-[12.5px] text-indigo-700 transition-colors hover:border-indigo-300 hover:bg-indigo-100`;function Oo(){Eo=null}function ko(e,t,n){if(Eo?.remove(),Eo=null,!t.length)return;let r=L(`div`,`mt-1.5 flex flex-wrap gap-1.5`);for(let e of t){let t=L(`button`,Do,e);t.type=`button`,t.onclick=()=>{Eo===r&&(Eo=null),r.remove(),n(e)},r.append(t)}e.append(r),Eo=r}var Ao=8e3,jo=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`],Mo=e=>typeof e==`string`&&jo.includes(e),No,Po;function Fo(e,t){No=e,Po=t}var Io=e=>e.slice(0,8),Lo=e=>`system-card group relative mt-1.5 rounded-xl px-4 py-2.5 ${e}`,Ro=e=>L(`div`,Lo(e));function zo(e){let t=e.length>240||e.split(`
|
|
75
|
+
`).length>4,n=[`max-h-[4lh]`,`overflow-hidden`],r=L(`div`,`mt-1 whitespace-pre-wrap break-words text-[12.5px] leading-normal text-neutral-500 ${n.join(` `)}`,e),i=L(`button`,`mt-1 hidden w-fit rounded-md px-1 py-1 text-[11px] pointer-coarse:min-h-11 pointer-coarse:px-2 text-neutral-500 hover:bg-neutral-100 hover:text-neutral-700`,`Show full message`);return i.setAttribute(`type`,`button`),i.setAttribute(`aria-expanded`,`false`),i.onclick=()=>{let e=r.getBoundingClientRect().height;r.getAnimations().forEach(e=>e.cancel());let t=r.classList.toggle(n[0]),a=r.getBoundingClientRect().height,o=matchMedia(`(prefers-reduced-motion: reduce)`).matches;r.animate(o?[{opacity:.8},{opacity:1}]:[{maxHeight:`${e}px`,opacity:.8},{maxHeight:`${a}px`,opacity:1}],{duration:o?120:180,easing:`cubic-bezier(0.2, 0.8, 0.2, 1)`}),i.textContent=t?`Show full message`:`Collapse message`,i.setAttribute(`aria-expanded`,String(!t)),r.tabIndex=-1,r.focus({preventScroll:!0})},queueMicrotask(()=>{(r.clientHeight?r.scrollHeight>r.clientHeight+1:t)?i.classList.remove(`hidden`):r.classList.remove(...n)}),[r,i]}function Bo(e){let t=L(`div`,`flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-neutral-500`,e.glyph);t.append(L(`span`,`run-label flex-none font-semibold ${e.labelCls}`,e.label)),e.taskName&&t.append(L(`span`,`min-w-0 grow basis-0 truncate text-[12.5px] font-medium text-neutral-800 max-md:order-1 max-md:basis-full max-md:whitespace-normal max-md:line-clamp-2`,e.taskName));let n=L(`div`,`ml-auto flex min-w-0 flex-wrap items-center gap-x-2 font-mono`);if(e.note&&n.append(L(`span`,`flex-none`,e.note)),e.model){let t=L(`span`,`flex-none rounded bg-black/[0.05] px-1.5 py-px font-medium text-neutral-700 dark:bg-neutral-200`,e.model.id);t.title=`${e.model.provider} / ${e.model.id}`,n.append(t)}if(e.thinking){let t=L(`span`,`flex-none`,e.thinking);t.title=`Reasoning effort`,n.append(t)}let r=L(`button`,`flex-none hover:underline`,Io(e.runId));if(r.title=`Run ${e.runId}`,r.onclick=()=>No.showRun(e.runId),n.append(r),e.sessionId&&e.sessionId!==`console`){let t=e.sessionId,r=L(`button`,`flex-none text-indigo-600 hover:underline`,Io(t));r.title=`Open session ${t}`,r.onclick=()=>No.select(t),n.append(r)}return t.append(n),t}var Vo={queued:{edge:`border-l-amber-400`,label:`text-amber-700`,glyph:h},running:{edge:`border-l-fuchsia-500`,label:`text-fuchsia-700`,glyph:h},succeeded:{edge:`border-l-green-500`,label:`text-green-700`,glyph:o},failed:{edge:`border-l-red-500`,label:`text-red-600`,glyph:_e},cancelled:{edge:`border-l-neutral-300`,label:`text-neutral-500`,glyph:oe},interrupted:{edge:`border-l-amber-400`,label:`text-amber-700`,glyph:ce},skipped:{edge:`border-l-neutral-300`,label:`text-neutral-500`,glyph:oe}},Ho=e=>_(Vo[e].glyph,`h-3 w-3 ${e===`queued`||e===`running`?`spinner`:``} ${Vo[e].label}`),Uo=new Map,Wo=new WeakMap;function Go(e){for(let[e,t]of Uo)t.isConnected||Uo.delete(e);let t=Uo.get(e.runId);t||(t=Ro(Vo[e.state].edge),t.dataset.kind=`background-run`,Po.el.append(t),Uo.set(e.runId,t)),t.className=Lo(Vo[e.state].edge);let n=e.state===`queued`||e.state===`running`;t.toggleAttribute(`data-active`,n);let r=Math.max(0,Math.round(((e.finishedAt??Date.now())-(e.startedAt??e.queuedAt))/1e3)),i=Bo({glyph:Ho(e.state),label:`run · ${e.state}`,labelCls:Vo[e.state].label,taskName:e.taskName,note:`${e.sessionMode??`task`} · ${String(r)}s`,runId:e.runId,sessionId:e.targetSessionId}),a=Wo.get(t);!a&&e.prompt!==null&&(a=zo(e.prompt),Wo.set(t,a)),t.replaceChildren(i,...a??[]),Po.scroll()}var V=null,Ko=null,qo=null,Jo=!1;function Yo(){if(!Ko)return;Ko.text=Ko.text.slice(-4e3),Ko.pre.textContent=Ko.text;let e=Ko.text.split(`
|
|
76
|
+
`).filter(Boolean).pop()??`thinking…`,t=Ko.summary.lastElementChild;t.textContent=e.length>90?`…`+e.slice(-90):e}function Xo(){if(qo){Jo=!0;return}Jo=!1,Yo(),qo=setTimeout(()=>{qo=null,Jo&&Xo()},80)}function Zo(){qo&&clearTimeout(qo),qo=null,Jo&&Yo(),Jo=!1}var Qo=new WeakMap,$o=e=>{let t=Qo.get(e)??[];return Qo.set(e,t),t};function es(){V&&!V.toolRows.size&&ms(`done`)}var ts=null;function ns(){V=null,ts=null,Ko=null,Zo(),Uo.clear()}function rs(){let e=ts;return!e||V?.el===e||(ts=null,e!==Po.el.lastElementChild)?null:(e.remove(),e.dataset.adopted=`1`,as(e,e.dataset.status),e)}var is={running:`text-green-700 open:bg-green-50`,done:`text-neutral-400 hover:text-neutral-600 open:bg-black/[0.02] open:text-neutral-500 dark:open:bg-neutral-100`,failed:`text-red-600 open:bg-red-50`,interrupted:`text-amber-700 open:bg-amber-50`};function as(e,t){e.dataset.status=t,e.className=`px-2 py-1 rounded-xl text-[11.5px] leading-normal open:border open:border-neutral-200 open:px-3 open:py-2 ${is[t]}`}var os={failed:_e,interrupted:ce};function ss(e){return e===`running`?_(h,`spinner`):e===`done`?L(`span`,`hidden`):_(os[e],`h-3 w-3`)}function cs(e){if(V)return V;let t=ss(`running`),n=L(`span`,`min-w-0 truncate`,`working…`),{el:r}=li(``,[t,n]);r.dataset.kind=`activity`,as(r,`running`);let i=L(`div`,`mt-1.5 flex max-h-64 flex-col gap-1 overflow-y-auto overscroll-contain border-t border-black/5 pt-1.5 dark:border-neutral-200`);return r.append(i),ds(r,i),Po.el.append(r),ts=r,Po.scroll(),V={el:r,statusIcon:t,headline:n,rowsEl:i,toolRows:new Map,thinking:null,steps:0,failedSteps:0,startTs:e,sawError:!1},V}function ls(e,t=``){let n=cs(e);Zo(),n.thinking=null;let r=L(`div`,`whitespace-pre-wrap break-words text-[13px] text-neutral-600`,t);r.dataset.raw=t;let i=L(`div`,`rounded-lg bg-neutral-50 px-2 py-1.5`,L(`span`,`text-[10px] font-medium text-neutral-400`,`Update`),r);return i.dataset.kind=`progress`,n.rowsEl.append(i),ps(n,`running`,`writing…`),fs(n),Po.scroll(),r}function us(e){let t=e.closest(`details[data-kind="activity"]`);e.parentElement?.remove(),t&&!t.lastElementChild?.childElementCount&&(V?.el===t&&(V=null),ts===t&&(ts=null),t.remove())}function ds(e,t){t.dataset.follow=`1`,t.addEventListener(`scroll`,()=>{let e=t.scrollHeight-t.scrollTop-t.clientHeight<24;t.dataset.follow=e?`1`:``}),e.addEventListener(`toggle`,()=>{e.open&&(t.scrollTop=t.scrollHeight,t.dataset.follow=`1`)})}function fs(e){Po.bulk()||!e.el.open||!e.rowsEl.dataset.follow||(e.rowsEl.scrollTop=e.rowsEl.scrollHeight)}function ps(e,t,n){let r=Math.max(1,Math.round((Date.now()-e.startTs)/1e3)),i=`${e.steps?`${e.steps} step${e.steps===1?``:`s`}`:`Progress`} · ${r}s`;e.headline.textContent=t===`running`&&n?`${i} · ${n}`:t===`done`?`Completed · ${i}`:`${i} · ${t}`,as(e.el,t);let a=ss(t);e.statusIcon.replaceWith(a),e.statusIcon=a}function ms(e){if(!V)return;Zo();for(let{statusEl:e}of V.toolRows.values())e.textContent===`running…`&&(e.textContent=`interrupted`);let t=V.steps>0&&V.failedSteps===V.steps;ps(V,(V.sawError||t)&&e===`done`?`failed`:e===`done`&&V.toolRows.size?`interrupted`:e),V=null}function hs(){V&&(V.sawError=!0)}function gs(e){let t=e.slice(0,400).replace(/\s+/g,` `);return t.length>100?t.slice(0,100)+`…`:t}function _s(e,t,n,r){let i=cs(e);i.steps+=1,Zo(),i.thinking=null;let a=JSON.stringify(r,null,2)??``,o=L(`span`,`ml-auto flex-none text-neutral-400`,`running…`),s=L(`span`,`min-w-0 truncate text-neutral-500`,gs(a)),{el:c}=li(`rounded-md px-1 py-0.5 font-mono text-[12.5px] hover:bg-black/[0.03] dark:hover:bg-neutral-100`,[L(`span`,`flex-none font-semibold`,n),s,o]),l=L(`pre`,`max-h-40 overflow-y-auto whitespace-pre-wrap break-words rounded bg-black/[0.04] p-1.5 text-[12px] dark:bg-neutral-100`,a),u=L(`pre`,`hidden max-h-56 overflow-y-auto whitespace-pre-wrap break-words rounded bg-black/[0.04] p-1.5 text-[12px] dark:bg-neutral-100`);c.append(L(`div`,`mt-1 flex flex-col gap-1 pl-4`,l,u)),$o(i.el).push({tool:n,call:t,preview:s,argsPre:l,outputPre:u}),i.toolRows.set(t,{el:c,statusEl:o,outputPre:u}),i.rowsEl.append(c),fs(i),ps(i,`running`,n),Po.scroll()}function vs(e,t,n){let r=V;if(!r)return;let i=r.toolRows.get(e);r.toolRows.delete(e),i&&(i.statusEl.textContent=t?`failed`:`ok`,i.statusEl.className=`ml-auto flex-none ${t?`text-red-600`:`text-green-700`}`,i.el.classList.toggle(`bg-red-50`,t),i.el.classList.toggle(`text-red-700`,t),n&&(i.outputPre.textContent=n.length>8e3?n.slice(0,Ao)+`…`:n,i.outputPre.classList.remove(`hidden`)),t&&(r.failedSteps+=1)),ps(r,`running`)}function ys(e,t){let n=cs(e);if(!n.thinking){Zo();let{el:e,summary:t}=li(`rounded-md px-1 py-0.5 text-[12.5px] italic text-neutral-500 hover:bg-black/[0.03] dark:hover:bg-neutral-100`,[L(`span`,`min-w-0 truncate`,`thinking…`)]),r=L(`div`,`mt-1 max-h-56 overflow-y-auto whitespace-pre-wrap break-words pl-4 not-italic text-neutral-500`,``);e.append(r),n.rowsEl.append(e),n.thinking={pre:r,summary:t,text:``},Ko=n.thinking,fs(n),ps(n,`running`,`thinking…`)}n.thinking.text+=t,Xo()}var bs=0;function xs(e,t=0,n=!1,r){let i=Date.now()-t,a=cs(i).el;for(let t of e){if(t.kind===`progress`){ls(i,t.text??``);continue}if(t.kind===`thinking`){ys(i,t.text??``);continue}let e=t.id??`replay-${++bs}`;_s(i,e,t.toolName??``,t.args),t.done&&vs(e,t.isError??!1,t.output??``)}r!==void 0&&e.some(e=>e.kind===`tool`&&e.args===void 0)&&Ss(a,r),!n&&ms(e.some(e=>e.kind===`tool`&&!e.done)?`interrupted`:`done`)}function Ss(e,t){let n=()=>{e.open&&(e.removeEventListener(`toggle`,n),Cs(e,t))};e.addEventListener(`toggle`,n)}async function Cs(e,t){let n=No.sessionId(),r=$o(e),i=new Set(r.filter(e=>!e.argsPre.textContent)),a=e=>{for(let t of i)t.argsPre.textContent=e};if(a(`loading…`),!n)return a(`no session`);let o=await C(`/api/sessions/${n}/turns/${t}/steps`,`could not load these steps`);if(!o.ok)return a(o.error);let s=o.value.steps.filter(e=>e.kind===`tool`);for(let[e,t]of r.entries()){if(!i.has(t))continue;let n=s[e];if(!(n&&(n.id?n.id===t.call:n.toolName===t.tool))){t.argsPre.textContent=`detail no longer available — reload the session`;continue}let r=JSON.stringify(n.args,null,2)??``;t.argsPre.textContent=r,t.preview.textContent=gs(r),n.output&&(t.outputPre.textContent=n.output,t.outputPre.classList.remove(`hidden`))}}var ws,H=I(`#turns`);function Ts(e){ws=e,Fo(e,{el:H,scroll:Ns,bulk:()=>Es})}var Es=!1,Ds=()=>H.scrollHeight-H.scrollTop-H.clientHeight<80,Os=!0,ks=0;H.addEventListener(`scroll`,()=>{let e=H.scrollTop,t=e<ks-4;ks=e,!Es&&(t||Ds())&&(Os=Ds())},{passive:!0});var As=0;function js(){!Os||Es||As||(As=requestAnimationFrame(()=>{As=0,Os&&!Es&&(H.scrollTop=H.scrollHeight)}))}new ResizeObserver(js).observe(H),H.addEventListener(`load`,js,!0),new MutationObserver(js).observe(H,{childList:!0,subtree:!0,characterData:!0});function Ms(){Ds()&&(Os=!0)}function Ns(e=!1){Es||(e&&(Os=!0),Os&&(H.scrollTop=H.scrollHeight))}var Ps=1200;function Fs(e,t){let n=H.querySelector(`[data-kind="${e}"][data-at="${t}"]`);return n?(Ls(n),!0):!1}function Is(){let e=H.querySelectorAll(`[data-kind="background-run"][data-active]`),t=e[e.length-1];return t?(Ls(t),!0):!1}function Ls(e){Os=!1,e.scrollIntoView({block:e.offsetHeight>H.clientHeight?`start`:`center`}),e.dataset.reveal=``,setTimeout(()=>delete e.dataset.reveal,Ps)}var Rs=500,zs=0,Bs=0,Vs=null;function Hs(){for(;H.childElementCount>Rs;){let e=H.firstElementChild;e.remove(),e!==Vs&&(e.dataset.kind===`user`&&zs++,Bs++)}Bs&&(Vs||(Vs=L(`div`,`px-5 py-2 text-center text-[11.5px] italic text-neutral-400`),Vs.dataset.kind=`trim`),Vs.textContent=`${Bs} earlier row${Bs===1?``:`s`} not shown — still in the transcript, not on this screen`,H.firstElementChild!==Vs&&H.prepend(Vs))}var Us={user:{row:``,body:`text-inherit`},assistant:{row:``,body:`text-neutral-900`},error:{row:`border-l-red-400 bg-red-50`,body:`text-red-700`},system:{row:`system-card border-l-cyan-500`,body:`text-neutral-500`}};function U(e,t,n=!1,r){es();let i=e===`assistant`?rs():null,a=Us[e],o=e===`user`&&r!==void 0&&ac(r)?r:void 0,s=o===void 0&&H.lastElementChild?.dataset.kind===e,c=L(`div`,`group relative ${a.row}`);c.dataset.kind=e,s&&(c.dataset.grouped=``),Es||(c.dataset.enter=``);let l=e===`user`?Bi(t):null,u=l?.text??t,d=e===`user`?Ie(u):null,f=d?.id||d?.when||d?.where?d:null,p=f&&(f.id?f.id!==`web`:f.name)?f:null,m=L(`div`,`whitespace-pre-wrap break-words ${a.body}`,f?.text??u);(l?.paths.length||f)&&(m.dataset.raw=t),n&&lc(m,t),r!==void 0&&oc(c,r),p&&c.append(Ws(p)),c.append(m);let ee=ws.sessionId();if(l?.paths.length&&ee){let e=Ka(c);for(let t of l.paths)e.append(so(ee,t))}if(e===`user`){Js?.();let e=L(`button`,`message-edit absolute right-full top-1 flex h-8 w-8 items-center justify-center rounded-full`);e.title=`Edit message — resends it and drops everything after it`,e.setAttribute(`type`,`button`),e.setAttribute(`aria-label`,`Edit message`),e.append(_(le)),e.onclick=()=>Zs(c,m),c.append(e)}if(o!==void 0){let e=L(`div`,`my-3 text-center text-[11px] text-neutral-400`);e.dataset.kind=`time`,e.dataset.at=String(o),nc(e),tc??=setInterval(rc,6e4),e.title=Qr(o),H.append(e)}return i&&H.append(i),H.append(c),Hs(),Ns(),m}function Ws(e){let t=L(`div`,`mb-1 flex flex-wrap items-baseline gap-x-2 gap-y-1 text-[11.5px] leading-tight opacity-85`),n=e?.name??e?.id;if(n){let r=L(`span`,`font-semibold text-inherit`,n);e?.id&&(r.title=e.id),t.append(r)}let r=ws.sessionChannel();return r&&r!==`web`&&t.append(L(`span`,`text-[10px] uppercase tracking-wide opacity-60`,r)),t}var Gs={"task-delegation":[i,`delegated`,`text-cyan-700`],"task-callback":[f,`callback`,`text-cyan-700`]};function Ks(e){let t=e.indexOf(`
|
|
77
77
|
|
|
78
78
|
`);if(t<0)return[null,e];let n=e.slice(0,t);return n.length>600||n.split(`
|
|
79
|
-
`).length>6?[null,e]:[n,e.slice(t+2)]}function
|
|
80
|
-
`)[0]}:{},runId:t.runId,sessionId:t.sourceSessionId});s.append(u),s.append(...to(l)),B.append(s),as(),Xo()}var ds=null,fs=e=>e.isConnected&&B.querySelector(`.message-edit`)?.parentElement===e;function ps(e,t){if(!fs(e))return;if(Vo.sessionState()!==`idle`){V(`error`,`can't edit while streaming — stop the turn first`);return}if(e.querySelector(`textarea`))return;let n=document.createElement(`textarea`);n.value=t.dataset.raw??t.textContent??``,n.className=`block w-full resize-none rounded-xl border border-indigo-300 bg-white px-3 py-2 text-neutral-900 focus:outline-none`,n.setAttribute(`aria-label`,`Edit latest message`);let r=ui(`Send edit`,!0),i=ui(`Cancel`),a=L(`div`,`message-editor`,n,L(`div`,`mt-2 flex flex-wrap justify-end gap-2`,i,r)),o=()=>{n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,192)}px`,r.disabled=!n.value.trim()};n.oninput=o,e.dataset.editing=``,t.classList.add(`hidden`),t.after(a),o(),n.focus(),n.setSelectionRange(n.value.length,n.value.length);let s=()=>{a.remove(),t.classList.remove(`hidden`),delete e.dataset.editing,ds=null};ds=s,i.onclick=()=>{s(),e.querySelector(`.message-edit`)?.focus({preventScroll:!0})},r.onclick=()=>{let t=n.value.trim();t&&ms(e,t)},a.onkeydown=e=>{e.isComposing||e.keyCode===229||(e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),i.click()),e.key===`Enter`&&!e.shiftKey&&e.target===n&&(e.preventDefault(),r.click()))}}async function ms(e,t){let n=Vo.sessionId();if(!n||!fs(e))return;if(Vo.sessionState()!==`idle`){V(`error`,`can't edit while streaming — stop the turn first`);return}ds?.();let r=[...B.querySelectorAll(`[data-kind="user"]`)],i=ns+r.indexOf(e),a=r[r.length-2]?.dataset.at;gs=a===void 0?null:Number(a);let o=e.previousElementSibling;for(o?.dataset.kind===`time`&&o.remove();e.nextElementSibling;)e.nextElementSibling.remove();e.remove(),Vo.ownTurn(t),V(`user`,t,!1,Date.now()),Xo(!0);let s=await x(`/api/sessions/${n}/turns/${i}/edit`,{text:t});if(!s.ok){let e=await S(s,`edit failed`);await Vo.reload(n),V(`error`,e)}}var hs=6e5,gs=null,_s;function vs(e){let t=Number(e.dataset.at);e.textContent=`${Qr(t).slice(0,16)} · ${Yr(t)}`}function ys(){let e=B.querySelectorAll(`[data-kind="time"]`);for(let t of e)vs(t);e.length||(clearInterval(_s),_s=void 0)}var bs=(e,t)=>new Date(e).toDateString()===new Date(t).toDateString();function xs(e){let t=gs;return gs=e,t===null||e-t>=hs||!bs(t,e)}function Ss(e,t){e.dataset.at=String(t),e.dataset.time=Qr(t).slice(11)}function Cs(e){for(let t of e.querySelectorAll(`pre`)){let e=t.querySelector(`code`);if(!e)continue;let n=L(`div`,`group/code relative`);t.replaceWith(n),n.append(t,ii(`absolute right-1.5 top-1.5 cursor-pointer rounded border border-black/[0.08] bg-white/85 px-1.5 py-0.5 text-[11px] text-neutral-500 opacity-0 transition-opacity hover:bg-white hover:text-neutral-800 focus:opacity-100 group-hover/code:opacity-100 pointer-coarse:opacity-100 dark:border-neutral-200`,()=>e.textContent??``))}}function ws(e){let t=Vo.sessionId(),n=L(`div`,``);return n.innerHTML=fn.sanitize(F.parse(t?Oa(e,t):e,{async:!1})),ni(n),n}function Ts(e,t){e.replaceChildren(...ws(t).childNodes),e.classList.remove(`whitespace-pre-wrap`),e.classList.add(`md`),Ji(e),Cs(e);for(let t of e.querySelectorAll(`:not(pre) > code`))ci(t,()=>t.textContent??``);Va(e);let n=Vo.sessionId();n&&La(e,n,Vo.sessionCwd())}function Es(e,t,n,r=!1){let{text:i,suggestions:a}=Ae(t);return v({text:i,suggestions:a})?Ds(e,y(t)):Ts(e,i),r&&Ga(e.parentElement??e,a,e=>Vo.send(`auto`,e)),n&&Ss(e.parentElement??e,n.completedAt),e}function Ds(e,t){e.classList.remove(`md`,`whitespace-pre-wrap`),e.replaceChildren(L(`span`,`text-[12.5px] italic text-neutral-400`,t?`Stayed silent — ${t}`:`Stayed silent.`))}var Os=(e,t,n=!1)=>Es(V(`assistant`,``),e,t,n),H=null,ks=null,As=!1,js=0,Ms=0;function Ns(e){let t=e.dataset.raw??``;for(;e.childNodes.length>Ms;)e.lastChild.remove();let n=Me(t,js);n>js&&(e.append(...ws(b(t.slice(js,n))).childNodes),js=n,Ms=e.childNodes.length),e.append(...ws(Ae(t.slice(js)).text).childNodes),e.classList.remove(`whitespace-pre-wrap`),e.classList.add(`md`)}function Ps(){if(ks){As=!0;return}As=!1,H&&(Ns(H),Xo()),ks=setTimeout(()=>{ks=null,As&&Ps()},80)}function Fs(){ks&&clearTimeout(ks),ks=null,As=!1}function Is(e){H||(H=Eo(Date.now()),js=0,Ms=0),H.dataset.raw=(H.dataset.raw??``)+e,Ps()}function Ls(){if(!H)return;let e=H;H=null,Fs(),e.classList.remove(`md`),e.classList.add(`whitespace-pre-wrap`),e.textContent=e.dataset.raw??``}function Rs(){if(!H)return;let e=H.dataset.raw;return Do(H),H=null,Fs(),e}function zs(e,t){e===``&&Ls();let n=Rs();jo(`done`);let r=e??n;r&&Os(r,t,!0)}function Bs(){let e=Rs();jo(`interrupted`),e&&Os(e)}function Vs(){ds?.(),clearInterval(_s),_s=void 0,B.replaceChildren(),ns=0,rs=0,is=null,gs=null,H=null,Fs(),yo(),Wa()}function Hs(e){if(!e){B.querySelector(`[data-kind="loading"]`)?.remove();return}let t=L(`div`,`flex flex-col gap-3 px-5 py-4`);t.dataset.kind=`loading`;for(let e of[`w-2/5`,`w-4/5`,`w-3/5`,`w-1/3`,`w-2/3`])t.append(L(`div`,`skeleton h-3.5 ${e}`));B.append(t)}function Us(e,t,n){Hs(!1);let r=new Map(n.map(e=>[e.runId,e])),i=e=>[...r].filter(([,t])=>t.queuedAt<=e).map(([e])=>e),a=e=>{for(let t of e){let e=r.get(t);e&&(so(e),r.delete(t))}},o=e.reduce((e,t,n)=>t.role===`assistant`?n:e,-1);Uo=!0;try{for(let[n,r]of e.entries()){let s=t===`streaming`&&n===e.length-1&&r.role===`assistant`,c=r.steps;if(c?.length&&(Ro(c,r.meta?.durationMs,s,n),r.meta&&a(i(r.meta.completedAt))),r.text){if(r.role===`system`&&r.origin){a(r.origin.kind===`task-message`?[r.origin.runId]:r.origin.runIds??[r.origin.runId]),us(r.text,r.origin);continue}s?Is(r.text):r.role===`assistant`?Os(r.text,r.meta,t===`idle`&&n===o):V(r.role,r.text,!1,r.at)}}for(let e of r.values())so(e)}finally{Uo=!1}Xo(!0)}var Ws=window.fetch.bind(window),Gs=20,Ks=6e4,qs=[],Js=new Map,Ys=e=>e instanceof Error?e.stack??`${e.name}: ${e.message}`:void 0;function Xs(e,t){let n=t===void 0?e:`${e}: ${String(t)}`,r=Date.now();return r-(Js.get(n)??-6e4)<Ks||(Js.size>100&&Js.clear(),Js.set(n,r),qs=qs.filter(e=>r-e<6e4),qs.length>=Gs)?null:(qs.push(r),Ws(`/api/client-log`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({message:n,stack:Ys(t),view:location.hash||`/`}),keepalive:!0}).catch(()=>{}),V(`error`,n))}function Zs(){window.__pierReporting=!0,window.addEventListener(`error`,e=>{!e.error&&e.message.includes(`ResizeObserver loop`)||Xs(`script error: ${e.message}`,e.error)}),window.addEventListener(`unhandledrejection`,e=>{Xs(`unhandled rejection`,e.reason)})}var Qs=window.fetch.bind(window),$s=()=>{location.assign(`/login?next=${encodeURIComponent(location.pathname+location.hash)}`)};function ec(){window.fetch=async(...e)=>{let t=await Qs(...e);return t.status===401&&$s(),t}}function tc(e,t){if(e.readyState!==EventSource.CLOSED)return;let n=()=>{let e=Xs(`${t} stream disconnected`);if(!e)return;let n=ui(`Reload`);n.classList.add(`ml-2`,`align-middle`),n.onclick=()=>location.reload(),e.append(` `,n)};Qs(`/api/sessions`).then(e=>e.status===401?$s():n(),n)}var nc=/Mac|iP(?:hone|ad|od)/.test(navigator.userAgent),rc=nc?`⌘`:`Ctrl+`,ic=nc?`⇧`:`Shift+`,ac=e=>{let t=e.startsWith(`meta+`),n=t?e.slice(5):e;return n.startsWith(`shift+`)?{key:n.slice(6),shift:!0,meta:t}:{key:n,shift:!1,meta:t}};function oc(e){let{key:t,shift:n,meta:r}=ac(e);return`${r?`⌘`:rc}${n?ic:``}${t.toUpperCase()}`}var sc=()=>document.querySelector(`dialog[open]`)!==null,cc={"[":`{`,"]":`}`},lc=`pointer-events-none fixed z-50 flex items-center gap-2 whitespace-nowrap rounded-md bg-neutral-800 px-2 py-1 text-[11.5px] text-neutral-100 shadow-lg`;function uc(e,t,n){e.removeAttribute(`title`);let r=null,i=()=>{r?.remove(),r=null,document.removeEventListener(`keydown`,i,!0)};e.addEventListener(`pointerenter`,a=>{if(a.pointerType!==`mouse`)return;i(),r=L(`div`,lc,t,L(`kbd`,`rounded bg-white/15 px-1 py-px font-sans text-[10.5px]`,n)),document.body.append(r);let o=e.getBoundingClientRect(),s=o.bottom+6,c=s+r.offsetHeight+8<=window.innerHeight;r.style.top=`${c?s:Math.max(8,o.top-r.offsetHeight-6)}px`,r.style.left=`${Math.max(8,Math.min(o.left,window.innerWidth-r.offsetWidth-8))}px`,document.addEventListener(`keydown`,i,!0)}),e.addEventListener(`pointerleave`,i),e.addEventListener(`pointerdown`,i)}function dc(e,t,n,r,i){uc(e,n,oc(t)),hc(t,r,i)}function fc(e,t,n,r){uc(e,t,`Esc`),document.addEventListener(`keydown`,e=>{e.key!==`Escape`||e.isComposing||e.defaultPrevented||sc()||!r()||(e.preventDefault(),n())})}var pc=`input, textarea, select, [contenteditable]`;function mc(e,t,n,r,i){uc(e,n,t[0].toUpperCase()),document.addEventListener(`keydown`,e=>{e.metaKey||e.ctrlKey||e.altKey||e.isComposing||e.defaultPrevented||!e.key||!t.includes(e.key.toLowerCase())||e.target?.closest?.(pc)||sc()||!i()||(e.preventDefault(),r())})}function hc(e,t,n){let{key:r,shift:i,meta:a}=ac(e),o=cc[r];document.addEventListener(`keydown`,e=>{if(!e.key||e.altKey||e.shiftKey!==i)return;let s=e.key.toLowerCase();(s===r||s===o)&&((a?!e.metaKey:!e.metaKey&&!e.ctrlKey)||n?.()||(e.preventDefault(),e.stopPropagation(),t()))},!0)}var U,gc=I(`#composer`),W=I(`#input`),_c=I(`#send`),vc=I(`#send-arrow`),yc=I(`#send-queue`),bc=I(`#stop`),xc=I(`#queue-panel`),Sc=I(`#queue-rows`),Cc=I(`#queue-label`),wc=L(`div`,`hidden max-h-48 overflow-y-auto border-t border-neutral-200 px-4 py-2 text-[13px]`);wc.id=`recovery-panel`,xc.after(wc);var Tc=I(`#image-strip`),Ec=I(`#attach-input`),Dc=!1,Oc=0,kc=new Set,Ac=[],jc=[];function Mc(){let e=window.visualViewport;if(!e)return;let t=()=>{let t=e.scale<=1.05&&window.innerHeight-e.height-e.offsetTop>80;t?document.body.dataset.kb=``:delete document.body.dataset.kb,document.body.style.height=t?`${String(e.height)}px`:``,t&&window.scrollY&&window.scrollTo(0,0)};e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t)}function Nc(){let e=gc.parentElement,t=[xc,wc,gc],n=new ResizeObserver(()=>{let n=t.reduce((e,t)=>e+t.offsetHeight,0);e.style.setProperty(`--dock-h`,`${String(n)}px`)});for(let e of t)n.observe(e,{box:`border-box`})}function Pc(){W.focus()}function Fc(e){let t=jc.indexOf(e);return t<0?!1:(jc.splice(t,1),!0)}function Ic(e){jc.push(e)}function Lc(){jc=[]}function Rc(){let e=U.sessionState()===`streaming`,t=U.sessionId()!==null,n=U.starting();_c.disabled=!t,_c.className=`flex h-7 w-7 flex-none items-center justify-center rounded-lg ${t?e?`cursor-pointer bg-amber-100 text-amber-700 hover:bg-amber-200 active:bg-amber-300`:`cursor-pointer bg-indigo-600 text-white hover:bg-indigo-500 active:bg-indigo-700 dark:text-neutral-50`:`cursor-default bg-neutral-100 text-neutral-400`}`,_c.title=t?e?`Queue — delivered when the turn ends`:`Send`:n?`Starting the session…`:`No session`,W.placeholder=n?`Starting the session…`:`Message…`,vc.classList.toggle(`hidden`,e),yc.classList.toggle(`hidden`,!e),bc.classList.toggle(`hidden`,!e),bc.classList.toggle(`flex`,e)}function zc(){let e=U.chatVisible()&&Dc;xc.classList.toggle(`hidden`,!e),xc.classList.toggle(`flex`,e),wc.classList.toggle(`hidden`,!U.chatVisible()||!wc.childElementCount)}function Bc(e,t=!1){let n=U.sessionId();if(wc.replaceChildren(...e.map(e=>{let t=L(`details`,`py-1`),r=e.status===`submitting`?`Handing off`:e.status===`not-submitted`?`Not submitted`:`Acceptance unknown`,i=e.status===`submitting`?``:`; automatic queue paused`;t.append(L(`summary`,`cursor-pointer break-words text-amber-700`,`Queue recovery: ${r}${i} (in memory)`));for(let n of[...e.steering,...e.followUp]){let e=L(`div`,`flex items-start gap-2 border-t border-neutral-100 py-1`);e.append(L(`span`,`min-w-0 flex-1 whitespace-pre-wrap break-words`,n),ii(`flex-none cursor-pointer px-1 text-neutral-500 hover:text-neutral-800`,()=>n)),t.append(e)}e.error&&t.append(L(`div`,`break-words text-red-600`,e.error));let a=L(`button`,`cursor-pointer py-1 text-neutral-500 disabled:cursor-default disabled:opacity-40`,`Acknowledge`);return a.type=`button`,a.disabled=e.status===`submitting`,a.title=`Remove this recovery copy without sending it`,a.onclick=async()=>{if(!n||!confirm(`Remove this recovery copy? This does not resend the messages.`))return;let t=await x(`/api/sessions/${n}/queue/recovery/${e.id}/ack`,{}),r=t.ok?null:await S(t,`Could not acknowledge queue recovery`);U.sessionId()===n&&(r===null?await U.reload(n):V(`error`,r))},t.append(a),t})),t){let e=L(`div`,`flex flex-wrap items-center gap-x-2 py-1 text-amber-700`,`Automatic queue paused: acceptance unknown (in memory)`),t=L(`button`,`cursor-pointer underline`,`Recall queue`);t.title=`Clear the live queue and return its messages to the composer`,t.onclick=()=>void rl(),e.append(t),wc.prepend(e)}zc()}function Vc(e,t){++Oc;let n=[...e.map(e=>({mode:`steer`,text:e})),...t.map(e=>({mode:`queued`,text:e}))];Dc=n.length>0,Cc.textContent=n.length>1?`Queued · ${n.length}`:`Queued`,zc(),Sc.replaceChildren(...n.map(e=>{let t=L(`li`,`flex items-start gap-2 text-[13px] leading-[18px]`);return e.mode===`steer`&&t.append(L(`span`,`flex-none rounded bg-indigo-100 px-1 py-0.5 text-[10.5px] font-semibold uppercase tracking-wide text-indigo-700`,e.mode)),t.append(L(`span`,`min-w-0 whitespace-pre-wrap break-words text-neutral-700`,e.text)),t}))}var Hc=8;function Uc(){let e=U.sessionId();e&&Ac.length?Xc.set(e,Ac):e&&Xc.delete(e),Tc.classList.toggle(`hidden`,Ac.length===0),Tc.classList.toggle(`flex`,Ac.length>0),Tc.replaceChildren(...Ac.map((e,t)=>{let n=e.mimeType.startsWith(`image/`)?ya(`data:${e.mimeType};base64,${e.data}`):L(`span`,`flex h-16 max-w-40 items-center truncate rounded-md border border-neutral-200 bg-neutral-50 px-2 text-[12px] text-neutral-700`,e.name??`file`),r=L(`button`,`absolute -right-1.5 -top-1.5 flex h-4 w-4 cursor-pointer items-center justify-center rounded-full bg-neutral-700 text-[10px] leading-none text-white hover:bg-red-600`,_(_e,`h-3 w-3`));return r.setAttribute(`type`,`button`),r.setAttribute(`aria-label`,`Remove ${e.name??`attachment`}`),r.onclick=()=>{Ac.splice(t,1),Uc()},L(`div`,`relative`,n,r)}))}function Wc(e){if(Ac.length>=Hc){V(`error`,`attachment limit is ${Hc} files per message`);return}if(e.size>33554432){V(`error`,`${e.name||`file`} is too large (32MB max)`);return}let t=new FileReader;t.onload=()=>{let n=t.result;Ac.push({data:n.slice(n.indexOf(`,`)+1),mimeType:e.type||`application/octet-stream`,name:e.name||void 0}),Uc()},t.readAsDataURL(e)}async function Gc(e){let t=[];for(let n of e){let e=await x(`/api/inbox`,n);if(!e.ok)return null;let{path:r}=await e.json();t.push(Fi(r))}return t}var Kc=`pier.draft.`,qc=e=>`${Kc}${e}`,Jc=0;function Yc(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(Kc)&&e.push(n)}for(let t of e){let e=localStorage.getItem(t);e&&!sessionStorage.getItem(t)&&sessionStorage.setItem(t,e),localStorage.removeItem(t)}}catch(e){console.warn(`could not move older drafts out of localStorage`,e)}}var Xc=new Map;function Zc(e=U.sessionId(),t=W.value){e&&(t?sessionStorage.setItem(qc(e),t):sessionStorage.removeItem(qc(e)))}function Qc(e){++Jc,W.value=sessionStorage.getItem(qc(e))??``,$c(),Ac=Xc.get(e)??[],Uc()}function $c(){let e=W.style.height;W.style.height=`auto`;let t=`${Math.min(W.scrollHeight,192)}px`;W.style.height=t,t!==e&&Xo()}var el=!1;async function tl(e,t){let n=(t??W.value).trim(),r=t===void 0?Ac:[],i=U.sessionId();if(!(!n&&r.length===0||!i)){if(t===void 0){if(el)return;el=!0,W.value=``,$c(),Zc(),Ac=[],Uc()}try{let t=[];if(r.length){let e=await Gc(r);if(e===null){V(`error`,`attachment upload failed`),W.value=[n,W.value.trim()].filter(Boolean).join(`
|
|
81
|
-
`)
|
|
82
|
-
`),o=
|
|
83
|
-
`);o&&(
|
|
84
|
-
`)}`)}o&&t===Oc&&Vc([],[])}finally{kc.delete(e)}}function il(e){U=e,Yc(),Mc(),Nc();let t=()=>{let e=U.sessionId();e&&fetch(`/api/sessions/${e}/abort`,{method:`POST`})};bc.onclick=t,fc(bc,`Stop the running turn`,t,()=>U.sessionState()===`streaming`&&U.chatVisible()),I(`#queue-steer`).onclick=()=>void nl(`steer`),I(`#queue-restart`).onclick=()=>void nl(`restart`),I(`#queue-recall`).onclick=()=>void rl(),gc.onsubmit=e=>{e.preventDefault(),tl(`auto`)},mc(W,[`/`],`Write a message`,Pc,U.chatVisible),W.onfocus=Yo,W.oninput=()=>{$c(),Zc()};let n=!matchMedia(`(pointer: coarse)`).matches;W.onkeydown=e=>{e.isComposing||e.keyCode===229||n&&e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),tl(`auto`))},W.onpaste=e=>{for(let t of e.clipboardData?.items??[]){let e=t.kind===`file`?t.getAsFile():null;e&&Wc(e)}let t=e.clipboardData?.getData(`text/plain`)??``,n=t.trim();!n||n===t||(e.preventDefault(),W.setRangeText(n,W.selectionStart??0,W.selectionEnd??0,`end`),$c(),Zc())},B.ondragover=e=>e.preventDefault(),B.ondrop=e=>{e.preventDefault();for(let t of e.dataTransfer?.files??[])Wc(t)},I(`#attach`).onclick=()=>Ec.click(),Ec.onchange=()=>{for(let e of Ec.files??[])Wc(e);Ec.value=``},Rc()}var al=`pier.push`,ol=`/sw.js`,sl=()=>/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent),cl=()=>matchMedia(`(display-mode: standalone)`).matches||navigator.standalone===!0;function ll(){return window.isSecureContext?sl()&&!cl()?`On iPhone and iPad, notifications work only from the installed app: Share → Add to Home Screen, then open Pier from that icon.`:!(`serviceWorker`in navigator)||!(`PushManager`in window)||!(`Notification`in window)?`This browser has no Web Push support.`:``:`Notifications need HTTPS. Reach this Pier through its public URL, not over plain http.`}var ul=[[/iPhone/,`iPhone`],[/iPad/,`iPad`],[/Android/,`Android`],[/Macintosh/,`Mac`],[/Windows/,`Windows`]],dl=[[/Edg\//,`Edge`],[/Chrome\//,`Chrome`],[/Firefox\//,`Firefox`],[/Safari\//,`Safari`]];function fl(){let e=navigator.userAgent,t=(t,n)=>t.find(([t])=>t.test(e))?.[1]??n;return`${t(ul,`Linux`)} · ${t(dl,`browser`)}${cl()?` (installed)`:``}`}var pl=e=>{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n},ml=null;async function hl(){return!(`serviceWorker`in navigator)||!window.isSecureContext?null:(ml??=await navigator.serviceWorker.register(ol,{scope:`/`}).catch(e=>(console.warn(`service worker registration failed`,e),null)),ml)}var gl=(e,t)=>{let n=e?new Uint8Array(e):null;return n?.length===t.length&&n.every((e,n)=>e===t[n])};async function _l(e){let{publicKey:t}=await Ge(`/api/push`,`Could not read this instance's push key`),n=pl(t),r=await e.pushManager.getSubscription();if(r){if(gl(r.options.applicationServerKey,n))return r;await r.unsubscribe()}return e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:n})}async function vl(e){return x(`/api/push/subscribe`,{...e.toJSON(),label:fl()})}async function yl(){Sl();let e=await hl();if(!(!e||localStorage.getItem(al)!==`on`)&&!(!(`Notification`in window)||Notification.permission!==`granted`))try{await vl(await _l(e))}catch(e){console.warn(`re-registering this browser for notifications failed`,e)}}var bl=null,xl=null;function Sl(){window.addEventListener(`beforeinstallprompt`,e=>{e.preventDefault(),bl=e,xl?.()}),window.addEventListener(`appinstalled`,()=>{bl=null,xl?.()})}function Cl(e){let t=navigator;(e>0?t.setAppBadge?.(e):t.clearAppBadge?.())?.catch(()=>{})}function wl(){let e=L(`span`,`text-[11.5px]`,``),t=ui(`Send a test notification`),n=L(`div`,`flex items-center gap-3`,t,e),r=L(`div`,`flex flex-col gap-4`),i=()=>localStorage.getItem(al)===`on`;async function a(){Ai(e,`saving`,`asking this browser…`);let t=await Notification.requestPermission();if(t!==`granted`)return localStorage.setItem(al,`off`),c(),Ai(e,`failed`,t===`denied`?`Notifications are blocked for this site — allow them in the browser's site settings, then try again.`:`No answer to the permission prompt.`);let n=await hl();if(!n)return Ai(e,`failed`,`This browser refused to register a service worker.`);try{let t=await vl(await _l(n));if(!t.ok)return Ai(e,`failed`,await S(t,`Could not register this browser`));localStorage.setItem(al,`on`),c(),Ai(e,`saved`,`This browser will be notified when a turn finishes unseen.`)}catch(t){Ai(e,`failed`,`Could not subscribe: ${String(t)}`)}}async function o(){localStorage.setItem(al,`off`),c();let t=await(await hl())?.pushManager.getSubscription();t&&(await x(`/api/push/unsubscribe`,{endpoint:t.endpoint}),await t.unsubscribe()),Ai(e,`idle`,`This browser will not be notified.`)}t.onclick=()=>{Ai(e,`saving`,`sending…`),(async()=>{let t=await x(`/api/push/test`,{});if(!t.ok)return Ai(e,`failed`,await S(t,`Could not send`));let{sent:n,failed:r}=await t.json();Ai(e,r?`failed`:`saved`,`Handed ${String(n)} device(s) to their push service${r?`, ${String(r)} refused`:``}.`)})()};function s(){if(!bl)return[];let e=ui(`Install Pier`,!0);return e.onclick=()=>{let e=bl;e&&e.prompt().then(()=>e.userChoice).finally(()=>{bl=null,c()})},[L(`div`,`flex items-center gap-3`,e,L(`span`,`text-[11.5px] leading-snug text-neutral-500`,`Its own window and icon — and where notifications look like an app's.`))]}function c(){let e=ll();if(e){r.replaceChildren(...s(),L(`p`,`text-[12.5px] leading-snug text-neutral-500`,e));return}let c=i()&&Notification.permission===`granted`;t.disabled=!c,r.replaceChildren(...s(),Oi(`Notify this device`,`A turn that finishes while nobody is looking at it becomes a notification here. Per browser — each device is enabled on its own.`,c,e=>void(e?a():o())),n)}return xl=c,c(),bi(`Notifications`,`Web Push, so a finished turn reaches you with the workbench closed. Installed — Chrome's address-bar icon, or Share → Add to Home Screen on iOS — Pier notifies you the way an app does.`,r)}var G=null,Tl=null,El=null;function Dl(e){G&&!G.contains(e.target)&&e.target!==El&&K()}var Ol={ArrowDown:1,ArrowUp:-1},kl={n:1,j:1,p:-1,k:-1},Al=()=>G!==null;function jl(e){if(!(e.altKey||e.metaKey||e.shiftKey||!e.key))return e.ctrlKey?kl[e.key.toLowerCase()]:Ol[e.key]}function Ml(e,t){let n=[...e.querySelectorAll(`button:not(:disabled)`)];if(!n.length)return!1;let r=n.indexOf(document.activeElement);return n[t===`first`?0:t===`last`?n.length-1:r<0?t>0?0:n.length-1:(r+t+n.length)%n.length]?.focus(),!0}function Nl(e){if(e.dataset.menu===`true`)return{rows:e,ends:!0};let t=e.querySelector(`[data-list]`);return t?{rows:t,ends:!1}:null}function Pl(e){let t=G?Nl(G):null;if(t){let n=(t.ends?e.key===`Home`?`first`:e.key===`End`?`last`:void 0:void 0)??jl(e);if(n!==void 0&&Ml(t.rows,n)){e.preventDefault();return}}e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),K())}function Fl(e){G&&!G.contains(e.target)&&K()}function K(){if(!G)return;document.removeEventListener(`pointerdown`,Dl,!0),document.removeEventListener(`focusin`,Dl,!0),document.removeEventListener(`keydown`,Pl,!0),window.removeEventListener(`scroll`,Fl,!0),window.removeEventListener(`resize`,K);let e=G;G=null,El?.remove(),El=null,e.contains(document.activeElement)&&Tl?.focus({preventScroll:!0}),Tl?.removeAttribute(`aria-expanded`),Tl=null,e.inert=!0,e.dataset.closing=``,Promise.allSettled(e.getAnimations().map(e=>e.finished)).then(()=>e.remove())}var Il=null;function Ll(e){let t=e.getBoundingClientRect(),n={top:t.bottom+4,left:t.left};return t.width||t.height?n:Il?.anchor===e?{top:Il.top,left:Il.left}:n}var Rl=()=>window.innerWidth<640;function zl(e,t){K(),document.querySelectorAll(`.glass-menu[data-closing]`).forEach(e=>e.remove());let n=Rl();G=L(`div`,`glass-menu fixed z-50 border border-neutral-200 p-2 font-sans leading-6 ${n?`rounded-3xl inset-x-2 bottom-2 max-h-[70dvh] overflow-y-auto pb-[calc(0.25rem+env(safe-area-inset-bottom))] text-[16px]`:`rounded-2xl min-w-60 max-w-[min(42rem,calc(100vw-1rem))] max-h-[calc(100dvh-1rem)] overflow-y-auto text-[15px]`}`),G.dataset.presentation=n?`sheet`:`popover`,G.append(t);let r=e.closest(`dialog[open]`)??document.body;if(n&&(El=L(`div`,`fixed inset-0 z-50 bg-black/15`),El.onclick=e=>{e.stopPropagation(),K()},r.append(El)),r.append(G),!n){let t=Ll(e);Il={anchor:e,...t},G.style.top=`${Math.max(8,Math.min(t.top,window.innerHeight-G.offsetHeight-8))}px`,G.style.left=`${Math.max(8,Math.min(t.left,window.innerWidth-G.offsetWidth-8))}px`}Tl=e,Tl.setAttribute(`aria-expanded`,`true`),G.tabIndex=-1,(G.querySelector(`button, input, select, [tabindex='0']`)??G).focus({preventScroll:!0}),document.addEventListener(`pointerdown`,Dl,!0),document.addEventListener(`focusin`,Dl,!0),document.addEventListener(`keydown`,Pl,!0),window.addEventListener(`scroll`,Fl,!0),window.addEventListener(`resize`,K)}function Bl(e){let t=L(`button`,`flex w-full cursor-pointer items-center gap-2 rounded-xl px-3 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100 ${Rl()?`min-h-12 py-3`:`min-h-10 py-2`}`,...e.checked===void 0?[]:[_(o,`h-3 w-3 text-indigo-600 ${e.checked?``:`invisible`}`)],L(`span`,`min-w-0 truncate`,e.label));if(e.hint){let n=L(`span`,`ml-auto max-w-28 shrink-[999] truncate text-[13px] text-neutral-500`,e.hint);n.title=e.hint,t.append(n)}return e.disabled&&(t.disabled=!0,t.classList.add(`cursor-default`,`text-neutral-400`,`hover:bg-transparent`,`hover:text-neutral-400`)),t.onclick=()=>e.onSelect(),t}function Vl(e,t,n){let r=L(`div`,``);if(n&&Rl()){let e=L(`button`,`icon-btn h-11 w-11`,_(_e));e.setAttribute(`aria-label`,`Close session actions`),e.onclick=K,r.append(L(`div`,`flex items-center gap-3 border-b border-neutral-200 px-3 pb-1 mb-1`,L(`span`,`min-w-0 flex-1 truncate text-sm font-medium text-neutral-500`,n),e))}for(let e of t)e.separatorBefore&&r.append(L(`hr`,`my-2 border-neutral-200`)),r.append(Bl(e));zl(e,r),G&&(G.dataset.menu=`true`,G.setAttribute(`aria-label`,n?`Actions for ${n}`:`Actions`),G.setAttribute(`role`,`group`))}var Hl=async e=>{let t=await C(`/api/fs/ls${e?.startsWith(`/`)?`?path=${encodeURIComponent(e)}`:``}`,`Could not list directories`);return t.ok?t.value:null},Ul=e=>e.entries.filter(e=>e.dir&&!e.name.startsWith(`.`)).map(e=>e.name),Wl=`flex w-full min-h-10 cursor-pointer items-center gap-2 rounded-xl px-3 py-2 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100`,Gl=`font-mono text-[0.875rem]`,Kl=(e,t,n)=>{let r=di(e,`${Wl} ${t}`);return r.onclick=n,r};function ql(e,t){let n=L(`div`,`mt-2 flex-none border-t border-neutral-200 pt-2`),r=Kl(`New folder`,`text-neutral-500`,()=>{let r=document.createElement(`input`);r.className=`w-full rounded-xl border-0 bg-neutral-100 px-3 py-2 ${Gl} focus:outline-none`,r.placeholder=`folder-name`;let i=L(`p`,`hidden px-3 pt-1 text-[0.8125rem] text-red-600`);r.onkeydown=async n=>{if(n.key!==`Enter`)return;n.preventDefault();let a=await x(`/api/fs/mkdir`,{path:e,name:r.value});if(!a.ok){i.textContent=(await a.json()).error??`could not create`,i.classList.remove(`hidden`);return}t((await a.json()).path)},n.replaceChildren(r,i),r.focus()});return r.prepend(_(ue)),n.append(r),n}function Jl(e,t,n){let r=e=>{n(e),K()};async function i(t){let n=await Hl(t);if(!n)return;let a=L(`div`,`flex max-h-[60dvh] w-full flex-col sm:w-88`),o=di(`Use`,`btn btn-primary ml-auto flex-none px-3 py-1 text-[0.8125rem]`);o.onclick=()=>r(n.path);let s=document.createElement(`input`);s.className=`min-w-0 flex-1 border-0 bg-transparent ${Gl} text-neutral-600 focus:outline-none`,s.value=n.path,s.spellcheck=!1,s.title=`Type or paste a path, then Enter`,s.onfocus=()=>s.select();let c=L(`p`,`hidden flex-none px-3 pb-1 text-[0.8125rem] text-red-600`);s.onkeydown=async e=>{if(e.key!==`Enter`)return;e.preventDefault(),e.stopPropagation();let t=s.value.trim();if(!t)return;let n=await Hl(t);if(!n){c.textContent=`${t} is not a folder this can read`,c.classList.remove(`hidden`);return}r(n.path)};let l=L(`div`,`mb-2 flex flex-none items-center gap-2 border-b border-neutral-200 px-3 pb-2 pt-1`,s,o),u=L(`div`,`min-h-0 flex-1 overflow-y-auto`);u.dataset.list=``,n.parent&&u.append(Kl(`../`,`${Gl} text-neutral-500`,()=>void i(n.parent)));let d=Ul(n);for(let e of d)u.append(Kl(e,`truncate`,()=>void i(`${n.path}/${e}`.replace(`//`,`/`))));d.length||u.append(L(`p`,`px-3 py-2 text-[0.8125rem] text-neutral-400`,`No sub-folders.`)),a.append(l,c,u,ql(n.path,e=>void i(e))),zl(e,a)}i(t)}function Yl(e,t,n,r){Vl(e,[...t.map(e=>({label:e.path,...e.hint?{hint:e.hint}:{},checked:e.path===n,onSelect:()=>{K(),r(e.path)}})),{label:`Browse…`,onSelect:()=>Jl(e,n||void 0,r)}])}var Xl=(e,t)=>n=>{e.value=n,e.dispatchEvent(new Event(`input`,{bubbles:!0})),t?.(n)};function Zl(e,t){let n=di(`Browse…`,`flex-none cursor-pointer rounded-md border border-neutral-300 px-2 py-1 text-[12px] text-neutral-600 hover:bg-neutral-100`);return n.onclick=()=>Jl(n,e.value.trim()||void 0,Xl(e,t)),n}function Ql(e,t,n){let r=document.createElement(`input`);return r.className=`min-w-0 flex-1 rounded-md border border-neutral-300 bg-white px-2 py-1 font-mono text-[12.5px] focus:border-indigo-400 focus:outline-none`,r.value=e,r.placeholder=t,r.oninput=()=>n(r.value),{el:L(`div`,`flex items-center gap-1.5`,r,Zl(r,n)),input:r}}var q=I(`#sidebar`),$l=I(`#drawer-scrim`),eu=I(`#mobile-title`),tu=I(`#mobile-menu`),nu=I(`#session-meta`);function ru(){delete q.dataset.open,$l.classList.add(`hidden`),du()}function iu(e,t){eu.textContent=e,eu.classList.toggle(`cursor-pointer`,t),tu.classList.toggle(`hidden`,!t)}var au=`pier.railClosed`;localStorage.getItem(au)===`1`&&(document.body.dataset.rail=`closed`);function ou(e){document.body.dataset.rail=e?`closed`:``,localStorage.setItem(au,e?`1`:`0`),du()}function su(){if(q.dataset.open!==void 0)return ru();q.dataset.open=``,$l.classList.remove(`hidden`),du()}var cu=window.matchMedia(`(width < 48rem)`),lu=()=>cu.matches;function uu(){lu()?I(`#mobile-bar`).append(nu):I(`#chat-menu`).before(nu)}function du(){let e=lu()&&q.dataset.open!==void 0,t=I(`main`);t.inert=e,q.inert=lu()?!e:document.body.dataset.rail===`closed`,I(`#drawer-toggle`).setAttribute(`aria-expanded`,String(e)),e&&!q.contains(document.activeElement)&&I(`#new-session`).focus(),q.inert&&q.contains(document.activeElement)&&I(lu()?`#drawer-toggle`:`#rail-toggle`).focus()}var fu=[I(`#rail-toggle`),I(`#drawer-toggle`)],pu=`attention absolute -right-0.5 -top-0.5 rounded-full bg-amber-500`,mu=e=>e===1?L(`span`,`${pu} h-2 w-2`):L(`span`,`${pu} flex h-3.5 min-w-3.5 items-center justify-center px-0.5 text-[9px] font-semibold text-white`,e>9?`9+`:String(e));function hu(e){for(let t of fu)t.querySelector(`.attention`)?.remove(),e&&t.append(mu(e))}var gu=20,_u=.35,vu=8;function yu(){let e=-1,t=0,n=!1,r=!1,i=1,a=e=>{q.style.transition=`none`,q.style.transform=`translateX(${String(e-i)}px)`,$l.style.transition=`none`,$l.classList.remove(`hidden`),$l.style.opacity=String(e/i)},o=t=>{q.style.transition=``,q.style.transform=``,$l.style.transition=``,$l.style.opacity=``,t?(q.dataset.open=``,$l.classList.remove(`hidden`),du()):ru(),e=-1,r=!1};window.addEventListener(`touchstart`,a=>{if(r||(e=-1,!lu()||a.touches.length!==1))return;let o=a.touches[0],s=q.dataset.open!==void 0;if(i=q.offsetWidth||1,s){if(o.clientX>i)return}else{if(o.clientX>gu||a.target?.closest(`button, a, input, textarea, select`))return;a.preventDefault()}e=o.clientX,t=o.clientY,n=!s},{passive:!1}),window.addEventListener(`touchmove`,o=>{if(e<0)return;let s=o.touches[0],c=s.clientX-e;if(!r){if(Math.abs(s.clientY-t)>Math.abs(c))return void(e=-1);if(Math.abs(c)<vu)return;r=!0}o.preventDefault(),a(Math.max(0,Math.min(i,n?c:i+c)))},{passive:!1});let s=()=>{if(e<0)return;if(!r)return void(e=-1);let t=q.getBoundingClientRect().right;o(n?t>i*_u:t>i*.65)};window.addEventListener(`touchend`,s),window.addEventListener(`touchcancel`,s)}function bu(e){yu(),du(),uu(),cu.addEventListener(`change`,()=>{ru(),uu()}),I(`#drawer-toggle`).setAttribute(`aria-controls`,`sidebar`),q.addEventListener(`keydown`,e=>{if(!(!lu()||q.dataset.open===void 0||e.defaultPrevented||e.isComposing)){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),ru();else if(e.key===`Tab`){let t=[...q.querySelectorAll(`button, a[href], summary`)].filter(e=>e.getClientRects().length&&!e.matches(`:disabled`)),n=e.shiftKey?t.at(-1):t[0],r=e.shiftKey?t[0]:t.at(-1);document.activeElement===r&&(e.preventDefault(),n?.focus())}}}),I(`#drawer-toggle`).onclick=su,$l.onclick=ru,tu.onclick=()=>e.sessionMenu(tu),eu.onclick=()=>{tu.classList.contains(`hidden`)||e.sessionInfo(eu)};let t=I(`#rail-toggle`);t.onclick=()=>ou(document.body.dataset.rail!==`closed`),dc(t,`meta+b`,`Toggle sidebar`,()=>lu()?su():ou(document.body.dataset.rail!==`closed`))}var J,xu=I(`#session-list`),Su=I(`#new-session`),Cu=e=>e.modified??e.createdAt;function wu(e){return{top:e.filter(e=>e.rank!==void 0).sort((e,t)=>(e.rank??0)-(t.rank??0)),rest:e.filter(e=>e.rank===void 0).sort((e,t)=>t.createdAt-e.createdAt)}}function Tu(e,t){let{top:n,rest:r}=wu(e),i=[...n,...r].slice(0,t);return{rows:i,hidden:e.length-i.length}}function Eu(e,t,n){let{top:r,rest:i}=wu(e),a=[...r,...i];if(!a.length)return;let o=a.findIndex(e=>e.id===t),s=o<0?a[0]:a[(o+n+a.length)%a.length];return s&&s.id!==t?s.id:void 0}var Du=8,Ou=`session-more hidden h-7 w-7 flex-none cursor-pointer items-center justify-center rounded-lg text-neutral-400 hover:bg-neutral-200 hover:text-neutral-700`,ku=e=>e.unread,Au=e=>`${e} subagent${e>1?`s`:``} running`,ju=e=>e.state===`streaming`||ku(e)||e.activeRuns>0;function Mu(e){if(!ju(e))return[];let t=e.state===`streaming`?[`bg-green-500 animate-pulse`,`working…`]:ku(e)?[`bg-amber-500`,`turn finished — not viewed yet`]:[`bg-sky-500`,Au(e.activeRuns)],n=L(`span`,`h-2 w-2 flex-none rounded-full ${t[0]}`);return n.title=t[1],[n]}async function Nu(e){let t=window.prompt(`Session name — empty resets it to the first message`,e.title??``);if(t===null)return;let n=e.title,r=t=>{e.title=t,Bu(),J.onTitleChanged()};r(t.trim()||void 0),(await x(`/api/sessions/${e.id}/rename`,{name:t})).ok||r(n)}var Pu=`flex-none text-xs font-medium uppercase leading-5 text-neutral-500`,Fu=e=>e.channel&&e.channel!==`web`?[L(`span`,Pu,e.channel[0]??``)]:[];function Iu(e,t=L(`button`,Ou,_(m))){let n=e.id===J.currentId(),r=L(`li`,`flex items-center gap-1 hover:bg-neutral-100 ${n?`bg-indigo-50 hover:bg-indigo-50`:``}`);t.setAttribute(`type`,`button`),t.setAttribute(`aria-label`,`Session actions: ${e.title??`untitled`}`),t.title=`Session actions`,t.onclick=n=>{n.stopPropagation(),J.sessionMenu(t,e)};let i=L(`button`,`session-open flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-lg text-left`,L(`span`,`min-w-0 flex-1 truncate`,e.title??`untitled`),...Mu(e));return i.setAttribute(`type`,`button`),n&&i.setAttribute(`aria-current`,`page`),i.onclick=()=>J.select(e.id),r.dataset.sessionId=e.id,r.append(i,...Fu(e),t),r.title=[e.cwd,`active ${Jr(Cu(e))} ago · created ${new Date(e.createdAt).toLocaleDateString()}`,...e.channel&&e.channel!==`web`?[`answering ${e.channel}`]:[]].join(`
|
|
85
|
-
`),r}var Lu=()=>`${J.currentId()??``}\n${zu}\n${JSON.stringify(J.sessions())}`,Ru=``,zu=20;function Bu(){let e=Lu();if(e===Ru)return;Ru=e;let t=J.sessions(),n=t.filter(ku);hu(n.length),Cl(n.length);let{rows:r,hidden:i}=Tu(t,zu),a=xu.querySelector(`.session-more[aria-expanded='true']`),o=a?.closest(`[data-session-id]`)?.dataset.sessionId,s=r.map(e=>Iu(e,e.id===o?a:void 0));if(i>0){let e=L(`button`,`session-open w-full cursor-pointer rounded-lg text-left text-sm text-neutral-500`,`Load more (${i})`);e.id=`session-load-more`,e.setAttribute(`type`,`button`),e.onclick=()=>{zu+=20,Bu(),xu.querySelectorAll(`.session-open`)[r.length]?.focus()},s.push(L(`li`,`hover:bg-neutral-100`,e))}let c=document.activeElement,l=c?.closest(`[data-session-id]`)?.dataset.sessionId,u=c?.classList.contains(`session-more`)?`.session-more`:`.session-open`;if(xu.replaceChildren(...s.length?[L(`ul`,`pb-1`,...s)]:[L(`p`,`px-3 py-2 text-sm leading-normal text-neutral-500`,`No sessions yet — create one.`)]),l){let e=[...xu.querySelectorAll(`[data-session-id]`)].find(e=>e.dataset.sessionId===l);e?.querySelector(`.session-open`)?.focus({preventScroll:!0}),u===`.session-more`&&e?.querySelector(u)?.focus({preventScroll:!0})}else c?.id===`session-load-more`&&(xu.querySelector(`#session-load-more`)??xu.querySelector(`.session-open`)??I(`#new-session`)).focus({preventScroll:!0});yd()}function Vu(){if(Su.getAttribute(`aria-expanded`)===`true`)return K();let e=J.sessions().find(e=>e.id===J.currentId())?.cwd,t=Ve(J.sessions()).slice(0,Du);if(e&&!t.includes(e)&&t.unshift(e),!t.length)return Jl(Su,void 0,J.createSession);Yl(Su,t.map(e=>({path:e,hint:Xr(e)})),e,J.createSession)}function Hu(e){J=e,Su.onclick=Vu,dc(Su,`shift+o`,`New session`,Vu,sc);let t=e=>{let t=Eu(J.sessions(),J.currentId(),e);t&&J.select(t)};hc(`shift+[`,()=>t(-1),sc),hc(`shift+]`,()=>t(1),sc)}var Uu,Wu=I(`#palette`),Gu=I(`#palette-input`),Ku=I(`#palette-list`),qu=I(`#palette-count`),Ju=[{name:`tasks`,icon:re,label:`Tasks`,detail:`Automation — task definitions and schedules`},{name:`runs`,icon:re,label:`Runs`,detail:`Automation — executions, subagents and callbacks`},{name:`activity`,icon:re,label:`Activity`,detail:`Automation — sessions and relationships`},{name:`boards`,icon:ne,label:`Boards`,detail:`Console — the static pages Pier publishes`},{name:`settings`,icon:pe,label:`Settings`,detail:`Console — models and providers, agent files and extensions, channels, password, sign out, security`}],Yu=7,Xu=3,Zu=8,Qu=80,$u=``,ed,td,nd;function rd(e){$u!==e&&(clearTimeout(nd),td?.abort(),td=void 0,$u=e,ed=void 0,e&&(nd=setTimeout(()=>{let t=td=new AbortController;C(`/api/search?q=${encodeURIComponent(e)}`,`Search unavailable`,{signal:t.signal}).then(n=>{t.signal.aborted||$u!==e||(td=void 0,ed=n.ok?{hits:n.value.hits}:{error:n.error},Wu.open&&vd())})},Qu)))}var id=[],ad=0;function od(e){if(id.length){ad=(e+id.length)%id.length;for(let[e,{el:t}]of id.entries())t.classList.toggle(`bg-indigo-50`,e===ad),t.setAttribute(`aria-selected`,String(e===ad));id[ad]?.el.scrollIntoView({block:`nearest`})}}var sd=e=>e.hit?.at??e.session?.createdAt;function cd(e){let t=L(`span`,`min-w-0 flex-1 truncate text-neutral-500`);for(let n of e.replaceAll(/\s+/g,` `).split(``)){let[e=``,r]=n.split(``,2);r===void 0?t.append(e):t.append(L(`span`,`font-medium text-neutral-800`,e),r)}return t}var ld=`flex min-w-0 flex-1 items-baseline gap-2`,ud=`shrink-0 truncate`,dd=`min-w-[2.5em] truncate text-[0.8125rem] text-neutral-400`,fd=`flex-none text-[0.75rem] tabular-nums text-neutral-400`,pd=`flex h-7 w-7 flex-none items-center justify-center rounded-[8px] bg-neutral-100 text-neutral-500`;function md(e){let t=L(`li`,`palette-row flex cursor-pointer items-center gap-3 rounded-[10px] px-2 leading-5 ${e.hit?`py-1.5`:`min-h-10`}`);t.setAttribute(`role`,`option`),t.append(L(`span`,pd,_(e.icon,`h-4 w-4`)));let n=L(`div`,`flex min-w-0 flex-1 flex-col`),r=L(`div`,`flex items-center gap-2`);e.session&&r.append(...Mu(e.session));let i=L(`span`,ld,L(`span`,`${ud} ${e.detail?`max-w-[calc(100%-3em)]`:`max-w-full`}`,e.label));e.detail&&i.append(L(`span`,dd,e.detail)),r.append(i);let a=sd(e);return a!==void 0&&r.append(L(`span`,fd,Jr(a))),n.append(r),e.hit&&n.append(L(`div`,`flex items-baseline gap-2 text-[0.8125rem] leading-5`,L(`span`,`flex-none text-[0.75rem] text-neutral-400`,e.hit.role===`user`?`You`:`Agent`),cd(e.hit.snippet))),t.append(n),t.onclick=e.open,t}var hd=e=>L(`li`,`px-2 pb-1.5 pt-4 text-[0.6875rem] font-semibold leading-4 tracking-[0.02em] text-neutral-400 first:pt-2`,e);function gd(e,t){let n=L(`li`,`px-2 py-2 pl-12 text-[0.8125rem] leading-5 text-neutral-400`,e);return t&&(n.title=t),n}var _d=e=>e.channel&&e.channel!==`web`?e.channel:``;function vd(){let e=Gu.value.trim(),t=e.toLowerCase().split(/\s+/).filter(Boolean),n=e=>{let n=e.toLowerCase();return t.every(e=>n.includes(e))},r=e=>()=>{Wu.close(),e()},i=Uu.sessions(),a=new Map(i.map(e=>[e.id,e])),{top:o,rest:s}=wu(i),c=[...o,...s],l=e=>({icon:ae,label:e.title??Zr(e.cwd),detail:[Xr(e.cwd),_d(e)].filter(Boolean).join(` · `),open:r(()=>void Uu.select(e.id)),session:e}),u=e=>({icon:te,label:Zr(e),detail:e,open:r(()=>void Uu.createSession(e))}),d=Ju.filter(t=>!e||n(`${t.label} ${t.detail}`)).map(({name:e,icon:t,label:n,detail:i})=>({icon:t,label:n,detail:i,open:r(()=>Uu.openConsole(e))})),f={icon:te,label:`New session in…`,detail:`Pick a directory`,open:r(Vu)},p=[];if(e){let t=Ve(i).filter(e=>n(Xr(e))).slice(0,Xu),o=c.filter(e=>n(`${e.title??``} ${e.cwd} ${_d(e)}`)).slice(0,Zu),s=new Set(o.map(e=>e.id)),m=o.map(l);if($u!==e||!ed)m.push(gd(`Searching messages…`));else if(`error`in ed)m.push(gd(`Message search unavailable`,ed.error));else{for(let e of ed.hits){if(m.length>=Zu)break;let t=a.get(e.sessionId);!t||s.has(t.id)||m.push({...l(t),hit:e,open:r(()=>void Uu.select(t.id).then(()=>Qo(e.role,e.at)))})}m.length||m.push(gd(`No sessions match`))}p.push([`Actions`,[...t.map(u),...n(f.label)?[f]:[],...d]],[`Sessions`,m])}else{let e=a.get(Uu.currentId()??``);p.push([`Running`,c.filter(ju).map(l)],[`Recent`,c.filter(e=>!ju(e)).slice(0,Yu).map(l)],[`Actions`,[...e?[u(e.cwd)]:[],f]],[`Console`,d])}id=[];let m=[];for(let[e,t]of p)if(t.length){m.push(hd(e));for(let e of t){if(e instanceof HTMLElement){m.push(e);continue}let t=md(e);id.push({el:t,open:e.open}),m.push(t)}}Ku.replaceChildren(...m.length?m:[gd(`Nothing matches`)]),qu.textContent=`${id.length} ${id.length===1?`row`:`rows`}`,od(Math.min(ad,Math.max(0,id.length-1)))}function yd(){Wu.open&&vd()}function bd(){if(Wu.open)return Wu.close();Gu.value=``,ad=0,rd(``),vd(),Wu.showModal(),Gu.focus(),Uu.loadSessions().then(yd)}function xd(e){Uu=e;let t=I(`#open-palette`);t.onclick=bd,dc(t,`k`,`Search sessions, messages and Console`,bd,()=>Wu.open||Al()),Wu.onclick=e=>{e.target===Wu&&Wu.close()},Wu.onclose=()=>rd(``),Gu.oninput=()=>{ad=0,rd(Gu.value.trim()),vd()},Gu.onkeydown=e=>{let t=jl(e);if(t!==void 0){e.preventDefault(),od(ad+t);return}e.key===`Enter`&&!e.ctrlKey&&(e.preventDefault(),id[ad]?.open())}}var Sd=0,Cd=e=>`${e.provider}/${e.id}`,wd=null;async function Td(){let{modelMenu:e}=await Ge(`/api/settings`,`Could not read the pinned model menu`);return e}function Ed(e){let t=L(`button`,`flex w-full min-w-0 cursor-pointer items-center gap-2 px-3 py-1.5 text-left hover:bg-neutral-100`,_(o,`h-3 w-3 text-indigo-600 ${e.checked?``:`invisible`}`),L(`span`,`truncate`,e.label));return e.hint&&t.append(L(`span`,`ml-auto flex-none text-[11.5px] text-neutral-400`,e.hint)),e.title&&(t.title=e.title),t.onclick=()=>e.onSelect(),t}function Dd({models:e,current:t,thinkingLevel:n,thinkingLevels:r,onPick:i,onThinkingPick:a}){let o=n,s=L(`div`,`flex w-full min-w-0 flex-col sm:min-w-72`),c=L(`div`,`flex flex-col gap-2 border-b border-neutral-200 px-2 py-2`),u=document.createElement(`input`);if(u.type=`search`,u.placeholder=`Search models`,u.setAttribute(`aria-label`,`Search models`),u.className=`w-full rounded-md border border-neutral-300 px-2 py-1.5 text-[12.5px] focus:border-indigo-400 focus:outline-none`,c.append(u),r.length){let e=document.createElement(`details`),t=L(`span`,`ml-auto font-medium text-indigo-700`,xe(o)),n=L(`summary`,`flex min-h-11 cursor-pointer list-none items-center gap-2 rounded-xl px-3 text-sm text-neutral-700 hover:bg-neutral-100 [&::-webkit-details-marker]:hidden`,L(`span`,`font-medium`,`Reasoning effort`),t,_(l,`chev h-3 w-3 text-neutral-400`)),i=L(`fieldset`,`grid grid-cols-2 gap-1 rounded-xl bg-neutral-50 p-1`);i.append(L(`legend`,`sr-only`,`Reasoning effort`));let s=`reasoning-${++Sd}`;for(let e of r){let n=document.createElement(`input`);n.type=`radio`,n.name=s,n.value=e,n.checked=e===o,n.className=`peer sr-only`,n.onchange=()=>{n.checked&&(o=e,t.textContent=xe(o),m(u.value),a(o))},i.append(L(`label`,`relative cursor-pointer`,n,L(`span`,`flex min-h-11 items-center rounded-lg border border-transparent px-3 text-sm text-neutral-700 hover:bg-neutral-100 peer-checked:border-indigo-200 peer-checked:bg-indigo-50 peer-checked:font-semibold peer-checked:text-indigo-700 peer-focus-visible:outline-2 peer-focus-visible:outline-indigo-500`,xe(e))))}e.append(n,i),c.append(e)}let d=L(`div`,`max-h-72 overflow-y-auto py-1`),f=new Map(e.map(e=>[Cd(e),e])),p=e=>{let n=(wd??[]).map(e=>({e,model:f.get(Cd(e))})).filter(t=>!!t.model&&(!e||Cd(t.model).toLowerCase().includes(e)));n.length&&d.append(L(`div`,`px-3 pb-0.5 pt-1 text-[10.5px] font-semibold uppercase tracking-wide text-neutral-400`,`Pinned`),...n.map(({e,model:n})=>Ed({label:n.id,hint:xe(e.thinking),title:e.note,checked:!!t&&Cd(t)===Cd(n)&&o===e.thinking,onSelect:()=>i(n,e.thinking)})),L(`div`,`my-1 border-t border-neutral-100`))},m=n=>{d.replaceChildren();let r=n.trim().toLowerCase();p(r);let a=new Map;for(let t of e){if(r&&!Cd(t).toLowerCase().includes(r))continue;let e=a.get(t.provider);e?e.push(t):a.set(t.provider,[t])}if(!a.size){d.append(L(`div`,`px-3 py-2 text-[12.5px] text-neutral-400`,e.length?`No matching models.`:`No models available.`));return}for(let[e,n]of a){let a=n.some(e=>!!t&&Cd(t)===Cd(e)),o=document.createElement(`details`);o.open=a||r.length>0;let s=L(`summary`,`flex cursor-pointer select-none items-center gap-1.5 px-3 py-1 text-[10.5px] font-semibold uppercase tracking-wide text-neutral-400 hover:bg-neutral-100`,_(l,`chev h-3 w-3`),L(`span`,`truncate`,e),L(`span`,`ml-auto flex-none normal-case text-neutral-300`,String(n.length)));o.append(s,...n.map(e=>Ed({label:e.id,checked:!!t&&Cd(t)===Cd(e),onSelect:()=>i(e)}))),d.append(o)}};return u.oninput=()=>m(u.value),m(``),Td().then(e=>{let t=JSON.stringify(e)!==JSON.stringify(wd);wd=e,t&&m(u.value)}).catch(e=>Xs(`model menu unavailable`,e)),s.append(c,d),queueMicrotask(()=>u.focus()),s}function Od(e,t,n,r){let i=di(t.model?`${t.model.id}${t.thinking?` · ${xe(t.thinking)}`:``}`:t.thinking?`Pi default · ${xe(t.thinking)}`:`Pi default`,`${Ci} flex items-center gap-1.5 ${t.model?`text-neutral-700`:`text-neutral-400`}`);return i.title=t.model?`${t.model.provider}/${t.model.id}`:`Whatever the project and Pi pick`,i.onclick=()=>{let e=Dd({models:n,current:t.model,thinkingLevel:t.thinking??`medium`,thinkingLevels:[...qa],onPick:(e,n)=>{K(),r({model:e,thinking:n??t.thinking})},onThinkingPick:e=>{t={...t,thinking:e},r(t)}}),a=di(`Pi default`,`w-full cursor-pointer px-3 py-1.5 text-left text-[12.5px] text-neutral-500 hover:bg-neutral-100`);a.onclick=()=>{K(),r({model:null,thinking:null})};let o=L(`div`,`flex flex-col`);o.append(e,L(`div`,`border-t border-neutral-200`),a),zl(i,o)},xi(e,i)}var Y;function kd(e){Y=e,hc(Ad,()=>{Y.currentSession()&&(K(),Y.toggleFiles())},sc)}var Ad=`i`,jd=I(`#chat-title`),Md=I(`#chat-menu`),Nd=I(`#session-meta`),Pd=null,Fd=new Map,Id=e=>`${e.provider}/${e.id}`,X=null,Ld=null,Rd=null,zd=null;function Bd(){X=null,Ld=null,Rd=null,zd=null,Yd()}function Vd(e,t,n,r){X=e,Ld=t,Rd=n,zd=r,Gd()}function Hd(e){zd=e.completedAt,Ld&&={...Ld,tokens:e.tokens},Yd()}var Ud=null;function Wd(e){Ud=e===null?null:Zr(e),Gd()}function Gd(){let e=Y.currentSession();e&&(Ud=null),jd.textContent=e?e.title??Zr(e.cwd):Ud??Y.currentId()??`no session`,jd.classList.toggle(`cursor-pointer`,!!e),jd.title=e?`Session info`:``,jd.onclick=e?()=>Xd(jd,e):null,Md.classList.toggle(`hidden`,!e),e&&(Md.onclick=()=>rf(Md,e)),Yd(),Y.syncBar()}var Kd=70,qd=(e,t)=>Math.min(100,Math.round(e/t.contextWindow*100)),Jd=e=>e.tokens===null?`?/${Se(e.contextWindow)}`:`${Se(e.tokens)}/${Se(e.contextWindow)} · ${100-qd(e.tokens,e)}% left`;function Yd(){let e=Ld,t=e?.tokens??null,n=Y.currentId(),r=Y.currentSession()?.activeRuns??0,i=[];if(r>0){let e=L(`button`,`flex flex-none cursor-pointer items-center gap-1 rounded bg-sky-50 px-1.5 py-px font-medium text-sky-700 hover:bg-sky-100`,_(h,`spinner h-3 w-3`),`${r} running`);e.title=`${Au(r)} · show the newest`,e.onclick=()=>{$o()||V(`error`,`no run card left in this transcript — reload the session to see it`)},i.push(e)}if(!n&&Ud&&i.push(L(`span`,`flex flex-none items-center gap-1.5 text-neutral-500`,_(h,`spinner`),`starting…`)),n){let e=(e,t)=>{let r=L(`button`,`cursor-pointer font-mono ${t}`,e);return r.title=`Change model or reasoning`,r.onclick=()=>void Zd(r,n),r};X&&i.push(e(X.id,`min-w-0 truncate rounded bg-indigo-50 px-1.5 py-px font-medium text-indigo-700 hover:bg-indigo-100`)),Rd&&i.push(e(Rd,`flex-none text-neutral-500 hover:text-indigo-700`))}let a=0;if(e&&t!==null){a=qd(t,e);let n=a>=90?`text-red-700`:a>=Kd?`text-amber-700`:`text-neutral-500`;i.push(L(`span`,`flex-none font-mono ${n}`,Se(t).toLowerCase()))}let o=i.flatMap((e,t)=>t===0?[e]:[L(`span`,`flex-none text-neutral-300`,`·`),e]);Nd.replaceChildren(...o),Nd.classList.toggle(`hidden`,i.length===0),Nd.classList.toggle(`flex`,i.length>0),Nd.toggleAttribute(`data-urgent`,!n&&!!Ud||r>0||a>=Kd)}function Xd(e,t,n=!1){let i=[[`Directory`,t.cwd],[`Session`,t.id]],a=t.id===Y.currentId();if(a&&(i.push([`Model`,X?.id??`—`]),i.push([`Reasoning`,Rd??`—`]),i.push([`Context`,Ld?Jd(Ld):`—`])),i.push([`Created`,Qr(t.createdAt),Yr(t.createdAt)]),a){let e=zd;i.push(e===null?[`Last reply`,`—`]:[`Last reply`,Qr(e),Yr(e)])}let o=L(`div`,`w-[min(26rem,calc(100vw-2rem))] max-sm:w-full rounded-xl bg-white px-3 py-3 font-sans text-[15px] leading-normal`),s=L(`button`,`icon-btn h-11 w-11 sm:h-8 sm:w-8`,_(_e));s.setAttribute(`aria-label`,`Close session info`),s.onclick=K;let c=L(`div`,`sticky top-0 z-10 flex items-start gap-2 bg-white pb-2`,L(`div`,`min-w-0 flex-1`,L(`div`,`text-sm font-medium text-neutral-500`,`Session info`),L(`h2`,`mt-1 [overflow-wrap:anywhere] text-lg leading-7 font-semibold text-neutral-900`,t.title??Zr(t.cwd))),s);if(n){let n=L(`button`,`icon-btn h-11 w-11 sm:h-8 sm:w-8`,_(r));n.setAttribute(`aria-label`,`Back to session actions`),n.onclick=()=>rf(e,t),c.prepend(n)}o.append(c);let l=L(`dl`,``);for(let[e,t,n]of i){let r=e===`Directory`||e===`Session`,i=L(`dd`,`min-w-0 flex items-start gap-2 text-neutral-700 ${r?`font-mono text-sm leading-6`:``}`,L(`span`,`min-w-0 flex-1 [overflow-wrap:anywhere]`,t));if(r){let n=ii(`min-h-11 min-w-11 sm:min-h-8 shrink-0 cursor-pointer rounded-lg px-2 py-1 text-[13px] font-sans text-neutral-500 hover:bg-neutral-100 focus-visible:outline-2`,()=>t);n.setAttribute(`aria-label`,`Copy ${e.toLowerCase()}`),i.append(n)}n&&i.firstElementChild?.append(L(`span`,`ml-2 inline-block font-sans text-[13px] leading-5 text-neutral-500`,n));let a=e===`Model`||e===`Created`;l.append(L(`div`,`grid gap-1 py-1.5 sm:grid-cols-[5.5rem_minmax(0,1fr)] sm:gap-3 ${a?`mt-2 border-t border-neutral-200 pt-2.5`:``}`,L(`dt`,`text-[15px] text-neutral-500`,e===`Session`?`Session ID`:e),i))}o.append(l),zl(e,o)}async function Zd(e,t,n){let r=L(`div`,`px-3 py-3 text-[15px] text-neutral-500`,`Loading models…`),i=L(`div`,`w-[min(24rem,calc(100vw-2rem))] min-w-0 max-sm:w-full`,r),a=r;n&&i.prepend(tf(e,n,`Close model picker`)),zl(e,i);let o=()=>a.isConnected&&!a.closest(`[inert]`),s=``,c=(n,r,o)=>{let c=JSON.stringify([n,r,o]);if(c===s)return;s=c;let l=Dd({models:n,current:t===Y.currentId()?X:null,thinkingLevel:r,thinkingLevels:o,onPick:(e,n)=>{K(),Qd(t,e,n)},onThinkingPick:e=>void ef(t,e)});a.replaceWith(l),a=l,zl(e,i)},l=t===Y.currentId()&&X?Fd.get(Id(X)):void 0;Pd&&l&&Rd&&c(Pd,Rd,l);try{let[e,n]=await Promise.all([Ge(`/api/sessions/${t}/models`,`Could not load models`),Ge(`/api/sessions/${t}/thinking`,`Could not read the reasoning level`)]);if(Pd=e,t===Y.currentId()&&X&&Fd.set(Id(X),n.levels),!o())return;c(e,n.level,n.levels)}catch(e){s?V(`error`,`model options are stale: ${String(e)}`):o()?(r.textContent=`Could not load models: ${String(e)}`,r.setAttribute(`role`,`alert`)):V(`error`,`model options failed: ${String(e)}`)}}async function Qd(e,t,n){await $d(e,t)&&n&&await ef(e,n)}async function $d(e,t){let n=X;e===Y.currentId()&&(X=t,Gd());let r=await x(`/api/sessions/${e}/model`,t);if(!r.ok){let{error:t}=await r.json().catch(()=>({}));return e===Y.currentId()&&(X=n,Gd()),V(`error`,`model change failed: ${t??r.status}`),!1}let{model:i}=await r.json();return e===Y.currentId()&&i&&(X=i,Gd()),!0}async function ef(e,t){let n=await x(`/api/sessions/${e}/thinking`,{level:t});if(!n.ok){V(`error`,`reasoning change failed: ${n.status}`);return}let{level:r}=await n.json();e===Y.currentId()&&(Rd=r,Yd())}function tf(e,t,n){let i=L(`button`,`icon-btn h-11 w-11`,_(r));i.setAttribute(`aria-label`,`Back to session actions`),i.onclick=()=>rf(e,t);let a=L(`button`,`icon-btn h-11 w-11`,_(_e));a.setAttribute(`aria-label`,n),a.onclick=K;let o=L(`span`,`min-w-0 flex-1 truncate text-sm font-medium`,t.title??Zr(t.cwd));return o.title=o.textContent??``,L(`div`,`flex items-center gap-2 border-b border-neutral-200 pb-2 mb-2`,i,o,a)}async function nf(e,t){let n=L(`p`,`px-3 py-2 text-[15px] text-neutral-500`,`Loading chats…`),r=L(`div`,`w-[min(24rem,calc(100vw-2rem))] min-w-0 max-sm:w-full`,tf(e,t,`Close chat picker`),L(`div`,`px-3 pb-1 text-sm font-medium text-neutral-500`,`Continue in a chat`),L(`p`,`px-3 pb-2 text-[13px] text-neutral-500`,`Chats the bot has seen. A chat appears here after its first message to the bot.`),n);zl(e,r);let i=await C(`/api/handoff/targets`,`Could not list chats`);if(!r.isConnected)return;if(!i.ok){n.textContent=i.error,n.setAttribute(`role`,`alert`);return}if(!i.value.targets.length){n.textContent=`No chats yet — message the bot once in Lark or Slack, then come back.`;return}let a=L(`p`,`hidden px-3 pt-1 text-[13px] text-red-600`);a.setAttribute(`role`,`alert`);let o=L(`div`,``);o.dataset.list=``;for(let e of i.value.targets){let n=L(`button`,`flex w-full min-h-10 cursor-pointer items-center gap-2 rounded-xl px-3 py-2 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100`,L(`span`,`min-w-0 truncate`,`${e.platform[0].toUpperCase()}${e.platform.slice(1)} · ${e.kind===`dm`?`DM`:`group`} · ${e.name||e.chatId}`));n.onclick=async()=>{let n=await x(`/api/handoff`,{sessionId:t.id,platform:e.platform,chatId:e.chatId});if(n.ok)return K();a.textContent=(await n.json().catch(()=>({}))).error??`handoff failed: ${String(n.status)}`,a.classList.remove(`hidden`)},o.append(n)}n.replaceWith(o,a),o.querySelector(`button`)?.focus({preventScroll:!0})}function rf(e,t){let n=t.id===Y.currentId();Vl(e,[{label:`Rename…`,onSelect:()=>{K(),Nu(t)}},{label:`Session info`,onSelect:()=>Xd(e,t,!0)},{label:`New session here`,separatorBefore:!0,hint:Xr(t.cwd),onSelect:()=>{K(),Y.createSession(t.cwd)}},{label:`Browse files`,hint:n?oc(Ad):``,onSelect:()=>{K(),Y.openFiles(n?void 0:t.cwd)}},{label:`Continue in Lark/Slack…`,...t.channel&&t.channel!==`web`?{hint:`answers in ${t.channel}`,disabled:!0}:{},onSelect:()=>void nf(e,t)},{label:`Model & reasoning…`,separatorBefore:!0,hint:n?X?.id??`…`:``,onSelect:()=>void Zd(e,t.id,t)}],t.title??Zr(t.cwd))}var af=`pier.theme`,of=[`system`,`light`,`dark`],sf=window.matchMedia(`(prefers-color-scheme: dark)`),cf={system:se,light:he,dark:g},lf=()=>{let e=null;try{e=localStorage.getItem(af)}catch{return`system`}return e===`light`||e===`dark`?e:`system`},uf=()=>{let e=lf();return e===`system`?sf.matches?`dark`:`light`:e};function df(){let e=uf();document.documentElement.dataset.theme=e;let t=getComputedStyle(document.documentElement).getPropertyValue(`--workbench-canvas`).trim();I(`meta[name="theme-color"]`).setAttribute(`content`,t),window.dispatchEvent(new Event(`pier:theme`))}function ff(){let e=I(`#theme-toggle`),t=()=>{let t=lf();e.title=`Theme: ${t}${t===`system`?` (${uf()})`:``}`,e.replaceChildren(_(cf[t])),e.setAttribute(`aria-label`,e.title),df()};e.onclick=()=>{let e=of[(of.indexOf(lf())+1)%of.length];try{e===`system`?localStorage.removeItem(af):localStorage.setItem(af,e)}catch{}t()},sf.addEventListener(`change`,t),t()}var pf=`https://github.com/timqi/pier`,mf=[`text-neutral-400`,`hover:text-neutral-700`],hf=[`rounded-full`,`bg-emerald-50`,`px-1.5`,`text-emerald-700`,`ring-1`,`ring-inset`,`ring-emerald-600/20`,`hover:bg-emerald-100`],gf=18e5,_f=null,vf=I(`#version`);function yf(e){let t=_f?.available===!0&&_f.latest!==null;vf.textContent=`v${e}`,vf.title=t?`Pier ${_f?.latest} is out`:``,vf.classList.remove(...t?mf:hf),vf.classList.add(...t?hf:mf)}var bf=(e,t=`px-3 py-1 text-[12px] leading-snug text-neutral-500`)=>L(`p`,t,e);function xf(){let e=L(`div`,`flex w-72 flex-col gap-1 py-1`);if(!_f)return e.append(bf(`Checking the registry…`)),e;let{current:t,latest:n,available:r,canApply:i,problem:a}=_f,o=L(`span`,``,``),s=(e,t)=>Ai(o,e?`failed`:`idle`,t),c=L(`div`,`flex items-center gap-2 px-3 py-1.5`);if(e.append(bf(r?`Pier ${n} is out`:`Pier ${t}`,`px-3 py-1 text-[12.5px] font-medium text-neutral-700`),bf(r?`You are running ${t}.`:n===null?`The registry could not be reached, so this may not be the latest.`:`This is the latest release.`)),a&&e.append(bf(a,`mx-3 my-1 rounded-md bg-red-50 px-2 py-1.5 text-[11.5px] leading-snug text-red-700`)),r&&i&&!a){let e=ui(`Update now`,!0);e.onclick=()=>void(async()=>{e.disabled=!0,s(!1,`starting the updater…`);let t=await x(`/api/update`,{});if(!t.ok)return e.disabled=!1,s(!0,await S(t,`Could not update`));let{draining:n}=await t.json();s(!1,n?`Waiting for running work to finish — Pier then installs and restarts.`:`Installing — Pier restarts once it is on disk, and this page reconnects on its own.`)})(),c.append(e)}c.append(Object.assign(L(`a`,`btn text-[12.5px] no-underline`,`Source`),{href:r?`${pf}/releases`:pf,target:`_blank`,rel:`noreferrer`,title:`Pier is free software (AGPL-3.0)`})),e.append(c,L(`div`,`px-3`,o)),r&&!i&&!a&&e.append(bf(`No service manager owns this Pier, so it cannot restart itself — update it with: pier update`));let l=Oi(`Update automatically`,i?`Installs a new release once nothing is running — no turn in flight, no task run.`:`Needs the systemd service (pier service install); nothing here can restart Pier.`,_f.autoUpdate,e=>void(async()=>{_f&&(_f.autoUpdate=e);let t=await x(`/api/settings`,{autoUpdate:e},`PUT`);t.ok||(_f&&(_f.autoUpdate=!e),u&&(u.checked=!e),s(!0,await S(t,`Could not save`)))})()),u=l.querySelector(`input`);return u&&(u.disabled=!i),e.append(L(`div`,`mt-1 border-t border-neutral-200 px-3 pb-1 pt-2`,l)),e}async function Sf(e){let t=await C(`/api/update`,`Update check failed`);t.ok&&yf((_f=t.value).current||e)}function Cf(e){yf(e),vf.onclick=e=>{e.preventDefault(),zl(vf,xf())};let t=()=>void Sf(e);t(),setInterval(t,gf)}var Z,wf=I(`#chat-header`),Tf=I(`#chat-title`),Ef=[wf,B,I(`#composer`)],Df=()=>Pf===null,Of,kf,Af,jf=new Map,Mf=new Map,Nf=new Map,Pf=null,Ff=0,If=[`files`],Lf=new Map,Rf={tasks:`Tasks`,runs:`Runs`,activity:`Activity`,boards:`Boards`,settings:`Settings`,files:`Files`},zf=[`tasks`,`runs`,`activity`],Bf=`Automation`,Vf=I(`#automation-view`),Hf=I(`#automation-tabs`),Uf=e=>zf.includes(e)?`tasks`:e;function Wf(e,t){let n=e!==null&&zf.includes(e);if(Vf.classList.toggle(`hidden`,!n),Vf.classList.toggle(`flex`,n),!n)return;let r=[];if(e===`tasks`&&!t){let e=ui(`New task`,!0);e.classList.add(`ml-auto`),e.disabled=!Of,e.onclick=()=>Of?.create(),r.push(e)}Hf.replaceChildren(fi(Bf),...zf.map(t=>hi(Rf[t],t===e,()=>Yf(t))),...r)}var Gf=e=>Of?.refresh(e),Kf=()=>kf?.refresh(),qf=()=>Af?.refresh();function Jf(){Pf?iu(zf.includes(Pf)?Bf:Rf[Pf],!1):iu(Tf.textContent??``,Z.currentSession()!==void 0)}function Yf(e,t,n){if(If.includes(e)){let t=sp();t&&(t.kind!==`console`||t.name!==e)&&Lf.set(e,t)}lp({kind:`console`,name:e,arg:t,query:n}),ru(),Pf=e;for(let e of Ef)e.classList.add(`hidden`);zc();for(let[t,n]of jf)t!==e&&n.hide();for(let[t,n]of Nf)n.classList.toggle(`bg-indigo-50`,t===Uf(e));Wf(e,t),Jf(),Xf(e,t,n,++Ff)}async function Xf(e,t,n,r){let i=jf.get(e);if(!i){let t=Mf.get(e);if(!t){let n=I(`#${e}-view`);t=fp[e](n).catch(t=>(console.warn(`${e} view failed to load`,t),ei(n,()=>n.replaceChildren(L(`p`,`p-4 text-[13px] text-red-600`,`Could not load ${Rf[e]} — reload the page.`))))),Mf.set(e,t)}i=await t,jf.set(e,i),Mf.delete(e)}Pf===e&&r===Ff&&(i.show(t,n),e===`tasks`&&Wf(e,t))}var Zf=e=>Yf(`tasks`,e),Qf=(e={},t)=>Yf(`runs`,t,new URLSearchParams(e).toString()),$f=e=>Qf({},e),ep=(e,t)=>Yf(`files`,e,t?new URLSearchParams({select:t}).toString():void 0),tp=(e,t)=>{Pf===e?rp(e):Yf(e,t)},np=e=>tp(`files`,e);function rp(e){let t=Z.currentId(),n=Lf.get(e)??(t?{kind:`session`,id:t}:null);Lf.delete(e),n?lp(n):(history.replaceState(null,``,`#/`),ip())}function ip(){if(Pf){Pf=null;for(let e of jf.values())e.hide();for(let e of Nf.values())e.classList.remove(`bg-indigo-50`);Wf(null);for(let e of Ef)e.classList.remove(`hidden`);zc(),Jf(),Z.maybeAckRead()}}var ap=e=>e.kind===`session`?`#/session/${encodeURIComponent(e.id)}`:`#/${e.name}${e.arg?`/${encodeURIComponent(e.arg)}`:``}${e.query?`?${e.query}`:``}`,op={config:`files`,channels:`channels`,providers:`models`};function sp(){let e=location.hash.replace(/^#\/?/,``),t=e.indexOf(`?`),[n=``,r]=(t<0?e:e.slice(0,t)).split(`/`),i=t<0?void 0:e.slice(t+1)||void 0,a;try{a=r?decodeURIComponent(r):void 0}catch{return null}return op[n]?{kind:`console`,name:`settings`,arg:op[n]}:Object.hasOwn(Rf,n)?{kind:`console`,name:n,arg:a,query:i}:n===`session`&&a?{kind:`session`,id:a}:null}var cp=!1;function lp(e,t=!1){if(cp)return;let n=ap(e);location.hash!==n&&(t?history.replaceState(null,``,n):location.hash=n)}var up=e=>lp({kind:`session`,id:e});function dp(){let e=sp(),t=Z.sessions(),n=Z.currentId(),r=e?.kind===`session`?e.id:null,{top:i,rest:a}=wu(t),o=r??n??(i[0]??a[0])?.id??null;cp=!0;try{o&&o!==n&&Z.select(o),e?.kind===`console`?Yf(e.name,e.arg,e.query):ip(),o||Gd()}finally{cp=!1}e?.kind!==`console`&&o&&lp({kind:`session`,id:o},!0)}var fp={tasks:async e=>Of=(await Wi(async()=>{let{createTasksView:e}=await import(`./tasks-BkW7YShZ.js`);return{createTasksView:e}},__vite__mapDeps([0,1]))).createTasksView(e,()=>Z.sessions().map(({id:e,cwd:t,title:n})=>({id:e,cwd:t,title:n})),Z.loadSessions,Z.select,()=>Z.currentId(),Qf,Zf),runs:async e=>kf=(await Wi(async()=>{let{createRunsView:e}=await import(`./runs-DDagTNaM.js`);return{createRunsView:e}},__vite__mapDeps([2,1]))).createRunsView(e,Z.select,Qf,Zf),activity:async e=>Af=(await Wi(async()=>{let{createActivityView:e}=await import(`./activity-CrybM-E8.js`);return{createActivityView:e}},[])).createActivityView(e,Z.select,$f),boards:async e=>(await Wi(async()=>{let{createBoardsView:e}=await import(`./boards-Cw7_6J6L.js`);return{createBoardsView:e}},[])).createBoardsView(e,Z.select),files:async e=>(await Wi(async()=>{let{createExplorerView:e}=await import(`./explorer-DV066dUD.js`);return{createExplorerView:e}},[])).createExplorerView(e,()=>Z.currentSession(),e=>Yf(`files`,e),()=>rp(`files`)),settings:async e=>(await Wi(async()=>{let{createSettingsView:e}=await import(`./settings-BEdSeXpm.js`);return{createSettingsView:e}},[])).createSettingsView(e,()=>Ve(Z.sessions()),e=>Yf(`settings`,e),ep)};function pp(e){Z=e;for(let e of[`tasks`,`boards`,`settings`]){let t=I(`#open-${e}`);Nf.set(e,t),t.onclick=()=>Yf(e)}let t=I(`#console-section`);t.open=localStorage.getItem(`pier.consoleCollapsed`)!==`1`,t.ontoggle=()=>localStorage.setItem(`pier.consoleCollapsed`,t.open?`0`:`1`),window.onhashchange=dp}var Q=[],mp=null,hp=0,gp=0,_p=!1,$=null,vp=`idle`,yp=null,bp=0,xp=!1,Sp=!1;async function Cp(e){let t=++hp;++gp,_p=!1,ip(),ru(),$=null,yp?.close(),yp=null,Vs(),Bc([]),Bd(),Wd(e),Hs(!0),Sp=!0,Rc();let n=await x(`/api/sessions`,{cwd:e});if(t!==hp)return;if(Sp=!1,!n.ok){Hs(!1),Wd(null),Rc(),V(`error`,`session create failed: ${n.status}`);return}let{id:r}=await n.json();t===hp&&(Q.unshift({id:r,cwd:e,createdAt:Date.now(),state:`idle`,unread:!1,channel:`web`,activeRuns:0}),await Pp(r),$===r&&Pc())}function wp(e){Q=e.map(e=>({...e,title:ze(e.title)})),Q.sort((e,t)=>t.createdAt-e.createdAt),Bu(),Gd(),Ep()}var Tp=He(async()=>{wp(await Ge(`/api/sessions`,`Could not load sessions`))});function Ep(){if(document.hidden||!document.hasFocus()||!Df())return;let e=Q.find(e=>e.id===$);e?.unread&&(e.unread=!1,Bu(),fetch(`/api/sessions/${e.id}/read`,{method:`POST`}))}function Dp(){return Q.find(e=>e.id===$)??(mp&&mp.id===$?mp:void 0)}async function Op(e){let t=await C(`/api/sessions/${e}`,`failed to load session`);$!==e||!t.ok||(mp={...t.value,title:ze(t.value.title)},Gd())}function kp(e,t){let n=Q.find(t=>t.id===e);!n||n.title||!t.trim()||(n.title=t.trim().slice(0,80),Bu(),Gd())}function Ap(e){vp=e;let t=Q.find(e=>e.id===$);t&&(t.state=e),Bu(),Gd(),Rc(),e===`idle`&&Tp()}function jp(e){if(!(e.sessionId!==$||e.seq<=bp))switch(bp=e.seq,e.type){case`turn-start`:xp=!0;break;case`system-input`:Ls(),us(e.text,e.origin);break;case`task-status`:so(e.run);break;case`user-message`:{let t=Ie(e.text).text;if(kp(e.sessionId,t),Fc(t))break;Ls(),V(`user`,e.text,!1,e.ts),Xo();break}case`text-start`:Ls();break;case`text-delta`:Is(e.text);break;case`thinking-delta`:Ls(),Io(e.ts,e.text);break;case`tool-start`:Ls(),Po(e.ts,e.toolCallId,e.toolName,e.args);break;case`tool-end`:Fo(e.toolCallId,e.isError,e.output);break;case`turn-end`:xp=!1,zs(e.text,e.meta),e.meta&&Hd(e.meta);break;case`queue-state`:Vc(e.steering,e.followUp);break;case`queue-recovery`:Bc(e.batches,e.uncertain);break;case`context-compacted`:Ls(),V(`system`,`Context compacted — ${Se(e.before)} → ${Se(e.after)}`,!1,e.ts),Xo();break;case`error`:Mo(),V(`error`,e.message);break;case`state`:e.state===`idle`&&xp&&(xp=!1,Bs()),e.state===`idle`&&Vc([],[]),Ap(e.state)}}function Mp(){let e=new EventSource(`/api/events`);e.onopen=()=>{Tp(),Gf(),Kf(),qf()},e.onerror=()=>tc(e,`Workspace`),e.onmessage=e=>{let t=JSON.parse(e.data);if(t.type===`sessions-changed`){Tp();return}if(t.type===`tasks-changed`||t.type===`task-run-changed`||t.type===`task-message-changed`||t.type===`task-group-changed`){Gf(t.type===`task-run-changed`?t.taskId:void 0),Kf(),qf(),t.type===`task-run-changed`&&Tp();return}if(qf(),t.sessionId===$)return;let n=Q.find(e=>e.id===t.sessionId);n&&(n.state=t.state,Bu())}}function Np(e,t,n){yp?.close();let r=new EventSource(`/api/sessions/${e}/events?after=${t}`),i=()=>yp===r&&$===e&&n===gp;r.onmessage=e=>{i()&&jp(JSON.parse(e.data))},r.addEventListener(`reset`,()=>{i()&&Fp(e)}),r.onerror=()=>{i()&&tc(r,`Session`)},yp=r}async function Pp(e){ip(),ru(),up(e),!(e===$&&(yp||_p))&&(++hp,++gp,Sp=!1,Zc(),$=e,mp=null,Q.some(t=>t.id===e)||Op(e),vp=Q.find(t=>t.id===e)?.state??`idle`,Qc(e),Bu(),Gd(),Ep(),await Fp(e))}async function Fp(e){if($!==e)return;let t=++gp;yp?.close(),yp=null,_p=!0,Vs(),Vc([],[]),Bc([]),Bd(),xp=!1,Lc(),bp=0,Hs(!0);let n=await C(`/api/sessions/${e}/history`,`failed to load session`);if($!==e||t!==gp)return;if(_p=!1,!n.ok){Hs(!1),V(`error`,n.error);return}let r=n.value;Us(r.turns,r.state,r.backgroundRuns),bp=r.lastSeq,xp=r.state===`streaming`,Ap(r.state),Vc(r.queue.steering,r.queue.followUp),Bc(r.queueRecovery,r.queueUncertain);let i=r.turns.reduce((e,t)=>t.meta?.completedAt??e,null);Vd(r.model,r.context,r.thinkingLevel,i),Np(e,`${r.epoch}:${r.lastSeq}`,t)}Zs(),ve(),ec(),ff();var Ip=async e=>{$===e&&await Fp(e)};Ho({sessionId:()=>$,sessionCwd:()=>Dp()?.cwd??null,sessionChannel:()=>Dp()?.channel??null,sessionState:()=>vp,select:e=>void Pp(e),showRun:$f,send:(e,t)=>void tl(e,t),ownTurn:e=>{Ic(e),Ap(`streaming`)},reload:Ip}),il({sessionId:()=>$,starting:()=>Sp,sessionState:()=>vp,chatVisible:Df,setState:Ap,reload:Ip}),bu({sessionMenu:e=>{let t=Dp();t&&rf(e,t)},sessionInfo:e=>{let t=Dp();t&&Xd(e,t)}}),Hu({sessions:()=>Q,currentId:()=>$,select:e=>void Pp(e),sessionMenu:rf,createSession:Cp,onTitleChanged:Gd}),xd({sessions:()=>Q,loadSessions:Tp,currentId:()=>$,select:Pp,createSession:Cp,openConsole:Yf}),kd({currentId:()=>$,currentSession:Dp,createSession:e=>void Cp(e),syncBar:Jf,openFiles:ep,toggleFiles:np}),pp({sessions:()=>Q,loadSessions:Tp,currentId:()=>$,currentSession:Dp,select:e=>void Pp(e),maybeAckRead:Ep}),Cf(`0.1.5`),yl(),document.addEventListener(`gesturestart`,e=>e.preventDefault()),document.addEventListener(`visibilitychange`,Ep),window.addEventListener(`focus`,Ep),Mp(),Tp().then(dp);export{We as $,fi as A,Yr as B,di as C,xi as D,Mi as E,wi as F,$r as G,ei as H,Di as I,Zr as J,L as K,Oi as L,mi as M,Ei as N,Ni as O,Ai as P,Ge as Q,pi as R,ji as S,bi as T,ii as U,Xr as V,li as W,S as X,He as Y,C as Z,Ci as _,K as a,_e as at,_i as b,wl as c,l as ct,Ja as d,a as dt,Ke as et,ea as f,Si as g,yi as h,Yl as i,_ as it,hi as j,Ti as k,mc as l,s as lt,Xi as m,Dd as n,ze as nt,Vl as o,ue as ot,$i as p,Jr as q,Ql as r,xe as rt,zl as s,h as st,Od as t,x as tt,qa as u,o as ut,vi as v,ui as w,ki as x,gi as y,Pi as z};
|
|
79
|
+
`).length>6?[null,e]:[n,e.slice(t+2)]}function qs(e,t){let n=t.kind===`task-message`?t.messageKind:t.kind,[r,i,a]=Gs[n]??[f,n.replace(`_`,` `),`text-cyan-700`];es();let o=t.kind===`task-callback`?t.state:void 0,s=Ro(o?Vo[o].edge:`border-l-cyan-500`);s.dataset.kind=`system`;let[c,l]=Ks(e),u=Bo({glyph:o?Ho(o):_(r,`h-3 w-3 ${a}`),label:o?`${i} \u00b7 ${o}`:i,labelCls:o?Vo[o].label:a,...t.source?{taskName:t.source.taskName,model:t.source.model,thinking:t.source.thinking}:c?{taskName:c.split(`
|
|
80
|
+
`)[0]}:{},runId:t.runId,sessionId:t.sourceSessionId});s.append(u),s.append(...zo(l)),H.append(s),Hs(),Ns()}var Js=null,Ys=e=>e.isConnected&&e.dataset.kind===`user`;function Xs(e){let t=0;for(let n=e.nextElementSibling;n;n=n.nextElementSibling){let e=n.dataset.kind;(e===`user`||e===`assistant`||e===`system`)&&t++}return t}function Zs(e,t){if(!Ys(e)||e.querySelector(`textarea`))return;if(Js?.(),ws.sessionState()!==`idle`){U(`error`,`can't edit while streaming — stop the turn first`);return}let n=document.createElement(`textarea`);n.value=t.dataset.raw??t.textContent??``,n.className=`block w-full resize-none rounded-xl border border-indigo-300 bg-white px-3 py-2 text-neutral-900 focus:outline-none`,n.setAttribute(`aria-label`,`Edit message`);let r=ui(`Send edit`,!0),i=ui(`Cancel`),a=Xs(e),o=L(`div`,`mt-2 flex flex-wrap items-center justify-end gap-2`);a&&o.append(L(`div`,`mr-auto text-[11.5px] text-neutral-500`,`sending drops the ${a} message${a===1?``:`s`} after this one`)),o.append(i,r);let s=L(`div`,`message-editor`,n,o),c=()=>{n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,192)}px`,r.disabled=!n.value.trim()};n.oninput=c,e.dataset.editing=``,t.classList.add(`hidden`),t.after(s),c(),n.focus(),n.setSelectionRange(n.value.length,n.value.length);let l=()=>{s.remove(),t.classList.remove(`hidden`),delete e.dataset.editing,Js=null};Js=l,i.onclick=()=>{l(),e.querySelector(`.message-edit`)?.focus({preventScroll:!0})},r.onclick=()=>{let t=n.value.trim();t&&Qs(e,t)},s.onkeydown=e=>{e.isComposing||e.keyCode===229||(e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),i.click()),e.key===`Enter`&&!e.shiftKey&&e.target===n&&(e.preventDefault(),r.click()))}}async function Qs(e,t){let n=ws.sessionId();if(!n||!Ys(e))return;if(ws.sessionState()!==`idle`){U(`error`,`can't edit while streaming — stop the turn first`);return}Js?.();let r=[...H.querySelectorAll(`[data-kind="user"]`)],i=r.indexOf(e),a=zs+i,o=r[i-1]?.dataset.at;ec=o===void 0?null:Number(o);let s=e.previousElementSibling;for(s?.dataset.kind===`time`&&s.remove();e.nextElementSibling;)e.nextElementSibling.remove();e.remove(),ws.ownTurn(t),U(`user`,t,!1,Date.now()),Ns(!0);let c=await x(`/api/sessions/${n}/turns/${a}/edit`,{text:t});if(!c.ok){let e=await S(c,`edit failed`);await ws.reload(n),U(`error`,e)}}var $s=6e5,ec=null,tc;function nc(e){let t=Number(e.dataset.at);e.textContent=`${Qr(t).slice(0,16)} · ${Yr(t)}`}function rc(){let e=H.querySelectorAll(`[data-kind="time"]`);for(let t of e)nc(t);e.length||(clearInterval(tc),tc=void 0)}var ic=(e,t)=>new Date(e).toDateString()===new Date(t).toDateString();function ac(e){let t=ec;return ec=e,t===null||e-t>=$s||!ic(t,e)}function oc(e,t){e.dataset.at=String(t),e.dataset.time=Qr(t).slice(11)}function sc(e){for(let t of e.querySelectorAll(`pre`)){let e=t.querySelector(`code`);if(!e)continue;let n=L(`div`,`group/code relative`);t.replaceWith(n),n.append(t,ii(`absolute right-1.5 top-1.5 cursor-pointer rounded border border-black/[0.08] bg-white/85 px-1.5 py-0.5 text-[11px] text-neutral-500 opacity-0 transition-opacity hover:bg-white hover:text-neutral-800 focus:opacity-100 group-hover/code:opacity-100 pointer-coarse:opacity-100 dark:border-neutral-200`,()=>e.textContent??``))}}function cc(e){let t=ws.sessionId(),n=L(`div`,``);return n.innerHTML=fn.sanitize(F.parse(t?ao(e,t):e,{async:!1})),ni(n),n}function lc(e,t){e.replaceChildren(...cc(t).childNodes),e.classList.remove(`whitespace-pre-wrap`),e.classList.add(`md`),Ji(e),sc(e);for(let t of e.querySelectorAll(`:not(pre) > code`))ci(t,()=>t.textContent??``);To(e);let n=ws.sessionId();n&&xo(e,n,ws.sessionCwd())}function uc(e,t,n,r=!1){let{text:i,suggestions:a}=Ae(t);return v({text:i,suggestions:a})?dc(e,y(t)):lc(e,i),r&&ko(e.parentElement??e,a,e=>ws.send(`auto`,e)),n&&oc(e.parentElement??e,n.completedAt),e}function dc(e,t){e.classList.remove(`md`,`whitespace-pre-wrap`),e.replaceChildren(L(`span`,`text-[12.5px] italic text-neutral-400`,t?`Stayed silent — ${t}`:`Stayed silent.`))}var fc=(e,t,n=!1)=>uc(U(`assistant`,``),e,t,n),W=null,pc=null,mc=!1,hc=0,gc=0;function _c(e){let t=e.dataset.raw??``;for(;e.childNodes.length>gc;)e.lastChild.remove();let n=Me(t,hc);n>hc&&(e.append(...cc(b(t.slice(hc,n))).childNodes),hc=n,gc=e.childNodes.length),e.append(...cc(Ae(t.slice(hc)).text).childNodes),e.classList.remove(`whitespace-pre-wrap`),e.classList.add(`md`)}function vc(){if(pc){mc=!0;return}mc=!1,W&&(_c(W),Ns()),pc=setTimeout(()=>{pc=null,mc&&vc()},80)}function yc(){pc&&clearTimeout(pc),pc=null,mc=!1}function bc(e){W||(W=ls(Date.now()),hc=0,gc=0),W.dataset.raw=(W.dataset.raw??``)+e,vc()}function xc(){if(!W)return;let e=W;W=null,yc(),e.classList.remove(`md`),e.classList.add(`whitespace-pre-wrap`),e.textContent=e.dataset.raw??``}function Sc(){if(!W)return;let e=W.dataset.raw;return us(W),W=null,yc(),e}function Cc(e,t){e===``&&xc();let n=Sc();ms(`done`);let r=e??n;r&&fc(r,t,!0)}function wc(){let e=Sc();ms(`interrupted`),e&&fc(e)}function Tc(){Js?.(),clearInterval(tc),tc=void 0,H.replaceChildren(),zs=0,Bs=0,Vs=null,ec=null,W=null,yc(),ns(),Oo()}function Ec(e){if(!e){H.querySelector(`[data-kind="loading"]`)?.remove();return}let t=L(`div`,`flex flex-col gap-3 px-5 py-4`);t.dataset.kind=`loading`;for(let e of[`w-2/5`,`w-4/5`,`w-3/5`,`w-1/3`,`w-2/3`])t.append(L(`div`,`skeleton h-3.5 ${e}`));H.append(t)}function Dc(e,t,n){Ec(!1);let r=new Map(n.map(e=>[e.runId,e])),i=e=>[...r].filter(([,t])=>t.queuedAt<=e).map(([e])=>e),a=e=>{for(let t of e){let e=r.get(t);e&&(Go(e),r.delete(t))}},o=e.reduce((e,t,n)=>t.role===`assistant`?n:e,-1);Es=!0;try{for(let[n,r]of e.entries()){let s=t===`streaming`&&n===e.length-1&&r.role===`assistant`,c=r.steps;if(c?.length&&(xs(c,r.meta?.durationMs,s,n),r.meta&&a(i(r.meta.completedAt))),r.text){if(r.role===`system`&&r.origin){a(r.origin.kind===`task-message`?[r.origin.runId]:r.origin.runIds??[r.origin.runId]),qs(r.text,r.origin);continue}s?bc(r.text):r.role===`assistant`?fc(r.text,r.meta,t===`idle`&&n===o):U(r.role,r.text,!1,r.at)}}for(let e of r.values())Go(e)}finally{Es=!1}Ns(!0)}var Oc=window.fetch.bind(window),kc=20,Ac=6e4,jc=[],Mc=new Map,Nc=e=>e instanceof Error?e.stack??`${e.name}: ${e.message}`:void 0;function Pc(e,t){let n=t===void 0?e:`${e}: ${String(t)}`,r=Date.now();return r-(Mc.get(n)??-6e4)<Ac||(Mc.size>100&&Mc.clear(),Mc.set(n,r),jc=jc.filter(e=>r-e<6e4),jc.length>=kc)?null:(jc.push(r),Oc(`/api/client-log`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({message:n,stack:Nc(t),view:location.hash||`/`}),keepalive:!0}).catch(()=>{}),U(`error`,n))}function Fc(){window.__pierReporting=!0,window.addEventListener(`error`,e=>{!e.error&&e.message.includes(`ResizeObserver loop`)||Pc(`script error: ${e.message}`,e.error)}),window.addEventListener(`unhandledrejection`,e=>{Pc(`unhandled rejection`,e.reason)})}var Ic=window.fetch.bind(window),Lc=()=>{location.assign(`/login?next=${encodeURIComponent(location.pathname+location.hash)}`)};function Rc(){window.fetch=async(...e)=>{let t=await Ic(...e);return t.status===401&&Lc(),t}}function zc(e,t){if(e.readyState!==EventSource.CLOSED)return;let n=()=>{let e=Pc(`${t} stream disconnected`);if(!e)return;let n=ui(`Reload`);n.classList.add(`ml-2`,`align-middle`),n.onclick=()=>location.reload(),e.append(` `,n)};Ic(`/api/sessions`).then(e=>e.status===401?Lc():n(),n)}var Bc=/Mac|iP(?:hone|ad|od)/.test(navigator.userAgent),Vc=Bc?`⌘`:`Ctrl+`,Hc=Bc?`⇧`:`Shift+`,Uc=e=>{let t=e.startsWith(`meta+`),n=t?e.slice(5):e;return n.startsWith(`shift+`)?{key:n.slice(6),shift:!0,meta:t}:{key:n,shift:!1,meta:t}};function Wc(e){let{key:t,shift:n,meta:r}=Uc(e);return`${r?`⌘`:Vc}${n?Hc:``}${t.toUpperCase()}`}var Gc=()=>document.querySelector(`dialog[open]`)!==null,Kc={"[":`{`,"]":`}`},qc=`pointer-events-none fixed z-50 flex items-center gap-2 whitespace-nowrap rounded-md bg-neutral-800 px-2 py-1 text-[11.5px] text-neutral-100 shadow-lg`;function Jc(e,t,n){e.removeAttribute(`title`);let r=null,i=()=>{r?.remove(),r=null,document.removeEventListener(`keydown`,i,!0)};e.addEventListener(`pointerenter`,a=>{if(a.pointerType!==`mouse`)return;i(),r=L(`div`,qc,t,L(`kbd`,`rounded bg-white/15 px-1 py-px font-sans text-[10.5px]`,n)),document.body.append(r);let o=e.getBoundingClientRect(),s=o.bottom+6,c=s+r.offsetHeight+8<=window.innerHeight;r.style.top=`${c?s:Math.max(8,o.top-r.offsetHeight-6)}px`,r.style.left=`${Math.max(8,Math.min(o.left,window.innerWidth-r.offsetWidth-8))}px`,document.addEventListener(`keydown`,i,!0)}),e.addEventListener(`pointerleave`,i),e.addEventListener(`pointerdown`,i)}function Yc(e,t,n,r,i){Jc(e,n,Wc(t)),$c(t,r,i)}function Xc(e,t,n,r){Jc(e,t,`Esc`),document.addEventListener(`keydown`,e=>{e.key!==`Escape`||e.isComposing||e.defaultPrevented||Gc()||!r()||(e.preventDefault(),n())})}var Zc=`input, textarea, select, [contenteditable]`;function Qc(e,t,n,r,i){Jc(e,n,t[0].toUpperCase()),document.addEventListener(`keydown`,e=>{e.metaKey||e.ctrlKey||e.altKey||e.isComposing||e.defaultPrevented||!e.key||!t.includes(e.key.toLowerCase())||e.target?.closest?.(Zc)||Gc()||!i()||(e.preventDefault(),r())})}function $c(e,t,n){let{key:r,shift:i,meta:a}=Uc(e),o=Kc[r];document.addEventListener(`keydown`,e=>{if(!e.key||e.altKey||e.shiftKey!==i)return;let s=e.key.toLowerCase();(s===r||s===o)&&((a?!e.metaKey:!e.metaKey&&!e.ctrlKey)||n?.()||(e.preventDefault(),e.stopPropagation(),t()))},!0)}var G,el=I(`#composer`),K=I(`#input`),tl=I(`#send`),nl=I(`#send-arrow`),rl=I(`#send-queue`),il=I(`#stop`),al=I(`#queue-panel`),ol=I(`#queue-rows`),sl=I(`#queue-label`),cl=L(`div`,`hidden max-h-48 overflow-y-auto border-t border-neutral-200 px-4 py-2 text-[13px]`);cl.id=`recovery-panel`,al.after(cl);var ll=I(`#image-strip`),ul=I(`#attach-input`),dl=!1,fl=0,pl=new Set,ml=[],hl=[];function gl(){let e=window.visualViewport;if(!e)return;let t=()=>{let t=e.scale<=1.05&&window.innerHeight-e.height-e.offsetTop>80;t?document.body.dataset.kb=``:delete document.body.dataset.kb,document.body.style.height=t?`${String(e.height)}px`:``,t&&window.scrollY&&window.scrollTo(0,0)};e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t)}function _l(){let e=el.parentElement,t=[al,cl,el],n=new ResizeObserver(()=>{let n=t.reduce((e,t)=>e+t.offsetHeight,0);e.style.setProperty(`--dock-h`,`${String(n)}px`)});for(let e of t)n.observe(e,{box:`border-box`})}function vl(){K.focus()}function yl(e){let t=hl.indexOf(e);return t<0?!1:(hl.splice(t,1),!0)}function bl(e){hl.push(e)}function xl(){hl=[]}function Sl(){let e=G.sessionState()===`streaming`,t=G.sessionId()!==null,n=G.starting();tl.disabled=!t,tl.className=`flex h-7 w-7 flex-none items-center justify-center rounded-lg ${t?e?`cursor-pointer bg-amber-100 text-amber-700 hover:bg-amber-200 active:bg-amber-300`:`cursor-pointer bg-indigo-600 text-white hover:bg-indigo-500 active:bg-indigo-700 dark:text-neutral-50`:`cursor-default bg-neutral-100 text-neutral-400`}`,tl.title=t?e?`Queue — delivered when the turn ends`:`Send`:n?`Starting the session…`:`No session`,K.placeholder=n?`Starting the session…`:`Message…`,nl.classList.toggle(`hidden`,e),rl.classList.toggle(`hidden`,!e),il.classList.toggle(`hidden`,!e),il.classList.toggle(`flex`,e)}function Cl(){let e=G.chatVisible()&&dl;al.classList.toggle(`hidden`,!e),al.classList.toggle(`flex`,e),cl.classList.toggle(`hidden`,!G.chatVisible()||!cl.childElementCount)}function wl(e,t=!1){let n=G.sessionId();if(cl.replaceChildren(...e.map(e=>{let t=L(`details`,`py-1`),r=e.status===`submitting`?`Handing off`:e.status===`not-submitted`?`Not submitted`:`Acceptance unknown`,i=e.status===`submitting`?``:`; automatic queue paused`;t.append(L(`summary`,`cursor-pointer break-words text-amber-700`,`Queue recovery: ${r}${i} (in memory)`));for(let n of[...e.steering,...e.followUp]){let e=L(`div`,`flex items-start gap-2 border-t border-neutral-100 py-1`);e.append(L(`span`,`min-w-0 flex-1 whitespace-pre-wrap break-words`,n),ii(`flex-none cursor-pointer px-1 text-neutral-500 hover:text-neutral-800`,()=>n)),t.append(e)}e.error&&t.append(L(`div`,`break-words text-red-600`,e.error));let a=L(`button`,`cursor-pointer py-1 text-neutral-500 disabled:cursor-default disabled:opacity-40`,`Acknowledge`);return a.type=`button`,a.disabled=e.status===`submitting`,a.title=`Remove this recovery copy without sending it`,a.onclick=async()=>{if(!n||!confirm(`Remove this recovery copy? This does not resend the messages.`))return;let t=await x(`/api/sessions/${n}/queue/recovery/${e.id}/ack`,{}),r=t.ok?null:await S(t,`Could not acknowledge queue recovery`);G.sessionId()===n&&(r===null?await G.reload(n):U(`error`,r))},t.append(a),t})),t){let e=L(`div`,`flex flex-wrap items-center gap-x-2 py-1 text-amber-700`,`Automatic queue paused: acceptance unknown (in memory)`),t=L(`button`,`cursor-pointer underline`,`Recall queue`);t.title=`Clear the live queue and return its messages to the composer`,t.onclick=()=>void Vl(),e.append(t),cl.prepend(e)}Cl()}function Tl(e,t){++fl;let n=[...e.map(e=>({mode:`steer`,text:e})),...t.map(e=>({mode:`queued`,text:e}))];dl=n.length>0,sl.textContent=n.length>1?`Queued · ${n.length}`:`Queued`,Cl(),ol.replaceChildren(...n.map(e=>{let t=L(`li`,`flex items-start gap-2 text-[13px] leading-[18px]`);return e.mode===`steer`&&t.append(L(`span`,`flex-none rounded bg-indigo-100 px-1 py-0.5 text-[10.5px] font-semibold uppercase tracking-wide text-indigo-700`,e.mode)),t.append(L(`span`,`min-w-0 whitespace-pre-wrap break-words text-neutral-700`,e.text)),t}))}var El=8;function Dl(){let e=G.sessionId();e&&ml.length?Pl.set(e,ml):e&&Pl.delete(e),ll.classList.toggle(`hidden`,ml.length===0),ll.classList.toggle(`flex`,ml.length>0),ll.replaceChildren(...ml.map((e,t)=>{let n=e.mimeType.startsWith(`image/`)?qa(`data:${e.mimeType};base64,${e.data}`):L(`span`,`flex h-16 max-w-40 items-center truncate rounded-md border border-neutral-200 bg-neutral-50 px-2 text-[12px] text-neutral-700`,e.name??`file`),r=L(`button`,`absolute -right-1.5 -top-1.5 flex h-4 w-4 cursor-pointer items-center justify-center rounded-full bg-neutral-700 text-[10px] leading-none text-white hover:bg-red-600`,_(_e,`h-3 w-3`));return r.setAttribute(`type`,`button`),r.setAttribute(`aria-label`,`Remove ${e.name??`attachment`}`),r.onclick=()=>{ml.splice(t,1),Dl()},L(`div`,`relative`,n,r)}))}function Ol(e){if(ml.length>=El){U(`error`,`attachment limit is ${El} files per message`);return}if(e.size>33554432){U(`error`,`${e.name||`file`} is too large (32MB max)`);return}let t=new FileReader;t.onload=()=>{let n=t.result;ml.push({data:n.slice(n.indexOf(`,`)+1),mimeType:e.type||`application/octet-stream`,name:e.name||void 0}),Dl()},t.readAsDataURL(e)}async function kl(e){let t=[];for(let n of e){let e=await x(`/api/inbox`,n);if(!e.ok)return null;let{path:r}=await e.json();t.push(Fi(r))}return t}var Al=`pier.draft.`,jl=e=>`${Al}${e}`,Ml=0;function Nl(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(Al)&&e.push(n)}for(let t of e){let e=localStorage.getItem(t);e&&!sessionStorage.getItem(t)&&sessionStorage.setItem(t,e),localStorage.removeItem(t)}}catch(e){console.warn(`could not move older drafts out of localStorage`,e)}}var Pl=new Map;function Fl(e=G.sessionId(),t=K.value){e&&(t?sessionStorage.setItem(jl(e),t):sessionStorage.removeItem(jl(e)))}function Il(e){++Ml,K.value=sessionStorage.getItem(jl(e))??``,Ll(),ml=Pl.get(e)??[],Dl()}function Ll(){let e=K.style.height;K.style.height=`auto`;let t=`${Math.min(K.scrollHeight,192)}px`;K.style.height=t,t!==e&&Ns()}var Rl=!1;async function zl(e,t){let n=(t??K.value).trim(),r=t===void 0?ml:[],i=G.sessionId();if(!(!n&&r.length===0||!i)){if(t===void 0){if(Rl)return;Rl=!0,K.value=``,Ll(),Fl(),ml=[],Dl()}try{let t=[];if(r.length){let e=await kl(r);if(e===null){U(`error`,`attachment upload failed`),K.value=[n,K.value.trim()].filter(Boolean).join(`
|
|
81
|
+
`),Ll(),Fl(),ml=r,Dl();return}t=e}let a=[n,...t].filter(Boolean).join(`
|
|
82
|
+
`),o=G.sessionState()===`idle`&&e===`auto`;o?G.setState(`streaming`):Sl(),(o||e===`steer`)&&(bl(a),U(`user`,a,!1,Date.now()),Ns(!0));let s=await x(`/api/sessions/${i}/messages`,{text:a,mode:e});if(!s.ok){let e=await S(s,`send failed`);await G.reload(i),U(`error`,e)}}finally{t===void 0&&(Rl=!1)}}}async function Bl(e){let t=G.sessionId();if(!t)return;Tl([],[]);let n=await x(`/api/sessions/${t}/queue/deliver`,{mode:e});if(!n.ok){let r=await S(n,`Queue ${e} failed`);await G.reload(t),G.sessionId()===t&&U(`error`,r)}}async function Vl(){let e=G.sessionId();if(!e||pl.has(e))return;pl.add(e);let t=fl,n=Ml,r=document.activeElement;try{Fl();let i=await fetch(`/api/sessions/${e}/queue/recall`,{method:`POST`});if(!i.ok){let t=await S(i,`Could not recall queued messages`);G.sessionId()===e&&U(`error`,t);return}let{messages:a}=await i.json(),o=G.sessionId()===e;if(a.length)try{let t=o?K.value:sessionStorage.getItem(jl(e))??``,i=(t?[t,...a]:a).join(`
|
|
83
|
+
`);o&&(K.value=i,Ll(),n===Ml&&G.chatVisible()&&document.activeElement===r&&K.focus()),Fl(e,i)}catch(t){U(`error`,`Could not save recalled messages for session ${e}: ${String(t)}\nRecalled messages (not saved):\n${a.join(`
|
|
84
|
+
`)}`)}o&&t===fl&&Tl([],[])}finally{pl.delete(e)}}function Hl(e){G=e,Nl(),gl(),_l();let t=()=>{let e=G.sessionId();e&&fetch(`/api/sessions/${e}/abort`,{method:`POST`})};il.onclick=t,Xc(il,`Stop the running turn`,t,()=>G.sessionState()===`streaming`&&G.chatVisible()),I(`#queue-steer`).onclick=()=>void Bl(`steer`),I(`#queue-restart`).onclick=()=>void Bl(`restart`),I(`#queue-recall`).onclick=()=>void Vl(),el.onsubmit=e=>{e.preventDefault(),zl(`auto`)},Qc(K,[`/`],`Write a message`,vl,G.chatVisible),K.onfocus=Ms,K.oninput=()=>{Ll(),Fl()};let n=!matchMedia(`(pointer: coarse)`).matches;K.onkeydown=e=>{e.isComposing||e.keyCode===229||n&&e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),zl(`auto`))},K.onpaste=e=>{for(let t of e.clipboardData?.items??[]){let e=t.kind===`file`?t.getAsFile():null;e&&Ol(e)}let t=e.clipboardData?.getData(`text/plain`)??``,n=t.trim();!n||n===t||(e.preventDefault(),K.setRangeText(n,K.selectionStart??0,K.selectionEnd??0,`end`),Ll(),Fl())},H.ondragover=e=>e.preventDefault(),H.ondrop=e=>{e.preventDefault();for(let t of e.dataTransfer?.files??[])Ol(t)},I(`#attach`).onclick=()=>ul.click(),ul.onchange=()=>{for(let e of ul.files??[])Ol(e);ul.value=``},Sl()}var Ul=`pier.push`,Wl=`/sw.js`,Gl=()=>/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent),Kl=()=>matchMedia(`(display-mode: standalone)`).matches||navigator.standalone===!0;function ql(){return window.isSecureContext?Gl()&&!Kl()?`On iPhone and iPad, notifications work only from the installed app: Share → Add to Home Screen, then open Pier from that icon.`:!(`serviceWorker`in navigator)||!(`PushManager`in window)||!(`Notification`in window)?`This browser has no Web Push support.`:``:`Notifications need HTTPS. Reach this Pier through its public URL, not over plain http.`}var Jl=[[/iPhone/,`iPhone`],[/iPad/,`iPad`],[/Android/,`Android`],[/Macintosh/,`Mac`],[/Windows/,`Windows`]],Yl=[[/Edg\//,`Edge`],[/Chrome\//,`Chrome`],[/Firefox\//,`Firefox`],[/Safari\//,`Safari`]];function Xl(){let e=navigator.userAgent,t=(t,n)=>t.find(([t])=>t.test(e))?.[1]??n;return`${t(Jl,`Linux`)} · ${t(Yl,`browser`)}${Kl()?` (installed)`:``}`}var Zl=e=>{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n},Ql=null;async function $l(){return!(`serviceWorker`in navigator)||!window.isSecureContext?null:(Ql??=await navigator.serviceWorker.register(Wl,{scope:`/`}).catch(e=>(console.warn(`service worker registration failed`,e),null)),Ql)}var eu=(e,t)=>{let n=e?new Uint8Array(e):null;return n?.length===t.length&&n.every((e,n)=>e===t[n])};async function tu(e){let{publicKey:t}=await Ge(`/api/push`,`Could not read this instance's push key`),n=Zl(t),r=await e.pushManager.getSubscription();if(r){if(eu(r.options.applicationServerKey,n))return r;await r.unsubscribe()}return e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:n})}async function nu(e){return x(`/api/push/subscribe`,{...e.toJSON(),label:Xl()})}async function ru(){ou();let e=await $l();if(!(!e||localStorage.getItem(Ul)!==`on`)&&!(!(`Notification`in window)||Notification.permission!==`granted`))try{await nu(await tu(e))}catch(e){console.warn(`re-registering this browser for notifications failed`,e)}}var iu=null,au=null;function ou(){window.addEventListener(`beforeinstallprompt`,e=>{e.preventDefault(),iu=e,au?.()}),window.addEventListener(`appinstalled`,()=>{iu=null,au?.()})}function su(e){let t=navigator;(e>0?t.setAppBadge?.(e):t.clearAppBadge?.())?.catch(()=>{})}function cu(){let e=L(`span`,`text-[11.5px]`,``),t=ui(`Send a test notification`),n=L(`div`,`flex items-center gap-3`,t,e),r=L(`div`,`flex flex-col gap-4`),i=()=>localStorage.getItem(Ul)===`on`;async function a(){Ai(e,`saving`,`asking this browser…`);let t=await Notification.requestPermission();if(t!==`granted`)return localStorage.setItem(Ul,`off`),c(),Ai(e,`failed`,t===`denied`?`Notifications are blocked for this site — allow them in the browser's site settings, then try again.`:`No answer to the permission prompt.`);let n=await $l();if(!n)return Ai(e,`failed`,`This browser refused to register a service worker.`);try{let t=await nu(await tu(n));if(!t.ok)return Ai(e,`failed`,await S(t,`Could not register this browser`));localStorage.setItem(Ul,`on`),c(),Ai(e,`saved`,`This browser will be notified when a turn finishes unseen.`)}catch(t){Ai(e,`failed`,`Could not subscribe: ${String(t)}`)}}async function o(){localStorage.setItem(Ul,`off`),c();let t=await(await $l())?.pushManager.getSubscription();t&&(await x(`/api/push/unsubscribe`,{endpoint:t.endpoint}),await t.unsubscribe()),Ai(e,`idle`,`This browser will not be notified.`)}t.onclick=()=>{Ai(e,`saving`,`sending…`),(async()=>{let t=await x(`/api/push/test`,{});if(!t.ok)return Ai(e,`failed`,await S(t,`Could not send`));let{sent:n,failed:r}=await t.json();Ai(e,r?`failed`:`saved`,`Handed ${String(n)} device(s) to their push service${r?`, ${String(r)} refused`:``}.`)})()};function s(){if(!iu)return[];let e=ui(`Install Pier`,!0);return e.onclick=()=>{let e=iu;e&&e.prompt().then(()=>e.userChoice).finally(()=>{iu=null,c()})},[L(`div`,`flex items-center gap-3`,e,L(`span`,`text-[11.5px] leading-snug text-neutral-500`,`Its own window and icon — and where notifications look like an app's.`))]}function c(){let e=ql();if(e){r.replaceChildren(...s(),L(`p`,`text-[12.5px] leading-snug text-neutral-500`,e));return}let c=i()&&Notification.permission===`granted`;t.disabled=!c,r.replaceChildren(...s(),Oi(`Notify this device`,`A turn that finishes while nobody is looking at it becomes a notification here. Per browser — each device is enabled on its own.`,c,e=>void(e?a():o())),n)}return au=c,c(),bi(`Notifications`,`Web Push, so a finished turn reaches you with the workbench closed. Installed — Chrome's address-bar icon, or Share → Add to Home Screen on iOS — Pier notifies you the way an app does.`,r)}var q=I(`#sidebar`),lu=I(`#drawer-scrim`),uu=I(`#mobile-title`),du=I(`#mobile-menu`),fu=I(`#session-meta`);function pu(){delete q.dataset.open,lu.classList.add(`hidden`),xu()}function mu(e,t){uu.textContent=e,uu.classList.toggle(`cursor-pointer`,t),du.classList.toggle(`hidden`,!t)}var hu=`pier.railClosed`;localStorage.getItem(hu)===`1`&&(document.body.dataset.rail=`closed`);function gu(e){document.body.dataset.rail=e?`closed`:``,localStorage.setItem(hu,e?`1`:`0`),xu()}function _u(){if(q.dataset.open!==void 0)return pu();q.dataset.open=``,lu.classList.remove(`hidden`),xu()}var vu=window.matchMedia(`(width < 48rem)`),yu=()=>vu.matches;function bu(){yu()?I(`#mobile-bar`).append(fu):I(`#chat-menu`).before(fu)}function xu(){let e=yu()&&q.dataset.open!==void 0,t=I(`main`);t.inert=e,q.inert=yu()?!e:document.body.dataset.rail===`closed`,I(`#drawer-toggle`).setAttribute(`aria-expanded`,String(e)),e&&!q.contains(document.activeElement)&&I(`#new-session`).focus(),q.inert&&q.contains(document.activeElement)&&I(yu()?`#drawer-toggle`:`#rail-toggle`).focus()}var Su=[I(`#rail-toggle`),I(`#drawer-toggle`)],Cu=`attention absolute -right-0.5 -top-0.5 rounded-full bg-amber-500`,wu=e=>e===1?L(`span`,`${Cu} h-2 w-2`):L(`span`,`${Cu} flex h-3.5 min-w-3.5 items-center justify-center px-0.5 text-[9px] font-semibold text-white`,e>9?`9+`:String(e));function Tu(e){for(let t of Su)t.querySelector(`.attention`)?.remove(),e&&t.append(wu(e))}var Eu=20,Du=.35,Ou=8;function ku(){let e=-1,t=0,n=!1,r=!1,i=1,a=e=>{q.style.transition=`none`,q.style.transform=`translateX(${String(e-i)}px)`,lu.style.transition=`none`,lu.classList.remove(`hidden`),lu.style.opacity=String(e/i)},o=t=>{q.style.transition=``,q.style.transform=``,lu.style.transition=``,lu.style.opacity=``,t?(q.dataset.open=``,lu.classList.remove(`hidden`),xu()):pu(),e=-1,r=!1};window.addEventListener(`touchstart`,a=>{if(r||(e=-1,!yu()||a.touches.length!==1))return;let o=a.touches[0],s=q.dataset.open!==void 0;if(i=q.offsetWidth||1,s){if(o.clientX>i)return}else{if(o.clientX>Eu||a.target?.closest(`button, a, input, textarea, select`))return;a.preventDefault()}e=o.clientX,t=o.clientY,n=!s},{passive:!1}),window.addEventListener(`touchmove`,o=>{if(e<0)return;let s=o.touches[0],c=s.clientX-e;if(!r){if(Math.abs(s.clientY-t)>Math.abs(c))return void(e=-1);if(Math.abs(c)<Ou)return;r=!0}o.preventDefault(),a(Math.max(0,Math.min(i,n?c:i+c)))},{passive:!1});let s=()=>{if(e<0)return;if(!r)return void(e=-1);let t=q.getBoundingClientRect().right;o(n?t>i*Du:t>i*.65)};window.addEventListener(`touchend`,s),window.addEventListener(`touchcancel`,s)}function Au(e){ku(),xu(),bu(),vu.addEventListener(`change`,()=>{pu(),bu()}),I(`#drawer-toggle`).setAttribute(`aria-controls`,`sidebar`),q.addEventListener(`keydown`,e=>{if(!(!yu()||q.dataset.open===void 0||e.defaultPrevented||e.isComposing)){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),pu();else if(e.key===`Tab`){let t=[...q.querySelectorAll(`button, a[href], summary`)].filter(e=>e.getClientRects().length&&!e.matches(`:disabled`)),n=e.shiftKey?t.at(-1):t[0],r=e.shiftKey?t[0]:t.at(-1);document.activeElement===r&&(e.preventDefault(),n?.focus())}}}),I(`#drawer-toggle`).onclick=_u,lu.onclick=pu,du.onclick=()=>e.sessionMenu(du),uu.onclick=()=>{du.classList.contains(`hidden`)||e.sessionInfo(uu)};let t=I(`#rail-toggle`);t.onclick=()=>gu(document.body.dataset.rail!==`closed`),Yc(t,`meta+b`,`Toggle sidebar`,()=>yu()?_u():gu(document.body.dataset.rail!==`closed`))}var J,ju=I(`#session-list`),Mu=I(`#new-session`),Nu=e=>e.modified??e.createdAt;function Pu(e){return{top:e.filter(e=>e.rank!==void 0).sort((e,t)=>(e.rank??0)-(t.rank??0)),rest:e.filter(e=>e.rank===void 0).sort((e,t)=>t.createdAt-e.createdAt)}}function Fu(e,t){let{top:n,rest:r}=Pu(e),i=[...n,...r].slice(0,t);return{rows:i,hidden:e.length-i.length}}function Iu(e,t,n){let{top:r,rest:i}=Pu(e),a=[...r,...i];if(!a.length)return;let o=a.findIndex(e=>e.id===t),s=o<0?a[0]:a[(o+n+a.length)%a.length];return s&&s.id!==t?s.id:void 0}var Lu=8,Ru=`session-more hidden h-7 w-7 flex-none cursor-pointer items-center justify-center rounded-lg text-neutral-400 hover:bg-neutral-200 hover:text-neutral-700`,zu=e=>e.unread,Bu=e=>`${e} subagent${e>1?`s`:``} running`,Vu=e=>e.state===`streaming`||zu(e)||e.activeRuns>0;function Hu(e){if(!Vu(e))return[];let t=e.state===`streaming`?[`bg-green-500 animate-pulse`,`working…`]:zu(e)?[`bg-amber-500`,`turn finished — not viewed yet`]:[`bg-sky-500`,Bu(e.activeRuns)],n=L(`span`,`h-2 w-2 flex-none rounded-full ${t[0]}`);return n.title=t[1],[n]}async function Uu(e){let t=window.prompt(`Session name — empty resets it to the first message`,e.title??``);if(t===null)return;let n=e.title,r=t=>{e.title=t,Xu(),J.onTitleChanged()};r(t.trim()||void 0),(await x(`/api/sessions/${e.id}/rename`,{name:t})).ok||r(n)}var Wu=`flex-none text-xs font-medium uppercase leading-5 text-neutral-500`,Gu=e=>e.channel&&e.channel!==`web`?[L(`span`,Wu,e.channel[0]??``)]:[];function Ku(e,t=L(`button`,Ru,_(m))){let n=e.id===J.currentId(),r=L(`li`,`flex items-center gap-1 hover:bg-neutral-100 ${n?`bg-indigo-50 hover:bg-indigo-50`:``}`);t.setAttribute(`type`,`button`),t.setAttribute(`aria-label`,`Session actions: ${e.title??`untitled`}`),t.title=`Session actions`,t.onclick=n=>{n.stopPropagation(),J.sessionMenu(t,e)};let i=L(`button`,`session-open flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-lg text-left`,L(`span`,`min-w-0 flex-1 truncate`,e.title??`untitled`),...Hu(e));return i.setAttribute(`type`,`button`),n&&i.setAttribute(`aria-current`,`page`),i.onclick=()=>J.select(e.id),r.dataset.sessionId=e.id,r.append(i,...Gu(e),t),r.title=[e.cwd,`active ${Jr(Nu(e))} ago · created ${new Date(e.createdAt).toLocaleDateString()}`,...e.channel&&e.channel!==`web`?[`answering ${e.channel}`]:[]].join(`
|
|
85
|
+
`),r}var qu=()=>`${J.currentId()??``}\n${Yu}\n${JSON.stringify(J.sessions())}`,Ju=``,Yu=20;function Xu(){let e=qu();if(e===Ju)return;Ju=e;let t=J.sessions(),n=t.filter(zu);Tu(n.length),su(n.length);let{rows:r,hidden:i}=Fu(t,Yu),a=ju.querySelector(`.session-more[aria-expanded='true']`),o=a?.closest(`[data-session-id]`)?.dataset.sessionId,s=r.map(e=>Ku(e,e.id===o?a:void 0));if(i>0){let e=L(`button`,`session-open w-full cursor-pointer rounded-lg text-left text-sm text-neutral-500`,`Load more (${i})`);e.id=`session-load-more`,e.setAttribute(`type`,`button`),e.onclick=()=>{Yu+=20,Xu(),ju.querySelectorAll(`.session-open`)[r.length]?.focus()},s.push(L(`li`,`hover:bg-neutral-100`,e))}let c=document.activeElement,l=c?.closest(`[data-session-id]`)?.dataset.sessionId,u=c?.classList.contains(`session-more`)?`.session-more`:`.session-open`;if(ju.replaceChildren(...s.length?[L(`ul`,`pb-1`,...s)]:[L(`p`,`px-3 py-2 text-sm leading-normal text-neutral-500`,`No sessions yet — create one.`)]),l){let e=[...ju.querySelectorAll(`[data-session-id]`)].find(e=>e.dataset.sessionId===l);e?.querySelector(`.session-open`)?.focus({preventScroll:!0}),u===`.session-more`&&e?.querySelector(u)?.focus({preventScroll:!0})}else c?.id===`session-load-more`&&(ju.querySelector(`#session-load-more`)??ju.querySelector(`.session-open`)??I(`#new-session`)).focus({preventScroll:!0});kd()}function Zu(){if(Mu.getAttribute(`aria-expanded`)===`true`)return z();let e=J.sessions().find(e=>e.id===J.currentId())?.cwd,t=Ve(J.sessions()).slice(0,Lu);if(e&&!t.includes(e)&&t.unshift(e),!t.length)return Ta(Mu,void 0,J.createSession);Ea(Mu,t.map(e=>({path:e,hint:Xr(e)})),e,J.createSession)}function Qu(e){J=e,Mu.onclick=Zu,Yc(Mu,`shift+o`,`New session`,Zu,Gc);let t=e=>{let t=Iu(J.sessions(),J.currentId(),e);t&&J.select(t)};$c(`shift+[`,()=>t(-1),Gc),$c(`shift+]`,()=>t(1),Gc)}var $u,ed=I(`#palette`),td=I(`#palette-input`),nd=I(`#palette-list`),rd=I(`#palette-count`),id=[{name:`tasks`,icon:re,label:`Tasks`,detail:`Automation — task definitions and schedules`},{name:`runs`,icon:re,label:`Runs`,detail:`Automation — executions, subagents and callbacks`},{name:`activity`,icon:re,label:`Activity`,detail:`Automation — sessions and relationships`},{name:`boards`,icon:ne,label:`Boards`,detail:`Console — the static pages Pier publishes`},{name:`settings`,icon:pe,label:`Settings`,detail:`Console — models and providers, agent files and extensions, channels, password, sign out, security`}],ad=7,od=3,sd=8,cd=80,ld=``,ud,dd,fd;function pd(e){ld!==e&&(clearTimeout(fd),dd?.abort(),dd=void 0,ld=e,ud=void 0,e&&(fd=setTimeout(()=>{let t=dd=new AbortController;C(`/api/search?q=${encodeURIComponent(e)}`,`Search unavailable`,{signal:t.signal}).then(n=>{t.signal.aborted||ld!==e||(dd=void 0,ud=n.ok?{hits:n.value.hits}:{error:n.error},ed.open&&Od())})},cd)))}var md=[],hd=0;function gd(e){if(md.length){hd=(e+md.length)%md.length;for(let[e,{el:t}]of md.entries())t.classList.toggle(`bg-indigo-50`,e===hd),t.setAttribute(`aria-selected`,String(e===hd));md[hd]?.el.scrollIntoView({block:`nearest`})}}var _d=e=>e.hit?.at??e.session?.createdAt;function vd(e){let t=L(`span`,`min-w-0 flex-1 truncate text-neutral-500`);for(let n of e.replaceAll(/\s+/g,` `).split(``)){let[e=``,r]=n.split(``,2);r===void 0?t.append(e):t.append(L(`span`,`font-medium text-neutral-800`,e),r)}return t}var yd=`flex min-w-0 flex-1 items-baseline gap-2`,bd=`shrink-0 truncate`,xd=`min-w-[2.5em] truncate text-[0.8125rem] text-neutral-400`,Sd=`flex-none text-[0.75rem] tabular-nums text-neutral-400`,Cd=`flex h-7 w-7 flex-none items-center justify-center rounded-[8px] bg-neutral-100 text-neutral-500`;function wd(e){let t=L(`li`,`palette-row flex cursor-pointer items-center gap-3 rounded-[10px] px-2 leading-5 ${e.hit?`py-1.5`:`min-h-10`}`);t.setAttribute(`role`,`option`),t.append(L(`span`,Cd,_(e.icon,`h-4 w-4`)));let n=L(`div`,`flex min-w-0 flex-1 flex-col`),r=L(`div`,`flex items-center gap-2`);e.session&&r.append(...Hu(e.session));let i=L(`span`,yd,L(`span`,`${bd} ${e.detail?`max-w-[calc(100%-3em)]`:`max-w-full`}`,e.label));e.detail&&i.append(L(`span`,xd,e.detail)),r.append(i);let a=_d(e);return a!==void 0&&r.append(L(`span`,Sd,Jr(a))),n.append(r),e.hit&&n.append(L(`div`,`flex items-baseline gap-2 text-[0.8125rem] leading-5`,L(`span`,`flex-none text-[0.75rem] text-neutral-400`,e.hit.role===`user`?`You`:`Agent`),vd(e.hit.snippet))),t.append(n),t.onclick=e.open,t}var Td=e=>L(`li`,`px-2 pb-1.5 pt-4 text-[0.6875rem] font-semibold leading-4 tracking-[0.02em] text-neutral-400 first:pt-2`,e);function Ed(e,t){let n=L(`li`,`px-2 py-2 pl-12 text-[0.8125rem] leading-5 text-neutral-400`,e);return t&&(n.title=t),n}var Dd=e=>e.channel&&e.channel!==`web`?e.channel:``;function Od(){let e=td.value.trim(),t=e.toLowerCase().split(/\s+/).filter(Boolean),n=e=>{let n=e.toLowerCase();return t.every(e=>n.includes(e))},r=e=>()=>{ed.close(),e()},i=$u.sessions(),a=new Map(i.map(e=>[e.id,e])),{top:o,rest:s}=Pu(i),c=[...o,...s],l=e=>({icon:ae,label:e.title??Zr(e.cwd),detail:[Xr(e.cwd),Dd(e)].filter(Boolean).join(` · `),open:r(()=>void $u.select(e.id)),session:e}),u=e=>({icon:te,label:Zr(e),detail:e,open:r(()=>void $u.createSession(e))}),d=id.filter(t=>!e||n(`${t.label} ${t.detail}`)).map(({name:e,icon:t,label:n,detail:i})=>({icon:t,label:n,detail:i,open:r(()=>$u.openConsole(e))})),f={icon:te,label:`New session in…`,detail:`Pick a directory`,open:r(Zu)},p=[];if(e){let t=Ve(i).filter(e=>n(Xr(e))).slice(0,od),o=c.filter(e=>n(`${e.title??``} ${e.cwd} ${Dd(e)}`)).slice(0,sd),s=new Set(o.map(e=>e.id)),m=o.map(l);if(ld!==e||!ud)m.push(Ed(`Searching messages…`));else if(`error`in ud)m.push(Ed(`Message search unavailable`,ud.error));else{for(let e of ud.hits){if(m.length>=sd)break;let t=a.get(e.sessionId);!t||s.has(t.id)||m.push({...l(t),hit:e,open:r(()=>void $u.select(t.id).then(()=>Fs(e.role,e.at)))})}m.length||m.push(Ed(`No sessions match`))}p.push([`Actions`,[...t.map(u),...n(f.label)?[f]:[],...d]],[`Sessions`,m])}else{let e=a.get($u.currentId()??``);p.push([`Running`,c.filter(Vu).map(l)],[`Recent`,c.filter(e=>!Vu(e)).slice(0,ad).map(l)],[`Actions`,[...e?[u(e.cwd)]:[],f]],[`Console`,d])}md=[];let m=[];for(let[e,t]of p)if(t.length){m.push(Td(e));for(let e of t){if(e instanceof HTMLElement){m.push(e);continue}let t=wd(e);md.push({el:t,open:e.open}),m.push(t)}}nd.replaceChildren(...m.length?m:[Ed(`Nothing matches`)]),rd.textContent=`${md.length} ${md.length===1?`row`:`rows`}`,gd(Math.min(hd,Math.max(0,md.length-1)))}function kd(){ed.open&&Od()}function Ad(){if(ed.open)return ed.close();td.value=``,hd=0,pd(``),Od(),ed.showModal(),td.focus(),$u.loadSessions().then(kd)}function jd(e){$u=e;let t=I(`#open-palette`);t.onclick=Ad,Yc(t,`k`,`Search sessions, messages and Console`,Ad,()=>ed.open||sa()),ed.onclick=e=>{e.target===ed&&ed.close()},ed.onclose=()=>pd(``),td.oninput=()=>{hd=0,pd(td.value.trim()),Od()},td.onkeydown=e=>{let t=ca(e);if(t!==void 0){e.preventDefault(),gd(hd+t);return}e.key===`Enter`&&!e.ctrlKey&&(e.preventDefault(),md[hd]?.open())}}var Md=0,Nd=e=>`${e.provider}/${e.id}`,Pd=null;async function Fd(){let{modelMenu:e}=await Ge(`/api/settings`,`Could not read the pinned model menu`);return e}function Id(e){let t=L(`button`,`flex w-full min-w-0 cursor-pointer items-center gap-2 px-3 py-1.5 text-left hover:bg-neutral-100`,_(o,`h-3 w-3 text-indigo-600 ${e.checked?``:`invisible`}`),L(`span`,`truncate`,e.label));return e.hint&&t.append(L(`span`,`ml-auto flex-none text-[11.5px] text-neutral-400`,e.hint)),e.title&&(t.title=e.title),t.onclick=()=>e.onSelect(),t}function Ld({models:e,current:t,thinkingLevel:n,thinkingLevels:r,onPick:i,onThinkingPick:a}){let o=n,s=L(`div`,`flex w-full min-w-0 flex-col sm:min-w-72`),c=L(`div`,`flex flex-col gap-2 border-b border-neutral-200 px-2 py-2`),u=document.createElement(`input`);if(u.type=`search`,u.placeholder=`Search models`,u.setAttribute(`aria-label`,`Search models`),u.className=`w-full rounded-md border border-neutral-300 px-2 py-1.5 text-[12.5px] focus:border-indigo-400 focus:outline-none`,c.append(u),r.length){let e=document.createElement(`details`),t=L(`span`,`ml-auto font-medium text-indigo-700`,xe(o)),n=L(`summary`,`flex min-h-11 cursor-pointer list-none items-center gap-2 rounded-xl px-3 text-sm text-neutral-700 hover:bg-neutral-100 [&::-webkit-details-marker]:hidden`,L(`span`,`font-medium`,`Reasoning effort`),t,_(l,`chev h-3 w-3 text-neutral-400`)),i=L(`fieldset`,`grid grid-cols-2 gap-1 rounded-xl bg-neutral-50 p-1`);i.append(L(`legend`,`sr-only`,`Reasoning effort`));let s=`reasoning-${++Md}`;for(let e of r){let n=document.createElement(`input`);n.type=`radio`,n.name=s,n.value=e,n.checked=e===o,n.className=`peer sr-only`,n.onchange=()=>{n.checked&&(o=e,t.textContent=xe(o),m(u.value),a(o))},i.append(L(`label`,`relative cursor-pointer`,n,L(`span`,`flex min-h-11 items-center rounded-lg border border-transparent px-3 text-sm text-neutral-700 hover:bg-neutral-100 peer-checked:border-indigo-200 peer-checked:bg-indigo-50 peer-checked:font-semibold peer-checked:text-indigo-700 peer-focus-visible:outline-2 peer-focus-visible:outline-indigo-500`,xe(e))))}e.append(n,i),c.append(e)}let d=L(`div`,`max-h-72 overflow-y-auto py-1`),f=new Map(e.map(e=>[Nd(e),e])),p=e=>{let n=(Pd??[]).map(e=>({e,model:f.get(Nd(e))})).filter(t=>!!t.model&&(!e||Nd(t.model).toLowerCase().includes(e)));n.length&&d.append(L(`div`,`px-3 pb-0.5 pt-1 text-[10.5px] font-semibold uppercase tracking-wide text-neutral-400`,`Pinned`),...n.map(({e,model:n})=>Id({label:n.id,hint:xe(e.thinking),title:e.note,checked:!!t&&Nd(t)===Nd(n)&&o===e.thinking,onSelect:()=>i(n,e.thinking)})),L(`div`,`my-1 border-t border-neutral-100`))},m=n=>{d.replaceChildren();let r=n.trim().toLowerCase();p(r);let a=new Map;for(let t of e){if(r&&!Nd(t).toLowerCase().includes(r))continue;let e=a.get(t.provider);e?e.push(t):a.set(t.provider,[t])}if(!a.size){d.append(L(`div`,`px-3 py-2 text-[12.5px] text-neutral-400`,e.length?`No matching models.`:`No models available.`));return}for(let[e,n]of a){let a=n.some(e=>!!t&&Nd(t)===Nd(e)),o=document.createElement(`details`);o.open=a||r.length>0;let s=L(`summary`,`flex cursor-pointer select-none items-center gap-1.5 px-3 py-1 text-[10.5px] font-semibold uppercase tracking-wide text-neutral-400 hover:bg-neutral-100`,_(l,`chev h-3 w-3`),L(`span`,`truncate`,e),L(`span`,`ml-auto flex-none normal-case text-neutral-300`,String(n.length)));o.append(s,...n.map(e=>Id({label:e.id,checked:!!t&&Nd(t)===Nd(e),onSelect:()=>i(e)}))),d.append(o)}};return u.oninput=()=>m(u.value),m(``),Fd().then(e=>{let t=JSON.stringify(e)!==JSON.stringify(Pd);Pd=e,t&&m(u.value)}).catch(e=>Pc(`model menu unavailable`,e)),s.append(c,d),queueMicrotask(()=>u.focus()),s}function Rd(e,t,n,r){let i=di(t.model?`${t.model.id}${t.thinking?` · ${xe(t.thinking)}`:``}`:t.thinking?`Pi default · ${xe(t.thinking)}`:`Pi default`,`${Ci} flex items-center gap-1.5 ${t.model?`text-neutral-700`:`text-neutral-400`}`);return i.title=t.model?`${t.model.provider}/${t.model.id}`:`Whatever the project and Pi pick`,i.onclick=()=>{let e=Ld({models:n,current:t.model,thinkingLevel:t.thinking??`medium`,thinkingLevels:[...jo],onPick:(e,n)=>{z(),r({model:e,thinking:n??t.thinking})},onThinkingPick:e=>{t={...t,thinking:e},r(t)}}),a=di(`Pi default`,`w-full cursor-pointer px-3 py-1.5 text-left text-[12.5px] text-neutral-500 hover:bg-neutral-100`);a.onclick=()=>{z(),r({model:null,thinking:null})};let o=L(`div`,`flex flex-col`);o.append(e,L(`div`,`border-t border-neutral-200`),a),ga(i,o)},xi(e,i)}var Y;function zd(e){Y=e,$c(Bd,()=>{Y.currentSession()&&(z(),Y.toggleFiles())},Gc)}var Bd=`i`,Vd=I(`#chat-title`),Hd=I(`#chat-menu`),Ud=I(`#session-meta`),Wd=null,Gd=new Map,Kd=e=>`${e.provider}/${e.id}`,X=null,qd=null,Jd=null,Yd=null;function Xd(){X=null,qd=null,Jd=null,Yd=null,of()}function Zd(e,t,n,r){X=e,qd=t,Jd=n,Yd=r,tf()}function Qd(e){Yd=e.completedAt,qd&&={...qd,tokens:e.tokens},of()}var $d=null;function ef(e){$d=e===null?null:Zr(e),tf()}function tf(){let e=Y.currentSession();e&&($d=null),Vd.textContent=e?e.title??Zr(e.cwd):$d??Y.currentId()??`no session`,Vd.classList.toggle(`cursor-pointer`,!!e),Vd.title=e?`Session info`:``,Vd.onclick=e?()=>sf(Vd,e):null,Hd.classList.toggle(`hidden`,!e),e&&(Hd.onclick=()=>mf(Hd,e)),of(),Y.syncBar()}var nf=70,rf=(e,t)=>Math.min(100,Math.round(e/t.contextWindow*100)),af=e=>e.tokens===null?`?/${Se(e.contextWindow)}`:`${Se(e.tokens)}/${Se(e.contextWindow)} · ${100-rf(e.tokens,e)}% left`;function of(){let e=qd,t=e?.tokens??null,n=Y.currentId(),r=Y.currentSession()?.activeRuns??0,i=[];if(r>0){let e=L(`button`,`flex flex-none cursor-pointer items-center gap-1 rounded bg-sky-50 px-1.5 py-px font-medium text-sky-700 hover:bg-sky-100`,_(h,`spinner h-3 w-3`),`${r} running`);e.title=`${Bu(r)} · show the newest`,e.onclick=()=>{Is()||U(`error`,`no run card left in this transcript — reload the session to see it`)},i.push(e)}if(!n&&$d&&i.push(L(`span`,`flex flex-none items-center gap-1.5 text-neutral-500`,_(h,`spinner`),`starting…`)),n){let e=(e,t)=>{let r=L(`button`,`cursor-pointer font-mono ${t}`,e);return r.title=`Change model or reasoning`,r.onclick=()=>void cf(r,n),r};X&&i.push(e(X.id,`min-w-0 truncate rounded bg-indigo-50 px-1.5 py-px font-medium text-indigo-700 hover:bg-indigo-100`)),Jd&&i.push(e(Jd,`flex-none text-neutral-500 hover:text-indigo-700`))}let a=0;if(e&&t!==null){a=rf(t,e);let n=a>=90?`text-red-700`:a>=nf?`text-amber-700`:`text-neutral-500`;i.push(L(`span`,`flex-none font-mono ${n}`,Se(t).toLowerCase()))}let o=i.flatMap((e,t)=>t===0?[e]:[L(`span`,`flex-none text-neutral-300`,`·`),e]);Ud.replaceChildren(...o),Ud.classList.toggle(`hidden`,i.length===0),Ud.classList.toggle(`flex`,i.length>0),Ud.toggleAttribute(`data-urgent`,!n&&!!$d||r>0||a>=nf)}function sf(e,t,n){let i=[[`Directory`,t.cwd],[`Session`,t.id]],a=t.id===Y.currentId();if(a&&(i.push([`Model`,X?.id??`—`]),i.push([`Reasoning`,Jd??`—`]),i.push([`Context`,qd?af(qd):`—`])),i.push([`Created`,Qr(t.createdAt),Yr(t.createdAt)]),a){let e=Yd;i.push(e===null?[`Last reply`,`—`]:[`Last reply`,Qr(e),Yr(e)])}let o=L(`div`,`w-[min(26rem,calc(100vw-2rem))] max-sm:w-full rounded-xl bg-white px-3 py-3 font-sans text-[15px] leading-normal`),s=L(`button`,`icon-btn h-11 w-11 sm:h-8 sm:w-8`,_(_e));s.setAttribute(`aria-label`,`Close session info`),s.onclick=z;let c=L(`div`,`sticky top-0 z-10 flex items-start gap-2 bg-white pb-2`,L(`div`,`min-w-0 flex-1`,L(`div`,`text-sm font-medium text-neutral-500`,`Session info`),L(`h2`,`mt-1 [overflow-wrap:anywhere] text-lg leading-7 font-semibold text-neutral-900`,t.title??Zr(t.cwd))),s);if(n){let e=L(`button`,`icon-btn h-11 w-11 sm:h-8 sm:w-8`,_(r));e.setAttribute(`aria-label`,`Back to session actions`),e.onclick=n,c.prepend(e)}o.append(c);let l=L(`dl`,``);for(let[e,t,n]of i){let r=e===`Directory`||e===`Session`,i=L(`dd`,`min-w-0 flex items-start gap-2 text-neutral-700 ${r?`font-mono text-sm leading-6`:``}`,L(`span`,`min-w-0 flex-1 [overflow-wrap:anywhere]`,t));if(r){let n=ii(`min-h-11 min-w-11 sm:min-h-8 shrink-0 cursor-pointer rounded-lg px-2 py-1 text-[13px] font-sans text-neutral-500 hover:bg-neutral-100 focus-visible:outline-2`,()=>t);n.setAttribute(`aria-label`,`Copy ${e.toLowerCase()}`),i.append(n)}n&&i.firstElementChild?.append(L(`span`,`ml-2 inline-block font-sans text-[13px] leading-5 text-neutral-500`,n));let a=e===`Model`||e===`Created`;l.append(L(`div`,`grid gap-1 py-1.5 sm:grid-cols-[5.5rem_minmax(0,1fr)] sm:gap-3 ${a?`mt-2 border-t border-neutral-200 pt-2.5`:``}`,L(`dt`,`text-[15px] text-neutral-500`,e===`Session`?`Session ID`:e),i))}return o.append(l),ga(e,o)}async function cf(e,t,n){let r=L(`div`,`px-3 py-3 text-[15px] text-neutral-500`,`Loading models…`),i=L(`div`,`w-[min(24rem,calc(100vw-2rem))] min-w-0 max-sm:w-full`,r),a=r;n&&i.prepend(ff(e,n,`Close model picker`)),ga(e,i);let o=()=>a.isConnected&&!a.closest(`[inert]`),s=``,c=(n,r,o)=>{let c=JSON.stringify([n,r,o]);if(c===s)return;s=c;let l=Ld({models:n,current:t===Y.currentId()?X:null,thinkingLevel:r,thinkingLevels:o,onPick:(e,n)=>{z(),lf(t,e,n)},onThinkingPick:e=>void df(t,e)});a.replaceWith(l),a=l,ga(e,i)},l=t===Y.currentId()&&X?Gd.get(Kd(X)):void 0;Wd&&l&&Jd&&c(Wd,Jd,l);try{let[e,n]=await Promise.all([Ge(`/api/sessions/${t}/models`,`Could not load models`),Ge(`/api/sessions/${t}/thinking`,`Could not read the reasoning level`)]);if(Wd=e,t===Y.currentId()&&X&&Gd.set(Kd(X),n.levels),!o())return;c(e,n.level,n.levels)}catch(e){s?U(`error`,`model options are stale: ${String(e)}`):o()?(r.textContent=`Could not load models: ${String(e)}`,r.setAttribute(`role`,`alert`)):U(`error`,`model options failed: ${String(e)}`)}}async function lf(e,t,n){await uf(e,t)&&n&&await df(e,n)}async function uf(e,t){let n=X;e===Y.currentId()&&(X=t,tf());let r=await x(`/api/sessions/${e}/model`,t);if(!r.ok){let{error:t}=await r.json().catch(()=>({}));return e===Y.currentId()&&(X=n,tf()),U(`error`,`model change failed: ${t??r.status}`),!1}let{model:i}=await r.json();return e===Y.currentId()&&i&&(X=i,tf()),!0}async function df(e,t){let n=await x(`/api/sessions/${e}/thinking`,{level:t});if(!n.ok){U(`error`,`reasoning change failed: ${n.status}`);return}let{level:r}=await n.json();e===Y.currentId()&&(Jd=r,of())}function ff(e,t,n){let i=L(`button`,`icon-btn h-11 w-11`,_(r));i.setAttribute(`aria-label`,`Back to session actions`),i.onclick=()=>mf(e,t);let a=L(`button`,`icon-btn h-11 w-11`,_(_e));a.setAttribute(`aria-label`,n),a.onclick=z;let o=L(`span`,`min-w-0 flex-1 truncate text-sm font-medium`,t.title??Zr(t.cwd));return o.title=o.textContent??``,L(`div`,`flex items-center gap-2 border-b border-neutral-200 pb-2 mb-2`,i,o,a)}async function pf(e,t){let n=L(`p`,`px-3 py-2 text-[15px] text-neutral-500`,`Loading chats…`),r=L(`div`,`w-[min(24rem,calc(100vw-2rem))] min-w-0 max-sm:w-full`,ff(e,t,`Close chat picker`),L(`div`,`px-3 pb-1 text-sm font-medium text-neutral-500`,`Continue in a chat`),L(`p`,`px-3 pb-2 text-[13px] text-neutral-500`,`Chats the bot has seen. A chat appears here after its first message to the bot.`),n);ga(e,r);let i=await C(`/api/handoff/targets`,`Could not list chats`);if(!r.isConnected)return;if(!i.ok){n.textContent=i.error,n.setAttribute(`role`,`alert`);return}if(!i.value.targets.length){n.textContent=`No chats yet — message the bot once in Lark or Slack, then come back.`;return}let a=L(`p`,`hidden px-3 pt-1 text-[13px] text-red-600`);a.setAttribute(`role`,`alert`);let o=L(`div`,``);o.dataset.list=``;for(let e of i.value.targets){let n=L(`button`,`flex w-full min-h-10 cursor-pointer items-center gap-2 rounded-xl px-3 py-2 text-left transition-colors hover:bg-indigo-50 hover:text-indigo-700 active:bg-indigo-100`,L(`span`,`min-w-0 truncate`,`${e.platform[0].toUpperCase()}${e.platform.slice(1)} · ${e.kind===`dm`?`DM`:`group`} · ${e.name||e.chatId}`));n.onclick=async()=>{let n=await x(`/api/handoff`,{sessionId:t.id,platform:e.platform,chatId:e.chatId});if(n.ok)return z();a.textContent=(await n.json().catch(()=>({}))).error??`handoff failed: ${String(n.status)}`,a.classList.remove(`hidden`)},o.append(n)}n.replaceWith(o,a),o.querySelector(`button`)?.focus({preventScroll:!0})}function mf(e,t){let n=t.id===Y.currentId();va(e,[{label:`Rename…`,onSelect:()=>{z(),Uu(t)}},{label:`Session info`,onSelect:()=>sf(e,t,()=>mf(e,t))},{label:`New session here`,separatorBefore:!0,hint:Xr(t.cwd),onSelect:()=>{z(),Y.createSession(t.cwd)}},{label:`Browse files`,hint:n?Wc(Bd):``,onSelect:()=>{z(),Y.openFiles(n?void 0:t.cwd)}},{label:`Continue in Lark/Slack…`,...t.channel&&t.channel!==`web`?{hint:`answers in ${t.channel}`,disabled:!0}:{},onSelect:()=>void pf(e,t)},{label:`Model & reasoning…`,separatorBefore:!0,hint:n?X?.id??`…`:``,onSelect:()=>void cf(e,t.id,t)}],t.title??Zr(t.cwd))}var hf=`pier.theme`,gf=[`system`,`light`,`dark`],_f=window.matchMedia(`(prefers-color-scheme: dark)`),vf={system:se,light:he,dark:g},yf=()=>{let e=null;try{e=localStorage.getItem(hf)}catch{return`system`}return e===`light`||e===`dark`?e:`system`},bf=()=>{let e=yf();return e===`system`?_f.matches?`dark`:`light`:e};function xf(){let e=bf();document.documentElement.dataset.theme=e;let t=getComputedStyle(document.documentElement).getPropertyValue(`--workbench-canvas`).trim();I(`meta[name="theme-color"]`).setAttribute(`content`,t),window.dispatchEvent(new Event(`pier:theme`))}function Sf(){let e=I(`#theme-toggle`),t=()=>{let t=yf();e.title=`Theme: ${t}${t===`system`?` (${bf()})`:``}`,e.replaceChildren(_(vf[t])),e.setAttribute(`aria-label`,e.title),xf()};e.onclick=()=>{let e=gf[(gf.indexOf(yf())+1)%gf.length];try{e===`system`?localStorage.removeItem(hf):localStorage.setItem(hf,e)}catch{}t()},_f.addEventListener(`change`,t),t()}var Cf=`https://github.com/timqi/pier`,wf=[`text-neutral-400`,`hover:text-neutral-700`],Tf=[`rounded-full`,`bg-emerald-50`,`px-1.5`,`text-emerald-700`,`ring-1`,`ring-inset`,`ring-emerald-600/20`,`hover:bg-emerald-100`],Ef=18e5,Df=null,Of=I(`#version`);function kf(e){let t=Df?.available===!0&&Df.latest!==null;Of.textContent=`v${e}`,Of.title=t?`Pier ${Df?.latest} is out`:``,Of.classList.remove(...t?wf:Tf),Of.classList.add(...t?Tf:wf)}var Af=(e,t=`px-3 py-1 text-[12px] leading-snug text-neutral-500`)=>L(`p`,t,e);function jf(){let e=L(`div`,`flex w-72 flex-col gap-1 py-1`);if(!Df)return e.append(Af(`Checking the registry…`)),e;let{current:t,latest:n,available:r,canApply:i,problem:a}=Df,o=L(`span`,``,``),s=(e,t)=>Ai(o,e?`failed`:`idle`,t),c=L(`div`,`flex items-center gap-2 px-3 py-1.5`);if(e.append(Af(r?`Pier ${n} is out`:`Pier ${t}`,`px-3 py-1 text-[12.5px] font-medium text-neutral-700`),Af(r?`You are running ${t}.`:n===null?`The registry could not be reached, so this may not be the latest.`:`This is the latest release.`)),a&&e.append(Af(a,`mx-3 my-1 rounded-md bg-red-50 px-2 py-1.5 text-[11.5px] leading-snug text-red-700`)),r&&i&&!a){let e=ui(`Update now`,!0);e.onclick=()=>void(async()=>{e.disabled=!0,s(!1,`starting the updater…`);let t=await x(`/api/update`,{});if(!t.ok)return e.disabled=!1,s(!0,await S(t,`Could not update`));let{draining:n}=await t.json();s(!1,n?`Waiting for running work to finish — Pier then installs and restarts.`:`Installing — Pier restarts once it is on disk, and this page reconnects on its own.`)})(),c.append(e)}c.append(Object.assign(L(`a`,`btn text-[12.5px] no-underline`,`Source`),{href:r?`${Cf}/releases`:Cf,target:`_blank`,rel:`noreferrer`,title:`Pier is free software (AGPL-3.0)`})),e.append(c,L(`div`,`px-3`,o)),r&&!i&&!a&&e.append(Af(`No service manager owns this Pier, so it cannot restart itself — update it with: pier update`));let l=Oi(`Update automatically`,i?`Installs a new release once nothing is running — no turn in flight, no task run.`:`Needs the systemd service (pier service install); nothing here can restart Pier.`,Df.autoUpdate,e=>void(async()=>{Df&&(Df.autoUpdate=e);let t=await x(`/api/settings`,{autoUpdate:e},`PUT`);t.ok||(Df&&(Df.autoUpdate=!e),u&&(u.checked=!e),s(!0,await S(t,`Could not save`)))})()),u=l.querySelector(`input`);return u&&(u.disabled=!i),e.append(L(`div`,`mt-1 border-t border-neutral-200 px-3 pb-1 pt-2`,l)),e}async function Mf(e){let t=await C(`/api/update`,`Update check failed`);t.ok&&kf((Df=t.value).current||e)}function Nf(e){kf(e),Of.onclick=e=>{e.preventDefault(),ga(Of,jf())};let t=()=>void Mf(e);t(),setInterval(t,Ef)}var Z,Pf=I(`#chat-header`),Ff=I(`#chat-title`),If=[Pf,H,I(`#composer`)],Lf=()=>Wf===null,Rf,zf,Bf,Vf=new Map,Hf=new Map,Uf=new Map,Wf=null,Gf=0,Kf=[`files`],qf=new Map,Jf={tasks:`Tasks`,runs:`Runs`,activity:`Activity`,boards:`Boards`,settings:`Settings`,files:`Files`},Yf=[`tasks`,`runs`,`activity`],Xf=`Automation`,Zf=I(`#automation-view`),Qf=I(`#automation-tabs`),$f=e=>Yf.includes(e)?`tasks`:e;function ep(e,t){let n=e!==null&&Yf.includes(e);if(Zf.classList.toggle(`hidden`,!n),Zf.classList.toggle(`flex`,n),!n)return;let r=[];if(e===`tasks`&&!t){let e=ui(`New task`,!0);e.classList.add(`ml-auto`),e.disabled=!Rf,e.onclick=()=>Rf?.create(),r.push(e)}Qf.replaceChildren(fi(Xf),...Yf.map(t=>hi(Jf[t],t===e,()=>ap(t))),...r)}var tp=e=>Rf?.refresh(e),np=()=>zf?.refresh(),rp=()=>Bf?.refresh();function ip(){Wf?mu(Yf.includes(Wf)?Xf:Jf[Wf],!1):mu(Ff.textContent??``,Z.currentSession()!==void 0)}function ap(e,t,n){if(Kf.includes(e)){let t=_p();t&&(t.kind!==`console`||t.name!==e)&&qf.set(e,t)}yp({kind:`console`,name:e,arg:t,query:n}),pu(),Wf=e;for(let e of If)e.classList.add(`hidden`);Cl();for(let[t,n]of Vf)t!==e&&n.hide();for(let[t,n]of Uf)n.classList.toggle(`bg-indigo-50`,t===$f(e));ep(e,t),ip(),op(e,t,n,++Gf)}async function op(e,t,n,r){let i=Vf.get(e);if(!i){let t=Hf.get(e);if(!t){let n=I(`#${e}-view`);t=Sp[e](n).catch(t=>(console.warn(`${e} view failed to load`,t),ei(n,()=>n.replaceChildren(L(`p`,`p-4 text-[13px] text-red-600`,`Could not load ${Jf[e]} — reload the page.`))))),Hf.set(e,t)}i=await t,Vf.set(e,i),Hf.delete(e)}Wf===e&&r===Gf&&(i.show(t,n),e===`tasks`&&ep(e,t))}var sp=e=>ap(`tasks`,e),cp=(e={},t)=>ap(`runs`,t,new URLSearchParams(e).toString()),lp=e=>cp({},e),up=(e,t)=>ap(`files`,e,t?new URLSearchParams({select:t}).toString():void 0),dp=(e,t)=>{Wf===e?pp(e):ap(e,t)},fp=e=>dp(`files`,e);function pp(e){let t=Z.currentId(),n=qf.get(e)??(t?{kind:`session`,id:t}:null);qf.delete(e),n?yp(n):(history.replaceState(null,``,`#/`),mp())}function mp(){if(Wf){Wf=null;for(let e of Vf.values())e.hide();for(let e of Uf.values())e.classList.remove(`bg-indigo-50`);ep(null);for(let e of If)e.classList.remove(`hidden`);Cl(),ip(),Z.maybeAckRead()}}var hp=e=>e.kind===`session`?`#/session/${encodeURIComponent(e.id)}`:`#/${e.name}${e.arg?`/${encodeURIComponent(e.arg)}`:``}${e.query?`?${e.query}`:``}`,gp={config:`files`,channels:`channels`,providers:`models`};function _p(){let e=location.hash.replace(/^#\/?/,``),t=e.indexOf(`?`),[n=``,r]=(t<0?e:e.slice(0,t)).split(`/`),i=t<0?void 0:e.slice(t+1)||void 0,a;try{a=r?decodeURIComponent(r):void 0}catch{return null}return gp[n]?{kind:`console`,name:`settings`,arg:gp[n]}:Object.hasOwn(Jf,n)?{kind:`console`,name:n,arg:a,query:i}:n===`session`&&a?{kind:`session`,id:a}:null}var vp=!1;function yp(e,t=!1){if(vp)return;let n=hp(e);location.hash!==n&&(t?history.replaceState(null,``,n):location.hash=n)}var bp=e=>yp({kind:`session`,id:e});function xp(){let e=_p(),t=Z.sessions(),n=Z.currentId(),r=e?.kind===`session`?e.id:null,{top:i,rest:a}=Pu(t),o=r??n??(i[0]??a[0])?.id??null;vp=!0;try{o&&o!==n&&Z.select(o),e?.kind===`console`?ap(e.name,e.arg,e.query):mp(),o||tf()}finally{vp=!1}e?.kind!==`console`&&o&&yp({kind:`session`,id:o},!0)}var Sp={tasks:async e=>Rf=(await Wi(async()=>{let{createTasksView:e}=await import(`./tasks-CReIwEMw.js`);return{createTasksView:e}},__vite__mapDeps([0,1]))).createTasksView(e,()=>Z.sessions().map(({id:e,cwd:t,title:n})=>({id:e,cwd:t,title:n})),Z.loadSessions,Z.select,()=>Z.currentId(),cp,sp),runs:async e=>zf=(await Wi(async()=>{let{createRunsView:e}=await import(`./runs-C0GaHPSU.js`);return{createRunsView:e}},__vite__mapDeps([2,1]))).createRunsView(e,Z.select,cp,sp),activity:async e=>Bf=(await Wi(async()=>{let{createActivityView:e}=await import(`./activity-DR5gTwpG.js`);return{createActivityView:e}},[])).createActivityView(e,Z.select,lp),boards:async e=>(await Wi(async()=>{let{createBoardsView:e}=await import(`./boards-DBO30B54.js`);return{createBoardsView:e}},[])).createBoardsView(e,Z.select),files:async e=>(await Wi(async()=>{let{createExplorerView:e}=await import(`./explorer-ZeVls41v.js`);return{createExplorerView:e}},[])).createExplorerView(e,()=>Z.currentSession(),e=>ap(`files`,e),()=>pp(`files`)),settings:async e=>(await Wi(async()=>{let{createSettingsView:e}=await import(`./settings-avLEQHdY.js`);return{createSettingsView:e}},[])).createSettingsView(e,()=>Ve(Z.sessions()),e=>ap(`settings`,e),up)};function Cp(e){Z=e;for(let e of[`tasks`,`boards`,`settings`]){let t=I(`#open-${e}`);Uf.set(e,t),t.onclick=()=>ap(e)}let t=I(`#console-section`);t.open=localStorage.getItem(`pier.consoleCollapsed`)!==`1`,t.ontoggle=()=>localStorage.setItem(`pier.consoleCollapsed`,t.open?`0`:`1`),window.onhashchange=xp}var Q=[],wp=null,Tp=0,Ep=0,Dp=!1,$=null,Op=`idle`,kp=null,Ap=0,jp=!1,Mp=!1;async function Np(e){let t=++Tp;++Ep,Dp=!1,mp(),pu(),$=null,kp?.close(),kp=null,Tc(),wl([]),Xd(),ef(e),Ec(!0),Mp=!0,Sl();let n=await x(`/api/sessions`,{cwd:e});if(t!==Tp)return;if(Mp=!1,!n.ok){Ec(!1),ef(null),Sl(),U(`error`,`session create failed: ${n.status}`);return}let{id:r}=await n.json();t===Tp&&(Q.unshift({id:r,cwd:e,createdAt:Date.now(),state:`idle`,unread:!1,channel:`web`,activeRuns:0}),await Wp(r),$===r&&vl())}function Pp(e){Q=e.map(e=>({...e,title:ze(e.title)})),Q.sort((e,t)=>t.createdAt-e.createdAt),Xu(),tf(),Ip()}var Fp=He(async()=>{Pp(await Ge(`/api/sessions`,`Could not load sessions`))});function Ip(){if(document.hidden||!document.hasFocus()||!Lf())return;let e=Q.find(e=>e.id===$);e?.unread&&(e.unread=!1,Xu(),fetch(`/api/sessions/${e.id}/read`,{method:`POST`}))}function Lp(){return Q.find(e=>e.id===$)??(wp&&wp.id===$?wp:void 0)}async function Rp(e){let t=await C(`/api/sessions/${e}`,`failed to load session`);$!==e||!t.ok||(wp={...t.value,title:ze(t.value.title)},tf())}function zp(e,t){let n=Q.find(t=>t.id===e);!n||n.title||!t.trim()||(n.title=t.trim().slice(0,80),Xu(),tf())}function Bp(e){Op=e;let t=Q.find(e=>e.id===$);t&&(t.state=e),Xu(),tf(),Sl(),e===`idle`&&Fp()}function Vp(e){if(!(e.sessionId!==$||e.seq<=Ap))switch(Ap=e.seq,e.type){case`turn-start`:jp=!0;break;case`system-input`:xc(),qs(e.text,e.origin);break;case`task-status`:Go(e.run);break;case`user-message`:{let t=Ie(e.text).text;if(zp(e.sessionId,t),yl(t))break;xc(),U(`user`,e.text,!1,e.ts),Ns();break}case`text-start`:xc();break;case`text-delta`:bc(e.text);break;case`thinking-delta`:xc(),ys(e.ts,e.text);break;case`tool-start`:xc(),_s(e.ts,e.toolCallId,e.toolName,e.args);break;case`tool-end`:vs(e.toolCallId,e.isError,e.output);break;case`turn-end`:jp=!1,Cc(e.text,e.meta),e.meta&&Qd(e.meta);break;case`queue-state`:Tl(e.steering,e.followUp);break;case`queue-recovery`:wl(e.batches,e.uncertain);break;case`context-compacted`:xc(),U(`system`,`Context compacted — ${Se(e.before)} → ${Se(e.after)}`,!1,e.ts),Ns();break;case`error`:hs(),U(`error`,e.message);break;case`state`:e.state===`idle`&&jp&&(jp=!1,wc()),e.state===`idle`&&Tl([],[]),Bp(e.state)}}function Hp(){let e=new EventSource(`/api/events`);e.onopen=()=>{Fp(),tp(),np(),rp()},e.onerror=()=>zc(e,`Workspace`),e.onmessage=e=>{let t=JSON.parse(e.data);if(t.type===`sessions-changed`){Fp();return}if(t.type===`tasks-changed`||t.type===`task-run-changed`||t.type===`task-message-changed`||t.type===`task-group-changed`){tp(t.type===`task-run-changed`?t.taskId:void 0),np(),rp(),t.type===`task-run-changed`&&Fp();return}if(rp(),t.sessionId===$)return;let n=Q.find(e=>e.id===t.sessionId);n&&(n.state=t.state,Xu())}}function Up(e,t,n){kp?.close();let r=new EventSource(`/api/sessions/${e}/events?after=${t}`),i=()=>kp===r&&$===e&&n===Ep;r.onmessage=e=>{i()&&Vp(JSON.parse(e.data))},r.addEventListener(`reset`,()=>{i()&&Gp(e)}),r.onerror=()=>{i()&&zc(r,`Session`)},kp=r}async function Wp(e){mp(),pu(),bp(e),!(e===$&&(kp||Dp))&&(++Tp,++Ep,Mp=!1,Fl(),$=e,wp=null,Q.some(t=>t.id===e)||Rp(e),Op=Q.find(t=>t.id===e)?.state??`idle`,Il(e),Xu(),tf(),Ip(),await Gp(e))}async function Gp(e){if($!==e)return;let t=++Ep;kp?.close(),kp=null,Dp=!0,Tc(),Tl([],[]),wl([]),Xd(),jp=!1,xl(),Ap=0,Ec(!0);let n=await C(`/api/sessions/${e}/history`,`failed to load session`);if($!==e||t!==Ep)return;if(Dp=!1,!n.ok){Ec(!1),U(`error`,n.error);return}let r=n.value;Dc(r.turns,r.state,r.backgroundRuns),Ap=r.lastSeq,jp=r.state===`streaming`,Bp(r.state),Tl(r.queue.steering,r.queue.followUp),wl(r.queueRecovery,r.queueUncertain);let i=r.turns.reduce((e,t)=>t.meta?.completedAt??e,null);Zd(r.model,r.context,r.thinkingLevel,i),Up(e,`${r.epoch}:${r.lastSeq}`,t)}Fc(),ve(),Rc(),Sf();var Kp=async e=>{$===e&&await Gp(e)};Ts({sessionId:()=>$,sessionCwd:()=>Lp()?.cwd??null,sessionChannel:()=>Lp()?.channel??null,sessionState:()=>Op,select:e=>void Wp(e),showRun:lp,send:(e,t)=>void zl(e,t),ownTurn:e=>{bl(e),Bp(`streaming`)},reload:Kp}),Hl({sessionId:()=>$,starting:()=>Mp,sessionState:()=>Op,chatVisible:Lf,setState:Bp,reload:Kp}),Au({sessionMenu:e=>{let t=Lp();t&&mf(e,t)},sessionInfo:e=>{let t=Lp();t&&sf(e,t)}}),Qu({sessions:()=>Q,currentId:()=>$,select:e=>void Wp(e),sessionMenu:mf,createSession:Np,onTitleChanged:tf}),jd({sessions:()=>Q,loadSessions:Fp,currentId:()=>$,select:Wp,createSession:Np,openConsole:ap}),zd({currentId:()=>$,currentSession:Lp,createSession:e=>void Np(e),syncBar:ip,openFiles:up,toggleFiles:fp}),Cp({sessions:()=>Q,loadSessions:Fp,currentId:()=>$,currentSession:Lp,select:e=>void Wp(e),maybeAckRead:Ip}),Nf(`0.1.7`),ru(),document.addEventListener(`gesturestart`,e=>e.preventDefault()),document.addEventListener(`visibilitychange`,Ip),window.addEventListener(`focus`,Ip),Hp(),Fp().then(xp);export{Ge as $,Ti as A,Pi as B,ji as C,Mi as D,bi as E,Ai as F,li as G,Xr as H,wi as I,Jr as J,$r as K,Di as L,hi as M,mi as N,xi as O,Ei as P,C as Q,Oi as R,ki as S,ui as T,ei as U,Yr as V,ii as W,He as X,Zr as Y,S as Z,Si as _,Qc as a,_ as at,gi as b,ka as c,h as ct,va as d,o as dt,We as et,ga as f,a as ft,yi as g,Xi as h,cu as i,xe as it,fi as j,Ni as k,Ea as l,l as lt,$i as m,Rd as n,x as nt,jo as o,_e as ot,ea as p,L as q,Ld as r,ze as rt,Mo as s,ue as st,sf as t,Ke as tt,z as u,s as ut,Ci as v,di as w,_i as x,vi as y,pi as z};
|
|
Binary file
|
|
Binary file
|