@plurnk/plurnk-web 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +337 -2
- package/SPEC.md +869 -0
- package/ai.plurnk/.env.defaults +38 -0
- package/ai.plurnk/assets.json +193 -0
- package/ai.plurnk/creations.js +65 -0
- package/ai.plurnk/diagram-compiler.js +15 -0
- package/ai.plurnk/diagrams.js +130 -0
- package/ai.plurnk/directory-addresses.js +35 -0
- package/ai.plurnk/dist/assets/Temml-CCjoacWt.woff2 +0 -0
- package/ai.plurnk/dist/assets/index-DQK23MMn.js +2 -0
- package/ai.plurnk/dist/assets/index-DQK23MMn.js.br +0 -0
- package/ai.plurnk/dist/assets/index-DQK23MMn.js.gz +0 -0
- package/ai.plurnk/dist/assets/index-DgGvOprn.css +1 -0
- package/ai.plurnk/dist/assets/index-DgGvOprn.css.br +0 -0
- package/ai.plurnk/dist/assets/index-DgGvOprn.css.gz +0 -0
- package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css +1 -0
- package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css.br +0 -0
- package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css.gz +0 -0
- package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js +96 -0
- package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js.br +0 -0
- package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js.gz +0 -0
- package/ai.plurnk/dist/assets/overview-IkhWTlh2.js +1 -0
- package/ai.plurnk/dist/assets/overview-IkhWTlh2.js.br +0 -0
- package/ai.plurnk/dist/assets/overview-IkhWTlh2.js.gz +0 -0
- package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js +1 -0
- package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js.br +0 -0
- package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js.gz +0 -0
- package/ai.plurnk/dist/assets/session-BgePzPYk.js +4 -0
- package/ai.plurnk/dist/assets/session-BgePzPYk.js.br +0 -0
- package/ai.plurnk/dist/assets/session-BgePzPYk.js.gz +0 -0
- package/ai.plurnk/dist/assets/session-agent-DWERfauE.js +111 -0
- package/ai.plurnk/dist/assets/session-agent-DWERfauE.js.br +0 -0
- package/ai.plurnk/dist/assets/session-agent-DWERfauE.js.gz +0 -0
- package/ai.plurnk/dist/assets/src-BdHyjaXT.js +1 -0
- package/ai.plurnk/dist/assets/src-BdHyjaXT.js.br +0 -0
- package/ai.plurnk/dist/assets/src-Vt7-ppeC.js +6 -0
- package/ai.plurnk/dist/assets/src-Vt7-ppeC.js.br +0 -0
- package/ai.plurnk/dist/assets/src-Vt7-ppeC.js.gz +0 -0
- package/ai.plurnk/dist/icons/APACHE-2.0.txt +202 -0
- package/ai.plurnk/dist/icons/APACHE-2.0.txt.br +0 -0
- package/ai.plurnk/dist/icons/APACHE-2.0.txt.gz +0 -0
- package/ai.plurnk/dist/icons/NOTO-NOTICE.txt +10 -0
- package/ai.plurnk/dist/icons/NOTO-NOTICE.txt.br +0 -0
- package/ai.plurnk/dist/icons/NOTO-NOTICE.txt.gz +0 -0
- package/ai.plurnk/dist/icons/plurnk-maskable.svg +64 -0
- package/ai.plurnk/dist/icons/plurnk-maskable.svg.br +0 -0
- package/ai.plurnk/dist/icons/plurnk-maskable.svg.gz +0 -0
- package/ai.plurnk/dist/icons/plurnk.svg +63 -0
- package/ai.plurnk/dist/icons/plurnk.svg.br +0 -0
- package/ai.plurnk/dist/icons/plurnk.svg.gz +0 -0
- package/ai.plurnk/dist/index.html +421 -0
- package/ai.plurnk/dist/manifest.webmanifest +27 -0
- package/ai.plurnk/dist/manifest.webmanifest.br +0 -0
- package/ai.plurnk/dist/manifest.webmanifest.gz +0 -0
- package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt +25 -0
- package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt.br +0 -0
- package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt.gz +0 -0
- package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt +571 -0
- package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt.br +0 -0
- package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt.gz +0 -0
- package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt +25 -0
- package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt.br +0 -0
- package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt.gz +0 -0
- package/ai.plurnk/dist/vendor/OTM-LICENSE.txt +21 -0
- package/ai.plurnk/dist/vendor/OTM-LICENSE.txt.br +0 -0
- package/ai.plurnk/dist/vendor/OTM-LICENSE.txt.gz +0 -0
- package/ai.plurnk/dist/vendor/PICO-LICENSE.txt +21 -0
- package/ai.plurnk/dist/vendor/PICO-LICENSE.txt.br +0 -0
- package/ai.plurnk/dist/vendor/PICO-LICENSE.txt.gz +0 -0
- package/ai.plurnk/documents.js +483 -0
- package/ai.plurnk/http.js +69 -0
- package/ai.plurnk/index-document.js +5 -0
- package/ai.plurnk/module.js +326 -0
- package/ai.plurnk/session.js +319 -0
- package/ai.plurnk/static-assets.js +40 -0
- package/package.json +92 -5
- package/plugin.json +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,i as t,n,r}from"./preload-helper-BjS5LQBu.js";import{_ as i,a,f as o,g as s,i as c,m as l,o as u,p as d,u as f}from"./session-agent-DWERfauE.js";var p=e=>typeof e==`object`&&!!e&&!Array.isArray(e),m=(e,t)=>e.reply!==null&&t.reply!==null?t.reply.id-e.reply.id:e.reply===null?t.reply===null?0:1:-1;function h(h){let{auth:g,workspaceId:_}=h.dataset;if(g!==`session`&&g!==`none`)throw Error(`Overview document metadata is incomplete.`);let v=g,y=_&&/^[1-9]\d*$/u.test(_)?Number(_):void 0,b=new AbortController,x=new Map,S=new WeakMap,C=new WeakMap,w=0;async function T(r){let i=r.getAttribute(`data-session-reply`);if(!i||r.dataset.replyLoaded===i||C.get(r)===i)return;let a=Symbol(`reply-read`);S.set(r,a),C.set(r,i),e(r,`bodyState`,`loading`),r.setAttribute(`aria-busy`,`true`),r.removeAttribute(`role`),r.replaceChildren();try{let t=await f(i,v,b.signal);if(!r.isConnected||S.get(r)!==a||r.getAttribute(`data-session-reply`)!==i)return;r.replaceChildren(d(t,`reply-${++w}`)),r.dataset.replyLoaded=i,e(r,`bodyState`,`loaded`)}catch(o){if(!r.isConnected||S.get(r)!==a||r.getAttribute(`data-session-reply`)!==i||o instanceof DOMException&&o.name===`AbortError`)return;let s=n.clone(r,`#conversation-literal`);s.textContent=o instanceof Error?o.message:String(o),s.setAttribute(`role`,`alert`),e(r,`bodyState`,`error`);let c=n.clone(r,`#conversation-body-retry`);t(c,`submit`,`form`,e=>{e.preventDefault(),T(r)})}finally{S.get(r)===a&&(C.delete(r),r.isConnected&&r.removeAttribute(`aria-busy`))}}function E(e){if(e.ontoggle=()=>{if(!e.open)return;let t=n(e,`:scope > [data-session-reply]`);t instanceof HTMLElement&&T(t)},e.open){let t=n(e,`:scope > [data-session-reply]`);t instanceof HTMLElement&&T(t)}}for(let e of r(h,`li[data-directory-entry="session"] > article > details`))e instanceof HTMLDetailsElement&&E(e);function D(t){if(!p(t)||!Array.isArray(t.sessions))return;let a=p(t._meta)&&p(t._meta.plurnk)?t._meta.plurnk:null,o=new Map;if(Array.isArray(a?.workspaces))for(let e of a.workspaces)p(e)&&typeof e.id==`number`&&typeof e.name==`string`&&o.set(e.id,{name:e.name,projectRoot:typeof e.projectRoot==`string`?e.projectRoot:null,projectLabel:typeof e.projectLabel==`string`?e.projectLabel:null});if(y!==void 0){let t=o.get(y);if(t){e(`page-title`,`${t.name} — Plurnk`);let i=n(`header nav[aria-label="breadcrumb"] [aria-current="page"][data-text="name"]`);if(i){i.textContent!==t.name&&(i.textContent=t.name);let e=i.previousElementSibling;if(e){let n=t.projectLabel!==null&&t.projectLabel!==t.name,r=n||t.projectRoot===null?`☁️`:`🗂️`,i=n?`Workspace`:t.projectRoot===null?`Folderless workspace`:`Project workspace`;e.textContent!==r&&(e.textContent=r),e.getAttribute(`aria-label`)!==i&&e.setAttribute(`aria-label`,i)}}for(let e of r(h,`dialog form input[name="workspace"]`))e instanceof HTMLInputElement&&(e.value=t.name)}}let s=[];for(let e of t.sessions){if(!p(e)||e.archived===!0)continue;let t=p(e._meta)&&p(e._meta.plurnk)?e._meta.plurnk:null;if(!t||t.archived===!0||typeof t.id!=`number`||typeof t.workspaceId!=`number`||typeof t.name!=`string`)continue;let n=o.get(t.workspaceId),r=typeof t.workspaceName==`string`?t.workspaceName:n?.name??String(t.workspaceId),i=typeof t.projectRoot==`string`?t.projectRoot:t.projectRoot===null?null:n?.projectRoot??null,a=p(t.reply)?t.reply:null,c=a&&typeof a.id==`number`&&typeof a.coordinate==`string`&&(a.completion===200||a.completion===499)?{id:a.id,coordinate:a.coordinate,completion:a.completion}:null;s.push({id:t.id,workspaceId:t.workspaceId,workspaceName:r,projectRoot:i,name:t.name,parentSessionId:typeof t.parentSessionId==`number`?t.parentSessionId:null,origin:`model`,lifecycle:typeof t.lifecycle==`string`?t.lifecycle:`idle`,reply:c})}let c=s.toSorted(m),u=new Map(c.map(e=>[e.id,e]));for(let e of c)e.parentSessionId!==null&&!u.has(e.parentSessionId)&&u.set(e.parentSessionId,{id:e.parentSessionId,workspaceId:e.workspaceId,workspaceName:e.workspaceName,projectRoot:e.projectRoot,name:`_plurnk`,parentSessionId:null,origin:`_plurnk`,lifecycle:`idle`,reply:null});let d=Map.groupBy(c,({parentSessionId:e})=>e),f=c.filter(e=>{if(e.parentSessionId===null)return!1;let t=u.get(e.parentSessionId);return t!==void 0&&t.origin!==`model`}),g=new Set,_=(e,t)=>{let r=`${t.workspaceId}:${t.id}`,a=x.get(r);if(!a||!a.isConnected){let o=i({kind:`session`,workspace:t.workspaceName,session:t.name});if(o!==null){let e=n(h,`li[data-directory-entry="session"] a[data-session-link][href="${CSS.escape(o)}"]`)?.closest(`li[data-directory-entry="session"]`);e instanceof HTMLLIElement&&!g.has(e)&&(a=e)}a??=n.clone(e,`#session-card`),x.set(r,a)}return g.add(a),a},v=(e,t)=>{let r=d.get(t.id)??[],a=t.parentSessionId===null?null:u.get(t.parentSessionId)??null,o=r.length>0||t.reply!==null,{header:s,body:c}=l(e,o),f=n(s,`[data-session-identity]`),p=n(s,`[data-session-workspace]`);if(f){let e=n(f,`[data-session-link]`),r=i({kind:`session`,workspace:t.workspaceName,session:t.name});if(e&&r!==null){e.getAttribute(`href`)!==r&&e.setAttribute(`href`,r),e.getAttribute(`aria-label`)!==t.name&&e.setAttribute(`aria-label`,t.name);let n=`Open session ${t.name}`;e.getAttribute(`title`)!==n&&e.setAttribute(`title`,n)}let o=n(f,`[data-lifecycle]`);o&&o.getAttribute(`data-lifecycle`)!==t.lifecycle&&(o.setAttribute(`data-lifecycle`,t.lifecycle),o.setAttribute(`aria-label`,t.lifecycle),o.setAttribute(`title`,t.lifecycle));let s=n(f,`:scope > span:last-child`);s&&s.textContent!==t.name&&(s.textContent=t.name);let c=n(f,`[data-session-parent]`);if(a===null)c?.remove();else if(s){let e=a.origin===`model`?i({kind:`session`,workspace:t.workspaceName,session:a.name}):null;if(e!==null){let t=c?n(c,`a`):null;(!c||!t)&&(c?.remove(),c=n.clone(s,`#session-parent-link`,{position:`beforebegin`}),t=n(c,`a`)),t&&(t.getAttribute(`href`)!==e&&t.setAttribute(`href`,e),t.getAttribute(`data-session-name`)!==a.name&&t.setAttribute(`data-session-name`,a.name),t.textContent!==a.name&&(t.textContent=a.name))}else{let e=c&&!n(c,`a`)?n(c,`span`):null;(!c||!e)&&(c?.remove(),c=n.clone(s,`#session-parent-text`,{position:`beforebegin`}),e=n(c,`span`)),e&&e.textContent!==a.name&&(e.textContent=a.name)}}}if(p){let e=n(p,`[data-folder]`),r=String(t.projectRoot!==null),a=t.projectRoot===null?`Folderless workspace`:`Project workspace`;e&&(e.getAttribute(`data-folder`)!==r&&e.setAttribute(`data-folder`,r),e.getAttribute(`aria-label`)!==a&&e.setAttribute(`aria-label`,a));let o=n(p,`[data-text="name"]`),s=i({kind:`workspace`,workspace:t.workspaceName});o&&(o.textContent!==t.workspaceName&&(o.textContent=t.workspaceName),s!==null&&o.getAttribute(`href`)!==s&&o.setAttribute(`href`,s))}if(!(c instanceof HTMLDetailsElement))return;let m=n(c,`:scope > ul`),h=n(c,`:scope > [data-session-reply]`);if(r.length>0?(m||=h?n.clone(h,`#overview-list`,{position:`beforebegin`}):n.clone(c,`#overview-list`),b(m,r)):m?.remove(),t.reply!==null){let e=`/acp/${t.workspaceId}/${t.id}/entry?target=${encodeURIComponent(`log:///${t.reply.coordinate}`)}`,r=h instanceof HTMLElement?h:n.clone(c,`#session-reply`);r.getAttribute(`data-session-reply`)!==e&&(r.setAttribute(`data-session-reply`,e),delete r.dataset.replyLoaded,S.delete(r),C.delete(r),r.removeAttribute(`aria-busy`),r.replaceChildren()),c.open&&T(r)}else h?.remove();E(c)};function b(e,t){for(let[n,r]of t.entries()){let t=_(e,r);e.children[n]!==t&&e.insertBefore(t,e.children[n]??null),v(t,r)}for(;e.children.length>t.length;)e.lastElementChild?.remove()}let w=n(h,`:scope > dialog`),D=n(h,`:scope > p[data-i18n="no-sessions"]`),O=n(h,`:scope > ul`),k=n(h,`:scope > details`);if(c.length===0){O?.remove(),k?.remove(),D||(w?n.clone(w,`#overview-empty`,{position:`beforebegin`}):n.clone(h,`#overview-empty`));return}D?.remove();let A=d.get(null)??[];if(A.length>0){if(!O){let e=k??w;O=e?n.clone(e,`#overview-list`,{position:`beforebegin`}):n.clone(h,`#overview-list`)}b(O,A)}else O?.remove();if(f.length>0){k||=w?n.clone(w,`#overview-background`,{position:`beforebegin`}):n.clone(h,`#overview-background`);let e=n(k,`:scope > ul`);e&&b(e,f)}else k?.remove()}async function O(t){e(h,`connection`,`connecting`);let n=await s(v,t);t.throwIfAborted();let r=new AbortController;t.onabort=()=>r.abort(t.reason);let i,l=Promise.withResolvers(),d=Promise.withResolvers(),f=async(e,t)=>{if(t?.method===`DELETE`)return new Response(null,{status:204});let a=new Headers(t?.headers);for(let[e,t]of Object.entries(n))a.set(e,t);let s=t?.signal?AbortSignal.any([t.signal,r.signal]):r.signal,c;try{c=await fetch(e,{...t,headers:a,signal:s})}catch(e){throw t?.method===`GET`&&l.resolve(void 0),s.aborted||d.reject(e),e}if(!c.ok&&i===void 0){let e=await o(c.clone());i=e?{message:e.message,status:e.status}:{message:c.statusText||`HTTP ${c.status}`,status:c.status}}if(t?.method!==`GET`)return c;if(l.resolve(void 0),!c.ok||!c.body||!c.headers.get(`content-type`)?.toLowerCase().includes(`text/event-stream`))return s.aborted||d.reject(Object.assign(Error(i?.message??`Overview stream closed.`),{status:i?.status??c.status})),c;let u=c.body.getReader(),f=new ReadableStream({async pull(e){try{let{done:t,value:n}=await u.read();if(t){e.close(),s.aborted||d.reject(Object.assign(Error(i?.message??`Overview stream ended.`),{status:i?.status}));return}e.enqueue(n)}catch(t){s.aborted||d.reject(t),e.error(t)}},cancel:e=>u.cancel(e)});return new Response(f,{status:c.status,statusText:c.statusText,headers:c.headers})},p=new URL(`/acp`,location.origin).href,m=c(p,{fetch:f,headers:n,cookies:`omit`}),g=a({name:`@plurnk/plurnk-web`});g.onNotification(`_plurnk/overview`,e=>e,({params:e})=>{r.signal.aborted||D(e)});let _=g.connect(m);try{await _.agent.request(u.agent.initialize,{protocolVersion:2,info:{name:`@plurnk/plurnk-web`,version:`1.0.0`},capabilities:{}}),await l.promise;let t=await _.agent.request(u.agent.session.list,{_meta:{plurnk:{subscribe:!0,...y===void 0?{}:{workspaceId:y}}}});if(r.signal.aborted)return;D(t),e(h,`connection`,`connected`),await d.promise}catch(e){throw i!==void 0&&!t.aborted?Object.assign(Error(i.message),{status:i.status}):e}finally{r.abort(),_.close()}}let k=()=>{O(b.signal).catch(t=>{if(b.signal.aborted)return;let n=Reflect.get(Object(t),`status`)===401;e(h,`connection`,n?`signed-out`:`disconnected`)})};window.onpagehide=()=>{b.abort(),e(h,`connection`,`closed`)},window.onpageshow=e=>{e.persisted&&(b=new AbortController,k())},k()}export{h as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{static on(e,t,n,r){if(typeof n!=`string`||!n.trim()||typeof r!=`function`)throw TypeError(`on(): expected (parent, event, selector, handler)`);let i=typeof e==`string`?document.querySelector(e):e||document.body;if(!i)throw Error(`on(): parent selector matched nothing: ${e}`);let a=e=>{let t=e.target.closest(n);t&&i.contains(t)&&r.call(t,e,t)};return i.addEventListener(t,a),()=>i.removeEventListener(t,a)}static emit(e,t,n){let r=typeof e==`string`?document.querySelector(e):e,i=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});r.dispatchEvent(i)}},t=class{static validate(e){let t=e=>typeof e==`object`&&!!e&&!Array.isArray(e);if(!t(e))throw TypeError(`i18n dictionary must be an object`);for(let[n,r]of Object.entries(e))if(typeof r!=`string`&&!(t(r)&&Object.hasOwn(r,`other`)&&Object.keys(r).every(e=>[`zero`,`one`,`two`,`few`,`many`,`other`].includes(e))&&Object.values(r).every(e=>typeof e==`string`)))throw TypeError(`i18n dictionary entry ${JSON.stringify(n)} must be a string or plural-form object of strings with an other form`);return e}},n=class e{static compatible(e,t){let n=new Intl.Locale(e).maximize(),r=new Intl.Locale(t).maximize();return n.language===r.language&&n.script===r.script}static chain(t){let n=new Intl.Locale(t).baseName,r=[],i=n;for(;i;){e.compatible(n,i)&&r.push(i);let t=i.lastIndexOf(`-`);i=t<0?``:i.slice(0,t)}return r}},r=class e{static#e=[{dictionary:{},locale:null}];static#t=new WeakMap;static locale=typeof navigator<`u`?navigator.language:`en`;static prefix=`otm:`;static persistKeys=new Set;static get dictionary(){return e.#e[0].dictionary}static set dictionary(n){e.#e=[{dictionary:t.validate(n),locale:null}]}static#n(e){return e.replace(/_/g,`-`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase()}static the(...t){if(t.length===0)throw TypeError(`the(): missing args`);return t[0]instanceof Element?e.#r(t[0],t.slice(1)):e.#r(document.body,t)}static#r(t,n){let[r,i]=n,a=t===document.body;if(n.length===1&&typeof r==`string`)return e.#p(t,e.#n(r));if(n.length===2&&typeof r==`string`){if(i===void 0)throw TypeError(`the(${JSON.stringify(r)}, undefined): val is required for set`);return e.#d(t,a,r,i),t}if(n.length===1&&r?.constructor===Object){for(let[n,i]of Object.entries(r))e.#d(t,a,n,i);return t}throw TypeError(`the(): unrecognized call shape (${n.map(e=>typeof e).join(`, `)})`)}static match(e,t){let n=t??(typeof window<`u`&&window.location?window.location.pathname:``),r=[],i=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`).replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,(e,t)=>(r.push(t),`([^/]+)`)),a=n.match(RegExp(`^${i}$`));if(!a)return null;let o={};return r.forEach((e,t)=>{o[e]=decodeURIComponent(a[t+1])}),o}static flat(e,t=`_`){if(typeof e!=`object`||!e)throw TypeError(`the.flat: input must be an object`);let n={},r=(e,i)=>{if(typeof e!=`object`||!e)n[i]=e;else for(let[n,a]of Object.entries(e))r(a,i?`${i}${t}${n}`:n)};return r(e,``),n}static form(t){let n={},r=t.querySelectorAll(`input, select, textarea`);for(let t of r){let r=t.name;if(!r||t.disabled)continue;let i=(t.type||`text`).toLowerCase();if(i===`submit`||i===`button`||i===`reset`||i===`file`||(i===`checkbox`||i===`radio`)&&!(t.checked??t.hasAttribute(`checked`)))continue;if(t.tagName===`SELECT`&&t.hasAttribute(`multiple`)){let i=`selectedOptions`in t?t.selectedOptions:t.querySelectorAll(`option[selected]`);for(let t of i)e.#i(n,r,t.value);continue}let a=t.value??t.getAttribute(`value`)??``;e.#i(n,r,a)}return n}static#i(e,t,n){let r=t.endsWith(`[]`),i=t.split(/[[\]]/).filter(Boolean),a=i.find(e=>[`__proto__`,`prototype`,`constructor`].includes(e));if(a)throw TypeError(`the.form: unsafe field name ${JSON.stringify(t)} contains forbidden path segment ${JSON.stringify(a)}`);let o=e;for(let e=0;e<i.length;e++){let t=i[e];e===i.length-1?r?(o[t]||=[],o[t].push(n)):o[t]===void 0?o[t]=n:(Array.isArray(o[t])||(o[t]=[o[t]]),o[t].push(n)):(o[t]=o[t]||{},o=o[t])}}static _t(t,n={}){return(typeof Node<`u`?t instanceof Node:t?.nodeType)?(e.#a(t),t):t?e.#s(t,n)?.text??t:(e.#a(document.documentElement),``)}static#a(t,n=!1){let r=t.querySelectorAll?[t,...t.querySelectorAll(`[data-i18n]`)]:[t];for(let t of r)if(t.hasAttribute?.(`data-i18n`)){let r=t.getAttribute(`data-i18n`),i={};for(let e of t.attributes)if(e.name.startsWith(`data-i18n-`)&&e.name!==`data-i18n-type`){let t=e.name.replace(`data-i18n-`,``);i[t]=e.value}let a=t.getAttribute(`data-i18n-type`),o=n?null:e.#s(r,{...i,type:a}),s=e.#t.get(t);o===null?s&&(e.#m(t,s.text),e.#h(t,`lang`,s.lang)):(s||e.#t.set(t,{text:t.textContent,lang:t.getAttribute(`lang`)}),e.#m(t,o.text),e.#h(t,`lang`,o.locale))}}static#o(e){if(!e.currency)throw TypeError(`_t: type "currency" requires an explicit currency (options.currency or data-i18n-currency)`);return e.currency}static#s(t,r){let i=e.#e.find(({dictionary:e})=>Object.hasOwn(e,t)),a=i?.dictionary[t],o=i?.locale??e.locale,s=n.compatible(e.locale,o)?e.locale:o;if(a===void 0){if(r.val!==void 0&&(r.type===`currency`||r.type===`date`)){let t=r.type===`currency`?new Intl.NumberFormat(e.locale,{style:`currency`,currency:e.#o(r)}):new Intl.DateTimeFormat(e.locale);return{text:r.type===`date`?t.format(new Date(r.val)):t.format(Number(r.val)),locale:e.locale}}return null}if(typeof a==`object`){let e=r.qty===void 0?0:Number(r.qty),n=new Intl.PluralRules(o).select(e);a=a[n]??a.other??t}if(typeof a!=`string`)throw TypeError(`Invalid i18n dictionary entry ${JSON.stringify(t)}`);let c=a;for(let[t,n]of Object.entries(r)){let i=n;if(t===`val`&&r.type){let t=Number(n),a=r.type===`currency`?new Intl.NumberFormat(s,{style:`currency`,currency:e.#o(r)}):r.type===`date`?new Intl.DateTimeFormat(s):new Intl.NumberFormat(s);i=r.type===`date`?a.format(new Date(n)):a.format(t)}c=c.replaceAll(`{${t}}`,()=>i)}return{text:c,locale:o}}static#c=null;static route(t,{match:n}={}){if(typeof window>`u`)return;if(e.#c)throw Error(`route(): a router is already active — call its unsubscribe first`);let r=()=>t(window.location.pathname,window.location.search,window.location.hash);e.#c=r;let i=e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button>0)return;let t=e.target.closest(`a`);if(!t?.getAttribute(`href`)||t.hasAttribute(`data-external`)||t.hasAttribute(`download`)||t.target===`_blank`||n&&!t.matches(n))return;let i=new URL(t.getAttribute(`href`),window.location.href);i.origin===window.location.origin&&(i.pathname===window.location.pathname&&i.search===window.location.search&&i.hash||(e.preventDefault(),i.href!==window.location.href&&(window.history.pushState({},``,i.href),r())))};return window.addEventListener(`popstate`,r),window.addEventListener(`hashchange`,r),document.addEventListener(`click`,i),r(),()=>{window.removeEventListener(`popstate`,r),window.removeEventListener(`hashchange`,r),document.removeEventListener(`click`,i),e.#c=null}}static go(t){if(typeof window>`u`)return;if(!e.#c)throw Error(`route.go(): no active router — call route() first`);let n=new URL(t,window.location.href);n.href!==window.location.href&&(window.history.pushState({},``,n.href),e.#c())}static#l={expanded:`aria-expanded`,selected:`aria-selected`,hidden:`aria-hidden`,checked:`aria-checked`,disabled:`aria-disabled`};static#u(t,n){return t===document.body?`data-${n}`:e.#l[n]||`data-${n}`}static#d(t,n,r,i){let a=e.#n(r);if(i===null){e.#_(t,a),n&&e.persistKeys.has(a)&&localStorage.removeItem(`${e.prefix}${a}`);return}let o=e.#f(a,i);e.#g(t,a,o),n&&e.persistKeys.has(a)&&localStorage.setItem(`${e.prefix}${a}`,o)}static#f(e,t){if(typeof t==`string`)return t;if(typeof t==`boolean`)return t?`true`:`false`;if(typeof t==`number`&&Number.isFinite(t))return String(t);throw TypeError(`the(${JSON.stringify(e)}, ...): state value must be a string, finite number, boolean, or null`)}static#p(t,n){return t.getAttribute(e.#u(t,n))}static#m(e,t){e.textContent!==t&&(e.textContent=t)}static#h(e,t,n){e.getAttribute(t)!==n&&(n===null?e.removeAttribute(t):e.setAttribute(t,n))}static#g(t,n,r){e.#h(t,e.#u(t,n),r),e.#v(t,n,r,!1)}static#_(t,n){e.#h(t,e.#u(t,n),null),e.#v(t,n,``,!0)}static#v(t,n,r,i){let a=t===document.body&&typeof document<`u`?document.documentElement||document:t;if(a.querySelectorAll){for(let t of a.querySelectorAll(`[data-text="${n}"]`))e.#m(t,r);for(let t of a.querySelectorAll(`[data-bind*="${n}"]`))e.#y(t,n,r,i)}t.getAttribute?.(`data-text`)===n&&e.#m(t,r),e.#y(t,n,r,i)}static#y(t,n,r,i){let a=t.getAttribute?.(`data-bind`);if(a)for(let o of a.split(/\s+/)){let a=o.indexOf(`:`);if(a<1||o.slice(a+1)!==n)continue;let s=o.slice(0,a);e.#h(t,s,i?null:r)}}static async boot({signal:r,locales:i,dictionary:a,namespace:o,locale:s,defaultLocale:c,persistKeys:l}={}){o&&(e.prefix=`${o}:`),l&&(e.persistKeys=new Set(l.map(t=>e.#n(t))));let u=typeof window<`u`&&window.location?window.location.search:``,d=new URLSearchParams(u),f=document.documentElement.lang||(typeof navigator<`u`?navigator.language:null)||`en`,p=new Intl.Locale(s||d.get(`lang`)||e.persistKeys.has(`lang`)&&localStorage.getItem(`${e.prefix}lang`)||f).toString(),m=c||document.documentElement.lang,h=m?new Intl.Locale(m).baseName:null;c&&e.#h(document.documentElement,`lang`,new Intl.Locale(c).toString());let g=[];if(a!==void 0)g.push({dictionary:t.validate(a),locale:p});else{let e=document.querySelector(`meta[name="i18n"]`),a=i||e?.getAttribute(`content`);if(a){let i=e?.getAttribute(`data-fallback`)||h||`en`,o=new Map((e?.getAttribute(`data-available`)||``).split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>[new Intl.Locale(e).baseName,e])),s=n.chain(p);h&&n.compatible(p,h)&&s.push(h);let c=new Set([...s,...n.chain(i),...h?[h]:[]]);for(let e of c){if(e===h&&!o.has(e))break;let n=o.get(e)??(o.size===0&&e===new Intl.Locale(i).baseName?i:null);if(n){try{let i=await fetch(`${a}/${n}.json`,{signal:r});if(!i.ok)throw Error(`HTTP ${i.status} for ${n}.json`);g.push({dictionary:t.validate(await i.json()),locale:e})}catch(t){if(r?.aborted)throw t;console.warn(`otm: i18n fetch failed for "${e}"`,t)}if(e===h)break}}}}let _=g[0]?.locale??h??p;e.locale=n.compatible(p,_)?p:_,e.#e=g.length?g:[{dictionary:{},locale:null}];for(let t of e.persistKeys){if(t===`lang`)continue;let n=localStorage.getItem(`${e.prefix}${t}`);n!==null&&e.#g(document.body,t,n)}e.#a(document.documentElement,h!==null&&g.length===0)}},i=class e{static $(e,t){let n=e,r=t;return typeof n==`string`&&(r=n,n=document),n.querySelector(r)}static $$(e,t){let n=e,r=t;return typeof n==`string`&&(r=n,n=document),Array.from(n.querySelectorAll(r))}static clone(e,t,{position:n=`beforeend`}={}){let i=typeof e==`string`?document.querySelector(e):e,a=document.querySelector(t);if(!i)throw Error(`Parent not found: ${e}`);if(!a)throw Error(`Template not found: ${t}`);let o=a.content.cloneNode(!0).firstElementChild;r._t(o),i.insertAdjacentElement(n,o);let s=new CustomEvent(`mounted`,{bubbles:!0,detail:{parent:i}});return o.dispatchEvent(s),o}static cloneEach(t,n,r,i){let a=typeof t==`string`?document.querySelector(t):t;if(!a)throw Error(`Parent not found: ${t}`);a.replaceChildren();let o=[],s=0;for(let t of r){let r=e.clone(a,n);i?.(r,t,s++),o.push(r)}return o}},a=e.on;a.emit=e.emit;var o=r.the,s=r._t,c=r.route;c.go=r.go,o.t=s,o.route=c,o.form=r.form,o.flat=r.flat,o.match=r.match,o.boot=r.boot,Object.defineProperty(o,"dictionary",{get:()=>r.dictionary,set:e=>{r.dictionary=e}}),Object.defineProperty(o,"locale",{get:()=>r.locale,set:e=>{r.locale=e}});var l=i.$;l.clone=i.clone,l.cloneEach=i.cloneEach;var u=i.$$,d=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),f=function(e){return`/`+e},p={},m=function(e){return e.pathname.endsWith(`.css`)},h=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},g=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=f(t,n);let r=s(t),i=m(r);return h(p,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:d,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};export{o as a,a as i,l as n,u as r,g as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/src-BdHyjaXT.js","assets/src-Vt7-ppeC.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e,i as t,n,r,t as i}from"./preload-helper-BjS5LQBu.js";import{i as a,t as o}from"./src-Vt7-ppeC.js";import{_ as s,a as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C}from"./session-agent-DWERfauE.js";var w=e=>typeof e==`object`&&!!e&&!Array.isArray(e),T=/^(?:(?:[-*+•]|(?:\d+|[A-Za-z])[.)])\s+)?\[(?:[xX]|done|DONE|completed|COMPLETED)\](?:\s+|$)/u,E=/^(?:(?:[-*+•]|(?:\d+|[A-Za-z])[.)])\s+(?:\[\s*\]\s+)?|\[\s*\]\s+|[-*+•]\s*$)/u,D=[`content`,`text`,`title`,`item`,`todo`,`description`,`name`],O=[`todo`,`todos`,`items`,`steps`,`tasks`],k=new Set([`sessions`,`streams`,`messages`,`todo`]);function A(e){let t=e.trim();if(t.length===0||T.test(t))return null;let n=t.replace(E,``).trim();return n.length>0&&!T.test(n)?n:null}function j(e){if(e.done===!0||e.completed===!0)return!0;if(typeof e.status==`string`){let t=e.status.toLowerCase();if(t===`completed`||t===`done`)return!0}return!1}function M(e){let t=e.trim().replace(/,\s*$/u,``);if(t.length!==0){if(t.startsWith(`[`)||t.startsWith(`{`))try{return JSON.parse(t)}catch{return}if(/^(?:"(?:todo|todos|items|steps|tasks)"|todo|todos|items|steps|tasks)\s*:/iu.test(t)){let e=t.replace(/^([A-Za-z]+)\s*:/u,`"$1":`);try{return JSON.parse(`{${e}}`)}catch{return}}}}function N(e){if(typeof e==`string`)return P(e);if(Array.isArray(e)){let t=[];for(let n of e)if(typeof n==`string`){let e=A(n);e!==null&&t.push(e)}else if(w(n)){if(j(n))continue;let e=!1;for(let r of D){let i=n[r];if(typeof i==`string`){let n=A(i);n!==null&&t.push(n),e=!0;break}}e||t.push(...N(n))}return t}if(w(e)){for(let t of O)if(t in e)return N(e[t]);let t=Object.entries(e).filter(([e])=>!k.has(e));if(t.length===0)return[];let n=[];for(let[e,r]of t)if(typeof r==`string`){let e=A(r);e!==null&&n.push(e)}else if(typeof r==`boolean`||r===null){if(r!==!1){let t=A(e);t!==null&&n.push(t)}}else(Array.isArray(r)||w(r))&&n.push(...N(r));return n}return[]}function P(e){let t=[];for(let n of e.split(/\r?\n/u)){let e=n.trim();if(e.length===0)continue;let r=M(e);if(r!==void 0){t.push(...N(r));continue}let i=A(e);i!==null&&t.push(i)}return t}function F(e){if(typeof e!=`string`)return[];let t=e.trim();if(t.length===0)return[];let n=M(t);return n===void 0?P(t):N(n)}var I=e=>typeof e==`number`?e:e.length;function L(e){if(e.length===0)return[];let t=new Set(e.map(({id:e})=>e)),n=new Set(e.filter(({parentSessionId:e})=>e===null||!t.has(e)).map(({parentSessionId:e})=>e));if(t.size!==e.length||n.size!==1)throw Error(`Descendant census is not one session tree.`);let r=[...n][0];if(r===null)throw Error(`Descendant census is not one session tree.`);let i=Map.groupBy(e,({parentSessionId:e})=>e),a=0,o=e=>(i.get(e)??[]).map(e=>(a++,{session:e,children:o(e.id)})),s=o(r);if(a!==e.length)throw Error(`Descendant census is not one session tree.`);return s}function R(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return`${t?`${t}h`:``}${t||n?`${n}m`:``}${t||n?String(e%60).padStart(2,`0`):e%60}s`}function z(e,t){return e.claimedAt===null?``:R(Math.max(0,Math.floor(((e.terminatedAt??t)-e.claimedAt)/1e3)))}function ee(e,t){return{elapsed:z(e,t),wait:e.waitUntil===null?``:R(Math.max(0,Math.ceil((e.waitUntil-t)/1e3))),waitAt:e.waitUntil===null?null:new Date(e.waitUntil).toISOString()}}var te=new Intl.NumberFormat(`en`,{notation:`compact`,maximumFractionDigits:1}),ne=4,B=new Intl.NumberFormat(`en`,{style:`currency`,currency:`USD`,minimumFractionDigits:ne,maximumFractionDigits:ne}),V=e=>te.format(e).toLowerCase();function re(e){let t=Number(e),n=10**-4;return t>0&&t<n?`<${B.format(n)}`:B.format(t)}function H(e,t,n){return e==null?t==null?{text:`?`,exact:`unknown`}:{text:`${n(t)} + ?`,exact:`unknown total; known subtotal ${t}`}:{text:n(e),exact:String(e)}}var ie=(e,t)=>e!=null&&t!=null&&t>0?`${Math.round(e/t*100)}%/${V(t)}`:``;function U(e,t){let{model:n,spend:r}=e,i=L(e.descendants).filter(({session:e})=>[`queued`,`running`,`parked`].includes(e.lifecycle)).length,a=H(r.usage?.inputTokens,r.knownUsage?.inputTokens,V),o=H(r.usage?.outputTokens,r.knownUsage?.outputTokens,V),s=H(r.costUsd,r.knownCostUsd,re),c=e.descendants.filter(({gates:e})=>I(e)>0).length;return{lifecycle:e.lifecycle,input:a.text,output:o.text,cost:s.text===`?`?`$?`:s.text,usageLabel:`Cumulative tokens, session and descendants. Input: ${a.exact}. Output: ${o.exact}.`,costLabel:`Cumulative USD, session and descendants: ${s.exact}.`,model:n===null?`No model`:n.alias||`${n.provider}/${n.model}`,effort:n?.effort??``,modelLabel:n===null?`No model selected`:`Model: ${n.provider}/${n.model}${n.effort?`; effort: ${n.effort}${n.effortSource?` (${n.effortSource})`:``}`:``}`,descendants:String(e.descendants.length),descendantsLabel:`Descendant sessions: ${e.descendants.length}; active direct children: ${i}`,gated:String(c),gatedLabel:`Descendant sessions awaiting input: ${c}`,context:ie(t?.contextTokens,t?.contextCapacity),contextLabel:`Current packet context: ${t?.contextTokens??`unknown`} / ${t?.contextCapacity??`unknown`} tokens`,inbox:String(e.inbox.length),inboxLabel:`Accepted messages not yet observed: ${e.inbox.length}`}}function ae({name:e,projectLabel:t},n){let r=s({kind:`workspace`,workspace:e}),i=s({kind:`session`,workspace:e,session:n});if(r===null||i===null)throw Error(`Workspace has no directory address.`);let a=t!==null&&t!==e;return{workspaceName:e,workspacePath:r,sessionPath:i,projectLabel:a?t:``,workspaceIcon:t!==null&&!a?`🗂️`:`☁️`,workspaceIconLabel:t===null?`Folderless workspace`:a?`Workspace`:`Project workspace`,pageTitle:`${e}@${n} — Plurnk`}}function oe(t){let r=n(t,`#session-descendants > ul`);if(!r)throw Error(`Session document has no descendant outlet.`);let i=``,a=(t,r,i)=>{let o=new Map(Array.from(t.children,e=>[e.getAttribute(`data-descendant-id`),e])),c=new Set(r.map(({session:e})=>String(e.id)));for(let[e,t]of o)c.has(e??``)||t.remove();let l=null;for(let{session:c,children:u}of r){let r=o.get(String(c.id))??n.clone(t,`#session-descendant`),d=s({kind:`session`,workspace:i,session:c.name});if(d===null)throw Error(`Descendant has no directory address.`);e(r,{descendantId:c.id,descendantName:c.name,descendantPath:d,descendantKind:c.kind,descendantLifecycle:c.lifecycle,descendantGates:I(c.gates)});let f=n(r,`:scope > details`);if(u.length){f??=n.clone(r,`#session-descendant-children`),e(f,`descendant-children`,u.length);let t=n(f,`:scope > ul`);if(!t)throw Error(`Descendant branch has no list.`);a(t,u,i)}else f?.remove();let p=l===null?t.firstElementChild:l.nextElementSibling;p!==r&&t.insertBefore(r,p),l=r}};return(e,t)=>{let n=JSON.stringify([t,e]);n!==i&&(a(r,L(e),t),i=n)}}function se(t){let{sessionId:i,sessionName:a}=t.dataset;if(!i||!a)throw Error(`Session identity is incomplete.`);let o=n(`#session-workspace`),c=n(`#session-folder`),l=n(`#session-connection`);if(!o||!c||!l)throw Error(`Session status document is incomplete.`);let u=oe(t);return(n,d)=>{let{workspace:f,status:p}=n.plurnk??{};if(f){if(`${f.id}#${a}`!==i)throw Error(`Session state identifies a different workspace.`);let n=ae(f,a);e(`page-title`,n.pageTitle),e(o,{workspaceName:n.workspaceName,workspacePath:n.workspacePath,workspaceIcon:n.workspaceIcon,workspaceIconLabel:n.workspaceIconLabel}),e(c,`project-label`,n.projectLabel),e(l,{sessionPath:n.sessionPath,signInPath:`/auth/login?return=${encodeURIComponent(n.sessionPath)}`});for(let t of r(`main a[data-session-name]`)){let n=t.dataset.sessionName;if(!n)throw Error(`Session navigation has no identity.`);e(t,`session-path`,s({kind:`session`,workspace:f.name,session:n}))}e(t,{preparation:f.preparation.map(({family:e,alias:t,phase:n})=>`${n} ${e}${t?`/${t}`:``}`).join(`; `),activity:f.activity?`${f.activity.phase}${f.activity.percent===null?``:` ${f.activity.percent}%`}`:``,activityMessage:f.activity?.message??``})}if(p){if(!f)throw Error(`Session state has no workspace identity.`);e(t,{...U(p,n.budget??n.plurnk?.budget),...ee(p,d)}),u(p.descendants,f.name)}}}function ce(r,i){let a=new Map,o=new IntersectionObserver(e=>{for(let{target:t,isIntersecting:n}of e){if(!n||!t.isConnected)continue;let e=a.get(t);o.unobserve(t),a.delete(t),e!==void 0&&s(t,e)}});async function s(r,a){e(r,{bodyState:`loading`,bodyPending:`true`}),r.removeAttribute(`role`),r.replaceChildren();try{let t=await i(a);if(!r.isConnected)return;r.textContent=t,e(r,`bodyState`,`loaded`)}catch(i){if(!r.isConnected)return;if(i instanceof DOMException&&i.name===`AbortError`){e(r,`bodyState`,`idle`);let i=n.clone(r,`#conversation-body-read`,{position:`afterend`});t(i,`submit`,`form`,e=>{e.preventDefault(),i.remove(),s(r,a)});return}r.textContent=i instanceof Error?i.message:String(i),r.setAttribute(`role`,`alert`),e(r,`bodyState`,`error`);let o=n.clone(r,`#conversation-body-retry`,{position:`afterend`});t(o,`submit`,`form`,e=>{e.preventDefault(),o.remove(),s(r,a)})}finally{r.isConnected&&e(r,`bodyPending`,null)}}return{append(e,t,r){let i=n.clone(e,`#conversation-body-reference`);r&&i.setAttribute(`aria-label`,r),a.set(i,t.uri),o.observe(i)},prune(){for(let[e]of a)r.contains(e)||(o.unobserve(e),a.delete(e))}}}var le=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function ue(e){if(e===void 0)return``;if(!le(e))throw TypeError(`Reasoning metadata must be a record.`);let{sessionName:t,loopSeq:n,turnSeq:r,coordinate:i}=e;if(t!==void 0&&(typeof t!=`string`||!t))throw TypeError(`Reasoning sessionName must be a non-empty string.`);if((n!==void 0||r!==void 0)&&(typeof n!=`number`||!Number.isSafeInteger(n)||n<0||typeof r!=`number`||!Number.isSafeInteger(r)||r<0))throw TypeError(`Reasoning loopSeq and turnSeq must be non-negative integers.`);if(i!==void 0){if(typeof i!=`string`||!/^\d+\/\d+$/u.test(i))throw TypeError(`Reasoning coordinate must be loop/turn.`);if(n!==void 0&&i!==`${n}/${r}`)throw TypeError(`Reasoning coordinate must match loopSeq and turnSeq.`)}return[t,n===void 0?``:`Loop ${n} > Turn ${r}`].filter(Boolean).join(` > `)}function W(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function G(e){let t=W(e);if(t)return t;if(typeof e!=`string`)return null;try{return W(JSON.parse(e))}catch(e){if(e instanceof SyntaxError)return null;throw e}}function K(e){let t=W(e);if(t&&Number.isInteger(t.status))return t;let n=typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(e=>e?.type===`text`&&typeof e.text==`string`?[e.text]:e?.type===`content`&&e.content?.type===`text`&&typeof e.content.text==`string`?[e.content.text]:[]):[];for(let e of n){let t=G(e);if(t&&Number.isInteger(t.status))return t}return null}var q=e=>typeof e==`string`?e:``;function de(e,t){return typeof e?.body==`string`?e.body:t===`NOTE`?``:q(W(e?.body)?.raw)}function fe(e,t){let n=q(W(e?.target)?.raw)||q(t),r=W(e?.lineMarker)?.marks,i=q(W(e?.matcher)?.raw),a=[];return n&&a.push([`path`,`(${n})`]),Array.isArray(r)&&r.length&&a.push([`scope`,`<${r.join(`,`)}>`]),i&&a.push([`pattern`,i]),a}function pe(e,t){if(e!==`READ`&&e!==`FIND`)return null;if(e===`READ`&&Array.isArray(t?.lineOrdinals))return t.lineOrdinals.length;let n=W(t?.range),r=n?.returned;return Array.isArray(r)&&r.length===2&&r.every(Number.isSafeInteger)?Math.max(0,r[1]-r[0]+1):e===`FIND`&&typeof n?.total==`number`?n.total:null}function me(e,t,n){let r=W(e?.problem),i=[n];return typeof t==`number`&&t>=400?i.push(q(r?.title),q(r?.detail),q(r?.recovery),q(e?.detail)):t===204&&i.push(q(e?.detail)),[...new Set(i.filter(Boolean))].join(` — `)||(typeof t==`number`&&t>=400?String(t):``)}function he(t,r){for(let[i,a]of r){t.hasChildNodes()&&t.append(` `);let r=n.clone(t,`#operation-field`);e(r,`plurnk-field`,i),r.textContent=a}}var J=new WeakMap;function ge(e,t,r,i,a,o){if(t===null){e.replaceChildren();return}let s=q(a?.op)||t,c=q(r?.aside??a?.aside),l=i?.status??a?.status,u=pe(s,i),d=me(i,l,o),f=[];t!==`error`&&t===t.toLowerCase()&&f.push([`runtime`,t]),c&&f.push([`aside`,c]);let p=W(r?.source)||W(r?.destination)?[fe(W(r?.source),null),fe(W(r?.destination),null)]:[fe(r,i?.path??a?.address)],m=[];u!==null&&m.push([`count`,`{${u}}`]);let h=n(e,`:scope > [data-plurnk-field="heading"]`);h??=n.clone(e,`#operation-header`,{position:`afterbegin`});let g=JSON.stringify(f);J.get(h)!==g&&(h.replaceChildren(),he(h,f),J.set(h,g));let _=n(e,`:scope > [data-plurnk-operands]`);if(!p.some(e=>e.length)&&!m.length)_?.remove();else{_??=n.clone(h,`#operation-operands`,{position:`afterend`});let e=JSON.stringify([p,m]);if(J.get(_)!==e){_.replaceChildren();for(let e of p)e.length&&(_.hasChildNodes()&&_.append(` `),he(n.clone(_,`#operation-operand`),e));he(_,m),J.set(_,e)}}let v=n(e,`:scope > [data-plurnk-field="outcome"]`);d?(v??=n.clone(h,`#operation-outcome`,{position:`afterend`}),h.nextElementSibling!==v&&h.after(v),v.textContent!==d&&(v.textContent=d)):v?.remove()}var _e=new Set([`NOTE`,`TODO`,`FIND`,`READ`,`EDIT`,`COPY`,`MOVE`,`KILL`,`WORK`,`FORK`,`BARE`,`WAIT`,`SEND`,`DONE`,`FAIL`,`WARN`,`INFO`,`error`]),Y=e=>e===`SEND`||e===`DONE`||e===`FAIL`;function ve(e){if(typeof e?.loopSeq==`number`&&Number.isSafeInteger(e.loopSeq)&&e.loopSeq>=1)return e.loopSeq;if(typeof e?.coordinate==`string`){let t=/^(\d+)\/\d+(?:\/\d+)?$/u.exec(e.coordinate);if(t)return Number(t[1])}return null}function ye(e,t){let n=new Map;for(let t of e)t.loopId!==null&&t.loopSeq!==null&&n.set(t.loopId,t.loopSeq);for(let t of e)t.loopSeq===null&&t.loopId!==null&&(t.loopSeq=n.get(t.loopId)??null);let r=e.find(e=>e.loopSeq!==null)?.loopSeq??1,i=null;for(let[a,o]of e.entries())o.loopSeq===null?(o.loopId!==null&&n.has(o.loopId)?(r=n.get(o.loopId)??r,i=o.loopId):a>0&&t?.has(o.message.id)&&!o.call||o.loopId!==null&&i!==null&&o.loopId!==i?(r+=1,o.loopId!==null&&(i=o.loopId,n.set(o.loopId,r))):o.loopId!==null&&i===null&&(i=o.loopId,n.set(o.loopId,r)),o.loopSeq=r):(r=o.loopSeq,o.loopId!==null&&(i=o.loopId,n.set(o.loopId,r)))}function be(e){let t=new Set([e.message.id]),n=e.receipt?.resource??e.facts?.address??e.facts?.target;if(typeof n==`string`&&n){t.add(n);let e=n.lastIndexOf(`/`);e>=0&&e<n.length-1&&t.add(n.slice(e+1))}return typeof e.facts?.source==`string`&&e.facts.source&&t.add(e.facts.source),t}function xe(e){if(e.op!==`DONE`&&e.op!==`FAIL`)return[];let t=(Array.isArray(e.receipt?.repliedTo)?e.receipt.repliedTo:Array.isArray(e.facts?.repliedTo)?e.facts.repliedTo:[]).filter(e=>typeof e==`string`&&e.length>0),n=W(e.args?.target)?.raw;return typeof n==`string`&&n&&!t.includes(n)&&t.push(n),t}function Se(e){if(e.message.role===`reasoning`)return{key:`reasoning`,tally:`reasoning`,heading:``,label:`Reasoning`};let t=typeof e.op==`string`?e.op:e.call?.name??e.message.role,n=!_e.has(t);return{key:`op:${t}`,tally:t,heading:n?`${t} `:``,label:t}}function Ce(e){return!e.error&&e.call?.status!==`failed`&&e.call?.status!==`pending`&&!(typeof e.receipt?.status==`number`&&e.receipt.status>=400)&&!(typeof e.facts?.status==`number`&&e.facts.status>=400)&&e.facts?.state!==`proposed`&&e.facts?.state!==`failed`&&e.facts?.state!==`cancelled`}function we(e){let t=new Set,n=[];for(let r of e)if((r.op===`TODO`||r.operation?.name===`TODO`)&&Ce(r)){if(r.facts?.planRemoved===!0)continue;n.push(r)}else if((r.op===`KILL`||r.operation?.name===`KILL`)&&Ce(r)){let e=W(r.args?.target)?.raw??r.receipt?.path??r.facts?.address??r.facts?.target;if(typeof e==`string`&&e.startsWith(`log:///`)){let n=e.slice(7).replace(/\/[A-Za-z_][A-Za-z0-9_]*$/u,``);n&&t.add(n)}}let r=n.findLast(e=>{let n=typeof e.facts?.coordinate==`string`?e.facts.coordinate:e.call?.toolCallId??``;if(!n)return!0;for(let e of t)if(n===e||n.startsWith(`${e}/`))return!1;return!0});if(!r)return[];let i=W(r.facts?.plan);return Array.isArray(i?.entries)?i.entries.filter(e=>W(e)?.status===`pending`&&typeof W(e)?.content==`string`&&!!W(e)?.content).map(e=>String(W(e)?.content)):F(de(r.args,`TODO`))}function X(e,t,n,r){let i=n===null?e.firstElementChild:n.nextElementSibling;for(;i&&r?.(i);)i=i.nextElementSibling;return i!==t&&e.insertBefore(t,i??null),t}function Te(t,r){let i=n(t,`[data-messages]`);if(!(i instanceof HTMLUListElement))throw Error(`Conversation document has no message list.`);let a=ce(t,r),o=new WeakMap;function s(e,t,r,i){r?e.append(y(t,i)):t&&(n.clone(e,`#conversation-literal`).textContent=t)}function c(e,t,r,i){if(!e)return;let c=typeof t==`string`?`${r?`1`:`0`}:${t}`:JSON.stringify([t,r]);if(o.get(e)===c)return;let l=n(e,`:scope > summary`),u=n(e,`:scope > header`),d=n(e,`:scope > [data-prompt-replies]`);for(let t of Array.from(e.childNodes))t!==l&&t!==u&&t!==d&&t.remove();if(Array.isArray(t))for(let[n,o]of t.entries())o?.type===`text`&&typeof o.text==`string`?s(e,o.text,r,`${i}-part-${n}`):o?.type===`resource_link`&&typeof o.uri==`string`&&a.append(e,o);else typeof t==`string`&&s(e,t,r,i);d&&e.append(d),o.set(e,c)}function l(r,i){let{key:a,message:s,call:u,answered:d,operation:f,args:m,facts:h,op:_,receipt:v,operationName:y,summarized:b,error:x,conversational:S}=r,C=i.get(a);if(C&&C.dataset.messageRole!==s.role&&(C.remove(),C=void 0),!C){let e=n.clone(t,`#conversation-message`);if(!(e instanceof HTMLElement))throw Error(`Conversation template must contain an HTML element.`);C=e}let w=u?u.name:b?y:s.role===`tool`?`Result · ${d?.name??s.toolCallId}`:s.role===`activity`?s.activityType:{user:`User`,assistant:`Assistant`,reasoning:`Reasoning`,tool:`Result`,activity:`Activity`,system:`System`,developer:`Developer`}[s.role],T=`name`in s?s.name:void 0;e(C,{messageId:s.id,messageRole:s.role,messageLabel:[w,T,s.subagentRunId?`Subagent ${s.subagentRunId}`:null].filter(Boolean).join(` · `),messageAuthor:T??null,subagentRunId:s.subagentRunId??null,messageError:x?!0:null,toolCallId:s.role===`tool`?s.toolCallId:null,callId:u?.toolCallId??null,plurnkType:typeof _==`string`?_:null,plurnkSession:typeof h?.sessionId==`number`?h.sessionId:null,plurnkStatus:typeof v?.status==`number`?v.status:typeof h?.status==`number`?h.status:null,plurnkSignal:typeof v?.completion==`number`?v.completion:typeof h?.signal==`number`?h.signal:null,plurnkState:typeof h?.state==`string`?h.state:null});let E=s.role===`reasoning`?s._meta?.plurnk?.body:void 0;if(E!==void 0&&(typeof E?.url!=`string`||typeof E?.mimeType!=`string`))throw TypeError(`Reasoning body reference must supply its URL and MIME type.`);let D=u?de(m,_):b&&s.role===`tool`&&!Y(_)?``:E?[{type:`resource_link`,uri:E.url,mimeType:E.mimeType}]:s.content,O=u?Y(f?.name):s.role===`tool`?Y(h?.op):s.role!==`reasoning`&&s.role!==`activity`,k=typeof D==`string`?!!D:Array.isArray(D)&&D.some(e=>e?.type===`text`&&typeof e.text==`string`&&!!e.text||e?.type===`resource_link`&&typeof e.uri==`string`&&!!e.uri),A=g(C,k,!S);if(A.removedDisclosure&&A.body&&o.delete(A.body),c(A.body,D,O,u?`call-${u.toolCallId}`:`message-${s.id}`),b)o.delete(A.header),ge(A.header,y,m,v,h,x);else{let e=s.role===`reasoning`?ue(s._meta?.plurnk):``,t=`${e}\n${x}`;o.get(A.header)!==t&&(A.header.replaceChildren(),s.role===`reasoning`&&(n.clone(A.header,`#operation-header`).textContent=e),x&&(n.clone(A.header,`#operation-outcome`).textContent=x),o.set(A.header,t)),A.header.tagName===`HEADER`&&!A.header.hasChildNodes()&&A.header.remove()}A.header.isConnected&&p(A.header);let j=n(C,`:scope > article`),M=j?n(j,`:scope > [data-prompt-replies]`):null;if(r.nestedReplies.length>0&&j){M??=n.clone(j,`#prompt-replies`);let e=null;for(let t of r.nestedReplies){let n=l(t,i);e=X(M,n,e)}}else M&&M.remove();return C}function u(t,r){let i=new Map;for(let e of r){let t=Se(e),n=i.get(t.key);n?n.count+=1:i.set(t.key,{...t,count:1})}let a=[...i.values()];e(t,{operations:r[0].key,operationsLabel:a.map(e=>`${e.label} ${e.count}`).join(` · `)});let s=n(t,`:scope > details > summary > span`);if(!s)return;let c=JSON.stringify(a);if(o.get(s)!==c){s.replaceChildren();for(let[t,r]of a.entries()){t>0&&s.append(` · `);let i=n.clone(s,`#operation-tally`);e(i,{operationTally:r.tally});let a=n(i,`[data-plurnk-field="heading"]`);a&&(a.textContent=r.heading);let o=n(i,`[data-plurnk-field="count"]`);o&&(o.textContent=String(r.count))}o.set(s,c)}}return(r,s)=>{if(new Set(r.map(({id:e})=>e)).size!==r.length)throw Error(`Conversation has duplicate message identities.`);let c=r.flatMap(e=>e.role===`assistant`?e.toolCalls??[]:[]),d=new Map(c.map(e=>[e.toolCallId,e]));if(d.size!==c.length)throw Error(`Conversation has duplicate call identities.`);let f=r.flatMap(e=>e.role===`tool`&&!e._meta?.plurnk&&typeof d.get(e.toolCallId)?._meta?.plurnk?.op==`string`?[e]:[]),p=new Map(f.map(e=>[e.toolCallId,e]));if(p.size!==f.length)throw Error(`Operation has duplicate immediate receipts.`);let m=new Set(f.map(({id:e})=>e)),h=r.flatMap(e=>{if(m.has(e.id)||e.role===`reasoning`&&!e.content&&e._meta?.plurnk?.body===void 0)return[];let t=e.role===`assistant`?e.toolCalls??[]:[];return[...(Array.isArray(e.content)?e.content.length>0:e.content)||!t.length?[{message:e}]:[],...t.map(t=>({message:e,call:t}))]}).map(({message:e,call:t})=>{let n=JSON.stringify([e.id,t?.toolCallId??null]),r=e.role===`tool`?d.get(e.toolCallId):void 0,i=t?._meta?.plurnk?.op===t?.name?t:void 0,a=i?G(i.rawInput):null,o=W((t?t._meta:e._meta)?.plurnk),s=r?W(r._meta?.plurnk):null,c=o?.op,l=t?p.get(t.toolCallId):void 0,u=l?K(l.rawOutput)??K(l.content):e.role===`tool`&&o&&!Y(c)?K(e.rawOutput)??K(e.content)??W(o?.receipt):(t?K(t.rawOutput):null)??W(o?.receipt),f=t?.name??(typeof c==`string`?c:null);return{key:n,message:e,call:t,answered:r,operation:i,args:a,facts:o,answeredFacts:s,op:c,ownResult:l,receipt:u,operationName:f,summarized:typeof c==`string`&&!!f,error:l?.error??(e.role===`tool`?e.error:void 0)??``,conversational:e.role===`user`||Y(c)||e.role===`assistant`&&!t||e.role===`system`||e.role===`developer`,loopSeq:ve(o)??ve(s),loopId:typeof o?.loopId==`number`?o.loopId:typeof s?.loopId==`number`?s.loopId:null,nestedReplies:[]}});for(let{message:e}of h){let t=e.role===`reasoning`?e._meta?.plurnk?.body:void 0;if(t!==void 0&&(typeof t?.url!=`string`||typeof t?.mimeType!=`string`))throw TypeError(`Reasoning body reference must supply its URL and MIME type.`)}ye(h,s);let g=new Set(h.map(({key:e})=>e)),_=new Map(Array.from(i.querySelectorAll(`[data-message-id]`),e=>{let t=e;return[JSON.stringify([t.dataset.messageId,t.dataset.callId??null]),t]}));for(let[e,t]of _)g.has(e)||t.remove();let v=new Map;for(let e of h){let t=e.loopSeq??1,n=v.get(t)??[];n.push(e),v.set(t,n)}let y=new Map(Array.from(i.querySelectorAll(`:scope > [data-loop-seq]`),e=>{let t=e;return[Number(t.dataset.loopSeq),t]}));for(let[e,t]of y)v.has(e)||t.remove();let b=Array.from(v.keys()).at(-1)??null,x=null;for(let[t,r]of v){let a=y.get(t);if(!a){let e=n.clone(i,`#conversation-loop`);if(!(e instanceof HTMLElement))throw Error(`Loop template must contain an HTML element.`);a=e}e(a,{loopSeq:t});let s=n(a,`:scope > details > ul`);if(!(s instanceof HTMLUListElement))throw Error(`Loop disclosure has no list.`);let c=null,d=[],f=new Set;for(let e of r){if(e.message.role===`user`&&!e.call){let t=be(e);c===null?c=t:d.push({prompt:e,addresses:t});continue}let t=xe(e);if(!t.length||!d.length)continue;let n=c;if(n!==null&&t.some(e=>n.has(e)))continue;let r=d.findLast(({addresses:e})=>t.some(t=>e.has(t)));r&&(r.prompt.nestedReplies.push(e),f.add(e))}let p=[];for(let e of r)if(!f.has(e)){if(e.conversational)p.push({kind:`entry`,item:e});else{let t=p.at(-1);t?.kind===`operations`?t.items.push(e):p.push({kind:`operations`,items:[e]})}}let m=Array.from(s.querySelectorAll(`:scope > [data-operations]`),e=>e),h=new Set,g=null;for(let e of p){if(e.kind===`entry`){g=X(s,l(e.item,_),g);continue}let t=e.items[0].key,r=new Set(e.items.map(({key:e})=>_.get(e)).filter(Boolean)),i=m.find(e=>!h.has(e)&&e.dataset.operations===t)??m.find(e=>!h.has(e)&&Array.from(r).some(t=>t&&e.contains(t)));if(!i){let e=n.clone(s,`#conversation-operations`);if(!(e instanceof HTMLElement))throw Error(`Operations template must contain an HTML element.`);i=e}h.add(i),u(i,e.items);let a=n(i,`:scope > details > ul`);if(!(a instanceof HTMLUListElement))throw Error(`Operations disclosure has no list.`);let o=null;for(let t of e.items)o=X(a,l(t,_),o);g=X(s,i,g)}for(let e of m)h.has(e)||e.remove();let v=r.some(e=>!f.has(e)&&(e.op===`DONE`||e.op===`FAIL`)),S=t===b&&!v?we(r):[],C=n(s,`:scope > [data-loop-plan]`);if(S.length>0){let t=C;if(!t){let e=n.clone(s,`#conversation-plan`);if(!(e instanceof HTMLElement))throw Error(`Plan template must contain an HTML element.`);t=e}let r=n(t,`:scope > article > ul`);if(!(r instanceof HTMLUListElement))throw Error(`Plan article has no list.`);let i=JSON.stringify(S);o.get(r)!==i&&(r.replaceChildren(),n.cloneEach(r,`#conversation-plan-item`,S,(t,n)=>e(t,`plan-item`,n)),o.set(r,i)),X(s,t,g)}else C&&C.remove();x=X(i,a,x,e=>!e.hasAttribute(`data-loop-seq`))}a.prune(),e(t,`conversation-empty`,r.length===0)}}var Ee=(e,t)=>[...new Map([...e,...t].map(e=>[e.id,e])).values()];function De(e){if(new Set(e.map(({id:e})=>e)).size!==e.length)throw Error(`Conversation has duplicate message identities.`)}var Oe=class{#e={url:null,messages:[],older:null,final:!1};#t=[];snapshot(e){if(e.older!==null&&(typeof e.older!=`string`||!e.older.trim()))throw TypeError(`History boundary must be a URL or null.`);let t=typeof e.older==`string`?e.older:null;De(e.messages),this.#e={url:null,messages:e.messages,older:t,final:!1}}live(e){De(e),this.#e.messages=e;for(let t of this.#t){if(t.final)continue;let n=new Set(t.messages.map(({id:e})=>e)),r=new Set(t.messages.flatMap(e=>e.role===`assistant`?e.toolCalls?.map(({toolCallId:e})=>e)??[]:[])),i=e.filter(e=>n.has(e.id)||e.role===`tool`&&!e._meta?.plurnk&&r.has(e.toolCallId));t.messages=Ee(t.messages,i)}}mutable(){return this.#t.flatMap(({url:e,final:t})=>e!==null&&!t?[e]:[])}first(e){return this.#t.find(t=>t.url===e)?.messages[0]?.id??null}accept(e,t){if(t.older===e)throw Error(`History page repeats its own cursor.`);let n=new Map(this.#t.flatMap(({url:e,older:t})=>e===null?[]:[[e,t]]));n.set(e,t.older);let r=new Set([e]);for(let e=t.older;e!==null&&n.has(e);e=n.get(e)??null){if(r.has(e))throw Error(`History page cursors form a cycle.`);r.add(e)}let i=this.#t.findIndex(t=>t.url===e);if(i>=0)return this.#t[i]={...t,url:e,messages:Ee(this.#t[i].messages,t.messages)},!0;let a=[this.#e,...this.#t].findIndex(t=>t.older===e);return a<0?!1:(this.#t.splice(a,0,{...t,url:e}),!0)}view(){let e=[this.#e,...this.#t],t=[...new Map(e.toReversed().flatMap(({messages:e})=>e.map(e=>[e.id,e]))).values()],n=new Map(this.#t.flatMap(({messages:e})=>e).flatMap(e=>e.role===`assistant`?(e.toolCalls??[]).map(({toolCallId:t})=>[t,e]):[])),r=new Map,i=new Set;for(let e of t){if(e.role!==`tool`||e._meta?.plurnk)continue;let t=n.get(e.toolCallId);if(!t)continue;let a=r.get(t.id)??[];a.push(e),r.set(t.id,a),i.add(e.id)}let a=[];for(let[t,n]of e.entries()){if(n.older===null)continue;let r=e.slice(t+1),i=r[0];if(r.some(({url:e})=>e===n.older))continue;let o=new Set(n.messages.map(({id:e})=>e));if(i&&(i.older===n.older||i.messages.some(({id:e})=>o.has(e)))||a.some(({url:e})=>e===n.older))continue;let s=new Set(r.flatMap(({messages:e})=>e.map(({id:e})=>e)));a.unshift({url:n.older,before:n.messages.find(({id:e})=>!s.has(e))?.id??null})}return{messages:t.filter(({id:e})=>!i.has(e)).flatMap(e=>[e,...r.get(e.id)??[]]),gaps:a}}};function ke(r,i,a){let o=n(r,`[data-messages]`);if(!(o instanceof HTMLUListElement))throw Error(`History has no message list.`);let s=o,c=Te(r,i),l=new Oe,u=new Map,d=new Map,f=new Map,p=!1;function m(){if(p)return;let{messages:i,gaps:a}=l.view();for(let[e]of f)!a.some(t=>t.url===e)&&l.mutable().includes(e)&&a.push({url:e,before:l.first(e)});let o=new Set(a.map(({url:e})=>e)),m=new Set(a.flatMap(({before:e})=>e?[e]:[]));c(i,m);for(let[e,t]of u)o.has(e)||(t.remove(),u.delete(e));for(let{url:r,before:i}of a){let a=u.get(r);a||(a=n.clone(s,`#conversation-history`),u.set(r,a),t(a,`submit`,`form`,e=>{e.preventDefault(),h(r)})),e(a,{historyPending:d.has(r)?`true`:null,historyError:f.get(r)??``});let o=i===null?null:Array.from(s.children).find(e=>e.getAttribute(`data-message-id`)===i||n(e,`[data-message-id="${CSS.escape(i)}"]`)!==null)??null;a.nextElementSibling!==o&&s.insertBefore(a,o)}e(r,`conversation-empty`,i.length===0&&a.length===0)}async function h(e){if(d.has(e)||p)return;let t=new AbortController;d.set(e,t),f.delete(e),m();try{let n=await a(e,t.signal);t.signal.throwIfAborted(),l.accept(e,n)&&m()}catch(n){t.signal.aborted||f.set(e,n instanceof Error?n.message:String(n))}finally{d.get(e)===t&&d.delete(e),m()}}return{snapshot(e){l.snapshot(e);let t=new Set([...l.mutable(),...l.view().gaps.map(({url:e})=>e)]);for(let[e,n]of d)t.has(e)||(n.abort(),d.delete(e));for(let[e]of f)t.has(e)||f.delete(e);for(let e of l.mutable())f.has(e)||h(e)},present(e){l.live(e),m()},pause(){p=!0;for(let e of d.values())e.abort();d.clear()},resume(){p=!1}}}var Ae=new Set([`$schema`,`type`,`properties`,`required`,`additionalProperties`,`title`,`description`]),je=new Set([`type`,`title`,`description`,`enum`,`enumNames`,`default`,`examples`,`format`,`minLength`,`maxLength`,`pattern`,`minimum`,`maximum`,`exclusiveMinimum`,`exclusiveMaximum`,`multipleOf`]),Me=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Ne(e){if(e.type!==void 0&&e.type!==`object`||!Me(e.properties)||Object.keys(e).some(e=>!Ae.has(e))||e.required!==void 0&&(!Array.isArray(e.required)||e.required.some(t=>typeof t!=`string`||!Object.hasOwn(e.properties,t))))return null;let t=Object.entries(e.properties);return t.some(([,e])=>!Me(e)||![`string`,`number`,`integer`,`boolean`].includes(String(e.type))||Object.keys(e).some(e=>!je.has(e))||e.enum!==void 0&&(!Array.isArray(e.enum)||e.enum.some(e=>![`string`,`number`,`boolean`].includes(typeof e))))?null:t}function Pe(r,i,a,o){let s=n.clone(r,`#answer-field`),c=n(s,`[data-answer-value]`),l=n(s,`[data-answer-include]`);if(!(c instanceof HTMLFieldSetElement)||!(l instanceof HTMLInputElement))throw Error(`Answer field template is incomplete.`);e(s,{fieldName:i,fieldTitle:typeof a.title==`string`?a.title:i,fieldDescription:typeof a.description==`string`?a.description:``,fieldOptional:!o}),l.checked=o||Object.hasOwn(a,`default`),c.disabled=!l.checked,t(s,`change`,`[data-answer-include]`,()=>{c.disabled=!l.checked});let u;if(a.enum!==void 0||a.type===`boolean`){let t=n.clone(c,a.enum===void 0?`#answer-boolean`:`#answer-select`);if(!(t instanceof HTMLSelectElement))throw Error(`Answer select template is incomplete.`);if(Array.isArray(a.enum)){let r=a.enum,i=Array.isArray(a.enumNames)?a.enumNames:[];for(let[a,o]of r.entries())e(n.clone(t,`#answer-option`),{optionValue:String(a),optionLabel:typeof i[a]==`string`?i[a]:String(o)});let o=r.findIndex(e=>e===a.default);o!==-1&&(t.value=String(o)),u=()=>r[Number(t.value)]}else typeof a.default==`boolean`&&(t.value=String(a.default)),u=()=>t.value===`true`}else if(a.type===`string`){let e=n.clone(c,`#answer-text`);if(!(e instanceof HTMLTextAreaElement))throw Error(`Answer text template is incomplete.`);typeof a.default==`string`&&(e.value=a.default),u=()=>e.value}else{let e=n.clone(c,`#answer-number`);if(!(e instanceof HTMLInputElement))throw Error(`Answer number template is incomplete.`);typeof a.default==`number`&&(e.value=String(a.default)),u=()=>e.valueAsNumber}let d=typeof a.title==`string`?a.title:i;return e(s,`answer-label`,d),()=>l.checked?[[i,u()]]:[]}function Fe(r,a){let o=n(r,`[data-answer-cancel]`),s=n(r,`[data-answer-fields]`);if(!(o instanceof HTMLInputElement)||!(s instanceof HTMLFieldSetElement))throw Error(`Question template is incomplete.`);t(r,`change`,`[data-answer-cancel]`,()=>{s.disabled=o.checked});let c=Ne(a),l=new Set(Array.isArray(a.required)?a.required:[]),u=c?.map(([e,t])=>Pe(s,e,t,l.has(e))),d=c===null?n.clone(s,`#answer-json`):null,f=d&&n(d,`textarea`);if(d&&!(f instanceof HTMLTextAreaElement))throw Error(`JSON answer template is incomplete.`);return{async read(){if(e(r,`response-error`,``),o.checked)return{status:`cancelled`};let t;if(f instanceof HTMLTextAreaElement)try{t=JSON.parse(f.value)}catch{e(r,`response-error`,`Enter valid JSON.`);return}else t=Object.fromEntries(u?.flatMap(e=>e())??[]);try{let{Validator:n}=await i(async()=>{let{Validator:e}=await import(`./src-BdHyjaXT.js`);return{Validator:e}},__vite__mapDeps([0,1])),o=n.validateJsonSchemaInstance(a,t);if(!o.valid){e(r,`response-error`,`Answer does not satisfy the requested schema: ${o.errors.map(({instanceLocation:e,error:t})=>`${e}: ${t}`).join(`; `)}`);return}}catch(t){e(r,`response-error`,`Answer validation failed: ${t instanceof Error?t.message:String(t)}`);return}return{status:`resolved`,payload:t}}}}var Z=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ie=e=>e.expiresAt!==void 0&&Date.parse(e.expiresAt)<=Date.now(),Le=e=>e.method===`session/request_permission`?e._meta?.plurnk?.proposal:void 0,Re=e=>{let t=e.method===`session/request_permission`?e.options?.find(e=>typeof e.kind==`string`&&e.kind.startsWith(`allow`))?.optionId:void 0;return typeof t==`string`&&t.length>0?t:`allow_once`},ze=e=>{let t=e.method===`session/request_permission`?e.options?.find(e=>typeof e.kind==`string`&&e.kind.startsWith(`reject`))?.optionId:void 0;return typeof t==`string`&&t.length>0?t:`reject_once`};function Be(e,t){if(t.mode===`url`)return{oneOf:[{type:`object`,required:[`action`],additionalProperties:!1,properties:{action:{enum:[`accept`,`decline`,`cancel`]}}}]};let n=Z(t._meta?.plurnk?.interaction?.request)&&`requestedSchema`in t._meta.plurnk.interaction.request&&Z(t._meta.plurnk.interaction.request.requestedSchema)?t._meta.plurnk.interaction.request.requestedSchema:Z(t.requestedSchema)?t.requestedSchema:void 0;if(n)return e===`mcp_input_required`&&!Array.isArray(n.oneOf)&&!(Z(n.properties)&&Z(n.properties.response)&&Array.isArray(n.properties.response.oneOf))?{oneOf:[{type:`object`,required:[`action`,`content`],additionalProperties:!1,properties:{action:{const:`accept`},content:n}},{type:`object`,required:[`action`],additionalProperties:!1,properties:{action:{enum:[`decline`,`cancel`]}}}]}:n}function Ve(t,r){let i=n.clone(t,`#session-review`),a=n(i,`[data-requests]`);if(!(i instanceof HTMLFormElement)||!a)throw Error(`Review template is incomplete.`);let o=a,s=[],c=[],l=!1,u=new Map;function d(){let t=l&&c.some(Ie),n=l?t?c.length:c.filter(e=>!r||Le(e)===void 0).length:0;return e(i,{requestCount:n,deadlinePassed:t?``:null}),l?t?`expired`:n>0?`manual`:`automatic`:`unsupported`}function f(t,r,i){let a=Le(t);if(!a)throw Error(`Proposal presentation has no facts.`);let s=i?n.clone(i,`#session-proposal`,{position:`beforebegin`}):n.clone(o,`#session-proposal`);u.set(t.id,s),e(s,{interruptId:t.id,proposalChoice:`decision-${r}`,proposalSession:a.session,proposalOp:a.op,proposalDeadline:t.expiresAt??``,proposalDeadlineLabel:t.expiresAt===void 0?``:new Date(t.expiresAt).toLocaleString()});let c=n(s,`[data-proposal-target]`),l=n(s,`[data-proposal-body]`);if(!c||!l)throw Error(`Proposal template has no content outlets.`);c.textContent=JSON.stringify(a.target,null,2),l.textContent=a.body}return e(i,{requestCount:0,reviewUnavailable:``}),{form:i,automatic(e){if(r=e,l)for(let e=c.length-1;e>=0;e--){let t=c[e];if(Le(t)){if(r)u.get(t.id)?.remove(),u.delete(t.id);else if(!u.has(t.id)){let n=c.slice(e+1).map(({id:e})=>u.get(e)).find(Boolean);f(t,e,n)}}}return d()},present(t){return c=t,l=t.length>0&&t.every(e=>{if(e.method===`session/request_permission`){let t=Le(e);return t!==void 0&&t.disposition.decision===`review`}if(e.method===`elicitation/create`){let t=e._meta?.plurnk?.interaction;return Be(typeof t?.request?.toolName==`string`?t.request.toolName:typeof e._meta?.plurnk?.toolName==`string`?e._meta.plurnk.toolName:`question`,e)!==void 0}return!1}),o.replaceChildren(),u.clear(),s=(l?t:[]).map((a,s)=>{if(a.method===`elicitation/create`){let t=a._meta?.plurnk?.interaction,r=typeof t?.request?.toolName==`string`?t.request.toolName:typeof a._meta?.plurnk?.toolName==`string`?a._meta.plurnk.toolName:`question`,i=Be(r,a);if(!i)throw Error(`Elicitation gate has no request schema.`);let s=n.clone(o,`#session-question`);u.set(a.id,s),e(s,{interruptId:a.id,requestSession:t?.sessionId??``,requestTool:r,responseError:``});let c=n(s,`[data-request-message]`),l=n(s,`[data-request-arguments]`),d=n(s,`[data-request-schema]`);if(!c||!l||!d)throw Error(`Question template has no content outlets.`);c.textContent=a.message??t?.request?.message??`Provide the requested input.`;let f=a._meta?.plurnk?.arguments;l.textContent=typeof f==`string`?f:f===void 0?t?.request===void 0?JSON.stringify({...a.mode?{mode:a.mode}:{},...a.message?{message:a.message}:{},...a.requestedSchema?{requestedSchema:a.requestedSchema}:{},...a.url?{url:a.url}:{},...a.elicitationId?{elicitationId:a.elicitationId}:{}}):JSON.stringify(t.request):JSON.stringify(f),d.textContent=JSON.stringify(i,null,2);let p=Fe(s,i);return async()=>{let e=await p.read();if(!e)return;if(e.status===`cancelled`)return{id:a.id,method:`elicitation/create`,response:{action:`cancel`}};let t=e.payload;if(r===`mcp_input_required`||a.mode===`url`){let e=Z(t)&&Z(t.response)?t.response:t;if(Z(e)&&(e.action===`accept`||e.action===`decline`||e.action===`cancel`))return{id:a.id,method:`elicitation/create`,response:e.action===`accept`&&Z(e.content)?{action:`accept`,content:e.content}:{action:e.action}}}return{id:a.id,method:`elicitation/create`,response:{action:`accept`,content:Z(t)?t:{value:t}}}}}return(!r||t.some(Ie))&&f(a,s),async()=>{if(r)return{id:a.id,method:`session/request_permission`,response:{outcome:{outcome:`selected`,optionId:Re(a)},_meta:{plurnk:{outcome:`client_yolo`}}}};let e=new FormData(i).get(`decision-${s}`);if(e!==`accept`&&e!==`reject`)throw Error(`Approval form has no decision.`);return{id:a.id,method:`session/request_permission`,response:{outcome:{outcome:`selected`,optionId:e===`accept`?Re(a):ze(a)}}}}}),d()},async decisions(e){if(d()===`expired`||!i.reportValidity())return;let t=await Promise.all(s.map(e=>e()));if(t.some(e=>e===void 0))return;let n=new Map(t.flatMap(e=>e?[[e.id,e]]:[]));return e.map(({id:e})=>{let t=n.get(e);if(!t)throw Error(`Missing resolution for gate: ${e}`);return t})}}}var He=e=>({diagnosticLevel:e.level,diagnosticTitle:`${e.source}:${e.kind}`,heading:e.message||`${e.source}:${e.kind}`,body:``}),Ue=e=>({diagnosticLevel:`error`,diagnosticTitle:e.title,heading:e.title,body:[...new Set([e.detail,e.recovery].filter(t=>typeof t==`string`&&t&&t!==e.title))].join(`
|
|
3
|
+
|
|
4
|
+
`)});function We(t){let r=n(t,`ul`);if(!(r instanceof HTMLUListElement))throw Error(`Session diagnostics have no list.`);let i=new Set;return async t=>{if(t.sessionUpdate!==`notice`)return;let o=t._meta?.plurnk;if(!o)return;let s=Object.hasOwn(o,`notice`),c=!s&&Object.hasOwn(o,`problem`);if(!s&&!c||s&&typeof o.notice==`object`&&o.notice!==null&&(Reflect.get(o.notice,`source`)===`engine:lifecycle`&&Reflect.get(o.notice,`kind`)===`loop_status`&&!Object.hasOwn(o.notice,`position`)||Reflect.get(o.notice,`source`)===`engine:derivation`&&Reflect.get(o.notice,`kind`)===`search_progress`&&Reflect.get(o.notice,`phase`)!==`failed`))return;let l=s?o.notice:o.problem,u=s?He(a.assertNotice(l)):Ue(a.assertProblemDetails(l)),d=typeof o.subagentRunId==`string`?o.subagentRunId:``,f=s?`notice`:`problem`,m=JSON.stringify([f,d,l]);if(i.has(m))return;let{diagnosticTitle:h}=u,_={info:`Information`,warn:`Warning`,error:`Error`}[u.diagnosticLevel],v=n.clone(r,`#session-diagnostic`);e(v,{diagnosticLevel:u.diagnosticLevel,diagnosticType:f,diagnosticLabel:[_,h,d?`Subagent ${d}`:null].filter(Boolean).join(` · `),subagentRunId:d||null});let{header:y,body:b}=g(v,!!u.body);n.clone(y,`#operation-header`).textContent=u.heading,b&&(n.clone(b,`#conversation-literal`).textContent=u.body),p(y),i.add(m)}}var Ge=l({sessionUpdate:h().min(1)}).passthrough(),Ke=l({session:h().min(1),history:l({older:h().min(1).nullable().optional(),newer:h().min(1).nullable().optional()}),updates:x(Ge)});async function qe(e,t,n){let r=await u(e,t,n),i=Ke.parse(await r.json()),a=_.projectMessages(i.updates);if(new Set(a.map(({id:e})=>e)).size!==a.length)throw Error(`History page has duplicate message identities.`);let o=new Set(a.flatMap(e=>e.role===`tool`&&!e._meta?.plurnk?[e.toolCallId]:[]));return{final:!a.some(e=>e.role===`assistant`&&(e.toolCalls??[]).some(({toolCallId:e})=>!o.has(e))),older:i.history.older??null,messages:a}}var Q=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Je(t,r){if(!Number.isSafeInteger(r)||r<1)throw Error(`Session document has no valid reasoning preview limit.`);let i=n.clone(t,`#session-reasoning-preview`),a=n(i,`pre`);if(!(a instanceof HTMLElement))throw Error(`Reasoning preview has no text outlet.`);let o=a,s=()=>{e(i,{reasoningId:``,reasoningCoordinate:``}),o.replaceChildren()};return s(),{clear:s,consume(t){if(t.sessionUpdate===`state_update`||t.sessionUpdate===`tool_call`||t.sessionUpdate===`tool_call_update`||t.sessionUpdate===`agent_message_chunk`||t.sessionUpdate===`notice`&&Q(t._meta)&&Q(t._meta.plurnk)&&(typeof t._meta.plurnk.id==`number`||Q(t._meta.plurnk.notice)&&t._meta.plurnk.notice.kind===`turn_generated`)){s();return}if(t.sessionUpdate!==`agent_thought_chunk`)return;let n=Q(t.content)?t.content:void 0,a=Q(t._meta)&&Q(t._meta.plurnk)?t._meta.plurnk:void 0;if(n?.type===`resource_link`)t.messageId===e(i,`reasoning-id`)&&s();else{if(typeof t.messageId!=`string`||!t.messageId||n?.type!==`text`||typeof n.text!=`string`)throw TypeError(`Reasoning preview must name its active message and carry a text delta.`);if(t.messageId===e(i,`reasoning-id`)?a!==void 0&&e(i,`reasoning-coordinate`,ue(a)):(s(),e(i,{reasoningId:t.messageId,reasoningCoordinate:ue(a)})),n.text){let e=Array.from(o.textContent+n.text).slice(-r).join(``);o.textContent!==e&&(o.textContent=e)}}}}}async function $(e){let t=e instanceof Error?e.message:String(e),n=e instanceof Error?e.cause:void 0;if(typeof n!=`object`||!n||n instanceof Error)return{message:t,recovery:``,status:null};let{InvalidProblemDetailsError:r,Validator:a}=await i(async()=>{let{InvalidProblemDetailsError:e,Validator:t}=await import(`./src-BdHyjaXT.js`);return{InvalidProblemDetailsError:e,Validator:t}},__vite__mapDeps([0,1]));try{let e=a.assertProblemDetails(n);return{message:t,recovery:typeof e.recovery==`string`?e.recovery:``,status:e.status}}catch(e){if(e instanceof r)return{message:t,recovery:``,status:null};throw e}}function Ye(r,i){return t(r,`click`,`[data-action="read-output"]`,async(t,r)=>{let a=r.closest(`[data-entry-output]`),o=a?.closest(`[data-stream-target]`),s=o&&e(o,`stream-target`);if(!a||!s)throw Error(`Output control has no stream.`);if(e(a,`output-state`)!==`loading`){e(a,{outputState:`loading`,outputError:``,outputPending:``});try{let t=await i(s);if(!a.isConnected)return;let r=n(a,`ul`);if(!r)throw Error(`Output snapshot has no channel outlet.`);n.cloneEach(r,`#stream-output-channel`,Object.entries(t.channels),(t,[r,i])=>{e(t,{outputChannel:r,outputMime:i.mimetype,outputChannelState:i.state,outputLength:i.contentLength,outputOffset:i.contentOffset});let a=n(t,`[data-output-content]`);if(!a)throw Error(`Output channel has no content outlet.`);a.textContent=i.content}),e(a,{outputState:`loaded`,outputLoaded:`true`})}catch(t){if(!a.isConnected)return;if(t instanceof DOMException&&t.name===`AbortError`)e(a,`output-state`,`idle`);else{let{message:n,recovery:r}=await $(t);a.isConnected&&e(a,{outputState:`error`,outputError:[n,r].filter(Boolean).join(` `)})}}finally{a.isConnected&&e(a,`output-pending`,null)}}}),t=>{let r=n.clone(t,`#stream-output`);e(r,{outputState:`idle`,outputError:``,outputLoaded:`false`})}}function Xe(t,r){let i=n(t,`:scope > ul`);if(!i)throw Error(`Session streams have no outcome outlet.`);let o=Ye(t,r),s=new Set;return{async consume(t){if(t.sessionUpdate!==`terminal_update`)return;let r=t._meta?.plurnk;if(!r||!Object.hasOwn(r,`result`)||r.loop_seq===1&&r.turn_seq===1)return;let c=typeof t.terminalId==`string`?/^term:([1-9]\d*)$/u.exec(t.terminalId):null,l=typeof r.entryId==`number`?r.entryId:c?Number(c[1]):0,u=typeof r.sessionId==`number`?r.sessionId:0,d=typeof r.target==`string`?r.target:``;if(!Number.isSafeInteger(l)||l<=0||!Number.isSafeInteger(u)||u<=0||!d)throw Error(`Stream event has no resource identity.`);let f=a.assertOperationResult(r.result),p=typeof r.scheme==`string`?r.scheme:/^([a-z][a-z0-9+.-]*):\/\//iu.exec(d)?.[1]??``,m=typeof r.summary==`string`?r.summary:typeof f.exitCode==`number`?`Exited ${f.exitCode}`:`Status ${f.status}`;if(!p||!m)throw Error(`Stream conclusion is incomplete.`);let h=JSON.stringify({entryId:l,sessionId:u,target:d,scheme:p,summary:m,result:f});if(s.has(h))return;let g=n.clone(i,`#session-stream-outcome`);e(g,{streamTarget:d,streamSession:u,streamScheme:p,streamSummary:m,streamStatus:f.status,streamExitCode:typeof f.exitCode==`number`?f.exitCode:null,streamProblem:f.problem?.detail??``,streamProblemTitle:f.problem?.title??``});let _=n(g,`details`);if(!_)throw Error(`Stream outcome has no disclosure.`);o(_),s.add(h)}}}var Ze=25;async function Qe(e,t,n,r,i){let o=e=>{let t=a.assertProblemDetails(e);return Object.assign(Error(t.detail??t.title,{cause:t}),{status:t.status})},s=await f(r,i);i.throwIfAborted();let l,u=!1,p=e===`providers/list`,h=m(new URL(`/acp`,window.location.origin).href,{fetch:async(t,n)=>{if(n?.method===`DELETE`)return u&&!i.aborted&&l===void 0&&e!==`session/cancel`&&await fetch(t,n).catch(()=>{}),new Response(null,{status:204});let r=new Headers(n?.headers);if(n?.method===`GET`&&(!p&&!r.has(`acp-session-id`)||e===`session/cancel`))return new Response(new ReadableStream({start(e){n.signal&&(n.signal.onabort=()=>{try{e.close()}catch{}})}}),{status:200,headers:{"Content-Type":`text/event-stream`}});let a=AbortSignal.any([i,...n?.signal?[n.signal]:[]]);if(n?.method===`GET`&&navigator.userAgent.includes(`Firefox`)){let e=fetch(t,{...n,signal:a}),r=await Promise.race([e,new Promise(e=>setTimeout(()=>e(null),Ze))]);if(r!==null){if(!r.ok&&l===void 0){let e=await d(r.clone());l=e===null?Object.assign(Error(r.statusText||`Request failed (${r.status}).`),{status:r.status}):e}return r}let i;return new Response(new ReadableStream({async pull(t){if(!i){let n=await e;if(!n.ok&&l===void 0){let e=await d(n.clone());l=e===null?Object.assign(Error(n.statusText||`Request failed (${n.status}).`),{status:n.status}):e}if(!n.ok||!n.body){t.error(l??Error(`ACP SSE stream failed.`));return}i=n.body.getReader()}let{done:n,value:r}=await i.read();n?t.close():t.enqueue(r)},cancel:e=>i?i.cancel(e):void 0}),{status:200,headers:{"Content-Type":`text/event-stream`}})}let o=await fetch(t,{...n,signal:a});if(!o.ok&&l===void 0){let e=await d(o.clone());l=e===null?Object.assign(Error(o.statusText||`Request failed (${o.status}).`),{status:o.status}):e}return o},headers:s,cookies:`omit`}),g=c({name:`@plurnk/plurnk-web`}).connect(h),_=()=>{g.close()};i.onabort=_,i.aborted&&_();try{await g.agent.request(v.agent.initialize,{protocolVersion:2,info:{name:`@plurnk/plurnk-web`,version:`1.0.0`}}),u=!0,i.throwIfAborted();let r;if(e===`providers/list`?r=await g.agent.request(v.agent.providers.list,{}):e===`session/resume`?r=await g.agent.request(v.agent.session.resume,{sessionId:n,cwd:`/`,replayFrom:null,...t,_meta:{plurnk:{control:!1,...typeof t._meta==`object`&&t._meta!==null&&`plurnk`in t._meta&&typeof t._meta.plurnk==`object`&&t._meta.plurnk!==null?t._meta.plurnk:{}}}}):e===`session/set_config_option`?r=await g.agent.request(v.agent.session.setConfigOption,{sessionId:n,type:`id`,configId:String(t.configId??``),value:String(t.value??``)}):e===`session/cancel`?(await g.agent.notify(v.agent.session.cancel,{sessionId:n}),r={}):r=await g.agent.request(`_plurnk/action`,{kind:e,params:t,...n?{sessionId:n}:{}}),i.throwIfAborted(),typeof r!=`object`||!r)throw Error(`${e} returned no matching action outcome.`);return r}catch(e){if(l!==void 0)throw l;if(i.aborted)throw i.reason instanceof Error?i.reason:new DOMException(`The operation was aborted.`,`AbortError`);if(typeof e==`object`&&e&&`data`in e){let t=e.data,n=t&&typeof t.plurnk==`object`&&t.plurnk!==null?t.plurnk:void 0,r=t&&`problem`in t?t.problem:n&&`problem`in n?n.problem:t;if(r&&typeof r==`object`&&`type`in r&&`status`in r)throw o(r)}throw e}finally{i.onabort=null,g.close()}}async function $e(e,t,n,r){let a=await Qe(`entry.read`,{target:e},t,n,r),{Validator:o}=await i(async()=>{let{Validator:e}=await import(`./src-BdHyjaXT.js`);return{Validator:e}},__vite__mapDeps([0,1])),s=o.assertEntryReadResult(a);if(`problem`in s)throw Error(s.problem.detail,{cause:s.problem});return s.entry}function et(e){if(e!==void 0){if(!e||typeof e!=`object`||!(`url`in e)||typeof e.url!=`string`||!e.url.trim()||`mimeType`in e&&typeof e.mimeType!=`string`)throw TypeError(`Ambient body reference is incomplete.`);return e}}function tt(t,r){let i=n(t,`:scope > ul`);if(!(i instanceof HTMLUListElement))throw Error(`Session activity has no list.`);let a=ce(t,r),s=new Map,c=new Set,l=new WeakMap;function u(e,t,r){let{header:i,body:o}=g(e,!!(t||r));if(!o)return a.prune(),i;let s=JSON.stringify([t,r]);if(l.get(o)===s)return i;for(let e of Array.from(o.childNodes))e!==i&&e.remove();return t&&(n.clone(o,`#conversation-literal`).textContent=t),r&&a.append(n.clone(o,`#activity-reasoning`),{uri:r.url,mimeType:r.mimeType}),l.set(o,s),a.prune(),i}return t=>{let r=t._meta?.plurnk;if(!r)return;let a=typeof r.subagentRunId==`string`?r.subagentRunId:``;if(t.sessionUpdate===`agent_message_chunk`){if(!Object.hasOwn(r,`outside`)&&r.op!==`outside-`)return;let o=r.outside,c=t.content&&typeof t.content==`object`&&!Array.isArray(t.content)&&t.content.type===`text`?t.content.text:void 0;if(!o||typeof o.coordinate!=`string`||!o.coordinate||typeof c!=`string`||!Number.isSafeInteger(o.tokens)||Number(o.tokens)<0)throw TypeError(`Outside text requires its coordinate, text and token count.`);let l=JSON.stringify([`outside`,a,o.coordinate]),d=s.get(l)??n.clone(i,`#session-outside`);e(d,{activityKind:`outside`,activityLabel:[`Outside operations`,a?`Subagent ${a}`:null].filter(Boolean).join(` · `),plurnkCoordinate:o.coordinate,subagentRunId:a||null}),p(u(d,c,void 0)),s.set(l,d);return}let l=t.sessionUpdate===`notice`&&!Object.hasOwn(r,`notice`)&&!Object.hasOwn(r,`problem`)&&Object.hasOwn(r,`id`);if(t.sessionUpdate!==`tool_call_update`&&!l||r.proposal!==void 0||r.interaction!==void 0||!l&&t.rawInput===void 0&&t.rawOutput===void 0&&t.name===void 0)return;let d=r.op===void 0?t.name??null:r.op;!a&&typeof r.coordinate==`string`&&t.toolCallId===r.coordinate&&(r.origin===`model`?c.delete(r.coordinate):typeof r.origin==`string`&&c.add(r.coordinate));let f=typeof t.toolCallId==`string`&&typeof r.coordinate==`string`&&t.toolCallId!==r.coordinate&&!c.has(t.toolCallId);if(!a&&(f||r.origin===`model`&&d!==null&&r.attrs?.kind!==`emissionAttempt`))return;let m=r.sessionId,h=r.id,g=r.loopSeq,_=r.turnSeq,v=r.sequence,y=r.origin,b=r.status,x=typeof r.state==`string`?r.state:t.status===`completed`?`resolved`:t.status??(b>=400?`failed`:`resolved`);if(!Number.isSafeInteger(h)||h<=0||!Number.isSafeInteger(m)||m<=0||![g,_,v].every(e=>Number.isSafeInteger(e)&&e>=0)||d!==null&&typeof d!=`string`||typeof y!=`string`||typeof x!=`string`||!Number.isSafeInteger(b)||r.source!==void 0&&r.source!==null&&typeof r.source!=`string`||r.address!==void 0&&r.address!==null&&typeof r.address!=`string`||r.target!==void 0&&r.target!==null&&typeof r.target!=`string`)throw TypeError(`Ambient row identity or display fields are incomplete.`);r.body!==void 0&&et(r.body);let S=et(typeof r.reasoning==`string`?void 0:r.reasoning);if(y===`_plurnk`&&d===`READ`&&r.attrs?.kind===`emission`)return;let C=JSON.stringify([`ambient`,a,m,h]),w=s.get(C)??n.clone(i,`#session-ambient`),T=d??(r.attrs?.kind===`emissionAttempt`?`Rejected emission`:`Log entry`),E=typeof t.rawInput==`string`?G(t.rawInput):W(t.rawInput),D=typeof t.rawOutput==`string`?G(t.rawOutput):W(t.rawOutput)??W(r.receipt),O=`${g}/${_}/${v}`,k=typeof r.address==`string`?r.address:typeof r.target==`string`?r.target:o(r)??t.locations?.[0]?.path;e(w,{activityKind:`ambient`,activityLabel:[T,`Session ${m}`,O,x,String(b),a?`Subagent ${a}`:null].filter(Boolean).join(` · `),plurnkRow:h,plurnkSession:m,plurnkOrigin:y,plurnkCoordinate:O,plurnkType:d,plurnkState:x,plurnkStatus:b,subagentRunId:a||null,plurnkSignal:typeof r.signal==`number`?r.signal:null});let A=u(w,de(E,d),S);ge(A,T,E,D,{op:d,status:b,address:k},``),p(A),s.set(C,w)}}var nt=e=>e===null?`Not selected`:`${e.alias?`${e.alias} — `:``}${e.provider}/${e.model}`;async function rt(e,t=``){let{Validator:n}=await i(async()=>{let{Validator:e}=await import(`./src-BdHyjaXT.js`);return{Validator:e}},__vite__mapDeps([0,1])),r=await e(`providers/list`);if(!Array.isArray(r?.providers))throw Error(`Alias listing is invalid.`);return{aliases:r.providers.map(e=>{let t=e?._meta?.plurnk;if(typeof t?.alias!=`string`||typeof t?.active!=`boolean`)throw Error(`Alias listing is invalid.`);return{...t,...n.assertModelRoute({alias:t.alias,provider:t.provider,model:t.model,...t.effort===void 0?{}:{effort:t.effort,effortSource:t.effortSource}}),alias:t.alias}}).filter(e=>nt(e).toLowerCase().includes(t.toLowerCase())),catalog:n.assertModelCatalogPage(await e(`models.list`,t?{search:t}:{}))}}async function it(e,t,n){let{Validator:r}=await i(async()=>{let{Validator:e}=await import(`./src-BdHyjaXT.js`);return{Validator:e}},__vite__mapDeps([0,1])),a;t===void 0?a=await e(`session/resume`,{replayFrom:null}):(a=await e(`session/set_config_option`,{configId:`model`,value:t}),n!==void 0&&(a=await e(`session/set_config_option`,{configId:`thought_level`,value:n})));let o=a?._meta?.plurnk?.status;if(!o||!Object.hasOwn(o,`model`))throw Error(`Model result is invalid.`);return t===void 0&&o.model===null?null:r.assertModelRoute(o.model)}async function at(e,t){let{Validator:n}=await i(async()=>{let{Validator:e}=await import(`./src-BdHyjaXT.js`);return{Validator:e}},__vite__mapDeps([0,1])),r=await e(t===void 0?`session/resume`:`session/set_config_option`,t===void 0?{replayFrom:null}:{configId:`thought_level`,value:t}),a=Array.isArray(r?.configOptions)?r.configOptions.find(e=>e?.configId===`thought_level`):void 0,o=r?._meta?.plurnk?.status;if(!Array.isArray(r?.configOptions)||!o||!Object.hasOwn(o,`model`))throw Error(`Effort result is invalid.`);let s=o.model===null?null:n.assertModelRoute(o.model),c=a&&Array.isArray(a.options)&&s!==null?a.options.map(e=>n.assertEffort(e?.value)):[];return s===null||s.effort===void 0?{effort:null,source:`default`,supported:c}:{effort:n.assertEffort(s.effort),source:s.effortSource??`default`,supported:c}}var ot=new Set([`help`,`models`,`model`,`effort`,`capabilities`,`yolo`,`stop`]);function st(e,t=[]){let n=e.trimStart();if(!n.startsWith(`/`))return!1;let r=/^\/(\S*)/u.exec(n)?.[1]??``;return!r||ot.has(r)?!0:!t.some(e=>e?.name===r)}function ct(e){let t=/^\/(\S*)\s*([\s\S]*)$/u.exec(e.trim());if(!t)throw Error(`Expected a slash command.`);let n=t[1]||`help`;if(!ot.has(n))throw Error(`Unknown command /${n}. Use /help.`);let r=t[2].trim(),i=r?r.split(/\s+/u):[];if([`yolo`,`stop`].includes(n)&&i.length||[`help`,`effort`].includes(n)&&i.length>1||n===`model`&&i.length>2)throw Error(`Too many arguments for /${n}. Use /help ${n}.`);let a;if(n===`capabilities`&&r)try{a=JSON.parse(r)}catch(e){throw Error(`Capability policy must be valid JSON.`,{cause:e})}return{name:n,rest:r,args:i,policy:a}}function lt(t,i){let o=n.clone(t,`#command-results`),s=n(o,`ul`);if(!s)throw Error(`Command results template is incomplete.`);return async(t,o)=>{let c=(e,t)=>i.call(e,t,o),l=n.clone(s,`#session-command-result`),u=n(l,`article`),d=n(l,`header code`),f=n(l,`[data-command-output]`);if(!u||!d||!f)throw Error(`Command result template is incomplete.`);d.textContent=t,e(u,{commandState:`pending`,commandBusy:`true`,commandMessage:`Running…`,commandRecovery:``});try{o.throwIfAborted();let{name:s,rest:l,args:d,policy:p}=ct(t),m=``;if(s===`help`){let t=l.replace(/^\//u,``);if(t&&!ot.has(t))throw Error(`Unknown command ${l}. Use /help.`);let i=n.clone(f,`#command-help`);for(let n of r(i,`[data-command-name]`))t&&e(n,`command-name`)!==t&&n.remove()}else if(s===`yolo`)m=`Approvals: ${await i.toggleYolo()?`Automatic`:`Manual`}.`;else if(s===`stop`)m=await i.stop();else if(s===`models`){let{aliases:t,catalog:r}=await rt(c,l);o.throwIfAborted();let i=n.clone(f,`#command-models`),a=n(i,`[data-model-aliases]`),s=n(i,`tbody`);if(!a||!s)throw Error(`Model catalog template is incomplete.`);n.cloneEach(a,`#command-alias`,t,(t,n)=>e(t,{aliasName:n.alias,aliasRoute:`${n.provider}/${n.model}`,aliasEffort:n.effort??`Unspecified`,aliasActive:n.active?`Default`:``})),n.cloneEach(s,`#command-model`,r.items,(t,n)=>e(t,{modelSelector:n.selector,modelName:n.modelName,modelContext:n.limits.contextTokens,modelEfforts:n.capabilities.efforts.join(`, `),modelReadiness:n.readiness.ready?`Configured`:`Not configured`})),e(i,{aliasCount:t.length,modelTotal:r.total,modelCount:r.items.length,modelOffset:r.offset,modelMore:r.nextOffset===void 0?``:`More matches are available; narrow the search.`})}else if(s===`model`){let e=await it(c,d[0],d[1]);m=`Model: ${nt(e)}${e?.effort===void 0?``:` (${e.effort})`}.`}else if(s===`effort`){let{effort:e,source:t,supported:n}=await at(c,d[0]);m=`Effort: ${e??`Unavailable`} (${t}). Supported: ${n.join(`, `)||`None`}.`}else if(s===`capabilities`){l&&a.assertCapabilityPolicy(p);let e=await c(l?`workspace.capabilities.set`:`workspace.capabilities.get`,l?{policy:p}:{});for(let t of[`service`,`workspace`,`effective`])a.assertCapabilityPolicy(Reflect.get(Object(e),t));o.throwIfAborted();let t=n.clone(f,`#command-capabilities`);for(let r of[`service`,`workspace`,`effective`]){let i=n(t,`[data-capability="${r}"]`);if(!i)throw Error(`Capability template has no policy outlet.`);i.textContent=JSON.stringify(e[r],null,2)}}return o.throwIfAborted(),e(u,{commandState:`done`,commandBusy:`false`,commandMessage:m}),!0}catch(t){let{message:n,recovery:r,status:i}=await $(t);return e(u,{commandState:`error`,commandBusy:`false`,commandMessage:o.aborted?`Response not confirmed.`:n,commandRecovery:r,commandStatus:i}),!1}}}function ut(r,i,a,o){let s=[{kind:`model`,article:n.clone(r,`#model-settings`)},{kind:`effort`,article:n.clone(r,`#effort-settings`)}].map(({kind:e,article:t})=>{let r=n(i,`#session-${e}`),a=n(t,`[name="selection"]`);if(!(t instanceof HTMLElement)||!(r instanceof HTMLButtonElement)||!(a instanceof HTMLInputElement||a instanceof HTMLSelectElement))throw Error(`Session settings template is incomplete.`);return{kind:e,article:t,button:r,field:a,close(){}}});for(let r of s){let{kind:c,article:l,button:u,field:d}=r,f,p=()=>d instanceof HTMLInputElement||[...d.options].some(({value:e})=>e),m=()=>e(l,{settingsMessage:``,settingsRecovery:``});r.close=()=>{f?.abort(),l.hidden=!0,e(u,`expanded`,!1)};let h=async(e,t)=>{let{message:n,recovery:r}=await $(e);return{settingsMessage:t.aborted?`Response not confirmed.`:n,settingsRecovery:r}},g=async()=>{f?.abort();let t=f=new AbortController,r=AbortSignal.any([o(),t.signal]),i=(e,t={})=>a(e,t,r);m();try{if(d instanceof HTMLInputElement){let t=n(l,`datalist`);if(!t)throw Error(`Model suggestions are missing.`);t.replaceChildren();let{aliases:a,catalog:o}=await rt(i,d.value);r.throwIfAborted(),n.cloneEach(t,`#setting-option`,[...a.map(e=>({value:e.alias,label:nt(e)})),...o.items.map(e=>({value:e.selector,label:`${e.modelName}${e.readiness.ready?``:` — Not configured`}`}))],(t,{value:n,label:r})=>e(t,{optionValue:n,optionLabel:r}))}else{e(l,`selection-unavailable`,``);let{supported:t}=await at(i);r.throwIfAborted(),n.cloneEach(d,`#setting-option`,[``,...t],(t,n)=>e(t,{optionValue:n,optionLabel:n||`Reasoning Effort`,optionDisabled:n?null:``})),d.value=``,e(l,{selectionUnavailable:t.length?null:``,settingsMessage:t.length?``:`No supported efforts.`}),document.activeElement===l&&d.focus()}}catch(n){let i=await h(n,r);t.signal.aborted||e(l,i)}};t(i,`click`,`#session-${c}`,async()=>{if(!s.some(({article:t})=>e(t,`settings-pending`)!==null)){if(!l.hidden)r.close();else{for(let e of s)e.close();l.hidden=!1,e(u,`expanded`,!0),d.value=``,d instanceof HTMLInputElement?d.focus():l.focus(),await g()}}}),t(l,`click`,`[data-cancel-settings]`,()=>{u.focus(),r.close()}),d instanceof HTMLInputElement&&t(l,`input`,`input[name="selection"]`,g),t(l,`submit`,`form`,async t=>{if(t.preventDefault(),e(l,`settings-pending`)!==null)return;f?.abort(),m();let n=o();e(l,{settingsPending:`true`,selectionUnavailable:``});try{let e=(e,t={})=>a(e,t,n);c===`model`?await it(e,d.value):await at(e,d.value),n.throwIfAborted(),u.focus(),r.close()}catch(t){e(l,await h(t,n))}finally{e(l,{settingsPending:null,selectionUnavailable:p()?null:``})}})}}var dt=1e3;function ft(e,t){let n=!1;return Object.fromEntries(Object.entries(e).map(([e,r])=>[e,async e=>{if(!n)try{return await r(e)}catch(e){n=!0,t(e);return}}]))}function pt(r){let{sessionId:i,auth:a}=r.dataset;if(!i||a!==`session`&&a!==`none`)throw Error(`Session document metadata is incomplete.`);let o=n(r,`#session-yolo`);if(!(o instanceof HTMLButtonElement)||![`true`,`false`].includes(o.getAttribute(`aria-pressed`)??``))throw Error(`Session document has no approval mode.`);let s=n(`#session-conversation`);if(!(s instanceof HTMLElement))throw Error(`Session document has no conversation outlet.`);let c=n(`#main`);if(!(c instanceof HTMLElement))throw Error(`Session document has no main region.`);let l=n.clone(r,`#session-controls`),u=n.clone(c,`#session-feedback`),d=n(`#session-connection`);if(!d)throw Error(`Session document has no connection notice.`);let p=d,m=Ve(c,o.getAttribute(`aria-pressed`)===`true`),h=n(l,`#session-compose`),g=n(l,`#session-stop`),_=n(l,`#session-message`);if(!(h instanceof HTMLFormElement)||!(g instanceof HTMLFormElement)||!(_ instanceof HTMLTextAreaElement))throw Error(`Session controls are incomplete.`);let v=_;e(u,`message-status`,``);let y=new AbortController,x=ke(s,e=>C(e,a,y.signal),(e,t)=>qe(e,a,AbortSignal.any([t,y.signal]))),w=Je(s,Number(r.dataset.reasoningPreviewChars)),T=n(`#session-diagnostics`);if(!(T instanceof HTMLElement))throw Error(`Session document has no diagnostics outlet.`);let E=We(T),D=n(`#session-activity`);if(!(D instanceof HTMLElement))throw Error(`Session document has no activity outlet.`);let O=tt(D,e=>C(e,a,y.signal)),k=n(`#session-streams`);if(!(k instanceof HTMLElement))throw Error(`Session document has no stream outlet.`);let A=Xe(k,e=>$e(e,i,a,y.signal)),j=se(r),M=new S({url:`/acp`,sessionId:i}),N,P,F,I,L=!1,R=()=>{let e=M.state.plurnk;return Array.isArray(e?.availableCommands)?e.availableCommands:[]},z=(e,t={},n=y.signal)=>Qe(e,t,i,a,n),te=async()=>{let t=o.getAttribute(`aria-pressed`)!==`true`;if(o.setAttribute(`aria-pressed`,String(t)),o.title=`${t?`Auto`:`Manual`} Approval (/yolo)`,m.automatic(t)===`automatic`&&e(r,`connection`)===`interrupted`&&!I){let t=await m.decisions(M.pendingGates);t&&e(r,`connection`)===`interrupted`&&!I&&U({resolutions:t})}return B(),t},ne=lt(c,{call:z,stop:ae,toggleYolo:te});ut(c,r,z,()=>y.signal);function B(){let t=e(r,`connection`),n=N&&[`queued`,`running`,`parked`].includes(N.lifecycle),i=e(l,`command-pending`)!==null;e(l,{liveWork:n?``:null,sendUnavailable:(st(v.value,R())||t===`connected`&&!L&&(!P||P.retryable)&&!I)&&!i?null:``,stopUnavailable:n&&[`connected`,`interrupted`].includes(t??``)&&!I?null:``}),e(m.form,`review-unavailable`,t===`interrupted`&&!I&&e(m.form,`deadline-passed`)===null?null:``)}function V(t,n){e(r,{connection:t,connectionLabel:n}),e(p,`connection-label`,n),B()}let re=e=>f(a,e);function H(t){P?.message.id===t&&(v.value===P.message.content&&(v.value=``),P=void 0,e(u,{messageStatus:``,commandError:``}),B())}async function ie(t,n){let{signal:i}=t,a=!1,o=setInterval(()=>{[`connected`,`interrupted`].includes(e(r,`connection`)??``)&&N&&e(r,ee(N,Date.now()))},dt);try{for(;!i.aborted;){a||V(`connecting`,`Connecting…`),!n?.resolutions&&!a&&m.present([]),M.headers=await re(i),i.throwIfAborted(),M.url=`/acp`;let t=new AbortController;i.onabort=()=>t.abort(i.reason),M.abortController=t;let r,o=!1,s=!1,c=!1,l,d,f=ft({onSessionUpdate:async({update:e})=>{i.aborted||(w.consume(e),await E(e),await A.consume(e),O(e))},onMessagesChanged:({messages:e})=>{i.aborted||x.present(e)},onUserMessage:({messageId:e})=>{i.aborted||H(e)},onMessagesSnapshot:({snapshot:t})=>{i.aborted||(x.snapshot(t),P&&(t.messages.some(({id:e,role:t})=>e===P?.message.id&&t===`user`)?H(P.message.id):n||(P.retryable=!0,e(u,{messageStatus:`Delivery remains unconfirmed. You may retry this draft.`,commandError:``}),B())))},onStateChanged:({state:e})=>{if(i.aborted)return;let t=e;j(t,Date.now());let n=t.plurnk?.status;n&&(N=n,P&&n.inbox.some(({id:e})=>e===P?.message.id)&&H(P.message.id),a||V(`connected`,`Connected`))},onSettled:({stopReason:e})=>{o=e!==`interrupt`,s=e===`interrupt`,s&&(L=!0,B())},onError:({message:t,status:r,problem:a,terminal:s,settled:f})=>{i.aborted||(o=s!==void 0,l=r??(typeof a?.status==`number`?a.status:void 0),c=!!f,o&&n?e(u,`command-error`,t):d=t)}},e=>{r={error:e},t.abort(e)});try{n?await M.send({abortController:t,message:n.message,resolutions:n.resolutions},f):await M.resume(a?{abortController:t,gates:M.pendingGates.map(({id:e})=>e)}:{abortController:t},f)}catch(e){if(r===void 0)throw e}if(r!==void 0)throw M.close(),r.error;if(i.throwIfAborted(),s){a=!1;let t=m.present(M.pendingGates);if(L=!1,t===`automatic`){let e=await m.decisions(M.pendingGates);if(!e)throw Error(`Automatic approval did not resolve its presented set.`);n={resolutions:e};continue}V(`interrupted`,`Input required`),e(p,`connection-detail`,t===`manual`?`Review the pending requests.`:t===`expired`?`The decision deadline has passed; the daemon cancels these requests.`:`This page cannot answer this interaction. Work remains pending.`),a=!0,n=void 0}else{if(c&&n?.resolutions)e(u,`command-error`,`Response not accepted: ${d}`);else if(!o)throw Object.assign(Error(d??`Delivery ended without a session outcome.`),{status:l});a=!1,n=void 0}}}catch(t){if(i.aborted)return;M.close();let r=Reflect.get(Object(t),`status`)===401;V(r?`signed-out`:`disconnected`,r?`Sign-in ended`:`Disconnected`);let a=r?`Sign in to connect to this session again.`:`Displayed values are no longer live. Reconnect to check the session.`;e(p,`connection-detail`,`${t instanceof Error?t.message:String(t)} ${a}`),P&&e(u,{messageStatus:``,commandError:`Message delivery is unconfirmed. Your draft is retained; reconnect before trying again.`}),n?.resolutions&&e(u,{messageStatus:``,commandError:`Response could not be confirmed: ${t instanceof Error?t.message:String(t)}`})}finally{L=!1,B(),w.clear(),clearInterval(o),M.headers={}}}function U(e){let t=F;t?.controller.abort(),w.clear();let n=new AbortController;V(`connecting`,`Connecting…`),F={controller:n,done:(async()=>{await t?.done,n.signal.aborted||await ie(n,e)})()}}t(r,`click`,`#session-yolo`,async()=>{try{await te()}catch(t){y.signal.aborted||e(u,`command-error`,t instanceof Error?t.message:String(t))}}),t(c,`submit`,`#session-reconnect`,t=>{t.preventDefault(),[`disconnected`,`interrupted`].includes(e(r,`connection`)??``)&&(e(u,`command-error`,``),M.close(),U())}),t(h,`input`,`textarea`,()=>{v.setCustomValidity(``),B()}),t(h,`keydown`,`textarea`,e=>{!(e instanceof KeyboardEvent)||e.key!==`Enter`||!e.ctrlKey||e.altKey||e.metaKey||e.shiftKey||e.isComposing||e.repeat||(e.preventDefault(),h.requestSubmit())}),t(h,`submit`,`form`,async t=>{if(t.preventDefault(),e(l,`send-unavailable`)!==null)return;if(st(v.value,R())){let t=v.value;e(l,`command-pending`,``),B();try{await ne(t,y.signal)&&v.value===t&&(v.value=``)}finally{e(l,`command-pending`,null),B()}return}if(!v.value.trim()){v.setCustomValidity(`Enter a message.`),v.reportValidity();return}let n=P?.message.content===v.value?P.message:{id:b(),role:`user`,content:v.value};P={message:n,retryable:!1},e(u,{messageStatus:`Sending…`,commandError:``}),U({message:n})}),t(m.form,`submit`,`form`,async t=>{if(t.preventDefault(),e(m.form,`review-unavailable`)!==null||e(m.form,`request-count`)===`0`)return;let n=m.decisions(M.pendingGates);e(m.form,`review-unavailable`,``);try{let t=await n;if(!t||I||e(r,`connection`)!==`interrupted`)return;e(u,{messageStatus:``,commandError:``}),U({resolutions:t})}catch(t){let{message:n,recovery:r}=await $(t);e(u,{messageStatus:``,commandError:`Responses could not be submitted: ${[n,r].filter(Boolean).join(` `)}`})}finally{B()}});async function ae(){if(I)throw Error(`Stop is already pending.`);let e=new AbortController;I=e,B();try{let t=!!(N&&[`queued`,`running`,`parked`].includes(N.lifecycle));return await z(`session/cancel`,{},e.signal),e.signal.throwIfAborted(),t?`Stop requested.`:`No active work to stop.`}finally{I=void 0,B()}}t(g,`submit`,`form`,async t=>{if(t.preventDefault(),e(l,`stop-unavailable`)!==null)return;e(u,{messageStatus:`Requesting Stop…`,commandError:``});let n=y.signal;try{e(u,`message-status`,await ae())}catch(t){if(n.aborted){e(u,{messageStatus:``,commandError:`Stop could not be confirmed before the page was left.`});return}let{message:r,recovery:i}=await $(t);e(u,{messageStatus:``,commandError:`Stop could not be confirmed: ${[r,i].filter(Boolean).join(` `)}`})}}),window.onpagehide=()=>{x.pause(),w.clear(),y.abort(),F?.controller.abort(),I?.abort(),M.close(),V(`closed`,`Not connected.`)},window.onpageshow=e=>{e.persisted&&(y=new AbortController,x.resume(),U())},U()}export{pt as default,w as n,F as t};
|
|
Binary file
|
|
Binary file
|