gestalt-mobile 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@
5
5
 
6
6
  `):null,answer:i.text,...i.occurredAt?{occurredAt:i.occurredAt}:{}}),n=[]}return r(),t}function Ui(e,t){if(e===void 0||t===void 0)return null;let n=Math.floor(Math.max(0,t-e)/6e4);if(n<1)return`moments later`;if(n<60)return`${n} minute${n===1?``:`s`} later`;let r=Math.floor(n/60);if(r<24)return`${r} hour${r===1?``:`s`} later`;let i=Math.floor(r/24);return`${i} day${i===1?``:`s`} later`}function Wi(e){return new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`}).format(e)}function Gi(e){let t=[],n=/```[^\n]*\n([\s\S]*?)```/g,r=0;for(let i of e.matchAll(n)){let n=e.slice(r,i.index);n&&t.push(...Ki(n)),t.push({kind:`code`,text:i[1]??``}),r=(i.index??0)+i[0].length}let i=e.slice(r);return(i||!t.length)&&t.push(...Ki(i)),t}function Ki(e){let t=[],n=e.split(`
7
7
  `),r=0,i=e=>{let i=n.slice(r,e).join(`
8
- `);i&&t.push({kind:`text`,parts:Yi(i)})};for(let e=0;e<n.length-1;e+=1){let a=qi(n[e]??``),o=qi(n[e+1]??``);if(!a||!o||a.length!==o.length||!o.every(Ji))continue;i(e),e+=2;let s=[];for(;e<n.length;){let t=qi(n[e]??``);if(!t||t.length!==a.length)break;s.push(t),e+=1}t.push({kind:`table`,headers:a.map(Yi),rows:s.map(e=>e.map(Yi))}),r=e,--e}return i(n.length),t.length?t:[{kind:`text`,parts:Yi(e)}]}function qi(e){let t=e.trim();if(!t.includes(`|`))return null;let n=t.replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim());return n.length>1&&n.every(Boolean)?n:null}function Ji(e){return/^:?-{3,}:?$/.test(e)}function Yi(e){let t=[],n=/\[([^\]]+)\]\((https?:\/\/[^\s)]+|codex:\/\/[^\s)]+|\/[^\s)]+)\)|`([^`]+)`/g,r=0;for(let i of e.matchAll(n)){let n=e.slice(r,i.index);n&&t.push({kind:`text`,text:n}),t.push(i[3]?{kind:`code`,text:i[3]}:{kind:`link`,text:i[1]??``,href:i[2]??``}),r=(i.index??0)+i[0].length}let i=e.slice(r);return i&&t.push({kind:`text`,text:i}),t}var Xi=(e,t=d)=>{var n=Er();Q(V(n),17,t,Mr,(e,t)=>{var n=Er(),r=V(n),i=e=>{var n=Qi(),r=B(n,!0);N(n),U(()=>{$(n,`href`,K(t).href),X(r,K(t).text)}),Y(e,n)},a=e=>{var n=$i(),r=B(n,!0);N(n),U(()=>X(r,K(t).text)),Y(e,n)},o=e=>{var n=Tr();U(()=>X(n,K(t).text)),Y(e,n)};Z(r,e=>{K(t).kind===`link`?e(i):K(t).kind===`code`?e(a,1):e(o,-1)}),Y(e,n)}),Y(e,n)},Zi=(e,t=d)=>{var n=Er();Q(V(n),17,()=>Gi(t()),Mr,(e,t)=>{var n=Er(),r=V(n),i=e=>{var n=ea(),r=B(n),i=B(r,!0);N(r),N(n),U(()=>X(i,K(t).text)),Y(e,n)},a=e=>{var n=ia(),r=B(n),i=B(r),a=B(i);Q(a,21,()=>K(t).headers,Mr,(e,t)=>{var n=ta();Xi(B(n),()=>K(t)),N(n),Y(e,n)}),N(a),N(i);var o=H(i);Q(o,21,()=>K(t).rows,Mr,(e,t)=>{var n=ra();Q(n,21,()=>K(t),Mr,(e,t)=>{var n=na();Xi(B(n),()=>K(t)),N(n),Y(e,n)}),N(n),Y(e,n)}),N(o),N(r),N(n),Y(e,n)},o=e=>{var n=aa();Xi(B(n),()=>K(t).parts),N(n),Y(e,n)};Z(r,e=>{K(t).kind===`code`?e(i):K(t).kind===`table`?e(a,1):e(o,-1)}),Y(e,n)}),Y(e,n)},Qi=J(`<a target="_blank" rel="noreferrer"> </a>`),$i=J(`<code class="svelte-1im954t"> </code>`),ea=J(`<pre class="svelte-1im954t"><code class="svelte-1im954t"> </code></pre>`),ta=J(`<th scope="col" class="svelte-1im954t"><!></th>`),na=J(`<td class="svelte-1im954t"><!></td>`),ra=J(`<tr></tr>`),ia=J(`<div class="table-scroll svelte-1im954t"><table class="svelte-1im954t"><thead><tr></tr></thead><tbody></tbody></table></div>`),aa=J(`<div><!></div>`),oa=J(`<time class="svelte-1im954t"> <!></time>`),sa=J(`<div class="entry-heading svelte-1im954t"><strong>prompt</strong> <!></div> <div class="entry-content svelte-1im954t"><!></div>`,1),ca=J(`<button class="commentary-toggle svelte-1im954t" type="button"><span aria-hidden="true"> </span>commentary</button>`),la=J(`<div class="commentary-content svelte-1im954t"><!></div>`),ua=J(`<section class="answer-turn"><div class="entry-heading svelte-1im954t"><strong>answer</strong> <!> <!></div> <!> <div class="entry-content svelte-1im954t"><!></div></section>`),da=J(`<details><summary>commentary</summary> <!></details>`),fa=J(`<li><!></li>`),pa=J(`<ol aria-label="Chat messages" class="svelte-1im954t"></ol>`);function ma(e,t){Re(t,!0);let n=I(()=>Hi(t.messages)),r=Gt({});var i=pa();Q(i,23,()=>K(n),e=>e.id,(e,t,i)=>{var a=fa(),o=B(a),s=e=>{var r=sa(),a=V(r),o=H(B(a),2),s=e=>{var r=oa(),a=B(r),o=H(a),s=e=>{var r=Tr();U(e=>X(r,`· ${e??``}`),[()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt)]),Y(e,r)},c=I(()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt));Z(o,e=>{K(c)&&e(s)}),N(r),U((e,t)=>{$(r,`datetime`,e),X(a,`${t??``} `)},[()=>new Date(K(t).occurredAt).toISOString(),()=>Wi(K(t).occurredAt)]),Y(e,r)};Z(o,e=>{K(t).occurredAt&&e(s)}),N(a);var c=H(a,2);Zi(B(c),()=>K(t).text),N(c),Y(e,r)},c=e=>{var a=ua(),o=B(a),s=H(B(o),2),c=e=>{var n=ca(),i=B(n),a=B(i,!0);N(i),je(),N(n),U(e=>{$(n,`aria-expanded`,e),$(n,`aria-controls`,`commentary-${K(t).id}`),X(a,r[K(t).id]?`⌄`:`>`)},[()=>!!r[K(t).id]]),q(`click`,n,()=>r[K(t).id]=!r[K(t).id]),Y(e,n)};Z(s,e=>{K(t).commentary&&e(c)});var l=H(s,2),u=e=>{var r=oa(),a=B(r),o=H(a),s=e=>{var r=Tr();U(e=>X(r,`· ${e??``}`),[()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt)]),Y(e,r)},c=I(()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt));Z(o,e=>{K(c)&&e(s)}),N(r),U((e,t)=>{$(r,`datetime`,e),X(a,`${t??``} `)},[()=>new Date(K(t).occurredAt).toISOString(),()=>Wi(K(t).occurredAt)]),Y(e,r)};Z(l,e=>{K(t).occurredAt&&e(u)}),N(o);var d=H(o,2),f=e=>{var n=la();Zi(B(n),()=>K(t).commentary),N(n),U(()=>$(n,`id`,`commentary-${K(t).id}`)),Y(e,n)};Z(d,e=>{K(t).commentary&&r[K(t).id]&&e(f)});var p=H(d,2);Zi(B(p),()=>K(t).answer),N(p),N(a),Y(e,a)},l=e=>{var n=da();Zi(H(B(n),2),()=>K(t).commentary),N(n),Y(e,n)};Z(o,e=>{K(t).kind===`user`?e(s):K(t).answer?e(c,1):K(t).commentary&&e(l,2)}),N(a),U(()=>Xr(a,1,Wr(K(t).kind===`user`?`prompt-turn`:`answer-item`),`svelte-1im954t`)),Y(e,a)}),N(i),Y(e,i),ze()}vr([`click`]);async function ha(e=fetch){let t=await e(`/api/bootstrap`);if(!t.ok)throw Error(`BOOTSTRAP_FAILED`);return t.json()}function ga(e){if(typeof e.id!=`string`)return null;if(e.kind===`reasoning`&&Array.isArray(e.summary)){let t=e.summary.filter(e=>typeof e==`string`).join(`
8
+ `);i&&t.push({kind:`text`,parts:Yi(i)})};for(let e=0;e<n.length-1;e+=1){let a=qi(n[e]??``),o=qi(n[e+1]??``);if(!a||!o||a.length!==o.length||!o.every(Ji))continue;i(e),e+=2;let s=[];for(;e<n.length;){let t=qi(n[e]??``);if(!t||t.length!==a.length)break;s.push(t),e+=1}t.push({kind:`table`,headers:a.map(Yi),rows:s.map(e=>e.map(Yi))}),r=e,--e}return i(n.length),t.length?t:[{kind:`text`,parts:Yi(e)}]}function qi(e){let t=e.trim();if(!t.includes(`|`))return null;let n=t.replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim());return n.length>1&&n.every(Boolean)?n:null}function Ji(e){return/^:?-{3,}:?$/.test(e)}function Yi(e){let t=[],n=/\[([^\]]+)\]\((https?:\/\/[^\s)]+|codex:\/\/[^\s)]+|\/[^\s)]+)\)|`([^`]+)`/g,r=0;for(let i of e.matchAll(n)){let n=e.slice(r,i.index);n&&t.push({kind:`text`,text:n}),t.push(i[3]?{kind:`code`,text:i[3]}:{kind:`link`,text:i[1]??``,href:i[2]??``}),r=(i.index??0)+i[0].length}let i=e.slice(r);return i&&t.push({kind:`text`,text:i}),t}var Xi=(e,t=d)=>{var n=Er();Q(V(n),17,t,Mr,(e,t)=>{var n=Er(),r=V(n),i=e=>{var n=Qi(),r=B(n,!0);N(n),U(()=>{$(n,`href`,K(t).href),X(r,K(t).text)}),Y(e,n)},a=e=>{var n=$i(),r=B(n,!0);N(n),U(()=>X(r,K(t).text)),Y(e,n)},o=e=>{var n=Tr();U(()=>X(n,K(t).text)),Y(e,n)};Z(r,e=>{K(t).kind===`link`?e(i):K(t).kind===`code`?e(a,1):e(o,-1)}),Y(e,n)}),Y(e,n)},Zi=(e,t=d)=>{var n=Er();Q(V(n),17,()=>Gi(t()),Mr,(e,t)=>{var n=Er(),r=V(n),i=e=>{var n=ea(),r=B(n),i=B(r,!0);N(r),N(n),U(()=>X(i,K(t).text)),Y(e,n)},a=e=>{var n=ia(),r=B(n),i=B(r),a=B(i);Q(a,21,()=>K(t).headers,Mr,(e,t)=>{var n=ta();Xi(B(n),()=>K(t)),N(n),Y(e,n)}),N(a),N(i);var o=H(i);Q(o,21,()=>K(t).rows,Mr,(e,t)=>{var n=ra();Q(n,21,()=>K(t),Mr,(e,t)=>{var n=na();Xi(B(n),()=>K(t)),N(n),Y(e,n)}),N(n),Y(e,n)}),N(o),N(r),N(n),Y(e,n)},o=e=>{var n=aa();Xi(B(n),()=>K(t).parts),N(n),Y(e,n)};Z(r,e=>{K(t).kind===`code`?e(i):K(t).kind===`table`?e(a,1):e(o,-1)}),Y(e,n)}),Y(e,n)},Qi=J(`<a target="_blank" rel="noreferrer"> </a>`),$i=J(`<code class="svelte-1im954t"> </code>`),ea=J(`<pre class="svelte-1im954t"><code class="svelte-1im954t"> </code></pre>`),ta=J(`<th scope="col" class="svelte-1im954t"><!></th>`),na=J(`<td class="svelte-1im954t"><!></td>`),ra=J(`<tr></tr>`),ia=J(`<div class="table-scroll svelte-1im954t"><table class="svelte-1im954t"><thead><tr></tr></thead><tbody></tbody></table></div>`),aa=J(`<div><!></div>`),oa=J(`<time class="svelte-1im954t"> <!></time>`),sa=J(`<div class="entry-heading svelte-1im954t"><strong>prompt</strong> <!></div> <div class="entry-content svelte-1im954t"><!></div>`,1),ca=J(`<button class="commentary-toggle svelte-1im954t" type="button"><span aria-hidden="true"> </span>commentary</button>`),la=J(`<div class="commentary-content svelte-1im954t"><!></div>`),ua=J(`<section class="answer-turn"><div class="entry-heading svelte-1im954t"><strong>answer</strong> <!> <!></div> <!> <div class="entry-content svelte-1im954t"><!></div></section>`),da=J(`<details><summary>commentary</summary> <!></details>`),fa=J(`<li><!></li>`),pa=J(`<ol aria-label="Chat messages" class="svelte-1im954t"></ol>`);function ma(e,t){Re(t,!0);let n=I(()=>Hi(t.messages)),r=Gt({});var i=pa();Q(i,23,()=>K(n),e=>e.id,(e,t,i)=>{var a=fa(),o=B(a),s=e=>{var r=sa(),a=V(r),o=H(B(a),2),s=e=>{var r=oa(),a=B(r),o=H(a),s=e=>{var r=Tr();U(e=>X(r,`· ${e??``}`),[()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt)]),Y(e,r)},c=I(()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt));Z(o,e=>{K(c)&&e(s)}),N(r),U((e,t)=>{$(r,`datetime`,e),X(a,`${t??``} `)},[()=>new Date(K(t).occurredAt).toISOString(),()=>Wi(K(t).occurredAt)]),Y(e,r)};Z(o,e=>{K(t).occurredAt&&e(s)}),N(a);var c=H(a,2);Zi(B(c),()=>K(t).text),N(c),Y(e,r)},c=e=>{var a=ua(),o=B(a),s=H(B(o),2),c=e=>{var n=ca(),i=B(n),a=B(i,!0);N(i),je(),N(n),U(e=>{$(n,`aria-expanded`,e),$(n,`aria-controls`,`commentary-${K(t).id}`),X(a,r[K(t).id]?`⌄`:`>`)},[()=>!!r[K(t).id]]),q(`click`,n,()=>r[K(t).id]=!r[K(t).id]),Y(e,n)};Z(s,e=>{K(t).commentary&&e(c)});var l=H(s,2),u=e=>{var r=oa(),a=B(r),o=H(a),s=e=>{var r=Tr();U(e=>X(r,`· ${e??``}`),[()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt)]),Y(e,r)},c=I(()=>Ui(K(n)[K(i)-1]?.occurredAt,K(t).occurredAt));Z(o,e=>{K(c)&&e(s)}),N(r),U((e,t)=>{$(r,`datetime`,e),X(a,`${t??``} `)},[()=>new Date(K(t).occurredAt).toISOString(),()=>Wi(K(t).occurredAt)]),Y(e,r)};Z(l,e=>{K(t).occurredAt&&e(u)}),N(o);var d=H(o,2),f=e=>{var n=la();Zi(B(n),()=>K(t).commentary),N(n),U(()=>$(n,`id`,`commentary-${K(t).id}`)),Y(e,n)};Z(d,e=>{K(t).commentary&&r[K(t).id]&&e(f)});var p=H(d,2);Zi(B(p),()=>K(t).answer),N(p),N(a),Y(e,a)},l=e=>{var n=da();Zi(H(B(n),2),()=>K(t).commentary),N(n),Y(e,n)};Z(o,e=>{K(t).kind===`user`?e(s):K(t).answer?e(c,1):K(t).commentary&&e(l,2)}),N(a),U(()=>Xr(a,1,Wr(K(t).kind===`user`?`prompt-turn`:`answer-item`),`svelte-1im954t`)),Y(e,a)}),N(i),Y(e,i),ze()}vr([`click`]);var ha=[150,300,600];function ga(e){return new Promise(t=>setTimeout(t,e))}function _a(e){return e.status===502||e.status===503||e.status===504}async function va(e=fetch){for(let t=0;t<=ha.length;t+=1){let n;try{n=await e(`/api/bootstrap`)}catch(e){if(e instanceof Error&&e.name===`AbortError`)throw e;if(t===ha.length)throw Error(`BOOTSTRAP_FAILED`);await ga(ha[t]);continue}if(n.ok)return n.json();if(!_a(n)||t===ha.length)throw Error(`BOOTSTRAP_FAILED`);await ga(ha[t])}throw Error(`BOOTSTRAP_FAILED`)}function ya(e){if(typeof e.id!=`string`)return null;if(e.kind===`reasoning`&&Array.isArray(e.summary)){let t=e.summary.filter(e=>typeof e==`string`).join(`
9
9
  `);return t?{id:e.id,label:`Reasoning summary`,detail:t}:null}return e.kind===`plan`&&typeof e.text==`string`?{id:e.id,label:`Plan`,detail:e.text}:e.kind===`command`&&typeof e.command==`string`?{id:e.id,label:`Command · ${String(e.status??`unknown`)}`,detail:e.command}:e.kind===`fileChange`&&Array.isArray(e.paths)?{id:e.id,label:`File change · ${String(e.status??`unknown`)}`,detail:e.paths.join(`
10
- `)}:e.kind===`tool`&&typeof e.name==`string`?{id:e.id,label:`Tool · ${String(e.status??`unknown`)}`,detail:e.name}:null}var _a=`gestalt-mobile`,va=2,ya=[`settings`,`drafts`,`cursors`,`messages`];function ba(e){return new Promise((t,n)=>{let r=e.open(_a,va);r.onupgradeneeded=()=>{for(let e of ya)r.result.objectStoreNames.contains(e)||r.result.createObjectStore(e)},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function xa(e,t,n){return wa(e.transaction(t,`readonly`).objectStore(t).get(n))}function Sa(e,t,n,r){return wa(e.transaction(t,`readwrite`).objectStore(t).put(r,n))}function Ca(e,t,n){return wa(e.transaction(t,`readwrite`).objectStore(t).delete(n))}function wa(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}var Ta=`messages`;function Ea(e){return e.slice(-200)}function Da(e=globalThis.indexedDB){if(!e)return{read:async()=>[],write:async()=>{}};let t=ba(e);return{async read(e){try{return await xa(await t,Ta,e)??[]}catch{return[]}},async write(e,n){try{await Sa(await t,Ta,e,Ea(n))}catch{}}}}var Oa={RELAY_UNAVAILABLE:`The relay is unavailable. Check the connection and try again.`,SESSION_START_FAILED:`The session could not be started. Try again.`,SESSION_REFRESH_FAILED:`Sessions could not be refreshed. Try again.`,MESSAGE_SEND_FAILED:`The message was not sent. Your draft is preserved.`,GIT_SUMMARY_FAILED:`Repository status could not be loaded. Select it again to retry.`,GIT_PULL_FAILED:`The branch could not be refreshed. Resolve any Git conflicts and try again.`,GIT_CHECKOUT_FAILED:`The branch could not be selected. Refresh Git status and try again.`,GIT_PUSH_FAILED:`The push failed. Refresh Git status and resolve remote divergence first.`,GIT_CLONE_FAILED:`Clone failed.`};function ka(e,t){let n=e instanceof Error?e.message:``,r=Object.hasOwn(Oa,n)?n:t;return{code:r,message:Oa[r]}}var Aa={error:null,success:5e3,info:7e3};function ja(e={}){let t=e.now??Date.now,n=e.setTimer??setTimeout,r=e.clearTimer??clearTimeout,i=new Set,a=new Map,o=[],s=0,c=()=>o.map(e=>({...e})),l=()=>i.forEach(e=>e(c())),u=e=>{let t=a.get(e);t?.handle&&r(t.handle),t&&(t.handle=null)},d=e=>{o.some(t=>t.id===e)&&(u(e),a.delete(e),o=o.filter(t=>t.id!==e),l())},f=e=>{let r=a.get(e);!r||r.pauseReasons.size>0||(r.startedAt=t(),r.handle=n(()=>d(e),r.remaining))};return{enqueue(e){if(e.kind===`error`){let t=o.find(t=>t.kind===`error`&&(e.code?t.code===e.code:t.message===e.message));if(t)return o=o.map(e=>e.id===t.id?{...e,occurrences:e.occurrences+1}:e),l(),t.id}let n=`toast-${++s}`,r={...e,id:n,occurrences:1};o=[...o,r];let i=Aa[e.kind];return i!==null&&(a.set(n,{handle:null,remaining:i,startedAt:t(),pauseReasons:new Set}),f(n)),l(),n},dismiss:d,pause(e,n){let r=a.get(e);!r||r.pauseReasons.has(n)||(r.pauseReasons.add(n),r.handle&&(r.remaining=Math.max(0,r.remaining-(t()-r.startedAt)),u(e)))},resume(e,t){let n=a.get(e);!n||!n.pauseReasons.delete(t)||n.pauseReasons.size>0||f(e)},snapshot:c,subscribe(e){return i.add(e),e(c()),()=>i.delete(e)}}}var Ma=J(`<small class="svelte-1a0rutm"> </small>`),Na=J(`<section aria-atomic="true"><span class="toast-symbol svelte-1a0rutm" aria-hidden="true"> </span> <span class="toast-copy svelte-1a0rutm"><strong class="svelte-1a0rutm"> </strong> <span> </span> <!></span> <button type="button" class="svelte-1a0rutm"><span aria-hidden="true">×</span></button></section>`),Pa=J(`<div class="toast-viewport svelte-1a0rutm" aria-label="Notifications"></div>`);function Fa(e,t){Re(t,!0);let n=R([]),r=I(()=>K(n).slice(-3));vi(()=>t.queue.subscribe(e=>z(n,e)));var i=Pa();Q(i,21,()=>K(r),e=>e.id,(e,n)=>{var r=Na();let i;var a=B(r),o=B(a,!0);N(a);var s=H(a,2),c=B(s),l=B(c,!0);N(c);var u=H(c,2),d=B(u,!0);N(u);var f=H(u,2),p=e=>{var t=Ma(),r=B(t);N(t),U(()=>X(r,`Repeated ${K(n).occurrences??``} times.`)),Y(e,t)};Z(f,e=>{K(n).occurrences>1&&e(p)}),N(s);var m=H(s,2);N(r),U(()=>{i=Xr(r,1,`toast svelte-1a0rutm`,null,i,{error:K(n).kind===`error`}),$(r,`role`,K(n).kind===`error`?`alert`:`status`),$(r,`aria-live`,K(n).kind===`error`?`assertive`:`polite`),X(o,K(n).kind===`error`?`!`:K(n).kind===`success`?`✓`:`i`),X(l,K(n).kind===`error`?`Error`:K(n).kind===`success`?`Success`:`Info`),X(d,K(n).message),$(m,`aria-label`,`Dismiss ${K(n).kind} notification`)}),_r(`pointerenter`,r,()=>t.queue.pause(K(n).id,`hover`)),_r(`pointerleave`,r,()=>t.queue.resume(K(n).id,`hover`)),q(`focusin`,r,()=>t.queue.pause(K(n).id,`focus`)),q(`focusout`,r,()=>t.queue.resume(K(n).id,`focus`)),q(`click`,m,()=>t.queue.dismiss(K(n).id)),Y(e,r)}),N(i),Y(e,i),ze()}vr([`focusin`,`focusout`,`click`]);var Ia=J(`<main class="evidence-page svelte-1j55xyh"><h1 class="svelte-1j55xyh">Git repository</h1> <p>Choose a destination and clone a repository.</p> <div class="evidence-composer svelte-1j55xyh"><label for="evidence-prompt">Prompt</label> <textarea id="evidence-prompt" class="evidence-prompt svelte-1j55xyh" rows="1">Review repository status</textarea></div></main> <nav class="evidence-nav svelte-1j55xyh" aria-label="Primary evidence navigation"><button type="button" class="svelte-1j55xyh">Sessions</button> <button type="button" aria-pressed="true" class="svelte-1j55xyh">Git</button> <button type="button" class="svelte-1j55xyh">Chat</button></nav> <!>`,1);function La(e,t){Re(t,!0);let n=ja();vi(()=>{t.variant===`stacked`&&n.enqueue({kind:`success`,message:`Cloned.`}),n.enqueue({kind:`error`,code:`GIT_CLONE_FAILED`,message:`Clone failed.`})});var r=Ia();Fa(H(V(r),4),{get queue(){return n}}),Y(e,r),ze()}var Ra={sessionBase:()=>!0,gitRepositoryTarget:e=>e.isGitRepository,cloneDestination:e=>!e.isGitRepository};function za(e){let t=new Set,n=(e,r)=>{!e.isGitRepository&&r<=2&&t.add(e.id),e.children.forEach(e=>n(e,r+1))};return e.forEach(e=>n(e,1)),t}function Ba(e,t){let n=new Set(e);return t.isGitRepository||(n.has(t.id)?n.delete(t.id):n.add(t.id)),n}function Va(e,t){let n=[],r=(e,i,a)=>{n.push({node:e,level:i,parentId:a}),!e.isGitRepository&&t.has(e.id)&&e.children.forEach(t=>r(t,i+1,e.id))};return e.forEach(e=>r(e,1,null)),n}function Ha(e,t){let n=(e,r)=>{if(e.id===t)return r;for(let t of e.children){let i=n(t,[...r,e.id]);if(i)return i}return null};for(let t of e){let e=n(t,[]);if(e)return e}return[]}function Ua(e,t){for(let n of e){if(n.id===t)return n;let e=Ua(n.children,t);if(e)return e}}function Wa(e,t,n,r){if(e){let i=Ua(n,e);if(i&&r(i))return i.id;let a=Ha(t,e);for(let e of a.toReversed()){let t=Ua(n,e);if(t&&r(t))return t.id}}return Ga(n).find(r)?.id??null}function Ga(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}var Ka=J(`<button class="disclosure svelte-6z3q4v" type="button" tabindex="-1"><span aria-hidden="true"> </span></button>`),qa=J(`<span class="disclosure-spacer svelte-6z3q4v" aria-hidden="true"></span>`),Ja=J(`<span class="repository-badge svelte-6z3q4v">Git</span>`),Ya=J(`<div class="tree-row svelte-6z3q4v"><!> <button type="button" role="treeitem"><span class="selection-mark svelte-6z3q4v" aria-hidden="true"> </span> <span class="node-copy svelte-6z3q4v"><span class="node-name svelte-6z3q4v"> </span> <span class="node-path svelte-6z3q4v"> </span></span> <!></button></div>`),Xa=J(`<div class="filesystem-tree svelte-6z3q4v" role="tree"></div>`);function Za(e,t){Re(t,!0);let n=_i(t,`isSelectable`,3,()=>!0),r=R(null),i=Gt({}),a=I(()=>Va(t.roots,t.expandedIds)),o=I(()=>K(r)&&K(a).some(({node:e})=>e.id===K(r))?K(r):t.selectedId&&K(a).some(({node:e})=>e.id===t.selectedId)?t.selectedId:K(a)[0]?.node.id??null);function s(e){return!e.isGitRepository&&e.children.length>0}function c(e){return e===`.`?`~/`:`~/${e}`}function l(e){z(r,e,!0),i[e]?.focus()}function u(e,t){let n=Math.max(0,Math.min(K(a).length-1,t)),r=K(a)[n];r&&n!==e&&l(r.node.id)}function d(e){n()(e)&&t.onselect(e)}function f(e){s(e)&&t.onexpandedchange(Ba(t.expandedIds,e))}function p(e,n,r){let{node:i,parentId:o}=n;switch(e.key){case`ArrowUp`:e.preventDefault(),u(r,r-1);break;case`ArrowDown`:e.preventDefault(),u(r,r+1);break;case`ArrowRight`:if(!s(i))return;e.preventDefault(),t.expandedIds.has(i.id)?K(a)[r+1]?.parentId===i.id&&u(r,r+1):f(i);break;case`ArrowLeft`:if(!t.expandedIds.has(i.id)&&!o)return;e.preventDefault(),s(i)&&t.expandedIds.has(i.id)?f(i):o&&l(o);break;case`Home`:e.preventDefault(),u(r,0);break;case`End`:e.preventDefault(),u(r,K(a).length-1);break;case`Enter`:case` `:e.preventDefault(),d(i);break}}var m=Xa();Q(m,23,()=>K(a),e=>e.node.id,(e,a,l)=>{let u=I(()=>K(a).node),m=I(()=>s(K(u)));var h=Ya();let g;var _=B(h),v=e=>{var n=Ka(),r=B(n),i=B(r,!0);N(r),N(n),U((e,t)=>{$(n,`aria-label`,e),X(i,t)},[()=>`${t.expandedIds.has(K(u).id)?`Collapse`:`Expand`} ${K(u).name}`,()=>t.expandedIds.has(K(u).id)?`−`:`+`]),q(`click`,n,()=>f(K(u))),Y(e,n)},y=e=>{Y(e,qa())};Z(_,e=>{K(m)?e(v):e(y,-1)});var b=H(_,2);let x;var S=B(b),C=B(S,!0);N(S);var w=H(S,2),T=B(w),E=B(T,!0);N(T);var D=H(T,2),ee=B(D,!0);N(D),N(w);var te=H(w,2),ne=e=>{Y(e,Ja())};Z(te,e=>{K(u).isGitRepository&&e(ne)}),N(b),gi(b,(e,t)=>i[t.id]=e,e=>i?.[e.id],()=>[K(u)]),N(h),U((e,n,r,i,s)=>{g=Qr(h,``,g,e),x=Xr(b,1,`tree-item svelte-6z3q4v`,null,x,{selected:t.selectedId===K(u).id,repository:K(u).isGitRepository}),$(b,`aria-level`,K(a).level),$(b,`aria-expanded`,n),$(b,`aria-selected`,t.selectedId===K(u).id),$(b,`aria-disabled`,r),$(b,`tabindex`,K(o)===K(u).id?0:-1),$(b,`title`,i),X(C,t.selectedId===K(u).id?`✓`:``),X(E,K(u).name),X(ee,s)},[()=>({"--tree-level":Math.min(K(a).level-1,6)}),()=>K(m)?t.expandedIds.has(K(u).id):void 0,()=>!n()(K(u)),()=>c(K(u).relativePath),()=>c(K(u).relativePath)]),_r(`focus`,b,()=>z(r,K(u).id,!0)),q(`keydown`,b,e=>p(e,K(a),K(l))),q(`click`,b,()=>d(K(u))),Y(e,h)}),N(m),U(()=>$(m,`aria-label`,t.label)),Y(e,m),ze()}vr([`click`,`keydown`]);var Qa=J(`<section class="evidence-shell svelte-1d6w4ti" aria-labelledby="evidence-title"><p class="eyebrow svelte-1d6w4ti"> </p> <h1 id="evidence-title" class="svelte-1d6w4ti"> </h1> <p class="instructions svelte-1d6w4ti"> </p> <div class="tree-panel svelte-1d6w4ti"><!></div></section>`);function $a(e,t){Re(t,!0);let n=(e,t)=>({id:e,name:t,relativePath:e,isGitRepository:!0,children:[]}),r=[{id:`.`,name:`development-workspace-with-a-long-name`,relativePath:`.`,isGitRepository:!1,children:[{id:`dyne`,name:`dyne`,relativePath:`dyne`,isGitRepository:!1,children:[{id:`dyne/mobile-applications`,name:`mobile-applications-and-experiments`,relativePath:`dyne/mobile-applications`,isGitRepository:!1,children:[n(`dyne/mobile-applications/gestalt-mobile`,`gestalt-mobile-with-an-extraordinarily-long-repository-name`)]},n(`dyne/zenroom`,`zenroom`),n(`dyne/zenflows`,`zenflows`),n(`dyne/did`,`did-toolkit`),n(`dyne/api`,`api-gateway`),n(`dyne/docs`,`documentation-portal`)]},{id:`personal`,name:`personal-projects`,relativePath:`personal`,isGitRepository:!1,children:[]}]}],i=R(Gt(new Set([`.`,`dyne`,`dyne/mobile-applications`]))),a=R(null),o=I(()=>t.context===`sessions`?`dyne/mobile-applications`:`dyne/mobile-applications/gestalt-mobile`),s=I(()=>K(a)??K(o));var c=Qa(),l=B(c),u=B(l,!0);N(l);var d=H(l,2),f=B(d,!0);N(d);var p=H(d,2),m=B(p,!0);N(p);var h=H(p,2),g=B(h);{let e=I(()=>t.context===`sessions`?`Session base`:`Git repository`),n=I(()=>t.context===`sessions`?Ra.sessionBase:Ra.gitRepositoryTarget);Za(g,{get roots(){return r},get expandedIds(){return K(i)},get selectedId(){return K(s)},get label(){return K(e)},get isSelectable(){return K(n)},onexpandedchange:e=>z(i,e,!0),onselect:e=>z(a,e.id,!0)})}N(h),N(c),U(()=>{X(u,t.context===`sessions`?`Sessions`:`Git`),X(f,t.context===`sessions`?`Session base`:`Git repository`),X(m,t.context===`sessions`?`Select the folder Codex should use as its working directory.`:`Select a repository for Git actions.`)}),Y(e,c),ze()}function eo(e,t=Date.now()){if(!e)return`Not fetched yet`;let n=Math.max(0,t-new Date(e).getTime()),r=Math.floor(n/6e4);if(r<1)return`Fetched just now`;if(r<60)return`Fetched ${r}m ago`;let i=Math.floor(r/60);return i<24?`Fetched ${i}h ago`:`Fetched ${Math.floor(i/24)}d ago`}function to(e,t=Date.now()){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown time`;let r=Math.round((n-t)/1e3),i=[[`year`,31536e3],[`month`,2592e3],[`week`,604800],[`day`,86400],[`hour`,3600],[`minute`,60],[`second`,1]],[a,o]=i.find(([,e])=>Math.abs(r)>=e)??i.at(-1);return new Intl.RelativeTimeFormat(void 0,{numeric:`auto`}).format(Math.round(r/o),a)}var no=J(`<p class="clone-status svelte-pudr3t" role="status"> </p>`),ro=J(`<option> </option>`),io=J(`<section aria-label="Confirm push"><p> </p> <button type="button">Confirm push</button> <button type="button">Cancel</button></section>`),ao=J(`<li class="commit-entry svelte-pudr3t"><div class="commit-subject svelte-pudr3t"><code class="svelte-pudr3t"> </code><span> </span></div> <div class="commit-meta svelte-pudr3t"><span> </span><time class="svelte-pudr3t"> </time></div></li>`),oo=J(`<section class="commit-history svelte-pudr3t" aria-labelledby="recent-commits-title"><h3 id="recent-commits-title" class="svelte-pudr3t">Recent commits</h3> <ol class="commit-list svelte-pudr3t" aria-label="Recent commits"></ol></section>`),so=J(`<div class="git-overview svelte-pudr3t"><div class="git-status svelte-pudr3t"><label for="git-branch">Branch</label> <select id="git-branch"></select> <p class="svelte-pudr3t"> </p> <p class="svelte-pudr3t"> </p> <p class="svelte-pudr3t"><time> </time></p> <p class="svelte-pudr3t"> </p></div> <div class="git-actions svelte-pudr3t"><button type="button" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" class="svelte-pudr3t"><span aria-hidden="true">↓</span> </button></div></div> <!> <!>`,1),co=J(`<p>This workspace is not a Git repository.</p>`),lo=J(`<p role="status">Loading repository status…</p>`),uo=J(`<p><strong> </strong> is available as a Clone destination. Select a Git
11
- repository to inspect branches and enable repository actions.</p> <div class="git-actions svelte-pudr3t" aria-label="Repository actions unavailable"><button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↓</span> Pull</button></div>`,1),fo=J(`<p>Select a folder above to choose a Clone destination or inspect a Git repository.</p> <div class="git-actions svelte-pudr3t" aria-label="Repository actions unavailable"><button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↓</span> Pull</button></div>`,1),po=J(`<p role="alert"> </p>`),mo=J(`<section class="git-view svelte-pudr3t" aria-labelledby="git-title"><h2 id="git-title" class="visually-hidden">Git</h2> <section class="git-tree svelte-pudr3t" aria-labelledby="git-tree-title"><div class="section-heading svelte-pudr3t"><h3 id="git-tree-title" class="svelte-pudr3t">Repository and clone destination</h3> <p class="svelte-pudr3t">Select any folder. Git repositories enable repository actions; other folders are clone destinations.</p></div> <!></section> <form class="clone-form svelte-pudr3t"><div class="clone-controls svelte-pudr3t"><div class="clone-field clone-destination svelte-pudr3t"><span class="field-label svelte-pudr3t">Destination</span> <output aria-live="polite" class="svelte-pudr3t"> </output></div> <div class="clone-field svelte-pudr3t"><label for="git-clone-address">Git address</label> <input id="git-clone-address" name="address" required="" autocomplete="url" inputmode="url" enterkeyhint="done" placeholder="https://example.com/owner/repository.git" aria-describedby="clone-help"/></div> <button type="submit" class="svelte-pudr3t"> </button></div> <p id="clone-help" class="svelte-pudr3t">The repository is cloned inside the selected workspace.</p> <!></form> <section class="repository-details svelte-pudr3t" aria-labelledby="repository-details-title"><h3 id="repository-details-title" class="svelte-pudr3t">Repository details</h3> <!> <!></section></section>`);function ho(e,t){Re(t,!0);let n=R(``),r=I(()=>t.selectedWorkspace&&!t.selectedWorkspace.isGitRepository?t.selectedWorkspace:null);function i(e){e.preventDefault(),!(!K(n).trim()||t.cloning)&&t.onclone(K(n).trim())}var a=mo(),o=H(B(a),2),s=H(B(o),2);{let e=I(()=>t.selectedWorkspace?.id??null);Za(s,{get roots(){return t.workspaceTree},get expandedIds(){return t.expandedIds},get selectedId(){return K(e)},label:`Git repository and clone destination`,get onexpandedchange(){return t.onexpandedchange},get onselect(){return t.onselect}})}N(o);var c=H(o,2),l=B(c),u=B(l),d=H(B(u),2),f=B(d,!0);N(d),N(u);var p=H(u,2),m=H(B(p),2);oi(m),N(p);var h=H(p,2),g=B(h,!0);N(h),N(l);var _=H(l,4),v=e=>{var n=no(),r=B(n,!0);N(n),U(()=>X(r,t.cloneStatus)),Y(e,n)};Z(_,e=>{t.cloneStatus&&e(v)}),N(c);var y=H(c,2),b=H(B(y),2),x=e=>{var n=Er(),r=V(n),i=e=>{var n=Er(),r=V(n),i=e=>{var n=so(),r=V(n),i=B(r),a=H(B(i),2);Q(a,20,()=>t.summary.branches??[],e=>e,(e,t)=>{var n=ro(),r=B(n,!0);N(n);var i={};U(()=>{X(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),Y(e,n)}),N(a);var o;ei(a);var s=H(a,2),c=B(s);N(s);var l=H(s,2),u=B(l);N(l);var d=H(l,2),f=B(d),p=B(f,!0);N(f),N(d);var m=H(d,2),h=B(m);N(m),N(i);var g=H(i,2),_=B(g),v=H(_,2),y=H(B(v));N(v),N(g),N(r);var b=H(r,2),x=e=>{var n=io(),r=B(n),i=B(r);N(r);var a=H(r,2),o=H(a,2);N(n),U(()=>X(i,`Push HEAD to ${t.summary.upstream??``}?`)),q(`click`,a,function(...e){t.onpush?.apply(this,e)}),q(`click`,o,function(...e){t.oncancelpush?.apply(this,e)}),Y(e,n)};Z(b,e=>{t.confirmingPush&&e(x)});var S=H(b,2),C=e=>{var n=oo(),r=H(B(n),2);Q(r,21,()=>t.summary.commits,e=>e.hash,(e,t)=>{var n=ao(),r=B(n),i=B(r),a=B(i,!0);N(i);var o=H(i),s=B(o,!0);N(o),N(r);var c=H(r,2),l=B(c),u=B(l,!0);N(l);var d=H(l),f=B(d,!0);N(d),N(c),N(n),U(e=>{$(i,`title`,K(t).hash),X(a,K(t).shortHash),X(s,K(t).subject),X(u,K(t).author),$(d,`datetime`,K(t).authoredAt),$(d,`title`,K(t).authoredAt),X(f,e)},[()=>to(K(t).authoredAt)]),Y(e,n)}),N(r),N(n),Y(e,n)};Z(S,e=>{t.summary.commits.length&&e(C)}),U(e=>{a.disabled=t.refreshing||t.checkingOut||!t.summary.branches?.length,o!==(o=t.summary.branch??``)&&(a.value=(a.__value=t.summary.branch??``)??``,$r(a,t.summary.branch??``)),X(c,`Upstream: ${t.summary.upstream??`none`??``}`),X(u,`Ahead ${t.summary.ahead??``}; behind ${t.summary.behind??``}.`),$(f,`datetime`,t.summary.fetchedAt??void 0),X(p,e),X(h,`Changes: ${t.summary.dirty.staged??``} staged, ${t.summary.dirty.unstaged??``} unstaged, ${t.summary.dirty.untracked??``} untracked.`),_.disabled=t.refreshing||t.checkingOut||!t.summary.upstream||t.summary.ahead<1||t.summary.behind>0,v.disabled=t.refreshing||t.checkingOut,X(y,` ${t.refreshing?`Pulling…`:`Pull`}`)},[()=>eo(t.summary.fetchedAt)]),q(`change`,a,e=>t.oncheckout(e.currentTarget.value)),q(`click`,_,function(...e){t.onopenpushconfirmation?.apply(this,e)}),q(`click`,v,function(...e){t.onpull?.apply(this,e)}),Y(e,n)},a=e=>{Y(e,co())};Z(r,e=>{t.summary.available?e(i):e(a,-1)}),Y(e,n)},a=e=>{Y(e,lo())};Z(r,e=>{t.summary?e(i):t.error||e(a,1)}),Y(e,n)},S=e=>{var n=uo(),r=V(n),i=B(r),a=B(i,!0);N(i),je(),N(r),je(2),U(()=>X(a,t.selectedWorkspace.name)),Y(e,n)},C=e=>{var t=fo();je(2),Y(e,t)};Z(b,e=>{t.selectedWorkspace?.isGitRepository?e(x):t.selectedWorkspace?e(S,1):e(C,-1)});var w=H(b,2),T=e=>{var n=po(),r=B(n,!0);N(n),U(()=>X(r,t.error)),Y(e,n)};Z(w,e=>{t.error&&e(T)}),N(y),N(a),U(()=>{X(f,K(r)?`~/${K(r).relativePath}`:`Select a non-repository folder`),h.disabled=t.cloning,X(g,t.cloning?`Cloning…`:`Clone`)}),_r(`submit`,c,i),fi(m,()=>K(n),e=>z(n,e)),Y(e,a),ze()}vr([`change`,`click`]);function go(e,t,n,r,i){let a=new Set(_o(e).filter(e=>e.isGitRepository).map(e=>e.id)),o=Ua(t,n),s=o?_o(o.children).filter(e=>e.isGitRepository&&!a.has(e.id)):[],c=vo(r),l=s.find(e=>e.name===c)??(s.length===1?s[0]:void 0),u=l?.id??o?.id??null,d=new Set(i);return u&&Ha(t,u).forEach(e=>d.add(e)),!l&&o&&d.add(o.id),{selectedId:u,expandedIds:d}}function _o(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}function vo(e){return(e.trim().replace(/[?#].*$/,``).replace(/\/+$/,``).split(/[/:]/).at(-1)??``).replace(/\.git$/i,``)}function yo(e,t,n,r){return[...e,{id:t,role:`user`,text:n,...r?{occurredAt:r}:{},complete:!0}]}function bo(e,t,n,r){return e.find(e=>e.id===t)?e.map(e=>e.id===t?{...e,text:e.text+n}:e):[...e,{id:t,role:`assistant`,phase:`commentary`,text:n,...r?{occurredAt:r}:{},complete:!1}]}function xo(e,t){return e.map(e=>e.id===t?{...e,complete:!0}:e)}function So(e){if(typeof e!=`object`||!e)return null;let t=e.permissions;if(typeof t!=`object`||!t)return null;let n=t;return{permissions:{...n.network===null||n.network===void 0?{}:{network:n.network},...n.fileSystem===null||n.fileSystem===void 0?{}:{fileSystem:n.fileSystem}},scope:`turn`}}function Co(e=fetch){async function t(e){let t=await e.json().catch(()=>null),n=typeof t?.detail==`string`?t.detail:typeof t?.title==`string`?t.title:`Relay request failed (${e.status}).`;return Error(n)}async function n(n,r,i={}){let a=await e(n,{method:`POST`,headers:{"content-type":`application/json`,...i},body:JSON.stringify(r)});if(!a.ok)throw await t(a);return a.json()}async function r(n,r){let i=await e(n,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!i.ok)throw await t(i);return i.json()}async function i(n){let r=await e(n);if(!r.ok)throw await t(r);return r.json()}return{listSessions:()=>i(`/api/sessions`),listRecentSessions:()=>i(`/api/sessions/recent-threads`),openRecentSession:(e,t)=>n(`/api/sessions/recent-threads/open`,{threadId:e,cwd:t}),startSession:(e,t={},r)=>n(`/api/sessions`,{workspaceId:e,profile:`default`,...t},r?{"idempotency-key":r}:{}),startTurn:(e,t)=>n(`/api/sessions/${encodeURIComponent(e)}/turns`,{text:t}),interruptTurn:(e,t)=>n(`/api/sessions/${encodeURIComponent(e)}/turns/${encodeURIComponent(t)}/interrupt`,{}),restoreSession:e=>n(`/api/sessions/${encodeURIComponent(e)}/restore`,{}),releaseSession:e=>n(`/api/sessions/${encodeURIComponent(e)}/release`,{}),forgetSession:n=>e(`/api/sessions/${encodeURIComponent(n)}`,{method:`DELETE`}).then(async e=>{if(!e.ok)throw await t(e)}),getHistory:e=>i(`/api/sessions/${encodeURIComponent(e)}/history`),getGitSummary:e=>i(`/api/git/repositories/${encodeURIComponent(e)}`),cloneGitRepository:(e,t)=>n(`/api/git/clone`,{workspaceId:e,address:t}),refreshGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/refresh`,{},t?{"idempotency-key":t}:{}),pullGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/pull`,{},t?{"idempotency-key":t}:{}),checkoutGitBranch:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/checkout`,{branch:t}),pushGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/push`,{},t?{"idempotency-key":t}:{}),listAvailableSkills:(e,t)=>i(`/api/skills?${new URLSearchParams({workspaceId:e,profile:t}).toString()}`),listSkillProfiles:()=>i(`/api/skill-profiles`),replaceSkillProfile:(e,t)=>r(`/api/skill-profiles/${encodeURIComponent(e)}`,t),respondInteraction:(e,t,r)=>n(`/api/sessions/${encodeURIComponent(e)}/interactions/${encodeURIComponent(t)}`,r)}}async function wo(e,t=globalThis.navigator?.clipboard,n=Eo){if(!t)return To(e,n);try{return await t.writeText(e),!0}catch{return To(e,n)}}function To(e,t){try{return t(e)}catch{return!1}}function Eo(e){if(typeof document>`u`||!document.body)return!1;let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.cssText=`position:fixed;opacity:0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}function Do(e=globalThis.crypto,t=Date.now,n=Math.random){return typeof e?.randomUUID==`function`?e.randomUUID():`k-${t().toString(36)}-${Math.floor(n()*4294967296).toString(36)}`}function Oo(e,t,n,r=()=>{}){if(t.type!==`relay.event`||!t.event||t.event.sequence<=e)return e;if(t.event.sequence>e+1)return r(t.event.sequence),e;if(t.event.type===`agentMessageDelta`){let e=t.event.payload.text;e&&n(e)}return t.event.sequence}function ko(e){return e?`Codex is working…`:`Ready.`}function Ao(e,t=Math.random){let n=[500,1e3,2e3,5e3,1e4];return Math.round((n[Math.min(e,n.length-1)]??1e4)*(.8+t()*.4))}var jo=`settings`,Mo=`drafts`,No=`cursors`,Po=`selected-session`;function Fo(e=globalThis.indexedDB){if(!e)return Io;let t=ba(e);return{async readSelectedSession(){try{return await xa(await t,jo,Po)??null}catch{return null}},async saveSelectedSession(e){try{let n=await t;e?await Sa(n,jo,Po,e):await Ca(n,jo,Po)}catch{}},async readDraft(e){try{return await xa(await t,Mo,e)??``}catch{return``}},async saveDraft(e,n){try{await Sa(await t,Mo,e,n)}catch{}},async readCursor(e){try{let n=await xa(await t,No,e);return typeof n==`number`&&Number.isSafeInteger(n)&&n>=0?n:0}catch{return 0}},async saveCursor(e,n){try{await Sa(await t,No,e,n)}catch{}}}}var Io={readSelectedSession:async()=>null,saveSelectedSession:async()=>{},readDraft:async()=>``,saveDraft:async()=>{},readCursor:async()=>0,saveCursor:async()=>{}};function Lo(e,t=Date.now()){if(e===null)return`Unknown activity time`;let n=Math.max(0,t-e),r=Math.floor(n/(3600*1e3));if(r<1)return`Less than an hour ago`;if(r<24)return`${r} hour${r===1?``:`s`} ago`;let i=Math.floor(r/24);return`${i} day${i===1?``:`s`} ago`}function Ro(e){let t=e.updatedAt?Date.parse(e.updatedAt):NaN;return{threadId:e.threadId??null,workspacePath:e.workspacePath??`Workspace unavailable`,updatedAt:Number.isFinite(t)?t:null}}function zo(e){let t=/^\/home\/[^/]+/.exec(e)?.[0];if(!t)return e;let n=e.slice(t.length);return n?`~${n}`:`~/`}var Bo=J(`<time> </time>`),Vo=J(`<div> </div>`),Ho=J(`<li class="managed-session open-session svelte-hxb22h"><div class="session-actions svelte-hxb22h"><button type="button">Close</button></div> <div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div></li>`),Uo=J(`<section aria-labelledby="open-sessions-title"><h3 id="open-sessions-title">Open sessions</h3> <ul class="session-list svelte-hxb22h" aria-label="Open sessions"></ul></section>`),Wo=J(`<li class="managed-session svelte-hxb22h"><div class="session-actions svelte-hxb22h"><button type="button">Open</button> <button type="button">Forget</button></div> <div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div></li>`),Go=J(`<ul class="session-list svelte-hxb22h" aria-label="Saved sessions"></ul>`),Ko=J(`<p>No saved sessions yet.</p>`),qo=J(`<li class="recent-session svelte-hxb22h"><div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div> <div class="session-actions svelte-hxb22h"><button type="button">Open</button> <button type="button">Copy</button></div></li>`),Jo=J(`<ul class="session-list recent-session-list svelte-hxb22h" aria-label="Recent sessions"></ul>`),Yo=J(`<p>No other recent Codex sessions found.</p>`),Xo=J(`<section aria-labelledby="sessions-title"><h2 id="sessions-title" class="visually-hidden">Sessions</h2> <!> <!> <form><section class="session-base svelte-hxb22h" aria-labelledby="session-base-title"><div class="session-base-heading svelte-hxb22h"><h3 id="session-base-title" class="svelte-hxb22h">Session base</h3> <p class="svelte-hxb22h">Select the folder or repository Codex should use as its working directory.</p></div> <div class="tree-panel svelte-hxb22h"><!></div></section> <div class="form-row session-settings-row svelte-hxb22h"><div class="form-field svelte-hxb22h"><label for="sandbox">Sandbox</label> <select id="sandbox"><option>Codex default</option><option>read-only</option><option>workspace-write</option><option>danger-full-access</option></select></div> <div class="form-field svelte-hxb22h"><label for="approval-policy">Approval policy</label> <select id="approval-policy"><option>untrusted</option><option>on-request</option><option>never</option></select></div> <button class="new-session-button svelte-hxb22h" type="submit"> </button></div></form> <section aria-labelledby="recent-sessions-title"><h3 id="recent-sessions-title">Recent sessions</h3> <!></section></section>`);function Zo(e,t){Re(t,!0);let n=I(()=>t.sessions.filter(e=>e.state===`ready`||e.state===`turnActive`)),r=I(()=>t.sessions.filter(e=>e.state!==`ready`&&e.state!==`turnActive`)),i=I(()=>t.recentSessions.filter(e=>!K(n).some(t=>t.threadId===e.id))),a=I(()=>Ua(t.workspaceTree,t.workspaceId));var o=Xo(),s=H(B(o),2),c=e=>{var r=Uo(),i=H(B(r),2);Q(i,21,()=>K(n),e=>e.id,(e,n)=>{let r=I(()=>Ro(K(n)));var i=Ho(),a=B(i),o=B(a);N(a);var s=H(a,2),c=B(s),l=e=>{var t=Bo(),n=B(t,!0);N(t),U((e,r)=>{$(t,`datetime`,e),X(n,r)},[()=>new Date(K(r).updatedAt).toISOString(),()=>Lo(K(r).updatedAt)]),Y(e,t)},u=e=>{var t=Vo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Lo(null)]),Y(e,t)};Z(c,e=>{K(r).updatedAt===null?e(u,-1):e(l)});var d=H(c,2),f=B(d,!0);N(d),N(s),N(i),U(e=>X(f,e),[()=>zo(K(r).workspacePath)]),q(`click`,o,()=>t.onclose(K(n).id)),Y(e,i)}),N(i),N(r),Y(e,r)};Z(s,e=>{K(n).length&&e(c)});var l=H(s,2),u=e=>{var n=Go();Q(n,21,()=>K(r),e=>e.id,(e,n)=>{let r=I(()=>Ro(K(n)));var i=Wo(),a=B(i),o=B(a),s=H(o,2);N(a);var c=H(a,2),l=B(c),u=e=>{var t=Bo(),n=B(t,!0);N(t),U((e,r)=>{$(t,`datetime`,e),X(n,r)},[()=>new Date(K(r).updatedAt).toISOString(),()=>Lo(K(r).updatedAt)]),Y(e,t)},d=e=>{var t=Vo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Lo(null)]),Y(e,t)};Z(l,e=>{K(r).updatedAt===null?e(d,-1):e(u)});var f=H(l,2),p=B(f,!0);N(f),N(c),N(i),U(e=>X(p,e),[()=>zo(K(r).workspacePath)]),q(`click`,o,()=>t.onopen(K(n).id)),q(`click`,s,()=>t.onforget(K(n).id)),Y(e,i)}),N(n),Y(e,n)},d=e=>{Y(e,Ko())};Z(l,e=>{K(r).length?e(u):K(n).length||e(d,1)});var f=H(l,2),p=B(f),m=H(B(p),2),h=B(m);{let e=I(()=>K(a)?.id??null);Za(h,{get roots(){return t.workspaceTree},get expandedIds(){return t.expandedIds},get selectedId(){return K(e)},get isSelectable(){return Ra.sessionBase},label:`Session base`,get onexpandedchange(){return t.onexpandedchange},onselect:e=>t.onworkspacechange(e.id)})}N(m),N(p);var g=H(p,2),_=B(g),v=H(B(_),2),y=B(v);y.value=y.__value=``;var b=H(y);b.value=b.__value=`read-only`;var x=H(b);x.value=x.__value=`workspace-write`;var S=H(x);S.value=S.__value=`danger-full-access`,N(v);var C;ei(v),N(_);var w=H(_,2),T=H(B(w),2),E=B(T);E.value=E.__value=`untrusted`;var D=H(E);D.value=D.__value=`on-request`;var ee=H(D);ee.value=ee.__value=`never`,N(T);var te;ei(T),N(w);var ne=H(w,2),re=B(ne,!0);N(ne),N(g),N(f);var ie=H(f,2),O=H(B(ie),2),ae=e=>{var n=Jo();Q(n,21,()=>K(i),e=>e.id,(e,n)=>{var r=qo(),i=B(r),a=B(i),o=e=>{var t=Bo(),r=B(t,!0);N(t),U((e,n)=>{$(t,`datetime`,e),X(r,n)},[()=>new Date(K(n).recencyAt*1e3).toISOString(),()=>Lo(K(n).recencyAt*1e3)]),Y(e,t)},s=e=>{var t=Vo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Lo(null)]),Y(e,t)};Z(a,e=>{K(n).recencyAt===null?e(s,-1):e(o)});var c=H(a,2),l=B(c,!0);N(c),N(i);var u=H(i,2),d=B(u),f=H(d,2);N(u),N(r),U(e=>X(l,e),[()=>zo(K(n).cwd)]),q(`click`,d,()=>t.onopenrecent(K(n))),q(`click`,f,()=>t.oncopyresume(K(n).resumeCommand)),Y(e,r)}),N(n),Y(e,n)},oe=e=>{Y(e,Yo())};Z(O,e=>{K(i).length?e(ae):e(oe,-1)}),N(ie),N(o),U(()=>{C!==(C=t.sandbox)&&(v.value=(v.__value=t.sandbox)??``,$r(v,t.sandbox)),te!==(te=t.approvalPolicy)&&(T.value=(T.__value=t.approvalPolicy)??``,$r(T,t.approvalPolicy)),ne.disabled=!K(a)||t.startingSession,X(re,t.startingSession?`Starting…`:`New session`)}),_r(`submit`,f,e=>{e.preventDefault(),t.onstart()}),q(`change`,v,e=>t.onsandboxchange(e.currentTarget.value)),q(`change`,T,e=>t.onapprovalpolicychange(e.currentTarget.value)),Y(e,o),ze()}vr([`click`,`change`]);function Qo(e){let t={};return e.workspaceId||(t.workspaceId=`Choose a workspace.`),e.profile||(t.profile=`Choose a profile.`),e.profile&&e.profileState&&e.profileState!==`ok`&&(t.profile=`Sign in to this profile before starting Codex.`),t}function $o(e,t,n=!0){let r=n?[`sessions`,`git`,`skills`,`chat`]:[`sessions`,`git`,`skills`];return r[(r.indexOf(e)+t+r.length)%r.length]}var es=J(`<nav class="bottom-navigation" aria-label="Primary"><button>Sess<wbr/>ions</button> <button>Git</button> <button>Skills</button> <button>Chat</button></nav>`);function ts(e,t){Re(t,!0);let n={};function r(e){let r=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:null;if(r===null)return;e.preventDefault();let i=$o(t.activeTab,r,t.chatEnabled);t.onselect(i),n[i]?.focus()}var i=es(),a=B(i);gi(a,e=>n.sessions=e,()=>n?.sessions);var o=H(a,2);gi(o,e=>n.git=e,()=>n?.git);var s=H(o,2);gi(s,e=>n.skills=e,()=>n?.skills);var c=H(s,2);gi(c,e=>n.chat=e,()=>n?.chat),N(i),U(()=>{$(a,`aria-pressed`,t.activeTab===`sessions`),$(o,`aria-pressed`,t.activeTab===`git`),$(s,`aria-pressed`,t.activeTab===`skills`),$(c,`aria-pressed`,t.activeTab===`chat`),c.disabled=!t.chatEnabled}),q(`keydown`,a,r),q(`click`,a,()=>t.onselect(`sessions`)),q(`keydown`,o,r),q(`click`,o,()=>t.onselect(`git`)),q(`keydown`,s,r),q(`click`,s,()=>t.onselect(`skills`)),q(`keydown`,c,r),q(`click`,c,()=>t.onselect(`chat`)),Y(e,i),ze()}vr([`keydown`,`click`]);var ns=J(`<option> </option>`),rs=J(`<p id="skills-status" aria-live="polite">Loading skills…</p>`),is=J(`<p id="skills-status">No skills were discovered for this workspace and Codex profile.</p>`),as=J(`<p id="skills-status" class="notice svelte-dg6sjj" role="status"> </p>`),os=J(`<p id="skills-status" class="error svelte-dg6sjj" role="alert"> </p>`),ss=J(`<p id="skills-status" class="error svelte-dg6sjj" role="alert" tabindex="-1"> </p>`),cs=J(`<p id="skills-status" role="status">Profile saved.</p>`),ls=J(`<p> </p>`),us=J(`<dt class="svelte-dg6sjj">Display metadata</dt><dd class="svelte-dg6sjj"> </dd>`,1),ds=J(`<li> </li>`),fs=J(`<dt class="svelte-dg6sjj">Tool dependencies</dt> <dd class="svelte-dg6sjj"><ul class="svelte-dg6sjj"></ul></dd>`,1),ps=J(`<li class="skill-card svelte-dg6sjj"><label class="skill-toggle svelte-dg6sjj"><input type="checkbox" class="svelte-dg6sjj"/> <span class="svelte-dg6sjj"> </span> <span class="state svelte-dg6sjj"> </span></label> <details class="svelte-dg6sjj"><summary class="svelte-dg6sjj">Skill details</summary> <!> <!> <dl class="svelte-dg6sjj"><dt class="svelte-dg6sjj">Path</dt><dd class="path svelte-dg6sjj"> </dd> <dt class="svelte-dg6sjj">Scope</dt><dd class="svelte-dg6sjj"> </dd> <dt class="svelte-dg6sjj">Native state</dt><dd class="svelte-dg6sjj"> </dd> <!> <!></dl></details></li>`),ms=J(`<p class="summary svelte-dg6sjj"> </p> <ul class="skill-list svelte-dg6sjj"></ul>`,1),hs=J(`<section class="skills-view svelte-dg6sjj" aria-labelledby="skills-title"><h2 id="skills-title">Skills</h2> <p class="intro svelte-dg6sjj">Choose a workspace and profile, then save a complete skills selection.</p> <form aria-describedby="skills-status" class="svelte-dg6sjj"><div class="field-grid svelte-dg6sjj"><label for="skills-workspace" class="svelte-dg6sjj">Workspace</label> <select id="skills-workspace" class="svelte-dg6sjj"><option disabled="">Select a workspace</option><!></select> <label for="skills-codex-profile" class="svelte-dg6sjj">Codex profile</label> <select id="skills-codex-profile" class="svelte-dg6sjj"><option disabled="">Select a Codex profile</option><!></select> <label for="skills-existing-profile" class="svelte-dg6sjj">Existing saved profile</label> <select id="skills-existing-profile" class="svelte-dg6sjj"><option>New profile</option><!></select> <label for="skills-save-as" class="svelte-dg6sjj">Save as</label> <input id="skills-save-as" name="save-as" autocomplete="off" class="svelte-dg6sjj"/></div> <p class="save-intent svelte-dg6sjj" aria-live="polite"> </p> <button type="submit" class="svelte-dg6sjj"> </button></form> <!> <!></section>`);function gs(e,t){Re(t,!0);let n=_i(t,`skillsState`,7),r=R(0),i=R(null),a=I(()=>(K(r),n())),o=I(()=>m(t.workspaceTree)),s=I(()=>K(a).profiles.filter(e=>!(`error`in e)));function c(){n(Object.assign(Object.create(Object.getPrototypeOf(n())),n())),z(r,K(r)+1)}function l(e){t.onworkspacechange(e.currentTarget.value)}function u(e){t.oncodexprofilechange(e.currentTarget.value)}function d(e){K(a).selectProfile(e.currentTarget.value),c()}async function f(e){e.preventDefault(),await K(a).save(),c(),K(a).status.kind===`save-failed`&&(await sr(),K(i)?.focus())}function p(e){return e&&/^#[0-9a-f]{3,8}$/i.test(e)?e:void 0}function m(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}var h=hs(),g=H(B(h),4),_=B(g),v=H(B(_),2),y=B(v);y.value=y.__value=``,Q(H(y),17,()=>K(o),e=>e.id,(e,t)=>{var n=ns(),r=B(n,!0);N(n);var i={};U(()=>{X(r,K(t).relativePath||K(t).name),i!==(i=K(t).id)&&(n.value=(n.__value=K(t).id)??``)}),Y(e,n)}),N(v);var b;ei(v);var x=H(v,4),S=B(x);S.value=S.__value=``,Q(H(S),17,()=>t.codexProfiles,e=>e.name,(e,t)=>{var n=ns(),r=B(n);N(n);var i={};U(()=>{n.disabled=K(t).state!==`ok`,X(r,`${K(t).name??``}${K(t).state===`ok`?``:` (${K(t).status})`}`),i!==(i=K(t).name)&&(n.value=(n.__value=K(t).name)??``)}),Y(e,n)}),N(x);var C;ei(x);var w=H(x,4),T=B(w);T.value=T.__value=``,Q(H(T),17,()=>K(s),e=>e.name,(e,t)=>{var n=ns(),r=B(n,!0);N(n);var i={};U(()=>{X(r,K(t).name),i!==(i=K(t).name)&&(n.value=(n.__value=K(t).name)??``)}),Y(e,n)}),N(w);var E;ei(w);var D=H(w,4);oi(D),N(_);var ee=H(_,2),te=B(ee,!0);N(ee);var ne=H(ee,2),re=B(ne,!0);N(ne),N(g);var ie=H(g,2),O=e=>{Y(e,rs())},ae=e=>{Y(e,is())},oe=e=>{var t=as(),n=B(t);N(t),U(()=>X(n,`Discovery warning: ${K(a).status.message??``}`)),Y(e,t)},se=e=>{var t=os(),n=B(t,!0);N(t),U(()=>X(n,K(a).status.message)),Y(e,t)},ce=e=>{var t=ss(),n=B(t,!0);N(t),gi(t,e=>z(i,e),()=>K(i)),U(()=>X(n,K(a).status.message)),Y(e,t)},le=e=>{Y(e,cs())};Z(ie,e=>{K(a).status.kind===`loading`?e(O):K(a).status.kind===`empty`?e(ae,1):K(a).status.kind===`warning`?e(oe,2):K(a).status.kind===`invalid-profile`||K(a).status.kind===`error`?e(se,3):K(a).status.kind===`save-failed`?e(ce,4):K(a).status.kind===`saved`&&e(le,5)});var ue=H(ie,2),de=e=>{var t=ms(),n=V(t),r=B(n);N(n);var i=H(n,2);Q(i,21,()=>K(a).skills,e=>e.path,(e,t)=>{var n=ps();let r;var i=B(n),o=B(i);oi(o);var s=H(o,2),l=B(s,!0);N(s);var u=H(s,2),d=B(u,!0);N(u),N(i);var f=H(i,2),m=H(B(f),2),h=e=>{var n=ls(),r=B(n,!0);N(n),U(()=>X(r,K(t).description)),Y(e,n)};Z(m,e=>{K(t).description&&e(h)});var g=H(m,2),_=e=>{var n=ls(),r=B(n,!0);N(n),U(()=>X(r,K(t).shortDescription)),Y(e,n)};Z(g,e=>{K(t).shortDescription&&e(_)});var v=H(g,2),y=H(B(v)),b=B(y,!0);N(y);var x=H(y,3),S=B(x,!0);N(x);var C=H(x,3),w=B(C,!0);N(C);var T=H(C,2),E=e=>{var n=us(),r=H(V(n)),i=B(r,!0);N(r),U(()=>X(i,K(t).interfaceShortDescription)),Y(e,n)};Z(T,e=>{K(t).interfaceShortDescription&&e(E)});var D=H(T,2),ee=e=>{var n=fs(),r=H(V(n),2),i=B(r);Q(i,21,()=>K(t).dependencies.tools,e=>`${e.type}:${e.value}`,(e,t)=>{var n=ds(),r=B(n);N(n),U(()=>X(r,`${K(t).type??``}: ${K(t).value??``}${K(t).description?` — ${K(t).description}`:``}`)),Y(e,n)}),N(i),N(r),Y(e,n)};Z(D,e=>{K(t).dependencies?.tools?.length&&e(ee)}),N(v),N(f),N(n),U(e=>{r=Qr(n,``,r,e),$(i,`for`,`skill-${K(t).path}`),$(o,`id`,`skill-${K(t).path}`),ci(o,K(t).enabled),X(l,K(t).displayName??K(t).name),X(d,K(t).enabled?`Enabled`:`Disabled`),X(b,K(t).path),X(S,K(t).scope??`Not provided`),X(w,K(t).nativeEnabled?`Enabled`:`Disabled`)},[()=>({"--brand-color":p(K(t).brandColor)})]),q(`change`,o,e=>{K(a).toggle(K(t).path,e.currentTarget.checked),c()}),Y(e,n)}),N(i),U(()=>X(r,`${K(a).enabledCount??``} of ${K(a).skills.length??``} skills enabled.`)),Y(e,t)};Z(ue,e=>{K(a).skills.length>0&&e(de)}),N(h),U(()=>{b!==(b=K(a).workspaceId)&&(v.value=(v.__value=K(a).workspaceId)??``,$r(v,K(a).workspaceId)),C!==(C=K(a).codexProfile)&&(x.value=(x.__value=K(a).codexProfile)??``,$r(x,K(a).codexProfile)),E!==(E=K(a).selectedProfileName)&&(w.value=(w.__value=K(a).selectedProfileName)??``,$r(w,K(a).selectedProfileName)),si(D,K(a).saveAsName),X(te,K(a).saveIntent===`replace`?`Replacing the selected saved profile.`:`Creating a new saved profile.`),ne.disabled=K(a).status.kind===`saving`,X(re,K(a).status.kind===`saving`?`Saving profile…`:`Save profile`)}),_r(`submit`,g,f),q(`change`,v,l),q(`change`,x,u),q(`change`,w,d),q(`input`,D,e=>{K(a).saveAsName=e.currentTarget.value,c()}),Y(e,h),ze()}vr([`change`,`input`]);var _s=class{client;workspaceId=``;codexProfile=``;selectedProfileName=``;saveAsName=``;source=`native`;skills=[];profiles=[];status={kind:`idle`};baseline=new Map;saving=!1;constructor(e){this.client=e}get enabledCount(){return this.skills.filter(e=>e.enabled).length}get dirty(){return this.skills.some(e=>this.baseline.get(e.path)!==e.enabled)}get saveIntent(){return this.profiles.some(e=>!(`error`in e)&&e.name===this.saveAsName.trim())?`replace`:`create`}async load(e,t){this.workspaceId=e,this.codexProfile=t,this.status={kind:`loading`};try{let[n,r]=await Promise.all([this.client.listAvailableSkills(e,t),this.client.listSkillProfiles()]);this.applyAvailable(n),this.profiles=r.profiles;let i=r.profiles.find(e=>`error`in e);i&&`error`in i?this.status={kind:`invalid-profile`,message:i.error.message}:n.errors.length?this.status={kind:`warning`,message:n.errors.map(e=>e.message).join(` `)}:this.status=this.skills.length?{kind:`ready`}:{kind:`empty`}}catch(e){this.status={kind:`error`,message:vs(e)}}}selectProfile(e){let t=this.profiles.find(t=>!(`error`in t)&&t.name===e);if(!t||`error`in t){this.status={kind:`invalid-profile`,message:`Select a valid saved profile.`};return}this.selectedProfileName=t.name,this.saveAsName=t.name;let n=new Map(t.skills.map(e=>[e.path,e.enabled]));this.skills=this.skills.map(e=>({...e,enabled:n.get(e.path)??!1})),this.captureBaseline(),this.status=this.skills.length?{kind:`ready`}:{kind:`empty`}}toggle(e,t){this.skills=this.skills.map(n=>n.path===e?{...n,enabled:t}:n)}reset(){this.skills=this.skills.map(e=>({...e,enabled:this.baseline.get(e.path)??!1}))}async save(){let e=this.saveAsName.trim();if(this.saving)return;if(!e){this.status={kind:`save-failed`,message:`Enter a profile name before saving.`};return}this.saving=!0,this.status={kind:`saving`};let t=this.savePayload(e);try{let n=await this.client.replaceSkillProfile(e,t);this.profiles=[...this.profiles.filter(e=>`error`in e||e.name!==n.name),n].sort((e,t)=>e.name.localeCompare(t.name)),this.selectedProfileName=n.name,this.saveAsName=n.name,this.captureBaseline(),this.status={kind:`saved`}}catch(e){this.status={kind:`save-failed`,message:vs(e)}}finally{this.saving=!1}}savePayload(e=this.saveAsName.trim()){return{version:1,name:e,skills:this.skills.map(({name:e,path:t,enabled:n})=>({name:e,path:t,enabled:n})).sort((e,t)=>e.path.localeCompare(t.path))}}applyAvailable(e){let t=new Map(this.skills.filter(e=>this.baseline.get(e.path)!==e.enabled).map(e=>[e.path,e.enabled]));this.source=e.source,this.skills=e.skills.map(e=>({...e,enabled:t.get(e.path)??e.effectiveEnabled})),this.baseline=new Map(e.skills.map(e=>[e.path,this.baseline.get(e.path)??e.effectiveEnabled]))}captureBaseline(){this.baseline=new Map(this.skills.map(e=>[e.path,e.enabled]))}};function vs(e){return e instanceof Error?e.message:`Unknown relay error.`}var ys=J(`<main class="evidence-mode svelte-y74n0s"><!></main>`),bs=J(`<!> <!> <!> <!>`,1),xs=J(`<p>Start a session from the Sessions tab to chat with Codex.</p>`),Ss=J(`<section class="chat-view svelte-y74n0s" aria-labelledby="chat-title"><h2 id="chat-title" class="visually-hidden">Chat</h2> <!></section>`),Cs=J(`<p>Loading skills…</p>`),ws=J(`<main><!> <!> <!></main>`),Ts=J(`<!> <!>`,1);function Es(e,t){Re(t,!0);let n=R(`sessions`),r=R(`Loading relay…`),i=R(`system`),a=R(Gt([])),o=R([]),s=R(null),c=!1,l=R(``),u=R(Gt(new Set)),d=R(null),f=R(Gt([])),p=I(()=>K(f).some(e=>e.id===K(d)&&(e.state===`ready`||e.state===`turnActive`))),m=R(Gt([])),h=R(``),g=R(`on-request`),_=R(null),v=R(!1),y=R(``),b=R(null),x=R(!1),S=R(Gt([])),C=R(Gt([])),w=R(0),T=null,E=null,D=null,ee=null,te=!1,ne=0,re=0,ie=R(null),O=R(null),ae=R(Gt(new Set)),oe=R(!1),se=R(!1),ce=R(!1),le=R(!1),ue=R(null),de=R(null),fe=R(null),pe=R(null),me=0,he=R(Gt([])),ge=Gt({}),k=Co(),_e=Da(),ve=Fo(),ye=ja(),be=new URLSearchParams(location.search).get(`tree-evidence`),xe=new URLSearchParams(location.search).get(`toast-evidence`);vi(async()=>{let e=localStorage.getItem(`gestalt-mobile.theme`);if((e===`light`||e===`dark`||e===`system`)&&Se(e),!(be===`sessions`||be===`git`||xe===`error`||xe===`stacked`)){ee=setInterval(Me,2e3),document.addEventListener(`visibilitychange`,Me),window.addEventListener(`focus`,Me);try{let e=await ha();z(l,Wa(K(l)||null,K(a),e.workspaces,Ra.sessionBase)??``,!0),z(a,e.workspaces,!0),z(o,e.profiles),z(u,za(K(a)),!0),z(ae,za(K(a)),!0);let t=await ve.readSelectedSession();z(d,e.sessions.some(e=>e.id===t)?t:e.sessions[0]?.id??null,!0),K(d)&&z(w,await ve.readCursor(K(d)),!0),K(d)&&z(y,await ve.readDraft(K(d)),!0),K(d)&&z(S,await _e.read(K(d)),!0),z(f,e.sessions,!0),z(he,K(f).find(e=>e.id===K(d))?.pendingInteractions??[],!0),we(),z(b,K(f).find(e=>e.id===K(d))?.activeTurnId??null,!0),z(r,K(d)?ko(K(b)):`Choose a workspace and start a session.`,!0),K(d)&&(await je(K(d)),Xe(K(d)))}catch(e){z(r,Ye(e,`RELAY_UNAVAILABLE`),!0)}}});function Se(e){z(i,e,!0),e===`system`?document.documentElement.removeAttribute(`data-theme`):document.documentElement.dataset.theme=e,localStorage.setItem(`gestalt-mobile.theme`,e)}yi(()=>{E&&clearTimeout(E),D&&clearTimeout(D),ee&&clearInterval(ee),document.removeEventListener(`visibilitychange`,Me),window.removeEventListener(`focus`,Me),T?.close()});async function A(){if(!K(l)||K(v))return;let e=Qo({workspaceId:K(l),profile:`default`,profileState:`ok`});if(e.profile){z(r,e.profile,!0);return}z(_,K(_)??Do(),!0),z(v,!0),z(r,`Starting session…`);try{let e=await k.startSession(K(l),{sandbox:K(h)||void 0,approvalPolicy:K(g)},K(_));z(_,null),z(d,e.id,!0),z(b,null),ve.saveSelectedSession(e.id),await Ce(),z(S,[],!0),F(e.id),z(C,[],!0),z(w,0),z(y,await ve.readDraft(e.id),!0),Xe(e.id),z(n,`chat`),Fe(),z(r,`Session started.`)}catch(e){z(r,Ye(e,`SESSION_START_FAILED`),!0)}finally{z(v,!1)}}async function Ce(){z(f,await k.listSessions(),!0)}async function we(){try{z(m,await k.listRecentSessions(),!0)}catch{z(m,[],!0)}}async function Te(){try{await Promise.all([Ce(),we()])}catch(e){z(r,Ye(e,`SESSION_REFRESH_FAILED`),!0)}}async function Ee(e){z(r,`Opening session…`);try{let t=K(f).find(t=>t.id===e);if(t&&t.state!==`ready`&&t.state!==`turnActive`){let t=await k.restoreSession(e);z(f,K(f).map(n=>n.id===e?t:n),!0)}z(d,e,!0),ve.saveSelectedSession(e),z(S,await _e.read(e),!0),z(C,[],!0),z(w,0),z(y,await ve.readDraft(e),!0),z(b,K(f).find(t=>t.id===e)?.activeTurnId??null,!0),z(he,K(f).find(t=>t.id===e)?.pendingInteractions??[],!0),z(n,`chat`),Fe(),await je(e),Xe(e)}catch(e){z(r,`Could not open session: ${Je(e)}`)}}async function De(e){z(r,`Opening recent session…`);try{let t=await k.openRecentSession(e.id,e.cwd);await Te(),await Ee(t.id)}catch(e){z(r,`Could not open recent session: ${Je(e)}`)}}async function j(e){z(r,`Closing session…`);try{await k.releaseSession(e),K(d)===e&&(z(d,null),z(n,`sessions`),z(b,null),z(he,[],!0),ve.saveSelectedSession(null),E&&clearTimeout(E),E=null,T?.close(),T=null),await Te(),z(r,`Session closed.`)}catch(e){z(r,`Could not close session: ${Je(e)}`)}}async function Oe(e){try{await k.forgetSession(e),K(d)===e&&(T?.close(),z(d,null),z(b,null),ve.saveSelectedSession(null)),await Te()}catch(e){z(r,`Could not forget session: ${Je(e)}`)}}async function M(e){z(r,await wo(e)?`Resume command copied.`:`Could not copy the resume command.`,!0)}async function ke(){if(!K(d)||!K(y).trim()||K(b)||K(x))return;let e=K(y).trim();z(x,!0);try{let t=await k.startTurn(K(d),e);z(b,t.activeTurnId??null,!0),z(S,yo(K(S),`user-${t.activeTurnId??Date.now().toString()}`,e,Date.now()),!0),F(K(d)),z(y,``),ve.saveDraft(K(d),``),z(r,ko(K(b)),!0)}catch(e){z(r,Ye(e,`MESSAGE_SEND_FAILED`),!0)}finally{z(x,!1)}}async function Ae(){if(!(!K(d)||!K(b)))try{await k.interruptTurn(K(d),K(b)),z(b,null),z(r,`Codex turn interrupted.`)}catch(e){z(r,`Could not interrupt Codex: ${Je(e)}`)}}async function je(e,t=0){let n=await k.getHistory(e);if(K(d)!==e)return;let i=n.items.filter(e=>(e.kind===`user`||e.kind===`agent`)&&e.text).map(e=>({id:e.id,role:e.kind===`user`?`user`:`assistant`,text:e.text,...typeof e.occurredAt==`number`?{occurredAt:e.occurredAt}:{},...e.phase===`commentary`||e.phase===`final_answer`?{phase:e.phase}:{},complete:!0})),a=K(S).filter(e=>!e.complete);z(S,[...i,...a],!0),F(e);let o=n.items.flatMap(e=>{let t=ga(e);return t?[t]:[]});z(C,[...o,...K(C).filter(e=>!o.some(t=>t.id===e.id))],!0),`activeTurnId`in n&&(z(b,n.activeTurnId??null,!0),z(f,K(f).map(t=>t.id===e?{...t,activeTurnId:K(b)}:t),!0)),z(w,Math.max(K(w),n.currentSequence??t),!0),ve.saveCursor(e,K(w)),z(r,ko(K(b)),!0)}function Me(){K(n)!==`chat`||!K(d)||document.visibilityState!==`visible`||te||(te=!0,je(K(d)).catch(()=>void 0).finally(()=>{te=!1}))}function Ne(e){if(!(e===`chat`&&!K(p))){if(z(n,e,!0),e===`skills`&&!c){let e=K(l)||K(a)[0]?.id||``,t=K(o).find(e=>e.state===`ok`)?.name??``;e&&t&&Pe(e,t)}e===`chat`&&(Me(),Fe()),e===`git`&&K(O)&&Ie(K(O)),e===`sessions`&&Te()}}async function Pe(e,t){let n=new _s(k);await n.load(e,t),z(s,n,!0),c=!0}function Fe(){requestAnimationFrame(()=>window.scrollTo({top:document.documentElement.scrollHeight}))}async function Ie(e=K(O)){let t=e?Ua(K(a),e):void 0;if(!e||!t?.isGitRepository){me+=1,z(ie,null);return}let n=++me;try{let t=await k.getGitSummary(e);n===me&&K(O)===e&&z(ie,t,!0)}catch(t){if(n!==me||K(O)!==e)return;z(ie,null),z(ue,Ye(t,`GIT_SUMMARY_FAILED`),!0)}}function P(e){z(O,e.id,!0),z(ue,null),z(ie,null),z(oe,!1),e.isGitRepository?Ie(e.id):(me+=1,z(ie,null))}async function Le(){let e=K(O);if(!(!e||!Ua(K(a),e)?.isGitRepository)){z(fe,K(fe)??Do(),!0),z(se,!0),z(ue,null);try{await k.pullGit(e,K(fe)),await Ie(e),z(fe,null)}catch(e){z(ue,Ye(e,`GIT_PULL_FAILED`),!0)}finally{z(se,!1)}}}async function Be(e){if(K(le))return;let t=K(O)?Ua(K(a),K(O)):void 0;if(!t||t.isGitRepository){z(de,null),ye.enqueue({kind:`error`,code:`INVALID_CLONE_DESTINATION`,message:`Select a non-repository folder before cloning.`});return}let n=t.id;z(le,!0),z(ue,null),z(de,null);try{await k.cloneGitRepository(n,e);let t=await ha(),r=go(K(a),t.workspaces,n,e,K(ae));z(l,Wa(K(l)||null,K(a),t.workspaces,Ra.sessionBase)??``,!0),z(a,t.workspaces,!0),z(O,r.selectedId,!0),z(ae,r.expandedIds,!0),K(O)&&Ua(K(a),K(O))?.isGitRepository?await Ie(K(O)):z(ie,null),z(de,`Repository cloned into the selected workspace.`),ye.enqueue({kind:`success`,message:`Repository cloned.`})}catch(e){Ye(e,`GIT_CLONE_FAILED`)}finally{z(le,!1)}}async function Ve(e){let t=K(O);if(!(!t||e===K(ie)?.branch)){z(ce,!0),z(ue,null);try{await k.checkoutGitBranch(t,e),await Ie(t)}catch(e){z(ue,Ye(e,`GIT_CHECKOUT_FAILED`),!0)}finally{z(ce,!1)}}}async function He(){let e=K(O);if(e){z(pe,K(pe)??Do(),!0),z(ue,null);try{await k.pushGit(e,K(pe)),z(oe,!1),await Ie(e),z(pe,null)}catch(e){z(ue,Ye(e,`GIT_PUSH_FAILED`),!0)}}}async function Ue(e,t){K(d)&&(await k.respondInteraction(K(d),e,{decision:t}),z(he,K(he).filter(t=>t.requestId!==e),!0))}async function We(e){if(!K(d))return;let t=Di(Ei(e.payload).map(e=>({id:e.id,answer:ge[e.id]??``})));await k.respondInteraction(K(d),e.requestId,t),z(he,K(he).filter(t=>t.requestId!==e.requestId),!0)}async function Ge(e){if(!K(d))return;let t=So(e.payload);if(!t){z(r,`Codex sent an invalid permission request.`);return}await k.respondInteraction(K(d),e.requestId,t),z(he,K(he).filter(t=>t.requestId!==e.requestId),!0)}function Ke(e,t){ge[e]=t}function qe(e){z(y,e,!0),K(d)&&ve.saveDraft(K(d),e)}function F(e){_e.write(e,K(S))}function Je(e){return e instanceof Error?e.message:`Unknown relay error.`}function Ye(e,t){let n=ka(e,t);return ye.enqueue({kind:`error`,...n}),n.message}function Xe(e){E&&clearTimeout(E),D&&clearTimeout(D),T?.close();let t=++re,n=location.protocol===`https:`?`wss:`:`ws:`;T=new WebSocket(`${n}//${location.host}/api/sessions/${encodeURIComponent(e)}/events?after=${K(w)}`),T.onopen=()=>{t!==re||K(d)!==e||(z(r,ko(K(b)),!0),Me(),D=setTimeout(()=>{ne=0},3e4))},T.onmessage=t=>{let n=JSON.parse(String(t.data));if(n.type===`relay.resyncRequired`){je(e,typeof n.currentSequence==`number`?n.currentSequence:0);return}if(n.type===`relay.event`&&n.event?.type===`interaction.requested`){let e=n.event.payload;K(he).some(t=>t.requestId===e.requestId)||z(he,[...K(he),e],!0)}if(n.type===`relay.event`&&n.event?.type===`turnCompleted`&&(z(b,null),z(r,ko(K(b)),!0),z(S,xo(K(S),`assistant-${e}`),!0),F(e),je(e).catch(()=>void 0)),n.type===`relay.event`&&n.event?.type===`session.updated`){let t=n.event.payload;if(typeof t==`object`&&t&&t.id===e){let n=t,i=K(b);z(b,typeof n.activeTurnId==`string`?n.activeTurnId:null,!0),i&&!K(b)&&z(r,ko(K(b)),!0),z(f,K(f).map(t=>t.id===e?{...t,...n}:t),!0)}}if(n.type===`relay.event`&&n.event?.type===`interaction.resolved`){let{requestId:e}=n.event.payload;z(he,K(he).filter(t=>t.requestId!==e),!0)}if(n.type===`relay.event`&&n.event?.type===`activity.updated`){let e=n.event.payload;typeof e.id==`string`&&typeof e.label==`string`&&typeof e.detail==`string`&&z(C,[...K(C).filter(t=>t.id!==e.id),e],!0)}z(w,Oo(K(w),n,t=>{z(S,bo(K(S),`assistant-${e}`,t,Date.now()),!0),F(e)},()=>{je(e)}),!0),ve.saveCursor(e,K(w))},T.onclose=()=>{t!==re||K(d)!==e||(D&&clearTimeout(D),z(r,`Connection interrupted. Reconnecting…`),E=setTimeout(()=>Xe(e),Ao(ne++)))}}var Ze=Ts();Vr(`y74n0s`,e=>{xn(()=>{Yt.title=`Gestalt Mobile`})});var Qe=V(Ze),$e=e=>{La(e,{get variant(){return xe}})},et=e=>{var t=ys();$a(B(t),{get context(){return be}}),N(t),Y(e,t)},tt=e=>{var t=ws(),c=B(t);{let e=I(()=>K(n)===`chat`?zo(K(f).find(e=>e.id===K(d))?.workspacePath??``):null);Si(c,{get theme(){return K(i)},get sessionPath(){return K(e)},onthemechange:Se})}var _=H(c,2),w=e=>{var t=Ss(),n=H(B(t),2),i=e=>{var t=bs(),n=V(t);ma(n,{get messages(){return K(S)}});var i=H(n,2);Ti(i,{get activities(){return K(C)}});var a=H(i,2);Ii(a,{get interactions(){return K(he)},get answers(){return ge},onanswer:Ke,onuserinput:e=>void We(e),onpermission:e=>void Ge(e),ondecision:(e,t)=>void Ue(e,t)}),Vi(H(a,2),{get status(){return K(r)},get message(){return K(y)},get activeTurnId(){return K(b)},get starting(){return K(x)},onchange:qe,onsend:()=>void ke(),oninterrupt:()=>void Ae()}),Y(e,t)},a=e=>{Y(e,xs())};Z(n,e=>{K(d)?e(i):e(a,-1)}),N(t),Y(e,t)},T=e=>{{let t=I(()=>K(O)?Ua(K(a),K(O))??null:null);ho(e,{get workspaceTree(){return K(a)},get selectedWorkspace(){return K(t)},get expandedIds(){return K(ae)},get summary(){return K(ie)},get refreshing(){return K(se)},get checkingOut(){return K(ce)},get cloning(){return K(le)},get error(){return K(ue)},get cloneStatus(){return K(de)},get confirmingPush(){return K(oe)},onpull:()=>void Le(),oncheckout:e=>void Ve(e),onopenpushconfirmation:()=>z(oe,!0),onpush:()=>void He(),oncancelpush:()=>z(oe,!1),onselect:P,onexpandedchange:e=>z(ae,e,!0),onclone:e=>void Be(e)})}},E=e=>{var t=Er(),n=V(t),r=e=>{gs(e,{get workspaceTree(){return K(a)},get codexProfiles(){return K(o)},get skillsState(){return K(s)},onworkspacechange:e=>void Pe(e,K(s)?.codexProfile??``),oncodexprofilechange:e=>void Pe(K(s)?.workspaceId??``,e)})},i=e=>{Y(e,Cs())};Z(n,e=>{K(s)?e(r):e(i,-1)}),Y(e,t)},D=e=>{Zo(e,{get sessions(){return K(f)},get recentSessions(){return K(m)},get workspaceTree(){return K(a)},get workspaceId(){return K(l)},get expandedIds(){return K(u)},get sandbox(){return K(h)},get approvalPolicy(){return K(g)},get startingSession(){return K(v)},onworkspacechange:e=>z(l,e,!0),onexpandedchange:e=>z(u,e,!0),onsandboxchange:e=>z(h,e,!0),onapprovalpolicychange:e=>z(g,e,!0),onopen:Ee,onclose:e=>void j(e),onopenrecent:e=>void De(e),onforget:e=>void Oe(e),oncopyresume:e=>void M(e),onstart:()=>void A()})};Z(_,e=>{K(n)===`chat`?e(w):K(n)===`git`?e(T,1):K(n)===`skills`?e(E,2):e(D,-1)}),ts(H(_,2),{get activeTab(){return K(n)},get chatEnabled(){return K(p)},onselect:Ne}),N(t),Y(e,t)};Z(Qe,e=>{xe===`error`||xe===`stacked`?e($e):be===`sessions`||be===`git`?e(et,1):e(tt,-1)});var nt=H(Qe,2),rt=e=>{Fa(e,{get queue(){return ye}})};Z(nt,e=>{xe!==`error`&&xe!==`stacked`&&e(rt)}),Y(e,Ze),ze()}var Ds=document.getElementById(`app`);if(!Ds)throw Error(`Missing application mount target`);Dr(Es,{target:Ds});
10
+ `)}:e.kind===`tool`&&typeof e.name==`string`?{id:e.id,label:`Tool · ${String(e.status??`unknown`)}`,detail:e.name}:null}var ba=`gestalt-mobile`,xa=2,Sa=[`settings`,`drafts`,`cursors`,`messages`];function Ca(e){return new Promise((t,n)=>{let r=e.open(ba,xa);r.onupgradeneeded=()=>{for(let e of Sa)r.result.objectStoreNames.contains(e)||r.result.createObjectStore(e)},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function wa(e,t,n){return Da(e.transaction(t,`readonly`).objectStore(t).get(n))}function Ta(e,t,n,r){return Da(e.transaction(t,`readwrite`).objectStore(t).put(r,n))}function Ea(e,t,n){return Da(e.transaction(t,`readwrite`).objectStore(t).delete(n))}function Da(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}var Oa=`messages`;function ka(e){return e.slice(-200)}function Aa(e=globalThis.indexedDB){if(!e)return{read:async()=>[],write:async()=>{}};let t=Ca(e);return{async read(e){try{return await wa(await t,Oa,e)??[]}catch{return[]}},async write(e,n){try{await Ta(await t,Oa,e,ka(n))}catch{}}}}var ja={RELAY_UNAVAILABLE:`The relay is unavailable. Check the connection and try again.`,SESSION_START_FAILED:`The session could not be started. Try again.`,SESSION_REFRESH_FAILED:`Sessions could not be refreshed. Try again.`,MESSAGE_SEND_FAILED:`The message was not sent. Your draft is preserved.`,GIT_SUMMARY_FAILED:`Repository status could not be loaded. Select it again to retry.`,GIT_PULL_FAILED:`The branch could not be refreshed. Resolve any Git conflicts and try again.`,GIT_CHECKOUT_FAILED:`The branch could not be selected. Refresh Git status and try again.`,GIT_PUSH_FAILED:`The push failed. Refresh Git status and resolve remote divergence first.`,GIT_CLONE_FAILED:`Clone failed.`};function Ma(e,t){let n=e instanceof Error?e.message:``,r=Object.hasOwn(ja,n)?n:t;return{code:r,message:ja[r]}}var Na={error:null,success:5e3,info:7e3};function Pa(e={}){let t=e.now??Date.now,n=e.setTimer??setTimeout,r=e.clearTimer??clearTimeout,i=new Set,a=new Map,o=[],s=0,c=()=>o.map(e=>({...e})),l=()=>i.forEach(e=>e(c())),u=e=>{let t=a.get(e);t?.handle&&r(t.handle),t&&(t.handle=null)},d=e=>{o.some(t=>t.id===e)&&(u(e),a.delete(e),o=o.filter(t=>t.id!==e),l())},f=e=>{let r=a.get(e);!r||r.pauseReasons.size>0||(r.startedAt=t(),r.handle=n(()=>d(e),r.remaining))};return{enqueue(e){if(e.kind===`error`){let t=o.find(t=>t.kind===`error`&&(e.code?t.code===e.code:t.message===e.message));if(t)return o=o.map(e=>e.id===t.id?{...e,occurrences:e.occurrences+1}:e),l(),t.id}let n=`toast-${++s}`,r={...e,id:n,occurrences:1};o=[...o,r];let i=Na[e.kind];return i!==null&&(a.set(n,{handle:null,remaining:i,startedAt:t(),pauseReasons:new Set}),f(n)),l(),n},dismiss:d,pause(e,n){let r=a.get(e);!r||r.pauseReasons.has(n)||(r.pauseReasons.add(n),r.handle&&(r.remaining=Math.max(0,r.remaining-(t()-r.startedAt)),u(e)))},resume(e,t){let n=a.get(e);!n||!n.pauseReasons.delete(t)||n.pauseReasons.size>0||f(e)},snapshot:c,subscribe(e){return i.add(e),e(c()),()=>i.delete(e)}}}var Fa=J(`<small class="svelte-1a0rutm"> </small>`),Ia=J(`<section aria-atomic="true"><span class="toast-symbol svelte-1a0rutm" aria-hidden="true"> </span> <span class="toast-copy svelte-1a0rutm"><strong class="svelte-1a0rutm"> </strong> <span> </span> <!></span> <button type="button" class="svelte-1a0rutm"><span aria-hidden="true">×</span></button></section>`),La=J(`<div class="toast-viewport svelte-1a0rutm" aria-label="Notifications"></div>`);function Ra(e,t){Re(t,!0);let n=R([]),r=I(()=>K(n).slice(-3));vi(()=>t.queue.subscribe(e=>z(n,e)));var i=La();Q(i,21,()=>K(r),e=>e.id,(e,n)=>{var r=Ia();let i;var a=B(r),o=B(a,!0);N(a);var s=H(a,2),c=B(s),l=B(c,!0);N(c);var u=H(c,2),d=B(u,!0);N(u);var f=H(u,2),p=e=>{var t=Fa(),r=B(t);N(t),U(()=>X(r,`Repeated ${K(n).occurrences??``} times.`)),Y(e,t)};Z(f,e=>{K(n).occurrences>1&&e(p)}),N(s);var m=H(s,2);N(r),U(()=>{i=Xr(r,1,`toast svelte-1a0rutm`,null,i,{error:K(n).kind===`error`}),$(r,`role`,K(n).kind===`error`?`alert`:`status`),$(r,`aria-live`,K(n).kind===`error`?`assertive`:`polite`),X(o,K(n).kind===`error`?`!`:K(n).kind===`success`?`✓`:`i`),X(l,K(n).kind===`error`?`Error`:K(n).kind===`success`?`Success`:`Info`),X(d,K(n).message),$(m,`aria-label`,`Dismiss ${K(n).kind} notification`)}),_r(`pointerenter`,r,()=>t.queue.pause(K(n).id,`hover`)),_r(`pointerleave`,r,()=>t.queue.resume(K(n).id,`hover`)),q(`focusin`,r,()=>t.queue.pause(K(n).id,`focus`)),q(`focusout`,r,()=>t.queue.resume(K(n).id,`focus`)),q(`click`,m,()=>t.queue.dismiss(K(n).id)),Y(e,r)}),N(i),Y(e,i),ze()}vr([`focusin`,`focusout`,`click`]);var za=J(`<main class="evidence-page svelte-1j55xyh"><h1 class="svelte-1j55xyh">Git repository</h1> <p>Choose a destination and clone a repository.</p> <div class="evidence-composer svelte-1j55xyh"><label for="evidence-prompt">Prompt</label> <textarea id="evidence-prompt" class="evidence-prompt svelte-1j55xyh" rows="1">Review repository status</textarea></div></main> <nav class="evidence-nav svelte-1j55xyh" aria-label="Primary evidence navigation"><button type="button" class="svelte-1j55xyh">Sessions</button> <button type="button" aria-pressed="true" class="svelte-1j55xyh">Git</button> <button type="button" class="svelte-1j55xyh">Chat</button></nav> <!>`,1);function Ba(e,t){Re(t,!0);let n=Pa();vi(()=>{t.variant===`stacked`&&n.enqueue({kind:`success`,message:`Cloned.`}),n.enqueue({kind:`error`,code:`GIT_CLONE_FAILED`,message:`Clone failed.`})});var r=za();Ra(H(V(r),4),{get queue(){return n}}),Y(e,r),ze()}var Va={sessionBase:()=>!0,gitRepositoryTarget:e=>e.isGitRepository,cloneDestination:e=>!e.isGitRepository};function Ha(e){let t=new Set,n=(e,r)=>{!e.isGitRepository&&r<=2&&t.add(e.id),e.children.forEach(e=>n(e,r+1))};return e.forEach(e=>n(e,1)),t}function Ua(e,t){let n=new Set(e);return t.isGitRepository||(n.has(t.id)?n.delete(t.id):n.add(t.id)),n}function Wa(e,t){let n=[],r=(e,i,a)=>{n.push({node:e,level:i,parentId:a}),!e.isGitRepository&&t.has(e.id)&&e.children.forEach(t=>r(t,i+1,e.id))};return e.forEach(e=>r(e,1,null)),n}function Ga(e,t){let n=(e,r)=>{if(e.id===t)return r;for(let t of e.children){let i=n(t,[...r,e.id]);if(i)return i}return null};for(let t of e){let e=n(t,[]);if(e)return e}return[]}function Ka(e,t){for(let n of e){if(n.id===t)return n;let e=Ka(n.children,t);if(e)return e}}function qa(e,t,n,r){if(e){let i=Ka(n,e);if(i&&r(i))return i.id;let a=Ga(t,e);for(let e of a.toReversed()){let t=Ka(n,e);if(t&&r(t))return t.id}}return Ja(n).find(r)?.id??null}function Ja(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}var Ya=J(`<button class="disclosure svelte-6z3q4v" type="button" tabindex="-1"><span aria-hidden="true"> </span></button>`),Xa=J(`<span class="disclosure-spacer svelte-6z3q4v" aria-hidden="true"></span>`),Za=J(`<span class="repository-badge svelte-6z3q4v">Git</span>`),Qa=J(`<div class="tree-row svelte-6z3q4v"><!> <button type="button" role="treeitem"><span class="selection-mark svelte-6z3q4v" aria-hidden="true"> </span> <span class="node-copy svelte-6z3q4v"><span class="node-name svelte-6z3q4v"> </span> <span class="node-path svelte-6z3q4v"> </span></span> <!></button></div>`),$a=J(`<div class="filesystem-tree svelte-6z3q4v" role="tree"></div>`);function eo(e,t){Re(t,!0);let n=_i(t,`isSelectable`,3,()=>!0),r=R(null),i=Gt({}),a=I(()=>Wa(t.roots,t.expandedIds)),o=I(()=>K(r)&&K(a).some(({node:e})=>e.id===K(r))?K(r):t.selectedId&&K(a).some(({node:e})=>e.id===t.selectedId)?t.selectedId:K(a)[0]?.node.id??null);function s(e){return!e.isGitRepository&&e.children.length>0}function c(e){return e===`.`?`~/`:`~/${e}`}function l(e){z(r,e,!0),i[e]?.focus()}function u(e,t){let n=Math.max(0,Math.min(K(a).length-1,t)),r=K(a)[n];r&&n!==e&&l(r.node.id)}function d(e){n()(e)&&t.onselect(e)}function f(e){s(e)&&t.onexpandedchange(Ua(t.expandedIds,e))}function p(e,n,r){let{node:i,parentId:o}=n;switch(e.key){case`ArrowUp`:e.preventDefault(),u(r,r-1);break;case`ArrowDown`:e.preventDefault(),u(r,r+1);break;case`ArrowRight`:if(!s(i))return;e.preventDefault(),t.expandedIds.has(i.id)?K(a)[r+1]?.parentId===i.id&&u(r,r+1):f(i);break;case`ArrowLeft`:if(!t.expandedIds.has(i.id)&&!o)return;e.preventDefault(),s(i)&&t.expandedIds.has(i.id)?f(i):o&&l(o);break;case`Home`:e.preventDefault(),u(r,0);break;case`End`:e.preventDefault(),u(r,K(a).length-1);break;case`Enter`:case` `:e.preventDefault(),d(i);break}}var m=$a();Q(m,23,()=>K(a),e=>e.node.id,(e,a,l)=>{let u=I(()=>K(a).node),m=I(()=>s(K(u)));var h=Qa();let g;var _=B(h),v=e=>{var n=Ya(),r=B(n),i=B(r,!0);N(r),N(n),U((e,t)=>{$(n,`aria-label`,e),X(i,t)},[()=>`${t.expandedIds.has(K(u).id)?`Collapse`:`Expand`} ${K(u).name}`,()=>t.expandedIds.has(K(u).id)?`−`:`+`]),q(`click`,n,()=>f(K(u))),Y(e,n)},y=e=>{Y(e,Xa())};Z(_,e=>{K(m)?e(v):e(y,-1)});var b=H(_,2);let x;var S=B(b),C=B(S,!0);N(S);var w=H(S,2),T=B(w),E=B(T,!0);N(T);var D=H(T,2),ee=B(D,!0);N(D),N(w);var te=H(w,2),ne=e=>{Y(e,Za())};Z(te,e=>{K(u).isGitRepository&&e(ne)}),N(b),gi(b,(e,t)=>i[t.id]=e,e=>i?.[e.id],()=>[K(u)]),N(h),U((e,n,r,i,s)=>{g=Qr(h,``,g,e),x=Xr(b,1,`tree-item svelte-6z3q4v`,null,x,{selected:t.selectedId===K(u).id,repository:K(u).isGitRepository}),$(b,`aria-level`,K(a).level),$(b,`aria-expanded`,n),$(b,`aria-selected`,t.selectedId===K(u).id),$(b,`aria-disabled`,r),$(b,`tabindex`,K(o)===K(u).id?0:-1),$(b,`title`,i),X(C,t.selectedId===K(u).id?`✓`:``),X(E,K(u).name),X(ee,s)},[()=>({"--tree-level":Math.min(K(a).level-1,6)}),()=>K(m)?t.expandedIds.has(K(u).id):void 0,()=>!n()(K(u)),()=>c(K(u).relativePath),()=>c(K(u).relativePath)]),_r(`focus`,b,()=>z(r,K(u).id,!0)),q(`keydown`,b,e=>p(e,K(a),K(l))),q(`click`,b,()=>d(K(u))),Y(e,h)}),N(m),U(()=>$(m,`aria-label`,t.label)),Y(e,m),ze()}vr([`click`,`keydown`]);var to=J(`<section class="evidence-shell svelte-1d6w4ti" aria-labelledby="evidence-title"><p class="eyebrow svelte-1d6w4ti"> </p> <h1 id="evidence-title" class="svelte-1d6w4ti"> </h1> <p class="instructions svelte-1d6w4ti"> </p> <div class="tree-panel svelte-1d6w4ti"><!></div></section>`);function no(e,t){Re(t,!0);let n=(e,t)=>({id:e,name:t,relativePath:e,isGitRepository:!0,children:[]}),r=[{id:`.`,name:`development-workspace-with-a-long-name`,relativePath:`.`,isGitRepository:!1,children:[{id:`dyne`,name:`dyne`,relativePath:`dyne`,isGitRepository:!1,children:[{id:`dyne/mobile-applications`,name:`mobile-applications-and-experiments`,relativePath:`dyne/mobile-applications`,isGitRepository:!1,children:[n(`dyne/mobile-applications/gestalt-mobile`,`gestalt-mobile-with-an-extraordinarily-long-repository-name`)]},n(`dyne/zenroom`,`zenroom`),n(`dyne/zenflows`,`zenflows`),n(`dyne/did`,`did-toolkit`),n(`dyne/api`,`api-gateway`),n(`dyne/docs`,`documentation-portal`)]},{id:`personal`,name:`personal-projects`,relativePath:`personal`,isGitRepository:!1,children:[]}]}],i=R(Gt(new Set([`.`,`dyne`,`dyne/mobile-applications`]))),a=R(null),o=I(()=>t.context===`sessions`?`dyne/mobile-applications`:`dyne/mobile-applications/gestalt-mobile`),s=I(()=>K(a)??K(o));var c=to(),l=B(c),u=B(l,!0);N(l);var d=H(l,2),f=B(d,!0);N(d);var p=H(d,2),m=B(p,!0);N(p);var h=H(p,2),g=B(h);{let e=I(()=>t.context===`sessions`?`Session base`:`Git repository`),n=I(()=>t.context===`sessions`?Va.sessionBase:Va.gitRepositoryTarget);eo(g,{get roots(){return r},get expandedIds(){return K(i)},get selectedId(){return K(s)},get label(){return K(e)},get isSelectable(){return K(n)},onexpandedchange:e=>z(i,e,!0),onselect:e=>z(a,e.id,!0)})}N(h),N(c),U(()=>{X(u,t.context===`sessions`?`Sessions`:`Git`),X(f,t.context===`sessions`?`Session base`:`Git repository`),X(m,t.context===`sessions`?`Select the folder Codex should use as its working directory.`:`Select a repository for Git actions.`)}),Y(e,c),ze()}function ro(e,t=Date.now()){if(!e)return`Not fetched yet`;let n=Math.max(0,t-new Date(e).getTime()),r=Math.floor(n/6e4);if(r<1)return`Fetched just now`;if(r<60)return`Fetched ${r}m ago`;let i=Math.floor(r/60);return i<24?`Fetched ${i}h ago`:`Fetched ${Math.floor(i/24)}d ago`}function io(e,t=Date.now()){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown time`;let r=Math.round((n-t)/1e3),i=[[`year`,31536e3],[`month`,2592e3],[`week`,604800],[`day`,86400],[`hour`,3600],[`minute`,60],[`second`,1]],[a,o]=i.find(([,e])=>Math.abs(r)>=e)??i.at(-1);return new Intl.RelativeTimeFormat(void 0,{numeric:`auto`}).format(Math.round(r/o),a)}var ao=J(`<p class="clone-status svelte-pudr3t" role="status"> </p>`),oo=J(`<option> </option>`),so=J(`<section aria-label="Confirm push"><p> </p> <button type="button">Confirm push</button> <button type="button">Cancel</button></section>`),co=J(`<li class="commit-entry svelte-pudr3t"><div class="commit-subject svelte-pudr3t"><code class="svelte-pudr3t"> </code><span> </span></div> <div class="commit-meta svelte-pudr3t"><span> </span><time class="svelte-pudr3t"> </time></div></li>`),lo=J(`<section class="commit-history svelte-pudr3t" aria-labelledby="recent-commits-title"><h3 id="recent-commits-title" class="svelte-pudr3t">Recent commits</h3> <ol class="commit-list svelte-pudr3t" aria-label="Recent commits"></ol></section>`),uo=J(`<div class="git-overview svelte-pudr3t"><div class="git-status svelte-pudr3t"><label for="git-branch">Branch</label> <select id="git-branch"></select> <p class="svelte-pudr3t"> </p> <p class="svelte-pudr3t"> </p> <p class="svelte-pudr3t"><time> </time></p> <p class="svelte-pudr3t"> </p></div> <div class="git-actions svelte-pudr3t"><button type="button" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" class="svelte-pudr3t"><span aria-hidden="true">↓</span> </button></div></div> <!> <!>`,1),fo=J(`<p>This workspace is not a Git repository.</p>`),po=J(`<p role="status">Loading repository status…</p>`),mo=J(`<p><strong> </strong> is available as a Clone destination. Select a Git
11
+ repository to inspect branches and enable repository actions.</p> <div class="git-actions svelte-pudr3t" aria-label="Repository actions unavailable"><button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↓</span> Pull</button></div>`,1),ho=J(`<p>Select a folder above to choose a Clone destination or inspect a Git repository.</p> <div class="git-actions svelte-pudr3t" aria-label="Repository actions unavailable"><button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↑</span> Push</button> <button type="button" disabled="" class="svelte-pudr3t"><span aria-hidden="true">↓</span> Pull</button></div>`,1),go=J(`<p role="alert"> </p>`),_o=J(`<section class="git-view svelte-pudr3t" aria-labelledby="git-title"><h2 id="git-title" class="visually-hidden">Git</h2> <section class="git-tree svelte-pudr3t" aria-labelledby="git-tree-title"><div class="section-heading svelte-pudr3t"><h3 id="git-tree-title" class="svelte-pudr3t">Repository and clone destination</h3> <p class="svelte-pudr3t">Select any folder. Git repositories enable repository actions; other folders are clone destinations.</p></div> <!></section> <form class="clone-form svelte-pudr3t"><div class="clone-controls svelte-pudr3t"><div class="clone-field clone-destination svelte-pudr3t"><span class="field-label svelte-pudr3t">Destination</span> <output aria-live="polite" class="svelte-pudr3t"> </output></div> <div class="clone-field svelte-pudr3t"><label for="git-clone-address">Git address</label> <input id="git-clone-address" name="address" required="" autocomplete="url" inputmode="url" enterkeyhint="done" placeholder="https://example.com/owner/repository.git" aria-describedby="clone-help"/></div> <button type="submit" class="svelte-pudr3t"> </button></div> <p id="clone-help" class="svelte-pudr3t">The repository is cloned inside the selected workspace.</p> <!></form> <section class="repository-details svelte-pudr3t" aria-labelledby="repository-details-title"><h3 id="repository-details-title" class="svelte-pudr3t">Repository details</h3> <!> <!></section></section>`);function vo(e,t){Re(t,!0);let n=R(``),r=I(()=>t.selectedWorkspace&&!t.selectedWorkspace.isGitRepository?t.selectedWorkspace:null);function i(e){e.preventDefault(),!(!K(n).trim()||t.cloning)&&t.onclone(K(n).trim())}var a=_o(),o=H(B(a),2),s=H(B(o),2);{let e=I(()=>t.selectedWorkspace?.id??null);eo(s,{get roots(){return t.workspaceTree},get expandedIds(){return t.expandedIds},get selectedId(){return K(e)},label:`Git repository and clone destination`,get onexpandedchange(){return t.onexpandedchange},get onselect(){return t.onselect}})}N(o);var c=H(o,2),l=B(c),u=B(l),d=H(B(u),2),f=B(d,!0);N(d),N(u);var p=H(u,2),m=H(B(p),2);oi(m),N(p);var h=H(p,2),g=B(h,!0);N(h),N(l);var _=H(l,4),v=e=>{var n=ao(),r=B(n,!0);N(n),U(()=>X(r,t.cloneStatus)),Y(e,n)};Z(_,e=>{t.cloneStatus&&e(v)}),N(c);var y=H(c,2),b=H(B(y),2),x=e=>{var n=Er(),r=V(n),i=e=>{var n=Er(),r=V(n),i=e=>{var n=uo(),r=V(n),i=B(r),a=H(B(i),2);Q(a,20,()=>t.summary.branches??[],e=>e,(e,t)=>{var n=oo(),r=B(n,!0);N(n);var i={};U(()=>{X(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),Y(e,n)}),N(a);var o;ei(a);var s=H(a,2),c=B(s);N(s);var l=H(s,2),u=B(l);N(l);var d=H(l,2),f=B(d),p=B(f,!0);N(f),N(d);var m=H(d,2),h=B(m);N(m),N(i);var g=H(i,2),_=B(g),v=H(_,2),y=H(B(v));N(v),N(g),N(r);var b=H(r,2),x=e=>{var n=so(),r=B(n),i=B(r);N(r);var a=H(r,2),o=H(a,2);N(n),U(()=>X(i,`Push HEAD to ${t.summary.upstream??``}?`)),q(`click`,a,function(...e){t.onpush?.apply(this,e)}),q(`click`,o,function(...e){t.oncancelpush?.apply(this,e)}),Y(e,n)};Z(b,e=>{t.confirmingPush&&e(x)});var S=H(b,2),C=e=>{var n=lo(),r=H(B(n),2);Q(r,21,()=>t.summary.commits,e=>e.hash,(e,t)=>{var n=co(),r=B(n),i=B(r),a=B(i,!0);N(i);var o=H(i),s=B(o,!0);N(o),N(r);var c=H(r,2),l=B(c),u=B(l,!0);N(l);var d=H(l),f=B(d,!0);N(d),N(c),N(n),U(e=>{$(i,`title`,K(t).hash),X(a,K(t).shortHash),X(s,K(t).subject),X(u,K(t).author),$(d,`datetime`,K(t).authoredAt),$(d,`title`,K(t).authoredAt),X(f,e)},[()=>io(K(t).authoredAt)]),Y(e,n)}),N(r),N(n),Y(e,n)};Z(S,e=>{t.summary.commits.length&&e(C)}),U(e=>{a.disabled=t.refreshing||t.checkingOut||!t.summary.branches?.length,o!==(o=t.summary.branch??``)&&(a.value=(a.__value=t.summary.branch??``)??``,$r(a,t.summary.branch??``)),X(c,`Upstream: ${t.summary.upstream??`none`??``}`),X(u,`Ahead ${t.summary.ahead??``}; behind ${t.summary.behind??``}.`),$(f,`datetime`,t.summary.fetchedAt??void 0),X(p,e),X(h,`Changes: ${t.summary.dirty.staged??``} staged, ${t.summary.dirty.unstaged??``} unstaged, ${t.summary.dirty.untracked??``} untracked.`),_.disabled=t.refreshing||t.checkingOut||!t.summary.upstream||t.summary.ahead<1||t.summary.behind>0,v.disabled=t.refreshing||t.checkingOut,X(y,` ${t.refreshing?`Pulling…`:`Pull`}`)},[()=>ro(t.summary.fetchedAt)]),q(`change`,a,e=>t.oncheckout(e.currentTarget.value)),q(`click`,_,function(...e){t.onopenpushconfirmation?.apply(this,e)}),q(`click`,v,function(...e){t.onpull?.apply(this,e)}),Y(e,n)},a=e=>{Y(e,fo())};Z(r,e=>{t.summary.available?e(i):e(a,-1)}),Y(e,n)},a=e=>{Y(e,po())};Z(r,e=>{t.summary?e(i):t.error||e(a,1)}),Y(e,n)},S=e=>{var n=mo(),r=V(n),i=B(r),a=B(i,!0);N(i),je(),N(r),je(2),U(()=>X(a,t.selectedWorkspace.name)),Y(e,n)},C=e=>{var t=ho();je(2),Y(e,t)};Z(b,e=>{t.selectedWorkspace?.isGitRepository?e(x):t.selectedWorkspace?e(S,1):e(C,-1)});var w=H(b,2),T=e=>{var n=go(),r=B(n,!0);N(n),U(()=>X(r,t.error)),Y(e,n)};Z(w,e=>{t.error&&e(T)}),N(y),N(a),U(()=>{X(f,K(r)?`~/${K(r).relativePath}`:`Select a non-repository folder`),h.disabled=t.cloning,X(g,t.cloning?`Cloning…`:`Clone`)}),_r(`submit`,c,i),fi(m,()=>K(n),e=>z(n,e)),Y(e,a),ze()}vr([`change`,`click`]);function yo(e,t,n,r,i){let a=new Set(bo(e).filter(e=>e.isGitRepository).map(e=>e.id)),o=Ka(t,n),s=o?bo(o.children).filter(e=>e.isGitRepository&&!a.has(e.id)):[],c=xo(r),l=s.find(e=>e.name===c)??(s.length===1?s[0]:void 0),u=l?.id??o?.id??null,d=new Set(i);return u&&Ga(t,u).forEach(e=>d.add(e)),!l&&o&&d.add(o.id),{selectedId:u,expandedIds:d}}function bo(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}function xo(e){return(e.trim().replace(/[?#].*$/,``).replace(/\/+$/,``).split(/[/:]/).at(-1)??``).replace(/\.git$/i,``)}function So(e,t,n,r){return[...e,{id:t,role:`user`,text:n,...r?{occurredAt:r}:{},complete:!0}]}function Co(e,t,n,r){return e.find(e=>e.id===t)?e.map(e=>e.id===t?{...e,text:e.text+n}:e):[...e,{id:t,role:`assistant`,phase:`commentary`,text:n,...r?{occurredAt:r}:{},complete:!1}]}function wo(e,t){return e.map(e=>e.id===t?{...e,complete:!0}:e)}function To(e){if(typeof e!=`object`||!e)return null;let t=e.permissions;if(typeof t!=`object`||!t)return null;let n=t;return{permissions:{...n.network===null||n.network===void 0?{}:{network:n.network},...n.fileSystem===null||n.fileSystem===void 0?{}:{fileSystem:n.fileSystem}},scope:`turn`}}function Eo(e=fetch){async function t(e){let t=await e.json().catch(()=>null),n=typeof t?.detail==`string`?t.detail:typeof t?.title==`string`?t.title:`Relay request failed (${e.status}).`;return Error(n)}async function n(n,r,i={}){let a=await e(n,{method:`POST`,headers:{"content-type":`application/json`,...i},body:JSON.stringify(r)});if(!a.ok)throw await t(a);return a.json()}async function r(n,r){let i=await e(n,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!i.ok)throw await t(i);return i.json()}async function i(n){let r=await e(n);if(!r.ok)throw await t(r);return r.json()}return{listSessions:()=>i(`/api/sessions`),listRecentSessions:()=>i(`/api/sessions/recent-threads`),openRecentSession:(e,t)=>n(`/api/sessions/recent-threads/open`,{threadId:e,cwd:t}),startSession:(e,t={},r)=>n(`/api/sessions`,{workspaceId:e,profile:`default`,...t},r?{"idempotency-key":r}:{}),startTurn:(e,t)=>n(`/api/sessions/${encodeURIComponent(e)}/turns`,{text:t}),interruptTurn:(e,t)=>n(`/api/sessions/${encodeURIComponent(e)}/turns/${encodeURIComponent(t)}/interrupt`,{}),restoreSession:e=>n(`/api/sessions/${encodeURIComponent(e)}/restore`,{}),releaseSession:e=>n(`/api/sessions/${encodeURIComponent(e)}/release`,{}),forgetSession:n=>e(`/api/sessions/${encodeURIComponent(n)}`,{method:`DELETE`}).then(async e=>{if(!e.ok)throw await t(e)}),getHistory:e=>i(`/api/sessions/${encodeURIComponent(e)}/history`),getGitSummary:e=>i(`/api/git/repositories/${encodeURIComponent(e)}`),cloneGitRepository:(e,t)=>n(`/api/git/clone`,{workspaceId:e,address:t}),refreshGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/refresh`,{},t?{"idempotency-key":t}:{}),pullGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/pull`,{},t?{"idempotency-key":t}:{}),checkoutGitBranch:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/checkout`,{branch:t}),pushGit:(e,t)=>n(`/api/git/repositories/${encodeURIComponent(e)}/push`,{},t?{"idempotency-key":t}:{}),listAvailableSkills:(e,t)=>i(`/api/skills?${new URLSearchParams({workspaceId:e,profile:t}).toString()}`),listSkillProfiles:()=>i(`/api/skill-profiles`),replaceSkillProfile:(e,t)=>r(`/api/skill-profiles/${encodeURIComponent(e)}`,t),respondInteraction:(e,t,r)=>n(`/api/sessions/${encodeURIComponent(e)}/interactions/${encodeURIComponent(t)}`,r)}}async function Do(e,t=globalThis.navigator?.clipboard,n=ko){if(!t)return Oo(e,n);try{return await t.writeText(e),!0}catch{return Oo(e,n)}}function Oo(e,t){try{return t(e)}catch{return!1}}function ko(e){if(typeof document>`u`||!document.body)return!1;let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.cssText=`position:fixed;opacity:0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}function Ao(e=globalThis.crypto,t=Date.now,n=Math.random){return typeof e?.randomUUID==`function`?e.randomUUID():`k-${t().toString(36)}-${Math.floor(n()*4294967296).toString(36)}`}function jo(e,t,n,r=()=>{}){if(t.type!==`relay.event`||!t.event||t.event.sequence<=e)return e;if(t.event.sequence>e+1)return r(t.event.sequence),e;if(t.event.type===`agentMessageDelta`){let e=t.event.payload.text;e&&n(e)}return t.event.sequence}function Mo(e){return e?`Codex is working…`:`Ready.`}function No(e,t=Math.random){let n=[500,1e3,2e3,5e3,1e4];return Math.round((n[Math.min(e,n.length-1)]??1e4)*(.8+t()*.4))}var Po=`settings`,Fo=`drafts`,Io=`cursors`,Lo=`selected-session`;function Ro(e=globalThis.indexedDB){if(!e)return zo;let t=Ca(e);return{async readSelectedSession(){try{return await wa(await t,Po,Lo)??null}catch{return null}},async saveSelectedSession(e){try{let n=await t;e?await Ta(n,Po,Lo,e):await Ea(n,Po,Lo)}catch{}},async readDraft(e){try{return await wa(await t,Fo,e)??``}catch{return``}},async saveDraft(e,n){try{await Ta(await t,Fo,e,n)}catch{}},async readCursor(e){try{let n=await wa(await t,Io,e);return typeof n==`number`&&Number.isSafeInteger(n)&&n>=0?n:0}catch{return 0}},async saveCursor(e,n){try{await Ta(await t,Io,e,n)}catch{}}}}var zo={readSelectedSession:async()=>null,saveSelectedSession:async()=>{},readDraft:async()=>``,saveDraft:async()=>{},readCursor:async()=>0,saveCursor:async()=>{}};function Bo(e,t=Date.now()){if(e===null)return`Unknown activity time`;let n=Math.max(0,t-e),r=Math.floor(n/(3600*1e3));if(r<1)return`Less than an hour ago`;if(r<24)return`${r} hour${r===1?``:`s`} ago`;let i=Math.floor(r/24);return`${i} day${i===1?``:`s`} ago`}function Vo(e){let t=e.updatedAt?Date.parse(e.updatedAt):NaN;return{threadId:e.threadId??null,workspacePath:e.workspacePath??`Workspace unavailable`,updatedAt:Number.isFinite(t)?t:null}}function Ho(e){let t=/^\/home\/[^/]+/.exec(e)?.[0];if(!t)return e;let n=e.slice(t.length);return n?`~${n}`:`~/`}var Uo=J(`<time> </time>`),Wo=J(`<div> </div>`),Go=J(`<li class="managed-session open-session svelte-hxb22h"><div class="session-actions svelte-hxb22h"><button type="button">Close</button></div> <div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div></li>`),Ko=J(`<section aria-labelledby="open-sessions-title"><h3 id="open-sessions-title">Open sessions</h3> <ul class="session-list svelte-hxb22h" aria-label="Open sessions"></ul></section>`),qo=J(`<li class="managed-session svelte-hxb22h"><div class="session-actions svelte-hxb22h"><button type="button">Open</button> <button type="button">Forget</button></div> <div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div></li>`),Jo=J(`<ul class="session-list svelte-hxb22h" aria-label="Saved sessions"></ul>`),Yo=J(`<p>No saved sessions yet.</p>`),Xo=J(`<li class="recent-session svelte-hxb22h"><div class="session-details svelte-hxb22h"><!> <div class="workspace-path svelte-hxb22h"> </div></div> <div class="session-actions svelte-hxb22h"><button type="button">Open</button> <button type="button">Copy</button></div></li>`),Zo=J(`<ul class="session-list recent-session-list svelte-hxb22h" aria-label="Recent sessions"></ul>`),Qo=J(`<p>No other recent Codex sessions found.</p>`),$o=J(`<section aria-labelledby="sessions-title"><h2 id="sessions-title" class="visually-hidden">Sessions</h2> <!> <!> <form><section class="session-base svelte-hxb22h" aria-labelledby="session-base-title"><div class="session-base-heading svelte-hxb22h"><h3 id="session-base-title" class="svelte-hxb22h">Session base</h3> <p class="svelte-hxb22h">Select the folder or repository Codex should use as its working directory.</p></div> <div class="tree-panel svelte-hxb22h"><!></div></section> <div class="form-row session-settings-row svelte-hxb22h"><div class="form-field svelte-hxb22h"><label for="sandbox">Sandbox</label> <select id="sandbox"><option>Codex default</option><option>read-only</option><option>workspace-write</option><option>danger-full-access</option></select></div> <div class="form-field svelte-hxb22h"><label for="approval-policy">Approval policy</label> <select id="approval-policy"><option>untrusted</option><option>on-request</option><option>never</option></select></div> <button class="new-session-button svelte-hxb22h" type="submit"> </button></div></form> <section aria-labelledby="recent-sessions-title"><h3 id="recent-sessions-title">Recent sessions</h3> <!></section></section>`);function es(e,t){Re(t,!0);let n=I(()=>t.sessions.filter(e=>e.state===`ready`||e.state===`turnActive`)),r=I(()=>t.sessions.filter(e=>e.state!==`ready`&&e.state!==`turnActive`)),i=I(()=>t.recentSessions.filter(e=>!K(n).some(t=>t.threadId===e.id))),a=I(()=>Ka(t.workspaceTree,t.workspaceId));var o=$o(),s=H(B(o),2),c=e=>{var r=Ko(),i=H(B(r),2);Q(i,21,()=>K(n),e=>e.id,(e,n)=>{let r=I(()=>Vo(K(n)));var i=Go(),a=B(i),o=B(a);N(a);var s=H(a,2),c=B(s),l=e=>{var t=Uo(),n=B(t,!0);N(t),U((e,r)=>{$(t,`datetime`,e),X(n,r)},[()=>new Date(K(r).updatedAt).toISOString(),()=>Bo(K(r).updatedAt)]),Y(e,t)},u=e=>{var t=Wo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Bo(null)]),Y(e,t)};Z(c,e=>{K(r).updatedAt===null?e(u,-1):e(l)});var d=H(c,2),f=B(d,!0);N(d),N(s),N(i),U(e=>X(f,e),[()=>Ho(K(r).workspacePath)]),q(`click`,o,()=>t.onclose(K(n).id)),Y(e,i)}),N(i),N(r),Y(e,r)};Z(s,e=>{K(n).length&&e(c)});var l=H(s,2),u=e=>{var n=Jo();Q(n,21,()=>K(r),e=>e.id,(e,n)=>{let r=I(()=>Vo(K(n)));var i=qo(),a=B(i),o=B(a),s=H(o,2);N(a);var c=H(a,2),l=B(c),u=e=>{var t=Uo(),n=B(t,!0);N(t),U((e,r)=>{$(t,`datetime`,e),X(n,r)},[()=>new Date(K(r).updatedAt).toISOString(),()=>Bo(K(r).updatedAt)]),Y(e,t)},d=e=>{var t=Wo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Bo(null)]),Y(e,t)};Z(l,e=>{K(r).updatedAt===null?e(d,-1):e(u)});var f=H(l,2),p=B(f,!0);N(f),N(c),N(i),U(e=>X(p,e),[()=>Ho(K(r).workspacePath)]),q(`click`,o,()=>t.onopen(K(n).id)),q(`click`,s,()=>t.onforget(K(n).id)),Y(e,i)}),N(n),Y(e,n)},d=e=>{Y(e,Yo())};Z(l,e=>{K(r).length?e(u):K(n).length||e(d,1)});var f=H(l,2),p=B(f),m=H(B(p),2),h=B(m);{let e=I(()=>K(a)?.id??null);eo(h,{get roots(){return t.workspaceTree},get expandedIds(){return t.expandedIds},get selectedId(){return K(e)},get isSelectable(){return Va.sessionBase},label:`Session base`,get onexpandedchange(){return t.onexpandedchange},onselect:e=>t.onworkspacechange(e.id)})}N(m),N(p);var g=H(p,2),_=B(g),v=H(B(_),2),y=B(v);y.value=y.__value=``;var b=H(y);b.value=b.__value=`read-only`;var x=H(b);x.value=x.__value=`workspace-write`;var S=H(x);S.value=S.__value=`danger-full-access`,N(v);var C;ei(v),N(_);var w=H(_,2),T=H(B(w),2),E=B(T);E.value=E.__value=`untrusted`;var D=H(E);D.value=D.__value=`on-request`;var ee=H(D);ee.value=ee.__value=`never`,N(T);var te;ei(T),N(w);var ne=H(w,2),re=B(ne,!0);N(ne),N(g),N(f);var ie=H(f,2),O=H(B(ie),2),ae=e=>{var n=Zo();Q(n,21,()=>K(i),e=>e.id,(e,n)=>{var r=Xo(),i=B(r),a=B(i),o=e=>{var t=Uo(),r=B(t,!0);N(t),U((e,n)=>{$(t,`datetime`,e),X(r,n)},[()=>new Date(K(n).recencyAt*1e3).toISOString(),()=>Bo(K(n).recencyAt*1e3)]),Y(e,t)},s=e=>{var t=Wo(),n=B(t,!0);N(t),U(e=>X(n,e),[()=>Bo(null)]),Y(e,t)};Z(a,e=>{K(n).recencyAt===null?e(s,-1):e(o)});var c=H(a,2),l=B(c,!0);N(c),N(i);var u=H(i,2),d=B(u),f=H(d,2);N(u),N(r),U(e=>X(l,e),[()=>Ho(K(n).cwd)]),q(`click`,d,()=>t.onopenrecent(K(n))),q(`click`,f,()=>t.oncopyresume(K(n).resumeCommand)),Y(e,r)}),N(n),Y(e,n)},oe=e=>{Y(e,Qo())};Z(O,e=>{K(i).length?e(ae):e(oe,-1)}),N(ie),N(o),U(()=>{C!==(C=t.sandbox)&&(v.value=(v.__value=t.sandbox)??``,$r(v,t.sandbox)),te!==(te=t.approvalPolicy)&&(T.value=(T.__value=t.approvalPolicy)??``,$r(T,t.approvalPolicy)),ne.disabled=!K(a)||t.startingSession,X(re,t.startingSession?`Starting…`:`New session`)}),_r(`submit`,f,e=>{e.preventDefault(),t.onstart()}),q(`change`,v,e=>t.onsandboxchange(e.currentTarget.value)),q(`change`,T,e=>t.onapprovalpolicychange(e.currentTarget.value)),Y(e,o),ze()}vr([`click`,`change`]);function ts(e){let t={};return e.workspaceId||(t.workspaceId=`Choose a workspace.`),e.profile||(t.profile=`Choose a profile.`),e.profile&&e.profileState&&e.profileState!==`ok`&&(t.profile=`Sign in to this profile before starting Codex.`),t}function ns(e,t,n=!0){let r=n?[`sessions`,`git`,`skills`,`chat`]:[`sessions`,`git`,`skills`];return r[(r.indexOf(e)+t+r.length)%r.length]}var rs=J(`<nav class="bottom-navigation" aria-label="Primary"><button>Sess<wbr/>ions</button> <button>Git</button> <button>Skills</button> <button>Chat</button></nav>`);function is(e,t){Re(t,!0);let n={};function r(e){let r=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:null;if(r===null)return;e.preventDefault();let i=ns(t.activeTab,r,t.chatEnabled);t.onselect(i),n[i]?.focus()}var i=rs(),a=B(i);gi(a,e=>n.sessions=e,()=>n?.sessions);var o=H(a,2);gi(o,e=>n.git=e,()=>n?.git);var s=H(o,2);gi(s,e=>n.skills=e,()=>n?.skills);var c=H(s,2);gi(c,e=>n.chat=e,()=>n?.chat),N(i),U(()=>{$(a,`aria-pressed`,t.activeTab===`sessions`),$(o,`aria-pressed`,t.activeTab===`git`),$(s,`aria-pressed`,t.activeTab===`skills`),$(c,`aria-pressed`,t.activeTab===`chat`),c.disabled=!t.chatEnabled}),q(`keydown`,a,r),q(`click`,a,()=>t.onselect(`sessions`)),q(`keydown`,o,r),q(`click`,o,()=>t.onselect(`git`)),q(`keydown`,s,r),q(`click`,s,()=>t.onselect(`skills`)),q(`keydown`,c,r),q(`click`,c,()=>t.onselect(`chat`)),Y(e,i),ze()}vr([`keydown`,`click`]);var as=J(`<option> </option>`),os=J(`<p id="skills-status" aria-live="polite">Loading skills…</p>`),ss=J(`<p id="skills-status">No skills were discovered for this workspace and Codex profile.</p>`),cs=J(`<p id="skills-status" class="notice svelte-dg6sjj" role="status"> </p>`),ls=J(`<p id="skills-status" class="error svelte-dg6sjj" role="alert"> </p>`),us=J(`<p id="skills-status" class="error svelte-dg6sjj" role="alert" tabindex="-1"> </p>`),ds=J(`<p id="skills-status" role="status">Profile saved.</p>`),fs=J(`<p> </p>`),ps=J(`<dt class="svelte-dg6sjj">Display metadata</dt><dd class="svelte-dg6sjj"> </dd>`,1),ms=J(`<li> </li>`),hs=J(`<dt class="svelte-dg6sjj">Tool dependencies</dt> <dd class="svelte-dg6sjj"><ul class="svelte-dg6sjj"></ul></dd>`,1),gs=J(`<li class="skill-card svelte-dg6sjj"><label class="skill-toggle svelte-dg6sjj"><input type="checkbox" class="svelte-dg6sjj"/> <span class="svelte-dg6sjj"> </span> <span class="state svelte-dg6sjj"> </span></label> <details class="svelte-dg6sjj"><summary class="svelte-dg6sjj">Skill details</summary> <!> <!> <dl class="svelte-dg6sjj"><dt class="svelte-dg6sjj">Path</dt><dd class="path svelte-dg6sjj"> </dd> <dt class="svelte-dg6sjj">Scope</dt><dd class="svelte-dg6sjj"> </dd> <dt class="svelte-dg6sjj">Native state</dt><dd class="svelte-dg6sjj"> </dd> <!> <!></dl></details></li>`),_s=J(`<p class="summary svelte-dg6sjj"> </p> <ul class="skill-list svelte-dg6sjj"></ul>`,1),vs=J(`<section class="skills-view svelte-dg6sjj" aria-labelledby="skills-title"><h2 id="skills-title">Skills</h2> <p class="intro svelte-dg6sjj">Choose a workspace and profile, then save a complete skills selection.</p> <form aria-describedby="skills-status" class="svelte-dg6sjj"><div class="field-grid svelte-dg6sjj"><label for="skills-workspace" class="svelte-dg6sjj">Workspace</label> <select id="skills-workspace" class="svelte-dg6sjj"><option disabled="">Select a workspace</option><!></select> <label for="skills-codex-profile" class="svelte-dg6sjj">Codex profile</label> <select id="skills-codex-profile" class="svelte-dg6sjj"><option disabled="">Select a Codex profile</option><!></select> <label for="skills-existing-profile" class="svelte-dg6sjj">Existing saved profile</label> <select id="skills-existing-profile" class="svelte-dg6sjj"><option>New profile</option><!></select> <label for="skills-save-as" class="svelte-dg6sjj">Save as</label> <input id="skills-save-as" name="save-as" autocomplete="off" class="svelte-dg6sjj"/></div> <p class="save-intent svelte-dg6sjj" aria-live="polite"> </p> <button type="submit" class="svelte-dg6sjj"> </button></form> <!> <!></section>`);function ys(e,t){Re(t,!0);let n=_i(t,`skillsState`,7),r=R(0),i=R(null),a=I(()=>(K(r),n())),o=I(()=>m(t.workspaceTree)),s=I(()=>K(a).profiles.filter(e=>!(`error`in e)));function c(){n(Object.assign(Object.create(Object.getPrototypeOf(n())),n())),z(r,K(r)+1)}function l(e){t.onworkspacechange(e.currentTarget.value)}function u(e){t.oncodexprofilechange(e.currentTarget.value)}function d(e){K(a).selectProfile(e.currentTarget.value),c()}async function f(e){e.preventDefault(),await K(a).save(),c(),K(a).status.kind===`save-failed`&&(await sr(),K(i)?.focus())}function p(e){return e&&/^#[0-9a-f]{3,8}$/i.test(e)?e:void 0}function m(e){let t=[],n=e=>{t.push(e),e.children.forEach(n)};return e.forEach(n),t}var h=vs(),g=H(B(h),4),_=B(g),v=H(B(_),2),y=B(v);y.value=y.__value=``,Q(H(y),17,()=>K(o),e=>e.id,(e,t)=>{var n=as(),r=B(n,!0);N(n);var i={};U(()=>{X(r,K(t).relativePath||K(t).name),i!==(i=K(t).id)&&(n.value=(n.__value=K(t).id)??``)}),Y(e,n)}),N(v);var b;ei(v);var x=H(v,4),S=B(x);S.value=S.__value=``,Q(H(S),17,()=>t.codexProfiles,e=>e.name,(e,t)=>{var n=as(),r=B(n);N(n);var i={};U(()=>{n.disabled=K(t).state!==`ok`,X(r,`${K(t).name??``}${K(t).state===`ok`?``:` (${K(t).status})`}`),i!==(i=K(t).name)&&(n.value=(n.__value=K(t).name)??``)}),Y(e,n)}),N(x);var C;ei(x);var w=H(x,4),T=B(w);T.value=T.__value=``,Q(H(T),17,()=>K(s),e=>e.name,(e,t)=>{var n=as(),r=B(n,!0);N(n);var i={};U(()=>{X(r,K(t).name),i!==(i=K(t).name)&&(n.value=(n.__value=K(t).name)??``)}),Y(e,n)}),N(w);var E;ei(w);var D=H(w,4);oi(D),N(_);var ee=H(_,2),te=B(ee,!0);N(ee);var ne=H(ee,2),re=B(ne,!0);N(ne),N(g);var ie=H(g,2),O=e=>{Y(e,os())},ae=e=>{Y(e,ss())},oe=e=>{var t=cs(),n=B(t);N(t),U(()=>X(n,`Discovery warning: ${K(a).status.message??``}`)),Y(e,t)},se=e=>{var t=ls(),n=B(t,!0);N(t),U(()=>X(n,K(a).status.message)),Y(e,t)},ce=e=>{var t=us(),n=B(t,!0);N(t),gi(t,e=>z(i,e),()=>K(i)),U(()=>X(n,K(a).status.message)),Y(e,t)},le=e=>{Y(e,ds())};Z(ie,e=>{K(a).status.kind===`loading`?e(O):K(a).status.kind===`empty`?e(ae,1):K(a).status.kind===`warning`?e(oe,2):K(a).status.kind===`invalid-profile`||K(a).status.kind===`error`?e(se,3):K(a).status.kind===`save-failed`?e(ce,4):K(a).status.kind===`saved`&&e(le,5)});var ue=H(ie,2),de=e=>{var t=_s(),n=V(t),r=B(n);N(n);var i=H(n,2);Q(i,21,()=>K(a).skills,e=>e.path,(e,t)=>{var n=gs();let r;var i=B(n),o=B(i);oi(o);var s=H(o,2),l=B(s,!0);N(s);var u=H(s,2),d=B(u,!0);N(u),N(i);var f=H(i,2),m=H(B(f),2),h=e=>{var n=fs(),r=B(n,!0);N(n),U(()=>X(r,K(t).description)),Y(e,n)};Z(m,e=>{K(t).description&&e(h)});var g=H(m,2),_=e=>{var n=fs(),r=B(n,!0);N(n),U(()=>X(r,K(t).shortDescription)),Y(e,n)};Z(g,e=>{K(t).shortDescription&&e(_)});var v=H(g,2),y=H(B(v)),b=B(y,!0);N(y);var x=H(y,3),S=B(x,!0);N(x);var C=H(x,3),w=B(C,!0);N(C);var T=H(C,2),E=e=>{var n=ps(),r=H(V(n)),i=B(r,!0);N(r),U(()=>X(i,K(t).interfaceShortDescription)),Y(e,n)};Z(T,e=>{K(t).interfaceShortDescription&&e(E)});var D=H(T,2),ee=e=>{var n=hs(),r=H(V(n),2),i=B(r);Q(i,21,()=>K(t).dependencies.tools,e=>`${e.type}:${e.value}`,(e,t)=>{var n=ms(),r=B(n);N(n),U(()=>X(r,`${K(t).type??``}: ${K(t).value??``}${K(t).description?` — ${K(t).description}`:``}`)),Y(e,n)}),N(i),N(r),Y(e,n)};Z(D,e=>{K(t).dependencies?.tools?.length&&e(ee)}),N(v),N(f),N(n),U(e=>{r=Qr(n,``,r,e),$(i,`for`,`skill-${K(t).path}`),$(o,`id`,`skill-${K(t).path}`),ci(o,K(t).enabled),X(l,K(t).displayName??K(t).name),X(d,K(t).enabled?`Enabled`:`Disabled`),X(b,K(t).path),X(S,K(t).scope??`Not provided`),X(w,K(t).nativeEnabled?`Enabled`:`Disabled`)},[()=>({"--brand-color":p(K(t).brandColor)})]),q(`change`,o,e=>{K(a).toggle(K(t).path,e.currentTarget.checked),c()}),Y(e,n)}),N(i),U(()=>X(r,`${K(a).enabledCount??``} of ${K(a).skills.length??``} skills enabled.`)),Y(e,t)};Z(ue,e=>{K(a).skills.length>0&&e(de)}),N(h),U(()=>{b!==(b=K(a).workspaceId)&&(v.value=(v.__value=K(a).workspaceId)??``,$r(v,K(a).workspaceId)),C!==(C=K(a).codexProfile)&&(x.value=(x.__value=K(a).codexProfile)??``,$r(x,K(a).codexProfile)),E!==(E=K(a).selectedProfileName)&&(w.value=(w.__value=K(a).selectedProfileName)??``,$r(w,K(a).selectedProfileName)),si(D,K(a).saveAsName),X(te,K(a).saveIntent===`replace`?`Replacing the selected saved profile.`:`Creating a new saved profile.`),ne.disabled=K(a).status.kind===`saving`,X(re,K(a).status.kind===`saving`?`Saving profile…`:`Save profile`)}),_r(`submit`,g,f),q(`change`,v,l),q(`change`,x,u),q(`change`,w,d),q(`input`,D,e=>{K(a).saveAsName=e.currentTarget.value,c()}),Y(e,h),ze()}vr([`change`,`input`]);var bs=class{client;workspaceId=``;codexProfile=``;selectedProfileName=``;saveAsName=``;source=`native`;skills=[];profiles=[];status={kind:`idle`};baseline=new Map;saving=!1;constructor(e){this.client=e}get enabledCount(){return this.skills.filter(e=>e.enabled).length}get dirty(){return this.skills.some(e=>this.baseline.get(e.path)!==e.enabled)}get saveIntent(){return this.profiles.some(e=>!(`error`in e)&&e.name===this.saveAsName.trim())?`replace`:`create`}async load(e,t){this.workspaceId=e,this.codexProfile=t,this.status={kind:`loading`};try{let[n,r]=await Promise.all([this.client.listAvailableSkills(e,t),this.client.listSkillProfiles()]);this.applyAvailable(n),this.profiles=r.profiles;let i=r.profiles.find(e=>`error`in e);i&&`error`in i?this.status={kind:`invalid-profile`,message:i.error.message}:n.errors.length?this.status={kind:`warning`,message:n.errors.map(e=>e.message).join(` `)}:this.status=this.skills.length?{kind:`ready`}:{kind:`empty`}}catch(e){this.status={kind:`error`,message:xs(e)}}}selectProfile(e){let t=this.profiles.find(t=>!(`error`in t)&&t.name===e);if(!t||`error`in t){this.status={kind:`invalid-profile`,message:`Select a valid saved profile.`};return}this.selectedProfileName=t.name,this.saveAsName=t.name;let n=new Map(t.skills.map(e=>[e.path,e.enabled]));this.skills=this.skills.map(e=>({...e,enabled:n.get(e.path)??!1})),this.captureBaseline(),this.status=this.skills.length?{kind:`ready`}:{kind:`empty`}}toggle(e,t){this.skills=this.skills.map(n=>n.path===e?{...n,enabled:t}:n)}reset(){this.skills=this.skills.map(e=>({...e,enabled:this.baseline.get(e.path)??!1}))}async save(){let e=this.saveAsName.trim();if(this.saving)return;if(!e){this.status={kind:`save-failed`,message:`Enter a profile name before saving.`};return}this.saving=!0,this.status={kind:`saving`};let t=this.savePayload(e);try{let n=await this.client.replaceSkillProfile(e,t);this.profiles=[...this.profiles.filter(e=>`error`in e||e.name!==n.name),n].sort((e,t)=>e.name.localeCompare(t.name)),this.selectedProfileName=n.name,this.saveAsName=n.name,this.captureBaseline(),this.status={kind:`saved`}}catch(e){this.status={kind:`save-failed`,message:xs(e)}}finally{this.saving=!1}}savePayload(e=this.saveAsName.trim()){return{version:1,name:e,skills:this.skills.map(({name:e,path:t,enabled:n})=>({name:e,path:t,enabled:n})).sort((e,t)=>e.path.localeCompare(t.path))}}applyAvailable(e){let t=new Map(this.skills.filter(e=>this.baseline.get(e.path)!==e.enabled).map(e=>[e.path,e.enabled]));this.source=e.source,this.skills=e.skills.map(e=>({...e,enabled:t.get(e.path)??e.effectiveEnabled})),this.baseline=new Map(e.skills.map(e=>[e.path,this.baseline.get(e.path)??e.effectiveEnabled]))}captureBaseline(){this.baseline=new Map(this.skills.map(e=>[e.path,e.enabled]))}};function xs(e){return e instanceof Error?e.message:`Unknown relay error.`}var Ss=J(`<main class="evidence-mode svelte-y74n0s"><!></main>`),Cs=J(`<!> <!> <!> <!>`,1),ws=J(`<p>Start a session from the Sessions tab to chat with Codex.</p>`),Ts=J(`<section class="chat-view svelte-y74n0s" aria-labelledby="chat-title"><h2 id="chat-title" class="visually-hidden">Chat</h2> <!></section>`),Es=J(`<p>Loading skills…</p>`),Ds=J(`<main><!> <!> <!></main>`),Os=J(`<!> <!>`,1);function ks(e,t){Re(t,!0);let n=R(`sessions`),r=R(`Loading relay…`),i=R(`system`),a=R(Gt([])),o=R([]),s=R(null),c=!1,l=R(``),u=R(Gt(new Set)),d=R(null),f=R(Gt([])),p=I(()=>K(f).some(e=>e.id===K(d)&&(e.state===`ready`||e.state===`turnActive`))),m=R(Gt([])),h=R(``),g=R(`on-request`),_=R(null),v=R(!1),y=R(``),b=R(null),x=R(!1),S=R(Gt([])),C=R(Gt([])),w=R(0),T=null,E=null,D=null,ee=null,te=!1,ne=0,re=0,ie=R(null),O=R(null),ae=R(Gt(new Set)),oe=R(!1),se=R(!1),ce=R(!1),le=R(!1),ue=R(null),de=R(null),fe=R(null),pe=R(null),me=0,he=R(Gt([])),ge=Gt({}),k=Eo(),_e=Aa(),ve=Ro(),ye=Pa(),be=new URLSearchParams(location.search).get(`tree-evidence`),xe=new URLSearchParams(location.search).get(`toast-evidence`);vi(async()=>{let e=localStorage.getItem(`gestalt-mobile.theme`);if((e===`light`||e===`dark`||e===`system`)&&Se(e),!(be===`sessions`||be===`git`||xe===`error`||xe===`stacked`)){ee=setInterval(Me,2e3),document.addEventListener(`visibilitychange`,Me),window.addEventListener(`focus`,Me);try{let e=await va();z(l,qa(K(l)||null,K(a),e.workspaces,Va.sessionBase)??``,!0),z(a,e.workspaces,!0),z(o,e.profiles),z(u,Ha(K(a)),!0),z(ae,Ha(K(a)),!0);let t=await ve.readSelectedSession();z(d,e.sessions.some(e=>e.id===t)?t:e.sessions[0]?.id??null,!0),K(d)&&z(w,await ve.readCursor(K(d)),!0),K(d)&&z(y,await ve.readDraft(K(d)),!0),K(d)&&z(S,await _e.read(K(d)),!0),z(f,e.sessions,!0),z(he,K(f).find(e=>e.id===K(d))?.pendingInteractions??[],!0),we(),z(b,K(f).find(e=>e.id===K(d))?.activeTurnId??null,!0),z(r,K(d)?Mo(K(b)):`Choose a workspace and start a session.`,!0),K(d)&&(await je(K(d)),Xe(K(d)))}catch(e){z(r,Ye(e,`RELAY_UNAVAILABLE`),!0)}}});function Se(e){z(i,e,!0),e===`system`?document.documentElement.removeAttribute(`data-theme`):document.documentElement.dataset.theme=e,localStorage.setItem(`gestalt-mobile.theme`,e)}yi(()=>{E&&clearTimeout(E),D&&clearTimeout(D),ee&&clearInterval(ee),document.removeEventListener(`visibilitychange`,Me),window.removeEventListener(`focus`,Me),T?.close()});async function A(){if(!K(l)||K(v))return;let e=ts({workspaceId:K(l),profile:`default`,profileState:`ok`});if(e.profile){z(r,e.profile,!0);return}z(_,K(_)??Ao(),!0),z(v,!0),z(r,`Starting session…`);try{let e=await k.startSession(K(l),{sandbox:K(h)||void 0,approvalPolicy:K(g)},K(_));z(_,null),z(d,e.id,!0),z(b,null),ve.saveSelectedSession(e.id),await Ce(),z(S,[],!0),F(e.id),z(C,[],!0),z(w,0),z(y,await ve.readDraft(e.id),!0),Xe(e.id),z(n,`chat`),Fe(),z(r,`Session started.`)}catch(e){z(r,Ye(e,`SESSION_START_FAILED`),!0)}finally{z(v,!1)}}async function Ce(){z(f,await k.listSessions(),!0)}async function we(){try{z(m,await k.listRecentSessions(),!0)}catch{z(m,[],!0)}}async function Te(){try{await Promise.all([Ce(),we()])}catch(e){z(r,Ye(e,`SESSION_REFRESH_FAILED`),!0)}}async function Ee(e){z(r,`Opening session…`);try{let t=K(f).find(t=>t.id===e);if(t&&t.state!==`ready`&&t.state!==`turnActive`){let t=await k.restoreSession(e);z(f,K(f).map(n=>n.id===e?t:n),!0)}z(d,e,!0),ve.saveSelectedSession(e),z(S,await _e.read(e),!0),z(C,[],!0),z(w,0),z(y,await ve.readDraft(e),!0),z(b,K(f).find(t=>t.id===e)?.activeTurnId??null,!0),z(he,K(f).find(t=>t.id===e)?.pendingInteractions??[],!0),z(n,`chat`),Fe(),await je(e),Xe(e)}catch(e){z(r,`Could not open session: ${Je(e)}`)}}async function De(e){z(r,`Opening recent session…`);try{let t=await k.openRecentSession(e.id,e.cwd);await Te(),await Ee(t.id)}catch(e){z(r,`Could not open recent session: ${Je(e)}`)}}async function j(e){z(r,`Closing session…`);try{await k.releaseSession(e),K(d)===e&&(z(d,null),z(n,`sessions`),z(b,null),z(he,[],!0),ve.saveSelectedSession(null),E&&clearTimeout(E),E=null,T?.close(),T=null),await Te(),z(r,`Session closed.`)}catch(e){z(r,`Could not close session: ${Je(e)}`)}}async function Oe(e){try{await k.forgetSession(e),K(d)===e&&(T?.close(),z(d,null),z(b,null),ve.saveSelectedSession(null)),await Te()}catch(e){z(r,`Could not forget session: ${Je(e)}`)}}async function M(e){z(r,await Do(e)?`Resume command copied.`:`Could not copy the resume command.`,!0)}async function ke(){if(!K(d)||!K(y).trim()||K(b)||K(x))return;let e=K(y).trim();z(x,!0);try{let t=await k.startTurn(K(d),e);z(b,t.activeTurnId??null,!0),z(S,So(K(S),`user-${t.activeTurnId??Date.now().toString()}`,e,Date.now()),!0),F(K(d)),z(y,``),ve.saveDraft(K(d),``),z(r,Mo(K(b)),!0)}catch(e){z(r,Ye(e,`MESSAGE_SEND_FAILED`),!0)}finally{z(x,!1)}}async function Ae(){if(!(!K(d)||!K(b)))try{await k.interruptTurn(K(d),K(b)),z(b,null),z(r,`Codex turn interrupted.`)}catch(e){z(r,`Could not interrupt Codex: ${Je(e)}`)}}async function je(e,t=0){let n=await k.getHistory(e);if(K(d)!==e)return;let i=n.items.filter(e=>(e.kind===`user`||e.kind===`agent`)&&e.text).map(e=>({id:e.id,role:e.kind===`user`?`user`:`assistant`,text:e.text,...typeof e.occurredAt==`number`?{occurredAt:e.occurredAt}:{},...e.phase===`commentary`||e.phase===`final_answer`?{phase:e.phase}:{},complete:!0})),a=K(S).filter(e=>!e.complete);z(S,[...i,...a],!0),F(e);let o=n.items.flatMap(e=>{let t=ya(e);return t?[t]:[]});z(C,[...o,...K(C).filter(e=>!o.some(t=>t.id===e.id))],!0),`activeTurnId`in n&&(z(b,n.activeTurnId??null,!0),z(f,K(f).map(t=>t.id===e?{...t,activeTurnId:K(b)}:t),!0)),z(w,Math.max(K(w),n.currentSequence??t),!0),ve.saveCursor(e,K(w)),z(r,Mo(K(b)),!0)}function Me(){K(n)!==`chat`||!K(d)||document.visibilityState!==`visible`||te||(te=!0,je(K(d)).catch(()=>void 0).finally(()=>{te=!1}))}function Ne(e){if(!(e===`chat`&&!K(p))){if(z(n,e,!0),e===`skills`&&!c){let e=K(l)||K(a)[0]?.id||``,t=K(o).find(e=>e.state===`ok`)?.name??``;e&&t&&Pe(e,t)}e===`chat`&&(Me(),Fe()),e===`git`&&K(O)&&Ie(K(O)),e===`sessions`&&Te()}}async function Pe(e,t){let n=new bs(k);await n.load(e,t),z(s,n,!0),c=!0}function Fe(){requestAnimationFrame(()=>window.scrollTo({top:document.documentElement.scrollHeight}))}async function Ie(e=K(O)){let t=e?Ka(K(a),e):void 0;if(!e||!t?.isGitRepository){me+=1,z(ie,null);return}let n=++me;try{let t=await k.getGitSummary(e);n===me&&K(O)===e&&z(ie,t,!0)}catch(t){if(n!==me||K(O)!==e)return;z(ie,null),z(ue,Ye(t,`GIT_SUMMARY_FAILED`),!0)}}function P(e){z(O,e.id,!0),z(ue,null),z(ie,null),z(oe,!1),e.isGitRepository?Ie(e.id):(me+=1,z(ie,null))}async function Le(){let e=K(O);if(!(!e||!Ka(K(a),e)?.isGitRepository)){z(fe,K(fe)??Ao(),!0),z(se,!0),z(ue,null);try{await k.pullGit(e,K(fe)),await Ie(e),z(fe,null)}catch(e){z(ue,Ye(e,`GIT_PULL_FAILED`),!0)}finally{z(se,!1)}}}async function Be(e){if(K(le))return;let t=K(O)?Ka(K(a),K(O)):void 0;if(!t||t.isGitRepository){z(de,null),ye.enqueue({kind:`error`,code:`INVALID_CLONE_DESTINATION`,message:`Select a non-repository folder before cloning.`});return}let n=t.id;z(le,!0),z(ue,null),z(de,null);try{await k.cloneGitRepository(n,e);let t=await va(),r=yo(K(a),t.workspaces,n,e,K(ae));z(l,qa(K(l)||null,K(a),t.workspaces,Va.sessionBase)??``,!0),z(a,t.workspaces,!0),z(O,r.selectedId,!0),z(ae,r.expandedIds,!0),K(O)&&Ka(K(a),K(O))?.isGitRepository?await Ie(K(O)):z(ie,null),z(de,`Repository cloned into the selected workspace.`),ye.enqueue({kind:`success`,message:`Repository cloned.`})}catch(e){Ye(e,`GIT_CLONE_FAILED`)}finally{z(le,!1)}}async function Ve(e){let t=K(O);if(!(!t||e===K(ie)?.branch)){z(ce,!0),z(ue,null);try{await k.checkoutGitBranch(t,e),await Ie(t)}catch(e){z(ue,Ye(e,`GIT_CHECKOUT_FAILED`),!0)}finally{z(ce,!1)}}}async function He(){let e=K(O);if(e){z(pe,K(pe)??Ao(),!0),z(ue,null);try{await k.pushGit(e,K(pe)),z(oe,!1),await Ie(e),z(pe,null)}catch(e){z(ue,Ye(e,`GIT_PUSH_FAILED`),!0)}}}async function Ue(e,t){K(d)&&(await k.respondInteraction(K(d),e,{decision:t}),z(he,K(he).filter(t=>t.requestId!==e),!0))}async function We(e){if(!K(d))return;let t=Di(Ei(e.payload).map(e=>({id:e.id,answer:ge[e.id]??``})));await k.respondInteraction(K(d),e.requestId,t),z(he,K(he).filter(t=>t.requestId!==e.requestId),!0)}async function Ge(e){if(!K(d))return;let t=To(e.payload);if(!t){z(r,`Codex sent an invalid permission request.`);return}await k.respondInteraction(K(d),e.requestId,t),z(he,K(he).filter(t=>t.requestId!==e.requestId),!0)}function Ke(e,t){ge[e]=t}function qe(e){z(y,e,!0),K(d)&&ve.saveDraft(K(d),e)}function F(e){_e.write(e,K(S))}function Je(e){return e instanceof Error?e.message:`Unknown relay error.`}function Ye(e,t){let n=Ma(e,t);return ye.enqueue({kind:`error`,...n}),n.message}function Xe(e){E&&clearTimeout(E),D&&clearTimeout(D),T?.close();let t=++re,n=location.protocol===`https:`?`wss:`:`ws:`;T=new WebSocket(`${n}//${location.host}/api/sessions/${encodeURIComponent(e)}/events?after=${K(w)}`),T.onopen=()=>{t!==re||K(d)!==e||(z(r,Mo(K(b)),!0),Me(),D=setTimeout(()=>{ne=0},3e4))},T.onmessage=t=>{let n=JSON.parse(String(t.data));if(n.type===`relay.resyncRequired`){je(e,typeof n.currentSequence==`number`?n.currentSequence:0);return}if(n.type===`relay.event`&&n.event?.type===`interaction.requested`){let e=n.event.payload;K(he).some(t=>t.requestId===e.requestId)||z(he,[...K(he),e],!0)}if(n.type===`relay.event`&&n.event?.type===`turnCompleted`&&(z(b,null),z(r,Mo(K(b)),!0),z(S,wo(K(S),`assistant-${e}`),!0),F(e),je(e).catch(()=>void 0)),n.type===`relay.event`&&n.event?.type===`session.updated`){let t=n.event.payload;if(typeof t==`object`&&t&&t.id===e){let n=t,i=K(b);z(b,typeof n.activeTurnId==`string`?n.activeTurnId:null,!0),i&&!K(b)&&z(r,Mo(K(b)),!0),z(f,K(f).map(t=>t.id===e?{...t,...n}:t),!0)}}if(n.type===`relay.event`&&n.event?.type===`interaction.resolved`){let{requestId:e}=n.event.payload;z(he,K(he).filter(t=>t.requestId!==e),!0)}if(n.type===`relay.event`&&n.event?.type===`activity.updated`){let e=n.event.payload;typeof e.id==`string`&&typeof e.label==`string`&&typeof e.detail==`string`&&z(C,[...K(C).filter(t=>t.id!==e.id),e],!0)}z(w,jo(K(w),n,t=>{z(S,Co(K(S),`assistant-${e}`,t,Date.now()),!0),F(e)},()=>{je(e)}),!0),ve.saveCursor(e,K(w))},T.onclose=()=>{t!==re||K(d)!==e||(D&&clearTimeout(D),z(r,`Connection interrupted. Reconnecting…`),E=setTimeout(()=>Xe(e),No(ne++)))}}var Ze=Os();Vr(`y74n0s`,e=>{xn(()=>{Yt.title=`Gestalt Mobile`})});var Qe=V(Ze),$e=e=>{Ba(e,{get variant(){return xe}})},et=e=>{var t=Ss();no(B(t),{get context(){return be}}),N(t),Y(e,t)},tt=e=>{var t=Ds(),c=B(t);{let e=I(()=>K(n)===`chat`?Ho(K(f).find(e=>e.id===K(d))?.workspacePath??``):null);Si(c,{get theme(){return K(i)},get sessionPath(){return K(e)},onthemechange:Se})}var _=H(c,2),w=e=>{var t=Ts(),n=H(B(t),2),i=e=>{var t=Cs(),n=V(t);ma(n,{get messages(){return K(S)}});var i=H(n,2);Ti(i,{get activities(){return K(C)}});var a=H(i,2);Ii(a,{get interactions(){return K(he)},get answers(){return ge},onanswer:Ke,onuserinput:e=>void We(e),onpermission:e=>void Ge(e),ondecision:(e,t)=>void Ue(e,t)}),Vi(H(a,2),{get status(){return K(r)},get message(){return K(y)},get activeTurnId(){return K(b)},get starting(){return K(x)},onchange:qe,onsend:()=>void ke(),oninterrupt:()=>void Ae()}),Y(e,t)},a=e=>{Y(e,ws())};Z(n,e=>{K(d)?e(i):e(a,-1)}),N(t),Y(e,t)},T=e=>{{let t=I(()=>K(O)?Ka(K(a),K(O))??null:null);vo(e,{get workspaceTree(){return K(a)},get selectedWorkspace(){return K(t)},get expandedIds(){return K(ae)},get summary(){return K(ie)},get refreshing(){return K(se)},get checkingOut(){return K(ce)},get cloning(){return K(le)},get error(){return K(ue)},get cloneStatus(){return K(de)},get confirmingPush(){return K(oe)},onpull:()=>void Le(),oncheckout:e=>void Ve(e),onopenpushconfirmation:()=>z(oe,!0),onpush:()=>void He(),oncancelpush:()=>z(oe,!1),onselect:P,onexpandedchange:e=>z(ae,e,!0),onclone:e=>void Be(e)})}},E=e=>{var t=Er(),n=V(t),r=e=>{ys(e,{get workspaceTree(){return K(a)},get codexProfiles(){return K(o)},get skillsState(){return K(s)},onworkspacechange:e=>void Pe(e,K(s)?.codexProfile??``),oncodexprofilechange:e=>void Pe(K(s)?.workspaceId??``,e)})},i=e=>{Y(e,Es())};Z(n,e=>{K(s)?e(r):e(i,-1)}),Y(e,t)},D=e=>{es(e,{get sessions(){return K(f)},get recentSessions(){return K(m)},get workspaceTree(){return K(a)},get workspaceId(){return K(l)},get expandedIds(){return K(u)},get sandbox(){return K(h)},get approvalPolicy(){return K(g)},get startingSession(){return K(v)},onworkspacechange:e=>z(l,e,!0),onexpandedchange:e=>z(u,e,!0),onsandboxchange:e=>z(h,e,!0),onapprovalpolicychange:e=>z(g,e,!0),onopen:Ee,onclose:e=>void j(e),onopenrecent:e=>void De(e),onforget:e=>void Oe(e),oncopyresume:e=>void M(e),onstart:()=>void A()})};Z(_,e=>{K(n)===`chat`?e(w):K(n)===`git`?e(T,1):K(n)===`skills`?e(E,2):e(D,-1)}),is(H(_,2),{get activeTab(){return K(n)},get chatEnabled(){return K(p)},onselect:Ne}),N(t),Y(e,t)};Z(Qe,e=>{xe===`error`||xe===`stacked`?e($e):be===`sessions`||be===`git`?e(et,1):e(tt,-1)});var nt=H(Qe,2),rt=e=>{Ra(e,{get queue(){return ye}})};Z(nt,e=>{xe!==`error`&&xe!==`stacked`&&e(rt)}),Y(e,Ze),ze()}var As=document.getElementById(`app`);if(!As)throw Error(`Missing application mount target`);Dr(ks,{target:As});
@@ -10,7 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
10
10
  <meta charset="UTF-8" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <title>Codex Relay</title>
13
- <script type="module" crossorigin src="/assets/index-i0Y57I_X.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-CR8XQoHz.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="/assets/index-B3MMCSoP.css">
15
15
  </head>
16
16
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gestalt-mobile",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Mobile-first web relay for durable Codex development sessions",
5
5
  "keywords": [
6
6
  "codex",