@huynle/hub 0.10.0 → 0.10.1
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/CHANGELOG.md +24 -0
- package/README.md +3 -1
- package/package.json +1 -1
- package/packages/claude-code/package.json +1 -1
- package/packages/cli/dist/hub-cli.js +9 -7
- package/packages/cli/package.json +1 -1
- package/packages/codex/package.json +1 -1
- package/packages/node/package.json +1 -1
- package/packages/preset/package.json +1 -1
- package/packages/protocol/package.json +1 -1
- package/packages/protocol/src/index.ts +13 -1
- package/packages/runtime-openshell/package.json +1 -1
- package/packages/runtime-sdk/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/packages/spoke-sdk/package.json +1 -1
- package/src/central/http.ts +33 -4
- package/src/spoke/spoke.ts +19 -0
- package/web/dist/assets/{ArtifactPage-Bz992ZX6.js → ArtifactPage-CsPjam8D.js} +1 -1
- package/web/dist/assets/{ArtifactPane-BJZNixJC.js → ArtifactPane-B9weO8L6.js} +1 -1
- package/web/dist/assets/{ArtifactWorkbench-Dti3VP07.js → ArtifactWorkbench-DzKhMs3l.js} +1 -1
- package/web/dist/assets/{Diagram-B4HdUxw0.js → Diagram-CuRIffka.js} +1 -1
- package/web/dist/assets/{Library-CpzD2HDW.js → Library-rv5DGtrm.js} +2 -2
- package/web/dist/assets/{ProfilesDestination-DlQeogea.js → ProfilesDestination-DUuQ9jmd.js} +1 -1
- package/web/dist/assets/{TeamsPage-4xdWCaI-.js → TeamsPage-D_17MkvN.js} +1 -1
- package/web/dist/assets/{Watchtower-CpQdIRns.js → Watchtower-DlrNOJ7X.js} +2 -2
- package/web/dist/assets/{index-BS6lA6fN.js → index-bX8B6NLo.js} +6 -6
- package/web/dist/assets/{index-BC0O1gfR.css → index-rW6LKQj1.css} +1 -1
- package/web/dist/assets/{live-CVUFIdUX.js → live-BGLA-peO.js} +1 -1
- package/web/dist/assets/{renderer2d-IaJiloPi.js → renderer2d-DyANQ1WS.js} +1 -1
- package/web/dist/assets/{renderer3d-ZiD1uKGW.js → renderer3d-vYYKFAJq.js} +1 -1
- package/web/dist/assets/{safe-area-C7IAlkgY.js → safe-area-B2Bk__FK.js} +1 -1
- package/web/dist/index.html +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Diagram-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Diagram-CuRIffka.js","assets/ui-CFB4wQfF.js","assets/MediaImage-Ch3ryIdR.js","assets/preload-helper-BLdHbfdN.js","assets/Lightbox-BlbivCkd.js","assets/Lightbox-C8KNKwOA.css","assets/Diagram-7y8kg3og.css","assets/ArtifactPane-B9weO8L6.js","assets/ArtifactWorkbench-DzKhMs3l.js","assets/toast-CXTwTvDw.js","assets/artifacts-But87Jfo.js","assets/pane-layout-BW0RdX5a.js","assets/source-C-De8L3s.js","assets/ArtifactWorkbench-9eTj1CeW.css","assets/Library-rv5DGtrm.js","assets/Library-DYsFj_5c.css","assets/TeamsPage-D_17MkvN.js","assets/plural-Bspvoqfq.js","assets/live-BGLA-peO.js","assets/live-BUofsQpz.css","assets/Watchtower-DlrNOJ7X.js","assets/Watchtower-RphjcL0_.css","assets/ProfilesDestination-DUuQ9jmd.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,a as O,b as k,c as A,d as j,et as M,f as N,g as ee,h as P,i as F,j as te,k as I,l as ne,m as re,n as ie,nt as ae,o as oe,p as se,q as ce,r as L,rt as le,s as ue,t as de,tt as fe,u as R,v as pe,w as me,x as z,y as B,z as he}from"./ui-CFB4wQfF.js";import{$ as ge,A as _e,At as ve,B as V,Bt as ye,C as be,Ct as xe,D as Se,Dt as Ce,E as we,Et as Te,F as Ee,Ft as De,G as H,Gt as Oe,H as U,Ht as ke,It as Ae,J as je,Jt as Me,K as Ne,Kt as Pe,L as Fe,Lt as Ie,M as Le,Mt as Re,N as ze,Nt as Be,O as Ve,Ot as He,P as Ue,Pt as We,Q as Ge,R as W,Rt as Ke,S as qe,St as Je,T as Ye,Tt as Xe,U as G,Ut as Ze,V as K,Vt as Qe,W as $e,Wt as et,X as tt,Xt as nt,Y as rt,Yt as it,Z as at,_ as ot,_t as st,at as ct,b as lt,bt as ut,c as dt,ct as ft,d as pt,dt as mt,et as ht,f as gt,ft as _t,g as vt,gt as yt,h as bt,ht as xt,i as St,it as Ct,j as wt,jt as Tt,k as Et,kt as Dt,l as Ot,lt as kt,m as At,mt as jt,n as Mt,nt as Nt,o as Pt,ot as Ft,p as It,pt as Lt,q as Rt,qt as zt,r as q,rt as Bt,s as Vt,st as Ht,t as Ut,tt as Wt,u as Gt,ut as Kt,v as qt,vt as Jt,w as Yt,wt as Xt,x as Zt,xt as Qt,y as $t,yt as en,z as tn,zt as nn}from"./toast-CXTwTvDw.js";import{c as rn,d as an,f as on,g as sn,h as cn,i as ln,l as un,m as dn,n as fn,o as pn,r as mn,s as hn,t as gn}from"./pane-layout-BW0RdX5a.js";import{t as _n}from"./plural-Bspvoqfq.js";import{a as vn,c as yn,i as bn,l as xn,o as Sn,r as Cn,s as wn,t as Tn,u as En}from"./artifacts-But87Jfo.js";import{_ as Dn,a as On,b as kn,d as An,f as jn,g as Mn,h as Nn,m as Pn,n as Fn,o as In,p as Ln,r as Rn,t as zn,x as Bn,y as Vn}from"./MediaImage-Ch3ryIdR.js";import{t as Hn}from"./preload-helper-BLdHbfdN.js";(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 Un=e=>e==null?``:String(e).trim(),Wn=Object.freeze([[`role`,`Admins first`],[`email`,`Email`],[`lastSeen`,`Last seen`]]),Gn=Object.freeze([[`all`,`All`],[`admins`,`Admins`],[`active`,`Active`],[`disabled`,`Disabled`]]),Kn=Object.freeze({signin:`Signed in`,"signin.denied":`Sign-in refused`,"device.pair":`Paired a device`,"device.revoke":`Revoked a device`,"machine.approve":`Approved a machine`,"machine.deny":`Denied a machine`,"machine.revoke":`Revoked a machine`,"user.role":`Changed a role`,"user.disable":`Disabled a user`,"user.enable":`Enabled a user`,"speech.default":`Changed the server speech default`,"migrate.local":`Moved the hub owner's machines and devices to the first admin`,"app-client.create":`Registered an app client`,"app-client.update":`Changed an app client`,"app-client.secret":`Rotated an app client's secret`,"app-client.delete":`Deleted an app client`,"connect.authorize":`An app asked to connect`,"connect.consent":`Connected an app`,"connect.deny":`Denied an app`,"connect.token":`Issued a connected app's tokens`,"connect.reuse":`Revoked a connected app (token reuse)`,"connect.revoke":`Revoked a connected app`});function qn(e){return e?.user?.role===`admin`}function Jn(e){let t=e?.user,n=e?.auth===`oidc`?`oidc`:`pairing`,r=qn(e);if(n!==`oidc`)return{mode:n,admin:r,title:`This hub`,initial:`H`};let i=Un(t?.name),a=Un(t?.email),o=i||a||`Signed in`;return{mode:n,admin:r,title:o,...i&&a?{subtitle:a}:{},initial:(o.match(/[\p{L}\p{N}]/u)?.[0]??`?`).toUpperCase(),...r?{badge:`Admin`}:{}}}var Yn=Object.freeze([[`users`,`Users`],[`machines`,`Machines`],[`approvals`,`Approvals`],[`audit`,`Audit log`]]);function Xn(e){return qn(e)?Yn.filter(([t])=>t!==`users`||e?.auth===`oidc`):[]}function Zn(e,t){return qn(e)&&t?.scope===`user`?[`user`,`default`]:[`user`]}function Qn(e){return e&&e.startsWith(`/`)&&!e.startsWith(`//`)&&!e.includes(`\\`)?e:`/`}function $n(e,t){if(e?.mode===`oidc`&&typeof e.signIn==`string`&&e.signIn)return`${e.signIn}?next=${encodeURIComponent(Qn(t))}`}function er(e){let t=e?.auth===`oidc`?Un(e?.user?.email):``;return t?`This machine will belong to you (${t}).`:`This machine will belong to you.`}var tr={stt:[`provider`,`model`,`baseURL`,`language`],tts:[`provider`,`model`,`voice`,`baseURL`,`speed`]};function nr(e){let t=e;if(t?.scope!==`user`)return;let n=t.default??{},r=t.user&&typeof t.user==`object`?t.user:void 0,i={own:{stt:0,tts:0}};for(let e of[`stt`,`tts`]){let a=t[e]??{},o=n[e]??{},s=r?.[e]??{},c={};for(let t of tr[e]){let n=r?s[t]===void 0||s[t]===null:Un(a[t])===Un(o[t]),l=Un(o[t]);c[t]=n?{inherited:n,note:l?`Using server default: ${l}`:`Server default: not set`}:{inherited:n},n||i.own[e]++}let l=r?!!s.apiKey?.set:a.apiKey?.source===`user`;c.apiKey=l?{inherited:!1}:{inherited:!0,note:o.apiKey?.set===!1?`Key: server default (none set)`:`Key: server default`},l&&i.own[e]++,i[e]=c}return i}function rr(e){return{[e]:Object.fromEntries([...tr[e],`apiKey`].map(e=>[e,null]))}}function ir(e){let t=Un(e);if(!t)return`Unknown action`;if(Kn[t])return Kn[t];let n=t.replace(/[._-]+/g,` `).trim().toLowerCase();return n.charAt(0).toUpperCase()+n.slice(1)}function ar(e,t=[]){let n=new Map(t.map(e=>[e.id,Un(e.email)||Un(e.name)||e.id])),r=e=>e===`system`?`System`:n.get(e)??e;return[...e??[]].sort((e,t)=>t.at-e.at).map(e=>({at:e.at,actor:r(e.actor),action:ir(e.action),target:e.target===void 0?void 0:n.get(e.target)??e.target,detail:e.detail}))}var or=e=>(Un(e.email)||Un(e.name)||e.id).toLowerCase();function sr(e,{query:t=``,filter:n=`all`,sort:r=`role`}={}){let i=Un(t).toLowerCase(),a=e=>(!i||`${Un(e.email)} ${Un(e.name)}`.toLowerCase().includes(i))&&(n===`admins`?e.role===`admin`:n===`disabled`?!!e.disabled:n!==`active`||!e.disabled),o=(e,t)=>or(e).localeCompare(or(t)),s=r===`lastSeen`?(e,t)=>(t.lastSeen??0)-(e.lastSeen??0)||o(e,t):r===`email`?o:(e,t)=>Number(!!e.disabled)-Number(!!t.disabled)||Number(t.role===`admin`)-Number(e.role===`admin`)||o(e,t);return(e??[]).filter(a).sort(s)}function cr(e,t,n){let r=Un(e.email)||Un(e.name)||e.id,i=e.id===n,a=(t??[]).filter(e=>e.role===`admin`&&!e.disabled).length,o=e.role===`admin`&&!e.disabled&&a<=1;return[e.role===`admin`?{label:`Remove admin`,change:{role:`user`},danger:!0,...o?{lastAdmin:!0}:{},confirm:i?`Remove your own admin role? You will lose access to the admin screens.`:`Remove admin from ${r}?`}:{label:`Make admin`,change:{role:`admin`},confirm:`Make ${r} an admin? Admins manage users, machines and the server speech default.`},e.disabled?{label:`Enable`,change:{disabled:!1},confirm:`Enable ${r}?`}:{label:`Disable`,change:{disabled:!0},danger:!0,...o?{lastAdmin:!0}:{},confirm:i?`Disable your own account? This device is signed out.`:`Disable ${r}? Their phones and machines are disconnected until you enable them again.`}]}function lr(e){let t=Un(e?.message);return t&&!/^HTTP \d+$/.test(t)?t:e?.status===403?`Only admins can do that.`:`The server refused the change (HTTP ${e?.status??`?`}).`}var ur=Symbol(`store-raw`),dr=Symbol(`store-node`),fr=Symbol(`store-has`),pr=Symbol(`store-self`);function mr(e){let t=e[te];if(!t&&(Object.defineProperty(e,te,{value:t=new Proxy(e,Sr)}),!Array.isArray(e))){let n=Object.keys(e),r=Object.getOwnPropertyDescriptors(e),i=Object.getPrototypeOf(e),a=i!==null&&typeof e==`object`&&!!e&&!Array.isArray(e)&&i!==Object.prototype;if(a){let e=Object.getOwnPropertyDescriptors(i);n.push(...Object.keys(e)),Object.assign(r,e)}for(let i=0,o=n.length;i<o;i++){let o=n[i];a&&o===`constructor`||r[o].get&&Object.defineProperty(e,o,{configurable:!0,enumerable:r[o].enumerable,get:r[o].get.bind(t)})}}return t}function hr(e){let t;return typeof e==`object`&&!!e&&(e[te]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function gr(e,t=new Set){let n,r,i,a;if(n=e!=null&&e[ur])return n;if(!hr(e)||t.has(e))return e;if(Array.isArray(e)){Object.isFrozen(e)?e=e.slice(0):t.add(e);for(let n=0,a=e.length;n<a;n++)i=e[n],(r=gr(i,t))!==i&&(e[n]=r)}else{Object.isFrozen(e)?e=Object.assign({},e):t.add(e);let n=Object.keys(e),o=Object.getOwnPropertyDescriptors(e);for(let s=0,c=n.length;s<c;s++)a=n[s],!o[a].get&&(i=e[a],(r=gr(i,t))!==i&&(e[a]=r))}return e}function _r(e,t){let n=e[t];return n||Object.defineProperty(e,t,{value:n=Object.create(null)}),n}function vr(e,t,n){if(e[t])return e[t];let[r,i]=u(n,{equals:!1,internal:!0});return r.$=i,e[t]=r}function yr(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===te||t===dr||(delete n.value,delete n.writable,n.get=()=>e[te][t]),n}function br(e){w()&&vr(_r(e,dr),pr)()}function xr(e){return br(e),Reflect.ownKeys(e)}var Sr={get(e,t,n){if(t===ur)return e;if(t===te)return n;if(t===p)return br(e),n;let r=_r(e,dr),i=r[t],a=i?i():e[t];if(t===dr||t===fr||t===`__proto__`)return a;if(!i){let n=Object.getOwnPropertyDescriptor(e,t);w()&&(typeof a!=`function`||Object.prototype.hasOwnProperty.call(e,t))&&!(n&&n.get)&&(a=vr(r,t,a)())}return hr(a)?mr(a):a},has(e,t){return t===ur||t===te||t===p||t===dr||t===fr||t===`__proto__`||(w()&&vr(_r(e,fr),t)(),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:xr,getOwnPropertyDescriptor:yr};function Cr(e,t,n,r=!1){if(t===`__proto__`||!r&&e[t]===n)return;let i=e[t],a=e.length;n===void 0?(delete e[t],e[fr]&&e[fr][t]&&i!==void 0&&e[fr][t].$()):(e[t]=n,e[fr]&&e[fr][t]&&i===void 0&&e[fr][t].$());let o=_r(e,dr),s;if((s=vr(o,t,i))&&s.$(()=>n),Array.isArray(e)&&e.length!==a){for(let t=e.length;t<a;t++)(s=o[t])&&s.$();(s=vr(o,`length`,a))&&s.$(e.length)}(s=o[pr])&&s.$()}function wr(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r+=1){let i=n[r];Tr(i)||Cr(e,i,t[i])}}function Tr(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Er(e,t){if(typeof t==`function`&&(t=t(e)),t=gr(t),Array.isArray(t)){if(e===t)return;let n=0,r=t.length;for(;n<r;n++){let r=t[n];e[n]!==r&&Cr(e,n,r)}Cr(e,`length`,r)}else wr(e,t)}function Dr(e,t,n=[]){let r,i=e;if(t.length>1){r=t.shift();let a=typeof r,o=Array.isArray(e);if(a===`string`&&(r===`__proto__`||t.length>1&&Tr(r)))return;if(Array.isArray(r)){for(let i=0;i<r.length;i++)Dr(e,[r[i]].concat(t),n);return}if(o&&a===`function`){for(let i=0;i<e.length;i++)r(e[i],i)&&Dr(e,[i].concat(t),n);return}if(o&&a===`object`){let{from:i=0,to:a=e.length-1,by:o=1}=r;for(let r=i;r<=a;r+=o)Dr(e,[r].concat(t),n);return}if(t.length>1){Dr(e[r],t,[r].concat(n));return}i=e[r],n=[r].concat(n)}let a=t[0];typeof a==`function`&&(a=a(i,n),a===i)||(r!==void 0||a!=null)&&(a=gr(a),r===void 0||hr(i)&&hr(a)&&!Array.isArray(a)?wr(i,a):Cr(e,r,a))}function Or(...[e,t]){let n=gr(e||{}),r=Array.isArray(n),i=mr(n);function a(...e){he(()=>{r&&e.length===1?Er(n,e[0]):Dr(n,e)})}return[i,a]}var kr=Symbol(`store-root`);function Ar(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function jr(e,t,n,r,i){if(Ar(n))return;let a=t[n];if(e===a)return;let o=Array.isArray(e);if(n!==kr&&(!hr(e)||!hr(a)||o!==Array.isArray(a)||i&&e[i]!==a[i])){Cr(t,n,e);return}if(o){if(e.length&&a.length&&(!r||i&&e[0]&&e[0][i]!=null)){let t,n,o,s,c,l,u,d;for(o=0,s=Math.min(a.length,e.length);o<s&&(a[o]===e[o]||i&&a[o]&&e[o]&&a[o][i]&&a[o][i]===e[o][i]);o++)jr(e[o],a,o,r,i);let f=Array(e.length),p=new Map;for(s=a.length-1,c=e.length-1;s>=o&&c>=o&&(a[s]===e[c]||i&&a[s]&&e[c]&&a[s][i]&&a[s][i]===e[c][i]);s--,c--)f[c]=a[s];if(o>c||o>s){for(n=o;n<=c;n++)Cr(a,n,e[n]);for(;n<e.length;n++)Cr(a,n,f[n]),jr(e[n],a,n,r,i);a.length>e.length&&Cr(a,`length`,e.length);return}for(u=Array(c+1),n=c;n>=o;n--)l=e[n],d=i&&l?l[i]:l,t=p.get(d),u[n]=t===void 0?-1:t,p.set(d,n);for(t=o;t<=s;t++)l=a[t],d=i&&l?l[i]:l,n=p.get(d),n!==void 0&&n!==-1&&(f[n]=a[t],n=u[n],p.set(d,n));for(n=o;n<e.length;n++)n in f?(Cr(a,n,f[n]),jr(e[n],a,n,r,i)):Cr(a,n,e[n])}else for(let t=0,n=e.length;t<n;t++)jr(e[t],a,t,r,i);a.length>e.length&&Cr(a,`length`,e.length);return}let s=Object.keys(e);for(let t=0,n=s.length;t<n;t++)Ar(s[t])||jr(e[s[t]],a,s[t],r,i);let c=Object.keys(a);for(let t=0,n=c.length;t<n;t++)e[c[t]]===void 0&&Cr(a,c[t],void 0)}function Mr(e,t={}){let{merge:n,key:r=`id`}=t,i=gr(e);return e=>{if(!hr(e)||!hr(i))return i;let t=jr(i,{[kr]:e},kr,n,r);return t===void 0?e:t}}var Nr=new WeakMap,Pr={get(e,t){if(t===ur)return e;let n=e[t];if(t===te||t===p||t===dr||t===fr||t===`__proto__`)return n;let r;return hr(n)?Nr.get(n)||(Nr.set(n,r=new Proxy(n,Pr)),r):n},set(e,t,n){return Cr(e,t,gr(n)),!0},deleteProperty(e,t){return Cr(e,t,void 0,!0),!0}};function Fr(e){return t=>{if(hr(t)){let n;(n=Nr.get(t))||Nr.set(t,n=new Proxy(t,Pr)),e(n)}return t}}var Ir={blocked:0,working:1,error:2,idle:3},Lr=e=>Ir[e]??3,Rr=e=>String(e??``).replace(/(.)[\\/]+$/,`$1`);function zr(e){let t=Array.isArray(e?.status)?e.status:[];return t.length?t.some(e=>e.state===`blocked`)?`blocked`:t[0]?.state===`error`?`error`:t.some(e=>e.state===`working`)?`working`:`idle`:e?.blockers?.length?`blocked`:e?.state!==void 0&&e.state in Ir?e.state:`idle`}function Br(e){let t=Array.isArray(e?.status)?e.status:[];return(t.length?t:[{id:e?.id,title:e?.title,blockers:e?.blockers}]).flatMap(e=>(e.blockers??[]).map(t=>({...t,sessionID:e.id,sessionTitle:e.title})))}function Vr(e){let t=`idle`;for(let n of e)Lr(n)<Ir[t]&&(t=n);return t}function Hr(e){if(!e)return;if(e.kind===`thinking`)return`Thinking…`;let t=e.tool||`tool`;return e.summary?`${t} · ${e.summary}`:t}function Ur(e){return String(e??``).normalize(`NFD`).replace(/\p{M}/gu,``).toLowerCase()}var Wr=e=>Ur(e).split(/\s+/).filter(Boolean);function Gr(e,t){let n=Wr(t);if(!n.length)return!0;let r=[e.title||`Untitled`,e.projectName,e.project,e.directory].filter(Boolean).map(Ur);return n.every(e=>r.some(t=>t.includes(e)))}function Kr(e,t){let n=Rr(e),r=Rr(t);return n===r?``:n.startsWith(`${r}/`)?n.slice(r.length+1):n}var qr=e=>String(e??``).replace(/(.)[\\/]+$/,`$1`),Jr=e=>qr(e).split(/[\\/]/).pop()||String(e??``),Yr=[`hiddenSessions`,`hiddenWorkspaces`,`pinnedSessions`,`pinnedWorkspaces`],Xr=500,Zr=5e3,Qr=4096,$r=e=>e===`hiddenSessions`?Zr:Xr,ei=(e,t=Xr)=>{if(!Array.isArray(e))return[];let n=[...new Set(e.filter(e=>typeof e==`string`&&e.length>0&&e.length<=Qr))];return n.length>t?n.slice(n.length-t):n};function ti(e){let t=e,n=t&&typeof t==`object`&&t.prefs&&typeof t.prefs==`object`?t.prefs:e??{};return Object.fromEntries(Yr.map(e=>[e,ei(n[e],$r(e))]))}function ni(e){let t=e.trim();return t?t.length>200?{error:`Title is longer than 200 characters`}:{title:t}:{error:`Enter a title`}}function ri(e,t,n){let r;for(let i of e??[])for(let e of i.processes)for(let i of e.sessions)if(i.id===t){r??=i.title??``,i.title=n;for(let e of i.status??[])e.id===t&&(e.title=n)}return r}var ii=class{graceMs;pending=new Map;constructor(e=5e3){this.graceMs=e}set(e,t,n){this.pending.set(e,{title:t,at:n})}has(e){return this.pending.has(e)}drop(e,t){this.pending.get(e)?.title===t&&this.pending.delete(e)}apply(e,t){for(let[n,{title:r,at:i}]of[...this.pending]){let a=ai(e,n);a===r||t-i>this.graceMs?this.pending.delete(n):a!==void 0&&ri(e,n,r)}}},ai=(e,t)=>{for(let n of e??[])for(let e of n.processes)for(let n of e.sessions)if(n.id===t)return n.title??``};function oi(e,t,n,r){if(!Yr.includes(t))throw Error(`unknown prefs list: ${t}`);let i=e[t]??[],a=new Set(i),o=new Set(n.filter(e=>a.has(e)!==r));if(!o.size)return{prefs:e,patch:void 0};let s=r?ei([...i,...o],$r(t)):i.filter(e=>!o.has(e));return{prefs:{...e,[t]:s},patch:{[t]:s}}}var si=e=>{try{let t=JSON.parse(e??`null`);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}};function ci(e,t,n){let r=e!=null||t!=null,i={};for(let[r,a]of[[`pinnedSessions`,e],[`pinnedWorkspaces`,t]]){let e=n[r]??[],t=si(a).filter(t=>!e.includes(t));t.length&&(i[r]=ei([...e,...t]))}return{clear:r,patch:Object.keys(i).length?i:void 0}}var li={working:`working`,blocked:`blocked`};function ui(e){let t=zr(e);return Vr([t,e?.terminal?.status===`blocked`&&t!==`blocked`?`working`:li[e?.terminal?.status??``]??`idle`])}function di(e){return e?.terminal?.status===`blocked`&&zr(e)!==`blocked`}var fi=e=>!!e?.open&&e.terminal?.source===`herdr`&&!!e.terminal.workspaceID,pi=e=>qr(e?.project||e?.directory);function mi(e){return fi(e)?`herdr:${e.terminal.workspaceID}`:pi(e)}var hi=(e,t)=>pi(e)===t||qr(e.directory)===t||fi(e)&&mi(e)===t;function gi(e,t){if(t.sessions.has(e.id))return!0;for(let n of t.workspaces)if(hi(e,n))return!0;return!1}function _i(e,t){let n=(t.updated??0)>(e.updated??0)?t:e,r=e.open?e:t.open?t:void 0;return{...n,conversation:!!(e.conversation||t.conversation),busy:!!(e.busy||t.busy),...r?{open:!0,terminal:r.terminal}:{}}}function vi(e){let t=e?.processes??[],n=new Set(t.flatMap(e=>e.sessions.map(e=>e.id))),r=new Map;for(let e of t)for(let t of e.sessions){if(t.parentID&&n.has(t.parentID))continue;let e=r.get(t.id);r.set(t.id,e?_i(e,t):t)}return[...r.values()]}function yi(e){let t=bi(e);return e=>gi(e,t)}var bi=e=>({sessions:new Set(e?.hiddenSessions??[]),workspaces:new Set(e?.hiddenWorkspaces??[])}),xi=e=>e?.terminals?.herdr?.workspaces??[];function Si(e){let t=qr(e.project||e.directory),n=e.project?Kr(e.directory,t):``;return`${e.projectName||Jr(t)}${n?` › ${n}`:``}`}function Ci(e,t,n){let r=Si(t),i=n?.trim()||void 0;return{machine:e,where:r,...i?{branch:i}:{},text:[e,r,i].filter(Boolean).join(` · `)}}function wi(e,t,n){let r=fi(e)?e.terminal.workspace||xi(t).find(t=>t.id===e.terminal.workspaceID)?.label||e.terminal.workspaceID:void 0;return{...e,title:e.title||e.terminal?.title||`Untitled`,updated:e.updated??0,state:ui(e),waitingInTerminal:di(e),blockers:Br(e),exposed:e.exposed!==!1,pinned:n.has(e.id),nowText:Hr(e.now),where:Si(e),workspace:r??(e.projectName||Jr(pi(e))),machineID:t?.id}}var Ti=50,Ei=200;function Di(e){let t=xi(e).map(e=>({kind:`herdr`,key:`herdr:${e.id}`,workspaceID:e.id,label:e.label||e.id,directories:[...e.directories??[]]})),n=new Set(t.flatMap(e=>e.directories.map(qr))),r=vi(e),i=new Map,a=new Map;for(let e of r){let t=qr(e.directory);t&&(i.set(t,Math.max(i.get(t)??0,e.updated??0)),a.set(t,Si(e)))}for(let e of r){let t=qr(e.project);if(!t||a.has(t))continue;let n=Math.max(...r.filter(e=>qr(e.project)===t).map(e=>e.updated??0));i.set(t,n),a.set(t,e.projectName||Jr(t))}let o=[...i.entries()].filter(([e])=>!n.has(e)).sort((e,t)=>t[1]-e[1]).slice(0,Ti).map(([e])=>({kind:`folder`,key:e,label:a.get(e)??Jr(e),directories:[e]}));return{herdr:!!e?.terminals?.herdr,targets:[...t,...o]}}function Oi({target:e,directory:t,title:n,openInHerdr:r}){let i={directory:t},a=String(n??``).trim().slice(0,Ei);return a&&(i.title=a),r&&e?.kind===`herdr`&&e.workspaceID&&(i.herdrWorkspace=e.workspaceID),i}function ki(e){if(typeof e==`string`&&e)return e.includes(`budget`)?`Quota exceeded`:Ai[e]}var Ai={"provider.quota":`Quota exceeded`,"provider.free-limit":`Quota exceeded`,"provider.auth":`Authentication failed`,"provider.rate-limit":`Rate limited`,"provider.internal":`Provider unavailable`,"provider.transport":`Provider unavailable`,"provider.timeout":`Provider unavailable`,"provider.content-filter":`Blocked by content filter`,"provider.no-route":`No route to model`,"provider.invalid-request":`Invalid request`,"provider.invalid-output":`Invalid model output`,"provider.unsupported-operation":`Unsupported operation`,"tool.execution":`Tool failed`,"permission.rejected":`Permission rejected`};function ji(e){return typeof e==`number`&&Number.isInteger(e)&&e>=100&&e<=999?`HTTP ${e}`:void 0}function Mi(e,t){if(typeof e!=`number`||!Number.isFinite(e)||e<=t)return;let n=Math.ceil((e-t)/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m ${n%60}s`:`${Math.floor(r/60)}h ${r%60}m`}var Ni=e=>typeof e==`string`&&e.trim()?e.trim():void 0,Pi=(e,t)=>e.toLowerCase()===t.toLowerCase(),Fi=(e,t)=>e&&t&&!Pi(e,t)?t:void 0;function Ii(e){let t=ki(e.errorType),n=Ni(e.message),r=ji(e.errorStatus),i=Fi(t,n);return`${t??n??`Error`}${r?` (${r})`:``}${i?`: ${i}`:``}`}function Li(e,t){let n=typeof e.attempt==`number`?` (attempt ${e.attempt})`:``,r=Mi(e.next,t),i=ki(e.errorType),a=Ni(e.message),o=Fi(i,a),s=i?o?`${i} — ${o}`:i:a;return`Retrying${n}${r?` · next in ${r}`:``}${s?`: ${s}`:``}`}var Ri=e=>!!e&&typeof e==`object`&&typeof e.id==`string`;function zi(e,t){let n=Array.isArray(e)?e.filter(Ri):[],r=t?n.find(e=>e.id===t):n[0];if(!r)return;if(r.state===`error`)return Bi(r);if(r.state===`working`||r.state===`blocked`)return;let i=new Set([r.id]);for(let e=!0;e;){e=!1;for(let t of n)t.parentID&&i.has(t.parentID)&&!i.has(t.id)&&(i.add(t.id),e=!0)}let a=n.find(e=>e.id!==r.id&&i.has(e.id)&&e.state===`error`);return a?Bi(a):void 0}function Bi(e){let t=Ni(e.detail),n=ji(e.errorStatus),r=Ni(e.title);return{sessionID:e.id,...r?{title:r}:{},label:ki(e.errorType)??t??`Error`,...t?{message:t}:{},...n?{status:n}:{},text:Ii({errorType:e.errorType,errorStatus:e.errorStatus,message:t})}}var Vi=e=>Array.isArray(e)?e:[];function Hi(e){return Vi(e).flatMap(e=>(Array.isArray(e.jobs)?e.jobs:[]).map(t=>({...t,sessionID:e.id,sessionTitle:e.title??``})))}function Ui(e){return Hi(e).filter(e=>e.status===`running`).length}function Wi(e,t){let n=Hi(e),r=n.filter(e=>e.status===`running`).sort((e,t)=>(e.started??0)-(t.started??0)),i=n.filter(e=>e.status!==`running`&&e.ended!==void 0&&t-e.ended<=6e4).sort((e,t)=>(t.ended??0)-(e.ended??0));return[...r,...i]}function Gi(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}function Ki(e,t){if(e.status===`running`)return e.started===void 0?`running`:`running · ${Gi(t-e.started)}`;let n=e.status===`killed`?`killed`:e.status===`timeout`?`timed out`:void 0,r=e.exit===void 0?void 0:`exit ${e.exit}`,i=e.started!==void 0&&e.ended!==void 0?Gi(e.ended-e.started):void 0;return n?[n,r].filter(Boolean).join(` · `):[r??`ended`,i].filter(Boolean).join(` · `)}function qi(e){return e<=0?``:`${e} job${e===1?``:`s`}`}function Ji(e,t,n=Date.now()){let r=Vi(e),i=(t?r.find(e=>e.id===t&&e.retry):void 0)??r.find(e=>e.retry);return i?.retry?Li(i.retry,n):void 0}var Yi=[`prompt-tui`,`prompt-web`,`voice`,`answer`,`view`],Xi=36e5,Zi=24*Xi,Qi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$i=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0;function ea(e){if(!Qi(e))return;let t=Array.isArray(e.buckets)?e.buckets.filter(e=>Array.isArray(e)&&e.length===4&&e.every($i)):[];return{...$i(e.at)?{at:e.at}:{},...Yi.includes(e.kind)?{kind:e.kind}:{},...$i(e.last)?{last:e.last}:{},buckets:t.map(e=>[e[0],e[1],e[2],e[3]])}}function ta(e){let t={};if(!Qi(e))return t;for(let[n,r]of Object.entries(e)){let e=ea(r);e&&(t[n]=e)}return t}var na=(e,t)=>t-e[0]<Zi&&e[0]<=t;function ra(e,t){let n=Array.from({length:24},()=>({human:0,agent:0}));for(let r of e??[]){if(!na(r,t))continue;let e=n[23-Math.floor((t-r[0])/Xi)];e.human+=r[1],e.agent+=r[2]+r[3]}return n}function ia(e,t){let n=0,r=0,i=0;for(let a of e??[])na(a,t)&&(n+=a[1],r+=a[2],i+=a[3]);return{human:n,turns:r,tools:i}}var aa=(e,t)=>{let n=ia(e,t);return n.human+n.turns+n.tools},oa=(e,t)=>`${e} ${t}${e===1?``:`s`}`;function sa(e){return!e.human&&!e.turns&&!e.tools?`No activity in the last 24 h`:`You: ${oa(e.human,`action`)} · Agent: ${oa(e.turns,`turn`)} / ${oa(e.tools,`tool`)} in the last 24 h`}var ca={"prompt-tui":`typed`,"prompt-web":`prompted`,voice:`spoke`,answer:`answered`,view:`opened`},la=(e,t)=>{let n=Math.max(0,Math.round((t-e)/1e3));return n<60?void 0:n<3600?`${Math.round(n/60)}m`:n<86400?`${Math.round(n/3600)}h`:`${Math.round(n/86400)}d`};function ua(e,t,n){let r=la(t,n),i=r?`${r} ago`:`just now`;return e?`You ${ca[e]} ${i}`:`You ${i}`}function da(e,t,n){return`${e?ca[e]:`touched`} ${la(t,n)??`now`}`}function fa(e,t,n,r=new Set,i={}){let a=new Set(t.pinnedSessions),o=new Set(t.hiddenSessions),s=yi(t),c=[];for(let t of e??[])for(let e of vi(t)){if(r.has(e.id))continue;let l=wi(e,t,a),u=l.open?l.terminal?.source===`herdr`?`herdr`:`tui`:`background`,d=n[l.id],f=l.state===`working`?Ji(e.status,void 0,1/0):void 0,p=l.state===`error`?zi(e.status,l.id)?.text??`Error`:void 0,m=i.activity?.[l.id],h=i.intents?.[l.id]?.text;c.push({...l,machineName:t.name,machineOnline:!!t.online,source:u,running:l.state===`working`||l.state===`blocked`,hidden:s(e),archived:o.has(l.id),unread:d!==void 0&&l.updated>d,group:mi(e),jobs:Ui(e.status),...f?{retry:f}:{},...p?{error:p}:{},...m?.at===void 0?{}:{touchedAt:m.last??m.at},...m?.at!==void 0&&m.kind?{touchedKind:m.kind,touchedKindAt:m.at}:{},...m?.buckets.length?{meter:m.buckets}:{},...h?{intent:h}:{}})}return c.sort((e,t)=>t.updated-e.updated)}function pa(e,t){if(!e?.length)return t;let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t&&JSON.stringify(t)===JSON.stringify(e)?t:e})}var ma=[`1h`,`24h`,`7d`],ha={"1h":36e5,"24h":864e5,"7d":6048e5},ga=Object.freeze({query:``,filters:Object.freeze({status:`all`,source:`all`,machine:``,archived:!1,touched:``}),sort:Object.freeze({key:`activity`,dir:`desc`})}),_a=[`status`,`title`,`project`,`server`,`source`,`activity`,`touched`,`busy`],va=[`all`,`needs`,`running`,`idle`],ya=[`all`,`open`,`background`],ba=(e,t)=>e.localeCompare(t,void 0,{sensitivity:`base`}),xa=(e,t)=>t.updated-e.updated,Sa=e=>e.touchedAt??-1/0,Ca=e=>({status:(e,t)=>Ir[e.state]-Ir[t.state]||xa(e,t),title:(e,t)=>ba(e.title,t.title)||xa(e,t),project:(e,t)=>ba(e.workspace,t.workspace)||xa(e,t),server:(e,t)=>ba(e.machineName,t.machineName)||xa(e,t),source:(e,t)=>ba(e.source,t.source)||xa(e,t),activity:(e,t)=>e.updated-t.updated,touched:(e,t)=>Sa(e)-Sa(t)||e.updated-t.updated,busy:(t,n)=>aa(t.meter,e)-aa(n.meter,e)||t.updated-n.updated});function wa(e,t,n){if(t.touched&&(e.touchedAt===void 0||n-e.touchedAt>ha[t.touched]))return!1;let r=t.status===`needs`&&e.state===`blocked`;return!((t.archived?!e.hidden:e.hidden&&!r)||t.status===`needs`&&!Aa(e)||t.status===`running`&&!e.running||t.status===`idle`&&e.running||t.source===`open`&&e.source===`background`||t.source===`background`&&e.source!==`background`||t.machine&&e.machineID!==t.machine)}function Ta(e,t){if(!t.trim()||Gr(e,t))return!0;let n=Ur(t).split(/\s+/).filter(Boolean),r=[e.title,e.workspace,e.where,e.directory,e.machineName].map(Ur);return n.every(e=>r.some(t=>t.includes(e)))}function Ea(e,t,n=Date.now()){let r=Ca(n)[t.sort.key],i=t.sort.dir===`asc`?1:-1;return e.filter(e=>wa(e,t.filters,n)&&Ta(e,t.query)).sort((e,t)=>i*r(e,t))}var Da=(e,t,n)=>t.includes(e)?e:n;function Oa(e){let t;try{if(t=JSON.parse(e??`null`)??{},typeof t!=`object`||Array.isArray(t))return ga}catch{return ga}let n=t.filters??{},r=t.sort??{},i=ga,a=Da(r.key,_a,i.sort.key),o=a===r.key?Da(r.dir,[`asc`,`desc`],i.sort.dir):i.sort.dir,s=a===i.sort.key&&o===i.sort.dir?i.sort:{key:a,dir:o},c={status:Da(n.status,va,i.filters.status),source:Da(n.source,ya,i.filters.source),machine:typeof n.machine==`string`&&n.machine.length<=200?n.machine:``,archived:n.archived===!0||n.hidden===!0,touched:Da(n.touched,ma,i.filters.touched)},l=Object.keys(c).every(e=>c[e]===i.filters[e]);return l&&s===i.sort?ga:{query:``,filters:l?i.filters:c,sort:s}}function ka(e){return JSON.stringify({filters:e.filters,sort:e.sort})}var Aa=e=>e.state===`blocked`||e.state===`error`&&!e.hidden;function ja(e,{query:t,groupBy:n,sortBy:r,recentLimit:i=20,workingLimit:a=7,now:o=Date.now()}){let s=e.filter(e=>!e.hidden),c=e.filter(Aa),l=r===`title`?(e,t)=>ba(e.title,t.title)||xa(e,t):xa;if(t.trim())return[{id:`results`,title:`Results`,kind:`results`,rows:s.filter(e=>Ta(e,t)).sort(xa)}];let u=new Set,d=e=>{for(let t of e)u.add(t.id);return e},f=[],p=e=>e.rows.length&&f.push(e);p({id:`needs`,title:`Needs you`,kind:`needs`,rows:d(c.sort(xa))});let m=s.filter(e=>!u.has(e.id)&&e.touchedAt!==void 0&&o-e.touchedAt<=6048e5);if(m.length){let e=s.filter(e=>!u.has(e.id)&&e.pinned).sort(l),t=m.filter(e=>!e.pinned).sort((e,t)=>Sa(t)-Sa(e)).slice(0,a);p({id:`working`,title:`Working set`,kind:`working`,rows:d([...e,...t])})}p({id:`running`,title:`Running`,kind:`running`,rows:d(s.filter(e=>!u.has(e.id)&&e.running).sort(xa))}),p({id:`pinned`,title:`Pinned`,kind:`pinned`,rows:d(s.filter(e=>!u.has(e.id)&&e.pinned).sort(l))});let h=new Map;for(let e of s){if(u.has(e.id)||!e.open)continue;let t=n===`machine`?e.machineID:`${e.machineID}\u0000${e.group}`,r=h.get(t);r||(r={title:n===`machine`?e.machineName:e.workspace,key:n===`machine`?e.machineID:e.group,machineID:e.machineID,directory:e.directory,rows:[]},h.set(t,r)),r.rows.push(e)}let g=e=>Math.max(...e.map(e=>e.updated)),_=[...h.values()].sort((e,t)=>r===`title`&&ba(e.title,t.title)||g(t.rows)-g(e.rows));for(let e of _){e.rows.sort(l),d(e.rows);let t=[...e.rows].sort(xa);p({id:`group:${e.machineID}:${e.key}`,title:e.title,kind:`group`,key:e.key,machineID:e.machineID,directory:t[0].directory,rows:e.rows})}return p({id:`recents`,title:`Recents`,kind:`recents`,rows:s.filter(e=>!u.has(e.id)).sort(xa).slice(0,i)}),f}var Ma=864e5;function Na(e,t,n){if(!Number.isInteger(t)||t<1)return[];let r=n-t*Ma;return e.filter(e=>!e.hidden&&!e.running&&!e.pinned&&!e.open&&e.updated<r)}function Pa(e,t){return t.phase!==`off`&&t.sessionID===e.id||e.conversation===!0}function Fa(e,t,n,r){let i=`${e} of ${t} sessions`;return!r||!n?i:`${i} · ${n===1?`1 Decision waits`:`${n} Decisions wait`} for you (above)`}var Ia;function La(e){Ia=e}function Ra(e){for(let t of[Ia?.(e.id),e.intent]){let n=t?.trim();if(n&&n!==e.title)return n}}function za(e,t){if(e.state!==`blocked`)return;let n=(e.status??[]).flatMap(e=>e.state===`blocked`&&typeof e.blockedSince==`number`?[e.blockedSince]:[]);if(!n.length)return;let r=Math.max(0,Math.floor((t-Math.min(...n))/1e3));return r<60?`<1m`:r<3600?`${Math.floor(r/60)}m`:r<86400?`${Math.floor(r/3600)}h`:`${Math.floor(r/86400)}d`}var Ba=.75,Va=.05;function Ha(e){let t=typeof e==`string`?e.trim()?Number(e):NaN:Number(e??NaN);if(!Number.isFinite(t))return 1;let n=Math.round(t/Va)/Math.round(1/Va);return Math.min(2,Math.max(Ba,Number(n.toFixed(2))))}function Ua(e){let t=Ha(e);return`${Number.isInteger(t)?t.toFixed(1):String(t)}×`}var Wa={working:`working`,blocked:`blocked`,error:`failed`,idle:`done`},Ga=160,Ka=class{rootID;max;maxSubagents;maxText;items=[];subagents=new Map;seq=0;rootState;rootSince;busyAt;writing;lastAt;constructor(e,{max:t=30,maxSubagents:n=10,maxText:r=4e3}={}){this.rootID=e,this.max=t,this.maxSubagents=n,this.maxText=r}touch(e){e!==void 0&&Number.isFinite(e)&&!((this.lastAt??-1/0)>=e)&&(this.lastAt=e)}reasoning(e,t,n,r=Date.now()){let i=`thinking:${t}`;this.items.some(e=>e.id===i)||this.activity(e,{id:i,kind:`thinking`,state:`running`,at:r});let a=this.items.find(e=>e.id===i);a&&(a.text=`${a.text??``}${n??``}`.slice(-this.maxText)),this.touch(r)}text(e,t,n,r=Date.now()){for(let t of this.items)t.sessionID===e&&t.kind===`thinking`&&t.state===`running`&&(t.state=`done`);if(this.touch(r),e===this.rootID){this.writing={messageID:t,at:r};return}let i=this.subagents.get(e);i||(i={id:e,state:`working`,at:r},this.subagents.set(e,i),this.trim()),i.msg!==t&&(i.out=``),i.msg=t,i.out=`${i.out??``}${n??``}`.slice(-600);let a=i.out.split(`
|
|
3
3
|
`).map(e=>e.trim()).filter(Boolean).at(-1);a&&(i.line=a.length>Ga?`…${a.slice(-159)}`:a)}activity(e,t){if(!t||typeof t.id!=`string`)return;let n=t.sessionID??e??this.rootID,r=this.items.find(e=>e.id===t.id);if(r){r.state=t.state??r.state,t.error!==void 0&&(r.error=t.error),t.summary&&(r.summary=t.summary),t.tool&&(r.tool=t.tool),this.touch(t.at);return}let i=Number.isFinite(t.at)?t.at:Date.now();this.touch(i);for(let e of this.items)e.sessionID===n&&e.kind===`thinking`&&e.state===`running`&&e.at<=i&&(e.state=`done`);let a={id:t.id,sessionID:n,kind:t.kind===`thinking`?`thinking`:`tool`,tool:t.tool,summary:t.summary,state:t.state??`running`,error:t.error,at:i,seq:++this.seq},o=this.items.length;for(;o>0&&this.items[o-1].at>i;)o--;this.items.splice(o,0,a),n!==this.rootID&&!this.subagents.has(n)&&this.subagents.set(n,{id:n,state:`working`,at:i}),this.trim()}load(e){for(let t of[...e??[]].sort((e,t)=>(e.at??0)-(t.at??0)))this.activity(t.sessionID??this.rootID,t)}status(e,t=Date.now()){let n=new Set,r=this.stateKey(),i;for(let r of e??[]){if(r.id===this.rootID){i=r;continue}n.add(r.id);let e=Wa[r.state]??`working`,a=this.subagents.get(r.id);a?(a.state=e,r.title&&(a.title=r.title),a.since=r.since):e!==`done`&&this.subagents.set(r.id,{id:r.id,title:r.title,state:e,at:t,since:r.since})}for(let e of this.subagents.values())!n.has(e.id)&&(e.state===`working`||e.state===`blocked`)&&(e.state=`done`);let a=i?.state===`working`||i?.state===`blocked`||[...this.subagents.values()].some(e=>e.state===`working`||e.state===`blocked`);if(i&&!a)for(let e of this.items)e.state===`running`&&(e.state=`done`);i&&(this.rootState=i.state,this.rootSince=i.since,i.state!==`working`&&(this.writing=void 0)),this.rootState===`working`||[...this.subagents.values()].some(e=>e.state===`working`)?this.busyAt===void 0&&(this.busyAt=t):this.busyAt=void 0,r!==void 0&&r!==this.stateKey()&&this.touch(t),this.trim()}stateKey(){if(this.rootState!==void 0)return[this.rootState,...[...this.subagents.values()].map(e=>`${e.id}=${e.state}`)].join(` `)}trim(){for(;this.items.length>this.max;){let e=this.items.findIndex(e=>e.state!==`running`);this.items.splice(e===-1?0:e,1)}if(this.subagents.size>this.maxSubagents){let e=[...this.subagents.values()].filter(e=>e.state===`done`||e.state===`failed`).sort((e,t)=>e.at-t.at);for(let t of e.slice(0,this.subagents.size-this.maxSubagents))this.subagents.delete(t.id)}}rows(){let e=e=>!(e.kind===`thinking`&&e.state!==`running`&&!e.text),t=(e,t)=>({key:e.id,depth:t,kind:e.kind,label:e.kind===`thinking`&&e.state!==`running`?`Thought`:Ja(e),state:e.state,error:e.error,sessionID:e.sessionID,...e.text?{text:e.text}:{}}),n=[];for(let r of this.items)r.sessionID===this.rootID&&e(r)&&n.push({at:r.at,seq:r.seq,rows:[t(r,0)]});for(let r of this.subagents.values())n.push({at:r.at,seq:0,rows:[{key:`sub:${r.id}`,depth:0,kind:`subagent`,label:r.title||r.id,state:r.state,sessionID:r.id,...r.line?{line:r.line}:{}},...this.items.filter(t=>t.sessionID===r.id&&e(t)).map(e=>t(e,1))]});return n.sort((e,t)=>e.at-t.at||e.seq-t.seq).flatMap(e=>e.rows)}now(){for(let e=this.items.length-1;e>=0;e--)if(this.items[e].state===`running`)return Ja(this.items[e]);let e=[...this.subagents.values()].reverse().find(e=>e.state===`working`);return e?`Subagent: ${e.title||e.id}`:void 0}pulse(){let e=[...this.subagents.values()].filter(e=>e.state===`working`),t=this.rootState===`working`,n=t||e.length>0,r=!n&&(this.rootState===`blocked`||[...this.subagents.values()].some(e=>e.state===`blocked`)),i=r?`Needs you`:`Idle`,a;if(n){let n=this.items.filter(e=>e.sessionID===this.rootID),r=[...n].reverse().find(e=>e.state===`running`),o=r?r.kind===`thinking`?`Thinking`:`Running ${Ja(r)}`:void 0,s=this.writing;s&&!n.some(e=>e.at>s.at)&&(o=`Writing reply`);let c=e.length,l=c===0?``:o||c>1?`${c} subagent${c===1?``:`s`} working`:`Subagent “${e[0].title||e[0].id}” working`;i=o&&l?`${o} · ${l}`:o||l||`Working`;let u=[t?this.rootSince:void 0,...e.map(e=>e.since)].filter(e=>typeof e==`number`&&Number.isFinite(e));a=u.length?Math.min(...u):this.busyAt}return{busy:n,blocked:r,label:i,since:a,lastAt:this.lastAt}}};function qa(e){let t=Math.max(0,Math.floor((Number(e)||0)/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t%3600/60))}m`}function Ja(e){if(e.kind===`thinking`)return`Thinking…`;let t=e.tool||`tool`;return e.summary?`${t} · ${e.summary}`:t}var Ya=Object.freeze({working:Object.freeze([`On it.`,`Give me a sec.`,`One moment.`,`Let me check.`,`Okay, looking into it.`,`Sure, one sec.`,`Hang on.`,`Let me see.`,`Checking now.`,`Bear with me.`]),subagent:Object.freeze([`I'll hand that off.`,`Starting that in the background.`,`Sending that off now.`,`Getting a helper on it.`,`Passing that along.`]),still:Object.freeze([`Still on it.`,`Almost there.`,`Still working through it.`,`Bear with me, still going.`,`Taking a bit longer.`])});function Xa(){let e=Object.values(Ya),t=[];for(let n=0;n<Math.max(...e.map(e=>e.length));n++)for(let r of e)n<r.length&&t.push(r[n]);return t}var Za=class{rng;ready;bags=new Map;last=new Map;used=new Map;count=0;constructor({rng:e=Math.random,ready:t=()=>!0}={}){this.rng=e,this.ready=t}pick(e){let t=Ya[e],n=this.last.get(e),r=this.bags.get(e);r?.length||(r=this.shuffle(t),r.length>1&&r[0]===n&&r.push(r.shift()),this.bags.set(e,r));let i=e=>e!==n||t.length<2,a=r.findIndex(e=>i(e)&&this.ready(e)),o;if(a>=0)o=r.splice(a,1)[0];else{let e=t.filter(e=>i(e)&&this.ready(e)).sort((e,t)=>(this.used.get(e)??0)-(this.used.get(t)??0))[0];e?o=e:(a=r.findIndex(i),o=a>=0?r.splice(a,1)[0]:t.find(i))}return o??=t[0],this.last.set(e,o),this.used.set(o,++this.count),o}shuffle(e){let t=[...e];for(let e=t.length-1;e>0;e--){let n=Math.floor(this.rng()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}},Qa=class{ackMs;quietMs;stillMs;enabled=!0;phrases=!0;busy=!1;awaiting;pendingSubagent=!1;lastSay=-1/0;lastSpoke=-1/0;user=!1;agent=!1;cue=!1;pick;constructor({ackMs:e=2500,quietMs:t=3e3,stillMs:n=4e4,pick:r}={}){if(!r){let e=new Za;r=t=>e.pick(t)}this.pick=r,this.ackMs=e,this.quietMs=t,this.stillMs=n}get gated(){return this.user||this.agent||this.cue}heard(e,{tone:t=!0}={}){return this.awaiting=Math.min(this.awaiting??e,e),t&&this.enabled&&!this.user?[{type:`earcon`,name:`heard`}]:[]}awaitReply(e){this.awaiting=e}speechEnded(e){return this.userTalking(!1,e),this.enabled?[{type:`earcon`,name:`heard`}]:[]}working(e,t){e&&!this.busy&&(this.lastSpoke=Math.max(this.lastSpoke,t)),e||(this.awaiting=void 0,this.pendingSubagent=!1),this.busy=e}agentSaid(e){this.lastSay=e,this.spoke(e)}agentSpeaking(e,t){this.agent=e,this.spoke(t)}userTalking(e,t){this.user=e,e||(this.lastSpoke=Math.max(this.lastSpoke,t))}cueSpeaking(e,t){this.cue=e,e||(this.lastSpoke=Math.max(this.lastSpoke,t))}subagentStarted(e){e-this.lastSay>=this.quietMs&&(this.pendingSubagent=!0)}subagentFinished(e){return this.enabled&&!this.user?[{type:`earcon`,name:`done`}]:[]}nextDue(e){if(this.enabled&&this.phrases&&!this.gated){if(this.pendingSubagent)return e;if(this.busy)return Math.min(this.awaiting===void 0?1/0:this.awaiting+this.ackMs,this.lastSpoke+this.stillMs)}}tick(e){return!this.enabled||!this.phrases||this.gated?[]:this.pendingSubagent?this.say(`subagent`,e):this.awaiting!==void 0&&this.busy&&e-this.awaiting>=this.ackMs?this.say(`working`,e):this.busy&&e-this.lastSpoke>=this.stillMs?this.say(`still`,e):[]}spoke(e){this.awaiting=void 0,this.pendingSubagent=!1,this.lastSpoke=Math.max(this.lastSpoke,e)}say(e,t){return this.spoke(t),[{type:`speak`,cue:e,text:this.pick(e)}]}},$a=class{scheduler;playFn;ready;now;setTimer;clearTimer;timer;constructor({scheduler:e,play:t,ready:n=()=>!0,now:r=()=>Date.now(),setTimer:i=(e,t)=>setTimeout(e,t),clearTimer:a=e=>clearTimeout(e)}){this.scheduler=e,this.playFn=t,this.ready=n,this.now=r,this.setTimer=i,this.clearTimer=a}poke(){if(this.stop(),this.ready())for(let e=0;e<3;e++){let e=this.now(),t=this.scheduler.nextDue(e);if(t===void 0||!Number.isFinite(t))return;if(t>e){this.timer=this.setTimer(()=>{this.timer=void 0,this.poke()},t-e);return}let n=this.scheduler.tick(e);n.length&&this.playFn(n)}}stop(){this.timer!==void 0&&this.clearTimer(this.timer),this.timer=void 0}},eo=new Set([`working`,`blocked`]);function to(e,t,n){let r=new Map((e??[]).filter(e=>e.id!==n).map(e=>[e.id,e.state])),i=[],a=[];for(let e of t??[]){if(e.id===n)continue;let t=r.get(e.id);r.delete(e.id),e.state===`working`&&!eo.has(t??``)?i.push(e.id):eo.has(t??``)&&!eo.has(e.state)&&a.push(e.id)}for(let[e,t]of r)eo.has(t)&&a.push(e);return{started:i,finished:a}}function no(e){return(e??[]).some(e=>e.state===`working`)}var ro=Object.freeze([`openrouter`,`openai-compatible`]),io={stt:[`provider`,`model`,`baseURL`,`language`],tts:[`provider`,`model`,`voice`,`baseURL`,`speed`]},ao=e=>e==null?``:String(e).trim();function oo(e){let t={};for(let n of[`stt`,`tts`]){let r=e?.[n]??{};t[n]=Object.fromEntries(io[n].map(e=>[e,ao(r[e])])),t[n].apiKey={action:`keep`,value:``}}return t}function so(e,t){let n={};for(let r of[`stt`,`tts`]){let i=e?.[r]??{},a=t[r],o={};for(let e of io[r]){if(e===`baseURL`&&ao(a.provider)!==`openai-compatible`)continue;let t=ao(a[e]);t!==ao(i[e])&&(o[e]=t===``?null:e===`speed`?Number(t):t)}a.apiKey?.action===`set`?o.apiKey=ao(a.apiKey.value):a.apiKey?.action===`clear`&&(o.apiKey=null),Object.keys(o).length&&(n[r]=o)}return n}function co(e){let t={};for(let n of[`stt`,`tts`]){let r=e[n],i=(e,r)=>t[`${n}.${e}`]=r;if(ro.includes(ao(r.provider))||i(`provider`,`Choose a provider.`),ao(r.model)||i(`model`,`Enter a model.`),ao(r.provider)===`openai-compatible`){let e=ao(r.baseURL);e?/^https?:\/\/[^\s/]+/i.test(e)||i(`baseURL`,`Enter an http:// or https:// URL.`):i(`baseURL`,`Enter the server's base URL.`)}if(n===`tts`){ao(r.voice)||i(`voice`,`Enter a voice.`);let e=ao(r.speed);e&&!(Number(e)>=.25&&Number(e)<=4)&&i(`speed`,`Use a number from 0.25 to 4.`)}r.apiKey?.action===`set`&&!ao(r.apiKey.value)&&i(`apiKey`,`Paste the new key, or cancel.`)}return t}function lo(e,t){let n;for(let r of Object.keys(e??{}))String(t??``).startsWith(r)&&(n===void 0||r.length>n.length)&&(n=r);return n===void 0?[]:[...e[n]??[]]}var uo=/^(localhost|127(?:\.\d{1,3}){3}|\[::1\])$/i;function fo(e,t){if(!e||e.stt&&e.tts)return;let n=!1;try{n=uo.test(new URL(t??``).hostname)}catch{n=!1}return{reason:e.reason||`Choose a speech provider and add its API key in Settings → Speech.`,micBlocked:!e.stt,...n?{storage:`Keys are stored on this computer in ~/.local/state/hub`}:{}}}var po=()=>({machines:void 0,reads:{},activity:{},intents:{},prefs:ti({}),prefsSource:`unknown`,prefsPending:0,prefsStale:!1,connection:`connecting`,enrollmentRev:0}),mo=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function ho(e,t,n){for(let r of e??[])for(let e of r.processes)for(let r of e.sessions)r.id===t&&n(r)}function go(e,t){if(!mo(t)||typeof t.type!=`string`)return!1;switch(t.type){case`catalog`:return Array.isArray(t.machines)?(e.machines=t.machines,!0):!1;case`status`:{if(typeof t.sessionID!=`string`||!Array.isArray(t.sessions))return!1;let n=!1;return ho(e.machines,t.sessionID,e=>{e.status=t.sessions,n=!0}),n}case`conversation`:{if(typeof t.sessionID!=`string`||typeof t.on!=`boolean`)return!1;let n=!1;return ho(e.machines,t.sessionID,e=>{e.conversation=t.on,n=!0}),n}case`reads`:return mo(t.reads)?(e.reads=Object.fromEntries(Object.entries(t.reads).filter(e=>typeof e[1]==`number`)),!0):!1;case`activity`:{let n=ea(t.activity);return typeof t.sessionID!=`string`||!n?!1:(e.activity[t.sessionID]=n,!0)}case`prefs`:return e.prefsSource===`hub`?e.prefsPending?(e.prefsStale=!0,!0):(e.prefs=ti(t.prefs),!0):!1;case`enrollment`:return e.enrollmentRev++,!0;case`handoff`:return typeof t.sessionID==`string`&&(e.notice={kind:`handoff`,sessionID:t.sessionID,at:Date.now()},!0);default:return!1}}function _o(e,t){let n;for(let r of e??[])for(let e of r.processes){let i=e.sessions.find(e=>e.id===t);i&&(!n||(i.updated??0)>(n.session.updated??0))&&(n={session:i,machine:r,process:e})}return n??vo(e,t)}function vo(e,t){for(let n of e??[])for(let e of n.processes)for(let r of e.sessions){let i=Array.isArray(r.status)?r.status:[],a=i.find(e=>e.id===t);if(!a||r.id===t)continue;let o=yo(i,t),s=i.filter(e=>e.id&&o.has(e.id)),c=s.some(e=>e.state===`blocked`)?`blocked`:a.state===`error`?`error`:s.some(e=>e.state===`working`)?`working`:`idle`;return{session:{...r,id:t,title:a.title??``,...a.parentID?{parentID:a.parentID}:{},rootID:r.id,state:c,blockers:a.blockers??[],busy:!1,conversation:!1},machine:n,process:e}}}function yo(e,t){let n=new Set([t]);for(let t=!0;t;){t=!1;for(let r of e??[])r.id&&r.parentID&&n.has(r.parentID)&&!n.has(r.id)&&(n.add(r.id),t=!0)}return n}function bo(e){return(e??[]).some(e=>e.state===`working`||e.state===`blocked`)}var xo=class{max;feeds=new Map;constructor(e=50){this.max=e}has(e){return this.feeds.has(e)}feed(e,t){let n=this.feeds.get(e);if(!n)for(n=new Ka(e),t&&n.status(t),this.feeds.set(e,n);this.feeds.size>this.max;)this.feeds.delete(this.feeds.keys().next().value);return n}apply(e){if(!mo(e))return;let t=typeof e.sessionID==`string`?e.sessionID:void 0;if(!t)return;let n=typeof e.rootID==`string`?e.rootID:t,r=typeof e.messageID==`string`?e.messageID:void 0;switch(e.type){case`activity`:return mo(e.item)?(this.feed(n).activity(t,e.item),n):void 0;case`delta`:return typeof e.text!=`string`||!e.text?void 0:(this.feed(n).text(t,r,e.text),n);case`reasoning`:return typeof e.delta!=`string`||!e.delta?void 0:(this.feed(n).reasoning(t,r??`unknown`,e.delta),n);case`status`:return Array.isArray(e.sessions)?(this.feed(t).status(e.sessions),t):void 0;default:return}}};function So(e,t){let n=new URLSearchParams;e.lite&&n.set(`lite`,`1`),e.session&&n.set(`session`,e.session),e.sessions&&e.sessions.length>1&&n.set(`sessions`,e.sessions.join(`,`)),t&&n.set(`last`,t);let r=n.toString().replace(/\+/g,`%20`);return r?`/api/events?${r}`:`/api/events`}var Co=class{deps;state=`stopped`;lastID;scope={lite:!1};hideTimer;staleTimer;constructor(e){this.deps=e}start(e){this.scope=e,this.reopen(`start`)}received(e){e&&(this.lastID=e),this.state===`open`&&this.watch()}setScope(e){let t=So(e)===So(this.scope);this.scope=e,!t&&this.state===`open`&&this.reopen(`scope`)}hidden(){this.state===`open`&&this.hideTimer===void 0&&(this.hideTimer=this.deps.setTimer(()=>{this.hideTimer=void 0,!(this.state!==`open`||this.deps.keepOpen())&&(this.clear(),this.state=`paused`,this.deps.close())},this.deps.hiddenMs??3e4))}visible(){this.hideTimer!==void 0&&(this.deps.clearTimer(this.hideTimer),this.hideTimer=void 0),this.state===`paused`&&this.reopen(`resume`)}reopen(e=`reconnect`){this.state===`open`&&this.deps.close(),this.clear(),this.state=`open`,this.deps.open(So(this.scope,this.lastID),e),this.watch()}stop(){if(this.state===`stopped`)return;this.clear();let e=this.state===`open`;this.state=`stopped`,e&&this.deps.close()}watch(){this.staleTimer!==void 0&&this.deps.clearTimer(this.staleTimer),this.staleTimer=this.deps.setTimer(()=>{this.staleTimer=void 0,this.state===`open`&&this.reopen(`stale`)},this.deps.staleMs??45e3)}clear(){for(let e of[this.hideTimer,this.staleTimer])e!==void 0&&this.deps.clearTimer(e);this.hideTimer=this.staleTimer=void 0}};function wo(e,t){return t===`scope`&&e===`live`?{connection:`live`,reconnecting:!1}:{connection:`connecting`,reconnecting:e!==`connecting`}}var To=e=>e===`app:concierge`||e===`app concierge`,Eo=/^(ses_[A-Za-z0-9]+)(?: \(sub ses_[A-Za-z0-9]+\))? (.*)$/,Do=/^[!+-] (.*)$/,Oo=/^… (\d+) more updates not listed$/,ko=2,Ao={permission:`needs a permission`,question:`has a question`};function jo(e,t){let n=/^machine \S+ (online|offline)$/.exec(e);if(n)return`a machine went ${n[1]}`;let r=Eo.exec(e);if(!r)return`something changed`;let i=t(r[1])??r[1],a=r[2];if(/^turn_done\b/.test(a))return`${i} finished a turn`;let o=/^blocker:(\w+)/.exec(a);if(o)return`${i} ${Ao[o[1]]??`is blocked (${o[1]})`}`;if(/^blocker_closed\b/.test(a))return`${i} was unblocked`;if(a===`state:error`)return`${i} hit an error`;if(a===`online`)return`${i} came online`;if(a===`offline`||a===`state:offline`)return`${i} went offline`;if(a===`state:working`)return`${i} started working`;let s=/^state:(\w+)$/.exec(a);if(s)return`${i} is ${s[1]}`;if(/^decision dec_/.test(a))return`${i} has a Decision for you`;let c=/^launch \S+ ended:(\w+)$/.exec(a);return c?`${i}'s launch ended (${c[1]})`:/^intent_cleared\b/.test(a)||/^intent:title\b/.test(a)?`${i}'s intent was cleared (it shows its title again)`:/^intent:/.test(a)?`${i}'s intent changed`:a===`pinned`||a===`unpinned`?`${i} was ${a}`:`${i} changed`}function Mo(e,t){if(typeof e!=`string`)return;let[n=``,...r]=e.split(`
|
|
4
4
|
`),i=/^Concierge digest \(.*?\) b\d+ .*?: (.*)$/.exec(n);if(i)return`Digest: ${i[1]}`;if(!/^Concierge update b\d+ /.test(n))return;if(/ changes were missed | some changes were missed/.test(n))return`Update: some changes were missed — catching up`;let a=[],o=0;for(let e of r){let n=Oo.exec(e);n&&(o+=Number(n[1]));let r=Do.exec(e);r&&(a.length<ko?a.push(jo(r[1],t)):o++)}return/· quiet hours ended: /.test(n)&&a.unshift(`quiet hours ended`),a.length||a.push(`something changed in your sessions`),`Update: ${[...a,...o?[`${o} more`]:[]].join(` · `)}`}var No=60,Po=/(`[^`]*`|\]\([^)]*\)|<[a-z][a-z0-9+.-]*:[^>\s]*>|\b[a-z][a-z0-9+.-]*:\/\/[^\s<>()]+)|(?<![\w#/[(])((?:Decision )?)(dec_[A-Za-z0-9]{1,64})(?!\w)/g,Fo=e=>{let t=Intl.Segmenter;return t?Array.from(new t(void 0,{granularity:`grapheme`}).segment(e),e=>e.segment):Array.from(e)},Io=e=>{let t=e.replace(/\s+/g,` `).trim(),n=Fo(t);return n.length>No?`${n.slice(0,59).join(``)}…`:t};function Lo(e){if(!e.includes(`dec_`))return[];let t=new Set;for(let n of e.matchAll(Po))!n[1]&&n[3]&&t.add(n[3]);return[...t]}function Ro(e,t,n={}){let r=n.unknown===`link`;if(!t.length&&!r||!e.includes(`dec_`))return[{text:e}];let i=new Map(t.map(e=>[e.id,e])),a=[],o=0,s=e=>{let t=a.at(-1);!e.href&&t&&!t.href?a[a.length-1]={text:t.text+e.text}:e.text&&a.push(e)};for(let t of e.matchAll(Po)){let[n,a,c,l]=t;if(a||!l)continue;let u=i.get(l);if(!u&&!r)continue;s({text:e.slice(o,t.index)});let d=`/concierge#decision-${l}`;if(u){let e=`Decision “${Io(u.question)}”`;s({text:u.state===`open`?e:`${e} (${u.state})`,href:d})}else s({text:c&&e.startsWith(`: `,t.index+n.length)?`Decision (answered)`:c?`Decision`:`a Decision`,href:d});o=t.index+n.length}return s({text:e.slice(o)}),a.length?a:[{text:e}]}function zo(e,t,n={}){return Ro(e,t,n).map(e=>e.href?`[${Bo(e.text)}](${e.href})`:e.text).join(``)}var Bo=e=>e.replace(/[\\`*_[\]<>~=]/g,`\\$&`);function Vo(e,t){return e.replace(/(?<![\w/])ses_[A-Za-z0-9]{1,64}(?!\w)/g,e=>t(e)??e)}function Ho(e){if(e.state===`expired`)return`Expired without an answer`;if(e.state===`closed`)return e.closed?.reason?`Closed: ${e.closed.reason}`:`Closed`;let t=e.answer,n=t?.option===void 0?t?.text:e.options.find(e=>e.id===t.option)?.label??t.option;return!t||n===void 0?`Answered`:t.answeredBy===`app`?`Answered “${n}” by ${ye(e)}`:t.answeredBy===`timeout`?`Answered “${n}” when it timed out`:`You answered “${n}”`}var Uo=2e3,Wo=6e4,Go=class{options;found=new Map;missing=new Set;failures=new Map;asking=new Map;queue=[];running=0;now;constructor(e){this.options=e,this.now=e.now??Date.now}recall(e){let t=this.found.get(e);if(t!==void 0)return Promise.resolve(t);if(this.missing.has(e))return Promise.resolve(void 0);let n=this.asking.get(e);if(n)return n;let r=this.failures.get(e);if(r&&this.now()<r.retryAt)return Promise.resolve(void 0);let i=this.running<4?this.ask(e):new Promise(e=>this.queue.push(e)).then(()=>this.ask(e));return this.asking.set(e,i),i}async ask(e){this.running++;try{let t=this.options.parse(await this.options.fetch(e));return this.failures.delete(e),t===void 0?this.missing.add(e):this.found.set(e,t),t}catch(t){let n=this.options.status(t);if(n!==void 0&&n!==429&&n<500)this.failures.delete(e),this.missing.add(e);else{let t=(this.failures.get(e)?.count??0)+1;this.failures.set(e,{count:t,retryAt:this.now()+Math.min(Uo*2**(t-1),Wo)})}return}finally{this.running--,this.asking.delete(e),this.queue.shift()?.()}}};function Ko(e,t){let n=new Set;for(let r of e)if((r.type===`assistant`?r.live!==!0:r.type===`message`&&!r.primer&&!To(r.from))&&typeof r.text==`string`)for(let e of Lo(r.text))t.has(e)||n.add(e);return[...n]}var qo=new Set([`disabled`,`starting`,`running`,`waiting_machine`,`backoff`,`failed`,`stopping`]),Jo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Yo=e=>typeof e==`string`,Xo=e=>typeof e==`number`&&Number.isFinite(e);function Zo(e){if(Jo(e)&&Yo(e.state)&&qo.has(e.state))return{state:e.state,...Yo(e.reason)?{reason:e.reason.slice(0,200)}:{},...Yo(e.sessionID)?{sessionID:e.sessionID}:{},hiddenSessionIDs:Array.isArray(e.hiddenSessionIDs)?e.hiddenSessionIDs.filter(Yo):[],...Yo(e.launchID)?{launchID:e.launchID}:{},...Yo(e.machineID)?{machineID:e.machineID}:{},generation:Xo(e.generation)?e.generation:0,since:Xo(e.since)?e.since:0,...Xo(e.nextAttemptAt)?{nextAttemptAt:e.nextAttemptAt}:{}}}function Qo(e){if(!Jo(e)||!Jo(e.settings))return;let t=Zo(e.status);if(!t)return;let n=Array.isArray(e.machines)?e.machines.filter(Jo).filter(e=>Yo(e.id)&&Yo(e.name)).map(e=>({id:e.id,name:e.name,eligible:e.eligible===!0,online:e.online===!0,...Yo(e.reason)?{reason:e.reason}:{},roots:Array.isArray(e.roots)?e.roots.filter(Yo):[]})):[];return{settings:e.settings,status:t,machines:n}}function $o(e,t,n){let r=new Set(e?e.hiddenSessionIDs:n??[]);for(let e of t??[])for(let t of e.processes??[])for(let e of t.sessions??[])(e.agent===`concierge`||e.contextRevision!==void 0)&&r.add(e.id);return r}var es=4e3,ts=(e,t,n)=>e||t&&n;function ns(e,t,n,r,i,a){return $o(t,r,a).has(e)?`concierge`:!n||i===!1&&!rs(e,r)?`wait`:`session`}var rs=(e,t)=>(t??[]).some(t=>(t.processes??[]).some(t=>(t.sessions??[]).some(t=>t.id===e))),is=e=>`concierge.hidden.${e??`local`}`;function as(e){let t=[];for(let n=0;n<e.length;n++){let r=e.key(n);(r===`concierge.hidden`||r?.startsWith(`concierge.hidden.`))&&t.push(r)}for(let n of t)e.removeItem(n)}function os(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e.length<=128).slice(-20):[]}catch{return[]}}var ss=e=>e<6e4?`${Math.max(1,Math.ceil(e/1e3))} s`:`${Math.ceil(e/6e4)} min`;function cs(e,t,n){if(!e)return`Off`;let r=t.find(t=>t.id===e.machineID)?.name??`its machine`;switch(e.state){case`disabled`:return`Off`;case`starting`:return e.reason?.startsWith(`Waiting`)?e.reason:`Starting on ${r}`;case`running`:return`Running on ${r}`;case`waiting_machine`:return`Waiting for ${r}${e.reason?`: ${e.reason}`:``}`;case`backoff`:return e.nextAttemptAt===void 0?`Relaunching`:`Relaunching in ${ss(e.nextAttemptAt-n)}`;case`failed`:return`Failed${e.reason?`: ${e.reason}`:``}`;case`stopping`:return`Stopping`}}function ls(e){let t=e=>e.eligible?0:e.online?2:1;return[...e].sort((e,n)=>t(e)-t(n)||e.name.localeCompare(n.name)).map(e=>({...e,selectable:e.eligible||!e.online,note:e.eligible?`Ready`:e.online?e.reason??`Cannot host the Concierge`:`Offline: the Concierge waits for it`}))}var us=(e,t)=>{let n=t.replace(/\/+$/,``);return e===n||e.startsWith(`${n}/`)};function ds(e,t){if(!e.machineID)return`Pick a machine`;let n=t.find(t=>t.id===e.machineID);if(!n)return`That machine is not yours any more: pick another`;if(!n.eligible&&n.online)return`${n.name} cannot host the Concierge: ${n.reason??`not eligible`}`;if(!e.directory)return`Pick a directory (a git repo on ${n.name})`;if(n.roots.length&&!n.roots.some(t=>us(e.directory,t)))return`The directory must be under one of ${n.name}'s workspace roots: ${n.roots.join(`, `)}`}var fs=e=>({allow:[`answer`,`deny`,`approve`],projects:[...e],permissions:{allow:[`read`,`edit`],never:[`shell:git push*`,`shell:rm *`]},allowAlways:!1,expires:`7d`,maxActionsPerHour:60}),ps=[`answer`,`deny`,`approve`,`stop`,`prompt`];function ms(e,t){let n=e??fs(t?[t]:[]);return{projects:[...n.projects],allow:[...n.allow],permit:n.permissions.allow.join(`
|
|
@@ -24,10 +24,10 @@ import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J a
|
|
|
24
24
|
`?-1:t===`(`?`open`:{next:e+1}})}function Mj(e,t){let n=e.newline;return(!n||t<n.from||n.at>=0&&t>n.at)&&(e.newline={from:t,at:e.s.indexOf(`
|
|
25
25
|
`,t)}),e.newline.at>=0}function Nj(e){let t=e.trim();return t.startsWith(`<`)?t.slice(1,t.indexOf(`>`)>0?t.indexOf(`>`):void 0):t.split(/\s+/)[0]??``}var Pj=e=>e.map(e=>e.type===`text`||e.type===`code`?e.text:e.type===`image`?e.alt:e.type===`br`?` `:Pj(e.children)).join(``);function Fj(e,t){let n=/^https?:\/\/[^\s<>]+/i.exec(e.slice(t,t+2048));if(!n)return;let r=n[0],i=e=>r.split(e).length-1,a=i(`(`),o=i(`)`),s=i(`[`),c=i(`]`),l=r.length;for(;;){let e=r[l-1];if(/[.,:;!?'"*_~]/.test(e))l--;else if(e===`)`&&a<o)o--,l--;else if(e===`]`&&s<c)c--,l--;else break}return/^https?:\/\/[^/]/i.test(r.slice(0,l))?r.slice(0,l):void 0}function Ij(e,t={}){let n=String(e??``),r=!!t.streaming,i=t.depth??0;if(i>ij)return n?[{type:`text`,text:n}]:[];let a=wj(n),o=(e,n,r=t.inLink)=>Ij(e,{inLink:r,streaming:n,depth:i+1}),s=[],c=``,l=(...e)=>{c&&s.push({type:`text`,text:c}),c=``,s.push(...e)},u=0;for(;u<n.length;){let e=n[u],i=n[u+1];if(e===`\\`){if(i===`
|
|
26
26
|
`){l({type:`br`}),u+=2;continue}if(i!==void 0&&vj.test(i)){c+=i,u+=2;continue}}if(e===`
|
|
27
|
-
`){let e=c.length;for(;c[e-1]===` `;)e--;c=c.slice(0,e),l({type:`br`}),u++;continue}if(e==="`"){let e=Sj(n,u,"`"),t=Ej(a,u+e,e);if(t>=0||r){let r=n.slice(u+e,t>=0?t:void 0);r.length>2&&r.startsWith(` `)&&r.endsWith(` `)&&r.trim()&&(r=r.slice(1,-1)),l({type:`code`,text:r}),u=t>=0?t+e:n.length;continue}c+=n.slice(u,u+e),u+=e;continue}let s=n.slice(u,u+2),d=xj[s];if(d&&i!==void 0&&n[u+2]!==void 0&&!yj.test(n[u+2])&&n[u+2]!==e&&(e!==`_`||u===0||!bj.test(n[u-1]))){let t=Oj(a,s,u+3,s,t=>!yj.test(n[t-1])&&(e!==`_`||!bj.test(n[t+2]??``)));if(t>0||r){l({type:d,children:o(n.slice(u+2,t>0?t:void 0),t<0)}),u=t>0?t+2:n.length;continue}}if((e===`*`||e===`_`)&&i!==void 0&&i!==e&&!yj.test(i)&&(e===`*`||u===0||!bj.test(n[u-1]))){let t=Oj(a,e,u+1,e,t=>n[t+1]===e||n[t-1]===e?!1:!yj.test(n[t-1])&&(e!==`_`||!bj.test(n[t+1]??``)));if(t>u+1||r){l({type:`em`,children:o(n.slice(u+1,t>u?t:void 0),t<0)}),u=t>u?t+1:n.length;continue}}let f=e===`!`&&i===`[`;if(e===`[`||f){let e=f?u+1:u,i=Aj(a,e);if(i>0&&n[i+1]===`(`){let s=jj(a,i+2),c=()=>o(n.slice(e+1,i),!1,!0);if(s>0){let e=Nj(n.slice(i+2,s)),r=_j(e);f?l({type:`image`,alt:Pj(c()),...r?{href:r}:{},src:e}):r&&!t.inLink?l({type:`link`,href:r,children:c()}):!r&&!t.inLink&&e?l({type:`label`,target:e,children:c()}):l(...c()),u=s+1;continue}if(r&&!Mj(a,i)){l(...f?[{type:`text`,text:Pj(c())}]:c()),u=n.length;continue}}}if(e===`<`&&!t.inLink){let e=/^<([a-zA-Z][a-zA-Z0-9+.-]{1,31}:[^\s<>]*)>/.exec(n.slice(u,u+2048)),t=/^<([^\s<>@\\]+@[^\s<>@\\]+\.[^\s<>@\\]+)>/.exec(n.slice(u,u+512)),r=e??t;if(r){let t=_j(e?r[1]:`mailto:${r[1]}`);t?l({type:`link`,href:t,children:[{type:`text`,text:r[1]}]}):c+=r[0],u+=r[0].length;continue}}if((e===`h`||e===`H`)&&!t.inLink&&(u===0||!/[\p{L}\p{N}_/]/u.test(n[u-1]))&&n.slice(u-2,u)!==`](`){let e=Fj(n,u),t=e&&_j(e);if(e&&t){l({type:`link`,href:t,children:[{type:`text`,text:e}]}),u+=e.length;continue}}c+=e,u++}return c&&s.push({type:`text`,text:c}),s}var Lj={files:200,fileBytes:5242880,totalBytes:20971520,chunkBytes:524288,inlineBytes:393216,bundlePathMax:200,pathMax:4096,refMax:300,skipped:200};new Set(Object.values({html:`text/html`,htm:`text/html`,css:`text/css`,js:`text/javascript`,mjs:`text/javascript`,json:`application/json`,txt:`text/plain`,csv:`text/csv`,md:`text/markdown`,pdf:`application/pdf`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`}));var Rj=e=>typeof e==`string`&&e.length>0&&e.length<=Lj.pathMax&&!/[\u0000\r\n]/.test(e);function zj(e){return!Rj(e)||e.startsWith(`~`)||/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)&&!/^file:/i.test(e)?!1:/\.html?$/i.test(e)}var Bj=new Set([`html`,`htm`]),Vj=e=>Bj.has(e.toLowerCase());function Hj(e){let t=[],n=e=>{for(let r of e)if(r.type===`code`&&Vj(r.lang))t.push(r);else if(r.type===`quote`)n(r.blocks);else if(r.type===`list`)for(let e of r.items)n(e.blocks)};return n(e),t}var Uj=new Map,Wj=256;function Gj(e){let t=Uj.get(e);if(t!==void 0)return t;let n=e.includes("```")||e.includes(`~~~`)?Hj(aj(e)).length:0;return Uj.size>=Wj&&Uj.delete(Uj.keys().next().value),Uj.set(e,n),n}function Kj(e,t){let n=new Set(t?[t]:[]);for(let t of e)t.type===`assistant`&&t.messageID&&t.live&&t.key===`${t.messageID}:text`&&n.add(t.messageID);let r=new Map,i=new Map;for(let t of e){if(t.type!==`assistant`||!t.messageID||n.has(t.messageID))continue;let e=r.get(t.messageID)??0;i.set(t.key,{messageID:t.messageID,base:e}),r.set(t.messageID,e+Gj(t.text))}return i}function qj(e){let t=e?.status,n=e?.code,r=e instanceof Error?e.message:String(e);return e instanceof Error&&e.name===`NetworkError`?r:typeof t==`number`?t===404?n===`too_old`?`Can't preview this message (it's too far back or no longer available)`:`This HTML block isn't available to preview yet — try again in a moment.`:t===409?`The session's machine is offline. Try again when it's back.`:t===413?`This HTML block is too large to preview (over 2 MiB).`:t===422?`This hub can't store previews.`:t===400?`This block can't be previewed.`:t===429?`Too many previews right now. Try again in a moment.`:`Couldn't open the preview: ${r}`:`Couldn't open the preview: ${r}`}function Jj(e){let t=e.type===`code`?e.text:e.type===`link`?e.href:e.type===`label`?e.target:void 0;return t!==void 0&&zj(t)?t:void 0}var Yj=Math.round(Lj.fileBytes/1048576);function Xj(e){let t=e?.status,n=e?.code,r=e instanceof Error?e.message:String(e);return e instanceof Error&&e.name===`NetworkError`?r:t===404?n===`refused`?`This page isn't one of this session's files, so it can't be previewed.`:`This message isn't available to preview anymore.`:t===409?n===`changed`?`The page kept changing while it was read. Try again.`:`The session's machine is offline. Try again when it's back.`:t===413?`This page is too large to preview (over ${Yj} MiB).`:t===422?/previewBundle/.test(r)?`The session's machine can't preview local pages yet (update Hub there).`:`This hub can't store previews.`:t===502?`The session's machine sent a broken preview.`:t===429?`Too many previews right now. Try again in a moment.`:t===400?`This page can't be previewed.`:`Couldn't open the preview: ${r}`}var Zj={missing:`not found`,refused:`not one of this session's files`,too_large:`over ${Yj} MiB`,limit:`over the preview's size or file limit`,name:`a file name previews can't hold`,type:`a type previews can't hold`};function Qj(e,t=0){let n=e??[],r=n.length+t;if(r!==0)return{title:`${r} ${r===1?`file`:`files`} not included`,items:n.map(e=>`${e.path} — ${Zj[e.reason]??e.reason}`),...t>0?{more:`and ${t} more`}:{}}}var[$j,eM]=u(new Map),tM=e=>$j().get(e);function nM(e,t){let n=Array.isArray(t.skipped)?t.skipped.filter(e=>e&&typeof e.path==`string`&&typeof e.reason==`string`):[],r=typeof t.skippedMore==`number`&&t.skippedMore>0?t.skippedMore:0;eM(t=>new Map(t).set(e,{skipped:n,more:r}))}var rM=I(`<span role=alert>`),iM=I(`<button type=button>`);async function aM(e){let{sessionID:t,messageID:n}=e,r=`path`in e?{messageID:n,path:e.path}:{messageID:n,block:e.block},i=await $e(`${H(t)}/previews`,r),a=i?.artifact?.id;if(typeof a!=`string`||!a)throw Error(`The hub's answer wasn't a preview.`);return`path`in e&&nM(a,i),a}function oM(e){let[t,r]=u(!1),[i,a]=u(),o=()=>`path`in e.target,c=async()=>{if(!(t()||e.waiting)){r(!0),a(void 0);try{let t=await aM(e.target);Sn(t)||a(vn)}catch(e){a(e instanceof Error&&e.message===`The hub's answer wasn't a preview.`?e.message:o()?Xj(e):qj(e))}finally{r(!1)}}},d=()=>e.waiting?`Load earlier messages to preview`:o()?`Preview this page and its files in an isolated frame beside the session`:`Preview this HTML in an isolated frame beside the session`;return[n(l,{get when(){return i()},get children(){var t=rM();return y(t,i),s(()=>k(t,e.inline?`md-preview-err`:`code-preview-err`)),t}}),(()=>{var n=iM();return n.$$click=()=>void c(),y(n,()=>t()?`Opening…`:`Preview`),s(r=>{var i=e.inline?`md-preview`:`code-btn code-preview`,a=t(),s=t()||e.waiting,c=d(),l=o()?`Preview ${e.target.path}`:void 0;return i!==r.e&&k(n,r.e=i),a!==r.t&&b(n,`aria-busy`,r.t=a),s!==r.a&&(n.disabled=r.a=s),c!==r.o&&b(n,`title`,r.o=c),l!==r.i&&b(n,`aria-label`,r.i=l),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),n})()]}z([`click`]);var sM=`/api/agent/artifacts`,cM={textBytes:2097152,imageBytes:10485760,editBytes:1048576,revisionsPage:20},lM=encodeURIComponent,uM=e=>`${sM}/${lM(e)}`,dM=(e,t)=>`${uM(e)}/revisions?limit=${cM.revisionsPage}${t?`&cursor=${lM(t)}`:``}`,fM=(e,t)=>`${uM(e)}/revisions/${lM(t)}`,pM=(e,t,n)=>`${fM(e,t)}/blobs/${lM(n)}`,mM=e=>typeof e==`object`&&!!e&&!Array.isArray(e),hM=e=>typeof e==`string`&&e.length>0,gM=e=>typeof e==`number`&&Number.isFinite(e),_M=e=>typeof e==`string`&&Tn.includes(e),vM=(e,t)=>mM(e)&&mM(e[t])?e[t]:e;function yM(e){let t=vM(e,`artifact`);if(!mM(t)||!hM(t.id)||typeof t.title!=`string`||!_M(t.kind)||!hM(t.latestRevisionID)||!gM(t.revision))return;let n=Array.isArray(t.tags)?t.tags.filter(e=>typeof e==`string`):void 0;return{v:1,id:t.id,title:t.title,kind:t.kind,state:t.state===`archived`?`archived`:`active`,visibility:t.visibility===`workspace`?`workspace`:`private`,latestRevisionID:t.latestRevisionID,revision:t.revision,createdAt:gM(t.createdAt)?t.createdAt:0,updatedAt:gM(t.updatedAt)?t.updatedAt:0,...hM(t.description)?{description:t.description}:{},...hM(t.workspaceID)?{workspaceID:t.workspaceID}:{},...hM(t.createdBySessionID)?{createdBySessionID:t.createdBySessionID}:{},...n?.length?{tags:n}:{},...t.origin===`preview`?{origin:`preview`}:{},...bM(t.provenance)??{}}}function bM(e){if(mM(e)&&hM(e.sessionID)&&hM(e.messageID)){if(hM(e.path))return{provenance:{sessionID:e.sessionID,messageID:e.messageID,path:e.path}};if(gM(e.block))return{provenance:{sessionID:e.sessionID,messageID:e.messageID,block:e.block}}}}function xM(e){if(mM(e)){if(e.kind===`user`)return{kind:`user`};if(e.kind===`session`&&hM(e.sessionID))return{kind:`session`,sessionID:e.sessionID};if(e.kind===`ai_job`&&hM(e.jobID))return{kind:`ai_job`,jobID:e.jobID}}}function SM(e){let t=vM(e,`revision`);if(!mM(t)||!hM(t.id)||!hM(t.artifactID)||!gM(t.number)||!Array.isArray(t.blobs))return;let n=xM(t.author);if(!n)return;let r=t.blobs.filter(e=>bn(e)===void 0);return{v:1,id:t.id,artifactID:t.artifactID,number:t.number,blobs:r.map(e=>({hash:e.hash,bytes:e.bytes,mediaType:e.mediaType,...e.path===void 0?{}:{path:e.path}})),author:n,createdAt:gM(t.createdAt)?t.createdAt:0,...hM(t.baseRevisionID)?{baseRevisionID:t.baseRevisionID}:{},...hM(t.entry)?{entry:t.entry}:{}}}function CM(e){let t=mM(e)?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>SM(e)??[]):[],...hM(t.cursor)?{cursor:t.cursor}:{}}}function wM(e){return e.kind===`user`?`You`:e.kind===`session`?`Session ${e.sessionID.slice(0,12)}…`:`AI job`}var TM=[`text/markdown`,`text/plain`,`text/csv`,`text/html`,`text/css`,`text/javascript`,`application/json`],EM=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`image/svg+xml`],DM={markdown:{"text/markdown":`markdown`,"text/plain":`markdown`},code:Object.fromEntries(TM.map(e=>[e,`code`])),image:Object.fromEntries(EM.map(e=>[e,`image`])),table:{"text/csv":`table`,"application/json":`table`},chart:{"application/json":`chart`},dashboard:{"application/json":`dashboard`},file:{...Object.fromEntries(EM.map(e=>[e,`image`])),"text/plain":`text`,"text/markdown":`text`}},OM={ts:`ts`,tsx:`tsx`,js:`js`,jsx:`jsx`,mjs:`js`,cjs:`js`,py:`python`,go:`go`,rs:`rust`,sh:`bash`,bash:`bash`,json:`json`,css:`css`,html:`html`,htm:`html`,md:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`toml`,sql:`sql`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,rb:`ruby`,swift:`swift`,kt:`kotlin`,diff:`diff`,csv:`csv`,txt:``},kM={"text/javascript":`js`,"text/css":`css`,"application/json":`json`,"text/html":`html`,"text/markdown":`markdown`,"text/csv":`csv`};function AM(e){let t=e.path?.split(`/`).pop()?.split(`.`).slice(1).pop()?.toLowerCase();return t!==void 0&&t in OM?OM[t]:kM[e.mediaType]??``}function jM(e,t){let n=t.blobs;if(Cn.includes(e))return{mode:`isolated`,files:n,...n[0]?{file:MM(t)??n[0]}:{}};if(!n.length)return{mode:`empty`,files:n};let r=DM[e],i=MM(t)??n.find(e=>r[e.mediaType])??n[0],a=r[i.mediaType];if(!a)return{mode:`download`,file:i,files:n,note:`A ${i.mediaType} file can't be shown as ${e===`image`?`an`:`a`} ${e} here.`};let o=a===`image`?cM.imageBytes:cM.textBytes;return i.bytes>o?{mode:`download`,file:i,files:n,note:`This file is too large to preview (${Math.ceil(i.bytes/1024)} KiB).`}:{mode:a,file:i,files:n,...a===`code`?{lang:AM(i)}:{}}}function MM(e){return e.entry===void 0?void 0:e.blobs.find(t=>t.path===e.entry)}var NM=class extends Error{limit;name=`TooLargeError`;code=`too_large`;constructor(e){super(`A file here is at most ${Math.round(e/1024)} KiB`),this.limit=e}};async function PM(e,t){let n=Number(e.headers.get(`content-length`)??``);if(Number.isFinite(n)&&n>t)throw await e.body?.cancel().catch(()=>{}),new NM(t);if(!e.body)return new Uint8Array;let r=e.body.getReader(),i=[],a=0;for(;;){let{done:e,value:n}=await r.read();if(e)break;if(a+=n.byteLength,a>t)throw await r.cancel().catch(()=>{}),new NM(t);i.push(n)}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return o}function FM(e){let t=e&&typeof e==`object`?e:{},n=typeof t.status==`number`?t.status:0,r=typeof t.message==`string`?t.message:``;return t.name===`NetworkError`||n===503?{kind:`offline`,text:`Can't reach the hub right now. Nothing was lost; try again when it's back.`}:t.name===`TooLargeError`||t.code===`too_large`?{kind:`too_large`,text:r||`The file is too large.`}:n===404||n===403?{kind:`not_found`,text:`This artifact doesn't exist or you can't see it.`}:n===401?{kind:`forbidden`,text:`This device isn't signed in to the hub.`}:n===422||t.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub yet.`}:n===409||t.code===`conflict`?{kind:`conflict`,text:`The artifact changed since you opened it.`}:n===429||t.code===`rate_limited`?{kind:`rate_limited`,text:r?`Limit reached: ${r}`:`A limit was reached; try again later.`}:n===400?{kind:`invalid`,text:r||`The hub refused the change.`}:{kind:`error`,text:r?`Something went wrong: ${r}`:`Something went wrong (HTTP ${n}).`}}var IM=e=>new TextEncoder().encode(e).byteLength;function LM(e,t){if(e.state!==`active`||t.id!==e.latestRevisionID||Cn.includes(e.kind)||t.blobs.length!==1)return!1;let n=t.blobs[0];return TM.includes(n.mediaType)&&n.bytes<=cM.editBytes}function RM(e,t,n){if(IM(n)>cM.editBytes)throw new NM(cM.editBytes);return{baseRevisionID:e,upload:[{mediaType:t.mediaType,data:n,encoding:`utf8`,...t.path===void 0?{}:{path:t.path}}]}}var zM=e=>`hub.artifactDraft.v1.${e}`;function BM(e,t){try{let n=e?.getItem(zM(t)),r=n?JSON.parse(n):void 0;return mM(r)&&r.v===1&&hM(r.base)&&typeof r.text==`string`?{v:1,base:r.base,text:r.text}:void 0}catch{return}}function VM(e,t){let n=BM(t.storage,e.artifactID),r=n?n.base===e.baseRevisionID?{status:`editing`,draft:n.text,baseRevisionID:n.base,restored:!0}:{status:`conflict`,draft:n.text,baseRevisionID:n.base,latestRevisionID:e.baseRevisionID,restored:!0}:{status:`editing`,draft:e.original,baseRevisionID:e.baseRevisionID},i=e.original,a,o=e=>{r=e,t.onChange()},s=()=>{try{r.draft===i&&r.baseRevisionID===e.baseRevisionID?t.storage?.removeItem(zM(e.artifactID)):IM(r.draft)<=cM.editBytes&&t.storage?.setItem(zM(e.artifactID),JSON.stringify({v:1,base:r.baseRevisionID,text:r.draft}))}catch{}};return{state:()=>r,setDraft(e){o({...r,draft:e,status:r.status===`conflict`?`conflict`:`editing`}),s()},async save(){if(r.status===`saving`||r.status===`conflict`||r.draft===i&&r.baseRevisionID===e.baseRevisionID)return;let n;try{n=RM(r.baseRevisionID,e.file,r.draft)}catch(e){o({...r,status:`error`,error:{kind:`too_large`,text:`${e.message}; shorten the draft to save it.`}});return}let c=`${r.baseRevisionID}\n${r.draft}`,l=a?.sig===c?a.key:t.newKey();a={sig:c,key:l};let u=r;o({...r,status:`saving`});try{let r=await t.revise(e.artifactID,n,l);return i=u.draft,t.storage?.removeItem(zM(e.artifactID)),o({status:`saved`,draft:u.draft,baseRevisionID:r.id}),r}catch(e){let t=FM(e),n=e.details;t.kind===`conflict`?o({...u,status:`conflict`,error:t,...hM(n?.latestRevisionID)?{latestRevisionID:n.latestRevisionID}:{}}):o({...u,status:`error`,error:t}),s();return}},rebase(e){let{latestRevisionID:t,error:n,...i}=r;o({...i,status:`editing`,baseRevisionID:e}),s()},discard(){t.storage?.removeItem(zM(e.artifactID)),a=void 0,o({status:`editing`,draft:i,baseRevisionID:e.baseRevisionID})}}}var HM=/^\/artifacts\/([^/?#]+)(?:\/revisions\/([^/?#]+))?$/;function UM(e){let t=HM.exec(e);if(!t)return;let[,n,r]=t;if(_e(`artifact`,n)&&(r===void 0||_e(`revision`,r)))return r===void 0?{id:n}:{id:n,rev:r}}var WM=e=>({ok:!1,reason:e});function GM(e){let t=e?.status;return WM(t===404||t===403?`not_found`:`error`)}async function KM(e,t){let n;try{n=await t.artifact(e.id)}catch(e){return GM(e)}if(n.id!==e.id)return WM(`not_found`);if(n.kind!==`image`&&n.kind!==`file`)return WM(`not_image`);let r=e.rev??n.latestRevisionID,i;try{i=await t.revision(n.id,r)}catch(e){return GM(e)}if(i.id!==r||i.artifactID!==n.id)return WM(`not_found`);let a=qM(n,i);return a?a.bytes>Nn.maxBytes?WM(`too_large`):{ok:!0,artifactID:n.id,revisionID:r,title:n.title,file:a,src:pM(n.id,r,a.hash),page:`/artifacts/${encodeURIComponent(n.id)}`}:WM(`not_image`)}function qM(e,t){let n=jM(e.kind,t),r=n.file;if(r&&Mn.includes(r.mediaType))return n.mode===`image`||n.mode===`download`?r:void 0}function JM(e){let t=e.now??Date.now,n=e.ttlMs??3e4,r=jn(e.limit??3),i=new Map;return{resolve(a){let o=`${a.id}/${a.rev??``}`,s=i.get(o);if(s&&t()-s.at<=n)return s.answer;let c=r.acquire().then(async t=>{try{return await KM(a,e.reader)}finally{t()}});return i.set(o,{at:t(),answer:c}),c}}}var YM={text:`No longer available from this artifact`,retry:!1},XM={text:`Artifacts aren't available on this hub`,retry:!1};function ZM(e,t){return t===`not_found`||t===void 0&&e===404?{...YM}:t===`unsupported`||t===void 0&&e===422?{...XM}:Ln(e,t)}var QM=I(`<a class=md-image target=_blank rel="noopener noreferrer">`),$M=I(`<span class=md-artifact><a class=md-artifact-link title="Open the artifact">`),eN=()=>new W(404,`No such artifact`),tN=JM({reader:{async artifact(e){let t=yM(await G(uM(e)));if(!t)throw eN();return t},async revision(e,t){let n=SM(await G(fM(e,t)));if(!n)throw eN();return n}}}),nN={not_found:`Image (artifact not found)`,not_image:`Artifact (not an image)`,too_large:`Image (too large to show inline)`,error:`Image (couldn't load the artifact)`};function rN(e){let[t]=d(()=>UM(e.href),e=>tN.resolve(e)),r=()=>{let e=t.state===`ready`?t():void 0;return e?.ok?e:void 0},i=t=>({key:`artifact:${t.artifactID}:${t.revisionID}:${t.file.hash}`,name:e.alt||t.title||`image`,mime:t.file.mediaType,src:t.src,bytes:t.file.bytes,download:t.src}),a=t=>(()=>{var n=QM();return b(n,`title`,t),y(n,()=>e.alt||`image`),s(()=>b(n,`href`,e.href)),n})();return n(v,{get fallback(){return a(t.state===`ready`&&!t().ok?nN[t().reason]:`Image (opens in a new tab)`)},get children(){return n(o,{get when(){return r()},children:e=>{let t=C(()=>i(e()));return(()=>{var r=$M(),i=r.firstChild;return y(r,n(zn,{get images(){return[t()]},children:e=>n(Fn,{get image(){return t()},class:`md-media`,explain:ZM,onOpen:()=>e(t().key)})}),i),y(i,()=>e().title||`Artifact`),s(t=>{var n=e().artifactID,a=e().page;return n!==t.e&&b(r,`data-artifact`,t.e=n),a!==t.t&&b(i,`href`,t.t=a),t},{e:void 0,t:void 0}),r})()}})}})}var iN=e=>`/api/media/remote?url=${encodeURIComponent(e)}`;function aN(e,t){let n;try{n=new URL(e,t.origin)}catch{return{kind:`invalid`}}if(n.origin===new URL(t.origin).origin)return{kind:`same-origin`};if(n.protocol!==`http:`&&n.protocol!==`https:`)return{kind:`invalid`};let r=mw(n.href),i=r??n.host.replace(/\.(?=:|$)/,``),a=gw(i);if(!t.enabled)return{kind:`off`,host:i,unicode:a,url:e};let o=n.username!==``||n.password!==``;return r&&!o&&(hw(t.allowlist,r)||t.sessionHosts.includes(r))?{kind:`auto`,host:r,src:iN(e)}:{kind:`card`,host:i,unicode:a,src:iN(e),url:e}}var oN=I(`<span class=remote-image>`),sN=I(`<span class=remote-card-unicode>(<!>)`),cN=I(`<span class=remote-card-alt>`),lN=I(`<button type=button class="btn small">Always allow `),uN=I(`<span class=remote-card-actions><button type=button class="btn small">Load image`),dN=I(`<button type=button class=remote-card-session>Load all from this domain in this session`),fN=I(`<span class=remote-card><span class=remote-card-head><span class=remote-card-domain></span></span><button type=button class=remote-card-url>`),pN=I(`<span class=remote-card-off>Web images are turned off on this hub`),mN=c(``),hN=e=>aN(e,{origin:location.origin,allowlist:[],sessionHosts:[],enabled:!0}).kind!==`same-origin`,gN=(e,t=64)=>{let n=e.replace(/^https?:\/\//i,``);return n.length>t?`${n.slice(0,t-21)}…${n.slice(-20)}`:n};function _N(e){let t=le(mN),[i,a]=u(!1),[c,d]=u(!1),[f,p]=u(!1),m=C(()=>{let n=Sw();return aN(e.href,{origin:location.origin,allowlist:n?.allowlist??[],sessionHosts:Ow(t),enabled:n?.remoteFetch!==!1})}),h=()=>{let e=m();return e.kind===`card`||e.kind===`off`?e:void 0},g=()=>{let e=m();return e.kind===`auto`||e.kind===`card`&&i()?e.src:void 0},_=()=>e.alt||h()?.host||`image`,x=async e=>{p(!0);try{await Tw(e),q(`Images from ${e} now load at once`)}catch(t){q(`Could not allow ${e}: ${U(t)}`,`err`)}finally{p(!1)}};return(()=>{var i=oN();return y(i,n(v,{get children(){return[n(o,{get when(){return g()},children:e=>{let t={key:e(),name:_(),mime:`image/*`,src:e()};return n(zn,{images:[t],children:e=>n(Fn,{image:t,class:`md-media`,onOpen:()=>e(t.key)})})}}),n(o,{get when(){return h()},children:i=>(()=>{var o=fN(),u=o.firstChild,p=u.firstChild,m=u.nextSibling;return y(u,n(L,{name:`image`}),p),y(p,()=>i().host),y(u,n(l,{get when(){return i().unicode!==i().host},get children(){var e=sN(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,()=>i().unicode,t),e}}),null),m.$$click=()=>d(!c()),y(m,(()=>{var e=r(()=>!!c());return()=>e()?i().url:gN(i().url)})()),y(o,n(l,{get when(){return e.alt},get children(){var t=cN();return y(t,()=>e.alt),t}}),null),y(o,n(l,{get when(){return i().kind===`card`},get fallback(){return pN()},get children(){return[(()=>{var e=uN(),t=e.firstChild;return t.$$click=()=>a(!0),y(e,n(l,{get when(){return!i().host.includes(`:`)},get children(){var e=lN();return e.firstChild,e.$$click=()=>void x(i().host),y(e,()=>i().host,null),s(()=>e.disabled=f()),e}}),null),e})(),n(l,{get when(){return!i().host.includes(`:`)},get children(){var e=dN();return e.$$click=()=>kw(t,i().host),e}})]}}),null),s(e=>{var t=i().url,n=i().kind,r=c(),a=`Web address: ${i().url}`;return t!==e.e&&b(o,`title`,e.e=t),n!==e.t&&b(o,`data-state`,e.t=n),r!==e.a&&b(m,`aria-expanded`,e.a=r),a!==e.o&&b(m,`aria-label`,e.o=a),e},{e:void 0,t:void 0,a:void 0,o:void 0}),o})()})]}})),s(t=>{var n=e.alt,r=m().host;return n!==t.e&&b(i,`data-alt`,t.e=n),r!==t.t&&b(i,`data-host`,t.t=r),t},{e:void 0,t:void 0}),i})()}z([`click`]);var vN=e=>`/api/media/unfurl?url=${encodeURIComponent(e)}`;function yN(e,t){if(!t.enabled)return{kind:`none`};let n;try{n=new URL(e,t.origin)}catch{return{kind:`none`}}if(n.protocol!==`http:`&&n.protocol!==`https:`||n.origin===new URL(t.origin).origin||n.username!==``||n.password!==``)return{kind:`none`};let r=mw(n.href);return r?{kind:hw(t.allowlist,r)?`auto`:`tap`,host:r,url:n.href}:{kind:`none`}}function bN(e,t){for(let n of e)n.type===`link`?t.push(n.href):(n.type===`strong`||n.type===`em`||n.type===`del`||n.type===`mark`)&&bN(n.children,t)}function xN(e,t,n={}){let r=new Set,i=new Set,a=new Map;if(n.streaming||!t.enabled)return{auto:r,tap:i,cards:a};let o=(e,n)=>{for(let o of n){let n=yN(o,t);if(n.kind===`none`||r.has(n.url)||i.has(n.url))continue;n.kind===`auto`&&r.size<3?r.add(n.url):i.add(n.url);let s=a.get(e)??[];s.push(n.url),a.set(e,s)}},s=e=>{for(let t of e){let e=[];if(t.type===`paragraph`||t.type===`heading`)bN(t.children,e);else if(t.type===`table`)for(let n of[t.head,...t.rows])for(let t of n)bN(t,e);else if(t.type===`list`)for(let e of t.items)s(e.blocks);else t.type===`quote`&&s(t.blocks);e.length&&o(t,e)}};return s(e),{auto:r,tap:i,cards:a}}function SN(e,t){if(typeof e!=`string`||!e)return;let n=aN(e,{origin:t.origin,allowlist:t.allowlist,sessionHosts:[],enabled:t.enabled});return n.kind===`auto`?n.src:void 0}function CN(e,t){return t===`not_html`||e===415?{text:`No preview: not a web page`,retry:!1}:t===`disabled`?{text:`Link previews are turned off on this hub`,retry:!1}:t===`bad_url`||e===400?{text:`This link can't be previewed`,retry:!1}:t===`refused`||e===403?{text:`No preview: that address is not allowed`,retry:!1}:t===`rate_limited`||e===429?{text:`Too many previews right now: try again`,retry:!0}:t===`timeout`||e===504?{text:`No preview: the site didn't answer in time`,retry:!0}:t===`upstream`||e===502?{text:`No preview: couldn't reach the site`,retry:!0}:e===0?{text:`Couldn't load the preview (offline?)`,retry:!0}:{text:`Couldn't load the preview`,retry:!0}}var wN=class extends Error{reason;status;code;constructor(e,t=0,n){super(e.text),this.reason=e,this.status=t,this.code=n}},TN=256,EN={title:200,description:300,siteName:100},DN=(e,t)=>new wN(CN(e,t),e,t),ON=/[\u0000-\u001f\u007f-\u009f\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/g;function kN(e,t){if(typeof e!=`string`)return;let n=e.replace(ON,``).trim();return n?n.length>t?`${n.slice(0,t-1)}…`:n:void 0}function AN(e,t){let n=e&&typeof e==`object`?e:{},r=typeof n.url==`string`&&/^https?:\/\//i.test(n.url)?n.url:t,i=kN(n.title,EN.title),a=kN(n.description,EN.description),o=kN(n.siteName,EN.siteName),s=typeof n.image==`string`&&/^https?:\/\//i.test(n.image)?n.image:void 0;return{url:r,...i?{title:i}:{},...a?{description:a}:{},...o?{siteName:o}:{},...s?{image:s}:{}}}function jN(e={}){let t=e.fetch??((...e)=>fetch(...e)),n=e.slots??jn(3),r=e.timeoutMs??2e4,i=new Map,a=new Map,o=new Map;async function s(e){let i=await n.acquire(),a=new AbortController,o=!1,s=setTimeout(()=>(o=!0,a.abort()),r);try{let n;try{n=await t(vN(e),{credentials:`same-origin`,referrerPolicy:`no-referrer`,signal:a.signal})}catch{throw o?DN(504,`timeout`):DN(0)}let r=await n.json().catch(()=>void 0);if(!n.ok)throw DN(n.status,typeof r?.code==`string`?r.code:void 0);if(!r||typeof r!=`object`)throw DN(500);return AN(r,e)}finally{clearTimeout(s),i()}}return{load(e){let t=i.get(e);if(t)return Promise.resolve(t);let n=a.get(e);if(n)return Promise.reject(n);let r=o.get(e);if(r)return r;let c=s(e).then(t=>(o.delete(e),i.set(e,t),i.size>TN&&i.delete(i.keys().next().value),t),t=>{o.delete(e);let n=t instanceof wN?t:DN(0);throw a.set(e,n),n});return o.set(e,c),c},forget(e){a.delete(e)}}}var MN=I(`<button type=button class=link-preview-btn>`),NN=I(`<div class=link-cards>`),PN=I(`<div class=link-card>`),FN=I(`<span class=link-card-loading>Loading a preview of <!>…`),IN=I(`<span class=link-card-title>`),LN=I(`<span class=link-card-desc>`),RN=I(`<a class=link-card-link target=_blank rel="noopener noreferrer"><span class=link-card-site>`),zN=I(`<button type=button class="btn small">Retry`),BN=I(`<span class=link-card-failed><span class=link-card-note>`),VN=jN({slots:On}),HN=c(()=>void 0);function UN(e){let t=le(HN),r=C(()=>{let n=t();if(!n)return;let r=yN(e.href,n.context);return r.kind!==`none`&&n.plan.tap.has(r.url)&&!n.tapped.has(r.url)?r:void 0});return n(l,{get when(){return r()},children:e=>(()=>{var r=MN();return r.$$click=()=>t()?.tap(e().url),y(r,n(L,{name:`search`})),s(t=>{var n=`Preview ${e().host}`,i=`Preview ${e().host}`;return n!==t.e&&b(r,`aria-label`,t.e=n),i!==t.t&&b(r,`title`,t.t=i),t},{e:void 0,t:void 0}),r})()})}function WN(e){let t=le(HN),r=C(()=>{let n=t();return(n?.plan.cards.get(e.block)??[]).filter(e=>n.plan.auto.has(e)||n.tapped.has(e))});return n(l,{get when(){return r().length},get children(){var e=NN();return y(e,n(m,{get each(){return r()},children:e=>n(GN,{url:e,get auto(){return t()?.plan.auto.has(e)===!0},context:()=>t()?.context})})),e}})}function GN(e){let[r,i]=u({at:`waiting`}),[a,c]=u(!e.auto),d,f=!0;M(()=>f=!1);let p=()=>{try{return new URL(e.url).hostname}catch{return e.url}};fe(()=>{if(a())return;if(typeof IntersectionObserver>`u`)return void c(!0);let e=new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&c(!0),{rootMargin:`300px 0px`});e.observe(d),M(()=>e.disconnect())});let m=()=>{i({at:`loading`}),VN.load(e.url).then(e=>f&&i({at:`shown`,preview:e}),e=>{if(!f)return;let t=e instanceof wN?e.reason:{text:`Couldn't load the preview`,retry:!0};i({at:`failed`,...t})})};x(()=>{a()&&r().at===`waiting`&&m()});let h=()=>{VN.forget(e.url),m()},g=()=>{let e=r();return e.at===`shown`?e.preview:void 0},_=()=>{let e=r();return e.at===`failed`?e:void 0},S=C(()=>{let t=g(),n=e.context();return t&&n?SN(t.image,n):void 0});return(()=>{var i=PN(),a=d;return typeof a==`function`?t(a,i):d=i,y(i,n(v,{get fallback(){return(()=>{var e=FN(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,p,t),e})()},get children(){return[n(o,{get when(){return g()},children:t=>[(()=>{var r=RN(),i=r.firstChild;return y(i,()=>t().siteName??p()),y(r,n(l,{get when(){return t().title},get children(){var e=IN();return y(e,()=>t().title),e}}),null),y(r,n(l,{get when(){return t().description},get children(){var e=LN();return y(e,()=>t().description),e}}),null),s(t=>{var n=e.url,i=e.url;return n!==t.e&&b(r,`href`,t.e=n),i!==t.t&&b(r,`title`,t.t=i),t},{e:void 0,t:void 0}),r})(),n(l,{get when(){return S()},children:e=>n(Fn,{get image(){return{key:e(),name:t().title??p(),mime:`image/*`,src:e()}},class:`link-card-image`})})]}),n(o,{get when(){return _()},children:e=>(()=>{var t=BN(),r=t.firstChild;return y(r,()=>e().text),y(t,n(l,{get when(){return e().retry},get children(){var e=zN();return e.$$click=h,e}}),null),t})()})]}})),s(t=>{var n=e.url,a=r().at;return n!==t.e&&b(i,`data-url`,t.e=n),a!==t.t&&b(i,`data-state`,t.t=a),t},{e:void 0,t:void 0}),i})()}z([`click`]);var KN=I(`<span class=md-image>`),qN=I(`<a class=md-image target=_blank rel="noopener noreferrer"title="Image (opens in a new tab)">`),JN=I(`<br>`),YN=I(`<code class=inline-code>`),XN=I(`<a rel="noopener noreferrer">`),ZN=I(`<div><div class=code-head><span class=code-lang></span><button type=button class=code-btn></button><button type=button class=code-btn></button></div><pre class=code><code>`),QN=I(`<span>`),$N=I(`<hr>`),eP=I(`<p>`),tP=I(`<input type=checkbox disabled>`),nP=I(`<li>`),rP=I(`<blockquote>`),iP=I(`<div class=table-wrap><table><thead><tr></tr></thead><tbody>`),aP=I(`<th>`),oP=I(`<tr>`),sP=I(`<td>`),cP=I(`<div class=md>`),[lP,uP]=u(),dP=!1;function fP(){dP||(dP=!0,Hn(()=>import(`./highlight-y4rJE6Tt.js`).then(e=>uP({run:e.highlight,languageOf:e.languageOf}),()=>dP=!1),[]))}var pP=65536;function mP(e,t){fP();let n=lP();return!n||!e||t.length>pP||!n.languageOf(e)?[{text:t}]:n.run(t,e)}function hP(e){let t=le(CP),r=C(()=>{let n=t(),r=n&&!n.streaming&&!e.inLink?Jj(e.node):void 0;return n&&r!==void 0?{sessionID:n.sessionID,messageID:n.messageID,path:r,waiting:n.waiting}:void 0});return n(l,{get when(){return r()},children:e=>n(oM,{get target(){return e()},get waiting(){return e().waiting},inline:!0})})}var gP=c(()=>void 0);function _P(e){let t=le(gP),i=C(()=>An(e.node,t()?.images)),a=()=>e.node.alt||`image`;return n(v,{get fallback(){return(()=>{var e=KN();return y(e,a),e})()},get children(){return[n(o,{get when(){return r(()=>!!(i().kind===`remote`&&hN(i().href)))()&&i()},children:t=>n(_N,{get href(){return t().href},get alt(){return e.node.alt}})}),n(o,{get when(){return r(()=>i().kind===`local`)()&&i()},children:r=>n(Fn,{get image(){return{...r().image,name:e.node.alt||r().image.name}},class:`md-media`,onOpen:()=>t()?.open(r().image.key)})}),n(o,{get when(){return r(()=>i().kind===`artifact`)()&&i()},children:t=>n(rN,{get href(){return t().href},get alt(){return e.node.alt}})}),n(o,{get when(){return r(()=>i().kind===`artifact`||i().kind===`remote`)()&&i()},children:e=>(()=>{var t=qN();return y(t,a),s(()=>b(t,`href`,e().href)),t})()})]}})}function vP(e){return n(g,{get each(){return e.nodes},children:t=>n(v,{get children(){return[n(o,{get when(){return r(()=>t().type===`text`)()&&t()},children:e=>r(()=>e().text)}),n(o,{get when(){return t().type===`br`},get children(){return JN()}}),n(o,{get when(){return r(()=>t().type===`code`)()&&t()},children:r=>[(()=>{var e=YN();return y(e,()=>r().text),e})(),n(hP,{get node(){return t()},get inLink(){return e.inLink}})]}),n(o,{get when(){return r(()=>t().type===`link`)()&&t()},children:r=>[(()=>{var e=XN();return y(e,n(vP,{get nodes(){return r().children},inLink:!0})),s(t=>{var n=r().href,i=r().href.startsWith(`/`)?void 0:`_blank`;return n!==t.e&&b(e,`href`,t.e=n),i!==t.t&&b(e,`target`,t.t=i),t},{e:void 0,t:void 0}),e})(),n(UN,{get href(){return r().href}}),n(hP,{get node(){return t()},get inLink(){return e.inLink}})]}),n(o,{get when(){return r(()=>t().type===`image`)()&&t()},children:e=>n(_P,{get node(){return e()}})}),n(o,{get when(){return r(()=>`children`in t())()&&t()},children:r=>[n(D,{get component(){return{strong:`strong`,em:`em`,del:`del`,mark:`mark`}[r().type]??`span`},get children(){return n(vP,{get nodes(){return r().children},get inLink(){return e.inLink}})}}),n(l,{get when(){return r().type===`label`},get children(){return n(hP,{get node(){return t()},get inLink(){return e.inLink}})}})]})]}})})}async function yP(e){try{return await navigator.clipboard.writeText(e),!0}catch{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}}function bP(e){let[t,r]=u(!1),[i,a]=u(!1),o;M(()=>clearTimeout(o)),fP();let c=C(()=>{let t=lP();return!t||!e.lang||e.text.length>pP||!t.languageOf(e.lang)?[{text:e.text}]:t.run(e.text,e.lang)}),d=()=>e.lang||`text`;return(()=>{var u=ZN(),f=u.firstChild,p=f.firstChild,m=p.nextSibling,h=m.nextSibling,_=f.nextSibling,v=_.firstChild;return y(p,d),y(f,()=>e.actions,m),m.$$click=()=>a(!i()),y(m,()=>i()?`No wrap`:`Wrap`),h.$$click=async()=>{await yP(e.text)&&(r(!0),clearTimeout(o),o=setTimeout(()=>r(!1),1500))},y(h,()=>t()?`Copied`:`Copy`),y(v,n(g,{get each(){return c()},children:e=>n(l,{get when(){return e().kind},get fallback(){return e().text},get children(){var t=QN();return y(t,()=>e().text),s(()=>k(t,`tok-${e().kind}`)),t}})})),s(n=>{var r=`code-block${i()?` wrap`:``}`,a=i(),o=i()?`Scroll long lines`:`Wrap long lines`,s=t()?`Copied`:`Copy ${d()} code`,c=e.lang||void 0;return r!==n.e&&k(u,n.e=r),a!==n.t&&b(m,`aria-pressed`,n.t=a),o!==n.a&&b(m,`title`,n.a=o),s!==n.o&&b(h,`aria-label`,n.o=s),c!==n.i&&b(_,`data-lang`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),u})()}var xP=E(()=>Hn(()=>import(`./Diagram-B4HdUxw0.js`),__vite__mapDeps([0,1,2,3,4,5,6]))),SP=c(()=>void 0),CP=c(()=>void 0);function wP(e){let t=e.at(-1);if(t){if(t.type===`code`)return t;if(t.type===`quote`)return wP(t.blocks);if(t.type===`list`)return wP(t.items.at(-1)?.blocks??[])}}function TP(e){let t=le(SP),i=le(CP),a=C(()=>{let n=i(),r=t()===e.block?void 0:n?.number(e.block);return n&&r!==void 0?{sessionID:n.sessionID,messageID:n.messageID,block:r,waiting:n.waiting}:void 0}),o=()=>n(bP,{get lang(){return e.block.lang},get text(){return e.block.text},get actions(){return n(l,{get when(){return a()},children:e=>n(oM,{get target(){return e()},get waiting(){return e().waiting}})})}});return n(l,{get when(){return r(()=>!!Vn(e.block.lang))()&&t()!==e.block},get fallback(){return o()},get children(){return n(f,{get fallback(){return o()},get children(){return n(xP,{get lang(){return e.block.lang},get text(){return e.block.text}})}})}})}var EP={left:`left`,center:`center`,right:`right`};function DP(e){return n(g,{get each(){return e.blocks},children:e=>n(v,{get children(){return[n(o,{get when(){return r(()=>e().type===`paragraph`)()&&e()},children:e=>[(()=>{var t=eP();return y(t,n(vP,{get nodes(){return e().children}})),t})(),n(WN,{get block(){return e()}})]}),n(o,{get when(){return r(()=>e().type===`heading`)()&&e()},children:e=>[n(D,{get component(){return`h${Math.min(6,e().level+2)}`},get children(){return n(vP,{get nodes(){return e().children}})}}),n(WN,{get block(){return e()}})]}),n(o,{get when(){return r(()=>e().type===`list`)()&&e()},children:e=>n(D,{get component(){return e().ordered?`ol`:`ul`},get start(){return r(()=>!!(e().ordered&&e().start!==1))()?e().start:void 0},get class(){return e().loose?`loose`:void 0},get children(){return n(g,{get each(){return e().items},children:e=>(()=>{var t=nP();return y(t,n(l,{get when(){return e().checked!==void 0},get children(){var t=tP();return s(()=>b(t,`aria-label`,e().checked?`Done`:`Not done`)),s(()=>t.checked=e().checked),t}}),null),y(t,n(DP,{get blocks(){return e().blocks}}),null),s(()=>k(t,e().checked===void 0?void 0:`task`)),t})()})}})}),n(o,{get when(){return r(()=>e().type===`code`)()&&e()},children:e=>n(TP,{get block(){return e()}})}),n(o,{get when(){return r(()=>e().type===`quote`)()&&e()},children:e=>(()=>{var t=rP();return y(t,n(DP,{get blocks(){return e().blocks}})),t})()}),n(o,{get when(){return r(()=>e().type===`table`)()&&e()},children:e=>[(()=>{var t=iP(),r=t.firstChild.firstChild,i=r.firstChild,a=r.nextSibling;return y(i,n(g,{get each(){return e().head},children:(t,r)=>(()=>{var i=aP();return y(i,n(vP,{get nodes(){return t()}})),s(t=>h(i,e().align[r]?{"text-align":EP[e().align[r]]}:void 0,t)),i})()})),y(a,n(g,{get each(){return e().rows},children:t=>(()=>{var r=oP();return y(r,n(g,{get each(){return t()},children:(t,r)=>(()=>{var i=sP();return y(i,n(vP,{get nodes(){return t()}})),s(t=>h(i,e().align[r]?{"text-align":EP[e().align[r]]}:void 0,t)),i})()})),r})()})),t})(),n(WN,{get block(){return e()}})]}),n(o,{get when(){return e().type===`rule`},get children(){return $N()}})]}})})}function OP(e){let t=C(()=>aj(e.text,{streaming:e.streaming})),r=C(()=>e.streaming&&kn(e.text)?wP(t()):void 0),i=C(()=>e.preview?new Map(Hj(t()).map((e,t)=>[e,t])):void 0),a=C(()=>{let t=e.preview,n=i();if(t&&n)return{sessionID:t.sessionID,messageID:t.messageID,waiting:t.waiting===!0,streaming:e.streaming===!0,number:e=>n.has(e)?t.base+n.get(e):void 0}}),[o,s]=u(new Set),c=C(()=>{if(!e.links)return;let n=Sw();if(!n)return;let r={origin:location.origin,allowlist:n.allowlist,enabled:n.remoteFetch!==!1};return{context:r,plan:xN(t(),r,{streaming:e.streaming}),tapped:o(),tap:e=>s(new Set([...o(),e]))}}),d=i=>n(HN.Provider,{value:c,get children(){return n(gP.Provider,{value:()=>i&&e.images?.length?{images:e.images,open:i}:void 0,get children(){return n(SP.Provider,{value:r,get children(){return n(CP.Provider,{value:a,get children(){return n(DP,{get blocks(){return t()}})}})}})}})}}),f=C(()=>Pn(t(),e.images));return(()=>{var t=cP();return y(t,n(l,{get when(){return e.images?.length},get fallback(){return d()},get children(){return n(zn,{get images(){return f()},children:e=>d(e)})}})),t})()}z([`click`]);var kP=I(`<div class=dialog-head><h2 id=setup-machine-title>Set up Hub on a machine`),AP=I(`<label class="sm-field sm-root"><span class=sm-label>Workspace folder</span><input type=text class=mono autocapitalize=off autocomplete=off aria-describedby=setup-machine-root-hint><span id=setup-machine-root-hint class="small muted">Where sessions started from here run on the machine<!>. Empty: <!>.`),jP=I(`<label class="check sm-activate"><input type=checkbox><span>Start services now<span class="small muted block">Loads the machine's Hub services right away. Off: they are installed, and the installer prints how to start them.`),MP=I(`<div class="dialog-body setup-machine"><p id=setup-machine-intro class="small muted">Run this on the machine. It installs hubctl, then waits for you to approve the machine here (Settings → Machines & devices → Approvals).</p><fieldset class=sm-field><legend>Operating system</legend><div class=sm-seg></div></fieldset><fieldset class=sm-field><legend>What to install</legend><div class=sm-profiles></div></fieldset><div class=sm-command-box><button type=button class="btn primary sm-copy"aria-label="Copy command"> </button></div><p class="small muted"aria-live=polite>`),NP=I(`<dialog class="dialog setup-machine-dialog"aria-labelledby=setup-machine-title aria-describedby=setup-machine-intro data-setup-machine>`),PP=I(`<label class=sm-seg-item><input type=radio name=setup-os>`),FP=I(`<label class=sm-profile><input type=radio name=setup-profile><span class=grow><span class=name></span><span class="small muted">`),IP=I(`<p class="error small"role=alert>`),LP=I(`<code class=sm-command data-setup-command>`),RP=`hub.setupMachine.os`,zP=`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`,[BP,VP]=u();function HP(e={}){BP()||VP(e)}var UP=()=>{try{return localStorage.getItem(RP)??void 0}catch{return}};function WP(){let e,i,[a,o]=u(`linux`),[c,d]=u(`session-only`),[f,p]=u(``),[h,g]=u(!1),[_,v]=u(!1),S,w=()=>VP(void 0);x(()=>{let t=BP();e&&(t&&!e.open?(i=t.returnTo?.()??document.activeElement,o(RA(navigator,UP())),d(`session-only`),p(``),g(!1),v(!1),e.showModal(),queueMicrotask(()=>e?.querySelector(`input[name=setup-os]:checked`)?.focus())):!t&&e.open&&(e.close(),i?.isConnected&&i.focus(),i=void 0))});let T=e=>{o(e),zA(e,c())||d(`session-only`);try{localStorage.setItem(RP,e)}catch{}},E=()=>X()?.publicURL??location.origin,D=C(()=>WA({origin:E(),os:a(),profile:c(),root:f().trim(),activate:h()})),O=()=>a()===`windows`,k=()=>c()===`launch-node`,A=()=>c()!==`session-only`,j=()=>k()&&!D().ok,M=async()=>{let e=D();e.ok&&(await yP(e.command)?(q(`Command copied`),v(!0),clearTimeout(S),S=setTimeout(()=>v(!1),2e3)):q(`Couldn't copy: select the command and copy it`,`err`))};return(()=>{var i=NP();i.$$keydown=t=>{if(t.key!==`Tab`||!e)return;let n=[...e.querySelectorAll(zP)].filter(e=>!(e instanceof HTMLInputElement&&e.type===`radio`&&!e.checked));if(!n.length)return;let r=n[0],i=n[n.length-1];t.shiftKey&&document.activeElement===r?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),r.focus())},i.$$click=t=>t.target===e&&w(),i.addEventListener(`cancel`,e=>{e.preventDefault(),w()});var o=e;return typeof o==`function`?t(o,i):e=i,y(i,n(l,{get when(){return BP()},get children(){return[(()=>{var e=kP();return e.firstChild,y(e,n(F,{icon:`close`,label:`Close`,onClick:w}),null),e})(),(()=>{var e=MP(),t=e.firstChild.nextSibling,i=t.firstChild.nextSibling,o=t.nextSibling,u=o.firstChild.nextSibling,v=o.nextSibling,x=v.firstChild,S=x.firstChild,C=v.nextSibling;return y(i,n(m,{each:jA,children:e=>(()=>{var t=PP(),n=t.firstChild;return n.addEventListener(`change`,()=>T(e)),n.value=e,y(t,()=>MA[e],null),s(()=>t.classList.toggle(`on`,a()===e)),s(()=>n.checked=a()===e),t})()})),y(u,n(m,{get each(){return BA(a())},children:e=>(()=>{var t=FP(),n=t.firstChild,i=n.nextSibling.firstChild,o=i.nextSibling;return n.addEventListener(`change`,()=>d(e.id)),y(i,()=>e.label),y(o,(()=>{var t=r(()=>!!e.comingSoon);return()=>t()?`Coming soon on ${MA[a()]}`:e.description})()),s(r=>{var i=c()===e.id,a=!!e.comingSoon,o=e.comingSoon;return i!==r.e&&t.classList.toggle(`on`,r.e=i),a!==r.t&&t.classList.toggle(`disabled`,r.t=a),o!==r.a&&(n.disabled=r.a=o),r},{e:void 0,t:void 0,a:void 0}),s(()=>n.value=e.id),s(()=>n.checked=c()===e.id),t})()})),y(e,n(l,{get when(){return k()},get children(){var e=AP(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,t.$$input=e=>p(e.currentTarget.value),b(t,`placeholder`,NA),b(t,`spellcheck`,!1),y(n,()=>O()?` (C:\\Users\\you\\projects, C:/… or ~/…)`:``,r),y(n,NA,i),s(()=>b(t,`aria-invalid`,j()?`true`:void 0)),s(()=>t.value=f()),e}}),v),y(e,n(l,{get when(){return A()},get children(){var e=jP(),t=e.firstChild;return t.addEventListener(`change`,e=>g(e.currentTarget.checked)),s(()=>t.checked=h()),e}}),v),y(v,n(l,{get when(){return r(()=>!!D().ok)()&&D().command},get fallback(){return(()=>{var e=IP();return y(e,()=>D().error),e})()},children:e=>(()=>{var t=LP();return y(t,e),t})()}),x),x.$$click=()=>void M(),y(x,n(L,{get name(){return _()?`check`:`copy`}}),S),y(x,()=>_()?`Copied`:`Copy`,null),y(C,n(l,{get when(){return _()},get children(){return[`Copied. Paste it into a terminal on the machine`,r(()=>O()?` (PowerShell)`:``),`.`]}})),s(()=>x.disabled=!D().ok),e})()]}})),i})()}z([`click`,`keydown`,`input`]);var GP=I(`<h3 class=section-title>`),KP=I(`<section class=settings-section>`),qP=I(`<div class=settings-search role=search><input type=search placeholder="Search settings"aria-label="Search settings">`),JP=I(`<nav class=settings-nav aria-label="Settings sections">`),YP=I(`<div class=settings><header class=topbar><h1 class=title></h1></header><div class=settings-body><div class=settings-content><p class="small muted settings-footer">Server <!> · v`),XP=I(`<a>`),ZP=I(`<ul class=settings-results aria-label="Search results">`),QP=I(`<p class="muted settings-empty">No settings match.`),$P=I(`<li><a><span class=name></span><span class="small muted"> · `),eF=I(`<ul class=settings-list aria-label="Settings sections">`),tF=I(`<li><a><span class=grow><span class=name></span><span class="small muted">`),nF=I(`<div class=settings-page><p class=muted>No such settings section.</p><a class="btn small"href=/settings>All settings`),rF=I(`<div class=settings-page><h2 class=settings-page-title>`),iF=I(`<span class=badge-pill>`),aF=I(`<div class="small muted">`),oF=I(`<div class=account-card><span aria-hidden=true></span><div class=grow><div><strong></strong></div><div class="small muted">This device: </div></div><button type=button class="btn danger">Sign out`),sF=I(`<h3>Notify me when`),cF=I(`<p class="small notify-summary"data-notify-summary>`),lF=I(`<p class="small warn">These apply once this device is subscribed.`),uF=I(`<p class=activity-hint data-activity-hint><strong>Know what happens with the screen off:</strong> turn on <em>All done</em> for one notification when a session and its subagents finish, or the <em>Activity digest</em> for one quiet, self-replacing summary per session.`),dF=I(`<h4>When`),fF=I(`<ul class=switches><li id=quiet-hours><label class=switch><span>Quiet hours</span><input type=checkbox>`),pF=I(`<p class="small muted"> muted (⋯ menu of a session → Unmute notifications).`),mF=I(`<p class="small muted">Checking this device…`),hF=I(`<div class=notify-status-row><p role=status></p><details class=notify-details><summary class=small>Details</summary><dl class="notify-facts small muted"><dt>Permission</dt><dd></dd><dt>Service worker</dt><dd></dd><dt>Subscribed on this hub</dt><dd>`),gF=I(`<button type=button class="btn small primary">Enable notifications on this device`),_F=I(`<button type=button class="btn small">Turn off on this device`),vF=I(`<span class=notify-test id=notify-test><select aria-label="Test notification kind"data-test-kind><option value>Basic test</option></select><button type=button class="btn small">Send test notification`),yF=I(`<div class=row-actions>`),bF=I(`<option>`),xF=I(`<p data-test-result>`),SF=I(`<details class=notify-group><summary><h4></h4><span class="small muted notify-group-summary"data-group-summary></span></summary><ul class=switches>`),CF=I(`<div class=quiet-hours><label>At most one per session every <select data-activity-minutes></select></label><span class="small muted">Collapses into one notification per session; respects quiet hours and muted sessions.`),wF=I(`<li><label class=switch><span class=notify-kind><span></span><span class="small muted"></span></span><input type=checkbox>`),TF=I(`<div class=quiet-hours><label>From <input type=time></label><label>to <input type=time></label><span class="small muted">. Hand-offs still come through.`),EF=I(`<ul class=switches><li class=appearance-theme id=set-theme><span id=color-theme>Color theme</span><div class=theme-toggle role=radiogroup aria-labelledby=color-theme></div></li><li class=speed id=set-text-size><label for=text-size>Text size</label><input id=text-size type=range><output for=text-size></output><button type=button class="btn small"aria-label="Reset text size">Reset`),DF=I(`<p class="small muted">On this device. Pinch the conversation or the session list to change it too (a trackpad pinch works on desktop).`),OF=I(`<button type=button role=radio class=theme-choice><span>`),kF=I(`<details class=turn-advanced><summary class=small>Advanced</summary><div class=turn-knobs></div><p class="small muted">Empty: the default. Values outside a field's range are clamped. Slow cap: a score slower than this hands the turn to the timers (it rises to twice the usual score time on a slow device, at most 5 s). A URL query parameter (e.g. ?voiceTurn.threshold=0.6) overrides these until the page reloads without it; “in use” shows what applies.`),AF=I(`<ul class=switches><li class=speed id=set-voice-speed><label for=voice-speed>Voice speed</label><input id=voice-speed type=range><output for=voice-speed></output></li><li id=set-sensitivity><div class=switch><span id=voice-sensitivity>Mic sensitivity</span><div class=chips role=radiogroup aria-labelledby=voice-sensitivity></div></div><p class="small muted">How sure Voice mode must be that you are speaking to it. Low: noisy places (only clear, sustained speech counts). High: quiet rooms and soft voices. On this device; applies at once, also while Voice mode is on.</p></li><li id=set-turn-detection><div class=switch><span id=voice-turn-detection>Turn detection</span><div class=chips role=radiogroup aria-labelledby=voice-turn-detection></div></div><p class="small muted">When Voice mode decides you finished speaking. Timers: a fixed wait after you stop (1 s, 1.6 s when the words sound unfinished). Smart Turn: an on-device audio model (Pipecat Smart Turn v3, 8.7 MB, loaded on first use) scores your intonation at each pause; a confident “finished” sends at once, otherwise it waits (at most 3 s). The Voice bar shows its score. On this device; applies at once.</p></li><li id=set-voice-front><label class=switch><span>Voice front</span><input type=checkbox></label><p class="small muted">On (the default): in Voice mode a fast voice agent answers in front of the session. It says what it understood, then passes your request to the session, which keeps its own agent and model. No spoken “On it.” phrases (the tones stay). Off: Voice mode talks to the session directly, with short spoken replies. If the front is not available, Voice mode talks to the session directly too. The front runs on the session's Voice model (else the machine's <code>voiceModel</code>): pick a fast paid model. On this device; applies the next time Voice mode starts.</p></li><li id=set-cues><label class=switch><span>Progress cues</span><input type=checkbox></label><p class="small muted">In Voice mode: a soft tone when the agent hears you, then short, varied acknowledgements while it works (“On it.”, “One moment.”, “I’ll hand that off.”, “Still on it.” …).</p></li><li id=set-background><label class=switch><span>Keep listening when the screen is off</span><input type=checkbox></label><p class="small muted">Off: the screen stays on while listening. On: lock-screen controls and listening with the screen off. Best effort. Android Chrome usually stops the microphone when the screen turns off; Hub shows when listening is paused and resumes when you unlock. Applies the next time Voice mode starts.`),jF=I(`<button type=button class=chip role=radio>`),MF=I(`<label class=small> <input type=number inputmode=decimal> <output class=muted data-turn-effective>in use: `),NF=I(`<h3>Waiting for approval`),PF=I(`<ul class=list>`),FF=I(`<li><div class=grow><div class=name></div><div class="small muted">Code <!> · requested </div></div><button type=button class="btn small primary">Approve</button><button type=button class="btn small danger">Deny`),IF=I(`<div class=row><p class="small muted grow">Computers connected to this hub. Set one up with a one-line installer (macOS, Linux, Windows).</p><button type=button id=setup-machine class="btn small">Set up a machine`),LF=I(`<p class="small muted">None yet.`),RF=I(`<li><div class=grow><div class=name><span aria-hidden=true></span> </div><div class="small muted"></div></div><button type=button class="btn small danger">Revoke`),zF=I(`<div class=row><p class="small muted grow">Browsers and the Hub app signed in to your account. Add the app on a phone or tablet by scanning a code.</p><button type=button class="btn small">Add app`),BF=I(`<p class="small muted">`),VF=I(`<span class=muted> · this device`),HF=I(`<li><div class=grow><div class=name></div><div class="small muted">last seen </div></div><button type=button class="btn small danger">`),UF=I(`<svg class=qr role=img aria-label="QR code for the app link"shape-rendering=crispEdges><rect width=100% height=100% fill=#fff></rect><path fill=#000>`),WF=I(`<p class="small muted">Expires in <span class=add-app-countdown></span> · single use`),GF=I(`<div class=row><code class="add-app-link grow"></code><button type=button class="btn small">Copy</button><a class="btn small">Open`),KF=I(`<div class=add-app-body><p class=small>In the Hub app, choose <b>Add hub</b> and scan this code, or open the link on the phone with the app. It links the app to your account on <b></b>.</p><p class="small muted">Anyone with this code can sign in as you until it is used or expires; show it only to your own device.`),qF=I(`<div class=add-app-expired><p class="small warn">This code expired.</p><button type=button class="btn small primary">New code`),JF=I(`<div class=row><p class="small muted grow">Use Hub from a phone or tablet: scan a code in the Hub app to link it to your account.</p><button type=button class="btn small">Add app`),YF=I(`<p class="small muted">How your <a href=/teams>teams</a> work with the rest of your sessions.`),XF=I(`<ul class=switches><li id=team-isolation><label class=switch><span class=notify-kind><span>Team isolation</span><span class="small muted">On: sessions seated in a team see only their teams' sessions; your other sessions are hidden from them. Off: they also see your sessions in no team. Your own view is unchanged either way.</span></span><input type=checkbox data-team-isolation>`),ZF=I(`<div class=chips role=group aria-label="Admin sections">`),QF=I(`<p class=error role=alert>`),$F=I(`<div id=admin-machines>`),eI=I(`<p class="small muted">Approving a machine makes it yours. Someone else's machine: let them approve it from their phone with the code OpenCode shows (/approve?code=…).`),tI=I(`<div id=admin-audit>`),nI=I(`<span class=count>`),rI=I(`<button type=button class=chip>`),iI=I(`<p class=muted>No machines are waiting for approval.`),aI=I(`<div class=stack><div class=row><input type=search class=grow placeholder="Search by email or name"aria-label="Search users"><select aria-label=Show></select><select aria-label="Sort by">`),oI=I(`<p class=muted>`),sI=I(`<li class=muted>No users match.`),cI=I(`<span class=badge-pill>Admin`),lI=I(`<span class="badge-pill off">Disabled`),uI=I(`<span class=badge-pill>You`),dI=I(`<li><div class=grow><div class=name></div><div class="small muted"> · <!> · seen `),fI=I(`<button type=button>`),pI=I(`<p class=muted>No machines are connected to this hub yet.`),mI=I(`<li><div class=grow><div class=name><span aria-hidden=true></span> </div><div class="small muted"> · </div></div><button type=button class="btn small danger">Revoke`),hI=I(`<ol class="list audit">`),gI=I(`<p class=muted>Nothing recorded yet.`),_I=I(`<li><div class=grow><div class=name></div><div class="small muted"></div></div><time class="small muted">`);function vI(e){return(()=>{var t=KP();return i(t,_({get id(){return e.id}},()=>e.title?{"aria-labelledby":`h-${e.id}`}:{"aria-label":e.label??e.id}),!1,!0),y(t,n(l,{get when(){return e.title},get children(){var t=GP();return y(t,()=>e.title),s(()=>b(t,`id`,`h-${e.id}`)),t}}),null),y(t,()=>e.children,null),t})()}var yI=2400,bI=3e3;function xI(e){if(!e)return;let t=Date.now()+bI,n=()=>{let r=document.getElementById(e);if(!r)Date.now()<t&&setTimeout(n,60);else{for(let e=r.closest(`details`);e;e=e.parentElement?.closest(`details`)??null)e.open=!0;r.scrollIntoView({block:`center`}),r.classList.add(`settings-hit`),setTimeout(()=>r.classList.remove(`settings-hit`),yI)}};requestAnimationFrame(n)}var SI=e=>vt(!0).find(t=>t.id===e)?.label,CI=!1;function wI(){let t=()=>qn(X()),i=()=>{let e=WS();return e.name===`settings`?e.section:void 0},a=()=>gt(i(),{admin:t(),phone:Z()}),[c,d]=u(``),f=()=>It(c(),bt(t()));x(e(Pt,e=>xI(At(decodeURIComponent(e.hash.slice(1))))));let p=()=>{CI?(CI=!1,history.back()):Vt(`/settings`)},h=()=>(()=>{var e=qP(),t=e.firstChild;return t.$$keydown=e=>{e.key===`Escape`&&d(``);let t=f()[0];e.key===`Enter`&&t&&(d(``),Vt(`/settings/${t.section}#${t.id}`))},t.$$input=e=>d(e.currentTarget.value),s(()=>t.value=c()),e})();return(()=>{var e=YP(),i=e.firstChild,u=i.firstChild,g=i.nextSibling,_=g.firstChild,x=_.firstChild,S=x.firstChild.nextSibling;return S.nextSibling,y(i,n(l,{get when(){return Z()},get children(){return n(l,{get when(){return a()!==`list`},get fallback(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})},get children(){return n(F,{icon:`back`,label:`All settings`,onClick:p})}})}}),u),y(u,(()=>{var e=r(()=>!!(Z()&&a()!==`list`));return()=>e()?SI(a())??`Settings`:`Settings`})()),y(g,n(l,{get when(){return!Z()},get children(){var e=JP();return y(e,h,null),y(e,n(m,{get each(){return vt(t())},children:e=>(()=>{var t=XP();return t.$$click=()=>d(``),y(t,()=>e.label),s(n=>{var r=`/settings/${e.id}`,i=a()===e.id&&!c()?`page`:void 0;return r!==n.e&&b(t,`href`,n.e=r),i!==n.t&&b(t,`aria-current`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e}}),_),y(_,n(l,{get when(){return r(()=>!!Z())()&&a()===`list`},get children(){return h()}}),x),y(_,n(l,{get when(){return!c()},get fallback(){return n(TI,{get results(){return f()},onPick:()=>d(``)})},get children(){return n(v,{get fallback(){return n(DI,{})},get children(){return[n(o,{get when(){return a()===`list`},get children(){return n(EI,{onPick:()=>CI=!0})}}),n(o,{get when(){return r(()=>a()!==`list`)()&&a()},keyed:!0,children:e=>n(OI,{id:e})})]}})}}),x),y(x,()=>X()?.publicURL??location.origin,S),y(x,()=>X()?.version??`?`,null),e})()}function TI(e){return n(l,{get when(){return e.results.length},get fallback(){return QP()},get children(){var t=ZP();return y(t,n(m,{get each(){return e.results},children:t=>(()=>{var n=$P(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.firstChild;return B(r,`click`,e.onPick,!0),y(i,()=>t.label),y(a,()=>SI(t.section),o),y(a,()=>t.description,null),s(()=>b(r,`href`,`/settings/${t.section}#${t.id}`)),n})()})),t}})}function EI(e){return(()=>{var t=eF();return y(t,n(m,{get each(){return vt(qn(X()))},children:t=>(()=>{var r=tF(),i=r.firstChild,a=i.firstChild.firstChild,o=a.nextSibling;return B(i,`click`,e.onPick,!0),y(a,()=>t.label),y(o,()=>t.description),y(i,n(L,{name:`chevron`}),null),s(()=>b(i,`href`,`/settings/${t.id}`)),r})()})),t})()}function DI(){return nF()}function OI(e){return(()=>{var t=rF(),i=t.firstChild;return y(i,()=>SI(e.id)),y(t,n(v,{get children(){return[n(o,{get when(){return e.id===`general`},get children(){return[n(AI,{}),n(MI,{}),n(WI,{})]}}),n(o,{get when(){return e.id===`notifications`},get children(){return n(jI,{})}}),n(o,{get when(){return e.id===`voice`},get children(){return[n(LI,{}),n(ow,{}),n(vI,{id:`speech`,title:`Speech`,get children(){return n(LC,{})}})]}}),n(o,{get when(){return e.id===`media`},get children(){return n(vI,{id:`media-allowlist`,title:`Web images`,get children(){return n(Rw,{})}})}}),n(o,{get when(){return e.id===`machines`},get children(){return[n(BI,{}),n(VI,{})]}}),n(o,{get when(){return e.id===`agents`},get children(){return n(ND,{})}}),n(o,{get when(){return e.id===`concierge`},get children(){return[n(QO,{}),n(vI,{id:`context-cards`,title:`Context cards`,get children(){return n(Fk,{})}})]}}),n(o,{get when(){return e.id===`teams`},get children(){return n(KI,{})}}),n(o,{get when(){return r(()=>e.id===`admin`)()&&qn(X())},get children(){return n(YI,{})}})]}}),null),s(()=>b(t,`data-settings-section`,e.id)),t})()}async function kI(){if(Jn(X()).mode!==`pairing`||await P(`Sign out this device? You will need a new pairing code.`,`Sign out`,{danger:!0})){await(await Rf().catch(()=>void 0))?.unsubscribe().catch(()=>{}),await V(`/api/logout`,{method:`POST`,json:{}}).catch(()=>{});try{as(localStorage)}catch{}Gu(),location.href=`/`}}function AI(){let e=()=>Jn(X());return n(vI,{id:`account`,title:`Account`,get children(){var t=oF(),r=t.firstChild,i=r.nextSibling,a=i.firstChild,o=a.firstChild,c=a.nextSibling;c.firstChild;var u=i.nextSibling;return y(r,()=>e().initial),y(o,()=>e().title),y(a,n(l,{get when(){return e().badge},get children(){var t=iF();return y(t,()=>e().badge),t}}),null),y(i,n(l,{get when(){return e().subtitle},get children(){var t=aF();return y(t,()=>e().subtitle),t}}),c),y(c,()=>X()?.device?.name??`paired`,null),u.$$click=()=>void kI(),s(()=>k(r,`avatar large${e().badge?` admin`:``}`)),t}})}function jI(){let[e,{refetch:t}]=d(Mf,()=>Bf()),[i,a]=u(!1),[o,c]=u(),[f,p]=u(``),[h,g]=u(),[_,v]=u(null),[x,S]=u(),C=()=>x()??T()?.activityMinutes??5,w=()=>e()?qe(e().env):void 0,T=()=>e()?.view,E=()=>h()??T()?.prefs,D=()=>h()?_():T()?.quietHours??null,O=async(e,n)=>{a(!0);try{await e(),n&&q(n)}catch(e){q(U(e),`err`)}finally{a(!1),g(void 0),t()}},A=async e=>{try{let t=await(await V(`/api/push/prefs`,{method:`PUT`,json:e})).json();g(t.prefs),v(t.quietHours??null),t.activityMinutes!==void 0&&S(t.activityMinutes)}catch(e){q(U(e),`err`)}},j=async()=>{c(void 0);try{c(lt(await Wf(f()||void 0)))}catch(e){c({ok:!1,text:U(e)})}};return n(vI,{id:`notifications`,label:`Notifications`,get children(){return[n(l,{get when(){return w()},get fallback(){return mF()},children:t=>[(()=>{var n=hF(),i=n.firstChild,a=i.nextSibling.firstChild.nextSibling.firstChild.nextSibling,o=a.nextSibling.nextSibling,c=o.nextSibling.nextSibling;return y(i,()=>t().message),y(a,(()=>{var t=r(()=>!!e().env.supported);return()=>t()?e().env.permission:`unsupported`})()),y(o,()=>e().env.worker?`registered`:`not registered`),y(c,()=>e().env.hubSubscribed?`yes`:`no`),s(e=>{var n=t().warn?`notify-status warn`:`notify-status ok`,r=t().state;return n!==e.e&&k(i,e.e=n),r!==e.t&&b(i,`data-state`,e.t=r),e},{e:void 0,t:void 0}),n})(),(()=>{var r=yF();return y(r,n(l,{get when(){return t().action===`enable`},get children(){var e=gF();return e.$$click=()=>void O(Hf,`Notifications are on for this device`),s(()=>e.disabled=i()),e}}),null),y(r,n(l,{get when(){return t().action===`disable`},get children(){var e=_F();return e.$$click=()=>void O(Uf,`Notifications are off for this device`),s(()=>e.disabled=i()),e}}),null),y(r,n(l,{get when(){return e().env.hubSubscriptions>0},get children(){var e=vF(),t=e.firstChild;t.firstChild;var r=t.nextSibling;return t.addEventListener(`change`,e=>p(e.currentTarget.value)),y(t,n(m,{each:$t,children:e=>(()=>{var t=bF();return y(t,()=>e.label),s(()=>t.value=e.key),t})()}),null),r.$$click=()=>void j(),s(()=>t.value=f()),e}}),null),r})(),n(l,{get when(){return o()},children:e=>(()=>{var t=xF();return y(t,()=>e().text),s(()=>k(t,e().ok?`small ok`:`small err`)),t})()})]}),n(l,{get when(){return E()},get children(){return[sF(),(()=>{var e=cF();return y(e,()=>be(E())),e})(),n(l,{get when(){return r(()=>!!w())()&&w().state!==`on`},get children(){return lF()}}),n(l,{get when(){return r(()=>`activity`in E()&&!E().activity)()&&!E().done},get children(){return uF()}}),n(m,{get each(){return qt.filter(e=>e.kinds.some(e=>e.key in E()))},children:e=>(()=>{var t=SF(),i=t.firstChild,a=i.firstChild,o=a.nextSibling,c=i.nextSibling;return y(a,()=>e.title),y(o,()=>pt(e.kinds,E())),y(c,n(m,{get each(){return e.kinds.filter(e=>e.key in E())},children:e=>(()=>{var t=wF(),i=t.firstChild.firstChild,a=i.firstChild,o=a.nextSibling,c=i.nextSibling;return y(a,()=>e.label),y(o,()=>e.description),c.addEventListener(`change`,t=>void A({[e.key]:t.currentTarget.checked})),y(t,n(l,{get when(){return r(()=>e.key===`activity`)()&&E().activity},get children(){var e=CF(),t=e.firstChild.firstChild.nextSibling;return t.addEventListener(`change`,e=>void A({activityMinutes:Number(e.currentTarget.value)})),y(t,n(m,{each:ot,children:e=>(()=>{var t=bF();return y(t,e===1?`minute`:`${e} minutes`),s(()=>t.value=String(e)),t})()})),s(()=>t.value=String(C())),e}}),null),s(n=>{var r=`pref-${e.key}`,i=e.key;return r!==n.e&&b(t,`id`,n.e=r),i!==n.t&&b(c,`data-pref`,n.t=i),n},{e:void 0,t:void 0}),s(()=>c.checked=!!E()[e.key]),t})()})),s(()=>b(t,`data-notify-group`,e.title)),t})()}),dF(),(()=>{var e=fF(),t=e.firstChild,r=t.firstChild.firstChild.nextSibling;return r.addEventListener(`change`,e=>void A({quietHours:e.currentTarget.checked?{start:`22:00`,end:`07:00`,timeZone:Zt()}:null})),y(t,n(l,{get when(){return D()},children:e=>(()=>{var t=TF(),n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling,c=o.firstChild;return r.addEventListener(`change`,t=>void A({quietHours:{...e(),start:t.currentTarget.value,timeZone:Zt()}})),a.addEventListener(`change`,t=>void A({quietHours:{...e(),end:t.currentTarget.value,timeZone:Zt()}})),y(o,()=>e().timeZone,c),s(()=>r.value=e().start),s(()=>a.value=e().end),t})()}),null),s(()=>r.checked=!!D()),e})(),n(l,{get when(){return Pf().size},get children(){var e=pF(),t=e.firstChild;return y(e,()=>_n(Pf().size,`session`),t),e}})]}})]}})}function MI(){return n(vI,{id:`appearance`,title:`Appearance`,get children(){return[(()=>{var e=EF(),t=e.firstChild,r=t.firstChild.nextSibling,i=t.nextSibling.firstChild.nextSibling,a=i.nextSibling,o=a.nextSibling;return y(r,n(m,{each:CA,children:e=>(()=>{var t=OF(),n=t.firstChild;return t.$$click=()=>AA(e),y(t,e===`light`?`☀`:e===`dark`?`☾`:`▣`,n),y(n,()=>e[0].toUpperCase()+e.slice(1)),s(()=>b(t,`aria-checked`,OA()===e)),t})()})),i.$$input=e=>yA(Number(e.currentTarget.value)),b(i,`min`,eA),b(i,`max`,tA),b(i,`step`,nA),y(a,()=>uA(gA())),o.$$click=()=>yA(1),s(e=>{var t=uA(gA()),n=gA()===1;return t!==e.e&&b(i,`aria-valuetext`,e.e=t),n!==e.t&&(o.disabled=e.t=n),e},{e:void 0,t:void 0}),s(()=>i.value=gA()),e})(),DF()]}})}var NI={low:`Low`,normal:`Normal`,high:`High`},PI={timers:`Timers (current)`,smart:`Smart Turn (experimental)`},FI={threshold:{label:`Threshold`,step:`0.05`},graceMs:{label:`Grace (ms)`,step:`50`},fallbackMs:{label:`Fallback (ms)`,step:`100`},slowMs:{label:`Slow cap (ms)`,step:`100`}},II=s_.flatMap(e=>FI[e.field]?[{...e,...FI[e.field],placeholder:String(i_[e.field])}]:[]);function LI(){let[e,t]=u(Sy.speed),[r,i]=u(Sy.sensitivity),[a,o]=u(Sy.turnDetection),[c,d]=u(Sy.smartTurn);return n(vI,{id:`voice`,title:`Voice`,get children(){var u=AF(),f=u.firstChild,p=f.firstChild.nextSibling,h=p.nextSibling,g=f.nextSibling,_=g.firstChild.firstChild.nextSibling,v=g.nextSibling,x=v.firstChild,S=x.firstChild.nextSibling;x.nextSibling;var C=v.nextSibling,w=C.firstChild.firstChild.nextSibling,T=C.nextSibling,E=T.firstChild.firstChild.nextSibling,D=T.nextSibling.firstChild.firstChild.nextSibling;return p.$$input=e=>{Sy.speed=Number(e.currentTarget.value),t(Sy.speed)},b(p,`min`,Ba),b(p,`max`,2),b(p,`step`,Va),y(h,()=>Ua(e())),y(_,n(m,{each:iy,children:e=>(()=>{var t=jF();return t.$$click=()=>{Sy.sensitivity=e,i(e)},y(t,()=>NI[e]),s(n=>{var i=r()===e,a=r()===e;return i!==n.e&&b(t,`aria-checked`,n.e=i),a!==n.t&&b(t,`aria-pressed`,n.t=a),n},{e:void 0,t:void 0}),t})()})),y(S,n(m,{each:n_,children:e=>(()=>{var t=jF();return t.$$click=()=>{Sy.turnDetection=e,o(e),p_({mode:e,load:Yg})},y(t,()=>PI[e]),s(n=>{var r=a()===e,i=a()===e;return r!==n.e&&b(t,`aria-checked`,n.e=r),i!==n.t&&b(t,`aria-pressed`,n.t=i),n},{e:void 0,t:void 0}),t})()})),y(v,n(l,{get when(){return a()===`smart`},get children(){var e=kF(),t=e.firstChild.nextSibling;return y(t,n(m,{each:II,children:e=>(()=>{var t=MF(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling.nextSibling;return i.firstChild,y(t,()=>e.label,n),r.addEventListener(`change`,t=>{t.currentTarget.value=Sy.setSmartTurnKnob(e.key,t.currentTarget.value),d(Sy.smartTurn)}),y(i,()=>c()[e.field],null),s(n=>{var i=e.key,a=e.min,o=e.max,s=e.step,c=e.placeholder;return i!==n.e&&b(t,`data-turn-knob`,n.e=i),a!==n.t&&b(r,`min`,n.t=a),o!==n.a&&b(r,`max`,n.a=o),s!==n.o&&b(r,`step`,n.o=s),c!==n.i&&b(r,`placeholder`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),s(()=>r.value=c_(e.key,localStorage.getItem(e.key))??``),t})()})),e}}),null),w.addEventListener(`change`,e=>Sy.front=e.currentTarget.checked),E.addEventListener(`change`,e=>Sy.cues=e.currentTarget.checked),D.addEventListener(`change`,e=>Sy.background=e.currentTarget.checked),s(()=>b(p,`aria-valuetext`,Ua(e()))),s(()=>p.value=e()),s(()=>w.checked=Sy.front),s(()=>E.checked=Sy.cues),s(()=>D.checked=Sy.background),u}})}async function RI(e,t){try{await V(`/api/enrollments/${K(e.userCode)}/${t}`,{method:`POST`,json:{}}),q(t===`approve`?`${e.machineName} approved; it belongs to you`:`Request denied`)}catch(e){q(U(e),`err`)}fd()}function zI(){return n(l,{get when(){return Vl().length},get children(){return[NF(),(()=>{var e=PF();return y(e,n(m,{get each(){return Vl()},children:e=>(()=>{var t=FF(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.firstChild.nextSibling;a.nextSibling;var o=n.nextSibling,s=o.nextSibling;return y(r,()=>e.machineName),y(i,()=>e.userCode,a),y(i,()=>R(e.created,N()),null),o.$$click=()=>void RI(e,`approve`),s.$$click=()=>void RI(e,`deny`),t})()})),e})()]}})}function BI(){let e=async e=>{if(await P(`Revoke ${e.name}? Its OpenCode processes disconnect and it must be connected again.`,`Revoke`,{danger:!0}))try{await V(`/api/machines/${K(e.id)}`,{method:`DELETE`}),q(`${e.name} revoked`)}catch(e){q(U(e),`err`)}};return n(vI,{id:`machines`,title:`Machines`,get children(){return[(()=>{var e=IF(),t=e.firstChild.nextSibling;return t.$$click=()=>HP(),e})(),n(zI,{}),n(l,{get when(){return(Y.machines??[]).length},get fallback(){return LF()},get children(){var t=PF();return y(t,n(m,{get each(){return Y.machines},children:t=>(()=>{var n=RF(),i=n.firstChild,a=i.firstChild,o=a.firstChild;o.nextSibling;var c=a.nextSibling,l=i.nextSibling;return y(a,()=>t.name,null),y(c,(()=>{var e=r(()=>!!t.online);return()=>e()?`online · ${_n(t.processes.length,`OpenCode process`)}`:`offline · seen ${R(t.lastSeen,N())}`})()),l.$$click=()=>void e(t),s(e=>{var n=`online-dot${t.online?` on`:``}`,r=`Revoke machine ${t.name}`;return n!==e.e&&k(o,e.e=n),r!==e.t&&b(l,`aria-label`,e.t=r),e},{e:void 0,t:void 0}),n})()})),t}})]}})}function VI(){let[e,{refetch:t,mutate:i}]=d(()=>G(`/api/devices`).then(e=>e.devices)),[a,o]=u(!1),s=async e=>{if(e.current)return void kI();if(await P(`Revoke ${e.name}?`,`Revoke`,{danger:!0})){try{await V(`/api/devices/${K(e.id)}`,{method:`DELETE`}),q(`${e.name} revoked`)}catch(e){q(U(e),`err`)}t()}};return n(vI,{id:`devices`,title:`Devices`,get children(){return[(()=>{var e=zF(),t=e.firstChild.nextSibling;return t.$$click=()=>o(!0),e})(),n(l,{get when(){return a()},get children(){return n(UI,{get known(){return new Set((e()??[]).map(e=>e.id))},onLinked:e=>i(e),onClose:()=>{o(!1),t()}})}}),n(l,{get when(){return e()},get fallback(){return(()=>{var t=BF();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?U(e.error):`Loading…`})()),t})()},get children(){var t=PF();return y(t,n(m,{get each(){return e()},children:e=>(()=>{var t=HF(),r=t.firstChild,i=r.firstChild,a=i.nextSibling;a.firstChild;var o=r.nextSibling;return y(i,()=>e.name,null),y(i,n(l,{get when(){return e.current},get children(){return VF()}}),null),y(a,()=>R(e.lastSeen,N()),null),o.$$click=()=>void s(e),y(o,()=>e.current?`Sign out`:`Revoke`),t})()})),t}})]}})}var HI=2e3;function UI(e){let[t,r]=u(),[i,a]=u(``),[o,c]=u(Date.now()),d=async()=>{a(``);try{let e=await V(`/api/devices/link`,{method:`POST`,json:{}}),t=await e.json(),n=Date.now();c(n),r({...t,expiresAt:Rk(t.expiresAt,e.headers.get(`date`),n)})}catch(e){a(U(e))}},f=()=>(t()?.expiresAt??0)<=o(),p=()=>{let e=t();return e?Qk(e.url,{ecc:`M`}):void 0},m=setInterval(()=>c(Date.now()),1e3),h=!1,g=setInterval(async()=>{if(!(h||!t()||f())){h=!0;try{let t=(await G(`/api/devices`)).devices,n=Lk(e.known,t);n&&(e.onLinked(t),q(`${n.name} linked`),e.onClose())}catch{}finally{h=!1}}},HI);return M(()=>{clearInterval(m),clearInterval(g)}),d(),n(de,{open:!0,title:`Add the Hub app`,get onClose(){return e.onClose},class:`add-app`,get children(){return n(l,{get when(){return t()},get fallback(){return(()=>{var e=BF();return y(e,()=>i()||`Creating a link code…`),e})()},children:e=>(()=>{var t=KF(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling.nextSibling,a=r.nextSibling;return y(i,()=>e().hub),y(t,n(l,{get when(){return!f()},get fallback(){return(()=>{var e=qF(),t=e.firstChild.nextSibling;return t.$$click=()=>void d(),e})()},get children(){return[(()=>{var e=UF(),t=e.firstChild.nextSibling;return s(n=>{var r=`0 0 ${p().size+8} ${p().size+8}`,i=$k(p(),4);return r!==n.e&&b(e,`viewBox`,n.e=r),i!==n.t&&b(t,`d`,n.t=i),n},{e:void 0,t:void 0}),e})(),(()=>{var t=WF(),n=t.firstChild.nextSibling;return y(n,()=>Ik(e().expiresAt,o())),t})(),(()=>{var t=GF(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return y(n,()=>e().url),r.$$click=()=>void navigator.clipboard?.writeText(e().url).then(()=>q(`Link copied`),()=>q(`Copy failed`,`err`)),s(()=>b(i,`href`,e().url)),t})()]}}),a),t})()})}})}function WI(){let[e,t]=u(),r=async()=>{try{t(new Set((await G(`/api/devices`)).devices.map(e=>e.id)))}catch(e){q(U(e),`err`)}};return n(vI,{id:`add-app`,title:`Add the Hub app`,get children(){return[(()=>{var e=JF(),t=e.firstChild.nextSibling;return t.$$click=()=>void r(),e})(),n(l,{get when(){return e()},children:e=>n(UI,{get known(){return e()},onLinked:()=>{},onClose:()=>t(void 0)})})]}})}var GI=`/api/agent/team-settings`;function KI(){let[e,{mutate:t,refetch:i}]=d(()=>G(GI).then(e=>e.settings)),[a,o]=u(!1),c=async n=>{let r=e();if(!r)return;let a=n.checked;o(!0);try{let e=await(await V(GI,{method:`PUT`,json:{teamIsolation:a,expectedRevision:r.revision}})).json();t(e.settings),q(a?`Team isolation is on`:`Team isolation is off`)}catch(e){n.checked=!a,e instanceof W&&e.status===409?(q(`Team settings changed elsewhere. Showing the current setting; try again.`,`err`),i()):q(U(e),`err`)}finally{o(!1)}};return n(vI,{id:`teams`,label:`Teams`,get children(){return[YF(),n(l,{get when(){return e()},get fallback(){return(()=>{var t=BF();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?`Could not load: ${U(e.error)}`:`Loading…`})()),t})()},children:e=>(()=>{var t=XF(),n=t.firstChild.firstChild.firstChild.nextSibling;return n.addEventListener(`change`,e=>void c(e.currentTarget)),s(()=>n.disabled=a()),s(()=>n.checked=e().teamIsolation),t})()})]}})}var qI=(e,t)=>Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[],JI=e=>e.id===`local`?`Hub owner (pairing)`:e.name||e.email||e.id;function YI(){let e=()=>Xn(X()),[t,r]=u(e()[0]?.[0]??`machines`),[i,a]=u(``);x(()=>{let t=Pt().hash,n=t===`#admin-machines`?`machines`:t===`#admin-audit`?`audit`:void 0;n&&e().some(([e])=>e===n)&&r(n)});let o=async(e,t)=>{try{return await e(),a(``),q(t),!0}catch(e){return a(lr(e)),q(i(),`err`),!1}};return n(vI,{id:`admin`,label:`Admin`,get children(){return[(()=>{var i=ZF();return y(i,n(m,{get each(){return e()},children:([e,i])=>(()=>{var o=rI();return o.$$click=()=>(r(e),a(``)),y(o,i,null),y(o,n(l,{get when(){return e===`approvals`&&Vl().length},get children(){var e=nI();return y(e,()=>Vl().length),e}}),null),s(()=>b(o,`aria-pressed`,t()===e)),o})()})),i})(),n(l,{get when(){return i()},get children(){var e=QF();return y(e,i),e}}),n(l,{get when(){return t()===`users`},get children(){return n(XI,{change:o})}}),n(l,{get when(){return t()===`machines`},get children(){var e=$F();return y(e,n(ZI,{change:o})),e}}),n(l,{get when(){return t()===`approvals`},get children(){return[eI(),n(l,{get when(){return Vl().length},get fallback(){return iI()},get children(){return n(zI,{})}})]}}),n(l,{get when(){return t()===`audit`},get children(){var e=tI();return y(e,n(QI,{})),e}})]}})}function XI(e){let[t,{refetch:i}]=d(()=>G(`/api/admin/users`).then(e=>qI(e,`users`))),[a,o]=u(``),[c,f]=u(`all`),[p,h]=u(`role`),g=async(t,n)=>{await P(n.confirm,n.label,{danger:!!n.danger})&&(await e.change(()=>V(`/api/admin/users/${K(t.id)}`,{method:`PUT`,json:n.change}),`${JI(t)}: ${n.label.toLowerCase()} done`)&&t.id===X()?.user?.id&&(Il(void 0),await Tu().catch(()=>!1)),i())};return(()=>{var e=aI(),i=e.firstChild.firstChild,u=i.nextSibling,d=u.nextSibling;return i.$$input=e=>o(e.currentTarget.value),u.addEventListener(`change`,e=>f(e.currentTarget.value)),y(u,n(m,{each:Gn,children:([e,t])=>(()=>{var n=bF();return n.value=e,y(n,t),n})()})),d.addEventListener(`change`,e=>h(e.currentTarget.value)),y(d,n(m,{each:Wn,children:([e,t])=>(()=>{var n=bF();return n.value=e,y(n,t),n})()})),y(e,n(l,{get when(){return t()},get fallback(){return(()=>{var e=oI();return y(e,(()=>{var e=r(()=>!!t.error);return()=>e()?`Could not load: ${lr(t.error)}`:`Loading…`})()),e})()},get children(){var e=PF();return y(e,n(m,{get each(){return sr(t(),{query:a(),filter:c(),sort:p()})},get fallback(){return sI()},children:e=>(()=>{var i=dI(),a=i.firstChild,o=a.firstChild,c=o.nextSibling,u=c.firstChild,d=u.nextSibling;return d.nextSibling,y(o,()=>JI(e),null),y(o,n(l,{get when(){return e.role===`admin`},get children(){return cI()}}),null),y(o,n(l,{get when(){return e.disabled},get children(){return lI()}}),null),y(o,n(l,{get when(){return e.id===X()?.user?.id},get children(){return uI()}}),null),y(a,n(l,{get when(){return r(()=>!!e.name)()&&e.email},get children(){var t=aF();return y(t,()=>e.email),t}}),c),y(c,()=>_n(e.machines??0,`machine`),u),y(c,()=>_n(e.devices??0,`device`),d),y(c,()=>R(e.lastSeen,N())||`never`,null),y(i,n(m,{get each(){return cr(e,t(),X()?.user?.id)},children:t=>(()=>{var n=fI();return n.$$click=()=>void g(e,t),y(n,()=>t.label),s(()=>k(n,`btn small${t.danger?` danger`:``}`)),n})()}),null),s(()=>k(i,e.disabled?`disabled`:``)),i})()})),e}}),null),s(()=>i.value=a()),s(()=>u.value=c()),s(()=>d.value=p()),e})()}function ZI(e){let[t,{refetch:i}]=d(()=>G(`/api/admin/machines`).then(e=>qI(e,`machines`)));return n(l,{get when(){return t()},get fallback(){return(()=>{var e=oI();return y(e,(()=>{var e=r(()=>!!t.error);return()=>e()?`Could not load: ${lr(t.error)}`:`Loading…`})()),e})()},get children(){return n(l,{get when(){return t().length},get fallback(){return pI()},get children(){var a=PF();return y(a,n(m,{get each(){return t()},children:t=>{let n=t.ownerEmail??(t.ownerID===`local`?`hub owner`:t.ownerID)??`unknown`;return(()=>{var a=mI(),o=a.firstChild,c=o.firstChild,l=c.firstChild;l.nextSibling;var u=c.nextSibling,d=u.firstChild,f=o.nextSibling;return y(c,()=>t.name,null),y(u,n,d),y(u,()=>t.ownerID===X()?.user?.id?` (you)`:``,d),y(u,(()=>{var e=r(()=>!!t.online);return()=>e()?`online`:`offline · seen ${R(t.lastSeen,N())}`})(),null),f.$$click=async()=>{await P(`Revoke ${t.name} (${n})? Its OpenCode processes disconnect and it must be connected again.`,`Revoke`,{danger:!0})&&(await e.change(()=>V(`/api/admin/machines/${K(t.id)}`,{method:`DELETE`}),`${t.name} revoked`),i())},s(()=>k(l,`online-dot${t.online?` on`:``}`)),a})()}})),a}})}})}function QI(){let[e]=d(async()=>{let[e,t,n]=await Promise.all([G(`/api/admin/audit`),G(`/api/admin/users`).then(e=>qI(e,`users`),()=>[]),G(`/api/admin/machines`).then(e=>qI(e,`machines`),()=>[])]),r=[...t.map(e=>({id:e.id,email:e.id===`local`?`hub owner`:e.email,name:e.name})),...n.map(e=>({id:e.id,name:e.name}))];return ar(qI(e,`audit`).length?qI(e,`audit`):qI(e,`entries`),r)});return n(l,{get when(){return e()},get fallback(){return(()=>{var t=oI();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?`Could not load: ${lr(e.error)}`:`Loading…`})()),t})()},get children(){return n(l,{get when(){return e().length},get fallback(){return gI()},get children(){var t=hI();return y(t,n(m,{get each(){return e()},children:e=>(()=>{var t=_I(),n=t.firstChild,i=n.firstChild,a=i.nextSibling,o=n.nextSibling;return y(i,()=>e.action),y(a,()=>e.actor,null),y(a,(()=>{var t=r(()=>!!e.target);return()=>t()?` → ${e.target}`:``})(),null),y(a,(()=>{var t=r(()=>!!e.detail);return()=>t()?` · ${e.detail}`:``})(),null),y(o,()=>R(e.at,N())),s(t=>{var n=new Date(e.at).toISOString(),r=new Date(e.at).toLocaleString();return n!==t.e&&b(o,`datetime`,t.e=n),r!==t.t&&b(o,`title`,t.t=r),t},{e:void 0,t:void 0}),t})()})),t}})}})}z([`input`,`keydown`,`click`]);var $I=I(`<a href=/settings/voice#recordings title="This conversation is recorded on this hub (Settings → Voice → Recording)"><span class=recording-dot aria-hidden=true>`),eL=I(`<span class="recording-note small"data-recording-note>`),tL=I(`<span class=sr-only role=status aria-live=polite data-recording-status>`);function nL(){let[e,t]=u(gl.get());return M(gl.subscribe(()=>t(gl.get()))),e}function rL(e){let t=nL(),i=t=>e.sessionID===void 0||t.sessionID===void 0||t.sessionID===e.sessionID,a=()=>t().on&&i(t()),o=a(),[c,d]=u(``);return M(gl.subscribe(()=>{let e=gl.get(),t=e.on&&i(e);t!==o&&(o=t,d(t?`Recording on`:`Recording off`))})),[n(l,{get when(){return a()},get children(){var e=$I();return e.firstChild,y(e,()=>_l(t()),null),s(n=>{var r=`recording-indicator${t().audio?``:` no-audio`}`,i=t().audio?`on`:`no-audio`,a=`${_l(t())}: this conversation is recorded on the hub. Open the recording settings`;return r!==n.e&&k(e,n.e=r),i!==n.t&&b(e,`data-recording-indicator`,n.t=i),a!==n.a&&b(e,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}}),n(l,{get when(){return r(()=>!(a()||!t().note))()&&i(t())},get children(){var e=eL();return y(e,()=>t().note),e}}),n(l,{get when(){return e.announce},get children(){var e=tL();return y(e,c),e}})]}var iL=I(`<div role=status><a class=voice-pill-link title="Go to the session in Voice mode">Voice: <strong></strong></a><button type=button class="btn small end"aria-label="End Voice mode">End`);function aL(){let e=()=>rx().sessionID??``;return(()=>{var t=iL(),r=t.firstChild,i=r.firstChild.nextSibling,a=r.nextSibling;return y(t,n(L,{name:`wave`}),r),y(i,ix),y(t,n(rL,{announce:!0,get sessionID(){return e()}}),a),a.$$click=()=>void qb.end(),s(n=>{var i=`voice-pill ${rx().voice}`,a=`Voice mode is on in ${ix()}`,o=Ot(e());return i!==n.e&&k(t,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&b(r,`href`,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}z([`click`]);var oL=`/api/agent/workspaces`,sL=50,cL=4e3,lL=e=>e instanceof W?{status:e.status,...e.code?{code:e.code}:{},message:e.message,...e.details?{details:e.details}:{}}:{status:0,message:e instanceof tn||e instanceof Error?e.message:String(e)},uL=e=>km(lL(e));function dL(){let[e,t]=u(`loading`),[n,r]=u(),[i,a]=u([]),[o,s]=Or({}),[c,l]=u(),[d,f]=u(new Set),p=new Map,m=new Map,h=!1;async function g(){try{let e=hm(await G(`${oL}?state=active&limit=${sL}`));a(e.items),r(void 0),t(`ready`)}catch(e){e instanceof W&&(e.status===404||e.code===`unsupported`)?t(`unavailable`):e instanceof W&&e.status===403?t(`forbidden`):(r(uL(e)),t(`error`))}}async function _(e){p.set(e,Date.now()),s(e,e=>({...e??{},loading:!0}));try{let t=mm(await G(`${oL}/${K(e)}/board`));if(!t)throw Error(`The hub sent a board this console can't read.`);return s(e,e=>({...e,board:t,loading:!1,error:void 0})),t}catch(t){s(e,e=>({...e,loading:!1,error:uL(t)}));return}}async function v(){try{l(Ce(await G(`/api/agent/grants`)))}catch{l(`error`)}}function y(e){if(m.has(e))return;let t=Math.max(0,(p.get(e)??0)+cL-Date.now());m.set(e,setTimeout(()=>{m.delete(e),d().has(e)&&document.visibilityState!==`hidden`&&_(e)},t))}function b(){h||(h=!0,g(),hu(e=>{if(e.type===`resync`&&g(),e.type===`catalog`||e.type===`resync`)for(let e of d())y(e)}))}function x(e){let t=new Set(d());t.has(e)?t.delete(e):(t.add(e),_(e),c()===void 0&&v()),f(t)}let S=(e,t)=>s(e,e=>({...e??{loading:!1},notice:t}));async function C(e,t){await V(`${oL}/${K(e)}/supervision`,{method:`PUT`,json:t})}async function w(e,t,n){let r=o[e]?.board;if(!r||o[e]?.saving)return;let i=vm(r,t);if(i)i!==`unchanged`&&S(e,{text:Dm(i),kind:`warn`});else{s(e,e=>({...e,saving:!0,notice:{text:`Saving: ${n}…`,kind:``}}));try{await T(e,t,Tm(t,r.revision),n)}finally{s(e,e=>({...e,saving:!1}))}}}async function T(e,t,n,r){try{await C(e,n),await _(e),S(e,{text:`Done: ${r}.`,kind:``});return}catch(t){if(!(t instanceof W&&t.status===409&&t.code===`conflict`)){S(e,{text:uL(t),kind:`err`}),_(e);return}}let i=await _(e);if(!i)return S(e,{text:`The workspace changed elsewhere and could not be reloaded. Your change is kept: ${r}.`,kind:`warn`,pending:t});let a=Om(t,i);if(a.kind===`done`)return S(e,{text:`Already done elsewhere: ${r}.`,kind:``});if(a.kind===`dropped`)return S(e,{text:a.reason,kind:`warn`});try{await C(e,a.body),await _(e),S(e,{text:`The workspace changed elsewhere; re-applied your change: ${r}.`,kind:``})}catch(n){_(e),n instanceof W&&n.status===409?S(e,{text:`The workspace keeps changing elsewhere. Your change is kept: ${r}.`,kind:`warn`,pending:t}):S(e,{text:uL(n),kind:`err`})}}return{availability:e,listError:n,workspaces:i,boards:o,grants:c,expanded:d,start:b,loadList:g,loadBoard:_,toggle:x,move:w,notify:S}}var fL=ce(dL),pL=`hub.sidebar.sections.collapsed`;function mL(e){try{let t=JSON.parse(e.getItem(`hub.sidebar.sections.collapsed`)??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function hL(e,t){let n=mL(e);n.has(t)?n.delete(t):n.add(t);try{e.setItem(pL,JSON.stringify([...n]))}catch{}return n}var gL=e=>e!==`results`;function _L(e,t,n){if(t&&gL(e)){if(e===`needs`)return{text:String(t),label:`${_n(t,`session`)} ${t===1?`needs`:`need`} you`};if(n)return{text:String(t),label:_n(t,e===`workspaces`?`workspace`:`session`)}}}var vL=I(`<button type=button class=side-section-toggle><span class=side-section-title>`),yL=I(`<div class=side-section-head>`),bL=I(`<span class=side-section-title>`),xL=I(`<span aria-hidden=true data-section-count>`),[SL,CL]=u(mL(localStorage)),wL=(e,t)=>gL(t)&&SL().has(e),TL=e=>`side-sec-${e.replace(/[^A-Za-z0-9_-]/g,`-`)}`;function EL(e){let t=()=>wL(e.id,e.kind),r=()=>_L(e.kind,e.count,t());return(()=>{var i=yL();return y(i,n(l,{get when(){return gL(e.kind)},get fallback(){return(()=>{var t=bL();return y(t,()=>e.title),t})()},get children(){var i=vL(),a=i.firstChild;return i.$$click=()=>CL(hL(localStorage,e.id)),y(i,n(L,{get name(){return t()?`chevron`:`down`},class:`side-section-caret`}),a),y(a,()=>e.title),y(i,n(l,{get when(){return r()},children:t=>(()=>{var n=xL();return y(n,()=>t().text),s(()=>k(n,`side-count${e.kind===`needs`?` needs`:``}`)),n})()}),null),s(n=>{var a=!t(),o=TL(e.id),s=e.id,c=r()?`${e.title}, ${r().label}`:e.title,l=t()?`Show ${e.title}`:`Hide ${e.title}`;return a!==n.e&&b(i,`aria-expanded`,n.e=a),o!==n.t&&b(i,`aria-controls`,n.t=o),s!==n.a&&b(i,`data-section-toggle`,n.a=s),c!==n.o&&b(i,`aria-label`,n.o=c),l!==n.i&&b(i,`title`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i}}),null),y(i,()=>e.children,null),i})()}z([`click`]);var DL=I(`<p class=side-empty>Workspaces are not available to this device.`),OL=I(`<p class=side-empty role=alert>Could not load workspaces: <!> <button type=button class=link-btn>Retry`),kL=I(`<ul class=ws-list>`),AL=I(`<section aria-label=Workspaces data-section=workspaces>`),jL=I(`<p class=ws-goal><span class=sr-only>Goal: `),ML=I(`<div class=ws-panel>`),NL=I(`<li><button type=button class=ws-head><span class=ws-title>`),PL=I(`<p class=ws-notice role=status aria-live=polite>`),FL=I(`<p class=side-empty role=alert>Could not load the board: <!> <button type=button class=link-btn>Retry`),IL=I(`<button type=button class=link-btn>Retry`),LL=I(`<p class=side-empty>Loading…`),RL=I(`<p class=side-empty>No members yet.`),zL=I(`<ul role=tree>`),BL=I(`<div>Drop here: no supervisor`),VL=I(`<p class=ws-keys>Drag to change supervision, or Alt+arrows. Supervision grants nothing.`),HL=I(`<p class=ws-keys>`),UL=I(`<span class="ws-rel ws-spawned"title="Native parent session (unchanged by supervision)">spawned by <a tabindex=-1>`),WL=I(`<span class="ws-rel ws-supervised"title="Workspace supervision link">supervised by `),GL=I(`<ul class=ws-assignments>`),KL=I(`<li role=treeitem><div class=ws-row><a class=ws-member tabindex=-1></a></div><p class=ws-meta>`),qL=I(`<span>`),JL=I(`<span class=ws-assignment-stale> · stale`),YL=I(`<li><span class=ws-assignment-title></span> <span class=ws-assignment-status>`),XL=I(`<ul>`),ZL=I(`<details class=ws-controls><summary>Delegated controls</summary><p class=muted>Read-only. Grants held by roles or apps are not listed here; dragging never creates one.`),QL=I(`<p>Could not load your grants.`),$L=I(`<p>Loading…`),eR=I(`<p> holds no grant from you. Supervising grants nothing: it can message and ask, and actions on this session come to you as Decisions. <a href=/settings/agents#grants>Grants are in Settings → Agents & access.`),tR=I(`<li> · <!> · <!> <span class=muted>(grant <!>)`),nR=new Set([`idle`,`working`,`blocked`,`error`]),rR={open:`open`,in_progress:`in progress`,blocked:`blocked`},iR={ArrowRight:`indent`,ArrowLeft:`outdent`,ArrowUp:`up`,ArrowDown:`down`};function aR(e){let t=fL;fe(()=>t.start());let r=()=>{let e=t.availability();return e===`forbidden`||e===`error`||e===`ready`&&t.workspaces().length>0};return n(l,{get when(){return r()},get children(){var r=AL();return y(r,n(EL,{id:`workspaces`,kind:`workspaces`,title:`Workspaces`,get count(){return t.workspaces().length}}),null),y(r,n(l,{get when(){return t.availability()===`forbidden`},get children(){return DL()}}),null),y(r,n(l,{get when(){return t.availability()===`error`},get children(){var e=OL(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling;return y(e,()=>t.listError(),n),r.$$click=()=>void t.loadList(),e}}),null),y(r,n(l,{get when(){return!wL(`workspaces`,`workspaces`)},get children(){var r=kL();return y(r,n(m,{get each(){return t.workspaces()},children:t=>n(oR,{ws:t,get onPick(){return e.onPick}})})),s(()=>b(r,`id`,TL(`workspaces`))),r}}),null),s(()=>k(r,`side-section ws-section${wL(`workspaces`,`workspaces`)?` collapsed`:``}`)),r}})}function oR(e){let t=fL,r=()=>t.expanded().has(e.ws.id),i=`ws-panel-${e.ws.id}`;return(()=>{var a=NL(),o=a.firstChild,c=o.firstChild;return o.$$click=()=>t.toggle(e.ws.id),b(o,`aria-controls`,i),y(o,n(L,{get name(){return r()?`down`:`chevron`}}),c),y(c,()=>e.ws.title),y(a,n(l,{get when(){return e.ws.goal},get children(){var t=jL();return t.firstChild,y(t,()=>e.ws.goal,null),s(()=>b(t,`title`,e.ws.goal)),t}}),null),y(a,n(l,{get when(){return r()},get children(){var t=ML();return b(t,`id`,i),y(t,n(lR,{get ws(){return e.ws},get onPick(){return e.onPick}})),t}}),null),s(t=>{var n=`ws-item${r()?` open`:``}`,i=e.ws.id,s=r();return n!==t.e&&k(a,t.e=n),i!==t.t&&b(a,`data-workspace`,t.t=i),s!==t.a&&b(o,`aria-expanded`,t.a=s),t},{e:void 0,t:void 0,a:void 0}),a})()}var sR=(e,t)=>{let n=e.members.find(e=>e.memberID===t);if(!n)return`a member`;let r=jm(Y.machines,n.sessionID);return r.found?r.title:n.session?.name??n.sessionID};function cR(e,t,n){let r=sR(e,t.memberID);return t.supervisorMemberID===null?`${r} has no supervisor`:n===`reorder`?`${r} reordered`:`${r} supervised by ${sR(e,t.supervisorMemberID)}`}function lR(e){let i=fL,o=()=>e.ws.id,c=()=>i.boards[o()],d=()=>c()?.board,f=C(()=>d()?_m(d()):void 0),[p,h]=u(),[g,_]=u(),[v,S]=u(),w,T,E=()=>{let e=f();if(e?.flat.length)return e.flat.some(e=>e.member.memberID===p())?p():e.flat[0].member.memberID},D=e=>{h(e),w?.querySelector(`[data-member="${CSS.escape(e)}"]`)?.focus()};x(()=>{if(f(),T){let e=T;queueMicrotask(()=>{w?.querySelector(`[data-member="${CSS.escape(e)}"]`)&&(T=void 0,D(e))})}});let j=(e,t,n=!1)=>{let r=d();e&&r&&(n&&(T=e.memberID),i.move(o(),e,cR(r,e,t)))},M=(t,n,r)=>{let a=r.flat.indexOf(n);if(t.altKey&&iR[t.key]){t.preventDefault();let e=iR[t.key],a=wm(r,n.member.memberID,e);return a?j(a,e===`up`||e===`down`?`reorder`:`supervise`,!0):i.notify(o(),{text:`No move that way.`,kind:`warn`})}if(t.altKey||t.ctrlKey||t.metaKey)return;let s=t.key===`ArrowDown`?r.flat[a+1]:t.key===`ArrowUp`?r.flat[a-1]:t.key===`Home`?r.flat[0]:t.key===`End`?r.flat[r.flat.length-1]:void 0;s?(t.preventDefault(),D(s.member.memberID)):t.key===`Enter`&&t.target===t.currentTarget&&(t.preventDefault(),e.onPick?.(),Vt(Ot(n.member.sessionID)))},N=e=>{let t=e.currentTarget.querySelector(`.ws-row`).getBoundingClientRect(),n=e.clientY-t.top;return n<t.height*.25?`before`:n>t.height*.75?`after`:`inside`},ee=(e,t)=>{let n=d(),r=e.member.memberID,i=[];for(let[e,a,o]of[[`indent`,`Supervised by the member above`,`Alt+→`],[`outdent`,`Up one level`,`Alt+←`],[`up`,`Move up`,`Alt+↑`],[`down`,`Move down`,`Alt+↓`],[`detach`,`No supervisor`,``]]){let s=wm(t,r,e);s&&!vm(n,s)&&i.push({label:a,hint:o,run:()=>j(s,e===`up`||e===`down`?`reorder`:`supervise`,!0)})}let a=t.flat.filter(e=>e.member.memberID!==r&&!vm(n,Cm(t,r,{memberID:e.member.memberID,position:`inside`})));if(a.length){i.push({section:`Supervised by`});for(let e of a)i.push({label:sR(n,e.member.memberID),run:()=>j(Cm(t,r,{memberID:e.member.memberID,position:`inside`}),`supervise`,!0)})}return i.length||i.push({label:n.workspace.state===`active`?e.member.master?`The master is the root`:`No moves`:`Archived: read-only`,disabled:!0,run:()=>{}}),i};return[(()=>{var e=PL();return y(e,()=>c()?.notice?.text??``,null),y(e,n(l,{get when(){return c()?.notice?.pending},children:e=>(()=>{var t=IL();return t.$$click=()=>j(e(),`supervise`),t})()}),null),e})(),n(l,{get when(){return c()?.error},get children(){var e=FL(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return y(e,()=>c().error,t),n.$$click=()=>void i.loadBoard(o()),e}}),n(l,{get when(){return f()},get fallback(){return n(l,{get when(){return!c()?.error},get children(){return LL()}})},children:u=>[n(l,{get when(){return!u().flat.length},get children(){return RL()}}),(()=>{var r=zL(),f=w;return typeof f==`function`?t(f,r):w=r,y(r,n(m,{get each(){return u().flat},children:t=>{let r=()=>jm(Y.machines,t.member.sessionID),c=()=>sR(d(),t.member.memberID),f=()=>t.supervisorMemberID?u().flat.find(e=>e.member.memberID===t.supervisorMemberID)?.children??[]:u().roots,p=()=>Mm(t,d(),Y.machines),x=()=>nR.has(t.member.session?.state??``)?t.member.session.state:`idle`,C=()=>d().workspace.state===`active`&&!i.boards[o()]?.saving;return(()=>{var i=KL(),o=i.firstChild,d=o.firstChild,w=o.nextSibling;return i.addEventListener(`drop`,e=>{let n=g();if(!n)return;e.preventDefault(),e.stopPropagation();let r=N(e);_(void 0),S(void 0),j(Cm(u(),n,{memberID:t.member.memberID,position:r}),r===`inside`?`supervise`:`reorder`)}),i.addEventListener(`dragleave`,e=>{e.currentTarget.contains(e.relatedTarget)||S(void 0)}),i.addEventListener(`dragover`,e=>{let n=g();n&&n!==t.member.memberID&&(e.preventDefault(),e.stopPropagation(),S(`${t.member.memberID}:${N(e)}`))}),i.addEventListener(`dragend`,()=>{Yp(),_(void 0),S(void 0)}),i.addEventListener(`dragstart`,e=>{Jp(e,{target:{sessionID:t.member.sessionID},label:c()}),e.dataTransfer?.setData(`text/plain`,t.member.memberID),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),_(t.member.memberID)}),i.$$keydown=e=>M(e,t,u()),i.addEventListener(`focus`,e=>e.target===e.currentTarget&&h(t.member.memberID)),y(o,n(A,{get state(){return x()}}),d),d.$$click=()=>e.onPick?.(),b(d,`draggable`,!1),y(d,c),y(o,n(O,{get label(){return`Move ${c()}`},class:`icon-btn small row-more`,items:()=>ee(t,u())}),null),y(w,n(m,{get each(){return Pm(t.member,r())},children:e=>(()=>{var t=qL();return y(t,()=>e.label),s(n=>{var r=`ws-badge ${e.kind}`,i=e.title;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),y(w,n(l,{get when(){return p().spawnedBy},get children(){var e=UL(),t=e.firstChild.nextSibling;return y(t,()=>p().spawnedBy.title),s(()=>b(t,`href`,Ot(p().spawnedBy.sessionID))),e}}),null),y(w,n(l,{get when(){return p().supervisedBy},get children(){var e=WL();return e.firstChild,y(e,()=>p().supervisedBy.title,null),e}}),null),y(i,n(l,{get when(){return t.assignments.length},get children(){var e=GL();return y(e,n(m,{get each(){return t.assignments},children:e=>(()=>{var t=YL(),r=t.firstChild,i=r.nextSibling.nextSibling;return y(r,()=>e.title),y(i,()=>rR[e.status]??e.status),y(t,n(l,{get when(){return e.stale?.length},get children(){var t=JL();return s(()=>b(t,`title`,e.stale.join(`, `))),t}}),null),s(()=>k(t,`ws-assignment ${e.status}`)),t})()})),s(()=>b(e,`aria-label`,`Assignments of ${c()}`)),e}}),null),y(i,n(l,{get when(){return p().supervisedBy},children:e=>n(uR,{get supervisorSessionID(){return e().sessionID},get supervisorTitle(){return e().title},get memberDirectory(){return r().directory}})}),null),s(e=>{var n=t.depth+1,r=f().length,o=f().indexOf(t)+1,s=E()===t.member.memberID,l=`${c()}${t.member.master?`, master`:``}${p().supervisedBy?`, supervised by ${p().supervisedBy.title}`:``}`,u=E()===t.member.memberID?0:-1,m=t.member.memberID,h=`ws-node${t.member.presence===`online`?``:` away`}${g()===t.member.memberID?` dragged`:``}${v()?.startsWith(`${t.member.memberID}:`)?` drop-${v().split(`:`)[1]}`:``}`,_=String(t.depth),y=C()&&!t.member.master,x=Ot(t.member.sessionID);return n!==e.e&&b(i,`aria-level`,e.e=n),r!==e.t&&b(i,`aria-setsize`,e.t=r),o!==e.a&&b(i,`aria-posinset`,e.a=o),s!==e.o&&b(i,`aria-selected`,e.o=s),l!==e.i&&b(i,`aria-label`,e.i=l),u!==e.n&&b(i,`tabindex`,e.n=u),m!==e.s&&b(i,`data-member`,e.s=m),h!==e.h&&k(i,e.h=h),_!==e.r&&a(i,`--ws-depth`,e.r=_),y!==e.d&&b(i,`draggable`,e.d=y),x!==e.l&&b(d,`href`,e.l=x),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),i})()}})),s(t=>{var n=`ws-tree${g()?` dragging`:``}`,i=`Supervision in ${e.ws.title}`,a=`ws-keys-${o()}`,s=c()?.saving?`true`:void 0;return n!==t.e&&k(r,t.e=n),i!==t.t&&b(r,`aria-label`,t.t=i),a!==t.a&&b(r,`aria-describedby`,t.a=a),s!==t.o&&b(r,`aria-busy`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),r})(),n(l,{get when(){return g()},get children(){var e=BL();return e.addEventListener(`drop`,e=>{e.preventDefault();let t=g();_(void 0),S(void 0),t&&j(Cm(u(),t,{root:!0}),`supervise`)}),e.addEventListener(`dragleave`,()=>S(void 0)),e.addEventListener(`dragover`,e=>{e.preventDefault(),S(`root`)}),s(()=>k(e,`ws-root-drop${v()===`root`?` over`:``}`)),e}}),(()=>{var e=VL();return s(()=>b(e,`id`,`ws-keys-${o()}`)),e})(),n(l,{get when(){return u().staleLinks||d().membersTruncated||d().linksTruncated},get children(){var e=HL();return y(e,n(l,{get when(){return u().staleLinks},get children(){return[r(()=>u().staleLinks),` link(s) to departed members not shown. `]}}),null),y(e,n(l,{get when(){return d().membersTruncated||d().linksTruncated},children:`Some members are not shown (limit).`}),null),e}})]})]}function uR(e){let t=fL,i=()=>{let n=t.grants();return Array.isArray(n)?Lm(n,e.supervisorSessionID,e.memberDirectory,Date.now()):n};return(()=>{var t=ZL(),a=t.firstChild.nextSibling;return y(t,n(l,{get when(){return i()!==`error`},get fallback(){return QL()},get children(){return n(l,{get when(){return Array.isArray(i())},get fallback(){return $L()},get children(){return n(l,{get when(){return i().length},get fallback(){return(()=>{var t=eR(),n=t.firstChild;return y(t,()=>e.supervisorTitle,n),t})()},get children(){var e=XL();return y(e,n(m,{get each(){return i()},children:e=>(()=>{var t=tR(),n=t.firstChild,i=n.nextSibling,a=i.nextSibling.nextSibling,o=a.nextSibling.nextSibling,s=o.firstChild.nextSibling;return s.nextSibling,y(t,()=>e.verbs.join(`, `),n),y(t,(()=>{var t=r(()=>e.covers===void 0);return()=>t()?`folder unknown`:e.covers?`covers this session's folder`:`not this session's folder`})(),i),y(t,()=>Ss(e.expiresAt,Date.now()),a),y(o,()=>e.grantID,s),t})()})),e}})}})}}),a),t})()}z([`click`,`keydown`]);var dR=I(`<nav aria-label=Primary><ul>`),fR=I(`<a>`),pR=I(`<li>`),mR=I(`<a class="side-link nav-link disabled"aria-disabled=true>`),hR=I(`<div class=nav-rail>`),gR=()=>({signedIn:!!X(),concierge:Xl()?.state});function _R(e){let t=()=>we(Pt().pathname);return(()=>{var r=dR(),i=r.firstChild;return y(i,n(m,{get each(){return Se(gR())},children:r=>(()=>{var i=pR();return y(i,n(l,{get when(){return r.enabled},get fallback(){return(()=>{var t=mR();return y(t,n(L,{get name(){return r.dest.icon}}),null),y(t,n(l,{get when(){return!e.compact},get children(){return r.dest.label}}),null),s(n=>{var i=`${r.dest.label} isn't available`,a=e.compact?r.dest.label:void 0;return i!==n.e&&b(t,`title`,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),n},{e:void 0,t:void 0}),t})()},get children(){var i=fR();return i.$$click=()=>e.onPick?.(),y(i,n(L,{get name(){return r.dest.icon}}),null),y(i,n(l,{get when(){return!e.compact},get children(){return r.dest.label}}),null),s(n=>{var a=`side-link nav-link${t()===r.dest.id?` active`:``}`,o=r.dest.route,s=t()===r.dest.id?`page`:void 0,c=e.compact?r.dest.label:void 0,l=e.compact?r.dest.label:void 0;return a!==n.e&&k(i,n.e=a),o!==n.t&&b(i,`href`,n.t=o),s!==n.a&&b(i,`aria-current`,n.a=s),c!==n.o&&b(i,`aria-label`,n.o=c),l!==n.i&&b(i,`title`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i}})),i})()})),s(()=>k(r,e.compact?`nav-rail-links`:`feature-nav`)),r})()}function vR(e){return(()=>{var t=hR();return y(t,n(F,{icon:`sidebar`,label:`Show sidebar (⌘B)`,get onClick(){return e.onExpand}}),null),y(t,n(_R,{compact:!0}),null),t})()}z([`click`]);var yR=I(`<span class=concierge-btn-text>Concierge`),bR=I(`<span aria-hidden=true>`),xR=I(`<button type=button>`),SR=I(`<a href=/settings/concierge data-concierge-button=disabled data-indicator=off>`),CR;function wR(){let e=CR;return CR=void 0,e}function TR(e){let t=()=>dt().name===`concierge`,i=()=>e.labelled?yR():null,a=e=>n(l,{get when(){return e.indicator!==`running`},get children(){var t=bR();return y(t,(()=>{var t=r(()=>e.indicator===`attention`);return()=>t()?e.count??`!`:``})()),s(()=>k(t,`concierge-ind ind-${e.indicator}`)),t}});return n(l,{get when(){return Xl()},children:r=>{let o=()=>Ys(r(),ru(),t(),Date.now(),Hs(Ul(),r(),{tiers:`all`}).length,new Set(Ul().filter(e=>e.state===`open`).map(e=>e.id)));return n(l,{get when(){return qs(r())===!0},get fallback(){return(()=>{var t=SR();return t.$$click=()=>e.onPick?.(),y(t,n(L,{name:`spark`}),null),y(t,i,null),y(t,()=>a(o()),null),s(n=>{var r=`icon-btn concierge-btn off ind-off${e.labelled?` labelled`:``}`,i=o().label,a=o().title;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()},get children(){var c=xR();return c.$$click=n=>{if(e.onPick?.(),t())return St(`/`);CR=n.currentTarget,Vt(`/concierge`)},y(c,n(L,{name:`spark`}),null),y(c,i,null),y(c,()=>a(o()),null),s(n=>{var i=`icon-btn concierge-btn state-${r().state} ind-${o().indicator}${t()?` on`:``}${e.labelled?` labelled`:``}`,a=o().label,s=t(),l=o().title,u=r().state,d=o().indicator;return i!==n.e&&k(c,n.e=i),a!==n.t&&b(c,`aria-label`,n.t=a),s!==n.a&&b(c,`aria-expanded`,n.a=s),l!==n.o&&b(c,`title`,n.o=l),u!==n.i&&b(c,`data-concierge-button`,n.i=u),d!==n.n&&b(c,`data-indicator`,n.n=d),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),c}})}})}z([`click`]);var ER=I(`<section class="side-section side-decisions"aria-label=Decisions><ul class=side-list><li class=side-row><a class=side-row-link data-side-decisions><span class=decision-mark aria-hidden=true>⚑</span><span class=side-title>`),DR=I(`<div class=sidebar><div class=side-top><a class=brand href=/><span class=brand-name>Hub</span></a><div class=side-top-actions></div></div><div class=side-search><input type=search placeholder="Search sessions"aria-label="Search sessions"></div><a class=side-new href=/new> New session</a><nav class=side-sessions aria-label=Sessions><div class=side-head><span>Sessions</span></div><div class=side-scroll></div></nav><div class=side-foot>`),OR=I(`<p class=side-empty>`),kR=I(`<a class="icon-btn small">`),AR=I(`<ul class=side-list>`),jR=I(`<section>`),MR=I(`<span aria-hidden=true>`),NR=I(`<span class=account-name>`),PR=I(`<span class=badge title="Machines waiting for approval">`),FR=I(`<span class="terminal-wait small muted"title="Herdr says this session waits for input; answer it in its terminal"data-waiting-in-terminal>waiting in terminal`),IR=I(`<span class=jobs-badge>`),LR=I(`<span class=unread-dot role=img aria-label=Unread>`),RR=I(`<a class=side-row-link><span class=side-text><span class=side-title>`),zR=I(`<li>`),BR=I(`<span class=side-row-link>`),VR=I(`<span class=side-sub data-row-sub>`),HR=I(`<span class="waiting-since small">`),UR=`hub.sidebar.groupBy`,WR=`hub.sidebar.sort`;function GR(e){let[t,i]=u(``),[a,o]=u(localStorage.getItem(UR)===`machine`?`machine`:`project`),[c,d]=u(localStorage.getItem(WR)===`title`?`title`:`recent`),f=C(()=>ja(gu(),{query:t(),groupBy:a(),sortBy:c(),now:N()})),p=()=>{let e=WS();return e.name===`session`?e.id:void 0},h=()=>Jn(X()),g=(e,t)=>{e&&(o(e),localStorage.setItem(UR,e)),t&&(d(t),localStorage.setItem(WR,t))};return(()=>{var o=DR(),u=o.firstChild,d=u.firstChild,_=d.firstChild,v=d.nextSibling,x=u.nextSibling,S=x.firstChild,C=x.nextSibling,w=C.firstChild,T=C.nextSibling,E=T.firstChild;E.firstChild;var D=E.nextSibling,A=T.nextSibling;return d.$$click=()=>e.phone&&e.onClose(),y(d,n(Pd,{class:`brand-mark`}),_),y(v,n(TR,{labelled:!0,onPick:()=>e.phone&&e.onClose()}),null),y(v,n(l,{get when(){return e.phone},get fallback(){return n(F,{icon:`sidebar`,label:`Collapse sidebar (⌘B)`,get onClick(){return e.onCollapse}})},get children(){return n(F,{icon:`close`,label:`Close sidebar`,get onClick(){return e.onClose}})}}),null),y(x,n(L,{name:`search`}),S),S.$$keydown=e=>e.key===`Escape`&&i(``),S.$$input=e=>i(e.currentTarget.value),C.$$click=()=>e.phone&&e.onClose(),y(C,n(L,{name:`plus`}),w),y(o,n(_R,{onPick:()=>e.phone&&e.onClose()}),T),y(E,n(O,{label:`Group and sort`,items:()=>[{section:`Group by`},{label:`Project`,checked:a()===`project`,run:()=>g(`project`,void 0)},{label:`Server`,checked:a()===`machine`,run:()=>g(`machine`,void 0)},{section:`Sort by`},{label:`Recent activity`,checked:c()===`recent`,run:()=>g(void 0,`recent`)},{label:`Title`,checked:c()===`title`,run:()=>g(void 0,`title`)}]}),null),y(D,n(l,{get when(){return Ul().length},get children(){var t=ER(),n=t.firstChild.firstChild.firstChild,i=n.firstChild.nextSibling;return n.$$click=()=>e.phone&&e.onClose(),y(i,(()=>{var e=r(()=>Ul().length===1);return()=>e()?`A Decision waits for you`:`${Ul().length} Decisions wait for you`})()),s(()=>b(n,`href`,Hs(Ul(),Xl(),{tiers:`all`}).length===Ul().length?`/concierge`:`/`)),t}}),null),y(D,n(l,{get when(){return f().length},get fallback(){return(()=>{var e=OR();return y(e,()=>t()?`No sessions match.`:`No sessions yet.`),e})()},get children(){return n(m,{get each(){return f()},children:t=>(()=>{var i=jR();return y(i,n(EL,{get id(){return t.id},get kind(){return t.kind},get title(){return t.title},get count(){return t.rows.length},get children(){return n(l,{get when(){return r(()=>t.kind===`group`)()&&t.machineID},get children(){var e=kR();return y(e,n(L,{name:`plus`})),s(n=>{var r=`New session in ${t.title}`,i=`New session in ${t.title}`,a=`/new?machine=${encodeURIComponent(t.machineID)}${t.directory?`&dir=${encodeURIComponent(t.directory)}`:``}${t.key?`&key=${encodeURIComponent(t.key)}`:``}`;return r!==n.e&&b(e,`aria-label`,n.e=r),i!==n.t&&b(e,`title`,n.t=i),a!==n.a&&b(e,`href`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}})}}),null),y(i,n(l,{get when(){return!wL(t.id,t.kind)},get children(){var r=AR();return y(r,n(m,{get each(){return t.rows},children:t=>n(KR,{row:t,get active(){return p()===t.id},onPick:()=>e.phone&&e.onClose()})})),s(()=>b(r,`id`,TL(t.id))),r}}),null),s(e=>{var n=`side-section ${t.kind}${wL(t.id,t.kind)?` collapsed`:``}`,r=t.title,a=t.id;return n!==e.e&&k(i,e.e=n),r!==e.t&&b(i,`aria-label`,e.t=r),a!==e.a&&b(i,`data-section`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),i})()})}}),null),y(D,n(aR,{onPick:()=>e.phone&&e.onClose()}),null),y(A,n(O,{get label(){return`Account and settings (${h().title})`},class:`account`,align:`left`,up:!0,get text(){return[(()=>{var e=MR();return y(e,()=>h().initial),s(()=>k(e,`avatar${h().badge?` admin`:``}`)),e})(),(()=>{var e=NR();return y(e,()=>h().title),e})(),n(l,{get when(){return Vl().length},get children(){var e=PR();return y(e,()=>Vl().length),e}}),n(L,{name:`settings`})]},items:()=>[{label:`Settings`,hint:Vl().length?`${Vl().length} to approve`:void 0,run:()=>{e.phone&&e.onClose(),Vt(`/settings`)}},{label:`Set up Hub on a machine`,run:()=>{e.phone&&e.onClose(),HP({returnTo:()=>document.querySelector(`.side-foot .account`)})}}]})),s(()=>S.value=t()),o})()}function KR(e){let t=()=>e.row,r=()=>rx().phase!==`off`&&rx().sessionID===t().id;return(()=>{var i=zR();return y(i,n(l,{get when(){return!Ch(t().id,`sidebar`)},get fallback(){return(()=>{var e=BR();return y(e,n(A,{get state(){return t().state}}),null),y(e,n(Ng,{get id(){return t().id},get title(){return t().title},place:`sidebar`,class:`side-title`,children:null}),null),e})()},get children(){var r=RR(),i=r.firstChild,a=i.firstChild;return B(r,`dragend`,Yp),r.addEventListener(`dragstart`,e=>Jp(e,{target:{sessionID:t().id},label:t().title})),B(r,`click`,e.onPick,!0),y(r,n(A,{get state(){return t().state}}),i),y(r,n(l,{get when(){return Pa(t(),rx())},get children(){return n(ne,{})}}),i),y(a,()=>t().title),y(i,n(l,{get when(){return Ra(t())},children:e=>(()=>{var t=VR();return y(t,e),t})()}),null),y(r,n(Pg,{get id(){return t().id}}),null),y(r,n(l,{get when(){return za(t(),N())},children:e=>(()=>{var t=HR();return y(t,e),s(()=>b(t,`title`,`Waiting for you for ${e()}`)),t})()}),null),y(r,n(l,{get when(){return t().error},children:e=>n(ie,{get text(){return e()}})}),null),y(r,n(l,{get when(){return t().waitingInTerminal},get children(){return FR()}}),null),y(r,n(l,{get when(){return t().jobs},get children(){var e=IR();return y(e,()=>t().jobs),s(n=>{var r=qi(t().jobs),i=qi(t().jobs);return r!==n.e&&b(e,`title`,n.e=r),i!==n.t&&b(e,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),e}}),null),y(r,n(l,{get when(){return t().unread},get children(){return LR()}}),null),s(n=>{var i=Ot(t().id),a=e.active?`page`:void 0,o=`${t().title} · ${t().where} · ${t().machineName}${t().error?` · ${t().error}`:``}`,s=!Z();return i!==n.e&&b(r,`href`,n.e=i),a!==n.t&&b(r,`aria-current`,n.t=a),o!==n.a&&b(r,`title`,n.a=o),s!==n.o&&b(r,`draggable`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),r}}),null),y(i,n(O,{get label(){return`More actions for ${t().title}`},class:`icon-btn small row-more`,items:()=>Th(t(),{open:!1,place:`sidebar`})}),null),s(()=>k(i,`side-row${e.active?` active`:``}${t().unread?` unread`:``}${r()?` voice-here`:``}`)),i})()}z([`click`,`input`,`keydown`]);var qR={cycle:`F6`,close:`Control+Alt+W`,moveEarlier:`Control+Alt+Shift+ArrowLeft`,moveLater:`Control+Alt+Shift+ArrowRight`,focus:e=>`Control+Alt+${e}`},JR=new Set([`ArrowLeft`,`ArrowUp`]),YR=new Set([`ArrowRight`,`ArrowDown`]);function XR(e){if(e.metaKey)return;if(e.key===`F6`&&!e.ctrlKey&&!e.altKey)return{type:`cycle`,step:e.shiftKey?-1:1};if(!e.ctrlKey||!e.altKey)return;if(e.shiftKey)return JR.has(e.key)?{type:`move`,step:-1}:YR.has(e.key)?{type:`move`,step:1}:void 0;if(e.code===`KeyW`)return{type:`close`};let t=/^Digit([1-9])$/.exec(e.code),n=t?Number(t[1]):0;return n>=1&&n<=gn?{type:`focus`,index:n-1}:void 0}var ZR=`hub.paneSizes.v1`,QR={cols:280,rows:160},$R=[`vertical`,`horizontal`,`grid`];function ez(e,t){return t<=1||e===`single`?{cols:1,rows:1}:e===`vertical`?{cols:t,rows:1}:e===`horizontal`?{cols:1,rows:t}:{cols:Math.min(2,t),rows:Math.ceil(t/2)}}function tz(e,t,n){if(t<=1||e===`single`)return{col:0,row:0,colSpan:1};if(e===`vertical`)return{col:n,row:0,colSpan:1};if(e===`horizontal`)return{col:0,row:n,colSpan:1};let r=t%2==1&&n===t-1;return{col:r?0:n%2,row:Math.floor(n/2),colSpan:r?2:1}}function nz(e){return e>0?Array.from({length:e},()=>1/e):[]}function rz(e,t,n,r,i){if(!Number.isInteger(t)||t<0||t>=e.length-1||!(r>0)||!Number.isFinite(n))return e;let a=e[t],o=a+e[t+1],s=Math.min(i/r,o/2),c=Math.min(o-s,Math.max(s,a+n/r));return e.map((e,n)=>n===t?c:n===t+1?o-c:e)}function iz(e,t,n,r,i,a,o){let s=r?64:16,[c,l]=o===`cols`?[`ArrowRight`,`ArrowLeft`]:[`ArrowDown`,`ArrowUp`];if(n===c)return rz(e,t,s,i,a);if(n===l)return rz(e,t,-s,i,a);if(n===`Home`)return rz(e,t,-2*i,i,a);if(n===`End`)return rz(e,t,2*i,i,a)}var az=(e,t,n)=>`${e}:${t}:${n}`;function oz(e){let[t,n,r,...i]=e.split(`:`),a=Number(n);if(i.length||!$R.includes(t)||!Number.isInteger(a)||a<2||a>gn||r!==`cols`&&r!==`rows`)return;let o=ez(t,a)[r];return o>1?o:void 0}function sz(e,t){if(!Array.isArray(e)||e.length!==t||!e.every(e=>typeof e==`number`&&Number.isFinite(e)&&e>0))return;let n=e.reduce((e,t)=>e+t,0);return e.map(e=>e/n)}function cz(e){let t;try{t=JSON.parse(e?.getItem(`hub.paneSizes.v1`)??`null`)}catch{return{}}if(typeof t!=`object`||!t||t.v!==1)return{};let n=t.sizes;if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){let n=oz(e),i=n===void 0?void 0:sz(t,n);i&&(r[e]=i)}return r}function lz(e,t,n,r,i,a){let o=az(n,r,i),s=oz(o),c=s===void 0?void 0:sz(a,s);if(!c)return t;let l={...t,[o]:c};try{e?.setItem(ZR,JSON.stringify({v:1,sizes:l}))}catch{}return l}function uz(e,t,n){let r=ez(t,n),i=i=>{let a=e[az(t,n,i)];return a&&a.length===r[i]?a:nz(r[i])};return{cols:i(`cols`),rows:i(`rows`)}}function dz(e,t,n){let r=n?`/s/${encodeURIComponent(n)}`:`/`,i=r===t?`/`:r,a=e.state;(a?.hubSessionPath!==t||a?.hubSessionBack!==i)&&(e.replaceState({hubSessionPath:`/`},``,`/`),i!==`/`&&e.pushState({hubSessionPath:i,hubSessionBack:`/`},``,i),e.pushState({hubSessionPath:t,hubSessionBack:i},``,t))}var fz=200,pz=10,mz=e=>e instanceof Error?e.message:String(e),hz=e=>e&&typeof e==`object`&&typeof e.status==`number`?e.status:void 0,gz=class{timeline;fetch;options;state=`idle`;error;cursor;invalid=!1;generation=0;loading;oldestMessageID;constructor(e,t,n={}){this.timeline=e,this.fetch=t,this.options=n}get hasOlder(){return this.cursor!==void 0}get cutMessageID(){return this.cursor===void 0?void 0:this.oldestMessageID}get limit(){return this.options.limit??80}changed(){this.options.onChange?.()}async first(){let e=this.begin(),t=await this.fetch({limit:this.limit,order:`desc`});e===this.generation&&await this.show(t,e)}async resync(){let e=this.begin(),t=await this.fetch({limit:this.limit,order:`desc`});if(e!==this.generation)return;let n=t.items??[],r=t.older===void 0||n.some(e=>this.timeline.fromHistory(e?.key));t.cursor===void 0&&r?(this.timeline.load(n),this.state===`loading`&&(this.state=this.cursor===void 0?`done`:`idle`),this.changed()):(this.timeline.forgetHistory(),await this.show(t,e))}older(){if(this.loading)return this.loading;if(this.state!==`idle`||this.cursor===void 0)return Promise.resolve();let e=this.generation,t=this.cursor;this.state=`loading`,this.changed();let n=(async()=>{try{let n=await this.fetch({limit:this.limit,before:t});if(e!==this.generation)return;this.timeline.load(n.items,{older:!0}),this.oldestMessageID=_z(n.items),this.cursor=n.older,this.state=n.older===void 0?`done`:`idle`,this.error=void 0}catch(t){if(e!==this.generation)return;this.state=`error`,this.error=mz(t),this.invalid=hz(t)===400}finally{e===this.generation&&(this.loading=void 0,this.changed())}})();return this.loading=n,n}async retry(){if(this.state===`error`){if(this.invalid){let e=this.begin();this.timeline.forgetHistory();try{let t=await this.fetch({limit:this.limit,order:`desc`});e===this.generation&&await this.show(t,e)}catch(t){if(e!==this.generation)return;this.state=`error`,this.error=mz(t),this.invalid=!0,this.changed()}}else return this.state=`idle`,this.error=void 0,this.older()}}begin(){return this.loading=void 0,++this.generation}async show(e,t){if(this.timeline.load(e.items),this.oldestMessageID=_z(e.items),this.error=void 0,this.invalid=!1,e.cursor!==void 0&&e.older===void 0){let n=e.cursor;for(let e=1;n!==void 0&&e<pz;e++){let e=await this.fetch({limit:fz,cursor:n});if(t!==this.generation)return;this.timeline.load(e.items),n=e.cursor}this.cursor=void 0,this.state=`done`}else this.cursor=e.older,this.state=e.older===void 0?`done`:`idle`;this.changed()}};function _z(e){if(!Array.isArray(e))return;let t=e.find(e=>e&&typeof e==`object`&&(e.depth??0)===0);return typeof t?.messageID==`string`&&t.messageID?t.messageID:void 0}var vz=[`native`,`hooks`,`rpc`,`screen`],yz={opencode:`OpenCode`,"claude-code":`Claude Code`,codex:`Codex`},bz=e=>yz[e]??e;function xz(e){let t=e?.harness||`opencode`;if(t===`opencode`)return{native:!0,harness:t,harnessName:`OpenCode`,evidence:`native`,turn:!0,steer:!0,interrupt:!0,stop:!0,permission:!0,form:!0,models:!0,timeline:!0,summary:!0,voice:!0,queued:!1};let n=vz.includes(e?.evidence??``)?e.evidence:`unknown`,r=e?.features?new Set(e.features):void 0,i=e=>!r||r.has(e);return{native:!1,harness:t,harnessName:bz(t),evidence:n,turn:i(`turn`),steer:i(`steer`),interrupt:i(`interrupt`),stop:i(`stop`),permission:i(`permission`),form:i(`form`),models:i(`models`),timeline:i(`timeline`),summary:i(`summary`),voice:i(`conversation`)&&i(`steer`),queued:n===`hooks`||n===`screen`||n===`unknown`}}var Sz={native:{label:`Native`,detail:e=>`The hub sees ${e}'s own events: status and turns are confirmed by the harness.`},hooks:{label:`Hooks`,detail:e=>`The hub follows ${e} through its lifecycle hooks: status updates at hook points, and prompts are queued until its next hook.`},rpc:{label:`RPC`,detail:e=>`The hub drives ${e} through its RPC API: prompts and turns are confirmed by the harness.`},screen:{label:`Screen`,detail:e=>`The hub reads ${e}'s terminal screen: status is a guess that never counts as idle, and prompts are pasted in (at most queued).`},unknown:{label:`Unknown`,detail:e=>`The ${e} spoke declared no evidence level: the session never counts as idle and prompts are at most queued.`}};function Cz(e){if(e.native)return;let t=Sz[e.evidence];return{level:e.evidence,label:t.label,detail:t.detail(e.harnessName)}}function wz(e,t){return e.turn&&e.steer?{show:!0,allowed:!0}:!e.turn&&!e.steer?{show:!1,allowed:!1,hint:`This ${e.harnessName} session takes no prompts from the hub; type in its terminal.`}:t&&!e.steer?{show:!0,allowed:!1,hint:`${e.harnessName} can't take input while it runs here; send once the session is idle.`}:!t&&!e.turn?{show:!0,allowed:!1,hint:`${e.harnessName} takes input here only while the session runs.`}:{show:!0,allowed:!0}}function Tz(e,t){return t===`result`?{tick:`heard`}:e.queued?t===`steered`?{tick:`queued`,toast:`Queued: ${e.harnessName} picks it up at its next step`}:{tick:`queued`}:t===`steered`?{tick:`sent`,toast:`Steered the running session`}:{tick:`sent`}}var Ez={queued:`queued`,retained:`held`,pending:`pending`,dropped:`not delivered`};function Dz(e){return typeof e==`string`?Ez[e]:void 0}function Oz(e){let t=e;if(!t||t.status!==409||t.code!==`unsupported`)return;let n=typeof t.message==`string`?t.message.trim().replace(/\.$/,``):``;return n?`Not available for this session: ${n[0].toLowerCase()}${n.slice(1)}. Use its terminal.`:`Not available for this session. Use its terminal.`}var kz=/data:([\w.+-]+\/[\w.+-]+)?((?:;[\w.+-]+=[^;,\s"'<>]*)*);base64,([A-Za-z0-9+/_-]+={0,2})/gi,Az=/^[A-Za-z0-9+/_-]+={0,2}$/,jz=[`mime`,`mimeType`,`media_type`,`mediaType`];function Mz(e){let t=e.endsWith(`==`)?2:+!!e.endsWith(`=`),n=Math.max(0,Math.floor(e.length*3/4)-t);return n<1024?`${n} B`:n<1048576?`${Math.round(n/1024)} KB`:`${(n/1048576).toFixed(1)} MB`}function Nz(e,t){return`[${e||`data`}, ${Mz(t)} — not shown]`}function Pz(e){return e.includes(`base64,`)?e.replace(kz,(e,t,n,r)=>Nz(t?.toLowerCase(),r)):e}function Fz(e){if(typeof e.data!=`string`||!Az.test(e.data))return;let t=jz.map(t=>e[t]).find(e=>typeof e==`string`);if(t?.toLowerCase().startsWith(`image/`))return t.toLowerCase();if(e.type===`image`||e.type===`base64`)return t||`image`}function Iz(e){return Lz(e)}function Lz(e){if(typeof e==`string`)return Pz(e);if(Array.isArray(e))return e.map(Lz);if(!e||typeof e!=`object`)return e;let t=e,n=Fz(t),r={};for(let[e,i]of Object.entries(t))r[e]=e===`data`&&n?Nz(n,i):Lz(i);return r}var Rz=(e,t,n)=>`/api/sessions/${encodeURIComponent(e)}/timeline/messages/${encodeURIComponent(t)}/files/${n}`,zz=(e,t,n)=>`/api/sessions/${encodeURIComponent(e)}/timeline/messages/${encodeURIComponent(t)}/media/${encodeURIComponent(n)}`,Bz=e=>typeof e==`number`&&Number.isInteger(e)&&e>0,Vz=e=>Mn.includes(e),Hz=(e,t)=>typeof e==`string`&&Dn(e)?.kind===t;function Uz(e,t,n,r){let i=zz(e.sessionID,e.messageID,n.ref);return{key:t,name:r,mime:n.mime,src:i,download:`${i}?download=1`,ref:n.ref,...typeof n.bytes==`number`&&Number.isInteger(n.bytes)&&n.bytes>=0?{bytes:n.bytes}:{},...Bz(n.width)&&Bz(n.height)?{width:n.width,height:n.height}:{}}}var Wz=e=>typeof e.sessionID==`string`&&typeof e.messageID==`string`,Gz=(e,t)=>typeof e.name==`string`&&e.name?e.name:t;function Kz(e,t,n){let r=n?`tool`:`path`,i=e.media;if(!Array.isArray(i)||!Wz(e))return[];let a=[];for(let o of i){if(a.length>=Nn.perRow)break;o&&Hz(o.ref,r)&&typeof o.mime==`string`&&Vz(o.mime)&&a.push({...Uz(e,`${e.key}:${o.ref}`,o,Gz(o,t)),...n?{tool:!0}:{}})}return a}function qz(e){let t=[];if(Array.isArray(e.images))e.images.forEach((n,r)=>{n&&typeof n.mime==`string`&&t.push({key:`${e.key}:${r}`,name:String(n.name||`image`),mime:n.mime,...typeof n.preview==`string`?{src:n.preview}:{}})});else if(Array.isArray(e.files))for(let n of e.files){if(!n||typeof n.mime!=`string`||!Number.isInteger(n.index))continue;let r=`${e.key}:${n.index}`,i=Gz(n,n.mime.startsWith(`image/`)?`image`:`file`);if(n.ref!==void 0){Hz(n.ref,`file`)&&Vz(n.mime)&&Wz(e)?t.push(Uz(e,r,n,i)):t.push({key:r,name:i,mime:n.mime});continue}let a=S_(n.mime)&&Wz(e);t.push({key:r,name:i,mime:n.mime,...a?{src:Rz(e.sessionID,e.messageID,n.index)}:{}})}return t}function Jz(e,t={}){let n=[];for(let r of e)if(!((r.depth??0)>0))switch(r.kind){case`user`:{let e=qz(r),t=typeof r.messageID==`string`&&r.key===`${r.messageID}:text`?{messageID:r.messageID}:{},i=typeof r.note==`string`&&r.note?{note:r.note}:{};(r.text||e.length)&&n.push({type:`user`,key:r.key,text:r.text??``,...e.length?{images:e}:{},...t,...i});break}case`assistant`:{if(!r.text)break;let e=Kz(r,`image`,!1);n.push({type:`assistant`,key:r.key,text:r.text,live:r.live===!0,...typeof r.messageID==`string`&&r.messageID?{messageID:r.messageID}:{},...e.length?{media:e}:{}});break}case`reasoning`:{let e=r.state===`running`,t=!e&&typeof r.at==`number`&&typeof r.completed==`number`?Math.max(0,Math.round((r.completed-r.at)/1e3)):void 0;n.push({type:`thought`,key:r.key,text:r.text??``,running:e,...t===void 0?{}:{seconds:t}});break}case`tool`:{let e=n[n.length-1],t=e?.type===`tools`?e:void 0,i=t??{type:`tools`,key:`tools:${r.key}`,items:[],failed:0,running:0};i.items.push(r);let a=Kz(r,`screenshot`,!0);a.length&&(i.media=[...i.media??[],...a]),r.state===`failed`&&i.failed++,r.state===`running`&&i.running++,t||n.push(i);break}case`message`:n.push(Qz(r));break;case`error`:n.push(r.declined===!0?{type:`error`,key:r.key,label:`${t.denied?.(r)??`Denied`}: the turn stopped`,denied:!0}:Xz(r));break;case`retry`:n.push({type:`retry`,key:r.key,...Yz(`attempt`,r.attempt),...Yz(`next`,r.next),...typeof r.errorType==`string`?{errorType:r.errorType}:{},...Yz(`errorStatus`,r.errorStatus),...typeof r.text==`string`&&r.text?{message:r.text}:{}});break;case`subagent`:r.sessionID&&n.push({type:`subagent`,key:r.key,sessionID:r.sessionID,label:r.label??r.sessionID,state:r.state??`working`})}return n}var Yz=(e,t)=>typeof t==`number`&&Number.isFinite(t)?{[e]:t}:{};function Xz(e){let t=typeof e.text==`string`&&e.text.trim()?e.text.trim():void 0,n=ki(e.errorType),r=ji(e.errorStatus);return{type:`error`,key:e.key,label:n??t??`Error`,...n&&t?{message:t}:{},...r?{status:r}:{}}}function Zz(e,t){return{text:Li(e,t),waiting:Mi(e.next,t)!==void 0}}function Qz(e){let t=e.message&&typeof e.message==`object`?e.message:{},n=typeof t.kind==`string`?t.kind:`msg`,r=e.direction===`out`?`out`:`in`,i=String(t.to??``),a=typeof e.recipient==`string`?e.recipient:void 0,o=Dz(e.delivery),s=n===`primer`?`Hub identity note`:r===`out`?`to ${i}${a&&a!==i?` (→ ${a})`:``}`:`from ${String(t.from??`?`)}`,c=typeof t.from==`string`?t.from:void 0;return{type:`message`,key:e.key,direction:r,kind:n,label:s,text:e.text??``,primer:n===`primer`,...typeof e.state==`string`?{state:e.state}:{},...o?{delivery:o}:{},...c?{from:c}:{}}}var $z=`The provider returned this thought redacted: an encrypted signature, no readable text.`;function eB(e){let t=e.running?`Thinking…`:e.seconds===void 0?`Thought`:`Thought for ${e.seconds}s`;return e.text?{label:t,body:e.text,muted:!1}:{label:t,body:e.running?`Waiting for the model's reasoning…`:$z,muted:!0}}function tB(e,t){if(typeof t.at!=`number`)return{};let n=t.at,r;for(let t of e)t.kind===`user`&&(t.depth??0)===0&&typeof t.at==`number`&&t.at>n&&(r===void 0||t.at<r)&&(r=t.at);return r===void 0?{since:n}:{since:n,until:r}}function nB(e,t){return JSON.stringify(Iz(e??{summary:t.summary||void 0,error:t.error}),null,2)}var rB=I(`<p class=composer-error role=alert>`),iB=I(`<p class="composer-hint muted small">`),aB=I(`<li class="attachment busy"aria-label="Preparing image"><span class="spinner small">`),oB=I(`<ul class=attachments aria-label="Attached images">`),sB=I(`<div><button type=button class=split-main>`),cB=I(`<button type=button class="btn stop"aria-label="Stop the session and its subagents"> Stop`),lB=I(`<span class=sr-only>`),uB=I(`<button type=button class=model-chip title="Voice model (the voice front you talk to in Voice mode)">Voice: `),dB=I(`<form><div class=composer-box><textarea rows=1 aria-label=Message></textarea><input type=file class=sr-only tabindex=-1 aria-hidden=true data-testid=attach-input multiple><div class=composer-actions><button type=button class=icon-btn aria-label="Attach images"></button><span class=grow></span><button type=button></button><button type=submit></button></div></div><div class=composer-meta><span class="muted small"></span><span class=grow>`),fB=I(`<li class=attachment><img><button type=button class=attachment-remove title=Remove>`),pB=I(`<span class="spinner small">`),mB=I(`<span class=session-model><span class=chip-key>Model: `),hB=I(`<button type=button class=split-chev aria-label="Choose microphone"aria-haspopup=dialog>`),gB=I(`<p class="error small pad">`),_B=I(`<div class="menu mic-picker"role=dialog aria-label=Microphone><div class=menu-section>Microphone</div><div class=level aria-label="Input level"role=meter aria-valuemin=0 aria-valuemax=100><span>`),vB=I(`<button type=button class=menu-item role=menuitemradio><span class=menu-check></span><span class=menu-label>`),yB=I(`<span class=muted> · “<!>…”`),bB=I(`<span class=voice-ignored title="Heard as background noise, not sent"> · ignored: “<!>”`),xB=I(`<span class="voice-turn muted"title="Smart Turn (experimental): how sure the model is that you finished your turn"> · `),SB=I(`<span class="chip voice-front"title="Voice front: a fast voice agent answers and relays to the session">front`),CB=I(`<p class="voice-hint voice-front-fallback small"role=status>`),wB=I(`<p class="voice-hint small">Allow notifications to keep a “Voice mode on” notification with an End button while the screen is off. <button type=button class=link>Allow notifications`),TB=I(`<div role=region aria-label="Voice mode"><div class=wave aria-hidden=true></div><span class=voice-state role=status aria-live=polite></span><span class=grow></span><button type=button class=model-chip title="Voice model"></button><button type=button></button><button type=button class="btn small end">End`),EB=I(`<span>`);function DB(e){let r,i,[a,o]=u(!1),c=()=>e.images.length>=__.maxImages,d=()=>{r.style.height=`auto`,r.style.height=`${Math.min(r.scrollHeight,280)}px`};x(()=>{e.draft,queueMicrotask(d)});let f=()=>e.view.primary===`steer`?`Steer`:`Send`;return(()=>{var u=dB(),d=u.firstChild,p=d.firstChild,h=p.nextSibling,g=h.nextSibling,_=g.firstChild,v=_.nextSibling.nextSibling,x=v.nextSibling,S=d.nextSibling,C=S.firstChild;C.nextSibling,u.addEventListener(`drop`,t=>{let n=gS(t.dataTransfer);o(!1),n.length&&(t.preventDefault(),e.onAttach(n))}),u.addEventListener(`dragleave`,e=>{e.currentTarget.contains(e.relatedTarget)||o(!1)}),u.addEventListener(`dragover`,e=>{[...e.dataTransfer?.types??[]].includes(`Files`)&&(e.preventDefault(),o(!0))}),u.addEventListener(`submit`,t=>{t.preventDefault(),e.view.canSubmit&&!e.attaching&&e.onSubmit()}),y(u,n(l,{get when(){return e.error},get children(){var t=rB();return y(t,()=>e.error),t}}),d),y(u,n(l,{get when(){return e.view.hint},get children(){var t=iB();return y(t,()=>e.view.hint),t}}),d),y(d,n(l,{get when(){return e.images.length||e.attaching},get children(){var t=oB();return y(t,n(m,{get each(){return e.images},children:t=>(()=>{var r=fB(),i=r.firstChild,a=i.nextSibling;return a.$$click=()=>e.onDetach(t.id),y(a,n(L,{name:`close`})),s(e=>{var n=t.preview,r=t.name,o=t.name,s=`Remove ${t.name}`;return n!==e.e&&b(i,`src`,e.e=n),r!==e.t&&b(i,`alt`,e.t=r),o!==e.a&&b(i,`title`,e.a=o),s!==e.o&&b(a,`aria-label`,e.o=s),e},{e:void 0,t:void 0,a:void 0,o:void 0}),r})()}),null),y(t,n(l,{get when(){return e.attaching},get children(){return aB()}}),null),t}}),p),p.$$keydown=t=>{t.key===`Enter`&&!t.shiftKey&&!t.isComposing&&!(matchMedia(`(max-width: 760px)`).matches&&`ontouchstart`in window)&&(t.preventDefault(),e.view.canSubmit&&!e.attaching&&e.onSubmit())},p.addEventListener(`paste`,t=>{let n=gS(t.clipboardData);n.length&&(t.preventDefault(),e.onAttach(n))}),p.$$input=t=>e.onInput(t.currentTarget.value);var w=r;typeof w==`function`?t(w,p):r=p,h.addEventListener(`change`,t=>{let n=[...t.currentTarget.files??[]];t.currentTarget.value=``,n.length&&e.onAttach(n)});var T=i;return typeof T==`function`?t(T,h):i=h,_.$$click=()=>i.click(),y(_,n(L,{name:`plus`})),B(v,`click`,e.onDictate,!0),y(v,n(l,{get when(){return!e.transcribing},get fallback(){return pB()},get children(){return n(L,{get name(){return e.dictating===!1?`mic`:`stop`}})}})),y(g,n(l,{get when(){return e.showVoice!==!1},get children(){var t=sB(),r=t.firstChild;return B(r,`click`,e.onVoice,!0),y(r,n(L,{name:`wave`})),y(t,n(OB,{}),null),s(n=>{var i=`split${e.voiceOn?` on`:``}`,a=e.voiceOn,o=e.voiceOn?`End Voice mode`:`Start Voice mode`,s=e.voiceBlocked??(e.voiceOn?`End Voice mode`:`Voice mode: talk hands-free`),c=!!e.voiceBlocked&&!e.voiceOn;return i!==n.e&&k(t,n.e=i),a!==n.t&&b(r,`aria-pressed`,n.t=a),o!==n.a&&b(r,`aria-label`,n.a=o),s!==n.o&&b(r,`title`,n.o=s),c!==n.i&&(r.disabled=n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t}}),x),y(g,n(l,{get when(){return e.view.showStop},get children(){var t=cB(),r=t.firstChild;return B(t,`click`,e.onStop,!0),y(t,n(L,{name:`stop`}),r),s(()=>t.disabled=!e.view.canStop),t}}),x),y(x,n(l,{get when(){return e.view.primary===`send`},get fallback(){return f()},get children(){return[n(L,{name:`send`}),(()=>{var e=lB();return y(e,f),e})()]}})),y(C,()=>e.metaLeft),y(S,n(l,{get when(){return e.sessionModel},children:e=>(()=>{var t=mB();return t.firstChild,y(t,()=>e().label.replace(/^Model: /,``),null),s(n=>{var r=e().title,i=e().title;return r!==n.e&&b(t,`title`,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),y(S,n(l,{get when(){return e.showModels!==!1},get children(){var t=uB();return t.firstChild,t.$$click=()=>e.onModel(`voice`),y(t,()=>e.voiceModel,null),t}}),null),s(t=>{var n=`composer${a()?` dragging`:``}`,r=e.voiceOn?`Voice mode is on — talk, or type here`:e.view.primary===`steer`?`Steer the running session…`:`Reply…`,i=g_.join(`,`),o=c()?`At most ${__.maxImages} images per message`:`Attach images (or paste / drop them here)`,s=c()||e.attaching,l=`icon-btn${e.dictating===!1?``:` recording`}`,d=e.dictating===!1?`Dictate`:`Stop dictation`,f=e.voiceBlocked??(e.dictating===!1?`Dictate`:`Stop dictation (${e.dictating}s left)`),m=!!e.voiceBlocked||e.transcribing||e.voiceOn,g=`btn primary send ${e.view.primary}`,y=!e.view.canSubmit||e.attaching;return n!==t.e&&k(u,t.e=n),r!==t.t&&b(p,`placeholder`,t.t=r),i!==t.a&&b(h,`accept`,t.a=i),o!==t.o&&b(_,`title`,t.o=o),s!==t.i&&(_.disabled=t.i=s),l!==t.n&&k(v,t.n=l),d!==t.s&&b(v,`aria-label`,t.s=d),f!==t.h&&b(v,`title`,t.h=f),m!==t.r&&(v.disabled=t.r=m),g!==t.d&&k(x,t.d=g),y!==t.l&&(x.disabled=t.l=y),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),s(()=>p.value=e.draft),u})()}function OB(){let[e,r]=u(!1),[i,o]=u([]),[c,d]=u(0),[f,p]=u(``),h,g,_,[v,x]=u({right:0,bottom:0}),S=async()=>{_?.(),_=void 0;try{_=await Ay(Fy(),d),p(``)}catch(e){p(e.name===`NotAllowedError`?`Microphone permission was denied.`:`Microphone: ${e.message}`)}},C=async()=>{let e=h.getBoundingClientRect();if(x({right:window.innerWidth-e.right,bottom:window.innerHeight-e.top+6}),r(!0),!navigator.mediaDevices)return p(`This browser cannot use the microphone here (it needs HTTPS).`);o(await ky().catch(()=>[])),S()},w=()=>{r(!1),_?.(),_=void 0,d(0)},T=t=>e()&&!h.contains(t.target)&&!g?.contains(t.target)&&w(),E=t=>e()&&t.key===`Escape`&&!ee(g)&&w();return document.addEventListener(`mousedown`,T),document.addEventListener(`keydown`,E),M(()=>{document.removeEventListener(`mousedown`,T),document.removeEventListener(`keydown`,E),w()}),[(()=>{var r=hB();r.$$click=()=>e()?w():void C();var i=h;return typeof i==`function`?t(i,r):h=r,y(r,n(L,{name:`down`})),s(()=>b(r,`aria-expanded`,e())),r})(),n(l,{get when(){return e()},get children(){return n(pe,{get children(){var e=_B(),r=e.firstChild.nextSibling,o=r.firstChild,u=g;return typeof u==`function`?t(u,e):g=e,y(e,n(m,{get each(){return[{deviceId:``,label:`System default`},...i().filter(e=>e.deviceId&&e.deviceId!=="default")]},children:(e,t)=>(()=>{var n=vB(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{Ly(e.deviceId),S()},y(r,()=>Fy()===e.deviceId?`✓`:``),y(i,()=>e.label||`Microphone ${t()}`),s(()=>b(n,`aria-checked`,Fy()===e.deviceId)),n})()}),r),y(e,n(l,{get when(){return f()},get children(){var e=gB();return y(e,f),e}}),null),s(t=>{var n=`${v().right}px`,i=`${v().bottom}px`,s=Math.round(c()*100),l=`${Math.round(c()*100)}%`;return n!==t.e&&a(e,`right`,t.e=n),i!==t.t&&a(e,`bottom`,t.t=i),s!==t.a&&b(r,`aria-valuenow`,t.a=s),l!==t.o&&a(o,`width`,t.o=l),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}})}})]}var kB={starting:`Starting…`,listening:`Listening`,hearing:`Listening`,transcribing:`Thinking`,sent:`Thinking`,speaking:`Speaking`,paused:`Muted`,suspended:`Paused — mic stopped by the phone (screen off). Unlock to resume.`,off:`Off`};function AB(e,t){let n=e?[e.summary,e.detail]:[];return t&&n.push(t.mode===`silero`?`speech detection: on-device model${t.avgMs?` (${t.avgMs.toFixed(1)} ms per 32 ms of audio)`:``}`:`speech detection: loudness (the on-device model is loading or unavailable)`),n.length?n.join(`
|
|
28
|
-
`):void 0}function
|
|
27
|
+
`){let e=c.length;for(;c[e-1]===` `;)e--;c=c.slice(0,e),l({type:`br`}),u++;continue}if(e==="`"){let e=Sj(n,u,"`"),t=Ej(a,u+e,e);if(t>=0||r){let r=n.slice(u+e,t>=0?t:void 0);r.length>2&&r.startsWith(` `)&&r.endsWith(` `)&&r.trim()&&(r=r.slice(1,-1)),l({type:`code`,text:r}),u=t>=0?t+e:n.length;continue}c+=n.slice(u,u+e),u+=e;continue}let s=n.slice(u,u+2),d=xj[s];if(d&&i!==void 0&&n[u+2]!==void 0&&!yj.test(n[u+2])&&n[u+2]!==e&&(e!==`_`||u===0||!bj.test(n[u-1]))){let t=Oj(a,s,u+3,s,t=>!yj.test(n[t-1])&&(e!==`_`||!bj.test(n[t+2]??``)));if(t>0||r){l({type:d,children:o(n.slice(u+2,t>0?t:void 0),t<0)}),u=t>0?t+2:n.length;continue}}if((e===`*`||e===`_`)&&i!==void 0&&i!==e&&!yj.test(i)&&(e===`*`||u===0||!bj.test(n[u-1]))){let t=Oj(a,e,u+1,e,t=>n[t+1]===e||n[t-1]===e?!1:!yj.test(n[t-1])&&(e!==`_`||!bj.test(n[t+1]??``)));if(t>u+1||r){l({type:`em`,children:o(n.slice(u+1,t>u?t:void 0),t<0)}),u=t>u?t+1:n.length;continue}}let f=e===`!`&&i===`[`;if(e===`[`||f){let e=f?u+1:u,i=Aj(a,e);if(i>0&&n[i+1]===`(`){let s=jj(a,i+2),c=()=>o(n.slice(e+1,i),!1,!0);if(s>0){let e=Nj(n.slice(i+2,s)),r=_j(e);f?l({type:`image`,alt:Pj(c()),...r?{href:r}:{},src:e}):r&&!t.inLink?l({type:`link`,href:r,children:c()}):!r&&!t.inLink&&e?l({type:`label`,target:e,children:c()}):l(...c()),u=s+1;continue}if(r&&!Mj(a,i)){l(...f?[{type:`text`,text:Pj(c())}]:c()),u=n.length;continue}}}if(e===`<`&&!t.inLink){let e=/^<([a-zA-Z][a-zA-Z0-9+.-]{1,31}:[^\s<>]*)>/.exec(n.slice(u,u+2048)),t=/^<([^\s<>@\\]+@[^\s<>@\\]+\.[^\s<>@\\]+)>/.exec(n.slice(u,u+512)),r=e??t;if(r){let t=_j(e?r[1]:`mailto:${r[1]}`);t?l({type:`link`,href:t,children:[{type:`text`,text:r[1]}]}):c+=r[0],u+=r[0].length;continue}}if((e===`h`||e===`H`)&&!t.inLink&&(u===0||!/[\p{L}\p{N}_/]/u.test(n[u-1]))&&n.slice(u-2,u)!==`](`){let e=Fj(n,u),t=e&&_j(e);if(e&&t){l({type:`link`,href:t,children:[{type:`text`,text:e}]}),u+=e.length;continue}}c+=e,u++}return c&&s.push({type:`text`,text:c}),s}var Lj={files:200,fileBytes:5242880,totalBytes:20971520,chunkBytes:524288,inlineBytes:393216,bundlePathMax:200,pathMax:4096,refMax:300,skipped:200};new Set(Object.values({html:`text/html`,htm:`text/html`,css:`text/css`,js:`text/javascript`,mjs:`text/javascript`,json:`application/json`,txt:`text/plain`,csv:`text/csv`,md:`text/markdown`,pdf:`application/pdf`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`}));var Rj=e=>typeof e==`string`&&e.length>0&&e.length<=Lj.pathMax&&!/[\u0000\r\n]/.test(e);function zj(e){return!Rj(e)||e.startsWith(`~`)||/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)&&!/^file:/i.test(e)?!1:/\.html?$/i.test(e)}var Bj=new Set([`html`,`htm`]),Vj=e=>Bj.has(e.toLowerCase());function Hj(e){let t=[],n=e=>{for(let r of e)if(r.type===`code`&&Vj(r.lang))t.push(r);else if(r.type===`quote`)n(r.blocks);else if(r.type===`list`)for(let e of r.items)n(e.blocks)};return n(e),t}var Uj=new Map,Wj=256;function Gj(e){let t=Uj.get(e);if(t!==void 0)return t;let n=e.includes("```")||e.includes(`~~~`)?Hj(aj(e)).length:0;return Uj.size>=Wj&&Uj.delete(Uj.keys().next().value),Uj.set(e,n),n}function Kj(e,t){let n=new Set(t?[t]:[]);for(let t of e)t.type===`assistant`&&t.messageID&&t.live&&t.key===`${t.messageID}:text`&&n.add(t.messageID);let r=new Map,i=new Map;for(let t of e){if(t.type!==`assistant`||!t.messageID||n.has(t.messageID))continue;let e=r.get(t.messageID)??0;i.set(t.key,{messageID:t.messageID,base:e}),r.set(t.messageID,e+Gj(t.text))}return i}function qj(e){let t=e?.status,n=e?.code,r=e instanceof Error?e.message:String(e);return e instanceof Error&&e.name===`NetworkError`?r:typeof t==`number`?t===404?n===`too_old`?`Can't preview this message (it's too far back or no longer available)`:`This HTML block isn't available to preview yet — try again in a moment.`:t===409?`The session's machine is offline. Try again when it's back.`:t===413?`This HTML block is too large to preview (over 2 MiB).`:t===422?`This hub can't store previews.`:t===400?`This block can't be previewed.`:t===429?`Too many previews right now. Try again in a moment.`:`Couldn't open the preview: ${r}`:`Couldn't open the preview: ${r}`}function Jj(e){let t=e.type===`code`?e.text:e.type===`link`?e.href:e.type===`label`?e.target:void 0;return t!==void 0&&zj(t)?t:void 0}var Yj=Math.round(Lj.fileBytes/1048576);function Xj(e){let t=e?.status,n=e?.code,r=e instanceof Error?e.message:String(e);return e instanceof Error&&e.name===`NetworkError`?r:t===404?n===`refused`?`This page isn't one of this session's files, so it can't be previewed.`:`This message isn't available to preview anymore.`:t===409?n===`changed`?`The page kept changing while it was read. Try again.`:`The session's machine is offline. Try again when it's back.`:t===413?`This page is too large to preview (over ${Yj} MiB).`:t===422?/previewBundle/.test(r)?`The session's machine can't preview local pages yet (update Hub there).`:`This hub can't store previews.`:t===502?`The session's machine sent a broken preview.`:t===429?`Too many previews right now. Try again in a moment.`:t===400?`This page can't be previewed.`:`Couldn't open the preview: ${r}`}var Zj={missing:`not found`,refused:`not one of this session's files`,too_large:`over ${Yj} MiB`,limit:`over the preview's size or file limit`,name:`a file name previews can't hold`,type:`a type previews can't hold`};function Qj(e,t=0){let n=e??[],r=n.length+t;if(r!==0)return{title:`${r} ${r===1?`file`:`files`} not included`,items:n.map(e=>`${e.path} — ${Zj[e.reason]??e.reason}`),...t>0?{more:`and ${t} more`}:{}}}var[$j,eM]=u(new Map),tM=e=>$j().get(e);function nM(e,t){let n=Array.isArray(t.skipped)?t.skipped.filter(e=>e&&typeof e.path==`string`&&typeof e.reason==`string`):[],r=typeof t.skippedMore==`number`&&t.skippedMore>0?t.skippedMore:0;eM(t=>new Map(t).set(e,{skipped:n,more:r}))}var rM=I(`<span role=alert>`),iM=I(`<button type=button>`);async function aM(e){let{sessionID:t,messageID:n}=e,r=`path`in e?{messageID:n,path:e.path}:{messageID:n,block:e.block},i=await $e(`${H(t)}/previews`,r),a=i?.artifact?.id;if(typeof a!=`string`||!a)throw Error(`The hub's answer wasn't a preview.`);return`path`in e&&nM(a,i),a}function oM(e){let[t,r]=u(!1),[i,a]=u(),o=()=>`path`in e.target,c=async()=>{if(!(t()||e.waiting)){r(!0),a(void 0);try{let t=await aM(e.target);Sn(t)||a(vn)}catch(e){a(e instanceof Error&&e.message===`The hub's answer wasn't a preview.`?e.message:o()?Xj(e):qj(e))}finally{r(!1)}}},d=()=>e.waiting?`Load earlier messages to preview`:o()?`Preview this page and its files in an isolated frame beside the session`:`Preview this HTML in an isolated frame beside the session`;return[n(l,{get when(){return i()},get children(){var t=rM();return y(t,i),s(()=>k(t,e.inline?`md-preview-err`:`code-preview-err`)),t}}),(()=>{var n=iM();return n.$$click=()=>void c(),y(n,()=>t()?`Opening…`:`Preview`),s(r=>{var i=e.inline?`md-preview`:`code-btn code-preview`,a=t(),s=t()||e.waiting,c=d(),l=o()?`Preview ${e.target.path}`:void 0;return i!==r.e&&k(n,r.e=i),a!==r.t&&b(n,`aria-busy`,r.t=a),s!==r.a&&(n.disabled=r.a=s),c!==r.o&&b(n,`title`,r.o=c),l!==r.i&&b(n,`aria-label`,r.i=l),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),n})()]}z([`click`]);var sM=`/api/agent/artifacts`,cM={textBytes:2097152,imageBytes:10485760,editBytes:1048576,revisionsPage:20},lM=encodeURIComponent,uM=e=>`${sM}/${lM(e)}`,dM=(e,t)=>`${uM(e)}/revisions?limit=${cM.revisionsPage}${t?`&cursor=${lM(t)}`:``}`,fM=(e,t)=>`${uM(e)}/revisions/${lM(t)}`,pM=(e,t,n)=>`${fM(e,t)}/blobs/${lM(n)}`,mM=e=>typeof e==`object`&&!!e&&!Array.isArray(e),hM=e=>typeof e==`string`&&e.length>0,gM=e=>typeof e==`number`&&Number.isFinite(e),_M=e=>typeof e==`string`&&Tn.includes(e),vM=(e,t)=>mM(e)&&mM(e[t])?e[t]:e;function yM(e){let t=vM(e,`artifact`);if(!mM(t)||!hM(t.id)||typeof t.title!=`string`||!_M(t.kind)||!hM(t.latestRevisionID)||!gM(t.revision))return;let n=Array.isArray(t.tags)?t.tags.filter(e=>typeof e==`string`):void 0;return{v:1,id:t.id,title:t.title,kind:t.kind,state:t.state===`archived`?`archived`:`active`,visibility:t.visibility===`workspace`?`workspace`:`private`,latestRevisionID:t.latestRevisionID,revision:t.revision,createdAt:gM(t.createdAt)?t.createdAt:0,updatedAt:gM(t.updatedAt)?t.updatedAt:0,...hM(t.description)?{description:t.description}:{},...hM(t.workspaceID)?{workspaceID:t.workspaceID}:{},...hM(t.createdBySessionID)?{createdBySessionID:t.createdBySessionID}:{},...n?.length?{tags:n}:{},...t.origin===`preview`?{origin:`preview`}:{},...bM(t.provenance)??{}}}function bM(e){if(mM(e)&&hM(e.sessionID)&&hM(e.messageID)){if(hM(e.path))return{provenance:{sessionID:e.sessionID,messageID:e.messageID,path:e.path}};if(gM(e.block))return{provenance:{sessionID:e.sessionID,messageID:e.messageID,block:e.block}}}}function xM(e){if(mM(e)){if(e.kind===`user`)return{kind:`user`};if(e.kind===`session`&&hM(e.sessionID))return{kind:`session`,sessionID:e.sessionID};if(e.kind===`ai_job`&&hM(e.jobID))return{kind:`ai_job`,jobID:e.jobID}}}function SM(e){let t=vM(e,`revision`);if(!mM(t)||!hM(t.id)||!hM(t.artifactID)||!gM(t.number)||!Array.isArray(t.blobs))return;let n=xM(t.author);if(!n)return;let r=t.blobs.filter(e=>bn(e)===void 0);return{v:1,id:t.id,artifactID:t.artifactID,number:t.number,blobs:r.map(e=>({hash:e.hash,bytes:e.bytes,mediaType:e.mediaType,...e.path===void 0?{}:{path:e.path}})),author:n,createdAt:gM(t.createdAt)?t.createdAt:0,...hM(t.baseRevisionID)?{baseRevisionID:t.baseRevisionID}:{},...hM(t.entry)?{entry:t.entry}:{}}}function CM(e){let t=mM(e)?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>SM(e)??[]):[],...hM(t.cursor)?{cursor:t.cursor}:{}}}function wM(e){return e.kind===`user`?`You`:e.kind===`session`?`Session ${e.sessionID.slice(0,12)}…`:`AI job`}var TM=[`text/markdown`,`text/plain`,`text/csv`,`text/html`,`text/css`,`text/javascript`,`application/json`],EM=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`image/svg+xml`],DM={markdown:{"text/markdown":`markdown`,"text/plain":`markdown`},code:Object.fromEntries(TM.map(e=>[e,`code`])),image:Object.fromEntries(EM.map(e=>[e,`image`])),table:{"text/csv":`table`,"application/json":`table`},chart:{"application/json":`chart`},dashboard:{"application/json":`dashboard`},file:{...Object.fromEntries(EM.map(e=>[e,`image`])),"text/plain":`text`,"text/markdown":`text`}},OM={ts:`ts`,tsx:`tsx`,js:`js`,jsx:`jsx`,mjs:`js`,cjs:`js`,py:`python`,go:`go`,rs:`rust`,sh:`bash`,bash:`bash`,json:`json`,css:`css`,html:`html`,htm:`html`,md:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`toml`,sql:`sql`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,rb:`ruby`,swift:`swift`,kt:`kotlin`,diff:`diff`,csv:`csv`,txt:``},kM={"text/javascript":`js`,"text/css":`css`,"application/json":`json`,"text/html":`html`,"text/markdown":`markdown`,"text/csv":`csv`};function AM(e){let t=e.path?.split(`/`).pop()?.split(`.`).slice(1).pop()?.toLowerCase();return t!==void 0&&t in OM?OM[t]:kM[e.mediaType]??``}function jM(e,t){let n=t.blobs;if(Cn.includes(e))return{mode:`isolated`,files:n,...n[0]?{file:MM(t)??n[0]}:{}};if(!n.length)return{mode:`empty`,files:n};let r=DM[e],i=MM(t)??n.find(e=>r[e.mediaType])??n[0],a=r[i.mediaType];if(!a)return{mode:`download`,file:i,files:n,note:`A ${i.mediaType} file can't be shown as ${e===`image`?`an`:`a`} ${e} here.`};let o=a===`image`?cM.imageBytes:cM.textBytes;return i.bytes>o?{mode:`download`,file:i,files:n,note:`This file is too large to preview (${Math.ceil(i.bytes/1024)} KiB).`}:{mode:a,file:i,files:n,...a===`code`?{lang:AM(i)}:{}}}function MM(e){return e.entry===void 0?void 0:e.blobs.find(t=>t.path===e.entry)}var NM=class extends Error{limit;name=`TooLargeError`;code=`too_large`;constructor(e){super(`A file here is at most ${Math.round(e/1024)} KiB`),this.limit=e}};async function PM(e,t){let n=Number(e.headers.get(`content-length`)??``);if(Number.isFinite(n)&&n>t)throw await e.body?.cancel().catch(()=>{}),new NM(t);if(!e.body)return new Uint8Array;let r=e.body.getReader(),i=[],a=0;for(;;){let{done:e,value:n}=await r.read();if(e)break;if(a+=n.byteLength,a>t)throw await r.cancel().catch(()=>{}),new NM(t);i.push(n)}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return o}function FM(e){let t=e&&typeof e==`object`?e:{},n=typeof t.status==`number`?t.status:0,r=typeof t.message==`string`?t.message:``;return t.name===`NetworkError`||n===503?{kind:`offline`,text:`Can't reach the hub right now. Nothing was lost; try again when it's back.`}:t.name===`TooLargeError`||t.code===`too_large`?{kind:`too_large`,text:r||`The file is too large.`}:n===404||n===403?{kind:`not_found`,text:`This artifact doesn't exist or you can't see it.`}:n===401?{kind:`forbidden`,text:`This device isn't signed in to the hub.`}:n===422||t.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub yet.`}:n===409||t.code===`conflict`?{kind:`conflict`,text:`The artifact changed since you opened it.`}:n===429||t.code===`rate_limited`?{kind:`rate_limited`,text:r?`Limit reached: ${r}`:`A limit was reached; try again later.`}:n===400?{kind:`invalid`,text:r||`The hub refused the change.`}:{kind:`error`,text:r?`Something went wrong: ${r}`:`Something went wrong (HTTP ${n}).`}}var IM=e=>new TextEncoder().encode(e).byteLength;function LM(e,t){if(e.state!==`active`||t.id!==e.latestRevisionID||Cn.includes(e.kind)||t.blobs.length!==1)return!1;let n=t.blobs[0];return TM.includes(n.mediaType)&&n.bytes<=cM.editBytes}function RM(e,t,n){if(IM(n)>cM.editBytes)throw new NM(cM.editBytes);return{baseRevisionID:e,upload:[{mediaType:t.mediaType,data:n,encoding:`utf8`,...t.path===void 0?{}:{path:t.path}}]}}var zM=e=>`hub.artifactDraft.v1.${e}`;function BM(e,t){try{let n=e?.getItem(zM(t)),r=n?JSON.parse(n):void 0;return mM(r)&&r.v===1&&hM(r.base)&&typeof r.text==`string`?{v:1,base:r.base,text:r.text}:void 0}catch{return}}function VM(e,t){let n=BM(t.storage,e.artifactID),r=n?n.base===e.baseRevisionID?{status:`editing`,draft:n.text,baseRevisionID:n.base,restored:!0}:{status:`conflict`,draft:n.text,baseRevisionID:n.base,latestRevisionID:e.baseRevisionID,restored:!0}:{status:`editing`,draft:e.original,baseRevisionID:e.baseRevisionID},i=e.original,a,o=e=>{r=e,t.onChange()},s=()=>{try{r.draft===i&&r.baseRevisionID===e.baseRevisionID?t.storage?.removeItem(zM(e.artifactID)):IM(r.draft)<=cM.editBytes&&t.storage?.setItem(zM(e.artifactID),JSON.stringify({v:1,base:r.baseRevisionID,text:r.draft}))}catch{}};return{state:()=>r,setDraft(e){o({...r,draft:e,status:r.status===`conflict`?`conflict`:`editing`}),s()},async save(){if(r.status===`saving`||r.status===`conflict`||r.draft===i&&r.baseRevisionID===e.baseRevisionID)return;let n;try{n=RM(r.baseRevisionID,e.file,r.draft)}catch(e){o({...r,status:`error`,error:{kind:`too_large`,text:`${e.message}; shorten the draft to save it.`}});return}let c=`${r.baseRevisionID}\n${r.draft}`,l=a?.sig===c?a.key:t.newKey();a={sig:c,key:l};let u=r;o({...r,status:`saving`});try{let r=await t.revise(e.artifactID,n,l);return i=u.draft,t.storage?.removeItem(zM(e.artifactID)),o({status:`saved`,draft:u.draft,baseRevisionID:r.id}),r}catch(e){let t=FM(e),n=e.details;t.kind===`conflict`?o({...u,status:`conflict`,error:t,...hM(n?.latestRevisionID)?{latestRevisionID:n.latestRevisionID}:{}}):o({...u,status:`error`,error:t}),s();return}},rebase(e){let{latestRevisionID:t,error:n,...i}=r;o({...i,status:`editing`,baseRevisionID:e}),s()},discard(){t.storage?.removeItem(zM(e.artifactID)),a=void 0,o({status:`editing`,draft:i,baseRevisionID:e.baseRevisionID})}}}var HM=/^\/artifacts\/([^/?#]+)(?:\/revisions\/([^/?#]+))?$/;function UM(e){let t=HM.exec(e);if(!t)return;let[,n,r]=t;if(_e(`artifact`,n)&&(r===void 0||_e(`revision`,r)))return r===void 0?{id:n}:{id:n,rev:r}}var WM=e=>({ok:!1,reason:e});function GM(e){let t=e?.status;return WM(t===404||t===403?`not_found`:`error`)}async function KM(e,t){let n;try{n=await t.artifact(e.id)}catch(e){return GM(e)}if(n.id!==e.id)return WM(`not_found`);if(n.kind!==`image`&&n.kind!==`file`)return WM(`not_image`);let r=e.rev??n.latestRevisionID,i;try{i=await t.revision(n.id,r)}catch(e){return GM(e)}if(i.id!==r||i.artifactID!==n.id)return WM(`not_found`);let a=qM(n,i);return a?a.bytes>Nn.maxBytes?WM(`too_large`):{ok:!0,artifactID:n.id,revisionID:r,title:n.title,file:a,src:pM(n.id,r,a.hash),page:`/artifacts/${encodeURIComponent(n.id)}`}:WM(`not_image`)}function qM(e,t){let n=jM(e.kind,t),r=n.file;if(r&&Mn.includes(r.mediaType))return n.mode===`image`||n.mode===`download`?r:void 0}function JM(e){let t=e.now??Date.now,n=e.ttlMs??3e4,r=jn(e.limit??3),i=new Map;return{resolve(a){let o=`${a.id}/${a.rev??``}`,s=i.get(o);if(s&&t()-s.at<=n)return s.answer;let c=r.acquire().then(async t=>{try{return await KM(a,e.reader)}finally{t()}});return i.set(o,{at:t(),answer:c}),c}}}var YM={text:`No longer available from this artifact`,retry:!1},XM={text:`Artifacts aren't available on this hub`,retry:!1};function ZM(e,t){return t===`not_found`||t===void 0&&e===404?{...YM}:t===`unsupported`||t===void 0&&e===422?{...XM}:Ln(e,t)}var QM=I(`<a class=md-image target=_blank rel="noopener noreferrer">`),$M=I(`<span class=md-artifact><a class=md-artifact-link title="Open the artifact">`),eN=()=>new W(404,`No such artifact`),tN=JM({reader:{async artifact(e){let t=yM(await G(uM(e)));if(!t)throw eN();return t},async revision(e,t){let n=SM(await G(fM(e,t)));if(!n)throw eN();return n}}}),nN={not_found:`Image (artifact not found)`,not_image:`Artifact (not an image)`,too_large:`Image (too large to show inline)`,error:`Image (couldn't load the artifact)`};function rN(e){let[t]=d(()=>UM(e.href),e=>tN.resolve(e)),r=()=>{let e=t.state===`ready`?t():void 0;return e?.ok?e:void 0},i=t=>({key:`artifact:${t.artifactID}:${t.revisionID}:${t.file.hash}`,name:e.alt||t.title||`image`,mime:t.file.mediaType,src:t.src,bytes:t.file.bytes,download:t.src}),a=t=>(()=>{var n=QM();return b(n,`title`,t),y(n,()=>e.alt||`image`),s(()=>b(n,`href`,e.href)),n})();return n(v,{get fallback(){return a(t.state===`ready`&&!t().ok?nN[t().reason]:`Image (opens in a new tab)`)},get children(){return n(o,{get when(){return r()},children:e=>{let t=C(()=>i(e()));return(()=>{var r=$M(),i=r.firstChild;return y(r,n(zn,{get images(){return[t()]},children:e=>n(Fn,{get image(){return t()},class:`md-media`,explain:ZM,onOpen:()=>e(t().key)})}),i),y(i,()=>e().title||`Artifact`),s(t=>{var n=e().artifactID,a=e().page;return n!==t.e&&b(r,`data-artifact`,t.e=n),a!==t.t&&b(i,`href`,t.t=a),t},{e:void 0,t:void 0}),r})()}})}})}var iN=e=>`/api/media/remote?url=${encodeURIComponent(e)}`;function aN(e,t){let n;try{n=new URL(e,t.origin)}catch{return{kind:`invalid`}}if(n.origin===new URL(t.origin).origin)return{kind:`same-origin`};if(n.protocol!==`http:`&&n.protocol!==`https:`)return{kind:`invalid`};let r=mw(n.href),i=r??n.host.replace(/\.(?=:|$)/,``),a=gw(i);if(!t.enabled)return{kind:`off`,host:i,unicode:a,url:e};let o=n.username!==``||n.password!==``;return r&&!o&&(hw(t.allowlist,r)||t.sessionHosts.includes(r))?{kind:`auto`,host:r,src:iN(e)}:{kind:`card`,host:i,unicode:a,src:iN(e),url:e}}var oN=I(`<span class=remote-image>`),sN=I(`<span class=remote-card-unicode>(<!>)`),cN=I(`<span class=remote-card-alt>`),lN=I(`<button type=button class="btn small">Always allow `),uN=I(`<span class=remote-card-actions><button type=button class="btn small">Load image`),dN=I(`<button type=button class=remote-card-session>Load all from this domain in this session`),fN=I(`<span class=remote-card><span class=remote-card-head><span class=remote-card-domain></span></span><button type=button class=remote-card-url>`),pN=I(`<span class=remote-card-off>Web images are turned off on this hub`),mN=c(``),hN=e=>aN(e,{origin:location.origin,allowlist:[],sessionHosts:[],enabled:!0}).kind!==`same-origin`,gN=(e,t=64)=>{let n=e.replace(/^https?:\/\//i,``);return n.length>t?`${n.slice(0,t-21)}…${n.slice(-20)}`:n};function _N(e){let t=le(mN),[i,a]=u(!1),[c,d]=u(!1),[f,p]=u(!1),m=C(()=>{let n=Sw();return aN(e.href,{origin:location.origin,allowlist:n?.allowlist??[],sessionHosts:Ow(t),enabled:n?.remoteFetch!==!1})}),h=()=>{let e=m();return e.kind===`card`||e.kind===`off`?e:void 0},g=()=>{let e=m();return e.kind===`auto`||e.kind===`card`&&i()?e.src:void 0},_=()=>e.alt||h()?.host||`image`,x=async e=>{p(!0);try{await Tw(e),q(`Images from ${e} now load at once`)}catch(t){q(`Could not allow ${e}: ${U(t)}`,`err`)}finally{p(!1)}};return(()=>{var i=oN();return y(i,n(v,{get children(){return[n(o,{get when(){return g()},children:e=>{let t={key:e(),name:_(),mime:`image/*`,src:e()};return n(zn,{images:[t],children:e=>n(Fn,{image:t,class:`md-media`,onOpen:()=>e(t.key)})})}}),n(o,{get when(){return h()},children:i=>(()=>{var o=fN(),u=o.firstChild,p=u.firstChild,m=u.nextSibling;return y(u,n(L,{name:`image`}),p),y(p,()=>i().host),y(u,n(l,{get when(){return i().unicode!==i().host},get children(){var e=sN(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,()=>i().unicode,t),e}}),null),m.$$click=()=>d(!c()),y(m,(()=>{var e=r(()=>!!c());return()=>e()?i().url:gN(i().url)})()),y(o,n(l,{get when(){return e.alt},get children(){var t=cN();return y(t,()=>e.alt),t}}),null),y(o,n(l,{get when(){return i().kind===`card`},get fallback(){return pN()},get children(){return[(()=>{var e=uN(),t=e.firstChild;return t.$$click=()=>a(!0),y(e,n(l,{get when(){return!i().host.includes(`:`)},get children(){var e=lN();return e.firstChild,e.$$click=()=>void x(i().host),y(e,()=>i().host,null),s(()=>e.disabled=f()),e}}),null),e})(),n(l,{get when(){return!i().host.includes(`:`)},get children(){var e=dN();return e.$$click=()=>kw(t,i().host),e}})]}}),null),s(e=>{var t=i().url,n=i().kind,r=c(),a=`Web address: ${i().url}`;return t!==e.e&&b(o,`title`,e.e=t),n!==e.t&&b(o,`data-state`,e.t=n),r!==e.a&&b(m,`aria-expanded`,e.a=r),a!==e.o&&b(m,`aria-label`,e.o=a),e},{e:void 0,t:void 0,a:void 0,o:void 0}),o})()})]}})),s(t=>{var n=e.alt,r=m().host;return n!==t.e&&b(i,`data-alt`,t.e=n),r!==t.t&&b(i,`data-host`,t.t=r),t},{e:void 0,t:void 0}),i})()}z([`click`]);var vN=e=>`/api/media/unfurl?url=${encodeURIComponent(e)}`;function yN(e,t){if(!t.enabled)return{kind:`none`};let n;try{n=new URL(e,t.origin)}catch{return{kind:`none`}}if(n.protocol!==`http:`&&n.protocol!==`https:`||n.origin===new URL(t.origin).origin||n.username!==``||n.password!==``)return{kind:`none`};let r=mw(n.href);return r?{kind:hw(t.allowlist,r)?`auto`:`tap`,host:r,url:n.href}:{kind:`none`}}function bN(e,t){for(let n of e)n.type===`link`?t.push(n.href):(n.type===`strong`||n.type===`em`||n.type===`del`||n.type===`mark`)&&bN(n.children,t)}function xN(e,t,n={}){let r=new Set,i=new Set,a=new Map;if(n.streaming||!t.enabled)return{auto:r,tap:i,cards:a};let o=(e,n)=>{for(let o of n){let n=yN(o,t);if(n.kind===`none`||r.has(n.url)||i.has(n.url))continue;n.kind===`auto`&&r.size<3?r.add(n.url):i.add(n.url);let s=a.get(e)??[];s.push(n.url),a.set(e,s)}},s=e=>{for(let t of e){let e=[];if(t.type===`paragraph`||t.type===`heading`)bN(t.children,e);else if(t.type===`table`)for(let n of[t.head,...t.rows])for(let t of n)bN(t,e);else if(t.type===`list`)for(let e of t.items)s(e.blocks);else t.type===`quote`&&s(t.blocks);e.length&&o(t,e)}};return s(e),{auto:r,tap:i,cards:a}}function SN(e,t){if(typeof e!=`string`||!e)return;let n=aN(e,{origin:t.origin,allowlist:t.allowlist,sessionHosts:[],enabled:t.enabled});return n.kind===`auto`?n.src:void 0}function CN(e,t){return t===`not_html`||e===415?{text:`No preview: not a web page`,retry:!1}:t===`disabled`?{text:`Link previews are turned off on this hub`,retry:!1}:t===`bad_url`||e===400?{text:`This link can't be previewed`,retry:!1}:t===`refused`||e===403?{text:`No preview: that address is not allowed`,retry:!1}:t===`rate_limited`||e===429?{text:`Too many previews right now: try again`,retry:!0}:t===`timeout`||e===504?{text:`No preview: the site didn't answer in time`,retry:!0}:t===`upstream`||e===502?{text:`No preview: couldn't reach the site`,retry:!0}:e===0?{text:`Couldn't load the preview (offline?)`,retry:!0}:{text:`Couldn't load the preview`,retry:!0}}var wN=class extends Error{reason;status;code;constructor(e,t=0,n){super(e.text),this.reason=e,this.status=t,this.code=n}},TN=256,EN={title:200,description:300,siteName:100},DN=(e,t)=>new wN(CN(e,t),e,t),ON=/[\u0000-\u001f\u007f-\u009f\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/g;function kN(e,t){if(typeof e!=`string`)return;let n=e.replace(ON,``).trim();return n?n.length>t?`${n.slice(0,t-1)}…`:n:void 0}function AN(e,t){let n=e&&typeof e==`object`?e:{},r=typeof n.url==`string`&&/^https?:\/\//i.test(n.url)?n.url:t,i=kN(n.title,EN.title),a=kN(n.description,EN.description),o=kN(n.siteName,EN.siteName),s=typeof n.image==`string`&&/^https?:\/\//i.test(n.image)?n.image:void 0;return{url:r,...i?{title:i}:{},...a?{description:a}:{},...o?{siteName:o}:{},...s?{image:s}:{}}}function jN(e={}){let t=e.fetch??((...e)=>fetch(...e)),n=e.slots??jn(3),r=e.timeoutMs??2e4,i=new Map,a=new Map,o=new Map;async function s(e){let i=await n.acquire(),a=new AbortController,o=!1,s=setTimeout(()=>(o=!0,a.abort()),r);try{let n;try{n=await t(vN(e),{credentials:`same-origin`,referrerPolicy:`no-referrer`,signal:a.signal})}catch{throw o?DN(504,`timeout`):DN(0)}let r=await n.json().catch(()=>void 0);if(!n.ok)throw DN(n.status,typeof r?.code==`string`?r.code:void 0);if(!r||typeof r!=`object`)throw DN(500);return AN(r,e)}finally{clearTimeout(s),i()}}return{load(e){let t=i.get(e);if(t)return Promise.resolve(t);let n=a.get(e);if(n)return Promise.reject(n);let r=o.get(e);if(r)return r;let c=s(e).then(t=>(o.delete(e),i.set(e,t),i.size>TN&&i.delete(i.keys().next().value),t),t=>{o.delete(e);let n=t instanceof wN?t:DN(0);throw a.set(e,n),n});return o.set(e,c),c},forget(e){a.delete(e)}}}var MN=I(`<button type=button class=link-preview-btn>`),NN=I(`<div class=link-cards>`),PN=I(`<div class=link-card>`),FN=I(`<span class=link-card-loading>Loading a preview of <!>…`),IN=I(`<span class=link-card-title>`),LN=I(`<span class=link-card-desc>`),RN=I(`<a class=link-card-link target=_blank rel="noopener noreferrer"><span class=link-card-site>`),zN=I(`<button type=button class="btn small">Retry`),BN=I(`<span class=link-card-failed><span class=link-card-note>`),VN=jN({slots:On}),HN=c(()=>void 0);function UN(e){let t=le(HN),r=C(()=>{let n=t();if(!n)return;let r=yN(e.href,n.context);return r.kind!==`none`&&n.plan.tap.has(r.url)&&!n.tapped.has(r.url)?r:void 0});return n(l,{get when(){return r()},children:e=>(()=>{var r=MN();return r.$$click=()=>t()?.tap(e().url),y(r,n(L,{name:`search`})),s(t=>{var n=`Preview ${e().host}`,i=`Preview ${e().host}`;return n!==t.e&&b(r,`aria-label`,t.e=n),i!==t.t&&b(r,`title`,t.t=i),t},{e:void 0,t:void 0}),r})()})}function WN(e){let t=le(HN),r=C(()=>{let n=t();return(n?.plan.cards.get(e.block)??[]).filter(e=>n.plan.auto.has(e)||n.tapped.has(e))});return n(l,{get when(){return r().length},get children(){var e=NN();return y(e,n(m,{get each(){return r()},children:e=>n(GN,{url:e,get auto(){return t()?.plan.auto.has(e)===!0},context:()=>t()?.context})})),e}})}function GN(e){let[r,i]=u({at:`waiting`}),[a,c]=u(!e.auto),d,f=!0;M(()=>f=!1);let p=()=>{try{return new URL(e.url).hostname}catch{return e.url}};fe(()=>{if(a())return;if(typeof IntersectionObserver>`u`)return void c(!0);let e=new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&c(!0),{rootMargin:`300px 0px`});e.observe(d),M(()=>e.disconnect())});let m=()=>{i({at:`loading`}),VN.load(e.url).then(e=>f&&i({at:`shown`,preview:e}),e=>{if(!f)return;let t=e instanceof wN?e.reason:{text:`Couldn't load the preview`,retry:!0};i({at:`failed`,...t})})};x(()=>{a()&&r().at===`waiting`&&m()});let h=()=>{VN.forget(e.url),m()},g=()=>{let e=r();return e.at===`shown`?e.preview:void 0},_=()=>{let e=r();return e.at===`failed`?e:void 0},S=C(()=>{let t=g(),n=e.context();return t&&n?SN(t.image,n):void 0});return(()=>{var i=PN(),a=d;return typeof a==`function`?t(a,i):d=i,y(i,n(v,{get fallback(){return(()=>{var e=FN(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,p,t),e})()},get children(){return[n(o,{get when(){return g()},children:t=>[(()=>{var r=RN(),i=r.firstChild;return y(i,()=>t().siteName??p()),y(r,n(l,{get when(){return t().title},get children(){var e=IN();return y(e,()=>t().title),e}}),null),y(r,n(l,{get when(){return t().description},get children(){var e=LN();return y(e,()=>t().description),e}}),null),s(t=>{var n=e.url,i=e.url;return n!==t.e&&b(r,`href`,t.e=n),i!==t.t&&b(r,`title`,t.t=i),t},{e:void 0,t:void 0}),r})(),n(l,{get when(){return S()},children:e=>n(Fn,{get image(){return{key:e(),name:t().title??p(),mime:`image/*`,src:e()}},class:`link-card-image`})})]}),n(o,{get when(){return _()},children:e=>(()=>{var t=BN(),r=t.firstChild;return y(r,()=>e().text),y(t,n(l,{get when(){return e().retry},get children(){var e=zN();return e.$$click=h,e}}),null),t})()})]}})),s(t=>{var n=e.url,a=r().at;return n!==t.e&&b(i,`data-url`,t.e=n),a!==t.t&&b(i,`data-state`,t.t=a),t},{e:void 0,t:void 0}),i})()}z([`click`]);var KN=I(`<span class=md-image>`),qN=I(`<a class=md-image target=_blank rel="noopener noreferrer"title="Image (opens in a new tab)">`),JN=I(`<br>`),YN=I(`<code class=inline-code>`),XN=I(`<a rel="noopener noreferrer">`),ZN=I(`<div><div class=code-head><span class=code-lang></span><button type=button class=code-btn></button><button type=button class=code-btn></button></div><pre class=code><code>`),QN=I(`<span>`),$N=I(`<hr>`),eP=I(`<p>`),tP=I(`<input type=checkbox disabled>`),nP=I(`<li>`),rP=I(`<blockquote>`),iP=I(`<div class=table-wrap><table><thead><tr></tr></thead><tbody>`),aP=I(`<th>`),oP=I(`<tr>`),sP=I(`<td>`),cP=I(`<div class=md>`),[lP,uP]=u(),dP=!1;function fP(){dP||(dP=!0,Hn(()=>import(`./highlight-y4rJE6Tt.js`).then(e=>uP({run:e.highlight,languageOf:e.languageOf}),()=>dP=!1),[]))}var pP=65536;function mP(e,t){fP();let n=lP();return!n||!e||t.length>pP||!n.languageOf(e)?[{text:t}]:n.run(t,e)}function hP(e){let t=le(CP),r=C(()=>{let n=t(),r=n&&!n.streaming&&!e.inLink?Jj(e.node):void 0;return n&&r!==void 0?{sessionID:n.sessionID,messageID:n.messageID,path:r,waiting:n.waiting}:void 0});return n(l,{get when(){return r()},children:e=>n(oM,{get target(){return e()},get waiting(){return e().waiting},inline:!0})})}var gP=c(()=>void 0);function _P(e){let t=le(gP),i=C(()=>An(e.node,t()?.images)),a=()=>e.node.alt||`image`;return n(v,{get fallback(){return(()=>{var e=KN();return y(e,a),e})()},get children(){return[n(o,{get when(){return r(()=>!!(i().kind===`remote`&&hN(i().href)))()&&i()},children:t=>n(_N,{get href(){return t().href},get alt(){return e.node.alt}})}),n(o,{get when(){return r(()=>i().kind===`local`)()&&i()},children:r=>n(Fn,{get image(){return{...r().image,name:e.node.alt||r().image.name}},class:`md-media`,onOpen:()=>t()?.open(r().image.key)})}),n(o,{get when(){return r(()=>i().kind===`artifact`)()&&i()},children:t=>n(rN,{get href(){return t().href},get alt(){return e.node.alt}})}),n(o,{get when(){return r(()=>i().kind===`artifact`||i().kind===`remote`)()&&i()},children:e=>(()=>{var t=qN();return y(t,a),s(()=>b(t,`href`,e().href)),t})()})]}})}function vP(e){return n(g,{get each(){return e.nodes},children:t=>n(v,{get children(){return[n(o,{get when(){return r(()=>t().type===`text`)()&&t()},children:e=>r(()=>e().text)}),n(o,{get when(){return t().type===`br`},get children(){return JN()}}),n(o,{get when(){return r(()=>t().type===`code`)()&&t()},children:r=>[(()=>{var e=YN();return y(e,()=>r().text),e})(),n(hP,{get node(){return t()},get inLink(){return e.inLink}})]}),n(o,{get when(){return r(()=>t().type===`link`)()&&t()},children:r=>[(()=>{var e=XN();return y(e,n(vP,{get nodes(){return r().children},inLink:!0})),s(t=>{var n=r().href,i=r().href.startsWith(`/`)?void 0:`_blank`;return n!==t.e&&b(e,`href`,t.e=n),i!==t.t&&b(e,`target`,t.t=i),t},{e:void 0,t:void 0}),e})(),n(UN,{get href(){return r().href}}),n(hP,{get node(){return t()},get inLink(){return e.inLink}})]}),n(o,{get when(){return r(()=>t().type===`image`)()&&t()},children:e=>n(_P,{get node(){return e()}})}),n(o,{get when(){return r(()=>`children`in t())()&&t()},children:r=>[n(D,{get component(){return{strong:`strong`,em:`em`,del:`del`,mark:`mark`}[r().type]??`span`},get children(){return n(vP,{get nodes(){return r().children},get inLink(){return e.inLink}})}}),n(l,{get when(){return r().type===`label`},get children(){return n(hP,{get node(){return t()},get inLink(){return e.inLink}})}})]})]}})})}async function yP(e){try{return await navigator.clipboard.writeText(e),!0}catch{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}}function bP(e){let[t,r]=u(!1),[i,a]=u(!1),o;M(()=>clearTimeout(o)),fP();let c=C(()=>{let t=lP();return!t||!e.lang||e.text.length>pP||!t.languageOf(e.lang)?[{text:e.text}]:t.run(e.text,e.lang)}),d=()=>e.lang||`text`;return(()=>{var u=ZN(),f=u.firstChild,p=f.firstChild,m=p.nextSibling,h=m.nextSibling,_=f.nextSibling,v=_.firstChild;return y(p,d),y(f,()=>e.actions,m),m.$$click=()=>a(!i()),y(m,()=>i()?`No wrap`:`Wrap`),h.$$click=async()=>{await yP(e.text)&&(r(!0),clearTimeout(o),o=setTimeout(()=>r(!1),1500))},y(h,()=>t()?`Copied`:`Copy`),y(v,n(g,{get each(){return c()},children:e=>n(l,{get when(){return e().kind},get fallback(){return e().text},get children(){var t=QN();return y(t,()=>e().text),s(()=>k(t,`tok-${e().kind}`)),t}})})),s(n=>{var r=`code-block${i()?` wrap`:``}`,a=i(),o=i()?`Scroll long lines`:`Wrap long lines`,s=t()?`Copied`:`Copy ${d()} code`,c=e.lang||void 0;return r!==n.e&&k(u,n.e=r),a!==n.t&&b(m,`aria-pressed`,n.t=a),o!==n.a&&b(m,`title`,n.a=o),s!==n.o&&b(h,`aria-label`,n.o=s),c!==n.i&&b(_,`data-lang`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),u})()}var xP=E(()=>Hn(()=>import(`./Diagram-CuRIffka.js`),__vite__mapDeps([0,1,2,3,4,5,6]))),SP=c(()=>void 0),CP=c(()=>void 0);function wP(e){let t=e.at(-1);if(t){if(t.type===`code`)return t;if(t.type===`quote`)return wP(t.blocks);if(t.type===`list`)return wP(t.items.at(-1)?.blocks??[])}}function TP(e){let t=le(SP),i=le(CP),a=C(()=>{let n=i(),r=t()===e.block?void 0:n?.number(e.block);return n&&r!==void 0?{sessionID:n.sessionID,messageID:n.messageID,block:r,waiting:n.waiting}:void 0}),o=()=>n(bP,{get lang(){return e.block.lang},get text(){return e.block.text},get actions(){return n(l,{get when(){return a()},children:e=>n(oM,{get target(){return e()},get waiting(){return e().waiting}})})}});return n(l,{get when(){return r(()=>!!Vn(e.block.lang))()&&t()!==e.block},get fallback(){return o()},get children(){return n(f,{get fallback(){return o()},get children(){return n(xP,{get lang(){return e.block.lang},get text(){return e.block.text}})}})}})}var EP={left:`left`,center:`center`,right:`right`};function DP(e){return n(g,{get each(){return e.blocks},children:e=>n(v,{get children(){return[n(o,{get when(){return r(()=>e().type===`paragraph`)()&&e()},children:e=>[(()=>{var t=eP();return y(t,n(vP,{get nodes(){return e().children}})),t})(),n(WN,{get block(){return e()}})]}),n(o,{get when(){return r(()=>e().type===`heading`)()&&e()},children:e=>[n(D,{get component(){return`h${Math.min(6,e().level+2)}`},get children(){return n(vP,{get nodes(){return e().children}})}}),n(WN,{get block(){return e()}})]}),n(o,{get when(){return r(()=>e().type===`list`)()&&e()},children:e=>n(D,{get component(){return e().ordered?`ol`:`ul`},get start(){return r(()=>!!(e().ordered&&e().start!==1))()?e().start:void 0},get class(){return e().loose?`loose`:void 0},get children(){return n(g,{get each(){return e().items},children:e=>(()=>{var t=nP();return y(t,n(l,{get when(){return e().checked!==void 0},get children(){var t=tP();return s(()=>b(t,`aria-label`,e().checked?`Done`:`Not done`)),s(()=>t.checked=e().checked),t}}),null),y(t,n(DP,{get blocks(){return e().blocks}}),null),s(()=>k(t,e().checked===void 0?void 0:`task`)),t})()})}})}),n(o,{get when(){return r(()=>e().type===`code`)()&&e()},children:e=>n(TP,{get block(){return e()}})}),n(o,{get when(){return r(()=>e().type===`quote`)()&&e()},children:e=>(()=>{var t=rP();return y(t,n(DP,{get blocks(){return e().blocks}})),t})()}),n(o,{get when(){return r(()=>e().type===`table`)()&&e()},children:e=>[(()=>{var t=iP(),r=t.firstChild.firstChild,i=r.firstChild,a=r.nextSibling;return y(i,n(g,{get each(){return e().head},children:(t,r)=>(()=>{var i=aP();return y(i,n(vP,{get nodes(){return t()}})),s(t=>h(i,e().align[r]?{"text-align":EP[e().align[r]]}:void 0,t)),i})()})),y(a,n(g,{get each(){return e().rows},children:t=>(()=>{var r=oP();return y(r,n(g,{get each(){return t()},children:(t,r)=>(()=>{var i=sP();return y(i,n(vP,{get nodes(){return t()}})),s(t=>h(i,e().align[r]?{"text-align":EP[e().align[r]]}:void 0,t)),i})()})),r})()})),t})(),n(WN,{get block(){return e()}})]}),n(o,{get when(){return e().type===`rule`},get children(){return $N()}})]}})})}function OP(e){let t=C(()=>aj(e.text,{streaming:e.streaming})),r=C(()=>e.streaming&&kn(e.text)?wP(t()):void 0),i=C(()=>e.preview?new Map(Hj(t()).map((e,t)=>[e,t])):void 0),a=C(()=>{let t=e.preview,n=i();if(t&&n)return{sessionID:t.sessionID,messageID:t.messageID,waiting:t.waiting===!0,streaming:e.streaming===!0,number:e=>n.has(e)?t.base+n.get(e):void 0}}),[o,s]=u(new Set),c=C(()=>{if(!e.links)return;let n=Sw();if(!n)return;let r={origin:location.origin,allowlist:n.allowlist,enabled:n.remoteFetch!==!1};return{context:r,plan:xN(t(),r,{streaming:e.streaming}),tapped:o(),tap:e=>s(new Set([...o(),e]))}}),d=i=>n(HN.Provider,{value:c,get children(){return n(gP.Provider,{value:()=>i&&e.images?.length?{images:e.images,open:i}:void 0,get children(){return n(SP.Provider,{value:r,get children(){return n(CP.Provider,{value:a,get children(){return n(DP,{get blocks(){return t()}})}})}})}})}}),f=C(()=>Pn(t(),e.images));return(()=>{var t=cP();return y(t,n(l,{get when(){return e.images?.length},get fallback(){return d()},get children(){return n(zn,{get images(){return f()},children:e=>d(e)})}})),t})()}z([`click`]);var kP=I(`<div class=dialog-head><h2 id=setup-machine-title>Set up Hub on a machine`),AP=I(`<label class="sm-field sm-root"><span class=sm-label>Workspace folder</span><input type=text class=mono autocapitalize=off autocomplete=off aria-describedby=setup-machine-root-hint><span id=setup-machine-root-hint class="small muted">Where sessions started from here run on the machine<!>. Empty: <!>.`),jP=I(`<label class="check sm-activate"><input type=checkbox><span>Start services now<span class="small muted block">Loads the machine's Hub services right away. Off: they are installed, and the installer prints how to start them.`),MP=I(`<div class="dialog-body setup-machine"><p id=setup-machine-intro class="small muted">Run this on the machine. It installs hubctl, then waits for you to approve the machine here (Settings → Machines & devices → Approvals).</p><fieldset class=sm-field><legend>Operating system</legend><div class=sm-seg></div></fieldset><fieldset class=sm-field><legend>What to install</legend><div class=sm-profiles></div></fieldset><div class=sm-command-box><button type=button class="btn primary sm-copy"aria-label="Copy command"> </button></div><p class="small muted"aria-live=polite>`),NP=I(`<dialog class="dialog setup-machine-dialog"aria-labelledby=setup-machine-title aria-describedby=setup-machine-intro data-setup-machine>`),PP=I(`<label class=sm-seg-item><input type=radio name=setup-os>`),FP=I(`<label class=sm-profile><input type=radio name=setup-profile><span class=grow><span class=name></span><span class="small muted">`),IP=I(`<p class="error small"role=alert>`),LP=I(`<code class=sm-command data-setup-command>`),RP=`hub.setupMachine.os`,zP=`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`,[BP,VP]=u();function HP(e={}){BP()||VP(e)}var UP=()=>{try{return localStorage.getItem(RP)??void 0}catch{return}};function WP(){let e,i,[a,o]=u(`linux`),[c,d]=u(`session-only`),[f,p]=u(``),[h,g]=u(!1),[_,v]=u(!1),S,w=()=>VP(void 0);x(()=>{let t=BP();e&&(t&&!e.open?(i=t.returnTo?.()??document.activeElement,o(RA(navigator,UP())),d(`session-only`),p(``),g(!1),v(!1),e.showModal(),queueMicrotask(()=>e?.querySelector(`input[name=setup-os]:checked`)?.focus())):!t&&e.open&&(e.close(),i?.isConnected&&i.focus(),i=void 0))});let T=e=>{o(e),zA(e,c())||d(`session-only`);try{localStorage.setItem(RP,e)}catch{}},E=()=>X()?.publicURL??location.origin,D=C(()=>WA({origin:E(),os:a(),profile:c(),root:f().trim(),activate:h()})),O=()=>a()===`windows`,k=()=>c()===`launch-node`,A=()=>c()!==`session-only`,j=()=>k()&&!D().ok,M=async()=>{let e=D();e.ok&&(await yP(e.command)?(q(`Command copied`),v(!0),clearTimeout(S),S=setTimeout(()=>v(!1),2e3)):q(`Couldn't copy: select the command and copy it`,`err`))};return(()=>{var i=NP();i.$$keydown=t=>{if(t.key!==`Tab`||!e)return;let n=[...e.querySelectorAll(zP)].filter(e=>!(e instanceof HTMLInputElement&&e.type===`radio`&&!e.checked));if(!n.length)return;let r=n[0],i=n[n.length-1];t.shiftKey&&document.activeElement===r?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),r.focus())},i.$$click=t=>t.target===e&&w(),i.addEventListener(`cancel`,e=>{e.preventDefault(),w()});var o=e;return typeof o==`function`?t(o,i):e=i,y(i,n(l,{get when(){return BP()},get children(){return[(()=>{var e=kP();return e.firstChild,y(e,n(F,{icon:`close`,label:`Close`,onClick:w}),null),e})(),(()=>{var e=MP(),t=e.firstChild.nextSibling,i=t.firstChild.nextSibling,o=t.nextSibling,u=o.firstChild.nextSibling,v=o.nextSibling,x=v.firstChild,S=x.firstChild,C=v.nextSibling;return y(i,n(m,{each:jA,children:e=>(()=>{var t=PP(),n=t.firstChild;return n.addEventListener(`change`,()=>T(e)),n.value=e,y(t,()=>MA[e],null),s(()=>t.classList.toggle(`on`,a()===e)),s(()=>n.checked=a()===e),t})()})),y(u,n(m,{get each(){return BA(a())},children:e=>(()=>{var t=FP(),n=t.firstChild,i=n.nextSibling.firstChild,o=i.nextSibling;return n.addEventListener(`change`,()=>d(e.id)),y(i,()=>e.label),y(o,(()=>{var t=r(()=>!!e.comingSoon);return()=>t()?`Coming soon on ${MA[a()]}`:e.description})()),s(r=>{var i=c()===e.id,a=!!e.comingSoon,o=e.comingSoon;return i!==r.e&&t.classList.toggle(`on`,r.e=i),a!==r.t&&t.classList.toggle(`disabled`,r.t=a),o!==r.a&&(n.disabled=r.a=o),r},{e:void 0,t:void 0,a:void 0}),s(()=>n.value=e.id),s(()=>n.checked=c()===e.id),t})()})),y(e,n(l,{get when(){return k()},get children(){var e=AP(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,t.$$input=e=>p(e.currentTarget.value),b(t,`placeholder`,NA),b(t,`spellcheck`,!1),y(n,()=>O()?` (C:\\Users\\you\\projects, C:/… or ~/…)`:``,r),y(n,NA,i),s(()=>b(t,`aria-invalid`,j()?`true`:void 0)),s(()=>t.value=f()),e}}),v),y(e,n(l,{get when(){return A()},get children(){var e=jP(),t=e.firstChild;return t.addEventListener(`change`,e=>g(e.currentTarget.checked)),s(()=>t.checked=h()),e}}),v),y(v,n(l,{get when(){return r(()=>!!D().ok)()&&D().command},get fallback(){return(()=>{var e=IP();return y(e,()=>D().error),e})()},children:e=>(()=>{var t=LP();return y(t,e),t})()}),x),x.$$click=()=>void M(),y(x,n(L,{get name(){return _()?`check`:`copy`}}),S),y(x,()=>_()?`Copied`:`Copy`,null),y(C,n(l,{get when(){return _()},get children(){return[`Copied. Paste it into a terminal on the machine`,r(()=>O()?` (PowerShell)`:``),`.`]}})),s(()=>x.disabled=!D().ok),e})()]}})),i})()}z([`click`,`keydown`,`input`]);var GP=I(`<h3 class=section-title>`),KP=I(`<section class=settings-section>`),qP=I(`<div class=settings-search role=search><input type=search placeholder="Search settings"aria-label="Search settings">`),JP=I(`<nav class=settings-nav aria-label="Settings sections">`),YP=I(`<div class=settings><header class=topbar><h1 class=title></h1></header><div class=settings-body><div class=settings-content><p class="small muted settings-footer">Server <!> · v`),XP=I(`<a>`),ZP=I(`<ul class=settings-results aria-label="Search results">`),QP=I(`<p class="muted settings-empty">No settings match.`),$P=I(`<li><a><span class=name></span><span class="small muted"> · `),eF=I(`<ul class=settings-list aria-label="Settings sections">`),tF=I(`<li><a><span class=grow><span class=name></span><span class="small muted">`),nF=I(`<div class=settings-page><p class=muted>No such settings section.</p><a class="btn small"href=/settings>All settings`),rF=I(`<div class=settings-page><h2 class=settings-page-title>`),iF=I(`<span class=badge-pill>`),aF=I(`<div class="small muted">`),oF=I(`<div class=account-card><span aria-hidden=true></span><div class=grow><div><strong></strong></div><div class="small muted">This device: </div></div><button type=button class="btn danger">Sign out`),sF=I(`<h3>Notify me when`),cF=I(`<p class="small notify-summary"data-notify-summary>`),lF=I(`<p class="small warn">These apply once this device is subscribed.`),uF=I(`<p class=activity-hint data-activity-hint><strong>Know what happens with the screen off:</strong> turn on <em>All done</em> for one notification when a session and its subagents finish, or the <em>Activity digest</em> for one quiet, self-replacing summary per session.`),dF=I(`<h4>When`),fF=I(`<ul class=switches><li id=quiet-hours><label class=switch><span>Quiet hours</span><input type=checkbox>`),pF=I(`<p class="small muted"> muted (⋯ menu of a session → Unmute notifications).`),mF=I(`<p class="small muted">Checking this device…`),hF=I(`<div class=notify-status-row><p role=status></p><details class=notify-details><summary class=small>Details</summary><dl class="notify-facts small muted"><dt>Permission</dt><dd></dd><dt>Service worker</dt><dd></dd><dt>Subscribed on this hub</dt><dd>`),gF=I(`<button type=button class="btn small primary">Enable notifications on this device`),_F=I(`<button type=button class="btn small">Turn off on this device`),vF=I(`<span class=notify-test id=notify-test><select aria-label="Test notification kind"data-test-kind><option value>Basic test</option></select><button type=button class="btn small">Send test notification`),yF=I(`<div class=row-actions>`),bF=I(`<option>`),xF=I(`<p data-test-result>`),SF=I(`<details class=notify-group><summary><h4></h4><span class="small muted notify-group-summary"data-group-summary></span></summary><ul class=switches>`),CF=I(`<div class=quiet-hours><label>At most one per session every <select data-activity-minutes></select></label><span class="small muted">Collapses into one notification per session; respects quiet hours and muted sessions.`),wF=I(`<li><label class=switch><span class=notify-kind><span></span><span class="small muted"></span></span><input type=checkbox>`),TF=I(`<div class=quiet-hours><label>From <input type=time></label><label>to <input type=time></label><span class="small muted">. Hand-offs still come through.`),EF=I(`<ul class=switches><li class=appearance-theme id=set-theme><span id=color-theme>Color theme</span><div class=theme-toggle role=radiogroup aria-labelledby=color-theme></div></li><li class=speed id=set-text-size><label for=text-size>Text size</label><input id=text-size type=range><output for=text-size></output><button type=button class="btn small"aria-label="Reset text size">Reset`),DF=I(`<p class="small muted">On this device. Pinch the conversation or the session list to change it too (a trackpad pinch works on desktop).`),OF=I(`<button type=button role=radio class=theme-choice><span>`),kF=I(`<details class=turn-advanced><summary class=small>Advanced</summary><div class=turn-knobs></div><p class="small muted">Empty: the default. Values outside a field's range are clamped. Slow cap: a score slower than this hands the turn to the timers (it rises to twice the usual score time on a slow device, at most 5 s). A URL query parameter (e.g. ?voiceTurn.threshold=0.6) overrides these until the page reloads without it; “in use” shows what applies.`),AF=I(`<ul class=switches><li class=speed id=set-voice-speed><label for=voice-speed>Voice speed</label><input id=voice-speed type=range><output for=voice-speed></output></li><li id=set-sensitivity><div class=switch><span id=voice-sensitivity>Mic sensitivity</span><div class=chips role=radiogroup aria-labelledby=voice-sensitivity></div></div><p class="small muted">How sure Voice mode must be that you are speaking to it. Low: noisy places (only clear, sustained speech counts). High: quiet rooms and soft voices. On this device; applies at once, also while Voice mode is on.</p></li><li id=set-turn-detection><div class=switch><span id=voice-turn-detection>Turn detection</span><div class=chips role=radiogroup aria-labelledby=voice-turn-detection></div></div><p class="small muted">When Voice mode decides you finished speaking. Timers: a fixed wait after you stop (1 s, 1.6 s when the words sound unfinished). Smart Turn: an on-device audio model (Pipecat Smart Turn v3, 8.7 MB, loaded on first use) scores your intonation at each pause; a confident “finished” sends at once, otherwise it waits (at most 3 s). The Voice bar shows its score. On this device; applies at once.</p></li><li id=set-voice-front><label class=switch><span>Voice front</span><input type=checkbox></label><p class="small muted">On (the default): in Voice mode a fast voice agent answers in front of the session. It says what it understood, then passes your request to the session, which keeps its own agent and model. No spoken “On it.” phrases (the tones stay). Off: Voice mode talks to the session directly, with short spoken replies. If the front is not available, Voice mode talks to the session directly too. The front runs on the session's Voice model (else the machine's <code>voiceModel</code>): pick a fast paid model. On this device; applies the next time Voice mode starts.</p></li><li id=set-cues><label class=switch><span>Progress cues</span><input type=checkbox></label><p class="small muted">In Voice mode: a soft tone when the agent hears you, then short, varied acknowledgements while it works (“On it.”, “One moment.”, “I’ll hand that off.”, “Still on it.” …).</p></li><li id=set-background><label class=switch><span>Keep listening when the screen is off</span><input type=checkbox></label><p class="small muted">Off: the screen stays on while listening. On: lock-screen controls and listening with the screen off. Best effort. Android Chrome usually stops the microphone when the screen turns off; Hub shows when listening is paused and resumes when you unlock. Applies the next time Voice mode starts.`),jF=I(`<button type=button class=chip role=radio>`),MF=I(`<label class=small> <input type=number inputmode=decimal> <output class=muted data-turn-effective>in use: `),NF=I(`<h3>Waiting for approval`),PF=I(`<ul class=list>`),FF=I(`<li><div class=grow><div class=name></div><div class="small muted">Code <!> · requested </div></div><button type=button class="btn small primary">Approve</button><button type=button class="btn small danger">Deny`),IF=I(`<div class=row><p class="small muted grow">Computers connected to this hub. Set one up with a one-line installer (macOS, Linux, Windows).</p><button type=button id=setup-machine class="btn small">Set up a machine`),LF=I(`<p class="small muted">None yet.`),RF=I(`<li><div class=grow><div class=name><span aria-hidden=true></span> </div><div class="small muted"></div></div><button type=button class="btn small danger">Revoke`),zF=I(`<div class=row><p class="small muted grow">Browsers and the Hub app signed in to your account. Add the app on a phone or tablet by scanning a code.</p><button type=button class="btn small">Add app`),BF=I(`<p class="small muted">`),VF=I(`<span class=muted> · this device`),HF=I(`<li><div class=grow><div class=name></div><div class="small muted">last seen </div></div><button type=button class="btn small danger">`),UF=I(`<svg class=qr role=img aria-label="QR code for the app link"shape-rendering=crispEdges><rect width=100% height=100% fill=#fff></rect><path fill=#000>`),WF=I(`<p class="small muted">Expires in <span class=add-app-countdown></span> · single use`),GF=I(`<div class=row><code class="add-app-link grow"></code><button type=button class="btn small">Copy</button><a class="btn small">Open`),KF=I(`<div class=add-app-body><p class=small>In the Hub app, choose <b>Add hub</b> and scan this code, or open the link on the phone with the app. It links the app to your account on <b></b>.</p><p class="small muted">Anyone with this code can sign in as you until it is used or expires; show it only to your own device.`),qF=I(`<div class=add-app-expired><p class="small warn">This code expired.</p><button type=button class="btn small primary">New code`),JF=I(`<div class=row><p class="small muted grow">Use Hub from a phone or tablet: scan a code in the Hub app to link it to your account.</p><button type=button class="btn small">Add app`),YF=I(`<p class="small muted">How your <a href=/teams>teams</a> work with the rest of your sessions.`),XF=I(`<ul class=switches><li id=team-isolation><label class=switch><span class=notify-kind><span>Team isolation</span><span class="small muted">On: sessions seated in a team see only their teams' sessions; your other sessions are hidden from them. Off: they also see your sessions in no team. Your own view is unchanged either way.</span></span><input type=checkbox data-team-isolation>`),ZF=I(`<div class=chips role=group aria-label="Admin sections">`),QF=I(`<p class=error role=alert>`),$F=I(`<div id=admin-machines>`),eI=I(`<p class="small muted">Approving a machine makes it yours. Someone else's machine: let them approve it from their phone with the code OpenCode shows (/approve?code=…).`),tI=I(`<div id=admin-audit>`),nI=I(`<span class=count>`),rI=I(`<button type=button class=chip>`),iI=I(`<p class=muted>No machines are waiting for approval.`),aI=I(`<div class=stack><div class=row><input type=search class=grow placeholder="Search by email or name"aria-label="Search users"><select aria-label=Show></select><select aria-label="Sort by">`),oI=I(`<p class=muted>`),sI=I(`<li class=muted>No users match.`),cI=I(`<span class=badge-pill>Admin`),lI=I(`<span class="badge-pill off">Disabled`),uI=I(`<span class=badge-pill>You`),dI=I(`<li><div class=grow><div class=name></div><div class="small muted"> · <!> · seen `),fI=I(`<button type=button>`),pI=I(`<p class=muted>No machines are connected to this hub yet.`),mI=I(`<li><div class=grow><div class=name><span aria-hidden=true></span> </div><div class="small muted"> · </div></div><button type=button class="btn small danger">Revoke`),hI=I(`<ol class="list audit">`),gI=I(`<p class=muted>Nothing recorded yet.`),_I=I(`<li><div class=grow><div class=name></div><div class="small muted"></div></div><time class="small muted">`);function vI(e){return(()=>{var t=KP();return i(t,_({get id(){return e.id}},()=>e.title?{"aria-labelledby":`h-${e.id}`}:{"aria-label":e.label??e.id}),!1,!0),y(t,n(l,{get when(){return e.title},get children(){var t=GP();return y(t,()=>e.title),s(()=>b(t,`id`,`h-${e.id}`)),t}}),null),y(t,()=>e.children,null),t})()}var yI=2400,bI=3e3;function xI(e){if(!e)return;let t=Date.now()+bI,n=()=>{let r=document.getElementById(e);if(!r)Date.now()<t&&setTimeout(n,60);else{for(let e=r.closest(`details`);e;e=e.parentElement?.closest(`details`)??null)e.open=!0;r.scrollIntoView({block:`center`}),r.classList.add(`settings-hit`),setTimeout(()=>r.classList.remove(`settings-hit`),yI)}};requestAnimationFrame(n)}var SI=e=>vt(!0).find(t=>t.id===e)?.label,CI=!1;function wI(){let t=()=>qn(X()),i=()=>{let e=WS();return e.name===`settings`?e.section:void 0},a=()=>gt(i(),{admin:t(),phone:Z()}),[c,d]=u(``),f=()=>It(c(),bt(t()));x(e(Pt,e=>xI(At(decodeURIComponent(e.hash.slice(1))))));let p=()=>{CI?(CI=!1,history.back()):Vt(`/settings`)},h=()=>(()=>{var e=qP(),t=e.firstChild;return t.$$keydown=e=>{e.key===`Escape`&&d(``);let t=f()[0];e.key===`Enter`&&t&&(d(``),Vt(`/settings/${t.section}#${t.id}`))},t.$$input=e=>d(e.currentTarget.value),s(()=>t.value=c()),e})();return(()=>{var e=YP(),i=e.firstChild,u=i.firstChild,g=i.nextSibling,_=g.firstChild,x=_.firstChild,S=x.firstChild.nextSibling;return S.nextSibling,y(i,n(l,{get when(){return Z()},get children(){return n(l,{get when(){return a()!==`list`},get fallback(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})},get children(){return n(F,{icon:`back`,label:`All settings`,onClick:p})}})}}),u),y(u,(()=>{var e=r(()=>!!(Z()&&a()!==`list`));return()=>e()?SI(a())??`Settings`:`Settings`})()),y(g,n(l,{get when(){return!Z()},get children(){var e=JP();return y(e,h,null),y(e,n(m,{get each(){return vt(t())},children:e=>(()=>{var t=XP();return t.$$click=()=>d(``),y(t,()=>e.label),s(n=>{var r=`/settings/${e.id}`,i=a()===e.id&&!c()?`page`:void 0;return r!==n.e&&b(t,`href`,n.e=r),i!==n.t&&b(t,`aria-current`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e}}),_),y(_,n(l,{get when(){return r(()=>!!Z())()&&a()===`list`},get children(){return h()}}),x),y(_,n(l,{get when(){return!c()},get fallback(){return n(TI,{get results(){return f()},onPick:()=>d(``)})},get children(){return n(v,{get fallback(){return n(DI,{})},get children(){return[n(o,{get when(){return a()===`list`},get children(){return n(EI,{onPick:()=>CI=!0})}}),n(o,{get when(){return r(()=>a()!==`list`)()&&a()},keyed:!0,children:e=>n(OI,{id:e})})]}})}}),x),y(x,()=>X()?.publicURL??location.origin,S),y(x,()=>X()?.version??`?`,null),e})()}function TI(e){return n(l,{get when(){return e.results.length},get fallback(){return QP()},get children(){var t=ZP();return y(t,n(m,{get each(){return e.results},children:t=>(()=>{var n=$P(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.firstChild;return B(r,`click`,e.onPick,!0),y(i,()=>t.label),y(a,()=>SI(t.section),o),y(a,()=>t.description,null),s(()=>b(r,`href`,`/settings/${t.section}#${t.id}`)),n})()})),t}})}function EI(e){return(()=>{var t=eF();return y(t,n(m,{get each(){return vt(qn(X()))},children:t=>(()=>{var r=tF(),i=r.firstChild,a=i.firstChild.firstChild,o=a.nextSibling;return B(i,`click`,e.onPick,!0),y(a,()=>t.label),y(o,()=>t.description),y(i,n(L,{name:`chevron`}),null),s(()=>b(i,`href`,`/settings/${t.id}`)),r})()})),t})()}function DI(){return nF()}function OI(e){return(()=>{var t=rF(),i=t.firstChild;return y(i,()=>SI(e.id)),y(t,n(v,{get children(){return[n(o,{get when(){return e.id===`general`},get children(){return[n(AI,{}),n(MI,{}),n(WI,{})]}}),n(o,{get when(){return e.id===`notifications`},get children(){return n(jI,{})}}),n(o,{get when(){return e.id===`voice`},get children(){return[n(LI,{}),n(ow,{}),n(vI,{id:`speech`,title:`Speech`,get children(){return n(LC,{})}})]}}),n(o,{get when(){return e.id===`media`},get children(){return n(vI,{id:`media-allowlist`,title:`Web images`,get children(){return n(Rw,{})}})}}),n(o,{get when(){return e.id===`machines`},get children(){return[n(BI,{}),n(VI,{})]}}),n(o,{get when(){return e.id===`agents`},get children(){return n(ND,{})}}),n(o,{get when(){return e.id===`concierge`},get children(){return[n(QO,{}),n(vI,{id:`context-cards`,title:`Context cards`,get children(){return n(Fk,{})}})]}}),n(o,{get when(){return e.id===`teams`},get children(){return n(KI,{})}}),n(o,{get when(){return r(()=>e.id===`admin`)()&&qn(X())},get children(){return n(YI,{})}})]}}),null),s(()=>b(t,`data-settings-section`,e.id)),t})()}async function kI(){if(Jn(X()).mode!==`pairing`||await P(`Sign out this device? You will need a new pairing code.`,`Sign out`,{danger:!0})){await(await Rf().catch(()=>void 0))?.unsubscribe().catch(()=>{}),await V(`/api/logout`,{method:`POST`,json:{}}).catch(()=>{});try{as(localStorage)}catch{}Gu(),location.href=`/`}}function AI(){let e=()=>Jn(X());return n(vI,{id:`account`,title:`Account`,get children(){var t=oF(),r=t.firstChild,i=r.nextSibling,a=i.firstChild,o=a.firstChild,c=a.nextSibling;c.firstChild;var u=i.nextSibling;return y(r,()=>e().initial),y(o,()=>e().title),y(a,n(l,{get when(){return e().badge},get children(){var t=iF();return y(t,()=>e().badge),t}}),null),y(i,n(l,{get when(){return e().subtitle},get children(){var t=aF();return y(t,()=>e().subtitle),t}}),c),y(c,()=>X()?.device?.name??`paired`,null),u.$$click=()=>void kI(),s(()=>k(r,`avatar large${e().badge?` admin`:``}`)),t}})}function jI(){let[e,{refetch:t}]=d(Mf,()=>Bf()),[i,a]=u(!1),[o,c]=u(),[f,p]=u(``),[h,g]=u(),[_,v]=u(null),[x,S]=u(),C=()=>x()??T()?.activityMinutes??5,w=()=>e()?qe(e().env):void 0,T=()=>e()?.view,E=()=>h()??T()?.prefs,D=()=>h()?_():T()?.quietHours??null,O=async(e,n)=>{a(!0);try{await e(),n&&q(n)}catch(e){q(U(e),`err`)}finally{a(!1),g(void 0),t()}},A=async e=>{try{let t=await(await V(`/api/push/prefs`,{method:`PUT`,json:e})).json();g(t.prefs),v(t.quietHours??null),t.activityMinutes!==void 0&&S(t.activityMinutes)}catch(e){q(U(e),`err`)}},j=async()=>{c(void 0);try{c(lt(await Wf(f()||void 0)))}catch(e){c({ok:!1,text:U(e)})}};return n(vI,{id:`notifications`,label:`Notifications`,get children(){return[n(l,{get when(){return w()},get fallback(){return mF()},children:t=>[(()=>{var n=hF(),i=n.firstChild,a=i.nextSibling.firstChild.nextSibling.firstChild.nextSibling,o=a.nextSibling.nextSibling,c=o.nextSibling.nextSibling;return y(i,()=>t().message),y(a,(()=>{var t=r(()=>!!e().env.supported);return()=>t()?e().env.permission:`unsupported`})()),y(o,()=>e().env.worker?`registered`:`not registered`),y(c,()=>e().env.hubSubscribed?`yes`:`no`),s(e=>{var n=t().warn?`notify-status warn`:`notify-status ok`,r=t().state;return n!==e.e&&k(i,e.e=n),r!==e.t&&b(i,`data-state`,e.t=r),e},{e:void 0,t:void 0}),n})(),(()=>{var r=yF();return y(r,n(l,{get when(){return t().action===`enable`},get children(){var e=gF();return e.$$click=()=>void O(Hf,`Notifications are on for this device`),s(()=>e.disabled=i()),e}}),null),y(r,n(l,{get when(){return t().action===`disable`},get children(){var e=_F();return e.$$click=()=>void O(Uf,`Notifications are off for this device`),s(()=>e.disabled=i()),e}}),null),y(r,n(l,{get when(){return e().env.hubSubscriptions>0},get children(){var e=vF(),t=e.firstChild;t.firstChild;var r=t.nextSibling;return t.addEventListener(`change`,e=>p(e.currentTarget.value)),y(t,n(m,{each:$t,children:e=>(()=>{var t=bF();return y(t,()=>e.label),s(()=>t.value=e.key),t})()}),null),r.$$click=()=>void j(),s(()=>t.value=f()),e}}),null),r})(),n(l,{get when(){return o()},children:e=>(()=>{var t=xF();return y(t,()=>e().text),s(()=>k(t,e().ok?`small ok`:`small err`)),t})()})]}),n(l,{get when(){return E()},get children(){return[sF(),(()=>{var e=cF();return y(e,()=>be(E())),e})(),n(l,{get when(){return r(()=>!!w())()&&w().state!==`on`},get children(){return lF()}}),n(l,{get when(){return r(()=>`activity`in E()&&!E().activity)()&&!E().done},get children(){return uF()}}),n(m,{get each(){return qt.filter(e=>e.kinds.some(e=>e.key in E()))},children:e=>(()=>{var t=SF(),i=t.firstChild,a=i.firstChild,o=a.nextSibling,c=i.nextSibling;return y(a,()=>e.title),y(o,()=>pt(e.kinds,E())),y(c,n(m,{get each(){return e.kinds.filter(e=>e.key in E())},children:e=>(()=>{var t=wF(),i=t.firstChild.firstChild,a=i.firstChild,o=a.nextSibling,c=i.nextSibling;return y(a,()=>e.label),y(o,()=>e.description),c.addEventListener(`change`,t=>void A({[e.key]:t.currentTarget.checked})),y(t,n(l,{get when(){return r(()=>e.key===`activity`)()&&E().activity},get children(){var e=CF(),t=e.firstChild.firstChild.nextSibling;return t.addEventListener(`change`,e=>void A({activityMinutes:Number(e.currentTarget.value)})),y(t,n(m,{each:ot,children:e=>(()=>{var t=bF();return y(t,e===1?`minute`:`${e} minutes`),s(()=>t.value=String(e)),t})()})),s(()=>t.value=String(C())),e}}),null),s(n=>{var r=`pref-${e.key}`,i=e.key;return r!==n.e&&b(t,`id`,n.e=r),i!==n.t&&b(c,`data-pref`,n.t=i),n},{e:void 0,t:void 0}),s(()=>c.checked=!!E()[e.key]),t})()})),s(()=>b(t,`data-notify-group`,e.title)),t})()}),dF(),(()=>{var e=fF(),t=e.firstChild,r=t.firstChild.firstChild.nextSibling;return r.addEventListener(`change`,e=>void A({quietHours:e.currentTarget.checked?{start:`22:00`,end:`07:00`,timeZone:Zt()}:null})),y(t,n(l,{get when(){return D()},children:e=>(()=>{var t=TF(),n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling,c=o.firstChild;return r.addEventListener(`change`,t=>void A({quietHours:{...e(),start:t.currentTarget.value,timeZone:Zt()}})),a.addEventListener(`change`,t=>void A({quietHours:{...e(),end:t.currentTarget.value,timeZone:Zt()}})),y(o,()=>e().timeZone,c),s(()=>r.value=e().start),s(()=>a.value=e().end),t})()}),null),s(()=>r.checked=!!D()),e})(),n(l,{get when(){return Pf().size},get children(){var e=pF(),t=e.firstChild;return y(e,()=>_n(Pf().size,`session`),t),e}})]}})]}})}function MI(){return n(vI,{id:`appearance`,title:`Appearance`,get children(){return[(()=>{var e=EF(),t=e.firstChild,r=t.firstChild.nextSibling,i=t.nextSibling.firstChild.nextSibling,a=i.nextSibling,o=a.nextSibling;return y(r,n(m,{each:CA,children:e=>(()=>{var t=OF(),n=t.firstChild;return t.$$click=()=>AA(e),y(t,e===`light`?`☀`:e===`dark`?`☾`:`▣`,n),y(n,()=>e[0].toUpperCase()+e.slice(1)),s(()=>b(t,`aria-checked`,OA()===e)),t})()})),i.$$input=e=>yA(Number(e.currentTarget.value)),b(i,`min`,eA),b(i,`max`,tA),b(i,`step`,nA),y(a,()=>uA(gA())),o.$$click=()=>yA(1),s(e=>{var t=uA(gA()),n=gA()===1;return t!==e.e&&b(i,`aria-valuetext`,e.e=t),n!==e.t&&(o.disabled=e.t=n),e},{e:void 0,t:void 0}),s(()=>i.value=gA()),e})(),DF()]}})}var NI={low:`Low`,normal:`Normal`,high:`High`},PI={timers:`Timers (current)`,smart:`Smart Turn (experimental)`},FI={threshold:{label:`Threshold`,step:`0.05`},graceMs:{label:`Grace (ms)`,step:`50`},fallbackMs:{label:`Fallback (ms)`,step:`100`},slowMs:{label:`Slow cap (ms)`,step:`100`}},II=s_.flatMap(e=>FI[e.field]?[{...e,...FI[e.field],placeholder:String(i_[e.field])}]:[]);function LI(){let[e,t]=u(Sy.speed),[r,i]=u(Sy.sensitivity),[a,o]=u(Sy.turnDetection),[c,d]=u(Sy.smartTurn);return n(vI,{id:`voice`,title:`Voice`,get children(){var u=AF(),f=u.firstChild,p=f.firstChild.nextSibling,h=p.nextSibling,g=f.nextSibling,_=g.firstChild.firstChild.nextSibling,v=g.nextSibling,x=v.firstChild,S=x.firstChild.nextSibling;x.nextSibling;var C=v.nextSibling,w=C.firstChild.firstChild.nextSibling,T=C.nextSibling,E=T.firstChild.firstChild.nextSibling,D=T.nextSibling.firstChild.firstChild.nextSibling;return p.$$input=e=>{Sy.speed=Number(e.currentTarget.value),t(Sy.speed)},b(p,`min`,Ba),b(p,`max`,2),b(p,`step`,Va),y(h,()=>Ua(e())),y(_,n(m,{each:iy,children:e=>(()=>{var t=jF();return t.$$click=()=>{Sy.sensitivity=e,i(e)},y(t,()=>NI[e]),s(n=>{var i=r()===e,a=r()===e;return i!==n.e&&b(t,`aria-checked`,n.e=i),a!==n.t&&b(t,`aria-pressed`,n.t=a),n},{e:void 0,t:void 0}),t})()})),y(S,n(m,{each:n_,children:e=>(()=>{var t=jF();return t.$$click=()=>{Sy.turnDetection=e,o(e),p_({mode:e,load:Yg})},y(t,()=>PI[e]),s(n=>{var r=a()===e,i=a()===e;return r!==n.e&&b(t,`aria-checked`,n.e=r),i!==n.t&&b(t,`aria-pressed`,n.t=i),n},{e:void 0,t:void 0}),t})()})),y(v,n(l,{get when(){return a()===`smart`},get children(){var e=kF(),t=e.firstChild.nextSibling;return y(t,n(m,{each:II,children:e=>(()=>{var t=MF(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling.nextSibling;return i.firstChild,y(t,()=>e.label,n),r.addEventListener(`change`,t=>{t.currentTarget.value=Sy.setSmartTurnKnob(e.key,t.currentTarget.value),d(Sy.smartTurn)}),y(i,()=>c()[e.field],null),s(n=>{var i=e.key,a=e.min,o=e.max,s=e.step,c=e.placeholder;return i!==n.e&&b(t,`data-turn-knob`,n.e=i),a!==n.t&&b(r,`min`,n.t=a),o!==n.a&&b(r,`max`,n.a=o),s!==n.o&&b(r,`step`,n.o=s),c!==n.i&&b(r,`placeholder`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),s(()=>r.value=c_(e.key,localStorage.getItem(e.key))??``),t})()})),e}}),null),w.addEventListener(`change`,e=>Sy.front=e.currentTarget.checked),E.addEventListener(`change`,e=>Sy.cues=e.currentTarget.checked),D.addEventListener(`change`,e=>Sy.background=e.currentTarget.checked),s(()=>b(p,`aria-valuetext`,Ua(e()))),s(()=>p.value=e()),s(()=>w.checked=Sy.front),s(()=>E.checked=Sy.cues),s(()=>D.checked=Sy.background),u}})}async function RI(e,t){try{await V(`/api/enrollments/${K(e.userCode)}/${t}`,{method:`POST`,json:{}}),q(t===`approve`?`${e.machineName} approved; it belongs to you`:`Request denied`)}catch(e){q(U(e),`err`)}fd()}function zI(){return n(l,{get when(){return Vl().length},get children(){return[NF(),(()=>{var e=PF();return y(e,n(m,{get each(){return Vl()},children:e=>(()=>{var t=FF(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.firstChild.nextSibling;a.nextSibling;var o=n.nextSibling,s=o.nextSibling;return y(r,()=>e.machineName),y(i,()=>e.userCode,a),y(i,()=>R(e.created,N()),null),o.$$click=()=>void RI(e,`approve`),s.$$click=()=>void RI(e,`deny`),t})()})),e})()]}})}function BI(){let e=async e=>{if(await P(`Revoke ${e.name}? Its OpenCode processes disconnect and it must be connected again.`,`Revoke`,{danger:!0}))try{await V(`/api/machines/${K(e.id)}`,{method:`DELETE`}),q(`${e.name} revoked`)}catch(e){q(U(e),`err`)}};return n(vI,{id:`machines`,title:`Machines`,get children(){return[(()=>{var e=IF(),t=e.firstChild.nextSibling;return t.$$click=()=>HP(),e})(),n(zI,{}),n(l,{get when(){return(Y.machines??[]).length},get fallback(){return LF()},get children(){var t=PF();return y(t,n(m,{get each(){return Y.machines},children:t=>(()=>{var n=RF(),i=n.firstChild,a=i.firstChild,o=a.firstChild;o.nextSibling;var c=a.nextSibling,l=i.nextSibling;return y(a,()=>t.name,null),y(c,(()=>{var e=r(()=>!!t.online);return()=>e()?`online · ${_n(t.processes.length,`OpenCode process`)}`:`offline · seen ${R(t.lastSeen,N())}`})()),l.$$click=()=>void e(t),s(e=>{var n=`online-dot${t.online?` on`:``}`,r=`Revoke machine ${t.name}`;return n!==e.e&&k(o,e.e=n),r!==e.t&&b(l,`aria-label`,e.t=r),e},{e:void 0,t:void 0}),n})()})),t}})]}})}function VI(){let[e,{refetch:t,mutate:i}]=d(()=>G(`/api/devices`).then(e=>e.devices)),[a,o]=u(!1),s=async e=>{if(e.current)return void kI();if(await P(`Revoke ${e.name}?`,`Revoke`,{danger:!0})){try{await V(`/api/devices/${K(e.id)}`,{method:`DELETE`}),q(`${e.name} revoked`)}catch(e){q(U(e),`err`)}t()}};return n(vI,{id:`devices`,title:`Devices`,get children(){return[(()=>{var e=zF(),t=e.firstChild.nextSibling;return t.$$click=()=>o(!0),e})(),n(l,{get when(){return a()},get children(){return n(UI,{get known(){return new Set((e()??[]).map(e=>e.id))},onLinked:e=>i(e),onClose:()=>{o(!1),t()}})}}),n(l,{get when(){return e()},get fallback(){return(()=>{var t=BF();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?U(e.error):`Loading…`})()),t})()},get children(){var t=PF();return y(t,n(m,{get each(){return e()},children:e=>(()=>{var t=HF(),r=t.firstChild,i=r.firstChild,a=i.nextSibling;a.firstChild;var o=r.nextSibling;return y(i,()=>e.name,null),y(i,n(l,{get when(){return e.current},get children(){return VF()}}),null),y(a,()=>R(e.lastSeen,N()),null),o.$$click=()=>void s(e),y(o,()=>e.current?`Sign out`:`Revoke`),t})()})),t}})]}})}var HI=2e3;function UI(e){let[t,r]=u(),[i,a]=u(``),[o,c]=u(Date.now()),d=async()=>{a(``);try{let e=await V(`/api/devices/link`,{method:`POST`,json:{}}),t=await e.json(),n=Date.now();c(n),r({...t,expiresAt:Rk(t.expiresAt,e.headers.get(`date`),n)})}catch(e){a(U(e))}},f=()=>(t()?.expiresAt??0)<=o(),p=()=>{let e=t();return e?Qk(e.url,{ecc:`M`}):void 0},m=setInterval(()=>c(Date.now()),1e3),h=!1,g=setInterval(async()=>{if(!(h||!t()||f())){h=!0;try{let t=(await G(`/api/devices`)).devices,n=Lk(e.known,t);n&&(e.onLinked(t),q(`${n.name} linked`),e.onClose())}catch{}finally{h=!1}}},HI);return M(()=>{clearInterval(m),clearInterval(g)}),d(),n(de,{open:!0,title:`Add the Hub app`,get onClose(){return e.onClose},class:`add-app`,get children(){return n(l,{get when(){return t()},get fallback(){return(()=>{var e=BF();return y(e,()=>i()||`Creating a link code…`),e})()},children:e=>(()=>{var t=KF(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling.nextSibling,a=r.nextSibling;return y(i,()=>e().hub),y(t,n(l,{get when(){return!f()},get fallback(){return(()=>{var e=qF(),t=e.firstChild.nextSibling;return t.$$click=()=>void d(),e})()},get children(){return[(()=>{var e=UF(),t=e.firstChild.nextSibling;return s(n=>{var r=`0 0 ${p().size+8} ${p().size+8}`,i=$k(p(),4);return r!==n.e&&b(e,`viewBox`,n.e=r),i!==n.t&&b(t,`d`,n.t=i),n},{e:void 0,t:void 0}),e})(),(()=>{var t=WF(),n=t.firstChild.nextSibling;return y(n,()=>Ik(e().expiresAt,o())),t})(),(()=>{var t=GF(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return y(n,()=>e().url),r.$$click=()=>void navigator.clipboard?.writeText(e().url).then(()=>q(`Link copied`),()=>q(`Copy failed`,`err`)),s(()=>b(i,`href`,e().url)),t})()]}}),a),t})()})}})}function WI(){let[e,t]=u(),r=async()=>{try{t(new Set((await G(`/api/devices`)).devices.map(e=>e.id)))}catch(e){q(U(e),`err`)}};return n(vI,{id:`add-app`,title:`Add the Hub app`,get children(){return[(()=>{var e=JF(),t=e.firstChild.nextSibling;return t.$$click=()=>void r(),e})(),n(l,{get when(){return e()},children:e=>n(UI,{get known(){return e()},onLinked:()=>{},onClose:()=>t(void 0)})})]}})}var GI=`/api/agent/team-settings`;function KI(){let[e,{mutate:t,refetch:i}]=d(()=>G(GI).then(e=>e.settings)),[a,o]=u(!1),c=async n=>{let r=e();if(!r)return;let a=n.checked;o(!0);try{let e=await(await V(GI,{method:`PUT`,json:{teamIsolation:a,expectedRevision:r.revision}})).json();t(e.settings),q(a?`Team isolation is on`:`Team isolation is off`)}catch(e){n.checked=!a,e instanceof W&&e.status===409?(q(`Team settings changed elsewhere. Showing the current setting; try again.`,`err`),i()):q(U(e),`err`)}finally{o(!1)}};return n(vI,{id:`teams`,label:`Teams`,get children(){return[YF(),n(l,{get when(){return e()},get fallback(){return(()=>{var t=BF();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?`Could not load: ${U(e.error)}`:`Loading…`})()),t})()},children:e=>(()=>{var t=XF(),n=t.firstChild.firstChild.firstChild.nextSibling;return n.addEventListener(`change`,e=>void c(e.currentTarget)),s(()=>n.disabled=a()),s(()=>n.checked=e().teamIsolation),t})()})]}})}var qI=(e,t)=>Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[],JI=e=>e.id===`local`?`Hub owner (pairing)`:e.name||e.email||e.id;function YI(){let e=()=>Xn(X()),[t,r]=u(e()[0]?.[0]??`machines`),[i,a]=u(``);x(()=>{let t=Pt().hash,n=t===`#admin-machines`?`machines`:t===`#admin-audit`?`audit`:void 0;n&&e().some(([e])=>e===n)&&r(n)});let o=async(e,t)=>{try{return await e(),a(``),q(t),!0}catch(e){return a(lr(e)),q(i(),`err`),!1}};return n(vI,{id:`admin`,label:`Admin`,get children(){return[(()=>{var i=ZF();return y(i,n(m,{get each(){return e()},children:([e,i])=>(()=>{var o=rI();return o.$$click=()=>(r(e),a(``)),y(o,i,null),y(o,n(l,{get when(){return e===`approvals`&&Vl().length},get children(){var e=nI();return y(e,()=>Vl().length),e}}),null),s(()=>b(o,`aria-pressed`,t()===e)),o})()})),i})(),n(l,{get when(){return i()},get children(){var e=QF();return y(e,i),e}}),n(l,{get when(){return t()===`users`},get children(){return n(XI,{change:o})}}),n(l,{get when(){return t()===`machines`},get children(){var e=$F();return y(e,n(ZI,{change:o})),e}}),n(l,{get when(){return t()===`approvals`},get children(){return[eI(),n(l,{get when(){return Vl().length},get fallback(){return iI()},get children(){return n(zI,{})}})]}}),n(l,{get when(){return t()===`audit`},get children(){var e=tI();return y(e,n(QI,{})),e}})]}})}function XI(e){let[t,{refetch:i}]=d(()=>G(`/api/admin/users`).then(e=>qI(e,`users`))),[a,o]=u(``),[c,f]=u(`all`),[p,h]=u(`role`),g=async(t,n)=>{await P(n.confirm,n.label,{danger:!!n.danger})&&(await e.change(()=>V(`/api/admin/users/${K(t.id)}`,{method:`PUT`,json:n.change}),`${JI(t)}: ${n.label.toLowerCase()} done`)&&t.id===X()?.user?.id&&(Il(void 0),await Tu().catch(()=>!1)),i())};return(()=>{var e=aI(),i=e.firstChild.firstChild,u=i.nextSibling,d=u.nextSibling;return i.$$input=e=>o(e.currentTarget.value),u.addEventListener(`change`,e=>f(e.currentTarget.value)),y(u,n(m,{each:Gn,children:([e,t])=>(()=>{var n=bF();return n.value=e,y(n,t),n})()})),d.addEventListener(`change`,e=>h(e.currentTarget.value)),y(d,n(m,{each:Wn,children:([e,t])=>(()=>{var n=bF();return n.value=e,y(n,t),n})()})),y(e,n(l,{get when(){return t()},get fallback(){return(()=>{var e=oI();return y(e,(()=>{var e=r(()=>!!t.error);return()=>e()?`Could not load: ${lr(t.error)}`:`Loading…`})()),e})()},get children(){var e=PF();return y(e,n(m,{get each(){return sr(t(),{query:a(),filter:c(),sort:p()})},get fallback(){return sI()},children:e=>(()=>{var i=dI(),a=i.firstChild,o=a.firstChild,c=o.nextSibling,u=c.firstChild,d=u.nextSibling;return d.nextSibling,y(o,()=>JI(e),null),y(o,n(l,{get when(){return e.role===`admin`},get children(){return cI()}}),null),y(o,n(l,{get when(){return e.disabled},get children(){return lI()}}),null),y(o,n(l,{get when(){return e.id===X()?.user?.id},get children(){return uI()}}),null),y(a,n(l,{get when(){return r(()=>!!e.name)()&&e.email},get children(){var t=aF();return y(t,()=>e.email),t}}),c),y(c,()=>_n(e.machines??0,`machine`),u),y(c,()=>_n(e.devices??0,`device`),d),y(c,()=>R(e.lastSeen,N())||`never`,null),y(i,n(m,{get each(){return cr(e,t(),X()?.user?.id)},children:t=>(()=>{var n=fI();return n.$$click=()=>void g(e,t),y(n,()=>t.label),s(()=>k(n,`btn small${t.danger?` danger`:``}`)),n})()}),null),s(()=>k(i,e.disabled?`disabled`:``)),i})()})),e}}),null),s(()=>i.value=a()),s(()=>u.value=c()),s(()=>d.value=p()),e})()}function ZI(e){let[t,{refetch:i}]=d(()=>G(`/api/admin/machines`).then(e=>qI(e,`machines`)));return n(l,{get when(){return t()},get fallback(){return(()=>{var e=oI();return y(e,(()=>{var e=r(()=>!!t.error);return()=>e()?`Could not load: ${lr(t.error)}`:`Loading…`})()),e})()},get children(){return n(l,{get when(){return t().length},get fallback(){return pI()},get children(){var a=PF();return y(a,n(m,{get each(){return t()},children:t=>{let n=t.ownerEmail??(t.ownerID===`local`?`hub owner`:t.ownerID)??`unknown`;return(()=>{var a=mI(),o=a.firstChild,c=o.firstChild,l=c.firstChild;l.nextSibling;var u=c.nextSibling,d=u.firstChild,f=o.nextSibling;return y(c,()=>t.name,null),y(u,n,d),y(u,()=>t.ownerID===X()?.user?.id?` (you)`:``,d),y(u,(()=>{var e=r(()=>!!t.online);return()=>e()?`online`:`offline · seen ${R(t.lastSeen,N())}`})(),null),f.$$click=async()=>{await P(`Revoke ${t.name} (${n})? Its OpenCode processes disconnect and it must be connected again.`,`Revoke`,{danger:!0})&&(await e.change(()=>V(`/api/admin/machines/${K(t.id)}`,{method:`DELETE`}),`${t.name} revoked`),i())},s(()=>k(l,`online-dot${t.online?` on`:``}`)),a})()}})),a}})}})}function QI(){let[e]=d(async()=>{let[e,t,n]=await Promise.all([G(`/api/admin/audit`),G(`/api/admin/users`).then(e=>qI(e,`users`),()=>[]),G(`/api/admin/machines`).then(e=>qI(e,`machines`),()=>[])]),r=[...t.map(e=>({id:e.id,email:e.id===`local`?`hub owner`:e.email,name:e.name})),...n.map(e=>({id:e.id,name:e.name}))];return ar(qI(e,`audit`).length?qI(e,`audit`):qI(e,`entries`),r)});return n(l,{get when(){return e()},get fallback(){return(()=>{var t=oI();return y(t,(()=>{var t=r(()=>!!e.error);return()=>t()?`Could not load: ${lr(e.error)}`:`Loading…`})()),t})()},get children(){return n(l,{get when(){return e().length},get fallback(){return gI()},get children(){var t=hI();return y(t,n(m,{get each(){return e()},children:e=>(()=>{var t=_I(),n=t.firstChild,i=n.firstChild,a=i.nextSibling,o=n.nextSibling;return y(i,()=>e.action),y(a,()=>e.actor,null),y(a,(()=>{var t=r(()=>!!e.target);return()=>t()?` → ${e.target}`:``})(),null),y(a,(()=>{var t=r(()=>!!e.detail);return()=>t()?` · ${e.detail}`:``})(),null),y(o,()=>R(e.at,N())),s(t=>{var n=new Date(e.at).toISOString(),r=new Date(e.at).toLocaleString();return n!==t.e&&b(o,`datetime`,t.e=n),r!==t.t&&b(o,`title`,t.t=r),t},{e:void 0,t:void 0}),t})()})),t}})}})}z([`input`,`keydown`,`click`]);var $I=I(`<a href=/settings/voice#recordings title="This conversation is recorded on this hub (Settings → Voice → Recording)"><span class=recording-dot aria-hidden=true>`),eL=I(`<span class="recording-note small"data-recording-note>`),tL=I(`<span class=sr-only role=status aria-live=polite data-recording-status>`);function nL(){let[e,t]=u(gl.get());return M(gl.subscribe(()=>t(gl.get()))),e}function rL(e){let t=nL(),i=t=>e.sessionID===void 0||t.sessionID===void 0||t.sessionID===e.sessionID,a=()=>t().on&&i(t()),o=a(),[c,d]=u(``);return M(gl.subscribe(()=>{let e=gl.get(),t=e.on&&i(e);t!==o&&(o=t,d(t?`Recording on`:`Recording off`))})),[n(l,{get when(){return a()},get children(){var e=$I();return e.firstChild,y(e,()=>_l(t()),null),s(n=>{var r=`recording-indicator${t().audio?``:` no-audio`}`,i=t().audio?`on`:`no-audio`,a=`${_l(t())}: this conversation is recorded on the hub. Open the recording settings`;return r!==n.e&&k(e,n.e=r),i!==n.t&&b(e,`data-recording-indicator`,n.t=i),a!==n.a&&b(e,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}}),n(l,{get when(){return r(()=>!(a()||!t().note))()&&i(t())},get children(){var e=eL();return y(e,()=>t().note),e}}),n(l,{get when(){return e.announce},get children(){var e=tL();return y(e,c),e}})]}var iL=I(`<div role=status><a class=voice-pill-link title="Go to the session in Voice mode">Voice: <strong></strong></a><button type=button class="btn small end"aria-label="End Voice mode">End`);function aL(){let e=()=>rx().sessionID??``;return(()=>{var t=iL(),r=t.firstChild,i=r.firstChild.nextSibling,a=r.nextSibling;return y(t,n(L,{name:`wave`}),r),y(i,ix),y(t,n(rL,{announce:!0,get sessionID(){return e()}}),a),a.$$click=()=>void qb.end(),s(n=>{var i=`voice-pill ${rx().voice}`,a=`Voice mode is on in ${ix()}`,o=Ot(e());return i!==n.e&&k(t,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&b(r,`href`,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}z([`click`]);var oL=`/api/agent/workspaces`,sL=50,cL=4e3,lL=e=>e instanceof W?{status:e.status,...e.code?{code:e.code}:{},message:e.message,...e.details?{details:e.details}:{}}:{status:0,message:e instanceof tn||e instanceof Error?e.message:String(e)},uL=e=>km(lL(e));function dL(){let[e,t]=u(`loading`),[n,r]=u(),[i,a]=u([]),[o,s]=Or({}),[c,l]=u(),[d,f]=u(new Set),p=new Map,m=new Map,h=!1;async function g(){try{let e=hm(await G(`${oL}?state=active&limit=${sL}`));a(e.items),r(void 0),t(`ready`)}catch(e){e instanceof W&&(e.status===404||e.code===`unsupported`)?t(`unavailable`):e instanceof W&&e.status===403?t(`forbidden`):(r(uL(e)),t(`error`))}}async function _(e){p.set(e,Date.now()),s(e,e=>({...e??{},loading:!0}));try{let t=mm(await G(`${oL}/${K(e)}/board`));if(!t)throw Error(`The hub sent a board this console can't read.`);return s(e,e=>({...e,board:t,loading:!1,error:void 0})),t}catch(t){s(e,e=>({...e,loading:!1,error:uL(t)}));return}}async function v(){try{l(Ce(await G(`/api/agent/grants`)))}catch{l(`error`)}}function y(e){if(m.has(e))return;let t=Math.max(0,(p.get(e)??0)+cL-Date.now());m.set(e,setTimeout(()=>{m.delete(e),d().has(e)&&document.visibilityState!==`hidden`&&_(e)},t))}function b(){h||(h=!0,g(),hu(e=>{if(e.type===`resync`&&g(),e.type===`catalog`||e.type===`resync`)for(let e of d())y(e)}))}function x(e){let t=new Set(d());t.has(e)?t.delete(e):(t.add(e),_(e),c()===void 0&&v()),f(t)}let S=(e,t)=>s(e,e=>({...e??{loading:!1},notice:t}));async function C(e,t){await V(`${oL}/${K(e)}/supervision`,{method:`PUT`,json:t})}async function w(e,t,n){let r=o[e]?.board;if(!r||o[e]?.saving)return;let i=vm(r,t);if(i)i!==`unchanged`&&S(e,{text:Dm(i),kind:`warn`});else{s(e,e=>({...e,saving:!0,notice:{text:`Saving: ${n}…`,kind:``}}));try{await T(e,t,Tm(t,r.revision),n)}finally{s(e,e=>({...e,saving:!1}))}}}async function T(e,t,n,r){try{await C(e,n),await _(e),S(e,{text:`Done: ${r}.`,kind:``});return}catch(t){if(!(t instanceof W&&t.status===409&&t.code===`conflict`)){S(e,{text:uL(t),kind:`err`}),_(e);return}}let i=await _(e);if(!i)return S(e,{text:`The workspace changed elsewhere and could not be reloaded. Your change is kept: ${r}.`,kind:`warn`,pending:t});let a=Om(t,i);if(a.kind===`done`)return S(e,{text:`Already done elsewhere: ${r}.`,kind:``});if(a.kind===`dropped`)return S(e,{text:a.reason,kind:`warn`});try{await C(e,a.body),await _(e),S(e,{text:`The workspace changed elsewhere; re-applied your change: ${r}.`,kind:``})}catch(n){_(e),n instanceof W&&n.status===409?S(e,{text:`The workspace keeps changing elsewhere. Your change is kept: ${r}.`,kind:`warn`,pending:t}):S(e,{text:uL(n),kind:`err`})}}return{availability:e,listError:n,workspaces:i,boards:o,grants:c,expanded:d,start:b,loadList:g,loadBoard:_,toggle:x,move:w,notify:S}}var fL=ce(dL),pL=`hub.sidebar.sections.collapsed`;function mL(e){try{let t=JSON.parse(e.getItem(`hub.sidebar.sections.collapsed`)??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function hL(e,t){let n=mL(e);n.has(t)?n.delete(t):n.add(t);try{e.setItem(pL,JSON.stringify([...n]))}catch{}return n}var gL=e=>e!==`results`;function _L(e,t,n){if(t&&gL(e)){if(e===`needs`)return{text:String(t),label:`${_n(t,`session`)} ${t===1?`needs`:`need`} you`};if(n)return{text:String(t),label:_n(t,e===`workspaces`?`workspace`:`session`)}}}var vL=I(`<button type=button class=side-section-toggle><span class=side-section-title>`),yL=I(`<div class=side-section-head>`),bL=I(`<span class=side-section-title>`),xL=I(`<span aria-hidden=true data-section-count>`),[SL,CL]=u(mL(localStorage)),wL=(e,t)=>gL(t)&&SL().has(e),TL=e=>`side-sec-${e.replace(/[^A-Za-z0-9_-]/g,`-`)}`;function EL(e){let t=()=>wL(e.id,e.kind),r=()=>_L(e.kind,e.count,t());return(()=>{var i=yL();return y(i,n(l,{get when(){return gL(e.kind)},get fallback(){return(()=>{var t=bL();return y(t,()=>e.title),t})()},get children(){var i=vL(),a=i.firstChild;return i.$$click=()=>CL(hL(localStorage,e.id)),y(i,n(L,{get name(){return t()?`chevron`:`down`},class:`side-section-caret`}),a),y(a,()=>e.title),y(i,n(l,{get when(){return r()},children:t=>(()=>{var n=xL();return y(n,()=>t().text),s(()=>k(n,`side-count${e.kind===`needs`?` needs`:``}`)),n})()}),null),s(n=>{var a=!t(),o=TL(e.id),s=e.id,c=r()?`${e.title}, ${r().label}`:e.title,l=t()?`Show ${e.title}`:`Hide ${e.title}`;return a!==n.e&&b(i,`aria-expanded`,n.e=a),o!==n.t&&b(i,`aria-controls`,n.t=o),s!==n.a&&b(i,`data-section-toggle`,n.a=s),c!==n.o&&b(i,`aria-label`,n.o=c),l!==n.i&&b(i,`title`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i}}),null),y(i,()=>e.children,null),i})()}z([`click`]);var DL=I(`<p class=side-empty>Workspaces are not available to this device.`),OL=I(`<p class=side-empty role=alert>Could not load workspaces: <!> <button type=button class=link-btn>Retry`),kL=I(`<ul class=ws-list>`),AL=I(`<section aria-label=Workspaces data-section=workspaces>`),jL=I(`<p class=ws-goal><span class=sr-only>Goal: `),ML=I(`<div class=ws-panel>`),NL=I(`<li><button type=button class=ws-head><span class=ws-title>`),PL=I(`<p class=ws-notice role=status aria-live=polite>`),FL=I(`<p class=side-empty role=alert>Could not load the board: <!> <button type=button class=link-btn>Retry`),IL=I(`<button type=button class=link-btn>Retry`),LL=I(`<p class=side-empty>Loading…`),RL=I(`<p class=side-empty>No members yet.`),zL=I(`<ul role=tree>`),BL=I(`<div>Drop here: no supervisor`),VL=I(`<p class=ws-keys>Drag to change supervision, or Alt+arrows. Supervision grants nothing.`),HL=I(`<p class=ws-keys>`),UL=I(`<span class="ws-rel ws-spawned"title="Native parent session (unchanged by supervision)">spawned by <a tabindex=-1>`),WL=I(`<span class="ws-rel ws-supervised"title="Workspace supervision link">supervised by `),GL=I(`<ul class=ws-assignments>`),KL=I(`<li role=treeitem><div class=ws-row><a class=ws-member tabindex=-1></a></div><p class=ws-meta>`),qL=I(`<span>`),JL=I(`<span class=ws-assignment-stale> · stale`),YL=I(`<li><span class=ws-assignment-title></span> <span class=ws-assignment-status>`),XL=I(`<ul>`),ZL=I(`<details class=ws-controls><summary>Delegated controls</summary><p class=muted>Read-only. Grants held by roles or apps are not listed here; dragging never creates one.`),QL=I(`<p>Could not load your grants.`),$L=I(`<p>Loading…`),eR=I(`<p> holds no grant from you. Supervising grants nothing: it can message and ask, and actions on this session come to you as Decisions. <a href=/settings/agents#grants>Grants are in Settings → Agents & access.`),tR=I(`<li> · <!> · <!> <span class=muted>(grant <!>)`),nR=new Set([`idle`,`working`,`blocked`,`error`]),rR={open:`open`,in_progress:`in progress`,blocked:`blocked`},iR={ArrowRight:`indent`,ArrowLeft:`outdent`,ArrowUp:`up`,ArrowDown:`down`};function aR(e){let t=fL;fe(()=>t.start());let r=()=>{let e=t.availability();return e===`forbidden`||e===`error`||e===`ready`&&t.workspaces().length>0};return n(l,{get when(){return r()},get children(){var r=AL();return y(r,n(EL,{id:`workspaces`,kind:`workspaces`,title:`Workspaces`,get count(){return t.workspaces().length}}),null),y(r,n(l,{get when(){return t.availability()===`forbidden`},get children(){return DL()}}),null),y(r,n(l,{get when(){return t.availability()===`error`},get children(){var e=OL(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling;return y(e,()=>t.listError(),n),r.$$click=()=>void t.loadList(),e}}),null),y(r,n(l,{get when(){return!wL(`workspaces`,`workspaces`)},get children(){var r=kL();return y(r,n(m,{get each(){return t.workspaces()},children:t=>n(oR,{ws:t,get onPick(){return e.onPick}})})),s(()=>b(r,`id`,TL(`workspaces`))),r}}),null),s(()=>k(r,`side-section ws-section${wL(`workspaces`,`workspaces`)?` collapsed`:``}`)),r}})}function oR(e){let t=fL,r=()=>t.expanded().has(e.ws.id),i=`ws-panel-${e.ws.id}`;return(()=>{var a=NL(),o=a.firstChild,c=o.firstChild;return o.$$click=()=>t.toggle(e.ws.id),b(o,`aria-controls`,i),y(o,n(L,{get name(){return r()?`down`:`chevron`}}),c),y(c,()=>e.ws.title),y(a,n(l,{get when(){return e.ws.goal},get children(){var t=jL();return t.firstChild,y(t,()=>e.ws.goal,null),s(()=>b(t,`title`,e.ws.goal)),t}}),null),y(a,n(l,{get when(){return r()},get children(){var t=ML();return b(t,`id`,i),y(t,n(lR,{get ws(){return e.ws},get onPick(){return e.onPick}})),t}}),null),s(t=>{var n=`ws-item${r()?` open`:``}`,i=e.ws.id,s=r();return n!==t.e&&k(a,t.e=n),i!==t.t&&b(a,`data-workspace`,t.t=i),s!==t.a&&b(o,`aria-expanded`,t.a=s),t},{e:void 0,t:void 0,a:void 0}),a})()}var sR=(e,t)=>{let n=e.members.find(e=>e.memberID===t);if(!n)return`a member`;let r=jm(Y.machines,n.sessionID);return r.found?r.title:n.session?.name??n.sessionID};function cR(e,t,n){let r=sR(e,t.memberID);return t.supervisorMemberID===null?`${r} has no supervisor`:n===`reorder`?`${r} reordered`:`${r} supervised by ${sR(e,t.supervisorMemberID)}`}function lR(e){let i=fL,o=()=>e.ws.id,c=()=>i.boards[o()],d=()=>c()?.board,f=C(()=>d()?_m(d()):void 0),[p,h]=u(),[g,_]=u(),[v,S]=u(),w,T,E=()=>{let e=f();if(e?.flat.length)return e.flat.some(e=>e.member.memberID===p())?p():e.flat[0].member.memberID},D=e=>{h(e),w?.querySelector(`[data-member="${CSS.escape(e)}"]`)?.focus()};x(()=>{if(f(),T){let e=T;queueMicrotask(()=>{w?.querySelector(`[data-member="${CSS.escape(e)}"]`)&&(T=void 0,D(e))})}});let j=(e,t,n=!1)=>{let r=d();e&&r&&(n&&(T=e.memberID),i.move(o(),e,cR(r,e,t)))},M=(t,n,r)=>{let a=r.flat.indexOf(n);if(t.altKey&&iR[t.key]){t.preventDefault();let e=iR[t.key],a=wm(r,n.member.memberID,e);return a?j(a,e===`up`||e===`down`?`reorder`:`supervise`,!0):i.notify(o(),{text:`No move that way.`,kind:`warn`})}if(t.altKey||t.ctrlKey||t.metaKey)return;let s=t.key===`ArrowDown`?r.flat[a+1]:t.key===`ArrowUp`?r.flat[a-1]:t.key===`Home`?r.flat[0]:t.key===`End`?r.flat[r.flat.length-1]:void 0;s?(t.preventDefault(),D(s.member.memberID)):t.key===`Enter`&&t.target===t.currentTarget&&(t.preventDefault(),e.onPick?.(),Vt(Ot(n.member.sessionID)))},N=e=>{let t=e.currentTarget.querySelector(`.ws-row`).getBoundingClientRect(),n=e.clientY-t.top;return n<t.height*.25?`before`:n>t.height*.75?`after`:`inside`},ee=(e,t)=>{let n=d(),r=e.member.memberID,i=[];for(let[e,a,o]of[[`indent`,`Supervised by the member above`,`Alt+→`],[`outdent`,`Up one level`,`Alt+←`],[`up`,`Move up`,`Alt+↑`],[`down`,`Move down`,`Alt+↓`],[`detach`,`No supervisor`,``]]){let s=wm(t,r,e);s&&!vm(n,s)&&i.push({label:a,hint:o,run:()=>j(s,e===`up`||e===`down`?`reorder`:`supervise`,!0)})}let a=t.flat.filter(e=>e.member.memberID!==r&&!vm(n,Cm(t,r,{memberID:e.member.memberID,position:`inside`})));if(a.length){i.push({section:`Supervised by`});for(let e of a)i.push({label:sR(n,e.member.memberID),run:()=>j(Cm(t,r,{memberID:e.member.memberID,position:`inside`}),`supervise`,!0)})}return i.length||i.push({label:n.workspace.state===`active`?e.member.master?`The master is the root`:`No moves`:`Archived: read-only`,disabled:!0,run:()=>{}}),i};return[(()=>{var e=PL();return y(e,()=>c()?.notice?.text??``,null),y(e,n(l,{get when(){return c()?.notice?.pending},children:e=>(()=>{var t=IL();return t.$$click=()=>j(e(),`supervise`),t})()}),null),e})(),n(l,{get when(){return c()?.error},get children(){var e=FL(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return y(e,()=>c().error,t),n.$$click=()=>void i.loadBoard(o()),e}}),n(l,{get when(){return f()},get fallback(){return n(l,{get when(){return!c()?.error},get children(){return LL()}})},children:u=>[n(l,{get when(){return!u().flat.length},get children(){return RL()}}),(()=>{var r=zL(),f=w;return typeof f==`function`?t(f,r):w=r,y(r,n(m,{get each(){return u().flat},children:t=>{let r=()=>jm(Y.machines,t.member.sessionID),c=()=>sR(d(),t.member.memberID),f=()=>t.supervisorMemberID?u().flat.find(e=>e.member.memberID===t.supervisorMemberID)?.children??[]:u().roots,p=()=>Mm(t,d(),Y.machines),x=()=>nR.has(t.member.session?.state??``)?t.member.session.state:`idle`,C=()=>d().workspace.state===`active`&&!i.boards[o()]?.saving;return(()=>{var i=KL(),o=i.firstChild,d=o.firstChild,w=o.nextSibling;return i.addEventListener(`drop`,e=>{let n=g();if(!n)return;e.preventDefault(),e.stopPropagation();let r=N(e);_(void 0),S(void 0),j(Cm(u(),n,{memberID:t.member.memberID,position:r}),r===`inside`?`supervise`:`reorder`)}),i.addEventListener(`dragleave`,e=>{e.currentTarget.contains(e.relatedTarget)||S(void 0)}),i.addEventListener(`dragover`,e=>{let n=g();n&&n!==t.member.memberID&&(e.preventDefault(),e.stopPropagation(),S(`${t.member.memberID}:${N(e)}`))}),i.addEventListener(`dragend`,()=>{Yp(),_(void 0),S(void 0)}),i.addEventListener(`dragstart`,e=>{Jp(e,{target:{sessionID:t.member.sessionID},label:c()}),e.dataTransfer?.setData(`text/plain`,t.member.memberID),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),_(t.member.memberID)}),i.$$keydown=e=>M(e,t,u()),i.addEventListener(`focus`,e=>e.target===e.currentTarget&&h(t.member.memberID)),y(o,n(A,{get state(){return x()}}),d),d.$$click=()=>e.onPick?.(),b(d,`draggable`,!1),y(d,c),y(o,n(O,{get label(){return`Move ${c()}`},class:`icon-btn small row-more`,items:()=>ee(t,u())}),null),y(w,n(m,{get each(){return Pm(t.member,r())},children:e=>(()=>{var t=qL();return y(t,()=>e.label),s(n=>{var r=`ws-badge ${e.kind}`,i=e.title;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),y(w,n(l,{get when(){return p().spawnedBy},get children(){var e=UL(),t=e.firstChild.nextSibling;return y(t,()=>p().spawnedBy.title),s(()=>b(t,`href`,Ot(p().spawnedBy.sessionID))),e}}),null),y(w,n(l,{get when(){return p().supervisedBy},get children(){var e=WL();return e.firstChild,y(e,()=>p().supervisedBy.title,null),e}}),null),y(i,n(l,{get when(){return t.assignments.length},get children(){var e=GL();return y(e,n(m,{get each(){return t.assignments},children:e=>(()=>{var t=YL(),r=t.firstChild,i=r.nextSibling.nextSibling;return y(r,()=>e.title),y(i,()=>rR[e.status]??e.status),y(t,n(l,{get when(){return e.stale?.length},get children(){var t=JL();return s(()=>b(t,`title`,e.stale.join(`, `))),t}}),null),s(()=>k(t,`ws-assignment ${e.status}`)),t})()})),s(()=>b(e,`aria-label`,`Assignments of ${c()}`)),e}}),null),y(i,n(l,{get when(){return p().supervisedBy},children:e=>n(uR,{get supervisorSessionID(){return e().sessionID},get supervisorTitle(){return e().title},get memberDirectory(){return r().directory}})}),null),s(e=>{var n=t.depth+1,r=f().length,o=f().indexOf(t)+1,s=E()===t.member.memberID,l=`${c()}${t.member.master?`, master`:``}${p().supervisedBy?`, supervised by ${p().supervisedBy.title}`:``}`,u=E()===t.member.memberID?0:-1,m=t.member.memberID,h=`ws-node${t.member.presence===`online`?``:` away`}${g()===t.member.memberID?` dragged`:``}${v()?.startsWith(`${t.member.memberID}:`)?` drop-${v().split(`:`)[1]}`:``}`,_=String(t.depth),y=C()&&!t.member.master,x=Ot(t.member.sessionID);return n!==e.e&&b(i,`aria-level`,e.e=n),r!==e.t&&b(i,`aria-setsize`,e.t=r),o!==e.a&&b(i,`aria-posinset`,e.a=o),s!==e.o&&b(i,`aria-selected`,e.o=s),l!==e.i&&b(i,`aria-label`,e.i=l),u!==e.n&&b(i,`tabindex`,e.n=u),m!==e.s&&b(i,`data-member`,e.s=m),h!==e.h&&k(i,e.h=h),_!==e.r&&a(i,`--ws-depth`,e.r=_),y!==e.d&&b(i,`draggable`,e.d=y),x!==e.l&&b(d,`href`,e.l=x),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),i})()}})),s(t=>{var n=`ws-tree${g()?` dragging`:``}`,i=`Supervision in ${e.ws.title}`,a=`ws-keys-${o()}`,s=c()?.saving?`true`:void 0;return n!==t.e&&k(r,t.e=n),i!==t.t&&b(r,`aria-label`,t.t=i),a!==t.a&&b(r,`aria-describedby`,t.a=a),s!==t.o&&b(r,`aria-busy`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),r})(),n(l,{get when(){return g()},get children(){var e=BL();return e.addEventListener(`drop`,e=>{e.preventDefault();let t=g();_(void 0),S(void 0),t&&j(Cm(u(),t,{root:!0}),`supervise`)}),e.addEventListener(`dragleave`,()=>S(void 0)),e.addEventListener(`dragover`,e=>{e.preventDefault(),S(`root`)}),s(()=>k(e,`ws-root-drop${v()===`root`?` over`:``}`)),e}}),(()=>{var e=VL();return s(()=>b(e,`id`,`ws-keys-${o()}`)),e})(),n(l,{get when(){return u().staleLinks||d().membersTruncated||d().linksTruncated},get children(){var e=HL();return y(e,n(l,{get when(){return u().staleLinks},get children(){return[r(()=>u().staleLinks),` link(s) to departed members not shown. `]}}),null),y(e,n(l,{get when(){return d().membersTruncated||d().linksTruncated},children:`Some members are not shown (limit).`}),null),e}})]})]}function uR(e){let t=fL,i=()=>{let n=t.grants();return Array.isArray(n)?Lm(n,e.supervisorSessionID,e.memberDirectory,Date.now()):n};return(()=>{var t=ZL(),a=t.firstChild.nextSibling;return y(t,n(l,{get when(){return i()!==`error`},get fallback(){return QL()},get children(){return n(l,{get when(){return Array.isArray(i())},get fallback(){return $L()},get children(){return n(l,{get when(){return i().length},get fallback(){return(()=>{var t=eR(),n=t.firstChild;return y(t,()=>e.supervisorTitle,n),t})()},get children(){var e=XL();return y(e,n(m,{get each(){return i()},children:e=>(()=>{var t=tR(),n=t.firstChild,i=n.nextSibling,a=i.nextSibling.nextSibling,o=a.nextSibling.nextSibling,s=o.firstChild.nextSibling;return s.nextSibling,y(t,()=>e.verbs.join(`, `),n),y(t,(()=>{var t=r(()=>e.covers===void 0);return()=>t()?`folder unknown`:e.covers?`covers this session's folder`:`not this session's folder`})(),i),y(t,()=>Ss(e.expiresAt,Date.now()),a),y(o,()=>e.grantID,s),t})()})),e}})}})}}),a),t})()}z([`click`,`keydown`]);var dR=I(`<nav aria-label=Primary><ul>`),fR=I(`<a>`),pR=I(`<li>`),mR=I(`<a class="side-link nav-link disabled"aria-disabled=true>`),hR=I(`<div class=nav-rail>`),gR=()=>({signedIn:!!X(),concierge:Xl()?.state});function _R(e){let t=()=>we(Pt().pathname);return(()=>{var r=dR(),i=r.firstChild;return y(i,n(m,{get each(){return Se(gR())},children:r=>(()=>{var i=pR();return y(i,n(l,{get when(){return r.enabled},get fallback(){return(()=>{var t=mR();return y(t,n(L,{get name(){return r.dest.icon}}),null),y(t,n(l,{get when(){return!e.compact},get children(){return r.dest.label}}),null),s(n=>{var i=`${r.dest.label} isn't available`,a=e.compact?r.dest.label:void 0;return i!==n.e&&b(t,`title`,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),n},{e:void 0,t:void 0}),t})()},get children(){var i=fR();return i.$$click=()=>e.onPick?.(),y(i,n(L,{get name(){return r.dest.icon}}),null),y(i,n(l,{get when(){return!e.compact},get children(){return r.dest.label}}),null),s(n=>{var a=`side-link nav-link${t()===r.dest.id?` active`:``}`,o=r.dest.route,s=t()===r.dest.id?`page`:void 0,c=e.compact?r.dest.label:void 0,l=e.compact?r.dest.label:void 0;return a!==n.e&&k(i,n.e=a),o!==n.t&&b(i,`href`,n.t=o),s!==n.a&&b(i,`aria-current`,n.a=s),c!==n.o&&b(i,`aria-label`,n.o=c),l!==n.i&&b(i,`title`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i}})),i})()})),s(()=>k(r,e.compact?`nav-rail-links`:`feature-nav`)),r})()}function vR(e){return(()=>{var t=hR();return y(t,n(F,{icon:`sidebar`,label:`Show sidebar (⌘B)`,get onClick(){return e.onExpand}}),null),y(t,n(_R,{compact:!0}),null),t})()}z([`click`]);var yR=I(`<span class=concierge-btn-text>Concierge`),bR=I(`<span aria-hidden=true>`),xR=I(`<button type=button>`),SR=I(`<a href=/settings/concierge data-concierge-button=disabled data-indicator=off>`),CR;function wR(){let e=CR;return CR=void 0,e}function TR(e){let t=()=>dt().name===`concierge`,i=()=>e.labelled?yR():null,a=e=>n(l,{get when(){return e.indicator!==`running`},get children(){var t=bR();return y(t,(()=>{var t=r(()=>e.indicator===`attention`);return()=>t()?e.count??`!`:``})()),s(()=>k(t,`concierge-ind ind-${e.indicator}`)),t}});return n(l,{get when(){return Xl()},children:r=>{let o=()=>Ys(r(),ru(),t(),Date.now(),Hs(Ul(),r(),{tiers:`all`}).length,new Set(Ul().filter(e=>e.state===`open`).map(e=>e.id)));return n(l,{get when(){return qs(r())===!0},get fallback(){return(()=>{var t=SR();return t.$$click=()=>e.onPick?.(),y(t,n(L,{name:`spark`}),null),y(t,i,null),y(t,()=>a(o()),null),s(n=>{var r=`icon-btn concierge-btn off ind-off${e.labelled?` labelled`:``}`,i=o().label,a=o().title;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()},get children(){var c=xR();return c.$$click=n=>{if(e.onPick?.(),t())return St(`/`);CR=n.currentTarget,Vt(`/concierge`)},y(c,n(L,{name:`spark`}),null),y(c,i,null),y(c,()=>a(o()),null),s(n=>{var i=`icon-btn concierge-btn state-${r().state} ind-${o().indicator}${t()?` on`:``}${e.labelled?` labelled`:``}`,a=o().label,s=t(),l=o().title,u=r().state,d=o().indicator;return i!==n.e&&k(c,n.e=i),a!==n.t&&b(c,`aria-label`,n.t=a),s!==n.a&&b(c,`aria-expanded`,n.a=s),l!==n.o&&b(c,`title`,n.o=l),u!==n.i&&b(c,`data-concierge-button`,n.i=u),d!==n.n&&b(c,`data-indicator`,n.n=d),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),c}})}})}z([`click`]);var ER=I(`<section class="side-section side-decisions"aria-label=Decisions><ul class=side-list><li class=side-row><a class=side-row-link data-side-decisions><span class=decision-mark aria-hidden=true>⚑</span><span class=side-title>`),DR=I(`<div class=sidebar><div class=side-top><a class=brand href=/><span class=brand-name>Hub</span></a><div class=side-top-actions></div></div><div class=side-search><input type=search placeholder="Search sessions"aria-label="Search sessions"></div><a class=side-new href=/new> New session</a><nav class=side-sessions aria-label=Sessions><div class=side-head><span>Sessions</span></div><div class=side-scroll></div></nav><div class=side-foot>`),OR=I(`<p class=side-empty>`),kR=I(`<a class="icon-btn small">`),AR=I(`<ul class=side-list>`),jR=I(`<section>`),MR=I(`<span aria-hidden=true>`),NR=I(`<span class=account-name>`),PR=I(`<span class=badge title="Machines waiting for approval">`),FR=I(`<span class="terminal-wait small muted"title="Herdr says this session waits for input; answer it in its terminal"data-waiting-in-terminal>waiting in terminal`),IR=I(`<span class=jobs-badge>`),LR=I(`<span class=unread-dot role=img aria-label=Unread>`),RR=I(`<a class=side-row-link><span class=side-text><span class=side-title>`),zR=I(`<li>`),BR=I(`<span class=side-row-link>`),VR=I(`<span class=side-sub data-row-sub>`),HR=I(`<span class="waiting-since small">`),UR=`hub.sidebar.groupBy`,WR=`hub.sidebar.sort`;function GR(e){let[t,i]=u(``),[a,o]=u(localStorage.getItem(UR)===`machine`?`machine`:`project`),[c,d]=u(localStorage.getItem(WR)===`title`?`title`:`recent`),f=C(()=>ja(gu(),{query:t(),groupBy:a(),sortBy:c(),now:N()})),p=()=>{let e=WS();return e.name===`session`?e.id:void 0},h=()=>Jn(X()),g=(e,t)=>{e&&(o(e),localStorage.setItem(UR,e)),t&&(d(t),localStorage.setItem(WR,t))};return(()=>{var o=DR(),u=o.firstChild,d=u.firstChild,_=d.firstChild,v=d.nextSibling,x=u.nextSibling,S=x.firstChild,C=x.nextSibling,w=C.firstChild,T=C.nextSibling,E=T.firstChild;E.firstChild;var D=E.nextSibling,A=T.nextSibling;return d.$$click=()=>e.phone&&e.onClose(),y(d,n(Pd,{class:`brand-mark`}),_),y(v,n(TR,{labelled:!0,onPick:()=>e.phone&&e.onClose()}),null),y(v,n(l,{get when(){return e.phone},get fallback(){return n(F,{icon:`sidebar`,label:`Collapse sidebar (⌘B)`,get onClick(){return e.onCollapse}})},get children(){return n(F,{icon:`close`,label:`Close sidebar`,get onClick(){return e.onClose}})}}),null),y(x,n(L,{name:`search`}),S),S.$$keydown=e=>e.key===`Escape`&&i(``),S.$$input=e=>i(e.currentTarget.value),C.$$click=()=>e.phone&&e.onClose(),y(C,n(L,{name:`plus`}),w),y(o,n(_R,{onPick:()=>e.phone&&e.onClose()}),T),y(E,n(O,{label:`Group and sort`,items:()=>[{section:`Group by`},{label:`Project`,checked:a()===`project`,run:()=>g(`project`,void 0)},{label:`Server`,checked:a()===`machine`,run:()=>g(`machine`,void 0)},{section:`Sort by`},{label:`Recent activity`,checked:c()===`recent`,run:()=>g(void 0,`recent`)},{label:`Title`,checked:c()===`title`,run:()=>g(void 0,`title`)}]}),null),y(D,n(l,{get when(){return Ul().length},get children(){var t=ER(),n=t.firstChild.firstChild.firstChild,i=n.firstChild.nextSibling;return n.$$click=()=>e.phone&&e.onClose(),y(i,(()=>{var e=r(()=>Ul().length===1);return()=>e()?`A Decision waits for you`:`${Ul().length} Decisions wait for you`})()),s(()=>b(n,`href`,Hs(Ul(),Xl(),{tiers:`all`}).length===Ul().length?`/concierge`:`/`)),t}}),null),y(D,n(l,{get when(){return f().length},get fallback(){return(()=>{var e=OR();return y(e,()=>t()?`No sessions match.`:`No sessions yet.`),e})()},get children(){return n(m,{get each(){return f()},children:t=>(()=>{var i=jR();return y(i,n(EL,{get id(){return t.id},get kind(){return t.kind},get title(){return t.title},get count(){return t.rows.length},get children(){return n(l,{get when(){return r(()=>t.kind===`group`)()&&t.machineID},get children(){var e=kR();return y(e,n(L,{name:`plus`})),s(n=>{var r=`New session in ${t.title}`,i=`New session in ${t.title}`,a=`/new?machine=${encodeURIComponent(t.machineID)}${t.directory?`&dir=${encodeURIComponent(t.directory)}`:``}${t.key?`&key=${encodeURIComponent(t.key)}`:``}`;return r!==n.e&&b(e,`aria-label`,n.e=r),i!==n.t&&b(e,`title`,n.t=i),a!==n.a&&b(e,`href`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}})}}),null),y(i,n(l,{get when(){return!wL(t.id,t.kind)},get children(){var r=AR();return y(r,n(m,{get each(){return t.rows},children:t=>n(KR,{row:t,get active(){return p()===t.id},onPick:()=>e.phone&&e.onClose()})})),s(()=>b(r,`id`,TL(t.id))),r}}),null),s(e=>{var n=`side-section ${t.kind}${wL(t.id,t.kind)?` collapsed`:``}`,r=t.title,a=t.id;return n!==e.e&&k(i,e.e=n),r!==e.t&&b(i,`aria-label`,e.t=r),a!==e.a&&b(i,`data-section`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),i})()})}}),null),y(D,n(aR,{onPick:()=>e.phone&&e.onClose()}),null),y(A,n(O,{get label(){return`Account and settings (${h().title})`},class:`account`,align:`left`,up:!0,get text(){return[(()=>{var e=MR();return y(e,()=>h().initial),s(()=>k(e,`avatar${h().badge?` admin`:``}`)),e})(),(()=>{var e=NR();return y(e,()=>h().title),e})(),n(l,{get when(){return Vl().length},get children(){var e=PR();return y(e,()=>Vl().length),e}}),n(L,{name:`settings`})]},items:()=>[{label:`Settings`,hint:Vl().length?`${Vl().length} to approve`:void 0,run:()=>{e.phone&&e.onClose(),Vt(`/settings`)}},{label:`Set up Hub on a machine`,run:()=>{e.phone&&e.onClose(),HP({returnTo:()=>document.querySelector(`.side-foot .account`)})}}]})),s(()=>S.value=t()),o})()}function KR(e){let t=()=>e.row,r=()=>rx().phase!==`off`&&rx().sessionID===t().id;return(()=>{var i=zR();return y(i,n(l,{get when(){return!Ch(t().id,`sidebar`)},get fallback(){return(()=>{var e=BR();return y(e,n(A,{get state(){return t().state}}),null),y(e,n(Ng,{get id(){return t().id},get title(){return t().title},place:`sidebar`,class:`side-title`,children:null}),null),e})()},get children(){var r=RR(),i=r.firstChild,a=i.firstChild;return B(r,`dragend`,Yp),r.addEventListener(`dragstart`,e=>Jp(e,{target:{sessionID:t().id},label:t().title})),B(r,`click`,e.onPick,!0),y(r,n(A,{get state(){return t().state}}),i),y(r,n(l,{get when(){return Pa(t(),rx())},get children(){return n(ne,{})}}),i),y(a,()=>t().title),y(i,n(l,{get when(){return Ra(t())},children:e=>(()=>{var t=VR();return y(t,e),t})()}),null),y(r,n(Pg,{get id(){return t().id}}),null),y(r,n(l,{get when(){return za(t(),N())},children:e=>(()=>{var t=HR();return y(t,e),s(()=>b(t,`title`,`Waiting for you for ${e()}`)),t})()}),null),y(r,n(l,{get when(){return t().error},children:e=>n(ie,{get text(){return e()}})}),null),y(r,n(l,{get when(){return t().waitingInTerminal},get children(){return FR()}}),null),y(r,n(l,{get when(){return t().jobs},get children(){var e=IR();return y(e,()=>t().jobs),s(n=>{var r=qi(t().jobs),i=qi(t().jobs);return r!==n.e&&b(e,`title`,n.e=r),i!==n.t&&b(e,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),e}}),null),y(r,n(l,{get when(){return t().unread},get children(){return LR()}}),null),s(n=>{var i=Ot(t().id),a=e.active?`page`:void 0,o=`${t().title} · ${t().where} · ${t().machineName}${t().error?` · ${t().error}`:``}`,s=!Z();return i!==n.e&&b(r,`href`,n.e=i),a!==n.t&&b(r,`aria-current`,n.t=a),o!==n.a&&b(r,`title`,n.a=o),s!==n.o&&b(r,`draggable`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),r}}),null),y(i,n(O,{get label(){return`More actions for ${t().title}`},class:`icon-btn small row-more`,items:()=>Th(t(),{open:!1,place:`sidebar`})}),null),s(()=>k(i,`side-row${e.active?` active`:``}${t().unread?` unread`:``}${r()?` voice-here`:``}`)),i})()}z([`click`,`input`,`keydown`]);var qR={cycle:`F6`,close:`Control+Alt+W`,moveEarlier:`Control+Alt+Shift+ArrowLeft`,moveLater:`Control+Alt+Shift+ArrowRight`,focus:e=>`Control+Alt+${e}`},JR=new Set([`ArrowLeft`,`ArrowUp`]),YR=new Set([`ArrowRight`,`ArrowDown`]);function XR(e){if(e.metaKey)return;if(e.key===`F6`&&!e.ctrlKey&&!e.altKey)return{type:`cycle`,step:e.shiftKey?-1:1};if(!e.ctrlKey||!e.altKey)return;if(e.shiftKey)return JR.has(e.key)?{type:`move`,step:-1}:YR.has(e.key)?{type:`move`,step:1}:void 0;if(e.code===`KeyW`)return{type:`close`};let t=/^Digit([1-9])$/.exec(e.code),n=t?Number(t[1]):0;return n>=1&&n<=gn?{type:`focus`,index:n-1}:void 0}var ZR=`hub.paneSizes.v1`,QR={cols:280,rows:160},$R=[`vertical`,`horizontal`,`grid`];function ez(e,t){return t<=1||e===`single`?{cols:1,rows:1}:e===`vertical`?{cols:t,rows:1}:e===`horizontal`?{cols:1,rows:t}:{cols:Math.min(2,t),rows:Math.ceil(t/2)}}function tz(e,t,n){if(t<=1||e===`single`)return{col:0,row:0,colSpan:1};if(e===`vertical`)return{col:n,row:0,colSpan:1};if(e===`horizontal`)return{col:0,row:n,colSpan:1};let r=t%2==1&&n===t-1;return{col:r?0:n%2,row:Math.floor(n/2),colSpan:r?2:1}}function nz(e){return e>0?Array.from({length:e},()=>1/e):[]}function rz(e,t,n,r,i){if(!Number.isInteger(t)||t<0||t>=e.length-1||!(r>0)||!Number.isFinite(n))return e;let a=e[t],o=a+e[t+1],s=Math.min(i/r,o/2),c=Math.min(o-s,Math.max(s,a+n/r));return e.map((e,n)=>n===t?c:n===t+1?o-c:e)}function iz(e,t,n,r,i,a,o){let s=r?64:16,[c,l]=o===`cols`?[`ArrowRight`,`ArrowLeft`]:[`ArrowDown`,`ArrowUp`];if(n===c)return rz(e,t,s,i,a);if(n===l)return rz(e,t,-s,i,a);if(n===`Home`)return rz(e,t,-2*i,i,a);if(n===`End`)return rz(e,t,2*i,i,a)}var az=(e,t,n)=>`${e}:${t}:${n}`;function oz(e){let[t,n,r,...i]=e.split(`:`),a=Number(n);if(i.length||!$R.includes(t)||!Number.isInteger(a)||a<2||a>gn||r!==`cols`&&r!==`rows`)return;let o=ez(t,a)[r];return o>1?o:void 0}function sz(e,t){if(!Array.isArray(e)||e.length!==t||!e.every(e=>typeof e==`number`&&Number.isFinite(e)&&e>0))return;let n=e.reduce((e,t)=>e+t,0);return e.map(e=>e/n)}function cz(e){let t;try{t=JSON.parse(e?.getItem(`hub.paneSizes.v1`)??`null`)}catch{return{}}if(typeof t!=`object`||!t||t.v!==1)return{};let n=t.sizes;if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){let n=oz(e),i=n===void 0?void 0:sz(t,n);i&&(r[e]=i)}return r}function lz(e,t,n,r,i,a){let o=az(n,r,i),s=oz(o),c=s===void 0?void 0:sz(a,s);if(!c)return t;let l={...t,[o]:c};try{e?.setItem(ZR,JSON.stringify({v:1,sizes:l}))}catch{}return l}function uz(e,t,n){let r=ez(t,n),i=i=>{let a=e[az(t,n,i)];return a&&a.length===r[i]?a:nz(r[i])};return{cols:i(`cols`),rows:i(`rows`)}}function dz(e,t,n){let r=n?`/s/${encodeURIComponent(n)}`:`/`,i=r===t?`/`:r,a=e.state;(a?.hubSessionPath!==t||a?.hubSessionBack!==i)&&(e.replaceState({hubSessionPath:`/`},``,`/`),i!==`/`&&e.pushState({hubSessionPath:i,hubSessionBack:`/`},``,i),e.pushState({hubSessionPath:t,hubSessionBack:i},``,t))}var fz=200,pz=10,mz=e=>e instanceof Error?e.message:String(e),hz=e=>e&&typeof e==`object`&&typeof e.status==`number`?e.status:void 0,gz=class{timeline;fetch;options;state=`idle`;error;cursor;invalid=!1;generation=0;loading;oldestMessageID;constructor(e,t,n={}){this.timeline=e,this.fetch=t,this.options=n}get hasOlder(){return this.cursor!==void 0}get cutMessageID(){return this.cursor===void 0?void 0:this.oldestMessageID}get limit(){return this.options.limit??80}changed(){this.options.onChange?.()}async first(){let e=this.begin(),t=await this.fetch({limit:this.limit,order:`desc`});e===this.generation&&await this.show(t,e)}async resync(){let e=this.begin(),t=await this.fetch({limit:this.limit,order:`desc`});if(e!==this.generation)return;let n=t.items??[],r=t.older===void 0||n.some(e=>this.timeline.fromHistory(e?.key));t.cursor===void 0&&r?(this.timeline.load(n),this.state===`loading`&&(this.state=this.cursor===void 0?`done`:`idle`),this.changed()):(this.timeline.forgetHistory(),await this.show(t,e))}older(){if(this.loading)return this.loading;if(this.state!==`idle`||this.cursor===void 0)return Promise.resolve();let e=this.generation,t=this.cursor;this.state=`loading`,this.changed();let n=(async()=>{try{let n=await this.fetch({limit:this.limit,before:t});if(e!==this.generation)return;this.timeline.load(n.items,{older:!0}),this.oldestMessageID=_z(n.items),this.cursor=n.older,this.state=n.older===void 0?`done`:`idle`,this.error=void 0}catch(t){if(e!==this.generation)return;this.state=`error`,this.error=mz(t),this.invalid=hz(t)===400}finally{e===this.generation&&(this.loading=void 0,this.changed())}})();return this.loading=n,n}async retry(){if(this.state===`error`){if(this.invalid){let e=this.begin();this.timeline.forgetHistory();try{let t=await this.fetch({limit:this.limit,order:`desc`});e===this.generation&&await this.show(t,e)}catch(t){if(e!==this.generation)return;this.state=`error`,this.error=mz(t),this.invalid=!0,this.changed()}}else return this.state=`idle`,this.error=void 0,this.older()}}begin(){return this.loading=void 0,++this.generation}async show(e,t){if(this.timeline.load(e.items),this.oldestMessageID=_z(e.items),this.error=void 0,this.invalid=!1,e.cursor!==void 0&&e.older===void 0){let n=e.cursor;for(let e=1;n!==void 0&&e<pz;e++){let e=await this.fetch({limit:fz,cursor:n});if(t!==this.generation)return;this.timeline.load(e.items),n=e.cursor}this.cursor=void 0,this.state=`done`}else this.cursor=e.older,this.state=e.older===void 0?`done`:`idle`;this.changed()}};function _z(e){if(!Array.isArray(e))return;let t=e.find(e=>e&&typeof e==`object`&&(e.depth??0)===0);return typeof t?.messageID==`string`&&t.messageID?t.messageID:void 0}var vz=[`native`,`hooks`,`rpc`,`screen`],yz={opencode:`OpenCode`,"claude-code":`Claude Code`,codex:`Codex`},bz=e=>yz[e]??e;function xz(e){let t=e?.harness||`opencode`,n=e?.features?.includes(`setModel`)===!0;if(t===`opencode`)return{native:!0,harness:t,harnessName:`OpenCode`,evidence:`native`,turn:!0,steer:!0,interrupt:!0,stop:!0,permission:!0,form:!0,models:!0,timeline:!0,summary:!0,voice:!0,sessionModel:n,queued:!1};let r=vz.includes(e?.evidence??``)?e.evidence:`unknown`,i=e?.features?new Set(e.features):void 0,a=e=>!i||i.has(e);return{native:!1,harness:t,harnessName:bz(t),evidence:r,turn:a(`turn`),steer:a(`steer`),interrupt:a(`interrupt`),stop:a(`stop`),permission:a(`permission`),form:a(`form`),models:a(`models`),timeline:a(`timeline`),summary:a(`summary`),voice:a(`conversation`)&&a(`steer`),sessionModel:n,queued:r===`hooks`||r===`screen`||r===`unknown`}}var Sz={native:{label:`Native`,detail:e=>`The hub sees ${e}'s own events: status and turns are confirmed by the harness.`},hooks:{label:`Hooks`,detail:e=>`The hub follows ${e} through its lifecycle hooks: status updates at hook points, and prompts are queued until its next hook.`},rpc:{label:`RPC`,detail:e=>`The hub drives ${e} through its RPC API: prompts and turns are confirmed by the harness.`},screen:{label:`Screen`,detail:e=>`The hub reads ${e}'s terminal screen: status is a guess that never counts as idle, and prompts are pasted in (at most queued).`},unknown:{label:`Unknown`,detail:e=>`The ${e} spoke declared no evidence level: the session never counts as idle and prompts are at most queued.`}};function Cz(e){if(e.native)return;let t=Sz[e.evidence];return{level:e.evidence,label:t.label,detail:t.detail(e.harnessName)}}function wz(e,t){return e.turn&&e.steer?{show:!0,allowed:!0}:!e.turn&&!e.steer?{show:!1,allowed:!1,hint:`This ${e.harnessName} session takes no prompts from the hub; type in its terminal.`}:t&&!e.steer?{show:!0,allowed:!1,hint:`${e.harnessName} can't take input while it runs here; send once the session is idle.`}:!t&&!e.turn?{show:!0,allowed:!1,hint:`${e.harnessName} takes input here only while the session runs.`}:{show:!0,allowed:!0}}function Tz(e,t){return t===`result`?{tick:`heard`}:e.queued?t===`steered`?{tick:`queued`,toast:`Queued: ${e.harnessName} picks it up at its next step`}:{tick:`queued`}:t===`steered`?{tick:`sent`,toast:`Steered the running session`}:{tick:`sent`}}var Ez={queued:`queued`,retained:`held`,pending:`pending`,dropped:`not delivered`};function Dz(e){return typeof e==`string`?Ez[e]:void 0}function Oz(e){let t=e;if(!t||t.status!==409||t.code!==`unsupported`)return;let n=typeof t.message==`string`?t.message.trim().replace(/\.$/,``):``;return n?`Not available for this session: ${n[0].toLowerCase()}${n.slice(1)}. Use its terminal.`:`Not available for this session. Use its terminal.`}var kz=/data:([\w.+-]+\/[\w.+-]+)?((?:;[\w.+-]+=[^;,\s"'<>]*)*);base64,([A-Za-z0-9+/_-]+={0,2})/gi,Az=/^[A-Za-z0-9+/_-]+={0,2}$/,jz=[`mime`,`mimeType`,`media_type`,`mediaType`];function Mz(e){let t=e.endsWith(`==`)?2:+!!e.endsWith(`=`),n=Math.max(0,Math.floor(e.length*3/4)-t);return n<1024?`${n} B`:n<1048576?`${Math.round(n/1024)} KB`:`${(n/1048576).toFixed(1)} MB`}function Nz(e,t){return`[${e||`data`}, ${Mz(t)} — not shown]`}function Pz(e){return e.includes(`base64,`)?e.replace(kz,(e,t,n,r)=>Nz(t?.toLowerCase(),r)):e}function Fz(e){if(typeof e.data!=`string`||!Az.test(e.data))return;let t=jz.map(t=>e[t]).find(e=>typeof e==`string`);if(t?.toLowerCase().startsWith(`image/`))return t.toLowerCase();if(e.type===`image`||e.type===`base64`)return t||`image`}function Iz(e){return Lz(e)}function Lz(e){if(typeof e==`string`)return Pz(e);if(Array.isArray(e))return e.map(Lz);if(!e||typeof e!=`object`)return e;let t=e,n=Fz(t),r={};for(let[e,i]of Object.entries(t))r[e]=e===`data`&&n?Nz(n,i):Lz(i);return r}var Rz=(e,t,n)=>`/api/sessions/${encodeURIComponent(e)}/timeline/messages/${encodeURIComponent(t)}/files/${n}`,zz=(e,t,n)=>`/api/sessions/${encodeURIComponent(e)}/timeline/messages/${encodeURIComponent(t)}/media/${encodeURIComponent(n)}`,Bz=e=>typeof e==`number`&&Number.isInteger(e)&&e>0,Vz=e=>Mn.includes(e),Hz=(e,t)=>typeof e==`string`&&Dn(e)?.kind===t;function Uz(e,t,n,r){let i=zz(e.sessionID,e.messageID,n.ref);return{key:t,name:r,mime:n.mime,src:i,download:`${i}?download=1`,ref:n.ref,...typeof n.bytes==`number`&&Number.isInteger(n.bytes)&&n.bytes>=0?{bytes:n.bytes}:{},...Bz(n.width)&&Bz(n.height)?{width:n.width,height:n.height}:{}}}var Wz=e=>typeof e.sessionID==`string`&&typeof e.messageID==`string`,Gz=(e,t)=>typeof e.name==`string`&&e.name?e.name:t;function Kz(e,t,n){let r=n?`tool`:`path`,i=e.media;if(!Array.isArray(i)||!Wz(e))return[];let a=[];for(let o of i){if(a.length>=Nn.perRow)break;o&&Hz(o.ref,r)&&typeof o.mime==`string`&&Vz(o.mime)&&a.push({...Uz(e,`${e.key}:${o.ref}`,o,Gz(o,t)),...n?{tool:!0}:{}})}return a}function qz(e){let t=[];if(Array.isArray(e.images))e.images.forEach((n,r)=>{n&&typeof n.mime==`string`&&t.push({key:`${e.key}:${r}`,name:String(n.name||`image`),mime:n.mime,...typeof n.preview==`string`?{src:n.preview}:{}})});else if(Array.isArray(e.files))for(let n of e.files){if(!n||typeof n.mime!=`string`||!Number.isInteger(n.index))continue;let r=`${e.key}:${n.index}`,i=Gz(n,n.mime.startsWith(`image/`)?`image`:`file`);if(n.ref!==void 0){Hz(n.ref,`file`)&&Vz(n.mime)&&Wz(e)?t.push(Uz(e,r,n,i)):t.push({key:r,name:i,mime:n.mime});continue}let a=S_(n.mime)&&Wz(e);t.push({key:r,name:i,mime:n.mime,...a?{src:Rz(e.sessionID,e.messageID,n.index)}:{}})}return t}function Jz(e,t={}){let n=[];for(let r of e)if(!((r.depth??0)>0))switch(r.kind){case`user`:{let e=qz(r),t=typeof r.messageID==`string`&&r.key===`${r.messageID}:text`?{messageID:r.messageID}:{},i=typeof r.note==`string`&&r.note?{note:r.note}:{};(r.text||e.length)&&n.push({type:`user`,key:r.key,text:r.text??``,...e.length?{images:e}:{},...t,...i});break}case`assistant`:{if(!r.text)break;let e=Kz(r,`image`,!1);n.push({type:`assistant`,key:r.key,text:r.text,live:r.live===!0,...typeof r.messageID==`string`&&r.messageID?{messageID:r.messageID}:{},...e.length?{media:e}:{}});break}case`reasoning`:{let e=r.state===`running`,t=!e&&typeof r.at==`number`&&typeof r.completed==`number`?Math.max(0,Math.round((r.completed-r.at)/1e3)):void 0;n.push({type:`thought`,key:r.key,text:r.text??``,running:e,...t===void 0?{}:{seconds:t}});break}case`tool`:{let e=n[n.length-1],t=e?.type===`tools`?e:void 0,i=t??{type:`tools`,key:`tools:${r.key}`,items:[],failed:0,running:0};i.items.push(r);let a=Kz(r,`screenshot`,!0);a.length&&(i.media=[...i.media??[],...a]),r.state===`failed`&&i.failed++,r.state===`running`&&i.running++,t||n.push(i);break}case`message`:n.push(Qz(r));break;case`error`:n.push(r.declined===!0?{type:`error`,key:r.key,label:`${t.denied?.(r)??`Denied`}: the turn stopped`,denied:!0}:Xz(r));break;case`retry`:n.push({type:`retry`,key:r.key,...Yz(`attempt`,r.attempt),...Yz(`next`,r.next),...typeof r.errorType==`string`?{errorType:r.errorType}:{},...Yz(`errorStatus`,r.errorStatus),...typeof r.text==`string`&&r.text?{message:r.text}:{}});break;case`subagent`:r.sessionID&&n.push({type:`subagent`,key:r.key,sessionID:r.sessionID,label:r.label??r.sessionID,state:r.state??`working`})}return n}var Yz=(e,t)=>typeof t==`number`&&Number.isFinite(t)?{[e]:t}:{};function Xz(e){let t=typeof e.text==`string`&&e.text.trim()?e.text.trim():void 0,n=ki(e.errorType),r=ji(e.errorStatus);return{type:`error`,key:e.key,label:n??t??`Error`,...n&&t?{message:t}:{},...r?{status:r}:{}}}function Zz(e,t){return{text:Li(e,t),waiting:Mi(e.next,t)!==void 0}}function Qz(e){let t=e.message&&typeof e.message==`object`?e.message:{},n=typeof t.kind==`string`?t.kind:`msg`,r=e.direction===`out`?`out`:`in`,i=String(t.to??``),a=typeof e.recipient==`string`?e.recipient:void 0,o=Dz(e.delivery),s=n===`primer`?`Hub identity note`:r===`out`?`to ${i}${a&&a!==i?` (→ ${a})`:``}`:`from ${String(t.from??`?`)}`,c=typeof t.from==`string`?t.from:void 0;return{type:`message`,key:e.key,direction:r,kind:n,label:s,text:e.text??``,primer:n===`primer`,...typeof e.state==`string`?{state:e.state}:{},...o?{delivery:o}:{},...c?{from:c}:{}}}var $z=`The provider returned this thought redacted: an encrypted signature, no readable text.`;function eB(e){let t=e.running?`Thinking…`:e.seconds===void 0?`Thought`:`Thought for ${e.seconds}s`;return e.text?{label:t,body:e.text,muted:!1}:{label:t,body:e.running?`Waiting for the model's reasoning…`:$z,muted:!0}}function tB(e,t){if(typeof t.at!=`number`)return{};let n=t.at,r;for(let t of e)t.kind===`user`&&(t.depth??0)===0&&typeof t.at==`number`&&t.at>n&&(r===void 0||t.at<r)&&(r=t.at);return r===void 0?{since:n}:{since:n,until:r}}function nB(e,t){return JSON.stringify(Iz(e??{summary:t.summary||void 0,error:t.error}),null,2)}var rB=I(`<p class=composer-error role=alert>`),iB=I(`<p class="composer-hint muted small">`),aB=I(`<li class="attachment busy"aria-label="Preparing image"><span class="spinner small">`),oB=I(`<ul class=attachments aria-label="Attached images">`),sB=I(`<div><button type=button class=split-main>`),cB=I(`<button type=button class="btn stop"aria-label="Stop the session and its subagents"> Stop`),lB=I(`<span class=sr-only>`),uB=I(`<button type=button class=model-chip title="Voice model (the voice front you talk to in Voice mode)">Voice: `),dB=I(`<form><div class=composer-box><textarea rows=1 aria-label=Message></textarea><input type=file class=sr-only tabindex=-1 aria-hidden=true data-testid=attach-input multiple><div class=composer-actions><button type=button class=icon-btn aria-label="Attach images"></button><span class=grow></span><button type=button></button><button type=submit></button></div></div><div class=composer-meta><span class="muted small"></span><span class=grow>`),fB=I(`<li class=attachment><img><button type=button class=attachment-remove title=Remove>`),pB=I(`<span class="spinner small">`),mB=I(`<button type=button class="session-model pickable"aria-haspopup=dialog><span class=chip-key>Model: `),hB=I(`<span class=session-model><span class=chip-key>Model: `),gB=I(`<button type=button class=split-chev aria-label="Choose microphone"aria-haspopup=dialog>`),_B=I(`<p class="error small pad">`),vB=I(`<div class="menu mic-picker"role=dialog aria-label=Microphone><div class=menu-section>Microphone</div><div class=level aria-label="Input level"role=meter aria-valuemin=0 aria-valuemax=100><span>`),yB=I(`<button type=button class=menu-item role=menuitemradio><span class=menu-check></span><span class=menu-label>`),bB=I(`<span class=muted> · “<!>…”`),xB=I(`<span class=voice-ignored title="Heard as background noise, not sent"> · ignored: “<!>”`),SB=I(`<span class="voice-turn muted"title="Smart Turn (experimental): how sure the model is that you finished your turn"> · `),CB=I(`<span class="chip voice-front"title="Voice front: a fast voice agent answers and relays to the session">front`),wB=I(`<p class="voice-hint voice-front-fallback small"role=status>`),TB=I(`<p class="voice-hint small">Allow notifications to keep a “Voice mode on” notification with an End button while the screen is off. <button type=button class=link>Allow notifications`),EB=I(`<div role=region aria-label="Voice mode"><div class=wave aria-hidden=true></div><span class=voice-state role=status aria-live=polite></span><span class=grow></span><button type=button class=model-chip title="Voice model"></button><button type=button></button><button type=button class="btn small end">End`),DB=I(`<span>`);function OB(e){let r,i,[a,o]=u(!1),c=()=>e.images.length>=__.maxImages,d=()=>{r.style.height=`auto`,r.style.height=`${Math.min(r.scrollHeight,280)}px`};x(()=>{e.draft,queueMicrotask(d)});let f=()=>e.view.primary===`steer`?`Steer`:`Send`;return(()=>{var u=dB(),d=u.firstChild,p=d.firstChild,h=p.nextSibling,g=h.nextSibling,_=g.firstChild,v=_.nextSibling.nextSibling,x=v.nextSibling,S=d.nextSibling,C=S.firstChild;C.nextSibling,u.addEventListener(`drop`,t=>{let n=gS(t.dataTransfer);o(!1),n.length&&(t.preventDefault(),e.onAttach(n))}),u.addEventListener(`dragleave`,e=>{e.currentTarget.contains(e.relatedTarget)||o(!1)}),u.addEventListener(`dragover`,e=>{[...e.dataTransfer?.types??[]].includes(`Files`)&&(e.preventDefault(),o(!0))}),u.addEventListener(`submit`,t=>{t.preventDefault(),e.view.canSubmit&&!e.attaching&&e.onSubmit()}),y(u,n(l,{get when(){return e.error},get children(){var t=rB();return y(t,()=>e.error),t}}),d),y(u,n(l,{get when(){return e.view.hint},get children(){var t=iB();return y(t,()=>e.view.hint),t}}),d),y(d,n(l,{get when(){return e.images.length||e.attaching},get children(){var t=oB();return y(t,n(m,{get each(){return e.images},children:t=>(()=>{var r=fB(),i=r.firstChild,a=i.nextSibling;return a.$$click=()=>e.onDetach(t.id),y(a,n(L,{name:`close`})),s(e=>{var n=t.preview,r=t.name,o=t.name,s=`Remove ${t.name}`;return n!==e.e&&b(i,`src`,e.e=n),r!==e.t&&b(i,`alt`,e.t=r),o!==e.a&&b(i,`title`,e.a=o),s!==e.o&&b(a,`aria-label`,e.o=s),e},{e:void 0,t:void 0,a:void 0,o:void 0}),r})()}),null),y(t,n(l,{get when(){return e.attaching},get children(){return aB()}}),null),t}}),p),p.$$keydown=t=>{t.key===`Enter`&&!t.shiftKey&&!t.isComposing&&!(matchMedia(`(max-width: 760px)`).matches&&`ontouchstart`in window)&&(t.preventDefault(),e.view.canSubmit&&!e.attaching&&e.onSubmit())},p.addEventListener(`paste`,t=>{let n=gS(t.clipboardData);n.length&&(t.preventDefault(),e.onAttach(n))}),p.$$input=t=>e.onInput(t.currentTarget.value);var w=r;typeof w==`function`?t(w,p):r=p,h.addEventListener(`change`,t=>{let n=[...t.currentTarget.files??[]];t.currentTarget.value=``,n.length&&e.onAttach(n)});var T=i;return typeof T==`function`?t(T,h):i=h,_.$$click=()=>i.click(),y(_,n(L,{name:`plus`})),B(v,`click`,e.onDictate,!0),y(v,n(l,{get when(){return!e.transcribing},get fallback(){return pB()},get children(){return n(L,{get name(){return e.dictating===!1?`mic`:`stop`}})}})),y(g,n(l,{get when(){return e.showVoice!==!1},get children(){var t=sB(),r=t.firstChild;return B(r,`click`,e.onVoice,!0),y(r,n(L,{name:`wave`})),y(t,n(kB,{}),null),s(n=>{var i=`split${e.voiceOn?` on`:``}`,a=e.voiceOn,o=e.voiceOn?`End Voice mode`:`Start Voice mode`,s=e.voiceBlocked??(e.voiceOn?`End Voice mode`:`Voice mode: talk hands-free`),c=!!e.voiceBlocked&&!e.voiceOn;return i!==n.e&&k(t,n.e=i),a!==n.t&&b(r,`aria-pressed`,n.t=a),o!==n.a&&b(r,`aria-label`,n.a=o),s!==n.o&&b(r,`title`,n.o=s),c!==n.i&&(r.disabled=n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t}}),x),y(g,n(l,{get when(){return e.view.showStop},get children(){var t=cB(),r=t.firstChild;return B(t,`click`,e.onStop,!0),y(t,n(L,{name:`stop`}),r),s(()=>t.disabled=!e.view.canStop),t}}),x),y(x,n(l,{get when(){return e.view.primary===`send`},get fallback(){return f()},get children(){return[n(L,{name:`send`}),(()=>{var e=lB();return y(e,f),e})()]}})),y(C,()=>e.metaLeft),y(S,n(l,{get when(){return e.sessionModel},children:t=>n(l,{get when(){return e.sessionModelPickable},get fallback(){return(()=>{var e=hB();return e.firstChild,y(e,()=>t().label.replace(/^Model: /,``),null),s(n=>{var r=t().title,i=t().title;return r!==n.e&&b(e,`title`,n.e=r),i!==n.t&&b(e,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),e})()},get children(){var n=mB();return n.firstChild,n.$$click=()=>e.onModel(`session`),y(n,()=>t().label.replace(/^Model: /,``),null),s(e=>{var r=t().title,i=t().title;return r!==e.e&&b(n,`title`,e.e=r),i!==e.t&&b(n,`aria-label`,e.t=i),e},{e:void 0,t:void 0}),n}})}),null),y(S,n(l,{get when(){return e.showModels!==!1},get children(){var t=uB();return t.firstChild,t.$$click=()=>e.onModel(`voice`),y(t,()=>e.voiceModel,null),t}}),null),s(t=>{var n=`composer${a()?` dragging`:``}`,r=e.voiceOn?`Voice mode is on — talk, or type here`:e.view.primary===`steer`?`Steer the running session…`:`Reply…`,i=g_.join(`,`),o=c()?`At most ${__.maxImages} images per message`:`Attach images (or paste / drop them here)`,s=c()||e.attaching,l=`icon-btn${e.dictating===!1?``:` recording`}`,d=e.dictating===!1?`Dictate`:`Stop dictation`,f=e.voiceBlocked??(e.dictating===!1?`Dictate`:`Stop dictation (${e.dictating}s left)`),m=!!e.voiceBlocked||e.transcribing||e.voiceOn,g=`btn primary send ${e.view.primary}`,y=!e.view.canSubmit||e.attaching;return n!==t.e&&k(u,t.e=n),r!==t.t&&b(p,`placeholder`,t.t=r),i!==t.a&&b(h,`accept`,t.a=i),o!==t.o&&b(_,`title`,t.o=o),s!==t.i&&(_.disabled=t.i=s),l!==t.n&&k(v,t.n=l),d!==t.s&&b(v,`aria-label`,t.s=d),f!==t.h&&b(v,`title`,t.h=f),m!==t.r&&(v.disabled=t.r=m),g!==t.d&&k(x,t.d=g),y!==t.l&&(x.disabled=t.l=y),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),s(()=>p.value=e.draft),u})()}function kB(){let[e,r]=u(!1),[i,o]=u([]),[c,d]=u(0),[f,p]=u(``),h,g,_,[v,x]=u({right:0,bottom:0}),S=async()=>{_?.(),_=void 0;try{_=await Ay(Fy(),d),p(``)}catch(e){p(e.name===`NotAllowedError`?`Microphone permission was denied.`:`Microphone: ${e.message}`)}},C=async()=>{let e=h.getBoundingClientRect();if(x({right:window.innerWidth-e.right,bottom:window.innerHeight-e.top+6}),r(!0),!navigator.mediaDevices)return p(`This browser cannot use the microphone here (it needs HTTPS).`);o(await ky().catch(()=>[])),S()},w=()=>{r(!1),_?.(),_=void 0,d(0)},T=t=>e()&&!h.contains(t.target)&&!g?.contains(t.target)&&w(),E=t=>e()&&t.key===`Escape`&&!ee(g)&&w();return document.addEventListener(`mousedown`,T),document.addEventListener(`keydown`,E),M(()=>{document.removeEventListener(`mousedown`,T),document.removeEventListener(`keydown`,E),w()}),[(()=>{var r=gB();r.$$click=()=>e()?w():void C();var i=h;return typeof i==`function`?t(i,r):h=r,y(r,n(L,{name:`down`})),s(()=>b(r,`aria-expanded`,e())),r})(),n(l,{get when(){return e()},get children(){return n(pe,{get children(){var e=vB(),r=e.firstChild.nextSibling,o=r.firstChild,u=g;return typeof u==`function`?t(u,e):g=e,y(e,n(m,{get each(){return[{deviceId:``,label:`System default`},...i().filter(e=>e.deviceId&&e.deviceId!=="default")]},children:(e,t)=>(()=>{var n=yB(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{Ly(e.deviceId),S()},y(r,()=>Fy()===e.deviceId?`✓`:``),y(i,()=>e.label||`Microphone ${t()}`),s(()=>b(n,`aria-checked`,Fy()===e.deviceId)),n})()}),r),y(e,n(l,{get when(){return f()},get children(){var e=_B();return y(e,f),e}}),null),s(t=>{var n=`${v().right}px`,i=`${v().bottom}px`,s=Math.round(c()*100),l=`${Math.round(c()*100)}%`;return n!==t.e&&a(e,`right`,t.e=n),i!==t.t&&a(e,`bottom`,t.t=i),s!==t.a&&b(r,`aria-valuenow`,t.a=s),l!==t.o&&a(o,`width`,t.o=l),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}})}})]}var AB={starting:`Starting…`,listening:`Listening`,hearing:`Listening`,transcribing:`Thinking`,sent:`Thinking`,speaking:`Speaking`,paused:`Muted`,suspended:`Paused — mic stopped by the phone (screen off). Unlock to resume.`,off:`Off`};function jB(e,t){let n=e?[e.summary,e.detail]:[];return t&&n.push(t.mode===`silero`?`speech detection: on-device model${t.avgMs?` (${t.avgMs.toFixed(1)} ms per 32 ms of audio)`:``}`:`speech detection: loudness (the on-device model is loading or unavailable)`),n.length?n.join(`
|
|
28
|
+
`):void 0}function MB(e){let t=()=>e.state===`listening`&&e.working?`Thinking`:AB[e.state],r=[.5,.8,1,.7,.45];return(()=>{var i=EB(),o=i.firstChild,c=o.nextSibling,u=c.nextSibling,d=u.nextSibling,f=d.nextSibling,p=f.nextSibling;return y(o,n(m,{each:r,children:t=>(()=>{var n=DB();return s(r=>a(n,`transform`,`scaleY(${Math.max(.15,Math.min(1,(e.state===`speaking`?.6:e.level)*t*1.6))})`)),n})()})),y(c,t,null),y(c,n(l,{get when(){return e.held},get children(){var t=bB(),n=t.firstChild.nextSibling;return n.nextSibling,y(t,()=>e.held,n),t}}),null),y(c,n(l,{get when(){return e.ignored},get children(){var t=xB(),n=t.firstChild.nextSibling;return n.nextSibling,y(t,()=>e.ignored,n),t}}),null),y(c,n(l,{get when(){return e.turn},get children(){var t=SB();return t.firstChild,y(t,()=>e.turn,null),t}}),null),y(i,n(l,{get when(){return e.front?.on},get children(){return CB()}}),u),y(i,n(rL,{announce:!0}),u),B(d,`click`,e.onModel,!0),y(d,()=>e.model),B(f,`click`,e.onMute,!0),y(f,n(L,{get name(){return e.state===`paused`?`muted`:`mic`}})),B(p,`click`,e.onEnd,!0),y(i,n(l,{get when(){return e.front?.fallback},get children(){var e=wB();return y(e,Eb),e}}),null),y(i,n(l,{get when(){return e.notifyHint},get children(){var t=TB(),n=t.firstChild.nextSibling;return n.$$click=()=>e.onAllowNotifications?.(),t}}),null),s(t=>{var n=`voice-bar ${e.state}`,r=e.detector?.mode,a=jB(e.timing,e.detector),o=`icon-btn${e.state===`paused`?` on`:``}`,s=e.state===`paused`,l=e.state===`paused`?`Unmute`:`Mute`,u=e.state===`paused`?`Unmute`:`Mute`;return n!==t.e&&k(i,t.e=n),r!==t.t&&b(i,`data-vad`,t.t=r),a!==t.a&&b(c,`title`,t.a=a),o!==t.o&&k(f,t.o=o),s!==t.i&&b(f,`aria-pressed`,t.i=s),l!==t.n&&b(f,`aria-label`,t.n=l),u!==t.s&&b(f,`title`,t.s=u),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),i})()}z([`input`,`keydown`,`click`]);var NB=e=>e===`voice`?`Voice model`:`Session model`,PB=()=>({query:``,active:0}),FB=e=>[void 0,...(e.variants??[]).filter(e=>e!=="default")];function IB(e,t,n=100){if(t.chosen)return{mode:`variants`,model:t.chosen,rows:FB(t.chosen)};let r=e.groups(t.query).flatMap(e=>e.items.map(t=>({...t,group:e.providerID})));return{mode:`models`,rows:r.slice(0,n),total:r.length,more:Math.max(0,r.length-n)}}var LB=(e,t)=>({...e,query:t,active:0}),RB=(e,t)=>({providerID:e.providerID,modelID:e.modelID,...t?{variant:t}:{}});function zB(e,t,n){let r=IB(e,t);if(r.mode===`variants`)return n<0||n>=r.rows.length?{state:t}:{state:t,pick:RB(r.model,r.rows[n])};let i=r.rows[n];return i?FB(i).length>1?{state:{...t,chosen:i,active:0}}:{state:t,pick:RB(i)}:{state:t}}function BB(e,t,n,{inSearch:r}){let i=IB(e,t).rows.length;if(n===`ArrowDown`||n===`ArrowUp`)return{state:{...t,active:Math.max(0,XS(t.active,n===`ArrowDown`?1:-1,i))},handled:!0};if(n===`Enter`)return{...zB(e,t,t.active),handled:!0};if(n===`Backspace`&&t.chosen&&!r)return{state:{...t,chosen:void 0,active:0},handled:!0};if(/^[1-9]$/.test(n)&&!r){let r=Number(n)-1;return r>=i?{state:t,handled:!1}:{...zB(e,t,r),handled:!0}}return{state:t,handled:!1}}var VB=(e,t)=>({[e]:t}),HB={chosen:`chosen for this session`,reply:`the default model (its latest reply ran on it)`,default:`the default model (no reply yet)`},UB=e=>typeof e==`string`&&e.length>0;function WB(e){let t=e;return typeof t==`object`&&!!t&&UB(t.providerID)&&UB(t.modelID)}var GB=`. Click to change the session's model`;function KB(e,t={}){let n=t.pickable?GB:``;if(!WB(e))return{label:`Model: default`,title:`Model: default (not known yet: it shows once the session has run)${n}`};let r=UB(e.variant)?` · ${e.variant}`:``,i=UB(e.name)?e.name:void 0,a=UB(e.source)?HB[e.source]:void 0;return{label:`Model: ${i??e.modelID}${r}`,title:`Model: ${e.providerID}/${e.modelID}${r}${i?` (${i})`:``}${a?`, ${a}`:``}${n}`}}function qB(e){if(WB(e)&&e.source===`chosen`)return{providerID:e.providerID,modelID:e.modelID,...UB(e.variant)?{variant:e.variant}:{}}}var JB=e=>({model:e}),YB=I(`<div>`),XB=I(`<p class="error small"role=alert>Couldn't load models: `),ZB=I(`<p class="muted small">Loading models…`),QB=I(`<input type=search class=picker-search placeholder="Search models"aria-label="Search models"autofocus>`),$B=I(`<p class="muted small"role=status>`),eV=I(`<ul class=picker-list role=listbox aria-label=Models>`),tV=I(`<li class="muted small">No models match.`),nV=I(`<div class="picker-group muted small">`),rV=I(`<span class="po-id muted">variants ›`),iV=I(`<span class=po-mark>✓`),aV=I(`<kbd>`),oV=I(`<li><button type=button role=option><span class=po-name></span><span class="po-id muted">`),sV=I(`<div class=stack><div class=row><button type=button class="btn small"aria-label="Back to models">‹ Back</button><p class="muted small">Variant of </p></div><ul class=picker-list role=listbox aria-label=Variants>`),cV=I(`<li><button type=button role=option><span class=po-name></span><kbd>`);function lV(e,t){let n=e?.prefs[t]??e?.defaults[t];return n?`${n.modelID}${n.variant?` · ${n.variant}`:``}`:`default`}function uV(e){let[t,n]=u(),[r,i]=u(``),[a,o]=u();return{prefs:t,error:r,load:async()=>{try{n(await G(`${H(e())}/model-prefs`)),i(``)}catch(e){i(U(e))}},loadCatalog:async()=>{if(a())return a();let{models:t}=await G(`${H(e())}/models`),n=new Me(t);return o(n),n},save:async(t,r)=>{try{n(await(await V(`${H(e())}/model-prefs`,{method:`PUT`,json:VB(t,r)})).json()),q(`Voice model applies the next time Voice mode starts.`)}catch(e){q(`Couldn't set the Voice model: ${U(e)}`,`err`)}},saveSession:async t=>{try{let{model:n}=await(await V(`${H(e())}/model`,{method:`PUT`,json:JB(t)})).json();return q(`The session's next turn runs on ${n.name||n.modelID}${n.variant?` · ${n.variant}`:``}.`),n}catch(e){q(`Couldn't set the session's model: ${U(e)}`,`err`);return}}}}function dV(t){let[i,a]=u(PB()),[o,c]=u(),[d,f]=u(``),p=()=>t.kind!==void 0,h=()=>t.kind===`session`?t.sessionCurrent:t.kind?t.models.prefs()?.prefs[t.kind]??t.models.prefs()?.defaults[t.kind]:void 0,g=e=>h()?.providerID===e.providerID&&h()?.modelID===e.modelID,_=()=>{a(PB()),f(``),t.models.loadCatalog().then(c,e=>f(U(e)))},v=C(()=>o()?IB(o(),i()):void 0),S=e=>{if(a(e.state),!e.pick||!t.kind)return;let n=t.kind,r=e.pick;if(t.onClose(),n===`voice`)return void t.models.save(n,r);t.models.saveSession(r).then(e=>e&&t.onSessionModel?.(e))},w=e=>o()&&S(zB(o(),i(),e)),T=e=>{if(!o()||e.altKey||e.ctrlKey||e.metaKey)return;let t=BB(o(),i(),e.key,{inSearch:e.target instanceof HTMLInputElement});if(!t.handled)return;e.preventDefault(),S(t);let n=e.currentTarget;queueMicrotask(()=>n.querySelector(`.picker-opt.active`)?.scrollIntoView({block:`nearest`}))};return x(e(p,e=>e&&_())),n(de,{get open(){return p()},get title(){return NB(t.kind??`voice`)},get onClose(){return t.onClose},class:`picker`,get children(){var e=YB();return e.$$keydown=T,y(e,n(l,{get when(){return!d()},get fallback(){return(()=>{var e=XB();return e.firstChild,y(e,d,null),e})()},get children(){return n(l,{get when(){return v()},get fallback(){return ZB()},children:e=>n(l,{get when(){return r(()=>e().mode===`models`)()&&e()},get fallback(){return n(fV,{get view(){return e()},get active(){return i().active},get current(){return h()},onPick:w,onBack:()=>a(e=>({...e,chosen:void 0,active:0}))})},children:e=>[(()=>{var e=QB();return e.$$input=e=>a(t=>LB(t,e.currentTarget.value)),s(()=>e.value=i().query),e})(),(()=>{var t=$B();return y(t,(()=>{var t=r(()=>e().total===1);return()=>t()?`1 model`:`${e().total} models`})(),null),y(t,(()=>{var t=r(()=>!!e().more);return()=>t()?` · showing ${e().rows.length}, search to narrow`:``})(),null),t})(),(()=>{var t=eV();return y(t,n(m,{get each(){return e().rows},get fallback(){return tV()},children:(t,r)=>(()=>{var a=oV(),o=a.firstChild,c=o.firstChild,u=c.nextSibling;return y(a,n(l,{get when(){return r()===0||e().rows[r()-1].group!==t.group},get children(){var e=nV();return y(e,()=>t.group),e}}),o),o.$$click=()=>w(r()),y(c,()=>t.name||t.modelID),y(u,()=>t.modelID),y(o,n(l,{get when(){return(t.variants??[]).some(e=>e!=="default")},get children(){return rV()}}),null),y(o,n(l,{get when(){return g(t)},get children(){return iV()}}),null),y(o,n(l,{get when(){return r()<9},get children(){var e=aV();return y(e,()=>r()+1),e}}),null),s(e=>{var n=`picker-opt${i().active===r()?` active`:``}`,a=g(t);return n!==e.e&&k(o,e.e=n),a!==e.t&&b(o,`aria-selected`,e.t=a),e},{e:void 0,t:void 0}),a})()})),t})()]})})}})),e}})}function fV(e){let i;fe(()=>i?.focus());let a=()=>e.current?.providerID===e.view.model.providerID&&e.current?.modelID===e.view.model.modelID;return(()=>{var o=sV(),c=o.firstChild,u=c.firstChild,d=u.nextSibling;d.firstChild;var f=c.nextSibling;return B(u,`click`,e.onBack,!0),y(d,()=>e.view.model.name||e.view.model.modelID,null),y(f,n(m,{get each(){return e.view.rows},children:(o,c)=>(()=>{var u=cV(),d=u.firstChild,f=d.firstChild,p=f.nextSibling;return d.$$click=()=>e.onPick(c()),t(e=>c()===0&&(i=e),d),y(f,o??`Default`),y(d,n(l,{get when(){return r(()=>!!a())()&&e.current?.variant===o},get children(){return iV()}}),p),y(p,()=>c()+1),s(t=>{var n=`picker-opt${e.active===c()?` active`:``}`,r=a()&&e.current?.variant===o;return n!==t.e&&k(d,t.e=n),r!==t.t&&b(d,`aria-selected`,t.t=r),t},{e:void 0,t:void 0}),u})()})),o})()}z([`keydown`,`input`,`click`]);var pV=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;function mV(e){let t=[],n=0,r=0,i=!1;for(let a of String(e??``).replace(/\r\n?/g,`
|
|
29
29
|
`).split(`
|
|
30
|
-
`)){let e=cV.exec(a);if(e)n=Number(e[1]),r=Number(e[2]),i=!0,t.push({type:`hunk`,text:a});else if(!i||a.startsWith(`\\`))a&&t.push({type:`meta`,text:a});else if(a.startsWith(`+`))t.push({type:`add`,text:a.slice(1),newNo:r++});else if(a.startsWith(`-`))t.push({type:`del`,text:a.slice(1),oldNo:n++});else if(a.startsWith(` `)||a===``){if(a===``&&t.length&&t[t.length-1].type!==`context`)continue;t.push({type:`context`,text:a.slice(1),oldNo:n++,newNo:r++})}else i=!1,t.push({type:`meta`,text:a})}return t}var uV=new Set([`user`,`launch`,`self`,`prompt`,`title`]),dV=e=>`/api/agent/sessions/${encodeURIComponent(e)}/intent`,fV=e=>e.replace(/\s+/g,` `).trim();function pV(e){let t=Array.from(fV(e)).length;if(t===0)return`Say what this session is for, or clear it.`;if(t>280)return`At most 280 characters (${t} now).`}var mV=(e,t)=>({text:e===null?null:fV(e),expectedRevision:t});function hV(e){if(e?.source===`user`)return{text:null,expectedRevision:e.revision};if(e?.source===`prompt`)return{source:`prompt`,text:null,expectedRevision:e.revision}}function gV(e){switch(e.source){case`user`:return e.by?.startsWith(`app:`)?`Set by an app`:`Set by you`;case`launch`:return`From the launch`;case`self`:return`Set by the session`;case`prompt`:return`From the first prompt`;default:return`From the title`}}function _V(e){let t=e&&typeof e==`object`?e.intent:void 0;if(!t||typeof t!=`object`)return null;let n=t;return typeof n.sessionID!=`string`||typeof n.text!=`string`||typeof n.source!=`string`||!uV.has(n.source)||typeof n.revision!=`number`||typeof n.updatedAt!=`number`||n.by!==void 0&&typeof n.by!=`string`?null:{sessionID:n.sessionID,text:n.text,source:n.source,revision:n.revision,updatedAt:n.updatedAt,...typeof n.by==`string`?{by:n.by}:{}}}function vV(e,t={}){return e.status===409||e.code===`conflict`?t.loaded===!1?{text:`The current intent could not be loaded, so nothing was saved: Retry, then edit again.`,reload:!0}:{text:`It changed meanwhile: here is the latest. Edit again to change it.`,reload:!0}:{text:e.message,reload:!1}}function yV(e,t,n){return e.type===`intent`&&e.sessionID===t&&e.revision!==n}var bV=I(`<div class=field><label class=field-label>What is this session for?</label><input type=text><div class=row><button type=button class="btn small primary">Save</button><button type=button class="btn small">Cancel`),xV=I(`<div class=intent-field>`),SV=I(`<button type=button class="btn small">Retry`),CV=I(`<button type=button class="btn small">Clear`),wV=I(`<div class=row><button type=button class="btn small">Edit`),TV=I(`<p class="muted small intent-error">Could not load the intent.`),EV=I(`<p class="muted small">Loading…`),DV=I(`<p class="muted small">No intent yet.`),OV=I(`<p class="small intent-text">`),kV=I(`<p class="muted small">`),AV=I(`<p class=field-error>`);function jV(e){let[i,{refetch:a,mutate:o}]=d(()=>e.sessionID,async e=>_V(await G(dV(e)))),[c,f]=u(!1),[p,m]=u(``),[h,g]=u(!1),[_,v]=u(``),x=()=>pV(p()),S=()=>i.error?void 0:i.loading?i.latest:i();M(hu(t=>{!c()&&yV(t,e.sessionID,S()?.revision)&&a()}));let C=()=>{m(S()?.source===`title`?``:S()?.text??``),v(``),f(!0)},w=async t=>{if(h()||t!==null&&x())return;let n=t===null?hV(S()):mV(t,S()?.revision??0);if(n){g(!0),v(``);try{let t=_V(await(await V(dV(e.sessionID),{method:`PUT`,json:n})).json());i.error?a():o(t),f(!1)}catch(e){let t=vV(e instanceof W?{status:e.status,...e.code?{code:e.code}:{},message:e.message}:{message:U(e)},{loaded:!i.error});v(t.text),t.reload&&(f(!1),a())}finally{g(!1)}}};return(()=>{var o=xV();return y(o,n(l,{get when(){return c()},get fallback(){return[n(l,{get when(){return!i.error},get fallback(){return TV()},get children(){return n(l,{get when(){return!i.loading||S()},get fallback(){return EV()},get children(){return n(l,{get when(){return S()},get fallback(){return DV()},children:e=>[(()=>{var t=OV();return y(t,()=>e().text),t})(),(()=>{var t=kV();return y(t,()=>gV(e())),t})()]})}})}}),(()=>{var e=wV(),t=e.firstChild;return t.$$click=C,y(e,n(l,{get when(){return i.error},get children(){var e=SV();return e.$$click=()=>void a(),e}}),null),y(e,n(l,{get when(){return hV(S())},get children(){var e=CV();return e.$$click=()=>void w(null),s(t=>{var n=h(),r=S()?.source===`prompt`?`Not what this session is for: clear it (the title shows instead)`:`Clear your intent`;return n!==t.e&&(e.disabled=t.e=n),r!==t.t&&b(e,`title`,t.t=r),t},{e:void 0,t:void 0}),e}}),null),s(()=>t.disabled=i.loading&&!i.error),e})()]},get children(){var i=bV(),a=i.firstChild,o=a.nextSibling,c=o.nextSibling,u=c.firstChild,d=u.nextSibling;return t(e=>queueMicrotask(()=>e.focus()),o),o.$$keydown=e=>{e.key===`Enter`&&w(p()),e.key===`Escape`&&f(!1)},o.$$input=e=>m(e.currentTarget.value),b(o,`maxlength`,560),y(i,n(l,{get when(){return r(()=>!!p())()&&x()},children:e=>(()=>{var t=AV();return y(t,e),t})()}),c),u.$$click=()=>void w(p()),d.$$click=()=>f(!1),s(t=>{var n=`intent-${e.sessionID}`,r=`intent-${e.sessionID}`,i=h()||!!x(),s=h();return n!==t.e&&b(a,`for`,t.e=n),r!==t.t&&b(o,`id`,t.t=r),i!==t.a&&(u.disabled=t.a=i),s!==t.o&&(d.disabled=t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),s(()=>o.value=p()),i}}),null),y(o,n(l,{get when(){return _()},children:e=>(()=>{var t=AV();return y(t,e),t})()}),null),o})()}z([`input`,`keydown`,`click`]);var MV=e=>`/api/agent/subscriptions?session=${encodeURIComponent(e)}`,NV=e=>`/api/agent/subscriptions/${encodeURIComponent(e)}`,PV=e=>typeof e==`string`,FV=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function IV(e){let t=e;if(t&&typeof t==`object`){if(t.kind===`children`)return{kind:`children`};if(t.kind===`session`&&PV(t.sessionID)&&PV(t.addr))return{kind:`session`,sessionID:t.sessionID,addr:t.addr};if((t.kind===`role`||t.kind===`team`)&&PV(t.addr))return{kind:t.kind,addr:t.addr}}}function LV(e){let t=e?.subscriptions;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=e;if(!t||typeof t!=`object`||!PV(t.id)||!PV(t.subscriber)||!Array.isArray(t.targets)||!Array.isArray(t.types))continue;let r=t.stats??{};n.push({id:t.id,subscriber:t.subscriber,targets:t.targets.map(IV).filter(e=>e!==void 0),types:t.types.filter(PV),delivery:PV(t.delivery)?t.delivery:`queue`,batchMs:FV(t.batchMs),expiresAt:FV(t.expiresAt),pending:FV(t.pending),stats:{delivered:FV(r.delivered),dropped:FV(r.dropped),suppressed:FV(r.suppressed)}})}return n}function RV(e,t){return{listensTo:e.filter(e=>e.subscriber===t),listenedBy:e.filter(e=>e.subscriber!==t)}}function zV(e){if(e<=0)return`ending`;let t=Math.round(e/6e4);if(t<60)return`${Math.max(t,1)} min`;let n=Math.round(e/36e5);return n<48?`${n} h`:`${Math.round(e/864e5)} d`}function BV(e,t){let n=e.targets.map(e=>e.kind===`children`?`its subagents`:e.addr).join(`, `)||`—`,r=[e.types.join(`, `),e.delivery,`every ${Math.round(e.batchMs/1e3)} s`,`${e.stats.delivered} sent`];return e.pending&&r.push(`${e.pending} pending`),e.stats.dropped&&r.push(`${e.stats.dropped} dropped`),e.stats.suppressed&&r.push(`${e.stats.suppressed} loop-suppressed`),r.push(`ends in ${zV(e.expiresAt-t)}`),{title:n,detail:r.join(` · `)}}var VV=I(`<ul class=subscription-list>`),HV=I(`<li class=subscription><div class=subscription-text><span class=small></span><span class="muted small"></span></div><button type=button class="btn small">Remove`),UV=I(`<p class="small subscription-head">Listens to`),WV=I(`<p class="small subscription-head">Listened to by`),GV=I(`<div class=subscriptions-field><div class=row><button type=button class="btn small">Refresh`),KV=I(`<p class="muted small">Could not load the subscriptions.`),qV=I(`<p class="muted small">Loading…`),JV=I(`<p class="muted small">None. An agent follows other sessions with hub subscribe.`);function YV(e){let[t,{refetch:r}]=d(()=>e.sessionID,async e=>LV(await G(MV(e)))),[i,a]=u(``),o=()=>RV(t.error?[]:t.latest??[],e.sessionID),c=async e=>{if(!i()){a(e.id);try{await V(NV(e.id),{method:`DELETE`}),q(`Subscription removed`),r()}catch(e){q(`Could not remove the subscription: ${U(e)}`,`err`)}finally{a(``)}}},f=e=>(()=>{var t=VV();return y(t,n(m,{get each(){return e.items},children:t=>{let n=()=>BV(t,Date.now());return(()=>{var r=HV(),a=r.firstChild,o=a.firstChild,l=o.nextSibling,u=a.nextSibling;return y(o,()=>e.who(t)),y(l,()=>n().detail),u.$$click=()=>void c(t),s(e=>{var n=t.id,a=i()===t.id,o=`Remove subscription ${t.id}`;return n!==e.e&&b(r,`data-subscription`,e.e=n),a!==e.t&&(u.disabled=e.t=a),o!==e.a&&b(u,`aria-label`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),r})()}})),t})();return(()=>{var e=GV(),i=e.firstChild,a=i.firstChild;return y(e,n(l,{get when(){return!t.error},get fallback(){return KV()},get children(){return n(l,{get when(){return!t.loading||t.latest},get fallback(){return qV()},get children(){return n(l,{get when(){return o().listensTo.length||o().listenedBy.length},get fallback(){return JV()},get children(){return[n(l,{get when(){return o().listensTo.length},get children(){return[UV(),n(f,{get items(){return o().listensTo},who:e=>BV(e,Date.now()).title})]}}),n(l,{get when(){return o().listenedBy.length},get children(){return[WV(),n(f,{get items(){return o().listenedBy},who:e=>e.subscriber})]}})]}})}})}}),i),a.$$click=()=>void r(),s(()=>a.disabled=t.loading),e})()}z([`click`]);var XV=I(`<div class=context-cards>`),ZV=I(`<p class="muted small">Could not load the context cards. <button type=button class="btn small">Retry`),QV=I(`<p class="muted small">Loading…`),$V=I(`<p class="muted small context-cards-off">`),eH=I(`<article><header class=context-card-head><span class=context-card-title></span><button type=button class="btn small">`),tH=I(`<p class="muted small">No card yet.`),nH=I(`<p class=context-card-headline>`),rH=I(`<p class="small context-card-body">`),iH=I(`<dl class="kv context-card-fields">`),aH=I(`<p class="muted small context-card-meta">`),oH=I(`<dt>`),sH=I(`<dd>`),cH=I(`<p class="muted small context-card-note">`);function lH(e){let[t,{refetch:r}]=d(()=>e.sessionID,async e=>{let t=pk(await G(ik(e)));for(let e of t.cards)Tk(e);return t}),[i,a]=u(),[o,s]=u({});M(hu(t=>{vk(t,e.sessionID)&&r()}));let c=()=>t.error?void 0:t.loading?t.latest:t(),f=e=>c()?.cards.find(t=>t.provider===e),p=async t=>{if(!i()){a(t),s(e=>({...e,[t]:``}));try{let n=await V(ak(e.sessionID,t),{method:`POST`}).catch(e=>{if(!(e instanceof W&&e.status===429))throw e}),i=n?await n.json():{outcome:`skipped`,reason:`rate_limited`},a=_k(i),o=fk(i.card);o&&Tk(o),s(e=>({...e,[t]:a??``})),await r()}catch(e){s(n=>({...n,[t]:U(e)}))}finally{a(void 0)}}};return(()=>{var e=XV();return y(e,n(l,{get when(){return!t.error},get fallback(){return(()=>{var e=ZV(),t=e.firstChild.nextSibling;return t.$$click=()=>void r(),e})()},get children(){return n(l,{get when(){return c()},get fallback(){return QV()},children:e=>[n(l,{get when(){return!e().enabled},get children(){var t=$V();return y(t,()=>e().configured?`Context cards are off. Turn them on in Settings › Concierge (nothing is sent to a model until you do).`:`No model is configured for context cards (see docs/context-cards.md).`),t}}),n(m,{get each(){return e().providers},children:e=>n(uH,{provider:e,get card(){return f(e.id)},get busy(){return i()===e.id},get disabled(){return!!i()},get note(){return o()[e.id]},onRefresh:()=>void p(e.id)})})]})}})),e})()}function uH(e){return(()=>{var t=eH(),r=t.firstChild.firstChild,i=r.nextSibling;return y(r,()=>e.card?.title??e.provider.label),i.$$click=()=>e.onRefresh(),y(i,()=>e.busy?`Refreshing…`:`Refresh`),y(t,n(l,{get when(){return e.card},get fallback(){return tH()},children:e=>[(()=>{var t=nH();return y(t,()=>e().headline),t})(),n(l,{get when(){return e().body},get children(){var t=rH();return y(t,()=>e().body),t}}),n(l,{get when(){return e().fields?.length},get children(){var t=iH();return y(t,n(m,{get each(){return e().fields},children:e=>[(()=>{var t=oH();return y(t,()=>e.label),t})(),(()=>{var t=sH();return y(t,()=>e.value),t})()]})),t}}),(()=>{var t=aH();return y(t,()=>hk(e(),N())),t})()]}),null),y(t,n(l,{get when(){return e.note},children:e=>(()=>{var t=cH();return y(t,e),t})()}),null),s(n=>{var r=`context-card${e.provider.primary?` primary`:``}`,a=e.provider.id,o=e.busy,s=e.disabled,c=`Refresh ${e.provider.label}`;return r!==n.e&&k(t,n.e=r),a!==n.t&&b(t,`data-context-card`,n.t=a),o!==n.a&&b(t,`aria-busy`,n.a=o),s!==n.o&&(i.disabled=n.o=s),c!==n.i&&b(i,`title`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t})()}z([`click`]);var dH=e=>Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`):[],fH=e=>typeof e==`string`?e:``,pH=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,mH=new Set([`working`,`blocked`]),hH=e=>Ir[fH(e.state)]??Ir.idle;function gH(e){let t=new Map,n=[];for(let r of e){let e=t.get(r.id);e===void 0?(t.set(r.id,n.length),n.push(r)):hH(r)<hH(n[e])&&(n[e]=r)}return n}function _H(e,t,n){let r=gH(dH(t)),i=e=>{let t=[],n=new Set([e]);for(let e=!0;e;){e=!1;for(let i of r)n.has(fH(i.parentID))&&!n.has(i.id)&&(n.add(i.id),t.push(i),e=!0)}return t},a=new Map;for(let e of dH(n)){let t=pH(e.updated);t!==void 0&&a.set(e.id,Math.max(t,a.get(e.id)??-1/0))}let o=[];for(let t of r){if(t.parentID!==e||t.id===e)continue;let n=i(t.id),r=[t,...n].map(e=>fH(e.state)),a=r.includes(`blocked`)?`blocked`:t.state===`error`?`error`:r.includes(`working`)?`working`:`idle`,s=[t,...n].filter(e=>e.state===`working`).map(e=>pH(e.since)).filter(e=>e!==void 0);o.push({id:t.id,title:fH(t.title)||`Subagent`,state:a,...a===`working`&&s.length?{since:Math.min(...s)}:{},nested:n.length,order:o.length})}let s=new Set(o.map(e=>e.id));for(let t of dH(n)){if(t.parentID!==e||s.has(t.id))continue;s.add(t.id);let n=fH(t.state),r=n===`working`||n===`blocked`||n===`error`?n:`idle`;o.push({id:t.id,title:fH(t.title)||`Subagent`,state:r,nested:0,order:o.length})}let c=({order:e,...t})=>t,l=o.filter(e=>mH.has(e.state)).sort((e,t)=>(e.state===t.state?0:e.state===`blocked`?-1:+(t.state===`blocked`))||(e.since??1/0)-(t.since??1/0)||e.order-t.order),u=o.filter(e=>!mH.has(e.state)).sort((e,t)=>Number(t.state===`error`)-Number(e.state===`error`)||(a.get(t.id)??-1/0)-(a.get(e.id)??-1/0)||t.order-e.order);return{running:l.map(c),finished:u.map(c)}}function vH(e){let t=e.finished.filter(e=>e.state===`error`).length;return[`Subagents`,e.running.length?`${e.running.length} running`:e.finished.length?`${e.finished.length} finished`:``,t?`${t} failed`:``].filter(Boolean).join(` · `)}var yH={working:`Running`,blocked:`Needs you`,error:`Error`,idle:`Done`};function bH(e,t){let n=[yH[e.state]];return e.state===`working`&&e.since!==void 0&&n.push(Gi(t-e.since)),e.nested&&n.push(`${e.nested} subagent${e.nested===1?``:`s`}`),n.join(` · `)}var xH=I(`<section><h3><button type=button class=card-toggle><span>`),SH=I(`<li><a><span class=subagent-text><span class=subagent-title></span><span class="muted small">`),CH=I(`<ul class=job-list>`),wH=I(`<ul class=subagent-list>`),TH=I(`<button type=button class="subagents-more small">`),EH=I(`<ul class=mcp-list>`),DH=I(`<aside class=rail aria-label="Session details"><div class=rail-head><span class=rail-title>Details`),OH=I(`<p class="rail-error small"><strong>`),kH=I(`<p class="muted small">`),AH=I(`<dl class=kv><dt>Machine</dt><dd><span aria-hidden=true></span> <span class=muted>· </span></dd><dt>Project</dt><dd class=mono></dd><dt>Directory</dt><dd class=kv-path data-session-directory><span class="mono path-tail"><bdi></bdi></span></dd><dt>Branch</dt><dd class=mono></dd><dt>Open in</dt><dd>`),jH=I(`<span class=muted>`),MH=I(`<p class="small retry-note">`),NH=I(`<li><span aria-hidden=true></span><span class="job-command mono"></span><span class="muted small">`),PH=I(`<div class=meter role=meter aria-valuemin=0 aria-valuemax=100 aria-label="Context used"><span>`),FH=I(`<p class=small><strong></strong><span class=muted> `),IH=I(`<li><span aria-hidden=true></span><span class=mcp-name></span><span class="muted small">`),LH=I(`<span class=diffstat><span class=add>+</span> <span class=del>−`),RH=I(`<ul class=file-list>`),zH=I(`<p class="muted small">No changes.`),BH=I(`<li><button type=button class=file><span></span><span class=file-name><bdi></bdi></span><span class="diffstat small"><span class=add>+</span> <span class=del>−`),VH=I(`<p class="muted small more-files">+<!> more <!> (only the most-changed files are listed)`),HH=I(`<table class=diff><tbody>`),UH=I(`<p class="muted small pad">The diff is too large to show completely (512 KB).`),WH=I(`<section class=diff-panel><header class=diff-head><select aria-label="Changed file"></select><label class="small muted wrap-toggle"><input type=checkbox> Wrap</label></header><div>`),GH=I(`<option>`),KH=I(`<p class="muted small pad">Loading diff…`),qH=I(`<p class="muted small pad">`),JH=I(`<p class="muted small pad">No textual changes (binary file, or a rename).`),YH=I(`<tr><td class=ln></td><td class=ln></td><td class=code-line><span class=sign>`),XH=e=>e.truncated&&e.totalFiles?Math.max(0,e.totalFiles-e.files.length):0,[ZH,QH]=u(oS(localStorage));function $H(e){let t=()=>!ZH().has(e.id);return(()=>{var r=xH(),i=r.firstChild,a=i.firstChild,o=a.firstChild;return a.$$click=()=>QH(sS(localStorage,e.id)),y(a,n(L,{name:`chevron`,class:`card-chevron`}),o),y(o,()=>e.title),y(i,()=>e.extra,null),y(r,n(l,{get when(){return t()},get children(){return e.children}}),null),s(n=>{var i=`rail-card${t()?``:` collapsed`}`,o=e.label??e.title,s=e.domID,c=e.id,l=t();return i!==n.e&&k(r,n.e=i),o!==n.t&&b(r,`aria-label`,n.t=o),s!==n.a&&b(r,`id`,n.a=s),c!==n.o&&b(r,`data-card`,n.o=c),l!==n.i&&b(a,`aria-expanded`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),r})()}var eU=e=>e>=1e3?`${(e/1e3).toFixed(e>=1e5?0:1)}k`:String(e);function tU(t){let i=()=>t.found?.session,o=()=>i()?.open?i()?.terminal?.source===`herdr`?`herdr`:`tui`:`background`,c=()=>Wi(i()?.status,N()),d=()=>c().filter(e=>e.status===`running`).length,f=()=>i()?.state===`working`||i()?.status?.some(e=>e.state===`working`)?Ji(i()?.status,i()?.id,se()):void 0,p=()=>zi(i()?.status,i()?.id),h=C(()=>{let e=i()?.id;return e?(Y.machines??[]).flatMap(t=>t.processes.flatMap(t=>t.sessions.filter(t=>t.parentID===e))):[]}),g=C(()=>{let e=i()?.id;return e?_H(e,i()?.status,h()):{running:[],finished:[]}}),_=C(()=>new Map([...g().running,...g().finished].map(e=>[e.id,e]))),[v,S]=u(!1);x(e(()=>i()?.id,()=>S(!1),{defer:!0}));let w=C(()=>{let{running:e,finished:t}=g();return[...e,...v()?t:t.slice(0,3)].map(e=>e.id)},[],{equals:(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n])}),T=e=>n(l,{get when(){return _().get(e)},children:r=>(()=>{var i=SH(),a=i.firstChild,o=a.firstChild,c=o.firstChild,l=c.nextSibling;return a.$$click=()=>Z()&&t.onClose(),b(a,`data-session`,e),y(a,n(A,{get state(){return r().state}}),o),y(c,()=>r().title),y(l,()=>bH(r(),N())),y(a,n(L,{name:`chevron`,class:`chev`}),null),s(t=>{var n=`subagent-row ${r().state}`,i=Ot(e),o=r().title,s=`Open subagent ${r().title} (${bH(r(),N())})`;return n!==t.e&&k(a,t.e=n),i!==t.t&&b(a,`href`,t.t=i),o!==t.a&&b(a,`title`,t.a=o),s!==t.o&&b(a,`aria-label`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}),E=()=>{let e=t.summary?.mcp;return e?.length?`Connectors · ${e.filter(e=>e.status===`connected`).length} connected`:`Connectors`};return(()=>{var e=DH(),u=e.firstChild;return u.firstChild,y(u,n(F,{icon:`close`,label:`Close details`,get onClick(){return t.onClose}}),null),y(e,n(l,{get when(){return p()},children:e=>(()=>{var t=OH(),n=t.firstChild;return y(n,()=>e().label),y(t,(()=>{var t=r(()=>!!e().status);return()=>t()?` · ${e().status}`:``})(),null),y(t,(()=>{var t=r(()=>!!(e().title&&e().sessionID!==i()?.id));return()=>t()?` · ${e().title}`:``})(),null),s(()=>b(t,`title`,e().text)),t})()}),null),y(e,n($H,{id:`environment`,title:`Environment`,get children(){return n(l,{get when(){return t.found},get fallback(){return(()=>{var e=kH();return y(e,()=>Y.machines?`Not reported by any connected machine.`:`Loading…`),e})()},children:e=>(()=>{var a=AH(),c=a.firstChild.nextSibling,l=c.firstChild,u=l.nextSibling,d=u.nextSibling;d.firstChild;var f=c.nextSibling.nextSibling,p=f.nextSibling.nextSibling,m=p.firstChild,h=m.firstChild,g=p.nextSibling.nextSibling,_=g.nextSibling.nextSibling;return y(c,()=>e().machine.name,u),y(d,(()=>{var t=r(()=>Y.connection!==`live`);return()=>t()?`Connecting`:e().machine.online?`online`:`offline`})(),null),y(f,()=>j(t.summary?.directory??e().session.directory)),y(h,()=>t.summary?.directory??e().session.directory),y(p,n(F,{icon:`copy`,label:`Copy the directory`,onClick:()=>{let n=t.summary?.directory??e().session.directory;navigator.clipboard.writeText(n).then(()=>q(`Directory copied`),()=>q(`Could not copy the directory`,`err`))}}),null),y(g,()=>t.summary?.branch??(()=>{var e=jH();return y(e,()=>t.loading?`…`:`—`),e})()),y(_,()=>oe[o()],null),y(_,(()=>{var e=r(()=>!!i()?.terminal?.workspace);return()=>e()?` · ${i().terminal.workspace}`:``})(),null),s(n=>{var r=`online-dot${e().machine.online&&Y.connection===`live`?` on`:``}`,i=t.summary?.directory??e().session.directory,a=t.summary?.directory??e().session.directory;return r!==n.e&&k(l,n.e=r),i!==n.t&&b(f,`title`,n.t=i),a!==n.a&&b(m,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),a})()})}}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n($H,{id:`intent`,title:`Intent`,label:`Session intent`,get children(){return n(jV,{get sessionID(){return e()}})}})}),null),y(e,n(l,{get when(){return c().length||f()},get children(){return n($H,{id:`jobs`,get title(){return`Jobs${d()?` · ${d()} running`:``}`},label:`Background jobs`,get children(){return[n(l,{get when(){return f()},children:e=>(()=>{var t=MH();return y(t,e),t})()}),(()=>{var e=CH();return y(e,n(m,{get each(){return c()},children:e=>(()=>{var t=NH(),n=t.firstChild,a=n.nextSibling,o=a.nextSibling;return y(a,()=>e.command??e.id),y(o,()=>Ki(e,N()),null),y(o,(()=>{var t=r(()=>!!(e.sessionID!==i()?.id&&e.sessionTitle));return()=>t()?` · ${e.sessionTitle}`:``})(),null),s(r=>{var i=`job ${e.status}`,a=e.command??e.id,o=`job-dot ${e.status===`running`?`on`:e.exit?`bad`:``}`;return i!==r.e&&k(t,r.e=i),a!==r.t&&b(t,`title`,r.t=a),o!==r.a&&k(n,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()})),e})()]}})}}),null),y(e,n(l,{get when(){return g().running.length||g().finished.length},get children(){return n($H,{id:`subagents`,get title(){return vH(g())},label:`Subagents`,get children(){return[(()=>{var e=wH();return y(e,n(m,{get each(){return w()},children:T})),e})(),n(l,{get when(){return g().finished.length>3},get children(){var e=TH();return e.$$click=()=>S(!v()),y(e,(()=>{var e=r(()=>!!v());return()=>e()?`Show fewer`:`${g().finished.length-3} more finished`})()),s(()=>b(e,`aria-expanded`,v())),e}})]}})}}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n($H,{id:`context-cards`,title:`Context cards`,get children(){return n(lH,{get sessionID(){return e()}})}})}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n($H,{id:`subscriptions`,title:`Subscriptions`,label:`Session subscriptions`,get children(){return n(YV,{get sessionID(){return e()}})}})}),null),y(e,n($H,{id:`context`,title:`Context`,get children(){return n(l,{get when(){return t.summary?.context},get fallback(){return(()=>{var e=kH();return y(e,()=>t.loading?`Loading…`:`No usage reported yet.`),e})()},children:e=>[(()=>{var t=PH(),n=t.firstChild;return s(r=>{var i=e().percent??0,o=`${e().percent??0}%`,s=(e().percent??0)>80?`hot`:``;return i!==r.e&&b(t,`aria-valuenow`,r.e=i),o!==r.t&&a(n,`width`,r.t=o),s!==r.a&&k(n,r.a=s),r},{e:void 0,t:void 0,a:void 0}),t})(),(()=>{var t=FH(),n=t.firstChild,i=n.nextSibling;return i.firstChild,y(n,(()=>{var t=r(()=>e().percent!==void 0);return()=>t()?`${e().percent}%`:eU(e().used)})()),y(i,(()=>{var t=r(()=>!!e().limit);return()=>t()?`${eU(e().used)} / ${eU(e().limit)} tokens`:`tokens`})(),null),y(i,(()=>{var t=r(()=>!!e().model);return()=>t()?` · ${e().model}`:``})(),null),t})()]})}}),null),y(e,n($H,{id:`mcp`,get title(){return E()},label:`MCP servers`,get children(){return n(l,{get when(){return t.summary?.mcp?.length},get fallback(){return(()=>{var e=kH();return y(e,()=>t.loading?`Loading…`:`No MCP servers.`),e})()},get children(){var e=EH();return y(e,n(m,{get each(){return t.summary.mcp},children:e=>(()=>{var t=IH(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return y(r,()=>e.name),y(i,()=>e.status.replace(`_`,` `)),s(r=>{var i=e.error??e.status,a=`mcp-dot ${e.status}`;return i!==r.e&&b(t,`title`,r.e=i),a!==r.t&&k(n,r.t=a),r},{e:void 0,t:void 0}),t})()})),e}})}}),null),y(e,n($H,{id:`changes`,title:`Changes`,domID:`rail-changes`,get extra(){return n(l,{get when(){return t.summary?.changes},children:e=>(()=>{var t=LH(),n=t.firstChild;n.firstChild;var r=n.nextSibling.nextSibling;return r.firstChild,y(n,()=>e().additions,null),y(r,()=>e().deletions,null),t})()})},get children(){return n(l,{get when(){return t.summary?.changes},get fallback(){return(()=>{var e=kH();return y(e,(()=>{var e=r(()=>!!t.loading);return()=>e()?`Loading…`:t.summaryError||`No working-tree changes reported (not a git repository, or OpenCode is still warming up).`})()),e})()},children:e=>n(l,{get when(){return e().files.length},get fallback(){return zH()},get children(){return[(()=>{var r=RH();return y(r,n(m,{get each(){return e().files},children:e=>(()=>{var n=BH(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.firstChild,c=a.nextSibling.firstChild;c.firstChild;var l=c.nextSibling.nextSibling;return l.firstChild,r.$$click=()=>t.onFile(e.file),y(i,()=>e.status[0].toUpperCase()),y(o,()=>e.file),y(c,()=>e.additions,null),y(l,()=>e.deletions,null),s(t=>{var n=e.file,a=`file-status ${e.status}`;return n!==t.e&&b(r,`title`,t.e=n),a!==t.t&&k(i,t.t=a),t},{e:void 0,t:void 0}),n})()})),r})(),n(l,{get when(){return XH(e())},children:e=>(()=>{var t=VH(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return r.nextSibling,y(t,e,n),y(t,()=>e()===1?`file`:`files`,r),t})()})]}})})}}),null),e})()}function nU(e){let[t]=d(()=>e.file,async t=>G(`${H(e.sessionID)}/diff?file=${K(t)}`)),[i,a]=u(!1);return(()=>{var o=WH(),c=o.firstChild,u=c.firstChild,d=u.nextSibling,f=d.firstChild,p=c.nextSibling;return y(c,n(L,{name:`diff`}),u),u.addEventListener(`change`,t=>e.onFile(t.currentTarget.value)),y(u,n(m,{get each(){return e.files},children:e=>(()=>{var t=GH();return t.value=e,y(t,e),t})()})),y(c,n(l,{get when(){return t()},children:e=>(()=>{var t=LH(),n=t.firstChild;n.firstChild;var r=n.nextSibling.nextSibling;return r.firstChild,y(n,()=>e().additions,null),y(r,()=>e().deletions,null),t})()}),d),f.addEventListener(`change`,e=>a(e.currentTarget.checked)),y(c,n(F,{icon:`close`,label:`Close diff`,get onClick(){return e.onClose}}),null),y(p,n(l,{get when(){return!t.loading},get fallback(){return KH()},get children(){return n(l,{get when(){return!t.error},get fallback(){return(()=>{var e=qH();return y(e,(()=>{var e=r(()=>t.error?.message===`No changes for that file`);return()=>e()?`This file has no changes any more.`:`Could not load the diff: ${t.error?.message}`})()),e})()},get children(){return n(l,{get when(){return t()?.patch},get fallback(){return JH()},get children(){return[(()=>{var e=HH(),i=e.firstChild;return y(i,n(m,{get each(){return lV(t().patch).filter(e=>e.type!==`meta`)},children:e=>(()=>{var t=YH(),n=t.firstChild,i=n.nextSibling,a=i.nextSibling,o=a.firstChild;return y(n,()=>e.oldNo??``),y(i,()=>e.newNo??``),y(o,(()=>{var t=r(()=>e.type===`add`);return()=>t()?`+`:e.type===`del`?`−`:` `})()),y(a,()=>e.text,null),s(()=>k(t,e.type)),t})()})),e})(),n(l,{get when(){return t().truncated},get children(){return UH()}})]}})}})}})),s(t=>{var n=`Changes in ${e.file}`,r=`diff-body${i()?` wrap`:``}`;return n!==t.e&&b(o,`aria-label`,t.e=n),r!==t.t&&k(p,t.t=r),t},{e:void 0,t:void 0}),s(()=>u.value=e.file),s(()=>f.checked=i()),o})()}z([`click`]);function rU(e){let t={};for(let n of e)n.type!==`external`&&(n.type===`boolean`?t[n.key]=n.default===!0:n.type===`multiselect`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:t[n.key]=n.default===void 0||Array.isArray(n.default)?``:String(n.default));return t}function iU(e,t){return e&&(e.type===`number`||e.type===`integer`)&&typeof t==`string`&&t.trim()?Number(t):typeof t==`string`?t.trim():t}function aU(e,t){let n=new Map(e.map(e=>[e.key,e]));return e.filter(e=>(e.when??[]).every(e=>{let r=iU(n.get(e.key),t[e.key])===e.value;return e.op===`eq`?r:!r}))}var oU=e=>typeof e==`string`?e.trim():``;function sU(e,t){let n={};for(let r of aU(e,t)){let e=cU(r,t[r.key]);e&&(n[r.key]=e)}return n}function cU(e,t){switch(e.type){case`external`:return;case`boolean`:return;case`multiselect`:{let n=Array.isArray(t)?t:[];return e.minItems!==void 0&&n.length<e.minItems?`Choose at least ${e.minItems}`:e.required&&!n.length?`Required`:e.maxItems!==void 0&&n.length>e.maxItems?`Choose at most ${e.maxItems}`:void 0}case`number`:case`integer`:{let n=oU(t);if(!n)return e.required?`Required`:void 0;let r=Number(n);return Number.isFinite(r)?e.type===`integer`&&!Number.isInteger(r)?`Enter a whole number`:e.minimum!==void 0&&r<e.minimum?`At least ${e.minimum}`:e.maximum!==void 0&&r>e.maximum?`At most ${e.maximum}`:void 0:`Enter a number`}case`string`:{let n=oU(t);if(!n)return e.required?`Required`:void 0;if(e.options?.length&&!e.custom&&!e.options.some(e=>e.value===n))return`Choose one of the options`;if(e.minLength!==void 0&&n.length<e.minLength)return`At least ${e.minLength} characters`;if(e.maxLength!==void 0&&n.length>e.maxLength)return`At most ${e.maxLength} characters`;if(e.pattern)try{if(!new RegExp(e.pattern).test(n))return`Doesn't match the expected format`}catch{}return}}}function lU(e,t){let n={};for(let r of aU(e,t)){let e=t[r.key];if(r.type!==`external`){if(r.type===`boolean`)n[r.key]=e===!0;else if(r.type===`multiselect`)n[r.key]=Array.isArray(e)?[...e]:[];else{let t=oU(e);if(!t)continue;n[r.key]=r.type===`number`||r.type===`integer`?Number(t):t}}}return n}var uU=I(`<p class="muted small"data-answer-unavailable> can't take this answer from the hub; answer it in the terminal.`),dU=I(`<p class="blocker-recommendation small"data-recommendation>`),fU=I(`<p class=blocker-text>`),pU=I(`<div role=group><p class=blocker-head><strong>`),mU=I(`<p class="muted small">This question has nothing to fill in here; answer it in the terminal.`),hU=I(`<p class="answered-by small muted"data-answered-by>`),gU=I(`<div class=row><button type=button class="btn small primary">Allow once</button><button type=button class="btn small">Always allow</button><button type=button class="btn small danger">Deny`),_U=I(`<form class=form-card novalidate><fieldset><div class=row><button type=submit class="btn small primary"></button><button type=button class="btn small">Dismiss`),vU=I(`<p class="field-error small"role=alert>`),yU=I(`<div>`),bU=I(`<span class=field-title>`),xU=I(`<span class="field-desc muted small">`),SU=I(`<a class="btn small"target=_blank rel="noopener noreferrer">Open link`),CU=I(`<label class=check><input type=checkbox>`),wU=I(`<input type=text placeholder="Other (comma separated)">`),TU=I(`<div role=group class=choice-group>`),EU=I(`<input type=text placeholder="Type your own answer">`),DU=I(`<div role=radiogroup class=choice-group>`),OU=I(`<label class=text-field>`),kU=I(`<input type=text>`),AU=I(`<span class="muted small"> — `),jU=I(`<label class=choice><input type=checkbox><span>`),MU=I(`<label class=choice><input type=radio><span>`);function NU(e,t){return!(e instanceof W)||e.status!==409||e.code!==`gone`?!1:(q(`Already answered or expired`),t(),!0)}function PU(e){let[t,i]=u(!1),a=()=>e.blocker,c=()=>a().sessionID&&a().sessionID!==e.rootID?` (${a().sessionTitle||`subagent`})`:``,d=()=>a().kind===`permission`?`Permission request`:`Question`;return n(l,{get when(){return!t()},get children(){var t=pU(),u=t.firstChild,f=u.firstChild;return y(f,(()=>{var e=r(()=>a().kind===`permission`);return()=>e()?`Permission`:a().question?`Question`:`Form`})()),y(u,c,null),y(t,n(v,{get fallback(){return mU()},get children(){return[n(o,{get when(){return e.canAnswer===!1},get children(){return[n(tg,{get class(){return`blocker-text${a().kind===`permission`?` mono`:``}`},get text(){return a().summary},what:`the request`,get reveal(){return a().kind===`permission`}}),(()=>{var t=uU(),n=t.firstChild;return y(t,()=>e.harnessName??`This harness`,n),t})()]}}),n(o,{get when(){return a().kind===`permission`},get children(){return[n(tg,{class:`blocker-text mono`,get text(){return a().summary},what:`the request`,reveal:!0}),n(l,{get when(){return Dt(a().recommendation,Su)},get children(){var e=dU();return y(e,()=>Dt(a().recommendation,Su)),e}}),n(FU,{get sessionID(){return e.sessionID},get blocker(){return a()},onGone:()=>i(!0)})]}}),n(o,{get when(){return r(()=>a().kind===`form`)()&&a().fields?.length},get children(){return[n(l,{get when(){return!a().question||a().summary!==`Questions`},get children(){var e=fU();return y(e,()=>a().summary),e}}),n(IU,{get sessionID(){return e.sessionID},get blocker(){return a()},get fields(){return a().fields},onGone:()=>i(!0)})]}})]}}),null),y(t,n(l,{get when(){return en(su(),a().id,Su,pu)},children:e=>(()=>{var t=hU();return y(t,()=>e().text),s(()=>b(t,`title`,e().title)),t})()}),null),s(e=>{var n=`card blocker ${a().kind}`,r=`${d()}: ${a().summary}`;return n!==e.e&&k(t,e.e=n),r!==e.t&&b(t,`aria-label`,e.t=r),e},{e:void 0,t:void 0}),t}})}function FU(e){let[t,n]=u(!1),r=async t=>{n(!0);try{await V(`${H(e.sessionID)}/permission`,{method:`POST`,json:{requestID:e.blocker.id,decision:t}}),q(t===`reject`?`Denied`:`Allowed`)}catch(t){NU(t,e.onGone)||q(Oz(t)??U(t),`err`),n(!1)}};return(()=>{var e=gU(),n=e.firstChild,i=n.nextSibling,a=i.nextSibling;return n.$$click=()=>void r(`once`),i.$$click=()=>void r(`always`),a.$$click=()=>void r(`reject`),s(e=>{var r=t(),o=t(),s=t();return r!==e.e&&(n.disabled=e.e=r),o!==e.t&&(i.disabled=e.t=o),s!==e.a&&(a.disabled=e.a=s),e},{e:void 0,t:void 0,a:void 0}),e})()}function IU(e){let[t,r]=u(rU(e.fields)),[i,a]=u({}),[o,c]=u(!1),[d,f]=u(!1),p=C((n=[])=>{let r=aU(e.fields,t()).map(e=>e.key);return r.length===n.length&&r.every((e,t)=>e===n[t])?n:r}),h=t=>e.fields.find(e=>e.key===t),g=(e,t)=>{r(n=>({...n,[e]:t})),i()[e]&&a(t=>Object.fromEntries(Object.entries(t).filter(([t])=>t!==e)))},_=async(t,n)=>{c(!0);try{await V(`${H(e.sessionID)}/form`,{method:`POST`,json:{formID:e.blocker.id,...t}}),f(!0),q(n)}catch(t){NU(t,e.onGone)||q(Oz(t)??U(t),`err`),c(!1)}},v=n=>{n.preventDefault();let r=sU(e.fields,t());if(a(r),Object.keys(r).length)return;let i=lU(e.fields,t());e.blocker.question&&!Object.values(i).some(e=>Array.isArray(e)?e.length>0:e!==``&&e!==!1)?q(`Pick or type an answer first (Dismiss skips the questions)`,`err`):_({answer:i},`Answer sent`)},x=()=>o()||d();return(()=>{var r=_U(),a=r.firstChild,o=a.firstChild,c=o.firstChild,u=c.nextSibling;return r.addEventListener(`submit`,v),y(a,n(m,{get each(){return p()},children:r=>n(l,{get when(){return h(r)},children:a=>(()=>{var o=yU();return b(o,`data-key`,r),y(o,n(LU,{get field(){return a()},get value(){return t()[r]},onChange:e=>g(r,e),get formID(){return e.blocker.id}}),null),y(o,n(l,{get when(){return i()[r]},get children(){var e=vU();return y(e,()=>i()[r]),e}}),null),s(()=>k(o,`form-field ${a().type}`)),o})()})}),o),y(c,()=>d()?`Sent`:`Submit`),u.$$click=()=>void _({cancel:!0},`Dismissed`),s(()=>a.disabled=x()),r})()}function LU(e){let t=()=>e.field,i=()=>`f-${e.formID}-${t().key}`,a=()=>t().title||t().key,c=()=>typeof e.value==`string`?e.value:``,u=()=>Array.isArray(e.value)?e.value:[],d=()=>new Set((t().options??[]).map(e=>e.value)),f=()=>[(()=>{var e=bU();return y(e,a,null),y(e,()=>t().required?` *`:``,null),e})(),n(l,{get when(){return t().description},get children(){var e=xU();return y(e,()=>t().description),e}})];return n(v,{get children(){return[n(o,{get when(){return t().type===`external`},get children(){return[n(f,{}),(()=>{var e=SU();return s(()=>b(e,`href`,t().url)),e})()]}}),n(o,{get when(){return t().type===`boolean`},get children(){var t=CU(),r=t.firstChild;return r.addEventListener(`change`,t=>e.onChange(t.currentTarget.checked)),y(t,n(f,{}),null),s(()=>r.checked=e.value===!0),t}}),n(o,{get when(){return t().type===`multiselect`},get children(){var r=TU();return y(r,n(f,{}),null),y(r,n(m,{get each(){return t().options??[]},children:t=>(()=>{var r=jU(),i=r.firstChild,a=i.nextSibling;return i.addEventListener(`change`,n=>e.onChange(n.currentTarget.checked?[...u(),t.value]:u().filter(e=>e!==t.value))),y(a,()=>t.label),y(r,n(l,{get when(){return t.description},get children(){var e=AU();return e.firstChild,y(e,()=>t.description,null),e}}),null),s(()=>i.checked=u().includes(t.value)),r})()}),null),y(r,n(l,{get when(){return t().custom},get children(){var t=wU();return t.addEventListener(`change`,t=>e.onChange([...u().filter(e=>d().has(e)),...t.currentTarget.value.split(`,`).map(e=>e.trim()).filter(Boolean)])),s(()=>b(t,`aria-label`,`${a()}: other`)),s(()=>t.value=u().filter(e=>!d().has(e)).join(`, `)),t}}),null),s(()=>b(r,`aria-label`,a())),r}}),n(o,{get when(){return r(()=>t().type===`string`)()&&t().options?.length},get children(){var r=DU();return y(r,n(f,{}),null),y(r,n(m,{get each(){return t().options??[]},children:t=>(()=>{var r=MU(),a=r.firstChild,o=a.nextSibling;return a.addEventListener(`change`,()=>e.onChange(t.value)),y(o,()=>t.label),y(r,n(l,{get when(){return t.description},get children(){var e=AU();return e.firstChild,y(e,()=>t.description,null),e}}),null),s(()=>b(a,`name`,i())),s(()=>a.checked=c()===t.value),r})()}),null),y(r,n(l,{get when(){return t().custom},get children(){var t=EU();return t.$$input=t=>e.onChange(t.currentTarget.value),s(()=>b(t,`aria-label`,`${a()}: your own answer`)),s(()=>t.value=d().has(c())?``:c()),t}}),null),s(()=>b(r,`aria-label`,a())),r}}),n(o,{when:!0,get children(){return[(()=>{var e=OU();return y(e,n(f,{})),s(()=>b(e,`for`,i())),e})(),(()=>{var n=kU();return n.$$input=t=>e.onChange(t.currentTarget.value),s(e=>{var r=i(),a=t().type===`number`||t().type===`integer`?`decimal`:void 0,o=t().placeholder??``;return r!==e.e&&b(n,`id`,e.e=r),a!==e.t&&b(n,`inputmode`,e.t=a),o!==e.a&&b(n,`placeholder`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),s(()=>n.value=c()),n})()]}})]}})}z([`click`,`input`]);var RU=I(`<span class=file-chip> `),zU=I(`<button type=button class="icon-btn msg-more"aria-label="Copy, fork or revert"title="Copy, fork (here or beside) or revert"aria-haspopup=true>`),BU=I(`<div class=pill>`),VU=I(`<p class="msg-note muted small"data-answered-note>`),HU=I(`<div><div class=user-body>`),UU=I(`<div class=msg-images>`),WU=I(`<div class=msg-tools role=toolbar aria-label="Copy, fork, revert">`),GU=I(`<span>`),KU=I(`<div class=transcript aria-label=Conversation>`),qU=I(`<div>`),JU=I(`<p class="note sys turn-denied">`),YU=I(`<span class=turn-error-status>`),XU=I(`<div class=turn-error-message>`),ZU=I(`<div class="msg turn-error"role=group><span class=turn-error-mark aria-hidden=true>✕</span><div class=turn-error-body><div class=turn-error-head><strong class=turn-error-label>`),QU=I(`<p><span class=turn-retry-mark aria-hidden=true>↻</span><span>`),$U=I(`<a><span class=sub-mark aria-hidden=true></span><span class=sub-label>Subagent · <strong></strong></span><span class="sub-state muted">`),eW=I(`<span class=spinner>`),tW=I(`<span class=hub-msg-kind>`),nW=I(`<span class="hub-msg-state muted">`),rW=I(`<span class="hub-msg-delivery muted"title="Not delivered into a turn yet: the recipient's harness takes it at its next step">`),iW=I(`<div role=group><div class=hub-msg-head><span class=hub-msg-mark aria-hidden=true></span><span class=hub-msg-label></span></div><div class=hub-msg-text>`),aW=I(`<div class="fold-body hub-msg-text">`),oW=I(`<div><button type=button class=fold-head><span class=hub-msg-mark aria-hidden=true>⇄</span><span>`),sW=I(`<a>`),cW=I(`<span class="spinner small">`),lW=I(`<div class="fold thought"><button type=button class=fold-head><span>`),uW=I(`<ul class="fold-body tool-list">`),dW=I(`<div><button type=button class=fold-head><span>`),fW=I(`<pre class=code>`),pW=I(`<div class=tool-detail>`),mW=I(`<li><button type=button class=tool-head><span class=tool-mark></span><span class=tool-name></span><span class="tool-summary muted"></span><span class="tool-time muted">`),hW=I(`<span class="muted small">Loading full details…`),gW=I(`<span class="error small">`),_W=I(`<span class="muted small">No details for this call yet.`),vW={pending:[`…`,`Sending`],sent:[`✓`,`Sent`],queued:[`◷`,`Queued: the harness takes it at its next step`],heard:[`✓✓`,`Heard by the agent`],failed:[`!`,`Not sent`]};function yW(e){return n(l,{get when(){return e.image.src},get fallback(){return(()=>{var t=RU(),r=t.firstChild;return y(t,n(L,{name:`file`}),r),y(t,()=>e.image.name,null),s(()=>b(t,`title`,e.image.mime)),t})()},get children(){return n(Fn,{get image(){return e.image},class:`msg-image`,get onOpen(){return e.onOpen}})}})}var bW=500;function xW(e){let[t,a]=u(!1),o,c=()=>clearTimeout(o),d=t=>{t.pointerType===`touch`&&e.actions&&(c(),o=setTimeout(()=>a(!0),bW))},f=(e,t)=>()=>{a(!1),e.enabled&&t()};return(()=>{var o=HU(),u=o.firstChild;return i(o,_({get class(){return`msg user${t()?` tools-open`:``}`},get"data-key"(){return e.block.key}},()=>e.block.messageID?{"data-message":e.block.messageID}:{},{onPointerDown:d,onPointerUp:c,onPointerCancel:c,onPointerLeave:c,onFocusOut:e=>!e.currentTarget.contains(e.relatedTarget)&&a(!1),onKeyDown:e=>{if(e.key!==`Escape`)return;let n=e.target?.closest?.(`.msg-tools`);(t()||n)&&(a(!1),n&&e.currentTarget.querySelector(`.msg-more`)?.focus(),e.stopPropagation())}}),!1,!0),y(o,n(l,{get when(){return e.actions},get children(){var r=zU();return r.$$click=e=>{let n=!t(),r=e.currentTarget;a(n),n&&e.detail===0&&queueMicrotask(()=>r.closest(`.msg`)?.querySelector(`.msg-tools button`)?.focus())},y(r,n(L,{name:`more`})),s(n=>{var i=t(),a=`msg-tools-${e.block.key}`;return i!==n.e&&b(r,`aria-expanded`,n.e=i),a!==n.t&&b(r,`aria-controls`,n.t=a),n},{e:void 0,t:void 0}),r}}),u),y(u,n(l,{get when(){return e.block.images?.length},get children(){return n(zn,{get images(){return e.block.images??[]},children:t=>(()=>{var r=UU();return y(r,n(m,{get each(){return e.block.images},children:e=>n(yW,{image:e,onOpen:()=>t(e.key)})})),r})()})}}),null),y(u,n(l,{get when(){return e.block.text},get children(){var t=BU();return y(t,()=>e.block.text),t}}),null),y(u,n(l,{get when(){return e.block.note},get children(){var t=VU();return y(t,()=>e.block.note),t}}),null),y(u,n(l,{get when(){return e.actions},children:t=>(()=>{var i=WU();return y(i,n(F,{icon:`copy`,label:`Copy`,"data-action":`copy`,onClick:()=>(a(!1),t().onCopy(e.block.text))}),null),y(i,n(l,{get when(){return e.block.messageID},children:i=>[n(F,{icon:`fork`,get label(){return r(()=>!!t().fork.enabled)()?`Fork: a new session with the conversation up to here`:t().fork.reason??`Fork is not available`},"data-action":`fork`,get"aria-disabled"(){return!t().fork.enabled},get onClick(){return f(t().fork,()=>t().onFork(i(),e.block.text))}}),n(l,{get when(){return t().onForkBeside},children:a=>n(F,{icon:`split`,get label(){return r(()=>!!t().fork.enabled)()?`Fork and open beside: the new session in a pane next to this one`:t().fork.reason??`Fork is not available`},"data-action":`fork-beside`,get"aria-disabled"(){return!t().fork.enabled},get onClick(){return f(t().fork,()=>a()(i(),e.block.text))}})}),n(F,{icon:`undo`,get label(){return r(()=>!!t().revert.enabled)()?`Revert: undo from here on (restores the files)`:t().revert.reason??`Revert is not available`},"data-action":`revert`,get"aria-disabled"(){return!t().revert.enabled},get onClick(){return f(t().revert,()=>t().onRevert(i(),e.block.text))}})]}),null),s(()=>b(i,`id`,`msg-tools-${e.block.key}`)),i})()}),null),y(o,n(l,{get when(){return e.tick},children:e=>(()=>{var t=GU();return y(t,()=>vW[e()][0]),s(n=>{var r=`tick ${e()}`,i=vW[e()][1],a=vW[e()][1];return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),o})()}function SW(e){return n(In,{get children(){return n(CW,e)}})}function CW(e){let t=C(()=>e.previews?Kj(e.blocks,e.partialMessage):void 0),i=(n,r)=>{let i=t()?.get(n);return i?{sessionID:e.sessionID,messageID:i.messageID,base:i.base}:e.previews&&r&&r===e.partialMessage?{sessionID:e.sessionID,messageID:r,base:0,waiting:!0}:void 0},a=C(()=>new Map(e.blocks.map(e=>[e.key,e]))),c=C(()=>e.blocks.map(e=>e.key),void 0,{equals:(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n])});return(()=>{var t=KU();return y(t,n(m,{get each(){return c()},children:t=>{let c,u=C(()=>c=a().get(t)??c),d=e=>{let t=u();return t.type===e?t:void 0};return n(v,{get children(){return[n(o,{get when(){return d(`user`)},children:t=>n(xW,{get block(){return t()},get tick(){return e.ticks[t().key]},get actions(){return e.actions}})}),n(o,{get when(){return d(`assistant`)},children:t=>(()=>{var a=qU();return y(a,n(mN.Provider,{get value(){return e.sessionID},get children(){return n(OP,{get text(){return t().text},get streaming(){return t().live},get preview(){return i(t().key,t().messageID)},get images(){return r(()=>!!e.previews)()?t().media:void 0},links:!0})}})),s(e=>{var n=`msg assistant${t().live?` live`:``}`,r=t().key;return n!==e.e&&k(a,e.e=n),r!==e.t&&b(a,`data-key`,e.t=r),e},{e:void 0,t:void 0}),a})()}),n(o,{get when(){return d(`thought`)},children:t=>n(TW,{get block(){return t()},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return d(`tools`)},children:t=>n(EW,{get block(){return t()},get sessionID(){return e.sessionID},get onDetail(){return e.onDetail},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return d(`message`)},children:t=>n(wW,{get block(){return t()},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return r(()=>!!d(`error`)?.denied)()&&d(`error`)},children:e=>(()=>{var t=JU();return y(t,()=>e().label),s(()=>b(t,`data-key`,e().key)),t})()}),n(o,{get when(){return d(`error`)},children:e=>(()=>{var t=ZU(),r=t.firstChild.nextSibling,i=r.firstChild,a=i.firstChild;return y(a,()=>e().label),y(i,n(l,{get when(){return e().status},get children(){var t=YU();return y(t,()=>e().status),t}}),null),y(r,n(l,{get when(){return e().message},get children(){var t=XU();return y(t,()=>e().message),t}}),null),s(n=>{var r=e().key,i=`Error: ${e().label}`;return r!==n.e&&b(t,`data-key`,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(o,{get when(){return d(`retry`)},children:e=>{let t=()=>Zz(e(),se());return(()=>{var n=QU(),r=n.firstChild.nextSibling;return y(r,()=>t().text),s(r=>{var i=`msg turn-retry${t().waiting?` waiting`:``}`,a=e().key;return i!==r.e&&k(n,r.e=i),a!==r.t&&b(n,`data-key`,r.t=a),r},{e:void 0,t:void 0}),n})()}}),n(o,{get when(){return d(`subagent`)},children:e=>(()=>{var t=$U(),i=t.firstChild,a=i.nextSibling,o=a.firstChild.nextSibling,c=a.nextSibling;return y(i,(()=>{var t=r(()=>e().state===`working`);return()=>t()?eW():`◆`})()),y(o,()=>e().label),y(c,()=>e().state),y(t,n(L,{name:`chevron`,class:`chev`}),null),s(n=>{var r=`subagent ${e().state}`,i=Ot(e().sessionID),a=e().key;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`href`,n.t=i),a!==n.a&&b(t,`data-key`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})]}})}})),t})()}function wW(e){let t=()=>!!e.expanded[e.block.key];return n(l,{get when(){return r(()=>!e.block.primer)()&&!e.block.summary},get fallback(){return(()=>{var r=oW(),a=r.firstChild,o=a.firstChild.nextSibling;return i(r,_({get class(){return`fold hub-note${e.block.summary?` hub-update`:``}`},get"data-key"(){return e.block.key}},()=>e.block.summary?{"data-concierge-update":``}:{}),!1,!0),a.$$click=()=>e.onToggle(e.block.key,!t()),y(o,()=>e.block.summary??e.block.label),y(a,n(L,{name:`chevron`,class:`chev`}),null),y(r,n(l,{get when(){return t()},get children(){var t=aW();return y(t,()=>e.block.text),t}}),null),s(n=>{var r=t(),i=e.block.summary?`Sent by the hub, not by you: show the full update`:void 0;return r!==n.e&&b(a,`aria-expanded`,n.e=r),i!==n.t&&b(a,`title`,n.t=i),n},{e:void 0,t:void 0}),r})()},get children(){var t=iW(),r=t.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling;return y(i,()=>e.block.direction===`out`?`↗`:`↘`),y(r,n(l,{get when(){return e.block.kind!==`msg`},get children(){var t=tW();return y(t,()=>e.block.kind),t}}),a),y(a,()=>Be(e.block.label,Su)),y(r,n(l,{get when(){return e.block.state===`open`||e.block.state===`answered`||e.block.state===`declined`||e.block.state===`expired`},get children(){var t=nW();return y(t,()=>e.block.state),t}}),null),y(r,n(l,{get when(){return e.block.delivery},get children(){var t=rW();return y(t,()=>e.block.delivery),s(()=>b(t,`data-delivery`,e.block.delivery)),t}}),null),y(o,n(l,{get when(){return e.block.parts},get fallback(){return e.block.text},children:e=>n(m,{get each(){return e()},children:e=>e.href?(()=>{var t=sW();return y(t,()=>e.text),s(()=>b(t,`href`,e.href)),t})():e.text})})),s(n=>{var r=`msg hub-msg ${e.block.direction}`,i=e.block.key,o=`Hub ${e.block.kind} ${Be(e.block.label,Su)}`,s=e.block.label;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`data-key`,n.t=i),o!==n.a&&b(t,`aria-label`,n.a=o),s!==n.o&&b(a,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t}})}function TW(e){let t=()=>!!e.expanded[e.block.key],r=t=>e.onToggle(e.block.key,t),i=()=>eB(e.block);return(()=>{var a=lW(),o=a.firstChild,c=o.firstChild;return o.$$click=()=>r(!t()),y(o,n(l,{get when(){return e.block.running},get children(){return cW()}}),c),y(c,()=>i().label),y(o,n(L,{name:`chevron`,class:`chev`}),null),y(a,n(l,{get when(){return t()},get children(){var e=qU();return y(e,()=>i().body),s(()=>k(e,`fold-body reasoning${i().muted?` hidden-reasoning`:``}`)),e}}),null),s(n=>{var r=e.block.key,i=t();return r!==n.e&&b(a,`data-key`,n.e=r),i!==n.t&&b(o,`aria-expanded`,n.t=i),n},{e:void 0,t:void 0}),a})()}function EW(e){let t=()=>!!e.expanded[e.block.key],r=t=>e.onToggle(e.block.key,t),i=()=>e.block.items.length,a=()=>{let t=e.block;return t.running?`Using ${i()===1?t.items[0].name??`a tool`:`${i()} tools`}…`:`Used ${i()} tool${i()===1?``:`s`}${t.failed?` (${t.failed} failed)`:``}`};return(()=>{var i=dW(),o=i.firstChild,c=o.firstChild;return o.$$click=()=>r(!t()),y(o,n(l,{get when(){return e.block.running},get children(){return cW()}}),c),y(c,a),y(o,n(L,{name:`chevron`,class:`chev`}),null),y(i,n(l,{get when(){return e.block.media?.length},get children(){return n(Rn,{get images(){return e.block.media},label:`Tool images`})}}),null),y(i,n(l,{get when(){return t()},get children(){var t=uW();return y(t,n(m,{get each(){return e.block.items},children:t=>n(DW,{row:t,get sessionID(){return e.sessionID},get onDetail(){return e.onDetail},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})})),t}}),null),s(n=>{var r=`fold tools${e.block.failed?` has-failed`:``}`,a=e.block.key,s=t();return r!==n.e&&k(i,n.e=r),a!==n.t&&b(i,`data-key`,n.t=a),s!==n.a&&b(o,`aria-expanded`,n.a=s),n},{e:void 0,t:void 0,a:void 0}),i})()}function DW(e){let t=()=>!!e.expanded[`tool:${e.row.key}`],i=t=>e.onToggle(`tool:${e.row.key}`,t),[a,o]=u(!1),[c,d]=u(``),f=()=>e.row,p=()=>f().completed&&f().at?qa(f().completed-f().at):``,m=async()=>{let n=!t();if(i(n),n&&f().detail===void 0&&f().messageID&&f().partID!==void 0){o(!0),d(``);try{let t=await G(`${H(e.sessionID)}/timeline/messages/${K(f().messageID)}/parts/${K(String(f().partID))}`);e.onDetail(f().key,t.detail)}catch(e){d(U(e))}finally{o(!1)}}},h=()=>typeof f().summary==`string`?f().summary:``;return(()=>{var e=mW(),i=e.firstChild,o=i.firstChild,u=o.nextSibling,d=u.nextSibling,g=d.nextSibling;return i.$$click=m,y(o,(()=>{var e=r(()=>f().state===`running`);return()=>e()?cW():f().state===`failed`?`✕`:`✓`})()),y(u,()=>f().name??`tool`),y(d,h),y(g,p),y(e,n(l,{get when(){return t()},get children(){var e=pW();return y(e,n(l,{get when(){return!a()},get fallback(){return hW()},get children(){return n(l,{get when(){return!c()},get fallback(){return(()=>{var e=gW();return y(e,c),e})()},get children(){return n(l,{get when(){return f().detail!==void 0||h()||f().error},get fallback(){return _W()},get children(){var e=fW();return y(e,()=>nB(f().detail,{summary:h(),error:f().error})),e}})}})}})),e}}),null),s(n=>{var r=`tool ${f().state??``}`,a=t(),s=f().state??``;return r!==n.e&&k(e,n.e=r),a!==n.t&&b(i,`aria-expanded`,n.t=a),s!==n.a&&b(o,`aria-label`,n.a=s),n},{e:void 0,t:void 0,a:void 0}),e})()}z([`click`]);var OW={profilesPerUser:200,versionsPerProfile:100,skillsPerProfile:32,commandsPerProfile:64,instructionsChars:32e3,skillChars:32e3,commandChars:8e3,versionBytes:524288,projectsPerProfile:16},kW=[`pending`,`applied`,`partial`,`rejected`,`unsupported`,`restart_required`];function AW(e){if(!Fe(e))return`content must be an object`;if(e.instructions!==void 0&&!ze(e.instructions,OW.instructionsChars))return`instructions must be at most ${OW.instructionsChars} characters`;if(e.model!==void 0&&(typeof e.model!=`string`||!/^[A-Za-z0-9._-]{1,80}\/[A-Za-z0-9._:/-]{1,200}$/.test(e.model)))return`model must be provider/model`;let t=[[e.skills,OW.skillsPerProfile,OW.skillChars,`body`,`skills`],[e.commands,OW.commandsPerProfile,OW.commandChars,`template`,`commands`]];for(let[e,n,r,i,a]of t){if(!Array.isArray(e)||e.length>n)return`${a} must be a list of at most ${n}`;let t=new Set;for(let n of e){if(!Fe(n)||!Le(n.name))return`each of ${a} needs a slug name`;if(t.has(n.name))return`${a} names must be unique (${n.name})`;if(t.add(n.name),!wt(n.description,300))return`${a}.${n.name}.description must be 1–300 characters`;if(!ze(n[i],r)||n[i].trim()===``)return`${a}.${n.name}.${i} must be 1–${r} characters`}}if(new TextEncoder().encode(JSON.stringify(e)).length>OW.versionBytes)return`profile version is too large`}function jW(e){if(e===void 0)return;let t=OW.projectsPerProfile;if(!Array.isArray(e)||e.length>t||!e.every(e=>wt(e))||new Set(e).size!==e.length)return`projects must be at most ${t} unique project names`}function MW(e){return Fe(e)?Le(e.name)?wt(e.title)?e.description!==void 0&&!ze(e.description,4e3)?`description must be at most ${Et} characters`:Ee(e.tags)??Ue(e.metadata)??jW(e.projects)??AW(e.content):`title must be 1–120 characters of text`:`name must be 2–40 lowercase letters, digits or dashes`:`body must be an object`}function NW(e){return Array.isArray(e)?`[${e.map(NW).join(`,`)}]`:Fe(e)?`{${Object.keys(e).filter(t=>e[t]!==void 0).sort().map(t=>`${JSON.stringify(t)}:${NW(e[t])}`).join(`,`)}}`:JSON.stringify(e)}var PW=/^[a-z][a-z0-9_]{0,39}$/,FW=/^[A-Z][A-Z0-9_]{0,63}$/,IW=`secret:`;function LW(e){let t=[],n=``,r=0;for(;r<e.length;){if(e.startsWith(`\\{{`,r)){n+=`{{`,r+=3;continue}if(!e.startsWith(`{{`,r)){n+=e[r],r++;continue}let i=e.indexOf(`}}`,r+2);if(i<0)return`unclosed placeholder at character ${r+1}`;let a=e.slice(r+2,i).trim();if(a.startsWith(IW)){if(!FW.test(a.slice(7)))return`secret reference at character ${r+1} must be {{secret:NAME}} (uppercase letters, digits, _)`;n&&t.push({text:n}),n=``,t.push({secret:a.slice(7),raw:e.slice(r,i+2)})}else{if(!PW.test(a))return`placeholder at character ${r+1} is not a {{name}} parameter (no expression, condition or filter is allowed; write \\{{ for a literal {{)`;n&&t.push({text:n}),n=``,t.push({param:a})}r=i+2}return n&&t.push({text:n}),t}var Q=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$=e=>typeof e==`string`,RW=e=>typeof e==`number`&&Number.isFinite(e),zW=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=1,BW=e=>Array.isArray(e)?e.filter($):[];function VW(e,t){return{items:Q(e)&&Array.isArray(e.items)?e.items.map(t).filter(e=>e!==void 0):[],...Q(e)&&$(e.cursor)?{cursor:e.cursor}:{}}}function HW(e){if(Q(e)&&$(e.id)&&$(e.name)&&$(e.title)&&zW(e.latestVersion)&&RW(e.revision))return{id:e.id,name:e.name,title:e.title,...$(e.description)&&e.description?{description:e.description}:{},state:e.state===`archived`?`archived`:`active`,tags:BW(e.tags),metadata:Q(e.metadata)?Object.fromEntries(Object.entries(e.metadata).filter(e=>$(e[1]))):{},projects:BW(e.projects),latestVersion:e.latestVersion,revision:e.revision,updatedAt:RW(e.updatedAt)?e.updatedAt:0}}var UW=e=>VW(e,HW),WW=[`sessions`,`online`,`olderVersion`,`teamRoles`,`staffedSeats`,`launches`,`liveLaunches`];function GW(e){if(!Q(e))return;let t={};for(let n of WW)RW(e[n])&&(t[n]=e[n]);return Array.isArray(e.teams)&&(t.teams=BW(e.teams)),Array.isArray(e.harnesses)&&(t.harnesses=BW(e.harnesses)),t}function KW(e){if(Q(e)&&zW(e.version)&&RW(e.skills)&&RW(e.commands))return{version:e.version,skills:e.skills,commands:e.commands,instructions:e.instructions===!0}}function qW(e){let t=UW(e),n=Q(e)&&Q(e.usage)?e.usage:void 0,r=Q(e)&&Q(e.summaries)?e.summaries:void 0;return{items:t.items.map(e=>{let t=n?GW(n[e.id]):void 0,i=r?KW(r[e.id]):void 0;return{profile:e,...t?{usage:t}:{},...i?{summary:i}:{}}}),...t.cursor?{cursor:t.cursor}:{}}}var JW=e=>!!e&&((e.sessions??0)>0||(e.teamRoles??0)>0||(e.launches??0)>0);function YW(e){if(!e)return[];let t=[];e.sessions&&t.push(_n(e.sessions,`session`)),e.teamRoles&&t.push(_n(e.teamRoles,`team role`)),e.launches&&t.push(_n(e.launches,`launch`)),e.olderVersion&&t.push(`${e.olderVersion} on older version${e.olderVersion===1?``:`s`}`);let n=e.sessions!==void 0||e.teamRoles!==void 0||e.launches!==void 0;return t.length?t:n?[`Unused`]:[]}var XW=e=>[...new Set(e)].sort();function ZW(e){return{tags:XW(e.flatMap(e=>e.profile.tags)),projects:XW(e.flatMap(e=>e.profile.projects)),teams:XW(e.flatMap(e=>e.usage?.teams??[])),harnesses:XW(e.flatMap(e=>e.usage?.harnesses??[]))}}function QW(e,t){return e.filter(e=>(!t.tag||e.profile.tags.includes(t.tag))&&(!t.project||e.profile.projects.includes(t.project))&&(!t.team||(e.usage?.teams??[]).includes(t.team))&&(!t.harness||(e.usage?.harnesses??[]).includes(t.harness))&&(!t.used||t.used===`used`===JW(e.usage)))}var $W=e=>(e?.sessions??0)+(e?.teamRoles??0)+(e?.launches??0),eG=(e,t)=>e.profile.name<t.profile.name?-1:+(e.profile.name>t.profile.name);function tG(e,t){let n=[...e];return t===`updated`?n.sort((e,t)=>t.profile.updatedAt-e.profile.updatedAt||eG(e,t)):t===`usage`?n.sort((e,t)=>$W(t.usage)-$W(e.usage)||eG(e,t)):n.sort(eG)}var nG=[`sessions`,`teams`,`launches`,`workspaces`];function rG(e){if(!Q(e)||!$(e.sessionID)||!zW(e.version)||!RW(e.revision))return;let t=Q(e.effective)&&zW(e.effective.version)?e.effective.version:void 0,n=Q(e.ack)&&kW.includes(e.ack.status)?e.ack.status:void 0,r=t=>$(e[t])?{[t]:e[t]}:{};return{sessionID:e.sessionID,...r(`name`),...r(`title`),...r(`machineID`),...r(`harness`),...r(`project`),online:e.online===!0,...RW(e.lastSeen)?{lastSeen:e.lastSeen}:{},known:e.known!==!1,version:e.version,revision:e.revision,...t===void 0?{}:{running:t},olderVersion:e.olderVersion===!0,...n?{ack:n}:{},offline:Q(e.ack)&&e.ack.offline===!0}}function iG(e){if(!Q(e)||!$(e.profileID)||!zW(e.latestVersion))return;let t=e=>Array.isArray(e)?e.filter(Q):[],n=Q(e.sessions)?e.sessions:void 0;return{profileID:e.profileID,latestVersion:e.latestVersion,counts:{...GW(e.counts),...Q(e.counts)&&RW(e.counts.workspaces)?{workspaces:e.counts.workspaces}:{}},sessions:(n&&Array.isArray(n.items)?n.items:[]).flatMap(e=>rG(e)??[]),...n&&$(n.cursor)?{cursor:n.cursor}:{},teamRoles:t(e.teamRoles).filter(e=>$(e.teamID)&&$(e.role)).map(e=>({teamID:e.teamID,teamName:$(e.teamName)?e.teamName:e.teamID,teamTitle:$(e.teamTitle)?e.teamTitle:$(e.teamName)?e.teamName:e.teamID,role:e.role,...$(e.label)?{label:e.label}:{},...zW(e.version)?{version:e.version}:{},...RW(e.staffed)?{staffed:e.staffed}:{}})),launches:t(e.launches).filter(e=>$(e.id)&&$(e.state)&&zW(e.version)).map(e=>({id:e.id,state:e.state,...$(e.outcome)?{outcome:e.outcome}:{},version:e.version,...$(e.sessionID)?{sessionID:e.sessionID}:{},created:RW(e.created)?e.created:0,updated:RW(e.updated)?e.updated:0})),workspaces:t(e.workspaces).filter(e=>$(e.workspaceID)).map(e=>({workspaceID:e.workspaceID,...$(e.title)?{title:e.title}:{},sessions:RW(e.sessions)?e.sessions:0})),projects:BW(e.projects),hidden:BW(e.hidden).filter(e=>nG.includes(e)),truncated:BW(e.truncated)}}var aG=(e,t)=>t?`/teams/${encodeURIComponent(e)}`:`/watchtower?group=team&team=${encodeURIComponent(e)}`;function oG(e,t){let n={};for(let t of e){let e=t.key.trim(),r=t.value.trim();if(e||r){if(!e)return{ok:!1,error:`Each detail needs a key`};if(e in n)return{ok:!1,error:`The key ${e} is listed twice`};n[e]=r}}let r=[...new Set(t.split(`,`).map(e=>e.trim()).filter(Boolean))],i=Ue(n)??jW(r);return i?{ok:!1,error:i}:{ok:!0,patch:{metadata:Object.keys(n).length?n:null,projects:r.length?r:null}}}function sG(e){if(!Q(e)||!$(e.profileID)||!zW(e.version)||!$(e.digest))return;let t=e=>Q(e)&&$(e.name)?{name:e.name,description:$(e.description)?e.description:``}:void 0;return{profileID:e.profileID,version:e.version,digest:e.digest,createdAt:RW(e.createdAt)?e.createdAt:0,bytes:RW(e.bytes)?e.bytes:0,instructions:e.instructions===!0,...$(e.model)?{model:e.model}:{},skills:(Array.isArray(e.skills)?e.skills:[]).flatMap(e=>t(e)??[]),commands:(Array.isArray(e.commands)?e.commands:[]).flatMap(e=>{let n=t(e);return n?[{...n,params:BW(e.params)}]:[]}),secretRefs:BW(e.secretRefs)}}function cG(e){if(Q(e)&&zW(e.version)&&$(e.digest))return{version:e.version,digest:e.digest,bytes:RW(e.bytes)?e.bytes:0,createdAt:RW(e.createdAt)?e.createdAt:0}}var lG=e=>VW(e,cG);function uG(e){let t=Q(e)?e.version:void 0;if(!Q(t)||!$(t.profileID)||!zW(t.version)||!$(t.digest)||!Q(t.content))return;let n=t.content,r={...$(n.instructions)?{instructions:n.instructions}:{},...$(n.model)?{model:n.model}:{},skills:(Array.isArray(n.skills)?n.skills:[]).filter(e=>Q(e)&&$(e.name)).map(e=>({name:e.name,description:$(e.description)?e.description:``,body:$(e.body)?e.body:``})),commands:(Array.isArray(n.commands)?n.commands:[]).filter(e=>Q(e)&&$(e.name)).map(e=>({name:e.name,description:$(e.description)?e.description:``,template:$(e.template)?e.template:``}))};return{profileID:t.profileID,version:t.version,digest:t.digest,createdAt:RW(t.createdAt)?t.createdAt:0,content:r}}function dG(e){if(Q(e)&&kW.includes(e.status)&&$(e.digest))return{status:e.status,digest:e.digest,notes:BW(e.notes),at:RW(e.at)?e.at:0,offline:e.offline===!0}}function fG(e){if(Q(e)&&$(e.profileID)&&zW(e.version)&&$(e.digest)&&(e.status===`applied`||e.status===`partial`))return{profileID:e.profileID,version:e.version,digest:e.digest,status:e.status,at:RW(e.at)?e.at:0}}function pG(e){if(!Q(e)||!$(e.sessionID)||!$(e.profileID)||!zW(e.version)||!RW(e.revision))return;let t=dG(e.ack),n=fG(e.effective);return{sessionID:e.sessionID,profileID:e.profileID,version:e.version,revision:e.revision,...t?{ack:t}:{},...n?{effective:n}:{}}}function mG(e){if(!Q(e)||!(`assignment`in e))return;if(e.assignment===null)return{assignment:null};let t=pG(e.assignment);if(!t)return;let n=HW(e.profile),r=sG(e.version);return{assignment:t,...n?{profile:n}:{},...r?{version:r}:{}}}var hG={pending:`Pending`,applied:`Applied`,partial:`Partly applied`,rejected:`Rejected`,unsupported:`Unsupported`,restart_required:`Restart required`},gG={applied:`ok`,partial:`warn`,restart_required:`warn`,pending:`pending`,unsupported:`err`,rejected:`err`};function _G(e){let t=e.assignment;if(!t)return{label:`No profile`,tone:`none`,detail:`No agent profile is pinned to this session`};let n=e.profile?.name??`profile`,r=t.ack?.status??`pending`,i=t.effective?.profileID===t.profileID,a=i?t.effective?.version:void 0,o=t.effective?i?t.effective.version===t.version?``:` · running v${t.effective.version}`:` · running another profile`:``,s=e.profile&&e.profile.state===`active`&&e.profile.latestVersion>t.version?e.profile.latestVersion:void 0;return{label:`${n} v${t.version}${o}`,tone:gG[r],detail:`${e.profile?.title??n} v${t.version}: ${hG[r]}${t.ack?.offline?` (machine offline)`:``}${s?` · v${s} available`:``}`,requested:t.version,...a===void 0?{}:{effective:a},...s?{upgrade:s}:{}}}function vG(e){let t=e.assignment;if(!t)return[];let n=`v${t.version}`,r=t.ack,i=[];switch(r?.status??`pending`){case`pending`:i.push(r?.offline?`No connected machine reports this session (offline); the hub applies ${n} when it reconnects.`:`Waiting for the session's harness to confirm ${n} (a busy session answers after its current turn).`);break;case`applied`:i.push(`${n} is in effect from the next prompt.`);break;case`partial`:i.push(`${n} applied in part; the harness says what didn't:`);break;case`restart_required`:i.push(`Accepted: ${n} takes effect only after the session restarts.`);break;case`unsupported`:i.push(`This session's harness can't apply ${n}; nothing changed in the session.`);break;case`rejected`:i.push(`The session refused ${n}; nothing new took effect.`)}i.push(...r?.notes??[]);let a=t.effective;return a&&(a.profileID!==t.profileID||a.version!==t.version)&&i.push(a.profileID===t.profileID?`The session still runs v${a.version} until it confirms ${n}.`:`The session still runs another profile (v${a.version}) until it confirms this pin.`),i}var yG=`Context a session already received can't be withdrawn: unpinning stops re-applying this profile, and what was applied stays until the session restarts. A newer version supersedes earlier context; it doesn't erase it.`,bG={opencode:`OpenCode: instructions, skills and commands apply from the next turn (a busy session finishes its turn first). Commands that use secrets and the model preference are skipped; the hub re-sends the pin after an OpenCode restart.`,"claude-code":`Claude Code: instructions reach the model as hook context. Skills and commands are not applied (Claude Code loads them only at start from its own directories); the model changes only in hub-launched sessions.`,codex:`Codex: instructions apply as one context message; skills are written as session files (partial); commands are not applied, and the model preference is ignored.`},xG=e=>bG[e]??`This harness reports what took effect after you pin; presets can't apply profiles.`,SG=()=>({instructions:``,model:``,skills:[],commands:[]}),CG=e=>({instructions:e.instructions??``,model:e.model??``,skills:e.skills.map(e=>({...e})),commands:e.commands.map(e=>({...e}))});function wG(e){let t=e.instructions.trim(),n=e.model.trim(),r={...t?{instructions:t}:{},...n?{model:n}:{},skills:e.skills.map(e=>({name:e.name.trim(),description:e.description.trim(),body:e.body})),commands:e.commands.map(e=>({name:e.name.trim(),description:e.description.trim(),template:e.template}))},i=AW(r);if(i)return{ok:!1,error:i};for(let e of r.commands){let t=LW(e.template);if(typeof t==`string`)return{ok:!1,error:`commands.${e.name}: ${t}`}}return{ok:!0,content:r}}function TG(e,t){let n=wG(e);return!n.ok||NW(n.content)!==NW(t)}function EG(e,t){let n=wG(t);if(!n.ok)return n;let r=[...new Set(e.tags.split(`,`).map(e=>e.trim()).filter(Boolean))],i=e.description.trim(),a={name:e.name.trim(),title:e.title.trim(),...i?{description:i}:{},...r.length?{tags:r}:{},content:n.content},o=MW(a);return o?{ok:!1,error:o}:{ok:!0,body:a}}function DG(e){let t=LW(e);if(typeof t==`string`)return{error:t};let n=[],r=[];for(let e of t)`param`in e&&!n.includes(e.param)&&n.push(e.param),`secret`in e&&!r.includes(e.secret)&&r.push(e.secret);return{params:n,secrets:r}}var OG=4e3;function kG(e,t){let n={};for(let r of e){let e=t[r]??``;if(e.length>4e3)return{ok:!1,error:`${r} must be at most ${OG} characters`};n[r]=e}return{ok:!0,body:{params:n}}}function AG(e,t){let n=t.trim().replace(/^\//,``).toLowerCase();if(!n)return[...e];let r=e=>e.name.toLowerCase().startsWith(n)?0:e.name.toLowerCase().includes(n)?1:e.description.toLowerCase().includes(n)?2:3;return e.map((e,t)=>({c:e,i:t,r:r(e)})).filter(e=>e.r<3).sort((e,t)=>e.r-t.r||e.i-t.i).map(e=>e.c)}var jG=`Control+Alt+P`,MG=e=>e.ctrlKey&&e.altKey&&!e.metaKey&&!e.shiftKey&&e.code===`KeyP`,NG=(e,t)=>e?e.endsWith(`
|
|
31
|
-
`)?e+t:`${e}\n${t}`:t,PG=(e,t,n)=>({profileID:e,version:t,expectedRevision:n.assignment?.revision??0});function FG(e,t,n){let r=e.assignment;return r?r.profileID===t?n>r.version?{kind:`upgrade`,label:`Upgrade to v${n}`}:n<r.version?{kind:`rollback`,label:`Roll back to v${n}`}:{kind:`same`,label:`Re-apply v${n}`}:{kind:`switch`,label:`Switch to v${n}`}:{kind:`pin`,label:`Pin v${n}`}}var IG=e=>!!e.assignment&&(e.assignment.ack?.status??`pending`)===`pending`,LG=15e3,RG=16,zG=e=>e>=RG?void 0:Math.min(LG,1e3*2**e);function BG(e){let t=e,n=t?.message??String(e);switch(t?.code){case`conflict`:return`Changed elsewhere meanwhile${RW(t.details?.currentRevision)?` (now revision ${t.details.currentRevision})`:``}. Reloaded: check and try again. (${n})`;case`unsupported`:return`Not supported: ${n}`;case`offline`:return`The session's machine is offline: ${n}`;case`forbidden`:return`Not allowed: ${n}`;case`not_found`:return`Not found: ${n}`}return t?.status===503?`The session's machine is offline: ${n}`:n}var VG=encodeURIComponent,HG=`/api/agent`,UG={list:(e=`active`,t=!0)=>`${HG}/profiles?state=${e}&limit=200${t?`&include=usage,summary`:``}`,usage:(e,t)=>`${HG}/profiles/${VG(e)}/usage?limit=200${t?`&cursor=${VG(t)}`:``}`,create:()=>`${HG}/profiles`,one:e=>`${HG}/profiles/${VG(e)}`,versions:e=>`${HG}/profiles/${VG(e)}/versions`,version:(e,t)=>`${HG}/profiles/${VG(e)}/versions/${t}`,session:e=>`${HG}/sessions/${VG(e)}/profile`,unpin:(e,t)=>`${HG}/sessions/${VG(e)}/profile?expectedRevision=${t}`,render:(e,t)=>`${HG}/sessions/${VG(e)}/profile/commands/${VG(t)}/render`},WG=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,GG=async e=>e.json().catch(()=>({})),KG=async(e=`active`)=>UW(await G(UG.list(e,!1))),qG=async(e=`active`)=>qW(await G(UG.list(e)));async function JG(e,t){let n=iG(await G(UG.usage(e,t)));if(!n)throw Error(`The hub sent an unreadable usage answer`);return n}async function YG(e,t){let n=HW((await GG(await V(UG.one(e.id),{method:`PATCH`,json:{expectedRevision:e.revision,...t}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function XG(e){let t=await G(UG.one(e)),n=HW(t.profile);if(!n)throw Error(`The hub sent an unreadable profile`);return{profile:n,latest:sG(t.latest)}}var ZG=async e=>lG(await G(`${UG.versions(e)}?limit=200`));async function QG(e,t){let n=uG(await G(UG.version(e,t)));if(!n)throw Error(`The hub sent an unreadable version`);return n}async function $G(e,t){let n=HW((await GG(await V(UG.create(),{method:`POST`,json:e,headers:{"idempotency-key":t}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function eK(e,t,n){let r=HW((await GG(await V(UG.versions(e),{method:`POST`,json:t,headers:{"idempotency-key":n}}))).profile);if(!r)throw Error(`The hub sent an unreadable profile`);return r}async function tK(e,t){let n=HW((await GG(await V(UG.one(e.id),{method:`PATCH`,json:{expectedRevision:e.revision,state:t?`archived`:`active`}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function nK(e){let t=mG(await G(UG.session(e)));if(!t)throw Error(`The hub sent an unreadable profile pin`);return t}async function rK(e,t){await V(UG.session(e),{method:`PUT`,json:t})}async function iK(e,t){await V(UG.unpin(e,t),{method:`DELETE`})}async function aK(e,t,n){let r=await GG(await V(UG.render(e,t),{method:`POST`,json:n}));if(typeof r.prompt!=`string`)throw Error(`The hub sent no rendered text`);return{prompt:r.prompt,secretRefs:Array.isArray(r.secretRefs)?r.secretRefs.filter(e=>typeof e==`string`):[]}}var oK=I(`<p class="error small"role=alert>`),sK=I(`<input type=search role=combobox aria-label="Search commands"aria-controls=prof-commands aria-expanded=true placeholder="Type a command…"autofocus>`),cK=I(`<ul class=prof-commands id=prof-commands role=listbox aria-label=Commands>`),lK=I(`<p class=prof-note>Inserted text goes into this session's composer; review it, then send.`),uK=I(`<p class="muted small">No profile is pinned to this session, so it has no commands. Pin one from the session's profile chip.`),dK=I(`<p class="muted small">Loading commands…`),fK=I(`<p class="muted small">`),pK=I(`<li role=option class=prof-command><strong>/</strong><span class=prof-sub>`),mK=I(`<p class=prof-secret>Uses secret <!> (name only). The console never asks for or sees its value; the session's machine resolves it only when the harness runs the command itself. Inserted text keeps <code></code> as written.`),hK=I(`<form class=stack><p><strong>/</strong> <span class="muted small"></span></p><div class=row><button type=submit class="btn small primary">Insert into composer</button><button type=button class="btn small">Back`),gK=I(`<label><textarea>`);function _K(e){let t=e.view.assignment,[i]=d(async()=>{if(!t)return[];let n=e.view.version?.commands??[];try{return(await QG(t.profileID,t.version)).content.commands.map(e=>{let t=DG(e.template);return{name:e.name,description:e.description,params:`error`in t?[]:t.params,secrets:`error`in t?[]:t.secrets}})}catch{return n.map(e=>({...e,secrets:[]}))}}),[a,o]=u(``),[c,f]=u(0),[p,h]=u(),[g,_]=u({}),[v,x]=u(``),[S,w]=u(!1),T=C(()=>AG(i()??[],a())),E=e=>{e&&(h(e),_({}),x(``),e.params.length?requestAnimationFrame(()=>document.querySelector(`.prof-palette [data-param]`)?.focus()):D(e))},D=async t=>{let n=kG(t.params,g());if(!n.ok)return x(n.error);w(!0),x(``);try{let{prompt:r}=await aK(e.sessionID,t.name,n.body);ax.set(e.sessionID,NG(ax.get(e.sessionID),r)),e.onInserted()}catch(e){x(BG(e))}finally{w(!1)}},O=e=>{let t=T().length;e.key===`ArrowDown`&&t?(e.preventDefault(),f((c()+1)%t)):e.key===`ArrowUp`&&t?(e.preventDefault(),f((c()-1+t)%t)):e.key===`Enter`&&(e.preventDefault(),E(T()[c()]))},k=t=>`prof-cmd-${e.sessionID}-${t}`;return n(de,{open:!0,get title(){return`Commands · ${e.title}`},get onClose(){return e.onClose},class:`prof-dialog prof-palette`,get children(){return[n(l,{get when(){return p()},get fallback(){return n(l,{when:t,get fallback(){return uK()},get children(){return[(()=>{var e=sK();return e.$$keydown=O,e.$$input=e=>(o(e.currentTarget.value),f(0)),s(()=>b(e,`aria-activedescendant`,T().length?k(c()):void 0)),s(()=>e.value=a()),e})(),n(l,{get when(){return i()},get fallback(){return dK()},get children(){return n(l,{get when(){return T().length},get fallback(){return(()=>{var n=fK();return y(n,(()=>{var n=r(()=>!!i().length);return()=>n()?`No command matches.`:`${e.view.profile?.name??`This profile`} v${t.version} has no commands.`})()),n})()},get children(){var e=cK();return y(e,n(m,{get each(){return T()},children:(e,t)=>(()=>{var n=pK(),i=n.firstChild;i.firstChild;var a=i.nextSibling;return n.addEventListener(`pointerenter`,()=>f(t())),n.$$click=()=>E(e),y(i,()=>e.name,null),y(a,()=>e.description,null),y(a,(()=>{var t=r(()=>!!e.params.length);return()=>t()?` · asks for ${e.params.join(`, `)}`:``})(),null),y(a,(()=>{var t=r(()=>!!e.secrets.length);return()=>t()?` · uses secret ${e.secrets.join(`, `)}`:``})(),null),s(e=>{var r=k(t()),i=t()===c();return r!==e.e&&b(n,`id`,e.e=r),i!==e.t&&b(n,`aria-selected`,e.t=i),e},{e:void 0,t:void 0}),n})()})),e}})}}),lK()]}})},children:e=>(()=>{var t=hK(),r=t.firstChild,i=r.firstChild;i.firstChild;var a=i.nextSibling.nextSibling,o=r.nextSibling,c=o.firstChild,u=c.nextSibling;return t.addEventListener(`submit`,t=>(t.preventDefault(),void D(e()))),y(i,()=>e().name,null),y(a,()=>e().description),y(t,n(m,{get each(){return e().params},children:e=>(()=>{var t=gK(),n=t.firstChild;return y(t,e,n),n.$$input=t=>_({...g(),[e]:t.currentTarget.value}),b(n,`data-param`,e),b(n,`rows`,e===`arguments`?3:1),s(()=>n.value=g()[e]??``),t})()}),o),y(t,n(l,{get when(){return e().secrets.length},get children(){var t=mK(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return y(t,()=>e().secrets.join(`, `),n),y(r,()=>`{{secret:${e().secrets[0]}}}`),t}}),o),y(t,n(l,{get when(){return v()},get children(){var e=oK();return y(e,v),e}}),o),u.$$click=()=>h(void 0),s(()=>c.disabled=S()),t})()}),n(l,{get when(){return r(()=>!p())()&&v()},get children(){var e=oK();return y(e,v),e}})]}})}z([`input`,`keydown`,`click`]);var vK=I(`<span class=prof-up aria-hidden=true>↑v`),yK=I(`<button type=button>`),bK=I(`<section aria-label="Pinned profile"><h3>Pinned`),xK=I(`<label>Profile<select aria-label=Profile>`),SK=I(`<label>Version<select aria-label=Version>`),CK=I(`<div class=row><button type=button class="btn small primary">`),wK=I(`<section aria-label="Pin a profile"><h3></h3><p class=prof-note>`),TK=I(`<p class="error small"role=alert>`),EK=I(`<p class="muted small">No profile is pinned to this session.`),DK=I(`<div class=prof-status><span></span><strong class=small>`),OK=I(`<ul class=prof-guidance aria-label="What took effect">`),kK=I(`<p class=prof-note>`),AK=I(`<div class=row><button type=button class="btn small">Unpin</button><button type=button class="btn small">Commands… (Ctrl+Alt+P)`),jK=I(`<li>`),MK=I(`<div class=prof-upgrade><span>v<!> of <!> is available. This session stays on v<!> until you upgrade it.</span><button type=button class="btn small primary">Upgrade to v`),NK=I(`<p class="muted small">`),PK=I(`<p class="muted small">No active profiles. Create one under Agent profiles (/profiles).`),FK=I(`<option> (<!>)`),IK=I(`<option>v`),LK=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`this session`};function RK(e){let[i,a]=u(),[o,c]=u(!0),[d,f]=u(!1),[p,m]=u(!1),h,g,_=0,v=!0,x=async()=>{try{let t=await nK(e.sessionID);if(!v)return;a(t),c(!0),S()}catch(e){if(!v)return;e instanceof W&&(e.status===404||e.status===403)&&c(!1)}},S=()=>{clearTimeout(g);let e=i();if(!e||!IG(e))return void(_=0);let t=zG(_++);t!==void 0&&(g=setTimeout(()=>void x(),t))},C=async()=>{_=0,await x()};fe(()=>void x()),M(()=>{v=!1,clearTimeout(g)}),fe(()=>{let t=t=>{MG(t)&&e.takesInput()&&o()&&i()&&(t.preventDefault(),m(!0))};document.addEventListener(`keydown`,t),M(()=>document.removeEventListener(`keydown`,t))});let w=()=>_G(i()??{assignment:null}),T=()=>h?.closest(`.session-layout`)?.querySelector(`textarea[aria-label="Message"]`)?.focus();return n(l,{get when(){return r(()=>!!o())()&&i()},get children(){return[(()=>{var e=yK();e.$$click=()=>{f(!0),x()};var a=h;return typeof a==`function`?t(a,e):h=e,b(e,`aria-keyshortcuts`,jG),y(e,(()=>{var e=r(()=>!!i().assignment);return()=>e()?w().label:`Profile`})(),null),y(e,n(l,{get when(){return w().upgrade},get children(){var e=vK();return e.firstChild,y(e,()=>w().upgrade,null),e}}),null),s(t=>{var n=`prof-chip ${w().tone}`,r=i().assignment?.ack?.status??`none`,a=`${w().detail}. Commands: ${jG}`,o=i().assignment?`Agent profile: ${w().label}, ${hG[i().assignment.ack?.status??`pending`]}${w().upgrade?`, v${w().upgrade} available`:``}`:`Agent profile: none`;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`data-profile-status`,t.t=r),a!==t.a&&b(e,`title`,t.a=a),o!==t.o&&b(e,`aria-label`,t.o=o),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),n(l,{get when(){return d()},get children(){return n(zK,{get sessionID(){return e.sessionID},get harness(){return e.harness},get view(){return i()},onClose:()=>f(!1),onChanged:()=>void C(),onCommands:()=>{f(!1),m(!0)}})}}),n(l,{get when(){return p()},get children(){return n(_K,{get sessionID(){return e.sessionID},get title(){return LK(e.sessionID)},get view(){return i()},onClose:()=>m(!1),onInserted:()=>{m(!1),requestAnimationFrame(T)}})}})]}})}function zK(t){let[i]=d(()=>KG(`active`).then(e=>e.items)),[a,o]=u(t.view.assignment?.profileID??``),[c,f]=u(0),[p,h]=u(``),[g,_]=u(!1);x(()=>{let e=i.error?void 0:i();e?.length&&!e.some(e=>e.id===a())&&o(e[0].id)});let[v]=d(()=>a()||void 0,e=>ZG(e).then(e=>e.items));x(e([()=>v.error?void 0:v(),()=>t.view.assignment?.profileID,()=>t.view.assignment?.version],([e])=>{if(!e?.length)return;let n=t.view.assignment;f(n&&n.profileID===a()&&e.some(e=>e.version===n.version)?n.version:e[0].version)}));let S=()=>_G(t.view),C=()=>vG(t.view),w=()=>FG(t.view,a(),c()),T=async(e,n,r)=>{_(!0),h(``);try{await rK(t.sessionID,PG(e,n,t.view)),q(r),t.onChanged()}catch(e){h(BG(e)),t.onChanged()}finally{_(!1)}},E=async()=>{let e=t.view.assignment;if(e){_(!0),h(``);try{await iK(t.sessionID,e.revision),q(`Unpinned. What the session already applied stays until it restarts.`),t.onChanged()}catch(e){h(BG(e)),t.onChanged()}finally{_(!1)}}};return n(de,{open:!0,get title(){return`Agent profile · ${LK(t.sessionID)}`},get onClose(){return t.onClose},class:`prof-dialog`,get children(){return[(()=>{var e=bK();return e.firstChild,y(e,n(l,{get when(){return t.view.assignment},get fallback(){return EK()},children:e=>[(()=>{var t=DK(),n=t.firstChild,r=n.nextSibling;return y(n,()=>S().label),y(r,()=>hG[e().ack?.status??`pending`],null),y(r,()=>e().ack?.offline?` · machine offline`:``,null),s(t=>{var i=`prof-chip ${S().tone}`,a=e().ack?.status??`pending`;return i!==t.e&&k(n,t.e=i),a!==t.t&&b(r,`data-ack`,t.t=a),t},{e:void 0,t:void 0}),t})(),(()=>{var e=OK();return y(e,n(m,{get each(){return C()},children:e=>(()=>{var t=jK();return y(t,e),t})()})),e})(),n(l,{get when(){return S().upgrade},children:n=>(()=>{var r=MK(),i=r.firstChild,a=i.firstChild.nextSibling,o=a.nextSibling.nextSibling,c=o.nextSibling.nextSibling;c.nextSibling;var l=i.nextSibling;return l.firstChild,y(i,n,a),y(i,()=>t.view.profile?.name??`this profile`,o),y(i,()=>e().version,c),l.$$click=()=>void T(e().profileID,n(),`Upgrading to v${n()}…`),y(l,n,null),s(()=>l.disabled=g()),r})()}),(()=>{var e=kK();return y(e,yG),e})(),(()=>{var e=AK(),n=e.firstChild,r=n.nextSibling;return n.$$click=()=>void E(),B(r,`click`,t.onCommands,!0),b(r,`aria-keyshortcuts`,jG),s(()=>n.disabled=g()),e})()]}),null),e})(),(()=>{var e=wK(),u=e.firstChild,d=u.nextSibling;return y(u,()=>t.view.assignment?`Change the pin`:`Pin a profile`),y(d,()=>xG(t.harness)),y(e,n(l,{get when(){return r(()=>!i.error)()&&i()},get fallback(){return(()=>{var e=NK();return y(e,(()=>{var e=r(()=>!!i.error);return()=>e()?BG(i.error):`Loading profiles…`})()),e})()},get children(){return n(l,{get when(){return i().length},get fallback(){return PK()},get children(){return[(()=>{var e=xK(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>o(e.currentTarget.value)),y(t,n(m,{get each(){return i()},children:e=>(()=>{var t=FK(),n=t.firstChild,r=n.nextSibling;return r.nextSibling,y(t,()=>e.title,n),y(t,()=>e.name,r),s(()=>t.value=e.id),t})()})),s(()=>t.value=a()),e})(),(()=>{var e=SK(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>f(Number(e.currentTarget.value))),y(t,n(m,{get each(){return r(()=>!!v.error)()?[]:v()??[]},children:(e,t)=>(()=>{var n=IK();return n.firstChild,y(n,()=>e.version,null),y(n,()=>t()===0?` (latest)`:``,null),s(()=>n.value=String(e.version)),n})()})),s(()=>t.disabled=!!v.error||!v()),s(()=>t.value=String(c())),e})(),(()=>{var e=CK(),t=e.firstChild;return t.$$click=()=>void T(a(),c(),`${w().label}: sent to the session`),y(t,()=>w().label),s(()=>t.disabled=g()||!a()||!c()),e})()]}})}}),null),s(()=>b(d,`data-harness`,t.harness)),e})(),n(l,{get when(){return p()},get children(){var e=TK();return y(e,p),e}})]}})}z([`click`]);var BK=10;function VK(e){let t=e?.harness||`opencode`,n=new Set(e?.features??[]),r=(e,r)=>n.has(e)?{enabled:!0}:t===`opencode`?{enabled:!1,reason:`${r} needs a newer Hub plugin, or an OpenCode process that reaches its own server`}:{enabled:!1,reason:`${r} is not supported for ${bz(t)} sessions yet`};return{fork:r(`fork`,`Fork`),revert:r(`revert`,`Revert`)}}var HK=e=>Number.isSafeInteger(e)&&e>=0?e:0;function UK(e){let t=e?.revert;if(!t||typeof t!=`object`||typeof t.messageID!=`string`||!t.messageID)return;let n=Array.isArray(t.files)?t.files.filter(e=>!!e&&typeof e.file==`string`):[];return{messageID:t.messageID,hidden:HK(t.hidden),...typeof t.at==`number`&&Number.isFinite(t.at)?{at:t.at}:{},files:n,filesTotal:Math.max(HK(t.filesTotal),n.length),...WK(t.stagedAt)?{stagedAt:t.stagedAt}:{}}}var WK=e=>typeof e==`number`&&Number.isFinite(e);function GK(e){let t=e?.revertCommitted;if(t&&typeof t==`object`&&typeof t.messageID==`string`&&t.messageID&&WK(t.until)&&WK(t.at))return{messageID:t.messageID,...WK(t.from)?{from:t.from}:{},until:t.until,at:t.at}}function KK(e){let t=GK(e);return`${UK(e)?.messageID??``}|${t?`${t.messageID}@${t.at}`:``}`}function qK(e){let t=Math.max(e.filesTotal,e.files.length);return{text:`${_n(e.hidden,`message`)} reverted`,...t?{files:`${_n(t,`file`)} restored`}:{}}}function JK(e){let t=Math.max(e.filesTotal,e.files.length);if(!t)return;let n=e.files.slice(0,BK).map(e=>e.file),r=t-n.length;return[`Revert ${_n(e.hidden,`message`)}?`,``,`The session changed ${_n(t,`file`)} since then; ${t===1?`it goes`:`they go`} back to how ${t===1?`it was`:`they were`}:`,n.join(`
|
|
30
|
+
`)){let e=pV.exec(a);if(e)n=Number(e[1]),r=Number(e[2]),i=!0,t.push({type:`hunk`,text:a});else if(!i||a.startsWith(`\\`))a&&t.push({type:`meta`,text:a});else if(a.startsWith(`+`))t.push({type:`add`,text:a.slice(1),newNo:r++});else if(a.startsWith(`-`))t.push({type:`del`,text:a.slice(1),oldNo:n++});else if(a.startsWith(` `)||a===``){if(a===``&&t.length&&t[t.length-1].type!==`context`)continue;t.push({type:`context`,text:a.slice(1),oldNo:n++,newNo:r++})}else i=!1,t.push({type:`meta`,text:a})}return t}var hV=new Set([`user`,`launch`,`self`,`prompt`,`title`]),gV=e=>`/api/agent/sessions/${encodeURIComponent(e)}/intent`,_V=e=>e.replace(/\s+/g,` `).trim();function vV(e){let t=Array.from(_V(e)).length;if(t===0)return`Say what this session is for, or clear it.`;if(t>280)return`At most 280 characters (${t} now).`}var yV=(e,t)=>({text:e===null?null:_V(e),expectedRevision:t});function bV(e){if(e?.source===`user`)return{text:null,expectedRevision:e.revision};if(e?.source===`prompt`)return{source:`prompt`,text:null,expectedRevision:e.revision}}function xV(e){switch(e.source){case`user`:return e.by?.startsWith(`app:`)?`Set by an app`:`Set by you`;case`launch`:return`From the launch`;case`self`:return`Set by the session`;case`prompt`:return`From the first prompt`;default:return`From the title`}}function SV(e){let t=e&&typeof e==`object`?e.intent:void 0;if(!t||typeof t!=`object`)return null;let n=t;return typeof n.sessionID!=`string`||typeof n.text!=`string`||typeof n.source!=`string`||!hV.has(n.source)||typeof n.revision!=`number`||typeof n.updatedAt!=`number`||n.by!==void 0&&typeof n.by!=`string`?null:{sessionID:n.sessionID,text:n.text,source:n.source,revision:n.revision,updatedAt:n.updatedAt,...typeof n.by==`string`?{by:n.by}:{}}}function CV(e,t={}){return e.status===409||e.code===`conflict`?t.loaded===!1?{text:`The current intent could not be loaded, so nothing was saved: Retry, then edit again.`,reload:!0}:{text:`It changed meanwhile: here is the latest. Edit again to change it.`,reload:!0}:{text:e.message,reload:!1}}function wV(e,t,n){return e.type===`intent`&&e.sessionID===t&&e.revision!==n}var TV=I(`<div class=field><label class=field-label>What is this session for?</label><input type=text><div class=row><button type=button class="btn small primary">Save</button><button type=button class="btn small">Cancel`),EV=I(`<div class=intent-field>`),DV=I(`<button type=button class="btn small">Retry`),OV=I(`<button type=button class="btn small">Clear`),kV=I(`<div class=row><button type=button class="btn small">Edit`),AV=I(`<p class="muted small intent-error">Could not load the intent.`),jV=I(`<p class="muted small">Loading…`),MV=I(`<p class="muted small">No intent yet.`),NV=I(`<p class="small intent-text">`),PV=I(`<p class="muted small">`),FV=I(`<p class=field-error>`);function IV(e){let[i,{refetch:a,mutate:o}]=d(()=>e.sessionID,async e=>SV(await G(gV(e)))),[c,f]=u(!1),[p,m]=u(``),[h,g]=u(!1),[_,v]=u(``),x=()=>vV(p()),S=()=>i.error?void 0:i.loading?i.latest:i();M(hu(t=>{!c()&&wV(t,e.sessionID,S()?.revision)&&a()}));let C=()=>{m(S()?.source===`title`?``:S()?.text??``),v(``),f(!0)},w=async t=>{if(h()||t!==null&&x())return;let n=t===null?bV(S()):yV(t,S()?.revision??0);if(n){g(!0),v(``);try{let t=SV(await(await V(gV(e.sessionID),{method:`PUT`,json:n})).json());i.error?a():o(t),f(!1)}catch(e){let t=CV(e instanceof W?{status:e.status,...e.code?{code:e.code}:{},message:e.message}:{message:U(e)},{loaded:!i.error});v(t.text),t.reload&&(f(!1),a())}finally{g(!1)}}};return(()=>{var o=EV();return y(o,n(l,{get when(){return c()},get fallback(){return[n(l,{get when(){return!i.error},get fallback(){return AV()},get children(){return n(l,{get when(){return!i.loading||S()},get fallback(){return jV()},get children(){return n(l,{get when(){return S()},get fallback(){return MV()},children:e=>[(()=>{var t=NV();return y(t,()=>e().text),t})(),(()=>{var t=PV();return y(t,()=>xV(e())),t})()]})}})}}),(()=>{var e=kV(),t=e.firstChild;return t.$$click=C,y(e,n(l,{get when(){return i.error},get children(){var e=DV();return e.$$click=()=>void a(),e}}),null),y(e,n(l,{get when(){return bV(S())},get children(){var e=OV();return e.$$click=()=>void w(null),s(t=>{var n=h(),r=S()?.source===`prompt`?`Not what this session is for: clear it (the title shows instead)`:`Clear your intent`;return n!==t.e&&(e.disabled=t.e=n),r!==t.t&&b(e,`title`,t.t=r),t},{e:void 0,t:void 0}),e}}),null),s(()=>t.disabled=i.loading&&!i.error),e})()]},get children(){var i=TV(),a=i.firstChild,o=a.nextSibling,c=o.nextSibling,u=c.firstChild,d=u.nextSibling;return t(e=>queueMicrotask(()=>e.focus()),o),o.$$keydown=e=>{e.key===`Enter`&&w(p()),e.key===`Escape`&&f(!1)},o.$$input=e=>m(e.currentTarget.value),b(o,`maxlength`,560),y(i,n(l,{get when(){return r(()=>!!p())()&&x()},children:e=>(()=>{var t=FV();return y(t,e),t})()}),c),u.$$click=()=>void w(p()),d.$$click=()=>f(!1),s(t=>{var n=`intent-${e.sessionID}`,r=`intent-${e.sessionID}`,i=h()||!!x(),s=h();return n!==t.e&&b(a,`for`,t.e=n),r!==t.t&&b(o,`id`,t.t=r),i!==t.a&&(u.disabled=t.a=i),s!==t.o&&(d.disabled=t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),s(()=>o.value=p()),i}}),null),y(o,n(l,{get when(){return _()},children:e=>(()=>{var t=FV();return y(t,e),t})()}),null),o})()}z([`input`,`keydown`,`click`]);var LV=e=>`/api/agent/subscriptions?session=${encodeURIComponent(e)}`,RV=e=>`/api/agent/subscriptions/${encodeURIComponent(e)}`,zV=e=>typeof e==`string`,BV=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function VV(e){let t=e;if(t&&typeof t==`object`){if(t.kind===`children`)return{kind:`children`};if(t.kind===`session`&&zV(t.sessionID)&&zV(t.addr))return{kind:`session`,sessionID:t.sessionID,addr:t.addr};if((t.kind===`role`||t.kind===`team`)&&zV(t.addr))return{kind:t.kind,addr:t.addr}}}function HV(e){let t=e?.subscriptions;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=e;if(!t||typeof t!=`object`||!zV(t.id)||!zV(t.subscriber)||!Array.isArray(t.targets)||!Array.isArray(t.types))continue;let r=t.stats??{};n.push({id:t.id,subscriber:t.subscriber,targets:t.targets.map(VV).filter(e=>e!==void 0),types:t.types.filter(zV),delivery:zV(t.delivery)?t.delivery:`queue`,batchMs:BV(t.batchMs),expiresAt:BV(t.expiresAt),pending:BV(t.pending),stats:{delivered:BV(r.delivered),dropped:BV(r.dropped),suppressed:BV(r.suppressed)}})}return n}function UV(e,t){return{listensTo:e.filter(e=>e.subscriber===t),listenedBy:e.filter(e=>e.subscriber!==t)}}function WV(e){if(e<=0)return`ending`;let t=Math.round(e/6e4);if(t<60)return`${Math.max(t,1)} min`;let n=Math.round(e/36e5);return n<48?`${n} h`:`${Math.round(e/864e5)} d`}function GV(e,t){let n=e.targets.map(e=>e.kind===`children`?`its subagents`:e.addr).join(`, `)||`—`,r=[e.types.join(`, `),e.delivery,`every ${Math.round(e.batchMs/1e3)} s`,`${e.stats.delivered} sent`];return e.pending&&r.push(`${e.pending} pending`),e.stats.dropped&&r.push(`${e.stats.dropped} dropped`),e.stats.suppressed&&r.push(`${e.stats.suppressed} loop-suppressed`),r.push(`ends in ${WV(e.expiresAt-t)}`),{title:n,detail:r.join(` · `)}}var KV=I(`<ul class=subscription-list>`),qV=I(`<li class=subscription><div class=subscription-text><span class=small></span><span class="muted small"></span></div><button type=button class="btn small">Remove`),JV=I(`<p class="small subscription-head">Listens to`),YV=I(`<p class="small subscription-head">Listened to by`),XV=I(`<div class=subscriptions-field><div class=row><button type=button class="btn small">Refresh`),ZV=I(`<p class="muted small">Could not load the subscriptions.`),QV=I(`<p class="muted small">Loading…`),$V=I(`<p class="muted small">None. An agent follows other sessions with hub subscribe.`);function eH(e){let[t,{refetch:r}]=d(()=>e.sessionID,async e=>HV(await G(LV(e)))),[i,a]=u(``),o=()=>UV(t.error?[]:t.latest??[],e.sessionID),c=async e=>{if(!i()){a(e.id);try{await V(RV(e.id),{method:`DELETE`}),q(`Subscription removed`),r()}catch(e){q(`Could not remove the subscription: ${U(e)}`,`err`)}finally{a(``)}}},f=e=>(()=>{var t=KV();return y(t,n(m,{get each(){return e.items},children:t=>{let n=()=>GV(t,Date.now());return(()=>{var r=qV(),a=r.firstChild,o=a.firstChild,l=o.nextSibling,u=a.nextSibling;return y(o,()=>e.who(t)),y(l,()=>n().detail),u.$$click=()=>void c(t),s(e=>{var n=t.id,a=i()===t.id,o=`Remove subscription ${t.id}`;return n!==e.e&&b(r,`data-subscription`,e.e=n),a!==e.t&&(u.disabled=e.t=a),o!==e.a&&b(u,`aria-label`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),r})()}})),t})();return(()=>{var e=XV(),i=e.firstChild,a=i.firstChild;return y(e,n(l,{get when(){return!t.error},get fallback(){return ZV()},get children(){return n(l,{get when(){return!t.loading||t.latest},get fallback(){return QV()},get children(){return n(l,{get when(){return o().listensTo.length||o().listenedBy.length},get fallback(){return $V()},get children(){return[n(l,{get when(){return o().listensTo.length},get children(){return[JV(),n(f,{get items(){return o().listensTo},who:e=>GV(e,Date.now()).title})]}}),n(l,{get when(){return o().listenedBy.length},get children(){return[YV(),n(f,{get items(){return o().listenedBy},who:e=>e.subscriber})]}})]}})}})}}),i),a.$$click=()=>void r(),s(()=>a.disabled=t.loading),e})()}z([`click`]);var tH=I(`<div class=context-cards>`),nH=I(`<p class="muted small">Could not load the context cards. <button type=button class="btn small">Retry`),rH=I(`<p class="muted small">Loading…`),iH=I(`<p class="muted small context-cards-off">`),aH=I(`<article><header class=context-card-head><span class=context-card-title></span><button type=button class="btn small">`),oH=I(`<p class="muted small">No card yet.`),sH=I(`<p class=context-card-headline>`),cH=I(`<p class="small context-card-body">`),lH=I(`<dl class="kv context-card-fields">`),uH=I(`<p class="muted small context-card-meta">`),dH=I(`<dt>`),fH=I(`<dd>`),pH=I(`<p class="muted small context-card-note">`);function mH(e){let[t,{refetch:r}]=d(()=>e.sessionID,async e=>{let t=pk(await G(ik(e)));for(let e of t.cards)Tk(e);return t}),[i,a]=u(),[o,s]=u({});M(hu(t=>{vk(t,e.sessionID)&&r()}));let c=()=>t.error?void 0:t.loading?t.latest:t(),f=e=>c()?.cards.find(t=>t.provider===e),p=async t=>{if(!i()){a(t),s(e=>({...e,[t]:``}));try{let n=await V(ak(e.sessionID,t),{method:`POST`}).catch(e=>{if(!(e instanceof W&&e.status===429))throw e}),i=n?await n.json():{outcome:`skipped`,reason:`rate_limited`},a=_k(i),o=fk(i.card);o&&Tk(o),s(e=>({...e,[t]:a??``})),await r()}catch(e){s(n=>({...n,[t]:U(e)}))}finally{a(void 0)}}};return(()=>{var e=tH();return y(e,n(l,{get when(){return!t.error},get fallback(){return(()=>{var e=nH(),t=e.firstChild.nextSibling;return t.$$click=()=>void r(),e})()},get children(){return n(l,{get when(){return c()},get fallback(){return rH()},children:e=>[n(l,{get when(){return!e().enabled},get children(){var t=iH();return y(t,()=>e().configured?`Context cards are off. Turn them on in Settings › Concierge (nothing is sent to a model until you do).`:`No model is configured for context cards (see docs/context-cards.md).`),t}}),n(m,{get each(){return e().providers},children:e=>n(hH,{provider:e,get card(){return f(e.id)},get busy(){return i()===e.id},get disabled(){return!!i()},get note(){return o()[e.id]},onRefresh:()=>void p(e.id)})})]})}})),e})()}function hH(e){return(()=>{var t=aH(),r=t.firstChild.firstChild,i=r.nextSibling;return y(r,()=>e.card?.title??e.provider.label),i.$$click=()=>e.onRefresh(),y(i,()=>e.busy?`Refreshing…`:`Refresh`),y(t,n(l,{get when(){return e.card},get fallback(){return oH()},children:e=>[(()=>{var t=sH();return y(t,()=>e().headline),t})(),n(l,{get when(){return e().body},get children(){var t=cH();return y(t,()=>e().body),t}}),n(l,{get when(){return e().fields?.length},get children(){var t=lH();return y(t,n(m,{get each(){return e().fields},children:e=>[(()=>{var t=dH();return y(t,()=>e.label),t})(),(()=>{var t=fH();return y(t,()=>e.value),t})()]})),t}}),(()=>{var t=uH();return y(t,()=>hk(e(),N())),t})()]}),null),y(t,n(l,{get when(){return e.note},children:e=>(()=>{var t=pH();return y(t,e),t})()}),null),s(n=>{var r=`context-card${e.provider.primary?` primary`:``}`,a=e.provider.id,o=e.busy,s=e.disabled,c=`Refresh ${e.provider.label}`;return r!==n.e&&k(t,n.e=r),a!==n.t&&b(t,`data-context-card`,n.t=a),o!==n.a&&b(t,`aria-busy`,n.a=o),s!==n.o&&(i.disabled=n.o=s),c!==n.i&&b(i,`title`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t})()}z([`click`]);var gH=e=>Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`):[],_H=e=>typeof e==`string`?e:``,vH=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,yH=new Set([`working`,`blocked`]),bH=e=>Ir[_H(e.state)]??Ir.idle;function xH(e){let t=new Map,n=[];for(let r of e){let e=t.get(r.id);e===void 0?(t.set(r.id,n.length),n.push(r)):bH(r)<bH(n[e])&&(n[e]=r)}return n}function SH(e,t,n){let r=xH(gH(t)),i=e=>{let t=[],n=new Set([e]);for(let e=!0;e;){e=!1;for(let i of r)n.has(_H(i.parentID))&&!n.has(i.id)&&(n.add(i.id),t.push(i),e=!0)}return t},a=new Map;for(let e of gH(n)){let t=vH(e.updated);t!==void 0&&a.set(e.id,Math.max(t,a.get(e.id)??-1/0))}let o=[];for(let t of r){if(t.parentID!==e||t.id===e)continue;let n=i(t.id),r=[t,...n].map(e=>_H(e.state)),a=r.includes(`blocked`)?`blocked`:t.state===`error`?`error`:r.includes(`working`)?`working`:`idle`,s=[t,...n].filter(e=>e.state===`working`).map(e=>vH(e.since)).filter(e=>e!==void 0);o.push({id:t.id,title:_H(t.title)||`Subagent`,state:a,...a===`working`&&s.length?{since:Math.min(...s)}:{},nested:n.length,order:o.length})}let s=new Set(o.map(e=>e.id));for(let t of gH(n)){if(t.parentID!==e||s.has(t.id))continue;s.add(t.id);let n=_H(t.state),r=n===`working`||n===`blocked`||n===`error`?n:`idle`;o.push({id:t.id,title:_H(t.title)||`Subagent`,state:r,nested:0,order:o.length})}let c=({order:e,...t})=>t,l=o.filter(e=>yH.has(e.state)).sort((e,t)=>(e.state===t.state?0:e.state===`blocked`?-1:+(t.state===`blocked`))||(e.since??1/0)-(t.since??1/0)||e.order-t.order),u=o.filter(e=>!yH.has(e.state)).sort((e,t)=>Number(t.state===`error`)-Number(e.state===`error`)||(a.get(t.id)??-1/0)-(a.get(e.id)??-1/0)||t.order-e.order);return{running:l.map(c),finished:u.map(c)}}function CH(e){let t=e.finished.filter(e=>e.state===`error`).length;return[`Subagents`,e.running.length?`${e.running.length} running`:e.finished.length?`${e.finished.length} finished`:``,t?`${t} failed`:``].filter(Boolean).join(` · `)}var wH={working:`Running`,blocked:`Needs you`,error:`Error`,idle:`Done`};function TH(e,t){let n=[wH[e.state]];return e.state===`working`&&e.since!==void 0&&n.push(Gi(t-e.since)),e.nested&&n.push(`${e.nested} subagent${e.nested===1?``:`s`}`),n.join(` · `)}var EH=I(`<section><h3><button type=button class=card-toggle><span>`),DH=I(`<li><a><span class=subagent-text><span class=subagent-title></span><span class="muted small">`),OH=I(`<ul class=job-list>`),kH=I(`<ul class=subagent-list>`),AH=I(`<button type=button class="subagents-more small">`),jH=I(`<ul class=mcp-list>`),MH=I(`<aside class=rail aria-label="Session details"><div class=rail-head><span class=rail-title>Details`),NH=I(`<p class="rail-error small"><strong>`),PH=I(`<p class="muted small">`),FH=I(`<dl class=kv><dt>Machine</dt><dd><span aria-hidden=true></span> <span class=muted>· </span></dd><dt>Project</dt><dd class=mono></dd><dt>Directory</dt><dd class=kv-path data-session-directory><span class="mono path-tail"><bdi></bdi></span></dd><dt>Branch</dt><dd class=mono></dd><dt>Open in</dt><dd>`),IH=I(`<span class=muted>`),LH=I(`<p class="small retry-note">`),RH=I(`<li><span aria-hidden=true></span><span class="job-command mono"></span><span class="muted small">`),zH=I(`<div class=meter role=meter aria-valuemin=0 aria-valuemax=100 aria-label="Context used"><span>`),BH=I(`<p class=small><strong></strong><span class=muted> `),VH=I(`<li><span aria-hidden=true></span><span class=mcp-name></span><span class="muted small">`),HH=I(`<span class=diffstat><span class=add>+</span> <span class=del>−`),UH=I(`<ul class=file-list>`),WH=I(`<p class="muted small">No changes.`),GH=I(`<li><button type=button class=file><span></span><span class=file-name><bdi></bdi></span><span class="diffstat small"><span class=add>+</span> <span class=del>−`),KH=I(`<p class="muted small more-files">+<!> more <!> (only the most-changed files are listed)`),qH=I(`<table class=diff><tbody>`),JH=I(`<p class="muted small pad">The diff is too large to show completely (512 KB).`),YH=I(`<section class=diff-panel><header class=diff-head><select aria-label="Changed file"></select><label class="small muted wrap-toggle"><input type=checkbox> Wrap</label></header><div>`),XH=I(`<option>`),ZH=I(`<p class="muted small pad">Loading diff…`),QH=I(`<p class="muted small pad">`),$H=I(`<p class="muted small pad">No textual changes (binary file, or a rename).`),eU=I(`<tr><td class=ln></td><td class=ln></td><td class=code-line><span class=sign>`),tU=e=>e.truncated&&e.totalFiles?Math.max(0,e.totalFiles-e.files.length):0,[nU,rU]=u(oS(localStorage));function iU(e){let t=()=>!nU().has(e.id);return(()=>{var r=EH(),i=r.firstChild,a=i.firstChild,o=a.firstChild;return a.$$click=()=>rU(sS(localStorage,e.id)),y(a,n(L,{name:`chevron`,class:`card-chevron`}),o),y(o,()=>e.title),y(i,()=>e.extra,null),y(r,n(l,{get when(){return t()},get children(){return e.children}}),null),s(n=>{var i=`rail-card${t()?``:` collapsed`}`,o=e.label??e.title,s=e.domID,c=e.id,l=t();return i!==n.e&&k(r,n.e=i),o!==n.t&&b(r,`aria-label`,n.t=o),s!==n.a&&b(r,`id`,n.a=s),c!==n.o&&b(r,`data-card`,n.o=c),l!==n.i&&b(a,`aria-expanded`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),r})()}var aU=e=>e>=1e3?`${(e/1e3).toFixed(e>=1e5?0:1)}k`:String(e);function oU(t){let i=()=>t.found?.session,o=()=>i()?.open?i()?.terminal?.source===`herdr`?`herdr`:`tui`:`background`,c=()=>Wi(i()?.status,N()),d=()=>c().filter(e=>e.status===`running`).length,f=()=>i()?.state===`working`||i()?.status?.some(e=>e.state===`working`)?Ji(i()?.status,i()?.id,se()):void 0,p=()=>zi(i()?.status,i()?.id),h=C(()=>{let e=i()?.id;return e?(Y.machines??[]).flatMap(t=>t.processes.flatMap(t=>t.sessions.filter(t=>t.parentID===e))):[]}),g=C(()=>{let e=i()?.id;return e?SH(e,i()?.status,h()):{running:[],finished:[]}}),_=C(()=>new Map([...g().running,...g().finished].map(e=>[e.id,e]))),[v,S]=u(!1);x(e(()=>i()?.id,()=>S(!1),{defer:!0}));let w=C(()=>{let{running:e,finished:t}=g();return[...e,...v()?t:t.slice(0,3)].map(e=>e.id)},[],{equals:(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n])}),T=e=>n(l,{get when(){return _().get(e)},children:r=>(()=>{var i=DH(),a=i.firstChild,o=a.firstChild,c=o.firstChild,l=c.nextSibling;return a.$$click=()=>Z()&&t.onClose(),b(a,`data-session`,e),y(a,n(A,{get state(){return r().state}}),o),y(c,()=>r().title),y(l,()=>TH(r(),N())),y(a,n(L,{name:`chevron`,class:`chev`}),null),s(t=>{var n=`subagent-row ${r().state}`,i=Ot(e),o=r().title,s=`Open subagent ${r().title} (${TH(r(),N())})`;return n!==t.e&&k(a,t.e=n),i!==t.t&&b(a,`href`,t.t=i),o!==t.a&&b(a,`title`,t.a=o),s!==t.o&&b(a,`aria-label`,t.o=s),t},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}),E=()=>{let e=t.summary?.mcp;return e?.length?`Connectors · ${e.filter(e=>e.status===`connected`).length} connected`:`Connectors`};return(()=>{var e=MH(),u=e.firstChild;return u.firstChild,y(u,n(F,{icon:`close`,label:`Close details`,get onClick(){return t.onClose}}),null),y(e,n(l,{get when(){return p()},children:e=>(()=>{var t=NH(),n=t.firstChild;return y(n,()=>e().label),y(t,(()=>{var t=r(()=>!!e().status);return()=>t()?` · ${e().status}`:``})(),null),y(t,(()=>{var t=r(()=>!!(e().title&&e().sessionID!==i()?.id));return()=>t()?` · ${e().title}`:``})(),null),s(()=>b(t,`title`,e().text)),t})()}),null),y(e,n(iU,{id:`environment`,title:`Environment`,get children(){return n(l,{get when(){return t.found},get fallback(){return(()=>{var e=PH();return y(e,()=>Y.machines?`Not reported by any connected machine.`:`Loading…`),e})()},children:e=>(()=>{var a=FH(),c=a.firstChild.nextSibling,l=c.firstChild,u=l.nextSibling,d=u.nextSibling;d.firstChild;var f=c.nextSibling.nextSibling,p=f.nextSibling.nextSibling,m=p.firstChild,h=m.firstChild,g=p.nextSibling.nextSibling,_=g.nextSibling.nextSibling;return y(c,()=>e().machine.name,u),y(d,(()=>{var t=r(()=>Y.connection!==`live`);return()=>t()?`Connecting`:e().machine.online?`online`:`offline`})(),null),y(f,()=>j(t.summary?.directory??e().session.directory)),y(h,()=>t.summary?.directory??e().session.directory),y(p,n(F,{icon:`copy`,label:`Copy the directory`,onClick:()=>{let n=t.summary?.directory??e().session.directory;navigator.clipboard.writeText(n).then(()=>q(`Directory copied`),()=>q(`Could not copy the directory`,`err`))}}),null),y(g,()=>t.summary?.branch??(()=>{var e=IH();return y(e,()=>t.loading?`…`:`—`),e})()),y(_,()=>oe[o()],null),y(_,(()=>{var e=r(()=>!!i()?.terminal?.workspace);return()=>e()?` · ${i().terminal.workspace}`:``})(),null),s(n=>{var r=`online-dot${e().machine.online&&Y.connection===`live`?` on`:``}`,i=t.summary?.directory??e().session.directory,a=t.summary?.directory??e().session.directory;return r!==n.e&&k(l,n.e=r),i!==n.t&&b(f,`title`,n.t=i),a!==n.a&&b(m,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),a})()})}}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n(iU,{id:`intent`,title:`Intent`,label:`Session intent`,get children(){return n(IV,{get sessionID(){return e()}})}})}),null),y(e,n(l,{get when(){return c().length||f()},get children(){return n(iU,{id:`jobs`,get title(){return`Jobs${d()?` · ${d()} running`:``}`},label:`Background jobs`,get children(){return[n(l,{get when(){return f()},children:e=>(()=>{var t=LH();return y(t,e),t})()}),(()=>{var e=OH();return y(e,n(m,{get each(){return c()},children:e=>(()=>{var t=RH(),n=t.firstChild,a=n.nextSibling,o=a.nextSibling;return y(a,()=>e.command??e.id),y(o,()=>Ki(e,N()),null),y(o,(()=>{var t=r(()=>!!(e.sessionID!==i()?.id&&e.sessionTitle));return()=>t()?` · ${e.sessionTitle}`:``})(),null),s(r=>{var i=`job ${e.status}`,a=e.command??e.id,o=`job-dot ${e.status===`running`?`on`:e.exit?`bad`:``}`;return i!==r.e&&k(t,r.e=i),a!==r.t&&b(t,`title`,r.t=a),o!==r.a&&k(n,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()})),e})()]}})}}),null),y(e,n(l,{get when(){return g().running.length||g().finished.length},get children(){return n(iU,{id:`subagents`,get title(){return CH(g())},label:`Subagents`,get children(){return[(()=>{var e=kH();return y(e,n(m,{get each(){return w()},children:T})),e})(),n(l,{get when(){return g().finished.length>3},get children(){var e=AH();return e.$$click=()=>S(!v()),y(e,(()=>{var e=r(()=>!!v());return()=>e()?`Show fewer`:`${g().finished.length-3} more finished`})()),s(()=>b(e,`aria-expanded`,v())),e}})]}})}}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n(iU,{id:`context-cards`,title:`Context cards`,get children(){return n(mH,{get sessionID(){return e()}})}})}),null),y(e,n(l,{get when(){return i()?.id},children:e=>n(iU,{id:`subscriptions`,title:`Subscriptions`,label:`Session subscriptions`,get children(){return n(eH,{get sessionID(){return e()}})}})}),null),y(e,n(iU,{id:`context`,title:`Context`,get children(){return n(l,{get when(){return t.summary?.context},get fallback(){return(()=>{var e=PH();return y(e,()=>t.loading?`Loading…`:`No usage reported yet.`),e})()},children:e=>[(()=>{var t=zH(),n=t.firstChild;return s(r=>{var i=e().percent??0,o=`${e().percent??0}%`,s=(e().percent??0)>80?`hot`:``;return i!==r.e&&b(t,`aria-valuenow`,r.e=i),o!==r.t&&a(n,`width`,r.t=o),s!==r.a&&k(n,r.a=s),r},{e:void 0,t:void 0,a:void 0}),t})(),(()=>{var t=BH(),n=t.firstChild,i=n.nextSibling;return i.firstChild,y(n,(()=>{var t=r(()=>e().percent!==void 0);return()=>t()?`${e().percent}%`:aU(e().used)})()),y(i,(()=>{var t=r(()=>!!e().limit);return()=>t()?`${aU(e().used)} / ${aU(e().limit)} tokens`:`tokens`})(),null),y(i,(()=>{var t=r(()=>!!e().model);return()=>t()?` · ${e().model}`:``})(),null),t})()]})}}),null),y(e,n(iU,{id:`mcp`,get title(){return E()},label:`MCP servers`,get children(){return n(l,{get when(){return t.summary?.mcp?.length},get fallback(){return(()=>{var e=PH();return y(e,()=>t.loading?`Loading…`:`No MCP servers.`),e})()},get children(){var e=jH();return y(e,n(m,{get each(){return t.summary.mcp},children:e=>(()=>{var t=VH(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling;return y(r,()=>e.name),y(i,()=>e.status.replace(`_`,` `)),s(r=>{var i=e.error??e.status,a=`mcp-dot ${e.status}`;return i!==r.e&&b(t,`title`,r.e=i),a!==r.t&&k(n,r.t=a),r},{e:void 0,t:void 0}),t})()})),e}})}}),null),y(e,n(iU,{id:`changes`,title:`Changes`,domID:`rail-changes`,get extra(){return n(l,{get when(){return t.summary?.changes},children:e=>(()=>{var t=HH(),n=t.firstChild;n.firstChild;var r=n.nextSibling.nextSibling;return r.firstChild,y(n,()=>e().additions,null),y(r,()=>e().deletions,null),t})()})},get children(){return n(l,{get when(){return t.summary?.changes},get fallback(){return(()=>{var e=PH();return y(e,(()=>{var e=r(()=>!!t.loading);return()=>e()?`Loading…`:t.summaryError||`No working-tree changes reported (not a git repository, or OpenCode is still warming up).`})()),e})()},children:e=>n(l,{get when(){return e().files.length},get fallback(){return WH()},get children(){return[(()=>{var r=UH();return y(r,n(m,{get each(){return e().files},children:e=>(()=>{var n=GH(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.firstChild,c=a.nextSibling.firstChild;c.firstChild;var l=c.nextSibling.nextSibling;return l.firstChild,r.$$click=()=>t.onFile(e.file),y(i,()=>e.status[0].toUpperCase()),y(o,()=>e.file),y(c,()=>e.additions,null),y(l,()=>e.deletions,null),s(t=>{var n=e.file,a=`file-status ${e.status}`;return n!==t.e&&b(r,`title`,t.e=n),a!==t.t&&k(i,t.t=a),t},{e:void 0,t:void 0}),n})()})),r})(),n(l,{get when(){return tU(e())},children:e=>(()=>{var t=KH(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return r.nextSibling,y(t,e,n),y(t,()=>e()===1?`file`:`files`,r),t})()})]}})})}}),null),e})()}function sU(e){let[t]=d(()=>e.file,async t=>G(`${H(e.sessionID)}/diff?file=${K(t)}`)),[i,a]=u(!1);return(()=>{var o=YH(),c=o.firstChild,u=c.firstChild,d=u.nextSibling,f=d.firstChild,p=c.nextSibling;return y(c,n(L,{name:`diff`}),u),u.addEventListener(`change`,t=>e.onFile(t.currentTarget.value)),y(u,n(m,{get each(){return e.files},children:e=>(()=>{var t=XH();return t.value=e,y(t,e),t})()})),y(c,n(l,{get when(){return t()},children:e=>(()=>{var t=HH(),n=t.firstChild;n.firstChild;var r=n.nextSibling.nextSibling;return r.firstChild,y(n,()=>e().additions,null),y(r,()=>e().deletions,null),t})()}),d),f.addEventListener(`change`,e=>a(e.currentTarget.checked)),y(c,n(F,{icon:`close`,label:`Close diff`,get onClick(){return e.onClose}}),null),y(p,n(l,{get when(){return!t.loading},get fallback(){return ZH()},get children(){return n(l,{get when(){return!t.error},get fallback(){return(()=>{var e=QH();return y(e,(()=>{var e=r(()=>t.error?.message===`No changes for that file`);return()=>e()?`This file has no changes any more.`:`Could not load the diff: ${t.error?.message}`})()),e})()},get children(){return n(l,{get when(){return t()?.patch},get fallback(){return $H()},get children(){return[(()=>{var e=qH(),i=e.firstChild;return y(i,n(m,{get each(){return mV(t().patch).filter(e=>e.type!==`meta`)},children:e=>(()=>{var t=eU(),n=t.firstChild,i=n.nextSibling,a=i.nextSibling,o=a.firstChild;return y(n,()=>e.oldNo??``),y(i,()=>e.newNo??``),y(o,(()=>{var t=r(()=>e.type===`add`);return()=>t()?`+`:e.type===`del`?`−`:` `})()),y(a,()=>e.text,null),s(()=>k(t,e.type)),t})()})),e})(),n(l,{get when(){return t().truncated},get children(){return JH()}})]}})}})}})),s(t=>{var n=`Changes in ${e.file}`,r=`diff-body${i()?` wrap`:``}`;return n!==t.e&&b(o,`aria-label`,t.e=n),r!==t.t&&k(p,t.t=r),t},{e:void 0,t:void 0}),s(()=>u.value=e.file),s(()=>f.checked=i()),o})()}z([`click`]);function cU(e){let t={};for(let n of e)n.type!==`external`&&(n.type===`boolean`?t[n.key]=n.default===!0:n.type===`multiselect`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:t[n.key]=n.default===void 0||Array.isArray(n.default)?``:String(n.default));return t}function lU(e,t){return e&&(e.type===`number`||e.type===`integer`)&&typeof t==`string`&&t.trim()?Number(t):typeof t==`string`?t.trim():t}function uU(e,t){let n=new Map(e.map(e=>[e.key,e]));return e.filter(e=>(e.when??[]).every(e=>{let r=lU(n.get(e.key),t[e.key])===e.value;return e.op===`eq`?r:!r}))}var dU=e=>typeof e==`string`?e.trim():``;function fU(e,t){let n={};for(let r of uU(e,t)){let e=pU(r,t[r.key]);e&&(n[r.key]=e)}return n}function pU(e,t){switch(e.type){case`external`:return;case`boolean`:return;case`multiselect`:{let n=Array.isArray(t)?t:[];return e.minItems!==void 0&&n.length<e.minItems?`Choose at least ${e.minItems}`:e.required&&!n.length?`Required`:e.maxItems!==void 0&&n.length>e.maxItems?`Choose at most ${e.maxItems}`:void 0}case`number`:case`integer`:{let n=dU(t);if(!n)return e.required?`Required`:void 0;let r=Number(n);return Number.isFinite(r)?e.type===`integer`&&!Number.isInteger(r)?`Enter a whole number`:e.minimum!==void 0&&r<e.minimum?`At least ${e.minimum}`:e.maximum!==void 0&&r>e.maximum?`At most ${e.maximum}`:void 0:`Enter a number`}case`string`:{let n=dU(t);if(!n)return e.required?`Required`:void 0;if(e.options?.length&&!e.custom&&!e.options.some(e=>e.value===n))return`Choose one of the options`;if(e.minLength!==void 0&&n.length<e.minLength)return`At least ${e.minLength} characters`;if(e.maxLength!==void 0&&n.length>e.maxLength)return`At most ${e.maxLength} characters`;if(e.pattern)try{if(!new RegExp(e.pattern).test(n))return`Doesn't match the expected format`}catch{}return}}}function mU(e,t){let n={};for(let r of uU(e,t)){let e=t[r.key];if(r.type!==`external`){if(r.type===`boolean`)n[r.key]=e===!0;else if(r.type===`multiselect`)n[r.key]=Array.isArray(e)?[...e]:[];else{let t=dU(e);if(!t)continue;n[r.key]=r.type===`number`||r.type===`integer`?Number(t):t}}}return n}var hU=I(`<p class="muted small"data-answer-unavailable> can't take this answer from the hub; answer it in the terminal.`),gU=I(`<p class="blocker-recommendation small"data-recommendation>`),_U=I(`<p class=blocker-text>`),vU=I(`<div role=group><p class=blocker-head><strong>`),yU=I(`<p class="muted small">This question has nothing to fill in here; answer it in the terminal.`),bU=I(`<p class="answered-by small muted"data-answered-by>`),xU=I(`<div class=row><button type=button class="btn small primary">Allow once</button><button type=button class="btn small">Always allow</button><button type=button class="btn small danger">Deny`),SU=I(`<form class=form-card novalidate><fieldset><div class=row><button type=submit class="btn small primary"></button><button type=button class="btn small">Dismiss`),CU=I(`<p class="field-error small"role=alert>`),wU=I(`<div>`),TU=I(`<span class=field-title>`),EU=I(`<span class="field-desc muted small">`),DU=I(`<a class="btn small"target=_blank rel="noopener noreferrer">Open link`),OU=I(`<label class=check><input type=checkbox>`),kU=I(`<input type=text placeholder="Other (comma separated)">`),AU=I(`<div role=group class=choice-group>`),jU=I(`<input type=text placeholder="Type your own answer">`),MU=I(`<div role=radiogroup class=choice-group>`),NU=I(`<label class=text-field>`),PU=I(`<input type=text>`),FU=I(`<span class="muted small"> — `),IU=I(`<label class=choice><input type=checkbox><span>`),LU=I(`<label class=choice><input type=radio><span>`);function RU(e,t){return!(e instanceof W)||e.status!==409||e.code!==`gone`?!1:(q(`Already answered or expired`),t(),!0)}function zU(e){let[t,i]=u(!1),a=()=>e.blocker,c=()=>a().sessionID&&a().sessionID!==e.rootID?` (${a().sessionTitle||`subagent`})`:``,d=()=>a().kind===`permission`?`Permission request`:`Question`;return n(l,{get when(){return!t()},get children(){var t=vU(),u=t.firstChild,f=u.firstChild;return y(f,(()=>{var e=r(()=>a().kind===`permission`);return()=>e()?`Permission`:a().question?`Question`:`Form`})()),y(u,c,null),y(t,n(v,{get fallback(){return yU()},get children(){return[n(o,{get when(){return e.canAnswer===!1},get children(){return[n(tg,{get class(){return`blocker-text${a().kind===`permission`?` mono`:``}`},get text(){return a().summary},what:`the request`,get reveal(){return a().kind===`permission`}}),(()=>{var t=hU(),n=t.firstChild;return y(t,()=>e.harnessName??`This harness`,n),t})()]}}),n(o,{get when(){return a().kind===`permission`},get children(){return[n(tg,{class:`blocker-text mono`,get text(){return a().summary},what:`the request`,reveal:!0}),n(l,{get when(){return Dt(a().recommendation,Su)},get children(){var e=gU();return y(e,()=>Dt(a().recommendation,Su)),e}}),n(BU,{get sessionID(){return e.sessionID},get blocker(){return a()},onGone:()=>i(!0)})]}}),n(o,{get when(){return r(()=>a().kind===`form`)()&&a().fields?.length},get children(){return[n(l,{get when(){return!a().question||a().summary!==`Questions`},get children(){var e=_U();return y(e,()=>a().summary),e}}),n(VU,{get sessionID(){return e.sessionID},get blocker(){return a()},get fields(){return a().fields},onGone:()=>i(!0)})]}})]}}),null),y(t,n(l,{get when(){return en(su(),a().id,Su,pu)},children:e=>(()=>{var t=bU();return y(t,()=>e().text),s(()=>b(t,`title`,e().title)),t})()}),null),s(e=>{var n=`card blocker ${a().kind}`,r=`${d()}: ${a().summary}`;return n!==e.e&&k(t,e.e=n),r!==e.t&&b(t,`aria-label`,e.t=r),e},{e:void 0,t:void 0}),t}})}function BU(e){let[t,n]=u(!1),r=async t=>{n(!0);try{await V(`${H(e.sessionID)}/permission`,{method:`POST`,json:{requestID:e.blocker.id,decision:t}}),q(t===`reject`?`Denied`:`Allowed`)}catch(t){RU(t,e.onGone)||q(Oz(t)??U(t),`err`),n(!1)}};return(()=>{var e=xU(),n=e.firstChild,i=n.nextSibling,a=i.nextSibling;return n.$$click=()=>void r(`once`),i.$$click=()=>void r(`always`),a.$$click=()=>void r(`reject`),s(e=>{var r=t(),o=t(),s=t();return r!==e.e&&(n.disabled=e.e=r),o!==e.t&&(i.disabled=e.t=o),s!==e.a&&(a.disabled=e.a=s),e},{e:void 0,t:void 0,a:void 0}),e})()}function VU(e){let[t,r]=u(cU(e.fields)),[i,a]=u({}),[o,c]=u(!1),[d,f]=u(!1),p=C((n=[])=>{let r=uU(e.fields,t()).map(e=>e.key);return r.length===n.length&&r.every((e,t)=>e===n[t])?n:r}),h=t=>e.fields.find(e=>e.key===t),g=(e,t)=>{r(n=>({...n,[e]:t})),i()[e]&&a(t=>Object.fromEntries(Object.entries(t).filter(([t])=>t!==e)))},_=async(t,n)=>{c(!0);try{await V(`${H(e.sessionID)}/form`,{method:`POST`,json:{formID:e.blocker.id,...t}}),f(!0),q(n)}catch(t){RU(t,e.onGone)||q(Oz(t)??U(t),`err`),c(!1)}},v=n=>{n.preventDefault();let r=fU(e.fields,t());if(a(r),Object.keys(r).length)return;let i=mU(e.fields,t());e.blocker.question&&!Object.values(i).some(e=>Array.isArray(e)?e.length>0:e!==``&&e!==!1)?q(`Pick or type an answer first (Dismiss skips the questions)`,`err`):_({answer:i},`Answer sent`)},x=()=>o()||d();return(()=>{var r=SU(),a=r.firstChild,o=a.firstChild,c=o.firstChild,u=c.nextSibling;return r.addEventListener(`submit`,v),y(a,n(m,{get each(){return p()},children:r=>n(l,{get when(){return h(r)},children:a=>(()=>{var o=wU();return b(o,`data-key`,r),y(o,n(HU,{get field(){return a()},get value(){return t()[r]},onChange:e=>g(r,e),get formID(){return e.blocker.id}}),null),y(o,n(l,{get when(){return i()[r]},get children(){var e=CU();return y(e,()=>i()[r]),e}}),null),s(()=>k(o,`form-field ${a().type}`)),o})()})}),o),y(c,()=>d()?`Sent`:`Submit`),u.$$click=()=>void _({cancel:!0},`Dismissed`),s(()=>a.disabled=x()),r})()}function HU(e){let t=()=>e.field,i=()=>`f-${e.formID}-${t().key}`,a=()=>t().title||t().key,c=()=>typeof e.value==`string`?e.value:``,u=()=>Array.isArray(e.value)?e.value:[],d=()=>new Set((t().options??[]).map(e=>e.value)),f=()=>[(()=>{var e=TU();return y(e,a,null),y(e,()=>t().required?` *`:``,null),e})(),n(l,{get when(){return t().description},get children(){var e=EU();return y(e,()=>t().description),e}})];return n(v,{get children(){return[n(o,{get when(){return t().type===`external`},get children(){return[n(f,{}),(()=>{var e=DU();return s(()=>b(e,`href`,t().url)),e})()]}}),n(o,{get when(){return t().type===`boolean`},get children(){var t=OU(),r=t.firstChild;return r.addEventListener(`change`,t=>e.onChange(t.currentTarget.checked)),y(t,n(f,{}),null),s(()=>r.checked=e.value===!0),t}}),n(o,{get when(){return t().type===`multiselect`},get children(){var r=AU();return y(r,n(f,{}),null),y(r,n(m,{get each(){return t().options??[]},children:t=>(()=>{var r=IU(),i=r.firstChild,a=i.nextSibling;return i.addEventListener(`change`,n=>e.onChange(n.currentTarget.checked?[...u(),t.value]:u().filter(e=>e!==t.value))),y(a,()=>t.label),y(r,n(l,{get when(){return t.description},get children(){var e=FU();return e.firstChild,y(e,()=>t.description,null),e}}),null),s(()=>i.checked=u().includes(t.value)),r})()}),null),y(r,n(l,{get when(){return t().custom},get children(){var t=kU();return t.addEventListener(`change`,t=>e.onChange([...u().filter(e=>d().has(e)),...t.currentTarget.value.split(`,`).map(e=>e.trim()).filter(Boolean)])),s(()=>b(t,`aria-label`,`${a()}: other`)),s(()=>t.value=u().filter(e=>!d().has(e)).join(`, `)),t}}),null),s(()=>b(r,`aria-label`,a())),r}}),n(o,{get when(){return r(()=>t().type===`string`)()&&t().options?.length},get children(){var r=MU();return y(r,n(f,{}),null),y(r,n(m,{get each(){return t().options??[]},children:t=>(()=>{var r=LU(),a=r.firstChild,o=a.nextSibling;return a.addEventListener(`change`,()=>e.onChange(t.value)),y(o,()=>t.label),y(r,n(l,{get when(){return t.description},get children(){var e=FU();return e.firstChild,y(e,()=>t.description,null),e}}),null),s(()=>b(a,`name`,i())),s(()=>a.checked=c()===t.value),r})()}),null),y(r,n(l,{get when(){return t().custom},get children(){var t=jU();return t.$$input=t=>e.onChange(t.currentTarget.value),s(()=>b(t,`aria-label`,`${a()}: your own answer`)),s(()=>t.value=d().has(c())?``:c()),t}}),null),s(()=>b(r,`aria-label`,a())),r}}),n(o,{when:!0,get children(){return[(()=>{var e=NU();return y(e,n(f,{})),s(()=>b(e,`for`,i())),e})(),(()=>{var n=PU();return n.$$input=t=>e.onChange(t.currentTarget.value),s(e=>{var r=i(),a=t().type===`number`||t().type===`integer`?`decimal`:void 0,o=t().placeholder??``;return r!==e.e&&b(n,`id`,e.e=r),a!==e.t&&b(n,`inputmode`,e.t=a),o!==e.a&&b(n,`placeholder`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),s(()=>n.value=c()),n})()]}})]}})}z([`click`,`input`]);var UU=I(`<span class=file-chip> `),WU=I(`<button type=button class="icon-btn msg-more"aria-label="Copy, fork or revert"title="Copy, fork (here or beside) or revert"aria-haspopup=true>`),GU=I(`<div class=pill>`),KU=I(`<p class="msg-note muted small"data-answered-note>`),qU=I(`<div><div class=user-body>`),JU=I(`<div class=msg-images>`),YU=I(`<div class=msg-tools role=toolbar aria-label="Copy, fork, revert">`),XU=I(`<span>`),ZU=I(`<div class=transcript aria-label=Conversation>`),QU=I(`<div>`),$U=I(`<p class="note sys turn-denied">`),eW=I(`<span class=turn-error-status>`),tW=I(`<div class=turn-error-message>`),nW=I(`<div class="msg turn-error"role=group><span class=turn-error-mark aria-hidden=true>✕</span><div class=turn-error-body><div class=turn-error-head><strong class=turn-error-label>`),rW=I(`<p><span class=turn-retry-mark aria-hidden=true>↻</span><span>`),iW=I(`<a><span class=sub-mark aria-hidden=true></span><span class=sub-label>Subagent · <strong></strong></span><span class="sub-state muted">`),aW=I(`<span class=spinner>`),oW=I(`<span class=hub-msg-kind>`),sW=I(`<span class="hub-msg-state muted">`),cW=I(`<span class="hub-msg-delivery muted"title="Not delivered into a turn yet: the recipient's harness takes it at its next step">`),lW=I(`<div role=group><div class=hub-msg-head><span class=hub-msg-mark aria-hidden=true></span><span class=hub-msg-label></span></div><div class=hub-msg-text>`),uW=I(`<div class="fold-body hub-msg-text">`),dW=I(`<div><button type=button class=fold-head><span class=hub-msg-mark aria-hidden=true>⇄</span><span>`),fW=I(`<a>`),pW=I(`<span class="spinner small">`),mW=I(`<div class="fold thought"><button type=button class=fold-head><span>`),hW=I(`<ul class="fold-body tool-list">`),gW=I(`<div><button type=button class=fold-head><span>`),_W=I(`<pre class=code>`),vW=I(`<div class=tool-detail>`),yW=I(`<li><button type=button class=tool-head><span class=tool-mark></span><span class=tool-name></span><span class="tool-summary muted"></span><span class="tool-time muted">`),bW=I(`<span class="muted small">Loading full details…`),xW=I(`<span class="error small">`),SW=I(`<span class="muted small">No details for this call yet.`),CW={pending:[`…`,`Sending`],sent:[`✓`,`Sent`],queued:[`◷`,`Queued: the harness takes it at its next step`],heard:[`✓✓`,`Heard by the agent`],failed:[`!`,`Not sent`]};function wW(e){return n(l,{get when(){return e.image.src},get fallback(){return(()=>{var t=UU(),r=t.firstChild;return y(t,n(L,{name:`file`}),r),y(t,()=>e.image.name,null),s(()=>b(t,`title`,e.image.mime)),t})()},get children(){return n(Fn,{get image(){return e.image},class:`msg-image`,get onOpen(){return e.onOpen}})}})}var TW=500;function EW(e){let[t,a]=u(!1),o,c=()=>clearTimeout(o),d=t=>{t.pointerType===`touch`&&e.actions&&(c(),o=setTimeout(()=>a(!0),TW))},f=(e,t)=>()=>{a(!1),e.enabled&&t()};return(()=>{var o=qU(),u=o.firstChild;return i(o,_({get class(){return`msg user${t()?` tools-open`:``}`},get"data-key"(){return e.block.key}},()=>e.block.messageID?{"data-message":e.block.messageID}:{},{onPointerDown:d,onPointerUp:c,onPointerCancel:c,onPointerLeave:c,onFocusOut:e=>!e.currentTarget.contains(e.relatedTarget)&&a(!1),onKeyDown:e=>{if(e.key!==`Escape`)return;let n=e.target?.closest?.(`.msg-tools`);(t()||n)&&(a(!1),n&&e.currentTarget.querySelector(`.msg-more`)?.focus(),e.stopPropagation())}}),!1,!0),y(o,n(l,{get when(){return e.actions},get children(){var r=WU();return r.$$click=e=>{let n=!t(),r=e.currentTarget;a(n),n&&e.detail===0&&queueMicrotask(()=>r.closest(`.msg`)?.querySelector(`.msg-tools button`)?.focus())},y(r,n(L,{name:`more`})),s(n=>{var i=t(),a=`msg-tools-${e.block.key}`;return i!==n.e&&b(r,`aria-expanded`,n.e=i),a!==n.t&&b(r,`aria-controls`,n.t=a),n},{e:void 0,t:void 0}),r}}),u),y(u,n(l,{get when(){return e.block.images?.length},get children(){return n(zn,{get images(){return e.block.images??[]},children:t=>(()=>{var r=JU();return y(r,n(m,{get each(){return e.block.images},children:e=>n(wW,{image:e,onOpen:()=>t(e.key)})})),r})()})}}),null),y(u,n(l,{get when(){return e.block.text},get children(){var t=GU();return y(t,()=>e.block.text),t}}),null),y(u,n(l,{get when(){return e.block.note},get children(){var t=KU();return y(t,()=>e.block.note),t}}),null),y(u,n(l,{get when(){return e.actions},children:t=>(()=>{var i=YU();return y(i,n(F,{icon:`copy`,label:`Copy`,"data-action":`copy`,onClick:()=>(a(!1),t().onCopy(e.block.text))}),null),y(i,n(l,{get when(){return e.block.messageID},children:i=>[n(F,{icon:`fork`,get label(){return r(()=>!!t().fork.enabled)()?`Fork: a new session with the conversation up to here`:t().fork.reason??`Fork is not available`},"data-action":`fork`,get"aria-disabled"(){return!t().fork.enabled},get onClick(){return f(t().fork,()=>t().onFork(i(),e.block.text))}}),n(l,{get when(){return t().onForkBeside},children:a=>n(F,{icon:`split`,get label(){return r(()=>!!t().fork.enabled)()?`Fork and open beside: the new session in a pane next to this one`:t().fork.reason??`Fork is not available`},"data-action":`fork-beside`,get"aria-disabled"(){return!t().fork.enabled},get onClick(){return f(t().fork,()=>a()(i(),e.block.text))}})}),n(F,{icon:`undo`,get label(){return r(()=>!!t().revert.enabled)()?`Revert: undo from here on (restores the files)`:t().revert.reason??`Revert is not available`},"data-action":`revert`,get"aria-disabled"(){return!t().revert.enabled},get onClick(){return f(t().revert,()=>t().onRevert(i(),e.block.text))}})]}),null),s(()=>b(i,`id`,`msg-tools-${e.block.key}`)),i})()}),null),y(o,n(l,{get when(){return e.tick},children:e=>(()=>{var t=XU();return y(t,()=>CW[e()][0]),s(n=>{var r=`tick ${e()}`,i=CW[e()][1],a=CW[e()][1];return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),o})()}function DW(e){return n(In,{get children(){return n(OW,e)}})}function OW(e){let t=C(()=>e.previews?Kj(e.blocks,e.partialMessage):void 0),i=(n,r)=>{let i=t()?.get(n);return i?{sessionID:e.sessionID,messageID:i.messageID,base:i.base}:e.previews&&r&&r===e.partialMessage?{sessionID:e.sessionID,messageID:r,base:0,waiting:!0}:void 0},a=C(()=>new Map(e.blocks.map(e=>[e.key,e]))),c=C(()=>e.blocks.map(e=>e.key),void 0,{equals:(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n])});return(()=>{var t=ZU();return y(t,n(m,{get each(){return c()},children:t=>{let c,u=C(()=>c=a().get(t)??c),d=e=>{let t=u();return t.type===e?t:void 0};return n(v,{get children(){return[n(o,{get when(){return d(`user`)},children:t=>n(EW,{get block(){return t()},get tick(){return e.ticks[t().key]},get actions(){return e.actions}})}),n(o,{get when(){return d(`assistant`)},children:t=>(()=>{var a=QU();return y(a,n(mN.Provider,{get value(){return e.sessionID},get children(){return n(OP,{get text(){return t().text},get streaming(){return t().live},get preview(){return i(t().key,t().messageID)},get images(){return r(()=>!!e.previews)()?t().media:void 0},links:!0})}})),s(e=>{var n=`msg assistant${t().live?` live`:``}`,r=t().key;return n!==e.e&&k(a,e.e=n),r!==e.t&&b(a,`data-key`,e.t=r),e},{e:void 0,t:void 0}),a})()}),n(o,{get when(){return d(`thought`)},children:t=>n(AW,{get block(){return t()},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return d(`tools`)},children:t=>n(jW,{get block(){return t()},get sessionID(){return e.sessionID},get onDetail(){return e.onDetail},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return d(`message`)},children:t=>n(kW,{get block(){return t()},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})}),n(o,{get when(){return r(()=>!!d(`error`)?.denied)()&&d(`error`)},children:e=>(()=>{var t=$U();return y(t,()=>e().label),s(()=>b(t,`data-key`,e().key)),t})()}),n(o,{get when(){return d(`error`)},children:e=>(()=>{var t=nW(),r=t.firstChild.nextSibling,i=r.firstChild,a=i.firstChild;return y(a,()=>e().label),y(i,n(l,{get when(){return e().status},get children(){var t=eW();return y(t,()=>e().status),t}}),null),y(r,n(l,{get when(){return e().message},get children(){var t=tW();return y(t,()=>e().message),t}}),null),s(n=>{var r=e().key,i=`Error: ${e().label}`;return r!==n.e&&b(t,`data-key`,n.e=r),i!==n.t&&b(t,`aria-label`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(o,{get when(){return d(`retry`)},children:e=>{let t=()=>Zz(e(),se());return(()=>{var n=rW(),r=n.firstChild.nextSibling;return y(r,()=>t().text),s(r=>{var i=`msg turn-retry${t().waiting?` waiting`:``}`,a=e().key;return i!==r.e&&k(n,r.e=i),a!==r.t&&b(n,`data-key`,r.t=a),r},{e:void 0,t:void 0}),n})()}}),n(o,{get when(){return d(`subagent`)},children:e=>(()=>{var t=iW(),i=t.firstChild,a=i.nextSibling,o=a.firstChild.nextSibling,c=a.nextSibling;return y(i,(()=>{var t=r(()=>e().state===`working`);return()=>t()?aW():`◆`})()),y(o,()=>e().label),y(c,()=>e().state),y(t,n(L,{name:`chevron`,class:`chev`}),null),s(n=>{var r=`subagent ${e().state}`,i=Ot(e().sessionID),a=e().key;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`href`,n.t=i),a!==n.a&&b(t,`data-key`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})]}})}})),t})()}function kW(e){let t=()=>!!e.expanded[e.block.key];return n(l,{get when(){return r(()=>!e.block.primer)()&&!e.block.summary},get fallback(){return(()=>{var r=dW(),a=r.firstChild,o=a.firstChild.nextSibling;return i(r,_({get class(){return`fold hub-note${e.block.summary?` hub-update`:``}`},get"data-key"(){return e.block.key}},()=>e.block.summary?{"data-concierge-update":``}:{}),!1,!0),a.$$click=()=>e.onToggle(e.block.key,!t()),y(o,()=>e.block.summary??e.block.label),y(a,n(L,{name:`chevron`,class:`chev`}),null),y(r,n(l,{get when(){return t()},get children(){var t=uW();return y(t,()=>e.block.text),t}}),null),s(n=>{var r=t(),i=e.block.summary?`Sent by the hub, not by you: show the full update`:void 0;return r!==n.e&&b(a,`aria-expanded`,n.e=r),i!==n.t&&b(a,`title`,n.t=i),n},{e:void 0,t:void 0}),r})()},get children(){var t=lW(),r=t.firstChild,i=r.firstChild,a=i.nextSibling,o=r.nextSibling;return y(i,()=>e.block.direction===`out`?`↗`:`↘`),y(r,n(l,{get when(){return e.block.kind!==`msg`},get children(){var t=oW();return y(t,()=>e.block.kind),t}}),a),y(a,()=>Be(e.block.label,Su)),y(r,n(l,{get when(){return e.block.state===`open`||e.block.state===`answered`||e.block.state===`declined`||e.block.state===`expired`},get children(){var t=sW();return y(t,()=>e.block.state),t}}),null),y(r,n(l,{get when(){return e.block.delivery},get children(){var t=cW();return y(t,()=>e.block.delivery),s(()=>b(t,`data-delivery`,e.block.delivery)),t}}),null),y(o,n(l,{get when(){return e.block.parts},get fallback(){return e.block.text},children:e=>n(m,{get each(){return e()},children:e=>e.href?(()=>{var t=fW();return y(t,()=>e.text),s(()=>b(t,`href`,e.href)),t})():e.text})})),s(n=>{var r=`msg hub-msg ${e.block.direction}`,i=e.block.key,o=`Hub ${e.block.kind} ${Be(e.block.label,Su)}`,s=e.block.label;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`data-key`,n.t=i),o!==n.a&&b(t,`aria-label`,n.a=o),s!==n.o&&b(a,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t}})}function AW(e){let t=()=>!!e.expanded[e.block.key],r=t=>e.onToggle(e.block.key,t),i=()=>eB(e.block);return(()=>{var a=mW(),o=a.firstChild,c=o.firstChild;return o.$$click=()=>r(!t()),y(o,n(l,{get when(){return e.block.running},get children(){return pW()}}),c),y(c,()=>i().label),y(o,n(L,{name:`chevron`,class:`chev`}),null),y(a,n(l,{get when(){return t()},get children(){var e=QU();return y(e,()=>i().body),s(()=>k(e,`fold-body reasoning${i().muted?` hidden-reasoning`:``}`)),e}}),null),s(n=>{var r=e.block.key,i=t();return r!==n.e&&b(a,`data-key`,n.e=r),i!==n.t&&b(o,`aria-expanded`,n.t=i),n},{e:void 0,t:void 0}),a})()}function jW(e){let t=()=>!!e.expanded[e.block.key],r=t=>e.onToggle(e.block.key,t),i=()=>e.block.items.length,a=()=>{let t=e.block;return t.running?`Using ${i()===1?t.items[0].name??`a tool`:`${i()} tools`}…`:`Used ${i()} tool${i()===1?``:`s`}${t.failed?` (${t.failed} failed)`:``}`};return(()=>{var i=gW(),o=i.firstChild,c=o.firstChild;return o.$$click=()=>r(!t()),y(o,n(l,{get when(){return e.block.running},get children(){return pW()}}),c),y(c,a),y(o,n(L,{name:`chevron`,class:`chev`}),null),y(i,n(l,{get when(){return e.block.media?.length},get children(){return n(Rn,{get images(){return e.block.media},label:`Tool images`})}}),null),y(i,n(l,{get when(){return t()},get children(){var t=hW();return y(t,n(m,{get each(){return e.block.items},children:t=>n(MW,{row:t,get sessionID(){return e.sessionID},get onDetail(){return e.onDetail},get expanded(){return e.expanded},get onToggle(){return e.onToggle}})})),t}}),null),s(n=>{var r=`fold tools${e.block.failed?` has-failed`:``}`,a=e.block.key,s=t();return r!==n.e&&k(i,n.e=r),a!==n.t&&b(i,`data-key`,n.t=a),s!==n.a&&b(o,`aria-expanded`,n.a=s),n},{e:void 0,t:void 0,a:void 0}),i})()}function MW(e){let t=()=>!!e.expanded[`tool:${e.row.key}`],i=t=>e.onToggle(`tool:${e.row.key}`,t),[a,o]=u(!1),[c,d]=u(``),f=()=>e.row,p=()=>f().completed&&f().at?qa(f().completed-f().at):``,m=async()=>{let n=!t();if(i(n),n&&f().detail===void 0&&f().messageID&&f().partID!==void 0){o(!0),d(``);try{let t=await G(`${H(e.sessionID)}/timeline/messages/${K(f().messageID)}/parts/${K(String(f().partID))}`);e.onDetail(f().key,t.detail)}catch(e){d(U(e))}finally{o(!1)}}},h=()=>typeof f().summary==`string`?f().summary:``;return(()=>{var e=yW(),i=e.firstChild,o=i.firstChild,u=o.nextSibling,d=u.nextSibling,g=d.nextSibling;return i.$$click=m,y(o,(()=>{var e=r(()=>f().state===`running`);return()=>e()?pW():f().state===`failed`?`✕`:`✓`})()),y(u,()=>f().name??`tool`),y(d,h),y(g,p),y(e,n(l,{get when(){return t()},get children(){var e=vW();return y(e,n(l,{get when(){return!a()},get fallback(){return bW()},get children(){return n(l,{get when(){return!c()},get fallback(){return(()=>{var e=xW();return y(e,c),e})()},get children(){return n(l,{get when(){return f().detail!==void 0||h()||f().error},get fallback(){return SW()},get children(){var e=_W();return y(e,()=>nB(f().detail,{summary:h(),error:f().error})),e}})}})}})),e}}),null),s(n=>{var r=`tool ${f().state??``}`,a=t(),s=f().state??``;return r!==n.e&&k(e,n.e=r),a!==n.t&&b(i,`aria-expanded`,n.t=a),s!==n.a&&b(o,`aria-label`,n.a=s),n},{e:void 0,t:void 0,a:void 0}),e})()}z([`click`]);var NW={profilesPerUser:200,versionsPerProfile:100,skillsPerProfile:32,commandsPerProfile:64,instructionsChars:32e3,skillChars:32e3,commandChars:8e3,versionBytes:524288,projectsPerProfile:16},PW=[`pending`,`applied`,`partial`,`rejected`,`unsupported`,`restart_required`];function FW(e){if(!Fe(e))return`content must be an object`;if(e.instructions!==void 0&&!ze(e.instructions,NW.instructionsChars))return`instructions must be at most ${NW.instructionsChars} characters`;if(e.model!==void 0&&(typeof e.model!=`string`||!/^[A-Za-z0-9._-]{1,80}\/[A-Za-z0-9._:/-]{1,200}$/.test(e.model)))return`model must be provider/model`;let t=[[e.skills,NW.skillsPerProfile,NW.skillChars,`body`,`skills`],[e.commands,NW.commandsPerProfile,NW.commandChars,`template`,`commands`]];for(let[e,n,r,i,a]of t){if(!Array.isArray(e)||e.length>n)return`${a} must be a list of at most ${n}`;let t=new Set;for(let n of e){if(!Fe(n)||!Le(n.name))return`each of ${a} needs a slug name`;if(t.has(n.name))return`${a} names must be unique (${n.name})`;if(t.add(n.name),!wt(n.description,300))return`${a}.${n.name}.description must be 1–300 characters`;if(!ze(n[i],r)||n[i].trim()===``)return`${a}.${n.name}.${i} must be 1–${r} characters`}}if(new TextEncoder().encode(JSON.stringify(e)).length>NW.versionBytes)return`profile version is too large`}function IW(e){if(e===void 0)return;let t=NW.projectsPerProfile;if(!Array.isArray(e)||e.length>t||!e.every(e=>wt(e))||new Set(e).size!==e.length)return`projects must be at most ${t} unique project names`}function LW(e){return Fe(e)?Le(e.name)?wt(e.title)?e.description!==void 0&&!ze(e.description,4e3)?`description must be at most ${Et} characters`:Ee(e.tags)??Ue(e.metadata)??IW(e.projects)??FW(e.content):`title must be 1–120 characters of text`:`name must be 2–40 lowercase letters, digits or dashes`:`body must be an object`}function RW(e){return Array.isArray(e)?`[${e.map(RW).join(`,`)}]`:Fe(e)?`{${Object.keys(e).filter(t=>e[t]!==void 0).sort().map(t=>`${JSON.stringify(t)}:${RW(e[t])}`).join(`,`)}}`:JSON.stringify(e)}var zW=/^[a-z][a-z0-9_]{0,39}$/,BW=/^[A-Z][A-Z0-9_]{0,63}$/,VW=`secret:`;function HW(e){let t=[],n=``,r=0;for(;r<e.length;){if(e.startsWith(`\\{{`,r)){n+=`{{`,r+=3;continue}if(!e.startsWith(`{{`,r)){n+=e[r],r++;continue}let i=e.indexOf(`}}`,r+2);if(i<0)return`unclosed placeholder at character ${r+1}`;let a=e.slice(r+2,i).trim();if(a.startsWith(VW)){if(!BW.test(a.slice(7)))return`secret reference at character ${r+1} must be {{secret:NAME}} (uppercase letters, digits, _)`;n&&t.push({text:n}),n=``,t.push({secret:a.slice(7),raw:e.slice(r,i+2)})}else{if(!zW.test(a))return`placeholder at character ${r+1} is not a {{name}} parameter (no expression, condition or filter is allowed; write \\{{ for a literal {{)`;n&&t.push({text:n}),n=``,t.push({param:a})}r=i+2}return n&&t.push({text:n}),t}var Q=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$=e=>typeof e==`string`,UW=e=>typeof e==`number`&&Number.isFinite(e),WW=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=1,GW=e=>Array.isArray(e)?e.filter($):[];function KW(e,t){return{items:Q(e)&&Array.isArray(e.items)?e.items.map(t).filter(e=>e!==void 0):[],...Q(e)&&$(e.cursor)?{cursor:e.cursor}:{}}}function qW(e){if(Q(e)&&$(e.id)&&$(e.name)&&$(e.title)&&WW(e.latestVersion)&&UW(e.revision))return{id:e.id,name:e.name,title:e.title,...$(e.description)&&e.description?{description:e.description}:{},state:e.state===`archived`?`archived`:`active`,tags:GW(e.tags),metadata:Q(e.metadata)?Object.fromEntries(Object.entries(e.metadata).filter(e=>$(e[1]))):{},projects:GW(e.projects),latestVersion:e.latestVersion,revision:e.revision,updatedAt:UW(e.updatedAt)?e.updatedAt:0}}var JW=e=>KW(e,qW),YW=[`sessions`,`online`,`olderVersion`,`teamRoles`,`staffedSeats`,`launches`,`liveLaunches`];function XW(e){if(!Q(e))return;let t={};for(let n of YW)UW(e[n])&&(t[n]=e[n]);return Array.isArray(e.teams)&&(t.teams=GW(e.teams)),Array.isArray(e.harnesses)&&(t.harnesses=GW(e.harnesses)),t}function ZW(e){if(Q(e)&&WW(e.version)&&UW(e.skills)&&UW(e.commands))return{version:e.version,skills:e.skills,commands:e.commands,instructions:e.instructions===!0}}function QW(e){let t=JW(e),n=Q(e)&&Q(e.usage)?e.usage:void 0,r=Q(e)&&Q(e.summaries)?e.summaries:void 0;return{items:t.items.map(e=>{let t=n?XW(n[e.id]):void 0,i=r?ZW(r[e.id]):void 0;return{profile:e,...t?{usage:t}:{},...i?{summary:i}:{}}}),...t.cursor?{cursor:t.cursor}:{}}}var $W=e=>!!e&&((e.sessions??0)>0||(e.teamRoles??0)>0||(e.launches??0)>0);function eG(e){if(!e)return[];let t=[];e.sessions&&t.push(_n(e.sessions,`session`)),e.teamRoles&&t.push(_n(e.teamRoles,`team role`)),e.launches&&t.push(_n(e.launches,`launch`)),e.olderVersion&&t.push(`${e.olderVersion} on older version${e.olderVersion===1?``:`s`}`);let n=e.sessions!==void 0||e.teamRoles!==void 0||e.launches!==void 0;return t.length?t:n?[`Unused`]:[]}var tG=e=>[...new Set(e)].sort();function nG(e){return{tags:tG(e.flatMap(e=>e.profile.tags)),projects:tG(e.flatMap(e=>e.profile.projects)),teams:tG(e.flatMap(e=>e.usage?.teams??[])),harnesses:tG(e.flatMap(e=>e.usage?.harnesses??[]))}}function rG(e,t){return e.filter(e=>(!t.tag||e.profile.tags.includes(t.tag))&&(!t.project||e.profile.projects.includes(t.project))&&(!t.team||(e.usage?.teams??[]).includes(t.team))&&(!t.harness||(e.usage?.harnesses??[]).includes(t.harness))&&(!t.used||t.used===`used`===$W(e.usage)))}var iG=e=>(e?.sessions??0)+(e?.teamRoles??0)+(e?.launches??0),aG=(e,t)=>e.profile.name<t.profile.name?-1:+(e.profile.name>t.profile.name);function oG(e,t){let n=[...e];return t===`updated`?n.sort((e,t)=>t.profile.updatedAt-e.profile.updatedAt||aG(e,t)):t===`usage`?n.sort((e,t)=>iG(t.usage)-iG(e.usage)||aG(e,t)):n.sort(aG)}var sG=[`sessions`,`teams`,`launches`,`workspaces`];function cG(e){if(!Q(e)||!$(e.sessionID)||!WW(e.version)||!UW(e.revision))return;let t=Q(e.effective)&&WW(e.effective.version)?e.effective.version:void 0,n=Q(e.ack)&&PW.includes(e.ack.status)?e.ack.status:void 0,r=t=>$(e[t])?{[t]:e[t]}:{};return{sessionID:e.sessionID,...r(`name`),...r(`title`),...r(`machineID`),...r(`harness`),...r(`project`),online:e.online===!0,...UW(e.lastSeen)?{lastSeen:e.lastSeen}:{},known:e.known!==!1,version:e.version,revision:e.revision,...t===void 0?{}:{running:t},olderVersion:e.olderVersion===!0,...n?{ack:n}:{},offline:Q(e.ack)&&e.ack.offline===!0}}function lG(e){if(!Q(e)||!$(e.profileID)||!WW(e.latestVersion))return;let t=e=>Array.isArray(e)?e.filter(Q):[],n=Q(e.sessions)?e.sessions:void 0;return{profileID:e.profileID,latestVersion:e.latestVersion,counts:{...XW(e.counts),...Q(e.counts)&&UW(e.counts.workspaces)?{workspaces:e.counts.workspaces}:{}},sessions:(n&&Array.isArray(n.items)?n.items:[]).flatMap(e=>cG(e)??[]),...n&&$(n.cursor)?{cursor:n.cursor}:{},teamRoles:t(e.teamRoles).filter(e=>$(e.teamID)&&$(e.role)).map(e=>({teamID:e.teamID,teamName:$(e.teamName)?e.teamName:e.teamID,teamTitle:$(e.teamTitle)?e.teamTitle:$(e.teamName)?e.teamName:e.teamID,role:e.role,...$(e.label)?{label:e.label}:{},...WW(e.version)?{version:e.version}:{},...UW(e.staffed)?{staffed:e.staffed}:{}})),launches:t(e.launches).filter(e=>$(e.id)&&$(e.state)&&WW(e.version)).map(e=>({id:e.id,state:e.state,...$(e.outcome)?{outcome:e.outcome}:{},version:e.version,...$(e.sessionID)?{sessionID:e.sessionID}:{},created:UW(e.created)?e.created:0,updated:UW(e.updated)?e.updated:0})),workspaces:t(e.workspaces).filter(e=>$(e.workspaceID)).map(e=>({workspaceID:e.workspaceID,...$(e.title)?{title:e.title}:{},sessions:UW(e.sessions)?e.sessions:0})),projects:GW(e.projects),hidden:GW(e.hidden).filter(e=>sG.includes(e)),truncated:GW(e.truncated)}}var uG=(e,t)=>t?`/teams/${encodeURIComponent(e)}`:`/watchtower?group=team&team=${encodeURIComponent(e)}`;function dG(e,t){let n={};for(let t of e){let e=t.key.trim(),r=t.value.trim();if(e||r){if(!e)return{ok:!1,error:`Each detail needs a key`};if(e in n)return{ok:!1,error:`The key ${e} is listed twice`};n[e]=r}}let r=[...new Set(t.split(`,`).map(e=>e.trim()).filter(Boolean))],i=Ue(n)??IW(r);return i?{ok:!1,error:i}:{ok:!0,patch:{metadata:Object.keys(n).length?n:null,projects:r.length?r:null}}}function fG(e){if(!Q(e)||!$(e.profileID)||!WW(e.version)||!$(e.digest))return;let t=e=>Q(e)&&$(e.name)?{name:e.name,description:$(e.description)?e.description:``}:void 0;return{profileID:e.profileID,version:e.version,digest:e.digest,createdAt:UW(e.createdAt)?e.createdAt:0,bytes:UW(e.bytes)?e.bytes:0,instructions:e.instructions===!0,...$(e.model)?{model:e.model}:{},skills:(Array.isArray(e.skills)?e.skills:[]).flatMap(e=>t(e)??[]),commands:(Array.isArray(e.commands)?e.commands:[]).flatMap(e=>{let n=t(e);return n?[{...n,params:GW(e.params)}]:[]}),secretRefs:GW(e.secretRefs)}}function pG(e){if(Q(e)&&WW(e.version)&&$(e.digest))return{version:e.version,digest:e.digest,bytes:UW(e.bytes)?e.bytes:0,createdAt:UW(e.createdAt)?e.createdAt:0}}var mG=e=>KW(e,pG);function hG(e){let t=Q(e)?e.version:void 0;if(!Q(t)||!$(t.profileID)||!WW(t.version)||!$(t.digest)||!Q(t.content))return;let n=t.content,r={...$(n.instructions)?{instructions:n.instructions}:{},...$(n.model)?{model:n.model}:{},skills:(Array.isArray(n.skills)?n.skills:[]).filter(e=>Q(e)&&$(e.name)).map(e=>({name:e.name,description:$(e.description)?e.description:``,body:$(e.body)?e.body:``})),commands:(Array.isArray(n.commands)?n.commands:[]).filter(e=>Q(e)&&$(e.name)).map(e=>({name:e.name,description:$(e.description)?e.description:``,template:$(e.template)?e.template:``}))};return{profileID:t.profileID,version:t.version,digest:t.digest,createdAt:UW(t.createdAt)?t.createdAt:0,content:r}}function gG(e){if(Q(e)&&PW.includes(e.status)&&$(e.digest))return{status:e.status,digest:e.digest,notes:GW(e.notes),at:UW(e.at)?e.at:0,offline:e.offline===!0}}function _G(e){if(Q(e)&&$(e.profileID)&&WW(e.version)&&$(e.digest)&&(e.status===`applied`||e.status===`partial`))return{profileID:e.profileID,version:e.version,digest:e.digest,status:e.status,at:UW(e.at)?e.at:0}}function vG(e){if(!Q(e)||!$(e.sessionID)||!$(e.profileID)||!WW(e.version)||!UW(e.revision))return;let t=gG(e.ack),n=_G(e.effective);return{sessionID:e.sessionID,profileID:e.profileID,version:e.version,revision:e.revision,...t?{ack:t}:{},...n?{effective:n}:{}}}function yG(e){if(!Q(e)||!(`assignment`in e))return;if(e.assignment===null)return{assignment:null};let t=vG(e.assignment);if(!t)return;let n=qW(e.profile),r=fG(e.version);return{assignment:t,...n?{profile:n}:{},...r?{version:r}:{}}}var bG={pending:`Pending`,applied:`Applied`,partial:`Partly applied`,rejected:`Rejected`,unsupported:`Unsupported`,restart_required:`Restart required`},xG={applied:`ok`,partial:`warn`,restart_required:`warn`,pending:`pending`,unsupported:`err`,rejected:`err`};function SG(e){let t=e.assignment;if(!t)return{label:`No profile`,tone:`none`,detail:`No agent profile is pinned to this session`};let n=e.profile?.name??`profile`,r=t.ack?.status??`pending`,i=t.effective?.profileID===t.profileID,a=i?t.effective?.version:void 0,o=t.effective?i?t.effective.version===t.version?``:` · running v${t.effective.version}`:` · running another profile`:``,s=e.profile&&e.profile.state===`active`&&e.profile.latestVersion>t.version?e.profile.latestVersion:void 0;return{label:`${n} v${t.version}${o}`,tone:xG[r],detail:`${e.profile?.title??n} v${t.version}: ${bG[r]}${t.ack?.offline?` (machine offline)`:``}${s?` · v${s} available`:``}`,requested:t.version,...a===void 0?{}:{effective:a},...s?{upgrade:s}:{}}}function CG(e){let t=e.assignment;if(!t)return[];let n=`v${t.version}`,r=t.ack,i=[];switch(r?.status??`pending`){case`pending`:i.push(r?.offline?`No connected machine reports this session (offline); the hub applies ${n} when it reconnects.`:`Waiting for the session's harness to confirm ${n} (a busy session answers after its current turn).`);break;case`applied`:i.push(`${n} is in effect from the next prompt.`);break;case`partial`:i.push(`${n} applied in part; the harness says what didn't:`);break;case`restart_required`:i.push(`Accepted: ${n} takes effect only after the session restarts.`);break;case`unsupported`:i.push(`This session's harness can't apply ${n}; nothing changed in the session.`);break;case`rejected`:i.push(`The session refused ${n}; nothing new took effect.`)}i.push(...r?.notes??[]);let a=t.effective;return a&&(a.profileID!==t.profileID||a.version!==t.version)&&i.push(a.profileID===t.profileID?`The session still runs v${a.version} until it confirms ${n}.`:`The session still runs another profile (v${a.version}) until it confirms this pin.`),i}var wG=`Context a session already received can't be withdrawn: unpinning stops re-applying this profile, and what was applied stays until the session restarts. A newer version supersedes earlier context; it doesn't erase it.`,TG={opencode:`OpenCode: instructions, skills and commands apply from the next turn (a busy session finishes its turn first). Commands that use secrets and the model preference are skipped; the hub re-sends the pin after an OpenCode restart.`,"claude-code":`Claude Code: instructions reach the model as hook context. Skills and commands are not applied (Claude Code loads them only at start from its own directories); the model changes only in hub-launched sessions.`,codex:`Codex: instructions apply as one context message; skills are written as session files (partial); commands are not applied, and the model preference is ignored.`},EG=e=>TG[e]??`This harness reports what took effect after you pin; presets can't apply profiles.`,DG=()=>({instructions:``,model:``,skills:[],commands:[]}),OG=e=>({instructions:e.instructions??``,model:e.model??``,skills:e.skills.map(e=>({...e})),commands:e.commands.map(e=>({...e}))});function kG(e){let t=e.instructions.trim(),n=e.model.trim(),r={...t?{instructions:t}:{},...n?{model:n}:{},skills:e.skills.map(e=>({name:e.name.trim(),description:e.description.trim(),body:e.body})),commands:e.commands.map(e=>({name:e.name.trim(),description:e.description.trim(),template:e.template}))},i=FW(r);if(i)return{ok:!1,error:i};for(let e of r.commands){let t=HW(e.template);if(typeof t==`string`)return{ok:!1,error:`commands.${e.name}: ${t}`}}return{ok:!0,content:r}}function AG(e,t){let n=kG(e);return!n.ok||RW(n.content)!==RW(t)}function jG(e,t){let n=kG(t);if(!n.ok)return n;let r=[...new Set(e.tags.split(`,`).map(e=>e.trim()).filter(Boolean))],i=e.description.trim(),a={name:e.name.trim(),title:e.title.trim(),...i?{description:i}:{},...r.length?{tags:r}:{},content:n.content},o=LW(a);return o?{ok:!1,error:o}:{ok:!0,body:a}}function MG(e){let t=HW(e);if(typeof t==`string`)return{error:t};let n=[],r=[];for(let e of t)`param`in e&&!n.includes(e.param)&&n.push(e.param),`secret`in e&&!r.includes(e.secret)&&r.push(e.secret);return{params:n,secrets:r}}var NG=4e3;function PG(e,t){let n={};for(let r of e){let e=t[r]??``;if(e.length>4e3)return{ok:!1,error:`${r} must be at most ${NG} characters`};n[r]=e}return{ok:!0,body:{params:n}}}function FG(e,t){let n=t.trim().replace(/^\//,``).toLowerCase();if(!n)return[...e];let r=e=>e.name.toLowerCase().startsWith(n)?0:e.name.toLowerCase().includes(n)?1:e.description.toLowerCase().includes(n)?2:3;return e.map((e,t)=>({c:e,i:t,r:r(e)})).filter(e=>e.r<3).sort((e,t)=>e.r-t.r||e.i-t.i).map(e=>e.c)}var IG=`Control+Alt+P`,LG=e=>e.ctrlKey&&e.altKey&&!e.metaKey&&!e.shiftKey&&e.code===`KeyP`,RG=(e,t)=>e?e.endsWith(`
|
|
31
|
+
`)?e+t:`${e}\n${t}`:t,zG=(e,t,n)=>({profileID:e,version:t,expectedRevision:n.assignment?.revision??0});function BG(e,t,n){let r=e.assignment;return r?r.profileID===t?n>r.version?{kind:`upgrade`,label:`Upgrade to v${n}`}:n<r.version?{kind:`rollback`,label:`Roll back to v${n}`}:{kind:`same`,label:`Re-apply v${n}`}:{kind:`switch`,label:`Switch to v${n}`}:{kind:`pin`,label:`Pin v${n}`}}var VG=e=>!!e.assignment&&(e.assignment.ack?.status??`pending`)===`pending`,HG=15e3,UG=16,WG=e=>e>=UG?void 0:Math.min(HG,1e3*2**e);function GG(e){let t=e,n=t?.message??String(e);switch(t?.code){case`conflict`:return`Changed elsewhere meanwhile${UW(t.details?.currentRevision)?` (now revision ${t.details.currentRevision})`:``}. Reloaded: check and try again. (${n})`;case`unsupported`:return`Not supported: ${n}`;case`offline`:return`The session's machine is offline: ${n}`;case`forbidden`:return`Not allowed: ${n}`;case`not_found`:return`Not found: ${n}`}return t?.status===503?`The session's machine is offline: ${n}`:n}var KG=encodeURIComponent,qG=`/api/agent`,JG={list:(e=`active`,t=!0)=>`${qG}/profiles?state=${e}&limit=200${t?`&include=usage,summary`:``}`,usage:(e,t)=>`${qG}/profiles/${KG(e)}/usage?limit=200${t?`&cursor=${KG(t)}`:``}`,create:()=>`${qG}/profiles`,one:e=>`${qG}/profiles/${KG(e)}`,versions:e=>`${qG}/profiles/${KG(e)}/versions`,version:(e,t)=>`${qG}/profiles/${KG(e)}/versions/${t}`,session:e=>`${qG}/sessions/${KG(e)}/profile`,unpin:(e,t)=>`${qG}/sessions/${KG(e)}/profile?expectedRevision=${t}`,render:(e,t)=>`${qG}/sessions/${KG(e)}/profile/commands/${KG(t)}/render`},YG=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,XG=async e=>e.json().catch(()=>({})),ZG=async(e=`active`)=>JW(await G(JG.list(e,!1))),QG=async(e=`active`)=>QW(await G(JG.list(e)));async function $G(e,t){let n=lG(await G(JG.usage(e,t)));if(!n)throw Error(`The hub sent an unreadable usage answer`);return n}async function eK(e,t){let n=qW((await XG(await V(JG.one(e.id),{method:`PATCH`,json:{expectedRevision:e.revision,...t}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function tK(e){let t=await G(JG.one(e)),n=qW(t.profile);if(!n)throw Error(`The hub sent an unreadable profile`);return{profile:n,latest:fG(t.latest)}}var nK=async e=>mG(await G(`${JG.versions(e)}?limit=200`));async function rK(e,t){let n=hG(await G(JG.version(e,t)));if(!n)throw Error(`The hub sent an unreadable version`);return n}async function iK(e,t){let n=qW((await XG(await V(JG.create(),{method:`POST`,json:e,headers:{"idempotency-key":t}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function aK(e,t,n){let r=qW((await XG(await V(JG.versions(e),{method:`POST`,json:t,headers:{"idempotency-key":n}}))).profile);if(!r)throw Error(`The hub sent an unreadable profile`);return r}async function oK(e,t){let n=qW((await XG(await V(JG.one(e.id),{method:`PATCH`,json:{expectedRevision:e.revision,state:t?`archived`:`active`}}))).profile);if(!n)throw Error(`The hub sent an unreadable profile`);return n}async function sK(e){let t=yG(await G(JG.session(e)));if(!t)throw Error(`The hub sent an unreadable profile pin`);return t}async function cK(e,t){await V(JG.session(e),{method:`PUT`,json:t})}async function lK(e,t){await V(JG.unpin(e,t),{method:`DELETE`})}async function uK(e,t,n){let r=await XG(await V(JG.render(e,t),{method:`POST`,json:n}));if(typeof r.prompt!=`string`)throw Error(`The hub sent no rendered text`);return{prompt:r.prompt,secretRefs:Array.isArray(r.secretRefs)?r.secretRefs.filter(e=>typeof e==`string`):[]}}var dK=I(`<p class="error small"role=alert>`),fK=I(`<input type=search role=combobox aria-label="Search commands"aria-controls=prof-commands aria-expanded=true placeholder="Type a command…"autofocus>`),pK=I(`<ul class=prof-commands id=prof-commands role=listbox aria-label=Commands>`),mK=I(`<p class=prof-note>Inserted text goes into this session's composer; review it, then send.`),hK=I(`<p class="muted small">No profile is pinned to this session, so it has no commands. Pin one from the session's profile chip.`),gK=I(`<p class="muted small">Loading commands…`),_K=I(`<p class="muted small">`),vK=I(`<li role=option class=prof-command><strong>/</strong><span class=prof-sub>`),yK=I(`<p class=prof-secret>Uses secret <!> (name only). The console never asks for or sees its value; the session's machine resolves it only when the harness runs the command itself. Inserted text keeps <code></code> as written.`),bK=I(`<form class=stack><p><strong>/</strong> <span class="muted small"></span></p><div class=row><button type=submit class="btn small primary">Insert into composer</button><button type=button class="btn small">Back`),xK=I(`<label><textarea>`);function SK(e){let t=e.view.assignment,[i]=d(async()=>{if(!t)return[];let n=e.view.version?.commands??[];try{return(await rK(t.profileID,t.version)).content.commands.map(e=>{let t=MG(e.template);return{name:e.name,description:e.description,params:`error`in t?[]:t.params,secrets:`error`in t?[]:t.secrets}})}catch{return n.map(e=>({...e,secrets:[]}))}}),[a,o]=u(``),[c,f]=u(0),[p,h]=u(),[g,_]=u({}),[v,x]=u(``),[S,w]=u(!1),T=C(()=>FG(i()??[],a())),E=e=>{e&&(h(e),_({}),x(``),e.params.length?requestAnimationFrame(()=>document.querySelector(`.prof-palette [data-param]`)?.focus()):D(e))},D=async t=>{let n=PG(t.params,g());if(!n.ok)return x(n.error);w(!0),x(``);try{let{prompt:r}=await uK(e.sessionID,t.name,n.body);ax.set(e.sessionID,RG(ax.get(e.sessionID),r)),e.onInserted()}catch(e){x(GG(e))}finally{w(!1)}},O=e=>{let t=T().length;e.key===`ArrowDown`&&t?(e.preventDefault(),f((c()+1)%t)):e.key===`ArrowUp`&&t?(e.preventDefault(),f((c()-1+t)%t)):e.key===`Enter`&&(e.preventDefault(),E(T()[c()]))},k=t=>`prof-cmd-${e.sessionID}-${t}`;return n(de,{open:!0,get title(){return`Commands · ${e.title}`},get onClose(){return e.onClose},class:`prof-dialog prof-palette`,get children(){return[n(l,{get when(){return p()},get fallback(){return n(l,{when:t,get fallback(){return hK()},get children(){return[(()=>{var e=fK();return e.$$keydown=O,e.$$input=e=>(o(e.currentTarget.value),f(0)),s(()=>b(e,`aria-activedescendant`,T().length?k(c()):void 0)),s(()=>e.value=a()),e})(),n(l,{get when(){return i()},get fallback(){return gK()},get children(){return n(l,{get when(){return T().length},get fallback(){return(()=>{var n=_K();return y(n,(()=>{var n=r(()=>!!i().length);return()=>n()?`No command matches.`:`${e.view.profile?.name??`This profile`} v${t.version} has no commands.`})()),n})()},get children(){var e=pK();return y(e,n(m,{get each(){return T()},children:(e,t)=>(()=>{var n=vK(),i=n.firstChild;i.firstChild;var a=i.nextSibling;return n.addEventListener(`pointerenter`,()=>f(t())),n.$$click=()=>E(e),y(i,()=>e.name,null),y(a,()=>e.description,null),y(a,(()=>{var t=r(()=>!!e.params.length);return()=>t()?` · asks for ${e.params.join(`, `)}`:``})(),null),y(a,(()=>{var t=r(()=>!!e.secrets.length);return()=>t()?` · uses secret ${e.secrets.join(`, `)}`:``})(),null),s(e=>{var r=k(t()),i=t()===c();return r!==e.e&&b(n,`id`,e.e=r),i!==e.t&&b(n,`aria-selected`,e.t=i),e},{e:void 0,t:void 0}),n})()})),e}})}}),mK()]}})},children:e=>(()=>{var t=bK(),r=t.firstChild,i=r.firstChild;i.firstChild;var a=i.nextSibling.nextSibling,o=r.nextSibling,c=o.firstChild,u=c.nextSibling;return t.addEventListener(`submit`,t=>(t.preventDefault(),void D(e()))),y(i,()=>e().name,null),y(a,()=>e().description),y(t,n(m,{get each(){return e().params},children:e=>(()=>{var t=xK(),n=t.firstChild;return y(t,e,n),n.$$input=t=>_({...g(),[e]:t.currentTarget.value}),b(n,`data-param`,e),b(n,`rows`,e===`arguments`?3:1),s(()=>n.value=g()[e]??``),t})()}),o),y(t,n(l,{get when(){return e().secrets.length},get children(){var t=yK(),n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling;return y(t,()=>e().secrets.join(`, `),n),y(r,()=>`{{secret:${e().secrets[0]}}}`),t}}),o),y(t,n(l,{get when(){return v()},get children(){var e=dK();return y(e,v),e}}),o),u.$$click=()=>h(void 0),s(()=>c.disabled=S()),t})()}),n(l,{get when(){return r(()=>!p())()&&v()},get children(){var e=dK();return y(e,v),e}})]}})}z([`input`,`keydown`,`click`]);var CK=I(`<span class=prof-up aria-hidden=true>↑v`),wK=I(`<button type=button>`),TK=I(`<section aria-label="Pinned profile"><h3>Pinned`),EK=I(`<label>Profile<select aria-label=Profile>`),DK=I(`<label>Version<select aria-label=Version>`),OK=I(`<div class=row><button type=button class="btn small primary">`),kK=I(`<section aria-label="Pin a profile"><h3></h3><p class=prof-note>`),AK=I(`<p class="error small"role=alert>`),jK=I(`<p class="muted small">No profile is pinned to this session.`),MK=I(`<div class=prof-status><span></span><strong class=small>`),NK=I(`<ul class=prof-guidance aria-label="What took effect">`),PK=I(`<p class=prof-note>`),FK=I(`<div class=row><button type=button class="btn small">Unpin</button><button type=button class="btn small">Commands… (Ctrl+Alt+P)`),IK=I(`<li>`),LK=I(`<div class=prof-upgrade><span>v<!> of <!> is available. This session stays on v<!> until you upgrade it.</span><button type=button class="btn small primary">Upgrade to v`),RK=I(`<p class="muted small">`),zK=I(`<p class="muted small">No active profiles. Create one under Agent profiles (/profiles).`),BK=I(`<option> (<!>)`),VK=I(`<option>v`),HK=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`this session`};function UK(e){let[i,a]=u(),[o,c]=u(!0),[d,f]=u(!1),[p,m]=u(!1),h,g,_=0,v=!0,x=async()=>{try{let t=await sK(e.sessionID);if(!v)return;a(t),c(!0),S()}catch(e){if(!v)return;e instanceof W&&(e.status===404||e.status===403)&&c(!1)}},S=()=>{clearTimeout(g);let e=i();if(!e||!VG(e))return void(_=0);let t=WG(_++);t!==void 0&&(g=setTimeout(()=>void x(),t))},C=async()=>{_=0,await x()};fe(()=>void x()),M(()=>{v=!1,clearTimeout(g)}),fe(()=>{let t=t=>{LG(t)&&e.takesInput()&&o()&&i()&&(t.preventDefault(),m(!0))};document.addEventListener(`keydown`,t),M(()=>document.removeEventListener(`keydown`,t))});let w=()=>SG(i()??{assignment:null}),T=()=>h?.closest(`.session-layout`)?.querySelector(`textarea[aria-label="Message"]`)?.focus();return n(l,{get when(){return r(()=>!!o())()&&i()},get children(){return[(()=>{var e=wK();e.$$click=()=>{f(!0),x()};var a=h;return typeof a==`function`?t(a,e):h=e,b(e,`aria-keyshortcuts`,IG),y(e,(()=>{var e=r(()=>!!i().assignment);return()=>e()?w().label:`Profile`})(),null),y(e,n(l,{get when(){return w().upgrade},get children(){var e=CK();return e.firstChild,y(e,()=>w().upgrade,null),e}}),null),s(t=>{var n=`prof-chip ${w().tone}`,r=i().assignment?.ack?.status??`none`,a=`${w().detail}. Commands: ${IG}`,o=i().assignment?`Agent profile: ${w().label}, ${bG[i().assignment.ack?.status??`pending`]}${w().upgrade?`, v${w().upgrade} available`:``}`:`Agent profile: none`;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`data-profile-status`,t.t=r),a!==t.a&&b(e,`title`,t.a=a),o!==t.o&&b(e,`aria-label`,t.o=o),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),n(l,{get when(){return d()},get children(){return n(WK,{get sessionID(){return e.sessionID},get harness(){return e.harness},get view(){return i()},onClose:()=>f(!1),onChanged:()=>void C(),onCommands:()=>{f(!1),m(!0)}})}}),n(l,{get when(){return p()},get children(){return n(SK,{get sessionID(){return e.sessionID},get title(){return HK(e.sessionID)},get view(){return i()},onClose:()=>m(!1),onInserted:()=>{m(!1),requestAnimationFrame(T)}})}})]}})}function WK(t){let[i]=d(()=>ZG(`active`).then(e=>e.items)),[a,o]=u(t.view.assignment?.profileID??``),[c,f]=u(0),[p,h]=u(``),[g,_]=u(!1);x(()=>{let e=i.error?void 0:i();e?.length&&!e.some(e=>e.id===a())&&o(e[0].id)});let[v]=d(()=>a()||void 0,e=>nK(e).then(e=>e.items));x(e([()=>v.error?void 0:v(),()=>t.view.assignment?.profileID,()=>t.view.assignment?.version],([e])=>{if(!e?.length)return;let n=t.view.assignment;f(n&&n.profileID===a()&&e.some(e=>e.version===n.version)?n.version:e[0].version)}));let S=()=>SG(t.view),C=()=>CG(t.view),w=()=>BG(t.view,a(),c()),T=async(e,n,r)=>{_(!0),h(``);try{await cK(t.sessionID,zG(e,n,t.view)),q(r),t.onChanged()}catch(e){h(GG(e)),t.onChanged()}finally{_(!1)}},E=async()=>{let e=t.view.assignment;if(e){_(!0),h(``);try{await lK(t.sessionID,e.revision),q(`Unpinned. What the session already applied stays until it restarts.`),t.onChanged()}catch(e){h(GG(e)),t.onChanged()}finally{_(!1)}}};return n(de,{open:!0,get title(){return`Agent profile · ${HK(t.sessionID)}`},get onClose(){return t.onClose},class:`prof-dialog`,get children(){return[(()=>{var e=TK();return e.firstChild,y(e,n(l,{get when(){return t.view.assignment},get fallback(){return jK()},children:e=>[(()=>{var t=MK(),n=t.firstChild,r=n.nextSibling;return y(n,()=>S().label),y(r,()=>bG[e().ack?.status??`pending`],null),y(r,()=>e().ack?.offline?` · machine offline`:``,null),s(t=>{var i=`prof-chip ${S().tone}`,a=e().ack?.status??`pending`;return i!==t.e&&k(n,t.e=i),a!==t.t&&b(r,`data-ack`,t.t=a),t},{e:void 0,t:void 0}),t})(),(()=>{var e=NK();return y(e,n(m,{get each(){return C()},children:e=>(()=>{var t=IK();return y(t,e),t})()})),e})(),n(l,{get when(){return S().upgrade},children:n=>(()=>{var r=LK(),i=r.firstChild,a=i.firstChild.nextSibling,o=a.nextSibling.nextSibling,c=o.nextSibling.nextSibling;c.nextSibling;var l=i.nextSibling;return l.firstChild,y(i,n,a),y(i,()=>t.view.profile?.name??`this profile`,o),y(i,()=>e().version,c),l.$$click=()=>void T(e().profileID,n(),`Upgrading to v${n()}…`),y(l,n,null),s(()=>l.disabled=g()),r})()}),(()=>{var e=PK();return y(e,wG),e})(),(()=>{var e=FK(),n=e.firstChild,r=n.nextSibling;return n.$$click=()=>void E(),B(r,`click`,t.onCommands,!0),b(r,`aria-keyshortcuts`,IG),s(()=>n.disabled=g()),e})()]}),null),e})(),(()=>{var e=kK(),u=e.firstChild,d=u.nextSibling;return y(u,()=>t.view.assignment?`Change the pin`:`Pin a profile`),y(d,()=>EG(t.harness)),y(e,n(l,{get when(){return r(()=>!i.error)()&&i()},get fallback(){return(()=>{var e=RK();return y(e,(()=>{var e=r(()=>!!i.error);return()=>e()?GG(i.error):`Loading profiles…`})()),e})()},get children(){return n(l,{get when(){return i().length},get fallback(){return zK()},get children(){return[(()=>{var e=EK(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>o(e.currentTarget.value)),y(t,n(m,{get each(){return i()},children:e=>(()=>{var t=BK(),n=t.firstChild,r=n.nextSibling;return r.nextSibling,y(t,()=>e.title,n),y(t,()=>e.name,r),s(()=>t.value=e.id),t})()})),s(()=>t.value=a()),e})(),(()=>{var e=DK(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>f(Number(e.currentTarget.value))),y(t,n(m,{get each(){return r(()=>!!v.error)()?[]:v()??[]},children:(e,t)=>(()=>{var n=VK();return n.firstChild,y(n,()=>e.version,null),y(n,()=>t()===0?` (latest)`:``,null),s(()=>n.value=String(e.version)),n})()})),s(()=>t.disabled=!!v.error||!v()),s(()=>t.value=String(c())),e})(),(()=>{var e=OK(),t=e.firstChild;return t.$$click=()=>void T(a(),c(),`${w().label}: sent to the session`),y(t,()=>w().label),s(()=>t.disabled=g()||!a()||!c()),e})()]}})}}),null),s(()=>b(d,`data-harness`,t.harness)),e})(),n(l,{get when(){return p()},get children(){var e=AK();return y(e,p),e}})]}})}z([`click`]);var GK=10;function KK(e){let t=e?.harness||`opencode`,n=new Set(e?.features??[]),r=(e,r)=>n.has(e)?{enabled:!0}:t===`opencode`?{enabled:!1,reason:`${r} needs a newer Hub plugin, or an OpenCode process that reaches its own server`}:{enabled:!1,reason:`${r} is not supported for ${bz(t)} sessions yet`};return{fork:r(`fork`,`Fork`),revert:r(`revert`,`Revert`)}}var qK=e=>Number.isSafeInteger(e)&&e>=0?e:0;function JK(e){let t=e?.revert;if(!t||typeof t!=`object`||typeof t.messageID!=`string`||!t.messageID)return;let n=Array.isArray(t.files)?t.files.filter(e=>!!e&&typeof e.file==`string`):[];return{messageID:t.messageID,hidden:qK(t.hidden),...typeof t.at==`number`&&Number.isFinite(t.at)?{at:t.at}:{},files:n,filesTotal:Math.max(qK(t.filesTotal),n.length),...YK(t.stagedAt)?{stagedAt:t.stagedAt}:{}}}var YK=e=>typeof e==`number`&&Number.isFinite(e);function XK(e){let t=e?.revertCommitted;if(t&&typeof t==`object`&&typeof t.messageID==`string`&&t.messageID&&YK(t.until)&&YK(t.at))return{messageID:t.messageID,...YK(t.from)?{from:t.from}:{},until:t.until,at:t.at}}function ZK(e){let t=XK(e);return`${JK(e)?.messageID??``}|${t?`${t.messageID}@${t.at}`:``}`}function QK(e){let t=Math.max(e.filesTotal,e.files.length);return{text:`${_n(e.hidden,`message`)} reverted`,...t?{files:`${_n(t,`file`)} restored`}:{}}}function $K(e){let t=Math.max(e.filesTotal,e.files.length);if(!t)return;let n=e.files.slice(0,GK).map(e=>e.file),r=t-n.length;return[`Revert ${_n(e.hidden,`message`)}?`,``,`The session changed ${_n(t,`file`)} since then; ${t===1?`it goes`:`they go`} back to how ${t===1?`it was`:`they were`}:`,n.join(`
|
|
32
32
|
`)+(r>0?`\nand ${r} more`:``),``,`Restore undoes the revert until you send the next message.`].join(`
|
|
33
|
-
`)}function YK(e,t,n){return e.kind!==`message`||typeof e.at!=`number`?!1:t?.at!==void 0&&e.at>=t.at&&(t.stagedAt===void 0||e.at<t.stagedAt)||n?.from!==void 0&&e.at>=n.from&&e.at<n.until}function XK(e,t){return t===void 0?e:e.trim()===t.trim()?``:e}var ZK=new Map;function QK(e,t){t.length&&ZK.set(e,t)}function $K(e){let t=ZK.get(e)??[];return ZK.delete(e),t}var eq=I(`<button type=button class="btn small changes"aria-label="Show changes"><span class=add>+</span> <span class=del>−`),tq=I(`<div class="banner warn">No connected OpenCode process reports this session. It is read-only until its machine reconnects.`),nq=I(`<p class="muted pad no-timeline"data-unavailable=timeline>The hub can't show this <!> session's transcript; follow it in its terminal. Hub messages and live activity still appear here.`),rq=I(`<div class=history-sentinel aria-hidden=true>`),iq=I(`<p class="history-edge loading muted small"role=status><span class="spinner small"></span> Loading earlier messages…`),aq=I(`<p class="history-edge muted small">Beginning of conversation`),oq=I(`<p class="history-edge error small"role=alert>Couldn't load earlier messages: <!> <button type=button class="btn small">Retry`),sq=I(`<p class="muted small pane-unstreamed"role=status>Live text isn't streamed to this pane right now; the reply appears when the turn ends.`),cq=I(`<p class="working-line muted"role=status><span class="spinner small"></span> `),lq=I(`<p class="idle-line muted small"> · last activity `),uq=I(`<button type=button class="btn primary tap-to-start">Tap to start Voice mode`),dq=I(`<p class="note err voice-error"role=alert>Voice mode: `),fq=I(`<div class=sheet-backdrop>`),pq=I(`<div><div class=session-main><header class=topbar><div class=topbar-title></div></header><div class=scroller><div class=column></div></div><div class=dock><div class=column>`),mq=I(`<a class="crumb muted"> <span class=crumb-sep aria-hidden=true>/`),hq=I(`<h1 class=title>`),gq=I(`<h1 class=title><button type=button class=title-btn>`),_q=I(`<span class=chip-server><span aria-hidden=true></span><span class=place-sep aria-hidden=true>·</span><span class=place-where>`),vq=I(`<span> · `),yq=I(`<span class=place-branch>`),bq=I(`<div class=session-place><span aria-hidden=true></span><span class=place-machine></span><span class=place-sep aria-hidden=true>·</span><span class=place-where>`),xq=I(`<span class=session-error-status>`),Sq=I(`<span class="session-error-where muted">in subagent `),Cq=I(`<div class=session-error-message>`),wq=I(`<div class="banner session-error"role=alert><span class=session-error-mark aria-hidden=true>✕</span><div class=session-error-body><div class=session-error-head><strong>`),Tq=I(`<p class="muted pad">Loading conversation…`),Eq=I(`<p class="muted pad empty-session">No messages yet. Type below, or start Voice mode.`),Dq=I(`<p>`),Oq=I(`<p class="answered-by small muted">`),kq=I(`<div class=revert-banner role=status><span class=revert-text><span class="muted revert-held"title="Messages from agents and apps are delivered after you restore or send"> · agent messages wait</span></span><button type=button class="btn small"title="Bring the messages and files back">Restore`),Aq=I(`<span class=muted> · `),jq=I(`<button type=button class="btn stop"aria-label="Stop the session and its subagents"> Stop`),Mq=I(`<div class=composer-unavailable data-no-prompt><p class="muted small">`),Nq=I(`<div class=empty><p class=display>Session not found</p><p class=muted>It may belong to another account, or it no longer exists.</p><a class="btn primary"href=/>Back to sessions`),Pq=3e4,Fq=80,Iq=100,Lq=2e3,Rq;function zq(i){let a=i.id,c=Cc(a,i.visible);M(()=>c.release()),x(()=>i.focused?.()&&c.focus());let d=()=>Cp()&&(i.rail?.()??!0),f,p=()=>{let e=f??d();f=void 0,Ep(!e)},h=()=>document.visibilityState===`visible`&&(i.visible?.()??!0),g=()=>_u(a),S=()=>gu().find(e=>e.id===a),w=()=>{let e=g();return e?Ci(e.machine.name,e.session,vt()?.branch):void 0},T=()=>g()?.session.status,E=()=>bo(re()?T()?.filter(e=>ie().has(e.id)):T()),D=()=>!g(),j=C(()=>xz(g()?.process)),ee=()=>Cz(j()),te=()=>!!g()&&!j().timeline,I=()=>g()?.session.exposed!==!1,ne=()=>typeof g()?.session.rootID==`string`?g().session.rootID:a,re=()=>ne()!==a;x(()=>{let e=g()?.session;if(!Z()||!e)return;let t=ne()===a?e.parentID:ne();dz(window.history,location.pathname+location.search+location.hash,typeof t==`string`?t:void 0)});let ie=C(()=>yo(T(),a)),oe=(e,t)=>e===ne()&&(!re()||typeof t==`string`&&ie().has(t)),se=()=>{let e=g()?.session.parentID;if(typeof e==`string`&&e)return{id:e,title:T()?.find(t=>t.id===e)?.title||_u(e)?.session.title||`Parent session`}},[ce,le]=u(),de=()=>{let e=ce();return e?e.value:UK(g()?.session)};x(()=>{let e=ce();e&&UK(g()?.session)?.messageID===e.value?.messageID&&le(void 0)});let pe=C(()=>VK(g()?.process)),me,z=new it,[B,ge]=u(0),_e=()=>ge(e=>e+1),[ve,ye]=u(!1),[be,xe]=u(!1),[Se,Ce]=u([]),[we,Te]=u({}),Ee=0,De=(e,t=``,n)=>Ce(r=>[...r.slice(-20),{key:`n${++Ee}`,text:e,kind:t,...n?{denial:n}:{}}]),[ke,Ae]=u([]),je=!1,Me=()=>{let e=su(),t=ke();return t.length?[...e,...t.filter(t=>!e.some(e=>e.seq===t.seq))]:e},Ne=e=>typeof e.sessionID==`string`?_t(Me(),e.sessionID,tB(z.rows(),e),pu):void 0,Pe=C(()=>(B(),new Set(z.rows().flatMap(e=>e.kind===`error`&&e.declined===!0?[Ne(e)?.key??``]:[]).filter(Boolean)))),Fe=new Map,Ie=C(()=>{B(),z.status(T(),a);let e=new Map,t=de(),n=GK(g()?.session),r=Jz(t||n?z.rows().filter(e=>!YK(e,t,n)):z.rows(),{denied:e=>Ne(e)?.text}).map(t=>{let n=JSON.stringify(t),r=Fe.get(t.key),i=r&&r.json===n?r:{json:n,block:t};return e.set(t.key,i),i.block});return Fe=e,r}),[Le,Re]=Or({}),ze,Be=!0,Ve=()=>requestAnimationFrame(()=>ze&&(ze.scrollTop=ze.scrollHeight));x(e(Ie,()=>Be&&Ve())),x(e(Ie,e=>{!je&&e.some(e=>e.type===`error`&&e.denied&&e.label===`Denied: the turn stopped`)&&(je=!0,G(`/api/agent/audit?limit=${Iq}`).then(e=>Ae(Xt(e).entries)).catch(()=>{}))}));let[Ue,We]=u(0),Ge=e=>new URLSearchParams(Object.entries(e).flatMap(([e,t])=>t===void 0?[]:[[e,String(t)]])).toString(),Ke=new gz(z,e=>G(`${H(a)}/timeline?${Ge(e)}`),{limit:Fq,onChange:()=>{Ye(()=>he(()=>{We(e=>e+1),_e()})),Ke.state===`idle`&&K()}}),qe=()=>(Ue(),{state:Ke.state,error:Ke.error}),Je=C(()=>(Ue(),Ke.cutMessageID));function Ye(e){let t=ze;if(!t||Be)return e();let n=t.getBoundingClientRect().top,r=Array.from(t.querySelectorAll(`.transcript > [data-key]`)).find(e=>e.getBoundingClientRect().bottom>n+1),i=r?.dataset.key,a=r?r.getBoundingClientRect().top:0;if(e(),!i)return;let o=Array.from(t.querySelectorAll(`.transcript > [data-key]`)).find(e=>e.dataset.key===i);o&&(t.scrollTop+=o.getBoundingClientRect().top-a)}let Xe,Ze;function K(){Ze&&ze&&typeof IntersectionObserver<`u`&&(Xe??=new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&void Ke.older(),{root:ze,rootMargin:`${Math.round(window.innerHeight*1.5)}px 0px 0px 0px`}),Xe.unobserve(Ze),Xe.observe(Ze))}M(()=>Xe?.disconnect());let Qe=e=>{Ze=e,requestAnimationFrame(()=>requestAnimationFrame(K))},$e=()=>`${de()?.messageID??``}|${KK({revertCommitted:GK(g()?.session)})}`,et=ae($e),tt=!1;x(e($e,e=>{if(e===et)return;let t=e.split(`|`)[0]===et.split(`|`)[0];et=e,t&&tt?tt=!1:ve()&&rt()}));async function rt(){z.clear(),_e();try{await Ke.first(),await ot(),Be=!0,Ve()}catch(e){De(`Could not refresh the conversation: ${U(e)}`,`err`)}}async function at(){if(te())return ye(!0);try{await Ke.first(),ye(!0),_e(),Ve()}catch(e){e instanceof W&&e.status===404&&!g()?xe(!0):te()||Oz(e)||De(e instanceof W&&e.status===409?`No OpenCode process for this session is connected; history is unavailable until it reconnects.`:`Could not load the conversation: ${U(e)}`,`err`),ye(!0)}}async function ot(){try{let{messages:e}=await G(`${H(a)}/messages?limit=200`);for(let t of e??[]){let e=nt(a,t);e&&z.hubMessage(e)}_e()}catch{}}async function st(){try{let e=await G(H(a)),t=Ml.feed(ne());t.load(e.activity??[]),e.status&&t.status(e.status)}catch{}}let lt=ae(()=>T()),dt=hu(e=>{if(e.type===`resync`){ve()?Ke.resync().catch(e=>De(`Could not refresh the conversation: ${U(e)}`,`err`)).then(ot):at().then(ot),st(),Dt();return}let t=typeof e.rootID==`string`?e.rootID:e.sessionID;if(e.type===`activity`&&oe(t,e.sessionID)&&e.item&&e.item.kind!==`thinking`)z.activity(e.sessionID,e.item),_e();else if(e.type===`reasoning`&&oe(t,e.sessionID)&&typeof e.messageID==`string`&&typeof e.delta==`string`)z.appendReasoning({sessionID:e.sessionID,messageID:e.messageID,delta:e.delta}),_e();else if(e.type===`delta`&&oe(t,e.sessionID)&&typeof e.messageID==`string`&&typeof e.text==`string`)z.appendText({sessionID:e.sessionID,messageID:e.messageID,...Number.isInteger(e.ordinal)?{ordinal:e.ordinal}:{},delta:e.text}),_e();else if(e.type===`message`){let t=nt(a,e.message);t&&(z.hubMessage(t),_e())}else if(e.type===`turn`&&e.sessionID===a&&nn){let{sub:t,sentAt:n}=nn;nn=void 0,on(e,t,n)}else if(e.type===`status`&&e.sessionID===ne()){for(let t of ey(lt,e.sessions,a))De(t,`sys`);let t=bo(lt);if(lt=e.sessions,!bo(e.sessions)){for(let e of z.rows())e.live&&z.upsert({key:e.key,live:!1});z.endReasoning(void 0),t&&c.streamed()===!1&&ve()&&Ke.resync().catch(()=>{}).then(ot)}_e(),kt()}}),ft;x(e(()=>g()?.session.updated,()=>{clearTimeout(ft),ft=setTimeout(()=>h()&&void Qu(a),400)}));let pt=(e,t=!1)=>V(`${H(a)}/presence`,{method:`POST`,json:{visible:e},keepalive:t}).catch(()=>{}),mt=()=>{pt(h(),document.visibilityState!==`visible`),h()&&Qu(a,!0)};x(e(()=>i.visible?.()??!0,()=>mt(),{defer:!0}));let ht=ae(c.streamed);x(e(c.streamed,e=>{if(e===void 0)return;let t=ht===!1&&e;ht=e,t&&ve()&&Ke.resync().catch(()=>{}).then(ot)}));let gt,[vt,yt]=u(),[bt,xt]=u(``),[St,Ct]=u(!0),wt=0,Tt,Et=0;async function Dt(){if(wt=Date.now(),g()&&!j().summary)return xt(`Details aren't available for ${j().harnessName} sessions.`),Ct(!1);try{let e=await G(`${H(a)}/summary`);yt(e),xt(``),(!e.branch||!e.changes)&&Et<2&&(Et++,clearTimeout(Tt),Tt=setTimeout(Dt,4e3))}catch(e){xt(e instanceof W&&e.status===409?`The machine is disconnected.`:`Could not load details: ${U(e)}`)}finally{Ct(!1)}}function kt(){clearTimeout(Tt),Tt=setTimeout(Dt,Math.max(0,Lq-(Date.now()-wt)))}let[At,jt]=u(),Mt=tV(()=>a),[Nt,Pt]=u(),[Ft,It]=u({...O_(),draft:ax.get(a)}),Lt=e=>{It(t=>k_(t,e)),ax.set(a,Ft().draft)};M(ax.subscribe(e=>{e===a&&ax.get(a)!==Ft().draft&&It(e=>k_(e,{type:`input`,text:ax.get(a)}))}));let Rt=()=>wz(j(),E()),zt=()=>{let e=A_(Ft(),{running:E(),offline:D()}),t=Rt();return{...e,canSubmit:e.canSubmit&&t.allowed,showStop:e.showStop&&j().stop,...!e.hint&&t.hint?{hint:t.hint}:{}}},Bt=0,[Ht,Ut]=u(!1),Wt=Promise.resolve();function Gt(e){Wt=Wt.then(async()=>{Ut(!0);try{for(let t of e)try{Lt({type:`attach`,image:await uS(t,Ft().images)})}catch(e){Lt({type:`attachError`,message:U(e)})}}finally{Ut(!1)}})}async function Kt(e,t,n){let r=[];for(let i of n)if(S_(i.mime))try{let n=await(await V(Rz(e,t,i.index))).blob();r.push(await uS(new File([n],i.name||`image`,{type:i.mime}),r))}catch{}return r}async function qt(e){try{await navigator.clipboard.writeText(e),q(`Copied`)}catch{q(`Could not copy: the browser refused`,`err`)}}async function Jt(e,t=!1){try{let n=await(await V(`${H(a)}/fork`,{method:`POST`,json:{messageID:e}})).json();n.text&&ax.set(n.sessionID,n.text),QK(n.sessionID,await Kt(a,e,n.attachments??[])),q(t?`Forked into a new session beside this one`:`Forked into a new session`),t?wn(n.sessionID):Vt(Ot(n.sessionID))}catch(e){q(Oz(e)??`Could not fork: ${U(e)}`,`err`)}}async function Yt(e){if(E())return q(`Wait for the session to finish (or stop it) before reverting`,`warn`);try{let t=JK(await G(`${H(a)}/revert/preview?messageID=${encodeURIComponent(e)}`));if(t&&!await P(t,`Revert`,{danger:!0}))return;let n=await(await V(`${H(a)}/revert`,{method:`POST`,json:{messageID:e,files:!0}})).json();le({value:UK({revert:n.revert})}),he(()=>{for(let e of Ft().images)Lt({type:`detach`,id:e.id});Lt({type:`input`,text:n.text??``})}),me=n.text??``;for(let t of await Kt(a,e,n.attachments??[]))Lt({type:`attach`,image:t})}catch(e){q(Oz(e)??`Could not revert: ${U(e)}`,`err`)}}async function Zt(){try{await V(`${H(a)}/revert/restore`,{method:`POST`,json:{}}),le({value:void 0}),Lt({type:`input`,text:XK(Ft().draft,me)}),me=void 0}catch(e){q(`Could not restore: ${U(e)}`,`err`)}}async function Qt(){if(!de())return!0;try{return await V(`${H(a)}/revert/commit`,{method:`POST`,json:{}}),tt=!0,le({value:void 0}),me=void 0,!0}catch(e){return q(`Could not send: the revert could not be completed (${U(e)})`,`err`),!1}}let $t=()=>{let e=pe();return{fork:e.fork,revert:e.revert.enabled&&E()?{enabled:!1,reason:`Wait for the session to finish (or stop it) before reverting`}:e.revert,onCopy:e=>void qt(e),onFork:e=>void Jt(e),onForkBeside:e=>void Jt(e,!0),onRevert:e=>void Yt(e)}};async function en(){let e=Ft().draft.trim(),t=Ft().images;if(!e&&!t.length||de()&&!await Qt())return;if(dn()&&!t.length){Lt({type:`input`,text:``}),qb.sendTyped(a,e);return}let n=++Bt,r=`local:${n}`,i=E(),o=Date.now();he(()=>{Lt({type:`submit`,id:n}),z.upsert({key:r,kind:`user`,text:e,at:o,...t.length?{images:t.map(({name:e,mime:t,preview:n})=>({name:e,mime:t,preview:n}))}:{}}),Te(e=>({...e,[r]:`pending`})),_e()}),Be=!0,Ve();try{let i={text:e,...t.length?{images:t.map(({mime:e,data:t,name:n})=>({mime:e,data:t,name:n}))}:{}},s=await V(`${H(a)}/turn`,{method:`POST`,json:i,headers:{prefer:`respond-async`}}),c=await s.json().catch(()=>({})),l=j_(s.status,c);Lt({type:`accepted`,id:n});let u=Tz(j(),l);Te(e=>({...e,[r]:u.tick})),u.toast&&q(u.toast),l===`accepted`?nn={sub:n,sentAt:o}:on(c,n,o)}catch(e){if(e instanceof tn&&!i&&await N_(E)){Lt({type:`accepted`,id:n}),Te(e=>({...e,[r]:`sent`})),De(`Lost the connection to the hub after sending; the session is working on your message and its reply will appear here.`,`sys`);return}let t=Oz(e);t&&q(t,`err`);let a=t??(e instanceof W&&e.status===504?`OpenCode did not answer in time. The session may still be working.`:U(e));he(()=>{Lt({type:`rejected`,id:n,message:a}),z.upsert({key:r,kind:`user`,text:``,images:[]}),_e()})}}let nn,[rn,an]=u(new Set);function on(e,t,n){let r=z.rows().some(e=>e.kind===`assistant`&&(e.at??0)>=n&&e.text);e.reply&&!r&&z.upsert({key:`reply:${t}`,kind:`assistant`,text:e.reply,at:Date.now()});let i=He(su(),new Set([a,...ie()]),Date.now(),void 0,pu),o=M_(e,{denied:i?.text});o&&De(o.text,o.kind,i&&o.text.startsWith(i.text)?i.key:void 0),i&&o?.text.startsWith(i.text)&&an(e=>new Set([...e,i.key])),_e()}async function sn(){Lt({type:`stop`});try{let{stopped:e}=await(await V(`${H(a)}/stop`,{method:`POST`,json:{}})).json(),t=Array.isArray(e)?e.length:0;q(t?`Stopped ${t} session${t===1?``:`s`}`:`Nothing was running`)}catch(e){q(Oz(e)??`Could not stop: ${U(e)}`,`err`)}finally{Lt({type:`stopped`})}}let cn=()=>lx(a),ln=()=>c.takesInput()?ox.toggle(a):c.focus(),un=rx,dn=()=>un().phase!==`off`&&un().sessionID===a,fn=()=>un().phase!==`off`&&un().sessionID!==void 0&&un().sessionID!==a,pn=()=>un().error?.sessionID===a&&!un().error.gesture?un().error.message:void 0,mn=()=>un().error?.sessionID===a&&un().error.gesture===!0,hn=()=>fo(zl()??void 0,X()?.publicURL)?.micBlocked?`Set up speech in Settings to use the microphone`:void 0;M(qb.attach(a,{user:e=>{let t=`voice:${++Ee}`;return z.upsert({key:t,kind:`user`,text:e,at:Date.now()}),Te(e=>({...e,[t]:`pending`})),_e(),t},tick:(e,t)=>Te(n=>({...n,[e]:t})),agent:e=>{let t=e.messageID?z.liveTextKey(e.messageID):`say:${++Ee}`,{mode:n,text:r}=$v(z.get(t)?.text??``,e.text);n!==`keep`&&(z.upsert({key:t,messageID:e.messageID,kind:`assistant`,text:r,at:z.get(t)?.at??Date.now()}),_e())},note:(e,t)=>De(e,t??`sys`)}));async function gn(){if(!dn()&&!c.takesInput())return c.focus();dn()||(Ty(),ox.cancel()),await qb.toggle(a),qb.isOn(a)&&qb.state.phase===`on`&&De(`Voice mode on${qb.state.agent?` (${qb.state.agent} agent)`:``}. Speak naturally; say “stop” to interrupt, “pause listening” to end.`,`sys`)}let _n=zy(location.href);_n.voice&&(Rq=a,Vt(_n.path,{replace:!0})),x(()=>{Rq===a&&g()&&!hn()&&(Rq=void 0,dn()||gn())}),fe(()=>{for(let e of $K(a))Lt({type:`attach`,image:e});let e=yS(a);e&&(he(()=>{Lt({type:`input`,text:e.text});for(let t of e.images)Lt({type:`attach`,image:t})}),en()),st(),Qu(a,h()),pt(h()),gt=setInterval(()=>h()&&void pt(!0),Pq),document.addEventListener(`visibilitychange`,mt)});let vn=!1;x(()=>{!vn&&Y.machines&&(vn=!0,ae(()=>{at().then(ot),Dt(),(!g()||j().models)&&Mt.load()}))});let yn=()=>void pt(!1,!0);window.addEventListener(`pagehide`,yn),M(()=>{dt(),clearInterval(gt),clearTimeout(Tt),clearTimeout(ft),document.removeEventListener(`visibilitychange`,mt),window.removeEventListener(`pagehide`,yn),yn()});let bn=!1;x(()=>{if(g())bn=!0;else if(bn&&Y.machines){if(i.onGone)return i.onGone();q(`That session is gone (deleted, or its machine was revoked).`,`warn`),Vt(`/`,{replace:!0})}});let xn=()=>Br(g()?.session).filter(e=>!re()||e.sessionID!==void 0&&ie().has(e.sessionID)),Sn=C(()=>new Map(xn().map(e=>[`${e.kind}:${e.id}`,e]))),Cn=C((e=[])=>{let t=[...Sn().keys()];return t.length===e.length&&t.every((t,n)=>t===e[n])?e:t}),Tn=C(()=>{B();let e;for(let t of z.rows())t.kind===`user`&&(t.depth??0)===0&&typeof t.at==`number`&&(e===void 0||t.at>e)&&(e=t.at);return e}),En=()=>{let e=new Set(xn().map(e=>e.id));return ct(su(),new Set([a,...ie()]),On(),Tn(),new Set([...rn(),...Pe()]),Su,pu).filter(t=>!e.has(t.key))},Dn=()=>(Fl(),N(),Ml.has(ne())?Ml.feed(ne()).pulse():void 0),[On,kn]=u(Date.now()),An=setInterval(()=>kn(Date.now()),1e3);M(()=>clearInterval(An));let jn=()=>{if(re()){let e=T()?.find(e=>e.id===a);return e?.state===`working`?(On(),`Working${e.since?` · ${qa(Date.now()-e.since)}`:``}`):void 0}let e=Dn();if(!E()||!e?.busy)return;On();let t=Ji(T(),a),n=Ui(T());return`${t??e.label}${e.since?` · ${qa(Date.now()-e.since)}`:``}${n?` · ${qi(n)}`:``}`},Mn=()=>zi(T(),a),Nn=()=>{let e=g()?.session;if(!e)return`Not connected`;let t=xn().length;return j().voice?`${dn()&&un().agent?`${un().agent} agent`:e.conversation?`Voice agent`:`Session agent`} · ${t?`${t} request${t===1?``:`s`} waiting`:I()?`Voice on`:`Voice off`}`:t?`${t} request${t===1?``:`s`} waiting`:`${j().harnessName} session`},Pn=()=>vt()?.changes?.files.map(e=>e.file)??[];return(()=>{var e=pq(),u=e.firstChild,h=u.firstChild,x=h.firstChild,C=h.nextSibling,T=C.firstChild,M=C.nextSibling.firstChild;e.$$pointerdown=()=>c.focus(),e.$$focusin=()=>c.focus(),y(h,n(l,{get when(){return Z()},get children(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})}}),x),y(x,n(l,{get when(){return se()},children:e=>(()=>{var t=mq(),r=t.firstChild,i=r.nextSibling;return y(t,n(L,{name:`chevron`,class:`crumb-chev`}),r),y(t,()=>e().title,i),s(n=>{var r=Ot(e().id),i=`Back to ${e().title}`,a=`Back to ${e().title}`;return r!==n.e&&b(t,`href`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),a!==n.a&&b(t,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),y(x,n(l,{get when(){return S()},get fallback(){return(()=>{var e=hq();return y(e,()=>g()?.session.title||(Y.machines?`Session`:`Loading…`)),e})()},children:e=>[n(A,{get state(){return e().state}}),n(Ng,{get id(){return e().id},get title(){return e().title},place:`topbar`,class:`title`,get children(){var t=gq(),n=t.firstChild;return n.$$click=()=>Sh({id:e().id,place:`topbar`}),y(n,()=>e().title),s(()=>b(n,`title`,`${e().title} · click to rename`)),t}}),n(Pg,{get id(){return e().id}}),n(O,{label:`Session actions`,class:`icon-btn small`,items:()=>Th(e(),{open:!1,place:`topbar`})})]}),null),y(h,n(l,{get when(){return w()},children:e=>(()=>{var t=_q(),i=t.firstChild,a=i.nextSibling,o=a.nextSibling;return y(t,()=>e().machine,a),y(o,()=>e().where),y(t,n(l,{get when(){return e().branch},get children(){return[n(L,{name:`branch`}),r(()=>e().branch)]}}),null),s(n=>{var r=`${e().text} · ${g().session.directory}`,a=`Runs on ${e().text}`,o=`online-dot${g().machine.online?` on`:``}`;return r!==n.e&&b(t,`title`,n.e=r),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&k(i,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),y(h,n(l,{get when(){return ee()},children:e=>(()=>{var t=vq(),n=t.firstChild;return y(t,()=>j().harnessName,n),y(t,()=>e().label,null),s(n=>{var r=`chip-evidence ${e().level}`,i=e().level,a=e().detail,o=`${j().harnessName} · evidence: ${e().label}. ${e().detail}`;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`data-evidence`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),o!==n.o&&b(t,`aria-label`,n.o=o),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),null),y(h,n(RK,{sessionID:a,get harness(){return j().harness},get takesInput(){return c.takesInput}}),null),y(h,n(l,{get when(){return vt()?.changes?.files.length},get children(){var e=eq(),t=e.firstChild;t.firstChild;var n=t.nextSibling.nextSibling;return n.firstChild,e.$$click=()=>jt(Pn()[0]),y(t,()=>vt().changes.additions,null),y(n,()=>vt().changes.deletions,null),e}}),null),y(h,n(l,{get when(){return fn()},get children(){return n(aL,{})}}),null),y(h,n(l,{get when(){return Z()},get children(){return n(TR,{})}}),null),y(h,n(F,{icon:`rail`,get label(){return d()?`Hide details`:`Show details`},get"aria-pressed"(){return d()},onPointerDown:()=>f=d(),onClick:p}),null),y(h,()=>i.paneTools,null),y(u,n(l,{get when(){return r(()=>!!Z())()&&w()},children:e=>(()=>{var t=bq(),r=t.firstChild,i=r.nextSibling,a=i.nextSibling.nextSibling;return y(i,()=>e().machine),y(a,()=>e().where),y(t,n(l,{get when(){return e().branch},get children(){return[n(L,{name:`branch`}),(()=>{var t=yq();return y(t,()=>e().branch),t})()]}}),null),s(n=>{var i=g().session.directory,a=`Runs on ${e().text}`,o=`online-dot${g().machine.online?` on`:``}`;return i!==n.e&&b(t,`title`,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&k(r,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}),C),y(u,n(l,{get when(){return Mn()},children:e=>(()=>{var t=wq(),i=t.firstChild.nextSibling,o=i.firstChild,c=o.firstChild;return y(c,()=>e().label),y(o,n(l,{get when(){return e().status},get children(){var t=xq();return y(t,()=>e().status),t}}),null),y(o,n(l,{get when(){return r(()=>e().sessionID!==a)()&&e().title},get children(){var t=Sq();return t.firstChild,y(t,()=>e().title,null),t}}),null),y(i,n(l,{get when(){return r(()=>!!e().message)()&&e().message!==e().label},get children(){var t=Cq();return y(t,()=>e().message),t}}),null),y(t,n(F,{icon:`close`,label:`Dismiss error`,class:`session-error-dismiss`,onClick:()=>void jd(e().sessionID)}),null),s(()=>b(t,`data-error-session`,e().sessionID)),t})()}),C),y(u,n(l,{get when(){return r(()=>!!D())()&&Y.machines},get children(){return tq()}}),C),C.addEventListener(`scroll`,e=>Be=e.currentTarget.scrollHeight-e.currentTarget.scrollTop-e.currentTarget.clientHeight<80);var P=ze;return typeof P==`function`?t(P,C):ze=C,y(T,n(l,{get when(){return!be()},get fallback(){return n(Bq,{})},get children(){return[n(l,{get when(){return ve()},get fallback(){return Tq()},get children(){return[n(l,{get when(){return te()},get children(){var e=nq(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,()=>j().harnessName,t),e}}),n(l,{get when(){return Ie().length||Se().length},get fallback(){return n(l,{get when(){return!te()},get children(){return Eq()}})},get children(){return[(()=>{var e=rq();return t(Qe,e),e})(),n(v,{get children(){return[n(o,{get when(){return qe().state===`loading`},get children(){return iq()}}),n(o,{get when(){return r(()=>qe().state===`done`)()&&Ie().length},get children(){return aq()}}),n(o,{get when(){return qe().state===`error`},get children(){var e=oq(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return y(e,()=>qe().error,t),n.$$click=()=>void Ke.retry(),e}})]}}),n(SW,{sessionID:a,get blocks(){return Ie()},get ticks(){return we()},get actions(){return $t()},previews:!0,get partialMessage(){return Je()},expanded:Le,onToggle:(e,t)=>Re(e,t),onDetail:(e,t)=>{z.detail(e,t),_e()}})]}})]}}),n(m,{get each(){return ut(Se(),Pe())},children:e=>(()=>{var t=Dq();return y(t,()=>e.text),s(n=>{var r=`note ${e.kind}`,i=e.kind===`err`?`alert`:void 0;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(Og,{get decisions(){return Oe(Ul(),a)}}),n(m,{get each(){return Cn()},children:e=>n(l,{get when(){return Sn().get(e)},children:e=>n(PU,{sessionID:a,get blocker(){return e()},rootID:a,get canAnswer(){return r(()=>e().kind===`permission`)()?j().permission:j().form},get harnessName(){return j().harnessName}})})}),n(m,{get each(){return En()},children:e=>(()=>{var t=Oq();return y(t,()=>e.text),s(n=>{var r=e.key,i=e.title;return r!==n.e&&b(t,`data-answered-by`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(l,{get when(){return r(()=>!!E())()&&c.streamed()===!1},get children(){return sq()}}),n(l,{get when(){return jn()},get children(){var e=cq();return e.firstChild.nextSibling,y(e,jn,null),e}}),n(l,{get when(){return r(()=>!(E()||!g()))()&&S()},get children(){var e=lq(),t=e.firstChild;return y(e,()=>ue[S().state],t),y(e,()=>R(S().updated,N()),null),e}})]}})),y(M,n(l,{get when(){return dn()},get children(){return n(jB,{get state(){return un().voice},get level(){return un().level},get held(){return un().held},get ignored(){return un().ignored},get working(){return E()},get model(){return eV(Mt.prefs(),`voice`)},onMute:()=>qb.mute(),onEnd:()=>void qb.end(),onModel:()=>Pt(`voice`),get notifyHint(){return tx()},onAllowNotifications:()=>void nx(),get timing(){return un().timing},get detector(){return un().detector},get turn(){return un().turn},get front(){return un().front}})}}),null),y(M,n(l,{get when(){return mn()},get children(){var e=uq();return e.$$click=()=>void gn(),e}}),null),y(M,n(l,{get when(){return pn()},get children(){var e=dq();return e.firstChild,y(e,pn,null),e}}),null),y(M,n(l,{get when(){return de()},children:e=>(()=>{var t=kq(),r=t.firstChild,i=r.firstChild,a=r.nextSibling;return y(t,n(L,{name:`undo`}),r),y(r,()=>qK(e()).text,i),y(r,n(l,{get when(){return qK(e()).files},children:e=>(()=>{var t=Aq();return t.firstChild,y(t,e,null),t})()}),i),a.$$click=()=>void Zt(),s(()=>b(t,`data-revert`,e().messageID)),t})()}),null),y(M,n(l,{get when(){return Rt().show},get fallback(){return(()=>{var e=Mq(),t=e.firstChild;return y(t,()=>Rt().hint),y(e,n(l,{get when(){return zt().showStop},get children(){var e=jq(),t=e.firstChild;return e.$$click=()=>void sn(),y(e,n(L,{name:`stop`}),t),s(()=>e.disabled=!zt().canStop),e}}),null),e})()},get children(){return n(DB,_({get draft(){return Ft().draft},get images(){return Ft().images},get attaching(){return Ht()},get view(){return zt()},get error(){return Ft().error},get voiceOn(){return dn()},get voiceBlocked(){return hn()},get dictating(){return cn().recording},get transcribing(){return cn().transcribing},get metaLeft(){return Nn()},get voiceModel(){return r(()=>!!Mt.error())()?`unavailable`:eV(Mt.prefs(),`voice`)}},()=>j().summary?{sessionModel:sV(vt()?.model)}:{},{onInput:e=>Lt({type:`input`,text:e}),onAttach:Gt,onDetach:e=>{let t=Ft().images.find(t=>t.id===e);t?.preview.startsWith(`blob:`)&&URL.revokeObjectURL(t.preview),Lt({type:`detach`,id:e})},onSubmit:()=>void en(),onStop:()=>void sn(),onDictate:()=>void ln(),onVoice:()=>void gn(),onModel:e=>Pt(e),get showModels(){return j().models},get showVoice(){return j().voice}}))}}),null),y(u,n(l,{get when(){return At()},get children(){return n(nU,{sessionID:a,get file(){return At()},get files(){return r(()=>!!Pn().length)()?Pn():[At()]},onFile:jt,onClose:()=>jt(void 0)})}}),null),y(e,n(l,{get when(){return d()},get children(){return[n(l,{get when(){return Z()},get children(){var e=fq();return e.$$click=()=>Ep(!1),e}}),n(l,{get when(){return!Z()},get children(){return n(Yx,{panel:`rail`,label:`Resize details`})}}),n(tU,{get found(){return g()},get summary(){return vt()},get summaryError(){return bt()},get loading(){return St()},onFile:e=>jt(e),onClose:()=>Ep(!1)})]}}),null),y(e,n(nV,{get kind(){return Nt()},models:Mt,onClose:()=>Pt(void 0)}),null),s(t=>{var n=`session-layout${d()?` with-rail`:``}`,r=c.paneID,i=c.takesInput()?``:void 0;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`data-pane`,t.t=r),i!==t.a&&b(e,`data-pane-focused`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),e})()}function Bq(){return Nq()}z([`focusin`,`pointerdown`,`click`]);var Vq=I(`<span class=pane-drop-label>`),Hq=I(`<div class=pane-drop-area><span class=pane-drop-hint>`),Uq=I(`<div aria-hidden=true>`),Wq=I(`<div class=pane-dock-map>`),Gq=I(`<div class=pane-dock role=region aria-label="Drop into a pane"><div class=pane-dock-card><p class=pane-dock-title></p><p class="pane-dock-note muted">Edges split, the centre replaces. Up to 4 panes.`),Kq={left:`Split left`,right:`Split right`,top:`Stack above`,bottom:`Stack below`,center:`Replace`};function qq(e,t){let n=Zp(e);return n===`limit`?{text:`4 panes open: drop in the centre to replace`,refused:!0}:n===`focused`?{text:`Already here`,refused:!1}:n===`moved`&&t===`center`?{text:`Swap`,refused:!1}:n===`moved`?{text:`Move: ${Kq[t].replace(`Split `,``).replace(`Stack `,``)}`,refused:!1}:n===`added`&&`empty`in e?{text:`Open in a pane`,refused:!1}:{text:Kq[t],refused:!1}}function Jq(e){let[t,r]=u(),i=t=>e.index===void 0?{empty:!0}:{index:e.index,zone:t},a=t=>{if(!Xp(t))return;t.preventDefault(),t.stopPropagation();let n=t.currentTarget.getBoundingClientRect(),i=e.index===void 0?`center`:Xf(t.clientX-n.left,t.clientY-n.top,n.width,n.height);r(i),t.dataTransfer&&(t.dataTransfer.dropEffect=Kp()?.move||t.dataTransfer.effectAllowed===`move`?`move`:`copy`)},o=()=>t()?qq(i(t()),t()):void 0;return(()=>{var c=Uq();return c.addEventListener(`drop`,e=>{if(!Xp(e))return;e.preventDefault(),e.stopPropagation();let n=t()??`center`;r(void 0),$p(e,i(n))}),c.addEventListener(`dragleave`,e=>!e.currentTarget.contains(e.relatedTarget)&&r(void 0)),c.addEventListener(`dragover`,a),c.addEventListener(`dragenter`,a),y(c,n(l,{get when(){return e.label},get children(){var t=Vq();return y(t,()=>e.label),t}}),null),y(c,n(l,{get when(){return t()},get children(){var e=Hq(),n=e.firstChild;return y(n,()=>o()?.text),s(()=>b(e,`data-zone`,t())),e}}),null),s(n=>{var r=`pane-drop${e.class?` ${e.class}`:``}`,i=e.style,a=t(),s=o()?.refused?``:void 0;return r!==n.e&&k(c,n.e=r),n.t=h(c,i,n.t),a!==n.a&&b(c,`data-zone`,n.a=a),s!==n.o&&b(c,`data-refused`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}var Yq=e=>{if(rn(e)!==void 0)return`Artifact`;let t=_u(e.sessionID)?.session.title,n=typeof t==`string`&&t?t:`Session`;return e.sideChatID?`Side chat: ${n}`:n};function Xq(){let e=xn,t=()=>e().panes.length,i=()=>ez(e().split,t()),o=n=>{let r=tz(e().split,t(),n);return{"grid-column":`${r.col+1} / span ${r.colSpan}`,"grid-row":`${r.row+1}`}};return(()=>{var c=Gq(),u=c.firstChild,d=u.firstChild,f=d.nextSibling;return y(d,(()=>{var e=r(()=>!!Kp()?.label);return()=>e()?`Open “${Kp().label}” in a pane`:`Open in a pane`})()),y(u,n(l,{get when(){return t()},get fallback(){return n(Jq,{class:`pane-dock-empty`,label:`No panes open: drop here`})},get children(){var t=Wq();return y(t,n(m,{get each(){return e().panes},children:(e,t)=>n(Jq,{get index(){return t()},get label(){return Yq(e)},class:`pane-dock-pane`,get style(){return o(t())}})})),s(e=>{var n=`repeat(${i().cols}, 1fr)`,r=`repeat(${i().rows}, 1fr)`;return n!==e.e&&a(t,`grid-template-columns`,e.e=n),r!==e.t&&a(t,`grid-template-rows`,e.t=r),e},{e:void 0,t:void 0}),t}}),f),c})()}var Zq=I(`<div role=separator tabindex=0>`);function Qq(e){let[t,n]=u(!1),r=[],i=0,a=0,o,c=()=>QR[e.axis],l=t=>e.axis===`cols`?t.clientX:t.clientY,d=e=>Math.round(e*100),f=()=>{let t=e.sizes(),n=(t[e.index]??0)+(t[e.index+1]??0),r=Math.min(c()/Math.max(1,e.total()),n/2);return{min:d(r),max:d(n-r)}},p=()=>{a&&cancelAnimationFrame(a),a=0,n(!1),document.documentElement.classList.remove(`resizing`,`resizing-rows`)},m=(t,n)=>{t.hasPointerCapture(n)&&t.releasePointerCapture(n);let r=o;o=void 0,p(),r&&e.onChange(r,!0)};return M(p),(()=>{var u=Zq();return u.$$keydown=t=>{let n=iz(e.sizes(),e.index,t.key,t.shiftKey,e.total(),c(),e.axis);n&&(t.preventDefault(),e.onChange(n,!0))},u.$$dblclick=()=>e.onChange(nz(e.sizes().length),!0),u.addEventListener(`pointercancel`,e=>t()&&m(e.currentTarget,e.pointerId)),u.$$pointerup=e=>t()&&m(e.currentTarget,e.pointerId),u.$$pointermove=n=>{t()&&(o=rz(r,e.index,l(n)-i,e.total(),c()),a||=requestAnimationFrame(()=>{a=0,o&&e.onChange(o,!1)}))},u.$$pointerdown=t=>{t.button===0&&(t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),r=e.sizes(),i=l(t),n(!0),document.documentElement.classList.add(e.axis===`cols`?`resizing`:`resizing-rows`))},s(n=>{var r=`panel-handle pane-handle${t()?` dragging`:``}`,i=e.axis,a=e.axis===`cols`?`vertical`:`horizontal`,o=`Resize ${e.axis===`cols`?`columns`:`rows`} ${e.index+1} and ${e.index+2}`,s=d(e.sizes()[e.index]??0),c=f().min,l=f().max,p=e.style;return r!==n.e&&k(u,n.e=r),i!==n.t&&b(u,`data-axis`,n.t=i),a!==n.a&&b(u,`aria-orientation`,n.a=a),o!==n.o&&b(u,`aria-label`,n.o=o),s!==n.i&&b(u,`aria-valuenow`,n.i=s),c!==n.n&&b(u,`aria-valuemin`,n.n=c),l!==n.s&&b(u,`aria-valuemax`,n.s=l),n.h=h(u,p,n.h),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),u})()}z([`pointerdown`,`pointermove`,`pointerup`,`dblclick`,`keydown`]);var $q=I(`<span role=status>Send this to the main session? It is queued and arrives after its current turn; nothing is interrupted.`),eJ=I(`<button type=submit class="btn small primary">Send`),tJ=I(`<button type=button class="btn small">Back`),nJ=I(`<form class=sidechat-send><label class=muted>Message for </label><textarea rows=3></textarea><div class=sidechat-row>`),rJ=I(`<div class=sidechat-bar role=group aria-label="Side chat"><div class=sidechat-row><strong>Side chat</strong><span class=muted>from </span><span class=sidechat-tools><button type=button class="btn small">Context</button><button type=button class="btn small">Refresh</button><button type=button class="btn small">Send to main…`),iJ=I(`<p class="muted sidechat-note">`),aJ=I(`<span role=status>`),oJ=I(`<ol class=sidechat-context aria-label="Copied context">`),sJ=I(`<li><span class=muted></span><div class=sidechat-context-text>`),cJ=I(`<p class="muted sidechat-problem"role=alert>`),lJ=I(`<button type=submit class="btn small">Review`),uJ=I(`<button type=button class=btn>Close pane`),dJ=I(`<div class=empty><p class=display>Side chat</p><p class=muted role=status>`),fJ=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`the main session`};function pJ(e){let[t,i]=u(),[a,o]=u(),[c,d]=u(!1),[f,p]=u(!1),[h,g]=u(!1),[_,v]=u(!1),[x,S]=u(``),[C,w]=u(Date.now()),T,E=0,D=!0,O=e=>{i(e),w(Date.now()),clearTimeout(T),Wm(e).kind===`launching`?T=setTimeout(k,$m(E++)):E=0};async function k(){try{let t=await G(Qm.one(e.sideChatID));if(!D)return;let n=Um(t.sideChat);if(!n)return o(`The hub answered a side chat this console can't read.`);o(void 0),O(n)}catch(e){if(!D)return;o(e instanceof W&&e.status===404?`This side chat is gone, or it isn't yours.`:U(e))}}fe(k),M(()=>{D=!1,clearTimeout(T)});async function A(){let e=t();if(e&&!c()){d(!0);try{let t=await(await V(Qm.refresh(e),{method:`POST`,json:{expectedRevision:e.revision}})).json(),n=Um(t.sideChat);n&&O(n),q(qm(t.delivery))}catch(e){e instanceof W&&e.code===`conflict`?(q(`The side chat changed meanwhile. It was reloaded; refresh again.`,`warn`),await k()):q(`Couldn't refresh: ${U(e)}`,`err`)}finally{d(!1)}}}async function j(){let e=t();if(!(!e||c()||Ym(x()))){d(!0);try{await V(Qm.send(e),{method:`POST`,json:{text:x(),confirmed:!0}}),q(`Sent to the main session. It arrives after its current turn.`),S(``),v(!1),g(!1)}catch(e){q(`Couldn't send: ${U(e)}`,`err`)}finally{d(!1)}}}let N=()=>{let e=t();return e?Wm(e):void 0},ee=()=>{let e=N();return e?.kind===`ready`?e.sessionID:void 0},P=()=>{let e=t();return e?Km(e,C()):void 0};return[(()=>{var i=rJ(),a=i.firstChild.firstChild.nextSibling;a.firstChild;var o=a.nextSibling,u=o.firstChild,d=u.nextSibling,C=d.nextSibling;return y(a,()=>fJ(t()?.sourceSessionID??``),null),u.$$click=()=>p(!f()),d.$$click=A,C.$$click=()=>(g(!h()),v(!1)),y(o,()=>e.paneTools,null),y(o,n(l,{get when(){return!e.paneTools},get children(){return n(F,{icon:`close`,class:`small`,label:`Close pane`,title:`Close pane (the side chat keeps running)`,onClick:()=>e.onClose()})}}),null),y(i,n(l,{get when(){return P()},children:e=>(()=>{var t=iJ();return y(t,()=>e().summary,null),y(t,n(l,{get when(){return e().stale},children:e=>[` · `,(()=>{var t=aJ();return y(t,e),t})()]}),null),t})()}),null),y(i,n(l,{get when(){return r(()=>!!f())()&&t()},children:e=>(()=>{var t=oJ();return y(t,n(m,{get each(){return e().snapshot.items},children:e=>(()=>{var t=sJ(),n=t.firstChild,r=n.nextSibling;return y(n,()=>e.role,null),y(n,()=>e.changed?` · changed`:``,null),y(n,()=>e.stale?` · no longer in the main session (earlier copy)`:``,null),y(n,()=>e.clipped?` · shortened`:``,null),y(r,()=>e.text),t})()})),t})()}),null),y(i,n(l,{get when(){return h()},get children(){var i=nJ(),a=i.firstChild;a.firstChild;var o=a.nextSibling,u=o.nextSibling;return i.addEventListener(`submit`,e=>{e.preventDefault(),_()?j():Ym(x())||v(!0)}),y(a,()=>fJ(t()?.sourceSessionID??``),null),o.$$input=e=>S(e.currentTarget.value),y(i,n(l,{get when(){return r(()=>!!x())()&&Ym(x())},children:e=>(()=>{var t=cJ();return y(t,e),t})()}),u),y(u,n(l,{get when(){return _()},get fallback(){return(()=>{var e=lJ();return s(()=>e.disabled=!!Ym(x())),e})()},get children(){return[$q(),(()=>{var e=eJ();return s(()=>e.disabled=c()),e})(),(()=>{var e=tJ();return e.$$click=()=>v(!1),s(()=>e.disabled=c()),e})()]}})),s(t=>{var n=`sidechat-send-${e.sideChatID}`,r=`sidechat-send-${e.sideChatID}`,i=_()||c();return n!==t.e&&b(a,`for`,t.e=n),r!==t.t&&b(o,`id`,t.t=r),i!==t.a&&(o.disabled=t.a=i),t},{e:void 0,t:void 0,a:void 0}),s(()=>o.value=x()),i}}),null),s(e=>{var n=f(),r=!t(),i=!t()||c(),a=h(),o=!t();return n!==e.e&&b(u,`aria-expanded`,e.e=n),r!==e.t&&(u.disabled=e.t=r),i!==e.a&&(d.disabled=e.a=i),a!==e.o&&b(C,`aria-expanded`,e.o=a),o!==e.i&&(C.disabled=e.i=o),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})(),n(l,{get when(){return ee()},keyed:!0,get fallback(){return(()=>{var t=dJ(),r=t.firstChild.nextSibling;return y(r,()=>a()??(N()&&N().kind!==`ready`?N().text:`Loading…`)),y(t,n(l,{get when(){return a()},get children(){var t=uJ();return t.$$click=()=>e.onClose(),t}}),null),t})()},children:t=>n(zq,{id:t,get visible(){return e.visible},get focused(){return e.focused},get onGone(){return e.onGone},get rail(){return e.rail}})})]}z([`click`,`input`]);var mJ=()=>{try{return globalThis.localStorage}catch{return}},[hJ,gJ]=u(cz(mJ())),[_J,vJ]=u();function yJ(e,t){let n=uz(hJ(),e,t),r=_J();if(!r)return n;let[i,a,o]=r.key.split(`:`);return i===e&&Number(a)===t?{...n,[o]:r.sizes}:n}function bJ(e,t,n,r,i=!0){if(!i)return void vJ({key:`${e}:${t}:${n}`,sizes:r});vJ(void 0),gJ(i=>lz(mJ(),i,e,t,n,r))}var xJ=I(`<span class=pane-tools role=group aria-label=Pane><span class=pane-grip draggable=true title="Drag onto another pane to move this one"aria-hidden=true>`),SJ=I(`<div class="cmp-empty pane-empty-drop"><p>No panes are open on this device.</p><p><a href=/>All sessions</a> · <a href=/artifacts>Artifacts</a></p><p class=muted>Drag a session or an artifact here to open it.`),CJ=I(`<div class=pane-bar role=toolbar aria-label="Split layout"><span class=seg role=group aria-label=Layout></span><span class="pane-count muted"> of <!> panes · <kbd>F6</kbd> switches`),wJ=I(`<div class=pane-tabs role=tablist aria-label="Open sessions">`),TJ=I(`<div><div class=pane-grid>`),EJ=I(`<button type=button>`),DJ=I(`<div role=presentation><button type=button role=tab>`),OJ=I(`<section class=pane tabindex=-1>`),kJ=I(`<p class="muted cmp-empty">Loading the artifact…`),AJ=E(()=>Hn(()=>import(`./ArtifactPane-BJZNixJC.js`).then(e=>({default:e.ArtifactPane})),__vite__mapDeps([7,1,8,9,10,11,12,13]))),jJ=6,MJ=[{split:`vertical`,label:`Side by side`,icon:`split`},{split:`horizontal`,label:`Stacked`,icon:`stack`},{split:`grid`,label:`Grid`,icon:`grid`}],NJ=e=>{let t=rn(e);return t===void 0?e.sideChatID?`${e.sessionID}#${e.sideChatID}`:e.sessionID:`!${t}`},PJ=e=>e.startsWith(`!`)?e.slice(1):void 0,FJ=e=>e.split(`#`)[0],IJ=e=>encodeURIComponent(e).replace(/%/g,`_`),LJ=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`Session`},RJ=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]);function zJ(r){let[i,a]=u(!1),o=C(()=>({at:Pt(),id:r.routed}),void 0,{equals:(e,t)=>e.at===t.at&&e.id===t.id});S(e(o,({id:e})=>{if(e===void 0)return void a(!1);let t=!0;En(n=>{let r=hn(n,{sessionID:e});return t=r.outcome!==`invalid`,r.layout}),a(!t)})),S(()=>{let e=ou();e.size&&En(t=>ic(t,e))});let c=xn,d=()=>c().panes.length,p=C(()=>c().panes.map(NJ),[],{equals:RJ}),g=e=>p().indexOf(e),_=()=>p()[c().focused],v=()=>c().split,w=()=>Z()&&d()>1,[T,E]=u({}),D=e=>{let t=PJ(e);return t===void 0?e.includes(`#`)?`Side chat: ${LJ(FJ(e))}`:LJ(FJ(e)):`Artifact: ${T()[t]??`…`}`},O=()=>!Z()&&d()>1,A=()=>!!Kp()&&!Z();x(e(()=>c().panes[c().focused]?.sideChatID?void 0:c().panes[c().focused]?.sessionID,e=>{e&&!i()&&e!==ae(()=>r.routed)&&Vt(Ot(e),{replace:!0})}));let j=()=>requestAnimationFrame(()=>{let e=document.querySelector(`section.pane[data-focused]`);e&&!e.contains(document.activeElement)&&(e.querySelector(`textarea:not([disabled])`)??e).focus()}),N=e=>En(t=>ln(t,e)),ee=e=>{let t=new Map;for(let e of document.querySelectorAll(`section.pane .scroller`))t.set(e,e.scrollTop);e(),requestAnimationFrame(()=>t.forEach((e,t)=>t.scrollTop=e))},P=e=>{let t=c().focused;ee(()=>En(n=>pn(n,t,t+e))),j()},te=e=>{e<0||e>=d()||(En(t=>fn(t,e)),d()||Vt(`/`,{replace:!0}))},I=e=>{q(d()>1?`That session is gone (deleted, or its machine was revoked). Its pane was closed.`:`That session is gone (deleted, or its machine was revoked).`,`warn`),te(g(e))};fe(()=>{let e=e=>{if(i()||e.defaultPrevented||d()<2||e.getModifierState?.(`AltGraph`))return;let t=XR(e);if(t){if(e.preventDefault(),t.type===`cycle`)En(e=>mn(e,t.step));else if(t.type===`focus`)N(Math.min(t.index,d()-1));else if(t.type===`move`)return P(t.step);else return te(c().focused);w()||j()}};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e))});let ne,[re,ie]=u({w:0,h:0});fe(()=>{if(!ne||typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>ne&&ie({w:ne.clientWidth,h:ne.clientHeight}));e.observe(ne),M(()=>e.disconnect())});let oe=()=>O()?ez(v(),d()):{cols:1,rows:1},se=()=>yJ(v(),d()),ce=e=>(e===`cols`?re().w:re().h)-(oe()[e]-1)*jJ,le=(e,t)=>t>1?e.map(e=>`minmax(0, ${e}fr)`).join(` ${jJ}px `):`minmax(0, 1fr)`,ue=()=>({"grid-template-columns":le(se().cols,oe().cols),"grid-template-rows":le(se().rows,oe().rows)}),de=e=>{if(!O())return{"grid-column":`1`,"grid-row":`1`};let t=tz(v(),d(),e);return{"grid-column":`${2*t.col+1} / span ${2*t.colSpan-1}`,"grid-row":`${2*t.row+1}`}},R=e=>Array.from({length:Math.max(0,e)},(e,t)=>t),pe=e=>(t,n)=>bJ(v(),d(),e,t,n),me=e=>{let t=d(),n=c().focused,r=e.key===`ArrowRight`?(n+1)%t:e.key===`ArrowLeft`?(n-1+t)%t:e.key===`Home`?0:e.key===`End`?t-1:-1;r<0||!e.target.matches(`[role="tab"]`)||(e.preventDefault(),N(r),requestAnimationFrame(()=>document.querySelector(`.pane-tabs [role="tab"][aria-selected="true"]`)?.focus()))},z=e=>{if(e.key!==`ArrowRight`&&e.key!==`ArrowLeft`)return;let t=Array.from(e.currentTarget.querySelectorAll(`button`)),n=t.indexOf(document.activeElement);n<0||(e.preventDefault(),t[(n+(e.key===`ArrowRight`?1:t.length-1))%t.length].focus())};function he(e){let t=()=>g(e.key),r=()=>v()===`horizontal`;return n(l,{get when(){return O()},get children(){var i=xJ(),a=i.firstChild;return B(a,`dragend`,Yp),a.addEventListener(`dragstart`,n=>{let r=c().panes[t()];(!r||!Jp(n,{target:r,label:D(e.key),move:!0}))&&n.preventDefault()}),y(a,n(L,{name:`grip`})),y(i,n(F,{icon:`chevron`,class:`small flip`,get label(){return r()?`Move pane up`:`Move pane left`},get"aria-keyshortcuts"(){return qR.moveEarlier},get disabled(){return t()<=0},onClick:()=>(N(t()),P(-1))}),null),y(i,n(F,{icon:`chevron`,class:`small`,get label(){return r()?`Move pane down`:`Move pane right`},get"aria-keyshortcuts"(){return qR.moveLater},get disabled(){return t()>=d()-1},onClick:()=>(N(t()),P(1))}),null),y(i,n(F,{icon:`close`,class:`small`,label:`Close pane`,title:`Close pane (the session keeps running)`,get"aria-keyshortcuts"(){return qR.close},onClick:()=>te(t())}),null),i}})}return n(l,{get when(){return!i()},get fallback(){return n(l,{get when(){return r.routed},keyed:!0,children:e=>n(zq,{id:e})})},get children(){return[n(l,{get when(){return!d()},get children(){var e=SJ();return e.firstChild.nextSibling.nextSibling,y(e,n(l,{get when(){return A()},get children(){return n(Jq,{label:`Open in a pane`})}}),null),e}}),(()=>{var e=TJ(),r=e.firstChild;y(e,n(l,{get when(){return O()},get children(){var e=CJ(),t=e.firstChild,r=t.nextSibling,i=r.firstChild,a=i.nextSibling;return a.nextSibling,e.$$keydown=z,y(t,n(m,{each:MJ,children:e=>(()=>{var t=EJ();return t.$$click=()=>En(t=>an(t,e.split)),y(t,n(L,{get name(){return e.icon}})),s(n=>{var r=e.label,i=e.label,a=v()===e.split;return r!==n.e&&b(t,`aria-label`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),a!==n.a&&b(t,`aria-pressed`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})),y(r,d,i),y(r,gn,a),e}}),r),y(e,n(l,{get when(){return w()},get children(){var e=wJ();return e.$$keydown=me,y(e,n(m,{get each(){return p()},children:e=>{let t=()=>_()===e,r=()=>D(e);return(()=>{var i=DJ(),a=i.firstChild;return a.$$click=()=>N(g(e)),y(a,r),y(i,n(F,{icon:`close`,class:`small`,get label(){return`Close ${r()}`},get tabindex(){return t()?0:-1},onClick:()=>te(g(e))}),null),s(n=>{var r=`pane-tab${t()?` selected`:``}`,o=`pane-tab-${IJ(e)}`,s=`pane-${IJ(e)}`,c=t(),l=t()?0:-1;return r!==n.e&&k(i,n.e=r),o!==n.t&&b(a,`id`,n.t=o),s!==n.a&&b(a,`aria-controls`,n.a=s),c!==n.o&&b(a,`aria-selected`,n.o=c),l!==n.i&&b(a,`tabindex`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})()}})),e}}),r);var i=ne;return typeof i==`function`?t(i,r):ne=r,y(r,n(m,{get each(){return p()},children:e=>{let t=FJ(e),r=()=>g(e),i=()=>_()===e,a=()=>!w()||i();return(()=>{var o=OJ();return o.$$pointerdown=()=>N(g(e)),o.$$focusin=()=>N(g(e)),y(o,n(l,{get when(){return PJ(e)===void 0},get fallback(){return n(f,{get fallback(){return kJ()},get children(){return n(AJ,{get artifactID(){return PJ(e)},get paneTools(){return n(he,{key:e})},onTitle:t=>E(n=>({...n,[PJ(e)]:t}))})}})},get children(){return n(l,{get when(){return!e.includes(`#`)},get fallback(){return n(pJ,{get sideChatID(){return e.slice(e.indexOf(`#`)+1)},visible:a,focused:i,onGone:()=>I(e),onClose:()=>te(g(e)),rail:()=>!O()||i(),get paneTools(){return n(he,{key:e})}})},get children(){return n(zq,{id:t,visible:a,focused:i,onGone:()=>I(e),rail:()=>!O()||i(),get paneTools(){return n(he,{key:e})}})}})}})),s(t=>{var n=`pane-${IJ(e)}`,s=w()?`tabpanel`:`region`,c=w()?`pane-tab-${IJ(e)}`:void 0,l=w()?void 0:`Pane ${r()+1} of ${d()}: ${D(e)}`,u=i()?``:void 0,f=!a(),p=de(r());return n!==t.e&&b(o,`id`,t.e=n),s!==t.t&&b(o,`role`,t.t=s),c!==t.a&&b(o,`aria-labelledby`,t.a=c),l!==t.o&&b(o,`aria-label`,t.o=l),u!==t.i&&b(o,`data-focused`,t.i=u),f!==t.n&&(o.hidden=t.n=f),t.s=h(o,p,t.s),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),o})()}}),null),y(r,n(l,{get when(){return A()},get children(){return n(m,{get each(){return p()},children:e=>n(Jq,{get index(){return g(e)},get style(){return de(g(e))}})})}}),null),y(r,n(m,{get each(){return R(oe().cols-1)},children:e=>n(Qq,{axis:`cols`,index:e,sizes:()=>se().cols,total:()=>ce(`cols`),get onChange(){return pe(`cols`)},get style(){return{"grid-column":`${2*e+2}`,"grid-row":v()===`grid`&&d()%2==1?`1`:`1 / -1`}}})}),null),y(r,n(m,{get each(){return R(oe().rows-1)},children:e=>n(Qq,{axis:`rows`,index:e,sizes:()=>se().rows,total:()=>ce(`rows`),get onChange(){return pe(`rows`)},style:{"grid-row":`${2*e+2}`,"grid-column":`1 / -1`}})}),null),s(t=>{var n=`workspace${O()?` ws-split`:``}${w()?` ws-tabs`:``}`,i=v(),a=ue();return n!==t.e&&k(e,t.e=n),i!==t.t&&b(e,`data-split`,t.t=i),t.a=h(r,a,t.a),t},{e:void 0,t:void 0,a:void 0}),e})()]}})}z([`keydown`,`click`,`focusin`,`pointerdown`]);var BJ={artifacts:E(()=>Hn(()=>import(`./Library-CpzD2HDW.js`),__vite__mapDeps([14,1,9,10,11,3,12,15]))),teams:E(()=>Hn(()=>import(`./TeamsPage-4xdWCaI-.js`),__vite__mapDeps([16,1,9,17,18,19]))),watchtower:E(()=>Hn(()=>import(`./Watchtower-CpQdIRns.js`).then(e=>e.t),__vite__mapDeps([20,1,9,10,11,3,18,17,19,21]))),profiles:E(()=>Hn(()=>import(`./ProfilesDestination-DlQeogea.js`),__vite__mapDeps([22,1,9,17])))},VJ=I(`<div class=feature-page><header class=topbar><h1 class=title></h1></header><div class=feature-scroll><div class=feature-body>`);function HJ(e){return(()=>{var t=VJ(),r=t.firstChild,i=r.firstChild,a=r.nextSibling.firstChild;return y(r,n(l,{get when(){return Z()},get children(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})}}),i),y(i,()=>e.title),y(r,()=>e.actions,null),y(a,()=>e.children),t})()}var UJ=I(`<p class=feature-note> isn't available yet. <a href=/>Back to All sessions`),WJ=I(`<p class=muted>Loading…`);function GJ(e){let t=C(()=>Ye.find(t=>t.id===e.id)),r=C(()=>{let e=t();return e&&Ve(e,{signedIn:!!X()})===`ok`?BJ[e.id]:void 0});return n(l,{get when(){return r()},get fallback(){return n(HJ,{get title(){return t()?.label??`Not found`},get children(){var e=UJ(),n=e.firstChild;return y(e,()=>t()?.label??`This page`,n),e}})},children:r=>n(f,{get fallback(){return n(HJ,{get title(){return t().label},get children(){return WJ()}})},get children(){return n(D,{get component(){return r()},get rest(){return e.rest}})}})})}var KJ=I(`<span class="badge-pill armed-left"role=timer title="How long this stays armed for a spoken answer">`),qJ=I(`<p class="muted small armed-why">Why: `),JJ=I(`<div class="card decision armed-decision"role=group aria-label="The Concierge asks you to confirm"><p class="blocker-head decision-head"><strong>Confirm</strong> <span class=muted>from </span></p><p class=armed-question></p><div class="row armed-options"></div><p class="muted small armed-hint">`),YJ=I(`<button type=button>`);function XJ(e){let t=()=>e.decision,[i,a]=u(!1),[o,c]=u(Date.now()),d=setInterval(()=>c(Date.now()),1e3);M(()=>clearInterval(d));let f=()=>{let e=ru()?.expiresAt;return e===void 0?``:Ze(e,o())},p=async e=>{a(!0);try{await Wb(t().id,e)}catch(e){q(U(e),`err`),a(!1)}};return(()=>{var e=JJ(),a=e.firstChild,o=a.firstChild.nextSibling.nextSibling;o.firstChild;var c=a.nextSibling,u=c.nextSibling,d=u.nextSibling;return y(o,()=>ve(t(),Su,ou()),null),y(a,n(l,{get when(){return f()},get children(){var e=KJ();return y(e,f),e}}),null),y(c,()=>Re(t(),Su,ou())),y(e,n(dg,{get decision(){return t()}}),u),y(e,n(l,{get when(){return r(()=>!!t().recommendation?.why)()&&t().recommendation.why!==fg(t())},get children(){var e=qJ();return e.firstChild,y(e,()=>t().recommendation.why,null),e}}),u),y(u,n(m,{get each(){return t().options},children:e=>(()=>{var t=YJ();return t.$$click=()=>void p(e.id),y(t,()=>e.label),s(n=>{var r=`btn${e.safe||e.id===`always`?``:` primary`}`,a=i();return r!==n.e&&k(t,n.e=r),a!==n.t&&(t.disabled=n.t=a),n},{e:void 0,t:void 0}),t})()})),y(d,()=>Zs(!!zl()&&!zl().reason)),s(n=>{var r=t().id,i=t().id,a=Tt(t()),s=t().question;return r!==n.e&&b(e,`data-armed-decision`,n.e=r),i!==n.t&&b(e,`data-decision`,n.t=i),a!==n.a&&b(o,`title`,n.a=a),s!==n.o&&b(c,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()}z([`click`]);var ZJ=I(`<button type=button class="btn small"aria-label="Restart the Concierge"title="Restart the Concierge (a new session)">Restart`),QJ=I(`<header class=concierge-head><div class="concierge-title grow"><h2 class=title>Concierge</h2><p class="small muted concierge-status"role=status aria-live=polite></p></div><a class=icon-btn href=/settings/concierge aria-label="Concierge settings"title="Concierge settings">`),$J=I(`<p role=status data-concierge-notice>`),eY=I(`<div class=concierge-asked aria-label="Decisions from the Concierge"role=group>`),tY=I(`<div class="card decision closed-decision"role=group tabindex=-1><p class="blocker-head decision-head"><strong>Decision</strong> <span class=badge-pill></span><span class=grow></span></p><p class="blocker-text decision-question"></p><p class="muted small"data-closed-note>`),nY=I(`<div class=concierge-idle><form class=concierge-composer><textarea rows=1 aria-label="Ask the Concierge"placeholder="The Concierge is not running"disabled>`),rY=I(`<aside class="concierge-panel side"aria-label=Concierge tabindex=-1>`),iY=I(`<section class="concierge-panel page"aria-label=Concierge tabindex=-1>`),aY=I(`<p class="working-line muted small"role=status><span class="spinner small"></span> Working…`),oY=I(`<div class=concierge-scroll>`),sY=I(`<p class="note err"role=alert>Voice: `),cY=I(`<button type=button>`),lY=I(`<div class=concierge-dock><form class=concierge-composer><textarea rows=1 aria-label="Ask the Concierge"></textarea><button type=submit class="btn primary send"aria-label="Send to the Concierge"title="Send (Enter)">`),uY=I(`<p class="muted small pad">Loading…`),dY=I(`<p class="muted small pad">`),fY=I(`<p>`),pY=3e4,mY=80,hY=/^#decision-(dec_[A-Za-z0-9]{1,64})$/,gY=new Set([`starting`,`running`,`waiting_machine`,`backoff`,`failed`]),_Y=()=>!!zl()&&!zl().reason;function vY(i){let a=Xl,o=()=>(Y.machines??[]).map(e=>({id:e.id,name:e.name,online:e.online===!0})),c=()=>o().find(e=>e.id===a()?.machineID),d=()=>$s(a(),c()),f=()=>a()?.state===`running`&&!!a()?.sessionID&&c()?.online!==!1,p=C(()=>Hb()),m=C(()=>cc(Ul(),a(),p())),[h,g]=u(!1),[_,v]=u(),S,w=wR(),T=()=>St(`/`);async function E(){g(!0);try{await V(`/api/agent/concierge/restart`,{method:`POST`,json:{}}),q(`Restarting the Concierge`)}catch(e){q(`Could not restart: ${U(e)}`,`err`)}finally{g(!1)}}fe(()=>{if(i.mode!==`side`)return;let e=e=>{e.key!==`Escape`||e.defaultPrevented||ee(S)||document.querySelector(`.menu-pop, [role='menu']`)||(e.preventDefault(),T())};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e)),requestAnimationFrame(()=>S&&!S.contains(document.activeElement)&&S.focus())});function D(e){let t=()=>requestAnimationFrame(()=>{let t=S?.querySelector(`[data-decision="${e}"]`);t?(t.scrollIntoView({block:`nearest`,behavior:`smooth`}),t.classList.add(`flash`),setTimeout(()=>t.classList.remove(`flash`),2500),t.focus({preventScroll:!0})):q(`That Decision is no longer available`)});if(S?.querySelector(`[data-decision="${e}"]`))return t();ld(e).then(e=>{e&&e.state!==`open`&&v(e),t()})}x(e(Pt,e=>{let t=hY.exec(e.hash)?.[1];t&&(Vt(`/concierge`,{replace:!0}),D(t))})),fe(()=>{let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`),n=t&&hY.exec(new URL(t.getAttribute(`href`)??``,location.origin).hash)?.[1];n&&t.getAttribute(`href`).startsWith(`/concierge#`)&&(e.preventDefault(),D(n))};S?.addEventListener(`click`,e),M(()=>S?.removeEventListener(`click`,e))}),M(()=>{w?.isConnected&&w.focus()});let O=()=>[(()=>{var e=QJ(),t=e.firstChild,c=t.firstChild.nextSibling,u=t.nextSibling;return y(e,n(l,{get when(){return i.mode===`page`},get children(){return n(F,{icon:`back`,label:`Back`,onClick:T})}}),t),y(e,n(L,{name:`spark`,class:`concierge-mark`}),t),y(c,()=>cs(a(),o(),N()),null),y(c,n(l,{get when(){return a()?.sessionID},get children(){return n(rL,{get sessionID(){return a().sessionID}})}}),null),y(e,n(l,{get when(){return r(()=>!!a())()&&gY.has(a().state)},get children(){var e=ZJ();return e.$$click=()=>void E(),s(()=>e.disabled=h()),e}}),u),y(u,n(L,{name:`settings`})),y(e,n(l,{get when(){return i.mode===`side`},get children(){return n(F,{icon:`close`,label:`Close the Concierge (Esc)`,onClick:T})}}),null),s(()=>b(c,`data-concierge-panel-status`,a()?.state??`none`)),e})(),n(l,{get when(){return d()},get children(){var e=$J();return y(e,d),s(()=>k(e,`concierge-notice${a()?.state===`failed`?` err`:``}`)),e}}),n(l,{get when(){return p()},children:e=>n(XJ,{get decision(){return e()}})}),n(l,{get when(){return m().length},get children(){var e=eY();return y(e,n(Og,{get decisions(){return m()}})),e}}),n(l,{get when(){return _()},keyed:!0,children:e=>(()=>{var t=tY(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling;i.nextSibling;var a=r.nextSibling,o=a.nextSibling;return y(i,()=>e.state),y(r,n(F,{icon:`close`,label:`Close this Decision`,onClick:()=>v(void 0)}),null),y(a,()=>Re(e,Su,ou())),y(t,n(dg,{decision:e}),o),y(o,()=>Ho(e)),s(n=>{var r=`Decision (${e.state}): ${e.question}`,i=e.id,o=e.id,s=e.question;return r!==n.e&&b(t,`aria-label`,n.e=r),i!==n.t&&b(t,`data-decision`,n.t=i),o!==n.a&&b(t,`data-closed-decision`,n.a=o),s!==n.o&&b(a,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),n(l,{get when(){return r(()=>!!f())()&&a()?.sessionID},keyed:!0,get fallback(){return(()=>{var e=nY();return e.firstChild.addEventListener(`submit`,e=>e.preventDefault()),e})()},children:e=>n(yY,{id:e,get autofocus(){return i.mode===`side`}})})];return n(l,{get when(){return i.mode===`side`},get fallback(){return(()=>{var e=iY(),n=S;return typeof n==`function`?t(n,e):S=e,y(e,O),e})()},get children(){var e=rY(),n=S;return typeof n==`function`?t(n,e):S=e,y(e,O),e}})}function yY(r){let i=r.id,a=()=>_u(i),o=()=>a()?.session.status,c=()=>bo(o()),d=new it,[f,p]=u(0),h=()=>p(e=>e+1),[g,_]=u(!1),[v,S]=u({}),[w,T]=u([]),E=0,D=(e,t=`sys`)=>T(n=>[...n.slice(-10),{key:`n${++E}`,text:e,kind:t}]),O=C(()=>(f(),d.status(o(),i),Jz(d.rows()))),A=C(()=>xY(O())),[j,N]=Or({}),ee,P=!0,F=()=>requestAnimationFrame(()=>ee&&(ee.scrollTop=ee.scrollHeight));x(e(A,()=>P&&F())),x(()=>{for(let e of Ko(O(),ql()))ld(e)});let te=e=>new URLSearchParams(Object.entries(e).flatMap(([e,t])=>t===void 0?[]:[[e,String(t)]])).toString(),I=new gz(d,e=>G(`${H(i)}/timeline?${te(e)}`),{limit:mY,onChange:h});async function ne(){try{let{messages:e}=await G(`${H(i)}/messages?limit=200`);for(let t of e??[]){let e=nt(i,t);e&&d.hubMessage(e)}h()}catch{}}async function re(){try{await I.first()}catch(e){D(`Could not load the conversation: ${U(e)}`,`err`)}_(!0),await ne(),F()}let ie,ae=c(),oe=hu(e=>{let t=typeof e.rootID==`string`?e.rootID:e.sessionID;if(e.type===`resync`)I.resync().catch(()=>{}).then(ne);else if(t!==i)return;else if(e.type===`activity`&&e.item&&e.item.kind!==`thinking`)d.activity(e.sessionID,e.item);else if(e.type===`reasoning`&&typeof e.messageID==`string`&&typeof e.delta==`string`)d.appendReasoning({sessionID:e.sessionID,messageID:e.messageID,delta:e.delta});else if(e.type===`delta`&&typeof e.messageID==`string`&&typeof e.text==`string`)d.appendText({sessionID:e.sessionID,messageID:e.messageID,...Number.isInteger(e.ordinal)?{ordinal:e.ordinal}:{},delta:e.text});else if(e.type===`message`){let t=nt(i,e.message);t&&d.hubMessage(t)}else if(e.type===`turn`&&ie){let{sentAt:t}=ie;ie=void 0,xe(e,t)}else if(e.type===`status`){let t=bo(e.sessions),n=ae&&!t;if(ae=t,t)return;for(let e of d.rows())e.live&&d.upsert({key:e.key,live:!1});d.endReasoning(void 0),n&&I.resync().catch(()=>{}).then(ne)}else return;h()}),se=()=>document.visibilityState===`visible`,ce=(e,t=!1)=>(Vb(e),V(`${H(i)}/presence`,{method:`POST`,json:{visible:e},keepalive:t}).catch(()=>{})),le=()=>void ce(se(),!se()),ue=()=>void ce(!1,!0),de,R=rx,pe=()=>R().phase!==`off`&&R().sessionID===i,me=()=>R().error?.sessionID===i?R().error.message:void 0;M(qb.attach(i,{user:e=>{let t=`voice:${++E}`;return d.upsert({key:t,kind:`user`,text:e,at:Date.now()}),S(e=>({...e,[t]:`pending`})),h(),t},tick:(e,t)=>S(n=>({...n,[e]:t})),agent:e=>{let t=e.messageID?d.liveTextKey(e.messageID):`say:${++E}`,{mode:n,text:r}=$v(d.get(t)?.text??``,e.text);n!==`keep`&&(d.upsert({key:t,messageID:e.messageID,kind:`assistant`,text:r,at:d.get(t)?.at??Date.now()}),h())},note:(e,t)=>D(e,t??`sys`)}));async function z(){pe()||(Ty(),ox.cancel()),await qb.toggle(i),qb.isOn(i)&&qb.state.phase===`on`&&D(`Voice on. Talk to the Concierge; say “yes” or “no” to answer the Decision it is asking about.`)}let[B,ge]=u(``),[_e,ve]=u(!1),ye,be=()=>{ye&&(ye.style.height=`auto`,ye.style.height=`${Math.min(ye.scrollHeight,200)}px`)};function xe(e,t){let n=e.reply?.trim(),r=d.rows().some(e=>e.kind===`assistant`&&(e.at??0)>=t&&e.text?.trim()===n);e.reply&&!r&&d.upsert({key:`reply:${++E}`,kind:`assistant`,text:e.reply,at:Date.now()});let i=M_(e);i&&D(i.text,i.kind),h()}async function Se(){let e=B().trim();if(!e||_e())return;let t=Hb(),n=Ws(e,t);if(n.kind===`answer`){ve(!0);try{await Wb(n.decisionID,n.option,`text`),ge(``),d.upsert({key:`answered:${++E}`,kind:`user`,text:e,at:Date.now(),note:Ks(t,n.option)}),h(),P=!0,F()}catch(e){q(`Not answered: ${U(e)}${e instanceof W&&e.status===403?`. Tap an option on the card.`:``}`,`err`)}finally{ve(!1)}return}if(ge(``),queueMicrotask(be),pe()){qb.sendTyped(i,e);return}let r=`local:${++E}`,a=Date.now();he(()=>{d.upsert({key:r,kind:`user`,text:e,at:a}),S(e=>({...e,[r]:`pending`})),h()}),P=!0,F();try{let t=await V(`${H(i)}/turn`,{method:`POST`,json:{text:e},headers:{prefer:`respond-async`}}),n=await t.json().catch(()=>({})),o=j_(t.status,n);S(e=>({...e,[r]:o===`steered`?`queued`:`sent`})),o===`accepted`?ie={sentAt:a}:xe(n,a)}catch(t){S(e=>({...e,[r]:`failed`})),D(`Could not send: ${U(t)}`,`err`),B()||ge(e)}}return fe(()=>{re(),ce(se()),de=setInterval(()=>se()&&void ce(!0),pY),document.addEventListener(`visibilitychange`,le),window.addEventListener(`pagehide`,ue),r.autofocus&&requestAnimationFrame(()=>ye?.focus())}),M(()=>{oe(),clearInterval(de),document.removeEventListener(`visibilitychange`,le),window.removeEventListener(`pagehide`,ue),ue()}),[(()=>{var e=oY();e.addEventListener(`scroll`,e=>P=e.currentTarget.scrollHeight-e.currentTarget.scrollTop-e.currentTarget.clientHeight<80);var r=ee;return typeof r==`function`?t(r,e):ee=e,y(e,n(l,{get when(){return g()},get fallback(){return uY()},get children(){return n(l,{get when(){return A().length},get fallback(){return(()=>{var e=dY();return y(e,()=>Xs(_Y())),e})()},get children(){return n(SW,{sessionID:i,get blocks(){return A()},get ticks(){return v()},expanded:j,onToggle:(e,t)=>N(e,t),onDetail:(e,t)=>{d.detail(e,t),h()}})}})}}),null),y(e,n(m,{get each(){return w()},children:e=>(()=>{var t=fY();return y(t,()=>e.text),s(n=>{var r=`note ${e.kind}`,i=e.kind===`err`?`alert`:void 0;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),y(e,n(l,{get when(){return c()},get children(){return aY()}}),null),e})(),(()=>{var e=lY(),r=e.firstChild,i=r.firstChild,a=i.nextSibling;y(e,n(l,{get when(){return pe()},get children(){return n(jB,{get state(){return R().voice},get level(){return R().level},get held(){return R().held},get ignored(){return R().ignored},get working(){return c()},model:`Concierge`,onMute:()=>qb.mute(),onEnd:()=>void qb.end(),onModel:()=>q(`The Concierge keeps its own model: change it in Settings → Concierge`),get notifyHint(){return tx()},onAllowNotifications:()=>void nx(),get timing(){return R().timing},get detector(){return R().detector},get turn(){return R().turn},get front(){return R().front}})}}),r),y(e,n(l,{get when(){return me()},get children(){var e=sY();return e.firstChild,y(e,me,null),e}}),r),r.addEventListener(`submit`,e=>{e.preventDefault(),Se()}),i.$$keydown=e=>{e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&!(Z()&&`ontouchstart`in window)&&(e.preventDefault(),Se())},i.$$input=e=>{ge(e.currentTarget.value),be()};var o=ye;return typeof o==`function`?t(o,i):ye=i,y(r,n(l,{get when(){return _Y()||pe()},get children(){var e=cY();return e.$$click=()=>void z(),y(e,n(L,{name:`wave`})),s(t=>{var n=`icon-btn concierge-voice${pe()?` on`:``}`,r=pe(),i=pe()?`Stop talking to the Concierge`:`Talk to the Concierge`,a=pe()?`End Voice with the Concierge`:`Talk to the Concierge (Voice)`;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`aria-pressed`,t.t=r),i!==t.a&&b(e,`aria-label`,t.a=i),a!==t.o&&b(e,`title`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),a),y(a,n(L,{name:`send`})),s(e=>{var t=pe()?`Voice is on: talk, or type here`:`Ask the Concierge…`,n=!B().trim()||_e();return t!==e.e&&b(i,`placeholder`,e.e=t),n!==e.t&&(a.disabled=e.t=n),e},{e:void 0,t:void 0}),s(()=>i.value=B()),e})()]}var bY={unknown:`link`};function xY(e){let t=vu,n=[...ql().values()].map(e=>({...e,question:Be(e.question,Su)})),r=[];for(let i of e)if(!(i.type===`message`&&i.primer)){if(i.type===`message`&&i.direction===`in`&&To(i.from)){let e=Mo(i.text,t);r.push(e?{...i,summary:e}:i)}else i.type===`message`&&i.text.includes(`dec_`)?r.push({...i,parts:Ro(i.text,n,bY)}):i.type===`assistant`&&i.text.includes(`dec_`)?r.push({...i,text:zo(i.text,n,bY)}):i.type===`tools`?r.push({...i,items:i.items.map(e=>typeof e.summary==`string`&&e.summary.includes(`ses_`)?{...e,summary:Vo(e.summary,t)}:e)}):r.push(i)}return r}z([`click`,`input`,`keydown`]);var SY=I(`<main class=entry><p></p><button type=button class=btn>Retry`),CY=I(`<main class=entry><p class=muted>Loading…`),wY=I(`<div class=drawer-backdrop>`),TY=I(`<div class=voice-strip>`),EY=I(`<div class=conn-banner role=status>Reconnecting to the hub…`),DY=I(`<div role=status aria-live=polite>`),OY=I(`<p class="muted cmp-empty"data-concierge-wait>Loading…`),kY=I(`<div><main class=main>`),AY=I(`<button type=button class="btn small">`),jY=I(`<div role=status aria-live=polite><span>`),MY=I(`<header class=topbar><span class="title display grow">Hub`),NY=I(`<div class=home-shell><div class=home-scroll>`),PY=()=>dt().name===`concierge`&&!Z(),FY=()=>{let e=WS();return e.name===`session`?ns(e.id,Xl(),nu(),Y.machines,Ql(),Ql()?[]:au()):void 0},IY=()=>{let e=WS();return FY()===`session`?e.id:void 0},LY=()=>pc(Sc(rx().phase===`off`,IY()),dt().name===`concierge`?Xl()?.sessionID:void 0);function RY(){Lu(()=>rx().phase!==`off`),x(()=>Ru(LY()));let[t,i]=u(``),[a,c]=u(!1),d=async()=>{i(``);try{if(!await Tu())return;Vu(LY()),pd(),Kf(),c(!0)}catch(e){i(`Cannot reach the hub: ${e.message}`)}};return x(e(()=>dt().name,e=>{e!==`pair`&&!a()&&d(),Z()&&Sp(!1)})),x(()=>{!X()&&a()&&dt().name!==`pair`&&c(!1)}),x(()=>{let e=dt();e.name===`session`&&ou().has(e.id)&&Vt(`/concierge`,{replace:!0})}),x(()=>ox.viewing(xc()??IY())),fe(()=>M(SA())),fe(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`b`&&(e.preventDefault(),Dp())};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e))}),x(()=>Lp(PY())),x(()=>{let e=Rp(),t=document.documentElement.style;t.setProperty(`--side-w`,`${e.side}px`),t.setProperty(`--rail-w`,`${e.rail}px`),e.concierge&&t.setProperty(`--concierge-w`,`${e.concierge}px`)}),x(()=>{a()&&location.hash===`#speech`&&dt().name!==`settings`&&Vt(`/settings/voice#speech`,{replace:!0})}),[n(v,{get children(){return[n(o,{get when(){return r(()=>dt().name===`pair`)()&&dt()},children:e=>n(hf,{get next(){return e().next},get error(){return e().error}})}),n(o,{get when(){return t()},get children(){var e=SY(),n=e.firstChild,r=n.nextSibling;return y(n,t),r.$$click=()=>void d(),e}}),n(o,{get when(){return!a()},get children(){return CY()}}),n(o,{get when(){return r(()=>dt().name===`approve`)()&&dt()},children:e=>n(_f,{get code(){return e().code}})}),n(o,{get when(){return r(()=>dt().name===`consent`)()&&dt()},children:e=>n(yf,{get flow(){return e().flow}})}),n(o,{when:!0,get children(){var e=kY(),t=e.firstChild;return y(e,n(l,{get when(){return!Z()||xp()},get children(){return[n(l,{get when(){return Z()},get children(){var e=wY();return e.$$click=()=>Sp(!1),e}}),n(l,{get when(){return!yp()||Z()},get children(){return[n(GR,{get phone(){return Z()},onClose:()=>Sp(!1),onCollapse:Dp}),n(l,{get when(){return!Z()},get children(){return n(Yx,{panel:`side`,label:`Resize sidebar`})}})]}})]}}),t),y(e,n(l,{get when(){return r(()=>!!yp())()&&!Z()},get children(){return n(vR,{onExpand:Dp})}}),t),y(t,n(l,{get when(){return r(()=>rx().phase!==`off`)()&&WS().name!==`session`},get children(){var e=TY();return y(e,n(aL,{})),e}}),null),y(t,n(l,{get when(){return Y.connection===`down`},get children(){return EY()}}),null),y(t,n(l,{get when(){return r(()=>Y.connection!==`down`)()&&Mu()},get children(){var e=DY();return y(e,()=>Mu()===`reconnecting`?`Reconnecting…`:`Updated`),s(()=>k(e,`sync-note ${Mu()}`)),e}}),null),y(t,n(l,{get when(){return r(()=>!(!Kp()||Z()||IY()))()&&WS().name!==`panes`},get children(){return n(Xq,{})}}),null),y(t,n(v,{get children(){return[n(o,{get when(){return r(()=>!nu())()&&(WS().name===`session`||WS().name===`panes`)||FY()===`wait`},get children(){return OY()}}),n(o,{get when(){return IY()||WS().name===`panes`},get children(){return n(zJ,{get routed(){return IY()}})}}),n(o,{get when(){return r(()=>WS().name===`new`)()&&WS()},children:e=>n(VS,_(()=>e()))}),n(o,{get when(){return r(()=>WS().name===`feature`)()&&WS()},children:e=>n(GJ,_(()=>e()))}),n(o,{get when(){return WS().name===`settings`},get children(){return n(wI,{})}}),n(o,{get when(){return WS().name===`concierge`},get children(){return n(vY,{mode:`page`})}}),n(o,{when:!0,get children(){return n(zY,{})}})]}}),null),y(e,n(l,{get when(){return PY()},get children(){return n(vY,{mode:`side`})}}),null),s(()=>k(e,`shell${yp()&&!Z()?` collapsed`:``}${Z()?` phone`:``}${xp()?` drawer`:``}`)),e}})]}}),n(_h,{}),n(WP,{}),n(re,{}),n(l,{get when(){return Ut()},children:e=>(()=>{var t=jY(),r=t.firstChild;return y(r,()=>e().text),y(t,n(l,{get when(){return e().action},get children(){var t=AY();return t.$$click=()=>{e().action.run(),Mt()},y(t,()=>e().action.label),t}}),null),s(()=>k(t,`toast ${e().kind}`)),t})()})]}function zY(){return(()=>{var e=NY(),t=e.firstChild;return y(e,n(l,{get when(){return Z()},get children(){var e=MY(),t=e.firstChild;return y(e,n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp}),t),y(e,n(TR,{}),null),e}}),t),y(t,n(Ux,{})),e})()}z([`click`]),me(()=>n(RY,{}),document.getElementById(`root`)),qf();export{OA as $,bP as A,LM as B,BG as C,OW as D,YW as E,uM as F,PM as G,yM as H,wM as I,jM as J,fM as K,pM as L,yP as M,mP as N,bz as O,cM as P,Qj as Q,VM as R,oG as S,aG as T,SM as U,FM as V,CM as W,tM as X,aM as Y,Xj as Z,wG as _,XG as a,Y as at,QW as b,rK as c,YG as d,gh as et,ZG as f,TG as g,EG as h,QG as i,Dp as it,OP as j,HP as k,JG as l,DG as m,eK as n,Jp as nt,qG as o,hu as ot,hG as p,dM as q,$G as r,Z as rt,WG as s,gu as st,HJ as t,Yp as tt,tK as u,CG as v,tG as w,ZW as x,SG as y,zM as z};
|
|
33
|
+
`)}function eq(e,t,n){return e.kind!==`message`||typeof e.at!=`number`?!1:t?.at!==void 0&&e.at>=t.at&&(t.stagedAt===void 0||e.at<t.stagedAt)||n?.from!==void 0&&e.at>=n.from&&e.at<n.until}function tq(e,t){return t===void 0?e:e.trim()===t.trim()?``:e}var nq=new Map;function rq(e,t){t.length&&nq.set(e,t)}function iq(e){let t=nq.get(e)??[];return nq.delete(e),t}var aq=I(`<button type=button class="btn small changes"aria-label="Show changes"><span class=add>+</span> <span class=del>−`),oq=I(`<div class="banner warn">No connected OpenCode process reports this session. It is read-only until its machine reconnects.`),sq=I(`<p class="muted pad no-timeline"data-unavailable=timeline>The hub can't show this <!> session's transcript; follow it in its terminal. Hub messages and live activity still appear here.`),cq=I(`<div class=history-sentinel aria-hidden=true>`),lq=I(`<p class="history-edge loading muted small"role=status><span class="spinner small"></span> Loading earlier messages…`),uq=I(`<p class="history-edge muted small">Beginning of conversation`),dq=I(`<p class="history-edge error small"role=alert>Couldn't load earlier messages: <!> <button type=button class="btn small">Retry`),fq=I(`<p class="muted small pane-unstreamed"role=status>Live text isn't streamed to this pane right now; the reply appears when the turn ends.`),pq=I(`<p class="working-line muted"role=status><span class="spinner small"></span> `),mq=I(`<p class="idle-line muted small"> · last activity `),hq=I(`<button type=button class="btn primary tap-to-start">Tap to start Voice mode`),gq=I(`<p class="note err voice-error"role=alert>Voice mode: `),_q=I(`<div class=sheet-backdrop>`),vq=I(`<div><div class=session-main><header class=topbar><div class=topbar-title></div></header><div class=scroller><div class=column></div></div><div class=dock><div class=column>`),yq=I(`<a class="crumb muted"> <span class=crumb-sep aria-hidden=true>/`),bq=I(`<h1 class=title>`),xq=I(`<h1 class=title><button type=button class=title-btn>`),Sq=I(`<span class=chip-server><span aria-hidden=true></span><span class=place-sep aria-hidden=true>·</span><span class=place-where>`),Cq=I(`<span> · `),wq=I(`<span class=place-branch>`),Tq=I(`<div class=session-place><span aria-hidden=true></span><span class=place-machine></span><span class=place-sep aria-hidden=true>·</span><span class=place-where>`),Eq=I(`<span class=session-error-status>`),Dq=I(`<span class="session-error-where muted">in subagent `),Oq=I(`<div class=session-error-message>`),kq=I(`<div class="banner session-error"role=alert><span class=session-error-mark aria-hidden=true>✕</span><div class=session-error-body><div class=session-error-head><strong>`),Aq=I(`<p class="muted pad">Loading conversation…`),jq=I(`<p class="muted pad empty-session">No messages yet. Type below, or start Voice mode.`),Mq=I(`<p>`),Nq=I(`<p class="answered-by small muted">`),Pq=I(`<div class=revert-banner role=status><span class=revert-text><span class="muted revert-held"title="Messages from agents and apps are delivered after you restore or send"> · agent messages wait</span></span><button type=button class="btn small"title="Bring the messages and files back">Restore`),Fq=I(`<span class=muted> · `),Iq=I(`<button type=button class="btn stop"aria-label="Stop the session and its subagents"> Stop`),Lq=I(`<div class=composer-unavailable data-no-prompt><p class="muted small">`),Rq=I(`<div class=empty><p class=display>Session not found</p><p class=muted>It may belong to another account, or it no longer exists.</p><a class="btn primary"href=/>Back to sessions`),zq=3e4,Bq=80,Vq=100,Hq=2e3,Uq;function Wq(i){let a=i.id,c=Cc(a,i.visible);M(()=>c.release()),x(()=>i.focused?.()&&c.focus());let d=()=>Cp()&&(i.rail?.()??!0),f,p=()=>{let e=f??d();f=void 0,Ep(!e)},h=()=>document.visibilityState===`visible`&&(i.visible?.()??!0),g=()=>_u(a),S=()=>gu().find(e=>e.id===a),w=()=>{let e=g();return e?Ci(e.machine.name,e.session,vt()?.branch):void 0},T=()=>g()?.session.status,E=()=>bo(re()?T()?.filter(e=>ie().has(e.id)):T()),D=()=>!g(),j=C(()=>xz(g()?.process)),ee=()=>Cz(j()),te=()=>!!g()&&!j().timeline,I=()=>g()?.session.exposed!==!1,ne=()=>typeof g()?.session.rootID==`string`?g().session.rootID:a,re=()=>ne()!==a;x(()=>{let e=g()?.session;if(!Z()||!e)return;let t=ne()===a?e.parentID:ne();dz(window.history,location.pathname+location.search+location.hash,typeof t==`string`?t:void 0)});let ie=C(()=>yo(T(),a)),oe=(e,t)=>e===ne()&&(!re()||typeof t==`string`&&ie().has(t)),se=()=>{let e=g()?.session.parentID;if(typeof e==`string`&&e)return{id:e,title:T()?.find(t=>t.id===e)?.title||_u(e)?.session.title||`Parent session`}},[ce,le]=u(),de=()=>{let e=ce();return e?e.value:JK(g()?.session)};x(()=>{let e=ce();e&&JK(g()?.session)?.messageID===e.value?.messageID&&le(void 0)});let pe=C(()=>KK(g()?.process)),me,z=new it,[B,ge]=u(0),_e=()=>ge(e=>e+1),[ve,ye]=u(!1),[be,xe]=u(!1),[Se,Ce]=u([]),[we,Te]=u({}),Ee=0,De=(e,t=``,n)=>Ce(r=>[...r.slice(-20),{key:`n${++Ee}`,text:e,kind:t,...n?{denial:n}:{}}]),[ke,Ae]=u([]),je=!1,Me=()=>{let e=su(),t=ke();return t.length?[...e,...t.filter(t=>!e.some(e=>e.seq===t.seq))]:e},Ne=e=>typeof e.sessionID==`string`?_t(Me(),e.sessionID,tB(z.rows(),e),pu):void 0,Pe=C(()=>(B(),new Set(z.rows().flatMap(e=>e.kind===`error`&&e.declined===!0?[Ne(e)?.key??``]:[]).filter(Boolean)))),Fe=new Map,Ie=C(()=>{B(),z.status(T(),a);let e=new Map,t=de(),n=XK(g()?.session),r=Jz(t||n?z.rows().filter(e=>!eq(e,t,n)):z.rows(),{denied:e=>Ne(e)?.text}).map(t=>{let n=JSON.stringify(t),r=Fe.get(t.key),i=r&&r.json===n?r:{json:n,block:t};return e.set(t.key,i),i.block});return Fe=e,r}),[Le,Re]=Or({}),ze,Be=!0,Ve=()=>requestAnimationFrame(()=>ze&&(ze.scrollTop=ze.scrollHeight));x(e(Ie,()=>Be&&Ve())),x(e(Ie,e=>{!je&&e.some(e=>e.type===`error`&&e.denied&&e.label===`Denied: the turn stopped`)&&(je=!0,G(`/api/agent/audit?limit=${Vq}`).then(e=>Ae(Xt(e).entries)).catch(()=>{}))}));let[Ue,We]=u(0),Ge=e=>new URLSearchParams(Object.entries(e).flatMap(([e,t])=>t===void 0?[]:[[e,String(t)]])).toString(),Ke=new gz(z,e=>G(`${H(a)}/timeline?${Ge(e)}`),{limit:Bq,onChange:()=>{Ye(()=>he(()=>{We(e=>e+1),_e()})),Ke.state===`idle`&&K()}}),qe=()=>(Ue(),{state:Ke.state,error:Ke.error}),Je=C(()=>(Ue(),Ke.cutMessageID));function Ye(e){let t=ze;if(!t||Be)return e();let n=t.getBoundingClientRect().top,r=Array.from(t.querySelectorAll(`.transcript > [data-key]`)).find(e=>e.getBoundingClientRect().bottom>n+1),i=r?.dataset.key,a=r?r.getBoundingClientRect().top:0;if(e(),!i)return;let o=Array.from(t.querySelectorAll(`.transcript > [data-key]`)).find(e=>e.dataset.key===i);o&&(t.scrollTop+=o.getBoundingClientRect().top-a)}let Xe,Ze;function K(){Ze&&ze&&typeof IntersectionObserver<`u`&&(Xe??=new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&void Ke.older(),{root:ze,rootMargin:`${Math.round(window.innerHeight*1.5)}px 0px 0px 0px`}),Xe.unobserve(Ze),Xe.observe(Ze))}M(()=>Xe?.disconnect());let Qe=e=>{Ze=e,requestAnimationFrame(()=>requestAnimationFrame(K))},$e=()=>`${de()?.messageID??``}|${ZK({revertCommitted:XK(g()?.session)})}`,et=ae($e),tt=!1;x(e($e,e=>{if(e===et)return;let t=e.split(`|`)[0]===et.split(`|`)[0];et=e,t&&tt?tt=!1:ve()&&rt()}));async function rt(){z.clear(),_e();try{await Ke.first(),await ot(),Be=!0,Ve()}catch(e){De(`Could not refresh the conversation: ${U(e)}`,`err`)}}async function at(){if(te())return ye(!0);try{await Ke.first(),ye(!0),_e(),Ve()}catch(e){e instanceof W&&e.status===404&&!g()?xe(!0):te()||Oz(e)||De(e instanceof W&&e.status===409?`No OpenCode process for this session is connected; history is unavailable until it reconnects.`:`Could not load the conversation: ${U(e)}`,`err`),ye(!0)}}async function ot(){try{let{messages:e}=await G(`${H(a)}/messages?limit=200`);for(let t of e??[]){let e=nt(a,t);e&&z.hubMessage(e)}_e()}catch{}}async function st(){try{let e=await G(H(a)),t=Ml.feed(ne());t.load(e.activity??[]),e.status&&t.status(e.status)}catch{}}let lt=ae(()=>T()),dt=hu(e=>{if(e.type===`resync`){ve()?Ke.resync().catch(e=>De(`Could not refresh the conversation: ${U(e)}`,`err`)).then(ot):at().then(ot),st(),Dt();return}let t=typeof e.rootID==`string`?e.rootID:e.sessionID;if(e.type===`activity`&&oe(t,e.sessionID)&&e.item&&e.item.kind!==`thinking`)z.activity(e.sessionID,e.item),_e();else if(e.type===`reasoning`&&oe(t,e.sessionID)&&typeof e.messageID==`string`&&typeof e.delta==`string`)z.appendReasoning({sessionID:e.sessionID,messageID:e.messageID,delta:e.delta}),_e();else if(e.type===`delta`&&oe(t,e.sessionID)&&typeof e.messageID==`string`&&typeof e.text==`string`)z.appendText({sessionID:e.sessionID,messageID:e.messageID,...Number.isInteger(e.ordinal)?{ordinal:e.ordinal}:{},delta:e.text}),_e();else if(e.type===`message`){let t=nt(a,e.message);t&&(z.hubMessage(t),_e())}else if(e.type===`turn`&&e.sessionID===a&&rn){let{sub:t,sentAt:n}=rn;rn=void 0,sn(e,t,n)}else if(e.type===`status`&&e.sessionID===ne()){for(let t of ey(lt,e.sessions,a))De(t,`sys`);let t=bo(lt);if(lt=e.sessions,!bo(e.sessions)){for(let e of z.rows())e.live&&z.upsert({key:e.key,live:!1});z.endReasoning(void 0),t&&c.streamed()===!1&&ve()&&Ke.resync().catch(()=>{}).then(ot)}_e(),kt()}}),ft;x(e(()=>g()?.session.updated,()=>{clearTimeout(ft),ft=setTimeout(()=>h()&&void Qu(a),400)}));let pt=(e,t=!1)=>V(`${H(a)}/presence`,{method:`POST`,json:{visible:e},keepalive:t}).catch(()=>{}),mt=()=>{pt(h(),document.visibilityState!==`visible`),h()&&Qu(a,!0)};x(e(()=>i.visible?.()??!0,()=>mt(),{defer:!0}));let ht=ae(c.streamed);x(e(c.streamed,e=>{if(e===void 0)return;let t=ht===!1&&e;ht=e,t&&ve()&&Ke.resync().catch(()=>{}).then(ot)}));let gt,[vt,yt]=u(),[bt,xt]=u(``),[St,Ct]=u(!0),wt=0,Tt,Et=0;async function Dt(){if(wt=Date.now(),g()&&!j().summary)return xt(`Details aren't available for ${j().harnessName} sessions.`),Ct(!1);try{let e=await G(`${H(a)}/summary`);yt(e),xt(``),(!e.branch||!e.changes)&&Et<2&&(Et++,clearTimeout(Tt),Tt=setTimeout(Dt,4e3))}catch(e){xt(e instanceof W&&e.status===409?`The machine is disconnected.`:`Could not load details: ${U(e)}`)}finally{Ct(!1)}}function kt(){clearTimeout(Tt),Tt=setTimeout(Dt,Math.max(0,Hq-(Date.now()-wt)))}let[At,jt]=u(),Mt=uV(()=>a),[Nt,Pt]=u(),Ft=()=>j().sessionModel&&j().models,[It,Lt]=u({...O_(),draft:ax.get(a)}),Rt=e=>{Lt(t=>k_(t,e)),ax.set(a,It().draft)};M(ax.subscribe(e=>{e===a&&ax.get(a)!==It().draft&&Lt(e=>k_(e,{type:`input`,text:ax.get(a)}))}));let zt=()=>wz(j(),E()),Bt=()=>{let e=A_(It(),{running:E(),offline:D()}),t=zt();return{...e,canSubmit:e.canSubmit&&t.allowed,showStop:e.showStop&&j().stop,...!e.hint&&t.hint?{hint:t.hint}:{}}},Ht=0,[Ut,Wt]=u(!1),Gt=Promise.resolve();function Kt(e){Gt=Gt.then(async()=>{Wt(!0);try{for(let t of e)try{Rt({type:`attach`,image:await uS(t,It().images)})}catch(e){Rt({type:`attachError`,message:U(e)})}}finally{Wt(!1)}})}async function qt(e,t,n){let r=[];for(let i of n)if(S_(i.mime))try{let n=await(await V(Rz(e,t,i.index))).blob();r.push(await uS(new File([n],i.name||`image`,{type:i.mime}),r))}catch{}return r}async function Jt(e){try{await navigator.clipboard.writeText(e),q(`Copied`)}catch{q(`Could not copy: the browser refused`,`err`)}}async function Yt(e,t=!1){try{let n=await(await V(`${H(a)}/fork`,{method:`POST`,json:{messageID:e}})).json();n.text&&ax.set(n.sessionID,n.text),rq(n.sessionID,await qt(a,e,n.attachments??[])),q(t?`Forked into a new session beside this one`:`Forked into a new session`),t?wn(n.sessionID):Vt(Ot(n.sessionID))}catch(e){q(Oz(e)??`Could not fork: ${U(e)}`,`err`)}}async function Zt(e){if(E())return q(`Wait for the session to finish (or stop it) before reverting`,`warn`);try{let t=$K(await G(`${H(a)}/revert/preview?messageID=${encodeURIComponent(e)}`));if(t&&!await P(t,`Revert`,{danger:!0}))return;let n=await(await V(`${H(a)}/revert`,{method:`POST`,json:{messageID:e,files:!0}})).json();le({value:JK({revert:n.revert})}),he(()=>{for(let e of It().images)Rt({type:`detach`,id:e.id});Rt({type:`input`,text:n.text??``})}),me=n.text??``;for(let t of await qt(a,e,n.attachments??[]))Rt({type:`attach`,image:t})}catch(e){q(Oz(e)??`Could not revert: ${U(e)}`,`err`)}}async function Qt(){try{await V(`${H(a)}/revert/restore`,{method:`POST`,json:{}}),le({value:void 0}),Rt({type:`input`,text:tq(It().draft,me)}),me=void 0}catch(e){q(`Could not restore: ${U(e)}`,`err`)}}async function $t(){if(!de())return!0;try{return await V(`${H(a)}/revert/commit`,{method:`POST`,json:{}}),tt=!0,le({value:void 0}),me=void 0,!0}catch(e){return q(`Could not send: the revert could not be completed (${U(e)})`,`err`),!1}}let en=()=>{let e=pe();return{fork:e.fork,revert:e.revert.enabled&&E()?{enabled:!1,reason:`Wait for the session to finish (or stop it) before reverting`}:e.revert,onCopy:e=>void Jt(e),onFork:e=>void Yt(e),onForkBeside:e=>void Yt(e,!0),onRevert:e=>void Zt(e)}};async function nn(){let e=It().draft.trim(),t=It().images;if(!e&&!t.length||de()&&!await $t())return;if(fn()&&!t.length){Rt({type:`input`,text:``}),qb.sendTyped(a,e);return}let n=++Ht,r=`local:${n}`,i=E(),o=Date.now();he(()=>{Rt({type:`submit`,id:n}),z.upsert({key:r,kind:`user`,text:e,at:o,...t.length?{images:t.map(({name:e,mime:t,preview:n})=>({name:e,mime:t,preview:n}))}:{}}),Te(e=>({...e,[r]:`pending`})),_e()}),Be=!0,Ve();try{let i={text:e,...t.length?{images:t.map(({mime:e,data:t,name:n})=>({mime:e,data:t,name:n}))}:{}},s=await V(`${H(a)}/turn`,{method:`POST`,json:i,headers:{prefer:`respond-async`}}),c=await s.json().catch(()=>({})),l=j_(s.status,c);Rt({type:`accepted`,id:n});let u=Tz(j(),l);Te(e=>({...e,[r]:u.tick})),u.toast&&q(u.toast),l===`accepted`?rn={sub:n,sentAt:o}:sn(c,n,o)}catch(e){if(e instanceof tn&&!i&&await N_(E)){Rt({type:`accepted`,id:n}),Te(e=>({...e,[r]:`sent`})),De(`Lost the connection to the hub after sending; the session is working on your message and its reply will appear here.`,`sys`);return}let t=Oz(e);t&&q(t,`err`);let a=t??(e instanceof W&&e.status===504?`OpenCode did not answer in time. The session may still be working.`:U(e));he(()=>{Rt({type:`rejected`,id:n,message:a}),z.upsert({key:r,kind:`user`,text:``,images:[]}),_e()})}}let rn,[an,on]=u(new Set);function sn(e,t,n){let r=z.rows().some(e=>e.kind===`assistant`&&(e.at??0)>=n&&e.text);e.reply&&!r&&z.upsert({key:`reply:${t}`,kind:`assistant`,text:e.reply,at:Date.now()});let i=He(su(),new Set([a,...ie()]),Date.now(),void 0,pu),o=M_(e,{denied:i?.text});o&&De(o.text,o.kind,i&&o.text.startsWith(i.text)?i.key:void 0),i&&o?.text.startsWith(i.text)&&on(e=>new Set([...e,i.key])),_e()}async function cn(){Rt({type:`stop`});try{let{stopped:e}=await(await V(`${H(a)}/stop`,{method:`POST`,json:{}})).json(),t=Array.isArray(e)?e.length:0;q(t?`Stopped ${t} session${t===1?``:`s`}`:`Nothing was running`)}catch(e){q(Oz(e)??`Could not stop: ${U(e)}`,`err`)}finally{Rt({type:`stopped`})}}let ln=()=>lx(a),un=()=>c.takesInput()?ox.toggle(a):c.focus(),dn=rx,fn=()=>dn().phase!==`off`&&dn().sessionID===a,pn=()=>dn().phase!==`off`&&dn().sessionID!==void 0&&dn().sessionID!==a,mn=()=>dn().error?.sessionID===a&&!dn().error.gesture?dn().error.message:void 0,hn=()=>dn().error?.sessionID===a&&dn().error.gesture===!0,gn=()=>fo(zl()??void 0,X()?.publicURL)?.micBlocked?`Set up speech in Settings to use the microphone`:void 0;M(qb.attach(a,{user:e=>{let t=`voice:${++Ee}`;return z.upsert({key:t,kind:`user`,text:e,at:Date.now()}),Te(e=>({...e,[t]:`pending`})),_e(),t},tick:(e,t)=>Te(n=>({...n,[e]:t})),agent:e=>{let t=e.messageID?z.liveTextKey(e.messageID):`say:${++Ee}`,{mode:n,text:r}=$v(z.get(t)?.text??``,e.text);n!==`keep`&&(z.upsert({key:t,messageID:e.messageID,kind:`assistant`,text:r,at:z.get(t)?.at??Date.now()}),_e())},note:(e,t)=>De(e,t??`sys`)}));async function _n(){if(!fn()&&!c.takesInput())return c.focus();fn()||(Ty(),ox.cancel()),await qb.toggle(a),qb.isOn(a)&&qb.state.phase===`on`&&De(`Voice mode on${qb.state.agent?` (${qb.state.agent} agent)`:``}. Speak naturally; say “stop” to interrupt, “pause listening” to end.`,`sys`)}let vn=zy(location.href);vn.voice&&(Uq=a,Vt(vn.path,{replace:!0})),x(()=>{Uq===a&&g()&&!gn()&&(Uq=void 0,fn()||_n())}),fe(()=>{for(let e of iq(a))Rt({type:`attach`,image:e});let e=yS(a);e&&(he(()=>{Rt({type:`input`,text:e.text});for(let t of e.images)Rt({type:`attach`,image:t})}),nn()),st(),Qu(a,h()),pt(h()),gt=setInterval(()=>h()&&void pt(!0),zq),document.addEventListener(`visibilitychange`,mt)});let yn=!1;x(()=>{!yn&&Y.machines&&(yn=!0,ae(()=>{at().then(ot),Dt(),(!g()||j().models)&&Mt.load()}))});let bn=()=>void pt(!1,!0);window.addEventListener(`pagehide`,bn),M(()=>{dt(),clearInterval(gt),clearTimeout(Tt),clearTimeout(ft),document.removeEventListener(`visibilitychange`,mt),window.removeEventListener(`pagehide`,bn),bn()});let xn=!1;x(()=>{if(g())xn=!0;else if(xn&&Y.machines){if(i.onGone)return i.onGone();q(`That session is gone (deleted, or its machine was revoked).`,`warn`),Vt(`/`,{replace:!0})}});let Sn=()=>Br(g()?.session).filter(e=>!re()||e.sessionID!==void 0&&ie().has(e.sessionID)),Cn=C(()=>new Map(Sn().map(e=>[`${e.kind}:${e.id}`,e]))),Tn=C((e=[])=>{let t=[...Cn().keys()];return t.length===e.length&&t.every((t,n)=>t===e[n])?e:t}),En=C(()=>{B();let e;for(let t of z.rows())t.kind===`user`&&(t.depth??0)===0&&typeof t.at==`number`&&(e===void 0||t.at>e)&&(e=t.at);return e}),Dn=()=>{let e=new Set(Sn().map(e=>e.id));return ct(su(),new Set([a,...ie()]),kn(),En(),new Set([...an(),...Pe()]),Su,pu).filter(t=>!e.has(t.key))},On=()=>(Fl(),N(),Ml.has(ne())?Ml.feed(ne()).pulse():void 0),[kn,An]=u(Date.now()),jn=setInterval(()=>An(Date.now()),1e3);M(()=>clearInterval(jn));let Mn=()=>{if(re()){let e=T()?.find(e=>e.id===a);return e?.state===`working`?(kn(),`Working${e.since?` · ${qa(Date.now()-e.since)}`:``}`):void 0}let e=On();if(!E()||!e?.busy)return;kn();let t=Ji(T(),a),n=Ui(T());return`${t??e.label}${e.since?` · ${qa(Date.now()-e.since)}`:``}${n?` · ${qi(n)}`:``}`},Nn=()=>zi(T(),a),Pn=()=>{let e=g()?.session;if(!e)return`Not connected`;let t=Sn().length;return j().voice?`${fn()&&dn().agent?`${dn().agent} agent`:e.conversation?`Voice agent`:`Session agent`} · ${t?`${t} request${t===1?``:`s`} waiting`:I()?`Voice on`:`Voice off`}`:t?`${t} request${t===1?``:`s`} waiting`:`${j().harnessName} session`},Fn=()=>vt()?.changes?.files.map(e=>e.file)??[];return(()=>{var e=vq(),u=e.firstChild,h=u.firstChild,x=h.firstChild,C=h.nextSibling,T=C.firstChild,M=C.nextSibling.firstChild;e.$$pointerdown=()=>c.focus(),e.$$focusin=()=>c.focus(),y(h,n(l,{get when(){return Z()},get children(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})}}),x),y(x,n(l,{get when(){return se()},children:e=>(()=>{var t=yq(),r=t.firstChild,i=r.nextSibling;return y(t,n(L,{name:`chevron`,class:`crumb-chev`}),r),y(t,()=>e().title,i),s(n=>{var r=Ot(e().id),i=`Back to ${e().title}`,a=`Back to ${e().title}`;return r!==n.e&&b(t,`href`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),a!==n.a&&b(t,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),y(x,n(l,{get when(){return S()},get fallback(){return(()=>{var e=bq();return y(e,()=>g()?.session.title||(Y.machines?`Session`:`Loading…`)),e})()},children:e=>[n(A,{get state(){return e().state}}),n(Ng,{get id(){return e().id},get title(){return e().title},place:`topbar`,class:`title`,get children(){var t=xq(),n=t.firstChild;return n.$$click=()=>Sh({id:e().id,place:`topbar`}),y(n,()=>e().title),s(()=>b(n,`title`,`${e().title} · click to rename`)),t}}),n(Pg,{get id(){return e().id}}),n(O,{label:`Session actions`,class:`icon-btn small`,items:()=>Th(e(),{open:!1,place:`topbar`})})]}),null),y(h,n(l,{get when(){return w()},children:e=>(()=>{var t=Sq(),i=t.firstChild,a=i.nextSibling,o=a.nextSibling;return y(t,()=>e().machine,a),y(o,()=>e().where),y(t,n(l,{get when(){return e().branch},get children(){return[n(L,{name:`branch`}),r(()=>e().branch)]}}),null),s(n=>{var r=`${e().text} · ${g().session.directory}`,a=`Runs on ${e().text}`,o=`online-dot${g().machine.online?` on`:``}`;return r!==n.e&&b(t,`title`,n.e=r),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&k(i,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}),null),y(h,n(l,{get when(){return ee()},children:e=>(()=>{var t=Cq(),n=t.firstChild;return y(t,()=>j().harnessName,n),y(t,()=>e().label,null),s(n=>{var r=`chip-evidence ${e().level}`,i=e().level,a=e().detail,o=`${j().harnessName} · evidence: ${e().label}. ${e().detail}`;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`data-evidence`,n.t=i),a!==n.a&&b(t,`title`,n.a=a),o!==n.o&&b(t,`aria-label`,n.o=o),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),null),y(h,n(UK,{sessionID:a,get harness(){return j().harness},get takesInput(){return c.takesInput}}),null),y(h,n(l,{get when(){return vt()?.changes?.files.length},get children(){var e=aq(),t=e.firstChild;t.firstChild;var n=t.nextSibling.nextSibling;return n.firstChild,e.$$click=()=>jt(Fn()[0]),y(t,()=>vt().changes.additions,null),y(n,()=>vt().changes.deletions,null),e}}),null),y(h,n(l,{get when(){return pn()},get children(){return n(aL,{})}}),null),y(h,n(l,{get when(){return Z()},get children(){return n(TR,{})}}),null),y(h,n(F,{icon:`rail`,get label(){return d()?`Hide details`:`Show details`},get"aria-pressed"(){return d()},onPointerDown:()=>f=d(),onClick:p}),null),y(h,()=>i.paneTools,null),y(u,n(l,{get when(){return r(()=>!!Z())()&&w()},children:e=>(()=>{var t=Tq(),r=t.firstChild,i=r.nextSibling,a=i.nextSibling.nextSibling;return y(i,()=>e().machine),y(a,()=>e().where),y(t,n(l,{get when(){return e().branch},get children(){return[n(L,{name:`branch`}),(()=>{var t=wq();return y(t,()=>e().branch),t})()]}}),null),s(n=>{var i=g().session.directory,a=`Runs on ${e().text}`,o=`online-dot${g().machine.online?` on`:``}`;return i!==n.e&&b(t,`title`,n.e=i),a!==n.t&&b(t,`aria-label`,n.t=a),o!==n.a&&k(r,n.a=o),n},{e:void 0,t:void 0,a:void 0}),t})()}),C),y(u,n(l,{get when(){return Nn()},children:e=>(()=>{var t=kq(),i=t.firstChild.nextSibling,o=i.firstChild,c=o.firstChild;return y(c,()=>e().label),y(o,n(l,{get when(){return e().status},get children(){var t=Eq();return y(t,()=>e().status),t}}),null),y(o,n(l,{get when(){return r(()=>e().sessionID!==a)()&&e().title},get children(){var t=Dq();return t.firstChild,y(t,()=>e().title,null),t}}),null),y(i,n(l,{get when(){return r(()=>!!e().message)()&&e().message!==e().label},get children(){var t=Oq();return y(t,()=>e().message),t}}),null),y(t,n(F,{icon:`close`,label:`Dismiss error`,class:`session-error-dismiss`,onClick:()=>void jd(e().sessionID)}),null),s(()=>b(t,`data-error-session`,e().sessionID)),t})()}),C),y(u,n(l,{get when(){return r(()=>!!D())()&&Y.machines},get children(){return oq()}}),C),C.addEventListener(`scroll`,e=>Be=e.currentTarget.scrollHeight-e.currentTarget.scrollTop-e.currentTarget.clientHeight<80);var P=ze;return typeof P==`function`?t(P,C):ze=C,y(T,n(l,{get when(){return!be()},get fallback(){return n(Gq,{})},get children(){return[n(l,{get when(){return ve()},get fallback(){return Aq()},get children(){return[n(l,{get when(){return te()},get children(){var e=sq(),t=e.firstChild.nextSibling;return t.nextSibling,y(e,()=>j().harnessName,t),e}}),n(l,{get when(){return Ie().length||Se().length},get fallback(){return n(l,{get when(){return!te()},get children(){return jq()}})},get children(){return[(()=>{var e=cq();return t(Qe,e),e})(),n(v,{get children(){return[n(o,{get when(){return qe().state===`loading`},get children(){return lq()}}),n(o,{get when(){return r(()=>qe().state===`done`)()&&Ie().length},get children(){return uq()}}),n(o,{get when(){return qe().state===`error`},get children(){var e=dq(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return y(e,()=>qe().error,t),n.$$click=()=>void Ke.retry(),e}})]}}),n(DW,{sessionID:a,get blocks(){return Ie()},get ticks(){return we()},get actions(){return en()},previews:!0,get partialMessage(){return Je()},expanded:Le,onToggle:(e,t)=>Re(e,t),onDetail:(e,t)=>{z.detail(e,t),_e()}})]}})]}}),n(m,{get each(){return ut(Se(),Pe())},children:e=>(()=>{var t=Mq();return y(t,()=>e.text),s(n=>{var r=`note ${e.kind}`,i=e.kind===`err`?`alert`:void 0;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(Og,{get decisions(){return Oe(Ul(),a)}}),n(m,{get each(){return Tn()},children:e=>n(l,{get when(){return Cn().get(e)},children:e=>n(zU,{sessionID:a,get blocker(){return e()},rootID:a,get canAnswer(){return r(()=>e().kind===`permission`)()?j().permission:j().form},get harnessName(){return j().harnessName}})})}),n(m,{get each(){return Dn()},children:e=>(()=>{var t=Nq();return y(t,()=>e.text),s(n=>{var r=e.key,i=e.title;return r!==n.e&&b(t,`data-answered-by`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(l,{get when(){return r(()=>!!E())()&&c.streamed()===!1},get children(){return fq()}}),n(l,{get when(){return Mn()},get children(){var e=pq();return e.firstChild.nextSibling,y(e,Mn,null),e}}),n(l,{get when(){return r(()=>!(E()||!g()))()&&S()},get children(){var e=mq(),t=e.firstChild;return y(e,()=>ue[S().state],t),y(e,()=>R(S().updated,N()),null),e}})]}})),y(M,n(l,{get when(){return fn()},get children(){return n(MB,{get state(){return dn().voice},get level(){return dn().level},get held(){return dn().held},get ignored(){return dn().ignored},get working(){return E()},get model(){return lV(Mt.prefs(),`voice`)},onMute:()=>qb.mute(),onEnd:()=>void qb.end(),onModel:()=>Pt(`voice`),get notifyHint(){return tx()},onAllowNotifications:()=>void nx(),get timing(){return dn().timing},get detector(){return dn().detector},get turn(){return dn().turn},get front(){return dn().front}})}}),null),y(M,n(l,{get when(){return hn()},get children(){var e=hq();return e.$$click=()=>void _n(),e}}),null),y(M,n(l,{get when(){return mn()},get children(){var e=gq();return e.firstChild,y(e,mn,null),e}}),null),y(M,n(l,{get when(){return de()},children:e=>(()=>{var t=Pq(),r=t.firstChild,i=r.firstChild,a=r.nextSibling;return y(t,n(L,{name:`undo`}),r),y(r,()=>QK(e()).text,i),y(r,n(l,{get when(){return QK(e()).files},children:e=>(()=>{var t=Fq();return t.firstChild,y(t,e,null),t})()}),i),a.$$click=()=>void Qt(),s(()=>b(t,`data-revert`,e().messageID)),t})()}),null),y(M,n(l,{get when(){return zt().show},get fallback(){return(()=>{var e=Lq(),t=e.firstChild;return y(t,()=>zt().hint),y(e,n(l,{get when(){return Bt().showStop},get children(){var e=Iq(),t=e.firstChild;return e.$$click=()=>void cn(),y(e,n(L,{name:`stop`}),t),s(()=>e.disabled=!Bt().canStop),e}}),null),e})()},get children(){return n(OB,_({get draft(){return It().draft},get images(){return It().images},get attaching(){return Ut()},get view(){return Bt()},get error(){return It().error},get voiceOn(){return fn()},get voiceBlocked(){return gn()},get dictating(){return ln().recording},get transcribing(){return ln().transcribing},get metaLeft(){return Pn()},get voiceModel(){return r(()=>!!Mt.error())()?`unavailable`:lV(Mt.prefs(),`voice`)}},()=>j().summary?{sessionModel:KB(vt()?.model,{pickable:Ft()}),sessionModelPickable:Ft()}:{},{onInput:e=>Rt({type:`input`,text:e}),onAttach:Kt,onDetach:e=>{let t=It().images.find(t=>t.id===e);t?.preview.startsWith(`blob:`)&&URL.revokeObjectURL(t.preview),Rt({type:`detach`,id:e})},onSubmit:()=>void nn(),onStop:()=>void cn(),onDictate:()=>void un(),onVoice:()=>void _n(),onModel:e=>Pt(e),get showModels(){return j().models},get showVoice(){return j().voice}}))}}),null),y(u,n(l,{get when(){return At()},get children(){return n(sU,{sessionID:a,get file(){return At()},get files(){return r(()=>!!Fn().length)()?Fn():[At()]},onFile:jt,onClose:()=>jt(void 0)})}}),null),y(e,n(l,{get when(){return d()},get children(){return[n(l,{get when(){return Z()},get children(){var e=_q();return e.$$click=()=>Ep(!1),e}}),n(l,{get when(){return!Z()},get children(){return n(Yx,{panel:`rail`,label:`Resize details`})}}),n(oU,{get found(){return g()},get summary(){return vt()},get summaryError(){return bt()},get loading(){return St()},onFile:e=>jt(e),onClose:()=>Ep(!1)})]}}),null),y(e,n(dV,{get kind(){return Nt()},models:Mt,onClose:()=>Pt(void 0),get sessionCurrent(){return qB(vt()?.model)},onSessionModel:e=>yt(t=>t&&{...t,model:e})}),null),s(t=>{var n=`session-layout${d()?` with-rail`:``}`,r=c.paneID,i=c.takesInput()?``:void 0;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`data-pane`,t.t=r),i!==t.a&&b(e,`data-pane-focused`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),e})()}function Gq(){return Rq()}z([`focusin`,`pointerdown`,`click`]);var Kq=I(`<span class=pane-drop-label>`),qq=I(`<div class=pane-drop-area><span class=pane-drop-hint>`),Jq=I(`<div aria-hidden=true>`),Yq=I(`<div class=pane-dock-map>`),Xq=I(`<div class=pane-dock role=region aria-label="Drop into a pane"><div class=pane-dock-card><p class=pane-dock-title></p><p class="pane-dock-note muted">Edges split, the centre replaces. Up to 4 panes.`),Zq={left:`Split left`,right:`Split right`,top:`Stack above`,bottom:`Stack below`,center:`Replace`};function Qq(e,t){let n=Zp(e);return n===`limit`?{text:`4 panes open: drop in the centre to replace`,refused:!0}:n===`focused`?{text:`Already here`,refused:!1}:n===`moved`&&t===`center`?{text:`Swap`,refused:!1}:n===`moved`?{text:`Move: ${Zq[t].replace(`Split `,``).replace(`Stack `,``)}`,refused:!1}:n===`added`&&`empty`in e?{text:`Open in a pane`,refused:!1}:{text:Zq[t],refused:!1}}function $q(e){let[t,r]=u(),i=t=>e.index===void 0?{empty:!0}:{index:e.index,zone:t},a=t=>{if(!Xp(t))return;t.preventDefault(),t.stopPropagation();let n=t.currentTarget.getBoundingClientRect(),i=e.index===void 0?`center`:Xf(t.clientX-n.left,t.clientY-n.top,n.width,n.height);r(i),t.dataTransfer&&(t.dataTransfer.dropEffect=Kp()?.move||t.dataTransfer.effectAllowed===`move`?`move`:`copy`)},o=()=>t()?Qq(i(t()),t()):void 0;return(()=>{var c=Jq();return c.addEventListener(`drop`,e=>{if(!Xp(e))return;e.preventDefault(),e.stopPropagation();let n=t()??`center`;r(void 0),$p(e,i(n))}),c.addEventListener(`dragleave`,e=>!e.currentTarget.contains(e.relatedTarget)&&r(void 0)),c.addEventListener(`dragover`,a),c.addEventListener(`dragenter`,a),y(c,n(l,{get when(){return e.label},get children(){var t=Kq();return y(t,()=>e.label),t}}),null),y(c,n(l,{get when(){return t()},get children(){var e=qq(),n=e.firstChild;return y(n,()=>o()?.text),s(()=>b(e,`data-zone`,t())),e}}),null),s(n=>{var r=`pane-drop${e.class?` ${e.class}`:``}`,i=e.style,a=t(),s=o()?.refused?``:void 0;return r!==n.e&&k(c,n.e=r),n.t=h(c,i,n.t),a!==n.a&&b(c,`data-zone`,n.a=a),s!==n.o&&b(c,`data-refused`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}var eJ=e=>{if(rn(e)!==void 0)return`Artifact`;let t=_u(e.sessionID)?.session.title,n=typeof t==`string`&&t?t:`Session`;return e.sideChatID?`Side chat: ${n}`:n};function tJ(){let e=xn,t=()=>e().panes.length,i=()=>ez(e().split,t()),o=n=>{let r=tz(e().split,t(),n);return{"grid-column":`${r.col+1} / span ${r.colSpan}`,"grid-row":`${r.row+1}`}};return(()=>{var c=Xq(),u=c.firstChild,d=u.firstChild,f=d.nextSibling;return y(d,(()=>{var e=r(()=>!!Kp()?.label);return()=>e()?`Open “${Kp().label}” in a pane`:`Open in a pane`})()),y(u,n(l,{get when(){return t()},get fallback(){return n($q,{class:`pane-dock-empty`,label:`No panes open: drop here`})},get children(){var t=Yq();return y(t,n(m,{get each(){return e().panes},children:(e,t)=>n($q,{get index(){return t()},get label(){return eJ(e)},class:`pane-dock-pane`,get style(){return o(t())}})})),s(e=>{var n=`repeat(${i().cols}, 1fr)`,r=`repeat(${i().rows}, 1fr)`;return n!==e.e&&a(t,`grid-template-columns`,e.e=n),r!==e.t&&a(t,`grid-template-rows`,e.t=r),e},{e:void 0,t:void 0}),t}}),f),c})()}var nJ=I(`<div role=separator tabindex=0>`);function rJ(e){let[t,n]=u(!1),r=[],i=0,a=0,o,c=()=>QR[e.axis],l=t=>e.axis===`cols`?t.clientX:t.clientY,d=e=>Math.round(e*100),f=()=>{let t=e.sizes(),n=(t[e.index]??0)+(t[e.index+1]??0),r=Math.min(c()/Math.max(1,e.total()),n/2);return{min:d(r),max:d(n-r)}},p=()=>{a&&cancelAnimationFrame(a),a=0,n(!1),document.documentElement.classList.remove(`resizing`,`resizing-rows`)},m=(t,n)=>{t.hasPointerCapture(n)&&t.releasePointerCapture(n);let r=o;o=void 0,p(),r&&e.onChange(r,!0)};return M(p),(()=>{var u=nJ();return u.$$keydown=t=>{let n=iz(e.sizes(),e.index,t.key,t.shiftKey,e.total(),c(),e.axis);n&&(t.preventDefault(),e.onChange(n,!0))},u.$$dblclick=()=>e.onChange(nz(e.sizes().length),!0),u.addEventListener(`pointercancel`,e=>t()&&m(e.currentTarget,e.pointerId)),u.$$pointerup=e=>t()&&m(e.currentTarget,e.pointerId),u.$$pointermove=n=>{t()&&(o=rz(r,e.index,l(n)-i,e.total(),c()),a||=requestAnimationFrame(()=>{a=0,o&&e.onChange(o,!1)}))},u.$$pointerdown=t=>{t.button===0&&(t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),r=e.sizes(),i=l(t),n(!0),document.documentElement.classList.add(e.axis===`cols`?`resizing`:`resizing-rows`))},s(n=>{var r=`panel-handle pane-handle${t()?` dragging`:``}`,i=e.axis,a=e.axis===`cols`?`vertical`:`horizontal`,o=`Resize ${e.axis===`cols`?`columns`:`rows`} ${e.index+1} and ${e.index+2}`,s=d(e.sizes()[e.index]??0),c=f().min,l=f().max,p=e.style;return r!==n.e&&k(u,n.e=r),i!==n.t&&b(u,`data-axis`,n.t=i),a!==n.a&&b(u,`aria-orientation`,n.a=a),o!==n.o&&b(u,`aria-label`,n.o=o),s!==n.i&&b(u,`aria-valuenow`,n.i=s),c!==n.n&&b(u,`aria-valuemin`,n.n=c),l!==n.s&&b(u,`aria-valuemax`,n.s=l),n.h=h(u,p,n.h),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),u})()}z([`pointerdown`,`pointermove`,`pointerup`,`dblclick`,`keydown`]);var iJ=I(`<span role=status>Send this to the main session? It is queued and arrives after its current turn; nothing is interrupted.`),aJ=I(`<button type=submit class="btn small primary">Send`),oJ=I(`<button type=button class="btn small">Back`),sJ=I(`<form class=sidechat-send><label class=muted>Message for </label><textarea rows=3></textarea><div class=sidechat-row>`),cJ=I(`<div class=sidechat-bar role=group aria-label="Side chat"><div class=sidechat-row><strong>Side chat</strong><span class=muted>from </span><span class=sidechat-tools><button type=button class="btn small">Context</button><button type=button class="btn small">Refresh</button><button type=button class="btn small">Send to main…`),lJ=I(`<p class="muted sidechat-note">`),uJ=I(`<span role=status>`),dJ=I(`<ol class=sidechat-context aria-label="Copied context">`),fJ=I(`<li><span class=muted></span><div class=sidechat-context-text>`),pJ=I(`<p class="muted sidechat-problem"role=alert>`),mJ=I(`<button type=submit class="btn small">Review`),hJ=I(`<button type=button class=btn>Close pane`),gJ=I(`<div class=empty><p class=display>Side chat</p><p class=muted role=status>`),_J=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`the main session`};function vJ(e){let[t,i]=u(),[a,o]=u(),[c,d]=u(!1),[f,p]=u(!1),[h,g]=u(!1),[_,v]=u(!1),[x,S]=u(``),[C,w]=u(Date.now()),T,E=0,D=!0,O=e=>{i(e),w(Date.now()),clearTimeout(T),Wm(e).kind===`launching`?T=setTimeout(k,$m(E++)):E=0};async function k(){try{let t=await G(Qm.one(e.sideChatID));if(!D)return;let n=Um(t.sideChat);if(!n)return o(`The hub answered a side chat this console can't read.`);o(void 0),O(n)}catch(e){if(!D)return;o(e instanceof W&&e.status===404?`This side chat is gone, or it isn't yours.`:U(e))}}fe(k),M(()=>{D=!1,clearTimeout(T)});async function A(){let e=t();if(e&&!c()){d(!0);try{let t=await(await V(Qm.refresh(e),{method:`POST`,json:{expectedRevision:e.revision}})).json(),n=Um(t.sideChat);n&&O(n),q(qm(t.delivery))}catch(e){e instanceof W&&e.code===`conflict`?(q(`The side chat changed meanwhile. It was reloaded; refresh again.`,`warn`),await k()):q(`Couldn't refresh: ${U(e)}`,`err`)}finally{d(!1)}}}async function j(){let e=t();if(!(!e||c()||Ym(x()))){d(!0);try{await V(Qm.send(e),{method:`POST`,json:{text:x(),confirmed:!0}}),q(`Sent to the main session. It arrives after its current turn.`),S(``),v(!1),g(!1)}catch(e){q(`Couldn't send: ${U(e)}`,`err`)}finally{d(!1)}}}let N=()=>{let e=t();return e?Wm(e):void 0},ee=()=>{let e=N();return e?.kind===`ready`?e.sessionID:void 0},P=()=>{let e=t();return e?Km(e,C()):void 0};return[(()=>{var i=cJ(),a=i.firstChild.firstChild.nextSibling;a.firstChild;var o=a.nextSibling,u=o.firstChild,d=u.nextSibling,C=d.nextSibling;return y(a,()=>_J(t()?.sourceSessionID??``),null),u.$$click=()=>p(!f()),d.$$click=A,C.$$click=()=>(g(!h()),v(!1)),y(o,()=>e.paneTools,null),y(o,n(l,{get when(){return!e.paneTools},get children(){return n(F,{icon:`close`,class:`small`,label:`Close pane`,title:`Close pane (the side chat keeps running)`,onClick:()=>e.onClose()})}}),null),y(i,n(l,{get when(){return P()},children:e=>(()=>{var t=lJ();return y(t,()=>e().summary,null),y(t,n(l,{get when(){return e().stale},children:e=>[` · `,(()=>{var t=uJ();return y(t,e),t})()]}),null),t})()}),null),y(i,n(l,{get when(){return r(()=>!!f())()&&t()},children:e=>(()=>{var t=dJ();return y(t,n(m,{get each(){return e().snapshot.items},children:e=>(()=>{var t=fJ(),n=t.firstChild,r=n.nextSibling;return y(n,()=>e.role,null),y(n,()=>e.changed?` · changed`:``,null),y(n,()=>e.stale?` · no longer in the main session (earlier copy)`:``,null),y(n,()=>e.clipped?` · shortened`:``,null),y(r,()=>e.text),t})()})),t})()}),null),y(i,n(l,{get when(){return h()},get children(){var i=sJ(),a=i.firstChild;a.firstChild;var o=a.nextSibling,u=o.nextSibling;return i.addEventListener(`submit`,e=>{e.preventDefault(),_()?j():Ym(x())||v(!0)}),y(a,()=>_J(t()?.sourceSessionID??``),null),o.$$input=e=>S(e.currentTarget.value),y(i,n(l,{get when(){return r(()=>!!x())()&&Ym(x())},children:e=>(()=>{var t=pJ();return y(t,e),t})()}),u),y(u,n(l,{get when(){return _()},get fallback(){return(()=>{var e=mJ();return s(()=>e.disabled=!!Ym(x())),e})()},get children(){return[iJ(),(()=>{var e=aJ();return s(()=>e.disabled=c()),e})(),(()=>{var e=oJ();return e.$$click=()=>v(!1),s(()=>e.disabled=c()),e})()]}})),s(t=>{var n=`sidechat-send-${e.sideChatID}`,r=`sidechat-send-${e.sideChatID}`,i=_()||c();return n!==t.e&&b(a,`for`,t.e=n),r!==t.t&&b(o,`id`,t.t=r),i!==t.a&&(o.disabled=t.a=i),t},{e:void 0,t:void 0,a:void 0}),s(()=>o.value=x()),i}}),null),s(e=>{var n=f(),r=!t(),i=!t()||c(),a=h(),o=!t();return n!==e.e&&b(u,`aria-expanded`,e.e=n),r!==e.t&&(u.disabled=e.t=r),i!==e.a&&(d.disabled=e.a=i),a!==e.o&&b(C,`aria-expanded`,e.o=a),o!==e.i&&(C.disabled=e.i=o),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})(),n(l,{get when(){return ee()},keyed:!0,get fallback(){return(()=>{var t=gJ(),r=t.firstChild.nextSibling;return y(r,()=>a()??(N()&&N().kind!==`ready`?N().text:`Loading…`)),y(t,n(l,{get when(){return a()},get children(){var t=hJ();return t.$$click=()=>e.onClose(),t}}),null),t})()},children:t=>n(Wq,{id:t,get visible(){return e.visible},get focused(){return e.focused},get onGone(){return e.onGone},get rail(){return e.rail}})})]}z([`click`,`input`]);var yJ=()=>{try{return globalThis.localStorage}catch{return}},[bJ,xJ]=u(cz(yJ())),[SJ,CJ]=u();function wJ(e,t){let n=uz(bJ(),e,t),r=SJ();if(!r)return n;let[i,a,o]=r.key.split(`:`);return i===e&&Number(a)===t?{...n,[o]:r.sizes}:n}function TJ(e,t,n,r,i=!0){if(!i)return void CJ({key:`${e}:${t}:${n}`,sizes:r});CJ(void 0),xJ(i=>lz(yJ(),i,e,t,n,r))}var EJ=I(`<span class=pane-tools role=group aria-label=Pane><span class=pane-grip draggable=true title="Drag onto another pane to move this one"aria-hidden=true>`),DJ=I(`<div class="cmp-empty pane-empty-drop"><p>No panes are open on this device.</p><p><a href=/>All sessions</a> · <a href=/artifacts>Artifacts</a></p><p class=muted>Drag a session or an artifact here to open it.`),OJ=I(`<div class=pane-bar role=toolbar aria-label="Split layout"><span class=seg role=group aria-label=Layout></span><span class="pane-count muted"> of <!> panes · <kbd>F6</kbd> switches`),kJ=I(`<div class=pane-tabs role=tablist aria-label="Open sessions">`),AJ=I(`<div><div class=pane-grid>`),jJ=I(`<button type=button>`),MJ=I(`<div role=presentation><button type=button role=tab>`),NJ=I(`<section class=pane tabindex=-1>`),PJ=I(`<p class="muted cmp-empty">Loading the artifact…`),FJ=E(()=>Hn(()=>import(`./ArtifactPane-B9weO8L6.js`).then(e=>({default:e.ArtifactPane})),__vite__mapDeps([7,1,8,9,10,11,12,13]))),IJ=6,LJ=[{split:`vertical`,label:`Side by side`,icon:`split`},{split:`horizontal`,label:`Stacked`,icon:`stack`},{split:`grid`,label:`Grid`,icon:`grid`}],RJ=e=>{let t=rn(e);return t===void 0?e.sideChatID?`${e.sessionID}#${e.sideChatID}`:e.sessionID:`!${t}`},zJ=e=>e.startsWith(`!`)?e.slice(1):void 0,BJ=e=>e.split(`#`)[0],VJ=e=>encodeURIComponent(e).replace(/%/g,`_`),HJ=e=>{let t=_u(e)?.session.title;return typeof t==`string`&&t?t:`Session`},UJ=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]);function WJ(r){let[i,a]=u(!1),o=C(()=>({at:Pt(),id:r.routed}),void 0,{equals:(e,t)=>e.at===t.at&&e.id===t.id});S(e(o,({id:e})=>{if(e===void 0)return void a(!1);let t=!0;En(n=>{let r=hn(n,{sessionID:e});return t=r.outcome!==`invalid`,r.layout}),a(!t)})),S(()=>{let e=ou();e.size&&En(t=>ic(t,e))});let c=xn,d=()=>c().panes.length,p=C(()=>c().panes.map(RJ),[],{equals:UJ}),g=e=>p().indexOf(e),_=()=>p()[c().focused],v=()=>c().split,w=()=>Z()&&d()>1,[T,E]=u({}),D=e=>{let t=zJ(e);return t===void 0?e.includes(`#`)?`Side chat: ${HJ(BJ(e))}`:HJ(BJ(e)):`Artifact: ${T()[t]??`…`}`},O=()=>!Z()&&d()>1,A=()=>!!Kp()&&!Z();x(e(()=>c().panes[c().focused]?.sideChatID?void 0:c().panes[c().focused]?.sessionID,e=>{e&&!i()&&e!==ae(()=>r.routed)&&Vt(Ot(e),{replace:!0})}));let j=()=>requestAnimationFrame(()=>{let e=document.querySelector(`section.pane[data-focused]`);e&&!e.contains(document.activeElement)&&(e.querySelector(`textarea:not([disabled])`)??e).focus()}),N=e=>En(t=>ln(t,e)),ee=e=>{let t=new Map;for(let e of document.querySelectorAll(`section.pane .scroller`))t.set(e,e.scrollTop);e(),requestAnimationFrame(()=>t.forEach((e,t)=>t.scrollTop=e))},P=e=>{let t=c().focused;ee(()=>En(n=>pn(n,t,t+e))),j()},te=e=>{e<0||e>=d()||(En(t=>fn(t,e)),d()||Vt(`/`,{replace:!0}))},I=e=>{q(d()>1?`That session is gone (deleted, or its machine was revoked). Its pane was closed.`:`That session is gone (deleted, or its machine was revoked).`,`warn`),te(g(e))};fe(()=>{let e=e=>{if(i()||e.defaultPrevented||d()<2||e.getModifierState?.(`AltGraph`))return;let t=XR(e);if(t){if(e.preventDefault(),t.type===`cycle`)En(e=>mn(e,t.step));else if(t.type===`focus`)N(Math.min(t.index,d()-1));else if(t.type===`move`)return P(t.step);else return te(c().focused);w()||j()}};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e))});let ne,[re,ie]=u({w:0,h:0});fe(()=>{if(!ne||typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>ne&&ie({w:ne.clientWidth,h:ne.clientHeight}));e.observe(ne),M(()=>e.disconnect())});let oe=()=>O()?ez(v(),d()):{cols:1,rows:1},se=()=>wJ(v(),d()),ce=e=>(e===`cols`?re().w:re().h)-(oe()[e]-1)*IJ,le=(e,t)=>t>1?e.map(e=>`minmax(0, ${e}fr)`).join(` ${IJ}px `):`minmax(0, 1fr)`,ue=()=>({"grid-template-columns":le(se().cols,oe().cols),"grid-template-rows":le(se().rows,oe().rows)}),de=e=>{if(!O())return{"grid-column":`1`,"grid-row":`1`};let t=tz(v(),d(),e);return{"grid-column":`${2*t.col+1} / span ${2*t.colSpan-1}`,"grid-row":`${2*t.row+1}`}},R=e=>Array.from({length:Math.max(0,e)},(e,t)=>t),pe=e=>(t,n)=>TJ(v(),d(),e,t,n),me=e=>{let t=d(),n=c().focused,r=e.key===`ArrowRight`?(n+1)%t:e.key===`ArrowLeft`?(n-1+t)%t:e.key===`Home`?0:e.key===`End`?t-1:-1;r<0||!e.target.matches(`[role="tab"]`)||(e.preventDefault(),N(r),requestAnimationFrame(()=>document.querySelector(`.pane-tabs [role="tab"][aria-selected="true"]`)?.focus()))},z=e=>{if(e.key!==`ArrowRight`&&e.key!==`ArrowLeft`)return;let t=Array.from(e.currentTarget.querySelectorAll(`button`)),n=t.indexOf(document.activeElement);n<0||(e.preventDefault(),t[(n+(e.key===`ArrowRight`?1:t.length-1))%t.length].focus())};function he(e){let t=()=>g(e.key),r=()=>v()===`horizontal`;return n(l,{get when(){return O()},get children(){var i=EJ(),a=i.firstChild;return B(a,`dragend`,Yp),a.addEventListener(`dragstart`,n=>{let r=c().panes[t()];(!r||!Jp(n,{target:r,label:D(e.key),move:!0}))&&n.preventDefault()}),y(a,n(L,{name:`grip`})),y(i,n(F,{icon:`chevron`,class:`small flip`,get label(){return r()?`Move pane up`:`Move pane left`},get"aria-keyshortcuts"(){return qR.moveEarlier},get disabled(){return t()<=0},onClick:()=>(N(t()),P(-1))}),null),y(i,n(F,{icon:`chevron`,class:`small`,get label(){return r()?`Move pane down`:`Move pane right`},get"aria-keyshortcuts"(){return qR.moveLater},get disabled(){return t()>=d()-1},onClick:()=>(N(t()),P(1))}),null),y(i,n(F,{icon:`close`,class:`small`,label:`Close pane`,title:`Close pane (the session keeps running)`,get"aria-keyshortcuts"(){return qR.close},onClick:()=>te(t())}),null),i}})}return n(l,{get when(){return!i()},get fallback(){return n(l,{get when(){return r.routed},keyed:!0,children:e=>n(Wq,{id:e})})},get children(){return[n(l,{get when(){return!d()},get children(){var e=DJ();return e.firstChild.nextSibling.nextSibling,y(e,n(l,{get when(){return A()},get children(){return n($q,{label:`Open in a pane`})}}),null),e}}),(()=>{var e=AJ(),r=e.firstChild;y(e,n(l,{get when(){return O()},get children(){var e=OJ(),t=e.firstChild,r=t.nextSibling,i=r.firstChild,a=i.nextSibling;return a.nextSibling,e.$$keydown=z,y(t,n(m,{each:LJ,children:e=>(()=>{var t=jJ();return t.$$click=()=>En(t=>an(t,e.split)),y(t,n(L,{get name(){return e.icon}})),s(n=>{var r=e.label,i=e.label,a=v()===e.split;return r!==n.e&&b(t,`aria-label`,n.e=r),i!==n.t&&b(t,`title`,n.t=i),a!==n.a&&b(t,`aria-pressed`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})),y(r,d,i),y(r,gn,a),e}}),r),y(e,n(l,{get when(){return w()},get children(){var e=kJ();return e.$$keydown=me,y(e,n(m,{get each(){return p()},children:e=>{let t=()=>_()===e,r=()=>D(e);return(()=>{var i=MJ(),a=i.firstChild;return a.$$click=()=>N(g(e)),y(a,r),y(i,n(F,{icon:`close`,class:`small`,get label(){return`Close ${r()}`},get tabindex(){return t()?0:-1},onClick:()=>te(g(e))}),null),s(n=>{var r=`pane-tab${t()?` selected`:``}`,o=`pane-tab-${VJ(e)}`,s=`pane-${VJ(e)}`,c=t(),l=t()?0:-1;return r!==n.e&&k(i,n.e=r),o!==n.t&&b(a,`id`,n.t=o),s!==n.a&&b(a,`aria-controls`,n.a=s),c!==n.o&&b(a,`aria-selected`,n.o=c),l!==n.i&&b(a,`tabindex`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})()}})),e}}),r);var i=ne;return typeof i==`function`?t(i,r):ne=r,y(r,n(m,{get each(){return p()},children:e=>{let t=BJ(e),r=()=>g(e),i=()=>_()===e,a=()=>!w()||i();return(()=>{var o=NJ();return o.$$pointerdown=()=>N(g(e)),o.$$focusin=()=>N(g(e)),y(o,n(l,{get when(){return zJ(e)===void 0},get fallback(){return n(f,{get fallback(){return PJ()},get children(){return n(FJ,{get artifactID(){return zJ(e)},get paneTools(){return n(he,{key:e})},onTitle:t=>E(n=>({...n,[zJ(e)]:t}))})}})},get children(){return n(l,{get when(){return!e.includes(`#`)},get fallback(){return n(vJ,{get sideChatID(){return e.slice(e.indexOf(`#`)+1)},visible:a,focused:i,onGone:()=>I(e),onClose:()=>te(g(e)),rail:()=>!O()||i(),get paneTools(){return n(he,{key:e})}})},get children(){return n(Wq,{id:t,visible:a,focused:i,onGone:()=>I(e),rail:()=>!O()||i(),get paneTools(){return n(he,{key:e})}})}})}})),s(t=>{var n=`pane-${VJ(e)}`,s=w()?`tabpanel`:`region`,c=w()?`pane-tab-${VJ(e)}`:void 0,l=w()?void 0:`Pane ${r()+1} of ${d()}: ${D(e)}`,u=i()?``:void 0,f=!a(),p=de(r());return n!==t.e&&b(o,`id`,t.e=n),s!==t.t&&b(o,`role`,t.t=s),c!==t.a&&b(o,`aria-labelledby`,t.a=c),l!==t.o&&b(o,`aria-label`,t.o=l),u!==t.i&&b(o,`data-focused`,t.i=u),f!==t.n&&(o.hidden=t.n=f),t.s=h(o,p,t.s),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),o})()}}),null),y(r,n(l,{get when(){return A()},get children(){return n(m,{get each(){return p()},children:e=>n($q,{get index(){return g(e)},get style(){return de(g(e))}})})}}),null),y(r,n(m,{get each(){return R(oe().cols-1)},children:e=>n(rJ,{axis:`cols`,index:e,sizes:()=>se().cols,total:()=>ce(`cols`),get onChange(){return pe(`cols`)},get style(){return{"grid-column":`${2*e+2}`,"grid-row":v()===`grid`&&d()%2==1?`1`:`1 / -1`}}})}),null),y(r,n(m,{get each(){return R(oe().rows-1)},children:e=>n(rJ,{axis:`rows`,index:e,sizes:()=>se().rows,total:()=>ce(`rows`),get onChange(){return pe(`rows`)},style:{"grid-row":`${2*e+2}`,"grid-column":`1 / -1`}})}),null),s(t=>{var n=`workspace${O()?` ws-split`:``}${w()?` ws-tabs`:``}`,i=v(),a=ue();return n!==t.e&&k(e,t.e=n),i!==t.t&&b(e,`data-split`,t.t=i),t.a=h(r,a,t.a),t},{e:void 0,t:void 0,a:void 0}),e})()]}})}z([`keydown`,`click`,`focusin`,`pointerdown`]);var GJ={artifacts:E(()=>Hn(()=>import(`./Library-rv5DGtrm.js`),__vite__mapDeps([14,1,9,10,11,3,12,15]))),teams:E(()=>Hn(()=>import(`./TeamsPage-D_17MkvN.js`),__vite__mapDeps([16,1,9,17,18,19]))),watchtower:E(()=>Hn(()=>import(`./Watchtower-DlrNOJ7X.js`).then(e=>e.t),__vite__mapDeps([20,1,9,10,11,3,18,17,19,21]))),profiles:E(()=>Hn(()=>import(`./ProfilesDestination-DUuQ9jmd.js`),__vite__mapDeps([22,1,9,17])))},KJ=I(`<div class=feature-page><header class=topbar><h1 class=title></h1></header><div class=feature-scroll><div class=feature-body>`);function qJ(e){return(()=>{var t=KJ(),r=t.firstChild,i=r.firstChild,a=r.nextSibling.firstChild;return y(r,n(l,{get when(){return Z()},get children(){return n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp})}}),i),y(i,()=>e.title),y(r,()=>e.actions,null),y(a,()=>e.children),t})()}var JJ=I(`<p class=feature-note> isn't available yet. <a href=/>Back to All sessions`),YJ=I(`<p class=muted>Loading…`);function XJ(e){let t=C(()=>Ye.find(t=>t.id===e.id)),r=C(()=>{let e=t();return e&&Ve(e,{signedIn:!!X()})===`ok`?GJ[e.id]:void 0});return n(l,{get when(){return r()},get fallback(){return n(qJ,{get title(){return t()?.label??`Not found`},get children(){var e=JJ(),n=e.firstChild;return y(e,()=>t()?.label??`This page`,n),e}})},children:r=>n(f,{get fallback(){return n(qJ,{get title(){return t().label},get children(){return YJ()}})},get children(){return n(D,{get component(){return r()},get rest(){return e.rest}})}})})}var ZJ=I(`<span class="badge-pill armed-left"role=timer title="How long this stays armed for a spoken answer">`),QJ=I(`<p class="muted small armed-why">Why: `),$J=I(`<div class="card decision armed-decision"role=group aria-label="The Concierge asks you to confirm"><p class="blocker-head decision-head"><strong>Confirm</strong> <span class=muted>from </span></p><p class=armed-question></p><div class="row armed-options"></div><p class="muted small armed-hint">`),eY=I(`<button type=button>`);function tY(e){let t=()=>e.decision,[i,a]=u(!1),[o,c]=u(Date.now()),d=setInterval(()=>c(Date.now()),1e3);M(()=>clearInterval(d));let f=()=>{let e=ru()?.expiresAt;return e===void 0?``:Ze(e,o())},p=async e=>{a(!0);try{await Wb(t().id,e)}catch(e){q(U(e),`err`),a(!1)}};return(()=>{var e=$J(),a=e.firstChild,o=a.firstChild.nextSibling.nextSibling;o.firstChild;var c=a.nextSibling,u=c.nextSibling,d=u.nextSibling;return y(o,()=>ve(t(),Su,ou()),null),y(a,n(l,{get when(){return f()},get children(){var e=ZJ();return y(e,f),e}}),null),y(c,()=>Re(t(),Su,ou())),y(e,n(dg,{get decision(){return t()}}),u),y(e,n(l,{get when(){return r(()=>!!t().recommendation?.why)()&&t().recommendation.why!==fg(t())},get children(){var e=QJ();return e.firstChild,y(e,()=>t().recommendation.why,null),e}}),u),y(u,n(m,{get each(){return t().options},children:e=>(()=>{var t=eY();return t.$$click=()=>void p(e.id),y(t,()=>e.label),s(n=>{var r=`btn${e.safe||e.id===`always`?``:` primary`}`,a=i();return r!==n.e&&k(t,n.e=r),a!==n.t&&(t.disabled=n.t=a),n},{e:void 0,t:void 0}),t})()})),y(d,()=>Zs(!!zl()&&!zl().reason)),s(n=>{var r=t().id,i=t().id,a=Tt(t()),s=t().question;return r!==n.e&&b(e,`data-armed-decision`,n.e=r),i!==n.t&&b(e,`data-decision`,n.t=i),a!==n.a&&b(o,`title`,n.a=a),s!==n.o&&b(c,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()}z([`click`]);var nY=I(`<button type=button class="btn small"aria-label="Restart the Concierge"title="Restart the Concierge (a new session)">Restart`),rY=I(`<header class=concierge-head><div class="concierge-title grow"><h2 class=title>Concierge</h2><p class="small muted concierge-status"role=status aria-live=polite></p></div><a class=icon-btn href=/settings/concierge aria-label="Concierge settings"title="Concierge settings">`),iY=I(`<p role=status data-concierge-notice>`),aY=I(`<div class=concierge-asked aria-label="Decisions from the Concierge"role=group>`),oY=I(`<div class="card decision closed-decision"role=group tabindex=-1><p class="blocker-head decision-head"><strong>Decision</strong> <span class=badge-pill></span><span class=grow></span></p><p class="blocker-text decision-question"></p><p class="muted small"data-closed-note>`),sY=I(`<div class=concierge-idle><form class=concierge-composer><textarea rows=1 aria-label="Ask the Concierge"placeholder="The Concierge is not running"disabled>`),cY=I(`<aside class="concierge-panel side"aria-label=Concierge tabindex=-1>`),lY=I(`<section class="concierge-panel page"aria-label=Concierge tabindex=-1>`),uY=I(`<p class="working-line muted small"role=status><span class="spinner small"></span> Working…`),dY=I(`<div class=concierge-scroll>`),fY=I(`<p class="note err"role=alert>Voice: `),pY=I(`<button type=button>`),mY=I(`<div class=concierge-dock><form class=concierge-composer><textarea rows=1 aria-label="Ask the Concierge"></textarea><button type=submit class="btn primary send"aria-label="Send to the Concierge"title="Send (Enter)">`),hY=I(`<p class="muted small pad">Loading…`),gY=I(`<p class="muted small pad">`),_Y=I(`<p>`),vY=3e4,yY=80,bY=/^#decision-(dec_[A-Za-z0-9]{1,64})$/,xY=new Set([`starting`,`running`,`waiting_machine`,`backoff`,`failed`]),SY=()=>!!zl()&&!zl().reason;function CY(i){let a=Xl,o=()=>(Y.machines??[]).map(e=>({id:e.id,name:e.name,online:e.online===!0})),c=()=>o().find(e=>e.id===a()?.machineID),d=()=>$s(a(),c()),f=()=>a()?.state===`running`&&!!a()?.sessionID&&c()?.online!==!1,p=C(()=>Hb()),m=C(()=>cc(Ul(),a(),p())),[h,g]=u(!1),[_,v]=u(),S,w=wR(),T=()=>St(`/`);async function E(){g(!0);try{await V(`/api/agent/concierge/restart`,{method:`POST`,json:{}}),q(`Restarting the Concierge`)}catch(e){q(`Could not restart: ${U(e)}`,`err`)}finally{g(!1)}}fe(()=>{if(i.mode!==`side`)return;let e=e=>{e.key!==`Escape`||e.defaultPrevented||ee(S)||document.querySelector(`.menu-pop, [role='menu']`)||(e.preventDefault(),T())};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e)),requestAnimationFrame(()=>S&&!S.contains(document.activeElement)&&S.focus())});function D(e){let t=()=>requestAnimationFrame(()=>{let t=S?.querySelector(`[data-decision="${e}"]`);t?(t.scrollIntoView({block:`nearest`,behavior:`smooth`}),t.classList.add(`flash`),setTimeout(()=>t.classList.remove(`flash`),2500),t.focus({preventScroll:!0})):q(`That Decision is no longer available`)});if(S?.querySelector(`[data-decision="${e}"]`))return t();ld(e).then(e=>{e&&e.state!==`open`&&v(e),t()})}x(e(Pt,e=>{let t=bY.exec(e.hash)?.[1];t&&(Vt(`/concierge`,{replace:!0}),D(t))})),fe(()=>{let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`),n=t&&bY.exec(new URL(t.getAttribute(`href`)??``,location.origin).hash)?.[1];n&&t.getAttribute(`href`).startsWith(`/concierge#`)&&(e.preventDefault(),D(n))};S?.addEventListener(`click`,e),M(()=>S?.removeEventListener(`click`,e))}),M(()=>{w?.isConnected&&w.focus()});let O=()=>[(()=>{var e=rY(),t=e.firstChild,c=t.firstChild.nextSibling,u=t.nextSibling;return y(e,n(l,{get when(){return i.mode===`page`},get children(){return n(F,{icon:`back`,label:`Back`,onClick:T})}}),t),y(e,n(L,{name:`spark`,class:`concierge-mark`}),t),y(c,()=>cs(a(),o(),N()),null),y(c,n(l,{get when(){return a()?.sessionID},get children(){return n(rL,{get sessionID(){return a().sessionID}})}}),null),y(e,n(l,{get when(){return r(()=>!!a())()&&xY.has(a().state)},get children(){var e=nY();return e.$$click=()=>void E(),s(()=>e.disabled=h()),e}}),u),y(u,n(L,{name:`settings`})),y(e,n(l,{get when(){return i.mode===`side`},get children(){return n(F,{icon:`close`,label:`Close the Concierge (Esc)`,onClick:T})}}),null),s(()=>b(c,`data-concierge-panel-status`,a()?.state??`none`)),e})(),n(l,{get when(){return d()},get children(){var e=iY();return y(e,d),s(()=>k(e,`concierge-notice${a()?.state===`failed`?` err`:``}`)),e}}),n(l,{get when(){return p()},children:e=>n(tY,{get decision(){return e()}})}),n(l,{get when(){return m().length},get children(){var e=aY();return y(e,n(Og,{get decisions(){return m()}})),e}}),n(l,{get when(){return _()},keyed:!0,children:e=>(()=>{var t=oY(),r=t.firstChild,i=r.firstChild.nextSibling.nextSibling;i.nextSibling;var a=r.nextSibling,o=a.nextSibling;return y(i,()=>e.state),y(r,n(F,{icon:`close`,label:`Close this Decision`,onClick:()=>v(void 0)}),null),y(a,()=>Re(e,Su,ou())),y(t,n(dg,{decision:e}),o),y(o,()=>Ho(e)),s(n=>{var r=`Decision (${e.state}): ${e.question}`,i=e.id,o=e.id,s=e.question;return r!==n.e&&b(t,`aria-label`,n.e=r),i!==n.t&&b(t,`data-decision`,n.t=i),o!==n.a&&b(t,`data-closed-decision`,n.a=o),s!==n.o&&b(a,`title`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}),n(l,{get when(){return r(()=>!!f())()&&a()?.sessionID},keyed:!0,get fallback(){return(()=>{var e=sY();return e.firstChild.addEventListener(`submit`,e=>e.preventDefault()),e})()},children:e=>n(wY,{id:e,get autofocus(){return i.mode===`side`}})})];return n(l,{get when(){return i.mode===`side`},get fallback(){return(()=>{var e=lY(),n=S;return typeof n==`function`?t(n,e):S=e,y(e,O),e})()},get children(){var e=cY(),n=S;return typeof n==`function`?t(n,e):S=e,y(e,O),e}})}function wY(r){let i=r.id,a=()=>_u(i),o=()=>a()?.session.status,c=()=>bo(o()),d=new it,[f,p]=u(0),h=()=>p(e=>e+1),[g,_]=u(!1),[v,S]=u({}),[w,T]=u([]),E=0,D=(e,t=`sys`)=>T(n=>[...n.slice(-10),{key:`n${++E}`,text:e,kind:t}]),O=C(()=>(f(),d.status(o(),i),Jz(d.rows()))),A=C(()=>EY(O())),[j,N]=Or({}),ee,P=!0,F=()=>requestAnimationFrame(()=>ee&&(ee.scrollTop=ee.scrollHeight));x(e(A,()=>P&&F())),x(()=>{for(let e of Ko(O(),ql()))ld(e)});let te=e=>new URLSearchParams(Object.entries(e).flatMap(([e,t])=>t===void 0?[]:[[e,String(t)]])).toString(),I=new gz(d,e=>G(`${H(i)}/timeline?${te(e)}`),{limit:yY,onChange:h});async function ne(){try{let{messages:e}=await G(`${H(i)}/messages?limit=200`);for(let t of e??[]){let e=nt(i,t);e&&d.hubMessage(e)}h()}catch{}}async function re(){try{await I.first()}catch(e){D(`Could not load the conversation: ${U(e)}`,`err`)}_(!0),await ne(),F()}let ie,ae=c(),oe=hu(e=>{let t=typeof e.rootID==`string`?e.rootID:e.sessionID;if(e.type===`resync`)I.resync().catch(()=>{}).then(ne);else if(t!==i)return;else if(e.type===`activity`&&e.item&&e.item.kind!==`thinking`)d.activity(e.sessionID,e.item);else if(e.type===`reasoning`&&typeof e.messageID==`string`&&typeof e.delta==`string`)d.appendReasoning({sessionID:e.sessionID,messageID:e.messageID,delta:e.delta});else if(e.type===`delta`&&typeof e.messageID==`string`&&typeof e.text==`string`)d.appendText({sessionID:e.sessionID,messageID:e.messageID,...Number.isInteger(e.ordinal)?{ordinal:e.ordinal}:{},delta:e.text});else if(e.type===`message`){let t=nt(i,e.message);t&&d.hubMessage(t)}else if(e.type===`turn`&&ie){let{sentAt:t}=ie;ie=void 0,xe(e,t)}else if(e.type===`status`){let t=bo(e.sessions),n=ae&&!t;if(ae=t,t)return;for(let e of d.rows())e.live&&d.upsert({key:e.key,live:!1});d.endReasoning(void 0),n&&I.resync().catch(()=>{}).then(ne)}else return;h()}),se=()=>document.visibilityState===`visible`,ce=(e,t=!1)=>(Vb(e),V(`${H(i)}/presence`,{method:`POST`,json:{visible:e},keepalive:t}).catch(()=>{})),le=()=>void ce(se(),!se()),ue=()=>void ce(!1,!0),de,R=rx,pe=()=>R().phase!==`off`&&R().sessionID===i,me=()=>R().error?.sessionID===i?R().error.message:void 0;M(qb.attach(i,{user:e=>{let t=`voice:${++E}`;return d.upsert({key:t,kind:`user`,text:e,at:Date.now()}),S(e=>({...e,[t]:`pending`})),h(),t},tick:(e,t)=>S(n=>({...n,[e]:t})),agent:e=>{let t=e.messageID?d.liveTextKey(e.messageID):`say:${++E}`,{mode:n,text:r}=$v(d.get(t)?.text??``,e.text);n!==`keep`&&(d.upsert({key:t,messageID:e.messageID,kind:`assistant`,text:r,at:d.get(t)?.at??Date.now()}),h())},note:(e,t)=>D(e,t??`sys`)}));async function z(){pe()||(Ty(),ox.cancel()),await qb.toggle(i),qb.isOn(i)&&qb.state.phase===`on`&&D(`Voice on. Talk to the Concierge; say “yes” or “no” to answer the Decision it is asking about.`)}let[B,ge]=u(``),[_e,ve]=u(!1),ye,be=()=>{ye&&(ye.style.height=`auto`,ye.style.height=`${Math.min(ye.scrollHeight,200)}px`)};function xe(e,t){let n=e.reply?.trim(),r=d.rows().some(e=>e.kind===`assistant`&&(e.at??0)>=t&&e.text?.trim()===n);e.reply&&!r&&d.upsert({key:`reply:${++E}`,kind:`assistant`,text:e.reply,at:Date.now()});let i=M_(e);i&&D(i.text,i.kind),h()}async function Se(){let e=B().trim();if(!e||_e())return;let t=Hb(),n=Ws(e,t);if(n.kind===`answer`){ve(!0);try{await Wb(n.decisionID,n.option,`text`),ge(``),d.upsert({key:`answered:${++E}`,kind:`user`,text:e,at:Date.now(),note:Ks(t,n.option)}),h(),P=!0,F()}catch(e){q(`Not answered: ${U(e)}${e instanceof W&&e.status===403?`. Tap an option on the card.`:``}`,`err`)}finally{ve(!1)}return}if(ge(``),queueMicrotask(be),pe()){qb.sendTyped(i,e);return}let r=`local:${++E}`,a=Date.now();he(()=>{d.upsert({key:r,kind:`user`,text:e,at:a}),S(e=>({...e,[r]:`pending`})),h()}),P=!0,F();try{let t=await V(`${H(i)}/turn`,{method:`POST`,json:{text:e},headers:{prefer:`respond-async`}}),n=await t.json().catch(()=>({})),o=j_(t.status,n);S(e=>({...e,[r]:o===`steered`?`queued`:`sent`})),o===`accepted`?ie={sentAt:a}:xe(n,a)}catch(t){S(e=>({...e,[r]:`failed`})),D(`Could not send: ${U(t)}`,`err`),B()||ge(e)}}return fe(()=>{re(),ce(se()),de=setInterval(()=>se()&&void ce(!0),vY),document.addEventListener(`visibilitychange`,le),window.addEventListener(`pagehide`,ue),r.autofocus&&requestAnimationFrame(()=>ye?.focus())}),M(()=>{oe(),clearInterval(de),document.removeEventListener(`visibilitychange`,le),window.removeEventListener(`pagehide`,ue),ue()}),[(()=>{var e=dY();e.addEventListener(`scroll`,e=>P=e.currentTarget.scrollHeight-e.currentTarget.scrollTop-e.currentTarget.clientHeight<80);var r=ee;return typeof r==`function`?t(r,e):ee=e,y(e,n(l,{get when(){return g()},get fallback(){return hY()},get children(){return n(l,{get when(){return A().length},get fallback(){return(()=>{var e=gY();return y(e,()=>Xs(SY())),e})()},get children(){return n(DW,{sessionID:i,get blocks(){return A()},get ticks(){return v()},expanded:j,onToggle:(e,t)=>N(e,t),onDetail:(e,t)=>{d.detail(e,t),h()}})}})}}),null),y(e,n(m,{get each(){return w()},children:e=>(()=>{var t=_Y();return y(t,()=>e.text),s(n=>{var r=`note ${e.kind}`,i=e.kind===`err`?`alert`:void 0;return r!==n.e&&k(t,n.e=r),i!==n.t&&b(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),y(e,n(l,{get when(){return c()},get children(){return uY()}}),null),e})(),(()=>{var e=mY(),r=e.firstChild,i=r.firstChild,a=i.nextSibling;y(e,n(l,{get when(){return pe()},get children(){return n(MB,{get state(){return R().voice},get level(){return R().level},get held(){return R().held},get ignored(){return R().ignored},get working(){return c()},model:`Concierge`,onMute:()=>qb.mute(),onEnd:()=>void qb.end(),onModel:()=>q(`The Concierge keeps its own model: change it in Settings → Concierge`),get notifyHint(){return tx()},onAllowNotifications:()=>void nx(),get timing(){return R().timing},get detector(){return R().detector},get turn(){return R().turn},get front(){return R().front}})}}),r),y(e,n(l,{get when(){return me()},get children(){var e=fY();return e.firstChild,y(e,me,null),e}}),r),r.addEventListener(`submit`,e=>{e.preventDefault(),Se()}),i.$$keydown=e=>{e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&!(Z()&&`ontouchstart`in window)&&(e.preventDefault(),Se())},i.$$input=e=>{ge(e.currentTarget.value),be()};var o=ye;return typeof o==`function`?t(o,i):ye=i,y(r,n(l,{get when(){return SY()||pe()},get children(){var e=pY();return e.$$click=()=>void z(),y(e,n(L,{name:`wave`})),s(t=>{var n=`icon-btn concierge-voice${pe()?` on`:``}`,r=pe(),i=pe()?`Stop talking to the Concierge`:`Talk to the Concierge`,a=pe()?`End Voice with the Concierge`:`Talk to the Concierge (Voice)`;return n!==t.e&&k(e,t.e=n),r!==t.t&&b(e,`aria-pressed`,t.t=r),i!==t.a&&b(e,`aria-label`,t.a=i),a!==t.o&&b(e,`title`,t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),a),y(a,n(L,{name:`send`})),s(e=>{var t=pe()?`Voice is on: talk, or type here`:`Ask the Concierge…`,n=!B().trim()||_e();return t!==e.e&&b(i,`placeholder`,e.e=t),n!==e.t&&(a.disabled=e.t=n),e},{e:void 0,t:void 0}),s(()=>i.value=B()),e})()]}var TY={unknown:`link`};function EY(e){let t=vu,n=[...ql().values()].map(e=>({...e,question:Be(e.question,Su)})),r=[];for(let i of e)if(!(i.type===`message`&&i.primer)){if(i.type===`message`&&i.direction===`in`&&To(i.from)){let e=Mo(i.text,t);r.push(e?{...i,summary:e}:i)}else i.type===`message`&&i.text.includes(`dec_`)?r.push({...i,parts:Ro(i.text,n,TY)}):i.type===`assistant`&&i.text.includes(`dec_`)?r.push({...i,text:zo(i.text,n,TY)}):i.type===`tools`?r.push({...i,items:i.items.map(e=>typeof e.summary==`string`&&e.summary.includes(`ses_`)?{...e,summary:Vo(e.summary,t)}:e)}):r.push(i)}return r}z([`click`,`input`,`keydown`]);var DY=I(`<main class=entry><p></p><button type=button class=btn>Retry`),OY=I(`<main class=entry><p class=muted>Loading…`),kY=I(`<div class=drawer-backdrop>`),AY=I(`<div class=voice-strip>`),jY=I(`<div class=conn-banner role=status>Reconnecting to the hub…`),MY=I(`<div role=status aria-live=polite>`),NY=I(`<p class="muted cmp-empty"data-concierge-wait>Loading…`),PY=I(`<div><main class=main>`),FY=I(`<button type=button class="btn small">`),IY=I(`<div role=status aria-live=polite><span>`),LY=I(`<header class=topbar><span class="title display grow">Hub`),RY=I(`<div class=home-shell><div class=home-scroll>`),zY=()=>dt().name===`concierge`&&!Z(),BY=()=>{let e=WS();return e.name===`session`?ns(e.id,Xl(),nu(),Y.machines,Ql(),Ql()?[]:au()):void 0},VY=()=>{let e=WS();return BY()===`session`?e.id:void 0},HY=()=>pc(Sc(rx().phase===`off`,VY()),dt().name===`concierge`?Xl()?.sessionID:void 0);function UY(){Lu(()=>rx().phase!==`off`),x(()=>Ru(HY()));let[t,i]=u(``),[a,c]=u(!1),d=async()=>{i(``);try{if(!await Tu())return;Vu(HY()),pd(),Kf(),c(!0)}catch(e){i(`Cannot reach the hub: ${e.message}`)}};return x(e(()=>dt().name,e=>{e!==`pair`&&!a()&&d(),Z()&&Sp(!1)})),x(()=>{!X()&&a()&&dt().name!==`pair`&&c(!1)}),x(()=>{let e=dt();e.name===`session`&&ou().has(e.id)&&Vt(`/concierge`,{replace:!0})}),x(()=>ox.viewing(xc()??VY())),fe(()=>M(SA())),fe(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`b`&&(e.preventDefault(),Dp())};document.addEventListener(`keydown`,e),M(()=>document.removeEventListener(`keydown`,e))}),x(()=>Lp(zY())),x(()=>{let e=Rp(),t=document.documentElement.style;t.setProperty(`--side-w`,`${e.side}px`),t.setProperty(`--rail-w`,`${e.rail}px`),e.concierge&&t.setProperty(`--concierge-w`,`${e.concierge}px`)}),x(()=>{a()&&location.hash===`#speech`&&dt().name!==`settings`&&Vt(`/settings/voice#speech`,{replace:!0})}),[n(v,{get children(){return[n(o,{get when(){return r(()=>dt().name===`pair`)()&&dt()},children:e=>n(hf,{get next(){return e().next},get error(){return e().error}})}),n(o,{get when(){return t()},get children(){var e=DY(),n=e.firstChild,r=n.nextSibling;return y(n,t),r.$$click=()=>void d(),e}}),n(o,{get when(){return!a()},get children(){return OY()}}),n(o,{get when(){return r(()=>dt().name===`approve`)()&&dt()},children:e=>n(_f,{get code(){return e().code}})}),n(o,{get when(){return r(()=>dt().name===`consent`)()&&dt()},children:e=>n(yf,{get flow(){return e().flow}})}),n(o,{when:!0,get children(){var e=PY(),t=e.firstChild;return y(e,n(l,{get when(){return!Z()||xp()},get children(){return[n(l,{get when(){return Z()},get children(){var e=kY();return e.$$click=()=>Sp(!1),e}}),n(l,{get when(){return!yp()||Z()},get children(){return[n(GR,{get phone(){return Z()},onClose:()=>Sp(!1),onCollapse:Dp}),n(l,{get when(){return!Z()},get children(){return n(Yx,{panel:`side`,label:`Resize sidebar`})}})]}})]}}),t),y(e,n(l,{get when(){return r(()=>!!yp())()&&!Z()},get children(){return n(vR,{onExpand:Dp})}}),t),y(t,n(l,{get when(){return r(()=>rx().phase!==`off`)()&&WS().name!==`session`},get children(){var e=AY();return y(e,n(aL,{})),e}}),null),y(t,n(l,{get when(){return Y.connection===`down`},get children(){return jY()}}),null),y(t,n(l,{get when(){return r(()=>Y.connection!==`down`)()&&Mu()},get children(){var e=MY();return y(e,()=>Mu()===`reconnecting`?`Reconnecting…`:`Updated`),s(()=>k(e,`sync-note ${Mu()}`)),e}}),null),y(t,n(l,{get when(){return r(()=>!(!Kp()||Z()||VY()))()&&WS().name!==`panes`},get children(){return n(tJ,{})}}),null),y(t,n(v,{get children(){return[n(o,{get when(){return r(()=>!nu())()&&(WS().name===`session`||WS().name===`panes`)||BY()===`wait`},get children(){return NY()}}),n(o,{get when(){return VY()||WS().name===`panes`},get children(){return n(WJ,{get routed(){return VY()}})}}),n(o,{get when(){return r(()=>WS().name===`new`)()&&WS()},children:e=>n(VS,_(()=>e()))}),n(o,{get when(){return r(()=>WS().name===`feature`)()&&WS()},children:e=>n(XJ,_(()=>e()))}),n(o,{get when(){return WS().name===`settings`},get children(){return n(wI,{})}}),n(o,{get when(){return WS().name===`concierge`},get children(){return n(CY,{mode:`page`})}}),n(o,{when:!0,get children(){return n(WY,{})}})]}}),null),y(e,n(l,{get when(){return zY()},get children(){return n(CY,{mode:`side`})}}),null),s(()=>k(e,`shell${yp()&&!Z()?` collapsed`:``}${Z()?` phone`:``}${xp()?` drawer`:``}`)),e}})]}}),n(_h,{}),n(WP,{}),n(re,{}),n(l,{get when(){return Ut()},children:e=>(()=>{var t=IY(),r=t.firstChild;return y(r,()=>e().text),y(t,n(l,{get when(){return e().action},get children(){var t=FY();return t.$$click=()=>{e().action.run(),Mt()},y(t,()=>e().action.label),t}}),null),s(()=>k(t,`toast ${e().kind}`)),t})()})]}function WY(){return(()=>{var e=RY(),t=e.firstChild;return y(e,n(l,{get when(){return Z()},get children(){var e=LY(),t=e.firstChild;return y(e,n(F,{icon:`menu`,label:`Open sidebar`,onClick:Dp}),t),y(e,n(TR,{}),null),e}}),t),y(t,n(Ux,{})),e})()}z([`click`]),me(()=>n(UY,{}),document.getElementById(`root`)),qf();export{OA as $,bP as A,LM as B,GG as C,NW as D,eG as E,uM as F,PM as G,yM as H,wM as I,jM as J,fM as K,pM as L,yP as M,mP as N,bz as O,cM as P,Qj as Q,VM as R,dG as S,uG as T,SM as U,FM as V,CM as W,tM as X,aM as Y,Xj as Z,kG as _,tK as a,Y as at,rG as b,cK as c,eK as d,gh as et,nK as f,AG as g,jG as h,rK as i,Dp as it,OP as j,HP as k,$G as l,MG as m,aK as n,Jp as nt,QG as o,hu as ot,bG as p,dM as q,iK as r,Z as rt,YG as s,gu as st,qJ as t,Yp as tt,oK as u,OG as v,oG as w,nG as x,DG as y,zM as z};
|