my-durable 0.0.20 → 0.0.22
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/apps/dpi-backend/src/git.ts +46 -11
- package/apps/dpi-playground/apps/dpi-playground-fe/dist/assets/index-D5Ehu13_.css +1 -0
- package/apps/dpi-playground/apps/dpi-playground-fe/dist/assets/{index-7PMx4JCx.js → index-D7bC_-V3.js} +6 -6
- package/apps/dpi-playground/apps/dpi-playground-fe/dist/index.html +2 -2
- package/apps/dpi-playground/apps/dpi-playground-fe/src/components/GitChip.vue +1 -1
- package/apps/dpi-playground/apps/dpi-playground-fe/src/components/GitPanel.vue +40 -9
- package/apps/dpi-sdk/src/client.ts +4 -3
- package/package.json +1 -1
- package/apps/dpi-playground/apps/dpi-playground-fe/dist/assets/index-DWAPxWrI.css +0 -1
|
@@ -12,7 +12,7 @@ var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],en
|
|
|
12
12
|
|
|
13
13
|
`))>=0;){let e=f.slice(0,p),t=Dl(e);if(t>n)throw a();f=f.slice(p+2),s-=t+2;let r=kl(e);r&&(yield r)}if(s>n)throw a();o=f?[f]:[],c=f.slice(-1)}}finally{r.cancel().catch(()=>{})}}function kl(e){let t=`message`,n,r=[];for(let i of e.split(`
|
|
14
14
|
`)){if(!i||i.startsWith(`:`))continue;let e=i.indexOf(`:`),a=e<0?i:i.slice(0,e),o=e<0?``:i.slice(e+1).replace(/^ /,``);a===`event`?t=o:a===`data`?r.push(o):a===`id`&&(n=o)}return r.length?{event:t,data:r.join(`
|
|
15
|
-
`),id:n}:void 0}var Al=encodeURIComponent,jl=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,Ml=class{token;baseUrl;constructor(e,t){this.token=t,this.baseUrl=e.replace(/\/+$/,``)}headers(e,t={}){return{...this.token?{authorization:`Bearer ${this.token}`,"x-dpi-token":this.token}:{},...e?{"content-type":`application/json`}:{},...t}}async request(e,t,n,r={}){let i=AbortSignal.timeout(r.timeoutMs??2e4),a=r.signal?AbortSignal.any([r.signal,i]):i,o;try{o=await fetch(this.baseUrl+t,{method:e,signal:a,headers:this.headers(n!==void 0,r.idempotencyKey?{"idempotency-key":r.idempotencyKey}:{}),body:n===void 0?void 0:JSON.stringify(n)})}catch(e){throw r.signal?.aborted?e:new Sl(`offline`,`Cannot reach ${this.baseUrl}`,0,{cause:e})}let s=await o.text(),c;try{c=s?JSON.parse(s):void 0}catch{c=void 0}if(!o.ok){let e=c?.error;throw new Sl(e?.code??(o.status===401?`unauthorized`:o.status===404?`not_found`:`internal`),e?.message??`${o.status} ${o.statusText}`,o.status)}return c}async*stream(e,t,n){let r;try{r=await fetch(this.baseUrl+e,{headers:{...this.headers(!1),accept:`text/event-stream`},signal:t})}catch(e){if(t.aborted)return;throw new Sl(`offline`,`Cannot reach ${this.baseUrl}`,0,{cause:e})}if(!r.ok||!r.body){let e=await r.json().catch(()=>void 0);throw new Sl(e?.error?.code??(r.status===401?`unauthorized`:`unavailable`),e?.error?.message??`Stream failed (${r.status})`,r.status)}try{for await(let e of Ol(r.body,n))yield JSON.parse(e.data)}catch(e){if(t.aborted)return;throw e}}device(e){return this.request(`GET`,`/v1/device`,void 0,e)}tree(){return this.request(`GET`,`/v1/tree`)}dirs(e=``){return this.request(`GET`,`/v1/fs/dirs?path=${Al(e)}`)}deviceDoc(e){return this.request(`GET`,`/v1/docs/${Al(e)}`)}deviceEvents(e,t=[]){return this.stream(`/v1/events${t.length?`?docs=${t.map(Al).join(`,`)}`:``}`,e)}gitStatus(e){return this.request(`GET`,`/v1/git/status?path=${Al(e)}`)}gitOp(e,t,n={}){return this.request(`POST`,`/v1/git`,{path:e,op:t,...n})}sessions(){return this.request(`GET`,`/v1/sessions`)}createSession(e,t=jl()){return this.request(`POST`,`/v1/sessions`,e,{idempotencyKey:t})}session(e){return new Nl(this,e)}agent(e,t){return new Pl(this,e,String(t))}},Nl=class{client;ref;constructor(e,t){this.client=e,this.ref=t}get base(){return`/v1/sessions/${Al(this.ref)}`}get(){return this.client.request(`GET`,this.base)}rename(e){return this.client.request(`PATCH`,this.base,{name:e})}archive(){return this.client.request(`DELETE`,this.base)}agents(){return this.client.request(`GET`,`${this.base}/agents`)}createAgent(e={},t=jl()){return this.client.request(`POST`,`${this.base}/agents`,e,{idempotencyKey:t})}tasks(e=`terminal`,t=20){return this.client.request(`GET`,`${this.base}/tasks?status=${e}&limit=${t}`)}abortTask(e){return this.client.request(`POST`,`${this.base}/tasks/${e}/abort`,{})}inspect(){return this.client.request(`GET`,`${this.base}/inspect`)}compaction(){return this.client.request(`GET`,`${this.base}/compaction`)}setCompaction(e){return this.client.request(`PATCH`,`${this.base}/compaction`,e)}submission(e,t=0){return this.client.request(`GET`,`${this.base}/submissions/${e}?waitMs=${t}`,void 0,{timeoutMs:t+2e4})}events(e){return this.client.stream(`${this.base}/events`,e)}},Pl=class{client;session;agent;constructor(e,t,n){this.client=e,this.session=t,this.agent=n}get base(){return`/v1/sessions/${Al(this.session)}/agents/${Al(this.agent)}`}get(){return this.client.request(`GET`,this.base)}rename(e){return this.client.request(`PATCH`,this.base,{name:e})}send(e,t=`followUp`,n=jl(),r){return this.client.request(`POST`,`${this.base}/messages`,{content:e,whenBusy:t,requestId:n,waitMs:r},{timeoutMs:(r??0)+2e4})}withdraw(e){return this.client.request(`DELETE`,`${this.base}/inbox/${e}`)}abort(e=!1){return this.client.request(`POST`,`${this.base}/abort`,{background:e})}fork(e,t=jl()){return this.client.request(`POST`,`${this.base}/fork`,e,{idempotencyKey:t})}config(){return this.client.request(`GET`,`${this.base}/config`)}configure(e){return this.client.request(`PATCH`,`${this.base}/config`,e)}compact(e){return this.client.request(`POST`,`${this.base}/compact`,{instructions:e})}reset(e){return this.client.request(`POST`,`${this.base}/reset`,{note:e})}entries(e={}){let t=new URLSearchParams({scope:e.scope??`all`,limit:String(e.limit??500),...e.cursor?{cursor:e.cursor}:{}});return this.client.request(`GET`,`${this.base}/entries?${t}`)}transcript(e=`json`){return this.client.request(`GET`,`${this.base}/transcript?format=${e}`)}doc(e){return this.client.request(`GET`,`${this.base}/docs/${Al(e)}`)}extensions(){return this.client.request(`GET`,`${this.base}/extensions`)}setExtension(e){return this.client.request(`PATCH`,`${this.base}/extensions`,e)}demo(e,t,n=`POST`){return this.client.request(n,`${this.base}/demo/${e}`,t)}events(e,t=[]){return this.client.stream(`${this.base}/events${t.length?`?docs=${t.map(Al).join(`,`)}`:``}`,e)}},Fl=e=>new Ml(`/api/devices/${encodeURIComponent(e)}`);async function Il(e,t,n){let r=await fetch(`/api${t}`,{method:e,headers:n===void 0?{}:{"content-type":`application/json`},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json().catch(()=>void 0);if(!r.ok){let e=i?.error;throw new Sl(e?.code??`internal`,e?.message??`${r.status} ${r.statusText}`,r.status)}return i}var Ll={network:()=>Il(`GET`,`/network`),check:e=>Il(`POST`,`/devices/${encodeURIComponent(e)}/check`,{}),async uiGet(e){return(await Il(`GET`,`/ui-state/${encodeURIComponent(e)}`)).value??void 0},uiSet:(e,t)=>Il(`PUT`,`/ui-state/${encodeURIComponent(e)}`,{value:t})},Rl=e=>e instanceof Error?e.message:String(e),zl=[`demo.job-runs`,`demo.workspace`],Bl=e=>`${e.deviceId}/agent/${e.sessionId}/${e.agentId}?docs=${zl.join(`,`)}`,Vl=e=>`${e.deviceId}/session/${e.sessionId}`,Hl=e=>`${e}/device?docs=app.shared-state`;function Ul(e,t,n,r=`hello`){let i=O(`idle`),a=O(``);return e.route(t,e=>{e.type===`hello`?(i.value=r===`hello`?`live`:`connecting`,r===`hello`&&(a.value=``)):e.type===`disconnected`?i.value=`reconnecting`:e.type===`fault`?(i.value=`fault`,a.value=e.error.message):(n(e),e.type===r&&(a.value=``,i.value=`live`))}),{status:i,fault:a,select:n=>{a.value=``,i.value=n?`connecting`:`idle`,e.set(t,n)},retry:()=>{i.value=`connecting`,e.reopen(t)}}}function Wl(e){let t=new ml,n=O(0);return t.subscribe(()=>n.value++),e.onNetwork(e=>t.apply({type:`network`,devices:e})),{model:t,devices:B(()=>(n.value,t.devices)),tree:B(()=>(n.value,t.tree()))}}function Gl(e,t){let n=an(),r=an([]),{status:i,select:a}=Ul(e,`device`,e=>{e.type===`doc`&&e.kind===`app.shared-state`?n.value={value:e.value,revision:e.revision??0}:e.type===`activity`&&(r.value=[...r.value,...e.items].slice(-50))});return Zn(t,e=>{n.value=void 0,a(e?Hl(e):void 0)},{immediate:!0}),{sharedState:n,activity:r,status:i}}function Kl(e,t){let n=new sl,r=O(0);n.subscribe(()=>r.value++);let{status:i,fault:a,select:o}=Ul(e,`session`,e=>n.apply(e));return Zn(()=>t.value?Vl(t.value):void 0,e=>{n.clear(),o(e)},{immediate:!0}),{model:n,state:B(()=>(r.value,n.state)),status:i,fault:a}}function ql(e,t){let n=new ol,r=O(0);n.subscribe(()=>r.value++);let{status:i,fault:a,select:o,retry:s}=Ul(e,`agent`,e=>n.apply(e),`snapshot`);return Zn(()=>t.value?Bl(t.value):void 0,e=>{n.clear(),o(e)},{immediate:!0}),{model:n,state:B(()=>(r.value,{...n.state})),status:i,fault:a,version:r,retry:s}}var Jl=new yl,Yl=O(Jl.state);Jl.onState(e=>Yl.value=e);var Xl=Wl(Jl),Zl=O(),H=O(),Ql=O(new Set),$l=O(300),eu=Kt({tree:!0,inspector:!0}),tu=O(!1),nu=B(()=>H.value?.deviceId),ru=B(()=>Xl.devices.value.find(e=>e.id===nu.value)),iu=B(()=>ru.value?.status===`online`),au=Kl(Jl,B(()=>H.value?{deviceId:H.value.deviceId,sessionId:H.value.sessionId}:void 0)),ou=ql(Jl,H),su=Gl(Jl,nu),cu=B(()=>ru.value?.tree?.sessions.find(e=>e.id===H.value?.sessionId)),lu=B(()=>nu.value?Fl(nu.value):void 0),uu=B(()=>H.value&&lu.value?lu.value.agent(H.value.sessionId,H.value.agentId):void 0),du=B(()=>H.value&&lu.value?lu.value.session(H.value.sessionId):void 0);function fu(e){H.value=e,U.drawer=!1,pu=!!e,mu()}var pu=!1;function mu(){let e=H.value;if(!pu||!e)return;let t=Xl.devices.value.find(t=>t.id===e.deviceId)?.tree?.sessions.find(t=>t.id===e.sessionId)?.agents,n=new Map((t??[]).map(e=>[e.id,e])),r=[e.deviceId,`${e.deviceId}/s/${e.sessionId}`,`${e.deviceId}/s/${e.sessionId}/a/${e.agentId}`],i=n.get(e.agentId),a=new Set;for(;i&&!a.has(i.id);){a.add(i.id);let t=i.parentId??i.ownerAgentId;if(t===void 0)break;r.push(`${e.deviceId}/s/${e.sessionId}/a/${t}`),i=n.get(t)}r.some(e=>!Ql.value.has(e))&&(Ql.value=new Set([...Ql.value,...r])),n.has(e.agentId)&&(pu=!1)}Zn(()=>Xl.devices.value,mu);function hu(e,t){let n=new Set(Ql.value);t??!n.has(e)?n.add(e):n.delete(e),Ql.value=n}var gu=(()=>{let e=new Map;return(t,n)=>{clearTimeout(e.get(t)),e.set(t,setTimeout(()=>void Ll.uiSet(t,n).catch(()=>{}),300))}})();Zn(H,e=>tu.value&&void Ll.uiSet(`tree.selected`,e??null).catch(()=>{})),Zn($l,e=>tu.value&&gu(`tree.width`,e)),Zn(eu,e=>tu.value&&gu(`layout.panels`,{...e}));async function _u(){Jl.start();try{let[e,t,n,r]=await Promise.all([Ll.network(),Ll.uiGet(`tree.selected`),Ll.uiGet(`tree.width`),Ll.uiGet(`layout.panels`)]);r&&Object.assign(eu,r),Zl.value=e.configFile,Xl.model.devices.length||Xl.model.apply({type:`network`,devices:e.devices}),Ql.value=new Set,n&&($l.value=n),t&&e.devices.some(e=>e.id===t.deviceId)?fu(t):vu(e.devices)}catch(e){U.error=Rl(e)}finally{tu.value=!0}}function vu(e){for(let t of e){let e=t.status===`online`?t.tree?.sessions[0]:void 0,n=e?.agents.find(e=>e.kind===`root`)??e?.agents[0];if(e&&n)return fu({deviceId:t.id,sessionId:e.id,agentId:n.id})}}Zn(()=>[ou.status.value,cu.value],([e,t])=>{e===`fault`&&!t&&iu.value&&(W(`That session was archived on its device.`),fu(void 0))});var yu=B(()=>ru.value?.info?.models??[]),bu=ou.state,xu=B(()=>au.state.value.agents.length?au.state.value.agents:cu.value?.agents??[]),Su=B(()=>H.value?cl(xu.value,H.value.agentId):[]),Cu=B(()=>{let e=H.value?.agentId;if(e===void 0)return[];let t=xu.value,n=new Set([e]);for(let e=!0;e;){e=!1;for(let r of t)r.ownerAgentId!==void 0&&n.has(r.ownerAgentId)&&!n.has(r.id)&&(n.add(r.id),e=!0)}let r=au.state.value.tasks,i=new Map(r.map(e=>[e.id,e])),a=new Map(t.map(e=>[e.id,e.ownerTaskId]));return r.filter(e=>n.has(e.conversationId)).map(e=>{let t=e,n=!1,r=new Set;for(;t&&!r.has(t.id);){if(r.add(t.id),t.background){n=!0;break}let e=t.owner??a.get(t.conversationId);t=e===void 0?void 0:i.get(e)}return{...e,effectiveBackground:n}})}),wu=B(()=>bu.value.running||Cu.value.some(e=>!e.effectiveBackground&&e.conversationId===H.value?.agentId)),Tu=B(()=>tl(bu.value.usage)),Eu=B(()=>{let e=bu.value.agent.model;return yu.value.find(t=>t.provider===e?.provider&&t.id===e?.modelId)}),Du=an(),Ou=0;async function ku(){let e=uu.value,t=++Ou;if(!e||!iu.value)return void(Du.value=void 0);try{let n=await e.get();t===Ou&&(Du.value=n)}catch{t===Ou&&(Du.value=void 0)}}Zn([uu,iu],()=>void ku(),{immediate:!0});var U=Kt({error:``,toast:``,drawer:!1,inspectorOverlay:!1,tab:`session`,composer:``,dialog:void 0}),Au;function W(e){U.toast=e,clearTimeout(Au),Au=setTimeout(()=>U.toast=``,4500)}async function ju(e){U.error=``;try{return await e()}catch(e){U.error=Rl(e);return}}function Mu(e){U.composer=e,setTimeout(()=>document.querySelector(`.composer textarea`)?.focus())}var Nu=e=>Intl.NumberFormat(`en`,{notation:`compact`,maximumFractionDigits:1}).format(e),Pu=e=>JSON.stringify(e,null,2),Fu=(e=``)=>xl(yu.value.find(t=>t.id===e)?.icon);function Iu(e){if(!e)return`never`;let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s ago`:t<3600?`${Math.round(t/60)}m ago`:t<86400?`${Math.round(t/3600)}h ago`:`${Math.round(t/86400)}d ago`}var Lu=O(!1);async function Ru(){wu.value&&!Lu.value&&uu.value&&(Lu.value=!0,await ju(()=>uu.value.abort(!1))&&W(`Foreground work interrupted. Background jobs continue.`),Lu.value=!1)}var zu=window.matchMedia(`(max-width: 1100px)`),Bu=O(zu.matches);zu.addEventListener(`change`,e=>Bu.value=e.matches);var Vu=B(()=>Bu.value?U.inspectorOverlay:eu.inspector);function Hu(e){e&&(U.tab=e),Bu.value?(U.drawer=!1,U.inspectorOverlay=!0):eu.inspector=!0}function Uu(){Bu.value?U.inspectorOverlay=!1:eu.inspector=!1}function Wu(){Bu.value?(U.drawer=!U.drawer)&&(U.inspectorOverlay=!1,eu.tree=!0):eu.tree=!eu.tree}function Gu(){Vu.value?Uu():Hu()}var Ku=/Mac|iPhone|iPad/.test(navigator.userAgent),qu=Ku?{tree:`Ctrl+N`,inspector:`Ctrl+T`}:{tree:`Alt+Shift+N`,inspector:`Alt+Shift+T`};function Ju(e){if(!(!(Ku?e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey:e.altKey&&e.shiftKey&&!e.ctrlKey&&!e.metaKey)||e.repeat||e.isComposing)){if(e.code===`KeyN`)return`tree`;if(e.code===`KeyT`)return`inspector`}}var Yu={class:`topbar`},Xu={class:`brand`},Zu={class:`daemon`,"data-testid":`topbar-stats`},Qu=[`title`],$u={class:`top-actions`},ed=[`disabled`],td=[`disabled`],nd=A({__name:`TopBar`,emits:[`newSession`],setup(e,{emit:t}){let n=B(()=>Xl.devices.value.filter(e=>e.status===`online`).length),r=B(()=>Xl.devices.value.reduce((e,t)=>e+(t.tree?.sessions.length??0),0)),i=B(()=>Xl.devices.value.reduce((e,t)=>e+(t.tree?.sessions.reduce((e,t)=>e+t.agents.length,0)??0),0)),a=O(!1);async function o(){let e=du.value,t=H.value;if(!e||!t||a.value)return;a.value=!0;let n=await ju(()=>e.createAgent({}));a.value=!1,n&&(fu({...t,agentId:n.id}),W(`New agent. Same session, same shared App State.`))}let s=t;return(e,t)=>(N(),P(`header`,Yu,[I(`div`,Xu,[I(`button`,{class:`icon-button tree-toggle`,"aria-label":`Toggle network`,title:`Network`,onClick:t[0]||=e=>k(U).drawer=!k(U).drawer},[L(k(Oc),{size:19})]),t[4]||=I(`img`,{class:`brandmark`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),t[5]||=I(`strong`,null,`Durable Pi`,-1)]),t[12]||=I(`span`,{class:`topbar-sep`,"aria-hidden":`true`},null,-1),I(`div`,Zu,[I(`span`,{class:C([`dot`,{off:!n.value}]),"aria-hidden":`true`},null,2),I(`span`,{class:`network-summary`,title:`${n.value} of ${k(Xl).devices.value.length} devices online`},[L(k(wc),{size:16}),R(T(n.value)+` of `+T(k(Xl).devices.value.length)+` online`,1)],8,Qu),t[8]||=I(`span`,{class:`sep`,"aria-hidden":`true`},`·`,-1),I(`span`,null,[I(`b`,null,T(r.value),1),t[6]||=R(` sessions`,-1)]),t[9]||=I(`span`,{class:`sep`,"aria-hidden":`true`},`·`,-1),I(`span`,null,[I(`b`,null,T(i.value),1),t[7]||=R(` agents`,-1)])]),I(`div`,$u,[I(`span`,{class:C([`chip connection`,{accent:k(Yl)===`live`}])},[I(`span`,{class:C([`dot`,{off:k(Yl)!==`live`}]),"aria-hidden":`true`},null,2),R(T(k(Yl)===`live`?`Connected`:`Reconnecting`),1)],2),I(`button`,{class:`icon-button`,title:`How this works`,"aria-label":`How this works`,onClick:t[1]||=e=>k(U).dialog={kind:`help`}},[L(k($s),{size:19})]),I(`button`,{class:`secondary small new-agent-button`,disabled:!k(H)||!k(iu)||a.value,title:`Start a fresh agent in this session`,onClick:o},[L(k(Mc),{size:18}),t[10]||=R(`New agent `,-1)],8,ed),I(`button`,{class:`primary small`,onClick:t[2]||=e=>s(`newSession`)},[L(k(Mc),{size:18}),t[11]||=R(`New session `,-1)]),I(`button`,{class:`icon-button inspector-toggle`,"aria-label":`Toggle inspector`,title:`Inspector`,disabled:!k(H)||!k(iu),onClick:t[3]||=e=>k(U).inspectorOverlay?k(Uu)():k(Hu)()},[L(k(kc),{size:19})],8,td)])]))}}),rd={class:`mnav`,"aria-label":`Panels`},id={key:0,class:`badge`},ad=A({__name:`MobileNav`,setup(e){function t(){U.drawer=!1,U.inspectorOverlay=!1}return(e,n)=>(N(),P(`nav`,rd,[I(`button`,{type:`button`,class:C({"is-on":!k(U).drawer&&!k(Vu)}),onClick:t},[L(k(xc),{size:18}),n[2]||=R(`Chat `,-1)],2),I(`button`,{type:`button`,class:C({"is-on":k(Vu)}),onClick:n[0]||=e=>k(Vu)?k(Uu)():k(Hu)()},[L(k(kc),{size:18}),n[3]||=R(`Details`,-1),k(Cu).length?(N(),P(`span`,id,T(k(Cu).length),1)):z(``,!0)],2),I(`button`,{type:`button`,class:C({"is-on":k(U).drawer}),onClick:n[1]||=e=>k(Wu)()},[L(k(Hc),{size:18}),n[4]||=R(`Network `,-1)],2)]))}}),od=[`width`,`height`,`aria-label`],sd=[`width`,`height`,`aria-label`],cd=A({__name:`DeviceIcon`,props:{device:{},size:{default:16}},setup(e){let t=e,n=B(()=>{let e=t.device;return e?.kind===`exe-dev`||e?.url?.includes(`.exe.xyz`)?`exe`:e?.info?.platform.startsWith(`darwin`)?`apple`:e?.kind===`local`?`laptop`:`server`}),r=B(()=>{let e={exe:`exe.dev VM`,apple:`macOS`,laptop:`This computer`,server:`Server`}[n.value];return t.device?.transport===`tunnel`?`${e} (tunnel)`:e});return(t,i)=>n.value===`exe`?(N(),P(`svg`,{key:0,class:`device-icon exe`,viewBox:`0 0 512 512`,width:e.size,height:e.size,role:`img`,"aria-label":r.value},[I(`title`,null,T(r.value),1),i[0]||=I(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M8 332.2l.9 1.4 1.5 .5 38.5-4.1 3.1 .4 2.7 2.2 8.8 13.2 10.1 12.8 1.1 2.6-.3 3.2-16.4 35.6 0 1.7 1 1.2 2.2 0 33.8-18.2 3.1-.8 3.4 1 12.4 8.7 15.3 9.4 1.5 2.1 .5 2.5-3.1 38.9 .4 1.5 1.3 .9 2.3-.7 25.9-29.2 2.1-1.3 2.8-.4 16.3 4.4 15.7 3.2 3 1.8 1.6 2.8 9.8 37.1 1.5 1.6 1.7-.1 1.1-1.1 14.5-35.6 1.8-2.5 3.4-1.5 15.7-1.1 16.1-2.4 3.2 .5 2.3 1.8 22.4 32 2.2 .9 1.4-.7 .6-1.5 1.4-39 1-2.7 2.4-2.2 14.7-6.8 13.8-7.8 3.4-.7 3 1 32.4 21 2.3 0 1.1-1.1 0-1.6-13.4-36.6-.3-2.5 .7-2.4 12.2-13.9 8.8-12.1 2.8-2 3.1-.3 38.4 5.4 2.1-.9 .5-1.5-.6-1.4-27.5-27.4-1.6-2.7-.2-3.1 4.6-15.8 2.9-15.8 1.3-2.6 2.5-1.9 37.3-12.2 1.6-1.9-.3-1.5-1.1-1-36.8-12.5-2.4-1.4-1.8-3.3-3.1-17.7 0-2.2 .9-2.4 3.1-2.9 10.6-15.3 3.3-1.8 3.4 .3 3.8 3 4.5 6.8 8.9 11.2 12.5 12.5 6.2 4.8 7.3 4.3 6.3 2.4 3.8 .3 4-.3 5.1-2.4 6.5-7 4.8-10.6 3.3-11.9 2-14.1 1.3-3.4 0-66.6-.8-2.6-2-13.6-3.8-14.6-7.5-18.7-4.7-9.4-4-6-7.2-7.1-5-2.1-6.5 0-2.2 .7-6 3.5-12 12-13.1 17.8-11.7 18.2-3.7 1.6-11.8-.1-3.1-1.6-1.8-2.9-.3-8.8-2.8-12.7-1.5-4-7.1-13.3-5.9-7.8-10.7-9.3-8.6-4.7-5.9-2-4.1-.5-6.7-.5-4.1 .5-7 2-7.3 3.8-7.5 7-2.2 3.2-2.5 5.5-2.8 10.5-.5 3.6 .1 17.1-.3 2.2-1.1 1.9-1.7 1.5-3.7 1.5-2.6 .3-27.5-10.5-14.5-4-15.7-3.2-2.6-1.3-1.9-3-9.9-37.5-.9-1.2-1.4-.4-1.3 .4-.8 1-14.7 36.1-1.8 2.1-2.2 1.2-17.8 1.4-15 2.2-3.4-.7-2.4-2.1-22-31.5-2-.9-1.5 .5-.7 1.5-1.4 38.6-.9 3-2.5 2.5-14.7 6.8-13.8 7.8-2.8 .7-3.1-.7-32.9-21.3-2.3 0-1.1 1.1-.1 1.6 13.6 36.9 0 3.1-1.2 2.6-10.8 12-9.5 12.9-2.8 2-3.2 .3-38.4-5.4-1.5 .4-.9 1.4 .6 2.1 27.6 27.6 1.2 1.8 .5 2.2-3 10.6-1.5 2.4-2.4 1.6-5.8 1-4.4 1.8-3.8 3-3 3.8-1.7 4-.7 4.7 .4 4.7 1.5 4.2 .3 .5 30.7 0 1.7 .6 1.4 1.1 1.1 3-1.1 2.9-2.7 1.6-31.1 .1-.6 1.1-1.2 3.6-.4 4.1 .4 4.2 1.2 3.5 2.5 4 3.2 3.1 4.1 2.3 5.6 1.8 2.4 2.1 .9 2.1 5.1 21.2-.6 2.1-1.2 1.9-28.5 26.5zM283.6 189.4l6.6 .5 5.6 1.2 6.2 2.2 5.9 3.1 4.6 3.4 4.8 4.5 3.5 4.4 3.4 5.8 2.6 6.2 1.6 6.4 .6 5.6-.2 6.7-1.1 6.5-1.7 5.4-2.9 6-3.6 5.5-7.1 7.3-8.4 5.4-9.4 3.5-9.9 1.3-11-1-40.4-10.4-2.8-1.1-3.1-2.4-1.7-.6-.9-1.1-.1-2.2-1.4-2.2 1.6-6.3 18.1-38.5 4.7-7.5 7.1-7.3 8.4-5.4 9.4-3.5zM173.9 198l-1.1 5.9-2.3 5.5-3.4 5-4.2 4.3-5 3.3-5.5 2.3-5.9 1.2-6 0-5.9-1.2-5.6-2.3-5-3.3-4.2-4.3-3.3-5-2.3-5.5-1.2-5.9 0-6 1.2-5.9 2.3-5.5 3.3-5 4.2-4.3 5-3.3 5.6-2.3 5.9-1.2 6 0 5.9 1.2 5.5 2.3 5 3.3 4.2 4.3 3.4 5 2.3 5.5 1.1 5.9zM315.1 213.5l-63.1 37.7 69.5-12.9 0-6.2-1-6.5-2.1-6.1zM237.3 260l-2.6 1.5 40.6 10.5 7.4 .9 7.4-.5 5.4-1.4 5.2-2.1 8.5-5.8 3.8-4.1 3.2-4.5 2.6-5 1.6-4.9zM284.5 196.9l-7.4 .5-8.1 2.3-7.3 4.1-6.3 5.5-5.8 8.5-17.4 37.1 3-.6 76.1-45.5-5.8-5-6.5-3.7-7.1-2.3zM141.1 183.6l-1.1-2.9-2-2.3-2.8-1.3-3.1-.1-2.9 1-2.3 2.1-1.3 2.8-.1 3 1 2.9 2.1 2.3 2.7 1.3 3.1 .2 2.9-1.1 2.3-2 1.3-2.8z`},null,-1)],8,od)):n.value===`apple`?(N(),P(`svg`,{key:1,class:`device-icon apple`,viewBox:`0 0 384 512`,width:e.size,height:e.size,role:`img`,"aria-label":r.value},[I(`title`,null,T(r.value),1),i[1]||=I(`path`,{fill:`currentColor`,d:`M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z`},null,-1)],8,sd)):n.value===`laptop`?(N(),F(k(hc),{key:2,class:`device-icon`,size:e.size,"aria-label":r.value},null,8,[`size`,`aria-label`])):(N(),F(k(Ic),{key:3,class:`device-icon`,size:e.size,"aria-label":r.value},null,8,[`size`,`aria-label`]))}}),ld=[`aria-level`,`aria-expanded`,`aria-selected`,`data-key`,`title`],ud=[`aria-label`],dd={key:1,class:`chev`},fd={class:`name`},pd={class:`badge`},md=[`aria-label`],hd=[`disabled`,`aria-label`],gd=[`aria-label`],_d={class:`name`},vd={class:`path`},yd={key:0,class:`dot work`,title:`Working`},bd=[`title`],xd=[`disabled`,`aria-label`],Sd=[`disabled`,`aria-label`],Cd=[`disabled`,`aria-label`],wd={class:`name`},Td={key:3,class:`meta`},Ed={key:4,class:`dot work`,title:`Working`},Dd=[`title`],Od=[`disabled`,`aria-label`],kd=A({__name:`TreeRow`,props:{node:{},depth:{},open:{type:Boolean},selected:{type:Boolean},focused:{type:Boolean},online:{type:Boolean}},emits:[`toggle`,`activate`,`action`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>n.node.children.length>0),a=B(()=>n.node.type===`device`?n.node.device:void 0),o=B(()=>n.node.type===`session`?n.node.session:void 0),s=B(()=>n.node.type===`agent`?n.node.agent:void 0),c=B(()=>o.value?o.value.agents.reduce((e,t)=>e+t.background,0):s.value?.background??0),l=B(()=>o.value?.busy||s.value?.busy),u=B(()=>{let e=a.value;if(!e)return``;let t=e.tree?.sessions.length??0;switch(e.status){case`online`:return`${t} session${t===1?``:`s`}`;case`checking`:return`checking…`;case`unauthorized`:return e.hasToken?`token rejected`:`no token`;case`mismatch`:return`identity changed`;case`incompatible`:return`incompatible`;default:return`offline · ${Iu(e.lastSeenAt)}`}}),d=B(()=>{let e=a.value?.status;return e===`online`?`on`:e===`checking`?`chk`:e===`offline`?`off`:`err`}),f=B(()=>a.value?.name??a.value?.id??o.value?.name??s.value?.name??``),p=B(()=>{if(a.value)return`${a.value.name} · ${a.value.url}${a.value.error?`\n${a.value.error}`:``}`;if(o.value)return`${o.value.name}\n${o.value.cwd}`;let e=s.value;return e.kind===`fork`?`Fork of agent #${e.parentId} at entry #${e.forkedAt}`:e.kind===`subagent`?`Subagent owned by agent #${e.ownerAgentId}`:`Root agent`});return(t,n)=>(N(),P(`div`,{class:C([`tree-row`,[e.node.type,{sel:e.selected,focus:e.focused,stale:e.node.stale}]]),style:ye({"--depth":e.depth}),role:`treeitem`,"aria-level":e.depth+1,"aria-expanded":i.value?e.open:void 0,"aria-selected":e.selected,"data-key":e.node.key,title:p.value,onClick:n[11]||=e=>r(`activate`)},[i.value?(N(),P(`button`,{key:0,class:`chev`,tabindex:`-1`,"aria-label":e.open?`Collapse ${f.value}`:`Expand ${f.value}`,onClick:n[0]||=As(e=>r(`toggle`),[`stop`])},[e.open?(N(),F(k(Xs),{key:0,size:16})):(N(),F(k(Zs),{key:1,size:16}))],8,ud)):(N(),P(`span`,dd)),a.value?(N(),P(M,{key:2},[I(`i`,{class:C([`dot`,d.value])},null,2),L(cd,{device:a.value,size:16},null,8,[`device`]),I(`b`,fd,T(f.value),1),I(`span`,pd,T(a.value.kind),1),I(`span`,{class:C([`meta`,{err:d.value===`err`}])},T(u.value),3),I(`span`,{class:`acts`,onClick:n[4]||=As(()=>{},[`stop`])},[a.value.pairing?(N(),P(`button`,{key:0,class:`icon-button`,"aria-label":`Manage credentials for ${f.value}`,title:`Manage device credentials, including while offline`,onClick:n[1]||=e=>r(`action`,`credentials`)},[L(k(mc),{size:16})],8,md)):z(``,!0),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`New session on ${f.value}`,title:`New session on this device`,onClick:n[2]||=e=>r(`action`,`new-session`)},[L(k(Mc),{size:16})],8,hd),I(`button`,{class:`icon-button`,"aria-label":`Check ${f.value}`,title:`Check connection now`,onClick:n[3]||=e=>r(`action`,`check`)},[L(k(Pc),{size:16})],8,gd)])],64)):o.value?(N(),P(M,{key:3},[L(k(sc),{class:`ico`,size:16}),I(`b`,_d,T(f.value),1),I(`span`,vd,`…/`+T(o.value.cwd.split(`/`).filter(Boolean).at(-1)),1),l.value?(N(),P(`i`,yd)):z(``,!0),c.value?(N(),P(`span`,{key:1,class:`bg-count`,title:`${c.value} background task(s)`},[n[12]||=I(`i`,{class:`dot bg`},null,-1),R(T(c.value)+` bg`,1)],8,bd)):z(``,!0),I(`span`,{class:`acts`,onClick:n[8]||=As(()=>{},[`stop`])},[I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`New agent in ${f.value}`,title:`New agent in this session`,onClick:n[5]||=e=>r(`action`,`new-agent`)},[L(k(Mc),{size:16})],8,xd),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Rename session ${f.value}`,title:`Rename session`,onClick:n[6]||=e=>r(`action`,`rename`)},[L(k(Ac),{size:16})],8,Sd),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Archive session ${f.value}`,title:`Archive session`,onClick:n[7]||=e=>r(`action`,`archive`)},[L(k(Us),{size:16})],8,Cd)])],64)):s.value?(N(),P(M,{key:4},[s.value.kind===`fork`?(N(),F(k(uc),{key:0,class:`ico`,size:16})):s.value.kind===`subagent`?(N(),F(k(nc),{key:1,class:`ico`,size:16})):(N(),F(k(xc),{key:2,class:`ico root`,size:16})),I(`span`,wd,T(f.value),1),s.value.kind===`fork`&&s.value.forkedAt!==void 0?(N(),P(`span`,Td,`@ #`+T(s.value.forkedAt),1)):z(``,!0),l.value?(N(),P(`i`,Ed)):z(``,!0),c.value?(N(),P(`span`,{key:5,class:`bg-count`,title:`${c.value} background task(s)`},[n[13]||=I(`i`,{class:`dot bg`},null,-1),R(T(c.value),1)],8,Dd)):z(``,!0),I(`span`,{class:`acts`,onClick:n[10]||=As(()=>{},[`stop`])},[I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Rename agent ${f.value}`,title:`Rename agent`,onClick:n[9]||=e=>r(`action`,`rename`)},[L(k(Ac),{size:16})],8,Od)])],64)):z(``,!0)],14,ld))}}),Ad={class:`tree-head`},jd=[`title`],Md={key:0,class:`hint tree-empty`,"data-testid":`tree-empty`},Nd={key:1,class:`panel-rail`,"aria-label":`Network (collapsed)`},Pd=[`title`],Fd=[`title`,`aria-label`,`onClick`],Id=A({__name:`NetworkSidebar`,setup(e){let t=B(()=>{let e=[],t=(n,r,i)=>{for(let a of n)e.push({node:a,depth:r,parent:i}),a.children.length&&Ql.value.has(a.key)&&t(a.children,r+1,a.key)};return t(Xl.tree.value,0),e}),n=O(),r=O(),i=e=>Xl.devices.value.find(t=>t.id===(e.type===`device`?e.device.id:e.deviceId)),a=e=>i(e)?.status===`online`,o=e=>e.type===`agent`&&H.value?.deviceId===e.deviceId&&H.value.sessionId===e.sessionId&&H.value.agentId===e.agent.id;function s(e){if(n.value=e.key,e.type===`device`)return hu(e.key);if(e.type===`agent`)return fu({deviceId:e.deviceId,sessionId:e.sessionId,agentId:e.agent.id});let t=e.session.agents.find(e=>e.kind===`root`)??e.session.agents[0];hu(e.key,!0),t&&fu({deviceId:e.deviceId,sessionId:e.session.id,agentId:t.id})}async function c(e,t){let n=i(e);if(!n)return;let r=Fl(n.id);if(e.type===`device`){t===`new-session`?U.dialog={kind:`new-session`,deviceId:n.id}:t===`check`?await ju(()=>Ll.check(n.id)):t===`credentials`&&(U.dialog={kind:`credentials`,deviceId:n.id});return}if(e.type===`session`){let i=e.session;if(t===`new-agent`){let e=await ju(()=>r.session(i.id).createAgent({}));e&&(fu({deviceId:n.id,sessionId:i.id,agentId:e.id}),W(`New agent. Same session, same shared App State.`))}else t===`rename`?U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:i.name,submit:`Save name`,run:e=>r.session(i.id).rename(e)}:t===`archive`&&(U.dialog={kind:`prompt`,title:`Archive ${i.name}?`,hint:`Stops all of its work and moves its files to archive/ on ${n.id}. Nothing is deleted.`,submit:`Archive session`,danger:!0,run:async()=>{await r.session(i.id).archive(),H.value?.sessionId===i.id&&fu(void 0)}});return}let a=e.agent;t===`rename`&&(U.dialog={kind:`prompt`,title:`Rename agent`,label:`Agent name`,value:a.named?a.name:``,placeholder:a.name,submit:`Save name`,run:t=>r.agent(e.sessionId,a.id).rename(t)})}function l(e){let i=t.value.findIndex(e=>e.node.key===n.value),a=t.value[Math.max(0,Math.min(t.value.length-1,(i<0?0:i)+e))];a&&(n.value=a.node.key,jn(()=>r.value?.querySelector(`[data-key="${CSS.escape(a.node.key)}"]`)?.scrollIntoView({block:`nearest`})))}function u(){n.value??=t.value[0]?.node.key}function d(e){let r=t.value.find(e=>e.node.key===n.value);if(e.key===`ArrowDown`)l(1);else if(e.key===`ArrowUp`)l(-1);else if(e.key===`ArrowRight`&&r){if(!r.node.children.length)return;Ql.value.has(r.node.key)?l(1):hu(r.node.key,!0)}else if(e.key===`ArrowLeft`&&r)r.node.children.length&&Ql.value.has(r.node.key)?hu(r.node.key,!1):r.parent&&(n.value=r.parent);else if((e.key===`Enter`||e.key===` `)&&r)s(r.node);else return;e.preventDefault()}return(e,i)=>(N(),P(`aside`,{class:C([`network-sidebar`,{open:k(U).drawer,collapsed:!k(eu).tree&&!k(U).drawer}]),"aria-label":`Network`},[k(eu).tree||k(U).drawer?(N(),P(M,{key:0},[I(`header`,Ad,[I(`span`,null,[L(k(wc),{size:16}),i[3]||=R(`NETWORK`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Pair a device`,title:`Pair a device`,onClick:i[0]||=e=>k(U).dialog={kind:`pair`}},[L(k(_c),{size:15})]),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse network`,title:`Collapse network (${k(qu).tree})`,onClick:i[1]||=e=>(k(eu).tree=!1,k(U).drawer=!1)},[L(k(Ec),{size:18})],8,jd)]),I(`div`,{ref_key:`list`,ref:r,class:`tree-list`,role:`tree`,tabindex:`0`,"aria-label":`Devices, sessions and agents`,onKeydown:d,onFocus:u},[(N(!0),P(M,null,j(t.value,e=>(N(),F(kd,{key:e.node.key,node:e.node,depth:e.depth,open:k(Ql).has(e.node.key),selected:o(e.node),focused:n.value===e.node.key,online:a(e.node),onToggle:t=>k(hu)(e.node.key),onActivate:t=>s(e.node),onAction:t=>c(e.node,t)},null,8,[`node`,`depth`,`open`,`selected`,`focused`,`online`,`onToggle`,`onActivate`,`onAction`]))),128)),t.value.length?z(``,!0):(N(),P(`p`,Md,[...i[4]||=[R(` No devices yet. Declare them in `,-1),I(`code`,null,`dpi-network.yaml`,-1),R(` (start from `,-1),I(`code`,null,`dpi-network.example.yaml`,-1),R(`), then run `,-1),I(`code`,null,`just net up <id>`,-1),R(`. `,-1)]]))],544)],64)):(N(),P(`div`,Nd,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand network`,title:`Expand network (${k(qu).tree})`,onClick:i[2]||=e=>k(eu).tree=!0},[L(k(Dc),{size:18})],8,Pd),(N(!0),P(M,null,j(k(Xl).devices.value,e=>(N(),P(`button`,{key:e.id,class:`rail-device`,title:`${e.id} · ${e.status}`,"aria-label":`Show ${e.id}`,onClick:t=>(k(eu).tree=!0,k(hu)(e.id,!0))},[L(cd,{device:e,size:20},null,8,[`device`]),I(`i`,{class:C([`dot`,e.status===`online`?`on`:e.status===`checking`?`chk`:e.status===`offline`?`off`:`err`])},null,2)],8,Fd))),128))]))],2))}});function Ld(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Rd=Ld();function zd(e){Rd=e}var Bd={exec:()=>null};function G(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(Hd.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var Vd=(()=>{try{return!0}catch{return!1}})(),Hd={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,`i`),blockquoteBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ud=/^(?:[ \t]*(?:\n|$))+/,Wd=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Gd=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Kd=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,qd=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Jd=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Yd=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Xd=G(Yd).replace(/bull/g,Jd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),Zd=G(Yd).replace(/bull/g,Jd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Qd=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,$d=/^[^\n]+/,ef=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,tf=G(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,ef).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),nf=G(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Jd).getRegex(),rf=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,af=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,of=G(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,af).replace(`tag`,rf).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),sf=G(Qd).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex(),cf={blockquote:G(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,sf).getRegex(),code:Wd,def:tf,fences:Gd,heading:qd,hr:Kd,html:of,lheading:Xd,list:nf,newline:Ud,paragraph:sf,table:Bd,text:$d},lf=G(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex(),uf={...cf,lheading:Zd,table:lf,paragraph:G(Qd).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,lf).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex()},df={...cf,html:G(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,af).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Bd,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:G(Qd).replace(`hr`,Kd).replace(`heading`,` *#{1,6} *[^
|
|
15
|
+
`),id:n}:void 0}var Al=encodeURIComponent,jl=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,Ml=class{token;baseUrl;constructor(e,t){this.token=t,this.baseUrl=e.replace(/\/+$/,``)}headers(e,t={}){return{...this.token?{authorization:`Bearer ${this.token}`,"x-dpi-token":this.token}:{},...e?{"content-type":`application/json`}:{},...t}}async request(e,t,n,r={}){let i=AbortSignal.timeout(r.timeoutMs??2e4),a=r.signal?AbortSignal.any([r.signal,i]):i,o;try{o=await fetch(this.baseUrl+t,{method:e,signal:a,headers:this.headers(n!==void 0,r.idempotencyKey?{"idempotency-key":r.idempotencyKey}:{}),body:n===void 0?void 0:JSON.stringify(n)})}catch(e){throw r.signal?.aborted?e:new Sl(`offline`,`Cannot reach ${this.baseUrl}`,0,{cause:e})}let s=await o.text(),c;try{c=s?JSON.parse(s):void 0}catch{c=void 0}if(!o.ok){let e=c?.error;throw new Sl(e?.code??(o.status===401?`unauthorized`:o.status===404?`not_found`:`internal`),e?.message??`${o.status} ${o.statusText}`,o.status)}return c}async*stream(e,t,n){let r;try{r=await fetch(this.baseUrl+e,{headers:{...this.headers(!1),accept:`text/event-stream`},signal:t})}catch(e){if(t.aborted)return;throw new Sl(`offline`,`Cannot reach ${this.baseUrl}`,0,{cause:e})}if(!r.ok||!r.body){let e=await r.json().catch(()=>void 0);throw new Sl(e?.error?.code??(r.status===401?`unauthorized`:`unavailable`),e?.error?.message??`Stream failed (${r.status})`,r.status)}try{for await(let e of Ol(r.body,n))yield JSON.parse(e.data)}catch(e){if(t.aborted)return;throw e}}device(e){return this.request(`GET`,`/v1/device`,void 0,e)}tree(){return this.request(`GET`,`/v1/tree`)}dirs(e=``){return this.request(`GET`,`/v1/fs/dirs?path=${Al(e)}`)}deviceDoc(e){return this.request(`GET`,`/v1/docs/${Al(e)}`)}deviceEvents(e,t=[]){return this.stream(`/v1/events${t.length?`?docs=${t.map(Al).join(`,`)}`:``}`,e)}gitStatus(e,t={}){return this.request(`GET`,`/v1/git/status?path=${Al(e)}`,void 0,t)}gitOp(e,t,n={}){return this.request(`POST`,`/v1/git`,{path:e,op:t,...n})}sessions(){return this.request(`GET`,`/v1/sessions`)}createSession(e,t=jl()){return this.request(`POST`,`/v1/sessions`,e,{idempotencyKey:t})}session(e){return new Nl(this,e)}agent(e,t){return new Pl(this,e,String(t))}},Nl=class{client;ref;constructor(e,t){this.client=e,this.ref=t}get base(){return`/v1/sessions/${Al(this.ref)}`}get(){return this.client.request(`GET`,this.base)}rename(e){return this.client.request(`PATCH`,this.base,{name:e})}archive(){return this.client.request(`DELETE`,this.base)}agents(){return this.client.request(`GET`,`${this.base}/agents`)}createAgent(e={},t=jl()){return this.client.request(`POST`,`${this.base}/agents`,e,{idempotencyKey:t})}tasks(e=`terminal`,t=20){return this.client.request(`GET`,`${this.base}/tasks?status=${e}&limit=${t}`)}abortTask(e){return this.client.request(`POST`,`${this.base}/tasks/${e}/abort`,{})}inspect(){return this.client.request(`GET`,`${this.base}/inspect`)}compaction(){return this.client.request(`GET`,`${this.base}/compaction`)}setCompaction(e){return this.client.request(`PATCH`,`${this.base}/compaction`,e)}submission(e,t=0){return this.client.request(`GET`,`${this.base}/submissions/${e}?waitMs=${t}`,void 0,{timeoutMs:t+2e4})}events(e){return this.client.stream(`${this.base}/events`,e)}},Pl=class{client;session;agent;constructor(e,t,n){this.client=e,this.session=t,this.agent=n}get base(){return`/v1/sessions/${Al(this.session)}/agents/${Al(this.agent)}`}get(){return this.client.request(`GET`,this.base)}rename(e){return this.client.request(`PATCH`,this.base,{name:e})}send(e,t=`followUp`,n=jl(),r){return this.client.request(`POST`,`${this.base}/messages`,{content:e,whenBusy:t,requestId:n,waitMs:r},{timeoutMs:(r??0)+2e4})}withdraw(e){return this.client.request(`DELETE`,`${this.base}/inbox/${e}`)}abort(e=!1){return this.client.request(`POST`,`${this.base}/abort`,{background:e})}fork(e,t=jl()){return this.client.request(`POST`,`${this.base}/fork`,e,{idempotencyKey:t})}config(){return this.client.request(`GET`,`${this.base}/config`)}configure(e){return this.client.request(`PATCH`,`${this.base}/config`,e)}compact(e){return this.client.request(`POST`,`${this.base}/compact`,{instructions:e})}reset(e){return this.client.request(`POST`,`${this.base}/reset`,{note:e})}entries(e={}){let t=new URLSearchParams({scope:e.scope??`all`,limit:String(e.limit??500),...e.cursor?{cursor:e.cursor}:{}});return this.client.request(`GET`,`${this.base}/entries?${t}`)}transcript(e=`json`){return this.client.request(`GET`,`${this.base}/transcript?format=${e}`)}doc(e){return this.client.request(`GET`,`${this.base}/docs/${Al(e)}`)}extensions(){return this.client.request(`GET`,`${this.base}/extensions`)}setExtension(e){return this.client.request(`PATCH`,`${this.base}/extensions`,e)}demo(e,t,n=`POST`){return this.client.request(n,`${this.base}/demo/${e}`,t)}events(e,t=[]){return this.client.stream(`${this.base}/events${t.length?`?docs=${t.map(Al).join(`,`)}`:``}`,e)}},Fl=e=>new Ml(`/api/devices/${encodeURIComponent(e)}`);async function Il(e,t,n){let r=await fetch(`/api${t}`,{method:e,headers:n===void 0?{}:{"content-type":`application/json`},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json().catch(()=>void 0);if(!r.ok){let e=i?.error;throw new Sl(e?.code??`internal`,e?.message??`${r.status} ${r.statusText}`,r.status)}return i}var Ll={network:()=>Il(`GET`,`/network`),check:e=>Il(`POST`,`/devices/${encodeURIComponent(e)}/check`,{}),async uiGet(e){return(await Il(`GET`,`/ui-state/${encodeURIComponent(e)}`)).value??void 0},uiSet:(e,t)=>Il(`PUT`,`/ui-state/${encodeURIComponent(e)}`,{value:t})},Rl=e=>e instanceof Error?e.message:String(e),zl=[`demo.job-runs`,`demo.workspace`],Bl=e=>`${e.deviceId}/agent/${e.sessionId}/${e.agentId}?docs=${zl.join(`,`)}`,Vl=e=>`${e.deviceId}/session/${e.sessionId}`,Hl=e=>`${e}/device?docs=app.shared-state`;function Ul(e,t,n,r=`hello`){let i=O(`idle`),a=O(``);return e.route(t,e=>{e.type===`hello`?(i.value=r===`hello`?`live`:`connecting`,r===`hello`&&(a.value=``)):e.type===`disconnected`?i.value=`reconnecting`:e.type===`fault`?(i.value=`fault`,a.value=e.error.message):(n(e),e.type===r&&(a.value=``,i.value=`live`))}),{status:i,fault:a,select:n=>{a.value=``,i.value=n?`connecting`:`idle`,e.set(t,n)},retry:()=>{i.value=`connecting`,e.reopen(t)}}}function Wl(e){let t=new ml,n=O(0);return t.subscribe(()=>n.value++),e.onNetwork(e=>t.apply({type:`network`,devices:e})),{model:t,devices:B(()=>(n.value,t.devices)),tree:B(()=>(n.value,t.tree()))}}function Gl(e,t){let n=an(),r=an([]),{status:i,select:a}=Ul(e,`device`,e=>{e.type===`doc`&&e.kind===`app.shared-state`?n.value={value:e.value,revision:e.revision??0}:e.type===`activity`&&(r.value=[...r.value,...e.items].slice(-50))});return Zn(t,e=>{n.value=void 0,a(e?Hl(e):void 0)},{immediate:!0}),{sharedState:n,activity:r,status:i}}function Kl(e,t){let n=new sl,r=O(0);n.subscribe(()=>r.value++);let{status:i,fault:a,select:o}=Ul(e,`session`,e=>n.apply(e));return Zn(()=>t.value?Vl(t.value):void 0,e=>{n.clear(),o(e)},{immediate:!0}),{model:n,state:B(()=>(r.value,n.state)),status:i,fault:a}}function ql(e,t){let n=new ol,r=O(0);n.subscribe(()=>r.value++);let{status:i,fault:a,select:o,retry:s}=Ul(e,`agent`,e=>n.apply(e),`snapshot`);return Zn(()=>t.value?Bl(t.value):void 0,e=>{n.clear(),o(e)},{immediate:!0}),{model:n,state:B(()=>(r.value,{...n.state})),status:i,fault:a,version:r,retry:s}}var Jl=new yl,Yl=O(Jl.state);Jl.onState(e=>Yl.value=e);var Xl=Wl(Jl),Zl=O(),H=O(),Ql=O(new Set),$l=O(300),eu=Kt({tree:!0,inspector:!0}),tu=O(!1),nu=B(()=>H.value?.deviceId),ru=B(()=>Xl.devices.value.find(e=>e.id===nu.value)),iu=B(()=>ru.value?.status===`online`),au=Kl(Jl,B(()=>H.value?{deviceId:H.value.deviceId,sessionId:H.value.sessionId}:void 0)),ou=ql(Jl,H),su=Gl(Jl,nu),cu=B(()=>ru.value?.tree?.sessions.find(e=>e.id===H.value?.sessionId)),lu=B(()=>nu.value?Fl(nu.value):void 0),uu=B(()=>H.value&&lu.value?lu.value.agent(H.value.sessionId,H.value.agentId):void 0),du=B(()=>H.value&&lu.value?lu.value.session(H.value.sessionId):void 0);function fu(e){H.value=e,U.drawer=!1,pu=!!e,mu()}var pu=!1;function mu(){let e=H.value;if(!pu||!e)return;let t=Xl.devices.value.find(t=>t.id===e.deviceId)?.tree?.sessions.find(t=>t.id===e.sessionId)?.agents,n=new Map((t??[]).map(e=>[e.id,e])),r=[e.deviceId,`${e.deviceId}/s/${e.sessionId}`,`${e.deviceId}/s/${e.sessionId}/a/${e.agentId}`],i=n.get(e.agentId),a=new Set;for(;i&&!a.has(i.id);){a.add(i.id);let t=i.parentId??i.ownerAgentId;if(t===void 0)break;r.push(`${e.deviceId}/s/${e.sessionId}/a/${t}`),i=n.get(t)}r.some(e=>!Ql.value.has(e))&&(Ql.value=new Set([...Ql.value,...r])),n.has(e.agentId)&&(pu=!1)}Zn(()=>Xl.devices.value,mu);function hu(e,t){let n=new Set(Ql.value);t??!n.has(e)?n.add(e):n.delete(e),Ql.value=n}var gu=(()=>{let e=new Map;return(t,n)=>{clearTimeout(e.get(t)),e.set(t,setTimeout(()=>void Ll.uiSet(t,n).catch(()=>{}),300))}})();Zn(H,e=>tu.value&&void Ll.uiSet(`tree.selected`,e??null).catch(()=>{})),Zn($l,e=>tu.value&&gu(`tree.width`,e)),Zn(eu,e=>tu.value&&gu(`layout.panels`,{...e}));async function _u(){Jl.start();try{let[e,t,n,r]=await Promise.all([Ll.network(),Ll.uiGet(`tree.selected`),Ll.uiGet(`tree.width`),Ll.uiGet(`layout.panels`)]);r&&Object.assign(eu,r),Zl.value=e.configFile,Xl.model.devices.length||Xl.model.apply({type:`network`,devices:e.devices}),Ql.value=new Set,n&&($l.value=n),t&&e.devices.some(e=>e.id===t.deviceId)?fu(t):vu(e.devices)}catch(e){U.error=Rl(e)}finally{tu.value=!0}}function vu(e){for(let t of e){let e=t.status===`online`?t.tree?.sessions[0]:void 0,n=e?.agents.find(e=>e.kind===`root`)??e?.agents[0];if(e&&n)return fu({deviceId:t.id,sessionId:e.id,agentId:n.id})}}Zn(()=>[ou.status.value,cu.value],([e,t])=>{e===`fault`&&!t&&iu.value&&(W(`That session was archived on its device.`),fu(void 0))});var yu=B(()=>ru.value?.info?.models??[]),bu=ou.state,xu=B(()=>au.state.value.agents.length?au.state.value.agents:cu.value?.agents??[]),Su=B(()=>H.value?cl(xu.value,H.value.agentId):[]),Cu=B(()=>{let e=H.value?.agentId;if(e===void 0)return[];let t=xu.value,n=new Set([e]);for(let e=!0;e;){e=!1;for(let r of t)r.ownerAgentId!==void 0&&n.has(r.ownerAgentId)&&!n.has(r.id)&&(n.add(r.id),e=!0)}let r=au.state.value.tasks,i=new Map(r.map(e=>[e.id,e])),a=new Map(t.map(e=>[e.id,e.ownerTaskId]));return r.filter(e=>n.has(e.conversationId)).map(e=>{let t=e,n=!1,r=new Set;for(;t&&!r.has(t.id);){if(r.add(t.id),t.background){n=!0;break}let e=t.owner??a.get(t.conversationId);t=e===void 0?void 0:i.get(e)}return{...e,effectiveBackground:n}})}),wu=B(()=>bu.value.running||Cu.value.some(e=>!e.effectiveBackground&&e.conversationId===H.value?.agentId)),Tu=B(()=>tl(bu.value.usage)),Eu=B(()=>{let e=bu.value.agent.model;return yu.value.find(t=>t.provider===e?.provider&&t.id===e?.modelId)}),Du=an(),Ou=0;async function ku(){let e=uu.value,t=++Ou;if(!e||!iu.value)return void(Du.value=void 0);try{let n=await e.get();t===Ou&&(Du.value=n)}catch{t===Ou&&(Du.value=void 0)}}Zn([uu,iu],()=>void ku(),{immediate:!0});var U=Kt({error:``,toast:``,drawer:!1,inspectorOverlay:!1,tab:`session`,composer:``,dialog:void 0}),Au;function W(e){U.toast=e,clearTimeout(Au),Au=setTimeout(()=>U.toast=``,4500)}async function ju(e){U.error=``;try{return await e()}catch(e){U.error=Rl(e);return}}function Mu(e){U.composer=e,setTimeout(()=>document.querySelector(`.composer textarea`)?.focus())}var Nu=e=>Intl.NumberFormat(`en`,{notation:`compact`,maximumFractionDigits:1}).format(e),Pu=e=>JSON.stringify(e,null,2),Fu=(e=``)=>xl(yu.value.find(t=>t.id===e)?.icon);function Iu(e){if(!e)return`never`;let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s ago`:t<3600?`${Math.round(t/60)}m ago`:t<86400?`${Math.round(t/3600)}h ago`:`${Math.round(t/86400)}d ago`}var Lu=O(!1);async function Ru(){wu.value&&!Lu.value&&uu.value&&(Lu.value=!0,await ju(()=>uu.value.abort(!1))&&W(`Foreground work interrupted. Background jobs continue.`),Lu.value=!1)}var zu=window.matchMedia(`(max-width: 1100px)`),Bu=O(zu.matches);zu.addEventListener(`change`,e=>Bu.value=e.matches);var Vu=B(()=>Bu.value?U.inspectorOverlay:eu.inspector);function Hu(e){e&&(U.tab=e),Bu.value?(U.drawer=!1,U.inspectorOverlay=!0):eu.inspector=!0}function Uu(){Bu.value?U.inspectorOverlay=!1:eu.inspector=!1}function Wu(){Bu.value?(U.drawer=!U.drawer)&&(U.inspectorOverlay=!1,eu.tree=!0):eu.tree=!eu.tree}function Gu(){Vu.value?Uu():Hu()}var Ku=/Mac|iPhone|iPad/.test(navigator.userAgent),qu=Ku?{tree:`Ctrl+N`,inspector:`Ctrl+T`}:{tree:`Alt+Shift+N`,inspector:`Alt+Shift+T`};function Ju(e){if(!(!(Ku?e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey:e.altKey&&e.shiftKey&&!e.ctrlKey&&!e.metaKey)||e.repeat||e.isComposing)){if(e.code===`KeyN`)return`tree`;if(e.code===`KeyT`)return`inspector`}}var Yu={class:`topbar`},Xu={class:`brand`},Zu={class:`daemon`,"data-testid":`topbar-stats`},Qu=[`title`],$u={class:`top-actions`},ed=[`disabled`],td=[`disabled`],nd=A({__name:`TopBar`,emits:[`newSession`],setup(e,{emit:t}){let n=B(()=>Xl.devices.value.filter(e=>e.status===`online`).length),r=B(()=>Xl.devices.value.reduce((e,t)=>e+(t.tree?.sessions.length??0),0)),i=B(()=>Xl.devices.value.reduce((e,t)=>e+(t.tree?.sessions.reduce((e,t)=>e+t.agents.length,0)??0),0)),a=O(!1);async function o(){let e=du.value,t=H.value;if(!e||!t||a.value)return;a.value=!0;let n=await ju(()=>e.createAgent({}));a.value=!1,n&&(fu({...t,agentId:n.id}),W(`New agent. Same session, same shared App State.`))}let s=t;return(e,t)=>(N(),P(`header`,Yu,[I(`div`,Xu,[I(`button`,{class:`icon-button tree-toggle`,"aria-label":`Toggle network`,title:`Network`,onClick:t[0]||=e=>k(U).drawer=!k(U).drawer},[L(k(Oc),{size:19})]),t[4]||=I(`img`,{class:`brandmark`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),t[5]||=I(`strong`,null,`Durable Pi`,-1)]),t[12]||=I(`span`,{class:`topbar-sep`,"aria-hidden":`true`},null,-1),I(`div`,Zu,[I(`span`,{class:C([`dot`,{off:!n.value}]),"aria-hidden":`true`},null,2),I(`span`,{class:`network-summary`,title:`${n.value} of ${k(Xl).devices.value.length} devices online`},[L(k(wc),{size:16}),R(T(n.value)+` of `+T(k(Xl).devices.value.length)+` online`,1)],8,Qu),t[8]||=I(`span`,{class:`sep`,"aria-hidden":`true`},`·`,-1),I(`span`,null,[I(`b`,null,T(r.value),1),t[6]||=R(` sessions`,-1)]),t[9]||=I(`span`,{class:`sep`,"aria-hidden":`true`},`·`,-1),I(`span`,null,[I(`b`,null,T(i.value),1),t[7]||=R(` agents`,-1)])]),I(`div`,$u,[I(`span`,{class:C([`chip connection`,{accent:k(Yl)===`live`}])},[I(`span`,{class:C([`dot`,{off:k(Yl)!==`live`}]),"aria-hidden":`true`},null,2),R(T(k(Yl)===`live`?`Connected`:`Reconnecting`),1)],2),I(`button`,{class:`icon-button`,title:`How this works`,"aria-label":`How this works`,onClick:t[1]||=e=>k(U).dialog={kind:`help`}},[L(k($s),{size:19})]),I(`button`,{class:`secondary small new-agent-button`,disabled:!k(H)||!k(iu)||a.value,title:`Start a fresh agent in this session`,onClick:o},[L(k(Mc),{size:18}),t[10]||=R(`New agent `,-1)],8,ed),I(`button`,{class:`primary small`,onClick:t[2]||=e=>s(`newSession`)},[L(k(Mc),{size:18}),t[11]||=R(`New session `,-1)]),I(`button`,{class:`icon-button inspector-toggle`,"aria-label":`Toggle inspector`,title:`Inspector`,disabled:!k(H)||!k(iu),onClick:t[3]||=e=>k(U).inspectorOverlay?k(Uu)():k(Hu)()},[L(k(kc),{size:19})],8,td)])]))}}),rd={class:`mnav`,"aria-label":`Panels`},id={key:0,class:`badge`},ad=A({__name:`MobileNav`,setup(e){function t(){U.drawer=!1,U.inspectorOverlay=!1}return(e,n)=>(N(),P(`nav`,rd,[I(`button`,{type:`button`,class:C({"is-on":!k(U).drawer&&!k(Vu)}),onClick:t},[L(k(xc),{size:18}),n[2]||=R(`Chat `,-1)],2),I(`button`,{type:`button`,class:C({"is-on":k(Vu)}),onClick:n[0]||=e=>k(Vu)?k(Uu)():k(Hu)()},[L(k(kc),{size:18}),n[3]||=R(`Details`,-1),k(Cu).length?(N(),P(`span`,id,T(k(Cu).length),1)):z(``,!0)],2),I(`button`,{type:`button`,class:C({"is-on":k(U).drawer}),onClick:n[1]||=e=>k(Wu)()},[L(k(Hc),{size:18}),n[4]||=R(`Network `,-1)],2)]))}}),od=[`width`,`height`,`aria-label`],sd=[`width`,`height`,`aria-label`],cd=A({__name:`DeviceIcon`,props:{device:{},size:{default:16}},setup(e){let t=e,n=B(()=>{let e=t.device;return e?.kind===`exe-dev`||e?.url?.includes(`.exe.xyz`)?`exe`:e?.info?.platform.startsWith(`darwin`)?`apple`:e?.kind===`local`?`laptop`:`server`}),r=B(()=>{let e={exe:`exe.dev VM`,apple:`macOS`,laptop:`This computer`,server:`Server`}[n.value];return t.device?.transport===`tunnel`?`${e} (tunnel)`:e});return(t,i)=>n.value===`exe`?(N(),P(`svg`,{key:0,class:`device-icon exe`,viewBox:`0 0 512 512`,width:e.size,height:e.size,role:`img`,"aria-label":r.value},[I(`title`,null,T(r.value),1),i[0]||=I(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M8 332.2l.9 1.4 1.5 .5 38.5-4.1 3.1 .4 2.7 2.2 8.8 13.2 10.1 12.8 1.1 2.6-.3 3.2-16.4 35.6 0 1.7 1 1.2 2.2 0 33.8-18.2 3.1-.8 3.4 1 12.4 8.7 15.3 9.4 1.5 2.1 .5 2.5-3.1 38.9 .4 1.5 1.3 .9 2.3-.7 25.9-29.2 2.1-1.3 2.8-.4 16.3 4.4 15.7 3.2 3 1.8 1.6 2.8 9.8 37.1 1.5 1.6 1.7-.1 1.1-1.1 14.5-35.6 1.8-2.5 3.4-1.5 15.7-1.1 16.1-2.4 3.2 .5 2.3 1.8 22.4 32 2.2 .9 1.4-.7 .6-1.5 1.4-39 1-2.7 2.4-2.2 14.7-6.8 13.8-7.8 3.4-.7 3 1 32.4 21 2.3 0 1.1-1.1 0-1.6-13.4-36.6-.3-2.5 .7-2.4 12.2-13.9 8.8-12.1 2.8-2 3.1-.3 38.4 5.4 2.1-.9 .5-1.5-.6-1.4-27.5-27.4-1.6-2.7-.2-3.1 4.6-15.8 2.9-15.8 1.3-2.6 2.5-1.9 37.3-12.2 1.6-1.9-.3-1.5-1.1-1-36.8-12.5-2.4-1.4-1.8-3.3-3.1-17.7 0-2.2 .9-2.4 3.1-2.9 10.6-15.3 3.3-1.8 3.4 .3 3.8 3 4.5 6.8 8.9 11.2 12.5 12.5 6.2 4.8 7.3 4.3 6.3 2.4 3.8 .3 4-.3 5.1-2.4 6.5-7 4.8-10.6 3.3-11.9 2-14.1 1.3-3.4 0-66.6-.8-2.6-2-13.6-3.8-14.6-7.5-18.7-4.7-9.4-4-6-7.2-7.1-5-2.1-6.5 0-2.2 .7-6 3.5-12 12-13.1 17.8-11.7 18.2-3.7 1.6-11.8-.1-3.1-1.6-1.8-2.9-.3-8.8-2.8-12.7-1.5-4-7.1-13.3-5.9-7.8-10.7-9.3-8.6-4.7-5.9-2-4.1-.5-6.7-.5-4.1 .5-7 2-7.3 3.8-7.5 7-2.2 3.2-2.5 5.5-2.8 10.5-.5 3.6 .1 17.1-.3 2.2-1.1 1.9-1.7 1.5-3.7 1.5-2.6 .3-27.5-10.5-14.5-4-15.7-3.2-2.6-1.3-1.9-3-9.9-37.5-.9-1.2-1.4-.4-1.3 .4-.8 1-14.7 36.1-1.8 2.1-2.2 1.2-17.8 1.4-15 2.2-3.4-.7-2.4-2.1-22-31.5-2-.9-1.5 .5-.7 1.5-1.4 38.6-.9 3-2.5 2.5-14.7 6.8-13.8 7.8-2.8 .7-3.1-.7-32.9-21.3-2.3 0-1.1 1.1-.1 1.6 13.6 36.9 0 3.1-1.2 2.6-10.8 12-9.5 12.9-2.8 2-3.2 .3-38.4-5.4-1.5 .4-.9 1.4 .6 2.1 27.6 27.6 1.2 1.8 .5 2.2-3 10.6-1.5 2.4-2.4 1.6-5.8 1-4.4 1.8-3.8 3-3 3.8-1.7 4-.7 4.7 .4 4.7 1.5 4.2 .3 .5 30.7 0 1.7 .6 1.4 1.1 1.1 3-1.1 2.9-2.7 1.6-31.1 .1-.6 1.1-1.2 3.6-.4 4.1 .4 4.2 1.2 3.5 2.5 4 3.2 3.1 4.1 2.3 5.6 1.8 2.4 2.1 .9 2.1 5.1 21.2-.6 2.1-1.2 1.9-28.5 26.5zM283.6 189.4l6.6 .5 5.6 1.2 6.2 2.2 5.9 3.1 4.6 3.4 4.8 4.5 3.5 4.4 3.4 5.8 2.6 6.2 1.6 6.4 .6 5.6-.2 6.7-1.1 6.5-1.7 5.4-2.9 6-3.6 5.5-7.1 7.3-8.4 5.4-9.4 3.5-9.9 1.3-11-1-40.4-10.4-2.8-1.1-3.1-2.4-1.7-.6-.9-1.1-.1-2.2-1.4-2.2 1.6-6.3 18.1-38.5 4.7-7.5 7.1-7.3 8.4-5.4 9.4-3.5zM173.9 198l-1.1 5.9-2.3 5.5-3.4 5-4.2 4.3-5 3.3-5.5 2.3-5.9 1.2-6 0-5.9-1.2-5.6-2.3-5-3.3-4.2-4.3-3.3-5-2.3-5.5-1.2-5.9 0-6 1.2-5.9 2.3-5.5 3.3-5 4.2-4.3 5-3.3 5.6-2.3 5.9-1.2 6 0 5.9 1.2 5.5 2.3 5 3.3 4.2 4.3 3.4 5 2.3 5.5 1.1 5.9zM315.1 213.5l-63.1 37.7 69.5-12.9 0-6.2-1-6.5-2.1-6.1zM237.3 260l-2.6 1.5 40.6 10.5 7.4 .9 7.4-.5 5.4-1.4 5.2-2.1 8.5-5.8 3.8-4.1 3.2-4.5 2.6-5 1.6-4.9zM284.5 196.9l-7.4 .5-8.1 2.3-7.3 4.1-6.3 5.5-5.8 8.5-17.4 37.1 3-.6 76.1-45.5-5.8-5-6.5-3.7-7.1-2.3zM141.1 183.6l-1.1-2.9-2-2.3-2.8-1.3-3.1-.1-2.9 1-2.3 2.1-1.3 2.8-.1 3 1 2.9 2.1 2.3 2.7 1.3 3.1 .2 2.9-1.1 2.3-2 1.3-2.8z`},null,-1)],8,od)):n.value===`apple`?(N(),P(`svg`,{key:1,class:`device-icon apple`,viewBox:`0 0 384 512`,width:e.size,height:e.size,role:`img`,"aria-label":r.value},[I(`title`,null,T(r.value),1),i[1]||=I(`path`,{fill:`currentColor`,d:`M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z`},null,-1)],8,sd)):n.value===`laptop`?(N(),F(k(hc),{key:2,class:`device-icon`,size:e.size,"aria-label":r.value},null,8,[`size`,`aria-label`])):(N(),F(k(Ic),{key:3,class:`device-icon`,size:e.size,"aria-label":r.value},null,8,[`size`,`aria-label`]))}}),ld=[`aria-level`,`aria-expanded`,`aria-selected`,`data-key`,`title`],ud=[`aria-label`],dd={key:1,class:`chev`},fd={class:`name`},pd={class:`badge`},md=[`aria-label`],hd=[`disabled`,`aria-label`],gd=[`aria-label`],_d={class:`name`},vd={class:`path`},yd={key:0,class:`dot work`,title:`Working`},bd=[`title`],xd=[`disabled`,`aria-label`],Sd=[`disabled`,`aria-label`],Cd=[`disabled`,`aria-label`],wd={class:`name`},Td={key:3,class:`meta`},Ed={key:4,class:`dot work`,title:`Working`},Dd=[`title`],Od=[`disabled`,`aria-label`],kd=A({__name:`TreeRow`,props:{node:{},depth:{},open:{type:Boolean},selected:{type:Boolean},focused:{type:Boolean},online:{type:Boolean}},emits:[`toggle`,`activate`,`action`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>n.node.children.length>0),a=B(()=>n.node.type===`device`?n.node.device:void 0),o=B(()=>n.node.type===`session`?n.node.session:void 0),s=B(()=>n.node.type===`agent`?n.node.agent:void 0),c=B(()=>o.value?o.value.agents.reduce((e,t)=>e+t.background,0):s.value?.background??0),l=B(()=>o.value?.busy||s.value?.busy),u=B(()=>{let e=a.value;if(!e)return``;let t=e.tree?.sessions.length??0;switch(e.status){case`online`:return`${t} session${t===1?``:`s`}`;case`checking`:return`checking…`;case`unauthorized`:return e.hasToken?`token rejected`:`no token`;case`mismatch`:return`identity changed`;case`incompatible`:return`incompatible`;default:return`offline · ${Iu(e.lastSeenAt)}`}}),d=B(()=>{let e=a.value?.status;return e===`online`?`on`:e===`checking`?`chk`:e===`offline`?`off`:`err`}),f=B(()=>a.value?.name??a.value?.id??o.value?.name??s.value?.name??``),p=B(()=>{if(a.value)return`${a.value.name} · ${a.value.url}${a.value.error?`\n${a.value.error}`:``}`;if(o.value)return`${o.value.name}\n${o.value.cwd}`;let e=s.value;return e.kind===`fork`?`Fork of agent #${e.parentId} at entry #${e.forkedAt}`:e.kind===`subagent`?`Subagent owned by agent #${e.ownerAgentId}`:`Root agent`});return(t,n)=>(N(),P(`div`,{class:C([`tree-row`,[e.node.type,{sel:e.selected,focus:e.focused,stale:e.node.stale}]]),style:ye({"--depth":e.depth}),role:`treeitem`,"aria-level":e.depth+1,"aria-expanded":i.value?e.open:void 0,"aria-selected":e.selected,"data-key":e.node.key,title:p.value,onClick:n[11]||=e=>r(`activate`)},[i.value?(N(),P(`button`,{key:0,class:`chev`,tabindex:`-1`,"aria-label":e.open?`Collapse ${f.value}`:`Expand ${f.value}`,onClick:n[0]||=As(e=>r(`toggle`),[`stop`])},[e.open?(N(),F(k(Xs),{key:0,size:16})):(N(),F(k(Zs),{key:1,size:16}))],8,ud)):(N(),P(`span`,dd)),a.value?(N(),P(M,{key:2},[I(`i`,{class:C([`dot`,d.value])},null,2),L(cd,{device:a.value,size:16},null,8,[`device`]),I(`b`,fd,T(f.value),1),I(`span`,pd,T(a.value.kind),1),I(`span`,{class:C([`meta`,{err:d.value===`err`}])},T(u.value),3),I(`span`,{class:`acts`,onClick:n[4]||=As(()=>{},[`stop`])},[a.value.pairing?(N(),P(`button`,{key:0,class:`icon-button`,"aria-label":`Manage credentials for ${f.value}`,title:`Manage device credentials, including while offline`,onClick:n[1]||=e=>r(`action`,`credentials`)},[L(k(mc),{size:16})],8,md)):z(``,!0),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`New session on ${f.value}`,title:`New session on this device`,onClick:n[2]||=e=>r(`action`,`new-session`)},[L(k(Mc),{size:16})],8,hd),I(`button`,{class:`icon-button`,"aria-label":`Check ${f.value}`,title:`Check connection now`,onClick:n[3]||=e=>r(`action`,`check`)},[L(k(Pc),{size:16})],8,gd)])],64)):o.value?(N(),P(M,{key:3},[L(k(sc),{class:`ico`,size:16}),I(`b`,_d,T(f.value),1),I(`span`,vd,`…/`+T(o.value.cwd.split(`/`).filter(Boolean).at(-1)),1),l.value?(N(),P(`i`,yd)):z(``,!0),c.value?(N(),P(`span`,{key:1,class:`bg-count`,title:`${c.value} background task(s)`},[n[12]||=I(`i`,{class:`dot bg`},null,-1),R(T(c.value)+` bg`,1)],8,bd)):z(``,!0),I(`span`,{class:`acts`,onClick:n[8]||=As(()=>{},[`stop`])},[I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`New agent in ${f.value}`,title:`New agent in this session`,onClick:n[5]||=e=>r(`action`,`new-agent`)},[L(k(Mc),{size:16})],8,xd),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Rename session ${f.value}`,title:`Rename session`,onClick:n[6]||=e=>r(`action`,`rename`)},[L(k(Ac),{size:16})],8,Sd),I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Archive session ${f.value}`,title:`Archive session`,onClick:n[7]||=e=>r(`action`,`archive`)},[L(k(Us),{size:16})],8,Cd)])],64)):s.value?(N(),P(M,{key:4},[s.value.kind===`fork`?(N(),F(k(uc),{key:0,class:`ico`,size:16})):s.value.kind===`subagent`?(N(),F(k(nc),{key:1,class:`ico`,size:16})):(N(),F(k(xc),{key:2,class:`ico root`,size:16})),I(`span`,wd,T(f.value),1),s.value.kind===`fork`&&s.value.forkedAt!==void 0?(N(),P(`span`,Td,`@ #`+T(s.value.forkedAt),1)):z(``,!0),l.value?(N(),P(`i`,Ed)):z(``,!0),c.value?(N(),P(`span`,{key:5,class:`bg-count`,title:`${c.value} background task(s)`},[n[13]||=I(`i`,{class:`dot bg`},null,-1),R(T(c.value),1)],8,Dd)):z(``,!0),I(`span`,{class:`acts`,onClick:n[10]||=As(()=>{},[`stop`])},[I(`button`,{class:`icon-button`,disabled:!e.online,"aria-label":`Rename agent ${f.value}`,title:`Rename agent`,onClick:n[9]||=e=>r(`action`,`rename`)},[L(k(Ac),{size:16})],8,Od)])],64)):z(``,!0)],14,ld))}}),Ad={class:`tree-head`},jd=[`title`],Md={key:0,class:`hint tree-empty`,"data-testid":`tree-empty`},Nd={key:1,class:`panel-rail`,"aria-label":`Network (collapsed)`},Pd=[`title`],Fd=[`title`,`aria-label`,`onClick`],Id=A({__name:`NetworkSidebar`,setup(e){let t=B(()=>{let e=[],t=(n,r,i)=>{for(let a of n)e.push({node:a,depth:r,parent:i}),a.children.length&&Ql.value.has(a.key)&&t(a.children,r+1,a.key)};return t(Xl.tree.value,0),e}),n=O(),r=O(),i=e=>Xl.devices.value.find(t=>t.id===(e.type===`device`?e.device.id:e.deviceId)),a=e=>i(e)?.status===`online`,o=e=>e.type===`agent`&&H.value?.deviceId===e.deviceId&&H.value.sessionId===e.sessionId&&H.value.agentId===e.agent.id;function s(e){if(n.value=e.key,e.type===`device`)return hu(e.key);if(e.type===`agent`)return fu({deviceId:e.deviceId,sessionId:e.sessionId,agentId:e.agent.id});let t=e.session.agents.find(e=>e.kind===`root`)??e.session.agents[0];hu(e.key,!0),t&&fu({deviceId:e.deviceId,sessionId:e.session.id,agentId:t.id})}async function c(e,t){let n=i(e);if(!n)return;let r=Fl(n.id);if(e.type===`device`){t===`new-session`?U.dialog={kind:`new-session`,deviceId:n.id}:t===`check`?await ju(()=>Ll.check(n.id)):t===`credentials`&&(U.dialog={kind:`credentials`,deviceId:n.id});return}if(e.type===`session`){let i=e.session;if(t===`new-agent`){let e=await ju(()=>r.session(i.id).createAgent({}));e&&(fu({deviceId:n.id,sessionId:i.id,agentId:e.id}),W(`New agent. Same session, same shared App State.`))}else t===`rename`?U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:i.name,submit:`Save name`,run:e=>r.session(i.id).rename(e)}:t===`archive`&&(U.dialog={kind:`prompt`,title:`Archive ${i.name}?`,hint:`Stops all of its work and moves its files to archive/ on ${n.id}. Nothing is deleted.`,submit:`Archive session`,danger:!0,run:async()=>{await r.session(i.id).archive(),H.value?.sessionId===i.id&&fu(void 0)}});return}let a=e.agent;t===`rename`&&(U.dialog={kind:`prompt`,title:`Rename agent`,label:`Agent name`,value:a.named?a.name:``,placeholder:a.name,submit:`Save name`,run:t=>r.agent(e.sessionId,a.id).rename(t)})}function l(e){let i=t.value.findIndex(e=>e.node.key===n.value),a=t.value[Math.max(0,Math.min(t.value.length-1,(i<0?0:i)+e))];a&&(n.value=a.node.key,jn(()=>r.value?.querySelector(`[data-key="${CSS.escape(a.node.key)}"]`)?.scrollIntoView({block:`nearest`})))}function u(){n.value??=t.value[0]?.node.key}function d(e){let r=t.value.find(e=>e.node.key===n.value);if(e.key===`ArrowDown`)l(1);else if(e.key===`ArrowUp`)l(-1);else if(e.key===`ArrowRight`&&r){if(!r.node.children.length)return;Ql.value.has(r.node.key)?l(1):hu(r.node.key,!0)}else if(e.key===`ArrowLeft`&&r)r.node.children.length&&Ql.value.has(r.node.key)?hu(r.node.key,!1):r.parent&&(n.value=r.parent);else if((e.key===`Enter`||e.key===` `)&&r)s(r.node);else return;e.preventDefault()}return(e,i)=>(N(),P(`aside`,{class:C([`network-sidebar`,{open:k(U).drawer,collapsed:!k(eu).tree&&!k(U).drawer}]),"aria-label":`Network`},[k(eu).tree||k(U).drawer?(N(),P(M,{key:0},[I(`header`,Ad,[I(`span`,null,[L(k(wc),{size:16}),i[3]||=R(`NETWORK`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Pair a device`,title:`Pair a device`,onClick:i[0]||=e=>k(U).dialog={kind:`pair`}},[L(k(_c),{size:15})]),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse network`,title:`Collapse network (${k(qu).tree})`,onClick:i[1]||=e=>(k(eu).tree=!1,k(U).drawer=!1)},[L(k(Ec),{size:18})],8,jd)]),I(`div`,{ref_key:`list`,ref:r,class:`tree-list`,role:`tree`,tabindex:`0`,"aria-label":`Devices, sessions and agents`,onKeydown:d,onFocus:u},[(N(!0),P(M,null,j(t.value,e=>(N(),F(kd,{key:e.node.key,node:e.node,depth:e.depth,open:k(Ql).has(e.node.key),selected:o(e.node),focused:n.value===e.node.key,online:a(e.node),onToggle:t=>k(hu)(e.node.key),onActivate:t=>s(e.node),onAction:t=>c(e.node,t)},null,8,[`node`,`depth`,`open`,`selected`,`focused`,`online`,`onToggle`,`onActivate`,`onAction`]))),128)),t.value.length?z(``,!0):(N(),P(`p`,Md,[...i[4]||=[R(` No devices yet. Declare them in `,-1),I(`code`,null,`dpi-network.yaml`,-1),R(` (start from `,-1),I(`code`,null,`dpi-network.example.yaml`,-1),R(`), then run `,-1),I(`code`,null,`just net up <id>`,-1),R(`. `,-1)]]))],544)],64)):(N(),P(`div`,Nd,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand network`,title:`Expand network (${k(qu).tree})`,onClick:i[2]||=e=>k(eu).tree=!0},[L(k(Dc),{size:18})],8,Pd),(N(!0),P(M,null,j(k(Xl).devices.value,e=>(N(),P(`button`,{key:e.id,class:`rail-device`,title:`${e.id} · ${e.status}`,"aria-label":`Show ${e.id}`,onClick:t=>(k(eu).tree=!0,k(hu)(e.id,!0))},[L(cd,{device:e,size:20},null,8,[`device`]),I(`i`,{class:C([`dot`,e.status===`online`?`on`:e.status===`checking`?`chk`:e.status===`offline`?`off`:`err`])},null,2)],8,Fd))),128))]))],2))}});function Ld(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Rd=Ld();function zd(e){Rd=e}var Bd={exec:()=>null};function G(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(Hd.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var Vd=(()=>{try{return!0}catch{return!1}})(),Hd={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,`i`),blockquoteBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ud=/^(?:[ \t]*(?:\n|$))+/,Wd=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Gd=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Kd=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,qd=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Jd=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Yd=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Xd=G(Yd).replace(/bull/g,Jd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),Zd=G(Yd).replace(/bull/g,Jd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Qd=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,$d=/^[^\n]+/,ef=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,tf=G(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,ef).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),nf=G(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Jd).getRegex(),rf=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,af=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,of=G(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,af).replace(`tag`,rf).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),sf=G(Qd).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex(),cf={blockquote:G(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,sf).getRegex(),code:Wd,def:tf,fences:Gd,heading:qd,hr:Kd,html:of,lheading:Xd,list:nf,newline:Ud,paragraph:sf,table:Bd,text:$d},lf=G(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex(),uf={...cf,lheading:Zd,table:lf,paragraph:G(Qd).replace(`hr`,Kd).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,lf).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,rf).getRegex()},df={...cf,html:G(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,af).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Bd,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:G(Qd).replace(`hr`,Kd).replace(`heading`,` *#{1,6} *[^
|
|
16
16
|
]`).replace(`lheading`,Xd).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},ff=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,pf=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,mf=/^( {2,}|\\)\n(?!\s*$)/,hf=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,gf=/[\p{P}\p{S}]/u,_f=/[\s\p{P}\p{S}]/u,vf=/[^\s\p{P}\p{S}]/u,yf=G(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,_f).getRegex(),bf=/(?!~)[\p{P}\p{S}]/u,xf=/(?!~)[\s\p{P}\p{S}]/u,Sf=/(?:[^\s\p{P}\p{S}]|~)/u,Cf=G(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,Vd?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),wf=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Tf=G(wf,`u`).replace(/punct/g,gf).getRegex(),Ef=G(wf,`u`).replace(/punct/g,bf).getRegex(),Df=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Of=G(Df,`gu`).replace(/notPunctSpace/g,vf).replace(/punctSpace/g,_f).replace(/punct/g,gf).getRegex(),kf=G(Df,`gu`).replace(/notPunctSpace/g,Sf).replace(/punctSpace/g,xf).replace(/punct/g,bf).getRegex(),Af=G(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,vf).replace(/punctSpace/g,_f).replace(/punct/g,gf).getRegex(),jf=G(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,gf).getRegex(),Mf=G(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,vf).replace(/punctSpace/g,_f).replace(/punct/g,gf).getRegex(),Nf=G(/\\(punct)/,`gu`).replace(/punct/g,gf).getRegex(),Pf=G(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ff=G(af).replace(`(?:-->|$)`,`-->`).getRegex(),If=G(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,Ff).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Lf=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Rf=G(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Lf).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),zf=G(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Lf).replace(`ref`,ef).getRegex(),Bf=G(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,ef).getRegex(),Vf=G(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,zf).replace(`nolink`,Bf).getRegex(),Hf=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Uf={_backpedal:Bd,anyPunctuation:Nf,autolink:Pf,blockSkip:Cf,br:mf,code:pf,del:Bd,delLDelim:Bd,delRDelim:Bd,emStrongLDelim:Tf,emStrongRDelimAst:Of,emStrongRDelimUnd:Af,escape:ff,link:Rf,nolink:Bf,punctuation:yf,reflink:zf,reflinkSearch:Vf,tag:If,text:hf,url:Bd},Wf={...Uf,link:G(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Lf).getRegex(),reflink:G(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Lf).getRegex()},Gf={...Uf,emStrongRDelimAst:kf,emStrongLDelim:Ef,delLDelim:jf,delRDelim:Mf,url:G(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,Hf).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:G(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,Hf).getRegex()},Kf={...Gf,br:G(mf).replace(`{2,}`,`*`).getRegex(),text:G(Gf.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},qf={normal:cf,gfm:uf,pedantic:df},Jf={normal:Uf,gfm:Gf,breaks:Kf,pedantic:Wf},Yf={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Xf=e=>Yf[e];function Zf(e,t){if(t){if(Hd.escapeTest.test(e))return e.replace(Hd.escapeReplace,Xf)}else if(Hd.escapeTestNoEncode.test(e))return e.replace(Hd.escapeReplaceNoEncode,Xf);return e}function Qf(e){try{e=encodeURI(e).replace(Hd.percentDecode,`%`)}catch{return null}return e}function $f(e,t){let n=e.replace(Hd.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(Hd.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(Hd.slashPipe,`|`);return n}function ep(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function tp(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function np(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function rp(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`);r.state.inLink=!0;let c={type:e[0].charAt(0)===`!`?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,c}function ip(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
17
17
|
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return r.length>=i.length?e.slice(i.length):e}).join(`
|
|
18
18
|
`)}var ap=class{options;rules;lexer;constructor(e){this.options=e||Rd}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(this.rules.other.codeRemoveIndent,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:ep(e,`
|
|
@@ -72,9 +72,9 @@ ${e}</tr>
|
|
|
72
72
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Zf(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Qf(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+Zf(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Qf(e);if(i===null)return Zf(n);e=i;let a=`<img src="${e}" alt="${Zf(n)}"`;return t&&(a+=` title="${Zf(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Zf(e.text)}},cp=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},lp=class e{options;renderer;textRenderer;constructor(e){this.options=e||Rd,this.options.renderer=this.options.renderer||new sp,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new cp}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},up=class{options;block;constructor(e){this.options=e||Rd}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?op.lex:op.lexInline}provideParser(e=this.block){return e?lp.parse:lp.parseInline}},dp=new class{defaults=Ld();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=lp;Renderer=sp;TextRenderer=cp;Lexer=op;Tokenizer=ap;Hooks=up;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new sp(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new ap(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new up;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];t[r]=up.passThroughHooks.has(n)?e=>{if(this.defaults.async&&up.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return op.lex(e,t??this.defaults)}parser(e,t){return lp.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?op.lex:op.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?lp.parse:lp.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?op.lex:op.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?lp.parse:lp.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
73
73
|
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Zf(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function K(e,t){return dp.parse(e,t)}K.options=K.setOptions=function(e){return dp.setOptions(e),K.defaults=dp.defaults,zd(K.defaults),K},K.getDefaults=Ld,K.defaults=Rd,K.use=function(...e){return dp.use(...e),K.defaults=dp.defaults,zd(K.defaults),K},K.walkTokens=function(e,t){return dp.walkTokens(e,t)},K.parseInline=dp.parseInline,K.Parser=lp,K.parser=lp.parse,K.Renderer=sp,K.TextRenderer=cp,K.Lexer=op,K.lexer=op.lex,K.Tokenizer=ap,K.Hooks=up,K.parse=K,K.options,K.setOptions,K.use,K.walkTokens,K.parseInline,lp.parse,op.lex;function fp(e,t){this.v=e,this.k=t}function pp(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function mp(e){if(Array.isArray(e))return e}function hp(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function gp(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
74
74
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _p(e,t){return mp(e)||hp(e,t)||vp(e,t)||gp()}function vp(e,t){if(e){if(typeof e==`string`)return pp(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pp(e,t):void 0}}function yp(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof fp;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`&&o.k?t:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(!!a.done,n)},function(e){r(`throw`,e)})}catch(e){i(2,e)}}function i(e,i){e===2?t.reject(i):t.resolve({value:i,done:e}),(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}yp.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},yp.prototype.next=function(e){return this._invoke(`next`,e)},yp.prototype.throw=function(e){return this._invoke(`throw`,e)},yp.prototype.return=function(e){return this._invoke(`return`,e)};var bp=Object.entries,xp=Object.setPrototypeOf,Sp=Object.isFrozen,Cp=Object.getPrototypeOf,wp=Object.getOwnPropertyDescriptor,Tp=Object.freeze,Ep=Object.seal,Dp=Object.create,Op=typeof Reflect<`u`&&Reflect,kp=Op.apply,Ap=Op.construct;Tp||=function(e){return e},Ep||=function(e){return e},kp||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},Ap||=function(e){return new e(...[...arguments].slice(1))};var jp=Zp(Array.prototype.forEach);Array.prototype.indexOf;var Mp=Zp(Array.prototype.lastIndexOf),Np=Zp(Array.prototype.pop),Pp=Zp(Array.prototype.push);Array.prototype.slice;var Fp=Zp(Array.prototype.splice),Ip=Array.isArray,Lp=Zp(String.prototype.toLowerCase),Rp=Zp(String.prototype.toString),zp=Zp(String.prototype.match),Bp=Zp(String.prototype.replace),Vp=Zp(String.prototype.indexOf),Hp=Zp(String.prototype.trim),Up=Zp(Number.prototype.toString),Wp=Zp(Boolean.prototype.toString),Gp=typeof BigInt>`u`?null:Zp(BigInt.prototype.toString),Kp=typeof Symbol>`u`?null:Zp(Symbol.prototype.toString),qp=Zp(Object.prototype.hasOwnProperty),Jp=Zp(Object.prototype.toString),Yp=Zp(RegExp.prototype.test),Xp=Qp(TypeError);function Zp(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return kp(e,t,n)}}function Qp(e){return function(){return Ap(e,[...arguments])}}function q(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Lp;if(xp&&xp(e,null),!Ip(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Sp(t)||(t[r]=e),i=e)}e[i]=!0}return e}function $p(e){for(let t=0;t<e.length;t++)qp(e,t)||(e[t]=null);return e}function em(e){let t=Dp(null);for(let r of bp(e)){var n=_p(r,2);let i=n[0],a=n[1];qp(e,i)&&(t[i]=Ip(a)?$p(a):a&&typeof a==`object`&&a.constructor===Object?em(a):a)}return t}function tm(e){switch(typeof e){case`string`:return e;case`number`:return Up(e);case`boolean`:return Wp(e);case`bigint`:return Gp?Gp(e):`0`;case`symbol`:return Kp?Kp(e):`Symbol()`;case`undefined`:return Jp(e);case`function`:case`object`:{if(e===null)return Jp(e);let t=e,n=nm(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:Jp(e)}return Jp(e)}default:return Jp(e)}}function nm(e,t){for(;e!==null;){let n=wp(e,t);if(n){if(n.get)return Zp(n.get);if(typeof n.value==`function`)return Zp(n.value)}e=Cp(e)}function n(){return null}return n}function rm(e){try{return Yp(e,``),!0}catch{return!1}}var im=Tp(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),am=Tp(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),om=Tp([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),sm=Tp([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),cm=Tp(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),lm=Tp([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),um=Tp([`#text`]),dm=Tp(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),fm=Tp(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.pointer-events.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.vector-effect.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),pm=Tp(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),mm=Tp([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),hm=Ep(/{{[\w\W]*|^[\w\W]*}}/g),gm=Ep(/<%[\w\W]*|^[\w\W]*%>/g),_m=Ep(/\${[\w\W]*/g),vm=Ep(/^data-[\-\w.\u00B7-\uFFFF]+$/),ym=Ep(/^aria-[\-\w]+$/),bm=Ep(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),xm=Ep(/^(?:\w+script|data):/i),Sm=Ep(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Cm=Ep(/^html$/i),wm=Ep(/^[a-z][.\w]*(-[.\w]+)+$/i),Tm=Ep(/<[/\w!]/g),Em=Ep(/<[/\w]/g),Dm=Ep(/<\/no(script|embed|frames)/i),Om=Ep(/\/>/i),km={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Am=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`],jm=Tp(q({},Am)),Mm=function(){let e={};return jp(Am,t=>{e[t]=Ep(RegExp(`</`+t+`(?=[\\t\\n\\f\\r />])`,`i`))}),Tp(e)}(),Nm=function(){return typeof window>`u`?null:window},Pm=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Fm=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Im=function(e,t,n,r){return qp(e,t)&&Ip(e[t])?q(r.base?em(r.base):{},e[t],r.transform):n},Lm=function(e,t,n){let r=qp(e,t)?e[t]:void 0;return r&&typeof r==`object`?em(r):n()};function Rm(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Nm(),t=e=>Rm(e);if(t.version=`3.4.16`,t.removed=[],!e||!e.document||e.document.nodeType!==km.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=nm(d,`cloneNode`),p=nm(d,`remove`),m=nm(d,`removeAttributeNode`),h=nm(d,`nextSibling`),g=nm(d,`childNodes`),_=nm(d,`parentNode`),v=nm(d,`shadowRoot`),y=nm(d,`attributes`),b=o&&o.prototype?nm(o.prototype,`nodeType`):null,ee=o&&o.prototype?nm(o.prototype,`nodeName`):null,te=o&&o.prototype?nm(o.prototype,`ownerDocument`):null,x=function(e){return b?b(e):e.nodeType},ne=function(e){return ee?ee(e):e.nodeName};if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let re,ie=``,ae,oe=!1,se=0,ce=function(){if(se>0)throw Xp(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},le=function(e){ce(),se++;try{return re.createHTML(e)}finally{se--}},ue=function(e){ce(),se++;try{return re.createScriptURL(e)}finally{se--}},de=function(){return oe||=(ae=Pm(u,i),!0),ae},fe=n,S=fe.implementation,pe=fe.createNodeIterator,me=fe.createDocumentFragment,he=fe.getElementsByTagName,ge=r.importNode,_e=Fm();t.isSupported=typeof bp==`function`&&typeof _==`function`&&S&&S.createHTMLDocument!==void 0;let ve=hm,ye=gm,be=_m,xe=vm,Se=ym,Ce=xm,C=Sm,we=wm,Te=bm,Ee=null,De=q({},[...im,...am,...om,...cm,...um]),w=null,Oe=q({},[...dm,...fm,...pm,...mm]),ke=Object.seal(Dp(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ae=null,je=null,Me=Object.seal(Dp(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),T=!0,Ne=!0,Pe=!1,Fe=!0,Ie=!1,Le=!0,E=!1,Re=!1,ze=null,Be=null,Ve=!1,He=!1,Ue=!1,We=!1,Ge=!0,Ke=!1,qe=`user-content-`,Je=!0,Ye=!1,Xe={},Ze=null,Qe=q({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),$e=null,et=q({},[`audio`,`video`,`img`,`source`,`image`,`track`]),tt=null,nt=q({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),rt=`http://www.w3.org/1998/Math/MathML`,it=`http://www.w3.org/2000/svg`,at=`http://www.w3.org/1999/xhtml`,ot=at,st=!1,ct=null,lt=q({},[rt,it,at],Rp),ut=Tp([`mi`,`mo`,`mn`,`ms`,`mtext`]),dt=q({},ut),ft=Tp([`annotation-xml`]),pt=q({},ft),mt=q({},[`title`,`style`,`font`,`a`,`script`]),ht=null,gt=[`application/xhtml+xml`,`text/html`],_t=null,vt=null,yt=n.createElement(`form`),bt=function(e){return e instanceof RegExp||e instanceof Function},xt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(vt&&vt===e)return;(!e||typeof e!=`object`)&&(e={}),e=em(e),ht=gt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,_t=ht===`application/xhtml+xml`?Rp:Lp,Ee=Im(e,`ALLOWED_TAGS`,De,{transform:_t}),w=Im(e,`ALLOWED_ATTR`,Oe,{transform:_t}),ct=Im(e,`ALLOWED_NAMESPACES`,lt,{transform:Rp}),tt=Im(e,`ADD_URI_SAFE_ATTR`,nt,{transform:_t,base:nt}),$e=Im(e,`ADD_DATA_URI_TAGS`,et,{transform:_t,base:et}),Ze=Im(e,`FORBID_CONTENTS`,Qe,{transform:_t}),Ae=Im(e,`FORBID_TAGS`,em({}),{transform:_t}),je=Im(e,`FORBID_ATTR`,em({}),{transform:_t}),Xe=qp(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?em(e.USE_PROFILES):e.USE_PROFILES:!1,T=e.ALLOW_ARIA_ATTR!==!1,Ne=e.ALLOW_DATA_ATTR!==!1,Pe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ie=e.SAFE_FOR_TEMPLATES||!1,Le=e.SAFE_FOR_XML!==!1,E=e.WHOLE_DOCUMENT||!1,He=e.RETURN_DOM||!1,Ue=e.RETURN_DOM_FRAGMENT||!1,We=e.RETURN_TRUSTED_TYPE||!1,Ve=e.FORCE_BODY||!1,Ge=e.SANITIZE_DOM!==!1,Ke=e.SANITIZE_NAMED_PROPS||!1,Je=e.KEEP_CONTENT!==!1,Ye=e.IN_PLACE||!1,Te=rm(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:bm,ot=typeof e.NAMESPACE==`string`?e.NAMESPACE:at,dt=Lm(e,`MATHML_TEXT_INTEGRATION_POINTS`,()=>q({},ut)),pt=Lm(e,`HTML_INTEGRATION_POINTS`,()=>q({},ft));let t=Lm(e,`CUSTOM_ELEMENT_HANDLING`,()=>Dp(null));if(ke=Dp(null),qp(t,`tagNameCheck`)&&bt(t.tagNameCheck)&&(ke.tagNameCheck=t.tagNameCheck),qp(t,`attributeNameCheck`)&&bt(t.attributeNameCheck)&&(ke.attributeNameCheck=t.attributeNameCheck),qp(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(ke.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),Ep(ke),Ie&&(Ne=!1),Ue&&(He=!0),Xe&&(Ee=q({},um),w=Dp(null),Xe.html===!0&&(q(Ee,im),q(w,dm)),Xe.svg===!0&&(q(Ee,am),q(w,fm),q(w,mm)),Xe.svgFilters===!0&&(q(Ee,om),q(w,fm),q(w,mm)),Xe.mathMl===!0&&(q(Ee,cm),q(w,pm),q(w,mm))),Me.tagCheck=null,Me.attributeCheck=null,qp(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?Me.tagCheck=e.ADD_TAGS:Ip(e.ADD_TAGS)&&(Ee===De&&(Ee=em(Ee)),q(Ee,e.ADD_TAGS,_t))),qp(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?Me.attributeCheck=e.ADD_ATTR:Ip(e.ADD_ATTR)&&(w===Oe&&(w=em(w)),q(w,e.ADD_ATTR,_t))),qp(e,`ADD_FORBID_CONTENTS`)&&Ip(e.ADD_FORBID_CONTENTS)&&(Ze===Qe&&(Ze=em(Ze)),q(Ze,e.ADD_FORBID_CONTENTS,_t)),Je&&(Ee[`#text`]=!0),E&&q(Ee,[`html`,`head`,`body`]),Ee.table&&(q(Ee,[`tbody`]),delete Ae.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw Xp(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw Xp(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=re;re=e.TRUSTED_TYPES_POLICY;try{ie=le(``)}catch(e){throw re=t,e}}else e.TRUSTED_TYPES_POLICY===null?(re=void 0,ie=``):(re===void 0&&(re=de()),re&&typeof ie==`string`&&(ie=le(``)));Tp&&Tp(e),vt=e},St=q({},[...am,...om,...sm]),Ct=q({},[...cm,...lm]),wt=function(e,t,n){return t.namespaceURI===at?e===`svg`:t.namespaceURI===rt?e===`svg`&&(n===`annotation-xml`||dt[n]):!!St[e]},Tt=function(e,t,n){return t.namespaceURI===at?e===`math`:t.namespaceURI===it?e===`math`&&pt[n]:!!Ct[e]},Et=function(e,t,n){return t.namespaceURI===it&&!pt[n]||t.namespaceURI===rt&&!dt[n]?!1:!Ct[e]&&(mt[e]||!St[e])},Dt=function(e){let t=_(e);(!t||!t.tagName)&&(t={namespaceURI:ot,tagName:`template`});let n=Lp(e.tagName),r=Lp(t.tagName);return ct[e.namespaceURI]?e.namespaceURI===it?wt(n,t,r):e.namespaceURI===rt?Tt(n,t,r):e.namespaceURI===at?Et(n,t,r):!!(ht===`application/xhtml+xml`&&ct[e.namespaceURI]):!1},Ot=function(e){Pp(t.removed,{element:e});try{_(e).removeChild(e)}catch{if(p(e),!_(e))throw Xp(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},kt=function(e,t,n){try{m(e,t)}catch{try{e.removeAttribute(n)}catch{}}},At=function(e){Nt(e);let t=g(e);if(t){let e=[];jp(t,t=>{Pp(e,t)}),jp(e,e=>{try{p(e)}catch{}})}let n=y(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;typeof i==`string`&&kt(e,r,i)}},jt=function(e,n,r){if(!r)try{r=n.getAttributeNode(e)}catch{r=null}Pp(t.removed,{attribute:r||null,from:n});try{r?m(n,r):n.removeAttribute(e)}catch{try{n.removeAttribute(e)}catch{}}if(e===`is`){if(He||Ue)try{Ot(n)}catch{}else try{n.setAttribute(e,``)}catch{}}},Mt=function(e){let t=y(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;typeof i!=`string`||w[_t(i)]||kt(e,r,i)}},Nt=function(e){let t=[e];for(;t.length>0;){let e=t.pop();x(e)===km.element&&Mt(e);let n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Pt=function(e,t){return Le?e===`patchsrc`||e===`for`&&t!==`label`&&t!==`output`:!1},Ft=function(e){if(!Le)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=x(e);if(n===km.processingInstruction||n===km.comment&&Yp(Em,e.data)){try{p(e)}catch{}continue}if(n===km.element){let t=e,n=_t(ne(e));try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&Pt(`for`,n)&&t.removeAttribute(`for`)}catch{}}let r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},It=function(e){let t=null,r=null;if(Ve)e=`<remove></remove>`+e;else{let t=zp(e,/^[\r\n\t ]+/);r=t&&t[0]}ht===`application/xhtml+xml`&&ot===at&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=re?le(e):e;if(ot===at)try{t=new l().parseFromString(i,ht)}catch{}if(!t||!t.documentElement){t=S.createDocument(ot,`template`,null);try{t.documentElement.innerHTML=st?ie:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),ot===at?he.call(t,E?`html`:`body`)[0]:E?t.documentElement:a},Lt=function(e){let t=te?te(e):e.ownerDocument;return pe.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Rt=function(e){return e=Bp(e,ve,` `),e=Bp(e,ye,` `),e=Bp(e,be,` `),e},zt=function(e){e.normalize();let t=te?te(e):e.ownerDocument,n=pe.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=Rt(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&jp(i,e=>{Vt(e.content)&&zt(e.content)})},Bt=function(e){let t=ee?ee(e):null;return typeof t!=`string`||_t(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==y(e)||typeof e.removeAttribute!=`function`||typeof e.removeAttributeNode!=`function`||typeof e.getAttributeNode!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==b(e)||e.childNodes!==g(e)},Vt=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return b(e)===km.documentFragment}catch{return!1}},Ht=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return typeof b(e)==`number`}catch{return!1}};function Ut(e,n,r){e.length!==0&&jp(e,e=>{e.call(t,n,r,vt)})}let Wt=function(e,t){return!!(Le&&e.hasChildNodes()&&!Ht(e.firstElementChild)&&Yp(Tm,e.textContent)&&Yp(Tm,e.innerHTML)||Le&&e.namespaceURI===at&&jm[t]&&(Ht(e.firstElementChild)||typeof e.textContent==`string`&&Yp(Mm[t],e.textContent))||e.nodeType===km.processingInstruction||Le&&e.nodeType===km.comment&&Yp(Em,e.data))},Gt=function(e,t){return e instanceof RegExp?Yp(e,t):e instanceof Function&&!!e(t,...[...arguments].slice(2))},Kt=function(e,t,n){if(!Ae[t]&&Qt(t)&&Gt(ke.tagNameCheck,t))return!1;if(Je&&!Ze[t]){let t=_(e),r=g(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?f(r[a],!0):r[a];t.insertBefore(i,h(e))}}}return Ot(e),!0},qt=function(e,t,n,r){return e.length===0?t:t===n||t===r?em(t):t},Jt=function(e,t){return e===t||_(e)!==null?!1:(Ye&&Nt(e),!0)},Yt=function(e,n){if(Ut(_e.beforeSanitizeElements,e,null),Jt(e,n))return!0;if(Bt(e))return Ot(e),!0;let r=_t(ne(e));if(Ee=qt(_e.uponSanitizeElement,Ee,De,ze),Ut(_e.uponSanitizeElement,e,{tagName:r,allowedTags:Ee}),Jt(e,n))return!0;if(Wt(e,r))return Ot(e),!0;if(Ae[r]||!(Me.tagCheck instanceof Function&&Me.tagCheck(r))&&!Ee[r]){let t=Kt(e,r,n);return t===!1&&(Ut(_e.afterSanitizeElements,e,null),Jt(e,n))?!0:t}if(x(e)===km.element&&!Dt(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&Yp(Dm,e.innerHTML))return Ot(e),!0;if(Ie&&e.nodeType===km.text){let n=Rt(e.textContent);e.textContent!==n&&(Pp(t.removed,{element:e.cloneNode()}),e.textContent=n)}return Ut(_e.afterSanitizeElements,e,null),Jt(e,n)},Xt=function(e,t,r){if(je[t]||Pt(t,e)||Ge&&(t===`id`||t===`name`)&&(r in n||r in yt))return!1;let i=w[t]||Me.attributeCheck instanceof Function&&Me.attributeCheck(t,e);return Ne&&Yp(xe,t)||T&&Yp(Se,t)?!0:i?tt[t]||Yp(Te,Bp(r,C,``))||(t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&Vp(r,`data:`)===0&&$e[e]||Pe&&!Yp(Ce,Bp(r,C,``))?!0:!r:Qt(e)&&Gt(ke.tagNameCheck,e)&&Gt(ke.attributeNameCheck,t,e)||t===`is`&&ke.allowCustomizedBuiltInElements&&Gt(ke.tagNameCheck,r)},Zt=q({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),Qt=function(e){return!Zt[Lp(e)]&&Yp(we,e)},$t=function(e,t,n,r){if(re&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return le(r);case`TrustedScriptURL`:return ue(r)}return r},D=function(e,t,n,r){try{return n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),!Bt(e)||(Ot(e),!1)}catch{return jt(t,e),!1}},en=function(e,n){if(Ut(_e.beforeSanitizeAttributes,e,null),Jt(e,n))return;let r=e.attributes;if(!r||Bt(e))return;w=qt(_e.uponSanitizeAttribute,w,Oe,Be);let i={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:w,forceKeepAttr:void 0},a=r.length,o=_t(e.nodeName);for(;a--;){let n=r[a],s=n.name,c=n.namespaceURI,l=n.value,u=_t(s),d=l,f=s===`value`?d:Hp(d),p=!1;if(i.attrName=u,i.attrValue=f,i.keepAttr=!0,i.forceKeepAttr=void 0,Ut(_e.uponSanitizeAttribute,e,i),f=i.attrValue,Ke&&(u===`id`||u===`name`)&&Vp(f,qe)!==0&&(jt(s,e,n),f=qe+f,p=!0),Le&&Yp(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){jt(s,e,n);continue}if(u===`attributename`&&zp(f,`href`)){jt(s,e,n);continue}if(!i.forceKeepAttr){if(!i.keepAttr){jt(s,e,n);continue}if(!Fe&&Yp(Om,f)){jt(s,e,n);continue}if(Ie&&(f=Rt(f)),!Xt(o,u,f)){jt(s,e,n);continue}f=$t(o,u,c,f),f!==d&&D(e,s,c,f)&&p&&Np(t.removed)}}Ut(_e.afterSanitizeAttributes,e,null),Jt(e,n)},tn=function(e){let t=null,n=Lt(e);for(Ut(_e.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(Ut(_e.uponSanitizeShadowNode,t,null),Yt(t,e),en(t,e),Vt(t.content)&&tn(t.content),x(t)===km.element){let e=v(t);Vt(e)&&(nn(e),tn(e))}Ut(_e.afterSanitizeShadowDOM,e,null)},nn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){tn(e.shadow);continue}let n=e.node,r=x(n)===km.element,i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=ee?ee(n):null;if(typeof e==`string`&&_t(e)===`template`){let e=n.content;Vt(e)&&t.push({node:e,shadow:null})}}if(r){let e=v(n);Vt(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(st=!e,st&&(e=`<!-->`),typeof e!=`string`&&!Ht(e)&&(e=tm(e),typeof e!=`string`))throw Xp(`dirty is not a string, aborting`);if(!t.isSupported)return e;Re?(Ee=ze,w=Be):xt(n),(_e.uponSanitizeElement.length>0||_e.uponSanitizeAttribute.length>0)&&(Ee=em(Ee)),_e.uponSanitizeAttribute.length>0&&(w=em(w)),t.removed=[];let c=Ye&&typeof e!=`string`&&Ht(e);if(c){Ft(e);let t=ne(e);if(typeof t==`string`){let n=_t(t);if(!Ee[n]||Ae[n])throw At(e),Xp(`root node is forbidden and cannot be sanitized in-place`)}if(Bt(e))throw At(e),Xp(`root node is clobbered and cannot be sanitized in-place`);try{nn(e)}catch(t){throw At(e),t}}else if(Ht(e))i=It(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===km.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),nn(i);else{if(!He&&!Ie&&!E&&e.indexOf(`<`)===-1)return re&&We?le(e):e;if(i=It(e),!i)return He?null:We?ie:``}i&&Ve&&Ot(i.firstChild);let l=c?e:i;try{let e=Lt(l);for(;o=e.nextNode();)Yt(o,l),en(o,l),Vt(o.content)&&tn(o.content)}catch(n){throw c&&(At(e),jp(t.removed,e=>{e.element&&Nt(e.element)})),n}if(c){let n=!1;if(jp(t.removed,t=>{t.element&&(t.element===e&&(n=!0),Nt(t.element))}),n)throw Xp(`a node selected for removal could not be safely returned; refusing to sanitize in place`);return Ie&&zt(e),e}if(He){if(Ie&&zt(i),Ue)for(s=me.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(w.shadowroot||w.shadowrootmode)&&(s=ge.call(r,s,!0)),s}let u=E?i.outerHTML:i.innerHTML;return E&&Ee[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&Yp(Cm,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
75
|
-
`+u),Ie&&(u=Rt(u)),re&&We?le(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};xt(e),Re=!0,ze=Ee,Be=w},t.clearConfig=function(){vt=null,Re=!1,ze=null,Be=null,re=ae,ie=``},t.isValidAttribute=function(e,t,n){vt||xt({});let r=_t(e),i=_t(t);return Xt(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&qp(_e,e)&&Pp(_e[e],t)},t.removeHook=function(e,t){if(qp(_e,e)){if(t!==void 0){let n=Mp(_e[e],t);return n===-1?void 0:Fp(_e[e],n,1)[0]}return Np(_e[e])}},t.removeHooks=function(e){qp(_e,e)&&(_e[e]=[])},t.removeAllHooks=function(){_e=Fm()},t}var zm=Rm();function Bm(e,t){let n;try{n=new URL(e.trim())}catch{return null}return n.protocol!==`https:`&&n.protocol!==`http:`||n.origin===t?null:n.href}var Vm=`p.br.hr.strong.b.em.i.del.s.code.pre.blockquote.ul.ol.li.a.h1.h2.h3.h4.h5.h6.small.sub.sup.table.thead.tbody.tr.th.td.img.input`.split(`.`),Hm=[`form`,`style`,`script`,`button`,`select`,`textarea`,`iframe`,`object`,`embed`,`svg`,`math`],Um={a:[`href`,`title`],img:[`src`,`alt`,`title`],th:[`colspan`,`rowspan`,`align`],td:[`colspan`,`rowspan`,`align`],ol:[`start`],code:[`class`],input:[`type`,`checked`,`disabled`]},Wm=[...new Set(Object.values(Um).flat())],Gm=/^language-[\w-]+$/,Km=/^\d{1,4}$/,qm=/^(left|right|center)$/i;function Jm(e,t,n){if(!Object.hasOwn(Um,e)||!Um[e].includes(t))return!1;switch(t){case`class`:return Gm.test(n);case`type`:return n.toLowerCase()===`checkbox`;case`colspan`:case`rowspan`:case`start`:return Km.test(n);case`align`:return qm.test(n);default:return!0}}var Ym=/^data:image\/(png|jpeg|gif|webp);base64,[A-Za-z0-9+/]+={0,2}$/i,Xm=/^\/api(\/|$)/i;function Zm(e,t){if(Ym.test(e))return!0;if(!e.trim())return!1;let n;try{n=new URL(e,t)}catch{return!1}return(n.protocol===`https:`||n.protocol===`http:`)&&n.origin===t&&!Xm.test(n.pathname)}zm.isSupported&&zm.addHook(`afterSanitizeAttributes`,e=>{let t=e.nodeName.toLowerCase();for(let{name:n,value:r}of Array.from(e.attributes))Jm(t,n,r)||e.removeAttribute(n);if(t===`img`&&!Zm(e.getAttribute(`src`)??``,location.origin)){e.replaceWith(document.createTextNode(e.getAttribute(`alt`)??``));return}if(t===`input`){e.getAttribute(`type`)===null?e.remove():e.setAttribute(`disabled`,``);return}if(t!==`a`)return;let n=e.getAttribute(`href`),r=n===null?null:Bm(n,location.origin);r?(e.setAttribute(`href`,r),e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`)):(e.removeAttribute(`href`),e.removeAttribute(`target`))});var Qm={ALLOWED_TAGS:Vm,ALLOWED_ATTR:Wm,FORBID_TAGS:Hm,ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1},$m=new Map;function eh(e){let t=$m.get(e);return t===void 0&&(t=zm.sanitize(K.parse(e,{async:!1}),Qm),$m.size>400&&$m.delete($m.keys().next().value),$m.set(e,t)),t}var th=`demo.job-runs`,nh=e=>e.status!==`running`&&e.status!==`waiting`,rh=B(()=>ru.value?.info?.jobs??[]),ih=e=>rh.value.find(t=>t.id===e),ah=B(()=>{let e=bu.value.docs[th];return Object.values(e?.items??{}).sort((e,t)=>t.id-e.id)}),oh=e=>ah.value.find(t=>t.id===e),sh=e=>ah.value.find(t=>t.toolCallId===e),ch=O(Date.now());setInterval(()=>ch.value=Date.now(),1e3);var lh=e=>e<1e3?`${Math.max(0,Math.round(e))}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.round(e%6e4/1e3)}s`,uh=O();async function dh(e,t){if(!uh.value){uh.value=e;try{return await ju(t)}finally{uh.value=void 0}}}function fh(e){Bu.value&&Uu(),setTimeout(()=>document.querySelector(`[data-job-run="${e}"]`)?.scrollIntoView({behavior:`smooth`,block:`center`}))}async function ph(e){let t=await dh(`start:${e.id}`,()=>uu.value.demo(`jobs`,{job:e.id}));t&&(W(`${e.title} started. It runs in the chat.`),fh(t.taskId))}var mh=(e,t)=>dh(`decide:${e.id}`,()=>uu.value.demo(`jobs/${e.id}/approval`,{approved:t})),hh=e=>dh(`stop:${e.id}`,()=>du.value.abortTask(e.id));function gh(e){H.value&&fu({...H.value,agentId:e})}var _h=[`data-job-run`,`aria-label`],vh={class:`job-run-head`},yh={class:`job-run-icon`},bh={class:`job-run-titles`},xh={class:`job-run-eyebrow`},Sh={class:`job-run-repeat`},Ch={key:0,class:`job-run-about`},wh={class:`job-run-meta`},Th={key:0,class:`job-run-resumed`},Eh={class:`job-stepper`,"aria-label":`Phases`},Dh=[`aria-current`],Oh={class:`job-chip`},kh={class:`job-step-dot`},Ah={class:`job-step-label`},jh={key:0,class:`job-step-progress`},Mh={class:`job-phases`},Nh=[`open`],Ph={class:`job-phase-n`},Fh={class:`job-phase-summary`},Ih={class:`job-phase-time`},Lh={key:0,class:`job-phase-about`},Rh={key:1,class:`job-steps`},zh=[`open`],Bh={key:1,class:`job-step-line`},Vh=[`onClick`],Hh={key:2,class:`job-phase-empty`},Uh={key:1,class:`job-approval`,role:`group`,"aria-label":`Approval`},Wh={class:`job-approval-buttons`},Gh=[`disabled`],Kh=[`disabled`],qh={key:2,class:`message-error`},Jh={class:`job-run-foot`},Yh=[`disabled`],Xh=A({__name:`JobCard`,props:{run:{}},setup(e){let t=e,n=B(()=>ih(t.run.job)),r=B(()=>nh(t.run)),i=B(()=>lh((t.run.endedAt??ch.value)-t.run.startedAt)),a={running:`Running`,waiting:`Waiting for you`,completed:`Completed`,failed:`Failed`,aborted:`Stopped`,declined:`Declined`},o={command:Bc,tool:Kc,agent:Ks,state:qs,approval:Rc,checkpoint:oc,note:vc},s=e=>e.kind===`tool`?`${e.label}: a subagent tool call, its own durable task`:e.label,c=e=>{let t=e.step,n=[`command`,`tool`,`state`].includes(t.kind)?so(`code`,{title:s(t)},t.label):so(`span`,{class:`job-step-text`},t.label),r=t.status===`running`?so(yc,{size:15,class:`spin`}):t.status===`done`?so(Ys,{size:15}):t.status===`waiting`?so(dc,{size:15}):so(qc,{size:15});return[so(o[t.kind],{size:16,class:`job-step-kind`}),n,t.kind===`tool`&&t.detail?so(`span`,{class:`job-step-args`,title:t.detail},t.detail):null,so(`span`,{class:`job-step-state`},[r,t.ms!==void 0&&t.kind!==`note`?so(`span`,lh(t.ms)):null])]};c.props=[`step`];let l=e=>n.value?.phases.find(t=>t.id===e),u=e=>e.startedAt?lh((e.endedAt??(e.status===`running`||e.status===`waiting`?ch.value:e.startedAt))-e.startedAt):``,d=e=>e.status!==`pending`&&e.status!==`skipped`,f=B(()=>Object.entries(t.run.input)),p=B(()=>t.run.phases.find(e=>e.status===`waiting`));return(t,o)=>(N(),P(`article`,{class:C([`job-run`,`is-${e.run.status}`]),"data-job-run":e.run.id,"aria-label":`${e.run.title} run ${e.run.run}: ${a[e.run.status]}`},[I(`header`,vh,[I(`span`,yh,[L(k(Gc),{size:22})]),I(`div`,bh,[I(`div`,xh,[o[3]||=I(`span`,null,`DURABLE JOB`,-1),I(`span`,Sh,[L(k(Fc),{size:15}),R(`Repeatable workflow, run #`+T(e.run.run),1)])]),I(`h3`,null,T(e.run.title),1)]),I(`span`,{class:C([`job-run-status`,e.run.status])},[o[4]||=I(`i`,null,null,-1),R(T(a[e.run.status]),1)],2)]),n.value?(N(),P(`p`,Ch,T(n.value.summary),1)):z(``,!0),I(`div`,wh,[I(`span`,null,`task #`+T(e.run.id),1),I(`span`,null,T(e.run.startedBy===`agent`?`started by the agent`:`started by you`),1),I(`span`,null,T(i.value),1),(N(!0),P(M,null,j(f.value,([e,t])=>(N(),P(`span`,{key:e,class:`job-run-input`},T(e)+`=`+T(t),1))),128)),e.run.resumed?(N(),P(`span`,Th,`resumed `+T(e.run.resumed)+`× after restart`,1)):z(``,!0)]),I(`ol`,Eh,[(N(!0),P(M,null,j(e.run.phases,(t,n)=>(N(),P(`li`,{key:t.id,class:C(`ph-${t.status}`),"aria-current":e.run.phase===t.id&&!r.value?`step`:void 0},[I(`span`,Oh,[I(`span`,kh,[t.status===`done`?(N(),F(k(Ys),{key:0,size:15})):t.status===`running`?(N(),F(k(yc),{key:1,size:15,class:`spin`})):t.status===`waiting`?(N(),F(k(dc),{key:2,size:15})):[`failed`,`aborted`].includes(t.status)?(N(),F(k(qc),{key:3,size:15})):(N(),P(M,{key:4},[R(T(n+1),1)],64))]),I(`span`,Ah,T(t.label),1),t.progress?(N(),P(`span`,jh,T(t.progress.done)+`/`+T(t.progress.total),1)):z(``,!0)])],10,Dh))),128))]),I(`div`,Mh,[(N(!0),P(M,null,j(e.run.phases,(e,t)=>(N(),P(`details`,{key:e.id,class:C([`job-phase`,`ph-${e.status}`]),open:d(e)},[I(`summary`,null,[I(`span`,Ph,T(t+1),1),I(`strong`,null,T(e.label),1),I(`span`,Fh,T(e.summary??(e.status===`pending`?l(e.id)?.summary:e.status===`skipped`?`Skipped`:``)),1),I(`span`,Ih,T(u(e)),1)]),e.status===`done`?z(``,!0):(N(),P(`p`,Lh,T(l(e.id)?.summary),1)),e.steps.length?(N(),P(`ul`,Rh,[(N(!0),P(M,null,j(e.steps,e=>(N(),P(`li`,{key:e.id,class:C([`k-${e.kind}`,`st-${e.status}`])},[e.detail&&e.kind!==`tool`?(N(),P(`details`,{key:0,open:e.status===`error`},[I(`summary`,null,[L(c,{step:e},null,8,[`step`])]),I(`pre`,null,T(e.detail),1)],8,zh)):(N(),P(`div`,Bh,[L(c,{step:e},null,8,[`step`])])),e.kind===`agent`&&e.conversationId?(N(),P(`button`,{key:2,class:`text-button job-step-link`,onClick:t=>k(gh)(e.conversationId)},` Open subagent #`+T(e.conversationId),9,Vh)):z(``,!0)],2))),128))])):e.status===`pending`?(N(),P(`p`,Hh,`Not started yet.`)):z(``,!0)],10,Nh))),128))]),e.run.approval===`pending`?(N(),P(`div`,Uh,[I(`div`,null,[L(k(Rc),{size:20}),o[5]||=I(`strong`,null,`Approve to continue`,-1)]),I(`p`,null,T(p.value?l(p.value.id)?.summary:`This run waits for you`)+`. It is paused on a saved checkpoint: close the browser or restart the device and the decision will still be waiting. `,1),I(`div`,Wh,[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:o[0]||=t=>k(mh)(e.run,!0)},[L(k(Ys),{size:18}),o[6]||=R(`Approve & continue `,-1)],8,Gh),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:o[1]||=t=>k(mh)(e.run,!1)},`Decline`,8,Kh)])])):z(``,!0),e.run.error&&e.run.status!==`aborted`?(N(),P(`p`,qh,T(e.run.error),1)):z(``,!0),I(`footer`,Jh,[I(`span`,null,T(e.run.background?`Runs in the background: the conversation owns it, so Interrupt leaves it running.`:`Owned by this tool call: Interrupt stops it.`)+` Each phase saves a checkpoint, so a restart resumes the current phase.`,1),r.value?z(``,!0):(N(),P(`button`,{key:0,class:`secondary danger`,disabled:!!k(uh),onClick:o[2]||=t=>k(hh)(e.run)},[L(k(Tc),{size:16}),o[7]||=R(`Stop `,-1)],8,Yh))])],10,_h))}}),Zh={class:`message-label`},Qh={class:`user-message`},$h={class:`message-label`},eg={key:0,class:`streaming`},tg={key:1},ng=[`aria-label`],rg=[`innerHTML`],ig={key:1,class:`thinking`},ag=[`data-call-id`],og={class:`tool-status`},sg={class:`tool-section-label`},cg=[`aria-label`,`onClick`],lg={key:0,class:`typing`},ug={key:1,class:`message-error`},dg=[`aria-label`],fg={key:3,class:`live-tool`},pg={key:0},mg={class:`event-line`},hg=[`aria-label`],gg={key:0,class:`raw`},_g=A({__name:`TranscriptItem`,props:{item:{}},emits:[`fork`],setup(e,{emit:t}){let n=t,r=e=>e.status===`error`?`Error`:e.status===`done`?`Done`:e.status,i=e=>e.kind===`user`?`pi-user`:e.kind===`assistant`?e.streaming?`live-generation`:`pi-assistant`:e.kind===`tool-result`?`pi-tool-result`:e.kind===`tool`?`live-tool-entry`:e.entryKind.replaceAll(`.`,`-`);return(t,a)=>(N(),P(`article`,{class:C([`entry`,i(e.item)])},[e.item.kind===`user`?(N(),P(M,{key:0},[I(`div`,Zh,[a[3]||=R(` YOU `,-1),I(`span`,null,`#`+T(e.item.id),1)]),I(`div`,Qh,T(e.item.text),1)],64)):e.item.kind===`assistant`?(N(),P(M,{key:1},[I(`div`,$h,[a[5]||=R(` AGENT `,-1),e.item.streaming?(N(),P(`span`,eg,`Working`)):(N(),P(`span`,tg,`#`+T(e.item.id),1)),e.item.streaming?z(``,!0):(N(),P(`button`,{key:2,class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,title:`Fork from this entry. App State stays shared.`,onClick:a[0]||=t=>n(`fork`,e.item.id)},[L(k(uc),{size:18}),a[4]||=R(`Fork `,-1)],8,ng))]),(N(!0),P(M,null,j(e.item.blocks,(e,t)=>(N(),P(M,{key:t},[e.type===`text`?(N(),P(`div`,{key:0,class:`markdown`,innerHTML:k(eh)(e.text)},null,8,rg)):e.type===`thinking`?(N(),P(`details`,ig,[a[6]||=I(`summary`,null,`Thinking`,-1),I(`div`,null,T(e.text),1)])):(N(),P(`details`,{key:2,class:C([`tool-call`,{failed:e.call.status===`error`}]),"data-call-id":e.call.callId},[I(`summary`,null,[e.call.status===`error`?(N(),F(k(pc),{key:0,size:18})):e.call.status===`done`?(N(),F(k(Ys),{key:1,size:18})):e.call.status===`running`?(N(),F(k(Hs),{key:2,size:18})):(N(),F(k(Kc),{key:3,size:18})),I(`strong`,null,T(e.call.name),1),I(`code`,null,T(k(Pu)(e.call.args)?.slice(0,90)),1),I(`span`,og,T(r(e.call)),1)]),a[10]||=I(`div`,{class:`tool-section-label`},`Input`,-1),I(`pre`,null,T(k(Pu)(e.call.args)),1),e.call.result===void 0?e.call.output?(N(),P(M,{key:1},[a[9]||=I(`div`,{class:`tool-section-label`},`Live output`,-1),I(`pre`,null,T(e.call.output),1)],64)):z(``,!0):(N(),P(M,{key:0},[I(`div`,sg,[a[8]||=I(`span`,null,`Result`,-1),e.call.resultEntryId===void 0?z(``,!0):(N(),P(`button`,{key:0,class:`fork-button`,"aria-label":`Fork at entry ${e.call.resultEntryId}`,title:`Fork after this result`,onClick:t=>n(`fork`,e.call.resultEntryId)},[L(k(uc),{size:18}),a[7]||=R(`Fork `,-1)],8,cg))]),I(`pre`,null,T(e.call.result),1)],64))],10,ag)),e.type===`tool`&&e.call.name===`run_durable_job`&&k(sh)(e.call.callId)?(N(),F(Xh,{key:3,run:k(sh)(e.call.callId)},null,8,[`run`])):z(``,!0)],64))),128)),e.item.streaming&&!e.item.blocks.length?(N(),P(`div`,lg,[...a[11]||=[I(`i`,null,null,-1),I(`i`,null,null,-1),I(`i`,null,null,-1)]])):z(``,!0),e.item.error?(N(),P(`div`,ug,T(e.item.error),1)):z(``,!0)],64)):e.item.kind===`tool-result`?(N(),P(`details`,{key:2,class:C([`tool-result`,{failed:e.item.isError}])},[I(`summary`,null,[e.item.isError?(N(),F(k(pc),{key:1,size:18})):(N(),F(k(Ys),{key:0,size:18})),I(`strong`,null,T(e.item.name),1),I(`span`,null,T(e.item.isError?`error`:`result`),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[1]||=As(t=>n(`fork`,e.item.id),[`prevent`])},[L(k(uc),{size:18}),a[12]||=R(`Fork `,-1)],8,dg)]),I(`pre`,null,T(e.item.text),1)],2)):e.item.kind===`tool`?(N(),P(`div`,fg,[I(`div`,null,[L(k(Hs),{size:18}),I(`strong`,null,T(e.item.call.name),1),I(`span`,null,T(e.item.call.status),1)]),e.item.call.output?(N(),P(`pre`,pg,T(e.item.call.output),1)):z(``,!0),e.item.call.name===`run_durable_job`&&k(sh)(e.item.call.callId)?(N(),F(Xh,{key:1,run:k(sh)(e.item.call.callId)},null,8,[`run`])):z(``,!0)])):e.item.entryKind===`demo.job`&&k(oh)(e.item.data.taskId)?(N(),F(Xh,{key:4,run:k(oh)(e.item.data.taskId)},null,8,[`run`])):(N(),P(M,{key:5},[I(`div`,mg,[e.item.entryKind===`demo.state-change`?(N(),F(k(qs),{key:0,size:18})):(N(),F(k(gc),{key:1,size:18})),I(`span`,null,T(e.item.text),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[2]||=t=>n(`fork`,e.item.id)},[L(k(uc),{size:18}),a[13]||=R(`Fork `,-1)],8,hg)]),e.item.note?(N(),P(`details`,gg,[a[14]||=I(`summary`,null,`Context note`,-1),I(`pre`,null,T(e.item.note),1)])):z(``,!0)],64))],2))}}),vg={key:0,class:`git-chip-wrap`},yg=[`title`],bg={class:`branch`},xg={key:0,class:`dirty`},Sg={key:1,class:`ahead`},Cg={key:2,class:`behind`},wg=[`disabled`],Tg={class:`line`},Eg={title:`staged/unstaged/untracked`},Dg={class:`line muted`},Og={key:0,class:`line wt-of`},kg={class:`row`},Ag=[`disabled`],jg=[`disabled`],Mg=[`disabled`],Ng=[`disabled`],Pg={class:`row commit`},Fg=[`disabled`],Ig={class:`row wt`},Lg=[`disabled`],Rg={key:1,class:`wts`},zg={class:`muted`},Bg=[`disabled`,`onClick`],Vg={key:2,class:`log`},Hg=A({__name:`GitChip`,props:{deviceId:{},cwd:{}},setup(e){let t=e,n=O(null),r=O(!1),i=O(``),a=O(``),o=O(``),s=O(``),c=B(()=>t.cwd??cu.value?.cwd??``),l=B(()=>t.deviceId??nu.value),u=B(()=>(n.value?.staged??0)+(n.value?.unstaged??0)+(n.value?.untracked??0)),d;async function f(){if(c.value&&l.value)try{n.value=await Fl(l.value).gitStatus(c.value)}catch{n.value=null}}f(),Yr(()=>f()),Zn(c,()=>void f()),Wr(()=>{d=setInterval(f,15e3)}),qr(()=>d&&clearInterval(d));async function p(e,t=!0){if(l.value&&c.value){i.value=e,a.value=``;try{let t=await Fl(l.value).gitOp(c.value,e);e===`log`||e===`branch`?a.value=t.text:W(`git ${e}: ${t.text.split(`
|
|
75
|
+
`+u),Ie&&(u=Rt(u)),re&&We?le(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};xt(e),Re=!0,ze=Ee,Be=w},t.clearConfig=function(){vt=null,Re=!1,ze=null,Be=null,re=ae,ie=``},t.isValidAttribute=function(e,t,n){vt||xt({});let r=_t(e),i=_t(t);return Xt(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&qp(_e,e)&&Pp(_e[e],t)},t.removeHook=function(e,t){if(qp(_e,e)){if(t!==void 0){let n=Mp(_e[e],t);return n===-1?void 0:Fp(_e[e],n,1)[0]}return Np(_e[e])}},t.removeHooks=function(e){qp(_e,e)&&(_e[e]=[])},t.removeAllHooks=function(){_e=Fm()},t}var zm=Rm();function Bm(e,t){let n;try{n=new URL(e.trim())}catch{return null}return n.protocol!==`https:`&&n.protocol!==`http:`||n.origin===t?null:n.href}var Vm=`p.br.hr.strong.b.em.i.del.s.code.pre.blockquote.ul.ol.li.a.h1.h2.h3.h4.h5.h6.small.sub.sup.table.thead.tbody.tr.th.td.img.input`.split(`.`),Hm=[`form`,`style`,`script`,`button`,`select`,`textarea`,`iframe`,`object`,`embed`,`svg`,`math`],Um={a:[`href`,`title`],img:[`src`,`alt`,`title`],th:[`colspan`,`rowspan`,`align`],td:[`colspan`,`rowspan`,`align`],ol:[`start`],code:[`class`],input:[`type`,`checked`,`disabled`]},Wm=[...new Set(Object.values(Um).flat())],Gm=/^language-[\w-]+$/,Km=/^\d{1,4}$/,qm=/^(left|right|center)$/i;function Jm(e,t,n){if(!Object.hasOwn(Um,e)||!Um[e].includes(t))return!1;switch(t){case`class`:return Gm.test(n);case`type`:return n.toLowerCase()===`checkbox`;case`colspan`:case`rowspan`:case`start`:return Km.test(n);case`align`:return qm.test(n);default:return!0}}var Ym=/^data:image\/(png|jpeg|gif|webp);base64,[A-Za-z0-9+/]+={0,2}$/i,Xm=/^\/api(\/|$)/i;function Zm(e,t){if(Ym.test(e))return!0;if(!e.trim())return!1;let n;try{n=new URL(e,t)}catch{return!1}return(n.protocol===`https:`||n.protocol===`http:`)&&n.origin===t&&!Xm.test(n.pathname)}zm.isSupported&&zm.addHook(`afterSanitizeAttributes`,e=>{let t=e.nodeName.toLowerCase();for(let{name:n,value:r}of Array.from(e.attributes))Jm(t,n,r)||e.removeAttribute(n);if(t===`img`&&!Zm(e.getAttribute(`src`)??``,location.origin)){e.replaceWith(document.createTextNode(e.getAttribute(`alt`)??``));return}if(t===`input`){e.getAttribute(`type`)===null?e.remove():e.setAttribute(`disabled`,``);return}if(t!==`a`)return;let n=e.getAttribute(`href`),r=n===null?null:Bm(n,location.origin);r?(e.setAttribute(`href`,r),e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`)):(e.removeAttribute(`href`),e.removeAttribute(`target`))});var Qm={ALLOWED_TAGS:Vm,ALLOWED_ATTR:Wm,FORBID_TAGS:Hm,ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1},$m=new Map;function eh(e){let t=$m.get(e);return t===void 0&&(t=zm.sanitize(K.parse(e,{async:!1}),Qm),$m.size>400&&$m.delete($m.keys().next().value),$m.set(e,t)),t}var th=`demo.job-runs`,nh=e=>e.status!==`running`&&e.status!==`waiting`,rh=B(()=>ru.value?.info?.jobs??[]),ih=e=>rh.value.find(t=>t.id===e),ah=B(()=>{let e=bu.value.docs[th];return Object.values(e?.items??{}).sort((e,t)=>t.id-e.id)}),oh=e=>ah.value.find(t=>t.id===e),sh=e=>ah.value.find(t=>t.toolCallId===e),ch=O(Date.now());setInterval(()=>ch.value=Date.now(),1e3);var lh=e=>e<1e3?`${Math.max(0,Math.round(e))}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.round(e%6e4/1e3)}s`,uh=O();async function dh(e,t){if(!uh.value){uh.value=e;try{return await ju(t)}finally{uh.value=void 0}}}function fh(e){Bu.value&&Uu(),setTimeout(()=>document.querySelector(`[data-job-run="${e}"]`)?.scrollIntoView({behavior:`smooth`,block:`center`}))}async function ph(e){let t=await dh(`start:${e.id}`,()=>uu.value.demo(`jobs`,{job:e.id}));t&&(W(`${e.title} started. It runs in the chat.`),fh(t.taskId))}var mh=(e,t)=>dh(`decide:${e.id}`,()=>uu.value.demo(`jobs/${e.id}/approval`,{approved:t})),hh=e=>dh(`stop:${e.id}`,()=>du.value.abortTask(e.id));function gh(e){H.value&&fu({...H.value,agentId:e})}var _h=[`data-job-run`,`aria-label`],vh={class:`job-run-head`},yh={class:`job-run-icon`},bh={class:`job-run-titles`},xh={class:`job-run-eyebrow`},Sh={class:`job-run-repeat`},Ch={key:0,class:`job-run-about`},wh={class:`job-run-meta`},Th={key:0,class:`job-run-resumed`},Eh={class:`job-stepper`,"aria-label":`Phases`},Dh=[`aria-current`],Oh={class:`job-chip`},kh={class:`job-step-dot`},Ah={class:`job-step-label`},jh={key:0,class:`job-step-progress`},Mh={class:`job-phases`},Nh=[`open`],Ph={class:`job-phase-n`},Fh={class:`job-phase-summary`},Ih={class:`job-phase-time`},Lh={key:0,class:`job-phase-about`},Rh={key:1,class:`job-steps`},zh=[`open`],Bh={key:1,class:`job-step-line`},Vh=[`onClick`],Hh={key:2,class:`job-phase-empty`},Uh={key:1,class:`job-approval`,role:`group`,"aria-label":`Approval`},Wh={class:`job-approval-buttons`},Gh=[`disabled`],Kh=[`disabled`],qh={key:2,class:`message-error`},Jh={class:`job-run-foot`},Yh=[`disabled`],Xh=A({__name:`JobCard`,props:{run:{}},setup(e){let t=e,n=B(()=>ih(t.run.job)),r=B(()=>nh(t.run)),i=B(()=>lh((t.run.endedAt??ch.value)-t.run.startedAt)),a={running:`Running`,waiting:`Waiting for you`,completed:`Completed`,failed:`Failed`,aborted:`Stopped`,declined:`Declined`},o={command:Bc,tool:Kc,agent:Ks,state:qs,approval:Rc,checkpoint:oc,note:vc},s=e=>e.kind===`tool`?`${e.label}: a subagent tool call, its own durable task`:e.label,c=e=>{let t=e.step,n=[`command`,`tool`,`state`].includes(t.kind)?so(`code`,{title:s(t)},t.label):so(`span`,{class:`job-step-text`},t.label),r=t.status===`running`?so(yc,{size:15,class:`spin`}):t.status===`done`?so(Ys,{size:15}):t.status===`waiting`?so(dc,{size:15}):so(qc,{size:15});return[so(o[t.kind],{size:16,class:`job-step-kind`}),n,t.kind===`tool`&&t.detail?so(`span`,{class:`job-step-args`,title:t.detail},t.detail):null,so(`span`,{class:`job-step-state`},[r,t.ms!==void 0&&t.kind!==`note`?so(`span`,lh(t.ms)):null])]};c.props=[`step`];let l=e=>n.value?.phases.find(t=>t.id===e),u=e=>e.startedAt?lh((e.endedAt??(e.status===`running`||e.status===`waiting`?ch.value:e.startedAt))-e.startedAt):``,d=e=>e.status!==`pending`&&e.status!==`skipped`,f=B(()=>Object.entries(t.run.input)),p=B(()=>t.run.phases.find(e=>e.status===`waiting`));return(t,o)=>(N(),P(`article`,{class:C([`job-run`,`is-${e.run.status}`]),"data-job-run":e.run.id,"aria-label":`${e.run.title} run ${e.run.run}: ${a[e.run.status]}`},[I(`header`,vh,[I(`span`,yh,[L(k(Gc),{size:22})]),I(`div`,bh,[I(`div`,xh,[o[3]||=I(`span`,null,`DURABLE JOB`,-1),I(`span`,Sh,[L(k(Fc),{size:15}),R(`Repeatable workflow, run #`+T(e.run.run),1)])]),I(`h3`,null,T(e.run.title),1)]),I(`span`,{class:C([`job-run-status`,e.run.status])},[o[4]||=I(`i`,null,null,-1),R(T(a[e.run.status]),1)],2)]),n.value?(N(),P(`p`,Ch,T(n.value.summary),1)):z(``,!0),I(`div`,wh,[I(`span`,null,`task #`+T(e.run.id),1),I(`span`,null,T(e.run.startedBy===`agent`?`started by the agent`:`started by you`),1),I(`span`,null,T(i.value),1),(N(!0),P(M,null,j(f.value,([e,t])=>(N(),P(`span`,{key:e,class:`job-run-input`},T(e)+`=`+T(t),1))),128)),e.run.resumed?(N(),P(`span`,Th,`resumed `+T(e.run.resumed)+`× after restart`,1)):z(``,!0)]),I(`ol`,Eh,[(N(!0),P(M,null,j(e.run.phases,(t,n)=>(N(),P(`li`,{key:t.id,class:C(`ph-${t.status}`),"aria-current":e.run.phase===t.id&&!r.value?`step`:void 0},[I(`span`,Oh,[I(`span`,kh,[t.status===`done`?(N(),F(k(Ys),{key:0,size:15})):t.status===`running`?(N(),F(k(yc),{key:1,size:15,class:`spin`})):t.status===`waiting`?(N(),F(k(dc),{key:2,size:15})):[`failed`,`aborted`].includes(t.status)?(N(),F(k(qc),{key:3,size:15})):(N(),P(M,{key:4},[R(T(n+1),1)],64))]),I(`span`,Ah,T(t.label),1),t.progress?(N(),P(`span`,jh,T(t.progress.done)+`/`+T(t.progress.total),1)):z(``,!0)])],10,Dh))),128))]),I(`div`,Mh,[(N(!0),P(M,null,j(e.run.phases,(e,t)=>(N(),P(`details`,{key:e.id,class:C([`job-phase`,`ph-${e.status}`]),open:d(e)},[I(`summary`,null,[I(`span`,Ph,T(t+1),1),I(`strong`,null,T(e.label),1),I(`span`,Fh,T(e.summary??(e.status===`pending`?l(e.id)?.summary:e.status===`skipped`?`Skipped`:``)),1),I(`span`,Ih,T(u(e)),1)]),e.status===`done`?z(``,!0):(N(),P(`p`,Lh,T(l(e.id)?.summary),1)),e.steps.length?(N(),P(`ul`,Rh,[(N(!0),P(M,null,j(e.steps,e=>(N(),P(`li`,{key:e.id,class:C([`k-${e.kind}`,`st-${e.status}`])},[e.detail&&e.kind!==`tool`?(N(),P(`details`,{key:0,open:e.status===`error`},[I(`summary`,null,[L(c,{step:e},null,8,[`step`])]),I(`pre`,null,T(e.detail),1)],8,zh)):(N(),P(`div`,Bh,[L(c,{step:e},null,8,[`step`])])),e.kind===`agent`&&e.conversationId?(N(),P(`button`,{key:2,class:`text-button job-step-link`,onClick:t=>k(gh)(e.conversationId)},` Open subagent #`+T(e.conversationId),9,Vh)):z(``,!0)],2))),128))])):e.status===`pending`?(N(),P(`p`,Hh,`Not started yet.`)):z(``,!0)],10,Nh))),128))]),e.run.approval===`pending`?(N(),P(`div`,Uh,[I(`div`,null,[L(k(Rc),{size:20}),o[5]||=I(`strong`,null,`Approve to continue`,-1)]),I(`p`,null,T(p.value?l(p.value.id)?.summary:`This run waits for you`)+`. It is paused on a saved checkpoint: close the browser or restart the device and the decision will still be waiting. `,1),I(`div`,Wh,[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:o[0]||=t=>k(mh)(e.run,!0)},[L(k(Ys),{size:18}),o[6]||=R(`Approve & continue `,-1)],8,Gh),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:o[1]||=t=>k(mh)(e.run,!1)},`Decline`,8,Kh)])])):z(``,!0),e.run.error&&e.run.status!==`aborted`?(N(),P(`p`,qh,T(e.run.error),1)):z(``,!0),I(`footer`,Jh,[I(`span`,null,T(e.run.background?`Runs in the background: the conversation owns it, so Interrupt leaves it running.`:`Owned by this tool call: Interrupt stops it.`)+` Each phase saves a checkpoint, so a restart resumes the current phase.`,1),r.value?z(``,!0):(N(),P(`button`,{key:0,class:`secondary danger`,disabled:!!k(uh),onClick:o[2]||=t=>k(hh)(e.run)},[L(k(Tc),{size:16}),o[7]||=R(`Stop `,-1)],8,Yh))])],10,_h))}}),Zh={class:`message-label`},Qh={class:`user-message`},$h={class:`message-label`},eg={key:0,class:`streaming`},tg={key:1},ng=[`aria-label`],rg=[`innerHTML`],ig={key:1,class:`thinking`},ag=[`data-call-id`],og={class:`tool-status`},sg={class:`tool-section-label`},cg=[`aria-label`,`onClick`],lg={key:0,class:`typing`},ug={key:1,class:`message-error`},dg=[`aria-label`],fg={key:3,class:`live-tool`},pg={key:0},mg={class:`event-line`},hg=[`aria-label`],gg={key:0,class:`raw`},_g=A({__name:`TranscriptItem`,props:{item:{}},emits:[`fork`],setup(e,{emit:t}){let n=t,r=e=>e.status===`error`?`Error`:e.status===`done`?`Done`:e.status,i=e=>e.kind===`user`?`pi-user`:e.kind===`assistant`?e.streaming?`live-generation`:`pi-assistant`:e.kind===`tool-result`?`pi-tool-result`:e.kind===`tool`?`live-tool-entry`:e.entryKind.replaceAll(`.`,`-`);return(t,a)=>(N(),P(`article`,{class:C([`entry`,i(e.item)])},[e.item.kind===`user`?(N(),P(M,{key:0},[I(`div`,Zh,[a[3]||=R(` YOU `,-1),I(`span`,null,`#`+T(e.item.id),1)]),I(`div`,Qh,T(e.item.text),1)],64)):e.item.kind===`assistant`?(N(),P(M,{key:1},[I(`div`,$h,[a[5]||=R(` AGENT `,-1),e.item.streaming?(N(),P(`span`,eg,`Working`)):(N(),P(`span`,tg,`#`+T(e.item.id),1)),e.item.streaming?z(``,!0):(N(),P(`button`,{key:2,class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,title:`Fork from this entry. App State stays shared.`,onClick:a[0]||=t=>n(`fork`,e.item.id)},[L(k(uc),{size:18}),a[4]||=R(`Fork `,-1)],8,ng))]),(N(!0),P(M,null,j(e.item.blocks,(e,t)=>(N(),P(M,{key:t},[e.type===`text`?(N(),P(`div`,{key:0,class:`markdown`,innerHTML:k(eh)(e.text)},null,8,rg)):e.type===`thinking`?(N(),P(`details`,ig,[a[6]||=I(`summary`,null,`Thinking`,-1),I(`div`,null,T(e.text),1)])):(N(),P(`details`,{key:2,class:C([`tool-call`,{failed:e.call.status===`error`}]),"data-call-id":e.call.callId},[I(`summary`,null,[e.call.status===`error`?(N(),F(k(pc),{key:0,size:18})):e.call.status===`done`?(N(),F(k(Ys),{key:1,size:18})):e.call.status===`running`?(N(),F(k(Hs),{key:2,size:18})):(N(),F(k(Kc),{key:3,size:18})),I(`strong`,null,T(e.call.name),1),I(`code`,null,T(k(Pu)(e.call.args)?.slice(0,90)),1),I(`span`,og,T(r(e.call)),1)]),a[10]||=I(`div`,{class:`tool-section-label`},`Input`,-1),I(`pre`,null,T(k(Pu)(e.call.args)),1),e.call.result===void 0?e.call.output?(N(),P(M,{key:1},[a[9]||=I(`div`,{class:`tool-section-label`},`Live output`,-1),I(`pre`,null,T(e.call.output),1)],64)):z(``,!0):(N(),P(M,{key:0},[I(`div`,sg,[a[8]||=I(`span`,null,`Result`,-1),e.call.resultEntryId===void 0?z(``,!0):(N(),P(`button`,{key:0,class:`fork-button`,"aria-label":`Fork at entry ${e.call.resultEntryId}`,title:`Fork after this result`,onClick:t=>n(`fork`,e.call.resultEntryId)},[L(k(uc),{size:18}),a[7]||=R(`Fork `,-1)],8,cg))]),I(`pre`,null,T(e.call.result),1)],64))],10,ag)),e.type===`tool`&&e.call.name===`run_durable_job`&&k(sh)(e.call.callId)?(N(),F(Xh,{key:3,run:k(sh)(e.call.callId)},null,8,[`run`])):z(``,!0)],64))),128)),e.item.streaming&&!e.item.blocks.length?(N(),P(`div`,lg,[...a[11]||=[I(`i`,null,null,-1),I(`i`,null,null,-1),I(`i`,null,null,-1)]])):z(``,!0),e.item.error?(N(),P(`div`,ug,T(e.item.error),1)):z(``,!0)],64)):e.item.kind===`tool-result`?(N(),P(`details`,{key:2,class:C([`tool-result`,{failed:e.item.isError}])},[I(`summary`,null,[e.item.isError?(N(),F(k(pc),{key:1,size:18})):(N(),F(k(Ys),{key:0,size:18})),I(`strong`,null,T(e.item.name),1),I(`span`,null,T(e.item.isError?`error`:`result`),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[1]||=As(t=>n(`fork`,e.item.id),[`prevent`])},[L(k(uc),{size:18}),a[12]||=R(`Fork `,-1)],8,dg)]),I(`pre`,null,T(e.item.text),1)],2)):e.item.kind===`tool`?(N(),P(`div`,fg,[I(`div`,null,[L(k(Hs),{size:18}),I(`strong`,null,T(e.item.call.name),1),I(`span`,null,T(e.item.call.status),1)]),e.item.call.output?(N(),P(`pre`,pg,T(e.item.call.output),1)):z(``,!0),e.item.call.name===`run_durable_job`&&k(sh)(e.item.call.callId)?(N(),F(Xh,{key:1,run:k(sh)(e.item.call.callId)},null,8,[`run`])):z(``,!0)])):e.item.entryKind===`demo.job`&&k(oh)(e.item.data.taskId)?(N(),F(Xh,{key:4,run:k(oh)(e.item.data.taskId)},null,8,[`run`])):(N(),P(M,{key:5},[I(`div`,mg,[e.item.entryKind===`demo.state-change`?(N(),F(k(qs),{key:0,size:18})):(N(),F(k(gc),{key:1,size:18})),I(`span`,null,T(e.item.text),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[2]||=t=>n(`fork`,e.item.id)},[L(k(uc),{size:18}),a[13]||=R(`Fork `,-1)],8,hg)]),e.item.note?(N(),P(`details`,gg,[a[14]||=I(`summary`,null,`Context note`,-1),I(`pre`,null,T(e.item.note),1)])):z(``,!0)],64))],2))}}),vg={key:0,class:`git-chip-wrap`},yg=[`title`],bg={class:`branch`},xg={key:0,class:`dirty`},Sg={key:1,class:`ahead`},Cg={key:2,class:`behind`},wg=[`disabled`],Tg={class:`line`},Eg={title:`staged/unstaged/untracked`},Dg={class:`line muted`},Og={key:0,class:`line wt-of`},kg={class:`row`},Ag=[`disabled`],jg=[`disabled`],Mg=[`disabled`],Ng=[`disabled`],Pg={class:`row commit`},Fg=[`disabled`],Ig={class:`row wt`},Lg=[`disabled`],Rg={key:1,class:`wts`},zg={class:`muted`},Bg=[`disabled`,`onClick`],Vg={key:2,class:`log`},Hg=A({__name:`GitChip`,props:{deviceId:{},cwd:{}},setup(e){let t=e,n=O(null),r=O(!1),i=O(``),a=O(``),o=O(``),s=O(``),c=B(()=>t.cwd??cu.value?.cwd??``),l=B(()=>t.deviceId??nu.value),u=B(()=>(n.value?.staged??0)+(n.value?.unstaged??0)+(n.value?.untracked??0)),d;async function f(){if(c.value&&l.value)try{n.value=await Fl(l.value).gitStatus(c.value)}catch{n.value=null}}f(),Yr(()=>f()),Zn(c,()=>void f()),Wr(()=>{d=setInterval(f,6e4)}),qr(()=>d&&clearInterval(d));async function p(e,t=!0){if(l.value&&c.value){i.value=e,a.value=``;try{let t=await Fl(l.value).gitOp(c.value,e);e===`log`||e===`branch`?a.value=t.text:W(`git ${e}: ${t.text.split(`
|
|
76
76
|
`)[0]??`ok`}`),await f()}catch(t){W(`git ${e} failed: ${t.message.slice(0,120)}`)}finally{i.value=``}}}async function m(){if(l.value&&c.value&&o.value.trim()){i.value=`commit`;try{W((await Fl(l.value).gitOp(c.value,`commit`,{message:o.value.trim()})).text),o.value=``,await f()}catch(e){W(`commit failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}}async function h(){if(!l.value||!c.value||!s.value.trim()||!n.value?.root)return;i.value=`wt`;let e=n.value.root,t=`${e.slice(0,e.lastIndexOf(`/`))}/${e.slice(e.lastIndexOf(`/`)+1)}-${s.value.trim()}`;try{W(`worktree: ${(await Fl(l.value).gitOp(c.value,`worktree-add`,{branch:s.value.trim(),target:t})).text.split(`
|
|
77
|
-
`)[0]??t}`),s.value=``,await f()}catch(e){W(`worktree failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}async function g(e){if(l.value&&c.value&&confirm(`Remove worktree ${e}?`)){i.value=`wt`;try{await Fl(l.value).gitOp(c.value,`worktree-remove`,{target:e}),await f()}catch(e){W(`remove failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}}return(e,t)=>n.value?.repo?(N(),P(`span`,vg,[I(`button`,{class:`crumb git-chip`,title:`${n.value.root} · ${n.value.head??``} ${n.value.subject??``}`,onClick:t[0]||=e=>r.value=!r.value},[L(k(lc),{size:16,"aria-hidden":`true`}),I(`span`,bg,T(n.value.branch??n.value.head),1),u.value?(N(),P(`span`,xg,`±`+T(u.value),1)):z(``,!0),n.value.ahead?(N(),P(`span`,Sg,`↑`+T(n.value.ahead),1)):z(``,!0),n.value.behind?(N(),P(`span`,Cg,`↓`+T(n.value.behind),1)):z(``,!0),L(k(Xs),{size:14,"aria-hidden":`true`})],8,yg),r.value?(N(),P(`div`,{key:0,class:`git-panel`,onClick:t[8]||=As(()=>{},[`stop`])},[I(`header`,null,[I(`strong`,null,`git · `+T(n.value.root),1),I(`button`,{disabled:!!i.value,title:`refresh`,onClick:t[1]||=e=>f()},[L(k(Pc),{size:14})],8,wg)]),I(`p`,Tg,[R(T(n.value.branch??`detached`),1),n.value.upstream?(N(),P(M,{key:0},[R(` → `+T(n.value.upstream),1)],64)):z(``,!0),t[9]||=R(` · `,-1),I(`span`,Eg,`+`+T(n.value.staged??0)+` ~`+T(n.value.unstaged??0)+` ?`+T(n.value.untracked??0),1)]),I(`p`,Dg,T(n.value.head)+` `+T(n.value.subject),1),n.value.worktreeOf?(N(),P(`p`,Og,`worktree of `+T(n.value.worktreeOf),1)):z(``,!0),I(`div`,kg,[I(`button`,{disabled:!!i.value,onClick:t[2]||=e=>p(`fetch`)},`fetch`,8,Ag),I(`button`,{disabled:!!i.value,onClick:t[3]||=e=>p(`pull`)},`pull`,8,jg),I(`button`,{disabled:!!i.value,onClick:t[4]||=e=>p(`log`)},`log`,8,Mg),I(`button`,{disabled:!!i.value,onClick:t[5]||=e=>p(`branch`)},`branches`,8,Ng)]),I(`div`,Pg,[Wn(I(`input`,{"onUpdate:modelValue":t[6]||=e=>o.value=e,placeholder:`commit message…`,onKeyup:Ms(m,[`enter`])},null,544),[[bs,o.value]]),I(`button`,{disabled:!!i.value||!o.value.trim(),onClick:m},`commit -am`,8,Fg)]),I(`div`,Ig,[Wn(I(`input`,{"onUpdate:modelValue":t[7]||=e=>s.value=e,placeholder:`branch name…`,onKeyup:Ms(h,[`enter`])},null,544),[[bs,s.value]]),I(`button`,{disabled:!!i.value||!s.value.trim(),onClick:h},`+ worktree`,8,Lg)]),(n.value.worktrees?.length??0)>1?(N(),P(`ul`,Rg,[(N(!0),P(M,null,j(n.value.worktrees,e=>(N(),P(`li`,{key:e.path},[I(`code`,null,T(e.path),1),I(`span`,zg,T(e.branch??e.head),1),e.path===n.value.root?z(``,!0):(N(),P(`button`,{key:0,disabled:!!i.value,onClick:t=>g(e.path)},`remove`,8,Bg))]))),128))])):z(``,!0),a.value?(N(),P(`pre`,Vg,T(a.value.slice(0,4e3)),1)):z(``,!0)])):z(``,!0)])):z(``,!0)}}),Ug=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Wg=Ug(Hg,[[`__scopeId`,`data-v-4bc5e75a`]]),Gg=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,Kg=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],qg={enabled:!0,reserveTokens:16384,backgroundTokens:32768,keepRecentTokens:2e3},Jg={auto:2e5,wait:25e4};function Yg(e){if(!(e>0))return{...qg};let t=Math.min(Jg.wait,e-qg.reserveTokens),n=Math.min(Jg.auto,t-qg.backgroundTokens);return{...qg,reserveTokens:e-t,backgroundTokens:t-n}}function Xg(e,t){let n=Math.max(0,e-t.reserveTokens);return{wait:n,auto:t.backgroundTokens>0?Math.max(0,n-t.backgroundTokens):void 0}}var Zg=(e,t)=>{if(e===void 0)throw Error(`No ${t} selected`);return e},Qg=[{name:`compact`,args:`[instructions]`,description:`Summarize older context; stored entries stay`,run:async e=>{await Zg(uu.value,`agent`).compact(e||void 0),W(`Compaction requested. /tasks shows its outcome.`)}},{name:`reset`,args:`[handoff note]`,description:`Start a fresh context; history stays stored`,run:async e=>{await Zg(uu.value,`agent`).reset(e||void 0),W(`New context started.`)}},{name:`tasks`,description:`Open the Tasks panel`,run:()=>Hu(`tasks`)},{name:`new`,args:`[name]`,description:`New agent in this workspace`,run:async e=>{let t=Zg(H.value,`workspace`),n=await Zg(du.value,`workspace`).createAgent(e?{name:e}:{});fu({...t,agentId:n.id}),W(`New agent ${n.name}.`)}},{name:`fork`,args:`[entryId] [name]`,description:`Fork at an entry (default: the last reply)`,run:async e=>{let[t,...n]=e.split(/\s+/).filter(Boolean),r=t&&/^\d+$/.test(t)?Number(t):void 0,i=(r===void 0?[t,...n]:n).filter(Boolean).join(` `),a=r??bu.value.entries.filter(e=>e.kind===`pi.assistant`).at(-1)?.id;if(a===void 0)throw Error(`Nothing to fork yet`);let o=Zg(H.value,`agent`),s=await Zg(uu.value,`agent`).fork({entryId:a,name:i||void 0});fu({...o,agentId:s.id}),W(`Forked at entry #${a}. App State stays shared.`)}},{name:`name`,args:`<name>`,description:`Rename this agent`,run:async e=>{if(!e)throw Error(`Usage: /name <name>`);await Zg(uu.value,`agent`).rename(e),W(`Agent renamed to ${e}.`)}},{name:`model`,description:`Choose this agent's model`,run:()=>U.dialog={kind:`models`}},{name:`thinking`,args:`<level>`,description:`Thinking level: ${Kg.join(`, `)}`,run:async e=>{if(!Kg.includes(e))throw Error(`Levels: ${Kg.join(`, `)}`);await Zg(uu.value,`agent`).configure({thinkingLevel:e}),await ku(),W(`Thinking ${e}. Used on the next turn.`)}},{name:`help`,description:`How this works, keys and commands`,run:()=>U.dialog={kind:`help`}}];function $g(e){let t=e.trim().match(/^\/(\S+)\s*([\s\S]*)$/),n=t&&Qg.find(e=>e.name===t[1]);return n?{command:n,arg:t[2].trim()}:void 0}var e_={class:`composer-region`},t_={key:0,class:`queue`},n_=[`aria-label`,`onClick`],r_={class:`composer`},i_={key:0,class:`slash-menu`,role:`listbox`,"aria-label":`Slash commands`},a_=[`aria-selected`,`onMousedown`],o_={key:0,class:`slash-args`},s_={class:`slash-desc`},c_={class:`composer-toolbar`},l_={class:`composer-left`},u_={class:`queue-mode`},d_={class:`composer-right`},f_=[`disabled`],p_=[`disabled`],m_=A({__name:`Composer`,setup(e){let t=O(`followUp`),n=O(!1),r=B(()=>iu.value&&bu.value.ready&&ou.status.value===`live`&&Yl.value===`live`),i=O(0),a=O(!1),o=B(()=>{let e=U.composer.match(/^\/(\S*)$/);return e&&!a.value?Qg.filter(t=>t.name.startsWith(e[1].toLowerCase())):[]});Zn(()=>U.composer,()=>{i.value=0,U.composer.startsWith(`/`)||(a.value=!1)});async function s(e,t=!1){!e.args||t&&e.args.startsWith(`[`)&&U.composer===`/${e.name}`?(U.composer=`/${e.name}`,await u()):U.composer=`/${e.name} `}function c(e){if(!o.value.length){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),u());return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=o.value.length;i.value=(i.value+(e.key===`ArrowDown`?1:t-1))%t}else if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey)s(o.value[i.value],e.key===`Enter`);else if(e.key===`Escape`)a.value=!0;else return;e.preventDefault(),e.stopPropagation()}async function l(e){let t=$g(e);return t?(n.value=!0,await ju(async()=>{await t.command.run(t.arg),U.composer=``}),n.value=!1,!0):!1}async function u(){let e=U.composer.trim(),i=uu.value;if(!e||n.value||!i||!r.value||e.startsWith(`/`)&&await l(e))return;n.value=!0;let a=H.value,o=`${a.deviceId}/${a.sessionId}/${a.agentId}`,s;try{s=JSON.parse(sessionStorage.getItem(`dpi.pending-send`)??`null`)}catch{}let c=s?.key===o&&s.content===e&&s.mode===t.value?s.requestId:Gg();sessionStorage.setItem(`dpi.pending-send`,JSON.stringify({key:o,content:e,mode:t.value,requestId:c})),await ju(async()=>{await i.send(e,t.value,c),sessionStorage.removeItem(`dpi.pending-send`),U.composer=``}),n.value=!1}function d(e){ju(()=>uu.value.withdraw(e))}return(e,a)=>(N(),P(`div`,e_,[k(bu).inbox.length?(N(),P(`div`,t_,[(N(!0),P(M,null,j(k(bu).inbox,e=>(N(),P(`div`,{key:e.id},[L(k(ec),{size:18}),I(`span`,null,T(e.mode===`steer`?`Steer`:`Queued`)+`: `+T(e.content??`Context update`),1),I(`button`,{class:`icon-button`,"aria-label":`Withdraw submission ${e.id}`,title:`Withdraw queued input`,onClick:t=>d(e.id)},[L(k(qc),{size:18})],8,n_)]))),128))])):z(``,!0),I(`div`,r_,[o.value.length?(N(),P(`ul`,i_,[(N(!0),P(M,null,j(o.value,(e,t)=>(N(),P(`li`,{key:e.name,role:`option`,"aria-selected":t===i.value,class:C({active:t===i.value}),onMousedown:As(t=>s(e),[`prevent`])},[I(`code`,null,`/`+T(e.name),1),e.args?(N(),P(`span`,o_,T(e.args),1)):z(``,!0),I(`span`,s_,T(e.description),1)],42,a_))),128))])):z(``,!0),Wn(I(`textarea`,{"onUpdate:modelValue":a[0]||=e=>k(U).composer=e,rows:`2`,placeholder:`Give your agent something to do, or type / for commands…`,"aria-label":`Message your agent`,onKeydown:c},null,544),[[bs,k(U).composer]]),I(`div`,c_,[I(`div`,l_,[I(`div`,u_,[Wn(I(`select`,{"onUpdate:modelValue":a[1]||=e=>t.value=e,"aria-label":`When busy`,title:`Follow-up waits for this run. Steer joins after a tool round.`},[...a[3]||=[I(`option`,{value:`followUp`},`Follow-up`,-1),I(`option`,{value:`steer`},`Steer`,-1),I(`option`,{value:`reject`},`Reject if busy`,-1)]],512),[[Cs,t.value]]),L(k(Xs),{size:24,"aria-hidden":`true`})])]),I(`div`,d_,[I(`button`,{class:`interrupt`,disabled:!k(wu)||k(Lu),title:`Stop foreground work and owned subagents (Escape). Background jobs continue.`,onClick:a[2]||=(...e)=>k(Ru)&&k(Ru)(...e)},[L(k(Tc),{size:24,class:`stop-sign`,fill:`currentColor`}),a[4]||=R(`Interrupt`,-1)],8,f_),I(`button`,{class:`send`,"aria-label":`Send message`,disabled:!k(U).composer.trim()||n.value||!r.value,onClick:u},[L(k(Gs),{size:20})],8,p_)])])]),a[5]||=I(`div`,{class:`composer-footnote`},[I(`span`,null,[I(`i`,{class:`live-dot`}),R(`Closing this window never interrupts your agent.`)])],-1)]))}}),h_={class:`chat-panel`},g_={class:`chat-header`},__={class:`lineage-picker`},v_={class:`lineage-toolbar`},y_=[`title`],b_={class:`crumb-main`},x_={class:`device-chip`},S_=[`title`],C_={class:`crumb-main`},w_={class:`crumb-name`},T_=[`aria-current`,`title`,`onClick`],E_={class:`crumb-kind`},D_={class:`crumb-main`},O_={class:`crumb-name`},k_=[`disabled`],A_=[`aria-expanded`],j_={key:0,class:`lineage-source`},M_={id:`conversation-picker`,class:`conversation-picker`,role:`dialog`,"aria-label":`Choose conversation`},N_=[`aria-label`,`aria-current`,`onClick`],P_={class:`conversation-choice-content`},F_={class:`choice-lineage`},I_={class:`choice-source`},L_={key:0,class:`agent-stream-status`,role:`alert`},R_=[`disabled`],z_={key:0,class:`chat-empty`},B_={key:0},V_={key:1},H_={key:0,class:`chat-empty`},U_={class:`starter-grid`},W_={key:1,class:`entry live-generation`},G_={class:`message-label`},K_={class:`streaming`},q_={key:2,class:`hint retry-note`},J_=A({__name:`AgentView`,setup(e){let t=O(),n=O(),r=O(!1),i=B(()=>bu.value.items),a=B(()=>i.value.some(e=>e.kind===`assistant`&&e.streaming)),o=B(()=>i.value.some(e=>e.kind===`tool`&&e.call.status===`running`||e.kind===`assistant`&&e.blocks.some(e=>e.type===`tool`&&e.call.status===`running`))),s=e=>e.kind===`fork`?`Forked from agent #${e.parentId} at entry #${e.forkedAt}`:e.kind===`subagent`?`Owned by agent #${e.ownerAgentId}`:`Root agent`,c=B(()=>xu.value.map(e=>({...e,lineage:cl(xu.value,e.id)})).sort((e,t)=>{for(let n=0;n<Math.min(e.lineage.length,t.lineage.length);n++)if(e.lineage[n].id!==t.lineage[n].id)return e.lineage[n].id-t.lineage[n].id;return e.lineage.length-t.lineage.length})),l=B(()=>Su.value.at(-1)),u=e=>e.kind===`root`?`agent`:e.kind;function d(){H.value&&(eu.tree=!0,hu(H.value.deviceId,!0))}function f(){let e=xu.value.find(e=>e.kind===`root`)??xu.value[0];e&&p(e.id)}function p(e){r.value=!1,H.value&&fu({...H.value,agentId:e})}function m(e){let t=uu.value,n=H.value;t&&n&&(U.dialog={kind:`prompt`,title:`Fork conversation`,hint:`${l.value?.name??`Agent #${n.agentId}`} / entry #${e}. Leave the name blank to use Fork #ID.`,label:`Fork name`,optional:!0,placeholder:`e.g. Alternative approach`,submit:`Create fork`,run:async r=>{let i=await t.fork({entryId:e,name:r||void 0});fu({...n,agentId:i.id}),W(`Forked at entry #${e}. App State stays shared.`)}})}function h(){let e=uu.value,t=l.value;e&&t&&(U.dialog={kind:`prompt`,title:`Rename agent`,label:`Agent name`,value:t.named?t.name:``,placeholder:t.name,submit:`Save name`,run:t=>e.rename(t)})}Zn(H,()=>{r.value=!1});let g=!0;return Zn(ou.version,()=>{let e=t.value;g=!e||e.scrollHeight-e.scrollTop-e.clientHeight<120},{flush:`pre`}),Zn(ou.version,()=>{g&&jn(()=>t.value?.scrollTo({top:t.value.scrollHeight,behavior:`instant`}))}),Zn(()=>Su.value.length,()=>void jn(()=>n.value&&(n.value.scrollLeft=n.value.scrollWidth))),(e,g)=>(N(),P(`section`,h_,[I(`header`,g_,[I(`div`,__,[I(`div`,v_,[I(`nav`,{ref_key:`lineageNav`,ref:n,class:`crumbs conversation-lineage`,"aria-label":`Conversation lineage`},[I(`button`,{class:`crumb`,title:`${k(ru)?.name} · ${k(ru)?.url}`,onClick:d},[g[5]||=I(`span`,{class:`crumb-kind`},`device`,-1),I(`span`,b_,[L(cd,{device:k(ru),size:18},null,8,[`device`]),I(`span`,x_,T(k(ru)?.name??k(ru)?.id),1)])],8,y_),L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:`crumb`,title:k(cu)?.cwd,onClick:f},[g[6]||=I(`span`,{class:`crumb-kind`},`workspace`,-1),I(`span`,C_,[L(k(sc),{size:18,"aria-hidden":`true`}),I(`span`,w_,T(k(cu)?.name),1)])],8,S_),k(cu)?.cwd?(N(),F(Wg,{key:0})):z(``,!0),(N(!0),P(M,null,j(k(Su),e=>(N(),P(M,{key:e.id},[L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:C([`crumb`,{current:e.id===k(H)?.agentId}]),"aria-current":e.id===k(H)?.agentId?`page`:void 0,title:s(e),onClick:t=>p(e.id)},[I(`span`,E_,T(u(e)),1),I(`span`,D_,[e.kind===`fork`?(N(),F(k(uc),{key:0,size:18,"aria-hidden":`true`})):e.kind===`subagent`?(N(),F(k(nc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(xc),{key:2,size:18,"aria-hidden":`true`})),I(`span`,O_,T(e.name),1)])],10,T_)],64))),128))],512),I(`button`,{class:`icon-button`,"aria-label":`Rename agent`,title:`Rename this agent`,disabled:!l.value,onClick:h},[L(k(Ac),{size:18})],8,k_),I(`button`,{class:`icon-button conversation-menu-toggle`,"aria-label":`Browse conversations`,"aria-haspopup":`dialog`,"aria-expanded":r.value,"aria-controls":`conversation-picker`,title:`Browse roots and forks`,onClick:g[0]||=e=>r.value=!r.value},[L(k(Xs),{size:18})],8,A_)]),l.value&&l.value.kind!==`root`?(N(),P(`div`,j_,T(s(l.value)),1)):z(``,!0),r.value?(N(),P(M,{key:1},[I(`button`,{class:`conversation-menu-dismiss`,"aria-label":`Close conversation picker`,onClick:g[1]||=e=>r.value=!1}),I(`section`,M_,[g[7]||=I(`div`,{class:`conversation-picker-heading`},`Roots & forks`,-1),(N(!0),P(M,null,j(c.value,e=>(N(),P(`button`,{key:e.id,class:C([`conversation-choice`,{selected:e.id===k(H)?.agentId}]),"aria-label":e.lineage.map(e=>e.name).join(` → `),"aria-current":e.id===k(H)?.agentId?`page`:void 0,onClick:t=>p(e.id)},[I(`div`,P_,[I(`span`,F_,[(N(!0),P(M,null,j(e.lineage,(t,n)=>(N(),P(M,{key:t.id},[n?(N(),F(k(Zs),{key:0,size:18,"aria-hidden":`true`})):z(``,!0),I(`span`,{class:C({"choice-ancestor":n<e.lineage.length-1})},T(t.name),3)],64))),128))]),I(`span`,I_,T(s(e)),1)]),e.id===k(H)?.agentId?(N(),F(k(Ys),{key:0,size:18,"aria-hidden":`true`})):e.kind===`fork`?(N(),F(k(uc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(xc),{key:2,size:18,"aria-hidden":`true`}))],10,N_))),128))])],64)):z(``,!0)])]),k(ou).fault.value||k(ou).status.value===`fault`||k(ou).status.value===`reconnecting`||k(bu).ready&&k(ou).status.value===`connecting`?(N(),P(`div`,L_,[I(`div`,null,[I(`strong`,null,T(k(bu).ready?`Cached transcript is stale.`:`Agent stream unavailable.`),1),I(`p`,null,T(k(ou).fault.value||`Updates are paused while the stream reconnects.`),1),g[8]||=I(`p`,null,`Sending is paused until a fresh snapshot arrives. Your draft is kept.`,-1)]),I(`button`,{disabled:k(ou).status.value===`connecting`,onClick:g[2]||=(...e)=>k(ou).retry&&k(ou).retry(...e)},` Retry stream `,8,R_)])):z(``,!0),I(`div`,{ref_key:`chat`,ref:t,class:`chat-scroll`,"data-testid":`chat`},[k(bu).ready?(N(),P(M,{key:1},[i.value.length?z(``,!0):(N(),P(`div`,H_,[g[13]||=I(`div`,{class:`agent-orb`},[I(`img`,{src:`/icons/durable-pi.svg`,alt:`Durable Pi`}),I(`i`)],-1),g[14]||=I(`span`,{class:`eyebrow`},`YOUR DURABLE AGENT IS READY`,-1),g[15]||=I(`h2`,null,`A conversation with continuity.`,-1),I(`p`,null,`Messages, tools and state live on `+T(k(ru)?.id)+`, beyond this window.`,1),I(`div`,U_,[I(`button`,{onClick:g[3]||=e=>k(Mu)(`Inspect this directory using your tools and give me a brief overview. Do not modify any files.`)},[L(k(sc),{size:18}),g[9]||=I(`strong`,null,`Explore this directory`,-1),g[10]||=I(`span`,null,`See coding tools in action`,-1),L(k(Ws),{size:18})]),I(`button`,{onClick:g[4]||=e=>k(Mu)(`Use read_state, then update_state to add a field called progress with value 1 and a boolean called ready with value false.`)},[L(k(qs),{size:18}),g[11]||=I(`strong`,null,`Make a state change`,-1),g[12]||=I(`span`,null,`Watch the workspace update`,-1),L(k(Ws),{size:18})])])])),(N(!0),P(M,null,j(i.value,e=>(N(),F(_g,{key:e.id,item:e,onFork:m},null,8,[`item`]))),128)),k(bu).running&&!a.value&&!o.value?(N(),P(`div`,W_,[I(`div`,G_,[g[16]||=R(` AGENT `,-1),I(`span`,K_,T(k(bu).retry?`Retry scheduled`:`Working`),1)]),g[17]||=I(`div`,{class:`typing`},[I(`i`),I(`i`),I(`i`)],-1)])):z(``,!0),k(bu).retry?(N(),P(`p`,q_,` Retrying: `+T(k(bu).retry.error),1)):z(``,!0),(N(!0),P(M,null,j(k(bu).notices,(e,t)=>(N(),P(`p`,{key:t,class:`message-error`},T(e),1))),128))],64)):(N(),P(`div`,z_,[L(k(Hs),{size:30}),k(ou).status.value===`fault`?(N(),P(`h2`,B_,`This agent is unavailable.`)):(N(),P(`h2`,V_,`Connecting to the agent…`)),I(`p`,null,`The agent keeps working on `+T(k(ru)?.id)+` while this view connects.`,1)]))],512),L(m_)]))}});function Y_(e,t){return`${e}/${t.replaceAll(`~`,`~0`).replaceAll(`/`,`~1`)}`}var X_=[`data-state-path`],Z_={key:0,class:`state-field-heading`},Q_=[`value`,`aria-label`,`disabled`],$_=[`value`],ev=[`aria-label`,`disabled`],tv=[`aria-label`,`disabled`],nv=[`aria-label`,`disabled`],rv=[`value`],iv=[`disabled`],av=[`disabled`,`aria-label`],ov={key:2,class:`state-number`},sv=[`aria-label`,`disabled`],cv=[`aria-label`,`disabled`],lv=[`aria-label`,`disabled`],uv={key:3,class:`state-boolean`},dv=[`aria-label`,`aria-checked`,`disabled`],fv=[`aria-label`,`disabled`],pv={key:5,class:`muted`},mv=A({__name:`StateEditor`,props:{value:{type:[String,Number,Boolean,null,Array,Object]},path:{default:``},label:{default:`App State`},disabled:{type:Boolean}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>n.value===null?`null`:Array.isArray(n.value)?`array`:typeof n.value),a=B(()=>i.value===`object`||i.value===`array`),o=B(()=>a.value?Object.entries(n.value):[]),s=O(``),c=O(!1),l=O(``),u=O(`string`),d=O(!1),f=[`string`,`number`,`boolean`,`object`,`array`,`null`],p={string:()=>``,number:()=>0,boolean:()=>!1,object:()=>({}),array:()=>[],null:()=>null};Zn(()=>n.value,e=>{c.value||(s.value=String(e??``))},{immediate:!0});function m(e,t){r(`change`,{operation:e,path:n.path,value:t})}function h(){c.value=!1;let e=i.value===`number`?Number(s.value):s.value;if(i.value===`number`&&(!String(s.value).trim()||!Number.isFinite(e))){s.value=String(n.value);return}e!==n.value&&m(`update`,e)}function g(){let e=i.value===`array`?`-`:l.value.trim();e&&(r(`change`,{operation:`create`,path:Y_(n.path,e),value:p[u.value]()}),l.value=``,d.value=!1)}return(t,n)=>{let _=ei(`StateEditor`,!0);return N(),P(`div`,{class:C([`state-field`,{"state-root":e.path===``}]),"data-state-path":e.path},[e.path===``?z(``,!0):(N(),P(`div`,Z_,[I(`strong`,null,T(e.label),1),I(`select`,{value:i.value,"aria-label":`Type of ${e.path}`,disabled:e.disabled,onChange:n[0]||=e=>m(`update`,p[e.target.value]())},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,$_)),64))],40,Q_),I(`button`,{class:`icon-button`,"aria-label":`Delete ${e.path}`,title:`Delete field`,disabled:e.disabled,onClick:n[1]||=e=>m(`delete`)},[L(k(Vc),{size:18})],8,ev)])),a.value?(N(),P(M,{key:1},[(N(!0),P(M,null,j(o.value,([t,i])=>(N(),F(_,{key:t,value:i,path:k(Y_)(e.path,t),label:t,disabled:e.disabled,onChange:n[2]||=e=>r(`change`,e)},null,8,[`value`,`path`,`label`,`disabled`]))),128)),d.value&&i.value===`array`?(N(),P(`form`,{key:0,class:`state-add`,onSubmit:As(g,[`prevent`])},[i.value===`array`?z(``,!0):Wn((N(),P(`input`,{key:0,"onUpdate:modelValue":n[3]||=e=>l.value=e,placeholder:`Field name`,"aria-label":`New field name in ${e.path||`/`}`,required:``,disabled:e.disabled},null,8,tv)),[[bs,l.value]]),Wn(I(`select`,{"onUpdate:modelValue":n[4]||=e=>u.value=e,"aria-label":`New field type in ${e.path||`/`}`,disabled:e.disabled},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,rv)),64))],8,nv),[[Cs,u.value]]),I(`button`,{class:`secondary small`,disabled:e.disabled||i.value!==`array`&&!l.value.trim()},` Add `,8,iv),I(`button`,{type:`button`,class:`text-button`,onClick:n[5]||=e=>d.value=!1},`Cancel`)],32)):i.value===`array`?(N(),P(`button`,{key:1,class:`text-button state-add-button`,disabled:e.disabled,"aria-label":`Add ${i.value===`array`?`item`:`field`} to ${e.path||`/`}`,onClick:n[6]||=e=>d.value=!0},[L(k(Mc),{size:18}),R(T(i.value===`array`?`Add item`:`Add field`),1)],8,av)):z(``,!0)],64)):i.value===`number`?(N(),P(`div`,ov,[I(`button`,{class:`secondary`,"aria-label":`Decrement ${e.path}`,disabled:e.disabled,onClick:n[7]||=e=>m(`increment`,-1)},[L(k(Sc),{size:18})],8,sv),Wn(I(`input`,{"onUpdate:modelValue":n[8]||=e=>s.value=e,type:`number`,step:`any`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[9]||=e=>c.value=!0,onBlur:h,onKeydown:n[10]||=Ms(e=>e.target.blur(),[`enter`])},null,40,cv),[[bs,s.value]]),I(`button`,{class:`secondary`,"aria-label":`Increment ${e.path}`,disabled:e.disabled,onClick:n[11]||=e=>m(`increment`,1)},[L(k(Mc),{size:18})],8,lv)])):i.value===`boolean`?(N(),P(`div`,uv,[I(`button`,{class:C([`switch`,{on:e.value===!0}]),role:`switch`,"aria-label":`Value of ${e.path}`,"aria-checked":e.value===!0,disabled:e.disabled,onClick:n[12]||=t=>m(`update`,!e.value)},[...n[15]||=[I(`span`,null,null,-1)]],10,dv),I(`span`,null,T(e.value),1)])):i.value===`string`?Wn((N(),P(`textarea`,{key:4,"onUpdate:modelValue":n[13]||=e=>s.value=e,rows:`2`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[14]||=e=>c.value=!0,onBlur:h},null,40,fv)),[[bs,s.value]]):(N(),P(`span`,pv,`null`))],10,X_)}}}),hv=[`data-status`],gv=[`title`],_v=[`title`],vv=[`href`],yv=[`title`],bv=A({__name:`TunnelStatusBar`,props:{device:{}},setup(e){let t=e,n=B(()=>t.device.status===`online`),r=B(()=>t.device.transport===`tunnel`),i=B(()=>n.value?r.value?`online · via tunnel`:`online · LAN`:r.value?`tunnel`:`LAN`),a=B(()=>t.device.tunnel?.state===`connected`);return(t,o)=>(N(),P(`span`,{class:`tunnel-status`,"data-status":e.device.status},[I(`span`,{class:`axis transport`,title:r.value?`Hub ⇄ device over the tunnel (WSS)`:`Hub → device over LAN`},[r.value?(N(),F(k(Js),{key:0,size:13,class:C({live:a.value})},null,8,[`class`])):(N(),F(k(Wc),{key:1,size:13,class:C({live:n.value})},null,8,[`class`])),R(` `+T(i.value),1)],8,gv),I(`span`,{class:C([`axis monitor`,e.device.status])},[e.device.status===`offline`?(N(),F(k(Uc),{key:0,size:13})):(N(),P(M,{key:1},[R(T(e.device.status),1)],64))],2),r.value&&a.value&&e.device.tunnel?(N(),P(`span`,{key:0,class:`axis muted`,title:`tunnel last seen ${k(Iu)(e.device.tunnel.lastSeenAt)}`},T(e.device.tunnel.readerCount)+` reader`+T(e.device.tunnel.readerCount===1?``:`s`),9,_v)):z(``,!0),e.device.url?(N(),P(`a`,{key:1,class:`axis url`,href:e.device.url,target:`_blank`,rel:`noreferrer`},T(e.device.url),9,vv)):z(``,!0),e.device.lastSeenAt?(N(),P(`span`,{key:2,class:`axis muted`,title:`last probe ${k(Iu)(e.device.lastSeenAt)}`},T(k(Iu)(e.device.lastSeenAt)),9,yv)):z(``,!0)],8,hv))}});async function xv(e,t,n,r,i){let a=await fetch(`/api${t}`,{method:e,headers:n===void 0?{}:{"content-type":`application/json`},body:n===void 0?void 0:JSON.stringify(n),signal:r,...i?{keepalive:i}:{}}),o=await a.json().catch(()=>void 0);if(!a.ok){let e=o?.error;throw new Sl(e?.code??`internal`,e?.message??`${a.status} ${a.statusText}`,a.status)}return o}function Sv(e){return e.offerUrl??e.pairUrl}var Cv={pending:e=>xv(`GET`,`/pair/codes`,void 0,e),pairings:e=>xv(`GET`,`/pairings`,void 0,e),createCode:e=>xv(`POST`,`/pair/code`,{},e),resolveCode:(e,t)=>xv(`POST`,`/pair/resolve`,{code:e},t),codeState:(e,t)=>xv(`GET`,`/pair/codes/${encodeURIComponent(e)}`,void 0,t),approve:(e,t,n)=>xv(`POST`,`/pair/codes/${encodeURIComponent(e)}/approve`,t,n),cancel:(e,t,n)=>xv(`POST`,`/pair/codes/${encodeURIComponent(e)}/cancel`,{},t,n),rotate:(e,t)=>xv(`POST`,`/pairings/${encodeURIComponent(e)}/rotate`,{},t),revoke:(e,t=`user`,n)=>xv(`POST`,`/pairings/${encodeURIComponent(e)}/revoke`,{reason:t},n)},wv=0;function Tv(){let e=++wv,t=!1;return{gen:e,close:()=>t=!0,closed:()=>t}}var Ev=class extends Error{codeId;constructor(e){super(`pairing poll timed out for ${e}`),this.codeId=e,this.name=`PollTimeout`}},Dv=e=>e===`issued`||e===`cancelled`||e===`expired`;async function Ov(e,t,n={}){let r=n.intervalMs??1e3,i=Date.now()+(n.timeoutMs??33e4);for(;;){if(e.closed())return;if(n.signal?.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`);if(Date.now()>i)throw new Ev(t);let a=await Cv.codeState(t,n.signal);if(e.closed())return;if(e.state=a,n.onState?.(a),Dv(a.phase))return a;await new Promise(e=>setTimeout(e,r))}}var kv={key:0,class:`token-manager`,"aria-label":`Credential manager`},Av={class:`credential-fingerprint`},jv=[`title`],Mv={key:0,class:`rotation-badge`,role:`status`},Nv={class:`token-actions`},Pv=[`disabled`],Fv=[`disabled`],Iv={key:1,class:`message-error`,role:`alert`},Lv=A({__name:`TokenManager`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>t.device.pairing);async function a(){if(!n.value){n.value=!0,r.value=``;try{await Cv.rotate(t.device.id),W(`Rotation queued — it completes when the device acknowledges the new credential.`)}catch(e){r.value=Rl(e)}finally{n.value=!1}}}async function o(){n.value||(U.dialog={kind:`prompt`,title:`Revoke ${t.device.id}?`,hint:`Every tunnel credential for this device dies at commit and the live tunnel is cut within a second. The device cleans its own files the next time it talks to the hub.`,submit:`Revoke`,danger:!0,run:async()=>{await Cv.revoke(t.device.id,`user`),W(`Revoke committed on the hub. The tunnel is cut; the device cleans up on its next contact.`)}})}return(e,t)=>i.value?(N(),P(`section`,kv,[I(`header`,null,[L(k(mc),{size:15}),t[0]||=I(`h3`,null,`Credential`,-1),I(`span`,{class:C([`pairing-status`,i.value.status])},T(i.value.status),3)]),I(`dl`,null,[t[1]||=I(`dt`,null,`Key fingerprint`,-1),I(`dd`,null,[I(`code`,Av,T(i.value.keyFingerprint),1)]),t[2]||=I(`dt`,null,`Paired`,-1),I(`dd`,{title:new Date(i.value.pairedAt).toISOString()},T(k(Iu)(i.value.pairedAt)),9,jv),t[3]||=I(`dt`,null,`Generation`,-1),I(`dd`,null,T(i.value.credentialGeneration),1)]),i.value.rotationPending?(N(),P(`p`,Mv,[L(k(Pc),{size:13,class:`spin`}),t[4]||=R(` rotation queued — waiting for the device to ACK `,-1)])):z(``,!0),I(`div`,Nv,[i.value.status===`paired`?(N(),P(`button`,{key:0,class:`small`,disabled:n.value||i.value.rotationPending,onClick:a},[L(k(Pc),{size:14}),t[5]||=R(` Rotate credential `,-1)],8,Pv)):z(``,!0),i.value.status===`paired`?(N(),P(`button`,{key:1,class:`small danger`,disabled:n.value,onClick:o},[L(k(zc),{size:14}),t[6]||=R(` Revoke `,-1)],8,Fv)):z(``,!0)]),r.value?(N(),P(`p`,Iv,T(r.value),1)):z(``,!0)])):z(``,!0)}}),Rv={class:`tasks-panel`},zv={class:`panel-heading`},Bv={class:`tag`},Vv={key:0,class:`message-error`,role:`alert`},Hv={class:`task-section`,"aria-label":`Durable jobs`},Uv={key:0,class:`task-empty`},Wv=[`data-job`],Gv={class:`job-def-head`},Kv={key:0,class:`tag`},qv={class:`tag`},Jv=[`aria-label`],Yv=[`title`],Xv={class:`job-def-meta`},Zv=[`title`],Qv=[`title`],$v={key:0,class:`job-def-last`},ey=[`onClick`],ty=[`disabled`,`onClick`],ny=[`disabled`,`onClick`],ry=[`disabled`,`onClick`],iy={class:`task-section`,"aria-label":`Agent activity`},ay={class:`panel-heading`},oy={key:0,class:`task-empty`},sy={key:1,class:`task-tree`},cy=[`data-task-kind`],ly={class:`tag`},uy={key:0,class:`task-phase`},dy=[`onClick`],fy=[`disabled`],py={class:`raw`},my=A({__name:`TasksPanel`,setup(e){let t=O(``),n=O(!1),r=O([]),i=O(),a=e=>({running:`Running`,waiting:`Waiting`,completed:`Completed`,aborted:`Stopped`,declined:`Declined`,failed:`Failed`,pending:`Queued`,completing:`Finishing`,terminal:`Finished`})[e]??e,o=B(()=>new Map(rh.value.map(e=>[e.id,ah.value.find(t=>t.job===e.id)]))),s=B(()=>{let e=Cu.value,t=new Set(e.map(e=>e.id)),n=new Map;for(let r of e){let e=r.owner!==void 0&&t.has(r.owner)?r.owner:void 0;n.set(e,[...n.get(e)??[],r])}let r=[],i=(e,t)=>{for(let a of(n.get(e)??[]).sort((e,t)=>e.id-t.id))r.push({task:a,depth:t}),i(a.id,t+1)};return i(void 0,0),r}),c=e=>e.kind===`pi.tool`?{icon:Kc,name:e.label??`Tool call`,what:`tool call`}:e.kind===`pi.generation`?{icon:Ks,name:`Model response`,what:`generation`}:e.kind===`pi.compaction`?{icon:gc,name:`Compaction`,what:`compaction`}:e.kind.startsWith(`demo.job.`)?{icon:Gc,name:e.label??ih(e.kind.slice(9))?.title??e.kind,what:`durable job`}:e.kind===`demo.job-approval`?{icon:Rc,name:`Approval`,what:`waits for you`}:{icon:Hs,name:e.label??e.kind,what:e.kind},l=e=>e.state.phase?e.kind.startsWith(`demo.job.`)?ih(e.kind.slice(9))?.phases.find(t=>t.id===e.state.phase)?.label??e.state.phase:e.state.phase:``;async function u(){if(!n.value&&uu.value){n.value=!0,t.value=``;try{await uu.value.abort(!0)}catch(e){t.value=Rl(e)}finally{n.value=!1}}}async function d(e){let n=du.value;if(e.target.open&&n)try{let[e,t]=await Promise.all([n.tasks(`terminal`,40),n.inspect()]);r.value=e,i.value=t}catch(e){t.value=Rl(e)}}let f=B(()=>r.value.filter(e=>e.state.status===`terminal`).slice(-12).reverse());return(e,r)=>(N(),P(`div`,Rv,[I(`div`,zv,[r[0]||=I(`h2`,null,`Tasks`,-1),I(`span`,Bv,T(k(Cu).length)+` active`,1)]),t.value?(N(),P(`p`,Vv,T(t.value),1)):z(``,!0),I(`section`,Hv,[I(`h3`,null,[L(k(Fc),{size:18}),r[1]||=R(`Durable jobs`,-1)]),r[2]||=I(`p`,{class:`hint`},[R(` Repeatable workflows with named phases. Every run follows the same phases and saves a checkpoint after each one. Start one here, or ask your agent: it finds these with `),I(`code`,null,`list_durable_jobs`),R(`, starts them with `),I(`code`,null,`run_durable_job`),R(` and checks them with `),I(`code`,null,`check_durable_job`),R(`. Runs play out live in the chat. `)],-1),k(rh).length?z(``,!0):(N(),P(`p`,Uv,` This device has no durable jobs. Deploy the latest backend to it. `)),(N(!0),P(M,null,j(k(rh),e=>(N(),P(`article`,{key:e.id,class:`job-def`,"data-job":e.id},[I(`div`,Gv,[L(k(Gc),{size:18}),I(`strong`,null,T(e.title),1),e.approval?(N(),P(`span`,Kv,`needs approval`)):z(``,!0),I(`span`,qv,`~`+T(e.seconds)+`s`,1)]),I(`p`,null,T(e.summary),1),I(`ol`,{class:`job-chain`,"aria-label":`${e.title} phases`},[(N(!0),P(M,null,j(e.phases,(e,t)=>(N(),P(`li`,{key:e.id,title:e.summary},[I(`span`,null,T(t+1),1),R(T(e.label),1),e.kind===`repeat`?(N(),F(k(Fc),{key:0,size:13})):z(``,!0),e.kind===`approval`?(N(),F(k(Rc),{key:1,size:13})):z(``,!0)],8,Yv))),128))],8,Jv),I(`div`,Xv,[(N(!0),P(M,null,j(e.inputs,e=>(N(),P(`code`,{key:e.name,title:e.description},T(e.name)+`=`+T(e.default),9,Zv))),128)),I(`code`,{title:`Each run saves its result to App State ${e.resultPath}`},`→ `+T(e.resultPath),9,Qv)]),o.value.get(e.id)?(N(),P(`div`,$v,[I(`span`,null,[R(`Run #`+T(o.value.get(e.id).run)+`: `,1),I(`strong`,null,T(a(o.value.get(e.id).status)),1),k(nh)(o.value.get(e.id))?z(``,!0):(N(),P(M,{key:0},[R(` in `+T(o.value.get(e.id).phases.find(t=>t.id===o.value.get(e.id).phase)?.label),1)],64))]),I(`button`,{class:`text-button`,onClick:t=>k(fh)(o.value.get(e.id).id)},` Show in chat `,8,ey),o.value.get(e.id).approval===`pending`?(N(),P(M,{key:0},[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!0)},` Approve `,8,ty),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!1)},` Decline `,8,ny)],64)):z(``,!0)])):z(``,!0),I(`button`,{class:`secondary job-def-run`,disabled:!!k(uh)||!k(uu),onClick:t=>k(ph)(e)},[L(k(jc),{size:16}),R(`Run `+T(e.title),1)],8,ry)],8,Wv))),128))]),I(`section`,iy,[I(`div`,ay,[r[3]||=I(`h3`,null,`Agent activity`,-1),L(k(Hs),{size:18})]),r[5]||=I(`p`,{class:`hint`},` Every model response and every tool call is its own durable task with an id, an owner and a checkpoint. Follow them live here; after a restart each one resumes or reports how it ended. `,-1),s.value.length?(N(),P(`ul`,sy,[(N(!0),P(M,null,j(s.value,({task:e,depth:t})=>(N(),P(`li`,{key:e.id,class:`task-row`,style:ye({"--depth":t}),"data-task-kind":e.kind},[(N(),F(ni(c(e).icon),{size:16})),I(`strong`,null,T(c(e).name),1),I(`span`,ly,T(a(e.state.status)),1),l(e)?(N(),P(`span`,uy,T(l(e)),1)):z(``,!0),I(`small`,null,`#`+T(e.id)+` `+T(c(e).what)+`, agent #`+T(e.conversationId)+T(e.effectiveBackground?`, background`:``),1),(N(!0),P(M,null,j(e.conversations,e=>(N(),P(`button`,{key:e,class:`text-button`,onClick:t=>k(gh)(e)},` Open agent #`+T(e),9,dy))),128))],12,cy))),128))])):(N(),P(`p`,oy,`Nothing running. Send a message or run a job.`)),r[6]||=I(`p`,{class:`hint`},` Interrupt or Esc stops foreground work and what it owns. Stop all also stops background runs. `,-1),I(`button`,{class:`secondary danger`,disabled:!k(Cu).length||n.value,onClick:u},[L(k(Tc),{size:18}),r[4]||=R(`Stop all `,-1)],8,fy)]),I(`details`,{class:`raw task-section`,onToggle:d},[I(`summary`,null,[L(k(ec),{size:18}),r[7]||=R(`Runtime details`,-1)]),r[9]||=I(`p`,{class:`hint`},` Recent task results and recovery records, read from the device when opened. `,-1),(N(!0),P(M,null,j(f.value,e=>(N(),P(`details`,{key:e.id,class:`raw`},[I(`summary`,null,[R(T(e.kind)+` #`+T(e.id),1),I(`span`,null,T(a(e.state.outcome?.status??e.state.status)),1)]),I(`pre`,null,T(JSON.stringify(e.state.outcome,null,2)),1)]))),128)),I(`details`,py,[r[8]||=I(`summary`,null,`Recovery inspection`,-1),I(`pre`,null,T(JSON.stringify(i.value,null,2)),1)])],32)]))}}),hy={class:`git-tab`},gy={key:0,class:`empty`},_y={class:`git-head`},vy=[`title`],yy=[`disabled`],by={key:0,class:`error`},xy={key:1,class:`empty`},Sy={class:`facts`},Cy={key:0},wy={key:1},Ty={key:2,class:`wt-of`},Ey={class:`row`},Dy=[`disabled`],Oy=[`disabled`],ky=[`disabled`],Ay=[`disabled`],jy=[`disabled`],My={class:`row`},Ny=[`disabled`],Py={class:`row`},Fy=[`disabled`],Iy={key:0,class:`wts`},Ly={class:`muted`},Ry=[`disabled`,`onClick`],zy={key:1,class:`out`},By=Ug(A({__name:`GitPanel`,props:{deviceId:{},cwd:{}},setup(e){let t=e,n=O(null),r=O(``),i=O(``),a=O(``),o=O(``),s=O(``),c=B(()=>t.cwd??cu.value?.cwd??``),l=B(()=>t.deviceId??nu.value),u=()=>l.value?Fl(l.value):null,d;async function f(){let e=u();if(e&&c.value)try{n.value=await e.gitStatus(c.value),r.value=``}catch(e){n.value=null,r.value=e.message.slice(0,160)}}f(),Yr(()=>f()),Wr(()=>{d=setInterval(f,1e4)}),qr(()=>d&&clearInterval(d)),Zn(c,()=>void f());async function p(e){let t=u();if(t&&c.value){i.value=e,a.value=``;try{let n=await t.gitOp(c.value,e);a.value=n.text||`(empty)`,(e===`fetch`||e===`pull`)&&W(`git ${e} ✓`),await f()}catch(t){a.value=`${e} failed: ${t.message.slice(0,200)}`}finally{i.value=``}}}async function m(){let e=u();if(e&&c.value&&o.value.trim()){i.value=`commit`;try{W((await e.gitOp(c.value,`commit`,{message:o.value.trim()})).text),o.value=``,await f()}catch(e){W(`commit failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}}async function h(){let e=u();if(!e||!c.value||!s.value.trim()||!n.value?.root)return;let t=n.value.root,r=t.slice(0,t.lastIndexOf(`/`)),a=t.slice(t.lastIndexOf(`/`)+1);i.value=`wt`;try{W((await e.gitOp(c.value,`worktree-add`,{branch:s.value.trim(),target:`${r}/${a}-${s.value.trim()}`})).text.split(`
|
|
78
|
-
`)[0]??`worktree added`),s.value=``,await f()}catch(e){W(`worktree failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}async function g(e){let t=u();if(t&&c.value&&confirm(`Remove worktree ${e}?`)){i.value=`wt`;try{await t.gitOp(c.value,`worktree-remove`,{target:e}),await f()}catch(e){W(`remove failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}}return(e,t)=>(N(),P(`div`,hy,[c.value?(N(),P(M,{key:1},[I(`header`,_y,[t[8]||=I(`strong`,null,`git`,-1),I(`code`,{class:`cwd`,title:c.value},T(c.value),9,vy),I(`button`,{disabled:!!i.value,title:`refresh`,onClick:t[0]||=e=>f()},[L(k(Pc),{size:14})],8,yy)]),r.value?(N(),P(`p`,by,T(r.value),1)):z(``,!0),n.value&&!n.value.repo?(N(),P(`p`,xy,[...t[9]||=[R(` Not a git repository — run `,-1),I(`code`,null,`git init`,-1),R(` (or open a session inside a repo) to see branch, status and worktrees here. `,-1)]])):n.value?(N(),P(M,{key:2},[I(`dl`,Sy,[I(`div`,null,[t[10]||=I(`dt`,null,`branch`,-1),I(`dd`,null,T(n.value.branch??`detached`),1)]),n.value.upstream?(N(),P(`div`,Cy,[t[11]||=I(`dt`,null,`upstream`,-1),I(`dd`,null,T(n.value.upstream),1)])):z(``,!0),I(`div`,null,[t[12]||=I(`dt`,null,`changes`,-1),I(`dd`,null,`+`+T(n.value.staged??0)+` ~`+T(n.value.unstaged??0)+` ?`+T(n.value.untracked??0),1)]),n.value.ahead||n.value.behind?(N(),P(`div`,wy,[t[13]||=I(`dt`,null,`sync`,-1),I(`dd`,null,`↑`+T(n.value.ahead??0)+` ↓`+T(n.value.behind??0),1)])):z(``,!0),I(`div`,null,[t[14]||=I(`dt`,null,`head`,-1),I(`dd`,null,T(n.value.head)+` `+T(n.value.subject),1)]),n.value.worktreeOf?(N(),P(`div`,Ty,[t[15]||=I(`dt`,null,`worktree of`,-1),I(`dd`,null,T(n.value.worktreeOf),1)])):z(``,!0)]),I(`div`,Ey,[I(`button`,{disabled:!!i.value,onClick:t[1]||=e=>p(`fetch`)},`fetch`,8,Dy),I(`button`,{disabled:!!i.value,onClick:t[2]||=e=>p(`pull`)},`pull`,8,Oy),I(`button`,{disabled:!!i.value,onClick:t[3]||=e=>p(`log`)},`log`,8,ky),I(`button`,{disabled:!!i.value,onClick:t[4]||=e=>p(`branch`)},`branches`,8,Ay),I(`button`,{disabled:!!i.value,onClick:t[5]||=e=>p(`diff`)},`diff`,8,jy)]),I(`div`,My,[Wn(I(`input`,{"onUpdate:modelValue":t[6]||=e=>o.value=e,placeholder:`commit message…`,onKeyup:Ms(m,[`enter`])},null,544),[[bs,o.value]]),I(`button`,{disabled:!!i.value||!o.value.trim(),onClick:m},`commit -am`,8,Ny)]),I(`div`,Py,[Wn(I(`input`,{"onUpdate:modelValue":t[7]||=e=>s.value=e,placeholder:`branch name…`,onKeyup:Ms(h,[`enter`])},null,544),[[bs,s.value]]),I(`button`,{disabled:!!i.value||!s.value.trim(),onClick:h},`+ worktree`,8,Fy)]),(n.value.worktrees?.length??0)>1?(N(),P(`ul`,Iy,[(N(!0),P(M,null,j(n.value.worktrees,e=>(N(),P(`li`,{key:e.path},[I(`code`,null,T(e.path),1),I(`span`,Ly,T(e.branch??e.head),1),e.path===n.value.root?z(``,!0):(N(),P(`button`,{key:0,disabled:!!i.value,onClick:t=>g(e.path)},`remove`,8,Ry))]))),128))])):z(``,!0),a.value?(N(),P(`pre`,zy,T(a.value.slice(0,6e3)),1)):z(``,!0)],64)):z(``,!0)],64)):(N(),P(`p`,gy,`No session selected — open a session to see its git.`))]))}}),[[`__scopeId`,`data-v-90868b08`]]),Vy={class:`extensions-panel`},Hy={class:`panel-heading`},Uy={key:0,class:`task-empty`},Wy=[`data-extension`],Gy={class:`ext-head`},Ky=[`aria-checked`,`aria-label`,`disabled`,`onClick`],qy=[`checked`,`disabled`,`onChange`],Jy=A({__name:`ExtensionsPanel`,setup(e){let t=an(),n=O(!1);async function r(){let e=uu.value;if(!e||!iu.value)return void(t.value=void 0);t.value=await e.extensions().catch(()=>void 0)??t.value}Zn([uu,iu,()=>JSON.stringify(bu.value.agent.extensions??null)],r,{immediate:!0});async function i(e){let r=uu.value;if(r&&!n.value){n.value=!0;try{let n=await ju(()=>r.setExtension(e));n&&(t.value=n),ku()}finally{n.value=!1}}}return(e,r)=>(N(),P(`div`,Vy,[I(`div`,Hy,[r[0]||=I(`h2`,null,`Extensions`,-1),L(k(Nc),{size:18})]),r[3]||=I(`p`,{class:`hint`},` Custom harness capabilities for this agent. Turn one on and the next request uses it. The choice is stored with the agent, so it survives restarts. `,-1),t.value?z(``,!0):(N(),P(`p`,Uy,`Loading extensions…`)),(N(!0),P(M,null,j(t.value?.extensions??[],e=>(N(),P(`article`,{key:e.name,class:C([`ext-card`,{on:e.enabled}]),"data-extension":e.name},[I(`div`,Gy,[I(`div`,null,[I(`strong`,null,T(e.title),1),I(`code`,null,T(e.name),1)]),I(`button`,{class:C([`switch`,{on:e.enabled}]),role:`switch`,"aria-checked":e.enabled,"aria-label":e.title,disabled:n.value,onClick:t=>i({name:e.name,enabled:!e.enabled})},[...r[1]||=[I(`span`,null,null,-1)]],10,Ky)]),I(`p`,null,T(e.description),1),e.prompts?(N(),P(`ul`,{key:0,class:C([`ext-prompts`,{off:!e.enabled}])},[(N(!0),P(M,null,j(e.prompts,e=>(N(),P(`li`,{key:e.id},[I(`label`,null,[I(`input`,{type:`checkbox`,checked:e.enabled,disabled:n.value,onChange:t=>i({prompt:e.id,enabled:t.target.checked})},null,40,qy),I(`code`,null,T(e.id),1)]),I(`span`,null,T(e.description),1),I(`details`,null,[r[2]||=I(`summary`,null,`View prompt`,-1),I(`pre`,null,T(e.text),1)])]))),128))],2)):z(``,!0)],10,Wy))),128))]))}}),Yy={class:`context-section`,"aria-labelledby":`context-title`},Xy={class:`section-label`},Zy={key:0,class:`hint`},Qy={class:`context-numbers`},$y={class:`context-pct`},eb={key:0,class:`context-compacting`},tb=[`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],nb={class:`context-marker-label`},rb=[`aria-valuemin`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],ib={class:`context-marker-label`},ab={class:`hint context-hint`},ob={class:`modal compaction-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`compaction-title`},sb={class:`context-toggle`},cb=[`checked`],lb=512,ub=4096,db=1024,fb=A({__name:`ContextBar`,setup(e){let t=e=>e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e),n=B(()=>Eu.value?.contextWindow??0),r=B(()=>{let e=bu.value.entries;for(let t=e.length-1;t>=0;t--){if(e[t].kind!==`pi.assistant`)continue;let n=e[t].model?.find(e=>e.role===`assistant`)?.usage;if(n)return n.totalTokens||n.input+n.output+n.cacheRead+n.cacheWrite}return 0}),i=B(()=>bu.value.compactions.length>0),a=O(),o=B(()=>a.value??cu.value?.compaction??Yg(n.value));Zn(()=>JSON.stringify(cu.value?.compaction),e=>{a.value&&e===JSON.stringify(a.value)&&(a.value=void 0)});let s=O(),c=B(()=>U.dialog?.kind===`compaction`),l=()=>void(U.dialog=void 0);Jr(()=>c.value&&l());let u=B(()=>s.value??Xg(n.value,o.value)),d=e=>`${Math.min(100,Math.max(0,100*e/(n.value||1)))}%`,f=B(()=>Math.round(100*r.value/(n.value||1))),p=e=>{let t=e/(n.value||1);return t<.35?`start`:t>.65?`end`:`center`},m=(e,t)=>Math.min(n.value-db,Math.max((t??ub)+db,e)),h=(e,t)=>Math.min(t-db,Math.max(ub,e));function g(e,t){let n=u.value,r=Math.round(t/lb)*lb;s.value=e===`wait`?{auto:n.auto,wait:m(r,n.auto)}:{auto:h(r,n.wait),wait:n.wait}}async function _(e){let t=du.value;if(!t)return;let n=await ju(()=>t.setCompaction(e));n&&(a.value=n),s.value=void 0}function v(){let e=s.value;e&&_({reserveTokens:n.value-e.wait,...e.auto===void 0?{}:{backgroundTokens:e.wait-e.auto}})}let y=O(),b;function ee(e,t){b=e,t.currentTarget.setPointerCapture(t.pointerId)}function te(e){if(!b||!y.value)return;let t=y.value.getBoundingClientRect();g(b,(e.clientX-t.left)/t.width*n.value)}function x(){b&&(b=void 0,v())}function ne(e,t){let n=(t.shiftKey?8192:1024)*(t.key===`ArrowRight`||t.key===`ArrowUp`?1:t.key===`ArrowLeft`||t.key===`ArrowDown`?-1:0);if(!n)return;t.preventDefault();let r=u.value;g(e,(e===`auto`?r.auto??ub:r.wait)+n)}return(e,a)=>(N(),P(M,null,[I(`section`,Yy,[I(`div`,Xy,[a[7]||=I(`span`,{id:`context-title`},`CONTEXT`,-1),n.value?(N(),P(`button`,{key:0,class:`context-details-toggle`,onClick:a[0]||=e=>k(U).dialog={kind:`compaction`}},[L(k(pc),{size:16}),a[6]||=R(`Details `,-1)])):z(``,!0)]),n.value?(N(),P(M,{key:1},[I(`div`,Qy,[I(`strong`,null,T(t(r.value)),1),I(`span`,null,`of `+T(t(n.value))+` tokens`,1),I(`span`,$y,T(f.value)+`%`,1),i.value?(N(),P(`span`,eb,[...a[8]||=[I(`i`,null,null,-1),R(`Compacting`,-1)]])):z(``,!0)]),I(`div`,{ref_key:`bar`,ref:y,class:C([`context-bar`,{off:!o.value.enabled}]),onPointermove:te,onPointerup:x,onPointercancel:x},[I(`div`,{class:C([`context-fill`,{hot:u.value.auto!==void 0&&r.value>=u.value.auto}]),style:ye({width:d(r.value)})},null,6),I(`div`,{class:`context-reserve`,style:ye({left:d(u.value.wait)}),title:`Reserved for the answer`},null,4),u.value.auto===void 0?z(``,!0):(N(),P(`button`,{key:0,class:C([`context-marker auto`,`label-${p(u.value.auto)}`]),role:`slider`,"aria-label":`Automatic compaction starts at`,"aria-valuemin":ub,"aria-valuemax":u.value.wait-db,"aria-valuenow":u.value.auto,"aria-valuetext":`${t(u.value.auto)} tokens`,style:ye({left:d(u.value.auto)}),onPointerdown:a[1]||=e=>ee(`auto`,e),onKeydown:a[2]||=e=>ne(`auto`,e),onKeyup:v,onBlur:v},[I(`span`,nb,`Auto-compact at `+T(t(u.value.auto)),1)],46,tb)),I(`button`,{class:C([`context-marker wait`,`label-${p(u.value.wait)}`]),role:`slider`,"aria-label":`The next request waits for a summary at`,"aria-valuemin":(u.value.auto??ub)+db,"aria-valuemax":n.value-db,"aria-valuenow":u.value.wait,"aria-valuetext":`${t(u.value.wait)} tokens, ${t(n.value-u.value.wait)} reserved`,style:ye({left:d(u.value.wait)}),onPointerdown:a[3]||=e=>ee(`wait`,e),onKeydown:a[4]||=e=>ne(`wait`,e),onKeyup:v,onBlur:v},[I(`span`,ib,`Reserve at `+T(t(u.value.wait)),1)],46,rb)],34),I(`p`,ab,[o.value.enabled?(N(),P(M,{key:0},[a[9]||=R(`Compacts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[10]||=R(` and waits at `,-1),I(`strong`,null,T(t(u.value.wait)),1),a[11]||=R(`.`,-1)],64)):(N(),P(M,{key:1},[R(`Automatic compaction is off.`)],64))])],64)):(N(),P(`div`,Zy,`Pick a model to see its context window.`))]),(N(),F(fr,{to:`body`},[c.value?(N(),P(`div`,{key:0,class:`modal-backdrop`,onClick:As(l,[`self`])},[I(`section`,ob,[I(`header`,null,[a[12]||=I(`h2`,{id:`compaction-title`},`Context compaction`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close context compaction`,onClick:l},[L(k(qc),{size:18})])]),I(`p`,null,[a[13]||=R(` A summary starts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[14]||=R(`. Above `,-1),I(`strong`,null,T(t(u.value.wait)),1),R(` the next request waits for it, keeping `+T(t(n.value-u.value.wait))+` free for the answer. Drag a marker on the bar to change either point. `,1)]),a[16]||=I(`p`,null,[R(`Older entries stay stored, and `),I(`code`,null,`search_history`),R(` still finds them.`)],-1),I(`label`,sb,[I(`input`,{type:`checkbox`,checked:o.value.enabled,onChange:a[5]||=e=>_({enabled:e.target.checked})},null,40,cb),a[15]||=R(` Automatic compaction `,-1)]),a[17]||=I(`p`,{class:`hint`},[R(` Applies to every agent in this session. `),I(`code`,null,`/compact`),R(` works either way. `)],-1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:l},`Close`)])])])):z(``,!0)]))],64))}}),pb=/^[A-Za-z_$][\w$]*$/,mb=e=>` `.repeat(e);function hb(e,t){let n=[],r=(e,t=`text`)=>n.push({text:e,kind:t});return r(`function`,`keyword`),r(` `),r(e,`function`),r(`(`,`punct`),r(`args`),r(`: `,`punct`),gb(t,0,r),r(`): `,`punct`),r(`Promise`,`type`),r(`<`,`punct`),r(`ToolResult`,`type`),r(`>;`,`punct`),n}function gb(e,t,n){if(!e||typeof e!=`object`)return n(`unknown`,`type`);if(`const`in e)return yb(e.const,n);if(e.enum)return vb(e.enum.map(e=>({const:e})),t,n);if(e.anyOf??e.oneOf)return vb(e.anyOf??e.oneOf,t,n);if(Array.isArray(e.type))return vb(e.type.map(t=>({...e,type:t})),t,n);switch(e.type){case`string`:case`boolean`:case`null`:return n(e.type,`type`);case`number`:case`integer`:return n(`number`,`type`);case`array`:{let r=!!(e.items?.anyOf??e.items?.oneOf??e.items?.enum);return r&&n(`(`,`punct`),gb(e.items,t,n),r&&n(`)`,`punct`),n(`[]`,`punct`)}case`object`:return _b(e,t,n);default:return n(`unknown`,`type`)}}function _b(e,t,n){let r=Object.entries(e.properties??{});if(!r.length)return e.additionalProperties&&typeof e.additionalProperties==`object`?(n(`Record`,`type`),n(`<`,`punct`),n(`string`,`type`),n(`, `,`punct`),gb(e.additionalProperties,t,n),n(`>`,`punct`)):n(`{}`,`punct`);let i=new Set(e.required??[]);n(`{`,`punct`),n(`
|
|
79
|
-
`);for(let[e,a]of r){let r=
|
|
80
|
-
`)}n(mb(t)),n(`}`,`punct`)}function vb(e,t,n){e.forEach((e,r)=>{r&&n(` | `,`punct`),gb(e,t,n)})}function yb(e,t){if(typeof e==`string`)return t(JSON.stringify(e),`string`);if(typeof e==`number`)return t(String(e),`number`);t(String(e),`type`)}function bb(e){let t=[e.description,e.minimum===void 0?``:`@minimum ${e.minimum}`,e.maximum===void 0?``:`@maximum ${e.maximum}`,e.default===void 0?``:`@default ${JSON.stringify(e.default)}`].filter(Boolean);return t.length?`/** ${t.join(` `)} */`:``}var xb={key:0,class:`panel-rail`,"aria-label":`Inspector (collapsed)`},Sb=[`title`],Cb=[`aria-label`,`title`,`onClick`],wb={key:0,class:`count`},Tb={class:`inspector-tabs`,role:`tablist`,"aria-label":`Session details`},Eb=[`id`,`aria-selected`,`onClick`],Db={key:0,class:`count`},Ob=[`title`],kb=[`aria-labelledby`],Ab={class:`session-heading`},jb=[`title`],Mb={class:`cwd-trail`,dir:`rtl`},Nb={dir:`ltr`},Pb={class:`session-status`},Fb={key:0,class:`background-pill`},Ib=[`title`],Lb={class:`model-section`},Rb=[`src`],zb={class:`thinking-row`},Bb=[`value`],Vb={class:`stats-section`,"aria-labelledby":`stats-title`},Hb={class:`metrics`},Ub=[`title`],Wb={class:`usage-breakdown`,"aria-label":`Agent token and cost breakdown`},Gb={scope:`row`},Kb={class:`panel-heading`},qb={class:`hint app-state-description`},Jb=[`disabled`],Yb={class:`state-json-actions`},Xb={key:0,class:`hint`},Zb=[`disabled`],Qb=[`disabled`],$b={key:0,class:`message-error`,role:`alert`},ex={class:`panel-heading`},tx={class:`tag`},nx={class:`hook-card`},rx=[`aria-checked`],ix={key:0,class:`tag tool-disabled`},ax={class:`tag`},ox=[`aria-label`],sx=A({__name:`Inspector`,setup(e){let t=B(()=>new Map(Du.value?.tools.map(e=>[e.name,hb(e.name,e.parameters)]))),n=[{id:`session`,label:`Session`,icon:sc},{id:`git`,label:`Git`,icon:lc},{id:`state`,label:`State`,icon:qs},{id:`tasks`,label:`Tasks`,icon:Hs},{id:`tools`,label:`Tools`,icon:Kc},{id:`extensions`,label:`Extend`,icon:Nc}],r=B(()=>[{label:`Input`,tokens:Tu.value.input,cost:Tu.value.inputCost},{label:`Output`,tokens:Tu.value.output,cost:Tu.value.outputCost},{label:`Cache read`,tokens:Tu.value.cacheRead,cost:Tu.value.cacheReadCost},{label:`Cache write`,tokens:Tu.value.cacheWrite,cost:Tu.value.cacheWriteCost}]),i=B(()=>Cu.value.filter(e=>e.background).length);function a(e,t){ju(async()=>{await uu.value.configure(e),await ku(),t&&W(t)})}function o(){let e=du.value;e&&(U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:cu.value?.name??``,submit:`Save name`,run:t=>e.rename(t)})}let s=su.sharedState,c=O(``),l=O(``),u=O(0),d=O(!1),f=O(``),p=B(()=>c.value!==l.value),m=B(()=>p.value&&s.value?.revision!==u.value);function h(){c.value=Pu(s.value?.value??{}),l.value=c.value,u.value=s.value?.revision??0,f.value=``}Zn(s,()=>!p.value&&h(),{immediate:!0});async function g(e){if(!d.value&&uu.value){d.value=!0,f.value=``;try{await uu.value.demo(`state`,e)}catch(e){f.value=Rl(e)}finally{d.value=!1}}}async function _(){if(!d.value&&uu.value){f.value=``,d.value=!0;try{let e=JSON.parse(c.value);if(!e||Array.isArray(e)||typeof e!=`object`)throw Error(`App State must be a JSON object.`);let t=await uu.value.demo(`state`,{operation:`update`,path:``,value:e,expectedRevision:u.value});c.value=Pu(t.value),l.value=c.value,u.value=t.revision,W(`Shared App State saved.`)}catch(e){f.value=Rl(e)}finally{d.value=!1}}}let v=B(()=>Du.value?.config.readOnly===!0),y=B(()=>Du.value?.tools.filter(e=>e.offered).length??0);return(e,l)=>(N(),P(`aside`,{class:C([`inspector`,{collapsed:!k(Vu),overlay:k(U).inspectorOverlay}])},[k(Vu)?(N(),P(M,{key:1},[I(`div`,Tb,[(N(),P(M,null,j(n,e=>I(`button`,{id:`inspector-tab-${e.id}`,key:e.id,role:`tab`,"aria-controls":`inspector-panel`,"aria-selected":k(U).tab===e.id,class:C({active:k(U).tab===e.id}),onClick:t=>k(U).tab=e.id},[(N(),F(ni(e.icon),{size:18})),R(T(e.label),1),e.id===`tasks`&&k(Cu).length?(N(),P(`span`,Db,T(k(Cu).length),1)):z(``,!0)],10,Eb)),64)),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse inspector`,title:`Collapse inspector (${k(qu).inspector})`,onClick:l[1]||=e=>k(Uu)()},[L(k(Ec),{size:18})],8,Ob)]),I(`div`,{id:`inspector-panel`,class:C([`inspector-body`,{"session-panel":k(U).tab===`session`}]),role:`tabpanel`,"aria-labelledby":`inspector-tab-${k(U).tab}`},[k(U).tab===`session`?(N(),P(M,{key:0},[I(`section`,Ab,[I(`h1`,null,[I(`span`,null,T(k(cu)?.name??`Loading session`),1),I(`button`,{class:`icon-button`,title:`Rename session`,"aria-label":`Rename session`,onClick:o},[L(k(Ac),{size:18})])]),I(`button`,{class:`path cwd-button`,title:k(cu)?.cwd,"aria-label":`Show full working directory`,onClick:l[2]||=e=>k(U).dialog={kind:`path`,path:k(cu)?.cwd??``}},[L(k(sc),{size:18}),I(`span`,Mb,[I(`bdi`,Nb,T(k(cu)?.cwd),1)])],8,jb),I(`div`,Pb,[I(`span`,{class:C([`status-pill`,{working:k(wu)}])},[l[7]||=I(`i`,null,null,-1),R(T(k(wu)?`Working`:`Idle`),1)],2),i.value?(N(),P(`span`,Fb,T(i.value)+` background`,1)):z(``,!0),I(`span`,{class:`saved`,title:k(ru)?.id},[L(k(Ic),{size:18}),R(T(k(ru)?.name??k(ru)?.id),1)],8,Ib),k(ru)?(N(),F(bv,{key:1,device:k(ru)},null,8,[`device`])):z(``,!0)])]),k(ru)?(N(),F(Lv,{key:0,device:k(ru)},null,8,[`device`])):z(``,!0),I(`section`,Lb,[l[14]||=I(`div`,{class:`section-label`},[I(`span`,null,`AGENT`)],-1),I(`button`,{class:`model-button`,onClick:l[3]||=e=>k(U).dialog={kind:`models`}},[I(`img`,{src:k(Fu)(k(bu).agent.model?.modelId),alt:``},null,8,Rb),I(`div`,null,[I(`strong`,null,T(k(Eu)?.name??k(bu).agent.model?.modelId??`Loading…`),1),I(`small`,null,T(k(Eu)?.tier??``)+` / `+T(k(bu).agent.model?.provider??``),1)]),L(k(Xs),{size:18})]),I(`div`,zb,[l[8]||=I(`span`,null,`Thinking`,-1),I(`select`,{"aria-label":`Thinking level`,value:k(bu).agent.thinkingLevel??`low`,onChange:l[4]||=e=>a({thinkingLevel:e.target.value},`Thinking ${e.target.value}. Used on the next turn.`)},[(N(!0),P(M,null,j(k(Kg),e=>(N(),P(`option`,{key:e},T(e),1))),128))],40,Bb)]),L(fb),I(`section`,Vb,[l[13]||=I(`div`,{class:`section-label`},[I(`span`,{id:`stats-title`},`STATS`)],-1),I(`div`,Hb,[I(`div`,{title:`${k(Tu).tokens.toLocaleString(`en-US`)} total tokens`},[I(`span`,null,T(k(Nu)(k(Tu).tokens)),1),l[9]||=I(`small`,null,`total tokens`,-1)],8,Ub),I(`div`,null,[I(`span`,null,`$`+T(k(Tu).cost.toFixed(4)),1),l[10]||=I(`small`,null,`agent cost`,-1)]),I(`div`,null,[I(`span`,null,T(k(Du)?.tools.length??0),1),l[11]||=I(`small`,null,`tools`,-1)])]),I(`table`,Wb,[l[12]||=I(`thead`,null,[I(`tr`,null,[I(`th`,{scope:`col`},`Type`),I(`th`,{scope:`col`},`Tokens`),I(`th`,{scope:`col`},`Cost (USD)`)])],-1),I(`tbody`,null,[(N(!0),P(M,null,j(r.value,e=>(N(),P(`tr`,{key:e.label},[I(`th`,Gb,T(e.label),1),I(`td`,null,T(e.tokens.toLocaleString(`en-US`)),1),I(`td`,null,`$`+T(e.cost.toFixed(4)),1)]))),128))])])])])],64)):z(``,!0),k(U).tab===`state`?(N(),P(M,{key:1},[I(`div`,Kb,[l[15]||=I(`h2`,null,`App State`,-1),L(k(qs),{size:18})]),I(`p`,qb,` One shared JSON object for every agent, session and fork on `+T(k(ru)?.name??k(ru)?.id)+`. You and your agents can read, create, update or delete values and fields. Changes appear live and persist across closed browsers, interrupted agents and backend restarts. `,1),Wn(I(`textarea`,{"onUpdate:modelValue":l[5]||=e=>c.value=e,class:`app-state-json`,"aria-label":`App State JSON`,spellcheck:`false`,disabled:d.value||!k(s),rows:`12`},null,8,Jb),[[bs,c.value]]),I(`div`,Yb,[m.value?(N(),P(`span`,Xb,`State changed elsewhere. Load the latest JSON before saving.`)):z(``,!0),p.value?(N(),P(`button`,{key:1,class:`secondary`,disabled:d.value,onClick:h},T(m.value?`Load latest`:`Reset`),9,Zb)):z(``,!0),I(`button`,{class:`primary small`,disabled:!p.value||d.value||m.value,onClick:_},T(d.value?`Saving…`:`Save JSON`),9,Qb)]),f.value?(N(),P(`p`,$b,T(f.value),1)):z(``,!0),L(mv,{value:k(s)?.value??{},disabled:d.value||p.value||!k(s),onChange:g},null,8,[`value`,`disabled`])],64)):z(``,!0),k(U).tab===`tasks`?(N(),F(my,{key:2})):z(``,!0),k(U).tab===`git`?(N(),F(By,{key:3})):z(``,!0),k(U).tab===`extensions`?(N(),F(Jy,{key:4})):z(``,!0),k(U).tab===`tools`?(N(),P(M,{key:5},[I(`div`,ex,[l[16]||=I(`h2`,null,`Tools`,-1),I(`span`,tx,T(y.value)+` / `+T(k(Du)?.tools.length??0),1)]),l[20]||=I(`p`,{class:`hint`},` Every tool this agent's extensions provide. Open one to see its definition. `,-1),I(`div`,nx,[I(`div`,null,[L(k(Rc),{size:18}),l[18]||=I(`strong`,null,`Read only`,-1),I(`button`,{class:C([`switch`,{on:v.value}]),role:`switch`,"aria-checked":v.value,"aria-label":`Read only`,onClick:l[6]||=e=>a({readOnly:!v.value},v.value?`Read only off. Every tool is back.`:`Read only on. Tools that write are disabled.`)},[...l[17]||=[I(`span`,null,null,-1)]],10,rx)]),l[19]||=I(`p`,null,` Offers this agent only tools that read. Tools that create, update or delete leave its next request, and the choice is stored with the agent. `,-1)]),(N(!0),P(M,null,j(k(Du)?.tools,e=>(N(),P(`details`,{key:e.name,class:C([`tool-row`,{disabled:!e.offered}])},[I(`summary`,null,[L(k(Kc),{size:18}),I(`strong`,null,T(e.name),1),e.offered?z(``,!0):(N(),P(`span`,ix,`disabled`)),I(`span`,ax,T(e.replay===`safe`?`replay safe`:`interrupt on crash`),1)]),I(`p`,null,T(e.description),1),e.parameters?(N(),P(`pre`,{key:0,class:`tool-signature`,"aria-label":`${e.name} TypeScript definition`},[I(`code`,null,[(N(!0),P(M,null,j(t.value.get(e.name),(e,t)=>(N(),P(`span`,{key:t,class:C(`tk-${e.kind}`)},T(e.text),3))),128))])],8,ox)):z(``,!0),I(`small`,null,T(e.replay===`safe`?`An interrupted execution may run again after recovery.`:`A crash records an interrupted result instead of rerunning this effect.`),1)],2))),128))],64)):z(``,!0)],10,kb)],64)):(N(),P(`div`,xb,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand inspector`,title:`Expand inspector (${k(qu).inspector})`,onClick:l[0]||=e=>k(Hu)()},[L(k(Dc),{size:18})],8,Sb),(N(),P(M,null,j(n,e=>I(`button`,{key:e.id,class:C([`rail-tab`,{active:k(U).tab===e.id}]),"aria-label":`Open ${e.label}`,title:e.label,onClick:t=>k(Hu)(e.id)},[(N(),F(ni(e.icon),{size:20})),e.id===`tasks`&&k(Cu).length?(N(),P(`span`,wb,T(k(Cu).length),1)):z(``,!0)],10,Cb)),64))]))],2))}}),cx={class:`chat-empty`},lx={class:`eyebrow`},ux={key:3,class:`hint offline-error`},dx={key:4,class:`offline-command`},fx={key:5,class:`hint`},px={key:6,class:`hint`},mx={class:`offline-actions`},hx=[`disabled`],gx={key:7,class:`message-error`,role:`alert`},_x=A({__name:`OfflinePanel`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>{let e=t.device,n=e.source===`config`;switch(e.status){case`checking`:return{title:`Checking ${e.id}…`,text:`Probing the device. This view fills in as soon as it answers.`};case`unauthorized`:return e.transport===`tunnel`?{title:`${e.id} tunnel credentials are not valid`,text:`Pair the device again — the hub will mint a fresh credential.`}:{title:e.hasToken?`${e.id} rejected its token`:`No token for ${e.id}`,text:e.hasToken?`The device's DPI_TOKEN changed (a rotate or a rebuilt device). Copy the current token into this hub's registry, then check again.`:`This hub has no token for the device yet. Register it, then check again.`,command:n&&e.kind!==`url`?`just net register ${e.id}`:`just net register ${e.id} --token <token>`};case`mismatch`:return{title:`${e.id} answers as a different device`,text:`The URL now reaches a backend with another identity (a rebuilt VM or a new data directory). If that is expected, register it again: that trusts the identity it answers with now.`,command:e.kind===`url`?`just net register ${e.id} --token <token>`:`just net register ${e.id}`};case`incompatible`:return{title:`${e.id} speaks another API version`,text:`Update the device's dpi-backend.`,command:n?`just net deploy ${e.id}`:void 0};default:return{title:`${e.id} is offline`,text:`Last seen ${Iu(e.lastSeenAt)}. Its agents keep their state on the device and resume when its backend starts again. The tree shows the last known sessions.`,command:n?e.kind===`local`?`just backend run`:e.kind===`url`?void 0:`just net restart ${e.id}`:void 0,alt:n&&e.kind!==`local`&&e.kind!==`url`?`just net up ${e.id}`:void 0}}});async function a(){n.value=!0,r.value=``;try{let e=await Ll.check(t.device.id);e.status===`online`&&W(`${e.id} is online.`)}catch(e){r.value=Rl(e)}finally{n.value=!1}}async function o(e){try{await navigator.clipboard.writeText(e),W(`Copied.`)}catch{W(`Clipboard needs localhost or HTTPS. Select the text to copy.`)}}return(t,s)=>(N(),P(`section`,{class:C([`chat-panel offline-panel`,e.device.status]),"aria-live":`polite`},[I(`div`,cx,[e.device.status===`checking`?(N(),F(k(bc),{key:0,class:`spin`,size:30})):e.device.status===`mismatch`||e.device.status===`unauthorized`?(N(),F(k(Lc),{key:1,size:30})):(N(),F(k(Uc),{key:2,size:30})),I(`span`,lx,T(e.device.kind.toUpperCase())+` · `+T(e.device.url??(e.device.transport===`tunnel`?`tunnel`:`no endpoint`)),1),I(`h2`,null,T(i.value.title),1),I(`p`,null,T(i.value.text),1),e.device.error?(N(),P(`p`,ux,T(e.device.error),1)):z(``,!0),i.value.command?(N(),P(`div`,dx,[I(`code`,null,T(i.value.command),1),I(`button`,{class:`icon-button`,"aria-label":`Copy command`,onClick:s[0]||=e=>o(i.value.command)},[L(k(tc),{size:18})])])):z(``,!0),i.value.command?(N(),P(`p`,fx,`Run it in this repo's terminal, then press Check now.`)):z(``,!0),i.value.alt?(N(),P(`p`,px,[s[2]||=R(` Never deployed or rebuilt? `,-1),I(`code`,null,T(i.value.alt),1),s[3]||=R(` provisions it from scratch. `,-1)])):z(``,!0),I(`div`,mx,[I(`button`,{class:`secondary`,disabled:n.value,onClick:s[1]||=e=>a()},[L(k(Pc),{size:18}),R(T(n.value?`Checking…`:`Check now`),1)],8,hx)]),r.value?(N(),P(`p`,gx,T(r.value),1)):z(``,!0)])],2))}}),vx={class:`dir-browser`},yx={class:`dir-path`},bx=[`disabled`],xx=[`aria-busy`],Sx=[`title`],Cx=[`aria-selected`,`title`,`onClick`],wx={key:1,class:`hint`},Tx={key:0,class:`message-error`,role:`alert`},Ex=A({__name:`DirBrowser`,props:ui({deviceId:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=Ai(e,`modelValue`),r=O(),i=O(!1),a=O(``),o=0;async function s(e){let s=++o,c=t.deviceId;i.value=!0,a.value=``;try{let t=await Fl(c).dirs(e);return s===o?(r.value=t,t.path&&(n.value=t.path),t):void 0}catch(e){s===o&&(a.value=Rl(e));return}finally{s===o&&(i.value=!1)}}return Zn(()=>t.deviceId,async()=>{r.value=void 0;let e=await s(``),t=e?.dirs[0];t&&!e.path&&await s(t.path)},{immediate:!0}),(e,t)=>(N(),P(`div`,vx,[I(`div`,yx,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`Working directory`,required:``,placeholder:`/path/to/project`,spellcheck:`false`,autocomplete:`off`,onKeydown:t[1]||=Ms(As(e=>s(n.value),[`prevent`]),[`enter`])},null,544),[[bs,n.value]]),I(`button`,{type:`button`,class:`secondary small`,disabled:i.value||!n.value,onClick:t[2]||=e=>s(n.value)},` Go `,8,bx)]),I(`div`,{class:`dir-list`,role:`listbox`,"aria-label":`Directories`,"aria-busy":i.value},[I(`button`,{type:`button`,class:`dir-item`,title:`Start directories`,onClick:t[3]||=e=>s(``)},[L(k(fc),{size:16}),t[5]||=I(`span`,null,`Start dirs`,-1)]),r.value?.parent?(N(),P(`button`,{key:0,type:`button`,class:`dir-item`,title:r.value.parent,onClick:t[4]||=e=>s(r.value.parent)},[L(k(rc),{size:16}),t[6]||=I(`span`,null,`..`,-1)],8,Sx)):z(``,!0),(N(!0),P(M,null,j(r.value?.dirs,e=>(N(),P(`button`,{key:e.path,type:`button`,class:`dir-item`,role:`option`,"aria-selected":e.path===n.value,title:e.path,onClick:t=>s(e.path)},[e.path===n.value?(N(),F(k(sc),{key:0,size:16})):(N(),F(k(cc),{key:1,size:16})),I(`span`,null,T(e.name),1)],8,Cx))),128)),r.value&&!r.value.dirs.length?(N(),P(`p`,wx,`No subdirectories.`)):z(``,!0)],8,xx),a.value?(N(),P(`p`,Tx,T(a.value),1)):z(``,!0)]))}}),Dx={key:0,class:`message-error`},Ox=[`value`],kx={class:`field`},Ax={key:0,class:`hint`,title:`The device has no provider key — it lists its built-in catalog, and chat needs OPENROUTER_API_KEY set in the device's env file`},jx=[`value`],Mx={key:2,class:`message-error`,role:`alert`},Nx=[`disabled`],Px=A({__name:`NewSessionDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Xl.devices.value.filter(e=>e.status===`online`)),a=O(i.value.find(e=>e.id===n.deviceId)?.id??i.value[0]?.id??``),o=B(()=>i.value.find(e=>e.id===a.value)),s=B(()=>{let e=o.value?.info?.models??[];if(e.length)return e;let t=o.value?.info;return t?.defaultModel&&t.provider?[{id:t.defaultModel,provider:t.provider,name:`${t.defaultModel} (device default)`,tier:`—`,icon:`lab.png`,contextWindow:0,reasoning:!1,cost:{input:0,output:0}}]:[]}),c=B(()=>!s.value.length||(o.value?.info?.models?.length??0)===0),l=B(()=>!!o.value?.info?.providerKeyMissing),u=e=>`${e.provider}/${e.id}`,d=O({name:``,cwd:``,model:``}),f=O(!1),p=O(``);Zn(o,e=>{let t=s.value,n=t.find(t=>t.id===e?.info?.defaultModel)??t[0];d.value.model=n?u(n):``,d.value.cwd=``},{immediate:!0});async function m(){if(!f.value&&o.value){f.value=!0,p.value=``;try{let e=s.value.find(e=>u(e)===d.value.model)??s.value[0];if(!e)throw Error(`Choose a model`);let t=await Fl(o.value.id).createSession({name:d.value.name.trim()||`New session`,cwd:d.value.cwd.trim(),model:{provider:e.provider,modelId:e.id}}),n=t.agents.find(e=>e.kind===`root`)??t.agents[0];fu({deviceId:o.value.id,sessionId:t.id,agentId:n?.id??1}),W(`Session created on ${o.value.id}.`),r(`close`)}catch(e){p.value=Rl(e)}finally{f.value=!1}}}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[6]||=As(e=>r(`close`),[`self`])},[I(`form`,{class:`modal session-modal`,onSubmit:As(m,[`prevent`])},[I(`header`,null,[t[7]||=I(`div`,null,[I(`span`,{class:`eyebrow`},`A PERSISTENT WORKSPACE`),I(`h2`,null,`New session`)],-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close new session`,onClick:t[0]||=e=>r(`close`)},[L(k(qc),{size:18})])]),i.value.length?(N(),P(M,{key:1},[I(`label`,null,[t[8]||=R(`Device`,-1),Wn(I(`select`,{"onUpdate:modelValue":t[1]||=e=>a.value=e,"aria-label":`Device`},[(N(!0),P(M,null,j(i.value,e=>(N(),P(`option`,{key:e.id,value:e.id},T(e.name)+T(e.info?.hostname&&e.info.hostname!==e.name?` · ${e.info.hostname}`:``),9,Ox))),128))],512),[[Cs,a.value]])]),I(`label`,null,[t[9]||=R(`Session name`,-1),Wn(I(`input`,{"onUpdate:modelValue":t[2]||=e=>d.value.name=e,autofocus:``,placeholder:`My durable agent`,maxlength:`100`},null,512),[[bs,d.value.name]])]),I(`div`,kx,[I(`span`,null,`Working directory on `+T(i.value.find(e=>e.id===a.value)?.name??a.value),1),L(Ex,{modelValue:d.value.cwd,"onUpdate:modelValue":t[3]||=e=>d.value.cwd=e,"device-id":a.value},null,8,[`modelValue`,`device-id`])]),I(`label`,null,[t[10]||=R(`Model`,-1),c.value||l.value?(N(),P(`span`,Ax,`no API key on device — chat needs one`)):z(``,!0),Wn(I(`select`,{"onUpdate:modelValue":t[4]||=e=>d.value.model=e,"aria-label":`New session model`},[(N(!0),P(M,null,j(s.value,e=>(N(),P(`option`,{key:u(e),value:u(e)},T(e.tier)+` / `+T(e.name),9,jx))),128))],512),[[Cs,d.value.model]])])],64)):(N(),P(`p`,Dx,` No device is online. Start one with just backend run or just net up <id>, then try again. `)),p.value?(N(),P(`p`,Mx,T(p.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,onClick:t[5]||=e=>r(`close`)},`Cancel`),I(`button`,{class:`primary`,disabled:f.value||!d.value.model||!d.value.cwd||!o.value},[L(k(Mc),{size:18}),R(T(f.value?`Creating…`:`Create session`),1)],8,Nx)])],32)]))}}),Fx=new Uint8Array(512),Ix=new Uint8Array(256);(()=>{let e=1;for(let t=0;t<255;t++)Fx[t]=e,Ix[e]=t,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)Fx[e]=Fx[e-255]})();var Lx=(e,t)=>e===0||t===0?0:Fx[Ix[e]+Ix[t]];function Rx(e){let t=[1];for(let n=0;n<e;n++){let e=Array(t.length+1).fill(0);for(let r=0;r<t.length;r++)e[r]^=t[r],e[r+1]^=Lx(t[r],Fx[n]);t=e}return t}function zx(e,t){let n=Rx(t),r=Array(t).fill(0);for(let i of e){let e=i^r[0];r.shift(),r.push(0);for(let i=0;i<t;i++)r[i]^=Lx(n[i+1],e)}return r}var Bx=[21,25,29,33,37,41,45,49,53,57,61,65],Vx=[19,34,55,80,108,136,156,194,232,274,324,370],Hx=[7,10,15,20,26,36,40,48,60,72,80,96],Ux=[7,10,15,20,26,18,20,24,30,18,20,24],Wx=[[[1,19]],[[1,34]],[[1,55]],[[1,80]],[[1,108]],[[2,68]],[[2,78]],[[2,97]],[[2,116]],[[2,68],[2,69]],[[4,81]],[[2,92],[2,93]]],Gx=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58]],Kx=e=>e<=9?8:16;function qx(e){for(let t=1;t<=Bx.length;t++)if(4+Kx(t)+e*8<=Vx[t-1]*8)return t;throw Error(`qr: payload too long (${e} bytes; v12L max ${Vx[11]-3})`)}function Jx(e,t){let n=[...new TextEncoder().encode(e)],r=[],i=(e,t)=>{for(let n=t-1;n>=0;n--)r.push(e>>n&1)};i(4,4),i(n.length,Kx(t));for(let e of n)i(e,8);let a=Vx[t-1],o=a*8;for(i(0,Math.min(4,o-r.length));r.length%8!=0;)r.push(0);let s=[236,17],c=0;for(;r.length<o;)i(s[c++%2],8);let l=[];for(let e=0;e<a;e++){let t=0;for(let n=0;n<8;n++)t=t<<1|r[e*8+n];l.push(t)}return l}function Yx(e,t){let n=Ux[e-1],r=[],i=0;for(let[n,a]of Wx[e-1])for(let e=0;e<n;e++)r.push(t.slice(i,i+=a));let a=[],o=Math.max(...r.map(e=>e.length));for(let e=0;e<o;e++)for(let t of r)e<t.length&&a.push(t[e]);let s=r.map(e=>zx(e,n));for(let e=0;e<n;e++)for(let t of s)a.push(t[e]);return a}function Xx(e){return Array.from({length:e},()=>Array(e).fill(!1))}function Zx(e,t){let n=Bx[t-1],r=(t,r)=>{for(let i=-1;i<=7;i++)for(let a=-1;a<=7;a++){let o=t+i,s=r+a;if(o<0||o>=n||s<0||s>=n)continue;let c=i>=0&&i<=6&&a>=0&&a<=6&&(i===0||i===6||a===0||a===6),l=i>=2&&i<=4&&a>=2&&a<=4;e[o][s]=c||l}};r(0,0),r(0,n-7),r(n-7,0);for(let t=8;t<n-8;t++)e[6][t]=t%2==0,e[t][6]=t%2==0;let i=Gx[t-1];for(let t of i)for(let r of i)if(!(t<=8&&r<=8||t<=8&&r>=n-9||t>=n-9&&r<=8))for(let n=-2;n<=2;n++)for(let i=-2;i<=2;i++)e[t+n][r+i]=Math.max(Math.abs(n),Math.abs(i))!==1;if(e[n-8][8]=!0,t>=7){let r=t<<12;for(let e=17;e>=12;e--)r>>e&1&&(r^=7973<<e-12);let i=t<<12|r&4095;for(let t=0;t<18;t++){let r=(i>>t&1)==1,a=n-11+t%3,o=t/3|0;e[a][o]=r,e[o][a]=r}}}function Qx(e){let t=8|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>9&1?1335:0);let r=(t<<10|n)^21522,i=[];for(let e=14;e>=0;e--)i.push((r>>e&1)==1);return i}function $x(e,t){let n=Bx[0]*0+e.length,r=Qx(t);for(let t=0;t<=5;t++)e[8][t]=r[t];e[8][7]=r[6],e[8][8]=r[7],e[7][8]=r[8];for(let t=9;t<15;t++)e[14-t][8]=r[t];for(let t=0;t<7;t++)e[n-1-t][8]=r[t];e[8][n-8]=r[7];for(let t=8;t<15;t++)e[8][n-15+t]=r[t];e[n-8][8]=!0}function eS(e,t,n,r){let i=e.length;Bx[n-1]*Bx[n-1];let a=e=>((t[e>>3]??0)>>7-(e&7)&1)==1,o=0,s=!0;for(let t=i-1;t>0;t-=2){t===6&&t--;for(let c=0;c<i;c++){let l=s?i-1-c:c;for(let i of[t,t-1]){if(nS(l,i,n))continue;if(o>=(Vx[n-1]+Hx[n-1])*8){o++;continue}let t=a(o++);tS(l,i,r)&&(t=!t),e[l][i]=t}}s=!s}}function tS(e,t,n){switch(n){case 0:return(e+t)%2==0;case 1:return e%2==0;case 2:return t%3==0;case 3:return(e+t)%3==0;case 4:return(Math.floor(e/2)+Math.floor(t/3))%2==0;case 5:return e*t%2+e*t%3==0;case 6:return(e*t%2+e*t%3)%2==0;default:return((e+t)%2+e*t%3)%2==0}}function nS(e,t,n){let r=Bx[n-1];if(e<=8&&t<=8||e<=8&&t>=r-8||e>=r-8&&t<=8||e===6||t===6||n>=7&&(e>=r-11&&e<=r-9&&t<=5||t>=r-11&&t<=r-9&&e<=5))return!0;let i=Gx[n-1];for(let n of i)for(let a of i)if(!(n<=8&&a<=8||n<=8&&a>=r-9||n>=r-9&&a<=8)&&Math.abs(e-n)<=2&&Math.abs(t-a)<=2)return!0;return!1}function rS(e){let t=e.length,n=0;for(let r=0;r<2;r++)for(let i=0;i<t;i++){let a=1;for(let o=1;o<t;o++)(r===0?e[i][o]:e[o][i])===(r===0?e[i][o-1]:e[o-1][i])?(a++,o===t-1&&a>=5&&(n+=3+(a-5))):(a>=5&&(n+=3+(a-5)),a=1)}for(let r=0;r<t-1;r++)for(let i=0;i<t-1;i++){let t=e[r][i];e[r][i+1]===t&&e[r+1][i]===t&&e[r+1][i+1]===t&&(n+=3)}let r=[!0,!1,!0,!0,!0,!1,!0,!1,!1,!1,!1],i=(e,t)=>{for(let i=0;i+11<=t;i++){let t=!0;for(let n=0;n<11;n++)if(e(i+n)!==r[n]){t=!1;break}t&&(n+=40)}};for(let n=0;n<t;n++)i(t=>e[n][t],t);for(let n=0;n<t;n++)i(t=>e[t][n],t);let a=0;for(let t of e)for(let e of t)e&&a++;let o=a*100/(t*t);return n+=Math.floor(Math.abs(o-50)/5)*10,n}function iS(e,t){let n=qx(new TextEncoder().encode(e).length),r=Bx[n-1],i=Yx(n,Jx(e,n)),a=Xx(r);return Zx(a,n),eS(a,i,n,t),$x(a,t),a}function aS(e,t){if(t!==void 0)return iS(e,t);let n;for(let t=0;t<8;t++){let r=iS(e,t),i=rS(r);(!n||i<n.score)&&(n={m:r,score:i})}return n.m}function oS(e,t=160){let n=aS(e),r=n.length,i=t/(r+8),a=``;for(let e=0;e<r;e++)for(let t=0;t<r;t++)n[e][t]&&(a+=`<rect x="${((t+4)*i).toFixed(2)}" y="${((e+4)*i).toFixed(2)}" width="${i.toFixed(3)}" height="${i.toFixed(3)}"/>`);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" shape-rendering="crispEdges"><rect width="${t}" height="${t}" fill="#fff"/><g fill="#000">${a}</g></svg>`}var sS={class:`device-handoff`,"aria-label":`Pair this machine`},cS={class:`row`},lS=[`disabled`],uS=[`disabled`],dS={key:0,class:`target`,"data-testid":`device-url`},fS={key:1,class:`err`},pS=Ug(A({__name:`DeviceHandoff`,props:{offerFragment:{}},setup(e){let t=e,n=O(`4780`),r=O(!1),i=B(()=>{let e=/^\d{1,5}$/.test(n.value)?Number(n.value):0;if(!(!e||e<1||e>65535))return`http://127.0.0.1:${e}/pair#${t.offerFragment}`});function a(){let e=i.value;e&&window.open(e,`_blank`,`noopener`)}async function o(){let e=i.value;if(e)try{await navigator.clipboard.writeText(e),r.value=!0,setTimeout(()=>r.value=!1,1600)}catch{}}return(e,t)=>(N(),P(`section`,sS,[I(`header`,null,[L(k(Cc),{size:18}),t[1]||=I(`h3`,null,`Pair THIS machine`,-1)]),t[4]||=I(`p`,{class:`what`},[R(` If this browser runs on the device itself, open its local pairing page — the offer is relayed inside the link, nothing is sent to the hub. Start `),I(`code`,null,`dpi device`),R(` there first. `)],-1),I(`div`,cS,[I(`label`,null,[t[2]||=R(` local port `,-1),Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,inputmode:`numeric`,spellcheck:`false`,"aria-label":`Local dpi backend port`},null,512),[[bs,n.value]])]),I(`button`,{class:`primary`,type:`button`,disabled:!i.value,onClick:a},[L(k(ac),{size:15}),t[3]||=R(`Open the device page `,-1)],8,lS),I(`button`,{class:`secondary`,type:`button`,disabled:!i.value,onClick:o},[L(k(tc),{size:15}),R(T(r.value?`Copied`:`Copy link`),1)],8,uS)]),i.value?(N(),P(`p`,dS,T(i.value),1)):z(``,!0),i.value?z(``,!0):(N(),P(`p`,fS,`port must be 1–65535`))]))}}),[[`__scopeId`,`data-v-01884b7b`]]);function mS(e){return CS(e)&&!hS(e)&&!DS(e)&&Symbol.asyncIterator in e}function hS(e){return Array.isArray(e)}function gS(e){return typeof e==`bigint`}function _S(e){return typeof e==`boolean`}function vS(e){return e instanceof globalThis.Date}function yS(e){return typeof e==`function`}function bS(e){return CS(e)&&!hS(e)&&!DS(e)&&Symbol.iterator in e}function xS(e){return e===null}function SS(e){return typeof e==`number`}function CS(e){return typeof e==`object`&&!!e}function wS(e){return e instanceof globalThis.RegExp}function TS(e){return typeof e==`string`}function ES(e){return typeof e==`symbol`}function DS(e){return e instanceof globalThis.Uint8Array}function OS(e){return e===void 0}function kS(e){return e.map(e=>PS(e))}function AS(e){return new Date(e.getTime())}function jS(e){return new Uint8Array(e)}function MS(e){return new RegExp(e.source,e.flags)}function NS(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=PS(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=PS(e[n]);return t}function PS(e){return hS(e)?kS(e):vS(e)?AS(e):DS(e)?jS(e):wS(e)?MS(e):CS(e)?NS(e):e}function FS(e){return PS(e)}function IS(e,t){return FS(t===void 0?e:{...t,...e})}function LS(e){return typeof e==`object`&&!!e}function RS(e){return globalThis.Array.isArray(e)&&!globalThis.ArrayBuffer.isView(e)}function zS(e){return e===void 0}function BS(e){return typeof e==`number`}var VS;(function(e){e.InstanceMode=`default`,e.ExactOptionalPropertyTypes=!1,e.AllowArrayObject=!1,e.AllowNaN=!1,e.AllowNullVoid=!1;function t(t,n){return e.ExactOptionalPropertyTypes?n in t:t[n]!==void 0}e.IsExactOptionalProperty=t;function n(t){let n=LS(t);return e.AllowArrayObject?n:n&&!RS(t)}e.IsObjectLike=n;function r(e){return n(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}e.IsRecordLike=r;function i(t){return e.AllowNaN?BS(t):Number.isFinite(t)}e.IsNumberLike=i;function a(t){let n=zS(t);return e.AllowNullVoid?n||t===null:n}e.IsVoidLike=a})(VS||={});function HS(e){return globalThis.Object.freeze(e).map(e=>qS(e))}function US(e){return e}function WS(e){return e}function GS(e){return e}function KS(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=qS(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=qS(e[n]);return globalThis.Object.freeze(t)}function qS(e){return hS(e)?HS(e):vS(e)?US(e):DS(e)?WS(e):wS(e)?GS(e):CS(e)?KS(e):e}function J(e,t){let n=t===void 0?e:{...t,...e};switch(VS.InstanceMode){case`freeze`:return qS(n);case`clone`:return FS(n);default:return n}}var JS=class extends Error{constructor(e){super(e)}},YS=Symbol.for(`TypeBox.Transform`),XS=Symbol.for(`TypeBox.Readonly`),ZS=Symbol.for(`TypeBox.Optional`),QS=Symbol.for(`TypeBox.Hint`),Y=Symbol.for(`TypeBox.Kind`);function $S(e){return CS(e)&&e[XS]===`Readonly`}function eC(e){return CS(e)&&e[ZS]===`Optional`}function tC(e){return X(e,`Any`)}function nC(e){return X(e,`Argument`)}function rC(e){return X(e,`Array`)}function iC(e){return X(e,`AsyncIterator`)}function aC(e){return X(e,`BigInt`)}function oC(e){return X(e,`Boolean`)}function sC(e){return X(e,`Computed`)}function cC(e){return X(e,`Constructor`)}function lC(e){return X(e,`Date`)}function uC(e){return X(e,`Function`)}function dC(e){return X(e,`Integer`)}function fC(e){return X(e,`Intersect`)}function pC(e){return X(e,`Iterator`)}function X(e,t){return CS(e)&&Y in e&&e[Y]===t}function mC(e){return _S(e)||SS(e)||TS(e)}function hC(e){return X(e,`Literal`)}function gC(e){return X(e,`MappedKey`)}function _C(e){return X(e,`MappedResult`)}function vC(e){return X(e,`Never`)}function yC(e){return X(e,`Not`)}function bC(e){return X(e,`Null`)}function xC(e){return X(e,`Number`)}function SC(e){return X(e,`Object`)}function CC(e){return X(e,`Promise`)}function wC(e){return X(e,`Record`)}function TC(e){return X(e,`Ref`)}function EC(e){return X(e,`RegExp`)}function DC(e){return X(e,`String`)}function OC(e){return X(e,`Symbol`)}function kC(e){return X(e,`TemplateLiteral`)}function AC(e){return X(e,`This`)}function jC(e){return CS(e)&&YS in e}function MC(e){return X(e,`Tuple`)}function NC(e){return X(e,`Undefined`)}function PC(e){return X(e,`Union`)}function FC(e){return X(e,`Uint8Array`)}function IC(e){return X(e,`Unknown`)}function LC(e){return X(e,`Unsafe`)}function RC(e){return X(e,`Void`)}function zC(e){return CS(e)&&Y in e&&TS(e[Y])}function BC(e){return tC(e)||nC(e)||rC(e)||oC(e)||aC(e)||iC(e)||sC(e)||cC(e)||lC(e)||uC(e)||dC(e)||fC(e)||pC(e)||hC(e)||gC(e)||_C(e)||vC(e)||yC(e)||bC(e)||xC(e)||SC(e)||CC(e)||wC(e)||TC(e)||EC(e)||DC(e)||OC(e)||kC(e)||AC(e)||MC(e)||NC(e)||PC(e)||FC(e)||IC(e)||LC(e)||RC(e)||zC(e)}var VC=`Argument.Any.Array.AsyncIterator.BigInt.Boolean.Computed.Constructor.Date.Enum.Function.Integer.Intersect.Iterator.Literal.MappedKey.MappedResult.Not.Null.Number.Object.Promise.Record.Ref.RegExp.String.Symbol.TemplateLiteral.This.Tuple.Undefined.Union.Uint8Array.Unknown.Void`.split(`.`);function HC(e){try{return new RegExp(e),!0}catch{return!1}}function UC(e){if(!TS(e))return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n>=7&&n<=13||n===27||n===127)return!1}return!0}function WC(e){return qC(e)||Hw(e)}function GC(e){return OS(e)||gS(e)}function KC(e){return OS(e)||SS(e)}function qC(e){return OS(e)||_S(e)}function JC(e){return OS(e)||TS(e)}function YC(e){return OS(e)||TS(e)&&UC(e)&&HC(e)}function XC(e){return OS(e)||TS(e)&&UC(e)}function ZC(e){return OS(e)||Hw(e)}function QC(e){return CS(e)&&e[ZS]===`Optional`}function $C(e){return Z(e,`Any`)&&JC(e.$id)}function ew(e){return Z(e,`Argument`)&&SS(e.index)}function tw(e){return Z(e,`Array`)&&e.type===`array`&&JC(e.$id)&&Hw(e.items)&&KC(e.minItems)&&KC(e.maxItems)&&qC(e.uniqueItems)&&ZC(e.contains)&&KC(e.minContains)&&KC(e.maxContains)}function nw(e){return Z(e,`AsyncIterator`)&&e.type===`AsyncIterator`&&JC(e.$id)&&Hw(e.items)}function rw(e){return Z(e,`BigInt`)&&e.type===`bigint`&&JC(e.$id)&&GC(e.exclusiveMaximum)&&GC(e.exclusiveMinimum)&&GC(e.maximum)&&GC(e.minimum)&&GC(e.multipleOf)}function iw(e){return Z(e,`Boolean`)&&e.type===`boolean`&&JC(e.$id)}function aw(e){return Z(e,`Computed`)&&TS(e.target)&&hS(e.parameters)&&e.parameters.every(e=>Hw(e))}function ow(e){return Z(e,`Constructor`)&&e.type===`Constructor`&&JC(e.$id)&&hS(e.parameters)&&e.parameters.every(e=>Hw(e))&&Hw(e.returns)}function sw(e){return Z(e,`Date`)&&e.type===`Date`&&JC(e.$id)&&KC(e.exclusiveMaximumTimestamp)&&KC(e.exclusiveMinimumTimestamp)&&KC(e.maximumTimestamp)&&KC(e.minimumTimestamp)&&KC(e.multipleOfTimestamp)}function cw(e){return Z(e,`Function`)&&e.type===`Function`&&JC(e.$id)&&hS(e.parameters)&&e.parameters.every(e=>Hw(e))&&Hw(e.returns)}function lw(e){return Z(e,`Integer`)&&e.type===`integer`&&JC(e.$id)&&KC(e.exclusiveMaximum)&&KC(e.exclusiveMinimum)&&KC(e.maximum)&&KC(e.minimum)&&KC(e.multipleOf)}function uw(e){return CS(e)&&Object.entries(e).every(([e,t])=>UC(e)&&Hw(t))}function dw(e){return Z(e,`Intersect`)&&!(TS(e.type)&&e.type!==`object`)&&hS(e.allOf)&&e.allOf.every(e=>Hw(e)&&!Nw(e))&&JC(e.type)&&(qC(e.unevaluatedProperties)||ZC(e.unevaluatedProperties))&&JC(e.$id)}function fw(e){return Z(e,`Iterator`)&&e.type===`Iterator`&&JC(e.$id)&&Hw(e.items)}function Z(e,t){return CS(e)&&Y in e&&e[Y]===t}function pw(e){return gw(e)&&TS(e.const)}function mw(e){return gw(e)&&SS(e.const)}function hw(e){return gw(e)&&_S(e.const)}function gw(e){return Z(e,`Literal`)&&JC(e.$id)&&_w(e.const)}function _w(e){return _S(e)||SS(e)||TS(e)}function vw(e){return Z(e,`MappedKey`)&&hS(e.keys)&&e.keys.every(e=>SS(e)||TS(e))}function yw(e){return Z(e,`MappedResult`)&&uw(e.properties)}function bw(e){return Z(e,`Never`)&&CS(e.not)&&Object.getOwnPropertyNames(e.not).length===0}function xw(e){return Z(e,`Not`)&&Hw(e.not)}function Sw(e){return Z(e,`Null`)&&e.type===`null`&&JC(e.$id)}function Cw(e){return Z(e,`Number`)&&e.type===`number`&&JC(e.$id)&&KC(e.exclusiveMaximum)&&KC(e.exclusiveMinimum)&&KC(e.maximum)&&KC(e.minimum)&&KC(e.multipleOf)}function ww(e){return Z(e,`Object`)&&e.type===`object`&&JC(e.$id)&&uw(e.properties)&&WC(e.additionalProperties)&&KC(e.minProperties)&&KC(e.maxProperties)}function Tw(e){return Z(e,`Promise`)&&e.type===`Promise`&&JC(e.$id)&&Hw(e.item)}function Ew(e){return Z(e,`Record`)&&e.type===`object`&&JC(e.$id)&&WC(e.additionalProperties)&&CS(e.patternProperties)&&(e=>{let t=Object.getOwnPropertyNames(e.patternProperties);return t.length===1&&HC(t[0])&&CS(e.patternProperties)&&Hw(e.patternProperties[t[0]])})(e)}function Dw(e){return Z(e,`Ref`)&&JC(e.$id)&&TS(e.$ref)}function Ow(e){return Z(e,`RegExp`)&&JC(e.$id)&&TS(e.source)&&TS(e.flags)&&KC(e.maxLength)&&KC(e.minLength)}function kw(e){return Z(e,`String`)&&e.type===`string`&&JC(e.$id)&&KC(e.minLength)&&KC(e.maxLength)&&YC(e.pattern)&&XC(e.format)}function Aw(e){return Z(e,`Symbol`)&&e.type===`symbol`&&JC(e.$id)}function jw(e){return Z(e,`TemplateLiteral`)&&e.type===`string`&&TS(e.pattern)&&e.pattern[0]===`^`&&e.pattern[e.pattern.length-1]===`$`}function Mw(e){return Z(e,`This`)&&JC(e.$id)&&TS(e.$ref)}function Nw(e){return CS(e)&&YS in e}function Pw(e){return Z(e,`Tuple`)&&e.type===`array`&&JC(e.$id)&&SS(e.minItems)&&SS(e.maxItems)&&e.minItems===e.maxItems&&(OS(e.items)&&OS(e.additionalItems)&&e.minItems===0||hS(e.items)&&e.items.every(e=>Hw(e)))}function Fw(e){return Z(e,`Undefined`)&&e.type===`undefined`&&JC(e.$id)}function Iw(e){return Z(e,`Union`)&&JC(e.$id)&&CS(e)&&hS(e.anyOf)&&e.anyOf.every(e=>Hw(e))}function Lw(e){return Z(e,`Uint8Array`)&&e.type===`Uint8Array`&&JC(e.$id)&&KC(e.minByteLength)&&KC(e.maxByteLength)}function Rw(e){return Z(e,`Unknown`)&&JC(e.$id)}function zw(e){return Z(e,`Unsafe`)}function Bw(e){return Z(e,`Void`)&&e.type===`void`&&JC(e.$id)}function Vw(e){return CS(e)&&Y in e&&TS(e[Y])&&!VC.includes(e[Y])}function Hw(e){return CS(e)&&($C(e)||ew(e)||tw(e)||iw(e)||rw(e)||nw(e)||aw(e)||ow(e)||sw(e)||cw(e)||lw(e)||dw(e)||fw(e)||gw(e)||vw(e)||yw(e)||bw(e)||xw(e)||Sw(e)||Cw(e)||ww(e)||Tw(e)||Ew(e)||Dw(e)||Ow(e)||kw(e)||Aw(e)||jw(e)||Mw(e)||Pw(e)||Fw(e)||Iw(e)||Lw(e)||Rw(e)||zw(e)||Bw(e)||Vw(e))}var Uw=`(true|false)`,Ww=`(0|[1-9][0-9]*)`,Gw=`(.*)`,Kw=`(?!.*)`;`${Uw}`;var qw=`^${Ww}$`,Jw=`^${Gw}$`,Yw=`^${Kw}$`;function Xw(e,t){return e.includes(t)}function Zw(e){return[...new Set(e)]}function Qw(e,t){return e.filter(e=>t.includes(e))}function $w(e,t){return e.reduce((e,t)=>Qw(e,t),t)}function eT(e){return e.length===1?e[0]:e.length>1?$w(e.slice(1),e[0]):[]}function tT(e){let t=[];for(let n of e)t.push(...n);return t}function nT(e){return J({[Y]:`Any`},e)}function rT(e,t){return J({[Y]:`Array`,type:`array`,items:e},t)}function iT(e){return J({[Y]:`Argument`,index:e})}function aT(e,t){return J({[Y]:`AsyncIterator`,type:`AsyncIterator`,items:e},t)}function oT(e,t,n){return J({[Y]:`Computed`,target:e,parameters:t},n)}function sT(e,t){let{[t]:n,...r}=e;return r}function cT(e,t){return t.reduce((e,t)=>sT(e,t),e)}function lT(e){return J({[Y]:`Never`,not:{}},e)}function uT(e){return J({[Y]:`MappedResult`,properties:e})}function dT(e,t,n){return J({[Y]:`Constructor`,type:`Constructor`,parameters:e,returns:t},n)}function fT(e,t,n){return J({[Y]:`Function`,type:`Function`,parameters:e,returns:t},n)}function pT(e,t){return J({[Y]:`Union`,anyOf:e},t)}function mT(e){return e.some(e=>eC(e))}function hT(e){return e.map(e=>eC(e)?gT(e):e)}function gT(e){return cT(e,[ZS])}function _T(e,t){return mT(e)?rD(pT(hT(e),t)):pT(hT(e),t)}function vT(e,t){return e.length===1?J(e[0],t):e.length===0?lT(t):_T(e,t)}function yT(e,t){return e.length===0?lT(t):e.length===1?J(e[0],t):pT(e,t)}var bT=class extends JS{};function xT(e){return e.replace(/\\\$/g,`$`).replace(/\\\*/g,`*`).replace(/\\\^/g,`^`).replace(/\\\|/g,`|`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)}function ST(e,t,n){return e[t]===n&&e.charCodeAt(t-1)!==92}function CT(e,t){return ST(e,t,`(`)}function wT(e,t){return ST(e,t,`)`)}function TT(e,t){return ST(e,t,`|`)}function ET(e){if(!(CT(e,0)&&wT(e,e.length-1)))return!1;let t=0;for(let n=0;n<e.length;n++)if(CT(e,n)&&(t+=1),wT(e,n)&&--t,t===0&&n!==e.length-1)return!1;return!0}function DT(e){return e.slice(1,e.length-1)}function OT(e){let t=0;for(let n=0;n<e.length;n++)if(CT(e,n)&&(t+=1),wT(e,n)&&--t,TT(e,n)&&t===0)return!0;return!1}function kT(e){for(let t=0;t<e.length;t++)if(CT(e,t))return!0;return!1}function AT(e){let[t,n]=[0,0],r=[];for(let i=0;i<e.length;i++)if(CT(e,i)&&(t+=1),wT(e,i)&&--t,TT(e,i)&&t===0){let t=e.slice(n,i);t.length>0&&r.push(MT(t)),n=i+1}let i=e.slice(n);return i.length>0&&r.push(MT(i)),r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`or`,expr:r}}function jT(e){function t(e,t){if(!CT(e,t))throw new bT(`TemplateLiteralParser: Index must point to open parens`);let n=0;for(let r=t;r<e.length;r++)if(CT(e,r)&&(n+=1),wT(e,r)&&--n,n===0)return[t,r];throw new bT(`TemplateLiteralParser: Unclosed group parens in expression`)}function n(e,t){for(let n=t;n<e.length;n++)if(CT(e,n))return[t,n];return[t,e.length]}let r=[];for(let i=0;i<e.length;i++)if(CT(e,i)){let[n,a]=t(e,i),o=e.slice(n,a+1);r.push(MT(o)),i=a}else{let[t,a]=n(e,i),o=e.slice(t,a);o.length>0&&r.push(MT(o)),i=a-1}return r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`and`,expr:r}}function MT(e){return ET(e)?MT(DT(e)):OT(e)?AT(e):kT(e)?jT(e):{type:`const`,const:xT(e)}}function NT(e){return MT(e.slice(1,e.length-1))}var PT=class extends JS{};function FT(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`0`&&e.expr[1].type===`const`&&e.expr[1].const===`[1-9][0-9]*`}function IT(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`true`&&e.expr[1].type===`const`&&e.expr[1].const===`false`}function LT(e){return e.type===`const`&&e.const===`.*`}function RT(e){return FT(e)||LT(e)?!1:IT(e)?!0:e.type===`and`||e.type===`or`?e.expr.every(e=>RT(e)):e.type===`const`||(()=>{throw new PT(`Unknown expression type`)})()}function zT(e){return RT(NT(e.pattern))}var BT=class extends JS{};function*VT(e){if(e.length===1)return yield*e[0];for(let t of e[0])for(let n of VT(e.slice(1)))yield`${t}${n}`}function*HT(e){return yield*VT(e.expr.map(e=>[...GT(e)]))}function*UT(e){for(let t of e.expr)yield*GT(t)}function*WT(e){return yield e.const}function*GT(e){return e.type===`and`?yield*HT(e):e.type===`or`?yield*UT(e):e.type===`const`?yield*WT(e):(()=>{throw new BT(`Unknown expression`)})()}function KT(e){let t=NT(e.pattern);return RT(t)?[...GT(t)]:[]}function qT(e,t){return J({[Y]:`Literal`,const:e,type:typeof e},t)}function JT(e){return J({[Y]:`Boolean`,type:`boolean`},e)}function YT(e){return J({[Y]:`BigInt`,type:`bigint`},e)}function XT(e){return J({[Y]:`Number`,type:`number`},e)}function ZT(e){return J({[Y]:`String`,type:`string`},e)}function*QT(e){let t=e.trim().replace(/"|'/g,``);return t===`boolean`?yield JT():t===`number`?yield XT():t===`bigint`?yield YT():t===`string`?yield ZT():yield(()=>{let e=t.split(`|`).map(e=>qT(e.trim()));return e.length===0?lT():e.length===1?e[0]:vT(e)})()}function*$T(e){if(e[1]!==`{`)return yield*[qT(`$`),...eE(e.slice(1))];for(let t=2;t<e.length;t++)if(e[t]===`}`){let n=QT(e.slice(2,t)),r=eE(e.slice(t+1));return yield*[...n,...r]}yield qT(e)}function*eE(e){for(let t=0;t<e.length;t++)if(e[t]===`$`)return yield*[qT(e.slice(0,t)),...$T(e.slice(t))];yield qT(e)}function tE(e){return[...eE(e)]}var nE=class extends JS{};function rE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function iE(e,t){return kC(e)?e.pattern.slice(1,e.pattern.length-1):PC(e)?`(${e.anyOf.map(e=>iE(e,t)).join(`|`)})`:xC(e)||dC(e)||aC(e)?`${t}${Ww}`:DC(e)?`${t}${Gw}`:hC(e)?`${t}${rE(e.const.toString())}`:oC(e)?`${t}${Uw}`:(()=>{throw new nE(`Unexpected Kind '${e[Y]}'`)})()}function aE(e){return`^${e.map(e=>iE(e,``)).join(``)}$`}function oE(e){return vT(KT(e).map(e=>qT(e)))}function sE(e,t){let n=TS(e)?aE(tE(e)):aE(e);return J({[Y]:`TemplateLiteral`,type:`string`,pattern:n},t)}function cE(e){return KT(e).map(e=>e.toString())}function lE(e){let t=[];for(let n of e)t.push(...dE(n));return t}function uE(e){return[e.toString()]}function dE(e){return[...new Set(kC(e)?cE(e):PC(e)?lE(e.anyOf):hC(e)?uE(e.const):xC(e)||dC(e)?[`[number]`]:[])]}function fE(e,t,n){let r={};for(let i of Object.getOwnPropertyNames(t))r[i]=EE(e,dE(t[i]),n);return r}function pE(e,t,n){return fE(e,t.properties,n)}function mE(e,t,n){return uT(pE(e,t,n))}function hE(e,t){return e.map(e=>CE(e,t))}function gE(e){return e.filter(e=>!vC(e))}function _E(e,t){return fD(gE(hE(e,t)))}function vE(e){return e.some(e=>vC(e))?[]:e}function yE(e,t){return vT(vE(hE(e,t)))}function bE(e,t){return t in e?e[t]:t===`[number]`?vT(e):lT()}function xE(e,t){return t===`[number]`?e:lT()}function SE(e,t){return t in e?e[t]:lT()}function CE(e,t){return fC(e)?_E(e.allOf,t):PC(e)?yE(e.anyOf,t):MC(e)?bE(e.items??[],t):rC(e)?xE(e.items,t):SC(e)?SE(e.properties,t):lT()}function wE(e,t){return t.map(t=>CE(e,t))}function TE(e,t){return vT(wE(e,t))}function EE(e,t,n){if(TC(e)||TC(t)){if(!BC(e)||!BC(t))throw new JS(`Index types using Ref parameters require both Type and Key to be of TSchema`);return oT(`Index`,[e,t])}return _C(t)?mE(e,t,n):gC(t)?AE(e,t,n):J(BC(t)?TE(e,dE(t)):TE(e,t),n)}function DE(e,t,n){return{[t]:EE(e,[t],FS(n))}}function OE(e,t,n){return t.reduce((t,r)=>({...t,...DE(e,r,n)}),{})}function kE(e,t,n){return OE(e,t.keys,n)}function AE(e,t,n){return uT(kE(e,t,n))}function jE(e,t){return J({[Y]:`Iterator`,type:`Iterator`,items:e},t)}function ME(e){return globalThis.Object.keys(e).filter(t=>!eC(e[t]))}function NE(e,t){let n=ME(e);return J(n.length>0?{[Y]:`Object`,type:`object`,required:n,properties:e}:{[Y]:`Object`,type:`object`,properties:e},t)}var PE=NE;function FE(e,t){return J({[Y]:`Promise`,type:`Promise`,item:e},t)}function IE(e){return J(cT(e,[XS]))}function LE(e){return J({...e,[XS]:`Readonly`})}function RE(e,t){return t===!1?IE(e):LE(e)}function zE(e,t){let n=t??!0;return _C(e)?HE(e,n):RE(e,n)}function BE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=zE(e[r],t);return n}function VE(e,t){return BE(e.properties,t)}function HE(e,t){return uT(VE(e,t))}function UE(e,t){return J(e.length>0?{[Y]:`Tuple`,type:`array`,items:e,additionalItems:!1,minItems:e.length,maxItems:e.length}:{[Y]:`Tuple`,type:`array`,minItems:e.length,maxItems:e.length},t)}function WE(e,t){return e in t?ZE(e,t[e]):uT(t)}function GE(e){return{[e]:qT(e)}}function KE(e){let t={};for(let n of e)t[n]=qT(n);return t}function qE(e,t){return Xw(t,e)?GE(e):KE(t)}function JE(e,t){return WE(e,qE(e,t))}function YE(e,t){return t.map(t=>ZE(e,t))}function XE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=ZE(e,t[r]);return n}function ZE(e,t){let n={...t};return eC(t)?rD(ZE(e,cT(t,[ZS]))):$S(t)?zE(ZE(e,cT(t,[XS]))):_C(t)?WE(e,t.properties):gC(t)?JE(e,t.keys):cC(t)?dT(YE(e,t.parameters),ZE(e,t.returns),n):uC(t)?fT(YE(e,t.parameters),ZE(e,t.returns),n):iC(t)?aT(ZE(e,t.items),n):pC(t)?jE(ZE(e,t.items),n):fC(t)?pD(YE(e,t.allOf),n):PC(t)?yT(YE(e,t.anyOf),n):MC(t)?UE(YE(e,t.items??[]),n):SC(t)?PE(XE(e,t.properties),n):rC(t)?rT(ZE(e,t.items),n):CC(t)?FE(ZE(e,t.item),n):t}function QE(e,t){let n={};for(let r of e)n[r]=ZE(r,t);return n}function $E(e,t,n){let r=BC(e)?dE(e):e;return PE(QE(r,t({[Y]:`MappedKey`,keys:r})),n)}function eD(e){return J(cT(e,[ZS]))}function tD(e){return J({...e,[ZS]:`Optional`})}function nD(e,t){return t===!1?eD(e):tD(e)}function rD(e,t){let n=t??!0;return _C(e)?oD(e,n):nD(e,n)}function iD(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=rD(e[r],t);return n}function aD(e,t){return iD(e.properties,t)}function oD(e,t){return uT(aD(e,t))}function sD(e,t={}){let n=e.every(e=>SC(e)),r=BC(t.unevaluatedProperties)?{unevaluatedProperties:t.unevaluatedProperties}:{};return J(t.unevaluatedProperties===!1||BC(t.unevaluatedProperties)||n?{...r,[Y]:`Intersect`,type:`object`,allOf:e}:{...r,[Y]:`Intersect`,allOf:e},t)}function cD(e){return e.every(e=>eC(e))}function lD(e){return cT(e,[ZS])}function uD(e){return e.map(e=>eC(e)?lD(e):e)}function dD(e,t){return cD(e)?rD(sD(uD(e),t)):sD(uD(e),t)}function fD(e,t={}){if(e.length===1)return J(e[0],t);if(e.length===0)return lT(t);if(e.some(e=>jC(e)))throw Error(`Cannot intersect transform types`);return dD(e,t)}function pD(e,t){if(e.length===1)return J(e[0],t);if(e.length===0)return lT(t);if(e.some(e=>jC(e)))throw Error(`Cannot intersect transform types`);return sD(e,t)}function mD(...e){let[t,n]=typeof e[0]==`string`?[e[0],e[1]]:[e[0].$id,e[1]];if(typeof t!=`string`)throw new JS(`Ref: $ref must be a string`);return J({[Y]:`Ref`,$ref:t},n)}function hD(e,t){return oT(`Awaited`,[oT(e,t)])}function gD(e){return oT(`Awaited`,[mD(e)])}function _D(e){return pD(bD(e))}function vD(e){return yT(bD(e))}function yD(e){return xD(e)}function bD(e){return e.map(e=>xD(e))}function xD(e,t){return J(sC(e)?hD(e.target,e.parameters):fC(e)?_D(e.allOf):PC(e)?vD(e.anyOf):CC(e)?yD(e.item):TC(e)?gD(e.$ref):e,t)}function SD(e){let t=[];for(let n of e)t.push(kD(n));return t}function CD(e){return tT(SD(e))}function wD(e){return eT(SD(e))}function TD(e){return e.map((e,t)=>t.toString())}function ED(e){return[`[number]`]}function DD(e){return globalThis.Object.getOwnPropertyNames(e)}function OD(e){return AD?globalThis.Object.getOwnPropertyNames(e).map(e=>e[0]===`^`&&e[e.length-1]===`$`?e.slice(1,e.length-1):e):[]}function kD(e){return fC(e)?CD(e.allOf):PC(e)?wD(e.anyOf):MC(e)?TD(e.items??[]):rC(e)?ED(e.items):SC(e)?DD(e.properties):wC(e)?OD(e.patternProperties):[]}var AD=!1;function jD(e,t){return oT(`KeyOf`,[oT(e,t)])}function MD(e){return oT(`KeyOf`,[mD(e)])}function ND(e,t){return J(vT(PD(kD(e))),t)}function PD(e){return e.map(e=>e===`[number]`?XT():qT(e))}function FD(e,t){return sC(e)?jD(e.target,e.parameters):TC(e)?MD(e.$ref):_C(e)?RD(e,t):ND(e,t)}function ID(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=FD(e[r],FS(t));return n}function LD(e,t){return ID(e.properties,t)}function RD(e,t){return uT(LD(e,t))}function zD(e){let t=[];for(let n of e)t.push(...kD(n));return Zw(t)}function BD(e){return e.filter(e=>!vC(e))}function VD(e,t){let n=[];for(let r of e)n.push(...wE(r,[t]));return BD(n)}function HD(e,t){let n={};for(let r of t)n[r]=fD(VD(e,r));return n}function UD(e,t){return PE(HD(e,zD(e)),t)}function WD(e){return J({[Y]:`Date`,type:`Date`},e)}function GD(e){return J({[Y]:`Null`,type:`null`},e)}function KD(e){return J({[Y]:`Symbol`,type:`symbol`},e)}function qD(e){return J({[Y]:`Undefined`,type:`undefined`},e)}function JD(e){return J({[Y]:`Uint8Array`,type:`Uint8Array`},e)}function YD(e){return J({[Y]:`Unknown`},e)}function XD(e){return e.map(e=>$D(e,!1))}function ZD(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=zE($D(e[n],!1));return t}function QD(e,t){return t===!0?e:zE(e)}function $D(e,t){return mS(e)||bS(e)?QD(nT(),t):hS(e)?zE(UE(XD(e))):DS(e)?JD():vS(e)?WD():CS(e)?QD(PE(ZD(e)),t):yS(e)?QD(fT([],YD()),t):OS(e)?qD():xS(e)?GD():ES(e)?KD():gS(e)?YT():SS(e)||_S(e)||TS(e)?qT(e):PE({})}function eO(e,t){return J($D(e,!0),t)}function tO(e,t){return cC(e)?UE(e.parameters,t):lT(t)}function nO(e,t){if(OS(e))throw Error(`Enum undefined or empty`);let n=globalThis.Object.getOwnPropertyNames(e).filter(e=>isNaN(e)).map(t=>e[t]);return yT([...new Set(n)].map(e=>qT(e)),{...t,[QS]:`Enum`})}var rO=class extends JS{},Q;(function(e){e[e.Union=0]=`Union`,e[e.True=1]=`True`,e[e.False=2]=`False`})(Q||={});function iO(e){return e===Q.False?e:Q.True}function aO(e){throw new rO(e)}function oO(e){return bw(e)||dw(e)||Iw(e)||Rw(e)||$C(e)}function sO(e,t){return bw(t)?TO(e,t):dw(t)?xO(e,t):Iw(t)?ck(e,t):Rw(t)?uk(e,t):$C(t)?cO(e,t):aO(`StructuralRight`)}function cO(e,t){return Q.True}function lO(e,t){return dw(t)?xO(e,t):Iw(t)&&t.anyOf.some(e=>$C(e)||Rw(e))?Q.True:Iw(t)?Q.Union:Rw(t)||$C(t)?Q.True:Q.Union}function uO(e,t){return Rw(e)?Q.False:$C(e)?Q.Union:bw(e)?Q.True:Q.False}function dO(e,t){return ww(t)&&HO(t)?Q.True:oO(t)?sO(e,t):tw(t)?iO(mk(e.items,t.items)):Q.False}function fO(e,t){return oO(t)?sO(e,t):nw(t)?iO(mk(e.items,t.items)):Q.False}function pO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):rw(t)?Q.True:Q.False}function mO(e,t){return hw(e)||iw(e)?Q.True:Q.False}function hO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):iw(t)?Q.True:Q.False}function gO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):ow(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iO(mk(t.parameters[n],e))===Q.True)?iO(mk(e.returns,t.returns)):Q.False:Q.False}function _O(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):sw(t)?Q.True:Q.False}function vO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):cw(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iO(mk(t.parameters[n],e))===Q.True)?iO(mk(e.returns,t.returns)):Q.False:Q.False}function yO(e,t){return gw(e)&&SS(e.const)||Cw(e)||lw(e)?Q.True:Q.False}function bO(e,t){return lw(t)||Cw(t)?Q.True:oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):Q.False}function xO(e,t){return t.allOf.every(t=>mk(e,t)===Q.True)?Q.True:Q.False}function SO(e,t){return e.allOf.some(e=>mk(e,t)===Q.True)?Q.True:Q.False}function CO(e,t){return oO(t)?sO(e,t):fw(t)?iO(mk(e.items,t.items)):Q.False}function wO(e,t){return gw(t)&&t.const===e.const?Q.True:oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):kw(t)?$O(e,t):Cw(t)?AO(e,t):lw(t)?yO(e,t):iw(t)?mO(e,t):Q.False}function TO(e,t){return Q.False}function EO(e,t){return Q.True}function DO(e){let[t,n]=[e,0];for(;xw(t);)t=t.not,n+=1;return n%2==0?t:YD()}function OO(e,t){return xw(e)?mk(DO(e),t):xw(t)?mk(e,DO(t)):aO(`Invalid fallthrough for Not`)}function kO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):Sw(t)?Q.True:Q.False}function AO(e,t){return mw(e)||Cw(e)||lw(e)?Q.True:Q.False}function jO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):lw(t)||Cw(t)?Q.True:Q.False}function MO(e,t){return Object.getOwnPropertyNames(e.properties).length===t}function NO(e){return HO(e)}function PO(e){return MO(e,0)||MO(e,1)&&`description`in e.properties&&Iw(e.properties.description)&&e.properties.description.anyOf.length===2&&(kw(e.properties.description.anyOf[0])&&Fw(e.properties.description.anyOf[1])||kw(e.properties.description.anyOf[1])&&Fw(e.properties.description.anyOf[0]))}function FO(e){return MO(e,0)}function IO(e){return MO(e,0)}function LO(e){return MO(e,0)}function RO(e){return MO(e,0)}function zO(e){return HO(e)}function BO(e){let t=XT();return MO(e,0)||MO(e,1)&&`length`in e.properties&&iO(mk(e.properties.length,t))===Q.True}function VO(e){return MO(e,0)}function HO(e){let t=XT();return MO(e,0)||MO(e,1)&&`length`in e.properties&&iO(mk(e.properties.length,t))===Q.True}function UO(e){let t=fT([nT()],nT());return MO(e,0)||MO(e,1)&&`then`in e.properties&&iO(mk(e.properties.then,t))===Q.True}function WO(e,t){return mk(e,t)===Q.False||QC(e)&&!QC(t)?Q.False:Q.True}function GO(e,t){return Rw(e)?Q.False:$C(e)?Q.Union:bw(e)||pw(e)&&NO(t)||mw(e)&&FO(t)||hw(e)&&IO(t)||Aw(e)&&PO(t)||rw(e)&&LO(t)||kw(e)&&NO(t)||Aw(e)&&PO(t)||Cw(e)&&FO(t)||lw(e)&&FO(t)||iw(e)&&IO(t)||Lw(e)&&zO(t)||sw(e)&&RO(t)||ow(e)&&VO(t)||cw(e)&&BO(t)?Q.True:Ew(e)&&kw(JO(e))?t[QS]===`Record`?Q.True:Q.False:Ew(e)&&Cw(JO(e))&&MO(t,0)?Q.True:Q.False}function KO(e,t){return oO(t)?sO(e,t):Ew(t)?XO(e,t):ww(t)?(()=>{for(let n of Object.getOwnPropertyNames(t.properties)){if(!(n in e.properties)&&!QC(t.properties[n]))return Q.False;if(QC(t.properties[n]))return Q.True;if(WO(e.properties[n],t.properties[n])===Q.False)return Q.False}return Q.True})():Q.False}function qO(e,t){return oO(t)?sO(e,t):ww(t)&&UO(t)?Q.True:Tw(t)?iO(mk(e.item,t.item)):Q.False}function JO(e){return qw in e.patternProperties?XT():Jw in e.patternProperties?ZT():aO(`Unknown record key pattern`)}function YO(e){return qw in e.patternProperties?e.patternProperties[qw]:Jw in e.patternProperties?e.patternProperties[Jw]:aO(`Unable to get record value schema`)}function XO(e,t){let[n,r]=[JO(t),YO(t)];return pw(e)&&Cw(n)&&iO(mk(e,r))===Q.True?Q.True:Lw(e)&&Cw(n)||kw(e)&&Cw(n)||tw(e)&&Cw(n)?mk(e,r):ww(e)?(()=>{for(let t of Object.getOwnPropertyNames(e.properties))if(WO(r,e.properties[t])===Q.False)return Q.False;return Q.True})():Q.False}function ZO(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?mk(YO(e),YO(t)):Q.False}function QO(e,t){return mk(Ow(e)?ZT():e,Ow(t)?ZT():t)}function $O(e,t){return gw(e)&&TS(e.const)||kw(e)?Q.True:Q.False}function ek(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):kw(t)?Q.True:Q.False}function tk(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):Aw(t)?Q.True:Q.False}function nk(e,t){return jw(e)?mk(oE(e),t):jw(t)?mk(e,oE(t)):aO(`Invalid fallthrough for TemplateLiteral`)}function rk(e,t){return tw(t)&&e.items!==void 0&&e.items.every(e=>mk(e,t.items)===Q.True)}function ik(e,t){return bw(e)?Q.True:Rw(e)?Q.False:$C(e)?Q.Union:Q.False}function ak(e,t){return oO(t)?sO(e,t):ww(t)&&HO(t)||tw(t)&&rk(e,t)?Q.True:Pw(t)?OS(e.items)&&!OS(t.items)||!OS(e.items)&&OS(t.items)?Q.False:OS(e.items)&&!OS(t.items)||e.items.every((e,n)=>mk(e,t.items[n])===Q.True)?Q.True:Q.False:Q.False}function ok(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):Lw(t)?Q.True:Q.False}function sk(e,t){return oO(t)?sO(e,t):ww(t)?GO(e,t):Ew(t)?XO(e,t):Bw(t)?fk(e,t):Fw(t)?Q.True:Q.False}function ck(e,t){return t.anyOf.some(t=>mk(e,t)===Q.True)?Q.True:Q.False}function lk(e,t){return e.anyOf.every(e=>mk(e,t)===Q.True)?Q.True:Q.False}function uk(e,t){return Q.True}function dk(e,t){return bw(t)?TO(e,t):dw(t)?xO(e,t):Iw(t)?ck(e,t):$C(t)?cO(e,t):kw(t)?$O(e,t):Cw(t)?AO(e,t):lw(t)?yO(e,t):iw(t)?mO(e,t):tw(t)?uO(e,t):Pw(t)?ik(e,t):ww(t)?GO(e,t):Rw(t)?Q.True:Q.False}function fk(e,t){return Fw(e)||Fw(e)?Q.True:Q.False}function pk(e,t){return dw(t)?xO(e,t):Iw(t)?ck(e,t):Rw(t)?uk(e,t):$C(t)?cO(e,t):ww(t)?GO(e,t):Bw(t)?Q.True:Q.False}function mk(e,t){return jw(e)||jw(t)?nk(e,t):Ow(e)||Ow(t)?QO(e,t):xw(e)||xw(t)?OO(e,t):$C(e)?lO(e,t):tw(e)?dO(e,t):rw(e)?pO(e,t):iw(e)?hO(e,t):nw(e)?fO(e,t):ow(e)?gO(e,t):sw(e)?_O(e,t):cw(e)?vO(e,t):lw(e)?bO(e,t):dw(e)?SO(e,t):fw(e)?CO(e,t):gw(e)?wO(e,t):bw(e)?EO(e,t):Sw(e)?kO(e,t):Cw(e)?jO(e,t):ww(e)?KO(e,t):Ew(e)?ZO(e,t):kw(e)?ek(e,t):Aw(e)?tk(e,t):Pw(e)?ak(e,t):Tw(e)?qO(e,t):Lw(e)?ok(e,t):Fw(e)?sk(e,t):Iw(e)?lk(e,t):Rw(e)?dk(e,t):Bw(e)?pk(e,t):aO(`Unknown left type operand '${e[Y]}'`)}function hk(e,t){return mk(e,t)}function gk(e,t,n,r,i){let a={};for(let o of globalThis.Object.getOwnPropertyNames(e))a[o]=bk(e[o],t,n,r,FS(i));return a}function _k(e,t,n,r,i){return gk(e.properties,t,n,r,i)}function vk(e,t,n,r,i){return uT(_k(e,t,n,r,i))}function yk(e,t,n,r){let i=hk(e,t);return i===Q.Union?yT([n,r]):i===Q.True?n:r}function bk(e,t,n,r,i){return _C(e)?vk(e,t,n,r,i):gC(e)?J(wk(e,t,n,r,i)):J(yk(e,t,n,r),i)}function xk(e,t,n,r,i){return{[e]:bk(qT(e),t,n,r,FS(i))}}function Sk(e,t,n,r,i){return e.reduce((e,a)=>({...e,...xk(a,t,n,r,i)}),{})}function Ck(e,t,n,r,i){return Sk(e.keys,t,n,r,i)}function wk(e,t,n,r,i){return uT(Ck(e,t,n,r,i))}function Tk(e,t){return Dk(oE(e),t)}function Ek(e,t){let n=e.filter(e=>hk(e,t)===Q.False);return n.length===1?n[0]:yT(n)}function Dk(e,t,n={}){return kC(e)?J(Tk(e,t),n):_C(e)?J(Ak(e,t),n):J(PC(e)?Ek(e.anyOf,t):hk(e,t)===Q.False?e:lT(),n)}function Ok(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=Dk(e[r],t);return n}function kk(e,t){return Ok(e.properties,t)}function Ak(e,t){return uT(kk(e,t))}function jk(e,t){return Nk(oE(e),t)}function Mk(e,t){let n=e.filter(e=>hk(e,t)!==Q.False);return n.length===1?n[0]:yT(n)}function Nk(e,t,n){return kC(e)?J(jk(e,t),n):_C(e)?J(Ik(e,t),n):J(PC(e)?Mk(e.anyOf,t):hk(e,t)===Q.False?lT():e,n)}function Pk(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=Nk(e[r],t);return n}function Fk(e,t){return Pk(e.properties,t)}function Ik(e,t){return uT(Fk(e,t))}function Lk(e,t){return cC(e)?J(e.returns,t):lT(t)}function Rk(e){return zE(rD(e))}function zk(e,t,n){return J({[Y]:`Record`,type:`object`,patternProperties:{[e]:t}},n)}function Bk(e,t,n){let r={};for(let n of e)r[n]=t;return PE(r,{...n,[QS]:`Record`})}function Vk(e,t,n){return zT(e)?Bk(dE(e),t,n):zk(e.pattern,t,n)}function Hk(e,t,n){return Bk(dE(yT(e)),t,n)}function Uk(e,t,n){return Bk([e.toString()],t,n)}function Wk(e,t,n){return zk(e.source,t,n)}function Gk(e,t,n){return zk(OS(e.pattern)?Jw:e.pattern,t,n)}function Kk(e,t,n){return zk(Jw,t,n)}function qk(e,t,n){return zk(Yw,t,n)}function Jk(e,t,n){return PE({true:t,false:t},n)}function Yk(e,t,n){return zk(qw,t,n)}function Xk(e,t,n){return zk(qw,t,n)}function Zk(e,t,n={}){return PC(e)?Hk(e.anyOf,t,n):kC(e)?Vk(e,t,n):hC(e)?Uk(e.const,t,n):oC(e)?Jk(e,t,n):dC(e)?Yk(e,t,n):xC(e)?Xk(e,t,n):EC(e)?Wk(e,t,n):DC(e)?Gk(e,t,n):tC(e)?Kk(e,t,n):vC(e)?qk(e,t,n):lT(n)}function Qk(e){return globalThis.Object.getOwnPropertyNames(e.patternProperties)[0]}function $k(e){let t=Qk(e);return t===Jw?ZT():t===qw?XT():ZT({pattern:t})}function eA(e){return e.patternProperties[Qk(e)]}function tA(e,t){return t.parameters=hA(e,t.parameters),t.returns=gA(e,t.returns),t}function nA(e,t){return t.parameters=hA(e,t.parameters),t.returns=gA(e,t.returns),t}function rA(e,t){return t.allOf=hA(e,t.allOf),t}function iA(e,t){return t.anyOf=hA(e,t.anyOf),t}function aA(e,t){return OS(t.items)||(t.items=hA(e,t.items)),t}function oA(e,t){return t.items=gA(e,t.items),t}function sA(e,t){return t.items=gA(e,t.items),t}function cA(e,t){return t.items=gA(e,t.items),t}function lA(e,t){return t.item=gA(e,t.item),t}function uA(e,t){let n=mA(e,t.properties);return{...t,...PE(n)}}function dA(e,t){let n=Zk(gA(e,$k(t)),gA(e,eA(t)));return{...t,...n}}function fA(e,t){return t.index in e?e[t.index]:YD()}function pA(e,t){let n=$S(t),r=eC(t),i=gA(e,t);return n&&r?Rk(i):n&&!r?zE(i):!n&&r?rD(i):i}function mA(e,t){return globalThis.Object.getOwnPropertyNames(t).reduce((n,r)=>({...n,[r]:pA(e,t[r])}),{})}function hA(e,t){return t.map(t=>gA(e,t))}function gA(e,t){return cC(t)?tA(e,t):uC(t)?nA(e,t):fC(t)?rA(e,t):PC(t)?iA(e,t):MC(t)?aA(e,t):rC(t)?oA(e,t):iC(t)?sA(e,t):pC(t)?cA(e,t):CC(t)?lA(e,t):SC(t)?uA(e,t):wC(t)?dA(e,t):nC(t)?fA(e,t):t}function _A(e,t){return gA(t,IS(e))}function vA(e){return J({[Y]:`Integer`,type:`integer`},e)}function yA(e,t,n){return{[e]:AA(qT(e),t,FS(n))}}function bA(e,t,n){return e.reduce((e,r)=>({...e,...yA(r,t,n)}),{})}function xA(e,t,n){return bA(e.keys,t,n)}function SA(e,t,n){return uT(xA(e,t,n))}function CA(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toLowerCase(),n].join(``)}function wA(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toUpperCase(),n].join(``)}function TA(e){return e.toUpperCase()}function EA(e){return e.toLowerCase()}function DA(e,t,n){let r=NT(e.pattern);return RT(r)?sE([yT(kA([...GT(r)].map(e=>qT(e)),t))],n):{...e,pattern:OA(e.pattern,t)}}function OA(e,t){return typeof e==`string`?t===`Uncapitalize`?CA(e):t===`Capitalize`?wA(e):t===`Uppercase`?TA(e):t===`Lowercase`?EA(e):e:e.toString()}function kA(e,t){return e.map(e=>AA(e,t))}function AA(e,t,n={}){return gC(e)?SA(e,t,n):kC(e)?DA(e,t,n):PC(e)?yT(kA(e.anyOf,t),n):hC(e)?qT(OA(e.const,t),n):J(e,n)}function jA(e,t={}){return AA(e,`Capitalize`,t)}function MA(e,t={}){return AA(e,`Lowercase`,t)}function NA(e,t={}){return AA(e,`Uncapitalize`,t)}function PA(e,t={}){return AA(e,`Uppercase`,t)}function FA(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=GA(e[i],t,FS(n));return r}function IA(e,t,n){return FA(e.properties,t,n)}function LA(e,t,n){return uT(IA(e,t,n))}function RA(e,t){return e.map(e=>WA(e,t))}function zA(e,t){return e.map(e=>WA(e,t))}function BA(e,t){let{[t]:n,...r}=e;return r}function VA(e,t){return t.reduce((e,t)=>BA(e,t),e)}function HA(e,t,n){let r=cT(e,[YS,`$id`,`required`,`properties`]);return PE(VA(n,t),r)}function UA(e){return yT(e.reduce((e,t)=>mC(t)?[...e,qT(t)]:e,[]))}function WA(e,t){return fC(e)?pD(RA(e.allOf,t)):PC(e)?yT(zA(e.anyOf,t)):SC(e)?HA(e,t,e.properties):PE({})}function GA(e,t,n){let r=hS(t)?UA(t):t,i=BC(t)?dE(t):t,a=TC(e),o=TC(t);return _C(e)?LA(e,i,n):gC(t)?YA(e,t,n):a&&o||!a&&o||a&&!o?oT(`Omit`,[e,r],n):J({...WA(e,i),...n})}function KA(e,t,n){return{[t]:GA(e,[t],FS(n))}}function qA(e,t,n){return t.reduce((t,r)=>({...t,...KA(e,r,n)}),{})}function JA(e,t,n){return qA(e,t.keys,n)}function YA(e,t,n){return uT(JA(e,t,n))}function XA(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=aj(e[i],t,FS(n));return r}function ZA(e,t,n){return XA(e.properties,t,n)}function QA(e,t,n){return uT(ZA(e,t,n))}function $A(e,t){return e.map(e=>ij(e,t))}function ej(e,t){return e.map(e=>ij(e,t))}function tj(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function nj(e,t,n){let r=cT(e,[YS,`$id`,`required`,`properties`]);return PE(tj(n,t),r)}function rj(e){return yT(e.reduce((e,t)=>mC(t)?[...e,qT(t)]:e,[]))}function ij(e,t){return fC(e)?pD($A(e.allOf,t)):PC(e)?yT(ej(e.anyOf,t)):SC(e)?nj(e,t,e.properties):PE({})}function aj(e,t,n){let r=hS(t)?rj(t):t,i=BC(t)?dE(t):t,a=TC(e),o=TC(t);return _C(e)?QA(e,i,n):gC(t)?lj(e,t,n):a&&o||!a&&o||a&&!o?oT(`Pick`,[e,r],n):J({...ij(e,i),...n})}function oj(e,t,n){return{[t]:aj(e,[t],FS(n))}}function sj(e,t,n){return t.reduce((t,r)=>({...t,...oj(e,r,n)}),{})}function cj(e,t,n){return sj(e,t.keys,n)}function lj(e,t,n){return uT(cj(e,t,n))}function uj(e,t){return oT(`Partial`,[oT(e,t)])}function dj(e){return oT(`Partial`,[mD(e)])}function fj(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=rD(e[n]);return t}function pj(e,t){let n=cT(e,[YS,`$id`,`required`,`properties`]);return PE(fj(t),n)}function mj(e){return e.map(e=>hj(e))}function hj(e){return sC(e)?uj(e.target,e.parameters):TC(e)?dj(e.$ref):fC(e)?pD(mj(e.allOf)):PC(e)?yT(mj(e.anyOf)):SC(e)?pj(e,e.properties):aC(e)||oC(e)||dC(e)||hC(e)||bC(e)||xC(e)||DC(e)||OC(e)||NC(e)?e:PE({})}function gj(e,t){return _C(e)?yj(e,t):J({...hj(e),...t})}function _j(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=gj(e[r],FS(t));return n}function vj(e,t){return _j(e.properties,t)}function yj(e,t){return uT(vj(e,t))}function bj(e,t){return oT(`Required`,[oT(e,t)])}function xj(e){return oT(`Required`,[mD(e)])}function Sj(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=cT(e[n],[ZS]);return t}function Cj(e,t){let n=cT(e,[YS,`$id`,`required`,`properties`]);return PE(Sj(t),n)}function wj(e){return e.map(e=>Tj(e))}function Tj(e){return sC(e)?bj(e.target,e.parameters):TC(e)?xj(e.$ref):fC(e)?pD(wj(e.allOf)):PC(e)?yT(wj(e.anyOf)):SC(e)?Cj(e,e.properties):aC(e)||oC(e)||dC(e)||hC(e)||bC(e)||xC(e)||DC(e)||OC(e)||NC(e)?e:PE({})}function Ej(e,t){return _C(e)?kj(e,t):J({...Tj(e),...t})}function Dj(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=Ej(e[r],t);return n}function Oj(e,t){return Dj(e.properties,t)}function kj(e,t){return uT(Oj(e,t))}function Aj(e,t){return t.map(t=>TC(t)?jj(e,t.$ref):Qj(e,t))}function jj(e,t){return t in e?TC(e[t])?jj(e,e[t].$ref):Qj(e,e[t]):lT()}function Mj(e){return xD(e[0])}function Nj(e){return EE(e[0],e[1])}function Pj(e){return FD(e[0])}function Fj(e){return gj(e[0])}function Ij(e){return GA(e[0],e[1])}function Lj(e){return aj(e[0],e[1])}function Rj(e){return Ej(e[0])}function zj(e,t,n){let r=Aj(e,n);return t===`Awaited`?Mj(r):t===`Index`?Nj(r):t===`KeyOf`?Pj(r):t===`Partial`?Fj(r):t===`Omit`?Ij(r):t===`Pick`?Lj(r):t===`Required`?Rj(r):lT()}function Bj(e,t){return rT(Qj(e,t))}function Vj(e,t){return aT(Qj(e,t))}function Hj(e,t,n){return dT(Zj(e,t),Qj(e,n))}function Uj(e,t,n){return fT(Zj(e,t),Qj(e,n))}function Wj(e,t){return pD(Zj(e,t))}function Gj(e,t){return jE(Qj(e,t))}function Kj(e,t){return PE(globalThis.Object.keys(t).reduce((n,r)=>({...n,[r]:Qj(e,t[r])}),{}))}function qj(e,t){let[n,r]=[Qj(e,eA(t)),Qk(t)],i=IS(t);return i.patternProperties[r]=n,i}function Jj(e,t){return TC(t)?{...jj(e,t.$ref),[YS]:t[YS]}:t}function Yj(e,t){return UE(Zj(e,t))}function Xj(e,t){return yT(Zj(e,t))}function Zj(e,t){return t.map(t=>Qj(e,t))}function Qj(e,t){return eC(t)?J(Qj(e,cT(t,[ZS])),t):$S(t)?J(Qj(e,cT(t,[XS])),t):jC(t)?J(Jj(e,t),t):rC(t)?J(Bj(e,t.items),t):iC(t)?J(Vj(e,t.items),t):sC(t)?J(zj(e,t.target,t.parameters)):cC(t)?J(Hj(e,t.parameters,t.returns),t):uC(t)?J(Uj(e,t.parameters,t.returns),t):fC(t)?J(Wj(e,t.allOf),t):pC(t)?J(Gj(e,t.items),t):SC(t)?J(Kj(e,t.properties),t):wC(t)?J(qj(e,t)):MC(t)?J(Yj(e,t.items||[]),t):PC(t)?J(Xj(e,t.anyOf),t):t}function $j(e,t){return t in e?Qj(e,e[t]):lT()}function eM(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:$j(e,n)}),{})}var tM=class{constructor(e){let t=eM(e),n=this.WithIdentifiers(t);this.$defs=n}Import(e,t){let n={...this.$defs,[e]:J(this.$defs[e],t)};return J({[Y]:`Import`,$defs:n,$ref:e})}WithIdentifiers(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:{...e[n],$id:n}}),{})}};function nM(e){return new tM(e)}function rM(e,t){return J({[Y]:`Not`,not:e},t)}function iM(e,t){return uC(e)?UE(e.parameters,t):lT()}var aM=0;function oM(e,t={}){OS(t.$id)&&(t.$id=`T${aM++}`);let n=IS(e({[Y]:`This`,$ref:`${t.$id}`}));return n.$id=t.$id,J({[QS]:`Recursive`,...n},t)}function sM(e,t){let n=TS(e)?new globalThis.RegExp(e):e;return J({[Y]:`RegExp`,type:`RegExp`,source:n.source,flags:n.flags},t)}function cM(e){return fC(e)?e.allOf:PC(e)?e.anyOf:MC(e)?e.items??[]:[]}function lM(e){return cM(e)}function uM(e,t){return uC(e)?J(e.returns,t):lT(t)}var dM=class{constructor(e){this.schema=e}Decode(e){return new fM(this.schema,e)}},fM=class{constructor(e,t){this.schema=e,this.decode=t}EncodeTransform(e,t){let n={Encode:n=>t[YS].Encode(e(n)),Decode:e=>this.decode(t[YS].Decode(e))};return{...t,[YS]:n}}EncodeSchema(e,t){let n={Decode:this.decode,Encode:e};return{...t,[YS]:n}}Encode(e){return jC(this.schema)?this.EncodeTransform(e,this.schema):this.EncodeSchema(e,this.schema)}};function pM(e){return new dM(e)}function mM(e={}){return J({[Y]:e[Y]??`Unsafe`},e)}function hM(e){return J({[Y]:`Void`,type:`void`},e)}var $=t({Any:()=>nT,Argument:()=>iT,Array:()=>rT,AsyncIterator:()=>aT,Awaited:()=>xD,BigInt:()=>YT,Boolean:()=>JT,Capitalize:()=>jA,Composite:()=>UD,Const:()=>eO,Constructor:()=>dT,ConstructorParameters:()=>tO,Date:()=>WD,Enum:()=>nO,Exclude:()=>Dk,Extends:()=>bk,Extract:()=>Nk,Function:()=>fT,Index:()=>EE,InstanceType:()=>Lk,Instantiate:()=>_A,Integer:()=>vA,Intersect:()=>pD,Iterator:()=>jE,KeyOf:()=>FD,Literal:()=>qT,Lowercase:()=>MA,Mapped:()=>$E,Module:()=>nM,Never:()=>lT,Not:()=>rM,Null:()=>GD,Number:()=>XT,Object:()=>PE,Omit:()=>GA,Optional:()=>rD,Parameters:()=>iM,Partial:()=>gj,Pick:()=>aj,Promise:()=>FE,Readonly:()=>zE,ReadonlyOptional:()=>Rk,Record:()=>Zk,Recursive:()=>oM,Ref:()=>mD,RegExp:()=>sM,Required:()=>Ej,Rest:()=>lM,ReturnType:()=>uM,String:()=>ZT,Symbol:()=>KD,TemplateLiteral:()=>sE,Transform:()=>pM,Tuple:()=>UE,Uint8Array:()=>JD,Uncapitalize:()=>NA,Undefined:()=>qD,Union:()=>yT,Unknown:()=>YD,Unsafe:()=>mM,Uppercase:()=>PA,Void:()=>hM}),gM={additionalProperties:!1},_M=$.String({pattern:`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,minLength:36,maxLength:36}),vM=$.String({pattern:`^[a-z0-9][a-z0-9-]{0,31}(?![\\s\\S])`,minLength:1,maxLength:32}),yM=$.String({pattern:`^sha256:[0-9a-f]{64}$`,minLength:71,maxLength:71}),bM=$.String({pattern:`^[A-Za-z0-9_-]{43}$`,minLength:43,maxLength:43}),xM=$.String({pattern:`^dpt_[A-Za-z0-9_-]{43}$`,minLength:47,maxLength:47}),SM=`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`,CM=`^(?:${SM}|[A-Z2-7]{12}|[A-Z2-7]{8})(?![\\s\\S])`,wM=$.String({pattern:CM,minLength:8,maxLength:36}),TM=new RegExp(CM),EM=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/;function DM(e){return typeof e!=`string`||e.length>36?!1:TM.test(e)}function OM(e){if(typeof e!=`string`)return;if(EM.test(e)){let t=e.toLowerCase();return DM(t)?t:void 0}let t=e.replace(/[\s-]+/g,``).toUpperCase();if(DM(t)&&!(/[\s-]/.test(e)&&t.length!==12))return t}$.Object({type:$.Literal(`pair.request`),v:$.Literal(1),requestId:_M,code:wM,deviceUid:_M,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yM,clientTime:$.Integer(),hubNonce:$.Optional(bM)},gM),$.Object({type:$.Literal(`pair.device-request`),v:$.Literal(1),requestId:_M,deviceUid:_M,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yM,clientTime:$.Integer(),hubNonce:$.Optional(bM)},gM);var kM=$.Object({type:$.Literal(`pair.challenge`),v:$.Literal(1),enrollmentId:_M,nonce:bM,issuedAt:$.Integer(),hubId:_M,hubPublicKey:$.Optional($.String({minLength:1,maxLength:256})),hubKeyFingerprint:$.Optional(yM),hubSignature:$.Optional($.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86}))},gM);$.Object({type:$.Literal(`pair.device-ack`),v:$.Literal(1),codeId:_M,code:wM,expiresAt:$.Integer(),hubOrigin:$.String(),hubId:_M,challenge:kM},gM),$.Object({type:$.Literal(`pair.response`),v:$.Literal(1),enrollmentId:_M,nonce:bM,signature:$.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86})},gM),$.Object({type:$.Literal(`pair.pending`),v:$.Literal(1),enrollmentId:_M,state:$.Literal(`awaiting_approval`),expiresAt:$.Integer(),pollAfterMs:$.Integer({minimum:1})},gM),$.Object({type:$.Literal(`pair.token`),v:$.Literal(1),enrollmentId:_M,deviceUid:_M,deviceId:vM,pairingEpoch:_M,credentialId:_M,generation:$.Integer({minimum:1}),hubId:_M,hubOrigin:$.String(),hubUrl:$.String(),tunnelToken:xM,issuedAt:$.Integer(),expiresAt:$.Null(),hubKeyFingerprint:$.Optional(yM)},gM),$.Object({enrollmentId:_M,deviceUid:_M,keyFingerprint:yM,replaceKey:$.Optional($.Boolean())},gM),$.Object({type:$.Literal(`pair.revoke`),v:$.Literal(1),deviceId:vM,pairingEpoch:_M,reason:$.Union([$.Literal(`user`),$.Literal(`compromise`),$.Literal(`hub_migrated`)]),revokedAt:$.Integer()},gM);var AM=$.Object({type:$.Literal(`pair.error`),v:$.Literal(1),code:$.Union([$.Literal(`code_invalid`),$.Literal(`code_expired`),$.Literal(`code_used`),$.Literal(`code_in_use`),$.Literal(`rate_limited`),$.Literal(`signature_invalid`),$.Literal(`clock_skew`),$.Literal(`paired_elsewhere`),$.Literal(`hub_required`),$.Literal(`fingerprint_mismatch`),$.Literal(`identity_conflict`),$.Literal(`enrollment_lost`),$.Literal(`enrollment_cancelled`),$.Literal(`already_issued`),$.Literal(`challenge_expired`)]),message:$.String({maxLength:512}),retryAfterMs:$.Optional($.Integer({minimum:1}))},gM);$.Object({type:$.Literal(`pair.code`),v:$.Literal(1),codeId:_M,code:wM,expiresAt:$.Integer(),hubOrigin:$.String({maxLength:2048}),pairUrl:$.String({maxLength:4096}),offerUrl:$.Optional($.String({maxLength:2048}))},gM);var jM=$.Union([$.Literal(`open`),$.Literal(`awaiting_proof`),$.Literal(`awaiting_approval`),$.Literal(`approved`),$.Literal(`issued`),$.Literal(`connected`),$.Literal(`cancelled`),$.Literal(`expired`)]);$.Object({type:$.Literal(`pair.code-state`),v:$.Literal(1),codeId:_M,expiresAt:$.Integer(),phase:jM,enrollment:$.Optional($.Object({enrollmentId:_M,deviceUid:_M,deviceName:$.String({minLength:1,maxLength:64}),keyFingerprint:yM,proofVerified:$.Boolean(),keyChanged:$.Boolean()},gM)),deviceId:$.Optional(vM),error:$.Optional(AM)},gM);function MM(e){if(typeof e!=`string`||e.length===0||e.length>2048)return{ok:!1,error:`origin: empty or too long`};if(/\s|\n|\r|\t/.test(e))return{ok:!1,error:`origin: whitespace not allowed`};let t;try{t=new URL(e)}catch{return{ok:!1,error:`origin: not a valid URL`}}return t.protocol!==`https:`&&!(t.protocol===`http:`&&/^(127\.0\.0\.1|\[::1\]|localhost)$/.test(t.hostname))?{ok:!1,error:`origin: HTTPS origin required`}:t.username||t.password?{ok:!1,error:`origin: userinfo not allowed`}:t.search||t.hash?{ok:!1,error:`origin: query/fragment not allowed`}:t.pathname!==`/`&&t.pathname!==``?{ok:!1,error:`origin: base path not allowed`}:{ok:!0,origin:t.origin,tunnelUrl:`${t.origin}/api/tunnel`}}function NM(e){if(e!==``&&/^[A-Za-z0-9_-]+$/.test(e))try{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return}}var PM=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,FM=RegExp(`^${SM}$`),IM=/^sha256:[0-9a-f]{64}$/;function LM(e){let t=NM(e);if(!t||t.length>1024)return;let n;try{n=JSON.parse(new TextDecoder().decode(t))}catch{return}if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n;if(r.v!==2&&r.v!==3)return;let i=r.v===3?6:5;if(Object.keys(r).length!==i||typeof r.hub!=`string`)return;let a=MM(r.hub);if(a.ok&&a.origin===r.hub&&typeof r.id==`string`&&PM.test(r.id)&&typeof r.code==`string`&&FM.test(r.code)&&typeof r.exp==`number`&&Number.isSafeInteger(r.exp))return r.v===3?typeof r.kfp!=`string`||!IM.test(r.kfp)?void 0:{v:3,hub:r.hub,id:r.id,code:r.code,exp:r.exp,kfp:r.kfp}:{v:2,hub:r.hub,id:r.id,code:r.code,exp:r.exp}}function RM(e,t=Date.now()){let n=LM(e);if(n&&!(n.exp<t-3e4)&&!(n.exp>t+6e5))return n}function zM(e,t=Date.now()){let n;try{n=new URL(e)}catch{return}if(!/^\/pair\/?$/.test(n.pathname)||n.username||n.password||n.search||!n.hash.startsWith(`#offer=`))return;let r=RM(n.hash.slice(7),t);if(r&&r.hub===n.origin)return{offer:r,rest:`${n.origin}/pair`}}function BM(e){if(!/^\/pair\/?$/.test(e.pathname))return;if(e.hash.startsWith(`#offer=`)){let t=zM(e.href);if(t)return{code:t.offer.code,origin:e.origin,offerFragment:e.hash.slice(1)};let n=RM(e.hash.slice(7));return n&&n.hub!==e.origin?{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}:{error:`Invalid pairing link. Use a complete link from the hub wizard.`}}let t=e.searchParams;if(!t.has(`code`)&&!t.has(`origin`)&&!t.has(`v`))return;let n=t.get(`code`),r=n===null?void 0:OM(n);if(e.username||e.password||e.hash||t.getAll(`code`).length!==1||!r||t.getAll(`v`).length!==1||t.get(`v`)!==`1`)return{error:`Invalid pairing link. Use a complete version 1 link from the hub wizard.`};if(t.has(`origin`))try{let n=new URL(t.get(`origin`));if(t.getAll(`origin`).length!==1||n.origin!==e.origin||n.pathname!==`/`||n.username||n.password||n.search||n.hash)throw Error(`origin mismatch`)}catch{return{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}}return{code:r,origin:e.origin}}var VM=e=>/^\/pair\/?$/.test(e.pathname)?`/`:void 0,HM=e=>/^\/pair\/?$/.test(e.pathname)&&BM(e)===void 0?`/`:void 0,UM=4e3;async function WM(e){if(!e.needsCancel)return{closed:!0,confirmed:!0};let t,n=await Promise.race([e.cancel().catch(()=>`failed`),new Promise(n=>t=setTimeout(()=>n(`failed`),e.timeoutMs))]);return clearTimeout(t),{closed:n!==`issued`,confirmed:n===`cancelled`}}var GM={class:`modal pair-wizard`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pair-title`},KM={key:1,class:`pair-pending`,"aria-label":`Machines waiting for approval`},qM={class:`who`},JM={key:0,class:`muted`},YM={key:1,class:`muted`},XM={class:`fp`},ZM={class:`row`},QM={class:`phase`},$M=[`onClick`],eN={key:2,class:`hint`},tN={class:`pair-steps`,"aria-label":`Pairing progress`},nN={class:`pair-grid`},rN={class:`pair-code-box`},iN={class:`pair-code`,"aria-label":`Pairing code`},aN={class:`pair-copy-actions`},oN=[`innerHTML`],sN={class:`pair-side`},cN={key:0,class:`hint`},lN={class:`pair-fingerprint`},uN={class:`fp`},dN={class:`pair-confirm`},fN={key:0,class:`pair-confirm warn`},pN=[`disabled`],mN=[`disabled`],hN={class:`hint`},gN=[`disabled`],_N={key:5,class:`error`,role:`alert`},vN={key:4},yN={class:`error`,role:`alert`},bN=A({__name:`PairDeviceWizard`,props:{handoff:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=n,i=e,a=O(`boot`),o=O(),s=O(),c=O(),l=O(``),u=O(!1),d=O(!1),f=O(!1),p=O(!1),m=O(!1),h=O(!1),g=O(),_=O([]),v=B(()=>{let e=s.value?.code??``;return!DM(e)||e.includes(`-`)?e:(e.match(/.{4}/g)??[]).join(`-`)}),y=B(()=>s.value?Sv(s.value):``),b=B(()=>y.value?oS(y.value,148):``),ee=B(()=>c.value?.enrollment?.keyFingerprint??``),te=B(()=>c.value?.deviceId??``);Zn(te,e=>{g.value?.(),e&&(g.value=Zn(()=>Xl.devices.value.find(t=>t.id===e)?.status,e=>{e===`online`&&(W(`Device paired and online.`),g.value?.(),g.value=void 0)},{immediate:!0}))});async function x(e){a.value=`boot`,l.value=``,f.value=!1,p.value=!1,c.value=void 0,s.value=void 0,o.value?.close();let t=Tv();o.value=t;try{let n=e?await Cv.resolveCode(e):await Cv.createCode();if(t.closed()){await Cv.cancel(n.codeId).catch(()=>{W(`The late pairing code could not be cancelled. Check device credentials before retrying.`)});return}if(s.value=n,a.value=`code`,e){let e=VM(new URL(window.location.href));e&&window.history.replaceState(window.history.state,``,e)}Ov(t,n.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{t.closed()||(l.value=e instanceof Error?e.message:String(e),a.value=`expired`)})}catch(e){l.value=e instanceof Error?e.message:String(e),a.value=`expired`}}async function ne(){let e=c.value,t=o.value;if(e?.enrollment&&t&&!u.value){u.value=!0,l.value=``;try{let t=await Cv.approve(s.value.codeId,{enrollmentId:e.enrollment.enrollmentId,deviceUid:e.enrollment.deviceUid,keyFingerprint:e.enrollment.keyFingerprint,...p.value?{replaceKey:!0}:{}});c.value=t,(t.phase===`issued`||t.phase===`connected`)&&(a.value=`issued`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function re(e){if(!s.value)return`cancelled`;try{let t=await Cv.cancel(s.value.codeId,void 0,e);return c.value=t,o.value&&(o.value.state=t),a.value=t.phase===`expired`?`expired`:`cancelled`,o.value?.close(),`cancelled`}catch(e){if(e instanceof Sl&&e.status===409&&String(e.code)===`already_issued`){let e=await Cv.codeState(s.value.codeId).catch(()=>void 0);return e&&(c.value=e,o.value&&(o.value.state=e)),a.value=`issued`,l.value=`Credential already issued. Closing does not revoke it; choose Revoke explicitly if needed.`,`issued`}return l.value=e instanceof Error?e.message:String(e),`failed`}}let ie=()=>re(!1),ae=()=>[`issued`,`connected`,`cancelled`,`expired`].includes(c.value?.phase??``);async function oe(){let e=te.value;if(e){u.value=!0;try{await Cv.revoke(e,`user`),W(`Issued credential revoked.`),r(`close`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function se(){if(s.value)try{await navigator.clipboard.writeText(s.value.code),m.value=!0,setTimeout(()=>m.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the code manually.`}}async function ce(){if(s.value)try{await navigator.clipboard.writeText(s.value.offerUrl??s.value.pairUrl),h.value=!0,setTimeout(()=>h.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the link manually.`}}async function le(){if(!d.value){d.value=!0,u.value=!0;try{let e=await WM({needsCancel:!!s.value&&!ae(),cancel:ie,timeoutMs:UM});if(!e.closed)return;o.value?.close(),g.value?.(),e.confirmed||W(`Pairing cancellation was not confirmed. The code expires on its own; check device credentials before retrying.`),r(`close`)}finally{d.value=!1,u.value=!1}}}t({close:le});let ue;async function de(){try{_.value=(await Cv.pending()).codes}catch{}}async function fe(e){s.value=void 0,c.value=void 0,l.value=``;let t=Tv();o.value=t,a.value=e.phase===`approved_ready`?`approve`:`proof`,Ov(t,e.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{l.value=e instanceof Error?e.message:String(e)})}return Wr(()=>{if(de(),ue=setInterval(()=>void de(),3e3),i.handoff&&`error`in i.handoff){l.value=i.handoff.error,a.value=`expired`;return}x(i.handoff?.code)}),qr(()=>{clearInterval(ue);let e=o.value;e&&!e.closed()&&s.value&&!ae()&&re(!0).then(e=>{e!==`cancelled`&&W(`Pairing cancellation was not confirmed. Check device credentials before retrying.`)}),e?.close(),g.value?.()}),(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:As(le,[`self`])},[I(`div`,GM,[I(`header`,null,[t[5]||=I(`h2`,{id:`pair-title`},`Pair a device`,-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,onClick:le},[L(k(qc),{size:18})])]),i.handoff&&`offerFragment`in i.handoff&&i.handoff.offerFragment?(N(),F(pS,{key:0,"offer-fragment":i.handoff.offerFragment},null,8,[`offer-fragment`])):z(``,!0),_.value.length?(N(),P(`section`,KM,[t[6]||=I(`h3`,null,`Machines waiting for you`,-1),I(`ul`,null,[(N(!0),P(M,null,j(_.value,e=>(N(),P(`li`,{key:e.codeId},[I(`div`,qM,[I(`strong`,null,T(e.deviceName??`unnamed device`),1),e.hostname?(N(),P(`span`,JM,T(e.hostname),1)):z(``,!0),e.platform?(N(),P(`span`,YM,T(e.platform),1)):z(``,!0)]),I(`div`,XM,T(e.keyFingerprint),1),I(`div`,ZM,[I(`span`,QM,T(e.phase.replaceAll(`_`,` `)),1),I(`button`,{type:`button`,class:`small`,onClick:t=>fe(e)},`Review`,8,$M)])]))),128))]),t[7]||=I(`p`,{class:`hint`},` Compare each fingerprint with the machine's own terminal before approving. Codes are minted by the hub — nothing has to be copied to the machine. `,-1)])):z(``,!0),a.value===`boot`?(N(),P(`p`,eN,`Minting a pairing code…`)):s.value?(N(),P(M,{key:3},[I(`ol`,tN,[t[8]||=I(`li`,{class:C({on:!0})},`Code`,-1),I(`li`,{class:C({on:[`proof`,`approve`,`issued`].includes(a.value)})},`Proof`,2),I(`li`,{class:C({on:[`approve`,`issued`].includes(a.value)})},`Fingerprint`,2),I(`li`,{class:C({on:a.value===`issued`})},`Online`,2)]),I(`div`,nN,[I(`div`,rN,[I(`div`,iN,T(v.value),1),I(`div`,aN,[I(`button`,{type:`button`,class:`small`,onClick:se},[L(k(tc),{size:14}),R(` `+T(m.value?`Copied`:`Copy code`),1)]),I(`button`,{type:`button`,class:`small`,onClick:ce,title:`Self-contained link: hub, code and expiry all in the fragment — it never reaches server logs`},[L(k(tc),{size:14}),R(` `+T(h.value?`Copied link`:`Copy link`),1)])]),t[9]||=I(`p`,{class:`hint`},` Run the device pairing command and scan, or enter this code on the device. Expires in 5 minutes. `,-1),I(`div`,{class:`pair-qr`,"aria-label":`Pairing QR code`,title:`Same offer link as Copy link: hub, code and expiry all in the #offer= fragment — it never reaches server logs`,innerHTML:b.value},null,8,oN)]),I(`div`,sN,[a.value===`code`||a.value===`proof`?(N(),P(`p`,cN,[L(k(Pc),{size:14,class:`spin`}),t[10]||=R(` Waiting for the device to submit its signing proof… `,-1)])):a.value===`approve`?(N(),P(M,{key:1},[I(`div`,lN,[t[11]||=I(`h3`,null,`Device key fingerprint`,-1),I(`code`,uN,T(ee.value),1),t[12]||=I(`p`,{class:`hint`},` Compare ALL 64 hex characters with the fingerprint shown on the device screen. `,-1)]),I(`label`,dN,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>f.value=e,type:`checkbox`},null,512),[[xs,f.value]]),t[13]||=R(` The fingerprint matches the device display exactly `,-1)]),c.value?.enrollment?.keyChanged?(N(),P(`label`,fN,[Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>p.value=e,type:`checkbox`},null,512),[[xs,p.value]]),L(k(Lc),{size:14}),t[14]||=R(` Device is already paired with a DIFFERENT key — replace the stored key (replaceKey) `,-1)])):z(``,!0),I(`button`,{type:`button`,class:`primary`,disabled:!f.value||u.value||c.value?.enrollment?.keyChanged===!0&&!p.value,onClick:ne},` Approve device `,8,pN),I(`button`,{type:`button`,class:`small`,disabled:u.value,onClick:ie},` Cancel pairing `,8,mN)],64)):a.value===`issued`?(N(),P(M,{key:2},[I(`p`,hN,[L(k(Qs),{size:14}),t[15]||=R(` Credential issued. The device is connecting through the tunnel — you will get a toast once the monitor probe reports it online. `,-1)]),I(`button`,{type:`button`,class:`small`,onClick:le},`Close`),I(`button`,{type:`button`,class:`small danger`,disabled:!te.value||u.value,title:`Mistaken approval? Revoke the credential now.`,onClick:oe},` Revoke this credential `,8,gN)],64)):a.value===`cancelled`?(N(),P(M,{key:3},[t[16]||=I(`p`,{class:`hint`},`Pairing was cancelled (or the signature failed too many times).`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[2]||=e=>x()},`Start over`)],64)):a.value===`expired`?(N(),P(M,{key:4},[t[17]||=I(`p`,{class:`hint`},`The pairing code expired.`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[3]||=e=>x()},`New code`)],64)):z(``,!0),l.value?(N(),P(`p`,_N,T(l.value),1)):z(``,!0)])])],64)):(N(),P(`div`,vN,[I(`p`,yN,T(l.value||`This pairing link is unavailable.`),1),I(`button`,{type:`button`,class:`small`,onClick:t[4]||=e=>x()},`New code`)]))])]))}}),xN={class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`device-credentials-title`},SN={class:`hint`},CN={key:1,class:`hint`},wN=A({__name:`DeviceCredentialsDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Xl.devices.value.find(e=>e.id===n.deviceId));return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>r(`close`),[`self`])},[I(`section`,xN,[I(`header`,null,[t[3]||=I(`h2`,{id:`device-credentials-title`},`Device credentials`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close device credentials`,onClick:t[0]||=e=>r(`close`)},[L(k(qc),{size:18})])]),i.value?(N(),P(M,{key:0},[I(`p`,null,[R(T(i.value.name)+` `,1),I(`code`,null,T(i.value.id),1)]),I(`p`,SN,T(i.value.status)+` · tunnel `+T(i.value.tunnel?.state??`disconnected`)+` · `+T(i.value.tunnel?.readerCount??0)+` readers `,1),L(Lv,{device:i.value},null,8,[`device`])],64)):(N(),P(`p`,CN,`This device is no longer in the registry.`)),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:t[1]||=e=>r(`close`)},`Close`)])])]))}}),TN={id:`prompt-title`},EN=[`disabled`],DN={key:0,class:`hint`},ON={key:1},kN={key:0,class:`muted`},AN=[`placeholder`,`disabled`],jN=[`required`,`placeholder`,`aria-label`,`disabled`],MN={key:2,class:`message-error`,role:`alert`},NN=[`disabled`],PN=[`disabled`],FN=A({__name:`PromptDialog`,props:{dialog:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=O(n.dialog.value??``),a=O(!1),o=O(``),s=O(),c=!!n.dialog.label;async function l(){if(!a.value&&(!c||n.dialog.optional||i.value.trim())){a.value=!0,o.value=``;try{await n.dialog.run(i.value.trim()),r(`close`)}catch(e){o.value=Rl(e)}finally{a.value=!1}}}return Wr(()=>void jn(()=>(s.value?.focus(),s.value?.select()))),(t,n)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:n[4]||=As(e=>!a.value&&r(`close`),[`self`])},[I(`form`,{class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`prompt-title`,onSubmit:As(l,[`prevent`])},[I(`header`,null,[I(`h2`,TN,T(e.dialog.title),1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,disabled:a.value,onClick:n[0]||=e=>r(`close`)},[L(k(qc),{size:18})],8,EN)]),e.dialog.hint?(N(),P(`p`,DN,T(e.dialog.hint),1)):z(``,!0),c?(N(),P(`label`,ON,[R(T(e.dialog.label)+` `,1),e.dialog.optional?(N(),P(`span`,kN,`(optional)`)):z(``,!0),e.dialog.multiline?Wn((N(),P(`textarea`,{key:1,ref_key:`input`,ref:s,"onUpdate:modelValue":n[1]||=e=>i.value=e,rows:`4`,placeholder:e.dialog.placeholder,disabled:a.value},null,8,AN)),[[bs,i.value]]):Wn((N(),P(`input`,{key:2,ref_key:`input`,ref:s,"onUpdate:modelValue":n[2]||=e=>i.value=e,maxlength:`100`,required:!e.dialog.optional,placeholder:e.dialog.placeholder,"aria-label":e.dialog.label,disabled:a.value},null,8,jN)),[[bs,i.value]])])):z(``,!0),o.value?(N(),P(`p`,MN,T(o.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,disabled:a.value,onClick:n[3]||=e=>r(`close`)},` Cancel `,8,NN),I(`button`,{class:C([`primary`,{danger:e.dialog.danger}]),disabled:a.value||c&&!e.dialog.optional&&!i.value.trim()},T(a.value?`Working…`:e.dialog.submit),11,PN)])],32)]))}}),IN={class:`modal model-modal`},LN={class:`eyebrow`},RN={class:`model-list`},zN=[`onClick`],BN=[`src`],VN={class:`hint`},HN=A({__name:`ModelPicker`,emits:[`close`],setup(e,{emit:t}){let n=t,r=O(``),i=B(()=>yu.value.filter(e=>`${e.name} ${e.id} ${e.tier}`.toLowerCase().includes(r.value.toLowerCase()))),a=e=>e.id===bu.value.agent.model?.modelId&&e.provider===bu.value.agent.model?.provider;async function o(e){await ju(()=>uu.value.configure({model:{provider:e.provider,modelId:e.id}}))&&(await ku(),W(`Model saved. Used on the next turn.`),n(`close`))}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>n(`close`),[`self`])},[I(`section`,IN,[I(`header`,null,[I(`div`,null,[I(`span`,LN,`PER AGENT · `+T(k(ru)?.id),1),t[3]||=I(`h2`,null,`Choose a model`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Close model picker`,onClick:t[0]||=e=>n(`close`)},[L(k(qc),{size:18})])]),Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>r.value=e,placeholder:`Search models or tiers…`,"aria-label":`Search models`},null,512),[[bs,r.value]]),I(`div`,RN,[(N(!0),P(M,null,j(i.value,e=>(N(),P(`button`,{key:`${e.provider}/${e.id}`,class:C({selected:a(e)}),onClick:t=>o(e)},[I(`img`,{src:k(Fu)(e.id),alt:``},null,8,BN),I(`div`,null,[I(`strong`,null,T(e.name),1),I(`small`,null,T(e.tier)+` / `+T(e.provider)+` / `+T(k(Nu)(e.contextWindow))+` context`,1)]),a(e)?(N(),F(k(Ys),{key:0,size:18})):z(``,!0)],10,zN))),128))]),I(`p`,VN,`Models available on `+T(k(ru)?.id)+`. Provider keys stay on the device.`,1)])]))}}),UN={class:`dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`help-title`},WN={class:`dialog-head`},GN={class:`dialog-body`},KN={class:`n`},qN={class:`body`},JN={class:`help-callout`},YN={class:`dialog-foot`},XN={class:`right`},ZN=A({__name:`HelpDialog`,setup(e){let t=[{title:`Pick a device, start a session`,body:`Every device in the tree runs dpi-backend. A session gets its own SQLite database on that device, in the directory you choose.`},{title:`Send work, then close the browser`,body:`The device owns the run. Reopening restores committed messages, state and live progress.`},{title:`Change state and fork`,body:`Edit App State by hand or through the agent. Every session and fork on a device shares it.`},{title:`Interrupt deliberately`,body:`Interrupt stops foreground work and owned subagents. Background jobs continue. Stop all includes them.`},{title:`Explore the boundaries`,body:`Queue a follow-up, steer after tools, wait for approval, compact context, reset or inspect raw state.`},{title:`Restart a device`,body:`Its tree dims and shows the restart command. Checkpointed jobs recover on boot. Replay-safe tools may rerun. Other interrupted tools return an error.`}];return(e,n)=>(N(),P(`div`,{class:`scrim`,onClick:n[2]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,UN,[I(`div`,WN,[n[3]||=I(`div`,null,[I(`span`,{class:`dialog-eyebrow`},`LEARN BY DOING`),I(`h3`,{id:`help-title`},`What makes this durable?`)],-1),I(`button`,{class:`icon-button`,"aria-label":`Close help`,onClick:n[0]||=e=>k(U).dialog=void 0},[L(k(qc),{size:18})])]),I(`div`,GN,[(N(),P(M,null,j(t,(e,t)=>I(`div`,{key:e.title,class:`help-step`},[I(`span`,KN,T(String(t+1).padStart(2,`0`)),1),I(`div`,null,[I(`b`,null,T(e.title),1),I(`div`,qN,T(e.body),1)])])),64)),I(`div`,JN,[L(k(pc),{size:18}),n[4]||=I(`span`,null,`Durable does not mean exactly-once external effects. Checkpoints protect progress. Tools still need their own idempotency.`,-1)])]),I(`div`,YN,[I(`div`,XN,[I(`button`,{class:`secondary`,type:`button`,onClick:n[1]||=e=>k(U).dialog=void 0},`Close`)])])])]))}}),QN=Kt({needed:!1,busy:!1,error:``}),$N=new Set,eP=e=>{let t=[...$N];$N=new Set;for(let n of t)n(e)},tP=()=>new Promise(e=>$N.add(e));async function nP(e){if(QN.busy||!e)return!1;QN.busy=!0,QN.error=``;try{let t=await fetch(`/api/session`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})});return await t.text().catch(()=>``),t.ok?(QN.needed=!1,eP(!0),!0):(QN.error=t.status===401?`That token was not accepted.`:t.status===429?`Too many attempts. Wait a minute and try again.`:`Login failed (${t.status}).`,!1)}catch{return QN.error=`Cannot reach the hub.`,!1}finally{QN.busy=!1}}var rP=e=>{try{return new URL(e,location.href).pathname===`/api/session`}catch{return e===`/api/session`}};function iP(e){return(async(t,n)=>{let r=()=>e(t,n),i=await r();if(i.status!==401||rP(typeof t==`string`?t:t instanceof URL?t.href:t.url)||n?.body instanceof ReadableStream)return i;QN.needed=!0;let a=await i.text().catch(()=>``);return await tP()?r():new Response(a,{status:i.status,headers:i.headers})})}function aP(){typeof window>`u`||window.__adminFetch||(window.__adminFetch=!0,window.fetch=iP(window.fetch.bind(window)))}var oP={class:`login-veil`,"data-testid":`login-card`},sP=[`disabled`],cP={key:0,class:`message-error`,role:`alert`},lP=[`disabled`],uP=A({__name:`LoginCard`,setup(e){let t=O(``),n=O();async function r(){if(QN.busy||!t.value.trim())return;let e=await nP(t.value.trim());t.value=``,e&&n.value?.blur()}return Wr(()=>void jn(()=>n.value?.focus())),(e,i)=>(N(),P(`div`,oP,[I(`form`,{class:`modal login-card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`login-title`,onSubmit:As(r,[`prevent`])},[i[2]||=I(`header`,null,[I(`h2`,{id:`login-title`},`Admin token`)],-1),i[3]||=I(`p`,{class:`hint`},[R(` This hub is locked. Sign in with the token from its `),I(`code`,null,`admin.token`),R(` file. `)],-1),i[4]||=I(`label`,{for:`admin-token`},`Admin token`,-1),Wn(I(`input`,{id:`admin-token`,ref_key:`input`,ref:n,"onUpdate:modelValue":i[0]||=e=>t.value=e,type:`password`,name:`admin-token`,autocomplete:`off`,spellcheck:`false`,placeholder:`adm_…`,"aria-label":`Admin token`,disabled:k(QN).busy,onKeydown:i[1]||=Ms(e=>k(QN).error=``,[`esc`])},null,40,sP),[[bs,t.value]]),k(QN).error?(N(),P(`p`,cP,T(k(QN).error),1)):z(``,!0),I(`footer`,null,[I(`button`,{class:`primary`,type:`submit`,disabled:k(QN).busy||!t.value.trim()},T(k(QN).busy?`Checking…`:`Sign in`),9,lP)])],32)]))}}),dP={key:0,class:`toast`,role:`status`},fP=A({__name:`Toast`,setup(e){return(e,t)=>(N(),F(Co,{name:`toast`},{default:Un(()=>[k(U).toast?(N(),P(`div`,dP,[L(k(Ys),{size:18}),R(T(k(U).toast),1)])):z(``,!0)]),_:1}))}}),pP={class:`shell`,"data-testid":`app-shell`},mP={key:0,class:`error-banner`,role:`alert`},hP={key:4,class:`welcome`,"data-testid":`welcome-empty`},gP=[`disabled`],_P={class:`welcome-features`},vP={class:`modal path-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`path-title`},yP={class:`full-directory`},bP=A({__name:`App`,setup(e){let t=()=>Xl.devices.value.filter(e=>e.status===`online`).length,n=O();function r(){U.dialog={kind:`new-session`,deviceId:H.value?.deviceId}}function i(e){let t=U.dialog?void 0:Ju(e);if(t)return e.preventDefault(),t===`tree`?Wu():Gu();if(e.key===`Escape`){if(U.dialog){U.dialog.kind===`pair`?n.value?.close():U.dialog=void 0;return}!e.repeat&&!e.isComposing&&wu.value&&(e.preventDefault(),Ru()),U.drawer=!1,U.inspectorOverlay=!1}}function a(e){let t=e.clientX,n=$l.value,r=e=>$l.value=Math.max(220,Math.min(560,n+e.clientX-t)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return Wr(()=>{document.addEventListener(`keydown`,i),_u()}),qr(()=>{Jl.stop(),document.removeEventListener(`keydown`,i)}),(e,i)=>(N(),P(`div`,pP,[L(nd,{onNewSession:r}),k(U).error?(N(),P(`div`,mP,[L(k(pc),{size:18}),I(`span`,null,T(k(U).error),1),I(`button`,{class:`icon-button`,"aria-label":`Dismiss error`,onClick:i[0]||=e=>k(U).error=``},`×`)])):z(``,!0),I(`main`,{class:`net-workspace`,style:ye({"--tree-w":`${k($l)}px`})},[L(Id),k(eu).tree?(N(),P(`div`,{key:0,class:`tree-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize network tree`,onPointerdown:As(a,[`prevent`])},null,32)):z(``,!0),k(U).drawer?(N(),P(`div`,{key:1,class:`tree-backdrop`,onClick:i[1]||=e=>k(U).drawer=!1})):z(``,!0),k(H)&&k(ru)&&k(iu)?(N(),P(M,{key:2},[L(sx),k(U).inspectorOverlay?(N(),P(`div`,{key:0,class:`inspector-backdrop`,onClick:i[2]||=e=>k(Uu)()})):z(``,!0),(N(),F(J_,{key:`${k(H).deviceId}/${k(H).sessionId}`}))],64)):k(H)&&k(ru)?(N(),F(_x,{key:3,device:k(ru)},null,8,[`device`])):(N(),P(`section`,hP,[i[14]||=I(`img`,{class:`welcome-symbol`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),i[15]||=I(`span`,{class:`eyebrow`},`THE DURABLE AGENT NETWORK`,-1),i[16]||=I(`h1`,null,[R(`Close the tab.`),I(`br`),R(`The work continues.`)],-1),i[17]||=I(`p`,null,`Agents run on your devices. This page is only a window into them.`,-1),I(`button`,{class:`primary`,disabled:!t(),onClick:r},[L(k(Mc),{size:18}),R(T(k(Xl).devices.value.length?`Create a session`:`Add a device to dpi-network.yaml`),1)],8,gP),I(`div`,_P,[I(`span`,null,[L(k(ic),{size:18}),i[11]||=R(`SQLite on each device`,-1)]),I(`span`,null,[L(k(uc),{size:18}),i[12]||=R(`Branch any agent`,-1)]),I(`span`,null,[L(k(Hs),{size:18}),i[13]||=R(`Watch from anywhere`,-1)])])]))],4),L(ad),k(U).dialog?.kind===`pair`?(N(),F(bN,{key:1,ref_key:`pairWizard`,ref:n,handoff:k(U).dialog.handoff,onClose:i[3]||=e=>k(U).dialog=void 0},null,8,[`handoff`])):z(``,!0),k(U).dialog?.kind===`credentials`?(N(),F(wN,{key:2,"device-id":k(U).dialog.deviceId,onClose:i[4]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):z(``,!0),k(U).dialog?.kind===`new-session`?(N(),F(Px,{key:3,"device-id":k(U).dialog.deviceId,onClose:i[5]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):k(U).dialog?.kind===`prompt`?(N(),F(FN,{key:4,dialog:k(U).dialog,onClose:i[6]||=e=>k(U).dialog=void 0},null,8,[`dialog`])):k(U).dialog?.kind===`models`?(N(),F(HN,{key:5,onClose:i[7]||=e=>k(U).dialog=void 0})):k(U).dialog?.kind===`path`?(N(),P(`div`,{key:6,class:`modal-backdrop`,onClick:i[10]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,vP,[I(`header`,null,[i[18]||=I(`h2`,{id:`path-title`},`Working directory`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close working directory`,onClick:i[8]||=e=>k(U).dialog=void 0},[L(k(qc),{size:18})])]),I(`code`,yP,T(k(U).dialog.path),1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:i[9]||=e=>k(U).dialog=void 0},`Close`)])])])):k(U).dialog?.kind===`help`?(N(),F(ZN,{key:7})):z(``,!0),k(QN).needed?(N(),F(uP,{key:8})):z(``,!0),L(fP)]))}});aP();var xP=new URL(window.location.href);if(/^\/pair\/?$/.test(xP.pathname)){let e=BM(xP);e?(xP.search=``,xP.hash=``,window.history.replaceState(window.history.state,``,xP),U.dialog={kind:`pair`,handoff:e}):window.history.replaceState(window.history.state,``,HM(xP))}Is(bP).mount(`#app`);
|
|
77
|
+
`)[0]??t}`),s.value=``,await f()}catch(e){W(`worktree failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}async function g(e){if(l.value&&c.value&&confirm(`Remove worktree ${e}?`)){i.value=`wt`;try{await Fl(l.value).gitOp(c.value,`worktree-remove`,{target:e}),await f()}catch(e){W(`remove failed: ${e.message.slice(0,120)}`)}finally{i.value=``}}}return(e,t)=>n.value?.repo?(N(),P(`span`,vg,[I(`button`,{class:`crumb git-chip`,title:`${n.value.root} · ${n.value.head??``} ${n.value.subject??``}`,onClick:t[0]||=e=>r.value=!r.value},[L(k(lc),{size:16,"aria-hidden":`true`}),I(`span`,bg,T(n.value.branch??n.value.head),1),u.value?(N(),P(`span`,xg,`±`+T(u.value),1)):z(``,!0),n.value.ahead?(N(),P(`span`,Sg,`↑`+T(n.value.ahead),1)):z(``,!0),n.value.behind?(N(),P(`span`,Cg,`↓`+T(n.value.behind),1)):z(``,!0),L(k(Xs),{size:14,"aria-hidden":`true`})],8,yg),r.value?(N(),P(`div`,{key:0,class:`git-panel`,onClick:t[8]||=As(()=>{},[`stop`])},[I(`header`,null,[I(`strong`,null,`git · `+T(n.value.root),1),I(`button`,{disabled:!!i.value,title:`refresh`,onClick:t[1]||=e=>f()},[L(k(Pc),{size:14})],8,wg)]),I(`p`,Tg,[R(T(n.value.branch??`detached`),1),n.value.upstream?(N(),P(M,{key:0},[R(` → `+T(n.value.upstream),1)],64)):z(``,!0),t[9]||=R(` · `,-1),I(`span`,Eg,`+`+T(n.value.staged??0)+` ~`+T(n.value.unstaged??0)+` ?`+T(n.value.untracked??0),1)]),I(`p`,Dg,T(n.value.head)+` `+T(n.value.subject),1),n.value.worktreeOf?(N(),P(`p`,Og,`worktree of `+T(n.value.worktreeOf),1)):z(``,!0),I(`div`,kg,[I(`button`,{disabled:!!i.value,onClick:t[2]||=e=>p(`fetch`)},`fetch`,8,Ag),I(`button`,{disabled:!!i.value,onClick:t[3]||=e=>p(`pull`)},`pull`,8,jg),I(`button`,{disabled:!!i.value,onClick:t[4]||=e=>p(`log`)},`log`,8,Mg),I(`button`,{disabled:!!i.value,onClick:t[5]||=e=>p(`branch`)},`branches`,8,Ng)]),I(`div`,Pg,[Wn(I(`input`,{"onUpdate:modelValue":t[6]||=e=>o.value=e,placeholder:`commit message…`,onKeyup:Ms(m,[`enter`])},null,544),[[bs,o.value]]),I(`button`,{disabled:!!i.value||!o.value.trim(),onClick:m},`commit -am`,8,Fg)]),I(`div`,Ig,[Wn(I(`input`,{"onUpdate:modelValue":t[7]||=e=>s.value=e,placeholder:`branch name…`,onKeyup:Ms(h,[`enter`])},null,544),[[bs,s.value]]),I(`button`,{disabled:!!i.value||!s.value.trim(),onClick:h},`+ worktree`,8,Lg)]),(n.value.worktrees?.length??0)>1?(N(),P(`ul`,Rg,[(N(!0),P(M,null,j(n.value.worktrees,e=>(N(),P(`li`,{key:e.path},[I(`code`,null,T(e.path),1),I(`span`,zg,T(e.branch??e.head),1),e.path===n.value.root?z(``,!0):(N(),P(`button`,{key:0,disabled:!!i.value,onClick:t=>g(e.path)},`remove`,8,Bg))]))),128))])):z(``,!0),a.value?(N(),P(`pre`,Vg,T(a.value.slice(0,4e3)),1)):z(``,!0)])):z(``,!0)])):z(``,!0)}}),Ug=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Wg=Ug(Hg,[[`__scopeId`,`data-v-0bd457e1`]]),Gg=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,Kg=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],qg={enabled:!0,reserveTokens:16384,backgroundTokens:32768,keepRecentTokens:2e3},Jg={auto:2e5,wait:25e4};function Yg(e){if(!(e>0))return{...qg};let t=Math.min(Jg.wait,e-qg.reserveTokens),n=Math.min(Jg.auto,t-qg.backgroundTokens);return{...qg,reserveTokens:e-t,backgroundTokens:t-n}}function Xg(e,t){let n=Math.max(0,e-t.reserveTokens);return{wait:n,auto:t.backgroundTokens>0?Math.max(0,n-t.backgroundTokens):void 0}}var Zg=(e,t)=>{if(e===void 0)throw Error(`No ${t} selected`);return e},Qg=[{name:`compact`,args:`[instructions]`,description:`Summarize older context; stored entries stay`,run:async e=>{await Zg(uu.value,`agent`).compact(e||void 0),W(`Compaction requested. /tasks shows its outcome.`)}},{name:`reset`,args:`[handoff note]`,description:`Start a fresh context; history stays stored`,run:async e=>{await Zg(uu.value,`agent`).reset(e||void 0),W(`New context started.`)}},{name:`tasks`,description:`Open the Tasks panel`,run:()=>Hu(`tasks`)},{name:`new`,args:`[name]`,description:`New agent in this workspace`,run:async e=>{let t=Zg(H.value,`workspace`),n=await Zg(du.value,`workspace`).createAgent(e?{name:e}:{});fu({...t,agentId:n.id}),W(`New agent ${n.name}.`)}},{name:`fork`,args:`[entryId] [name]`,description:`Fork at an entry (default: the last reply)`,run:async e=>{let[t,...n]=e.split(/\s+/).filter(Boolean),r=t&&/^\d+$/.test(t)?Number(t):void 0,i=(r===void 0?[t,...n]:n).filter(Boolean).join(` `),a=r??bu.value.entries.filter(e=>e.kind===`pi.assistant`).at(-1)?.id;if(a===void 0)throw Error(`Nothing to fork yet`);let o=Zg(H.value,`agent`),s=await Zg(uu.value,`agent`).fork({entryId:a,name:i||void 0});fu({...o,agentId:s.id}),W(`Forked at entry #${a}. App State stays shared.`)}},{name:`name`,args:`<name>`,description:`Rename this agent`,run:async e=>{if(!e)throw Error(`Usage: /name <name>`);await Zg(uu.value,`agent`).rename(e),W(`Agent renamed to ${e}.`)}},{name:`model`,description:`Choose this agent's model`,run:()=>U.dialog={kind:`models`}},{name:`thinking`,args:`<level>`,description:`Thinking level: ${Kg.join(`, `)}`,run:async e=>{if(!Kg.includes(e))throw Error(`Levels: ${Kg.join(`, `)}`);await Zg(uu.value,`agent`).configure({thinkingLevel:e}),await ku(),W(`Thinking ${e}. Used on the next turn.`)}},{name:`help`,description:`How this works, keys and commands`,run:()=>U.dialog={kind:`help`}}];function $g(e){let t=e.trim().match(/^\/(\S+)\s*([\s\S]*)$/),n=t&&Qg.find(e=>e.name===t[1]);return n?{command:n,arg:t[2].trim()}:void 0}var e_={class:`composer-region`},t_={key:0,class:`queue`},n_=[`aria-label`,`onClick`],r_={class:`composer`},i_={key:0,class:`slash-menu`,role:`listbox`,"aria-label":`Slash commands`},a_=[`aria-selected`,`onMousedown`],o_={key:0,class:`slash-args`},s_={class:`slash-desc`},c_={class:`composer-toolbar`},l_={class:`composer-left`},u_={class:`queue-mode`},d_={class:`composer-right`},f_=[`disabled`],p_=[`disabled`],m_=A({__name:`Composer`,setup(e){let t=O(`followUp`),n=O(!1),r=B(()=>iu.value&&bu.value.ready&&ou.status.value===`live`&&Yl.value===`live`),i=O(0),a=O(!1),o=B(()=>{let e=U.composer.match(/^\/(\S*)$/);return e&&!a.value?Qg.filter(t=>t.name.startsWith(e[1].toLowerCase())):[]});Zn(()=>U.composer,()=>{i.value=0,U.composer.startsWith(`/`)||(a.value=!1)});async function s(e,t=!1){!e.args||t&&e.args.startsWith(`[`)&&U.composer===`/${e.name}`?(U.composer=`/${e.name}`,await u()):U.composer=`/${e.name} `}function c(e){if(!o.value.length){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),u());return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=o.value.length;i.value=(i.value+(e.key===`ArrowDown`?1:t-1))%t}else if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey)s(o.value[i.value],e.key===`Enter`);else if(e.key===`Escape`)a.value=!0;else return;e.preventDefault(),e.stopPropagation()}async function l(e){let t=$g(e);return t?(n.value=!0,await ju(async()=>{await t.command.run(t.arg),U.composer=``}),n.value=!1,!0):!1}async function u(){let e=U.composer.trim(),i=uu.value;if(!e||n.value||!i||!r.value||e.startsWith(`/`)&&await l(e))return;n.value=!0;let a=H.value,o=`${a.deviceId}/${a.sessionId}/${a.agentId}`,s;try{s=JSON.parse(sessionStorage.getItem(`dpi.pending-send`)??`null`)}catch{}let c=s?.key===o&&s.content===e&&s.mode===t.value?s.requestId:Gg();sessionStorage.setItem(`dpi.pending-send`,JSON.stringify({key:o,content:e,mode:t.value,requestId:c})),await ju(async()=>{await i.send(e,t.value,c),sessionStorage.removeItem(`dpi.pending-send`),U.composer=``}),n.value=!1}function d(e){ju(()=>uu.value.withdraw(e))}return(e,a)=>(N(),P(`div`,e_,[k(bu).inbox.length?(N(),P(`div`,t_,[(N(!0),P(M,null,j(k(bu).inbox,e=>(N(),P(`div`,{key:e.id},[L(k(ec),{size:18}),I(`span`,null,T(e.mode===`steer`?`Steer`:`Queued`)+`: `+T(e.content??`Context update`),1),I(`button`,{class:`icon-button`,"aria-label":`Withdraw submission ${e.id}`,title:`Withdraw queued input`,onClick:t=>d(e.id)},[L(k(qc),{size:18})],8,n_)]))),128))])):z(``,!0),I(`div`,r_,[o.value.length?(N(),P(`ul`,i_,[(N(!0),P(M,null,j(o.value,(e,t)=>(N(),P(`li`,{key:e.name,role:`option`,"aria-selected":t===i.value,class:C({active:t===i.value}),onMousedown:As(t=>s(e),[`prevent`])},[I(`code`,null,`/`+T(e.name),1),e.args?(N(),P(`span`,o_,T(e.args),1)):z(``,!0),I(`span`,s_,T(e.description),1)],42,a_))),128))])):z(``,!0),Wn(I(`textarea`,{"onUpdate:modelValue":a[0]||=e=>k(U).composer=e,rows:`2`,placeholder:`Give your agent something to do, or type / for commands…`,"aria-label":`Message your agent`,onKeydown:c},null,544),[[bs,k(U).composer]]),I(`div`,c_,[I(`div`,l_,[I(`div`,u_,[Wn(I(`select`,{"onUpdate:modelValue":a[1]||=e=>t.value=e,"aria-label":`When busy`,title:`Follow-up waits for this run. Steer joins after a tool round.`},[...a[3]||=[I(`option`,{value:`followUp`},`Follow-up`,-1),I(`option`,{value:`steer`},`Steer`,-1),I(`option`,{value:`reject`},`Reject if busy`,-1)]],512),[[Cs,t.value]]),L(k(Xs),{size:24,"aria-hidden":`true`})])]),I(`div`,d_,[I(`button`,{class:`interrupt`,disabled:!k(wu)||k(Lu),title:`Stop foreground work and owned subagents (Escape). Background jobs continue.`,onClick:a[2]||=(...e)=>k(Ru)&&k(Ru)(...e)},[L(k(Tc),{size:24,class:`stop-sign`,fill:`currentColor`}),a[4]||=R(`Interrupt`,-1)],8,f_),I(`button`,{class:`send`,"aria-label":`Send message`,disabled:!k(U).composer.trim()||n.value||!r.value,onClick:u},[L(k(Gs),{size:20})],8,p_)])])]),a[5]||=I(`div`,{class:`composer-footnote`},[I(`span`,null,[I(`i`,{class:`live-dot`}),R(`Closing this window never interrupts your agent.`)])],-1)]))}}),h_={class:`chat-panel`},g_={class:`chat-header`},__={class:`lineage-picker`},v_={class:`lineage-toolbar`},y_=[`title`],b_={class:`crumb-main`},x_={class:`device-chip`},S_=[`title`],C_={class:`crumb-main`},w_={class:`crumb-name`},T_=[`aria-current`,`title`,`onClick`],E_={class:`crumb-kind`},D_={class:`crumb-main`},O_={class:`crumb-name`},k_=[`disabled`],A_=[`aria-expanded`],j_={key:0,class:`lineage-source`},M_={id:`conversation-picker`,class:`conversation-picker`,role:`dialog`,"aria-label":`Choose conversation`},N_=[`aria-label`,`aria-current`,`onClick`],P_={class:`conversation-choice-content`},F_={class:`choice-lineage`},I_={class:`choice-source`},L_={key:0,class:`agent-stream-status`,role:`alert`},R_=[`disabled`],z_={key:0,class:`chat-empty`},B_={key:0},V_={key:1},H_={key:0,class:`chat-empty`},U_={class:`starter-grid`},W_={key:1,class:`entry live-generation`},G_={class:`message-label`},K_={class:`streaming`},q_={key:2,class:`hint retry-note`},J_=A({__name:`AgentView`,setup(e){let t=O(),n=O(),r=O(!1),i=B(()=>bu.value.items),a=B(()=>i.value.some(e=>e.kind===`assistant`&&e.streaming)),o=B(()=>i.value.some(e=>e.kind===`tool`&&e.call.status===`running`||e.kind===`assistant`&&e.blocks.some(e=>e.type===`tool`&&e.call.status===`running`))),s=e=>e.kind===`fork`?`Forked from agent #${e.parentId} at entry #${e.forkedAt}`:e.kind===`subagent`?`Owned by agent #${e.ownerAgentId}`:`Root agent`,c=B(()=>xu.value.map(e=>({...e,lineage:cl(xu.value,e.id)})).sort((e,t)=>{for(let n=0;n<Math.min(e.lineage.length,t.lineage.length);n++)if(e.lineage[n].id!==t.lineage[n].id)return e.lineage[n].id-t.lineage[n].id;return e.lineage.length-t.lineage.length})),l=B(()=>Su.value.at(-1)),u=e=>e.kind===`root`?`agent`:e.kind;function d(){H.value&&(eu.tree=!0,hu(H.value.deviceId,!0))}function f(){let e=xu.value.find(e=>e.kind===`root`)??xu.value[0];e&&p(e.id)}function p(e){r.value=!1,H.value&&fu({...H.value,agentId:e})}function m(e){let t=uu.value,n=H.value;t&&n&&(U.dialog={kind:`prompt`,title:`Fork conversation`,hint:`${l.value?.name??`Agent #${n.agentId}`} / entry #${e}. Leave the name blank to use Fork #ID.`,label:`Fork name`,optional:!0,placeholder:`e.g. Alternative approach`,submit:`Create fork`,run:async r=>{let i=await t.fork({entryId:e,name:r||void 0});fu({...n,agentId:i.id}),W(`Forked at entry #${e}. App State stays shared.`)}})}function h(){let e=uu.value,t=l.value;e&&t&&(U.dialog={kind:`prompt`,title:`Rename agent`,label:`Agent name`,value:t.named?t.name:``,placeholder:t.name,submit:`Save name`,run:t=>e.rename(t)})}Zn(H,()=>{r.value=!1});let g=!0;return Zn(ou.version,()=>{let e=t.value;g=!e||e.scrollHeight-e.scrollTop-e.clientHeight<120},{flush:`pre`}),Zn(ou.version,()=>{g&&jn(()=>t.value?.scrollTo({top:t.value.scrollHeight,behavior:`instant`}))}),Zn(()=>Su.value.length,()=>void jn(()=>n.value&&(n.value.scrollLeft=n.value.scrollWidth))),(e,g)=>(N(),P(`section`,h_,[I(`header`,g_,[I(`div`,__,[I(`div`,v_,[I(`nav`,{ref_key:`lineageNav`,ref:n,class:`crumbs conversation-lineage`,"aria-label":`Conversation lineage`},[I(`button`,{class:`crumb`,title:`${k(ru)?.name} · ${k(ru)?.url}`,onClick:d},[g[5]||=I(`span`,{class:`crumb-kind`},`device`,-1),I(`span`,b_,[L(cd,{device:k(ru),size:18},null,8,[`device`]),I(`span`,x_,T(k(ru)?.name??k(ru)?.id),1)])],8,y_),L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:`crumb`,title:k(cu)?.cwd,onClick:f},[g[6]||=I(`span`,{class:`crumb-kind`},`workspace`,-1),I(`span`,C_,[L(k(sc),{size:18,"aria-hidden":`true`}),I(`span`,w_,T(k(cu)?.name),1)])],8,S_),k(cu)?.cwd?(N(),F(Wg,{key:0})):z(``,!0),(N(!0),P(M,null,j(k(Su),e=>(N(),P(M,{key:e.id},[L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:C([`crumb`,{current:e.id===k(H)?.agentId}]),"aria-current":e.id===k(H)?.agentId?`page`:void 0,title:s(e),onClick:t=>p(e.id)},[I(`span`,E_,T(u(e)),1),I(`span`,D_,[e.kind===`fork`?(N(),F(k(uc),{key:0,size:18,"aria-hidden":`true`})):e.kind===`subagent`?(N(),F(k(nc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(xc),{key:2,size:18,"aria-hidden":`true`})),I(`span`,O_,T(e.name),1)])],10,T_)],64))),128))],512),I(`button`,{class:`icon-button`,"aria-label":`Rename agent`,title:`Rename this agent`,disabled:!l.value,onClick:h},[L(k(Ac),{size:18})],8,k_),I(`button`,{class:`icon-button conversation-menu-toggle`,"aria-label":`Browse conversations`,"aria-haspopup":`dialog`,"aria-expanded":r.value,"aria-controls":`conversation-picker`,title:`Browse roots and forks`,onClick:g[0]||=e=>r.value=!r.value},[L(k(Xs),{size:18})],8,A_)]),l.value&&l.value.kind!==`root`?(N(),P(`div`,j_,T(s(l.value)),1)):z(``,!0),r.value?(N(),P(M,{key:1},[I(`button`,{class:`conversation-menu-dismiss`,"aria-label":`Close conversation picker`,onClick:g[1]||=e=>r.value=!1}),I(`section`,M_,[g[7]||=I(`div`,{class:`conversation-picker-heading`},`Roots & forks`,-1),(N(!0),P(M,null,j(c.value,e=>(N(),P(`button`,{key:e.id,class:C([`conversation-choice`,{selected:e.id===k(H)?.agentId}]),"aria-label":e.lineage.map(e=>e.name).join(` → `),"aria-current":e.id===k(H)?.agentId?`page`:void 0,onClick:t=>p(e.id)},[I(`div`,P_,[I(`span`,F_,[(N(!0),P(M,null,j(e.lineage,(t,n)=>(N(),P(M,{key:t.id},[n?(N(),F(k(Zs),{key:0,size:18,"aria-hidden":`true`})):z(``,!0),I(`span`,{class:C({"choice-ancestor":n<e.lineage.length-1})},T(t.name),3)],64))),128))]),I(`span`,I_,T(s(e)),1)]),e.id===k(H)?.agentId?(N(),F(k(Ys),{key:0,size:18,"aria-hidden":`true`})):e.kind===`fork`?(N(),F(k(uc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(xc),{key:2,size:18,"aria-hidden":`true`}))],10,N_))),128))])],64)):z(``,!0)])]),k(ou).fault.value||k(ou).status.value===`fault`||k(ou).status.value===`reconnecting`||k(bu).ready&&k(ou).status.value===`connecting`?(N(),P(`div`,L_,[I(`div`,null,[I(`strong`,null,T(k(bu).ready?`Cached transcript is stale.`:`Agent stream unavailable.`),1),I(`p`,null,T(k(ou).fault.value||`Updates are paused while the stream reconnects.`),1),g[8]||=I(`p`,null,`Sending is paused until a fresh snapshot arrives. Your draft is kept.`,-1)]),I(`button`,{disabled:k(ou).status.value===`connecting`,onClick:g[2]||=(...e)=>k(ou).retry&&k(ou).retry(...e)},` Retry stream `,8,R_)])):z(``,!0),I(`div`,{ref_key:`chat`,ref:t,class:`chat-scroll`,"data-testid":`chat`},[k(bu).ready?(N(),P(M,{key:1},[i.value.length?z(``,!0):(N(),P(`div`,H_,[g[13]||=I(`div`,{class:`agent-orb`},[I(`img`,{src:`/icons/durable-pi.svg`,alt:`Durable Pi`}),I(`i`)],-1),g[14]||=I(`span`,{class:`eyebrow`},`YOUR DURABLE AGENT IS READY`,-1),g[15]||=I(`h2`,null,`A conversation with continuity.`,-1),I(`p`,null,`Messages, tools and state live on `+T(k(ru)?.id)+`, beyond this window.`,1),I(`div`,U_,[I(`button`,{onClick:g[3]||=e=>k(Mu)(`Inspect this directory using your tools and give me a brief overview. Do not modify any files.`)},[L(k(sc),{size:18}),g[9]||=I(`strong`,null,`Explore this directory`,-1),g[10]||=I(`span`,null,`See coding tools in action`,-1),L(k(Ws),{size:18})]),I(`button`,{onClick:g[4]||=e=>k(Mu)(`Use read_state, then update_state to add a field called progress with value 1 and a boolean called ready with value false.`)},[L(k(qs),{size:18}),g[11]||=I(`strong`,null,`Make a state change`,-1),g[12]||=I(`span`,null,`Watch the workspace update`,-1),L(k(Ws),{size:18})])])])),(N(!0),P(M,null,j(i.value,e=>(N(),F(_g,{key:e.id,item:e,onFork:m},null,8,[`item`]))),128)),k(bu).running&&!a.value&&!o.value?(N(),P(`div`,W_,[I(`div`,G_,[g[16]||=R(` AGENT `,-1),I(`span`,K_,T(k(bu).retry?`Retry scheduled`:`Working`),1)]),g[17]||=I(`div`,{class:`typing`},[I(`i`),I(`i`),I(`i`)],-1)])):z(``,!0),k(bu).retry?(N(),P(`p`,q_,` Retrying: `+T(k(bu).retry.error),1)):z(``,!0),(N(!0),P(M,null,j(k(bu).notices,(e,t)=>(N(),P(`p`,{key:t,class:`message-error`},T(e),1))),128))],64)):(N(),P(`div`,z_,[L(k(Hs),{size:30}),k(ou).status.value===`fault`?(N(),P(`h2`,B_,`This agent is unavailable.`)):(N(),P(`h2`,V_,`Connecting to the agent…`)),I(`p`,null,`The agent keeps working on `+T(k(ru)?.id)+` while this view connects.`,1)]))],512),L(m_)]))}});function Y_(e,t){return`${e}/${t.replaceAll(`~`,`~0`).replaceAll(`/`,`~1`)}`}var X_=[`data-state-path`],Z_={key:0,class:`state-field-heading`},Q_=[`value`,`aria-label`,`disabled`],$_=[`value`],ev=[`aria-label`,`disabled`],tv=[`aria-label`,`disabled`],nv=[`aria-label`,`disabled`],rv=[`value`],iv=[`disabled`],av=[`disabled`,`aria-label`],ov={key:2,class:`state-number`},sv=[`aria-label`,`disabled`],cv=[`aria-label`,`disabled`],lv=[`aria-label`,`disabled`],uv={key:3,class:`state-boolean`},dv=[`aria-label`,`aria-checked`,`disabled`],fv=[`aria-label`,`disabled`],pv={key:5,class:`muted`},mv=A({__name:`StateEditor`,props:{value:{type:[String,Number,Boolean,null,Array,Object]},path:{default:``},label:{default:`App State`},disabled:{type:Boolean}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>n.value===null?`null`:Array.isArray(n.value)?`array`:typeof n.value),a=B(()=>i.value===`object`||i.value===`array`),o=B(()=>a.value?Object.entries(n.value):[]),s=O(``),c=O(!1),l=O(``),u=O(`string`),d=O(!1),f=[`string`,`number`,`boolean`,`object`,`array`,`null`],p={string:()=>``,number:()=>0,boolean:()=>!1,object:()=>({}),array:()=>[],null:()=>null};Zn(()=>n.value,e=>{c.value||(s.value=String(e??``))},{immediate:!0});function m(e,t){r(`change`,{operation:e,path:n.path,value:t})}function h(){c.value=!1;let e=i.value===`number`?Number(s.value):s.value;if(i.value===`number`&&(!String(s.value).trim()||!Number.isFinite(e))){s.value=String(n.value);return}e!==n.value&&m(`update`,e)}function g(){let e=i.value===`array`?`-`:l.value.trim();e&&(r(`change`,{operation:`create`,path:Y_(n.path,e),value:p[u.value]()}),l.value=``,d.value=!1)}return(t,n)=>{let _=ei(`StateEditor`,!0);return N(),P(`div`,{class:C([`state-field`,{"state-root":e.path===``}]),"data-state-path":e.path},[e.path===``?z(``,!0):(N(),P(`div`,Z_,[I(`strong`,null,T(e.label),1),I(`select`,{value:i.value,"aria-label":`Type of ${e.path}`,disabled:e.disabled,onChange:n[0]||=e=>m(`update`,p[e.target.value]())},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,$_)),64))],40,Q_),I(`button`,{class:`icon-button`,"aria-label":`Delete ${e.path}`,title:`Delete field`,disabled:e.disabled,onClick:n[1]||=e=>m(`delete`)},[L(k(Vc),{size:18})],8,ev)])),a.value?(N(),P(M,{key:1},[(N(!0),P(M,null,j(o.value,([t,i])=>(N(),F(_,{key:t,value:i,path:k(Y_)(e.path,t),label:t,disabled:e.disabled,onChange:n[2]||=e=>r(`change`,e)},null,8,[`value`,`path`,`label`,`disabled`]))),128)),d.value&&i.value===`array`?(N(),P(`form`,{key:0,class:`state-add`,onSubmit:As(g,[`prevent`])},[i.value===`array`?z(``,!0):Wn((N(),P(`input`,{key:0,"onUpdate:modelValue":n[3]||=e=>l.value=e,placeholder:`Field name`,"aria-label":`New field name in ${e.path||`/`}`,required:``,disabled:e.disabled},null,8,tv)),[[bs,l.value]]),Wn(I(`select`,{"onUpdate:modelValue":n[4]||=e=>u.value=e,"aria-label":`New field type in ${e.path||`/`}`,disabled:e.disabled},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,rv)),64))],8,nv),[[Cs,u.value]]),I(`button`,{class:`secondary small`,disabled:e.disabled||i.value!==`array`&&!l.value.trim()},` Add `,8,iv),I(`button`,{type:`button`,class:`text-button`,onClick:n[5]||=e=>d.value=!1},`Cancel`)],32)):i.value===`array`?(N(),P(`button`,{key:1,class:`text-button state-add-button`,disabled:e.disabled,"aria-label":`Add ${i.value===`array`?`item`:`field`} to ${e.path||`/`}`,onClick:n[6]||=e=>d.value=!0},[L(k(Mc),{size:18}),R(T(i.value===`array`?`Add item`:`Add field`),1)],8,av)):z(``,!0)],64)):i.value===`number`?(N(),P(`div`,ov,[I(`button`,{class:`secondary`,"aria-label":`Decrement ${e.path}`,disabled:e.disabled,onClick:n[7]||=e=>m(`increment`,-1)},[L(k(Sc),{size:18})],8,sv),Wn(I(`input`,{"onUpdate:modelValue":n[8]||=e=>s.value=e,type:`number`,step:`any`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[9]||=e=>c.value=!0,onBlur:h,onKeydown:n[10]||=Ms(e=>e.target.blur(),[`enter`])},null,40,cv),[[bs,s.value]]),I(`button`,{class:`secondary`,"aria-label":`Increment ${e.path}`,disabled:e.disabled,onClick:n[11]||=e=>m(`increment`,1)},[L(k(Mc),{size:18})],8,lv)])):i.value===`boolean`?(N(),P(`div`,uv,[I(`button`,{class:C([`switch`,{on:e.value===!0}]),role:`switch`,"aria-label":`Value of ${e.path}`,"aria-checked":e.value===!0,disabled:e.disabled,onClick:n[12]||=t=>m(`update`,!e.value)},[...n[15]||=[I(`span`,null,null,-1)]],10,dv),I(`span`,null,T(e.value),1)])):i.value===`string`?Wn((N(),P(`textarea`,{key:4,"onUpdate:modelValue":n[13]||=e=>s.value=e,rows:`2`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[14]||=e=>c.value=!0,onBlur:h},null,40,fv)),[[bs,s.value]]):(N(),P(`span`,pv,`null`))],10,X_)}}}),hv=[`data-status`],gv=[`title`],_v=[`title`],vv=[`href`],yv=[`title`],bv=A({__name:`TunnelStatusBar`,props:{device:{}},setup(e){let t=e,n=B(()=>t.device.status===`online`),r=B(()=>t.device.transport===`tunnel`),i=B(()=>n.value?r.value?`online · via tunnel`:`online · LAN`:r.value?`tunnel`:`LAN`),a=B(()=>t.device.tunnel?.state===`connected`);return(t,o)=>(N(),P(`span`,{class:`tunnel-status`,"data-status":e.device.status},[I(`span`,{class:`axis transport`,title:r.value?`Hub ⇄ device over the tunnel (WSS)`:`Hub → device over LAN`},[r.value?(N(),F(k(Js),{key:0,size:13,class:C({live:a.value})},null,8,[`class`])):(N(),F(k(Wc),{key:1,size:13,class:C({live:n.value})},null,8,[`class`])),R(` `+T(i.value),1)],8,gv),I(`span`,{class:C([`axis monitor`,e.device.status])},[e.device.status===`offline`?(N(),F(k(Uc),{key:0,size:13})):(N(),P(M,{key:1},[R(T(e.device.status),1)],64))],2),r.value&&a.value&&e.device.tunnel?(N(),P(`span`,{key:0,class:`axis muted`,title:`tunnel last seen ${k(Iu)(e.device.tunnel.lastSeenAt)}`},T(e.device.tunnel.readerCount)+` reader`+T(e.device.tunnel.readerCount===1?``:`s`),9,_v)):z(``,!0),e.device.url?(N(),P(`a`,{key:1,class:`axis url`,href:e.device.url,target:`_blank`,rel:`noreferrer`},T(e.device.url),9,vv)):z(``,!0),e.device.lastSeenAt?(N(),P(`span`,{key:2,class:`axis muted`,title:`last probe ${k(Iu)(e.device.lastSeenAt)}`},T(k(Iu)(e.device.lastSeenAt)),9,yv)):z(``,!0)],8,hv))}});async function xv(e,t,n,r,i){let a=await fetch(`/api${t}`,{method:e,headers:n===void 0?{}:{"content-type":`application/json`},body:n===void 0?void 0:JSON.stringify(n),signal:r,...i?{keepalive:i}:{}}),o=await a.json().catch(()=>void 0);if(!a.ok){let e=o?.error;throw new Sl(e?.code??`internal`,e?.message??`${a.status} ${a.statusText}`,a.status)}return o}function Sv(e){return e.offerUrl??e.pairUrl}var Cv={pending:e=>xv(`GET`,`/pair/codes`,void 0,e),pairings:e=>xv(`GET`,`/pairings`,void 0,e),createCode:e=>xv(`POST`,`/pair/code`,{},e),resolveCode:(e,t)=>xv(`POST`,`/pair/resolve`,{code:e},t),codeState:(e,t)=>xv(`GET`,`/pair/codes/${encodeURIComponent(e)}`,void 0,t),approve:(e,t,n)=>xv(`POST`,`/pair/codes/${encodeURIComponent(e)}/approve`,t,n),cancel:(e,t,n)=>xv(`POST`,`/pair/codes/${encodeURIComponent(e)}/cancel`,{},t,n),rotate:(e,t)=>xv(`POST`,`/pairings/${encodeURIComponent(e)}/rotate`,{},t),revoke:(e,t=`user`,n)=>xv(`POST`,`/pairings/${encodeURIComponent(e)}/revoke`,{reason:t},n)},wv=0;function Tv(){let e=++wv,t=!1;return{gen:e,close:()=>t=!0,closed:()=>t}}var Ev=class extends Error{codeId;constructor(e){super(`pairing poll timed out for ${e}`),this.codeId=e,this.name=`PollTimeout`}},Dv=e=>e===`issued`||e===`cancelled`||e===`expired`;async function Ov(e,t,n={}){let r=n.intervalMs??1e3,i=Date.now()+(n.timeoutMs??33e4);for(;;){if(e.closed())return;if(n.signal?.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`);if(Date.now()>i)throw new Ev(t);let a=await Cv.codeState(t,n.signal);if(e.closed())return;if(e.state=a,n.onState?.(a),Dv(a.phase))return a;await new Promise(e=>setTimeout(e,r))}}var kv={key:0,class:`token-manager`,"aria-label":`Credential manager`},Av={class:`credential-fingerprint`},jv=[`title`],Mv={key:0,class:`rotation-badge`,role:`status`},Nv={class:`token-actions`},Pv=[`disabled`],Fv=[`disabled`],Iv={key:1,class:`message-error`,role:`alert`},Lv=A({__name:`TokenManager`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>t.device.pairing);async function a(){if(!n.value){n.value=!0,r.value=``;try{await Cv.rotate(t.device.id),W(`Rotation queued — it completes when the device acknowledges the new credential.`)}catch(e){r.value=Rl(e)}finally{n.value=!1}}}async function o(){n.value||(U.dialog={kind:`prompt`,title:`Revoke ${t.device.id}?`,hint:`Every tunnel credential for this device dies at commit and the live tunnel is cut within a second. The device cleans its own files the next time it talks to the hub.`,submit:`Revoke`,danger:!0,run:async()=>{await Cv.revoke(t.device.id,`user`),W(`Revoke committed on the hub. The tunnel is cut; the device cleans up on its next contact.`)}})}return(e,t)=>i.value?(N(),P(`section`,kv,[I(`header`,null,[L(k(mc),{size:15}),t[0]||=I(`h3`,null,`Credential`,-1),I(`span`,{class:C([`pairing-status`,i.value.status])},T(i.value.status),3)]),I(`dl`,null,[t[1]||=I(`dt`,null,`Key fingerprint`,-1),I(`dd`,null,[I(`code`,Av,T(i.value.keyFingerprint),1)]),t[2]||=I(`dt`,null,`Paired`,-1),I(`dd`,{title:new Date(i.value.pairedAt).toISOString()},T(k(Iu)(i.value.pairedAt)),9,jv),t[3]||=I(`dt`,null,`Generation`,-1),I(`dd`,null,T(i.value.credentialGeneration),1)]),i.value.rotationPending?(N(),P(`p`,Mv,[L(k(Pc),{size:13,class:`spin`}),t[4]||=R(` rotation queued — waiting for the device to ACK `,-1)])):z(``,!0),I(`div`,Nv,[i.value.status===`paired`?(N(),P(`button`,{key:0,class:`small`,disabled:n.value||i.value.rotationPending,onClick:a},[L(k(Pc),{size:14}),t[5]||=R(` Rotate credential `,-1)],8,Pv)):z(``,!0),i.value.status===`paired`?(N(),P(`button`,{key:1,class:`small danger`,disabled:n.value,onClick:o},[L(k(zc),{size:14}),t[6]||=R(` Revoke `,-1)],8,Fv)):z(``,!0)]),r.value?(N(),P(`p`,Iv,T(r.value),1)):z(``,!0)])):z(``,!0)}}),Rv={class:`tasks-panel`},zv={class:`panel-heading`},Bv={class:`tag`},Vv={key:0,class:`message-error`,role:`alert`},Hv={class:`task-section`,"aria-label":`Durable jobs`},Uv={key:0,class:`task-empty`},Wv=[`data-job`],Gv={class:`job-def-head`},Kv={key:0,class:`tag`},qv={class:`tag`},Jv=[`aria-label`],Yv=[`title`],Xv={class:`job-def-meta`},Zv=[`title`],Qv=[`title`],$v={key:0,class:`job-def-last`},ey=[`onClick`],ty=[`disabled`,`onClick`],ny=[`disabled`,`onClick`],ry=[`disabled`,`onClick`],iy={class:`task-section`,"aria-label":`Agent activity`},ay={class:`panel-heading`},oy={key:0,class:`task-empty`},sy={key:1,class:`task-tree`},cy=[`data-task-kind`],ly={class:`tag`},uy={key:0,class:`task-phase`},dy=[`onClick`],fy=[`disabled`],py={class:`raw`},my=A({__name:`TasksPanel`,setup(e){let t=O(``),n=O(!1),r=O([]),i=O(),a=e=>({running:`Running`,waiting:`Waiting`,completed:`Completed`,aborted:`Stopped`,declined:`Declined`,failed:`Failed`,pending:`Queued`,completing:`Finishing`,terminal:`Finished`})[e]??e,o=B(()=>new Map(rh.value.map(e=>[e.id,ah.value.find(t=>t.job===e.id)]))),s=B(()=>{let e=Cu.value,t=new Set(e.map(e=>e.id)),n=new Map;for(let r of e){let e=r.owner!==void 0&&t.has(r.owner)?r.owner:void 0;n.set(e,[...n.get(e)??[],r])}let r=[],i=(e,t)=>{for(let a of(n.get(e)??[]).sort((e,t)=>e.id-t.id))r.push({task:a,depth:t}),i(a.id,t+1)};return i(void 0,0),r}),c=e=>e.kind===`pi.tool`?{icon:Kc,name:e.label??`Tool call`,what:`tool call`}:e.kind===`pi.generation`?{icon:Ks,name:`Model response`,what:`generation`}:e.kind===`pi.compaction`?{icon:gc,name:`Compaction`,what:`compaction`}:e.kind.startsWith(`demo.job.`)?{icon:Gc,name:e.label??ih(e.kind.slice(9))?.title??e.kind,what:`durable job`}:e.kind===`demo.job-approval`?{icon:Rc,name:`Approval`,what:`waits for you`}:{icon:Hs,name:e.label??e.kind,what:e.kind},l=e=>e.state.phase?e.kind.startsWith(`demo.job.`)?ih(e.kind.slice(9))?.phases.find(t=>t.id===e.state.phase)?.label??e.state.phase:e.state.phase:``;async function u(){if(!n.value&&uu.value){n.value=!0,t.value=``;try{await uu.value.abort(!0)}catch(e){t.value=Rl(e)}finally{n.value=!1}}}async function d(e){let n=du.value;if(e.target.open&&n)try{let[e,t]=await Promise.all([n.tasks(`terminal`,40),n.inspect()]);r.value=e,i.value=t}catch(e){t.value=Rl(e)}}let f=B(()=>r.value.filter(e=>e.state.status===`terminal`).slice(-12).reverse());return(e,r)=>(N(),P(`div`,Rv,[I(`div`,zv,[r[0]||=I(`h2`,null,`Tasks`,-1),I(`span`,Bv,T(k(Cu).length)+` active`,1)]),t.value?(N(),P(`p`,Vv,T(t.value),1)):z(``,!0),I(`section`,Hv,[I(`h3`,null,[L(k(Fc),{size:18}),r[1]||=R(`Durable jobs`,-1)]),r[2]||=I(`p`,{class:`hint`},[R(` Repeatable workflows with named phases. Every run follows the same phases and saves a checkpoint after each one. Start one here, or ask your agent: it finds these with `),I(`code`,null,`list_durable_jobs`),R(`, starts them with `),I(`code`,null,`run_durable_job`),R(` and checks them with `),I(`code`,null,`check_durable_job`),R(`. Runs play out live in the chat. `)],-1),k(rh).length?z(``,!0):(N(),P(`p`,Uv,` This device has no durable jobs. Deploy the latest backend to it. `)),(N(!0),P(M,null,j(k(rh),e=>(N(),P(`article`,{key:e.id,class:`job-def`,"data-job":e.id},[I(`div`,Gv,[L(k(Gc),{size:18}),I(`strong`,null,T(e.title),1),e.approval?(N(),P(`span`,Kv,`needs approval`)):z(``,!0),I(`span`,qv,`~`+T(e.seconds)+`s`,1)]),I(`p`,null,T(e.summary),1),I(`ol`,{class:`job-chain`,"aria-label":`${e.title} phases`},[(N(!0),P(M,null,j(e.phases,(e,t)=>(N(),P(`li`,{key:e.id,title:e.summary},[I(`span`,null,T(t+1),1),R(T(e.label),1),e.kind===`repeat`?(N(),F(k(Fc),{key:0,size:13})):z(``,!0),e.kind===`approval`?(N(),F(k(Rc),{key:1,size:13})):z(``,!0)],8,Yv))),128))],8,Jv),I(`div`,Xv,[(N(!0),P(M,null,j(e.inputs,e=>(N(),P(`code`,{key:e.name,title:e.description},T(e.name)+`=`+T(e.default),9,Zv))),128)),I(`code`,{title:`Each run saves its result to App State ${e.resultPath}`},`→ `+T(e.resultPath),9,Qv)]),o.value.get(e.id)?(N(),P(`div`,$v,[I(`span`,null,[R(`Run #`+T(o.value.get(e.id).run)+`: `,1),I(`strong`,null,T(a(o.value.get(e.id).status)),1),k(nh)(o.value.get(e.id))?z(``,!0):(N(),P(M,{key:0},[R(` in `+T(o.value.get(e.id).phases.find(t=>t.id===o.value.get(e.id).phase)?.label),1)],64))]),I(`button`,{class:`text-button`,onClick:t=>k(fh)(o.value.get(e.id).id)},` Show in chat `,8,ey),o.value.get(e.id).approval===`pending`?(N(),P(M,{key:0},[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!0)},` Approve `,8,ty),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!1)},` Decline `,8,ny)],64)):z(``,!0)])):z(``,!0),I(`button`,{class:`secondary job-def-run`,disabled:!!k(uh)||!k(uu),onClick:t=>k(ph)(e)},[L(k(jc),{size:16}),R(`Run `+T(e.title),1)],8,ry)],8,Wv))),128))]),I(`section`,iy,[I(`div`,ay,[r[3]||=I(`h3`,null,`Agent activity`,-1),L(k(Hs),{size:18})]),r[5]||=I(`p`,{class:`hint`},` Every model response and every tool call is its own durable task with an id, an owner and a checkpoint. Follow them live here; after a restart each one resumes or reports how it ended. `,-1),s.value.length?(N(),P(`ul`,sy,[(N(!0),P(M,null,j(s.value,({task:e,depth:t})=>(N(),P(`li`,{key:e.id,class:`task-row`,style:ye({"--depth":t}),"data-task-kind":e.kind},[(N(),F(ni(c(e).icon),{size:16})),I(`strong`,null,T(c(e).name),1),I(`span`,ly,T(a(e.state.status)),1),l(e)?(N(),P(`span`,uy,T(l(e)),1)):z(``,!0),I(`small`,null,`#`+T(e.id)+` `+T(c(e).what)+`, agent #`+T(e.conversationId)+T(e.effectiveBackground?`, background`:``),1),(N(!0),P(M,null,j(e.conversations,e=>(N(),P(`button`,{key:e,class:`text-button`,onClick:t=>k(gh)(e)},` Open agent #`+T(e),9,dy))),128))],12,cy))),128))])):(N(),P(`p`,oy,`Nothing running. Send a message or run a job.`)),r[6]||=I(`p`,{class:`hint`},` Interrupt or Esc stops foreground work and what it owns. Stop all also stops background runs. `,-1),I(`button`,{class:`secondary danger`,disabled:!k(Cu).length||n.value,onClick:u},[L(k(Tc),{size:18}),r[4]||=R(`Stop all `,-1)],8,fy)]),I(`details`,{class:`raw task-section`,onToggle:d},[I(`summary`,null,[L(k(ec),{size:18}),r[7]||=R(`Runtime details`,-1)]),r[9]||=I(`p`,{class:`hint`},` Recent task results and recovery records, read from the device when opened. `,-1),(N(!0),P(M,null,j(f.value,e=>(N(),P(`details`,{key:e.id,class:`raw`},[I(`summary`,null,[R(T(e.kind)+` #`+T(e.id),1),I(`span`,null,T(a(e.state.outcome?.status??e.state.status)),1)]),I(`pre`,null,T(JSON.stringify(e.state.outcome,null,2)),1)]))),128)),I(`details`,py,[r[8]||=I(`summary`,null,`Recovery inspection`,-1),I(`pre`,null,T(JSON.stringify(i.value,null,2)),1)])],32)]))}}),hy={class:`git-tab`},gy={key:0,class:`empty`},_y={class:`git-head`},vy=[`title`],yy=[`disabled`],by={key:0,class:`empty`},xy={key:1,class:`muted note`},Sy={key:2,class:`error`},Cy=[`disabled`],wy={key:0,class:`empty`},Ty={class:`facts`},Ey={key:0},Dy={key:1},Oy={key:2,class:`wt-of`},ky={class:`row`},Ay=[`disabled`],jy=[`disabled`],My=[`disabled`],Ny=[`disabled`],Py=[`disabled`],Fy={class:`row`},Iy=[`disabled`],Ly={class:`row`},Ry=[`disabled`],zy={key:0,class:`wts`},By={class:`muted`},Vy=[`disabled`,`onClick`],Hy={key:1,class:`out`},Uy=Ug(A({__name:`GitPanel`,props:{deviceId:{},cwd:{}},setup(e){let t=e,n=O(null),r=O(``),i=O(!1),a=O(!1),o,s=O(``),c=O(``),l=O(``),u=O(``),d=B(()=>t.cwd??cu.value?.cwd??``),f=B(()=>t.deviceId??nu.value),p=()=>f.value?Fl(f.value):null,m;async function h(){let e=p();if(e&&d.value)return o||(n.value?a.value=!0:i.value=!0,r.value=``,o=(async()=>{try{n.value=await e.gitStatus(d.value,{timeoutMs:6e4}),r.value=``}catch(e){let t=e.message??``;r.value=/fetch failed|Cannot reach|Failed to fetch|NetworkError|ERR_NAME/i.test(t)?`device unreachable — check that it is online, then retry (${t.slice(0,80)})`:t.slice(0,160)}finally{i.value=!1,a.value=!1,o=void 0}})(),o)}h(),Yr(()=>h()),Wr(()=>{m=setInterval(h,3e4)}),qr(()=>m&&clearInterval(m)),Zn(d,()=>void h());async function g(e){let t=p();if(t&&d.value){s.value=e,c.value=``;try{let n=await t.gitOp(d.value,e);c.value=n.text||`(empty)`,(e===`fetch`||e===`pull`)&&W(`git ${e} ✓`),await h()}catch(t){c.value=`${e} failed: ${t.message.slice(0,200)}`}finally{s.value=``}}}async function _(){let e=p();if(e&&d.value&&l.value.trim()){s.value=`commit`;try{W((await e.gitOp(d.value,`commit`,{message:l.value.trim()})).text),l.value=``,await h()}catch(e){W(`commit failed: ${e.message.slice(0,120)}`)}finally{s.value=``}}}async function v(){let e=p();if(!e||!d.value||!u.value.trim()||!n.value?.root)return;let t=n.value.root,r=t.slice(0,t.lastIndexOf(`/`)),i=t.slice(t.lastIndexOf(`/`)+1);s.value=`wt`;try{W((await e.gitOp(d.value,`worktree-add`,{branch:u.value.trim(),target:`${r}/${i}-${u.value.trim()}`})).text.split(`
|
|
78
|
+
`)[0]??`worktree added`),u.value=``,await h()}catch(e){W(`worktree failed: ${e.message.slice(0,120)}`)}finally{s.value=``}}async function y(e){let t=p();if(t&&d.value&&confirm(`Remove worktree ${e}?`)){s.value=`wt`;try{await t.gitOp(d.value,`worktree-remove`,{target:e}),await h()}catch(e){W(`remove failed: ${e.message.slice(0,120)}`)}finally{s.value=``}}}return(e,t)=>(N(),P(`div`,hy,[d.value?(N(),P(M,{key:1},[I(`header`,_y,[t[9]||=I(`strong`,null,`git`,-1),I(`code`,{class:`cwd`,title:d.value},T(d.value),9,vy),I(`button`,{disabled:!!s.value,title:`refresh`,onClick:t[0]||=e=>h()},[L(k(Pc),{size:14})],8,yy)]),i.value?(N(),P(`p`,by,`loading git…`)):z(``,!0),a.value?(N(),P(`p`,xy,`refreshing…`)):z(``,!0),r.value?(N(),P(`p`,Sy,[R(T(r.value)+` `,1),I(`button`,{disabled:!!s.value||!!i.value,onClick:t[1]||=e=>h()},`retry`,8,Cy)])):z(``,!0),n.value?(N(),P(`div`,{key:3,class:C({stale:!!r.value||a.value})},[n.value&&!n.value.repo?(N(),P(`p`,wy,[...t[10]||=[R(` Not a git repository — run `,-1),I(`code`,null,`git init`,-1),R(` (or open a session inside a repo) to see branch, status and worktrees here. `,-1)]])):n.value?(N(),P(M,{key:1},[I(`dl`,Ty,[I(`div`,null,[t[11]||=I(`dt`,null,`branch`,-1),I(`dd`,null,T(n.value.branch??`detached`),1)]),n.value.upstream?(N(),P(`div`,Ey,[t[12]||=I(`dt`,null,`upstream`,-1),I(`dd`,null,T(n.value.upstream),1)])):z(``,!0),I(`div`,null,[t[13]||=I(`dt`,null,`changes`,-1),I(`dd`,null,`+`+T(n.value.staged??0)+` ~`+T(n.value.unstaged??0)+` ?`+T(n.value.untracked??0),1)]),n.value.ahead||n.value.behind?(N(),P(`div`,Dy,[t[14]||=I(`dt`,null,`sync`,-1),I(`dd`,null,`↑`+T(n.value.ahead??0)+` ↓`+T(n.value.behind??0),1)])):z(``,!0),I(`div`,null,[t[15]||=I(`dt`,null,`head`,-1),I(`dd`,null,T(n.value.head)+` `+T(n.value.subject),1)]),n.value.worktreeOf?(N(),P(`div`,Oy,[t[16]||=I(`dt`,null,`worktree of`,-1),I(`dd`,null,T(n.value.worktreeOf),1)])):z(``,!0)]),I(`div`,ky,[I(`button`,{disabled:!!s.value,onClick:t[2]||=e=>g(`fetch`)},`fetch`,8,Ay),I(`button`,{disabled:!!s.value,onClick:t[3]||=e=>g(`pull`)},`pull`,8,jy),I(`button`,{disabled:!!s.value,onClick:t[4]||=e=>g(`log`)},`log`,8,My),I(`button`,{disabled:!!s.value,onClick:t[5]||=e=>g(`branch`)},`branches`,8,Ny),I(`button`,{disabled:!!s.value,onClick:t[6]||=e=>g(`diff`)},`diff`,8,Py)]),I(`div`,Fy,[Wn(I(`input`,{"onUpdate:modelValue":t[7]||=e=>l.value=e,placeholder:`commit message…`,onKeyup:Ms(_,[`enter`])},null,544),[[bs,l.value]]),I(`button`,{disabled:!!s.value||!l.value.trim(),onClick:_},`commit -am`,8,Iy)]),I(`div`,Ly,[Wn(I(`input`,{"onUpdate:modelValue":t[8]||=e=>u.value=e,placeholder:`branch name…`,onKeyup:Ms(v,[`enter`])},null,544),[[bs,u.value]]),I(`button`,{disabled:!!s.value||!u.value.trim(),onClick:v},`+ worktree`,8,Ry)]),(n.value.worktrees?.length??0)>1?(N(),P(`ul`,zy,[(N(!0),P(M,null,j(n.value.worktrees,e=>(N(),P(`li`,{key:e.path},[I(`code`,null,T(e.path),1),I(`span`,By,T(e.branch??e.head),1),e.path===n.value.root?z(``,!0):(N(),P(`button`,{key:0,disabled:!!s.value,onClick:t=>y(e.path)},`remove`,8,Vy))]))),128))])):z(``,!0),c.value?(N(),P(`pre`,Hy,T(c.value.slice(0,6e3)),1)):z(``,!0)],64)):z(``,!0)],2)):z(``,!0)],64)):(N(),P(`p`,gy,`No session selected — open a session to see its git.`))]))}}),[[`__scopeId`,`data-v-2c6dd9de`]]),Wy={class:`extensions-panel`},Gy={class:`panel-heading`},Ky={key:0,class:`task-empty`},qy=[`data-extension`],Jy={class:`ext-head`},Yy=[`aria-checked`,`aria-label`,`disabled`,`onClick`],Xy=[`checked`,`disabled`,`onChange`],Zy=A({__name:`ExtensionsPanel`,setup(e){let t=an(),n=O(!1);async function r(){let e=uu.value;if(!e||!iu.value)return void(t.value=void 0);t.value=await e.extensions().catch(()=>void 0)??t.value}Zn([uu,iu,()=>JSON.stringify(bu.value.agent.extensions??null)],r,{immediate:!0});async function i(e){let r=uu.value;if(r&&!n.value){n.value=!0;try{let n=await ju(()=>r.setExtension(e));n&&(t.value=n),ku()}finally{n.value=!1}}}return(e,r)=>(N(),P(`div`,Wy,[I(`div`,Gy,[r[0]||=I(`h2`,null,`Extensions`,-1),L(k(Nc),{size:18})]),r[3]||=I(`p`,{class:`hint`},` Custom harness capabilities for this agent. Turn one on and the next request uses it. The choice is stored with the agent, so it survives restarts. `,-1),t.value?z(``,!0):(N(),P(`p`,Ky,`Loading extensions…`)),(N(!0),P(M,null,j(t.value?.extensions??[],e=>(N(),P(`article`,{key:e.name,class:C([`ext-card`,{on:e.enabled}]),"data-extension":e.name},[I(`div`,Jy,[I(`div`,null,[I(`strong`,null,T(e.title),1),I(`code`,null,T(e.name),1)]),I(`button`,{class:C([`switch`,{on:e.enabled}]),role:`switch`,"aria-checked":e.enabled,"aria-label":e.title,disabled:n.value,onClick:t=>i({name:e.name,enabled:!e.enabled})},[...r[1]||=[I(`span`,null,null,-1)]],10,Yy)]),I(`p`,null,T(e.description),1),e.prompts?(N(),P(`ul`,{key:0,class:C([`ext-prompts`,{off:!e.enabled}])},[(N(!0),P(M,null,j(e.prompts,e=>(N(),P(`li`,{key:e.id},[I(`label`,null,[I(`input`,{type:`checkbox`,checked:e.enabled,disabled:n.value,onChange:t=>i({prompt:e.id,enabled:t.target.checked})},null,40,Xy),I(`code`,null,T(e.id),1)]),I(`span`,null,T(e.description),1),I(`details`,null,[r[2]||=I(`summary`,null,`View prompt`,-1),I(`pre`,null,T(e.text),1)])]))),128))],2)):z(``,!0)],10,qy))),128))]))}}),Qy={class:`context-section`,"aria-labelledby":`context-title`},$y={class:`section-label`},eb={key:0,class:`hint`},tb={class:`context-numbers`},nb={class:`context-pct`},rb={key:0,class:`context-compacting`},ib=[`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],ab={class:`context-marker-label`},ob=[`aria-valuemin`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],sb={class:`context-marker-label`},cb={class:`hint context-hint`},lb={class:`modal compaction-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`compaction-title`},ub={class:`context-toggle`},db=[`checked`],fb=512,pb=4096,mb=1024,hb=A({__name:`ContextBar`,setup(e){let t=e=>e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e),n=B(()=>Eu.value?.contextWindow??0),r=B(()=>{let e=bu.value.entries;for(let t=e.length-1;t>=0;t--){if(e[t].kind!==`pi.assistant`)continue;let n=e[t].model?.find(e=>e.role===`assistant`)?.usage;if(n)return n.totalTokens||n.input+n.output+n.cacheRead+n.cacheWrite}return 0}),i=B(()=>bu.value.compactions.length>0),a=O(),o=B(()=>a.value??cu.value?.compaction??Yg(n.value));Zn(()=>JSON.stringify(cu.value?.compaction),e=>{a.value&&e===JSON.stringify(a.value)&&(a.value=void 0)});let s=O(),c=B(()=>U.dialog?.kind===`compaction`),l=()=>void(U.dialog=void 0);Jr(()=>c.value&&l());let u=B(()=>s.value??Xg(n.value,o.value)),d=e=>`${Math.min(100,Math.max(0,100*e/(n.value||1)))}%`,f=B(()=>Math.round(100*r.value/(n.value||1))),p=e=>{let t=e/(n.value||1);return t<.35?`start`:t>.65?`end`:`center`},m=(e,t)=>Math.min(n.value-mb,Math.max((t??pb)+mb,e)),h=(e,t)=>Math.min(t-mb,Math.max(pb,e));function g(e,t){let n=u.value,r=Math.round(t/fb)*fb;s.value=e===`wait`?{auto:n.auto,wait:m(r,n.auto)}:{auto:h(r,n.wait),wait:n.wait}}async function _(e){let t=du.value;if(!t)return;let n=await ju(()=>t.setCompaction(e));n&&(a.value=n),s.value=void 0}function v(){let e=s.value;e&&_({reserveTokens:n.value-e.wait,...e.auto===void 0?{}:{backgroundTokens:e.wait-e.auto}})}let y=O(),b;function ee(e,t){b=e,t.currentTarget.setPointerCapture(t.pointerId)}function te(e){if(!b||!y.value)return;let t=y.value.getBoundingClientRect();g(b,(e.clientX-t.left)/t.width*n.value)}function x(){b&&(b=void 0,v())}function ne(e,t){let n=(t.shiftKey?8192:1024)*(t.key===`ArrowRight`||t.key===`ArrowUp`?1:t.key===`ArrowLeft`||t.key===`ArrowDown`?-1:0);if(!n)return;t.preventDefault();let r=u.value;g(e,(e===`auto`?r.auto??pb:r.wait)+n)}return(e,a)=>(N(),P(M,null,[I(`section`,Qy,[I(`div`,$y,[a[7]||=I(`span`,{id:`context-title`},`CONTEXT`,-1),n.value?(N(),P(`button`,{key:0,class:`context-details-toggle`,onClick:a[0]||=e=>k(U).dialog={kind:`compaction`}},[L(k(pc),{size:16}),a[6]||=R(`Details `,-1)])):z(``,!0)]),n.value?(N(),P(M,{key:1},[I(`div`,tb,[I(`strong`,null,T(t(r.value)),1),I(`span`,null,`of `+T(t(n.value))+` tokens`,1),I(`span`,nb,T(f.value)+`%`,1),i.value?(N(),P(`span`,rb,[...a[8]||=[I(`i`,null,null,-1),R(`Compacting`,-1)]])):z(``,!0)]),I(`div`,{ref_key:`bar`,ref:y,class:C([`context-bar`,{off:!o.value.enabled}]),onPointermove:te,onPointerup:x,onPointercancel:x},[I(`div`,{class:C([`context-fill`,{hot:u.value.auto!==void 0&&r.value>=u.value.auto}]),style:ye({width:d(r.value)})},null,6),I(`div`,{class:`context-reserve`,style:ye({left:d(u.value.wait)}),title:`Reserved for the answer`},null,4),u.value.auto===void 0?z(``,!0):(N(),P(`button`,{key:0,class:C([`context-marker auto`,`label-${p(u.value.auto)}`]),role:`slider`,"aria-label":`Automatic compaction starts at`,"aria-valuemin":pb,"aria-valuemax":u.value.wait-mb,"aria-valuenow":u.value.auto,"aria-valuetext":`${t(u.value.auto)} tokens`,style:ye({left:d(u.value.auto)}),onPointerdown:a[1]||=e=>ee(`auto`,e),onKeydown:a[2]||=e=>ne(`auto`,e),onKeyup:v,onBlur:v},[I(`span`,ab,`Auto-compact at `+T(t(u.value.auto)),1)],46,ib)),I(`button`,{class:C([`context-marker wait`,`label-${p(u.value.wait)}`]),role:`slider`,"aria-label":`The next request waits for a summary at`,"aria-valuemin":(u.value.auto??pb)+mb,"aria-valuemax":n.value-mb,"aria-valuenow":u.value.wait,"aria-valuetext":`${t(u.value.wait)} tokens, ${t(n.value-u.value.wait)} reserved`,style:ye({left:d(u.value.wait)}),onPointerdown:a[3]||=e=>ee(`wait`,e),onKeydown:a[4]||=e=>ne(`wait`,e),onKeyup:v,onBlur:v},[I(`span`,sb,`Reserve at `+T(t(u.value.wait)),1)],46,ob)],34),I(`p`,cb,[o.value.enabled?(N(),P(M,{key:0},[a[9]||=R(`Compacts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[10]||=R(` and waits at `,-1),I(`strong`,null,T(t(u.value.wait)),1),a[11]||=R(`.`,-1)],64)):(N(),P(M,{key:1},[R(`Automatic compaction is off.`)],64))])],64)):(N(),P(`div`,eb,`Pick a model to see its context window.`))]),(N(),F(fr,{to:`body`},[c.value?(N(),P(`div`,{key:0,class:`modal-backdrop`,onClick:As(l,[`self`])},[I(`section`,lb,[I(`header`,null,[a[12]||=I(`h2`,{id:`compaction-title`},`Context compaction`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close context compaction`,onClick:l},[L(k(qc),{size:18})])]),I(`p`,null,[a[13]||=R(` A summary starts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[14]||=R(`. Above `,-1),I(`strong`,null,T(t(u.value.wait)),1),R(` the next request waits for it, keeping `+T(t(n.value-u.value.wait))+` free for the answer. Drag a marker on the bar to change either point. `,1)]),a[16]||=I(`p`,null,[R(`Older entries stay stored, and `),I(`code`,null,`search_history`),R(` still finds them.`)],-1),I(`label`,ub,[I(`input`,{type:`checkbox`,checked:o.value.enabled,onChange:a[5]||=e=>_({enabled:e.target.checked})},null,40,db),a[15]||=R(` Automatic compaction `,-1)]),a[17]||=I(`p`,{class:`hint`},[R(` Applies to every agent in this session. `),I(`code`,null,`/compact`),R(` works either way. `)],-1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:l},`Close`)])])])):z(``,!0)]))],64))}}),gb=/^[A-Za-z_$][\w$]*$/,_b=e=>` `.repeat(e);function vb(e,t){let n=[],r=(e,t=`text`)=>n.push({text:e,kind:t});return r(`function`,`keyword`),r(` `),r(e,`function`),r(`(`,`punct`),r(`args`),r(`: `,`punct`),yb(t,0,r),r(`): `,`punct`),r(`Promise`,`type`),r(`<`,`punct`),r(`ToolResult`,`type`),r(`>;`,`punct`),n}function yb(e,t,n){if(!e||typeof e!=`object`)return n(`unknown`,`type`);if(`const`in e)return Sb(e.const,n);if(e.enum)return xb(e.enum.map(e=>({const:e})),t,n);if(e.anyOf??e.oneOf)return xb(e.anyOf??e.oneOf,t,n);if(Array.isArray(e.type))return xb(e.type.map(t=>({...e,type:t})),t,n);switch(e.type){case`string`:case`boolean`:case`null`:return n(e.type,`type`);case`number`:case`integer`:return n(`number`,`type`);case`array`:{let r=!!(e.items?.anyOf??e.items?.oneOf??e.items?.enum);return r&&n(`(`,`punct`),yb(e.items,t,n),r&&n(`)`,`punct`),n(`[]`,`punct`)}case`object`:return bb(e,t,n);default:return n(`unknown`,`type`)}}function bb(e,t,n){let r=Object.entries(e.properties??{});if(!r.length)return e.additionalProperties&&typeof e.additionalProperties==`object`?(n(`Record`,`type`),n(`<`,`punct`),n(`string`,`type`),n(`, `,`punct`),yb(e.additionalProperties,t,n),n(`>`,`punct`)):n(`{}`,`punct`);let i=new Set(e.required??[]);n(`{`,`punct`),n(`
|
|
79
|
+
`);for(let[e,a]of r){let r=Cb(a);r&&n(`${_b(t+1)}${r}\n`,`comment`),n(_b(t+1)),n(gb.test(e)?e:JSON.stringify(e),`property`),n(i.has(e)?`: `:`?: `,`punct`),yb(a,t+1,n),n(`;`,`punct`),n(`
|
|
80
|
+
`)}n(_b(t)),n(`}`,`punct`)}function xb(e,t,n){e.forEach((e,r)=>{r&&n(` | `,`punct`),yb(e,t,n)})}function Sb(e,t){if(typeof e==`string`)return t(JSON.stringify(e),`string`);if(typeof e==`number`)return t(String(e),`number`);t(String(e),`type`)}function Cb(e){let t=[e.description,e.minimum===void 0?``:`@minimum ${e.minimum}`,e.maximum===void 0?``:`@maximum ${e.maximum}`,e.default===void 0?``:`@default ${JSON.stringify(e.default)}`].filter(Boolean);return t.length?`/** ${t.join(` `)} */`:``}var wb={key:0,class:`panel-rail`,"aria-label":`Inspector (collapsed)`},Tb=[`title`],Eb=[`aria-label`,`title`,`onClick`],Db={key:0,class:`count`},Ob={class:`inspector-tabs`,role:`tablist`,"aria-label":`Session details`},kb=[`id`,`aria-selected`,`onClick`],Ab={key:0,class:`count`},jb=[`title`],Mb=[`aria-labelledby`],Nb={class:`session-heading`},Pb=[`title`],Fb={class:`cwd-trail`,dir:`rtl`},Ib={dir:`ltr`},Lb={class:`session-status`},Rb={key:0,class:`background-pill`},zb=[`title`],Bb={class:`model-section`},Vb=[`src`],Hb={class:`thinking-row`},Ub=[`value`],Wb={class:`stats-section`,"aria-labelledby":`stats-title`},Gb={class:`metrics`},Kb=[`title`],qb={class:`usage-breakdown`,"aria-label":`Agent token and cost breakdown`},Jb={scope:`row`},Yb={class:`panel-heading`},Xb={class:`hint app-state-description`},Zb=[`disabled`],Qb={class:`state-json-actions`},$b={key:0,class:`hint`},ex=[`disabled`],tx=[`disabled`],nx={key:0,class:`message-error`,role:`alert`},rx={class:`panel-heading`},ix={class:`tag`},ax={class:`hook-card`},ox=[`aria-checked`],sx={key:0,class:`tag tool-disabled`},cx={class:`tag`},lx=[`aria-label`],ux=A({__name:`Inspector`,setup(e){let t=B(()=>new Map(Du.value?.tools.map(e=>[e.name,vb(e.name,e.parameters)]))),n=[{id:`session`,label:`Session`,icon:sc},{id:`git`,label:`Git`,icon:lc},{id:`state`,label:`State`,icon:qs},{id:`tasks`,label:`Tasks`,icon:Hs},{id:`tools`,label:`Tools`,icon:Kc},{id:`extensions`,label:`Extend`,icon:Nc}],r=B(()=>[{label:`Input`,tokens:Tu.value.input,cost:Tu.value.inputCost},{label:`Output`,tokens:Tu.value.output,cost:Tu.value.outputCost},{label:`Cache read`,tokens:Tu.value.cacheRead,cost:Tu.value.cacheReadCost},{label:`Cache write`,tokens:Tu.value.cacheWrite,cost:Tu.value.cacheWriteCost}]),i=B(()=>Cu.value.filter(e=>e.background).length);function a(e,t){ju(async()=>{await uu.value.configure(e),await ku(),t&&W(t)})}function o(){let e=du.value;e&&(U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:cu.value?.name??``,submit:`Save name`,run:t=>e.rename(t)})}let s=su.sharedState,c=O(``),l=O(``),u=O(0),d=O(!1),f=O(``),p=B(()=>c.value!==l.value),m=B(()=>p.value&&s.value?.revision!==u.value);function h(){c.value=Pu(s.value?.value??{}),l.value=c.value,u.value=s.value?.revision??0,f.value=``}Zn(s,()=>!p.value&&h(),{immediate:!0});async function g(e){if(!d.value&&uu.value){d.value=!0,f.value=``;try{await uu.value.demo(`state`,e)}catch(e){f.value=Rl(e)}finally{d.value=!1}}}async function _(){if(!d.value&&uu.value){f.value=``,d.value=!0;try{let e=JSON.parse(c.value);if(!e||Array.isArray(e)||typeof e!=`object`)throw Error(`App State must be a JSON object.`);let t=await uu.value.demo(`state`,{operation:`update`,path:``,value:e,expectedRevision:u.value});c.value=Pu(t.value),l.value=c.value,u.value=t.revision,W(`Shared App State saved.`)}catch(e){f.value=Rl(e)}finally{d.value=!1}}}let v=B(()=>Du.value?.config.readOnly===!0),y=B(()=>Du.value?.tools.filter(e=>e.offered).length??0);return(e,l)=>(N(),P(`aside`,{class:C([`inspector`,{collapsed:!k(Vu),overlay:k(U).inspectorOverlay}])},[k(Vu)?(N(),P(M,{key:1},[I(`div`,Ob,[(N(),P(M,null,j(n,e=>I(`button`,{id:`inspector-tab-${e.id}`,key:e.id,role:`tab`,"aria-controls":`inspector-panel`,"aria-selected":k(U).tab===e.id,class:C({active:k(U).tab===e.id}),onClick:t=>k(U).tab=e.id},[(N(),F(ni(e.icon),{size:18})),R(T(e.label),1),e.id===`tasks`&&k(Cu).length?(N(),P(`span`,Ab,T(k(Cu).length),1)):z(``,!0)],10,kb)),64)),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse inspector`,title:`Collapse inspector (${k(qu).inspector})`,onClick:l[1]||=e=>k(Uu)()},[L(k(Ec),{size:18})],8,jb)]),I(`div`,{id:`inspector-panel`,class:C([`inspector-body`,{"session-panel":k(U).tab===`session`}]),role:`tabpanel`,"aria-labelledby":`inspector-tab-${k(U).tab}`},[k(U).tab===`session`?(N(),P(M,{key:0},[I(`section`,Nb,[I(`h1`,null,[I(`span`,null,T(k(cu)?.name??`Loading session`),1),I(`button`,{class:`icon-button`,title:`Rename session`,"aria-label":`Rename session`,onClick:o},[L(k(Ac),{size:18})])]),I(`button`,{class:`path cwd-button`,title:k(cu)?.cwd,"aria-label":`Show full working directory`,onClick:l[2]||=e=>k(U).dialog={kind:`path`,path:k(cu)?.cwd??``}},[L(k(sc),{size:18}),I(`span`,Fb,[I(`bdi`,Ib,T(k(cu)?.cwd),1)])],8,Pb),I(`div`,Lb,[I(`span`,{class:C([`status-pill`,{working:k(wu)}])},[l[7]||=I(`i`,null,null,-1),R(T(k(wu)?`Working`:`Idle`),1)],2),i.value?(N(),P(`span`,Rb,T(i.value)+` background`,1)):z(``,!0),I(`span`,{class:`saved`,title:k(ru)?.id},[L(k(Ic),{size:18}),R(T(k(ru)?.name??k(ru)?.id),1)],8,zb),k(ru)?(N(),F(bv,{key:1,device:k(ru)},null,8,[`device`])):z(``,!0)])]),k(ru)?(N(),F(Lv,{key:0,device:k(ru)},null,8,[`device`])):z(``,!0),I(`section`,Bb,[l[14]||=I(`div`,{class:`section-label`},[I(`span`,null,`AGENT`)],-1),I(`button`,{class:`model-button`,onClick:l[3]||=e=>k(U).dialog={kind:`models`}},[I(`img`,{src:k(Fu)(k(bu).agent.model?.modelId),alt:``},null,8,Vb),I(`div`,null,[I(`strong`,null,T(k(Eu)?.name??k(bu).agent.model?.modelId??`Loading…`),1),I(`small`,null,T(k(Eu)?.tier??``)+` / `+T(k(bu).agent.model?.provider??``),1)]),L(k(Xs),{size:18})]),I(`div`,Hb,[l[8]||=I(`span`,null,`Thinking`,-1),I(`select`,{"aria-label":`Thinking level`,value:k(bu).agent.thinkingLevel??`low`,onChange:l[4]||=e=>a({thinkingLevel:e.target.value},`Thinking ${e.target.value}. Used on the next turn.`)},[(N(!0),P(M,null,j(k(Kg),e=>(N(),P(`option`,{key:e},T(e),1))),128))],40,Ub)]),L(hb),I(`section`,Wb,[l[13]||=I(`div`,{class:`section-label`},[I(`span`,{id:`stats-title`},`STATS`)],-1),I(`div`,Gb,[I(`div`,{title:`${k(Tu).tokens.toLocaleString(`en-US`)} total tokens`},[I(`span`,null,T(k(Nu)(k(Tu).tokens)),1),l[9]||=I(`small`,null,`total tokens`,-1)],8,Kb),I(`div`,null,[I(`span`,null,`$`+T(k(Tu).cost.toFixed(4)),1),l[10]||=I(`small`,null,`agent cost`,-1)]),I(`div`,null,[I(`span`,null,T(k(Du)?.tools.length??0),1),l[11]||=I(`small`,null,`tools`,-1)])]),I(`table`,qb,[l[12]||=I(`thead`,null,[I(`tr`,null,[I(`th`,{scope:`col`},`Type`),I(`th`,{scope:`col`},`Tokens`),I(`th`,{scope:`col`},`Cost (USD)`)])],-1),I(`tbody`,null,[(N(!0),P(M,null,j(r.value,e=>(N(),P(`tr`,{key:e.label},[I(`th`,Jb,T(e.label),1),I(`td`,null,T(e.tokens.toLocaleString(`en-US`)),1),I(`td`,null,`$`+T(e.cost.toFixed(4)),1)]))),128))])])])])],64)):z(``,!0),k(U).tab===`state`?(N(),P(M,{key:1},[I(`div`,Yb,[l[15]||=I(`h2`,null,`App State`,-1),L(k(qs),{size:18})]),I(`p`,Xb,` One shared JSON object for every agent, session and fork on `+T(k(ru)?.name??k(ru)?.id)+`. You and your agents can read, create, update or delete values and fields. Changes appear live and persist across closed browsers, interrupted agents and backend restarts. `,1),Wn(I(`textarea`,{"onUpdate:modelValue":l[5]||=e=>c.value=e,class:`app-state-json`,"aria-label":`App State JSON`,spellcheck:`false`,disabled:d.value||!k(s),rows:`12`},null,8,Zb),[[bs,c.value]]),I(`div`,Qb,[m.value?(N(),P(`span`,$b,`State changed elsewhere. Load the latest JSON before saving.`)):z(``,!0),p.value?(N(),P(`button`,{key:1,class:`secondary`,disabled:d.value,onClick:h},T(m.value?`Load latest`:`Reset`),9,ex)):z(``,!0),I(`button`,{class:`primary small`,disabled:!p.value||d.value||m.value,onClick:_},T(d.value?`Saving…`:`Save JSON`),9,tx)]),f.value?(N(),P(`p`,nx,T(f.value),1)):z(``,!0),L(mv,{value:k(s)?.value??{},disabled:d.value||p.value||!k(s),onChange:g},null,8,[`value`,`disabled`])],64)):z(``,!0),k(U).tab===`tasks`?(N(),F(my,{key:2})):z(``,!0),k(U).tab===`git`?(N(),F(Uy,{key:3})):z(``,!0),k(U).tab===`extensions`?(N(),F(Zy,{key:4})):z(``,!0),k(U).tab===`tools`?(N(),P(M,{key:5},[I(`div`,rx,[l[16]||=I(`h2`,null,`Tools`,-1),I(`span`,ix,T(y.value)+` / `+T(k(Du)?.tools.length??0),1)]),l[20]||=I(`p`,{class:`hint`},` Every tool this agent's extensions provide. Open one to see its definition. `,-1),I(`div`,ax,[I(`div`,null,[L(k(Rc),{size:18}),l[18]||=I(`strong`,null,`Read only`,-1),I(`button`,{class:C([`switch`,{on:v.value}]),role:`switch`,"aria-checked":v.value,"aria-label":`Read only`,onClick:l[6]||=e=>a({readOnly:!v.value},v.value?`Read only off. Every tool is back.`:`Read only on. Tools that write are disabled.`)},[...l[17]||=[I(`span`,null,null,-1)]],10,ox)]),l[19]||=I(`p`,null,` Offers this agent only tools that read. Tools that create, update or delete leave its next request, and the choice is stored with the agent. `,-1)]),(N(!0),P(M,null,j(k(Du)?.tools,e=>(N(),P(`details`,{key:e.name,class:C([`tool-row`,{disabled:!e.offered}])},[I(`summary`,null,[L(k(Kc),{size:18}),I(`strong`,null,T(e.name),1),e.offered?z(``,!0):(N(),P(`span`,sx,`disabled`)),I(`span`,cx,T(e.replay===`safe`?`replay safe`:`interrupt on crash`),1)]),I(`p`,null,T(e.description),1),e.parameters?(N(),P(`pre`,{key:0,class:`tool-signature`,"aria-label":`${e.name} TypeScript definition`},[I(`code`,null,[(N(!0),P(M,null,j(t.value.get(e.name),(e,t)=>(N(),P(`span`,{key:t,class:C(`tk-${e.kind}`)},T(e.text),3))),128))])],8,lx)):z(``,!0),I(`small`,null,T(e.replay===`safe`?`An interrupted execution may run again after recovery.`:`A crash records an interrupted result instead of rerunning this effect.`),1)],2))),128))],64)):z(``,!0)],10,Mb)],64)):(N(),P(`div`,wb,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand inspector`,title:`Expand inspector (${k(qu).inspector})`,onClick:l[0]||=e=>k(Hu)()},[L(k(Dc),{size:18})],8,Tb),(N(),P(M,null,j(n,e=>I(`button`,{key:e.id,class:C([`rail-tab`,{active:k(U).tab===e.id}]),"aria-label":`Open ${e.label}`,title:e.label,onClick:t=>k(Hu)(e.id)},[(N(),F(ni(e.icon),{size:20})),e.id===`tasks`&&k(Cu).length?(N(),P(`span`,Db,T(k(Cu).length),1)):z(``,!0)],10,Eb)),64))]))],2))}}),dx={class:`chat-empty`},fx={class:`eyebrow`},px={key:3,class:`hint offline-error`},mx={key:4,class:`offline-command`},hx={key:5,class:`hint`},gx={key:6,class:`hint`},_x={class:`offline-actions`},vx=[`disabled`],yx={key:7,class:`message-error`,role:`alert`},bx=A({__name:`OfflinePanel`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>{let e=t.device,n=e.source===`config`;switch(e.status){case`checking`:return{title:`Checking ${e.id}…`,text:`Probing the device. This view fills in as soon as it answers.`};case`unauthorized`:return e.transport===`tunnel`?{title:`${e.id} tunnel credentials are not valid`,text:`Pair the device again — the hub will mint a fresh credential.`}:{title:e.hasToken?`${e.id} rejected its token`:`No token for ${e.id}`,text:e.hasToken?`The device's DPI_TOKEN changed (a rotate or a rebuilt device). Copy the current token into this hub's registry, then check again.`:`This hub has no token for the device yet. Register it, then check again.`,command:n&&e.kind!==`url`?`just net register ${e.id}`:`just net register ${e.id} --token <token>`};case`mismatch`:return{title:`${e.id} answers as a different device`,text:`The URL now reaches a backend with another identity (a rebuilt VM or a new data directory). If that is expected, register it again: that trusts the identity it answers with now.`,command:e.kind===`url`?`just net register ${e.id} --token <token>`:`just net register ${e.id}`};case`incompatible`:return{title:`${e.id} speaks another API version`,text:`Update the device's dpi-backend.`,command:n?`just net deploy ${e.id}`:void 0};default:return{title:`${e.id} is offline`,text:`Last seen ${Iu(e.lastSeenAt)}. Its agents keep their state on the device and resume when its backend starts again. The tree shows the last known sessions.`,command:n?e.kind===`local`?`just backend run`:e.kind===`url`?void 0:`just net restart ${e.id}`:void 0,alt:n&&e.kind!==`local`&&e.kind!==`url`?`just net up ${e.id}`:void 0}}});async function a(){n.value=!0,r.value=``;try{let e=await Ll.check(t.device.id);e.status===`online`&&W(`${e.id} is online.`)}catch(e){r.value=Rl(e)}finally{n.value=!1}}async function o(e){try{await navigator.clipboard.writeText(e),W(`Copied.`)}catch{W(`Clipboard needs localhost or HTTPS. Select the text to copy.`)}}return(t,s)=>(N(),P(`section`,{class:C([`chat-panel offline-panel`,e.device.status]),"aria-live":`polite`},[I(`div`,dx,[e.device.status===`checking`?(N(),F(k(bc),{key:0,class:`spin`,size:30})):e.device.status===`mismatch`||e.device.status===`unauthorized`?(N(),F(k(Lc),{key:1,size:30})):(N(),F(k(Uc),{key:2,size:30})),I(`span`,fx,T(e.device.kind.toUpperCase())+` · `+T(e.device.url??(e.device.transport===`tunnel`?`tunnel`:`no endpoint`)),1),I(`h2`,null,T(i.value.title),1),I(`p`,null,T(i.value.text),1),e.device.error?(N(),P(`p`,px,T(e.device.error),1)):z(``,!0),i.value.command?(N(),P(`div`,mx,[I(`code`,null,T(i.value.command),1),I(`button`,{class:`icon-button`,"aria-label":`Copy command`,onClick:s[0]||=e=>o(i.value.command)},[L(k(tc),{size:18})])])):z(``,!0),i.value.command?(N(),P(`p`,hx,`Run it in this repo's terminal, then press Check now.`)):z(``,!0),i.value.alt?(N(),P(`p`,gx,[s[2]||=R(` Never deployed or rebuilt? `,-1),I(`code`,null,T(i.value.alt),1),s[3]||=R(` provisions it from scratch. `,-1)])):z(``,!0),I(`div`,_x,[I(`button`,{class:`secondary`,disabled:n.value,onClick:s[1]||=e=>a()},[L(k(Pc),{size:18}),R(T(n.value?`Checking…`:`Check now`),1)],8,vx)]),r.value?(N(),P(`p`,yx,T(r.value),1)):z(``,!0)])],2))}}),xx={class:`dir-browser`},Sx={class:`dir-path`},Cx=[`disabled`],wx=[`aria-busy`],Tx=[`title`],Ex=[`aria-selected`,`title`,`onClick`],Dx={key:1,class:`hint`},Ox={key:0,class:`message-error`,role:`alert`},kx=A({__name:`DirBrowser`,props:ui({deviceId:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=Ai(e,`modelValue`),r=O(),i=O(!1),a=O(``),o=0;async function s(e){let s=++o,c=t.deviceId;i.value=!0,a.value=``;try{let t=await Fl(c).dirs(e);return s===o?(r.value=t,t.path&&(n.value=t.path),t):void 0}catch(e){s===o&&(a.value=Rl(e));return}finally{s===o&&(i.value=!1)}}return Zn(()=>t.deviceId,async()=>{r.value=void 0;let e=await s(``),t=e?.dirs[0];t&&!e.path&&await s(t.path)},{immediate:!0}),(e,t)=>(N(),P(`div`,xx,[I(`div`,Sx,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`Working directory`,required:``,placeholder:`/path/to/project`,spellcheck:`false`,autocomplete:`off`,onKeydown:t[1]||=Ms(As(e=>s(n.value),[`prevent`]),[`enter`])},null,544),[[bs,n.value]]),I(`button`,{type:`button`,class:`secondary small`,disabled:i.value||!n.value,onClick:t[2]||=e=>s(n.value)},` Go `,8,Cx)]),I(`div`,{class:`dir-list`,role:`listbox`,"aria-label":`Directories`,"aria-busy":i.value},[I(`button`,{type:`button`,class:`dir-item`,title:`Start directories`,onClick:t[3]||=e=>s(``)},[L(k(fc),{size:16}),t[5]||=I(`span`,null,`Start dirs`,-1)]),r.value?.parent?(N(),P(`button`,{key:0,type:`button`,class:`dir-item`,title:r.value.parent,onClick:t[4]||=e=>s(r.value.parent)},[L(k(rc),{size:16}),t[6]||=I(`span`,null,`..`,-1)],8,Tx)):z(``,!0),(N(!0),P(M,null,j(r.value?.dirs,e=>(N(),P(`button`,{key:e.path,type:`button`,class:`dir-item`,role:`option`,"aria-selected":e.path===n.value,title:e.path,onClick:t=>s(e.path)},[e.path===n.value?(N(),F(k(sc),{key:0,size:16})):(N(),F(k(cc),{key:1,size:16})),I(`span`,null,T(e.name),1)],8,Ex))),128)),r.value&&!r.value.dirs.length?(N(),P(`p`,Dx,`No subdirectories.`)):z(``,!0)],8,wx),a.value?(N(),P(`p`,Ox,T(a.value),1)):z(``,!0)]))}}),Ax={key:0,class:`message-error`},jx=[`value`],Mx={class:`field`},Nx={key:0,class:`hint`,title:`The device has no provider key — it lists its built-in catalog, and chat needs OPENROUTER_API_KEY set in the device's env file`},Px=[`value`],Fx={key:2,class:`message-error`,role:`alert`},Ix=[`disabled`],Lx=A({__name:`NewSessionDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Xl.devices.value.filter(e=>e.status===`online`)),a=O(i.value.find(e=>e.id===n.deviceId)?.id??i.value[0]?.id??``),o=B(()=>i.value.find(e=>e.id===a.value)),s=B(()=>{let e=o.value?.info?.models??[];if(e.length)return e;let t=o.value?.info;return t?.defaultModel&&t.provider?[{id:t.defaultModel,provider:t.provider,name:`${t.defaultModel} (device default)`,tier:`—`,icon:`lab.png`,contextWindow:0,reasoning:!1,cost:{input:0,output:0}}]:[]}),c=B(()=>!s.value.length||(o.value?.info?.models?.length??0)===0),l=B(()=>!!o.value?.info?.providerKeyMissing),u=e=>`${e.provider}/${e.id}`,d=O({name:``,cwd:``,model:``}),f=O(!1),p=O(``);Zn(o,e=>{let t=s.value,n=t.find(t=>t.id===e?.info?.defaultModel)??t[0];d.value.model=n?u(n):``,d.value.cwd=``},{immediate:!0});async function m(){if(!f.value&&o.value){f.value=!0,p.value=``;try{let e=s.value.find(e=>u(e)===d.value.model)??s.value[0];if(!e)throw Error(`Choose a model`);let t=await Fl(o.value.id).createSession({name:d.value.name.trim()||`New session`,cwd:d.value.cwd.trim(),model:{provider:e.provider,modelId:e.id}}),n=t.agents.find(e=>e.kind===`root`)??t.agents[0];fu({deviceId:o.value.id,sessionId:t.id,agentId:n?.id??1}),W(`Session created on ${o.value.id}.`),r(`close`)}catch(e){p.value=Rl(e)}finally{f.value=!1}}}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[6]||=As(e=>r(`close`),[`self`])},[I(`form`,{class:`modal session-modal`,onSubmit:As(m,[`prevent`])},[I(`header`,null,[t[7]||=I(`div`,null,[I(`span`,{class:`eyebrow`},`A PERSISTENT WORKSPACE`),I(`h2`,null,`New session`)],-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close new session`,onClick:t[0]||=e=>r(`close`)},[L(k(qc),{size:18})])]),i.value.length?(N(),P(M,{key:1},[I(`label`,null,[t[8]||=R(`Device`,-1),Wn(I(`select`,{"onUpdate:modelValue":t[1]||=e=>a.value=e,"aria-label":`Device`},[(N(!0),P(M,null,j(i.value,e=>(N(),P(`option`,{key:e.id,value:e.id},T(e.name)+T(e.info?.hostname&&e.info.hostname!==e.name?` · ${e.info.hostname}`:``),9,jx))),128))],512),[[Cs,a.value]])]),I(`label`,null,[t[9]||=R(`Session name`,-1),Wn(I(`input`,{"onUpdate:modelValue":t[2]||=e=>d.value.name=e,autofocus:``,placeholder:`My durable agent`,maxlength:`100`},null,512),[[bs,d.value.name]])]),I(`div`,Mx,[I(`span`,null,`Working directory on `+T(i.value.find(e=>e.id===a.value)?.name??a.value),1),L(kx,{modelValue:d.value.cwd,"onUpdate:modelValue":t[3]||=e=>d.value.cwd=e,"device-id":a.value},null,8,[`modelValue`,`device-id`])]),I(`label`,null,[t[10]||=R(`Model`,-1),c.value||l.value?(N(),P(`span`,Nx,`no API key on device — chat needs one`)):z(``,!0),Wn(I(`select`,{"onUpdate:modelValue":t[4]||=e=>d.value.model=e,"aria-label":`New session model`},[(N(!0),P(M,null,j(s.value,e=>(N(),P(`option`,{key:u(e),value:u(e)},T(e.tier)+` / `+T(e.name),9,Px))),128))],512),[[Cs,d.value.model]])])],64)):(N(),P(`p`,Ax,` No device is online. Start one with just backend run or just net up <id>, then try again. `)),p.value?(N(),P(`p`,Fx,T(p.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,onClick:t[5]||=e=>r(`close`)},`Cancel`),I(`button`,{class:`primary`,disabled:f.value||!d.value.model||!d.value.cwd||!o.value},[L(k(Mc),{size:18}),R(T(f.value?`Creating…`:`Create session`),1)],8,Ix)])],32)]))}}),Rx=new Uint8Array(512),zx=new Uint8Array(256);(()=>{let e=1;for(let t=0;t<255;t++)Rx[t]=e,zx[e]=t,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)Rx[e]=Rx[e-255]})();var Bx=(e,t)=>e===0||t===0?0:Rx[zx[e]+zx[t]];function Vx(e){let t=[1];for(let n=0;n<e;n++){let e=Array(t.length+1).fill(0);for(let r=0;r<t.length;r++)e[r]^=t[r],e[r+1]^=Bx(t[r],Rx[n]);t=e}return t}function Hx(e,t){let n=Vx(t),r=Array(t).fill(0);for(let i of e){let e=i^r[0];r.shift(),r.push(0);for(let i=0;i<t;i++)r[i]^=Bx(n[i+1],e)}return r}var Ux=[21,25,29,33,37,41,45,49,53,57,61,65],Wx=[19,34,55,80,108,136,156,194,232,274,324,370],Gx=[7,10,15,20,26,36,40,48,60,72,80,96],Kx=[7,10,15,20,26,18,20,24,30,18,20,24],qx=[[[1,19]],[[1,34]],[[1,55]],[[1,80]],[[1,108]],[[2,68]],[[2,78]],[[2,97]],[[2,116]],[[2,68],[2,69]],[[4,81]],[[2,92],[2,93]]],Jx=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58]],Yx=e=>e<=9?8:16;function Xx(e){for(let t=1;t<=Ux.length;t++)if(4+Yx(t)+e*8<=Wx[t-1]*8)return t;throw Error(`qr: payload too long (${e} bytes; v12L max ${Wx[11]-3})`)}function Zx(e,t){let n=[...new TextEncoder().encode(e)],r=[],i=(e,t)=>{for(let n=t-1;n>=0;n--)r.push(e>>n&1)};i(4,4),i(n.length,Yx(t));for(let e of n)i(e,8);let a=Wx[t-1],o=a*8;for(i(0,Math.min(4,o-r.length));r.length%8!=0;)r.push(0);let s=[236,17],c=0;for(;r.length<o;)i(s[c++%2],8);let l=[];for(let e=0;e<a;e++){let t=0;for(let n=0;n<8;n++)t=t<<1|r[e*8+n];l.push(t)}return l}function Qx(e,t){let n=Kx[e-1],r=[],i=0;for(let[n,a]of qx[e-1])for(let e=0;e<n;e++)r.push(t.slice(i,i+=a));let a=[],o=Math.max(...r.map(e=>e.length));for(let e=0;e<o;e++)for(let t of r)e<t.length&&a.push(t[e]);let s=r.map(e=>Hx(e,n));for(let e=0;e<n;e++)for(let t of s)a.push(t[e]);return a}function $x(e){return Array.from({length:e},()=>Array(e).fill(!1))}function eS(e,t){let n=Ux[t-1],r=(t,r)=>{for(let i=-1;i<=7;i++)for(let a=-1;a<=7;a++){let o=t+i,s=r+a;if(o<0||o>=n||s<0||s>=n)continue;let c=i>=0&&i<=6&&a>=0&&a<=6&&(i===0||i===6||a===0||a===6),l=i>=2&&i<=4&&a>=2&&a<=4;e[o][s]=c||l}};r(0,0),r(0,n-7),r(n-7,0);for(let t=8;t<n-8;t++)e[6][t]=t%2==0,e[t][6]=t%2==0;let i=Jx[t-1];for(let t of i)for(let r of i)if(!(t<=8&&r<=8||t<=8&&r>=n-9||t>=n-9&&r<=8))for(let n=-2;n<=2;n++)for(let i=-2;i<=2;i++)e[t+n][r+i]=Math.max(Math.abs(n),Math.abs(i))!==1;if(e[n-8][8]=!0,t>=7){let r=t<<12;for(let e=17;e>=12;e--)r>>e&1&&(r^=7973<<e-12);let i=t<<12|r&4095;for(let t=0;t<18;t++){let r=(i>>t&1)==1,a=n-11+t%3,o=t/3|0;e[a][o]=r,e[o][a]=r}}}function tS(e){let t=8|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>9&1?1335:0);let r=(t<<10|n)^21522,i=[];for(let e=14;e>=0;e--)i.push((r>>e&1)==1);return i}function nS(e,t){let n=Ux[0]*0+e.length,r=tS(t);for(let t=0;t<=5;t++)e[8][t]=r[t];e[8][7]=r[6],e[8][8]=r[7],e[7][8]=r[8];for(let t=9;t<15;t++)e[14-t][8]=r[t];for(let t=0;t<7;t++)e[n-1-t][8]=r[t];e[8][n-8]=r[7];for(let t=8;t<15;t++)e[8][n-15+t]=r[t];e[n-8][8]=!0}function rS(e,t,n,r){let i=e.length;Ux[n-1]*Ux[n-1];let a=e=>((t[e>>3]??0)>>7-(e&7)&1)==1,o=0,s=!0;for(let t=i-1;t>0;t-=2){t===6&&t--;for(let c=0;c<i;c++){let l=s?i-1-c:c;for(let i of[t,t-1]){if(aS(l,i,n))continue;if(o>=(Wx[n-1]+Gx[n-1])*8){o++;continue}let t=a(o++);iS(l,i,r)&&(t=!t),e[l][i]=t}}s=!s}}function iS(e,t,n){switch(n){case 0:return(e+t)%2==0;case 1:return e%2==0;case 2:return t%3==0;case 3:return(e+t)%3==0;case 4:return(Math.floor(e/2)+Math.floor(t/3))%2==0;case 5:return e*t%2+e*t%3==0;case 6:return(e*t%2+e*t%3)%2==0;default:return((e+t)%2+e*t%3)%2==0}}function aS(e,t,n){let r=Ux[n-1];if(e<=8&&t<=8||e<=8&&t>=r-8||e>=r-8&&t<=8||e===6||t===6||n>=7&&(e>=r-11&&e<=r-9&&t<=5||t>=r-11&&t<=r-9&&e<=5))return!0;let i=Jx[n-1];for(let n of i)for(let a of i)if(!(n<=8&&a<=8||n<=8&&a>=r-9||n>=r-9&&a<=8)&&Math.abs(e-n)<=2&&Math.abs(t-a)<=2)return!0;return!1}function oS(e){let t=e.length,n=0;for(let r=0;r<2;r++)for(let i=0;i<t;i++){let a=1;for(let o=1;o<t;o++)(r===0?e[i][o]:e[o][i])===(r===0?e[i][o-1]:e[o-1][i])?(a++,o===t-1&&a>=5&&(n+=3+(a-5))):(a>=5&&(n+=3+(a-5)),a=1)}for(let r=0;r<t-1;r++)for(let i=0;i<t-1;i++){let t=e[r][i];e[r][i+1]===t&&e[r+1][i]===t&&e[r+1][i+1]===t&&(n+=3)}let r=[!0,!1,!0,!0,!0,!1,!0,!1,!1,!1,!1],i=(e,t)=>{for(let i=0;i+11<=t;i++){let t=!0;for(let n=0;n<11;n++)if(e(i+n)!==r[n]){t=!1;break}t&&(n+=40)}};for(let n=0;n<t;n++)i(t=>e[n][t],t);for(let n=0;n<t;n++)i(t=>e[t][n],t);let a=0;for(let t of e)for(let e of t)e&&a++;let o=a*100/(t*t);return n+=Math.floor(Math.abs(o-50)/5)*10,n}function sS(e,t){let n=Xx(new TextEncoder().encode(e).length),r=Ux[n-1],i=Qx(n,Zx(e,n)),a=$x(r);return eS(a,n),rS(a,i,n,t),nS(a,t),a}function cS(e,t){if(t!==void 0)return sS(e,t);let n;for(let t=0;t<8;t++){let r=sS(e,t),i=oS(r);(!n||i<n.score)&&(n={m:r,score:i})}return n.m}function lS(e,t=160){let n=cS(e),r=n.length,i=t/(r+8),a=``;for(let e=0;e<r;e++)for(let t=0;t<r;t++)n[e][t]&&(a+=`<rect x="${((t+4)*i).toFixed(2)}" y="${((e+4)*i).toFixed(2)}" width="${i.toFixed(3)}" height="${i.toFixed(3)}"/>`);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" shape-rendering="crispEdges"><rect width="${t}" height="${t}" fill="#fff"/><g fill="#000">${a}</g></svg>`}var uS={class:`device-handoff`,"aria-label":`Pair this machine`},dS={class:`row`},fS=[`disabled`],pS=[`disabled`],mS={key:0,class:`target`,"data-testid":`device-url`},hS={key:1,class:`err`},gS=Ug(A({__name:`DeviceHandoff`,props:{offerFragment:{}},setup(e){let t=e,n=O(`4780`),r=O(!1),i=B(()=>{let e=/^\d{1,5}$/.test(n.value)?Number(n.value):0;if(!(!e||e<1||e>65535))return`http://127.0.0.1:${e}/pair#${t.offerFragment}`});function a(){let e=i.value;e&&window.open(e,`_blank`,`noopener`)}async function o(){let e=i.value;if(e)try{await navigator.clipboard.writeText(e),r.value=!0,setTimeout(()=>r.value=!1,1600)}catch{}}return(e,t)=>(N(),P(`section`,uS,[I(`header`,null,[L(k(Cc),{size:18}),t[1]||=I(`h3`,null,`Pair THIS machine`,-1)]),t[4]||=I(`p`,{class:`what`},[R(` If this browser runs on the device itself, open its local pairing page — the offer is relayed inside the link, nothing is sent to the hub. Start `),I(`code`,null,`dpi device`),R(` there first. `)],-1),I(`div`,dS,[I(`label`,null,[t[2]||=R(` local port `,-1),Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,inputmode:`numeric`,spellcheck:`false`,"aria-label":`Local dpi backend port`},null,512),[[bs,n.value]])]),I(`button`,{class:`primary`,type:`button`,disabled:!i.value,onClick:a},[L(k(ac),{size:15}),t[3]||=R(`Open the device page `,-1)],8,fS),I(`button`,{class:`secondary`,type:`button`,disabled:!i.value,onClick:o},[L(k(tc),{size:15}),R(T(r.value?`Copied`:`Copy link`),1)],8,pS)]),i.value?(N(),P(`p`,mS,T(i.value),1)):z(``,!0),i.value?z(``,!0):(N(),P(`p`,hS,`port must be 1–65535`))]))}}),[[`__scopeId`,`data-v-01884b7b`]]);function _S(e){return ES(e)&&!vS(e)&&!AS(e)&&Symbol.asyncIterator in e}function vS(e){return Array.isArray(e)}function yS(e){return typeof e==`bigint`}function bS(e){return typeof e==`boolean`}function xS(e){return e instanceof globalThis.Date}function SS(e){return typeof e==`function`}function CS(e){return ES(e)&&!vS(e)&&!AS(e)&&Symbol.iterator in e}function wS(e){return e===null}function TS(e){return typeof e==`number`}function ES(e){return typeof e==`object`&&!!e}function DS(e){return e instanceof globalThis.RegExp}function OS(e){return typeof e==`string`}function kS(e){return typeof e==`symbol`}function AS(e){return e instanceof globalThis.Uint8Array}function jS(e){return e===void 0}function MS(e){return e.map(e=>LS(e))}function NS(e){return new Date(e.getTime())}function PS(e){return new Uint8Array(e)}function FS(e){return new RegExp(e.source,e.flags)}function IS(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=LS(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=LS(e[n]);return t}function LS(e){return vS(e)?MS(e):xS(e)?NS(e):AS(e)?PS(e):DS(e)?FS(e):ES(e)?IS(e):e}function RS(e){return LS(e)}function zS(e,t){return RS(t===void 0?e:{...t,...e})}function BS(e){return typeof e==`object`&&!!e}function VS(e){return globalThis.Array.isArray(e)&&!globalThis.ArrayBuffer.isView(e)}function HS(e){return e===void 0}function US(e){return typeof e==`number`}var WS;(function(e){e.InstanceMode=`default`,e.ExactOptionalPropertyTypes=!1,e.AllowArrayObject=!1,e.AllowNaN=!1,e.AllowNullVoid=!1;function t(t,n){return e.ExactOptionalPropertyTypes?n in t:t[n]!==void 0}e.IsExactOptionalProperty=t;function n(t){let n=BS(t);return e.AllowArrayObject?n:n&&!VS(t)}e.IsObjectLike=n;function r(e){return n(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}e.IsRecordLike=r;function i(t){return e.AllowNaN?US(t):Number.isFinite(t)}e.IsNumberLike=i;function a(t){let n=HS(t);return e.AllowNullVoid?n||t===null:n}e.IsVoidLike=a})(WS||={});function GS(e){return globalThis.Object.freeze(e).map(e=>XS(e))}function KS(e){return e}function qS(e){return e}function JS(e){return e}function YS(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=XS(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=XS(e[n]);return globalThis.Object.freeze(t)}function XS(e){return vS(e)?GS(e):xS(e)?KS(e):AS(e)?qS(e):DS(e)?JS(e):ES(e)?YS(e):e}function J(e,t){let n=t===void 0?e:{...t,...e};switch(WS.InstanceMode){case`freeze`:return XS(n);case`clone`:return RS(n);default:return n}}var ZS=class extends Error{constructor(e){super(e)}},QS=Symbol.for(`TypeBox.Transform`),$S=Symbol.for(`TypeBox.Readonly`),eC=Symbol.for(`TypeBox.Optional`),tC=Symbol.for(`TypeBox.Hint`),Y=Symbol.for(`TypeBox.Kind`);function nC(e){return ES(e)&&e[$S]===`Readonly`}function rC(e){return ES(e)&&e[eC]===`Optional`}function iC(e){return X(e,`Any`)}function aC(e){return X(e,`Argument`)}function oC(e){return X(e,`Array`)}function sC(e){return X(e,`AsyncIterator`)}function cC(e){return X(e,`BigInt`)}function lC(e){return X(e,`Boolean`)}function uC(e){return X(e,`Computed`)}function dC(e){return X(e,`Constructor`)}function fC(e){return X(e,`Date`)}function pC(e){return X(e,`Function`)}function mC(e){return X(e,`Integer`)}function hC(e){return X(e,`Intersect`)}function gC(e){return X(e,`Iterator`)}function X(e,t){return ES(e)&&Y in e&&e[Y]===t}function _C(e){return bS(e)||TS(e)||OS(e)}function vC(e){return X(e,`Literal`)}function yC(e){return X(e,`MappedKey`)}function bC(e){return X(e,`MappedResult`)}function xC(e){return X(e,`Never`)}function SC(e){return X(e,`Not`)}function CC(e){return X(e,`Null`)}function wC(e){return X(e,`Number`)}function TC(e){return X(e,`Object`)}function EC(e){return X(e,`Promise`)}function DC(e){return X(e,`Record`)}function OC(e){return X(e,`Ref`)}function kC(e){return X(e,`RegExp`)}function AC(e){return X(e,`String`)}function jC(e){return X(e,`Symbol`)}function MC(e){return X(e,`TemplateLiteral`)}function NC(e){return X(e,`This`)}function PC(e){return ES(e)&&QS in e}function FC(e){return X(e,`Tuple`)}function IC(e){return X(e,`Undefined`)}function LC(e){return X(e,`Union`)}function RC(e){return X(e,`Uint8Array`)}function zC(e){return X(e,`Unknown`)}function BC(e){return X(e,`Unsafe`)}function VC(e){return X(e,`Void`)}function HC(e){return ES(e)&&Y in e&&OS(e[Y])}function UC(e){return iC(e)||aC(e)||oC(e)||lC(e)||cC(e)||sC(e)||uC(e)||dC(e)||fC(e)||pC(e)||mC(e)||hC(e)||gC(e)||vC(e)||yC(e)||bC(e)||xC(e)||SC(e)||CC(e)||wC(e)||TC(e)||EC(e)||DC(e)||OC(e)||kC(e)||AC(e)||jC(e)||MC(e)||NC(e)||FC(e)||IC(e)||LC(e)||RC(e)||zC(e)||BC(e)||VC(e)||HC(e)}var WC=`Argument.Any.Array.AsyncIterator.BigInt.Boolean.Computed.Constructor.Date.Enum.Function.Integer.Intersect.Iterator.Literal.MappedKey.MappedResult.Not.Null.Number.Object.Promise.Record.Ref.RegExp.String.Symbol.TemplateLiteral.This.Tuple.Undefined.Union.Uint8Array.Unknown.Void`.split(`.`);function GC(e){try{return new RegExp(e),!0}catch{return!1}}function KC(e){if(!OS(e))return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n>=7&&n<=13||n===27||n===127)return!1}return!0}function qC(e){return XC(e)||Gw(e)}function JC(e){return jS(e)||yS(e)}function YC(e){return jS(e)||TS(e)}function XC(e){return jS(e)||bS(e)}function ZC(e){return jS(e)||OS(e)}function QC(e){return jS(e)||OS(e)&&KC(e)&&GC(e)}function $C(e){return jS(e)||OS(e)&&KC(e)}function ew(e){return jS(e)||Gw(e)}function tw(e){return ES(e)&&e[eC]===`Optional`}function nw(e){return Z(e,`Any`)&&ZC(e.$id)}function rw(e){return Z(e,`Argument`)&&TS(e.index)}function iw(e){return Z(e,`Array`)&&e.type===`array`&&ZC(e.$id)&&Gw(e.items)&&YC(e.minItems)&&YC(e.maxItems)&&XC(e.uniqueItems)&&ew(e.contains)&&YC(e.minContains)&&YC(e.maxContains)}function aw(e){return Z(e,`AsyncIterator`)&&e.type===`AsyncIterator`&&ZC(e.$id)&&Gw(e.items)}function ow(e){return Z(e,`BigInt`)&&e.type===`bigint`&&ZC(e.$id)&&JC(e.exclusiveMaximum)&&JC(e.exclusiveMinimum)&&JC(e.maximum)&&JC(e.minimum)&&JC(e.multipleOf)}function sw(e){return Z(e,`Boolean`)&&e.type===`boolean`&&ZC(e.$id)}function cw(e){return Z(e,`Computed`)&&OS(e.target)&&vS(e.parameters)&&e.parameters.every(e=>Gw(e))}function lw(e){return Z(e,`Constructor`)&&e.type===`Constructor`&&ZC(e.$id)&&vS(e.parameters)&&e.parameters.every(e=>Gw(e))&&Gw(e.returns)}function uw(e){return Z(e,`Date`)&&e.type===`Date`&&ZC(e.$id)&&YC(e.exclusiveMaximumTimestamp)&&YC(e.exclusiveMinimumTimestamp)&&YC(e.maximumTimestamp)&&YC(e.minimumTimestamp)&&YC(e.multipleOfTimestamp)}function dw(e){return Z(e,`Function`)&&e.type===`Function`&&ZC(e.$id)&&vS(e.parameters)&&e.parameters.every(e=>Gw(e))&&Gw(e.returns)}function fw(e){return Z(e,`Integer`)&&e.type===`integer`&&ZC(e.$id)&&YC(e.exclusiveMaximum)&&YC(e.exclusiveMinimum)&&YC(e.maximum)&&YC(e.minimum)&&YC(e.multipleOf)}function pw(e){return ES(e)&&Object.entries(e).every(([e,t])=>KC(e)&&Gw(t))}function mw(e){return Z(e,`Intersect`)&&!(OS(e.type)&&e.type!==`object`)&&vS(e.allOf)&&e.allOf.every(e=>Gw(e)&&!Iw(e))&&ZC(e.type)&&(XC(e.unevaluatedProperties)||ew(e.unevaluatedProperties))&&ZC(e.$id)}function hw(e){return Z(e,`Iterator`)&&e.type===`Iterator`&&ZC(e.$id)&&Gw(e.items)}function Z(e,t){return ES(e)&&Y in e&&e[Y]===t}function gw(e){return yw(e)&&OS(e.const)}function _w(e){return yw(e)&&TS(e.const)}function vw(e){return yw(e)&&bS(e.const)}function yw(e){return Z(e,`Literal`)&&ZC(e.$id)&&bw(e.const)}function bw(e){return bS(e)||TS(e)||OS(e)}function xw(e){return Z(e,`MappedKey`)&&vS(e.keys)&&e.keys.every(e=>TS(e)||OS(e))}function Sw(e){return Z(e,`MappedResult`)&&pw(e.properties)}function Cw(e){return Z(e,`Never`)&&ES(e.not)&&Object.getOwnPropertyNames(e.not).length===0}function ww(e){return Z(e,`Not`)&&Gw(e.not)}function Tw(e){return Z(e,`Null`)&&e.type===`null`&&ZC(e.$id)}function Ew(e){return Z(e,`Number`)&&e.type===`number`&&ZC(e.$id)&&YC(e.exclusiveMaximum)&&YC(e.exclusiveMinimum)&&YC(e.maximum)&&YC(e.minimum)&&YC(e.multipleOf)}function Dw(e){return Z(e,`Object`)&&e.type===`object`&&ZC(e.$id)&&pw(e.properties)&&qC(e.additionalProperties)&&YC(e.minProperties)&&YC(e.maxProperties)}function Ow(e){return Z(e,`Promise`)&&e.type===`Promise`&&ZC(e.$id)&&Gw(e.item)}function kw(e){return Z(e,`Record`)&&e.type===`object`&&ZC(e.$id)&&qC(e.additionalProperties)&&ES(e.patternProperties)&&(e=>{let t=Object.getOwnPropertyNames(e.patternProperties);return t.length===1&&GC(t[0])&&ES(e.patternProperties)&&Gw(e.patternProperties[t[0]])})(e)}function Aw(e){return Z(e,`Ref`)&&ZC(e.$id)&&OS(e.$ref)}function jw(e){return Z(e,`RegExp`)&&ZC(e.$id)&&OS(e.source)&&OS(e.flags)&&YC(e.maxLength)&&YC(e.minLength)}function Mw(e){return Z(e,`String`)&&e.type===`string`&&ZC(e.$id)&&YC(e.minLength)&&YC(e.maxLength)&&QC(e.pattern)&&$C(e.format)}function Nw(e){return Z(e,`Symbol`)&&e.type===`symbol`&&ZC(e.$id)}function Pw(e){return Z(e,`TemplateLiteral`)&&e.type===`string`&&OS(e.pattern)&&e.pattern[0]===`^`&&e.pattern[e.pattern.length-1]===`$`}function Fw(e){return Z(e,`This`)&&ZC(e.$id)&&OS(e.$ref)}function Iw(e){return ES(e)&&QS in e}function Lw(e){return Z(e,`Tuple`)&&e.type===`array`&&ZC(e.$id)&&TS(e.minItems)&&TS(e.maxItems)&&e.minItems===e.maxItems&&(jS(e.items)&&jS(e.additionalItems)&&e.minItems===0||vS(e.items)&&e.items.every(e=>Gw(e)))}function Rw(e){return Z(e,`Undefined`)&&e.type===`undefined`&&ZC(e.$id)}function zw(e){return Z(e,`Union`)&&ZC(e.$id)&&ES(e)&&vS(e.anyOf)&&e.anyOf.every(e=>Gw(e))}function Bw(e){return Z(e,`Uint8Array`)&&e.type===`Uint8Array`&&ZC(e.$id)&&YC(e.minByteLength)&&YC(e.maxByteLength)}function Vw(e){return Z(e,`Unknown`)&&ZC(e.$id)}function Hw(e){return Z(e,`Unsafe`)}function Uw(e){return Z(e,`Void`)&&e.type===`void`&&ZC(e.$id)}function Ww(e){return ES(e)&&Y in e&&OS(e[Y])&&!WC.includes(e[Y])}function Gw(e){return ES(e)&&(nw(e)||rw(e)||iw(e)||sw(e)||ow(e)||aw(e)||cw(e)||lw(e)||uw(e)||dw(e)||fw(e)||mw(e)||hw(e)||yw(e)||xw(e)||Sw(e)||Cw(e)||ww(e)||Tw(e)||Ew(e)||Dw(e)||Ow(e)||kw(e)||Aw(e)||jw(e)||Mw(e)||Nw(e)||Pw(e)||Fw(e)||Lw(e)||Rw(e)||zw(e)||Bw(e)||Vw(e)||Hw(e)||Uw(e)||Ww(e))}var Kw=`(true|false)`,qw=`(0|[1-9][0-9]*)`,Jw=`(.*)`,Yw=`(?!.*)`;`${Kw}`;var Xw=`^${qw}$`,Zw=`^${Jw}$`,Qw=`^${Yw}$`;function $w(e,t){return e.includes(t)}function eT(e){return[...new Set(e)]}function tT(e,t){return e.filter(e=>t.includes(e))}function nT(e,t){return e.reduce((e,t)=>tT(e,t),t)}function rT(e){return e.length===1?e[0]:e.length>1?nT(e.slice(1),e[0]):[]}function iT(e){let t=[];for(let n of e)t.push(...n);return t}function aT(e){return J({[Y]:`Any`},e)}function oT(e,t){return J({[Y]:`Array`,type:`array`,items:e},t)}function sT(e){return J({[Y]:`Argument`,index:e})}function cT(e,t){return J({[Y]:`AsyncIterator`,type:`AsyncIterator`,items:e},t)}function lT(e,t,n){return J({[Y]:`Computed`,target:e,parameters:t},n)}function uT(e,t){let{[t]:n,...r}=e;return r}function dT(e,t){return t.reduce((e,t)=>uT(e,t),e)}function fT(e){return J({[Y]:`Never`,not:{}},e)}function pT(e){return J({[Y]:`MappedResult`,properties:e})}function mT(e,t,n){return J({[Y]:`Constructor`,type:`Constructor`,parameters:e,returns:t},n)}function hT(e,t,n){return J({[Y]:`Function`,type:`Function`,parameters:e,returns:t},n)}function gT(e,t){return J({[Y]:`Union`,anyOf:e},t)}function _T(e){return e.some(e=>rC(e))}function vT(e){return e.map(e=>rC(e)?yT(e):e)}function yT(e){return dT(e,[eC])}function bT(e,t){return _T(e)?oD(gT(vT(e),t)):gT(vT(e),t)}function xT(e,t){return e.length===1?J(e[0],t):e.length===0?fT(t):bT(e,t)}function ST(e,t){return e.length===0?fT(t):e.length===1?J(e[0],t):gT(e,t)}var CT=class extends ZS{};function wT(e){return e.replace(/\\\$/g,`$`).replace(/\\\*/g,`*`).replace(/\\\^/g,`^`).replace(/\\\|/g,`|`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)}function TT(e,t,n){return e[t]===n&&e.charCodeAt(t-1)!==92}function ET(e,t){return TT(e,t,`(`)}function DT(e,t){return TT(e,t,`)`)}function OT(e,t){return TT(e,t,`|`)}function kT(e){if(!(ET(e,0)&&DT(e,e.length-1)))return!1;let t=0;for(let n=0;n<e.length;n++)if(ET(e,n)&&(t+=1),DT(e,n)&&--t,t===0&&n!==e.length-1)return!1;return!0}function AT(e){return e.slice(1,e.length-1)}function jT(e){let t=0;for(let n=0;n<e.length;n++)if(ET(e,n)&&(t+=1),DT(e,n)&&--t,OT(e,n)&&t===0)return!0;return!1}function MT(e){for(let t=0;t<e.length;t++)if(ET(e,t))return!0;return!1}function NT(e){let[t,n]=[0,0],r=[];for(let i=0;i<e.length;i++)if(ET(e,i)&&(t+=1),DT(e,i)&&--t,OT(e,i)&&t===0){let t=e.slice(n,i);t.length>0&&r.push(FT(t)),n=i+1}let i=e.slice(n);return i.length>0&&r.push(FT(i)),r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`or`,expr:r}}function PT(e){function t(e,t){if(!ET(e,t))throw new CT(`TemplateLiteralParser: Index must point to open parens`);let n=0;for(let r=t;r<e.length;r++)if(ET(e,r)&&(n+=1),DT(e,r)&&--n,n===0)return[t,r];throw new CT(`TemplateLiteralParser: Unclosed group parens in expression`)}function n(e,t){for(let n=t;n<e.length;n++)if(ET(e,n))return[t,n];return[t,e.length]}let r=[];for(let i=0;i<e.length;i++)if(ET(e,i)){let[n,a]=t(e,i),o=e.slice(n,a+1);r.push(FT(o)),i=a}else{let[t,a]=n(e,i),o=e.slice(t,a);o.length>0&&r.push(FT(o)),i=a-1}return r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`and`,expr:r}}function FT(e){return kT(e)?FT(AT(e)):jT(e)?NT(e):MT(e)?PT(e):{type:`const`,const:wT(e)}}function IT(e){return FT(e.slice(1,e.length-1))}var LT=class extends ZS{};function RT(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`0`&&e.expr[1].type===`const`&&e.expr[1].const===`[1-9][0-9]*`}function zT(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`true`&&e.expr[1].type===`const`&&e.expr[1].const===`false`}function BT(e){return e.type===`const`&&e.const===`.*`}function VT(e){return RT(e)||BT(e)?!1:zT(e)?!0:e.type===`and`||e.type===`or`?e.expr.every(e=>VT(e)):e.type===`const`||(()=>{throw new LT(`Unknown expression type`)})()}function HT(e){return VT(IT(e.pattern))}var UT=class extends ZS{};function*WT(e){if(e.length===1)return yield*e[0];for(let t of e[0])for(let n of WT(e.slice(1)))yield`${t}${n}`}function*GT(e){return yield*WT(e.expr.map(e=>[...JT(e)]))}function*KT(e){for(let t of e.expr)yield*JT(t)}function*qT(e){return yield e.const}function*JT(e){return e.type===`and`?yield*GT(e):e.type===`or`?yield*KT(e):e.type===`const`?yield*qT(e):(()=>{throw new UT(`Unknown expression`)})()}function YT(e){let t=IT(e.pattern);return VT(t)?[...JT(t)]:[]}function XT(e,t){return J({[Y]:`Literal`,const:e,type:typeof e},t)}function ZT(e){return J({[Y]:`Boolean`,type:`boolean`},e)}function QT(e){return J({[Y]:`BigInt`,type:`bigint`},e)}function $T(e){return J({[Y]:`Number`,type:`number`},e)}function eE(e){return J({[Y]:`String`,type:`string`},e)}function*tE(e){let t=e.trim().replace(/"|'/g,``);return t===`boolean`?yield ZT():t===`number`?yield $T():t===`bigint`?yield QT():t===`string`?yield eE():yield(()=>{let e=t.split(`|`).map(e=>XT(e.trim()));return e.length===0?fT():e.length===1?e[0]:xT(e)})()}function*nE(e){if(e[1]!==`{`)return yield*[XT(`$`),...rE(e.slice(1))];for(let t=2;t<e.length;t++)if(e[t]===`}`){let n=tE(e.slice(2,t)),r=rE(e.slice(t+1));return yield*[...n,...r]}yield XT(e)}function*rE(e){for(let t=0;t<e.length;t++)if(e[t]===`$`)return yield*[XT(e.slice(0,t)),...nE(e.slice(t))];yield XT(e)}function iE(e){return[...rE(e)]}var aE=class extends ZS{};function oE(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function sE(e,t){return MC(e)?e.pattern.slice(1,e.pattern.length-1):LC(e)?`(${e.anyOf.map(e=>sE(e,t)).join(`|`)})`:wC(e)||mC(e)||cC(e)?`${t}${qw}`:AC(e)?`${t}${Jw}`:vC(e)?`${t}${oE(e.const.toString())}`:lC(e)?`${t}${Kw}`:(()=>{throw new aE(`Unexpected Kind '${e[Y]}'`)})()}function cE(e){return`^${e.map(e=>sE(e,``)).join(``)}$`}function lE(e){return xT(YT(e).map(e=>XT(e)))}function uE(e,t){let n=OS(e)?cE(iE(e)):cE(e);return J({[Y]:`TemplateLiteral`,type:`string`,pattern:n},t)}function dE(e){return YT(e).map(e=>e.toString())}function fE(e){let t=[];for(let n of e)t.push(...mE(n));return t}function pE(e){return[e.toString()]}function mE(e){return[...new Set(MC(e)?dE(e):LC(e)?fE(e.anyOf):vC(e)?pE(e.const):wC(e)||mC(e)?[`[number]`]:[])]}function hE(e,t,n){let r={};for(let i of Object.getOwnPropertyNames(t))r[i]=kE(e,mE(t[i]),n);return r}function gE(e,t,n){return hE(e,t.properties,n)}function _E(e,t,n){return pT(gE(e,t,n))}function vE(e,t){return e.map(e=>EE(e,t))}function yE(e){return e.filter(e=>!xC(e))}function bE(e,t){return hD(yE(vE(e,t)))}function xE(e){return e.some(e=>xC(e))?[]:e}function SE(e,t){return xT(xE(vE(e,t)))}function CE(e,t){return t in e?e[t]:t===`[number]`?xT(e):fT()}function wE(e,t){return t===`[number]`?e:fT()}function TE(e,t){return t in e?e[t]:fT()}function EE(e,t){return hC(e)?bE(e.allOf,t):LC(e)?SE(e.anyOf,t):FC(e)?CE(e.items??[],t):oC(e)?wE(e.items,t):TC(e)?TE(e.properties,t):fT()}function DE(e,t){return t.map(t=>EE(e,t))}function OE(e,t){return xT(DE(e,t))}function kE(e,t,n){if(OC(e)||OC(t)){if(!UC(e)||!UC(t))throw new ZS(`Index types using Ref parameters require both Type and Key to be of TSchema`);return lT(`Index`,[e,t])}return bC(t)?_E(e,t,n):yC(t)?NE(e,t,n):J(UC(t)?OE(e,mE(t)):OE(e,t),n)}function AE(e,t,n){return{[t]:kE(e,[t],RS(n))}}function jE(e,t,n){return t.reduce((t,r)=>({...t,...AE(e,r,n)}),{})}function ME(e,t,n){return jE(e,t.keys,n)}function NE(e,t,n){return pT(ME(e,t,n))}function PE(e,t){return J({[Y]:`Iterator`,type:`Iterator`,items:e},t)}function FE(e){return globalThis.Object.keys(e).filter(t=>!rC(e[t]))}function IE(e,t){let n=FE(e);return J(n.length>0?{[Y]:`Object`,type:`object`,required:n,properties:e}:{[Y]:`Object`,type:`object`,properties:e},t)}var LE=IE;function RE(e,t){return J({[Y]:`Promise`,type:`Promise`,item:e},t)}function zE(e){return J(dT(e,[$S]))}function BE(e){return J({...e,[$S]:`Readonly`})}function VE(e,t){return t===!1?zE(e):BE(e)}function HE(e,t){let n=t??!0;return bC(e)?GE(e,n):VE(e,n)}function UE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=HE(e[r],t);return n}function WE(e,t){return UE(e.properties,t)}function GE(e,t){return pT(WE(e,t))}function KE(e,t){return J(e.length>0?{[Y]:`Tuple`,type:`array`,items:e,additionalItems:!1,minItems:e.length,maxItems:e.length}:{[Y]:`Tuple`,type:`array`,minItems:e.length,maxItems:e.length},t)}function qE(e,t){return e in t?eD(e,t[e]):pT(t)}function JE(e){return{[e]:XT(e)}}function YE(e){let t={};for(let n of e)t[n]=XT(n);return t}function XE(e,t){return $w(t,e)?JE(e):YE(t)}function ZE(e,t){return qE(e,XE(e,t))}function QE(e,t){return t.map(t=>eD(e,t))}function $E(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=eD(e,t[r]);return n}function eD(e,t){let n={...t};return rC(t)?oD(eD(e,dT(t,[eC]))):nC(t)?HE(eD(e,dT(t,[$S]))):bC(t)?qE(e,t.properties):yC(t)?ZE(e,t.keys):dC(t)?mT(QE(e,t.parameters),eD(e,t.returns),n):pC(t)?hT(QE(e,t.parameters),eD(e,t.returns),n):sC(t)?cT(eD(e,t.items),n):gC(t)?PE(eD(e,t.items),n):hC(t)?gD(QE(e,t.allOf),n):LC(t)?ST(QE(e,t.anyOf),n):FC(t)?KE(QE(e,t.items??[]),n):TC(t)?LE($E(e,t.properties),n):oC(t)?oT(eD(e,t.items),n):EC(t)?RE(eD(e,t.item),n):t}function tD(e,t){let n={};for(let r of e)n[r]=eD(r,t);return n}function nD(e,t,n){let r=UC(e)?mE(e):e;return LE(tD(r,t({[Y]:`MappedKey`,keys:r})),n)}function rD(e){return J(dT(e,[eC]))}function iD(e){return J({...e,[eC]:`Optional`})}function aD(e,t){return t===!1?rD(e):iD(e)}function oD(e,t){let n=t??!0;return bC(e)?lD(e,n):aD(e,n)}function sD(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=oD(e[r],t);return n}function cD(e,t){return sD(e.properties,t)}function lD(e,t){return pT(cD(e,t))}function uD(e,t={}){let n=e.every(e=>TC(e)),r=UC(t.unevaluatedProperties)?{unevaluatedProperties:t.unevaluatedProperties}:{};return J(t.unevaluatedProperties===!1||UC(t.unevaluatedProperties)||n?{...r,[Y]:`Intersect`,type:`object`,allOf:e}:{...r,[Y]:`Intersect`,allOf:e},t)}function dD(e){return e.every(e=>rC(e))}function fD(e){return dT(e,[eC])}function pD(e){return e.map(e=>rC(e)?fD(e):e)}function mD(e,t){return dD(e)?oD(uD(pD(e),t)):uD(pD(e),t)}function hD(e,t={}){if(e.length===1)return J(e[0],t);if(e.length===0)return fT(t);if(e.some(e=>PC(e)))throw Error(`Cannot intersect transform types`);return mD(e,t)}function gD(e,t){if(e.length===1)return J(e[0],t);if(e.length===0)return fT(t);if(e.some(e=>PC(e)))throw Error(`Cannot intersect transform types`);return uD(e,t)}function _D(...e){let[t,n]=typeof e[0]==`string`?[e[0],e[1]]:[e[0].$id,e[1]];if(typeof t!=`string`)throw new ZS(`Ref: $ref must be a string`);return J({[Y]:`Ref`,$ref:t},n)}function vD(e,t){return lT(`Awaited`,[lT(e,t)])}function yD(e){return lT(`Awaited`,[_D(e)])}function bD(e){return gD(CD(e))}function xD(e){return ST(CD(e))}function SD(e){return wD(e)}function CD(e){return e.map(e=>wD(e))}function wD(e,t){return J(uC(e)?vD(e.target,e.parameters):hC(e)?bD(e.allOf):LC(e)?xD(e.anyOf):EC(e)?SD(e.item):OC(e)?yD(e.$ref):e,t)}function TD(e){let t=[];for(let n of e)t.push(MD(n));return t}function ED(e){return iT(TD(e))}function DD(e){return rT(TD(e))}function OD(e){return e.map((e,t)=>t.toString())}function kD(e){return[`[number]`]}function AD(e){return globalThis.Object.getOwnPropertyNames(e)}function jD(e){return ND?globalThis.Object.getOwnPropertyNames(e).map(e=>e[0]===`^`&&e[e.length-1]===`$`?e.slice(1,e.length-1):e):[]}function MD(e){return hC(e)?ED(e.allOf):LC(e)?DD(e.anyOf):FC(e)?OD(e.items??[]):oC(e)?kD(e.items):TC(e)?AD(e.properties):DC(e)?jD(e.patternProperties):[]}var ND=!1;function PD(e,t){return lT(`KeyOf`,[lT(e,t)])}function FD(e){return lT(`KeyOf`,[_D(e)])}function ID(e,t){return J(xT(LD(MD(e))),t)}function LD(e){return e.map(e=>e===`[number]`?$T():XT(e))}function RD(e,t){return uC(e)?PD(e.target,e.parameters):OC(e)?FD(e.$ref):bC(e)?VD(e,t):ID(e,t)}function zD(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=RD(e[r],RS(t));return n}function BD(e,t){return zD(e.properties,t)}function VD(e,t){return pT(BD(e,t))}function HD(e){let t=[];for(let n of e)t.push(...MD(n));return eT(t)}function UD(e){return e.filter(e=>!xC(e))}function WD(e,t){let n=[];for(let r of e)n.push(...DE(r,[t]));return UD(n)}function GD(e,t){let n={};for(let r of t)n[r]=hD(WD(e,r));return n}function KD(e,t){return LE(GD(e,HD(e)),t)}function qD(e){return J({[Y]:`Date`,type:`Date`},e)}function JD(e){return J({[Y]:`Null`,type:`null`},e)}function YD(e){return J({[Y]:`Symbol`,type:`symbol`},e)}function XD(e){return J({[Y]:`Undefined`,type:`undefined`},e)}function ZD(e){return J({[Y]:`Uint8Array`,type:`Uint8Array`},e)}function QD(e){return J({[Y]:`Unknown`},e)}function $D(e){return e.map(e=>nO(e,!1))}function eO(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=HE(nO(e[n],!1));return t}function tO(e,t){return t===!0?e:HE(e)}function nO(e,t){return _S(e)||CS(e)?tO(aT(),t):vS(e)?HE(KE($D(e))):AS(e)?ZD():xS(e)?qD():ES(e)?tO(LE(eO(e)),t):SS(e)?tO(hT([],QD()),t):jS(e)?XD():wS(e)?JD():kS(e)?YD():yS(e)?QT():TS(e)||bS(e)||OS(e)?XT(e):LE({})}function rO(e,t){return J(nO(e,!0),t)}function iO(e,t){return dC(e)?KE(e.parameters,t):fT(t)}function aO(e,t){if(jS(e))throw Error(`Enum undefined or empty`);let n=globalThis.Object.getOwnPropertyNames(e).filter(e=>isNaN(e)).map(t=>e[t]);return ST([...new Set(n)].map(e=>XT(e)),{...t,[tC]:`Enum`})}var oO=class extends ZS{},Q;(function(e){e[e.Union=0]=`Union`,e[e.True=1]=`True`,e[e.False=2]=`False`})(Q||={});function sO(e){return e===Q.False?e:Q.True}function cO(e){throw new oO(e)}function lO(e){return Cw(e)||mw(e)||zw(e)||Vw(e)||nw(e)}function uO(e,t){return Cw(t)?OO(e,t):mw(t)?wO(e,t):zw(t)?dk(e,t):Vw(t)?pk(e,t):nw(t)?dO(e,t):cO(`StructuralRight`)}function dO(e,t){return Q.True}function fO(e,t){return mw(t)?wO(e,t):zw(t)&&t.anyOf.some(e=>nw(e)||Vw(e))?Q.True:zw(t)?Q.Union:Vw(t)||nw(t)?Q.True:Q.Union}function pO(e,t){return Vw(e)?Q.False:nw(e)?Q.Union:Cw(e)?Q.True:Q.False}function mO(e,t){return Dw(t)&&GO(t)?Q.True:lO(t)?uO(e,t):iw(t)?sO(_k(e.items,t.items)):Q.False}function hO(e,t){return lO(t)?uO(e,t):aw(t)?sO(_k(e.items,t.items)):Q.False}function gO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):ow(t)?Q.True:Q.False}function _O(e,t){return vw(e)||sw(e)?Q.True:Q.False}function vO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):sw(t)?Q.True:Q.False}function yO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):lw(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>sO(_k(t.parameters[n],e))===Q.True)?sO(_k(e.returns,t.returns)):Q.False:Q.False}function bO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):uw(t)?Q.True:Q.False}function xO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):dw(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>sO(_k(t.parameters[n],e))===Q.True)?sO(_k(e.returns,t.returns)):Q.False:Q.False}function SO(e,t){return yw(e)&&TS(e.const)||Ew(e)||fw(e)?Q.True:Q.False}function CO(e,t){return fw(t)||Ew(t)?Q.True:lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Q.False}function wO(e,t){return t.allOf.every(t=>_k(e,t)===Q.True)?Q.True:Q.False}function TO(e,t){return e.allOf.some(e=>_k(e,t)===Q.True)?Q.True:Q.False}function EO(e,t){return lO(t)?uO(e,t):hw(t)?sO(_k(e.items,t.items)):Q.False}function DO(e,t){return yw(t)&&t.const===e.const?Q.True:lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Mw(t)?nk(e,t):Ew(t)?NO(e,t):fw(t)?SO(e,t):sw(t)?_O(e,t):Q.False}function OO(e,t){return Q.False}function kO(e,t){return Q.True}function AO(e){let[t,n]=[e,0];for(;ww(t);)t=t.not,n+=1;return n%2==0?t:QD()}function jO(e,t){return ww(e)?_k(AO(e),t):ww(t)?_k(e,AO(t)):cO(`Invalid fallthrough for Not`)}function MO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Tw(t)?Q.True:Q.False}function NO(e,t){return _w(e)||Ew(e)||fw(e)?Q.True:Q.False}function PO(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):fw(t)||Ew(t)?Q.True:Q.False}function FO(e,t){return Object.getOwnPropertyNames(e.properties).length===t}function IO(e){return GO(e)}function LO(e){return FO(e,0)||FO(e,1)&&`description`in e.properties&&zw(e.properties.description)&&e.properties.description.anyOf.length===2&&(Mw(e.properties.description.anyOf[0])&&Rw(e.properties.description.anyOf[1])||Mw(e.properties.description.anyOf[1])&&Rw(e.properties.description.anyOf[0]))}function RO(e){return FO(e,0)}function zO(e){return FO(e,0)}function BO(e){return FO(e,0)}function VO(e){return FO(e,0)}function HO(e){return GO(e)}function UO(e){let t=$T();return FO(e,0)||FO(e,1)&&`length`in e.properties&&sO(_k(e.properties.length,t))===Q.True}function WO(e){return FO(e,0)}function GO(e){let t=$T();return FO(e,0)||FO(e,1)&&`length`in e.properties&&sO(_k(e.properties.length,t))===Q.True}function KO(e){let t=hT([aT()],aT());return FO(e,0)||FO(e,1)&&`then`in e.properties&&sO(_k(e.properties.then,t))===Q.True}function qO(e,t){return _k(e,t)===Q.False||tw(e)&&!tw(t)?Q.False:Q.True}function JO(e,t){return Vw(e)?Q.False:nw(e)?Q.Union:Cw(e)||gw(e)&&IO(t)||_w(e)&&RO(t)||vw(e)&&zO(t)||Nw(e)&&LO(t)||ow(e)&&BO(t)||Mw(e)&&IO(t)||Nw(e)&&LO(t)||Ew(e)&&RO(t)||fw(e)&&RO(t)||sw(e)&&zO(t)||Bw(e)&&HO(t)||uw(e)&&VO(t)||lw(e)&&WO(t)||dw(e)&&UO(t)?Q.True:kw(e)&&Mw(ZO(e))?t[tC]===`Record`?Q.True:Q.False:kw(e)&&Ew(ZO(e))&&FO(t,0)?Q.True:Q.False}function YO(e,t){return lO(t)?uO(e,t):kw(t)?$O(e,t):Dw(t)?(()=>{for(let n of Object.getOwnPropertyNames(t.properties)){if(!(n in e.properties)&&!tw(t.properties[n]))return Q.False;if(tw(t.properties[n]))return Q.True;if(qO(e.properties[n],t.properties[n])===Q.False)return Q.False}return Q.True})():Q.False}function XO(e,t){return lO(t)?uO(e,t):Dw(t)&&KO(t)?Q.True:Ow(t)?sO(_k(e.item,t.item)):Q.False}function ZO(e){return Xw in e.patternProperties?$T():Zw in e.patternProperties?eE():cO(`Unknown record key pattern`)}function QO(e){return Xw in e.patternProperties?e.patternProperties[Xw]:Zw in e.patternProperties?e.patternProperties[Zw]:cO(`Unable to get record value schema`)}function $O(e,t){let[n,r]=[ZO(t),QO(t)];return gw(e)&&Ew(n)&&sO(_k(e,r))===Q.True?Q.True:Bw(e)&&Ew(n)||Mw(e)&&Ew(n)||iw(e)&&Ew(n)?_k(e,r):Dw(e)?(()=>{for(let t of Object.getOwnPropertyNames(e.properties))if(qO(r,e.properties[t])===Q.False)return Q.False;return Q.True})():Q.False}function ek(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?_k(QO(e),QO(t)):Q.False}function tk(e,t){return _k(jw(e)?eE():e,jw(t)?eE():t)}function nk(e,t){return yw(e)&&OS(e.const)||Mw(e)?Q.True:Q.False}function rk(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Mw(t)?Q.True:Q.False}function ik(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Nw(t)?Q.True:Q.False}function ak(e,t){return Pw(e)?_k(lE(e),t):Pw(t)?_k(e,lE(t)):cO(`Invalid fallthrough for TemplateLiteral`)}function ok(e,t){return iw(t)&&e.items!==void 0&&e.items.every(e=>_k(e,t.items)===Q.True)}function sk(e,t){return Cw(e)?Q.True:Vw(e)?Q.False:nw(e)?Q.Union:Q.False}function ck(e,t){return lO(t)?uO(e,t):Dw(t)&&GO(t)||iw(t)&&ok(e,t)?Q.True:Lw(t)?jS(e.items)&&!jS(t.items)||!jS(e.items)&&jS(t.items)?Q.False:jS(e.items)&&!jS(t.items)||e.items.every((e,n)=>_k(e,t.items[n])===Q.True)?Q.True:Q.False:Q.False}function lk(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Bw(t)?Q.True:Q.False}function uk(e,t){return lO(t)?uO(e,t):Dw(t)?JO(e,t):kw(t)?$O(e,t):Uw(t)?hk(e,t):Rw(t)?Q.True:Q.False}function dk(e,t){return t.anyOf.some(t=>_k(e,t)===Q.True)?Q.True:Q.False}function fk(e,t){return e.anyOf.every(e=>_k(e,t)===Q.True)?Q.True:Q.False}function pk(e,t){return Q.True}function mk(e,t){return Cw(t)?OO(e,t):mw(t)?wO(e,t):zw(t)?dk(e,t):nw(t)?dO(e,t):Mw(t)?nk(e,t):Ew(t)?NO(e,t):fw(t)?SO(e,t):sw(t)?_O(e,t):iw(t)?pO(e,t):Lw(t)?sk(e,t):Dw(t)?JO(e,t):Vw(t)?Q.True:Q.False}function hk(e,t){return Rw(e)||Rw(e)?Q.True:Q.False}function gk(e,t){return mw(t)?wO(e,t):zw(t)?dk(e,t):Vw(t)?pk(e,t):nw(t)?dO(e,t):Dw(t)?JO(e,t):Uw(t)?Q.True:Q.False}function _k(e,t){return Pw(e)||Pw(t)?ak(e,t):jw(e)||jw(t)?tk(e,t):ww(e)||ww(t)?jO(e,t):nw(e)?fO(e,t):iw(e)?mO(e,t):ow(e)?gO(e,t):sw(e)?vO(e,t):aw(e)?hO(e,t):lw(e)?yO(e,t):uw(e)?bO(e,t):dw(e)?xO(e,t):fw(e)?CO(e,t):mw(e)?TO(e,t):hw(e)?EO(e,t):yw(e)?DO(e,t):Cw(e)?kO(e,t):Tw(e)?MO(e,t):Ew(e)?PO(e,t):Dw(e)?YO(e,t):kw(e)?ek(e,t):Mw(e)?rk(e,t):Nw(e)?ik(e,t):Lw(e)?ck(e,t):Ow(e)?XO(e,t):Bw(e)?lk(e,t):Rw(e)?uk(e,t):zw(e)?fk(e,t):Vw(e)?mk(e,t):Uw(e)?gk(e,t):cO(`Unknown left type operand '${e[Y]}'`)}function vk(e,t){return _k(e,t)}function yk(e,t,n,r,i){let a={};for(let o of globalThis.Object.getOwnPropertyNames(e))a[o]=Ck(e[o],t,n,r,RS(i));return a}function bk(e,t,n,r,i){return yk(e.properties,t,n,r,i)}function xk(e,t,n,r,i){return pT(bk(e,t,n,r,i))}function Sk(e,t,n,r){let i=vk(e,t);return i===Q.Union?ST([n,r]):i===Q.True?n:r}function Ck(e,t,n,r,i){return bC(e)?xk(e,t,n,r,i):yC(e)?J(Dk(e,t,n,r,i)):J(Sk(e,t,n,r),i)}function wk(e,t,n,r,i){return{[e]:Ck(XT(e),t,n,r,RS(i))}}function Tk(e,t,n,r,i){return e.reduce((e,a)=>({...e,...wk(a,t,n,r,i)}),{})}function Ek(e,t,n,r,i){return Tk(e.keys,t,n,r,i)}function Dk(e,t,n,r,i){return pT(Ek(e,t,n,r,i))}function Ok(e,t){return Ak(lE(e),t)}function kk(e,t){let n=e.filter(e=>vk(e,t)===Q.False);return n.length===1?n[0]:ST(n)}function Ak(e,t,n={}){return MC(e)?J(Ok(e,t),n):bC(e)?J(Nk(e,t),n):J(LC(e)?kk(e.anyOf,t):vk(e,t)===Q.False?e:fT(),n)}function jk(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=Ak(e[r],t);return n}function Mk(e,t){return jk(e.properties,t)}function Nk(e,t){return pT(Mk(e,t))}function Pk(e,t){return Ik(lE(e),t)}function Fk(e,t){let n=e.filter(e=>vk(e,t)!==Q.False);return n.length===1?n[0]:ST(n)}function Ik(e,t,n){return MC(e)?J(Pk(e,t),n):bC(e)?J(zk(e,t),n):J(LC(e)?Fk(e.anyOf,t):vk(e,t)===Q.False?fT():e,n)}function Lk(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=Ik(e[r],t);return n}function Rk(e,t){return Lk(e.properties,t)}function zk(e,t){return pT(Rk(e,t))}function Bk(e,t){return dC(e)?J(e.returns,t):fT(t)}function Vk(e){return HE(oD(e))}function Hk(e,t,n){return J({[Y]:`Record`,type:`object`,patternProperties:{[e]:t}},n)}function Uk(e,t,n){let r={};for(let n of e)r[n]=t;return LE(r,{...n,[tC]:`Record`})}function Wk(e,t,n){return HT(e)?Uk(mE(e),t,n):Hk(e.pattern,t,n)}function Gk(e,t,n){return Uk(mE(ST(e)),t,n)}function Kk(e,t,n){return Uk([e.toString()],t,n)}function qk(e,t,n){return Hk(e.source,t,n)}function Jk(e,t,n){return Hk(jS(e.pattern)?Zw:e.pattern,t,n)}function Yk(e,t,n){return Hk(Zw,t,n)}function Xk(e,t,n){return Hk(Qw,t,n)}function Zk(e,t,n){return LE({true:t,false:t},n)}function Qk(e,t,n){return Hk(Xw,t,n)}function $k(e,t,n){return Hk(Xw,t,n)}function eA(e,t,n={}){return LC(e)?Gk(e.anyOf,t,n):MC(e)?Wk(e,t,n):vC(e)?Kk(e.const,t,n):lC(e)?Zk(e,t,n):mC(e)?Qk(e,t,n):wC(e)?$k(e,t,n):kC(e)?qk(e,t,n):AC(e)?Jk(e,t,n):iC(e)?Yk(e,t,n):xC(e)?Xk(e,t,n):fT(n)}function tA(e){return globalThis.Object.getOwnPropertyNames(e.patternProperties)[0]}function nA(e){let t=tA(e);return t===Zw?eE():t===Xw?$T():eE({pattern:t})}function rA(e){return e.patternProperties[tA(e)]}function iA(e,t){return t.parameters=vA(e,t.parameters),t.returns=yA(e,t.returns),t}function aA(e,t){return t.parameters=vA(e,t.parameters),t.returns=yA(e,t.returns),t}function oA(e,t){return t.allOf=vA(e,t.allOf),t}function sA(e,t){return t.anyOf=vA(e,t.anyOf),t}function cA(e,t){return jS(t.items)||(t.items=vA(e,t.items)),t}function lA(e,t){return t.items=yA(e,t.items),t}function uA(e,t){return t.items=yA(e,t.items),t}function dA(e,t){return t.items=yA(e,t.items),t}function fA(e,t){return t.item=yA(e,t.item),t}function pA(e,t){let n=_A(e,t.properties);return{...t,...LE(n)}}function mA(e,t){let n=eA(yA(e,nA(t)),yA(e,rA(t)));return{...t,...n}}function hA(e,t){return t.index in e?e[t.index]:QD()}function gA(e,t){let n=nC(t),r=rC(t),i=yA(e,t);return n&&r?Vk(i):n&&!r?HE(i):!n&&r?oD(i):i}function _A(e,t){return globalThis.Object.getOwnPropertyNames(t).reduce((n,r)=>({...n,[r]:gA(e,t[r])}),{})}function vA(e,t){return t.map(t=>yA(e,t))}function yA(e,t){return dC(t)?iA(e,t):pC(t)?aA(e,t):hC(t)?oA(e,t):LC(t)?sA(e,t):FC(t)?cA(e,t):oC(t)?lA(e,t):sC(t)?uA(e,t):gC(t)?dA(e,t):EC(t)?fA(e,t):TC(t)?pA(e,t):DC(t)?mA(e,t):aC(t)?hA(e,t):t}function bA(e,t){return yA(t,zS(e))}function xA(e){return J({[Y]:`Integer`,type:`integer`},e)}function SA(e,t,n){return{[e]:NA(XT(e),t,RS(n))}}function CA(e,t,n){return e.reduce((e,r)=>({...e,...SA(r,t,n)}),{})}function wA(e,t,n){return CA(e.keys,t,n)}function TA(e,t,n){return pT(wA(e,t,n))}function EA(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toLowerCase(),n].join(``)}function DA(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toUpperCase(),n].join(``)}function OA(e){return e.toUpperCase()}function kA(e){return e.toLowerCase()}function AA(e,t,n){let r=IT(e.pattern);return VT(r)?uE([ST(MA([...JT(r)].map(e=>XT(e)),t))],n):{...e,pattern:jA(e.pattern,t)}}function jA(e,t){return typeof e==`string`?t===`Uncapitalize`?EA(e):t===`Capitalize`?DA(e):t===`Uppercase`?OA(e):t===`Lowercase`?kA(e):e:e.toString()}function MA(e,t){return e.map(e=>NA(e,t))}function NA(e,t,n={}){return yC(e)?TA(e,t,n):MC(e)?AA(e,t,n):LC(e)?ST(MA(e.anyOf,t),n):vC(e)?XT(jA(e.const,t),n):J(e,n)}function PA(e,t={}){return NA(e,`Capitalize`,t)}function FA(e,t={}){return NA(e,`Lowercase`,t)}function IA(e,t={}){return NA(e,`Uncapitalize`,t)}function LA(e,t={}){return NA(e,`Uppercase`,t)}function RA(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=JA(e[i],t,RS(n));return r}function zA(e,t,n){return RA(e.properties,t,n)}function BA(e,t,n){return pT(zA(e,t,n))}function VA(e,t){return e.map(e=>qA(e,t))}function HA(e,t){return e.map(e=>qA(e,t))}function UA(e,t){let{[t]:n,...r}=e;return r}function WA(e,t){return t.reduce((e,t)=>UA(e,t),e)}function GA(e,t,n){let r=dT(e,[QS,`$id`,`required`,`properties`]);return LE(WA(n,t),r)}function KA(e){return ST(e.reduce((e,t)=>_C(t)?[...e,XT(t)]:e,[]))}function qA(e,t){return hC(e)?gD(VA(e.allOf,t)):LC(e)?ST(HA(e.anyOf,t)):TC(e)?GA(e,t,e.properties):LE({})}function JA(e,t,n){let r=vS(t)?KA(t):t,i=UC(t)?mE(t):t,a=OC(e),o=OC(t);return bC(e)?BA(e,i,n):yC(t)?QA(e,t,n):a&&o||!a&&o||a&&!o?lT(`Omit`,[e,r],n):J({...qA(e,i),...n})}function YA(e,t,n){return{[t]:JA(e,[t],RS(n))}}function XA(e,t,n){return t.reduce((t,r)=>({...t,...YA(e,r,n)}),{})}function ZA(e,t,n){return XA(e,t.keys,n)}function QA(e,t,n){return pT(ZA(e,t,n))}function $A(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=cj(e[i],t,RS(n));return r}function ej(e,t,n){return $A(e.properties,t,n)}function tj(e,t,n){return pT(ej(e,t,n))}function nj(e,t){return e.map(e=>sj(e,t))}function rj(e,t){return e.map(e=>sj(e,t))}function ij(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function aj(e,t,n){let r=dT(e,[QS,`$id`,`required`,`properties`]);return LE(ij(n,t),r)}function oj(e){return ST(e.reduce((e,t)=>_C(t)?[...e,XT(t)]:e,[]))}function sj(e,t){return hC(e)?gD(nj(e.allOf,t)):LC(e)?ST(rj(e.anyOf,t)):TC(e)?aj(e,t,e.properties):LE({})}function cj(e,t,n){let r=vS(t)?oj(t):t,i=UC(t)?mE(t):t,a=OC(e),o=OC(t);return bC(e)?tj(e,i,n):yC(t)?fj(e,t,n):a&&o||!a&&o||a&&!o?lT(`Pick`,[e,r],n):J({...sj(e,i),...n})}function lj(e,t,n){return{[t]:cj(e,[t],RS(n))}}function uj(e,t,n){return t.reduce((t,r)=>({...t,...lj(e,r,n)}),{})}function dj(e,t,n){return uj(e,t.keys,n)}function fj(e,t,n){return pT(dj(e,t,n))}function pj(e,t){return lT(`Partial`,[lT(e,t)])}function mj(e){return lT(`Partial`,[_D(e)])}function hj(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=oD(e[n]);return t}function gj(e,t){let n=dT(e,[QS,`$id`,`required`,`properties`]);return LE(hj(t),n)}function _j(e){return e.map(e=>vj(e))}function vj(e){return uC(e)?pj(e.target,e.parameters):OC(e)?mj(e.$ref):hC(e)?gD(_j(e.allOf)):LC(e)?ST(_j(e.anyOf)):TC(e)?gj(e,e.properties):cC(e)||lC(e)||mC(e)||vC(e)||CC(e)||wC(e)||AC(e)||jC(e)||IC(e)?e:LE({})}function yj(e,t){return bC(e)?Sj(e,t):J({...vj(e),...t})}function bj(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=yj(e[r],RS(t));return n}function xj(e,t){return bj(e.properties,t)}function Sj(e,t){return pT(xj(e,t))}function Cj(e,t){return lT(`Required`,[lT(e,t)])}function wj(e){return lT(`Required`,[_D(e)])}function Tj(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=dT(e[n],[eC]);return t}function Ej(e,t){let n=dT(e,[QS,`$id`,`required`,`properties`]);return LE(Tj(t),n)}function Dj(e){return e.map(e=>Oj(e))}function Oj(e){return uC(e)?Cj(e.target,e.parameters):OC(e)?wj(e.$ref):hC(e)?gD(Dj(e.allOf)):LC(e)?ST(Dj(e.anyOf)):TC(e)?Ej(e,e.properties):cC(e)||lC(e)||mC(e)||vC(e)||CC(e)||wC(e)||AC(e)||jC(e)||IC(e)?e:LE({})}function kj(e,t){return bC(e)?Mj(e,t):J({...Oj(e),...t})}function Aj(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=kj(e[r],t);return n}function jj(e,t){return Aj(e.properties,t)}function Mj(e,t){return pT(jj(e,t))}function Nj(e,t){return t.map(t=>OC(t)?Pj(e,t.$ref):tM(e,t))}function Pj(e,t){return t in e?OC(e[t])?Pj(e,e[t].$ref):tM(e,e[t]):fT()}function Fj(e){return wD(e[0])}function Ij(e){return kE(e[0],e[1])}function Lj(e){return RD(e[0])}function Rj(e){return yj(e[0])}function zj(e){return JA(e[0],e[1])}function Bj(e){return cj(e[0],e[1])}function Vj(e){return kj(e[0])}function Hj(e,t,n){let r=Nj(e,n);return t===`Awaited`?Fj(r):t===`Index`?Ij(r):t===`KeyOf`?Lj(r):t===`Partial`?Rj(r):t===`Omit`?zj(r):t===`Pick`?Bj(r):t===`Required`?Vj(r):fT()}function Uj(e,t){return oT(tM(e,t))}function Wj(e,t){return cT(tM(e,t))}function Gj(e,t,n){return mT(eM(e,t),tM(e,n))}function Kj(e,t,n){return hT(eM(e,t),tM(e,n))}function qj(e,t){return gD(eM(e,t))}function Jj(e,t){return PE(tM(e,t))}function Yj(e,t){return LE(globalThis.Object.keys(t).reduce((n,r)=>({...n,[r]:tM(e,t[r])}),{}))}function Xj(e,t){let[n,r]=[tM(e,rA(t)),tA(t)],i=zS(t);return i.patternProperties[r]=n,i}function Zj(e,t){return OC(t)?{...Pj(e,t.$ref),[QS]:t[QS]}:t}function Qj(e,t){return KE(eM(e,t))}function $j(e,t){return ST(eM(e,t))}function eM(e,t){return t.map(t=>tM(e,t))}function tM(e,t){return rC(t)?J(tM(e,dT(t,[eC])),t):nC(t)?J(tM(e,dT(t,[$S])),t):PC(t)?J(Zj(e,t),t):oC(t)?J(Uj(e,t.items),t):sC(t)?J(Wj(e,t.items),t):uC(t)?J(Hj(e,t.target,t.parameters)):dC(t)?J(Gj(e,t.parameters,t.returns),t):pC(t)?J(Kj(e,t.parameters,t.returns),t):hC(t)?J(qj(e,t.allOf),t):gC(t)?J(Jj(e,t.items),t):TC(t)?J(Yj(e,t.properties),t):DC(t)?J(Xj(e,t)):FC(t)?J(Qj(e,t.items||[]),t):LC(t)?J($j(e,t.anyOf),t):t}function nM(e,t){return t in e?tM(e,e[t]):fT()}function rM(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:nM(e,n)}),{})}var iM=class{constructor(e){let t=rM(e),n=this.WithIdentifiers(t);this.$defs=n}Import(e,t){let n={...this.$defs,[e]:J(this.$defs[e],t)};return J({[Y]:`Import`,$defs:n,$ref:e})}WithIdentifiers(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:{...e[n],$id:n}}),{})}};function aM(e){return new iM(e)}function oM(e,t){return J({[Y]:`Not`,not:e},t)}function sM(e,t){return pC(e)?KE(e.parameters,t):fT()}var cM=0;function lM(e,t={}){jS(t.$id)&&(t.$id=`T${cM++}`);let n=zS(e({[Y]:`This`,$ref:`${t.$id}`}));return n.$id=t.$id,J({[tC]:`Recursive`,...n},t)}function uM(e,t){let n=OS(e)?new globalThis.RegExp(e):e;return J({[Y]:`RegExp`,type:`RegExp`,source:n.source,flags:n.flags},t)}function dM(e){return hC(e)?e.allOf:LC(e)?e.anyOf:FC(e)?e.items??[]:[]}function fM(e){return dM(e)}function pM(e,t){return pC(e)?J(e.returns,t):fT(t)}var mM=class{constructor(e){this.schema=e}Decode(e){return new hM(this.schema,e)}},hM=class{constructor(e,t){this.schema=e,this.decode=t}EncodeTransform(e,t){let n={Encode:n=>t[QS].Encode(e(n)),Decode:e=>this.decode(t[QS].Decode(e))};return{...t,[QS]:n}}EncodeSchema(e,t){let n={Decode:this.decode,Encode:e};return{...t,[QS]:n}}Encode(e){return PC(this.schema)?this.EncodeTransform(e,this.schema):this.EncodeSchema(e,this.schema)}};function gM(e){return new mM(e)}function _M(e={}){return J({[Y]:e[Y]??`Unsafe`},e)}function vM(e){return J({[Y]:`Void`,type:`void`},e)}var $=t({Any:()=>aT,Argument:()=>sT,Array:()=>oT,AsyncIterator:()=>cT,Awaited:()=>wD,BigInt:()=>QT,Boolean:()=>ZT,Capitalize:()=>PA,Composite:()=>KD,Const:()=>rO,Constructor:()=>mT,ConstructorParameters:()=>iO,Date:()=>qD,Enum:()=>aO,Exclude:()=>Ak,Extends:()=>Ck,Extract:()=>Ik,Function:()=>hT,Index:()=>kE,InstanceType:()=>Bk,Instantiate:()=>bA,Integer:()=>xA,Intersect:()=>gD,Iterator:()=>PE,KeyOf:()=>RD,Literal:()=>XT,Lowercase:()=>FA,Mapped:()=>nD,Module:()=>aM,Never:()=>fT,Not:()=>oM,Null:()=>JD,Number:()=>$T,Object:()=>LE,Omit:()=>JA,Optional:()=>oD,Parameters:()=>sM,Partial:()=>yj,Pick:()=>cj,Promise:()=>RE,Readonly:()=>HE,ReadonlyOptional:()=>Vk,Record:()=>eA,Recursive:()=>lM,Ref:()=>_D,RegExp:()=>uM,Required:()=>kj,Rest:()=>fM,ReturnType:()=>pM,String:()=>eE,Symbol:()=>YD,TemplateLiteral:()=>uE,Transform:()=>gM,Tuple:()=>KE,Uint8Array:()=>ZD,Uncapitalize:()=>IA,Undefined:()=>XD,Union:()=>ST,Unknown:()=>QD,Unsafe:()=>_M,Uppercase:()=>LA,Void:()=>vM}),yM={additionalProperties:!1},bM=$.String({pattern:`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,minLength:36,maxLength:36}),xM=$.String({pattern:`^[a-z0-9][a-z0-9-]{0,31}(?![\\s\\S])`,minLength:1,maxLength:32}),SM=$.String({pattern:`^sha256:[0-9a-f]{64}$`,minLength:71,maxLength:71}),CM=$.String({pattern:`^[A-Za-z0-9_-]{43}$`,minLength:43,maxLength:43}),wM=$.String({pattern:`^dpt_[A-Za-z0-9_-]{43}$`,minLength:47,maxLength:47}),TM=`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`,EM=`^(?:${TM}|[A-Z2-7]{12}|[A-Z2-7]{8})(?![\\s\\S])`,DM=$.String({pattern:EM,minLength:8,maxLength:36}),OM=new RegExp(EM),kM=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/;function AM(e){return typeof e!=`string`||e.length>36?!1:OM.test(e)}function jM(e){if(typeof e!=`string`)return;if(kM.test(e)){let t=e.toLowerCase();return AM(t)?t:void 0}let t=e.replace(/[\s-]+/g,``).toUpperCase();if(AM(t)&&!(/[\s-]/.test(e)&&t.length!==12))return t}$.Object({type:$.Literal(`pair.request`),v:$.Literal(1),requestId:bM,code:DM,deviceUid:bM,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:SM,clientTime:$.Integer(),hubNonce:$.Optional(CM)},yM),$.Object({type:$.Literal(`pair.device-request`),v:$.Literal(1),requestId:bM,deviceUid:bM,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:SM,clientTime:$.Integer(),hubNonce:$.Optional(CM)},yM);var MM=$.Object({type:$.Literal(`pair.challenge`),v:$.Literal(1),enrollmentId:bM,nonce:CM,issuedAt:$.Integer(),hubId:bM,hubPublicKey:$.Optional($.String({minLength:1,maxLength:256})),hubKeyFingerprint:$.Optional(SM),hubSignature:$.Optional($.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86}))},yM);$.Object({type:$.Literal(`pair.device-ack`),v:$.Literal(1),codeId:bM,code:DM,expiresAt:$.Integer(),hubOrigin:$.String(),hubId:bM,challenge:MM},yM),$.Object({type:$.Literal(`pair.response`),v:$.Literal(1),enrollmentId:bM,nonce:CM,signature:$.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86})},yM),$.Object({type:$.Literal(`pair.pending`),v:$.Literal(1),enrollmentId:bM,state:$.Literal(`awaiting_approval`),expiresAt:$.Integer(),pollAfterMs:$.Integer({minimum:1})},yM),$.Object({type:$.Literal(`pair.token`),v:$.Literal(1),enrollmentId:bM,deviceUid:bM,deviceId:xM,pairingEpoch:bM,credentialId:bM,generation:$.Integer({minimum:1}),hubId:bM,hubOrigin:$.String(),hubUrl:$.String(),tunnelToken:wM,issuedAt:$.Integer(),expiresAt:$.Null(),hubKeyFingerprint:$.Optional(SM)},yM),$.Object({enrollmentId:bM,deviceUid:bM,keyFingerprint:SM,replaceKey:$.Optional($.Boolean())},yM),$.Object({type:$.Literal(`pair.revoke`),v:$.Literal(1),deviceId:xM,pairingEpoch:bM,reason:$.Union([$.Literal(`user`),$.Literal(`compromise`),$.Literal(`hub_migrated`)]),revokedAt:$.Integer()},yM);var NM=$.Object({type:$.Literal(`pair.error`),v:$.Literal(1),code:$.Union([$.Literal(`code_invalid`),$.Literal(`code_expired`),$.Literal(`code_used`),$.Literal(`code_in_use`),$.Literal(`rate_limited`),$.Literal(`signature_invalid`),$.Literal(`clock_skew`),$.Literal(`paired_elsewhere`),$.Literal(`hub_required`),$.Literal(`fingerprint_mismatch`),$.Literal(`identity_conflict`),$.Literal(`enrollment_lost`),$.Literal(`enrollment_cancelled`),$.Literal(`already_issued`),$.Literal(`challenge_expired`)]),message:$.String({maxLength:512}),retryAfterMs:$.Optional($.Integer({minimum:1}))},yM);$.Object({type:$.Literal(`pair.code`),v:$.Literal(1),codeId:bM,code:DM,expiresAt:$.Integer(),hubOrigin:$.String({maxLength:2048}),pairUrl:$.String({maxLength:4096}),offerUrl:$.Optional($.String({maxLength:2048}))},yM);var PM=$.Union([$.Literal(`open`),$.Literal(`awaiting_proof`),$.Literal(`awaiting_approval`),$.Literal(`approved`),$.Literal(`issued`),$.Literal(`connected`),$.Literal(`cancelled`),$.Literal(`expired`)]);$.Object({type:$.Literal(`pair.code-state`),v:$.Literal(1),codeId:bM,expiresAt:$.Integer(),phase:PM,enrollment:$.Optional($.Object({enrollmentId:bM,deviceUid:bM,deviceName:$.String({minLength:1,maxLength:64}),keyFingerprint:SM,proofVerified:$.Boolean(),keyChanged:$.Boolean()},yM)),deviceId:$.Optional(xM),error:$.Optional(NM)},yM);function FM(e){if(typeof e!=`string`||e.length===0||e.length>2048)return{ok:!1,error:`origin: empty or too long`};if(/\s|\n|\r|\t/.test(e))return{ok:!1,error:`origin: whitespace not allowed`};let t;try{t=new URL(e)}catch{return{ok:!1,error:`origin: not a valid URL`}}return t.protocol!==`https:`&&!(t.protocol===`http:`&&/^(127\.0\.0\.1|\[::1\]|localhost)$/.test(t.hostname))?{ok:!1,error:`origin: HTTPS origin required`}:t.username||t.password?{ok:!1,error:`origin: userinfo not allowed`}:t.search||t.hash?{ok:!1,error:`origin: query/fragment not allowed`}:t.pathname!==`/`&&t.pathname!==``?{ok:!1,error:`origin: base path not allowed`}:{ok:!0,origin:t.origin,tunnelUrl:`${t.origin}/api/tunnel`}}function IM(e){if(e!==``&&/^[A-Za-z0-9_-]+$/.test(e))try{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return}}var LM=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,RM=RegExp(`^${TM}$`),zM=/^sha256:[0-9a-f]{64}$/;function BM(e){let t=IM(e);if(!t||t.length>1024)return;let n;try{n=JSON.parse(new TextDecoder().decode(t))}catch{return}if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n;if(r.v!==2&&r.v!==3)return;let i=r.v===3?6:5;if(Object.keys(r).length!==i||typeof r.hub!=`string`)return;let a=FM(r.hub);if(a.ok&&a.origin===r.hub&&typeof r.id==`string`&&LM.test(r.id)&&typeof r.code==`string`&&RM.test(r.code)&&typeof r.exp==`number`&&Number.isSafeInteger(r.exp))return r.v===3?typeof r.kfp!=`string`||!zM.test(r.kfp)?void 0:{v:3,hub:r.hub,id:r.id,code:r.code,exp:r.exp,kfp:r.kfp}:{v:2,hub:r.hub,id:r.id,code:r.code,exp:r.exp}}function VM(e,t=Date.now()){let n=BM(e);if(n&&!(n.exp<t-3e4)&&!(n.exp>t+6e5))return n}function HM(e,t=Date.now()){let n;try{n=new URL(e)}catch{return}if(!/^\/pair\/?$/.test(n.pathname)||n.username||n.password||n.search||!n.hash.startsWith(`#offer=`))return;let r=VM(n.hash.slice(7),t);if(r&&r.hub===n.origin)return{offer:r,rest:`${n.origin}/pair`}}function UM(e){if(!/^\/pair\/?$/.test(e.pathname))return;if(e.hash.startsWith(`#offer=`)){let t=HM(e.href);if(t)return{code:t.offer.code,origin:e.origin,offerFragment:e.hash.slice(1)};let n=VM(e.hash.slice(7));return n&&n.hub!==e.origin?{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}:{error:`Invalid pairing link. Use a complete link from the hub wizard.`}}let t=e.searchParams;if(!t.has(`code`)&&!t.has(`origin`)&&!t.has(`v`))return;let n=t.get(`code`),r=n===null?void 0:jM(n);if(e.username||e.password||e.hash||t.getAll(`code`).length!==1||!r||t.getAll(`v`).length!==1||t.get(`v`)!==`1`)return{error:`Invalid pairing link. Use a complete version 1 link from the hub wizard.`};if(t.has(`origin`))try{let n=new URL(t.get(`origin`));if(t.getAll(`origin`).length!==1||n.origin!==e.origin||n.pathname!==`/`||n.username||n.password||n.search||n.hash)throw Error(`origin mismatch`)}catch{return{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}}return{code:r,origin:e.origin}}var WM=e=>/^\/pair\/?$/.test(e.pathname)?`/`:void 0,GM=e=>/^\/pair\/?$/.test(e.pathname)&&UM(e)===void 0?`/`:void 0,KM=4e3;async function qM(e){if(!e.needsCancel)return{closed:!0,confirmed:!0};let t,n=await Promise.race([e.cancel().catch(()=>`failed`),new Promise(n=>t=setTimeout(()=>n(`failed`),e.timeoutMs))]);return clearTimeout(t),{closed:n!==`issued`,confirmed:n===`cancelled`}}var JM={class:`modal pair-wizard`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pair-title`},YM={key:1,class:`pair-pending`,"aria-label":`Machines waiting for approval`},XM={class:`who`},ZM={key:0,class:`muted`},QM={key:1,class:`muted`},$M={class:`fp`},eN={class:`row`},tN={class:`phase`},nN=[`onClick`],rN={key:2,class:`hint`},iN={class:`pair-steps`,"aria-label":`Pairing progress`},aN={class:`pair-grid`},oN={class:`pair-code-box`},sN={class:`pair-code`,"aria-label":`Pairing code`},cN={class:`pair-copy-actions`},lN=[`innerHTML`],uN={class:`pair-side`},dN={key:0,class:`hint`},fN={class:`pair-fingerprint`},pN={class:`fp`},mN={class:`pair-confirm`},hN={key:0,class:`pair-confirm warn`},gN=[`disabled`],_N=[`disabled`],vN={class:`hint`},yN=[`disabled`],bN={key:5,class:`error`,role:`alert`},xN={key:4},SN={class:`error`,role:`alert`},CN=A({__name:`PairDeviceWizard`,props:{handoff:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=n,i=e,a=O(`boot`),o=O(),s=O(),c=O(),l=O(``),u=O(!1),d=O(!1),f=O(!1),p=O(!1),m=O(!1),h=O(!1),g=O(),_=O([]),v=B(()=>{let e=s.value?.code??``;return!AM(e)||e.includes(`-`)?e:(e.match(/.{4}/g)??[]).join(`-`)}),y=B(()=>s.value?Sv(s.value):``),b=B(()=>y.value?lS(y.value,148):``),ee=B(()=>c.value?.enrollment?.keyFingerprint??``),te=B(()=>c.value?.deviceId??``);Zn(te,e=>{g.value?.(),e&&(g.value=Zn(()=>Xl.devices.value.find(t=>t.id===e)?.status,e=>{e===`online`&&(W(`Device paired and online.`),g.value?.(),g.value=void 0)},{immediate:!0}))});async function x(e){a.value=`boot`,l.value=``,f.value=!1,p.value=!1,c.value=void 0,s.value=void 0,o.value?.close();let t=Tv();o.value=t;try{let n=e?await Cv.resolveCode(e):await Cv.createCode();if(t.closed()){await Cv.cancel(n.codeId).catch(()=>{W(`The late pairing code could not be cancelled. Check device credentials before retrying.`)});return}if(s.value=n,a.value=`code`,e){let e=WM(new URL(window.location.href));e&&window.history.replaceState(window.history.state,``,e)}Ov(t,n.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{t.closed()||(l.value=e instanceof Error?e.message:String(e),a.value=`expired`)})}catch(e){l.value=e instanceof Error?e.message:String(e),a.value=`expired`}}async function ne(){let e=c.value,t=o.value;if(e?.enrollment&&t&&!u.value){u.value=!0,l.value=``;try{let t=await Cv.approve(s.value.codeId,{enrollmentId:e.enrollment.enrollmentId,deviceUid:e.enrollment.deviceUid,keyFingerprint:e.enrollment.keyFingerprint,...p.value?{replaceKey:!0}:{}});c.value=t,(t.phase===`issued`||t.phase===`connected`)&&(a.value=`issued`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function re(e){if(!s.value)return`cancelled`;try{let t=await Cv.cancel(s.value.codeId,void 0,e);return c.value=t,o.value&&(o.value.state=t),a.value=t.phase===`expired`?`expired`:`cancelled`,o.value?.close(),`cancelled`}catch(e){if(e instanceof Sl&&e.status===409&&String(e.code)===`already_issued`){let e=await Cv.codeState(s.value.codeId).catch(()=>void 0);return e&&(c.value=e,o.value&&(o.value.state=e)),a.value=`issued`,l.value=`Credential already issued. Closing does not revoke it; choose Revoke explicitly if needed.`,`issued`}return l.value=e instanceof Error?e.message:String(e),`failed`}}let ie=()=>re(!1),ae=()=>[`issued`,`connected`,`cancelled`,`expired`].includes(c.value?.phase??``);async function oe(){let e=te.value;if(e){u.value=!0;try{await Cv.revoke(e,`user`),W(`Issued credential revoked.`),r(`close`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function se(){if(s.value)try{await navigator.clipboard.writeText(s.value.code),m.value=!0,setTimeout(()=>m.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the code manually.`}}async function ce(){if(s.value)try{await navigator.clipboard.writeText(s.value.offerUrl??s.value.pairUrl),h.value=!0,setTimeout(()=>h.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the link manually.`}}async function le(){if(!d.value){d.value=!0,u.value=!0;try{let e=await qM({needsCancel:!!s.value&&!ae(),cancel:ie,timeoutMs:KM});if(!e.closed)return;o.value?.close(),g.value?.(),e.confirmed||W(`Pairing cancellation was not confirmed. The code expires on its own; check device credentials before retrying.`),r(`close`)}finally{d.value=!1,u.value=!1}}}t({close:le});let ue;async function de(){try{_.value=(await Cv.pending()).codes}catch{}}async function fe(e){s.value=void 0,c.value=void 0,l.value=``;let t=Tv();o.value=t,a.value=e.phase===`approved_ready`?`approve`:`proof`,Ov(t,e.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{l.value=e instanceof Error?e.message:String(e)})}return Wr(()=>{if(de(),ue=setInterval(()=>void de(),3e3),i.handoff&&`error`in i.handoff){l.value=i.handoff.error,a.value=`expired`;return}x(i.handoff?.code)}),qr(()=>{clearInterval(ue);let e=o.value;e&&!e.closed()&&s.value&&!ae()&&re(!0).then(e=>{e!==`cancelled`&&W(`Pairing cancellation was not confirmed. Check device credentials before retrying.`)}),e?.close(),g.value?.()}),(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:As(le,[`self`])},[I(`div`,JM,[I(`header`,null,[t[5]||=I(`h2`,{id:`pair-title`},`Pair a device`,-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,onClick:le},[L(k(qc),{size:18})])]),i.handoff&&`offerFragment`in i.handoff&&i.handoff.offerFragment?(N(),F(gS,{key:0,"offer-fragment":i.handoff.offerFragment},null,8,[`offer-fragment`])):z(``,!0),_.value.length?(N(),P(`section`,YM,[t[6]||=I(`h3`,null,`Machines waiting for you`,-1),I(`ul`,null,[(N(!0),P(M,null,j(_.value,e=>(N(),P(`li`,{key:e.codeId},[I(`div`,XM,[I(`strong`,null,T(e.deviceName??`unnamed device`),1),e.hostname?(N(),P(`span`,ZM,T(e.hostname),1)):z(``,!0),e.platform?(N(),P(`span`,QM,T(e.platform),1)):z(``,!0)]),I(`div`,$M,T(e.keyFingerprint),1),I(`div`,eN,[I(`span`,tN,T(e.phase.replaceAll(`_`,` `)),1),I(`button`,{type:`button`,class:`small`,onClick:t=>fe(e)},`Review`,8,nN)])]))),128))]),t[7]||=I(`p`,{class:`hint`},` Compare each fingerprint with the machine's own terminal before approving. Codes are minted by the hub — nothing has to be copied to the machine. `,-1)])):z(``,!0),a.value===`boot`?(N(),P(`p`,rN,`Minting a pairing code…`)):s.value?(N(),P(M,{key:3},[I(`ol`,iN,[t[8]||=I(`li`,{class:C({on:!0})},`Code`,-1),I(`li`,{class:C({on:[`proof`,`approve`,`issued`].includes(a.value)})},`Proof`,2),I(`li`,{class:C({on:[`approve`,`issued`].includes(a.value)})},`Fingerprint`,2),I(`li`,{class:C({on:a.value===`issued`})},`Online`,2)]),I(`div`,aN,[I(`div`,oN,[I(`div`,sN,T(v.value),1),I(`div`,cN,[I(`button`,{type:`button`,class:`small`,onClick:se},[L(k(tc),{size:14}),R(` `+T(m.value?`Copied`:`Copy code`),1)]),I(`button`,{type:`button`,class:`small`,onClick:ce,title:`Self-contained link: hub, code and expiry all in the fragment — it never reaches server logs`},[L(k(tc),{size:14}),R(` `+T(h.value?`Copied link`:`Copy link`),1)])]),t[9]||=I(`p`,{class:`hint`},` Run the device pairing command and scan, or enter this code on the device. Expires in 5 minutes. `,-1),I(`div`,{class:`pair-qr`,"aria-label":`Pairing QR code`,title:`Same offer link as Copy link: hub, code and expiry all in the #offer= fragment — it never reaches server logs`,innerHTML:b.value},null,8,lN)]),I(`div`,uN,[a.value===`code`||a.value===`proof`?(N(),P(`p`,dN,[L(k(Pc),{size:14,class:`spin`}),t[10]||=R(` Waiting for the device to submit its signing proof… `,-1)])):a.value===`approve`?(N(),P(M,{key:1},[I(`div`,fN,[t[11]||=I(`h3`,null,`Device key fingerprint`,-1),I(`code`,pN,T(ee.value),1),t[12]||=I(`p`,{class:`hint`},` Compare ALL 64 hex characters with the fingerprint shown on the device screen. `,-1)]),I(`label`,mN,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>f.value=e,type:`checkbox`},null,512),[[xs,f.value]]),t[13]||=R(` The fingerprint matches the device display exactly `,-1)]),c.value?.enrollment?.keyChanged?(N(),P(`label`,hN,[Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>p.value=e,type:`checkbox`},null,512),[[xs,p.value]]),L(k(Lc),{size:14}),t[14]||=R(` Device is already paired with a DIFFERENT key — replace the stored key (replaceKey) `,-1)])):z(``,!0),I(`button`,{type:`button`,class:`primary`,disabled:!f.value||u.value||c.value?.enrollment?.keyChanged===!0&&!p.value,onClick:ne},` Approve device `,8,gN),I(`button`,{type:`button`,class:`small`,disabled:u.value,onClick:ie},` Cancel pairing `,8,_N)],64)):a.value===`issued`?(N(),P(M,{key:2},[I(`p`,vN,[L(k(Qs),{size:14}),t[15]||=R(` Credential issued. The device is connecting through the tunnel — you will get a toast once the monitor probe reports it online. `,-1)]),I(`button`,{type:`button`,class:`small`,onClick:le},`Close`),I(`button`,{type:`button`,class:`small danger`,disabled:!te.value||u.value,title:`Mistaken approval? Revoke the credential now.`,onClick:oe},` Revoke this credential `,8,yN)],64)):a.value===`cancelled`?(N(),P(M,{key:3},[t[16]||=I(`p`,{class:`hint`},`Pairing was cancelled (or the signature failed too many times).`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[2]||=e=>x()},`Start over`)],64)):a.value===`expired`?(N(),P(M,{key:4},[t[17]||=I(`p`,{class:`hint`},`The pairing code expired.`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[3]||=e=>x()},`New code`)],64)):z(``,!0),l.value?(N(),P(`p`,bN,T(l.value),1)):z(``,!0)])])],64)):(N(),P(`div`,xN,[I(`p`,SN,T(l.value||`This pairing link is unavailable.`),1),I(`button`,{type:`button`,class:`small`,onClick:t[4]||=e=>x()},`New code`)]))])]))}}),wN={class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`device-credentials-title`},TN={class:`hint`},EN={key:1,class:`hint`},DN=A({__name:`DeviceCredentialsDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Xl.devices.value.find(e=>e.id===n.deviceId));return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>r(`close`),[`self`])},[I(`section`,wN,[I(`header`,null,[t[3]||=I(`h2`,{id:`device-credentials-title`},`Device credentials`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close device credentials`,onClick:t[0]||=e=>r(`close`)},[L(k(qc),{size:18})])]),i.value?(N(),P(M,{key:0},[I(`p`,null,[R(T(i.value.name)+` `,1),I(`code`,null,T(i.value.id),1)]),I(`p`,TN,T(i.value.status)+` · tunnel `+T(i.value.tunnel?.state??`disconnected`)+` · `+T(i.value.tunnel?.readerCount??0)+` readers `,1),L(Lv,{device:i.value},null,8,[`device`])],64)):(N(),P(`p`,EN,`This device is no longer in the registry.`)),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:t[1]||=e=>r(`close`)},`Close`)])])]))}}),ON={id:`prompt-title`},kN=[`disabled`],AN={key:0,class:`hint`},jN={key:1},MN={key:0,class:`muted`},NN=[`placeholder`,`disabled`],PN=[`required`,`placeholder`,`aria-label`,`disabled`],FN={key:2,class:`message-error`,role:`alert`},IN=[`disabled`],LN=[`disabled`],RN=A({__name:`PromptDialog`,props:{dialog:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=O(n.dialog.value??``),a=O(!1),o=O(``),s=O(),c=!!n.dialog.label;async function l(){if(!a.value&&(!c||n.dialog.optional||i.value.trim())){a.value=!0,o.value=``;try{await n.dialog.run(i.value.trim()),r(`close`)}catch(e){o.value=Rl(e)}finally{a.value=!1}}}return Wr(()=>void jn(()=>(s.value?.focus(),s.value?.select()))),(t,n)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:n[4]||=As(e=>!a.value&&r(`close`),[`self`])},[I(`form`,{class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`prompt-title`,onSubmit:As(l,[`prevent`])},[I(`header`,null,[I(`h2`,ON,T(e.dialog.title),1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,disabled:a.value,onClick:n[0]||=e=>r(`close`)},[L(k(qc),{size:18})],8,kN)]),e.dialog.hint?(N(),P(`p`,AN,T(e.dialog.hint),1)):z(``,!0),c?(N(),P(`label`,jN,[R(T(e.dialog.label)+` `,1),e.dialog.optional?(N(),P(`span`,MN,`(optional)`)):z(``,!0),e.dialog.multiline?Wn((N(),P(`textarea`,{key:1,ref_key:`input`,ref:s,"onUpdate:modelValue":n[1]||=e=>i.value=e,rows:`4`,placeholder:e.dialog.placeholder,disabled:a.value},null,8,NN)),[[bs,i.value]]):Wn((N(),P(`input`,{key:2,ref_key:`input`,ref:s,"onUpdate:modelValue":n[2]||=e=>i.value=e,maxlength:`100`,required:!e.dialog.optional,placeholder:e.dialog.placeholder,"aria-label":e.dialog.label,disabled:a.value},null,8,PN)),[[bs,i.value]])])):z(``,!0),o.value?(N(),P(`p`,FN,T(o.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,disabled:a.value,onClick:n[3]||=e=>r(`close`)},` Cancel `,8,IN),I(`button`,{class:C([`primary`,{danger:e.dialog.danger}]),disabled:a.value||c&&!e.dialog.optional&&!i.value.trim()},T(a.value?`Working…`:e.dialog.submit),11,LN)])],32)]))}}),zN={class:`modal model-modal`},BN={class:`eyebrow`},VN={class:`model-list`},HN=[`onClick`],UN=[`src`],WN={class:`hint`},GN=A({__name:`ModelPicker`,emits:[`close`],setup(e,{emit:t}){let n=t,r=O(``),i=B(()=>yu.value.filter(e=>`${e.name} ${e.id} ${e.tier}`.toLowerCase().includes(r.value.toLowerCase()))),a=e=>e.id===bu.value.agent.model?.modelId&&e.provider===bu.value.agent.model?.provider;async function o(e){await ju(()=>uu.value.configure({model:{provider:e.provider,modelId:e.id}}))&&(await ku(),W(`Model saved. Used on the next turn.`),n(`close`))}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>n(`close`),[`self`])},[I(`section`,zN,[I(`header`,null,[I(`div`,null,[I(`span`,BN,`PER AGENT · `+T(k(ru)?.id),1),t[3]||=I(`h2`,null,`Choose a model`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Close model picker`,onClick:t[0]||=e=>n(`close`)},[L(k(qc),{size:18})])]),Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>r.value=e,placeholder:`Search models or tiers…`,"aria-label":`Search models`},null,512),[[bs,r.value]]),I(`div`,VN,[(N(!0),P(M,null,j(i.value,e=>(N(),P(`button`,{key:`${e.provider}/${e.id}`,class:C({selected:a(e)}),onClick:t=>o(e)},[I(`img`,{src:k(Fu)(e.id),alt:``},null,8,UN),I(`div`,null,[I(`strong`,null,T(e.name),1),I(`small`,null,T(e.tier)+` / `+T(e.provider)+` / `+T(k(Nu)(e.contextWindow))+` context`,1)]),a(e)?(N(),F(k(Ys),{key:0,size:18})):z(``,!0)],10,HN))),128))]),I(`p`,WN,`Models available on `+T(k(ru)?.id)+`. Provider keys stay on the device.`,1)])]))}}),KN={class:`dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`help-title`},qN={class:`dialog-head`},JN={class:`dialog-body`},YN={class:`n`},XN={class:`body`},ZN={class:`help-callout`},QN={class:`dialog-foot`},$N={class:`right`},eP=A({__name:`HelpDialog`,setup(e){let t=[{title:`Pick a device, start a session`,body:`Every device in the tree runs dpi-backend. A session gets its own SQLite database on that device, in the directory you choose.`},{title:`Send work, then close the browser`,body:`The device owns the run. Reopening restores committed messages, state and live progress.`},{title:`Change state and fork`,body:`Edit App State by hand or through the agent. Every session and fork on a device shares it.`},{title:`Interrupt deliberately`,body:`Interrupt stops foreground work and owned subagents. Background jobs continue. Stop all includes them.`},{title:`Explore the boundaries`,body:`Queue a follow-up, steer after tools, wait for approval, compact context, reset or inspect raw state.`},{title:`Restart a device`,body:`Its tree dims and shows the restart command. Checkpointed jobs recover on boot. Replay-safe tools may rerun. Other interrupted tools return an error.`}];return(e,n)=>(N(),P(`div`,{class:`scrim`,onClick:n[2]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,KN,[I(`div`,qN,[n[3]||=I(`div`,null,[I(`span`,{class:`dialog-eyebrow`},`LEARN BY DOING`),I(`h3`,{id:`help-title`},`What makes this durable?`)],-1),I(`button`,{class:`icon-button`,"aria-label":`Close help`,onClick:n[0]||=e=>k(U).dialog=void 0},[L(k(qc),{size:18})])]),I(`div`,JN,[(N(),P(M,null,j(t,(e,t)=>I(`div`,{key:e.title,class:`help-step`},[I(`span`,YN,T(String(t+1).padStart(2,`0`)),1),I(`div`,null,[I(`b`,null,T(e.title),1),I(`div`,XN,T(e.body),1)])])),64)),I(`div`,ZN,[L(k(pc),{size:18}),n[4]||=I(`span`,null,`Durable does not mean exactly-once external effects. Checkpoints protect progress. Tools still need their own idempotency.`,-1)])]),I(`div`,QN,[I(`div`,$N,[I(`button`,{class:`secondary`,type:`button`,onClick:n[1]||=e=>k(U).dialog=void 0},`Close`)])])])]))}}),tP=Kt({needed:!1,busy:!1,error:``}),nP=new Set,rP=e=>{let t=[...nP];nP=new Set;for(let n of t)n(e)},iP=()=>new Promise(e=>nP.add(e));async function aP(e){if(tP.busy||!e)return!1;tP.busy=!0,tP.error=``;try{let t=await fetch(`/api/session`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})});return await t.text().catch(()=>``),t.ok?(tP.needed=!1,rP(!0),!0):(tP.error=t.status===401?`That token was not accepted.`:t.status===429?`Too many attempts. Wait a minute and try again.`:`Login failed (${t.status}).`,!1)}catch{return tP.error=`Cannot reach the hub.`,!1}finally{tP.busy=!1}}var oP=e=>{try{return new URL(e,location.href).pathname===`/api/session`}catch{return e===`/api/session`}};function sP(e){return(async(t,n)=>{let r=()=>e(t,n),i=await r();if(i.status!==401||oP(typeof t==`string`?t:t instanceof URL?t.href:t.url)||n?.body instanceof ReadableStream)return i;tP.needed=!0;let a=await i.text().catch(()=>``);return await iP()?r():new Response(a,{status:i.status,headers:i.headers})})}function cP(){typeof window>`u`||window.__adminFetch||(window.__adminFetch=!0,window.fetch=sP(window.fetch.bind(window)))}var lP={class:`login-veil`,"data-testid":`login-card`},uP=[`disabled`],dP={key:0,class:`message-error`,role:`alert`},fP=[`disabled`],pP=A({__name:`LoginCard`,setup(e){let t=O(``),n=O();async function r(){if(tP.busy||!t.value.trim())return;let e=await aP(t.value.trim());t.value=``,e&&n.value?.blur()}return Wr(()=>void jn(()=>n.value?.focus())),(e,i)=>(N(),P(`div`,lP,[I(`form`,{class:`modal login-card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`login-title`,onSubmit:As(r,[`prevent`])},[i[2]||=I(`header`,null,[I(`h2`,{id:`login-title`},`Admin token`)],-1),i[3]||=I(`p`,{class:`hint`},[R(` This hub is locked. Sign in with the token from its `),I(`code`,null,`admin.token`),R(` file. `)],-1),i[4]||=I(`label`,{for:`admin-token`},`Admin token`,-1),Wn(I(`input`,{id:`admin-token`,ref_key:`input`,ref:n,"onUpdate:modelValue":i[0]||=e=>t.value=e,type:`password`,name:`admin-token`,autocomplete:`off`,spellcheck:`false`,placeholder:`adm_…`,"aria-label":`Admin token`,disabled:k(tP).busy,onKeydown:i[1]||=Ms(e=>k(tP).error=``,[`esc`])},null,40,uP),[[bs,t.value]]),k(tP).error?(N(),P(`p`,dP,T(k(tP).error),1)):z(``,!0),I(`footer`,null,[I(`button`,{class:`primary`,type:`submit`,disabled:k(tP).busy||!t.value.trim()},T(k(tP).busy?`Checking…`:`Sign in`),9,fP)])],32)]))}}),mP={key:0,class:`toast`,role:`status`},hP=A({__name:`Toast`,setup(e){return(e,t)=>(N(),F(Co,{name:`toast`},{default:Un(()=>[k(U).toast?(N(),P(`div`,mP,[L(k(Ys),{size:18}),R(T(k(U).toast),1)])):z(``,!0)]),_:1}))}}),gP={class:`shell`,"data-testid":`app-shell`},_P={key:0,class:`error-banner`,role:`alert`},vP={key:4,class:`welcome`,"data-testid":`welcome-empty`},yP=[`disabled`],bP={class:`welcome-features`},xP={class:`modal path-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`path-title`},SP={class:`full-directory`},CP=A({__name:`App`,setup(e){let t=()=>Xl.devices.value.filter(e=>e.status===`online`).length,n=O();function r(){U.dialog={kind:`new-session`,deviceId:H.value?.deviceId}}function i(e){let t=U.dialog?void 0:Ju(e);if(t)return e.preventDefault(),t===`tree`?Wu():Gu();if(e.key===`Escape`){if(U.dialog){U.dialog.kind===`pair`?n.value?.close():U.dialog=void 0;return}!e.repeat&&!e.isComposing&&wu.value&&(e.preventDefault(),Ru()),U.drawer=!1,U.inspectorOverlay=!1}}function a(e){let t=e.clientX,n=$l.value,r=e=>$l.value=Math.max(220,Math.min(560,n+e.clientX-t)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return Wr(()=>{document.addEventListener(`keydown`,i),_u()}),qr(()=>{Jl.stop(),document.removeEventListener(`keydown`,i)}),(e,i)=>(N(),P(`div`,gP,[L(nd,{onNewSession:r}),k(U).error?(N(),P(`div`,_P,[L(k(pc),{size:18}),I(`span`,null,T(k(U).error),1),I(`button`,{class:`icon-button`,"aria-label":`Dismiss error`,onClick:i[0]||=e=>k(U).error=``},`×`)])):z(``,!0),I(`main`,{class:`net-workspace`,style:ye({"--tree-w":`${k($l)}px`})},[L(Id),k(eu).tree?(N(),P(`div`,{key:0,class:`tree-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize network tree`,onPointerdown:As(a,[`prevent`])},null,32)):z(``,!0),k(U).drawer?(N(),P(`div`,{key:1,class:`tree-backdrop`,onClick:i[1]||=e=>k(U).drawer=!1})):z(``,!0),k(H)&&k(ru)&&k(iu)?(N(),P(M,{key:2},[L(ux),k(U).inspectorOverlay?(N(),P(`div`,{key:0,class:`inspector-backdrop`,onClick:i[2]||=e=>k(Uu)()})):z(``,!0),(N(),F(J_,{key:`${k(H).deviceId}/${k(H).sessionId}`}))],64)):k(H)&&k(ru)?(N(),F(bx,{key:3,device:k(ru)},null,8,[`device`])):(N(),P(`section`,vP,[i[14]||=I(`img`,{class:`welcome-symbol`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),i[15]||=I(`span`,{class:`eyebrow`},`THE DURABLE AGENT NETWORK`,-1),i[16]||=I(`h1`,null,[R(`Close the tab.`),I(`br`),R(`The work continues.`)],-1),i[17]||=I(`p`,null,`Agents run on your devices. This page is only a window into them.`,-1),I(`button`,{class:`primary`,disabled:!t(),onClick:r},[L(k(Mc),{size:18}),R(T(k(Xl).devices.value.length?`Create a session`:`Add a device to dpi-network.yaml`),1)],8,yP),I(`div`,bP,[I(`span`,null,[L(k(ic),{size:18}),i[11]||=R(`SQLite on each device`,-1)]),I(`span`,null,[L(k(uc),{size:18}),i[12]||=R(`Branch any agent`,-1)]),I(`span`,null,[L(k(Hs),{size:18}),i[13]||=R(`Watch from anywhere`,-1)])])]))],4),L(ad),k(U).dialog?.kind===`pair`?(N(),F(CN,{key:1,ref_key:`pairWizard`,ref:n,handoff:k(U).dialog.handoff,onClose:i[3]||=e=>k(U).dialog=void 0},null,8,[`handoff`])):z(``,!0),k(U).dialog?.kind===`credentials`?(N(),F(DN,{key:2,"device-id":k(U).dialog.deviceId,onClose:i[4]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):z(``,!0),k(U).dialog?.kind===`new-session`?(N(),F(Lx,{key:3,"device-id":k(U).dialog.deviceId,onClose:i[5]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):k(U).dialog?.kind===`prompt`?(N(),F(RN,{key:4,dialog:k(U).dialog,onClose:i[6]||=e=>k(U).dialog=void 0},null,8,[`dialog`])):k(U).dialog?.kind===`models`?(N(),F(GN,{key:5,onClose:i[7]||=e=>k(U).dialog=void 0})):k(U).dialog?.kind===`path`?(N(),P(`div`,{key:6,class:`modal-backdrop`,onClick:i[10]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,xP,[I(`header`,null,[i[18]||=I(`h2`,{id:`path-title`},`Working directory`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close working directory`,onClick:i[8]||=e=>k(U).dialog=void 0},[L(k(qc),{size:18})])]),I(`code`,SP,T(k(U).dialog.path),1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:i[9]||=e=>k(U).dialog=void 0},`Close`)])])])):k(U).dialog?.kind===`help`?(N(),F(eP,{key:7})):z(``,!0),k(tP).needed?(N(),F(pP,{key:8})):z(``,!0),L(hP)]))}});cP();var wP=new URL(window.location.href);if(/^\/pair\/?$/.test(wP.pathname)){let e=UM(wP);e?(wP.search=``,wP.hash=``,window.history.replaceState(window.history.state,``,wP),U.dialog={kind:`pair`,handoff:e}):window.history.replaceState(window.history.state,``,GM(wP))}Is(CP).mount(`#app`);
|