pi-straw-boss 0.29.4 → 0.29.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gui/assets/{ask-V46WPXFi.js → ask-DIr7mep4.js} +1 -1
- package/dist/gui/assets/{chat-CCwo2JZX.js → chat-Xv1V3Ep2.js} +1 -1
- package/dist/gui/assets/index-D-LVSW44.js +1 -0
- package/dist/gui/assets/{layer-B1r-8tXs.js → layer-BCHLWC4K.js} +1 -1
- package/dist/gui/assets/{lightbox-CcMgCn-P.js → lightbox-Dt6sU9So.js} +1 -1
- package/dist/gui/assets/{pair-BwRLzIZW.js → pair-BIsl9hN1.js} +1 -1
- package/dist/gui/assets/{spawn-B6nd89Wa.js → spawn-CDSkJCMN.js} +1 -1
- package/dist/gui/assets/{views-fb61UPmI.js → views-Bcg0APim.js} +2 -2
- package/dist/gui/index.html +1 -1
- package/package.json +1 -1
- package/src/control.ts +3 -2
- package/src/gui.ts +3 -3
- package/src/net.ts +7 -1
- package/dist/gui/assets/index-CbcGH5l4.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,F as t,_ as n}from"./index-CbcGH5l4.js";var r=((e={},n={})=>(n.locale??t())===`zh-TW`?`另一個答案正在送出;請查看終端機。`:`Another answer is on its way; check the terminal.`),i=((e={},n={})=>(n.locale??t())===`zh-TW`?`請在終端機中回答。`:`Answer it in the terminal.`),a=((e={},n={})=>(n.locale??t())===`zh-TW`?`請在終端機中回答。`:`Answer them in the terminal.`),o=((e={},n={})=>(n.locale??t())===`zh-TW`?`已回答。`:`Answered.`),s=((e={},n={})=>(n.locale??t())===`zh-TW`?`也可以自己輸入答案。`:`It also takes your own words.`),c=((e={},n={})=>(n.locale??t())===`zh-TW`?`可以複選。`:`It takes several choices.`),l=((e={},n={})=>(n.locale??t())===`zh-TW`?`再次確認`:`Check again`),u=((e={},n={})=>(n.locale??t())===`zh-TW`?`選擇`:`Choices`),d=((e={},n={})=>(n.locale??t())===`zh-TW`?`瀏覽器拒絕存取剪貼簿。`:`The browser refused the clipboard.`),f=((e={},n={})=>(n.locale??t())===`zh-TW`?`確認對話框只能在終端機,或在執行 GUI 的那台電腦的頁面上回答,已配對的裝置不能回答。這個頁面只能查看。`:`A confirmation can be answered only in the terminal or on the page of the computer the GUI runs on, not from a paired device. This page shows it read-only.`),p=((e={},n={})=>(n.locale??t())===`zh-TW`?`已複製到這台裝置的剪貼簿。`:`Copied to this device's clipboard.`),m=((e={},n={})=>(n.locale??t())===`zh-TW`?`複製指令`:`Copy command`);function h(e,t,n,r){if(typeof t!=`string`||n!==void 0&&!r)return new e(t,n);let i=h;if(n!==void 0){let r=i.prototypeKeys??=new Set([`constructor`,`__defineGetter__`,`__defineSetter__`,`hasOwnProperty`,`__lookupGetter__`,`__lookupSetter__`,`isPrototypeOf`,`propertyIsEnumerable`,`toString`,`valueOf`,`__proto__`,`toLocaleString`]);if(Object.getOwnPropertyNames(Object.prototype).some(e=>!r.has(e)))return new e(t,n)}let a=[];for(let r of Object.keys(n??{}).sort()){let i=n[r];if(i!==void 0){if(i!==null&&![`string`,`number`,`boolean`].includes(typeof i)||typeof i==`number`&&!Number.isFinite(i))return new e(t,n);a.push([r,i])}}let o=JSON.stringify([t,a]),s=i.caches??=new WeakMap,c=s.get(e);if(c||(c=new Map,s.set(e,c)),c.has(o))return c.get(o);let l=new e(t,n);if(c.size>=256){let e=c.keys().next().value;e!==void 0&&c.delete(e)}return c.set(o,l),l}function g(e,t,n,r=!1){return h(Intl.PluralRules,e,n,r).select(Number(t)-Number(n?.offset??0))}var _=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個選項有預覽;請在終端機中查看。`:`It has a preview; see it in the terminal.`),v=((e={},n={})=>(n.locale??t())===`zh-TW`?`未確認。請查看終端機。`:`Not confirmed. Check the terminal.`),y=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註`:`Note`),ee=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註(選填)`:`Note (optional)`),b=e=>`Opened while ${e?.tool} was running; it may not be about that call.`,x=e=>`在 ${e?.tool} 執行時開啟,不一定與該呼叫有關。`,S=((e,n={})=>(n.locale??t())===`zh-TW`?x(e):b(e)),C=((e={},n={})=>(n.locale??t())===`zh-TW`?`選項`:`Options`),w=((e={},n={})=>(n.locale??t())===`zh-TW`?`另一個答案沒有被採用;這個可以送出。`:`The other answer was not taken; this one can go.`),T=((e={},n={})=>(n.locale??t())===`zh-TW`?`你的答案`:`Your own answer`),E=((e={},n={})=>(n.locale??t())===`zh-TW`?`或自己輸入答案`:`Or type your own answer`),D=((e={},n={})=>(n.locale??t())===`zh-TW`?`問題已變更,請重新閱讀。`:`The question changed; read it again.`),O=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 讀不懂這個答案。`:`The session could not read that answer.`),k=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個答案不符合問題。`:`That answer does not fit the question.`),A=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 拒絕了這個答案。`:`The session refused that answer.`),j=((e={},n={})=>(n.locale??t())===`zh-TW`?`安全考量,遠端不支援輸入機密。請到執行 GUI 的那台電腦的終端機中回答。`:`For security, entering a secret is not supported remotely. Answer it in the terminal on the computer the GUI runs on.`),M=((e={},n={})=>(n.locale??t())===`zh-TW`?`機密內容只能在終端機輸入,這裡不接受。請到執行 GUI 的那台電腦的終端機中回答。`:`A secret is entered in the terminal only, not here. Answer it in the terminal on the computer the GUI runs on.`),N=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出答案`:`Send answer`),P=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出中…`:`Sending…`),F=((e={},n={})=>(n.locale??t())===`zh-TW`?`顯示終端機`:`Show terminal`),I=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中關閉。`:`It was dismissed in the terminal.`),L=((e={},n={})=>(n.locale??t())===`zh-TW`?`它已不再開啟。`:`It is no longer open.`),R=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中回答。`:`It was already answered in the terminal.`),z=((e={},n={})=>(n.locale??t())===`zh-TW`?`連不上伺服器。`:`The server could not be reached.`),B=((e={},n={})=>(n.locale??t())===`zh-TW`?`它在等待對話框。`:`It waits on a dialog.`),V={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1};function H(e,t,n,r,i){let{q:a}=n,o=r[a],s=V[e]??0,c=e===`ArrowUp`,l=c||e===`ArrowDown`,u=()=>({to:r.map((e,t)=>({q:(a+1+t)%r.length,part:`opt`})).find(e=>e.q!==a&&!i[e.q])??`send`});if(e===`Tab`)return t?n.part===`opt`&&a>0?{to:{q:a-1,part:`opt`}}:void 0:a<r.length-1?{to:{q:a+1,part:`opt`}}:void 0;if(!t){if(n.part===`opt`){let t=n.o+s;if(s)return t>=0&&t<o.options?{to:{q:a,part:`opt`,o:t},...o.multiple?{}:{pick:t}}:{to:s>0&&o.own?{q:a,part:`own`}:n};if(e===`Enter`||e===` `&&!o.multiple)return{...u(),...o.multiple?{}:{pick:n.o}}}else if(n.part===`own`){if(e===`Enter`)return u();if(l)return{to:c?{q:a,part:`opt`,o:o.options-1}:{q:a,part:`note`}}}else if(c)return{to:{q:a,part:`own`}}}}function U(e,t,n){let r=e=>Math.max(0,e.opts.findIndex(e=>e.getAttribute(`aria-checked`)===`true`)),i=(e,t)=>e.opts.forEach((e,n)=>e.setAttribute(`tabindex`,n===t?`0`:`-1`)),a=e=>{for(let[n,r]of t.entries()){let t=r.opts.indexOf(e);if(t>=0)return{q:n,part:`opt`,o:t};if(e===r.own||e===r.note)return{q:n,part:e===r.own?`own`:`note`}}};t.forEach(e=>i(e,r(e)));let o=e=>{let n=a(e.target);n?.part===`opt`&&i(t[n.q],n.o)};e.addEventListener(`focusin`,o),e.addEventListener(`click`,o);let s=!1;return e.addEventListener(`keydown`,e=>{let i=a(e.target);if(!i||e.ctrlKey||e.altKey||e.metaKey||e.isComposing)return;let o=e.target;if(i.part!==`opt`&&(e.key===`ArrowUp`?o.selectionStart!==0:e.key===`ArrowDown`&&o.selectionEnd!==o.value.length))return;let c=H(e.key,e.shiftKey,i,t.map(e=>({options:e.opts.length,multiple:e.multiple,own:!!e.own})),t.map(e=>e.answered()));if(!c||(e.preventDefault(),e.repeat&&[`Enter`,` `].includes(e.key)))return;if(s=e.key===` `,c.pick!==void 0){let e=t[i.q].opts[c.pick];e.getAttribute(`aria-checked`)!==`true`&&e.click()}let l=c.to===`send`?void 0:t[c.to.q],u=c.to===`send`?n():c.to.part===`opt`?l.opts[c.to.o??r(l)]:c.to.part===`own`?l.own:l.note;u&&!u.disabled&&u.focus()}),e.addEventListener(`keyup`,e=>s&&e.key===` `&&(s=!1,e.preventDefault())),()=>t[0]?.opts[r(t[0])]}var W=e=>e.multiple?c():e.freeform&&e.options.length?s():``,G=(e,t)=>n(`div`,{class:`ask-one`},e.header&&n(`b`,{class:`ask-head`},e.header),n(`p`,{class:`ask-q`},e.question),e.context&&n(`div`,{class:`ask-ctx`},e.context),e.options.length>0&&n(`ol`,{class:`ask-opts`,"aria-label":C()},...e.options.map(e=>n(`li`,{class:`ask-opt`},n(`b`,null,e.title),e.description&&n(`small`,null,e.description)))),t&&W(e)&&n(`small`,{class:`ask-how`},W(e))),K=e=>e.replace(/[\u0000-\u0008\u000b-\u001f\u007f-\u009f\p{Cf}]/gu,`�`),q=(e,t)=>(e.select?.choices??[]).map((e,t)=>({...e,i:t})).filter(e=>!(t&&e.localOnly)),J=(e,t,n)=>({...e.size?{choices:[...e].sort((e,t)=>e-t)}:{},...t.trim()?{text:t}:{},...n.trim()?{note:n}:{}}),Y=(e,t)=>!!(t&&e?.select?.confirm),X=(e,t,n)=>({dialog:e.dialog,digest:e.digest,answerId:n,...t}),Z={digest:D,"not-allowed":k,malformed:O};function Q(t){let{outcome:n,reason:i,by:a}=t.body;return n===`accepted`?[`ok`,o()]:n===`stale`?[`error`,a===`local`?R():a===`cancel`?I():L()]:n===`rejected`?[`error`,(Object.hasOwn(Z,String(i))?Z[String(i)]:A)()]:n===`busy`?[`error`,r()]:n===`unknown`||t.status===504?[`error`,v(),!0]:[`error`,i??e({status:t.status})]}var te=e=>[`accepted`,`stale`,`busy`,`unknown`].includes(String(e.body.outcome))||e.status===504,$=e=>e.answer?`d\n${e.answer.dialog}\n${e.answer.digest}`:`c\n${e.callId}\n${e.why??``}`;function ne(e,t,r=location.hostname!==`127.0.0.1`,o,s){let c,h,g,b=!1,x=!1,D;for(let e of[`focusin`,`pointerdown`])document.addEventListener(e,e=>h&&!h.el.contains(e.target)&&(h.lost=void 0));let O=(e,t,n,...r)=>(e.dataset.tone=t,e.replaceChildren(n,...r)),k=()=>{if(!h)return;let e=document.activeElement;e&&e!==document.body&&e!==h.lost&&(h.lost=void 0),h.controls.forEach(e=>e.disabled=!b||x||h.done),h.send&&(h.send.disabled=!b||x||h.done||!h.pick()),e&&h.el.contains(e)&&e.disabled&&(h.lost=e);let t=h.lost;t&&!t.disabled&&h.el.contains(t)&&(!document.activeElement||document.activeElement===document.body)&&(t.focus(),h.lost=void 0)};async function A(e,r){[e.sending,x,e.spell]=[!0,!0,!1],k(),O(e.note,``,P());let i=await t(`answer`,r).catch(()=>void 0),a=n(`button`,{type:`button`,class:`cmp-link`},l());a.onclick=()=>void A(e,r);let[o,c,u]=i?Q(i):[`error`,v(),!0];[e.done,e.sending,x,e.busy]=[!i||te(i),!1,!1,i?.body.outcome===`busy`],O(e.note,o,c,...u?[a]:[]),k(),e.note.scrollIntoView?.({block:`nearest`}),s&&i?.body.outcome===`accepted`&&setTimeout(s,1200)}let I=(e,t,r,i,a)=>{let o=n(`button`,{type:`button`,class:`ask-opt`,role:e,"aria-checked":`false`},n(`b`,a?{"data-n":String(a)}:null,t),...r.filter(Boolean).map(e=>n(`small`,null,e)));return o.onclick=i,o};function L(e,t){let i,a=q(t,r).map(e=>I(`radio`,K(e.label),[e.note&&K(e.note)],()=>(i=e.i,a.forEach((n,i)=>n.setAttribute(`aria-checked`,String(q(t,r)[i].i===e.i))),k()),e.i+1)),o=t.select?.copy!==void 0&&n(`button`,{type:`button`,class:`cmp-link`},m());return o&&(o.disabled=!navigator.clipboard,o.onclick=()=>void navigator.clipboard.writeText(t.select.copy).then(()=>O(e.note,`ok`,p()),()=>O(e.note,`error`,d()))),e.pick=()=>i===void 0?void 0:{choice:i},e.first=U(e.el,[{opts:a,multiple:!1,answered:()=>i!==void 0}],()=>e.send),e.controls=a,[n(`pre`,{class:`ask-title`},K(t.select.title)),n(`div`,{class:`ask-opts`,role:`radiogroup`,"aria-label":u()},...a),n(`div`,{class:`ask-acts`},e.send,o)]}function R(e,t){let r=t.questions.map(()=>({picks:new Set,text:n(`textarea`,{rows:`1`,maxlength:`8192`,class:`ask-own`,placeholder:E(),"aria-label":T()}),note:n(`input`,{type:`text`,maxlength:`2048`,class:`ask-own ask-memo`,placeholder:ee(),"aria-label":y()})})),i=[],a=t.questions.map((t,a)=>{let o=r[a],s=t.multiple?`checkbox`:`radio`,c=t.options.map((e,n)=>I(s,e.title,[e.description,e.preview&&_()],()=>{t.multiple||(o.picks.clear(),o.text.value=``),o.picks.has(n)?o.picks.delete(n):o.picks.add(n),c.forEach((e,t)=>e.setAttribute(`aria-checked`,String(o.picks.has(t)))),k()}));return o.text.oninput=()=>(t.multiple||(o.picks.clear(),c.forEach(e=>e.setAttribute(`aria-checked`,`false`))),k()),e.controls.push(...c,o.text,o.note),i.push({opts:c,multiple:!!t.multiple,own:o.text,note:o.note,answered:()=>o.picks.size>0||o.text.value.trim()!==``}),n(`div`,{class:`ask-one`},t.header&&n(`b`,{class:`ask-head`},t.header),n(`p`,{class:`ask-q`},t.question),n(`div`,{class:`ask-opts`,role:t.multiple?`group`:`radiogroup`,"aria-label":C()},...c),o.text,o.note)});return e.pick=()=>r.every(e=>e.picks.size||e.text.value.trim())?{answers:r.map(e=>J(e.picks,e.text.value,e.note.value))}:void 0,e.first=U(e.el,i,()=>e.send),[...a,n(`div`,{class:`ask-acts`},e.send)]}function z(e){let t=e.asks??(e.ask?[e.ask]:[]),s=t.length>1,c=Y(e.answer,r)?void 0:e.answer,l={key:$(e),el:n(`section`,{class:`ask`}),note:n(`p`,{class:`ask-note`,role:`status`,"aria-live":`polite`}),controls:[],pick:()=>void 0,done:!1,sending:!1};c&&((l.send=n(`button`,{type:`button`,class:`ask-send`},N())).onclick=()=>void(l.pick()&&A(l,X(c,l.pick(),crypto.randomUUID()))));let u=e.tool===`secret_drop`,d=n(`p`,{class:`ask-term`},e.why&&t.length?e.why:`${s?a():i()} ${s||!t[0]?``:W(t[0])}`.trim()),p=o&&e.tool!==`secret_drop`&&n(`button`,{type:`button`,class:`cmp-link`},F());p&&(p.onclick=o);let m=e.answer?.twin&&e.tool&&e.tool!==`dialog`?[n(`p`,{class:`ask-why`},S({tool:e.tool}))]:[];return l.el.append(...m,...c&&!u?c.select?L(l,c):R(l,c):[...t.length?t.map(e=>G(e,s)):e.answer?.select?[n(`pre`,{class:`ask-title`},K(e.answer.select.title)),n(`p`,{class:`ask-why`},f())]:[n(`p`,{class:`ask-why`},u?r?j():M():e.why??B())],n(`div`,{class:`ask-acts`},u?n(`p`,{class:`ask-term`},i()):d,p)],l.note),l}let V=(t,n)=>{let r=document.activeElement;h&&h!==n&&(h.focus=h.el.contains(r)?r:void 0),[c,h,g]=[t,n,n?.send?n:g],e.replaceChildren(...n?[n.el]:[]),k(),n?.focus&&(!document.activeElement||document.activeElement===document.body)&&n.focus.focus()};return{enter(){let e=h&&!h.done?h.first?.():void 0;return!!(e&&!e.disabled&&(e.focus(),1))},update(e,t){b=t,e&&(D=void clearTimeout(D)),!e&&(h?.done||h?.sending)?D??=setTimeout(()=>(D=void 0,V()),6e3):e?h&&($(e)===h.key||!e.answer&&(h.done||h.sending)&&e.callId===c?.callId)?((h.busy||h.sending)&&!e.answer?h.spell=!0:h.busy&&h.spell&&e.answer&&([h.done,h.busy]=[!1,!1],O(h.note,``,w())),c=e):V(e,g?.key===$(e)&&!g.done?g:z(e)):V(),k()}}}export{g as a,P as i,Y as n,z as r,ne as t};
|
|
1
|
+
import{C as e,F as t,_ as n}from"./index-D-LVSW44.js";var r=((e={},n={})=>(n.locale??t())===`zh-TW`?`另一個答案正在送出;請查看終端機。`:`Another answer is on its way; check the terminal.`),i=((e={},n={})=>(n.locale??t())===`zh-TW`?`請在終端機中回答。`:`Answer it in the terminal.`),a=((e={},n={})=>(n.locale??t())===`zh-TW`?`請在終端機中回答。`:`Answer them in the terminal.`),o=((e={},n={})=>(n.locale??t())===`zh-TW`?`已回答。`:`Answered.`),s=((e={},n={})=>(n.locale??t())===`zh-TW`?`也可以自己輸入答案。`:`It also takes your own words.`),c=((e={},n={})=>(n.locale??t())===`zh-TW`?`可以複選。`:`It takes several choices.`),l=((e={},n={})=>(n.locale??t())===`zh-TW`?`再次確認`:`Check again`),u=((e={},n={})=>(n.locale??t())===`zh-TW`?`選擇`:`Choices`),d=((e={},n={})=>(n.locale??t())===`zh-TW`?`瀏覽器拒絕存取剪貼簿。`:`The browser refused the clipboard.`),f=((e={},n={})=>(n.locale??t())===`zh-TW`?`確認對話框只能在終端機,或在執行 GUI 的那台電腦的頁面上回答,已配對的裝置不能回答。這個頁面只能查看。`:`A confirmation can be answered only in the terminal or on the page of the computer the GUI runs on, not from a paired device. This page shows it read-only.`),p=((e={},n={})=>(n.locale??t())===`zh-TW`?`已複製到這台裝置的剪貼簿。`:`Copied to this device's clipboard.`),m=((e={},n={})=>(n.locale??t())===`zh-TW`?`複製指令`:`Copy command`);function h(e,t,n,r){if(typeof t!=`string`||n!==void 0&&!r)return new e(t,n);let i=h;if(n!==void 0){let r=i.prototypeKeys??=new Set([`constructor`,`__defineGetter__`,`__defineSetter__`,`hasOwnProperty`,`__lookupGetter__`,`__lookupSetter__`,`isPrototypeOf`,`propertyIsEnumerable`,`toString`,`valueOf`,`__proto__`,`toLocaleString`]);if(Object.getOwnPropertyNames(Object.prototype).some(e=>!r.has(e)))return new e(t,n)}let a=[];for(let r of Object.keys(n??{}).sort()){let i=n[r];if(i!==void 0){if(i!==null&&![`string`,`number`,`boolean`].includes(typeof i)||typeof i==`number`&&!Number.isFinite(i))return new e(t,n);a.push([r,i])}}let o=JSON.stringify([t,a]),s=i.caches??=new WeakMap,c=s.get(e);if(c||(c=new Map,s.set(e,c)),c.has(o))return c.get(o);let l=new e(t,n);if(c.size>=256){let e=c.keys().next().value;e!==void 0&&c.delete(e)}return c.set(o,l),l}function g(e,t,n,r=!1){return h(Intl.PluralRules,e,n,r).select(Number(t)-Number(n?.offset??0))}var _=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個選項有預覽;請在終端機中查看。`:`It has a preview; see it in the terminal.`),v=((e={},n={})=>(n.locale??t())===`zh-TW`?`未確認。請查看終端機。`:`Not confirmed. Check the terminal.`),y=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註`:`Note`),ee=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註(選填)`:`Note (optional)`),b=e=>`Opened while ${e?.tool} was running; it may not be about that call.`,x=e=>`在 ${e?.tool} 執行時開啟,不一定與該呼叫有關。`,S=((e,n={})=>(n.locale??t())===`zh-TW`?x(e):b(e)),C=((e={},n={})=>(n.locale??t())===`zh-TW`?`選項`:`Options`),w=((e={},n={})=>(n.locale??t())===`zh-TW`?`另一個答案沒有被採用;這個可以送出。`:`The other answer was not taken; this one can go.`),T=((e={},n={})=>(n.locale??t())===`zh-TW`?`你的答案`:`Your own answer`),E=((e={},n={})=>(n.locale??t())===`zh-TW`?`或自己輸入答案`:`Or type your own answer`),D=((e={},n={})=>(n.locale??t())===`zh-TW`?`問題已變更,請重新閱讀。`:`The question changed; read it again.`),O=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 讀不懂這個答案。`:`The session could not read that answer.`),k=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個答案不符合問題。`:`That answer does not fit the question.`),A=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 拒絕了這個答案。`:`The session refused that answer.`),j=((e={},n={})=>(n.locale??t())===`zh-TW`?`安全考量,遠端不支援輸入機密。請到執行 GUI 的那台電腦的終端機中回答。`:`For security, entering a secret is not supported remotely. Answer it in the terminal on the computer the GUI runs on.`),M=((e={},n={})=>(n.locale??t())===`zh-TW`?`機密內容只能在終端機輸入,這裡不接受。請到執行 GUI 的那台電腦的終端機中回答。`:`A secret is entered in the terminal only, not here. Answer it in the terminal on the computer the GUI runs on.`),N=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出答案`:`Send answer`),P=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出中…`:`Sending…`),F=((e={},n={})=>(n.locale??t())===`zh-TW`?`顯示終端機`:`Show terminal`),I=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中關閉。`:`It was dismissed in the terminal.`),L=((e={},n={})=>(n.locale??t())===`zh-TW`?`它已不再開啟。`:`It is no longer open.`),R=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中回答。`:`It was already answered in the terminal.`),z=((e={},n={})=>(n.locale??t())===`zh-TW`?`連不上伺服器。`:`The server could not be reached.`),B=((e={},n={})=>(n.locale??t())===`zh-TW`?`它在等待對話框。`:`It waits on a dialog.`),V={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1};function H(e,t,n,r,i){let{q:a}=n,o=r[a],s=V[e]??0,c=e===`ArrowUp`,l=c||e===`ArrowDown`,u=()=>({to:r.map((e,t)=>({q:(a+1+t)%r.length,part:`opt`})).find(e=>e.q!==a&&!i[e.q])??`send`});if(e===`Tab`)return t?n.part===`opt`&&a>0?{to:{q:a-1,part:`opt`}}:void 0:a<r.length-1?{to:{q:a+1,part:`opt`}}:void 0;if(!t){if(n.part===`opt`){let t=n.o+s;if(s)return t>=0&&t<o.options?{to:{q:a,part:`opt`,o:t},...o.multiple?{}:{pick:t}}:{to:s>0&&o.own?{q:a,part:`own`}:n};if(e===`Enter`||e===` `&&!o.multiple)return{...u(),...o.multiple?{}:{pick:n.o}}}else if(n.part===`own`){if(e===`Enter`)return u();if(l)return{to:c?{q:a,part:`opt`,o:o.options-1}:{q:a,part:`note`}}}else if(c)return{to:{q:a,part:`own`}}}}function U(e,t,n){let r=e=>Math.max(0,e.opts.findIndex(e=>e.getAttribute(`aria-checked`)===`true`)),i=(e,t)=>e.opts.forEach((e,n)=>e.setAttribute(`tabindex`,n===t?`0`:`-1`)),a=e=>{for(let[n,r]of t.entries()){let t=r.opts.indexOf(e);if(t>=0)return{q:n,part:`opt`,o:t};if(e===r.own||e===r.note)return{q:n,part:e===r.own?`own`:`note`}}};t.forEach(e=>i(e,r(e)));let o=e=>{let n=a(e.target);n?.part===`opt`&&i(t[n.q],n.o)};e.addEventListener(`focusin`,o),e.addEventListener(`click`,o);let s=!1;return e.addEventListener(`keydown`,e=>{let i=a(e.target);if(!i||e.ctrlKey||e.altKey||e.metaKey||e.isComposing)return;let o=e.target;if(i.part!==`opt`&&(e.key===`ArrowUp`?o.selectionStart!==0:e.key===`ArrowDown`&&o.selectionEnd!==o.value.length))return;let c=H(e.key,e.shiftKey,i,t.map(e=>({options:e.opts.length,multiple:e.multiple,own:!!e.own})),t.map(e=>e.answered()));if(!c||(e.preventDefault(),e.repeat&&[`Enter`,` `].includes(e.key)))return;if(s=e.key===` `,c.pick!==void 0){let e=t[i.q].opts[c.pick];e.getAttribute(`aria-checked`)!==`true`&&e.click()}let l=c.to===`send`?void 0:t[c.to.q],u=c.to===`send`?n():c.to.part===`opt`?l.opts[c.to.o??r(l)]:c.to.part===`own`?l.own:l.note;u&&!u.disabled&&u.focus()}),e.addEventListener(`keyup`,e=>s&&e.key===` `&&(s=!1,e.preventDefault())),()=>t[0]?.opts[r(t[0])]}var W=e=>e.multiple?c():e.freeform&&e.options.length?s():``,G=(e,t)=>n(`div`,{class:`ask-one`},e.header&&n(`b`,{class:`ask-head`},e.header),n(`p`,{class:`ask-q`},e.question),e.context&&n(`div`,{class:`ask-ctx`},e.context),e.options.length>0&&n(`ol`,{class:`ask-opts`,"aria-label":C()},...e.options.map(e=>n(`li`,{class:`ask-opt`},n(`b`,null,e.title),e.description&&n(`small`,null,e.description)))),t&&W(e)&&n(`small`,{class:`ask-how`},W(e))),K=e=>e.replace(/[\u0000-\u0008\u000b-\u001f\u007f-\u009f\p{Cf}]/gu,`�`),q=(e,t)=>(e.select?.choices??[]).map((e,t)=>({...e,i:t})).filter(e=>!(t&&e.localOnly)),J=(e,t,n)=>({...e.size?{choices:[...e].sort((e,t)=>e-t)}:{},...t.trim()?{text:t}:{},...n.trim()?{note:n}:{}}),Y=(e,t)=>!!(t&&e?.select?.confirm),X=(e,t,n)=>({dialog:e.dialog,digest:e.digest,answerId:n,...t}),Z={digest:D,"not-allowed":k,malformed:O};function Q(t){let{outcome:n,reason:i,by:a}=t.body;return n===`accepted`?[`ok`,o()]:n===`stale`?[`error`,a===`local`?R():a===`cancel`?I():L()]:n===`rejected`?[`error`,(Object.hasOwn(Z,String(i))?Z[String(i)]:A)()]:n===`busy`?[`error`,r()]:n===`unknown`||t.status===504?[`error`,v(),!0]:[`error`,i??e({status:t.status})]}var te=e=>[`accepted`,`stale`,`busy`,`unknown`].includes(String(e.body.outcome))||e.status===504,$=e=>e.answer?`d\n${e.answer.dialog}\n${e.answer.digest}`:`c\n${e.callId}\n${e.why??``}`;function ne(e,t,r=location.hostname!==`127.0.0.1`,o,s){let c,h,g,b=!1,x=!1,D;for(let e of[`focusin`,`pointerdown`])document.addEventListener(e,e=>h&&!h.el.contains(e.target)&&(h.lost=void 0));let O=(e,t,n,...r)=>(e.dataset.tone=t,e.replaceChildren(n,...r)),k=()=>{if(!h)return;let e=document.activeElement;e&&e!==document.body&&e!==h.lost&&(h.lost=void 0),h.controls.forEach(e=>e.disabled=!b||x||h.done),h.send&&(h.send.disabled=!b||x||h.done||!h.pick()),e&&h.el.contains(e)&&e.disabled&&(h.lost=e);let t=h.lost;t&&!t.disabled&&h.el.contains(t)&&(!document.activeElement||document.activeElement===document.body)&&(t.focus(),h.lost=void 0)};async function A(e,r){[e.sending,x,e.spell]=[!0,!0,!1],k(),O(e.note,``,P());let i=await t(`answer`,r).catch(()=>void 0),a=n(`button`,{type:`button`,class:`cmp-link`},l());a.onclick=()=>void A(e,r);let[o,c,u]=i?Q(i):[`error`,v(),!0];[e.done,e.sending,x,e.busy]=[!i||te(i),!1,!1,i?.body.outcome===`busy`],O(e.note,o,c,...u?[a]:[]),k(),e.note.scrollIntoView?.({block:`nearest`}),s&&i?.body.outcome===`accepted`&&setTimeout(s,1200)}let I=(e,t,r,i,a)=>{let o=n(`button`,{type:`button`,class:`ask-opt`,role:e,"aria-checked":`false`},n(`b`,a?{"data-n":String(a)}:null,t),...r.filter(Boolean).map(e=>n(`small`,null,e)));return o.onclick=i,o};function L(e,t){let i,a=q(t,r).map(e=>I(`radio`,K(e.label),[e.note&&K(e.note)],()=>(i=e.i,a.forEach((n,i)=>n.setAttribute(`aria-checked`,String(q(t,r)[i].i===e.i))),k()),e.i+1)),o=t.select?.copy!==void 0&&n(`button`,{type:`button`,class:`cmp-link`},m());return o&&(o.disabled=!navigator.clipboard,o.onclick=()=>void navigator.clipboard.writeText(t.select.copy).then(()=>O(e.note,`ok`,p()),()=>O(e.note,`error`,d()))),e.pick=()=>i===void 0?void 0:{choice:i},e.first=U(e.el,[{opts:a,multiple:!1,answered:()=>i!==void 0}],()=>e.send),e.controls=a,[n(`pre`,{class:`ask-title`},K(t.select.title)),n(`div`,{class:`ask-opts`,role:`radiogroup`,"aria-label":u()},...a),n(`div`,{class:`ask-acts`},e.send,o)]}function R(e,t){let r=t.questions.map(()=>({picks:new Set,text:n(`textarea`,{rows:`1`,maxlength:`8192`,class:`ask-own`,placeholder:E(),"aria-label":T()}),note:n(`input`,{type:`text`,maxlength:`2048`,class:`ask-own ask-memo`,placeholder:ee(),"aria-label":y()})})),i=[],a=t.questions.map((t,a)=>{let o=r[a],s=t.multiple?`checkbox`:`radio`,c=t.options.map((e,n)=>I(s,e.title,[e.description,e.preview&&_()],()=>{t.multiple||(o.picks.clear(),o.text.value=``),o.picks.has(n)?o.picks.delete(n):o.picks.add(n),c.forEach((e,t)=>e.setAttribute(`aria-checked`,String(o.picks.has(t)))),k()}));return o.text.oninput=()=>(t.multiple||(o.picks.clear(),c.forEach(e=>e.setAttribute(`aria-checked`,`false`))),k()),e.controls.push(...c,o.text,o.note),i.push({opts:c,multiple:!!t.multiple,own:o.text,note:o.note,answered:()=>o.picks.size>0||o.text.value.trim()!==``}),n(`div`,{class:`ask-one`},t.header&&n(`b`,{class:`ask-head`},t.header),n(`p`,{class:`ask-q`},t.question),n(`div`,{class:`ask-opts`,role:t.multiple?`group`:`radiogroup`,"aria-label":C()},...c),o.text,o.note)});return e.pick=()=>r.every(e=>e.picks.size||e.text.value.trim())?{answers:r.map(e=>J(e.picks,e.text.value,e.note.value))}:void 0,e.first=U(e.el,i,()=>e.send),[...a,n(`div`,{class:`ask-acts`},e.send)]}function z(e){let t=e.asks??(e.ask?[e.ask]:[]),s=t.length>1,c=Y(e.answer,r)?void 0:e.answer,l={key:$(e),el:n(`section`,{class:`ask`}),note:n(`p`,{class:`ask-note`,role:`status`,"aria-live":`polite`}),controls:[],pick:()=>void 0,done:!1,sending:!1};c&&((l.send=n(`button`,{type:`button`,class:`ask-send`},N())).onclick=()=>void(l.pick()&&A(l,X(c,l.pick(),crypto.randomUUID()))));let u=e.tool===`secret_drop`,d=n(`p`,{class:`ask-term`},e.why&&t.length?e.why:`${s?a():i()} ${s||!t[0]?``:W(t[0])}`.trim()),p=o&&e.tool!==`secret_drop`&&n(`button`,{type:`button`,class:`cmp-link`},F());p&&(p.onclick=o);let m=e.answer?.twin&&e.tool&&e.tool!==`dialog`?[n(`p`,{class:`ask-why`},S({tool:e.tool}))]:[];return l.el.append(...m,...c&&!u?c.select?L(l,c):R(l,c):[...t.length?t.map(e=>G(e,s)):e.answer?.select?[n(`pre`,{class:`ask-title`},K(e.answer.select.title)),n(`p`,{class:`ask-why`},f())]:[n(`p`,{class:`ask-why`},u?r?j():M():e.why??B())],n(`div`,{class:`ask-acts`},u?n(`p`,{class:`ask-term`},i()):d,p)],l.note),l}let V=(t,n)=>{let r=document.activeElement;h&&h!==n&&(h.focus=h.el.contains(r)?r:void 0),[c,h,g]=[t,n,n?.send?n:g],e.replaceChildren(...n?[n.el]:[]),k(),n?.focus&&(!document.activeElement||document.activeElement===document.body)&&n.focus.focus()};return{enter(){let e=h&&!h.done?h.first?.():void 0;return!!(e&&!e.disabled&&(e.focus(),1))},update(e,t){b=t,e&&(D=void clearTimeout(D)),!e&&(h?.done||h?.sending)?D??=setTimeout(()=>(D=void 0,V()),6e3):e?h&&($(e)===h.key||!e.answer&&(h.done||h.sending)&&e.callId===c?.callId)?((h.busy||h.sending)&&!e.answer?h.spell=!0:h.busy&&h.spell&&e.answer&&([h.done,h.busy]=[!1,!1],O(h.note,``,w())),c=e):V(e,g?.key===$(e)&&!g.done?g:z(e)):V(),k()}}}export{g as a,P as i,Y as n,z as r,ne as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-Br2ViD0U.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{F as e,_ as t,g as n,t as r,u as i,v as a}from"./index-CbcGH5l4.js";import{n as o,t as s}from"./views-fb61UPmI.js";var c=((t={},n={})=>(n.locale??e())===`zh-TW`?`分支摘要`:`branch summary`),l=((t={},n={})=>(n.locale??e())===`zh-TW`?`通訊紀錄`:`Comms log`),u=e=>`context compacted · ${e?.tokens} tokens summarized`,d=e=>`上下文已壓縮 · 摘要了 ${e?.tokens} tokens`,f=((t,n={})=>(n.locale??e())===`zh-TW`?d(t):u(t)),ee=((t={},n={})=>(n.locale??e())===`zh-TW`?`…(於 1 MB 截斷)`:`… (cut at 1 MB)`),p=e=>`exit ${e?.code}`,m=e=>`結束碼 ${e?.code}`,te=((t,n={})=>(n.locale??e())===`zh-TW`?m(t):p(t)),h=e=>`Image ${e?.n}`,g=e=>`圖片 ${e?.n}`,_=((t,n={})=>(n.locale??e())===`zh-TW`?g(t):h(t)),v=((t={},n={})=>(n.locale??e())===`zh-TW`?`圖片無法讀取`:`Image unavailable`),y=e=>`${e?.count} image(s)`,b=e=>`${e?.count} 張圖片`,ne=((t,n={})=>(n.locale??e())===`zh-TW`?b(t):y(t)),re=((t={},n={})=>(n.locale??e())===`zh-TW`?`收到`:`incoming`),x=((t={},n={})=>(n.locale??e())===`zh-TW`?`跳到最新`:`jump to latest`),S=e=>`${e?.count} new`,C=e=>`${e?.count} 則新訊息`,w=((t,n={})=>(n.locale??e())===`zh-TW`?C(t):S(t)),T=((t={},n={})=>(n.locale??e())===`zh-TW`?`還沒有通訊。`:`No transmissions yet.`),ie=((t={},n={})=>(n.locale??e())===`zh-TW`?`通知`:`notice`),E=((t={},n={})=>(n.locale??e())===`zh-TW`?`表單回覆`:`form answers`),D=((t={},n={})=>(n.locale??e())===`zh-TW`?`訊息,來自`:`message from`),O=((t={},n={})=>(n.locale??e())===`zh-TW`?`記憶`:`memory`),k=((t={},n={})=>(n.locale??e())===`zh-TW`?`監看`:`monitor`),A=((t={},n={})=>(n.locale??e())===`zh-TW`?`提問,來自`:`question from`),j=((t={},n={})=>(n.locale??e())===`zh-TW`?`回報,來自`:`report from`),M=((t={},n={})=>(n.locale??e())===`zh-TW`?`狀態:`:`status of`),ae=((t={},n={})=>(n.locale??e())===`zh-TW`?`在旁開啟`:`open beside`),N=e=>`Open image ${e?.n}`,P=e=>`打開圖片 ${e?.n}`,oe=((t,n={})=>(n.locale??e())===`zh-TW`?P(t):N(t)),F=e=>`show all (${e?.size})`,I=e=>`顯示全部(${e?.size})`,L=((t,n={})=>(n.locale??e())===`zh-TW`?I(t):F(t)),R=((t={},n={})=>(n.locale??e())===`zh-TW`?`顯示全部參數`:`show all arguments`),z=e=>`◇ thought · ${e?.count} chars`,B=e=>`◇ 思考 · ${e?.count} 字元`,se=((t,n={})=>(n.locale??e())===`zh-TW`?B(t):z(t)),ce=((t={},n={})=>(n.locale??e())===`zh-TW`?`◇ 思考 · 已遮蔽`:`◇ thought · redacted`),V=((t={},n={})=>(n.locale??e())===`zh-TW`?`無法取得`:`unavailable`),le=((t={},n={})=>(n.locale??e())===`zh-TW`?`你`:`you`);function ue(){let e=!0,t=0;return{get pinned(){return e},scrolled(n){e=n,n&&(t=0)},hold:()=>void(e=!1),arrived(n){return e||(t+=n),e},jump:()=>void(e=!0,t=0),button:n=>e&&!n?void 0:t&&!n?w({count:t}):x()}}async function de(e,t,n,r){let i=()=>e.items.some(e=>e.id===n);for(;!i()&&e.before;)r(e.prepend(await t.older(e.before)));return i()?!0:(r(e.reset(await t.latest())),!1)}function fe(e=600){let t=[],n,r=!1,i=new Set,a=new Map,o=new Map,s=e=>e.forEach(e=>(i.delete(e.id),e.tools?.forEach(e=>(o.delete(e.id),a.delete(e.id)))));function c(e,t){let n=[];for(let r of e)i.has(r.id)||(i.add(r.id),r.kind===`result`&&r.callId?(a.set(r.callId,r),o.has(r.callId)&&t.add(o.get(r.callId))):(r.tools?.forEach(e=>o.set(e.id,r.id)),n.push(r)));return n}let l=e=>({rebuild:!1,added:[],touched:[],dropped:[],front:!1,...e});return{get items(){return t},get before(){return n},get detached(){return r},result:e=>a.get(e),reset(e){return[t,n,r]=[[],e.before,!1],i.clear(),a.clear(),o.clear(),t=c(e.items,new Set),l({rebuild:!0,added:t})},append(i){if(r)return l({});let a=new Set,o=c(i,a);t.push(...o);let u=t.length>e?t.splice(0,t.length-e):[];return s(u),u.length&&(n=t[0].id),l({added:o,touched:[...a],dropped:u.map(e=>e.id)})},prepend(i){let a=new Set,o=c(i.items,a);t.unshift(...o),n=i.before;let u=t.length>e?t.splice(e):[];return s(u),u.length&&(r=!0),l({added:o,touched:[...a],dropped:u.map(e=>e.id),front:!0})}}}var pe=e=>e?new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,hour12:!1}):``,me=e=>e>=1024?`${(e/1024).toFixed(e>=10240?0:1)} KB`:`${e} B`,he={intercom_message:D,subagent_result:j,subagent_ping:A,subagent_status:M,"pi-loop-monitor":k,"memory-context":O,"doc-review":E},H=e=>{let t=i(`<span class="ava"><svg><use/></svg></span>`);return t.querySelector(`use`).setAttribute(`href`,`#i-${r[e]??e}`),t};function ge(e){let n=[],r=0;for(let i of e.matchAll(/https?:\/\/[^\s<>)\]]+/g))n.push(e.slice(r,i.index),t(`a`,{href:i[0],rel:`noopener noreferrer`,target:`_blank`},i[0])),r=i.index+i[0].length;return[...n,e.slice(r)]}function U(e,r,{who:i,link:u,docFor:d}){let p=fe(),m=new Map,h=new Set,g=()=>h.forEach(e=>e.button.isConnected?(e.shown=!0,e.button.hidden=!e.paths.some(e=>d?.(e))):e.shown&&h.delete(e)),y=t(`div`,{class:`chat-list`}),b=t(`div`,{class:`chat-top`}),x=t(`div`,{class:`chat-live`}),S=t(`div`,{class:`chat-end`}),C=t(`button`,{class:`chat-pill`,type:`button`,hidden:``}),w=t(`p`,{class:`chat-empty`},T()),E=t(`div`,{class:`chat-scroll`,tabindex:`-1`,"aria-label":l()},b,y,x,S);e.replaceChildren(E,C);let D=ue(),O=!1,k=!1,A,j,M=0,N=!1,P,F=()=>N||P!==void 0,I=()=>(clearTimeout(P),P=setTimeout(()=>(P=void 0,D.pinned&&!p.detached&&B()),250)),z=(e=D.button(p.detached))=>(C.hidden=!e,C.textContent=e??``),B=()=>(D.jump(),j=void 0,E.scrollTop=E.scrollHeight,z());async function U(e){O=!0;let t=await de(p,r,e,e=>(J(e),Y(e))).finally(()=>O=!1),n=m.get(e);if(A===e){if(!t||!n)return B();D.hold(),j=n,n.scrollIntoView({block:`center`}),a(n,`lit`),clearTimeout(M),M=window.setTimeout(()=>(j=void 0,n.classList.remove(`lit`)),2e3),z()}}let W=()=>A?void U(A):B(),G=(e,t,n,i)=>{e.disabled=!0,r.entry(n).then(n=>{let r=n&&i(n);if(r===void 0)return void(e.textContent=V());t.textContent=r,e.remove()},()=>e.textContent=V())};function K(e,i=0){if(!i||!r.pic)return null;let a=Array.from({length:i},(t,n)=>r.pic(e,n));return t(`div`,{class:`pics`},...a.map((e,r)=>{let i=t(`img`,{src:e,alt:_({n:r+1}),loading:`lazy`,decoding:`async`}),o=t(`button`,{type:`button`,class:`pic`,"aria-label":oe({n:r+1})},i);return i.addEventListener(`error`,()=>o.replaceWith(t(`em`,{class:`pic-gone`},v()))),o.addEventListener(`click`,()=>void n(async()=>{let{lightbox:e}=await import(`./lightbox-CcMgCn-P.js`);return{lightbox:e}},__vite__mapDeps([0]),import.meta.url).then(({lightbox:e})=>e(a,r))),o}))}function _e(e,n){let r=p.result(e.id),i=t(`pre`,{class:`out`},r?.text??``),a=t(`pre`,{class:`args`},e.args??``),o=e.cut?t(`button`,{class:`more`,type:`button`},R()):null;o?.addEventListener(`click`,()=>G(o,a,n,t=>(e=>e&&`${e.args??``}${e.cut?`\n${ee()}`:``}`)(t.tools?.find(t=>t.id===e.id))));let s=r?.more?t(`button`,{class:`more`,type:`button`},L({size:me(r.bytes??0)})):null;s?.addEventListener(`click`,()=>G(s,i,r.id,e=>e.text));let c=e.name===`show_doc`&&d?t(`button`,{class:`more open`,type:`button`,hidden:``},ae()):null;c?.addEventListener(`click`,t=>(t.preventDefault(),e.summary.split(`, `).forEach(e=>d?.(e)?.()))),c&&h.add({paths:e.summary.split(`, `),button:c}),c&&queueMicrotask(g);let l=t(`details`,{class:`act`},t(`summary`,{"data-mark":r?r.isError?`error`:`done`:`working`},t(`b`,{class:`badge`}),t(`code`,null,e.name),t(`span`,{class:`sum`},e.summary),c),a,o,r&&t(`div`,{class:`result`},r.images?t(`em`,null,ne({count:r.images})):null,i,s)),u=r&&K(r.id,r.images);return u?[l,u]:[l]}function q(e){let n=t(`time`,null,pe(e.at));switch(e.kind){case`user`:return t(`article`,{class:`tx you`},t(`header`,null,n,t(`b`,null,le()),H(`user`)),t(`div`,{class:`bubble`},...ge(e.text??``),K(e.id,e.images)));case`assistant`:{let r=i(),a=t(`pre`,{class:`thought-text`}),c=e.thought?t(`button`,{class:`thought`,type:`button`},e.thought<0?ce():se({count:e.thought.toLocaleString()})):null;return e.thought&&e.thought>0&&c?.addEventListener(`click`,()=>G(c,a,e.id,e=>e.thoughtText)),t(`article`,{class:`tx in`},H(r.role),t(`div`,{class:`tx-body`},t(`header`,null,t(`b`,null,r.name),e.model?t(`span`,null,e.model):null,n,e.stop?t(`span`,{class:`stop`,"data-mark":`error`},e.stop):null),c,a,e.text?t(`div`,{class:`md`},s(o(e.text))):null,e.error?t(`p`,{class:`fault`},e.error):null,...(e.tools??[]).flatMap(t=>_e(t,e.id))))}case`bash`:return t(`article`,{class:`tx sys`},t(`details`,{class:`act`},t(`summary`,{"data-mark":e.exit?`error`:`done`},t(`b`,{class:`badge`}),t(`code`,null,`shell`),t(`span`,{class:`sum`},`! ${e.command}`),e.exit?t(`span`,{class:`stop`,"data-mark":`error`},te({code:e.exit})):null),e.text?t(`pre`,{class:`out`},e.text):null));case`notice`:return t(`article`,{class:`tx sys`},t(`details`,{class:`notice`},t(`summary`,null,H(`comms`),t(`em`,null,re()),he[e.type??``]?.()??e.type??ie(),` `,e.from&&u(e.from)||(e.from??``),n),t(`pre`,null,e.text??``)));case`divider`:return t(`article`,{class:`tx rule`},t(`details`,null,t(`summary`,null,e.type===`compaction`?f({tokens:(e.tokens??0).toLocaleString()}):c()),t(`pre`,null,e.text??``)));default:return t(`article`,{class:`tx note`},e.text??``,` `,n)}}function J(e){e.rebuild&&(m.clear(),y.replaceChildren());for(let t of e.dropped)m.get(t)?.remove(),m.delete(t);let t=e.added.map(e=>(m.set(e.id,q(e)),m.get(e.id)));e.front?y.prepend(...t):y.append(...t),k&&!e.front&&!e.rebuild&&t.forEach(e=>(e.classList.add(`fresh`),e.dataset.born=String(Date.now()))),w.remove(),p.items.length||y.append(w),b.hidden=!p.before}let Y=e=>e.touched.forEach(e=>{let t=m.get(e),n=p.items.find(t=>t.id===e);if(t&&n){let r=q(n);t.classList.contains(`fresh`)&&Date.now()-Number(t.dataset.born??0)<400&&r.classList.add(`fresh`),t.replaceWith(r),m.set(e,r)}}),X=async()=>{if(!O&&p.before&&k){O=!0;try{let e=E.scrollHeight,t=p.prepend(await r.older(p.before));J(t),Y(t),E.scrollTop+=E.scrollHeight-e}finally{O=!1}p.before&&E.clientHeight&&b.getBoundingClientRect().bottom>=E.getBoundingClientRect().top&&X()}};C.addEventListener(`click`,()=>{A=void 0,p.detached?r.latest().then(e=>(J(p.reset(e)),B())):B()});let Z=[new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&void X(),{root:E}),new IntersectionObserver(e=>E.clientHeight&&(D.scrolled(e.at(-1).isIntersecting),z()),{root:E,rootMargin:`0px 0px 67px`})],Q,ve=()=>(Q??(Z[0].observe(b),Z[1].observe(S)),clearTimeout(Q),Q=setTimeout(()=>(Q=void 0,Z.forEach(e=>e.disconnect())),600));E.addEventListener(`scroll`,()=>(ve(),!N&&P!==void 0&&I()),{passive:!0}),E.addEventListener(`touchstart`,()=>(N=!0,clearTimeout(P),P=void 0),{passive:!0});for(let e of[`touchend`,`touchcancel`])E.addEventListener(e,()=>(N=!1,I()),{passive:!0});for(let e of[`wheel`,`touchstart`,`pointerdown`,`keydown`])E.addEventListener(e,()=>j=A=void 0,{passive:!0});let $=new ResizeObserver(()=>F()?void 0:D.pinned&&!p.detached?E.scrollTop=E.scrollHeight:j?.scrollIntoView({block:`center`}));return $.observe(y),$.observe(E),{log:E,docs:g,apply(e){if(e.reset)J(p.reset({items:e.items??[],before:e.before})),k=!0,W();else if(e.items?.length){let t=p.append(e.items);J(t),Y(t),D.arrived(t.added.length)&&!p.detached&&!F()?B():z()}},reveal(e){A=e,k&&W()},setLive(e,n){x.dataset.mark=n,x.lastChild?.textContent!==e&&x.replaceChildren(...e?[t(`b`,{class:`badge`}),t(`span`,null,e)]:[])}}}export{U as mountChat,_ as t};
|
|
2
|
+
import{F as e,_ as t,g as n,t as r,u as i,v as a}from"./index-D-LVSW44.js";import{n as o,t as s}from"./views-Bcg0APim.js";var c=((t={},n={})=>(n.locale??e())===`zh-TW`?`分支摘要`:`branch summary`),l=((t={},n={})=>(n.locale??e())===`zh-TW`?`通訊紀錄`:`Comms log`),u=e=>`context compacted · ${e?.tokens} tokens summarized`,d=e=>`上下文已壓縮 · 摘要了 ${e?.tokens} tokens`,f=((t,n={})=>(n.locale??e())===`zh-TW`?d(t):u(t)),ee=((t={},n={})=>(n.locale??e())===`zh-TW`?`…(於 1 MB 截斷)`:`… (cut at 1 MB)`),p=e=>`exit ${e?.code}`,m=e=>`結束碼 ${e?.code}`,te=((t,n={})=>(n.locale??e())===`zh-TW`?m(t):p(t)),h=e=>`Image ${e?.n}`,g=e=>`圖片 ${e?.n}`,_=((t,n={})=>(n.locale??e())===`zh-TW`?g(t):h(t)),v=((t={},n={})=>(n.locale??e())===`zh-TW`?`圖片無法讀取`:`Image unavailable`),y=e=>`${e?.count} image(s)`,b=e=>`${e?.count} 張圖片`,ne=((t,n={})=>(n.locale??e())===`zh-TW`?b(t):y(t)),re=((t={},n={})=>(n.locale??e())===`zh-TW`?`收到`:`incoming`),x=((t={},n={})=>(n.locale??e())===`zh-TW`?`跳到最新`:`jump to latest`),S=e=>`${e?.count} new`,C=e=>`${e?.count} 則新訊息`,w=((t,n={})=>(n.locale??e())===`zh-TW`?C(t):S(t)),T=((t={},n={})=>(n.locale??e())===`zh-TW`?`還沒有通訊。`:`No transmissions yet.`),ie=((t={},n={})=>(n.locale??e())===`zh-TW`?`通知`:`notice`),E=((t={},n={})=>(n.locale??e())===`zh-TW`?`表單回覆`:`form answers`),D=((t={},n={})=>(n.locale??e())===`zh-TW`?`訊息,來自`:`message from`),O=((t={},n={})=>(n.locale??e())===`zh-TW`?`記憶`:`memory`),k=((t={},n={})=>(n.locale??e())===`zh-TW`?`監看`:`monitor`),A=((t={},n={})=>(n.locale??e())===`zh-TW`?`提問,來自`:`question from`),j=((t={},n={})=>(n.locale??e())===`zh-TW`?`回報,來自`:`report from`),M=((t={},n={})=>(n.locale??e())===`zh-TW`?`狀態:`:`status of`),ae=((t={},n={})=>(n.locale??e())===`zh-TW`?`在旁開啟`:`open beside`),N=e=>`Open image ${e?.n}`,P=e=>`打開圖片 ${e?.n}`,oe=((t,n={})=>(n.locale??e())===`zh-TW`?P(t):N(t)),F=e=>`show all (${e?.size})`,I=e=>`顯示全部(${e?.size})`,L=((t,n={})=>(n.locale??e())===`zh-TW`?I(t):F(t)),R=((t={},n={})=>(n.locale??e())===`zh-TW`?`顯示全部參數`:`show all arguments`),z=e=>`◇ thought · ${e?.count} chars`,B=e=>`◇ 思考 · ${e?.count} 字元`,se=((t,n={})=>(n.locale??e())===`zh-TW`?B(t):z(t)),ce=((t={},n={})=>(n.locale??e())===`zh-TW`?`◇ 思考 · 已遮蔽`:`◇ thought · redacted`),V=((t={},n={})=>(n.locale??e())===`zh-TW`?`無法取得`:`unavailable`),le=((t={},n={})=>(n.locale??e())===`zh-TW`?`你`:`you`);function ue(){let e=!0,t=0;return{get pinned(){return e},scrolled(n){e=n,n&&(t=0)},hold:()=>void(e=!1),arrived(n){return e||(t+=n),e},jump:()=>void(e=!0,t=0),button:n=>e&&!n?void 0:t&&!n?w({count:t}):x()}}async function de(e,t,n,r){let i=()=>e.items.some(e=>e.id===n);for(;!i()&&e.before;)r(e.prepend(await t.older(e.before)));return i()?!0:(r(e.reset(await t.latest())),!1)}function fe(e=600){let t=[],n,r=!1,i=new Set,a=new Map,o=new Map,s=e=>e.forEach(e=>(i.delete(e.id),e.tools?.forEach(e=>(o.delete(e.id),a.delete(e.id)))));function c(e,t){let n=[];for(let r of e)i.has(r.id)||(i.add(r.id),r.kind===`result`&&r.callId?(a.set(r.callId,r),o.has(r.callId)&&t.add(o.get(r.callId))):(r.tools?.forEach(e=>o.set(e.id,r.id)),n.push(r)));return n}let l=e=>({rebuild:!1,added:[],touched:[],dropped:[],front:!1,...e});return{get items(){return t},get before(){return n},get detached(){return r},result:e=>a.get(e),reset(e){return[t,n,r]=[[],e.before,!1],i.clear(),a.clear(),o.clear(),t=c(e.items,new Set),l({rebuild:!0,added:t})},append(i){if(r)return l({});let a=new Set,o=c(i,a);t.push(...o);let u=t.length>e?t.splice(0,t.length-e):[];return s(u),u.length&&(n=t[0].id),l({added:o,touched:[...a],dropped:u.map(e=>e.id)})},prepend(i){let a=new Set,o=c(i.items,a);t.unshift(...o),n=i.before;let u=t.length>e?t.splice(e):[];return s(u),u.length&&(r=!0),l({added:o,touched:[...a],dropped:u.map(e=>e.id),front:!0})}}}var pe=e=>e?new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,hour12:!1}):``,me=e=>e>=1024?`${(e/1024).toFixed(e>=10240?0:1)} KB`:`${e} B`,he={intercom_message:D,subagent_result:j,subagent_ping:A,subagent_status:M,"pi-loop-monitor":k,"memory-context":O,"doc-review":E},H=e=>{let t=i(`<span class="ava"><svg><use/></svg></span>`);return t.querySelector(`use`).setAttribute(`href`,`#i-${r[e]??e}`),t};function ge(e){let n=[],r=0;for(let i of e.matchAll(/https?:\/\/[^\s<>)\]]+/g))n.push(e.slice(r,i.index),t(`a`,{href:i[0],rel:`noopener noreferrer`,target:`_blank`},i[0])),r=i.index+i[0].length;return[...n,e.slice(r)]}function U(e,r,{who:i,link:u,docFor:d}){let p=fe(),m=new Map,h=new Set,g=()=>h.forEach(e=>e.button.isConnected?(e.shown=!0,e.button.hidden=!e.paths.some(e=>d?.(e))):e.shown&&h.delete(e)),y=t(`div`,{class:`chat-list`}),b=t(`div`,{class:`chat-top`}),x=t(`div`,{class:`chat-live`}),S=t(`div`,{class:`chat-end`}),C=t(`button`,{class:`chat-pill`,type:`button`,hidden:``}),w=t(`p`,{class:`chat-empty`},T()),E=t(`div`,{class:`chat-scroll`,tabindex:`-1`,"aria-label":l()},b,y,x,S);e.replaceChildren(E,C);let D=ue(),O=!1,k=!1,A,j,M=0,N=!1,P,F=()=>N||P!==void 0,I=()=>(clearTimeout(P),P=setTimeout(()=>(P=void 0,D.pinned&&!p.detached&&B()),250)),z=(e=D.button(p.detached))=>(C.hidden=!e,C.textContent=e??``),B=()=>(D.jump(),j=void 0,E.scrollTop=E.scrollHeight,z());async function U(e){O=!0;let t=await de(p,r,e,e=>(J(e),Y(e))).finally(()=>O=!1),n=m.get(e);if(A===e){if(!t||!n)return B();D.hold(),j=n,n.scrollIntoView({block:`center`}),a(n,`lit`),clearTimeout(M),M=window.setTimeout(()=>(j=void 0,n.classList.remove(`lit`)),2e3),z()}}let W=()=>A?void U(A):B(),G=(e,t,n,i)=>{e.disabled=!0,r.entry(n).then(n=>{let r=n&&i(n);if(r===void 0)return void(e.textContent=V());t.textContent=r,e.remove()},()=>e.textContent=V())};function K(e,i=0){if(!i||!r.pic)return null;let a=Array.from({length:i},(t,n)=>r.pic(e,n));return t(`div`,{class:`pics`},...a.map((e,r)=>{let i=t(`img`,{src:e,alt:_({n:r+1}),loading:`lazy`,decoding:`async`}),o=t(`button`,{type:`button`,class:`pic`,"aria-label":oe({n:r+1})},i);return i.addEventListener(`error`,()=>o.replaceWith(t(`em`,{class:`pic-gone`},v()))),o.addEventListener(`click`,()=>void n(async()=>{let{lightbox:e}=await import(`./lightbox-Dt6sU9So.js`);return{lightbox:e}},__vite__mapDeps([0]),import.meta.url).then(({lightbox:e})=>e(a,r))),o}))}function _e(e,n){let r=p.result(e.id),i=t(`pre`,{class:`out`},r?.text??``),a=t(`pre`,{class:`args`},e.args??``),o=e.cut?t(`button`,{class:`more`,type:`button`},R()):null;o?.addEventListener(`click`,()=>G(o,a,n,t=>(e=>e&&`${e.args??``}${e.cut?`\n${ee()}`:``}`)(t.tools?.find(t=>t.id===e.id))));let s=r?.more?t(`button`,{class:`more`,type:`button`},L({size:me(r.bytes??0)})):null;s?.addEventListener(`click`,()=>G(s,i,r.id,e=>e.text));let c=e.name===`show_doc`&&d?t(`button`,{class:`more open`,type:`button`,hidden:``},ae()):null;c?.addEventListener(`click`,t=>(t.preventDefault(),e.summary.split(`, `).forEach(e=>d?.(e)?.()))),c&&h.add({paths:e.summary.split(`, `),button:c}),c&&queueMicrotask(g);let l=t(`details`,{class:`act`},t(`summary`,{"data-mark":r?r.isError?`error`:`done`:`working`},t(`b`,{class:`badge`}),t(`code`,null,e.name),t(`span`,{class:`sum`},e.summary),c),a,o,r&&t(`div`,{class:`result`},r.images?t(`em`,null,ne({count:r.images})):null,i,s)),u=r&&K(r.id,r.images);return u?[l,u]:[l]}function q(e){let n=t(`time`,null,pe(e.at));switch(e.kind){case`user`:return t(`article`,{class:`tx you`},t(`header`,null,n,t(`b`,null,le()),H(`user`)),t(`div`,{class:`bubble`},...ge(e.text??``),K(e.id,e.images)));case`assistant`:{let r=i(),a=t(`pre`,{class:`thought-text`}),c=e.thought?t(`button`,{class:`thought`,type:`button`},e.thought<0?ce():se({count:e.thought.toLocaleString()})):null;return e.thought&&e.thought>0&&c?.addEventListener(`click`,()=>G(c,a,e.id,e=>e.thoughtText)),t(`article`,{class:`tx in`},H(r.role),t(`div`,{class:`tx-body`},t(`header`,null,t(`b`,null,r.name),e.model?t(`span`,null,e.model):null,n,e.stop?t(`span`,{class:`stop`,"data-mark":`error`},e.stop):null),c,a,e.text?t(`div`,{class:`md`},s(o(e.text))):null,e.error?t(`p`,{class:`fault`},e.error):null,...(e.tools??[]).flatMap(t=>_e(t,e.id))))}case`bash`:return t(`article`,{class:`tx sys`},t(`details`,{class:`act`},t(`summary`,{"data-mark":e.exit?`error`:`done`},t(`b`,{class:`badge`}),t(`code`,null,`shell`),t(`span`,{class:`sum`},`! ${e.command}`),e.exit?t(`span`,{class:`stop`,"data-mark":`error`},te({code:e.exit})):null),e.text?t(`pre`,{class:`out`},e.text):null));case`notice`:return t(`article`,{class:`tx sys`},t(`details`,{class:`notice`},t(`summary`,null,H(`comms`),t(`em`,null,re()),he[e.type??``]?.()??e.type??ie(),` `,e.from&&u(e.from)||(e.from??``),n),t(`pre`,null,e.text??``)));case`divider`:return t(`article`,{class:`tx rule`},t(`details`,null,t(`summary`,null,e.type===`compaction`?f({tokens:(e.tokens??0).toLocaleString()}):c()),t(`pre`,null,e.text??``)));default:return t(`article`,{class:`tx note`},e.text??``,` `,n)}}function J(e){e.rebuild&&(m.clear(),y.replaceChildren());for(let t of e.dropped)m.get(t)?.remove(),m.delete(t);let t=e.added.map(e=>(m.set(e.id,q(e)),m.get(e.id)));e.front?y.prepend(...t):y.append(...t),k&&!e.front&&!e.rebuild&&t.forEach(e=>(e.classList.add(`fresh`),e.dataset.born=String(Date.now()))),w.remove(),p.items.length||y.append(w),b.hidden=!p.before}let Y=e=>e.touched.forEach(e=>{let t=m.get(e),n=p.items.find(t=>t.id===e);if(t&&n){let r=q(n);t.classList.contains(`fresh`)&&Date.now()-Number(t.dataset.born??0)<400&&r.classList.add(`fresh`),t.replaceWith(r),m.set(e,r)}}),X=async()=>{if(!O&&p.before&&k){O=!0;try{let e=E.scrollHeight,t=p.prepend(await r.older(p.before));J(t),Y(t),E.scrollTop+=E.scrollHeight-e}finally{O=!1}p.before&&E.clientHeight&&b.getBoundingClientRect().bottom>=E.getBoundingClientRect().top&&X()}};C.addEventListener(`click`,()=>{A=void 0,p.detached?r.latest().then(e=>(J(p.reset(e)),B())):B()});let Z=[new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&void X(),{root:E}),new IntersectionObserver(e=>E.clientHeight&&(D.scrolled(e.at(-1).isIntersecting),z()),{root:E,rootMargin:`0px 0px 67px`})],Q,ve=()=>(Q??(Z[0].observe(b),Z[1].observe(S)),clearTimeout(Q),Q=setTimeout(()=>(Q=void 0,Z.forEach(e=>e.disconnect())),600));E.addEventListener(`scroll`,()=>(ve(),!N&&P!==void 0&&I()),{passive:!0}),E.addEventListener(`touchstart`,()=>(N=!0,clearTimeout(P),P=void 0),{passive:!0});for(let e of[`touchend`,`touchcancel`])E.addEventListener(e,()=>(N=!1,I()),{passive:!0});for(let e of[`wheel`,`touchstart`,`pointerdown`,`keydown`])E.addEventListener(e,()=>j=A=void 0,{passive:!0});let $=new ResizeObserver(()=>F()?void 0:D.pinned&&!p.detached?E.scrollTop=E.scrollHeight:j?.scrollIntoView({block:`center`}));return $.observe(y),$.observe(E),{log:E,docs:g,apply(e){if(e.reset)J(p.reset({items:e.items??[],before:e.before})),k=!0,W();else if(e.items?.length){let t=p.append(e.items);J(t),Y(t),D.arrived(t.added.length)&&!p.detached&&!F()?B():z()}},reveal(e){A=e,k&&W()},setLive(e,n){x.dataset.mark=n,x.lastChild?.textContent!==e&&x.replaceChildren(...e?[t(`b`,{class:`badge`}),t(`span`,null,e)]:[])}}}export{U as mountChat,_ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={},t=[`en`,`zh-TW`],n=`PARAGLIDE_LOCALE`,r=[`baseLocale`],i=[],a=typeof window>`u`;globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};var o=!1,s=()=>{let e=r;!a&&typeof window<`u`&&window.location?.href&&(e=ue(window.location.href));let t=c(e,typeof window<`u`?window.location?.href:void 0);if(t)return o||(o=!0,d(t,{reload:!1})),t;throw Error(`No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found`)};function c(e,t){let n;for(let t of e){if(t===`baseLocale`)n=`en`;else if(de(t)&&_.has(t)){let e=_.get(t);if(e){let t=e.getLocale();if(t instanceof Promise)continue;if(t!==void 0)return m(t)}}let e=p(n);if(e)return e}}var l=e=>{s=e},u=e=>{e?window.location.href=e:window.location.reload()},d=(e,t)=>{let n={reload:!0,...t},i;try{i=s()}catch{}let o=[],c=r;!a&&typeof window<`u`&&window.location?.href&&(c=ue(window.location.href));for(let t of c)if(t===`baseLocale`)continue;else if(de(t)&&_.has(t)){let n=_.get(t);if(n){let r=n.setLocale(e);r instanceof Promise&&(r=r.catch(e=>{throw Error(`Custom strategy "${t}" setLocale failed.`,{cause:e})}),o.push(r))}}let l=()=>{!a&&n.reload&&window.location&&e!==i&&u(void 0)};if(o.length)return Promise.all(o).then(()=>{l()});l()},f=()=>typeof window<`u`?window.location.origin:`http://fallback.com`;function p(e){if(typeof e!=`string`)return;let n=e.toLowerCase();for(let e of t)if(e.toLowerCase()===n)return e}function m(e){let n=p(e);if(n)return n;throw Error(`Invalid locale: ${e}. Expected one of: ${t.join(`, `)}`)}function h(e){return e}function g(t,n){return new e(t,n.href)}function ee(){return 0}function te(e){return i}function ne(e,t){return e.exec(t.href)}var re=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);RegExp(`(?:^|;\\s*)${re}=([^;]*)`);function ie(e){return ae(e)}function ae(e){let t=h(typeof e==`string`?new URL(e,f()):new URL(e.href)),n=t.pathname.replace(/^\/+/,``).split(`/`);return n.length>0&&p(n[0])&&(t.pathname=`/`+n.slice(1).join(`/`)),h(t)}var oe=-1,se,ce;function le(e){if(i.length===0)return;let t=typeof e==`string`?e:e.href,n=ee();if(se===t&&oe===n)return ce;let r=h(new URL(t,`http://example.com`)),a=ie(r),o=a.href===r.href?[r]:[r,a],s;for(let e of o){for(let t of te(e))if(ne(g(t.match,e),e)){s=t;break}if(s)break}return oe=n,se=t,ce=s,s}function ue(e){let t=le(e);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:r}var _=new Map;function de(e){return typeof e==`string`&&/^custom-[A-Za-z0-9_-]+$/.test(e)}var fe=((e={},t={})=>(t.locale??s())===`zh-TW`?`警示`:`Alerts`),pe=((e={},t={})=>(t.locale??s())===`zh-TW`?`所有基地`:`all bases`),me=((e={},t={})=>(t.locale??s())===`zh-TW`?``:`.`),he=((e={},t={})=>(t.locale??s())===`zh-TW`?`最後更新:`:`Last update`),ge=e=>`Disconnected. Gave up after ${e?.tries} tries; it reconnects when you return to this tab.`,_e=e=>`連線中斷。重試 ${e?.tries} 次後放棄;回到此分頁時會重新連線。`,ve=((e,t={})=>(t.locale??s())===`zh-TW`?_e(e):ge(e)),ye=e=>`The server is up but cannot read the net: ${e?.problem}`,be=e=>`伺服器正常,但讀不到網:${e?.problem}`,xe=((e,t={})=>(t.locale??s())===`zh-TW`?be(e):ye(e)),Se=((e={},t={})=>(t.locale??s())===`zh-TW`?`與稻草網的連線中斷,正在重新連線…畫面顯示的是最後已知狀態。`:`Disconnected from the straw net. Reconnecting… The view shows the last known state.`),Ce=e=>`Disconnected from the straw net. Reconnecting (try ${e?.attempt})… The view shows the last known state.`,we=e=>`與稻草網的連線中斷,正在重新連線(第 ${e?.attempt} 次)…畫面顯示的是最後已知狀態。`,Te=((e,t={})=>(t.locale??s())===`zh-TW`?we(e):Ce(e)),Ee=((e={},t={})=>(t.locale??s())===`zh-TW`?`Straw Net:所有基地`:`Straw Net: all bases`),De=((e={},t={})=>(t.locale??s())===`zh-TW`?`取消`:`Cancel`),Oe=((e={},t={})=>(t.locale??s())===`zh-TW`?`關閉`:`Close`),ke=e=>`Quit base ${e?.name}`,Ae=e=>`關掉基地 ${e?.name}`,je=((e,t={})=>(t.locale??s())===`zh-TW`?Ae(e):ke(e)),Me=e=>`Quit base ${e?.name}? Every agent in it and its tower quit.`,Ne=e=>`要關掉基地 ${e?.name} 嗎?裡面所有 agent 和塔台都會退出。`,Pe=((e,t={})=>(t.locale??s())===`zh-TW`?Ne(e):Me(e)),Fe=e=>`Quit squad ${e?.name}`,Ie=e=>`關掉小隊 ${e?.name}`,Le=((e,t={})=>(t.locale??s())===`zh-TW`?Ie(e):Fe(e)),Re=e=>`Quit squad ${e?.name}? Every agent in it quits.`,ze=e=>`要關掉小隊 ${e?.name} 嗎?裡面所有 agent 都會退出。`,Be=((e,t={})=>(t.locale??s())===`zh-TW`?ze(e):Re(e)),Ve=e=>`Quit the tower ${e?.name}? The base's mains become members again.`,He=e=>`要關掉塔台 ${e?.name} 嗎?這個基地的主智慧體都會降格成成員。`,Ue=((e,t={})=>(t.locale??s())===`zh-TW`?He(e):Ve(e)),We=e=>`Quit ${e?.name}`,Ge=e=>`關掉 ${e?.name}`,Ke=((e,t={})=>(t.locale??s())===`zh-TW`?Ge(e):We(e)),qe=e=>`Quit ${e?.name}? It quits pi and its pane closes.`,Je=e=>`要關掉 ${e?.name} 嗎?它會退出 pi,窗格也會關掉。`,Ye=((e,t={})=>(t.locale??s())===`zh-TW`?Je(e):qe(e)),Xe=e=>`control tower · ${e?.state}`,Ze=e=>`塔台 · ${e?.state}`,Qe=((e,t={})=>(t.locale??s())===`zh-TW`?Ze(e):Xe(e)),$e=((e={},t={})=>(t.locale??s())===`zh-TW`?`圖示來自 game-icons.net(Lorc、Delapouite),CC BY 3.0。`:`Icons from game-icons.net by Lorc and Delapouite, CC BY 3.0.`),et=((e={},t={})=>(t.locale??s())===`zh-TW`?`移除`:`Dismiss`),tt=e=>`Dismiss ${e?.name}`,nt=e=>`從畫面移除 ${e?.name}`,rt=((e,t={})=>(t.locale??s())===`zh-TW`?nt(e):tt(e)),it=((e={},t={})=>(t.locale??s())===`zh-TW`?`文件`:`Documents`),at=((e={},t={})=>(t.locale??s())===`zh-TW`?`總塔台`:`head tower`),ot=((e={},t={})=>(t.locale??s())===`zh-TW`?`語言`:`Language`),st=((e={},t={})=>(t.locale??s())===`zh-TW`?`連線中`:`connecting`),ct=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時`:`live`),lt=((e={},t={})=>(t.locale??s())===`zh-TW`?`離線`:`offline`),ut=((e={},t={})=>(t.locale??s())===`zh-TW`?`重新連線中`:`reconnecting`),dt=((e={},t={})=>(t.locale??s())===`zh-TW`?`正體中文`:`English`),ft=((e={},t={})=>(t.locale??s())===`zh-TW`?`位置`:`Location`),pt=e=>`${e?.name} finished`,mt=e=>`${e?.name} 已完成`,ht=((e,t={})=>(t.locale??s())===`zh-TW`?mt(e):pt(e)),gt=e=>`${e?.name} hit an error`,_t=e=>`${e?.name} 發生錯誤`,vt=((e,t={})=>(t.locale??s())===`zh-TW`?_t(e):gt(e)),yt=e=>`${e?.name} went idle`,bt=e=>`${e?.name} 轉為閒置`,xt=((e,t={})=>(t.locale??s())===`zh-TW`?bt(e):yt(e)),St=e=>`${e?.name} joined`,Ct=e=>`${e?.name} 加入`,wt=((e,t={})=>(t.locale??s())===`zh-TW`?Ct(e):St(e)),Tt=e=>`${e?.name} left`,Et=e=>`${e?.name} 離開`,Dt=((e,t={})=>(t.locale??s())===`zh-TW`?Et(e):Tt(e)),Ot=e=>`${e?.name} lost its status`,kt=e=>`${e?.name} 失去狀態`,At=((e,t={})=>(t.locale??s())===`zh-TW`?kt(e):Ot(e)),jt=e=>`${e?.name} is waiting on a question`,Mt=e=>`${e?.name} 正在等待回答`,Nt=((e,t={})=>(t.locale??s())===`zh-TW`?Mt(e):jt(e)),Pt=e=>`${e?.name} started working`,Ft=e=>`${e?.name} 開始工作`,It=((e,t={})=>(t.locale??s())===`zh-TW`?Ft(e):Pt(e)),v=((e={},t={})=>(t.locale??s())===`zh-TW`?`已完成`:`finished`),Lt=((e={},t={})=>(t.locale??s())===`zh-TW`?`錯誤`:`error`),y=((e={},t={})=>(t.locale??s())===`zh-TW`?`閒置`:`idle`),Rt=((e={},t={})=>(t.locale??s())===`zh-TW`?`無狀態`:`no status`),b=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待回答`:`waiting on a question`),zt=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`working`),Bt=e=>`Monitor failed: ${e?.what}`,Vt=e=>`Monitor 出錯:${e?.what}`,Ht=((e,t={})=>(t.locale??s())===`zh-TW`?Vt(e):Bt(e)),Ut=e=>`Monitor went quiet and stopped: ${e?.what}`,Wt=e=>`Monitor 太久沒輸出,已停止:${e?.what}`,Gt=((e,t={})=>(t.locale??s())===`zh-TW`?Wt(e):Ut(e)),Kt=((e={},t={})=>(t.locale??s(),`Logs`)),qt=((e={},t={})=>(t.locale??s())===`zh-TW`?`從未`:`never`),Jt=((e={},t={})=>(t.locale??s())===`zh-TW`?`+新基地`:`+ New base`),Yt=((e={},t={})=>(t.locale??s())===`zh-TW`?`沒有執行中的智慧體`:`no agent running`),Xt=((e={},t={})=>(t.locale??s())===`zh-TW`?`無警示`:`no alerts`),Zt=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器沒有回應。`:`The server did not answer.`),Qt=((e={},t={})=>(t.locale??s())===`zh-TW`?`尚無塔台`:`no tower yet`),$t=((e={},t={})=>(t.locale??s())===`zh-TW`?`監看中`:`Watching a monitor`),en=((e={},t={})=>(t.locale??s())===`zh-TW`?`思考中`:`thinking`),tn=e=>`Finished ${e?.note}`,nn=e=>`完成了 ${e?.note}`,rn=((e,t={})=>(t.locale??s())===`zh-TW`?nn(e):tn(e)),an=e=>`Failed ${e?.note}`,on=e=>`出錯了 ${e?.note}`,sn=((e,t={})=>(t.locale??s())===`zh-TW`?on(e):an(e)),cn=e=>`Waiting on you ${e?.note}`,ln=e=>`等你回答 ${e?.note}`,un=((e,t={})=>(t.locale??s())===`zh-TW`?ln(e):cn(e)),dn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+主智慧體`:`+ Main`),fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+成員`:`+ Member`),pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`Outposts`),mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`手機`:`Phone`),hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`透過 Tailscale 配對手機`:`Pair a phone over Tailscale`),gn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器送來的快照,頁面無法讀取`:`the server sent a snapshot the page cannot read`),_n=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器回報了頁面無法讀取的問題`:`the server reported a problem the page cannot read`),x=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉`:`Quit`),vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉塔台`:`Quit tower`),yn=e=>`Refused (${e?.status}).`,bn=e=>`已拒絕(${e?.status})。`,S=((e,t={})=>(t.locale??s())===`zh-TW`?bn(e):yn(e)),xn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒`:`Remind`),Sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`點一下允許瀏覽器通知`:`Press to allow browser notifications`),Cn=((e={},t={})=>(t.locale??s())===`zh-TW`?`瀏覽器已封鎖通知,要到網站設定裡允許`:`The browser blocks notifications; allow them in the site settings`),wn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已關`:`Reminders off`),Tn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已開:分頁不在前景時,單位等你回答、完成或出錯會跳系統通知`:`Reminders on: while the page is in the background, a unit waiting on you, finishing, or failing raises a system notification`),En=((e={},t={})=>(t.locale??s())===`zh-TW`?`這個瀏覽器不支援通知`:`This browser has no notifications`),Dn=((e={},t={})=>(t.locale??s())===`zh-TW`?`主智慧體`:`main`),On=((e={},t={})=>(t.locale??s())===`zh-TW`?`成員`:`member`),kn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`outpost`),An=((e={},t={})=>(t.locale??s())===`zh-TW`?`未編入`:`unaligned`),jn=((e={},t={})=>(t.locale??s(),`session`)),Mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`子智慧體`:`subagent`),Nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`塔台`:`tower`),Pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效`:`Sound`),Fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已關`:`Sounds off`),In=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已開`:`Sounds on`),Ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效:開關、音量與試聽`:`Sounds: on or off, volume, and a try`),Rn=((e={},t={})=>(t.locale??s())===`zh-TW`?`▶ 試聽`:`▶ Try`),zn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音量`:`Volume`),Bn=((e={},t={})=>(t.locale??s())===`zh-TW`?`智慧體`:`Agents`),Vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`基地`:`Bases`),Hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待中`:`Waiting`),Un=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`Working`),Wn=((e={},t={})=>(t.locale??s())===`zh-TW`?`狀態`:`States`),Gn=e=>`tab ${e?.label}`,Kn=e=>`分頁 ${e?.label}`,qn=((e,t={})=>(t.locale??s())===`zh-TW`?Kn(e):Gn(e)),Jn=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時網況 · 通訊`:`live net · comms`),Yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`網的總計`:`Net totals`),Xn=e=>`${e?.label} tower`,Zn=e=>`${e?.label} 塔台`,Qn=((e,t={})=>(t.locale??s())===`zh-TW`?Zn(e):Xn(e)),$n=e=>`using ${e?.tool}`,er=e=>`使用 ${e?.tool}`,tr=((e,t={})=>(t.locale??s())===`zh-TW`?er(e):$n(e)),nr=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待變化…`:`Waiting for changes…`),rr=`sb-locale`;function ir(e){let t=/^zh\b/i.test(e)&&(/-(hant|tw|hk|mo)\b/i.test(e)?`zh-TW`:/-(hans|cn|sg|my)\b/i.test(e)?`zh-CN`:void 0);return p(e)??(t?p(t):void 0)??p(e.split(`-`)[0])}function ar(e,t){return p(e)??t.map(ir).find(Boolean)??`en`}var or={brand_label:Ee,tagline:Jn,totals_label:Yn,stat_bases:Vn,stat_agents:Bn,stat_working:Un,stat_waiting:Hn,alerts:fe,no_alerts:Xt,pair_button:mn,pair_title:hn,link_connecting:st,location:ft,all_bases:pe,documents:it,net_log:Kt,states:Wn,mark_working:zt,mark_waiting:b,mark_idle:y,mark_done:v,mark_error:Lt,credit:$e,language:ot,waiting_changes:nr,new_base:Jt};Object.keys(or);function sr(){let e=null;try{e=localStorage.getItem(rr)}catch{}let n=ar(e,navigator.languages??[navigator.language]);l(()=>n),document.documentElement.lang=n;let r={m:(e,t)=>e.textContent=t,mLabel:(e,t)=>e.setAttribute(`aria-label`,t),mTitle:(e,t)=>e.title=t,mEmpty:(e,t)=>e.dataset.empty=t};for(let e of document.querySelectorAll(`[data-m], [data-m-label], [data-m-title], [data-m-empty]`))for(let[t,n]of Object.entries(r))e.dataset[t]&&n(e,or[e.dataset[t]]?.()??e.dataset[t]);let i=document.getElementById(`lang`);i.replaceChildren(...t.map(e=>new Option(dt({},{locale:e}),e,!1,e===n))),i.onchange=()=>{try{localStorage.setItem(rr,i.value),location.reload()}catch{i.value=n}}}var cr={working:It,waiting:Nt,idle:xt,done:ht,error:vt,unknown:At};function lr(e){let t=new Map;for(let n of e.bases){n.tower&&t.set(`tower:${n.id}`,{name:Qn({label:n.label}),mark:n.tower.mark});for(let e of n.tabs.flatMap(e=>e.units))for(let n of[e,...e.subs])t.set(n.id,{name:n.name,mark:n.mark});for(let e of n.outposts)t.set(e.id,{name:e.label,mark:e.mark})}return t}function ur(e,t){if(!e)return[];let[n,r]=[lr(e),lr(t)],i=[];for(let[e,t]of r){let r=n.get(e);r?r.mark!==t.mark&&i.push({text:cr[t.mark]({name:t.name}),mark:t.mark}):i.push({text:wt({name:t.name}),mark:t.mark})}for(let[e,t]of n)r.has(e)||i.push({text:Dt({name:t.name}),mark:`idle`});return i}var dr=e=>e.unit??e.key,fr=e=>e===`waiting`||e===`error`?0:1;function pr(e,t){let n=new Map;for(let r of e.bases)for(let e of[...r.tower?[{...r.tower,role:`tower`}]:[],...[...r.tabs.flatMap(e=>e.units),...r.outside].flatMap(e=>[e,...e.subs])]){n.set(e.key,{key:e.key,ws:r.id,name:e.name,role:e.role,mark:e.mark,note:e.note,at:t,pending:e.pending,closed:!e.control||!!e.ended});for(let i of e.monitors??[])(i.status===`error`||i.status===`stale`)&&(a=>n.set(a,{key:a,unit:e.key,ws:r.id,name:e.name,role:e.role,mark:`error`,note:`monitor:${i.status}:${i.what}`,at:t}))(`${e.key}\u001fmonitor:${i.id}:${i.at}`)}return n}function mr(e,t){return[...t.values()].filter(t=>e?.get(t.key)?.mark!==t.mark&&(fr(t.mark)===0||e!==void 0&&t.mark===`done`))}var hr=`input, textarea, select, [role=textbox], [role=combobox], [role=listbox], .term-scroll`,gr=`button, a, summary, [role=button], [role=link]`,_r=`.ask-opt, [role=radio], [role=checkbox]`,vr=`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`;function yr(e,t,n=!1){if(t||e.defaultPrevented||e.isComposing||e.ctrlKey||e.altKey||e.metaKey)return;let r=e.target;if(!(r?.isContentEditable||r?.closest?.(hr))){if(e.key===`f`||e.key===`F`)return`zoom`;if(e.key===` `&&!r?.closest?.(_r)&&(n||!r?.closest?.(gr)))return`next`}}function br(e,t=()=>document.querySelector(vr)!==null,n=window){let r,i=!1,a=null;n.addEventListener(`pointerdown`,()=>i=!0,!0),n.addEventListener(`focusin`,e=>a=i?e.target:null,!0),n.addEventListener(`keydown`,n=>{let o=n.target===a;i=!1;let s=yr(n,t(),o);if(s){if(n.repeat)return r===s?n.preventDefault():void 0;e(s)&&(r=s,n.preventDefault())}}),n.addEventListener(`keyup`,e=>{r===`next`&&e.key===` `&&e.preventDefault(),r=void 0})}var xr=3e4,Sr=[`pointermove`,`pointerdown`,`keydown`,`wheel`,`touchstart`];function Cr(e=document.documentElement){if(matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=Date.now(),n,r=()=>{let i=t+xr-Date.now();i>0?n=setTimeout(r,i):(n=void 0,e.toggleAttribute(`data-calm`,!0))},i=()=>{t=Date.now(),n===void 0&&(e.toggleAttribute(`data-calm`,!1),n=setTimeout(r,xr))};for(let e of Sr)addEventListener(e,i,{capture:!0,passive:!0});document.addEventListener(`visibilitychange`,()=>document.hidden||i()),i()}var wr=(...e)=>e.filter(e=>e!==!1&&e!=null),Tr=(e,t)=>(e.classList.add(t),e.classList.toggle(`flip`));function Er(e,t,...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t??{}))r.setAttribute(e,n);return r.append(...wr(...n)),r}function Dr({x1:e,y1:t,x2:n,y2:r,mid:i},a=64){let o=Array.from({length:201},(a,o)=>{let s=o/200,c=1-s;return[c**3*e+3*c*c*s*i+3*c*s*s*i+s**3*n,c**3*t+3*c*c*s*t+3*c*s*s*r+s**3*r]}),s=o.reduce((e,t,n)=>(e.push(n?e[n-1]+Math.hypot(t[0]-o[n-1][0],t[1]-o[n-1][1]):0),e),[]);return Array.from({length:a+1},(e,t)=>{let n=t/a*s.at(-1),r=Math.max(1,s.findIndex(e=>e>=n)),[i,c]=[o[r-1],o[r]],l=s[r]>s[r-1]?(n-s[r-1])/(s[r]-s[r-1]):0;return[i[0]+(c[0]-i[0])*l,i[1]+(c[1]-i[1])*l]})}function Or(e,t){if(t||!e.length)return[];let n=document.createElement(`style`);return n.textContent=e.map((e,t)=>`@keyframes pk${t}{${Dr(e).map(([e,t],n,r)=>`${(n/(r.length-1)*100).toFixed(2)}%{transform:translate(${e.toFixed(1)}px,${t.toFixed(1)}px)}`).join(``)}}`).join(``),[n,...e.map((e,t)=>(e=>(e.className=`packet`,e.style.animationName=`pk${t}`,e))(document.createElement(`i`)))]}var kr=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),Ar=function(e,t){return new URL(e,t).href},jr={},Mr=function(e){return e.pathname.endsWith(`.css`)},Nr=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},C=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Ar(t,n);let r=s(t),i=Mr(r);return Nr(jr,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:kr,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function w(e,t,n,r,i=!1){Object.assign(e.dataset,t),[e.hidden,e.textContent]=[i,n],r&&e.setAttribute(`aria-label`,r)}var Pr=(e,t)=>t.role===`subagent`&&t.ended&&t.key?w(e,{close:`dismiss`,key:t.key,name:t.name,role:t.role},et(),rt({name:t.name})):w(e,{close:`unit`,key:t.key??``,name:t.name,role:t.role},x(),Ke({name:t.name}),!(t.control&&t.key)||t.role===`subagent`),Fr=(e,t)=>w(e,{key:t?.key??``,name:t?.name??``,role:`tower`},vn(),void 0,!t?.control),Ir=(e,t)=>w(e,{ws:t.id,name:t.label},x(),je({name:t.label})),Lr=(e,t,n)=>w(e,{ws:t.id,name:n.label,tab:n.id},x(),Le({name:n.label})),T=(e,t)=>new Promise(n=>{let r=document.createElement(`dialog`),i=document.createElement(`p`),a=document.createElement(`div`),o=(e,t,i)=>Object.assign(document.createElement(`button`),{type:`button`,className:t,textContent:e,onclick:()=>(r.close(),n(i))});[r.className,i.textContent,a.className]=[`sheet`,e,`sheet-row`],a.append(...t?[o(De(),`later`,!1),o(t,`sheet-yes`,!0)]:[o(Oe(),`later`,!1)]),r.append(i,a),r.addEventListener(`close`,()=>(r.remove(),n(!1))),document.body.append(r),r.showModal()});function Rr(e,{route:t,net:n,go:r}){let i=t();if(i.view===`map`)return;if(e.close===`base`)return void(i.ws===e.ws&&r({view:`map`}));let a=e=>e.flatMap(e=>[e.key,...a(e.subs)]),o=e.close===`tab`&&i.ws===e.ws?n()?.bases.find(t=>t.id===e.ws)?.tabs.find(t=>t.id===e.tab):void 0;i.view===`session`&&(e.close===`unit`?i.key===e.key:o&&a(o.units).includes(i.key))&&r({view:`workspace`,ws:i.ws})}function zr(e){document.addEventListener(`click`,t=>{let n=t.target?.closest?.(`button[data-close]`),r=n?.dataset;if(n&&r){if(t.preventDefault(),r.close===`dismiss`)return void C(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:e})=>e(`dismiss`,{key:r.key})).then(e=>e.ok||T(e.body.reason??S({status:e.status})),()=>T(Zt()));T((r.close===`base`?Pe:r.close===`tab`?Be:r.role===`tower`?Ue:Ye)({name:r.name??``}),x()).then(t=>{t&&(n.toggleAttribute(`disabled`,!0),C(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:e})=>e(`close/${r.close}`,r.close===`unit`?{key:r.key}:{workspace:r.ws,...r.tab&&{tab:r.tab}})).then(t=>t.ok?Rr(r,e):T(t.body.reason??S({status:t.status})),()=>T(Zt())).finally(()=>n.toggleAttribute(`disabled`,!1)))})}})}var Br=e=>{try{return decodeURIComponent(e)}catch{return e}},E=e=>/^\.+$/.test(e)?e.replaceAll(`.`,`%2E`):encodeURIComponent(e);function D(e){let[t,n]=e.split(`#`)[0].split(`?`),[r,i,a,o]=t.replace(/^\/+|\/+$/g,``).split(`/`).map(Br);if(r!==`w`||!i)return{view:`map`};if(a!==`s`||!o)return{view:`workspace`,ws:i};let s=new URLSearchParams(n).get(`at`);return s?{view:`session`,ws:i,key:o,at:s}:{view:`session`,ws:i,key:o}}var O=e=>e.view===`map`?``:e.view===`workspace`?`w/${E(e.ws)}`:`w/${E(e.ws)}/s/${E(e.key)}${e.at?`?at=${encodeURIComponent(e.at)}`:``}`,Vr=e=>e.view===`session`?{view:`workspace`,ws:e.ws}:{view:`map`},k=e=>e.view===`session`?e.key:e.view===`workspace`?`w:${e.ws}`:null;function Hr(e,t=new URL(document.baseURI).pathname){let n=()=>D(location.pathname.slice(t.length)+location.search),r={route:n,href:e=>O(e)||`./`,go(n){let r=t+O(n);location.pathname+location.search!==r&&history.pushState(null,``,r),e(n)}};return addEventListener(`popstate`,()=>e(n())),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[data-route]`);!t||e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),r.go(D(t.getAttribute(`data-route`))))}),r}var Ur={main:`main`,member:`member`,subagent:`subagent`,outpost:`outpost`,outside:`outside`,tower:`tower`},A={working:zt,waiting:b,idle:y,done:v,error:Lt,unknown:Rt},Wr={main:Dn,member:On,subagent:Mn,tower:Nn,outpost:kn,outside:An,session:jn},Gr={thinking:en,"watching a monitor":$t,idle:y,"waiting on a question":b,finished:v},Kr=e=>Object.hasOwn(Wr,e)?Wr[e]():e,qr=e=>e===`waiting`||e===`error`,j=e=>{let t=new DOMParser().parseFromString(e.trim(),`text/html`).body.firstElementChild;if(!(t instanceof HTMLElement))throw Error(`bad template`);return document.importNode(t,!0)},M=(e,t)=>{let n=document.getElementById(e);if(!(n instanceof t))throw Error(`#${e} is missing from the page`);return n},N=(e,t,n)=>{let r=e.querySelector(t);r.textContent!==n&&(r.textContent=n)},P=(e,t)=>{if(e.dataset.mark===t)return;let n=e.dataset.mark!==void 0;e.dataset.mark=t,n&&Tr(e,`flash`)},Jr=e=>(t=>(e.slice(8,t)===`stale`?Gt:Ht)({what:e.slice(t+1)}))(e.indexOf(`:`,8)),F=(e,t)=>e?e.startsWith(`tool:`)?tr({tool:e.slice(5)}):e.startsWith(`monitor:`)?Jr(e):Object.hasOwn(Gr,e)?Gr[e]():e:A[t](),I=(e,t)=>{e.toggleAttribute(`hidden`,!t),t&&(e.setAttribute(`href`,O(t)||`./`),e.setAttribute(`data-route`,O(t)))},Yr=(e,t)=>{let n=t.getBoundingClientRect(),r=e.offsetWidth;e.style.top=`${n.bottom+8}px`,e.style.left=`${Math.max(8,Math.min(n.right-r,innerWidth-r-8))}px`},Xr=`<div class="plate"><i class="ring"></i><svg><use href="#i-main"/></svg><b class="badge"></b></div>`;function Zr(e,t,n,r){P(e,n);let i=e.querySelector(`use`),a=`#i-${Ur[t]??`member`}`,o=r?.filter(e=>e.onScreen).length;i.getAttribute(`href`)!==a&&i.setAttribute(`href`,a),o?e.dataset.docs=String(o):delete e.dataset.docs}function L(e,t,n,r){let i=new Map;for(let t of e.children)!t.classList.contains(`leaving`)&&t.dataset.key&&i.set(t.dataset.key,t);let a=e.firstElementChild;for(let o of t){let t=i.get(o.id);for(t||(t=n(o),t.dataset.key=o.id,t.classList.add(`enter`),setTimeout(()=>t.classList.remove(`enter`),600)),i.delete(o.id);a?.classList.contains(`leaving`);)a=a.nextElementSibling;t===a?a=a.nextElementSibling:e.insertBefore(t,a),r(t,o)}for(let e of i.values())e.classList.add(`leaving`),setTimeout(()=>e.remove(),400)}var R=()=>j(`<div class="unit"><div class="card"><a class="hit"></a>${Xr}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></div><button type="button" class="quit-btn" data-close="unit" hidden></button></div><div class="subs"></div></div>`);function z(e,t){let n=e.closest(`.base`)?.dataset.key,r=e.querySelector(`.hit`);I(r,t.key&&n?{view:`session`,ws:n,key:t.key}:void 0),r.setAttribute(`aria-label`,`${t.name}: ${F(t.note,t.mark)}`),r.toggleAttribute(`data-alert`,qr(t.mark)),P(e,t.mark),Zr(e.querySelector(`.plate`),t.role,t.mark,t.docs),N(e,`.name`,t.name),N(e,`.role`,Kr(t.role)),N(e,`.note`,F(t.note,t.mark)),Pr(e.querySelector(`:scope > .card > .quit-btn`),t),L(e.querySelector(`.subs`),t.subs??[],R,z)}function B(e,t,n){let r=t.tower?`main`:`member`;e.hidden=!!(n&&t.tower),e.dataset.open=r,e.dataset.ws=t.id,n&&(e.dataset.tab=n),e.textContent!==(r===`main`?dn():fn())&&(e.textContent=r===`main`?dn():fn())}var Qr=()=>j(`<section class="base"><header><div class="tower"><i class="sweep"></i><i class="pulse"></i><svg><use href="#i-tower"/></svg><b class="badge"></b></div><div class="title"><span class="crown"><svg><use href="#i-crown"/></svg>${at()}</span><h2><a class="enter-base"></a></h2><p></p><button type="button" class="quit-btn tower-quit" data-close="unit" hidden></button></div><button type="button" class="quit-btn" data-close="base"></button></header><div class="spawn-btns"><button type="button" class="pair-btn"></button></div><div class="tabs"></div><div class="outposts" data-label="${pn()}"></div></section>`);function $r(e,t){P(e,t.mark),e.classList.toggle(`head`,t.head);let n=e.querySelector(`.tower`);n.classList.toggle(`ghost`,!t.tower),P(n,t.tower?.mark??`unknown`),N(e,`h2 a`,t.label),I(e.querySelector(`h2 a`),{view:`workspace`,ws:t.id}),N(e,`.title p`,t.tower?Qe({state:A[t.tower.mark]()}):Qt()),B(e.querySelector(`.spawn-btns button`),t),Ir(e.querySelector(`header > .quit-btn`),t),Fr(e.querySelector(`.tower-quit`),t.tower),L(e.querySelector(`.tabs`),t.tabs,()=>j(`<div class="tab"><h3><span></span><button type="button" class="tab-add"></button><button type="button" class="quit-btn" data-close="tab"></button></h3><div class="units"></div></div>`),(e,n)=>{N(e,`h3 span`,qn({label:n.label})),Lr(e.querySelector(`.quit-btn`),t,n),B(e.querySelector(`.tab-add`),t,n.id),L(e.querySelector(`.units`),n.units,R,z)}),L(e.querySelector(`.outposts`),t.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?Yt():void 0})),R,z)}function ei(e,t,n,r){let i=[...e.querySelectorAll(`.base:not(.leaving) .tower`)],a=e.querySelector(`.base.head:not(.leaving) .tower`),o=e.getBoundingClientRect(),s=e=>{let t=e.getBoundingClientRect();return[Math.round(t.x+t.width/2-o.x),Math.round(t.y+t.height/2-o.y)]},c=a?i.filter(e=>e!==a):[],l=c.map(e=>{let[[t,n],[r,i]]=[s(a),s(e)];return{x1:t,y1:n,x2:r,y2:i,mid:Math.round((t+r)/2)}}),u=l.map(({x1:e,y1:t,x2:n,y2:r,mid:i})=>`M${e} ${t}C${i} ${t} ${i} ${r} ${n} ${r}`),d=u.join(`|`);t.dataset.sig!==d&&(t.dataset.sig=d,t.replaceChildren(...u.map(e=>(t=>(t.setAttribute(`class`,`wire`),t.setAttribute(`d`,e),t))(document.createElementNS(`http://www.w3.org/2000/svg`,`path`)))),n.replaceChildren(...Or(l,r))),n.querySelectorAll(`.packet`).forEach((e,t)=>e.toggleAttribute(`data-live`,a.dataset.mark===`working`||c[t].dataset.mark===`working`))}function ti(){let[e,t,n,r,i]=[M(`map`,HTMLElement),M(`bases`,HTMLElement),M(`links`,SVGSVGElement),M(`packets`,HTMLElement),M(`log`,HTMLElement)],a=matchMedia(`(prefers-reduced-motion: reduce)`).matches,o=()=>!e.hidden&&ei(e,n,r,a);return new ResizeObserver(o).observe(e),Cr(),{layout:o,stats(e){let t=e.bases.flatMap(e=>e.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]))),n=e=>String(t.filter(t=>!e||t.mark===e).length);for(let[t,r]of[[`s-bases`,String(e.bases.length)],[`s-agents`,n()],[`s-working`,n(`working`)],[`s-waiting`,n(`waiting`)]])M(t,HTMLElement).textContent=r},show(e){L(t,e.bases,Qr,$r),requestAnimationFrame(o)},log(e){let t=new Date().toLocaleTimeString([],{hour12:!1});for(let n of e){let e=j(`<li><span></span><time></time></li>`);e.dataset.mark=n.mark,N(e,`span`,n.text),N(e,`time`,t),i.prepend(e)}for(;i.children.length>12;)i.lastElementChild.remove()},pause(e){document.documentElement.classList.toggle(`paused`,e)}}}var ni=new URL(`done-jqKY4qf5.mp3`,import.meta.url).href,ri=new URL(`error-DdTLgPEw.mp3`,import.meta.url).href,ii={waiting:new URL(`waiting-DOg8-8gu.mp3`,import.meta.url).href,error:ri,done:ni},ai=e=>e.mark===`waiting`||e.pending?`waiting`:e.mark===`error`?`error`:e.mark===`done`?`done`:void 0,oi=(e,t)=>{try{return localStorage.getItem(e)??t}catch{return t}},si=(e,t)=>{try{localStorage.setItem(e,t)}catch{}};function ci(e){let t=e=>document.getElementById(e),n=t(`remind`),r=t(`sound`),i=t(`sound-pop`),a=t(`sound-on`),o=t(`sound-vol`),s=t(`sound-vol-out`),c=typeof Notification<`u`,l=oi(`sb.remind`,`1`)===`1`,u=oi(`sb.sound`,`0`)===`1`,d=Math.min(100,Math.max(0,Number(oi(`sb.volume`,`60`))||0)),f,p,m=new Map,h=()=>{let e=c?Notification.permission:`denied`;n.setAttribute(`aria-pressed`,String(l)),n.dataset.state=l?e===`granted`?`on`:e===`denied`?`blocked`:`ask`:`off`,n.title=c?l?e===`granted`?Tn():e===`denied`?Cn():Sn():wn():En(),r.dataset.state=u?`on`:`off`,r.setAttribute(`aria-label`,u?In():Fn()),a.checked=u,o.value=s.value=String(d),p&&(p.gain.value=(d/100)**2)};n.textContent=xn(),r.textContent=Pn(),r.title=Ln(),t(`sound-on-label`).textContent=Pn(),t(`sound-vol-label`).textContent=zn(),t(`sound-try`).textContent=Rn(),n.onclick=async()=>{l&&c&&Notification.permission==="default"?await Notification.requestPermission().catch(()=>{}):si(`sb.remind`,(l=!l)?`1`:`0`),h()},i.addEventListener(`toggle`,e=>e.newState===`open`&&Yr(i,r)),a.onchange=()=>{si(`sb.sound`,(u=a.checked)?`1`:`0`),h(),u&&g(`done`)},o.oninput=()=>(si(`sb.volume`,String(d=Number(o.value))),h()),o.onchange=()=>g(`done`),t(`sound-try`).onclick=()=>g(`done`);function g(e){f??=new AudioContext,p||((p=f.createGain()).connect(f.destination),h());let t=f,n=p;m.has(e)||m.set(e,fetch(ii[e]).then(e=>e.arrayBuffer()).then(e=>t.decodeAudioData(e))),Promise.all([t.resume(),m.get(e)]).then(([,e])=>{let r=t.createBufferSource();r.buffer=e,r.connect(n),r.start()}).catch(()=>m.delete(e))}return h(),{signal(t){let n=t.flatMap(e=>(t=>t?[{a:e,k:t}]:[])(ai(e)));if(n.length&&(u&&g([`waiting`,`error`,`done`].find(e=>n.some(t=>t.k===e))),l&&c&&Notification.permission===`granted`&&(document.hidden||!document.hasFocus())))for(let{a:t,k:r}of n){let n=new Notification(t.name,{body:{waiting:un,error:sn,done:rn}[r]({note:t.note??``}).trim(),tag:t.key,icon:document.querySelector(`link[rel="icon"]`)?.href});n.onclick=()=>(window.focus(),n.close(),e(t))}}}}var li=45e3,ui=1e3,di=3e4,fi=(e,t)=>Math.min(di,ui*2**(e-1))*(.8+.4*t);function pi(e){try{return JSON.parse(e)}catch{return}}function mi(e){let t,n,r,i=0,a={state:`connecting`,attempt:0},o=t=>e.onStatus(a={...a,...t}),s=()=>(e.clearTimeout(n),e.clearTimeout(r),n=r=void 0),c=()=>{let e=t;t=void 0,e?.close()},l=()=>{e.clearTimeout(r),r=e.setTimeout(()=>u(),li),o({state:`live`,attempt:0,lastContact:e.now()})},u=()=>{c(),s();let t=a.attempt+1;if(t>8)return o({state:`offline`,attempt:t});o({state:`reconnecting`,attempt:t}),e.hidden()||(n=e.setTimeout(d,fi(t,e.random())))},d=()=>{c(),s(),i=e.now();let n=t=e.open();n.onError(()=>t===n&&u()),n.listen(`message`,r=>{if(t!==n)return;let i=pi(r);i&&e.onNet(i),o({problem:i?void 0:gn()}),l()}),n.listen(`ping`,()=>t===n&&l()),n.listen(`problem`,e=>{t===n&&(o({problem:pi(e)??_n()}),l())}),r=e.setTimeout(()=>u(),li)};return{start(){o({state:`connecting`,attempt:0}),d()},resume(){let n=e.now()-i<2e3||a.lastContact!==void 0&&e.now()-a.lastContact<=2e4;t&&n||(o({attempt:0,state:a.state===`live`?`reconnecting`:a.state}),d())},restart:d,hide(){e.clearTimeout(n),n=void 0},stop(){c(),s()}}}sr();var V=ti(),H=e=>document.getElementById(e),hi=e=>e?new Date(e).toLocaleTimeString([],{hour12:!1}):qt(),gi,_i,U,W,vi={state:`connecting`,attempt:0},G={view:`map`},yi=!1,bi,xi=``,K,Si,q=e=>K?e(K):void Si?.then(e);function Ci(){Si??=C(async()=>{let{mountFocus:e}=await import(`./views-Bcg0APim.js`);return{mountFocus:e}},[],import.meta.url).then(({mountFocus:e})=>(K=e({data:zi,restart:()=>$.restart(),openTile:Ti,embedTerminal:(e,t,n)=>new Promise(r=>Y(i=>r(i.terminal.embed(e,t,n)))),online:()=>vi.state===`live`}),K.show(G,G),U&&K.net(U),K))}var J,wi,Y=e=>{if(J)return e(J);wi??=C(async()=>{let{mountPanels:e}=await import(`./layer-BCHLWC4K.js`);return{mountPanels:e}},[],import.meta.url).then(({mountPanels:e})=>J=e({label:e=>U?.bases.find(t=>t.id===e)?.label??e,recent:async e=>(await(Z?Z.data(e).latest():Ri(e,`?limit=12`))).items,post:e=>Z&&((t,n)=>Z.data(e).post(t,n)),stream:()=>xi,showTerminal:(e,t)=>(J?.stack.close(),K?.terminal(t),Q.go({view:`session`,ws:e,key:t}))})),wi.then(e)},Ti=(e,t)=>Y(n=>n.tiles.open(e,t)),X=document.querySelector(`link[rel="icon"]`),Ei=X&&decodeURIComponent(X.href.slice(X.href.indexOf(`,`)+1)),Di=0;function Oi(e){let t=e.bases.flatMap(e=>[...e.tower?[e.tower]:[],...[...e.tabs.flatMap(e=>e.units),...e.outside].flatMap(e=>[e,...e.subs])]).filter(e=>e.mark===`waiting`||e.pending).length;if(!X||!Ei||t===Di)return;Di=t;let n=`<circle cx='23' cy='9' r='9' fill='#ffd166' stroke='#0b1220' stroke-width='2'/><text x='23' y='13' text-anchor='middle' font-family='sans-serif' font-size='${t>9?9:12}' font-weight='700' fill='#06101e'>${t>9?`9+`:t}</text>`;X.href=`data:image/svg+xml,${encodeURIComponent(t?Ei.replace(`</svg>`,`${n}</svg>`):Ei)}`}var ki;function Ai(e){U=W=e,Oi(e);let t=pr(e,Date.now());if(ki&&Vi.signal(mr(ki,t)),ki=t,document.hidden)return;V.stats(e);let n=mr(bi,t);(n.length||J)&&Y(e=>e.alerts(n,t)),bi=t,V.log(ur(_i,e)),_i=e,q(t=>t.net(e)),G.view===`map`&&(V.show(e),gi=e,W=void 0)}function ji(e){let t=G,n=e.view===`workspace`&&t.view===`map`?document.querySelector(`#bases [data-key="${CSS.escape(e.ws)}"]`)?.getBoundingClientRect():void 0;G=e,e.view!==`map`&&Ci(),H(`map`).hidden=e.view!==`map`,H(`legend`).hidden=e.view===`session`,q(r=>r.show(e,t,n)),e.view===`map`&&U&&U!==gi&&(Ai(U),requestAnimationFrame(V.layout)),yi&&k(e)!==k(t)&&$.restart()}function Mi(e){vi=e;let t=e.state===`reconnecting`||e.state===`offline`;document.body.dataset.stale=H(`stage`).dataset.stale=String(t),H(`link`).dataset.state=e.state,H(`link-text`).textContent={connecting:st,live:ct,reconnecting:ut,offline:lt}[e.state](),K&&U&&K.net(U),J?.stack.redraw();let n=H(`banner`);n.hidden=!t&&!e.problem;let r=e.state===`offline`?ve({tries:e.attempt-1}):e.state===`reconnecting`?e.attempt?Te({attempt:e.attempt}):Se():xe({problem:e.problem??``}),i=document.createElement(`b`);i.textContent=hi(e.lastContact),n.replaceChildren(`${r} ${he()} `,i,me())}function Ni(e,t){try{let n=JSON.parse(t);q(t=>e===`history`?t.history(n):t.cards(n))}catch{}}var Pi=document.querySelector(`meta[name="sb-build"]`)?.content,Fi=e=>!!(Pi&&Pi!==JSON.parse(e).build);function Ii(e){let t=new EventSource(e?`events?watch=${encodeURIComponent(e)}`:`events`);return{onError:e=>t.onerror=e,listen:(e,n)=>t.addEventListener(e,e=>n(e.data)),close:()=>t.close()}}var Li=e=>fetch(`api/${e}`,{cache:`no-store`}).then(e=>e.ok?e.json():Promise.reject(Error(String(e.status)))),Ri=(e,t=``)=>Li(`history/${encodeURIComponent(e)}${t}`),Z=void 0,zi=e=>({older:t=>Ri(e,`?before=${encodeURIComponent(t)}`),latest:()=>Ri(e),entry:t=>Li(`entry/${encodeURIComponent(e)}/${encodeURIComponent(t)}`).catch(()=>void 0),pic:(t,n)=>`api/image/${encodeURIComponent(e)}/${encodeURIComponent(t)}/${n}`}),Bi=()=>{let e=Ii(k(G));return e.listen(`history`,e=>Ni(`history`,e)),e.listen(`cards`,e=>Ni(`cards`,e)),e.listen(`hello`,e=>Fi(e)?location.reload():(xi=e,J?.terminal.hello())),e.listen(`mirror`,e=>J?.terminal.frame(e)),e};document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[data-alert]`),n=t&&D(t.getAttribute(`data-route`)??``);if(!n||n.view!==`session`||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let r=bi?.get(n.key);r&&(e.preventDefault(),Y(e=>e.stack.show(r)))},!0);var Q=Hr(e=>ji(e)),Vi=ci(e=>Q.go({view:`session`,ws:e.ws,key:dr(e)})),$=mi({open:Bi,now:Date.now,setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),random:Math.random,hidden:()=>document.hidden,onNet:Ai,onStatus:Mi}),Hi=()=>$.resume();document.addEventListener(`visibilitychange`,()=>{if(V.pause(document.hidden),document.hidden)return $.hide();W&&Ai(W),q(e=>e.wake()),Hi()}),addEventListener(`keydown`,e=>{e.key!==`Escape`||e.defaultPrevented||document.querySelector(`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`)||(e.preventDefault(),!J?.stack.close()&&G.view!==`map`&&Q.go(Vr(G)))}),br(e=>J?.hotkey(e)??!1),H(`pair`).hidden=location.hostname!==`127.0.0.1`,H(`pair`).addEventListener(`click`,()=>void C(async()=>{let{pairTile:e}=await import(`./pair-BIsl9hN1.js`);return{pairTile:e}},[],import.meta.url).then(({pairTile:e})=>Ti(e(),!0))),zr({route:()=>G,net:()=>U,go:e=>Q.go(e)}),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`button[data-open]`);t&&C(async()=>{let{openingOf:e,spawnTile:t}=await import(`./spawn-CDSkJCMN.js`);return{openingOf:e,spawnTile:t}},[],import.meta.url).then(({openingOf:e,spawnTile:n})=>{let r=e(t,U?.bases??[]);r&&Ti(n(r,(e,t,n)=>(J?.tiles.close(n),Q.go({view:`session`,ws:e,key:t}))),!0)})});for(let e of[`focus`,`pageshow`,`online`])window.addEventListener(e,()=>!document.hidden&&Hi());Mi(vi),ji(Q.route()),$.start(),yi=!0;export{it as A,S as C,Xt as D,Zt as E,s as F,Oe as M,De as N,Yt as O,pe as P,Hn as S,Qt as T,Er as _,B as a,dr as b,Zr as c,P as d,Kr as f,C as g,qr as h,I as i,Qe as j,at as k,Yr as l,N as m,A as n,M as o,L as p,Xr as r,F as s,Ur as t,j as u,Tr as v,pn as w,Un as x,fr as y};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{t as e}from"./post-UHMNmNgA.js";import{a as t,r as n,t as r}from"./ask-
|
|
1
|
+
import{t as e}from"./post-UHMNmNgA.js";import{a as t,r as n,t as r}from"./ask-DIr7mep4.js";import{C as i,D as a,F as o,M as s,N as c,_ as l,b as u,c as d,d as f,f as p,i as m,l as h,m as g,o as _,p as v,r as y,s as b,u as x,v as S,y as C}from"./index-D-LVSW44.js";var w=e=>`Alerts: ${e?.tally} (Space opens the next)`,T=e=>`警示:${e?.tally}(空白鍵開下一則)`,E=((e,t={})=>(t.locale??o())===`zh-TW`?T(e):w(e)),D=e=>`Also queued: ${e?.tally}`,O=e=>`佇列中還有:${e?.tally}`,ee=((e,t={})=>(t.locale??o())===`zh-TW`?O(e):D(e)),te=((e={},t={})=>(t.locale??o())===`zh-TW`?`全部清除`:`Clear all`),k=((e={},t={})=>(t.locale??o())===`zh-TW`?`關閉文件`:`Close document`),A=e=>`Close ${e?.title}`,j=e=>`關閉 ${e?.title}`,ne=((e,t={})=>(t.locale??o())===`zh-TW`?j(e):A(e)),M=((e={},t={})=>(t.locale??o())===`zh-TW`?`連線中…`:`Connecting…`),N=((e={},t={})=>(t.locale??o())===`zh-TW`?`警示`:`alert`),re=((e={},t={})=>(t.locale??o())===`zh-TW`?`放大(F)`:`Enlarge (F)`),ie=((e={},t={})=>(t.locale??o())===`zh-TW`?`縮小(F)`:`Shrink (F)`),ae=((e={},t={})=>(t.locale??o())===`zh-TW`?`完成`:`Done`),P=((e={},t={})=>(t.locale??o())===`zh-TW`?`已完成的單位:點一列打開它的通訊並清掉,或全部清除`:`Finished units: a row opens its comms and clears it, or clear them all`),F=((e={},t={})=>(t.locale??o())===`zh-TW`?`符合寬度`:`Fit width`),oe=((e={},t={})=>(t.locale??o())===`zh-TW`?`無法取得紀錄。`:`History unavailable.`),I=((e={},t={})=>(t.locale??o())===`zh-TW`?`退格鍵`:`Backspace`),L=((e={},t={})=>(t.locale??o())===`zh-TW`?`下`:`Down`),R=((e={},t={})=>(t.locale??o(),`End`)),z=((e={},t={})=>(t.locale??o(),`Enter`)),B=((e={},t={})=>(t.locale??o(),`Escape`)),se=((e={},t={})=>(t.locale??o(),`Home`)),ce=((e={},t={})=>(t.locale??o())===`zh-TW`?`左`:`Left`),V=((e={},t={})=>(t.locale??o())===`zh-TW`?`下一頁`:`Page down`),H=((e={},t={})=>(t.locale??o())===`zh-TW`?`上一頁`:`Page up`),U=((e={},t={})=>(t.locale??o())===`zh-TW`?`右`:`Right`),W=((e={},t={})=>(t.locale??o(),`Shift+Tab`)),G=((e={},t={})=>(t.locale??o())===`zh-TW`?`空白鍵`:`Space`),le=((e={},t={})=>(t.locale??o(),`Tab`)),ue=((e={},t={})=>(t.locale??o())===`zh-TW`?`上`:`Up`),de=e=>`Keys for ${e?.name}`,fe=e=>`${e?.name} 的按鍵`,pe=((e,t={})=>(t.locale??o())===`zh-TW`?fe(e):de(e)),me=((e={},t={})=>(t.locale??o())===`zh-TW`?`最後一則通訊`:`Last transmission`),he=((e={},t={})=>(t.locale??o())===`zh-TW`?`稍後`:`Later`),ge=((e={},t={})=>(t.locale??o())===`zh-TW`?`已離開網`:`left the net`),_e=e=>`The mirror ended: ${e?.why}`,ve=e=>`鏡像已結束:${e?.why}`,ye=((e,t={})=>(t.locale??o())===`zh-TW`?ve(e):_e(e)),be=((e={},t={})=>(t.locale??o())===`zh-TW`?`等待輸入密碼時隱藏;請在終端機中輸入。`:`Hidden while it waits for a secret; type it in the terminal.`),xe=e=>`Live · ${e?.cols}×${e?.rows}`,Se=e=>`即時 · ${e?.cols}×${e?.rows}`,Ce=((e,t={})=>(t.locale??o())===`zh-TW`?Se(e):xe(e)),we=((e={},t={})=>(t.locale??o())===`zh-TW`?`還沒有訊息。`:`No messages yet.`),Te=((e={},t={})=>(t.locale??o())===`zh-TW`?`開啟通訊`:`Open comms`),Ee=((e={},t={})=>(t.locale??o())===`zh-TW`?`此分頁隱藏時暫停。`:`Paused while this tab is hidden.`),De=e=>`${e?.why} Open the terminal again to retry.`,Oe=e=>`${e?.why} 重新開啟終端機即可重試。`,ke=((e,t={})=>(t.locale??o())===`zh-TW`?Oe(e):De(e)),Ae=((e={},t={})=>(t.locale??o())===`zh-TW`?`送出 Enter`:`Send Enter`),je=((e={},t={})=>(t.locale??o())===`zh-TW`?`送出 Escape`:`Send Escape`),Me=e=>`Send ${e?.key}`,Ne=e=>`送出 ${e?.key}`,Pe=((e,t={})=>(t.locale??o())===`zh-TW`?Ne(e):Me(e)),Fe=((e={},t={})=>(t.locale??o())===`zh-TW`?`錯誤`:`error`),Ie=((e={},t={})=>(t.locale??o())===`zh-TW`?`已完成`:`finished`),Le=((e={},t={})=>(t.locale??o())===`zh-TW`?`已離開`:`gone`),Re=((e={},t={})=>(t.locale??o())===`zh-TW`?`提問`:`question`),ze=((e={},t={})=>(t.locale??o())===`zh-TW`?`更新`:`update`),Be=e=>`${e?.count} finished`,Ve=e=>`${e?.count} 個已完成`,He=((e,t={})=>(t.locale??o())===`zh-TW`?Ve(e):Be(e)),Ue=e=>{let n=t(`en`,e?.count,{},!0);return n===`one`?`${e?.count} needs you`:n===`other`?`${e?.count} need you`:`tally_need`},We=e=>`${e?.count} 個需要你`,Ge=((e,t={})=>(t.locale??o())===`zh-TW`?We(e):Ue(e)),Ke=e=>`Terminal of ${e?.name}, read only`,qe=e=>`${e?.name} 的終端機,唯讀`,Je=((e,t={})=>(t.locale??o())===`zh-TW`?qe(e):Ke(e)),Ye=e=>`Terminal · ${e?.name}`,Xe=e=>`終端機 · ${e?.name}`,Ze=((e,t={})=>(t.locale??o())===`zh-TW`?Xe(e):Ye(e)),Qe=((e={},t={})=>(t.locale??o())===`zh-TW`?`◉ 鍵盤直送中 · 點外面結束`:`◉ Keyboard goes to the pane · click outside to stop`),K=((e={},t={})=>(t.locale??o())===`zh-TW`?`點這裡後,鍵盤直接送進終端機(Ctrl、Alt、⌘ 組合鍵除外)`:`Click here and the keyboard goes straight to the terminal (except Ctrl, Alt, and ⌘ combinations)`),$e=((e={},t={})=>(t.locale??o())===`zh-TW`?`等待`:`waiting on`),et=[[[`esc`,`esc`,B],[`tab`,`tab`,le],[`up`,`↑`,ue],[`enter`,`enter`,z]],[[`shift+tab`,`⇧tab`,W],[`left`,`←`,ce],[`down`,`↓`,L],[`right`,`→`,U]],[[`space`,`space`,G],[`backspace`,`⌫`,I],[`home`,`home`,se],[`end`,`end`,R],[`pageup`,`pgup`,H],[`pagedown`,`pgdn`,V]]],tt=`123456789`.split(``),nt={ArrowUp:`up`,ArrowDown:`down`,ArrowLeft:`left`,ArrowRight:`right`,Enter:`enter`,Escape:`esc`,Backspace:`backspace`,Home:`home`,End:`end`,PageUp:`pageup`,PageDown:`pagedown`},rt=130,it=64,q=4e3,at=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.platform),ot=e=>e.split(`+`).map(e=>e.length===1?e.toUpperCase():e[0].toUpperCase()+e.slice(1)).join(`+`);function st({name:e,state:t,post:r,stream:a,blip:o}){let s=[],u=l(`p`,{class:`pad-note`,role:`status`}),d=!1,f=([e,t,n])=>{let r=l(`button`,{type:`button`,class:`pad-key`,"data-key":e,"aria-label":n()},t);return r.onclick=t=>t.isTrusted&&(v.push({key:e}),x()),s.push(r),r},p=l(`details`,{class:`pad-digits`},l(`summary`,null,`1–9`),l(`div`,{class:`pad-row`},...tt.map(e=>f([e,e,()=>e])))),m=l(`div`,{class:`pad`,role:`group`,"aria-label":pe({name:e})},...et.map(e=>l(`div`,{class:`pad-row`},...e.map(f))),p,u),h=(e,t=``)=>(u.dataset.tone=t,u.replaceChildren(e)),g=(e,t,n)=>{let r=l(`button`,{type:`button`,class:`pad-yes`},e===`enter`?Ae():e===`esc`?je():Pe({key:ot(e)})),i=l(`button`,{type:`button`,class:`cmp-link`},c());r.onclick=t=>t.isTrusted&&!d&&void _({key:e},n),i.onclick=()=>h(``),u.dataset.tone=`ask`,u.replaceChildren(l(`span`,null,t),r,i),i.focus()};async function _(e,t){d=!0,D(),h(``),y=Date.now();try{let n=await r(`keys`,{...e,stream:a(),...t?{confirmed:t}:{}});n.status===409&&n.body.error===`confirm`&&typeof n.body.confirm==`string`&&`key`in e?(v=[],g(e.key,String(n.body.reason??``),n.body.confirm)):n.ok||(v=[],h(n.body.reason??i({status:n.status}),`error`))}catch{v=[],h(n(),`error`)}finally{d=!1,D(),x()}}let v=[],y=0,b;function x(){if(d||b||!v.length)return;let e=y+rt-Date.now();if(e>0)return void(b=setTimeout(()=>(b=void 0,x()),e));_(v.shift())}let S=e=>{if(e.ctrlKey===e.altKey||e.shiftKey)return;let t=e.ctrlKey?`ctrl`:`alt`,n=/^Key([A-Z])$/.exec(e.code)?.[1].toLowerCase();if(at||t!==`ctrl`||n!==`v`&&(n!==`c`||getSelection()?.isCollapsed))return n?`${t}+${n}`:{Enter:t===`alt`?`alt+enter`:void 0,Backspace:t===`alt`?`alt+backspace`:void 0,ArrowLeft:`${t}+left`,ArrowRight:`${t}+right`}[e.key]},C=e=>(t=>t===`live`||t===`hidden`&&e===`esc`)(t());function w(e){if(e.metaKey||e.isComposing||e.key===`Process`)return!1;let t=e.ctrlKey||e.altKey?S(e):e.key===`Tab`?e.shiftKey?`shift+tab`:`tab`:e.key===`Delete`?`delete`:nt[e.key];return t?(!C(t)||e.repeat&&(v.length||![`up`,`down`,`left`,`right`,`backspace`,`delete`].includes(t))||(v.push({key:t}),o?.(),x()),!0):!1}function T(e){let t=[...e.replace(/[\u0000-\u001f\u007f-\u009f]/g,``)];if(t.length&&C()){for(let e of t){let t=v.at(-1);t&&`text`in t&&[...t.text].length<it?t.text+=e:v.push({text:e})}o?.(),x()}}function E(e){let t=[...e.replace(/\r\n?/g,`
|
|
2
2
|
`).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g,``)];if(t.length&&C()){for(let e=0;e<t.length;e+=q)v.push({paste:t.slice(e,e+q).join(``)});o?.(),x()}}function D(){let e=t();for(let t of s)t.disabled=e===`off`||e===`hidden`&&t.dataset.key!==`esc`}return D(),{el:m,update:D,type:w,text:T,paste:E}}var J=[0,95,135,175,215,255],ct=120,lt=5e3,ut=3e3,Y=e=>Number.isInteger(e)&&e>=0&&e<=255,dt=e=>Y(e)?e<16?e:e<232?`rgb(${J[Math.floor((e-16)/36)]},${J[Math.floor((e-16)/6)%6]},${J[(e-16)%6]})`:`rgb(${8+10*(e-232)},${8+10*(e-232)},${8+10*(e-232)})`:void 0,ft=([e,t,n])=>[e,t,n].every(e=>Y(e))?`rgb(${e},${t},${n})`:void 0;function pt(e,t){let n={...e},r=t.split(`;`);for(let e=0;e<r.length;e++){let t=r[e].split(`:`).map(e=>e===``?0:Number(e)),i=t[0];if(i===38||i===48||i===58){let a=t.length>1?t[1]:Number(r[e+1]),o=t.length>1?t.slice(2):r.slice(e+2,e+(a===5?3:5)).map(Number);t.length===1&&(e+=a===5?2:a===2?4:1);let s=a===5?dt(o[0]):a===2?ft(o.slice(-3)):void 0;s!==void 0&&i!==58&&(n[i===38?`fg`:`bg`]=s)}else if(i===0)for(let e of Object.keys(n))delete n[e];else i===1||i===2?n[i===1?`b`:`d`]=!0:i===22?n.b=n.d=!1:i===3||i===23?n.i=i===3:i===4||i===21||i===24?n.u=i!==24&&t[1]!==0:i===7||i===27?n.v=i===7:i===9||i===29?n.s=i===9:i>=30&&i<=37||i>=90&&i<=97?n.fg=i-(i<90?30:82):i>=40&&i<=47||i>=100&&i<=107?n.bg=i-(i<100?40:92):(i===39||i===49)&&delete n[i===39?`fg`:`bg`]}return n}function mt(e){let t=[],n={},r=0,i=e=>{let r=e.replace(/\x1b(\[[0-?]*[ -/]*[@-~]?)?|[\u0000-\u001f\u007f-\u009f]/g,``);if(!r)return;let[i,a]=n.v?[n.bg??`z`,n.fg??`z`]:[n.fg,n.bg],o=[typeof i==`number`||i===`z`?`c${i}`:``,typeof a==`number`||a===`z`?`k${a}`:``,...[`b`,`d`,`i`,`u`,`s`].filter(e=>n[e]).map(e=>`t${e}`)].filter(Boolean).join(` `);t.push({text:r,cls:o,...typeof i==`string`&&i!==`z`&&{fg:i},...typeof a==`string`&&a!==`z`&&{bg:a}})};for(let t of e.matchAll(/\x1b\[([0-9;:]{0,64})m/g))i(e.slice(r,t.index)),n=pt(n,t[1]),r=t.index+t[0].length;return i(e.slice(r)),t}function X(e,t){let n=Math.min(Math.max(0,Number(t.rows)||0),ct);for(;e.children.length<n;)e.append(l(`div`,{class:`tr`}));for(;e.children.length>n;)e.lastElementChild.remove();for(let[r,i]of Array.isArray(t.set)?t.set:[])!Number.isInteger(r)||r<0||r>=n||typeof i!=`string`||e.children[r].replaceChildren(...mt(i).map(e=>{if(!e.cls&&!e.fg&&!e.bg)return e.text;let t=l(`span`,e.cls?{class:e.cls}:null,e.text);return e.fg&&(t.style.color=e.fg),e.bg&&(t.style.backgroundColor=e.bg),t}))}function Z({tiles:e,post:t,stream:r,pad:a}){let o=new Map,s,c=()=>{try{return String(JSON.parse(r()).stream??``)}catch{return``}},u=(e,t,n=``)=>(e.pad?.update(),(e.state.textContent!==t||e.state.dataset.tone!==n)&&(e.state.dataset.tone=n,e.state.textContent=t)),d=(e,t)=>(e.ended=!0,u(e,ke({why:t}),`error`)),f=(e,t,r=c())=>r&&void(e.queue=e.queue.then(()=>e.post(`mirror`,{stream:r,on:t}).then(n=>t&&!n.ok&&d(e,n.body.reason??i({status:n.status})),()=>t&&d(e,n())))),p=(e,t=Math.max(e.cols,...[...e.box.children].map(e=>e.textContent?.length??0)))=>e.box.style.fontSize=e.fit.getAttribute(`aria-pressed`)===`true`&&t?`${Math.max(6,Math.floor((e.scroll.clientWidth-20)/(t*.6)))}px`:``,m=e=>Date.now()-e.seen>ut,h=()=>(clearInterval(s),s=o.size&&!document.hidden?setInterval(()=>o.forEach(e=>(e.box.classList.toggle(`stale`,m(e)),e.pad?.update())),1e3):void 0);document.addEventListener(`visibilitychange`,()=>(h(),o.forEach(e=>{clearTimeout(e.away),document.hidden?e.away=setTimeout(()=>(e.parked=!0,f(e,!1),u(e,Ee())),lt):e.parked&&(e.parked=!1,f(e,!0))})));let g=(e,n)=>{let r={key:e,box:l(`div`,{class:`term`,role:`group`,"aria-label":Je({name:n})}),scroll:l(`div`,{class:`term-scroll`,tabindex:`0`}),state:l(`p`,{class:`term-state`,role:`status`},M()),fit:l(`button`,{type:`button`,class:`cmp-link`,"aria-pressed":`false`},F()),typing:l(`span`,{class:`term-typing`,hidden:``},Qe()),sink:l(`textarea`,{class:`term-sink`,rows:`1`,"aria-label":K(),autocomplete:`off`,autocapitalize:`off`,autocorrect:`off`,spellcheck:`false`}),post:t(e),cols:0,seen:0,parked:!1,first:!0,ended:!1,queue:Promise.resolve()};if(r.fit.onclick=()=>(r.fit.setAttribute(`aria-pressed`,String(r.fit.getAttribute(`aria-pressed`)!==`true`)),p(r),requestAnimationFrame(()=>r.scroll.scrollTop=r.scroll.scrollHeight)),r.scroll.append(r.box),globalThis.matchMedia?.(`(pointer: fine)`).matches){let{sink:e}=r,t=()=>(t=>(e.value=``,t&&r.pad?.text?.(t)))(e.value);r.scroll.title=K(),r.scroll.addEventListener(`click`,()=>getSelection()?.isCollapsed!==!1&&e.focus({preventScroll:!0})),e.addEventListener(`keydown`,e=>r.pad?.type?.(e)&&e.preventDefault()),e.addEventListener(`input`,e=>!e.isComposing&&t()),e.addEventListener(`compositionend`,t),e.addEventListener(`paste`,e=>(e.preventDefault(),r.pad?.paste?.(e.clipboardData?.getData(`text/plain`)??``))),e.addEventListener(`focus`,()=>{let t=r.scroll.getBoundingClientRect();Object.assign(e.style,{left:`${t.left+12}px`,top:`${Math.min(t.bottom,innerHeight)-28}px`}),r.typing.hidden=!1,r.scroll.classList.add(`typing`,`engage`)}),e.addEventListener(`blur`,()=>(r.typing.hidden=!0,r.scroll.classList.remove(`typing`,`engage`,`blip`),t())),r.scroll.addEventListener(`animationend`,e=>r.scroll.classList.remove(e.animationName===`term-engage`?`engage`:`blip`))}return new ResizeObserver(()=>p(r)).observe(r.scroll),o.set(e,r),f(r,!0),h(),r.pad=a?.({name:n,state:()=>r.parked||r.ended||m(r)?`off`:r.box.classList.contains(`hidden`)?`hidden`:`live`,post:r.post,stream:c,blip:()=>S(r.scroll,`blip`)}),r.tile={id:`term:${e}`,title:Ze({name:n}),icon:`i-comms`,body:()=>l(`div`,{class:`term-tile`},l(`div`,{class:`term-bar`},r.state,r.typing,r.fit),r.scroll,r.sink,r.pad?.el),closed:()=>(clearTimeout(r.away),f(r,!1),o.delete(e),h())}};return{open(t,n){let r=o.get(t);r?.ended&&(r.ended=!1,u(r,M()),f(r,!0)),e.open(r?.tile??g(t,n),!0)},embed(e,t,n){let r=o.get(e);r?.ended&&(r.ended=!1,u(r,M()),f(r,!0));let i=r?.tile??g(e,t);return n.replaceChildren(i.body()),()=>(i.closed?.(),n.replaceChildren())},hello:()=>o.forEach(e=>!e.parked&&!e.ended&&f(e,!0)),frame(e){let t;try{t=JSON.parse(e)}catch{return}let n=o.get(t.key);if(n){if(n.box.classList.toggle(`hidden`,!!(t.hidden||t.ended)),t.ended)return d(n,ye({why:t.ended}));if([n.seen,n.ended]=[Date.now(),!1],n.box.classList.remove(`stale`),t.hidden)return X(n.box,{key:n.key,rows:0}),u(n,be());X(n.box,t),(t.whole||t.cols&&t.cols!==n.cols)&&(n.cols=t.cols||n.cols,p(n)),u(n,Ce({cols:n.cols,rows:n.box.children.length}),`ok`),n.first&&t.whole&&(n.first=!1,requestAnimationFrame(()=>n.scroll.scrollTop=n.scroll.scrollHeight))}}}}var Q=(e,t)=>C(e.mark)-C(t.mark)||e.at-t.at,$=e=>{let t=e.filter(e=>C(e.mark)===0).length,n=e.length-t;return[t&&Ge({count:t}),n&&He({count:n})].filter(Boolean).join(` · `)};function ht(e){let t=[],n=[],r=()=>e.render(t.map(e=>e.alert),n),i=(i,a,o=!0)=>{let s=t.findIndex(e=>e.alert.key===i.key);if(s>=0&&!o)return;let c=s>=0?t.splice(s,1)[0]:{alert:i,back:a,raised:i.mark};!o&&t.length?t.splice(t.length-1,0,c):t.push(c),n=n.filter(e=>e.key!==i.key),r(),o&&e.enter(c.alert)};return{get open(){return t.map(e=>e.alert)},get queue(){return n},arrive(e){let i=t.find(t=>t.alert.key===e.key);if(i)[i.alert,i.raised]=[{...e,at:i.alert.at},e.mark];else{let t=n.find(t=>t.key===e.key);n=[...n.filter(t=>t.key!==e.key),t&&t.mark===e.mark?t:e].sort(Q)}r()},prune(e){n=n.filter(t=>(e=>e?.mark===t.mark&&!(C(t.mark)!==0&&e.closed))(e(t.key)));for(let n of t){let t=e(n.alert.key);n.alert=t?{...n.alert,...t,gone:void 0,at:n.alert.at}:{...n.alert,mark:`unknown`,note:void 0,pending:void 0,gone:!0}}r()},redraw:r,show:(t,n=!0)=>i(t,e.focused(),n),raise(n){let r=t.find(e=>e.alert.key===n);r&&r!==t.at(-1)&&i(r.alert,e.focused())},next(){let t=n.find(e=>C(e.mark)===0);t&&i(t,e.focused())},resolve(e){n=n.filter(t=>C(t.mark)===0||!e.includes(t.key)),r()},close(a=`close`){let o=t.pop();if(!o)return!1;let s=t.at(-1),c=a===`close`?n.find(e=>C(e.mark)===0):void 0;return a===`later`&&o.alert.mark===o.raised&&C(o.raised)===0&&(n=[...n,o.alert].sort(Q)),!s&&c?(i(c,o.back),!0):(r(),!e.restore(o.back)&&s&&e.enter(s.alert),!0)}}}var gt=`a, button, input, textarea, select, summary, label, [role=button]`;function _t(e){let t=[],n,r=()=>e.render(t,n);return{get tiles(){return t},get active(){return n},open(i,a=!0){if(!a&&t.length>=4&&!t.some(e=>e.id===i.id))return void i.closed?.();t.some(e=>e.id===i.id)||(t=[...t,i]).slice(0,-4).forEach(e=>e.closed?.()),t=t.slice(-4),(a||!t.some(e=>e.id===n))&&(n=i.id),r(),a&&e.enter(t.find(e=>e.id===i.id))},close(e){let i=t.findIndex(t=>t.id===e);i<0||(t[i].closed?.(),t=t.filter(t=>t.id!==e),n===e&&(n=(t[i]??t[i-1])?.id),r())},activate(e){n=e,r()}}}function vt(e){let t=new Set(e.flatMap(e=>e.kind===`result`&&e.callId?[e.callId]:[])),n=e.filter(e=>e.kind===`assistant`),r=n.at(-1),i=r?.tools?.find(e=>!t.has(e.id));return{said:(n.findLast(e=>e.text?.trim())?.text?.trim().split(`
|
|
3
3
|
`).filter(Boolean).at(-1))?.slice(0,280),pending:i&&`${i.name} · ${i.summary}`.slice(0,200),at:(r??e.findLast(e=>e.kind!==`result`))?.id}}var yt=()=>x(`<section class="dialog" role="dialog" aria-modal="false" tabindex="-1"><header><b class="tag">${N()}</b><span class="where"></span><button class="zoom" type="button"></button><button class="x" type="button" aria-label="${s()}">×</button></header><div class="who">${y}<div><h3></h3><p><em class="role"></em> <span class="state"></span></p></div></div><div class="intel"><h4>${me()}</h4><p class="said">…</p><p class="pending" hidden><b>${$e()}</b> <span></span></p></div><div class="ask-root"></div><footer><a class="go">${Te()}</a><button class="later" type="button">${he()}</button><span class="queued"></span></footer></section>`),bt=()=>x(`<li><a class="done-go">${y}<span><b class="name"></b><small></small></span></a></li>`),xt=()=>x(`<section class="tile" tabindex="-1"><header><svg><use href="#i-doc"/></svg><b></b><button class="x" type="button" aria-label="${k()}">×</button></header><div class="tile-body"></div></section>`);function St(t){let[n,i,o,s,c]=[_(`dock`,HTMLElement),_(`work`,HTMLElement),_(`tiles`,HTMLElement),_(`tile-tabs`,HTMLElement),_(`alerts`,HTMLButtonElement)],l=new Map,S=(e,t,n=l.get(t.key))=>{let r=e.dataset.gone===`true`;g(e,`.said`,n?.failed?oe():n?.said??we()),e.querySelector(`.pending`).hidden=!n?.pending||r,g(e,`.pending span`,n?.pending??``),m(e.querySelector(`.go`),r?void 0:{view:`session`,ws:t.ws,key:u(t),...n?.at&&{at:n.at}})},w=(e,r={said:`…`})=>{l.set(e.key,r),t.recent(u(e)).then(vt,()=>({failed:!0})).then(t=>{let i=l.get(e.key)===r&&(l.set(e.key,t),n.querySelector(`.dialog[data-key="${CSS.escape(e.key)}"]`));i&&S(i,e),e.mark===`done`&&N(L.queue)})},T=()=>n.classList.contains(`wide`),D=e=>{n.classList.toggle(`wide`,e);try{localStorage.setItem(`sb.dialog-wide`,e?`1`:`0`)}catch{}for(let e of n.querySelectorAll(`.zoom`))O(e)},O=e=>{e.textContent=T()?`⤡`:`⤢`,e.setAttribute(`aria-pressed`,String(T())),e.setAttribute(`aria-label`,T()?ie():re()),e.title=e.getAttribute(`aria-label`)};try{n.classList.toggle(`wide`,localStorage.getItem(`sb.dialog-wide`)===`1`)}catch{}let k=(e,n,i,a)=>{f(e,n.mark),O(e.querySelector(`.zoom`)),e.dataset.gone=String(!!n.gone),e.style.transform=i?`translateY(${-12*i}px) scale(${1-.06*i})`:``,e.style.opacity=String(Math.max(0,1-.3*i)),e.toggleAttribute(`inert`,i>0),e.setAttribute(`aria-label`,`${n.name}: ${b(n.note,n.mark)}`),d(e.querySelector(`.plate`),n.role,n.mark),g(e,`h3`,n.name),g(e,`.role`,p(n.role)),g(e,`.state`,n.gone?ge():b(n.note,n.mark)),g(e,`.where`,t.label(n.ws)),g(e,`.tag`,n.gone?Le():({waiting:Re,error:Fe,done:Ie}[n.mark]??ze)()),g(e,`.queued`,a.length?ee({tally:$(a)}):``),e.querySelector(`.later`).hidden=C(n.mark)!==0,l.has(n.key)||w(n),S(e,n);let o=F.get(e);o||F.set(e,o=r(e.querySelector(`.ask-root`),I(u(n)),void 0,()=>t.showTerminal(n.ws,u(n)),()=>e.isConnected&&!e.classList.contains(`leaving`)&&(L.raise(e.dataset.key),L.close()))),o.update(n.pending,n.mark===`waiting`&&document.body.dataset.stale!==`true`)},[A,j,M]=[_(`done`,HTMLButtonElement),_(`done-pop`,HTMLElement),_(`done-list`,HTMLElement)],N=e=>{let n=e.filter(e=>C(e.mark)!==0);A.hidden=!n.length,A.textContent=`${ae()} ${n.length}`,A.title=P(),!n.length&&j.matches(`:popover-open`)&&j.hidePopover(),v(M,n.map(e=>({...e,id:e.key})),bt,(e,n)=>{let r=l.get(n.key);d(e.querySelector(`.plate`),n.role,n.mark),g(e,`.name`,n.name),g(e,`small`,`${t.label(n.ws)} · ${r?.said??b(n.note,n.mark)}`),m(e.querySelector(`.done-go`),{view:`session`,ws:n.ws,key:u(n),...r?.at&&{at:r.at}})})};_(`done-clear`,HTMLButtonElement).textContent=te(),j.setAttribute(`aria-label`,P()),j.addEventListener(`toggle`,e=>e.newState===`open`&&h(j,A)),M.addEventListener(`click`,e=>{let t=e.target.closest(`li[data-key]`);t&&queueMicrotask(()=>(L.resolve([t.dataset.key]),j.hidePopover()))}),_(`done-clear`,HTMLButtonElement).addEventListener(`click`,()=>(L.resolve(L.queue.map(e=>e.key)),j.hidePopover()));let F=new WeakMap,I=n=>t.post?.(n)??((t,r)=>e(`sessions/${encodeURIComponent(n)}/${t}`,r)),L=ht({render(e,t){v(n,e.map(e=>({...e,id:e.key})),yt,(n,r)=>k(n,r,e.length-1-e.findIndex(e=>e.key===r.key),t));let r=t.filter(e=>C(e.mark)===0),i=r[0];c.disabled=!i,c.dataset.mark=i?.mark??`unknown`,g(c,`#alert-count`,String(r.length)),c.title=r.length?E({tally:$(r)}):``,g(c,`#alert-text`,i?`${i.name} · ${b(i.note,i.mark)}`:a()),v(c.querySelector(`.faces`),r.slice(0,3).map(e=>({...e,id:e.key})),()=>x(y),(e,t)=>d(e,t.role,t.mark)),N(t)},enter(e){let t=n.querySelector(`[data-key="${CSS.escape(e.key)}"]`);t&&!F.get(t)?.enter()&&t.querySelector(`.go`)?.focus()},focused:()=>document.activeElement instanceof HTMLElement&&document.activeElement!==document.body?document.activeElement:void 0,restore:e=>!!(e?.isConnected&&!e.closest(`[inert]`)&&(e.focus(),document.activeElement===e))});c.addEventListener(`click`,()=>L.next()),document.addEventListener(`click`,e=>{let t=t=>{let n=t.getBoundingClientRect();return e.clientX>=n.left&&e.clientX<=n.right&&e.clientY>=n.top&&e.clientY<=n.bottom},r=[...n.querySelectorAll(`.dialog:not(.leaving)`)],i=r.slice(0,-1).reverse().find(t);e.defaultPrevented||!i||!r.length||t(r.at(-1))||e.target?.closest?.(gt)||(e.preventDefault(),e.stopPropagation(),L.raise(i.dataset.key))},!0),n.addEventListener(`click`,e=>{let t=e.target;t.closest(`.zoom`)?D(!T()):t.closest(`.x`)?L.close():t.closest(`.later`)?L.close(`later`):t.closest(`.go`)&&queueMicrotask(()=>void L.close(`go`))});let R=0,z=()=>o.classList.toggle(`tabbed`,B.tiles.length>1&&i.clientWidth<460+B.tiles.length*400),B=_t({render(e,t){o.hidden=!e.length,v(o,e,e=>{let t=xt();return t.querySelector(`use`).setAttribute(`href`,`#${e.icon??`i-doc`}`),t.querySelector(`.x`).setAttribute(`aria-label`,ne({title:e.title})),t.querySelector(`.tile-body`).append(e.body()),t.querySelector(`.x`).addEventListener(`click`,()=>B.close(e.id)),t},(e,n)=>{g(e,`header b`,n.title),e.classList.toggle(`active`,n.id===t)}),v(s,e,()=>x(`<button type="button" class="tab-btn"></button>`),(e,n)=>{e.textContent=n.title,e.classList.toggle(`active`,n.id===t),e.onclick=()=>B.activate(n.id)}),o.prepend(s),e.length!==R&&(R=e.length,z())},enter:e=>requestAnimationFrame(()=>o.querySelector(`.tile[data-key="${CSS.escape(e.id)}"]`)?.focus())});return new ResizeObserver(z).observe(i),{tiles:B,stack:L,terminal:Z({tiles:B,post:I,stream:t.stream,pad:st}),hotkey(e){if(e===`next`)return!c.disabled&&(L.next(),!0);let t=[...n.querySelectorAll(`.dialog:not(.leaving) .zoom`)].at(-1);return t?.getClientRects().length?(t.click(),!0):!1},alerts(e,t){for(let t of e)w(t),L.arrive(t);L.prune(e=>t.get(e))}}}export{St as mountPanels};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,M as t,_ as n}from"./index-
|
|
1
|
+
import{F as e,M as t,_ as n}from"./index-D-LVSW44.js";import{t as r}from"./chat-Xv1V3Ep2.js";var i=((t={},n={})=>(n.locale??e())===`zh-TW`?`下一張`:`Next image`),a=((t={},n={})=>(n.locale??e())===`zh-TW`?`上一張`:`Previous image`),o=((t={},n={})=>(n.locale??e())===`zh-TW`?`圖片檢視`:`Image viewer`);function s(e,s){let c=s,l=n(`img`,{alt:``}),u=n(`span`,{class:`lb-count`}),d=(e,t,r,i)=>{let a=n(`button`,{type:`button`,class:e,"aria-label":t},r);return a.addEventListener(`click`,e=>(e.stopPropagation(),i())),a},f=t=>(c=(c+t+e.length)%e.length,g()),p=d(`lb-prev`,a(),`‹`,()=>f(-1)),m=d(`lb-next`,i(),`›`,()=>f(1)),h=n(`dialog`,{class:`lightbox`,"aria-label":o()},l,p,m,d(`lb-close`,t(),`×`,()=>h.close()),u);function g(){h.classList.remove(`zoom`),l.src=e[c],l.alt=r({n:c+1}),u.textContent=e.length>1?`${c+1} / ${e.length}`:``,p.hidden=m.hidden=e.length<2}l.addEventListener(`click`,e=>(e.stopPropagation(),h.classList.toggle(`zoom`))),h.addEventListener(`click`,()=>h.close()),h.addEventListener(`keydown`,t=>{e.length>1&&(t.key===`ArrowLeft`||t.key===`ArrowRight`)&&(t.preventDefault(),f(t.key===`ArrowLeft`?-1:1))}),h.addEventListener(`close`,()=>h.remove()),document.body.append(h),g(),h.showModal()}export{s as lightbox};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./post-UHMNmNgA.js";import{C as t,E as n,F as r,_ as i}from"./index-
|
|
1
|
+
import{t as e}from"./post-UHMNmNgA.js";import{C as t,E as n,F as r,_ as i}from"./index-D-LVSW44.js";var a=((e={},t={})=>(t.locale??r())===`zh-TW`?`正在取得配對碼…`:`Asking for a pairing code…`),o=((e={},t={})=>(t.locale??r())===`zh-TW`?`新的配對碼`:`New code`),s=((e={},t={})=>(t.locale??r())===`zh-TW`?`配對 QR code`:`Pairing QR code`),c=((e={},t={})=>(t.locale??r())===`zh-TW`?`用以本機使用者身分登入 Tailscale 的手機掃描。只能用一次,十分鐘內有效。`:`Scan it with a phone signed in to Tailscale as this machine's user. It works once, within ten minutes.`),l=((e={},t={})=>(t.locale??r())===`zh-TW`?`配對手機`:`Pair a phone`),u=((e={},t={})=>(t.locale??r())===`zh-TW`?`遠端存取還沒開啟。要開啟,讓你 tailnet 上的手機可以開這個頁面嗎?只有用這台電腦的 Tailscale 帳號登入的裝置能配對,絕不使用 Funnel。`:`Remote access is off. Turn it on so a phone on your tailnet can open this page? Only devices signed in to Tailscale as this machine's user can pair; Funnel is never used.`),d=((e={},t={})=>(t.locale??r())===`zh-TW`?`開啟遠端存取`:`Turn on remote access`),f=((e={},t={})=>(t.locale??r())===`zh-TW`?`正在開啟遠端存取…`:`Turning remote access on…`),p=`http://www.w3.org/2000/svg`;function m(e){let t=e.length,n=document.createElementNS(p,`svg`),r=document.createElementNS(p,`rect`),i=document.createElementNS(p,`path`);n.setAttribute(`viewBox`,`-4 -4 ${t+8} ${t+8}`),n.setAttribute(`class`,`qr`),n.setAttribute(`role`,`img`),n.setAttribute(`aria-label`,s());for(let[e,n]of Object.entries({x:`-4`,y:`-4`,width:String(t+8),height:String(t+8),fill:`#fff`}))r.setAttribute(e,n);return i.setAttribute(`d`,e.flatMap((e,t)=>[...e].flatMap((e,n)=>e===`1`?[`M${n} ${t}h1v1h-1z`]:[])).join(``)),i.setAttribute(`fill`,`#06101e`),n.append(r,i),n}function h(){return{id:`pair`,title:l(),body:()=>{let r=i(`div`,{class:`pair`}),s=i(`button`,{type:`button`,class:`later`},o()),l=i(`button`,{type:`button`,class:`pair-btn`},d()),p=(o=`remote/pair`,d=a())=>{r.replaceChildren(i(`p`,{class:`chat-empty`},d)),e(o,{}).then(e=>{let n=e.body.rows,a=String(e.body.url??``);if(e.body.error===`remote_off`)return r.replaceChildren(i(`p`,null,u()),l);if(!e.ok||!Array.isArray(n))return r.replaceChildren(i(`p`,null,e.body.reason??t({status:e.status})),o===`remote/on`?l:s);r.replaceChildren(m(n.map(String)),i(`p`,null,c()),i(`p`,null,i(`code`,null,new URL(a).host)),s)},()=>r.replaceChildren(i(`p`,null,n()),s))};return l.onclick=()=>p(`remote/on`,f()),s.onclick=()=>p(),p(),r}}}export{h as pairTile};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./post-UHMNmNgA.js";import{C as t,E as n,F as r,_ as i}from"./index-
|
|
1
|
+
import{t as e}from"./post-UHMNmNgA.js";import{C as t,E as n,F as r,_ as i}from"./index-D-LVSW44.js";var a=((e={},t={})=>(t.locale??r())===`zh-TW`?`正在讀取資料夾…`:`Reading folders…`),o=((e={},t={})=>(t.locale??r())===`zh-TW`?`基地名稱`:`Base name`),s=((e={},t={})=>(t.locale??r())===`zh-TW`?`第一句指令(選填)`:`First message (optional)`),c=((e={},t={})=>(t.locale??r())===`zh-TW`?`只顯示前 500 個資料夾。`:`Showing the first 500 folders.`),l=((e={},t={})=>(t.locale??r())===`zh-TW`?`這裡沒有資料夾。`:`No folders here.`),u=((e={},t={})=>(t.locale??r())===`zh-TW`?`資料夾:`:`Folder:`),d=((e={},t={})=>(t.locale??r())===`zh-TW`?`上一層`:`Up`),f=((e={},t={})=>(t.locale??r())===`zh-TW`?`在這裡開基地`:`Open the base here`),p=((e={},t={})=>(t.locale??r())===`zh-TW`?`開新基地`:`New base`),m=((e={},t={})=>(t.locale??r())===`zh-TW`?`在這裡開主智慧體`:`Open the main here`),h=e=>`New main agent in ${e?.base}`,g=e=>`在 ${e?.base} 開新的主智慧體`,_=((e,t={})=>(t.locale??r())===`zh-TW`?g(e):h(e)),v=((e={},t={})=>(t.locale??r())===`zh-TW`?`加入成員`:`Add the member`),y=e=>`New member in squad ${e?.tab}`,b=e=>`在小隊 ${e?.tab} 加一位成員`,x=((e,t={})=>(t.locale??r())===`zh-TW`?b(e):y(e)),S=e=>`New member in ${e?.base}`,C=e=>`在 ${e?.base} 加一位成員`,w=((e,t={})=>(t.locale??r())===`zh-TW`?C(e):S(e)),T=((e={},t={})=>(t.locale??r())===`zh-TW`?`基地已經開好,第一位成員已就位。`:`The base is open with its first member.`),E=e=>`The main is open in a new squad of ${e?.base}.`,D=e=>`已在 ${e?.base} 的新小隊開好主智慧體。`,O=((e,t={})=>(t.locale??r())===`zh-TW`?D(e):E(e)),k=e=>`The member is open in ${e?.base}.`,A=e=>`已在 ${e?.base} 加好成員。`,j=((e,t={})=>(t.locale??r())===`zh-TW`?A(e):k(e)),M=((e={},t={})=>(t.locale??r())===`zh-TW`?`開啟中…最多可能要一分鐘。`:`Opening… this can take up to a minute.`);function N(r,h){let g=r.kind===`base`?void 0:r.base,y=r.kind===`base`?void 0:r.tab,b=r.kind===`base`?p():r.kind===`main`?_({base:g.label}):y?x({tab:y.label}):w({base:g.label}),S=`open-${r.kind}-${g?.id??``}-${y?.id??``}`;return{id:S,title:b,body:()=>{let p=i(`code`,{class:`spawn-path`}),_=i(`button`,{type:`button`,class:`later`},d()),b=i(`div`,{class:`spawn-dirs`}),x=i(`p`,{class:`chat-empty`}),C=i(`button`,{type:`button`,class:`go`},r.kind===`base`?f():r.kind===`main`?m():v()),w=i(`textarea`,{rows:`3`,placeholder:s()}),E=i(`input`,{type:`text`,maxlength:`64`,placeholder:o()}),D,k=!1;E.addEventListener(`input`,()=>k=!0);let A=e=>x.textContent=e,N=r=>{A(a()),e(`dirs`,r?{path:r}:g?{workspace:g.id,...y&&{tab:y.id}}:{}).then(e=>{if(!e.ok)return A(e.body.reason??t({status:e.status}));D=e.body;let n=D.path===D.home?`~`:D.path.startsWith(`${D.home}/`)?`~/${D.path.slice(D.home.length+1)}`:D.path;p.textContent=n,_.disabled=!D.parent,b.replaceChildren(...D.dirs.map(e=>{let t=i(`button`,{type:`button`,class:`spawn-dir`},`${e}/`);return t.onclick=()=>N(`${D.path}/${e}`),t})),k||(E.value=D.path===D.home?``:D.path.slice(D.path.lastIndexOf(`/`)+1)),A(D.dirs.length?D.truncated?c():``:l())},()=>A(n()))};return _.onclick=()=>D?.parent&&N(D.parent),C.onclick=()=>{if(!D)return;let i=D.path,a=w.value,o=r.kind===`base`?{dir:i,label:E.value,prompt:a}:{workspace:g.id,...y&&{tab:y.id},dir:i,prompt:a};C.disabled=!0,A(M()),e(`open/${r.kind}`,o).then(e=>{if(!e.ok)return A(e.body.reason??t({status:e.status}));if(w.value=E.value=``,k=!1,h&&typeof e.body.session==`string`)return h(e.body.workspace,e.body.session,S);A(r.kind===`base`?T():r.kind===`main`?O({base:g.label}):j({base:g.label}))},()=>A(n())).finally(()=>C.disabled=!1)},N(),i(`div`,{class:`spawn`},i(`p`,{class:`spawn-at`},u(),` `,p,` `,_),b,x,...r.kind===`base`?[E]:[],w,C)}}}function P(e,t){let n=e.dataset.open;if(n===`base`)return{kind:n};let r=t.find(t=>t.id===e.dataset.ws),i=e.dataset.tab?r?.tabs.find(t=>t.id===e.dataset.tab):void 0;if(!(n!==`main`&&n!==`member`||!r||e.dataset.tab&&!i))return{kind:n,base:{id:r.id,label:r.label},...i&&{tab:{id:i.id,label:i.label}}}}export{P as openingOf,N as spawnTile};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-Br2ViD0U.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e,t}from"./post-UHMNmNgA.js";import{a as n,i as r,n as i,r as a,t as o}from"./ask-
|
|
2
|
+
import{r as e,t}from"./post-UHMNmNgA.js";import{a as n,i as r,n as i,r as a,t as o}from"./ask-DIr7mep4.js";import{A as s,C as c,E as l,F as u,M as d,N as f,O as p,P as m,S as h,T as g,_,a as v,c as y,d as b,f as x,g as S,h as C,i as w,j as T,k as E,m as D,n as O,p as k,r as A,s as j,u as M,v as ee,w as N,x as P}from"./index-D-LVSW44.js";var te=((e={},t={})=>(t.locale??u())===`zh-TW`?`附加檔案`:`Attach files`),F=((e={},t={})=>(t.locale??u())===`zh-TW`?`返回`:`Back`),I=((e={},t={})=>(t.locale??u())===`zh-TW`?`它在等待對話框:請在上方或它的終端機中回答。`:`It waits on a dialog: answer it above, or in its terminal.`),L=((e={},t={})=>(t.locale??u())===`zh-TW`?`它在等待對話框;請在它的終端機中回答。`:`It waits on a dialog; answer it in its terminal.`),ne=((e={},t={})=>(t.locale??u())===`zh-TW`?`這個 session 已不再即時;紀錄仍可閱讀。`:`This session is no longer live; its history stays readable.`),re=((e={},t={})=>(t.locale??u())===`zh-TW`?`這個單位沒有即時的 pi 窗格,無處可輸入。`:`No live pi pane backs this unit, so there is nothing to type into.`),ie=((e={},t={})=>(t.locale??u())===`zh-TW`?`串流中斷;要等它恢復才能送出。`:`The stream is down; sending waits for it to come back.`),ae=((e={},t={})=>(t.locale??u())===`zh-TW`?`頻道關閉`:`channel closed`),oe=((e={},t={})=>(t.locale??u())===`zh-TW`?`頻道開啟`:`channel open`),se=((e={},t={})=>(t.locale??u())===`zh-TW`?`指令`:`Commands`),ce=((e={},t={})=>(t.locale??u())===`zh-TW`?`通訊`:`comms`),le=((e={},t={})=>(t.locale??u())===`zh-TW`?`已派出`:`Dispatched`),ue=((e={},t={})=>(t.locale??u())===`zh-TW`?`無法取得:已不在它的 session 中開啟。`:`Unavailable: no longer open in its session.`),de=((e={},t={})=>(t.locale??u())===`zh-TW`?`已不在清單中:已在它的 session 中關閉,或 session 已結束。`:`No longer listed: closed in its session, or the session ended.`),fe=((e={},t={})=>(t.locale??u())===`zh-TW`?`已更新:此區塊顯示時會載入新版本。`:`Updated: the new version loads when this tile shows.`),pe=((e={},t={})=>(t.locale??u())===`zh-TW`?`超過轉送上限:請在終端機中閱讀。`:`More than the relay carries: read them in the terminal.`),me=e=>`${e?.command} ends this session or switches its pane to another one.`,he=e=>`${e?.command} 會結束這個 session,或把它的窗格切換到別的 session。`,ge=((e,t={})=>(t.locale??u())===`zh-TW`?he(e):me(e)),_e=e=>{let t=n(`en`,e?.count,{},!0);return t===`one`?`${e?.count} entry`:t===`other`?`${e?.count} entries`:`entry_count`},ve=e=>`${e?.count} 筆`,ye=((e,t={})=>(t.locale??u())===`zh-TW`?ve(e):_e(e)),be=e=>`${e?.name} is larger than 20 MB.`,xe=e=>`${e?.name} 超過 20 MB。`,Se=((e,t={})=>(t.locale??u())===`zh-TW`?xe(e):be(e)),Ce=((e={},t={})=>(t.locale??u())===`zh-TW`?`做完再送`:`After this`),we=((e={},t={})=>(t.locale??u())===`zh-TW`?`資料`:`Info`),Te=((e={},t={})=>(t.locale??u())===`zh-TW`?`載入中…`:`Loading…`),Ee=((e={},t={})=>(t.locale??u())===`zh-TW`?`這個工作區不在網中。`:`This workspace is not part of the net.`),De=((e={},t={})=>(t.locale??u())===`zh-TW`?`訊息`:`Message`),Oe=e=>`exit ${e?.code}`,ke=e=>`結束碼 ${e?.code}`,Ae=((e,t={})=>(t.locale??u())===`zh-TW`?ke(e):Oe(e)),je=e=>`${e?.count} lines`,Me=e=>`${e?.count} 行`,Ne=((e,t={})=>(t.locale??u())===`zh-TW`?Me(e):je(e)),Pe=((e={},t={})=>(t.locale??u())===`zh-TW`?`完成`:`finished`),Fe=((e={},t={})=>(t.locale??u())===`zh-TW`?`出錯`:`failed`),Ie=((e={},t={})=>(t.locale??u())===`zh-TW`?`執行中`:`running`),Le=((e={},t={})=>(t.locale??u())===`zh-TW`?`太久沒輸出,已停止`:`no output, stopped`),Re=((e={},t={})=>(t.locale??u())===`zh-TW`?`已停止`:`stopped`),ze=e=>`${e?.count} failed`,Be=e=>`${e?.count} 個出錯`,Ve=((e,t={})=>(t.locale??u())===`zh-TW`?Be(e):ze(e)),He=e=>`${e?.count} running`,Ue=e=>`${e?.count} 個執行中`,We=((e,t={})=>(t.locale??u())===`zh-TW`?Ue(e):He(e)),Ge=((e={},t={})=>(t.locale??u())===`zh-TW`?`Monitor`:`Monitors`),Ke=((e={},t={})=>(t.locale??u())===`zh-TW`?`新的 session`:`the new session`),qe=((e={},t={})=>(t.locale??u())===`zh-TW`?`無頻道`:`no channel`),Je=((e={},t={})=>(t.locale??u())===`zh-TW`?`不在網中`:`not in the net`),Ye=((e={},t={})=>(t.locale??u())===`zh-TW`?`已不再即時;紀錄在十分鐘內仍可閱讀。`:`No longer live; its history stays readable for ten minutes.`),Xe=((e={},t={})=>(t.locale??u())===`zh-TW`?`不在網中(可能已在十分鐘前結束)。`:`Not in the net (it may have ended more than ten minutes ago).`),Ze=((e={},t={})=>(t.locale??u())===`zh-TW`?`不在終端機畫面上`:`off screen in the terminal`),Qe=e=>`${e?.reason} · off screen`,$e=e=>`${e?.reason} · 不在畫面上`,et=((e,t={})=>(t.locale??u())===`zh-TW`?$e(e):Qe(e)),tt=((e={},t={})=>(t.locale??u())===`zh-TW`?`在新分頁開啟`:`Open in a new tab`),nt=((e={},t={})=>(t.locale??u())===`zh-TW`?`正在開啟頻道…`:`Opening the channel…`),rt=((e={},t={})=>(t.locale??u())===`zh-TW`?`網外`:`Outside the net`),it=((e={},t={})=>(t.locale??u())===`zh-TW`?`未編入的 pi 窗格`:`unaligned pi panes`),at=e=>`Message ${e?.name}`,ot=e=>`傳訊息給 ${e?.name}`,st=((e,t={})=>(t.locale??u())===`zh-TW`?ot(e):at(e)),ct=((e={},t={})=>(t.locale??u())===`zh-TW`?`排隊中・做完再送`:`Queued · follow-up`),lt=((e={},t={})=>(t.locale??u())===`zh-TW`?`排隊中・插話`:`Queued · steer`),ut=((e={},t={})=>(t.locale??u())===`zh-TW`?`重新載入`:`Reload`),dt=((e={},t={})=>(t.locale??u())===`zh-TW`?`送出`:`Send`),ft=e=>`Send ${e?.command}`,pt=e=>`送出 ${e?.command}`,mt=((e,t={})=>(t.locale??u())===`zh-TW`?pt(e):ft(e)),ht=((e={},t={})=>(t.locale??u())===`zh-TW`?`已照原文送出;你的修改留在這裡,尚未送出。`:`Sent as it was; your edits stayed here, unsent.`),gt=e=>`${e?.display}, shown by ${e?.unit}`,_t=e=>`${e?.display},由 ${e?.unit} 顯示`,vt=((e,t={})=>(t.locale??u())===`zh-TW`?_t(e):gt(e)),yt=((e={},t={})=>(t.locale??u())===`zh-TW`?`基地`:`base`),bt=((e={},t={})=>(t.locale??u())===`zh-TW`?`上下文`:`context`),xt=((e={},t={})=>(t.locale??u())===`zh-TW`?`目錄`:`directory`),St=((e={},t={})=>(t.locale??u())===`zh-TW`?`啟動者`:`launcher`),Ct=((e={},t={})=>(t.locale??u())===`zh-TW`?`模型`:`model`),wt=((e={},t={})=>(t.locale??u())===`zh-TW`?`小隊`:`squad`),Tt=((e={},t={})=>(t.locale??u())===`zh-TW`?`無法讀取`:`unreadable`),Et=e=>`squad ${e?.label}`,Dt=e=>`小隊 ${e?.label}`,R=((e,t={})=>(t.locale??u())===`zh-TW`?Dt(e):Et(e)),Ot=((e={},t={})=>(t.locale??u())===`zh-TW`?`小隊`:`Squads`),kt=((e={},t={})=>(t.locale??u())===`zh-TW`?`停止`:`Stop`),At=((e={},t={})=>(t.locale??u())===`zh-TW`?`要停止目前的任務嗎?佇列中的訊息會退回它的終端機編輯器。`:`Stop the current task? Queued messages go back to its terminal editor.`),jt=((e={},t={})=>(t.locale??u())===`zh-TW`?`現在:`:`Now:`),Mt=((e={},t={})=>(t.locale??u())===`zh-TW`?`已完成`:`done`),Nt=((e={},t={})=>(t.locale??u())===`zh-TW`?`未完成`:`not done`),Pt=((e={},t={})=>(t.locale??u())===`zh-TW`?`終端機`:`Terminal`),Ft=e=>`Todos ${e?.done}/${e?.total}`,It=e=>`待辦 ${e?.done}/${e?.total}`,Lt=((e,t={})=>(t.locale??u())===`zh-TW`?It(e):Ft(e)),Rt=((e={},t={})=>(t.locale??u())===`zh-TW`?`全部完成`:`All done`),zt=e=>`${e?.count} tokens`,Bt=e=>`${e?.count} tokens`,Vt=((e,t={})=>(t.locale??u())===`zh-TW`?Bt(e):zt(e)),Ht=((e={},t={})=>(t.locale??u())===`zh-TW`?`文字超過 16 KB,請縮短。`:`The text is longer than 16 KB; shorten it.`),Ut=((e={},t={})=>(t.locale??u())===`zh-TW`?`下屬`:`Under this tower`),Wt=e=>{let t=n(`en`,e?.count,{},!0);return t===`one`?`${e?.count} unit`:t===`other`?`${e?.count} units`:`unit_count`},Gt=e=>`${e?.count} 個單位`,Kt=((e,t={})=>(t.locale??u())===`zh-TW`?Gt(e):Wt(e)),qt=((e={},t={})=>(t.locale??u())===`zh-TW`?`單位檔案`:`unit dossier`),Jt=((e={},t={})=>(t.locale??u())===`zh-TW`?`單位`:`Units`),z=((e={},t={})=>(t.locale??u())===`zh-TW`?`未確認。再次送出前請先查看終端機。`:`Not confirmed. Check the terminal before sending again.`),Yt=((e={},t={})=>(t.locale??u())===`zh-TW`?`上傳中…`:`Uploading…`),Xt=((e={},t={})=>(t.locale??u())===`zh-TW`?`等待網的資料…`:`Waiting for the net…`),Zt=((e={},t={})=>(t.locale??u())===`zh-TW`?`原文已送到 session;這裡是你編輯過、尚未送出的副本。`:`The original already went to the session; what is here is your edited copy, unsent.`),B=(e,t,n)=>({tag:e,kids:t,attrs:n}),Qt=/^(?:https?:\/\/|mailto:)[^\s\u0000-\u001f]+$/i,$t=(e,t)=>B(`a`,t,{href:e,rel:`noopener noreferrer`,target:`_blank`}),en=/(`+)([^`]|[^`][^]{0,1000}?[^`])\1(?!`)|\*\*([^*][^]{0,1000}?)\*\*|~~([^~][^]{0,1000}?)~~|\*([^\s*][^*]{0,500}?)\*|(?<![\w])_([^\s_][^_]{0,500}?)_(?![\w])|\[([^\]]{1,500})\]\(([^)\s]{1,2000})(?:\s+"[^"]*")?\)|(https?:\/\/[^\s<>)\]]+)/g;function V(e){let t=[],n=0;for(let r of e.matchAll(en))r.index>n&&t.push(e.slice(n,r.index)),n=r.index+r[0].length,r[2]===void 0?r[3]===void 0?r[4]===void 0?r[5]!==void 0||r[6]!==void 0?t.push(B(`em`,V(r[5]??r[6]))):r[7]===void 0?t.push($t(r[9],[r[9]])):t.push(Qt.test(r[8])?$t(r[8],V(r[7])):r[0]):t.push(B(`del`,V(r[4]))):t.push(B(`strong`,V(r[3]))):t.push(B(`code`,[r[2]]));return n<e.length&&t.push(e.slice(n)),t}var tn=e=>e.search(/\S/),H=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,nn=/^\s*([-*_])(\s*\1){2,}\s*$/,rn=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/,an=e=>e.trim().replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim()),on=(e,t)=>/^\s*(`{3,}|~{3,}|#{1,6}\s|>)/.test(e)||nn.test(e)||H.test(e)||e.includes(`|`)&&t!==void 0&&rn.test(t)&&t.includes(`-`);function U(e,t=0,n=e.replace(/\r\n?/g,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`),r=n.map(tn)){if(t>=16)return[B(`p`,[n.join(`
|
|
5
5
|
`)])];let i=[];for(let e=0;e<n.length;){let a=n[e],o=n[e+1],s=a.match(/^\s*(`{3,}|~{3,})\s*([\w+-]*)/),c=a.match(/^\s*(#{1,6})\s+(.*?)\s*#*\s*$/),l=a.match(H);if(r[e]<0)e++;else if(s){let t=[];for(e++;e<n.length&&!n[e].trim().startsWith(s[1]);e++)t.push(n[e]);e++,i.push(B(`pre`,[B(`code`,[t.join(`
|
|
6
6
|
`)],s[2]?{"data-lang":s[2]}:void 0)]))}else if(c)i.push(B(`h${c[1].length}`,V(c[2]))),e++;else if(nn.test(a))i.push(B(`hr`,[])),e++;else if(/^\s*>/.test(a)){let r=[];for(;e<n.length&&/^\s*>/.test(n[e]);e++)r.push(n[e].replace(/^\s*> ?/,``));i.push(B(`blockquote`,U(``,t+1,r,r.map(tn))))}else if(a.includes(`|`)&&o!==void 0&&rn.test(o)&&o.includes(`-`)){let t=[];for(e+=2;e<n.length&&n[e].trim()&&n[e].includes(`|`);e++)t.push(an(n[e]));i.push(B(`table`,[B(`thead`,[B(`tr`,an(a).map(e=>B(`th`,V(e))))]),B(`tbody`,t.map(e=>B(`tr`,e.map(e=>B(`td`,V(e))))))]))}else if(l){let a=l[1].length,o=[],s=a+2;for(;e<n.length;){let i=n[e].match(H);if(!i||i[1].length!==a||/\d/.test(i[2])!==/\d/.test(l[2]))break;let c=[i[3]],u=i[3].match(/^\[([ xX])\]\s+(.*)$/);u&&(c[0]=u[2]);let d=[tn(c[0])];for(e++;e<n.length&&r[e]>a;e++){let t=n[e],i=0;for(;i<s&&t.charCodeAt(i)===32;)i++;c.push(i?t.slice(i):t),d.push(r[e]-i)}let f=U(``,t+1,c,d),p=f[0],m=u?.[1]!==` `;u&&(typeof p==`object`&&p.tag===`p`?p.kids:f).unshift(B(`i`,m?[`✓`]:[],{class:`check`,"data-done":String(m),"aria-label":m?Mt():Nt()})),o.push(B(`li`,f,u?{class:`task`}:void 0)),!n[e]?.trim()&&n[e+1]?.match(H)?.[1]?.length===a&&e++}i.push(B(/\d/.test(l[2])?`ol`:`ul`,o))}else{let t=[a];for(e++;e<n.length&&n[e].trim()&&!on(n[e],n[e+1]);e++)t.push(n[e]);i.push(B(`p`,V(t.join(`
|
|
7
|
-
`))))}}return i}function sn(e){let t=e=>{if(typeof e==`string`)return document.createTextNode(e);let n=document.createElement(e.tag);for(let[t,r]of Object.entries(e.attrs??{}))n.setAttribute(t,r);return n.append(...e.kids.map(t)),n},n=document.createDocumentFragment();return n.append(...e.map(t)),n}var cn=`allow-forms allow-popups allow-popups-to-escape-sandbox`,ln={},W=new Map;function un(e,t=``){let n=[];for(let r of(e.startsWith(`/`)?e:`${t}/${e}`).split(`/`))r===`..`?n.pop():r&&r!==`.`&&n.push(r);return`/${n.join(`/`)}`}var dn=(e,t,n)=>e?.find(e=>un(e.display,t)===un(n,t));function fn(e,t,n=[]){let r=e.get(t);return e.set(t,new Set(n.map(e=>e.display))),r?n.filter(e=>!r.has(e.display)):[]}var G=(e,t,n=``)=>(e.state.dataset.tone=n,e.state.textContent=t),pn=(e,t)=>(e.failed=!0,G(e,t,`error`)),mn=e=>ln.src?.(e)??`doc/${encodeURIComponent(e)}/`;function K(e){if([e.loaded,e.failed]=[e.card.revision,!1],G(e,``),e.frame)return void(e.frame.src=mn(e.card.cap));let t=e.card.cap,n=/\.(md|markdown)$/i.test(e.card.display),r=++e.seq;(ln.load?.(t)??fetch(`api/doc/${encodeURIComponent(t)}`,{cache:`no-store`}).then(e=>e.ok?e.json():void 0)).then(t=>e.seq!==r||(t?e.body.replaceChildren(n?_(`div`,{class:`md`},sn(U(t.text))):_(`pre`,{class:`doc-pre`},t.text)):pn(e,ue())),()=>e.seq!==r||pn(e,a()))}function hn(e,t){let n=W.get(t.cap);if(n)return n.tile;let r=t.display.split(`/`).pop()||t.display,i=t.kind===`html`?_(`iframe`,{class:`doc-frame`,sandbox:cn,referrerpolicy:`no-referrer`,title:vt({display:t.display,unit:e})}):void 0,a=_(`button`,{type:`button`,class:`cmp-link`},ut()),o=i&&_(`a`,{class:`cmp-link`,href:mn(t.cap),target:`_blank`,rel:`noopener noreferrer`},tt()),s=i??_(`div`,{class:`doc-text`},_(`p`,{class:`chat-empty`},Te())),c=_(`span`,{class:`term-state`,role:`status`}),l=_(`em`,{class:`doc-off`},Ze()),u=_(`div`,{class:`doc-tile`},_(`div`,{class:`term-bar doc-bar`},_(`span`,{class:`doc-why`},t.reason),l,c,_(`span`,{class:`doc-acts`},a,o)),s),d=new IntersectionObserver(([e])=>(p.shown=!!e?.isIntersecting,p.shown&&!p.gone&&(p.failed||p.loaded!==p.card.revision)&&K(p))),f={id:`doc:${t.cap}`,title:`${r} · ${e}`,icon:`i-doc`,body:()=>u,closed:()=>(W.delete(t.cap),d.disconnect())},p={card:t,tile:f,loaded:0,seq:0,shown:!1,gone:!1,body:s,state:c,off:l,...i&&{frame:i}};return a.onclick=()=>!p.gone&&K(p),l.hidden=t.onScreen,d.observe(u),K(p),W.set(t.cap,p),f}function gn(e,t,n,r){let i=new Map,a=new Set;for(let o of e.bases)for(let e of[...o.tower?[o.tower]:[],...[...o.tabs.flatMap(e=>e.units),...o.outside].flatMap(e=>[e,...e.subs])]){for(let t of e.docs??[])i.set(t.cap,t);for(let i of fn(t,e.key,e.docs))e.key===n&&r(e.name,i);a.add(e.key)}for(let e of t.keys())a.has(e)||t.delete(e);_n(i)}function _n(e){for(let t of W.values()){let n=e.get(t.card.cap);if(!n){t.gone||G(t,de(),`error`),t.gone=!0;continue}let r=t.gone&&(G(t,``),t.failed);[t.card,t.gone,t.off.hidden]=[n,!1,n.onScreen],(n.revision!==t.loaded||r)&&(t.shown?K(t):n.revision!==t.loaded&&G(t,fe()))}}function vn(e,t,n,r){e.hidden=!t?.length&&!n,e.querySelector(`.d-doc-list`).replaceChildren(...(t??[]).map(e=>{let t=_(`button`,{type:`button`,class:`d-doc`,title:e.reason},_(`b`,null,e.display),_(`small`,null,e.onScreen?e.reason:et({reason:e.reason})));return t.onclick=()=>r(e),t})),e.querySelector(`.d-docs-cut`).hidden=!n}var q=e=>e.route.view===`map`?``:e.route.ws;function J(e,t){for(let n of e?.bases??[]){if(n.tower?.key===t)return{u:{key:t,name:n.tower.name,role:`tower`,mark:n.tower.mark,control:n.tower.control,pending:n.tower.pending,docs:n.tower.docs,docsCut:n.tower.docsCut,subs:[]},base:n};for(let[e,r]of[...n.tabs.map(e=>[e.label,e.units]),[void 0,n.outside]])for(let i of r){if(i.key===t)return{u:i,base:n,squad:e};let r=i.subs.find(e=>e.key===t);if(r)return{u:r,base:n,squad:e,launcher:i}}}}function yn(e){if(e.route.view!==`session`)return;let t=e.route.key,n=J(e.net,t),r=n?.u;return{key:t,hit:n,u:r,mk:r?.mark??`unknown`,state:e.info?.state,name:r?.name??e.info?.name??t}}var Y=()=>M(`<a class="token">${A}<span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></a>`);function X(e,t,n){w(e,t.key?{view:`session`,ws:n,key:t.key}:void 0),e.toggleAttribute(`hidden`,!1),e.toggleAttribute(`data-alert`,!!t.key&&C(t.mark)),b(e,t.mark),y(e.querySelector(`.plate`),t.role,t.mark,t.docs),D(e,`.name`,t.name),D(e,`.role`,x(t.role)),D(e,`.note`,j(t.note,t.mark))}var Z=(e,t)=>{let n=document.createElement(`a`);return w(n,e),n.textContent=t,n},bn=()=>`<div class="dossier-in"><span class="tag">${qt()}</span><button class="x d-x" type="button" aria-label="${d()}">×</button><div class="portrait">${A}</div><h3></h3><p class="d-line"><em class="role"></em> <span class="state"></span></p><p class="d-note" hidden></p><dl class="specs"></dl><div class="d-docs" hidden><h4>${s()}</h4><div class="d-doc-list"></div><p class="d-docs-cut" hidden>${pe()}</p></div><div class="d-drones" hidden><h4>${le()}</h4><div class="formation"></div></div><div class="d-squads" hidden><h4>${Ut()}</h4><div class="d-squad-list"></div></div></div>`,xn=e=>e.classList.add(`drone`);function Sn(e,t,{openTile:n,fullScreen:r}){return function({key:i,hit:a,u:o,mk:s,state:c,name:l}){e.firstElementChild||(e.append(M(bn())),e.querySelector(`.d-x`).onclick=()=>r(!1));let u=e.firstElementChild,{net:d,info:f,model:p,ctx:m}=t,h=q(t);b(u,s),y(u.querySelector(`.plate`),o?.role??f?.role??`member`,s),D(u,`h3`,l),D(u,`.role`,x(o?.role??f?.role??`session`)),D(u,`.state`,o?j(o.note,s):Je());let g=u.querySelector(`.d-note`);g.hidden=c!==`recent`&&c!==`unknown`,g.replaceChildren(c===`unknown`?Xe():Ye()),f?.successor&&g.append(` ${jt()} `,Z({view:`session`,ws:h,key:f.successor},J(d,f.successor)?.u.name??Ke()));let _=[[Ct(),p],[bt(),m?Vt({count:m.toLocaleString()}):void 0],[xt(),f?.header?.cwd],[yt(),a&&Z({view:`workspace`,ws:a.base.id},a.base.label)],[wt(),a?.squad],[St(),a?.launcher&&Z({view:`session`,ws:a.base.id,key:a.launcher.key},a.launcher.name)],[Tt(),f?.unreadable?ye({count:f.unreadable}):void 0]];u.querySelector(`.specs`).replaceChildren(..._.filter(([,e])=>e).map(([e,t])=>{let n=M(`<div><dt></dt><dd></dd></div>`);return n.firstElementChild.textContent=e,n.lastElementChild.append(t),n})),vn(u.querySelector(`.d-docs`),o?.docs,o?.docsCut,e=>(r(!1),n(hn(l,e))));let v=u.querySelector(`.d-drones`);v.hidden=!o?.subs.length,k(v.querySelector(`.formation`),(o?.subs??[]).map(e=>({...e,id:e.key})),Y,(e,t)=>(xn(e),X(e,t,h)));let S=u.querySelector(`.d-squads`),C=o?.role===`tower`?a?.base:void 0;S.hidden=!C?.tabs.length,k(S.querySelector(`.d-squad-list`),C?.tabs??[],()=>M(`<div class="d-squad"><small></small><div class="formation"></div></div>`),(e,t)=>(D(e,`small`,R({label:t.label})),k(e.querySelector(`.formation`),t.units.flatMap(e=>[e,...e.subs]).map(e=>({...e,id:e.key})),Y,(e,t)=>(xn(e),X(e,t,C.id)))))}}function Cn(e){let t=(e,t,n)=>{let r=document.createElement(e);return r.textContent=t,n&&w(r,n),r},n=document.getElementById(`crumbs`),{route:r,net:i,info:a}=e;if(r.view===`map`)return n.replaceChildren(t(`b`,`Straw Net`),t(`span`,m()));let o=i?.bases.find(e=>e.id===r.ws)?.label??r.ws,s=r.view===`session`?J(i,r.key)?.u.name??a?.name??r.key:``,c=[];for(let e=r.view===`session`?J(i,r.key):void 0,t=0;e?.launcher&&t<8;e=J(i,e.launcher.key),t++)c.unshift(e.launcher);let l=[t(`a`,`Straw Net`,{view:`map`}),r.view===`workspace`?t(`b`,o):t(`a`,o,{view:`workspace`,ws:r.ws}),...c.map(e=>t(`a`,e.name,{view:`session`,ws:r.ws,key:e.key})),...s?[t(`b`,s)]:[]];l.slice(1,-2).forEach(e=>e.classList.add(`mid`));let u=l.length>3?[Object.assign(t(`span`,`…`),{className:`crumb-more`,role:`button`,tabIndex:0,onclick:()=>n.classList.toggle(`open`)})]:[];n.classList.remove(`open`),n.replaceChildren(l[0],...u,...l.slice(1))}function wn(e,t,n){let r=e=>[`map`,`workspace`,`session`].indexOf(e.view),i=r(e)<r(t)?`enter-back`:e.view===`workspace`&&n?`enter-zoom`:e.view===`session`&&t.view!==`session`?`enter-slide`:``,a=document.getElementById({map:`map`,workspace:`ws-view`,session:`session-view`}[e.view]);if(i){if(n){let e=a.getBoundingClientRect();a.style.setProperty(`--ox`,`${Math.round(n.x+n.width/2-e.x)}px`),a.style.setProperty(`--oy`,`${Math.round(n.y+n.height/2-e.y)}px`)}a.classList.remove(`enter-zoom`,`enter-slide`,`enter-back`),ee(a,i),setTimeout(()=>a.classList.remove(i),700)}}function Tn(e,t){let n=e.querySelector(`.queue-list`);if(!n)return;n.hidden=!t?.length;let r=e=>Object.assign(document.createElement(`b`),{textContent:e.as===`steer`?lt():ct()});n.replaceChildren(...(t??[]).map(e=>{let t=document.createElement(`p`);return t.append(r(e),document.createTextNode(e.text)),t}))}function En(e,t){let n=e.querySelector(`.todos`);if(!n||(n.hidden=!t?.length,!t?.length))return;let r=t.filter(e=>e.status===`completed`).length,i=t.find(e=>e.status===`in_progress`);D(n,`summary b`,Lt({done:r,total:t.length})),D(n,`summary span`,i?i.activeForm??i.subject:r===t.length?Rt():``),n.querySelector(`ol`).replaceChildren(...t.map(e=>Object.assign(document.createElement(`li`),{textContent:e.subject,className:e.status})))}function Dn(e,t){let n=e.querySelector(`.monitors`);if(!n||(n.hidden=!t?.length,!t?.length))return;let r=t.filter(e=>e.status===`running`),i=t.filter(e=>e.status===`error`||e.status===`stale`).length;n.dataset.failed=String(i>0),D(n,`summary b`,[Ge(),r.length&&We({count:r.length}),i&&Ve({count:i})].filter(Boolean).join(` · `)),D(n,`summary span`,r[0]?r[0].last??r[0].what:``);let a={running:Ie,done:Pe,error:Fe,stale:Le,stopped:Re};n.querySelector(`ul`).replaceChildren(...t.map(e=>{let t=Object.assign(document.createElement(`li`),{className:e.status}),n=[a[e.status](),e.exit!==void 0&&Ae({code:e.exit}),Ne({count:e.lines})].filter(Boolean).join(` · `);return t.append(Object.assign(document.createElement(`b`),{textContent:e.what}),Object.assign(document.createElement(`small`),{textContent:n})),e.last&&t.append(Object.assign(document.createElement(`code`),{textContent:e.last})),t}))}var On=e=>/^\/(\S{0,64})$/.exec(e)?.[1],kn=(e,t,n)=>(e+n+t)%t;function An(e,t){let n=_(`ul`,{class:`slash`,id:`slash`,role:`listbox`,"aria-label":se()}),r=[],i=0,a;e.setAttribute(`aria-controls`,`slash`);let o=()=>!n.hidden&&r.length>0,s=()=>(r=[],n.hidden=!0,e.removeAttribute(`aria-activedescendant`)),c=()=>{n.replaceChildren(...r.map((e,t)=>{let n=_(`li`,{id:`slash-${t}`,role:`option`,"aria-selected":String(t===i)},_(`b`,null,`/${e.name}`),e.description&&_(`span`,null,e.description));return n.onmousedown=e=>e.preventDefault(),n.onclick=()=>l(e),n})),n.hidden=!r.length,r.length&&(e.setAttribute(`aria-activedescendant`,`slash-${i}`),n.children[i]?.scrollIntoView({block:`nearest`}))},l=t=>{e.value=`/${t.name} `,s(),e.focus(),e.dispatchEvent(new Event(`input`))};return s(),e.addEventListener(`input`,()=>{let n=On(e.value),o=e.value;if(clearTimeout(a),n===void 0)return s();a=setTimeout(async()=>{let a=await t(n).catch(()=>void 0);if(e.value!==o)return;let s=a?.ok&&Array.isArray(a.body.commands)?a.body.commands:[];[r,i]=[s,0],c()},120)}),e.addEventListener(`blur`,s),e.addEventListener(`keydown`,e=>{if(!o()||e.isComposing||e.keyCode===229)return;let t=e.key;if(t===`ArrowDown`||t===`ArrowUp`)i=kn(i,r.length,t===`ArrowDown`?1:-1),c();else if(t===`Enter`&&!e.shiftKey||t===`Tab`)l(r[i]);else if(t===`Escape`)s();else return;e.preventDefault(),e.stopImmediatePropagation()}),n}var jn=16384,Mn=/^\s*\/(quit|exit|new|resume|fork|clone|import|reload)(?=\s|$)/,Q=new Map,Nn=e=>(n,r)=>t(`sessions/${encodeURIComponent(e)}/${n}`,r);function Pn(e,t,n){if(!e.ok)return[`error`,e.status===504?z():e.body.reason??c({status:e.status})];if(t&&!t.startsWith(n))return[`ok`,Zt()]}var Fn=e=>{try{return e?.startsWith(`[`)?JSON.parse(e):e?[`error`,e]:void 0}catch{return[`error`,e]}},In=(e,t)=>e!==``&&!e.startsWith(t)?ht():``,Ln=(e,t)=>e.startsWith(t)?e.slice(t.length).replace(/^\n/,``):e;function $(e){if(!e.online)return ie();if(!e.live)return ne();if(!e.control)return re();if(e.mark===`waiting`)return e.answerable?I():L()}function Rn(t,n,i,a=t=>e(`sessions/${encodeURIComponent(n)}/upload`,t)){let o=`sb-draft:${n}`,s=matchMedia(`(pointer: coarse)`).matches,u=_(`textarea`,{rows:`1`,maxlength:String(jn),"aria-label":De(),enterkeyhint:s?`enter`:`send`}),d=_(`button`,{type:`submit`,class:`cmp-send`},dt()),p=_(`button`,{type:`button`,class:`cmp-alt`},Ce()),m=_(`button`,{type:`button`,class:`cmp-alt cmp-stop`},kt()),h=_(`input`,{type:`file`,multiple:``,hidden:``}),g=_(`button`,{type:`button`,class:`cmp-alt`,"aria-label":te()},`+`),v=_(`p`,{class:`cmp-note`,role:`status`,"aria-live":`polite`}),y=An(u,e=>i(`commands`,{prefix:e})),b=_(`form`,{class:`composer`},y,_(`div`,{class:`cmp-row`},g,h,u,_(`div`,{class:`cmp-acts`},d,p,m)),_(`div`,{class:`cmp-foot`},v));t.replaceChildren(b);let x={name:``,control:!1,live:!1,mark:`unknown`,online:!1},S=!1,C=!1,w=e=>{try{e()}catch{}};w(()=>u.value=sessionStorage.getItem(o)??``);let T=()=>w(()=>u.value?sessionStorage.setItem(o,u.value):sessionStorage.removeItem(o)),E=CSS.supports(`field-sizing`,`content`)?()=>{}:()=>(u.style.height=`auto`,u.style.height=`${Math.min(u.scrollHeight,220)}px`),D=(e,t=``,...n)=>(v.dataset.tone=t,v.replaceChildren(e,...n)),O=(e,t,n)=>{let r=_(`button`,{type:`button`,class:`cmp-yes`},t),i=_(`button`,{type:`button`,class:`cmp-link`},f());C=!0,r.onclick=()=>(C=!1,n()),i.onclick=()=>(C=!1,D(``),u.focus()),D(e,`ask`,r,i),r.focus()},[k,A]=[`${o}:note`,()=>{try{return sessionStorage.getItem(o)??``}catch{return}}],j=e=>w(()=>e?sessionStorage.setItem(k,JSON.stringify(e)):sessionStorage.removeItem(k));function M(e,t,r){let a={sent:r,answer:i(e,t)};return r!==void 0&&(j([`error`,z()]),Q.set(n,a),a.answer.then(e=>{let t=A();e.ok&&t!==void 0&&w(()=>sessionStorage.setItem(o,Ln(t,r))),j(Pn(e,t,r))},()=>j([`error`,z()]))),ee(a)}async function ee(e,{sent:t}=e){S=!0,C=!1,P(),D(t===void 0?``:r());try{let n=await e.answer;if(!b.isConnected)return;if(!n.ok)return n.status===504||j(),D(n.body.reason??c({status:n.status}),`error`);if(t===void 0)return D(``);j();let r=In(u.value,t);u.value=Ln(u.value,t),T(),E(),D(r,`ok`)}catch{D(z(),`error`)}finally{Q.get(n)===e&&Q.delete(n),S=!1,P()}}function N(e,t){let n=u.value,r=$(x),i=t===n;if(S||C||!n.trim())return;if(r)return D(r,`error`);if(new TextEncoder().encode(n).length>16384)return D(Ht(),`error`);let a=!i&&n.match(Mn)?.[0].trim();if(a)return O(ge({command:a}),mt({command:a}),()=>N(e,n));M(`input`,{text:n,as:e,confirmed:i},n)}function P(){let e=$(x),t=x.mark===`working`;u.placeholder=e??st({name:x.name}),d.disabled=S||!!e||!u.value.trim(),p.hidden=m.hidden=!t||!!e,[p.disabled,m.disabled]=[d.disabled,S]}async function F(e){if(!e.length||S)return;let t=$(x);if(t)return D(t,`error`);D(Yt(),``);for(let t of e){if(t.size>20971520)return D(Se({name:t.name}),`error`);let e=await a(t).catch(()=>void 0);if(!e?.ok||typeof e.body.path!=`string`)return D(e?.body.reason??l(),`error`);let n=u.selectionStart??u.value.length,r=u.value.slice(0,n),i=u.value.slice(u.selectionEnd??n),o=`${r&&!/\s$/.test(r)?` `:``}${e.body.path}${/^\s/.test(i)?``:` `}`;u.value=r+o+i,u.selectionStart=u.selectionEnd=n+o.length}D(``),T(),E(),P(),u.focus()}g.onclick=()=>h.click(),h.onchange=()=>void F([...h.files??[]]).finally(()=>h.value=``),u.addEventListener(`paste`,e=>{let t=[...e.clipboardData?.files??[]];t.length&&(e.preventDefault(),F(t))}),b.addEventListener(`dragover`,e=>e.dataTransfer?.types.includes(`Files`)&&e.preventDefault()),b.addEventListener(`drop`,e=>{let t=[...e.dataTransfer?.files??[]];t.length&&(e.preventDefault(),F(t))}),b.addEventListener(`submit`,e=>(e.preventDefault(),N(`send`))),p.onclick=()=>N(`followUp`),m.onclick=()=>O(At(),kt(),()=>void(S||M(`keys`,{keys:[`esc`]}))),u.addEventListener(`input`,()=>(T(),E(),P())),b.addEventListener(`keydown`,e=>{e.key===`Escape`&&!e.isComposing&&(C||e.target===u&&u.value)&&(e.preventDefault(),C&&(C=!1,D(``),u.focus()))}),u.addEventListener(`keydown`,e=>{e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||s&&!e.altKey||(e.preventDefault(),N(e.altKey?`followUp`:`send`))});let I=window.visualViewport,L=()=>[[`--vvh`,I.height],[`--vvt`,I.offsetTop]].forEach(([e,t])=>document.documentElement.style.setProperty(e,`${t}px`));return I&&(I.addEventListener(`resize`,L),I.addEventListener(`scroll`,L),L()),E(),Q.has(n)?ee(Q.get(n)):w(()=>{let e=Fn(sessionStorage.getItem(k));sessionStorage.removeItem(k),e&&D(e[1],e[0])}),{box:u,update:e=>(x=e,P()),ready:()=>!$(x)}}var zn=()=>`<div class="comms-in"><header class="comms-head"><a class="head-back" aria-label="${F()}">‹</a><span class="logo"><svg><use href="#i-comms"/></svg></span><div class="head-id"><h2><small>${ce()}</small> <span></span></h2><p></p></div><div class="modes" role="group"><button type="button" data-mode="chat" aria-pressed="true">${ce()}</button><button type="button" data-mode="term" aria-pressed="false">${Pt()}</button></div><span class="chan link" data-state="live"><i></i><b>${oe()}</b></span><button type="button" class="pair-btn head-info">${we()}</button></header><div class="chat-root"></div><div class="queue-list" hidden></div><details class="todos" hidden><summary><b></b><span></span></summary><ol></ol></details><details class="monitors" hidden><summary><b></b><span></span></summary><ul></ul></details><div class="ask-root"></div><div class="composer-root"></div><div class="term-root" hidden></div></div>`;function Bn(e,{view:t,data:n,openTile:r,embedTerminal:a,online:s,fullScreen:c,opened:l}){let u,d,f,p=0,m,h,g=0,_=()=>setTimeout(()=>e.route.view===`session`&&(document.activeElement??document.body)===document.body&&(matchMedia(`(pointer: fine)`).matches&&d?.ready()?d.box:u?.log)?.focus({preventScroll:!0}));async function v(i){let a=++p,{mountChat:s}=await S(async()=>{let{mountChat:e}=await import(`./chat-CCwo2JZX.js`);return{mountChat:e}},__vite__mapDeps([0]),import.meta.url);if(a!==p||e.route.view!==`session`)return;t.replaceChildren(M(zn()));let m=()=>J(e.net,i)?.u??{key:i,name:e.info?.name??i,role:e.info?.role??`member`,mark:`unknown`};u=s(t.querySelector(`.chat-root`),n(i),{who:m,link:t=>{let n=J(e.net,i)?.u.subs.find(e=>e.name===t)??e.net?.bases.flatMap(e=>[...e.tabs.flatMap(e=>e.units),...e.outside]).find(e=>e.name===t);return n&&Z({view:`session`,ws:J(e.net,n.key)?.base.id??q(e),key:n.key},t)},docFor:(t,n=dn(J(e.net,i)?.u.docs,e.info?.header?.cwd,t))=>n&&(()=>r(hn(m().name,n)))});let g=n(i).post??Nn(i);[d,f]=[Rn(t.querySelector(`.composer-root`),i,g),o(t.querySelector(`.ask-root`),g,void 0,()=>y(`term`))],t.querySelectorAll(`.modes button`).forEach(e=>e.onclick=()=>y(e.dataset.mode)),t.querySelector(`.head-info`).onclick=()=>c(!0),h===`term`&&y(`term`),h=void 0,u.reveal(e.route.at),l(),_()}function y(n){if(e.route.view!==`session`)return;let r=e.route.key,i=t.querySelector(`.comms-in`);if(!i)return void(h=n===`term`?`term`:void 0);i.querySelectorAll(`.modes button`).forEach(e=>e.setAttribute(`aria-pressed`,String(e.dataset.mode===n)));for(let e of[`.chat-root`,`.ask-root`,`.composer-root`])i.querySelector(e).hidden=n===`term`;let o=i.querySelector(`.term-root`);if(o.hidden=n!==`term`,i.classList.toggle(`in-term`,n===`term`),m?.(),m=void 0,n!==`term`)return _();let s=++g;a(r,J(e.net,r)?.u.name??e.info?.name??r,o).then(t=>s===g&&e.route.view===`session`&&e.route.key===r?(m=t,o.querySelector(`.term-sink`)?.focus({preventScroll:!0})):t())}return{get chat(){return u},open(e){[u,d,f]=[void 0,void 0,void 0],t.replaceChildren(M(`<p class="lost">${nt()}</p>`)),v(e)},close(){p++,u=d=f=void 0,t.replaceChildren()},reveal(e){u?.reveal(e),_()},leaveMode:()=>(g++,m?.(),m=void 0),terminal(t){e.route.view===`session`&&e.route.key===t?y(`term`):h=`term`},draw({u:n,hit:r,mk:a,state:o,name:c}){t.querySelector(`.modes`)?.toggleAttribute(`hidden`,!n?.control),u?.docs();let l=t.querySelector(`.comms-head`);if(l){D(l,`h2 span`,n?.name??e.info?.name??``),D(l,`p`,[r?.base.label,r?.squad&&R({label:r.squad})].filter(Boolean).join(` · `));let t=l.querySelector(`.chan`),i=o===`live`||!o&&n;t.dataset.state=i?`live`:`closed`,D(t,`b`,i?oe():o===`recent`?ae():qe()),t.title=t.querySelector(`b`).textContent??``,w(l.querySelector(`.head-back`),{view:`workspace`,ws:q(e)})}En(t,e.info?.todos),Dn(t,n?.monitors),Tn(t,n?.queued),u?.setLive(a===`working`?`${j(n.note,a)}`:C(a)?O[a]():``,a),d?.update({name:c,control:!!n?.control,live:o?o===`live`:!!n,mark:a,online:s(),answerable:!!n?.pending?.answer&&!i(n?.pending?.answer,location.hostname!==`127.0.0.1`)}),f?.update(n?.pending,a===`waiting`&&!!n?.control&&s())}}}var Vn=()=>M(`<div class="col"><a class="token">${A}<span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></a><div class="say"><p></p></div><div class="drones"></div></div>`),Hn=()=>`<div class="zoom-in"><header class="base keep"><a class="tower big"><i class="sweep"></i><i class="pulse"></i><svg><use href="#i-tower"/></svg><b class="badge"></b></a><div class="title"><span class="crown"><svg><use href="#i-crown"/></svg>${E()}</span><h2></h2><p></p></div><dl class="tally"><div><dt>${Ot()}</dt><dd></dd></div><div><dt>${Jt()}</dt><dd></dd></div><div data-mark="working"><dt>${P()}</dt><dd></dd></div><div data-mark="waiting"><dt>${h()}</dt><dd></dd></div></dl></header><div class="spawn-btns"><button type="button" class="pair-btn"></button></div><div class="squads"></div><div class="camps"><section class="tab squad camp" data-group="outposts"><h3><svg><use href="#i-outpost"/></svg><b>${N()}</b><small></small></h3><div class="formation"></div></section><section class="tab squad camp" data-group="outside"><h3><svg><use href="#i-outside"/></svg><b>${rt()}</b><small>${it()}</small></h3><div class="formation"></div></section></div><p class="lost" hidden></p></div>`;function Un(e,t){e.firstElementChild||e.append(M(Hn()));let{net:n,cards:r}=t,i=e.firstElementChild,a=n?.bases.find(e=>e.id===q(t)),o=i.querySelector(`.lost`);if(o.hidden=!!a,o.textContent=n?Ee():Xt(),i.classList.toggle(`void`,!a),!a)return;let s=i.querySelector(`.keep`);b(s,a.mark),s.classList.toggle(`head`,a.head);let c=i.querySelector(`.tower`);c.classList.toggle(`ghost`,!a.tower),b(c,a.tower?.mark??`unknown`),w(c,a.tower?{view:`session`,ws:a.id,key:a.tower.key}:void 0),c.toggleAttribute(`hidden`,!1),c.toggleAttribute(`data-alert`,!!(a.tower&&C(a.tower.mark))),D(i,`h2`,a.label),v(i.querySelector(`.spawn-btns button`),a),D(i,`.title p`,a.tower?T({state:O[a.tower.mark]()}):g());let l=a.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]));[a.tabs.length,l.length,l.filter(e=>e.mark===`working`).length,l.filter(e=>e.mark===`waiting`).length].forEach((e,t)=>i.querySelectorAll(`dd`)[t].textContent=String(e));let u=(e,t)=>{b(e,t.mark),X(e.querySelector(`.token`),t,a.id);let n=e.querySelector(`.say`),i=r[t.key]??``;n.hidden=!i,D(n,`p`,i),k(e.querySelector(`.drones`),t.subs,Y,(e,t)=>(e.classList.add(`drone`),X(e,t,a.id)))};k(i.querySelector(`.squads`),a.tabs,()=>M(`<section class="tab squad"><h3><i class="flag"></i><b></b><small></small><button type="button" class="tab-add"></button></h3><div class="formation"></div></section>`),(e,t)=>{D(e,`h3 b`,R({label:t.label})),v(e.querySelector(`.tab-add`),a,t.id);let n=t.units.flatMap(e=>[e,...e.subs]);D(e,`h3 small`,Kt({count:n.length})),b(e,[`waiting`,`error`,`working`].find(e=>n.some(t=>t.mark===e))??`idle`),k(e.querySelector(`.formation`),t.units,Vn,u)});let d=(e,t)=>{let n=i.querySelector(`[data-group="${e}"]`);n.hidden=!t.length,k(n.querySelector(`.formation`),t,Y,(e,t)=>X(e,t,a.id))};d(`outposts`,a.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?p():void 0}))),d(`outside`,a.outside)}var Wn=200;function Gn({data:e,restart:t,openTile:n,embedTerminal:r,online:i}){let[a,o,s]=[`ws-view`,`session-view`,`dossier`].map(e=>document.getElementById(e)),c={route:{view:`map`},cards:{}},l=[],u=!1,d=new Map,f=e=>s.classList.toggle(`full`,e),p=Sn(s,c,{openTile:n,fullScreen:f}),m=Bn(c,{view:o,data:e,openTile:n,embedTerminal:r,online:i,fullScreen:f,opened:()=>(l.splice(0).forEach(h),g())});function h(e){m.chat?.apply(e);for(let t of e.items??[])t.kind===`assistant`&&([c.model,c.ctx]=[t.model??c.model,t.ctx??c.ctx])}function g(){let e=yn(c);e&&(p(e),m.draw(e))}let _=()=>(Cn(c),c.route.view===`workspace`?Un(a,c):g());return{terminal:m.terminal,locate:e=>J(c.net,e),show(e,t,n){let[r,i]=c.route.view===`session`?[c.route.key,c.route.at]:[];(e.view!==`workspace`||c.route.view!==`workspace`||e.ws!==c.route.ws)&&(c.cards={}),c.route=e,a.hidden=e.view!==`workspace`,o.hidden=s.hidden=e.view!==`session`,f(!1),(e.view!==`session`||e.key!==r)&&m.leaveMode(),e.view===`session`&&e.key!==r?([c.info,c.model,c.ctx,l,u]=[void 0,void 0,void 0,[],!1],m.open(e.key)):e.view===`session`&&e.at!==i?m.reveal(e.at):e.view!==`session`&&m.close(),_(),e!==t&&wn(e,t,n)},net(e){c.net=e,gn(e,d,c.route.view===`session`?c.route.key:void 0,(e,t)=>n(hn(e,t),!1)),c.route.view!==`map`&&_()},cards(e){c.cards={...c.cards,...e},c.route.view===`workspace`&&Un(a,c)},history(e){if(c.route.view===`session`&&e.key===c.route.key){if(c.info={...c.info,...e,items:void 0},e.reset&&([c.model,c.ctx]=[void 0,void 0]),document.hidden)return l.length<Wn?void l.push(e):void(u=!0);m.chat?h(e):l.push(e),g()}},wake(){if(u)return u=!1,l=[],t();l.splice(0).forEach(e=>m.chat&&h(e)),_()}}}export{Gn as mountFocus,U as n,sn as t};
|
|
7
|
+
`))))}}return i}function sn(e){let t=e=>{if(typeof e==`string`)return document.createTextNode(e);let n=document.createElement(e.tag);for(let[t,r]of Object.entries(e.attrs??{}))n.setAttribute(t,r);return n.append(...e.kids.map(t)),n},n=document.createDocumentFragment();return n.append(...e.map(t)),n}var cn=`allow-forms allow-popups allow-popups-to-escape-sandbox`,ln={},W=new Map;function un(e,t=``){let n=[];for(let r of(e.startsWith(`/`)?e:`${t}/${e}`).split(`/`))r===`..`?n.pop():r&&r!==`.`&&n.push(r);return`/${n.join(`/`)}`}var dn=(e,t,n)=>e?.find(e=>un(e.display,t)===un(n,t));function fn(e,t,n=[]){let r=e.get(t);return e.set(t,new Set(n.map(e=>e.display))),r?n.filter(e=>!r.has(e.display)):[]}var G=(e,t,n=``)=>(e.state.dataset.tone=n,e.state.textContent=t),pn=(e,t)=>(e.failed=!0,G(e,t,`error`)),mn=e=>ln.src?.(e)??`doc/${encodeURIComponent(e)}/`;function K(e){if([e.loaded,e.failed]=[e.card.revision,!1],G(e,``),e.frame)return void(e.frame.src=mn(e.card.cap));let t=e.card.cap,n=/\.(md|markdown)$/i.test(e.card.display),r=++e.seq;(ln.load?.(t)??fetch(`api/doc/${encodeURIComponent(t)}`,{cache:`no-store`}).then(e=>e.ok?e.json():void 0)).then(t=>e.seq!==r||(t?e.body.replaceChildren(n?_(`div`,{class:`md`},sn(U(t.text))):_(`pre`,{class:`doc-pre`},t.text)):pn(e,ue())),()=>e.seq!==r||pn(e,a()))}function hn(e,t){let n=W.get(t.cap);if(n)return n.tile;let r=t.display.split(`/`).pop()||t.display,i=t.kind===`html`?_(`iframe`,{class:`doc-frame`,sandbox:cn,referrerpolicy:`no-referrer`,title:vt({display:t.display,unit:e})}):void 0,a=_(`button`,{type:`button`,class:`cmp-link`},ut()),o=i&&_(`a`,{class:`cmp-link`,href:mn(t.cap),target:`_blank`,rel:`noopener noreferrer`},tt()),s=i??_(`div`,{class:`doc-text`},_(`p`,{class:`chat-empty`},Te())),c=_(`span`,{class:`term-state`,role:`status`}),l=_(`em`,{class:`doc-off`},Ze()),u=_(`div`,{class:`doc-tile`},_(`div`,{class:`term-bar doc-bar`},_(`span`,{class:`doc-why`},t.reason),l,c,_(`span`,{class:`doc-acts`},a,o)),s),d=new IntersectionObserver(([e])=>(p.shown=!!e?.isIntersecting,p.shown&&!p.gone&&(p.failed||p.loaded!==p.card.revision)&&K(p))),f={id:`doc:${t.cap}`,title:`${r} · ${e}`,icon:`i-doc`,body:()=>u,closed:()=>(W.delete(t.cap),d.disconnect())},p={card:t,tile:f,loaded:0,seq:0,shown:!1,gone:!1,body:s,state:c,off:l,...i&&{frame:i}};return a.onclick=()=>!p.gone&&K(p),l.hidden=t.onScreen,d.observe(u),K(p),W.set(t.cap,p),f}function gn(e,t,n,r){let i=new Map,a=new Set;for(let o of e.bases)for(let e of[...o.tower?[o.tower]:[],...[...o.tabs.flatMap(e=>e.units),...o.outside].flatMap(e=>[e,...e.subs])]){for(let t of e.docs??[])i.set(t.cap,t);for(let i of fn(t,e.key,e.docs))e.key===n&&r(e.name,i);a.add(e.key)}for(let e of t.keys())a.has(e)||t.delete(e);_n(i)}function _n(e){for(let t of W.values()){let n=e.get(t.card.cap);if(!n){t.gone||G(t,de(),`error`),t.gone=!0;continue}let r=t.gone&&(G(t,``),t.failed);[t.card,t.gone,t.off.hidden]=[n,!1,n.onScreen],(n.revision!==t.loaded||r)&&(t.shown?K(t):n.revision!==t.loaded&&G(t,fe()))}}function vn(e,t,n,r){e.hidden=!t?.length&&!n,e.querySelector(`.d-doc-list`).replaceChildren(...(t??[]).map(e=>{let t=_(`button`,{type:`button`,class:`d-doc`,title:e.reason},_(`b`,null,e.display),_(`small`,null,e.onScreen?e.reason:et({reason:e.reason})));return t.onclick=()=>r(e),t})),e.querySelector(`.d-docs-cut`).hidden=!n}var q=e=>e.route.view===`map`?``:e.route.ws;function J(e,t){for(let n of e?.bases??[]){if(n.tower?.key===t)return{u:{key:t,name:n.tower.name,role:`tower`,mark:n.tower.mark,control:n.tower.control,pending:n.tower.pending,docs:n.tower.docs,docsCut:n.tower.docsCut,subs:[]},base:n};for(let[e,r]of[...n.tabs.map(e=>[e.label,e.units]),[void 0,n.outside]])for(let i of r){if(i.key===t)return{u:i,base:n,squad:e};let r=i.subs.find(e=>e.key===t);if(r)return{u:r,base:n,squad:e,launcher:i}}}}function yn(e){if(e.route.view!==`session`)return;let t=e.route.key,n=J(e.net,t),r=n?.u;return{key:t,hit:n,u:r,mk:r?.mark??`unknown`,state:e.info?.state,name:r?.name??e.info?.name??t}}var Y=()=>M(`<a class="token">${A}<span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></a>`);function X(e,t,n){w(e,t.key?{view:`session`,ws:n,key:t.key}:void 0),e.toggleAttribute(`hidden`,!1),e.toggleAttribute(`data-alert`,!!t.key&&C(t.mark)),b(e,t.mark),y(e.querySelector(`.plate`),t.role,t.mark,t.docs),D(e,`.name`,t.name),D(e,`.role`,x(t.role)),D(e,`.note`,j(t.note,t.mark))}var Z=(e,t)=>{let n=document.createElement(`a`);return w(n,e),n.textContent=t,n},bn=()=>`<div class="dossier-in"><span class="tag">${qt()}</span><button class="x d-x" type="button" aria-label="${d()}">×</button><div class="portrait">${A}</div><h3></h3><p class="d-line"><em class="role"></em> <span class="state"></span></p><p class="d-note" hidden></p><dl class="specs"></dl><div class="d-docs" hidden><h4>${s()}</h4><div class="d-doc-list"></div><p class="d-docs-cut" hidden>${pe()}</p></div><div class="d-drones" hidden><h4>${le()}</h4><div class="formation"></div></div><div class="d-squads" hidden><h4>${Ut()}</h4><div class="d-squad-list"></div></div></div>`,xn=e=>e.classList.add(`drone`);function Sn(e,t,{openTile:n,fullScreen:r}){return function({key:i,hit:a,u:o,mk:s,state:c,name:l}){e.firstElementChild||(e.append(M(bn())),e.querySelector(`.d-x`).onclick=()=>r(!1));let u=e.firstElementChild,{net:d,info:f,model:p,ctx:m}=t,h=q(t);b(u,s),y(u.querySelector(`.plate`),o?.role??f?.role??`member`,s),D(u,`h3`,l),D(u,`.role`,x(o?.role??f?.role??`session`)),D(u,`.state`,o?j(o.note,s):Je());let g=u.querySelector(`.d-note`);g.hidden=c!==`recent`&&c!==`unknown`,g.replaceChildren(c===`unknown`?Xe():Ye()),f?.successor&&g.append(` ${jt()} `,Z({view:`session`,ws:h,key:f.successor},J(d,f.successor)?.u.name??Ke()));let _=[[Ct(),p],[bt(),m?Vt({count:m.toLocaleString()}):void 0],[xt(),f?.header?.cwd],[yt(),a&&Z({view:`workspace`,ws:a.base.id},a.base.label)],[wt(),a?.squad],[St(),a?.launcher&&Z({view:`session`,ws:a.base.id,key:a.launcher.key},a.launcher.name)],[Tt(),f?.unreadable?ye({count:f.unreadable}):void 0]];u.querySelector(`.specs`).replaceChildren(..._.filter(([,e])=>e).map(([e,t])=>{let n=M(`<div><dt></dt><dd></dd></div>`);return n.firstElementChild.textContent=e,n.lastElementChild.append(t),n})),vn(u.querySelector(`.d-docs`),o?.docs,o?.docsCut,e=>(r(!1),n(hn(l,e))));let v=u.querySelector(`.d-drones`);v.hidden=!o?.subs.length,k(v.querySelector(`.formation`),(o?.subs??[]).map(e=>({...e,id:e.key})),Y,(e,t)=>(xn(e),X(e,t,h)));let S=u.querySelector(`.d-squads`),C=o?.role===`tower`?a?.base:void 0;S.hidden=!C?.tabs.length,k(S.querySelector(`.d-squad-list`),C?.tabs??[],()=>M(`<div class="d-squad"><small></small><div class="formation"></div></div>`),(e,t)=>(D(e,`small`,R({label:t.label})),k(e.querySelector(`.formation`),t.units.flatMap(e=>[e,...e.subs]).map(e=>({...e,id:e.key})),Y,(e,t)=>(xn(e),X(e,t,C.id)))))}}function Cn(e){let t=(e,t,n)=>{let r=document.createElement(e);return r.textContent=t,n&&w(r,n),r},n=document.getElementById(`crumbs`),{route:r,net:i,info:a}=e;if(r.view===`map`)return n.replaceChildren(t(`b`,`Straw Net`),t(`span`,m()));let o=i?.bases.find(e=>e.id===r.ws)?.label??r.ws,s=r.view===`session`?J(i,r.key)?.u.name??a?.name??r.key:``,c=[];for(let e=r.view===`session`?J(i,r.key):void 0,t=0;e?.launcher&&t<8;e=J(i,e.launcher.key),t++)c.unshift(e.launcher);let l=[t(`a`,`Straw Net`,{view:`map`}),r.view===`workspace`?t(`b`,o):t(`a`,o,{view:`workspace`,ws:r.ws}),...c.map(e=>t(`a`,e.name,{view:`session`,ws:r.ws,key:e.key})),...s?[t(`b`,s)]:[]];l.slice(1,-2).forEach(e=>e.classList.add(`mid`));let u=l.length>3?[Object.assign(t(`span`,`…`),{className:`crumb-more`,role:`button`,tabIndex:0,onclick:()=>n.classList.toggle(`open`)})]:[];n.classList.remove(`open`),n.replaceChildren(l[0],...u,...l.slice(1))}function wn(e,t,n){let r=e=>[`map`,`workspace`,`session`].indexOf(e.view),i=r(e)<r(t)?`enter-back`:e.view===`workspace`&&n?`enter-zoom`:e.view===`session`&&t.view!==`session`?`enter-slide`:``,a=document.getElementById({map:`map`,workspace:`ws-view`,session:`session-view`}[e.view]);if(i){if(n){let e=a.getBoundingClientRect();a.style.setProperty(`--ox`,`${Math.round(n.x+n.width/2-e.x)}px`),a.style.setProperty(`--oy`,`${Math.round(n.y+n.height/2-e.y)}px`)}a.classList.remove(`enter-zoom`,`enter-slide`,`enter-back`),ee(a,i),setTimeout(()=>a.classList.remove(i),700)}}function Tn(e,t){let n=e.querySelector(`.queue-list`);if(!n)return;n.hidden=!t?.length;let r=e=>Object.assign(document.createElement(`b`),{textContent:e.as===`steer`?lt():ct()});n.replaceChildren(...(t??[]).map(e=>{let t=document.createElement(`p`);return t.append(r(e),document.createTextNode(e.text)),t}))}function En(e,t){let n=e.querySelector(`.todos`);if(!n||(n.hidden=!t?.length,!t?.length))return;let r=t.filter(e=>e.status===`completed`).length,i=t.find(e=>e.status===`in_progress`);D(n,`summary b`,Lt({done:r,total:t.length})),D(n,`summary span`,i?i.activeForm??i.subject:r===t.length?Rt():``),n.querySelector(`ol`).replaceChildren(...t.map(e=>Object.assign(document.createElement(`li`),{textContent:e.subject,className:e.status})))}function Dn(e,t){let n=e.querySelector(`.monitors`);if(!n||(n.hidden=!t?.length,!t?.length))return;let r=t.filter(e=>e.status===`running`),i=t.filter(e=>e.status===`error`||e.status===`stale`).length;n.dataset.failed=String(i>0),D(n,`summary b`,[Ge(),r.length&&We({count:r.length}),i&&Ve({count:i})].filter(Boolean).join(` · `)),D(n,`summary span`,r[0]?r[0].last??r[0].what:``);let a={running:Ie,done:Pe,error:Fe,stale:Le,stopped:Re};n.querySelector(`ul`).replaceChildren(...t.map(e=>{let t=Object.assign(document.createElement(`li`),{className:e.status}),n=[a[e.status](),e.exit!==void 0&&Ae({code:e.exit}),Ne({count:e.lines})].filter(Boolean).join(` · `);return t.append(Object.assign(document.createElement(`b`),{textContent:e.what}),Object.assign(document.createElement(`small`),{textContent:n})),e.last&&t.append(Object.assign(document.createElement(`code`),{textContent:e.last})),t}))}var On=e=>/^\/(\S{0,64})$/.exec(e)?.[1],kn=(e,t,n)=>(e+n+t)%t;function An(e,t){let n=_(`ul`,{class:`slash`,id:`slash`,role:`listbox`,"aria-label":se()}),r=[],i=0,a;e.setAttribute(`aria-controls`,`slash`);let o=()=>!n.hidden&&r.length>0,s=()=>(r=[],n.hidden=!0,e.removeAttribute(`aria-activedescendant`)),c=()=>{n.replaceChildren(...r.map((e,t)=>{let n=_(`li`,{id:`slash-${t}`,role:`option`,"aria-selected":String(t===i)},_(`b`,null,`/${e.name}`),e.description&&_(`span`,null,e.description));return n.onmousedown=e=>e.preventDefault(),n.onclick=()=>l(e),n})),n.hidden=!r.length,r.length&&(e.setAttribute(`aria-activedescendant`,`slash-${i}`),n.children[i]?.scrollIntoView({block:`nearest`}))},l=t=>{e.value=`/${t.name} `,s(),e.focus(),e.dispatchEvent(new Event(`input`))};return s(),e.addEventListener(`input`,()=>{let n=On(e.value),o=e.value;if(clearTimeout(a),n===void 0)return s();a=setTimeout(async()=>{let a=await t(n).catch(()=>void 0);if(e.value!==o)return;let s=a?.ok&&Array.isArray(a.body.commands)?a.body.commands:[];[r,i]=[s,0],c()},120)}),e.addEventListener(`blur`,s),e.addEventListener(`keydown`,e=>{if(!o()||e.isComposing||e.keyCode===229)return;let t=e.key;if(t===`ArrowDown`||t===`ArrowUp`)i=kn(i,r.length,t===`ArrowDown`?1:-1),c();else if(t===`Enter`&&!e.shiftKey||t===`Tab`)l(r[i]);else if(t===`Escape`)s();else return;e.preventDefault(),e.stopImmediatePropagation()}),n}var jn=16384,Mn=/^\s*\/(quit|exit|new|resume|fork|clone|import|reload)(?=\s|$)/,Q=new Map,Nn=e=>(n,r)=>t(`sessions/${encodeURIComponent(e)}/${n}`,r);function Pn(e,t,n){if(!e.ok)return[`error`,e.status===504?z():e.body.reason??c({status:e.status})];if(t&&!t.startsWith(n))return[`ok`,Zt()]}var Fn=e=>{try{return e?.startsWith(`[`)?JSON.parse(e):e?[`error`,e]:void 0}catch{return[`error`,e]}},In=(e,t)=>e!==``&&!e.startsWith(t)?ht():``,Ln=(e,t)=>e.startsWith(t)?e.slice(t.length).replace(/^\n/,``):e;function $(e){if(!e.online)return ie();if(!e.live)return ne();if(!e.control)return re();if(e.mark===`waiting`)return e.answerable?I():L()}function Rn(t,n,i,a=t=>e(`sessions/${encodeURIComponent(n)}/upload`,t)){let o=`sb-draft:${n}`,s=matchMedia(`(pointer: coarse)`).matches,u=_(`textarea`,{rows:`1`,maxlength:String(jn),"aria-label":De(),enterkeyhint:s?`enter`:`send`}),d=_(`button`,{type:`submit`,class:`cmp-send`},dt()),p=_(`button`,{type:`button`,class:`cmp-alt`},Ce()),m=_(`button`,{type:`button`,class:`cmp-alt cmp-stop`},kt()),h=_(`input`,{type:`file`,multiple:``,hidden:``}),g=_(`button`,{type:`button`,class:`cmp-alt`,"aria-label":te()},`+`),v=_(`p`,{class:`cmp-note`,role:`status`,"aria-live":`polite`}),y=An(u,e=>i(`commands`,{prefix:e})),b=_(`form`,{class:`composer`},y,_(`div`,{class:`cmp-row`},g,h,u,_(`div`,{class:`cmp-acts`},d,p,m)),_(`div`,{class:`cmp-foot`},v));t.replaceChildren(b);let x={name:``,control:!1,live:!1,mark:`unknown`,online:!1},S=!1,C=!1,w=e=>{try{e()}catch{}};w(()=>u.value=sessionStorage.getItem(o)??``);let T=()=>w(()=>u.value?sessionStorage.setItem(o,u.value):sessionStorage.removeItem(o)),E=CSS.supports(`field-sizing`,`content`)?()=>{}:()=>(u.style.height=`auto`,u.style.height=`${Math.min(u.scrollHeight,220)}px`),D=(e,t=``,...n)=>(v.dataset.tone=t,v.replaceChildren(e,...n)),O=(e,t,n)=>{let r=_(`button`,{type:`button`,class:`cmp-yes`},t),i=_(`button`,{type:`button`,class:`cmp-link`},f());C=!0,r.onclick=()=>(C=!1,n()),i.onclick=()=>(C=!1,D(``),u.focus()),D(e,`ask`,r,i),r.focus()},[k,A]=[`${o}:note`,()=>{try{return sessionStorage.getItem(o)??``}catch{return}}],j=e=>w(()=>e?sessionStorage.setItem(k,JSON.stringify(e)):sessionStorage.removeItem(k));function M(e,t,r){let a={sent:r,answer:i(e,t)};return r!==void 0&&(j([`error`,z()]),Q.set(n,a),a.answer.then(e=>{let t=A();e.ok&&t!==void 0&&w(()=>sessionStorage.setItem(o,Ln(t,r))),j(Pn(e,t,r))},()=>j([`error`,z()]))),ee(a)}async function ee(e,{sent:t}=e){S=!0,C=!1,P(),D(t===void 0?``:r());try{let n=await e.answer;if(!b.isConnected)return;if(!n.ok)return n.status===504||j(),D(n.body.reason??c({status:n.status}),`error`);if(t===void 0)return D(``);j();let r=In(u.value,t);u.value=Ln(u.value,t),T(),E(),D(r,`ok`)}catch{D(z(),`error`)}finally{Q.get(n)===e&&Q.delete(n),S=!1,P()}}function N(e,t){let n=u.value,r=$(x),i=t===n;if(S||C||!n.trim())return;if(r)return D(r,`error`);if(new TextEncoder().encode(n).length>16384)return D(Ht(),`error`);let a=!i&&n.match(Mn)?.[0].trim();if(a)return O(ge({command:a}),mt({command:a}),()=>N(e,n));M(`input`,{text:n,as:e,confirmed:i},n)}function P(){let e=$(x),t=x.mark===`working`;u.placeholder=e??st({name:x.name}),d.disabled=S||!!e||!u.value.trim(),p.hidden=m.hidden=!t||!!e,[p.disabled,m.disabled]=[d.disabled,S]}async function F(e){if(!e.length||S)return;let t=$(x);if(t)return D(t,`error`);D(Yt(),``);for(let t of e){if(t.size>20971520)return D(Se({name:t.name}),`error`);let e=await a(t).catch(()=>void 0);if(!e?.ok||typeof e.body.path!=`string`)return D(e?.body.reason??l(),`error`);let n=u.selectionStart??u.value.length,r=u.value.slice(0,n),i=u.value.slice(u.selectionEnd??n),o=`${r&&!/\s$/.test(r)?` `:``}${e.body.path}${/^\s/.test(i)?``:` `}`;u.value=r+o+i,u.selectionStart=u.selectionEnd=n+o.length}D(``),T(),E(),P(),u.focus()}g.onclick=()=>h.click(),h.onchange=()=>void F([...h.files??[]]).finally(()=>h.value=``),u.addEventListener(`paste`,e=>{let t=[...e.clipboardData?.files??[]];t.length&&(e.preventDefault(),F(t))}),b.addEventListener(`dragover`,e=>e.dataTransfer?.types.includes(`Files`)&&e.preventDefault()),b.addEventListener(`drop`,e=>{let t=[...e.dataTransfer?.files??[]];t.length&&(e.preventDefault(),F(t))}),b.addEventListener(`submit`,e=>(e.preventDefault(),N(`send`))),p.onclick=()=>N(`followUp`),m.onclick=()=>O(At(),kt(),()=>void(S||M(`keys`,{keys:[`esc`]}))),u.addEventListener(`input`,()=>(T(),E(),P())),b.addEventListener(`keydown`,e=>{e.key===`Escape`&&!e.isComposing&&(C||e.target===u&&u.value)&&(e.preventDefault(),C&&(C=!1,D(``),u.focus()))}),u.addEventListener(`keydown`,e=>{e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||s&&!e.altKey||(e.preventDefault(),N(e.altKey?`followUp`:`send`))});let I=window.visualViewport,L=()=>[[`--vvh`,I.height],[`--vvt`,I.offsetTop]].forEach(([e,t])=>document.documentElement.style.setProperty(e,`${t}px`));return I&&(I.addEventListener(`resize`,L),I.addEventListener(`scroll`,L),L()),E(),Q.has(n)?ee(Q.get(n)):w(()=>{let e=Fn(sessionStorage.getItem(k));sessionStorage.removeItem(k),e&&D(e[1],e[0])}),{box:u,update:e=>(x=e,P()),ready:()=>!$(x)}}var zn=()=>`<div class="comms-in"><header class="comms-head"><a class="head-back" aria-label="${F()}">‹</a><span class="logo"><svg><use href="#i-comms"/></svg></span><div class="head-id"><h2><small>${ce()}</small> <span></span></h2><p></p></div><div class="modes" role="group"><button type="button" data-mode="chat" aria-pressed="true">${ce()}</button><button type="button" data-mode="term" aria-pressed="false">${Pt()}</button></div><span class="chan link" data-state="live"><i></i><b>${oe()}</b></span><button type="button" class="pair-btn head-info">${we()}</button></header><div class="chat-root"></div><div class="queue-list" hidden></div><details class="todos" hidden><summary><b></b><span></span></summary><ol></ol></details><details class="monitors" hidden><summary><b></b><span></span></summary><ul></ul></details><div class="ask-root"></div><div class="composer-root"></div><div class="term-root" hidden></div></div>`;function Bn(e,{view:t,data:n,openTile:r,embedTerminal:a,online:s,fullScreen:c,opened:l}){let u,d,f,p=0,m,h,g=0,_=()=>setTimeout(()=>e.route.view===`session`&&(document.activeElement??document.body)===document.body&&(matchMedia(`(pointer: fine)`).matches&&d?.ready()?d.box:u?.log)?.focus({preventScroll:!0}));async function v(i){let a=++p,{mountChat:s}=await S(async()=>{let{mountChat:e}=await import(`./chat-Xv1V3Ep2.js`);return{mountChat:e}},__vite__mapDeps([0]),import.meta.url);if(a!==p||e.route.view!==`session`)return;t.replaceChildren(M(zn()));let m=()=>J(e.net,i)?.u??{key:i,name:e.info?.name??i,role:e.info?.role??`member`,mark:`unknown`};u=s(t.querySelector(`.chat-root`),n(i),{who:m,link:t=>{let n=J(e.net,i)?.u.subs.find(e=>e.name===t)??e.net?.bases.flatMap(e=>[...e.tabs.flatMap(e=>e.units),...e.outside]).find(e=>e.name===t);return n&&Z({view:`session`,ws:J(e.net,n.key)?.base.id??q(e),key:n.key},t)},docFor:(t,n=dn(J(e.net,i)?.u.docs,e.info?.header?.cwd,t))=>n&&(()=>r(hn(m().name,n)))});let g=n(i).post??Nn(i);[d,f]=[Rn(t.querySelector(`.composer-root`),i,g),o(t.querySelector(`.ask-root`),g,void 0,()=>y(`term`))],t.querySelectorAll(`.modes button`).forEach(e=>e.onclick=()=>y(e.dataset.mode)),t.querySelector(`.head-info`).onclick=()=>c(!0),h===`term`&&y(`term`),h=void 0,u.reveal(e.route.at),l(),_()}function y(n){if(e.route.view!==`session`)return;let r=e.route.key,i=t.querySelector(`.comms-in`);if(!i)return void(h=n===`term`?`term`:void 0);i.querySelectorAll(`.modes button`).forEach(e=>e.setAttribute(`aria-pressed`,String(e.dataset.mode===n)));for(let e of[`.chat-root`,`.ask-root`,`.composer-root`])i.querySelector(e).hidden=n===`term`;let o=i.querySelector(`.term-root`);if(o.hidden=n!==`term`,i.classList.toggle(`in-term`,n===`term`),m?.(),m=void 0,n!==`term`)return _();let s=++g;a(r,J(e.net,r)?.u.name??e.info?.name??r,o).then(t=>s===g&&e.route.view===`session`&&e.route.key===r?(m=t,o.querySelector(`.term-sink`)?.focus({preventScroll:!0})):t())}return{get chat(){return u},open(e){[u,d,f]=[void 0,void 0,void 0],t.replaceChildren(M(`<p class="lost">${nt()}</p>`)),v(e)},close(){p++,u=d=f=void 0,t.replaceChildren()},reveal(e){u?.reveal(e),_()},leaveMode:()=>(g++,m?.(),m=void 0),terminal(t){e.route.view===`session`&&e.route.key===t?y(`term`):h=`term`},draw({u:n,hit:r,mk:a,state:o,name:c}){t.querySelector(`.modes`)?.toggleAttribute(`hidden`,!n?.control),u?.docs();let l=t.querySelector(`.comms-head`);if(l){D(l,`h2 span`,n?.name??e.info?.name??``),D(l,`p`,[r?.base.label,r?.squad&&R({label:r.squad})].filter(Boolean).join(` · `));let t=l.querySelector(`.chan`),i=o===`live`||!o&&n;t.dataset.state=i?`live`:`closed`,D(t,`b`,i?oe():o===`recent`?ae():qe()),t.title=t.querySelector(`b`).textContent??``,w(l.querySelector(`.head-back`),{view:`workspace`,ws:q(e)})}En(t,e.info?.todos),Dn(t,n?.monitors),Tn(t,n?.queued),u?.setLive(a===`working`?`${j(n.note,a)}`:C(a)?O[a]():``,a),d?.update({name:c,control:!!n?.control,live:o?o===`live`:!!n,mark:a,online:s(),answerable:!!n?.pending?.answer&&!i(n?.pending?.answer,location.hostname!==`127.0.0.1`)}),f?.update(n?.pending,a===`waiting`&&!!n?.control&&s())}}}var Vn=()=>M(`<div class="col"><a class="token">${A}<span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></a><div class="say"><p></p></div><div class="drones"></div></div>`),Hn=()=>`<div class="zoom-in"><header class="base keep"><a class="tower big"><i class="sweep"></i><i class="pulse"></i><svg><use href="#i-tower"/></svg><b class="badge"></b></a><div class="title"><span class="crown"><svg><use href="#i-crown"/></svg>${E()}</span><h2></h2><p></p></div><dl class="tally"><div><dt>${Ot()}</dt><dd></dd></div><div><dt>${Jt()}</dt><dd></dd></div><div data-mark="working"><dt>${P()}</dt><dd></dd></div><div data-mark="waiting"><dt>${h()}</dt><dd></dd></div></dl></header><div class="spawn-btns"><button type="button" class="pair-btn"></button></div><div class="squads"></div><div class="camps"><section class="tab squad camp" data-group="outposts"><h3><svg><use href="#i-outpost"/></svg><b>${N()}</b><small></small></h3><div class="formation"></div></section><section class="tab squad camp" data-group="outside"><h3><svg><use href="#i-outside"/></svg><b>${rt()}</b><small>${it()}</small></h3><div class="formation"></div></section></div><p class="lost" hidden></p></div>`;function Un(e,t){e.firstElementChild||e.append(M(Hn()));let{net:n,cards:r}=t,i=e.firstElementChild,a=n?.bases.find(e=>e.id===q(t)),o=i.querySelector(`.lost`);if(o.hidden=!!a,o.textContent=n?Ee():Xt(),i.classList.toggle(`void`,!a),!a)return;let s=i.querySelector(`.keep`);b(s,a.mark),s.classList.toggle(`head`,a.head);let c=i.querySelector(`.tower`);c.classList.toggle(`ghost`,!a.tower),b(c,a.tower?.mark??`unknown`),w(c,a.tower?{view:`session`,ws:a.id,key:a.tower.key}:void 0),c.toggleAttribute(`hidden`,!1),c.toggleAttribute(`data-alert`,!!(a.tower&&C(a.tower.mark))),D(i,`h2`,a.label),v(i.querySelector(`.spawn-btns button`),a),D(i,`.title p`,a.tower?T({state:O[a.tower.mark]()}):g());let l=a.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]));[a.tabs.length,l.length,l.filter(e=>e.mark===`working`).length,l.filter(e=>e.mark===`waiting`).length].forEach((e,t)=>i.querySelectorAll(`dd`)[t].textContent=String(e));let u=(e,t)=>{b(e,t.mark),X(e.querySelector(`.token`),t,a.id);let n=e.querySelector(`.say`),i=r[t.key]??``;n.hidden=!i,D(n,`p`,i),k(e.querySelector(`.drones`),t.subs,Y,(e,t)=>(e.classList.add(`drone`),X(e,t,a.id)))};k(i.querySelector(`.squads`),a.tabs,()=>M(`<section class="tab squad"><h3><i class="flag"></i><b></b><small></small><button type="button" class="tab-add"></button></h3><div class="formation"></div></section>`),(e,t)=>{D(e,`h3 b`,R({label:t.label})),v(e.querySelector(`.tab-add`),a,t.id);let n=t.units.flatMap(e=>[e,...e.subs]);D(e,`h3 small`,Kt({count:n.length})),b(e,[`waiting`,`error`,`working`].find(e=>n.some(t=>t.mark===e))??`idle`),k(e.querySelector(`.formation`),t.units,Vn,u)});let d=(e,t)=>{let n=i.querySelector(`[data-group="${e}"]`);n.hidden=!t.length,k(n.querySelector(`.formation`),t,Y,(e,t)=>X(e,t,a.id))};d(`outposts`,a.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?p():void 0}))),d(`outside`,a.outside)}var Wn=200;function Gn({data:e,restart:t,openTile:n,embedTerminal:r,online:i}){let[a,o,s]=[`ws-view`,`session-view`,`dossier`].map(e=>document.getElementById(e)),c={route:{view:`map`},cards:{}},l=[],u=!1,d=new Map,f=e=>s.classList.toggle(`full`,e),p=Sn(s,c,{openTile:n,fullScreen:f}),m=Bn(c,{view:o,data:e,openTile:n,embedTerminal:r,online:i,fullScreen:f,opened:()=>(l.splice(0).forEach(h),g())});function h(e){m.chat?.apply(e);for(let t of e.items??[])t.kind===`assistant`&&([c.model,c.ctx]=[t.model??c.model,t.ctx??c.ctx])}function g(){let e=yn(c);e&&(p(e),m.draw(e))}let _=()=>(Cn(c),c.route.view===`workspace`?Un(a,c):g());return{terminal:m.terminal,locate:e=>J(c.net,e),show(e,t,n){let[r,i]=c.route.view===`session`?[c.route.key,c.route.at]:[];(e.view!==`workspace`||c.route.view!==`workspace`||e.ws!==c.route.ws)&&(c.cards={}),c.route=e,a.hidden=e.view!==`workspace`,o.hidden=s.hidden=e.view!==`session`,f(!1),(e.view!==`session`||e.key!==r)&&m.leaveMode(),e.view===`session`&&e.key!==r?([c.info,c.model,c.ctx,l,u]=[void 0,void 0,void 0,[],!1],m.open(e.key)):e.view===`session`&&e.at!==i?m.reveal(e.at):e.view!==`session`&&m.close(),_(),e!==t&&wn(e,t,n)},net(e){c.net=e,gn(e,d,c.route.view===`session`?c.route.key:void 0,(e,t)=>n(hn(e,t),!1)),c.route.view!==`map`&&_()},cards(e){c.cards={...c.cards,...e},c.route.view===`workspace`&&Un(a,c)},history(e){if(c.route.view===`session`&&e.key===c.route.key){if(c.info={...c.info,...e,items:void 0},e.reset&&([c.model,c.ctx]=[void 0,void 0]),document.hidden)return l.length<Wn?void l.push(e):void(u=!0);m.chat?h(e):l.push(e),g()}},wake(){if(u)return u=!1,l=[],t();l.splice(0).forEach(e=>m.chat&&h(e)),_()}}}export{Gn as mountFocus,U as n,sn as t};
|
package/dist/gui/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="referrer" content="no-referrer">
|
|
7
7
|
<title>Straw Net</title>
|
|
8
8
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%230b1220'/%3E%3Cpath d='M16 5l9 7h-4v13h-10V12H7z' fill='%2338e0ff'/%3E%3C/svg%3E">
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-D-LVSW44.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="./assets/index-Br2ViD0U.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-straw-boss",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.5",
|
|
4
4
|
"description": "Straw Boss coordination for pi in Herdr: sessions join a tab's net by choice, the first joiner is its main agent, a workspace tower opens on demand with a live monitoring dashboard, and boss_broadcast reaches the rest",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/src/control.ts
CHANGED
|
@@ -33,7 +33,7 @@ export { ENDING };
|
|
|
33
33
|
|
|
34
34
|
export interface Reply { status: number; body: unknown }
|
|
35
35
|
/** `answers.target` reads the net afresh, so the binding and the dialog are checked again for every answer. */
|
|
36
|
-
export interface ControlDeps { lookup(key: string): Found | undefined; call?: HerdrCall; csrf: string; canonical(file?: string): string | undefined; pair?(): { url: string; rows: string[] } | undefined; remoteOn?(): Promise<void>; spawn?(parts: string[], json: Record<string, unknown>): Promise<Reply>; close?(kind: string, json: Record<string, unknown>): Promise<Reply>; stop?(asked: Asked): void; mirrors?: Pick<ReturnType<typeof createMirrors>, "toggle" | "fresh">; secret?(file: string): Promise<boolean>; answers?: Pick<Hub, "replay" | "ended" | "send" | "probe" | "commands"> & { target(key: string): Promise<Target | undefined> } }
|
|
36
|
+
export interface ControlDeps { lookup(key: string): Found | undefined; call?: HerdrCall; csrf: string; canonical(file?: string): string | undefined; pair?(): { url: string; rows: string[] } | undefined; remoteOn?(): Promise<void>; spawn?(parts: string[], json: Record<string, unknown>): Promise<Reply>; close?(kind: string, json: Record<string, unknown>): Promise<Reply>; dismiss?(key: unknown): Promise<boolean>; stop?(asked: Asked): void; mirrors?: Pick<ReturnType<typeof createMirrors>, "toggle" | "fresh">; secret?(file: string): Promise<boolean>; answers?: Pick<Hub, "replay" | "ended" | "send" | "probe" | "commands"> & { target(key: string): Promise<Target | undefined> } }
|
|
37
37
|
|
|
38
38
|
const no = (status: number, error: string, reason: string): Reply => ({ status, body: { error, reason } });
|
|
39
39
|
const same = (a: string, b: string) => a.length === b.length && timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
@@ -74,7 +74,7 @@ export function checkText(text: unknown): string | Reply {
|
|
|
74
74
|
return typed;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
export function createControl({ lookup, call, csrf, canonical, pair, remoteOn, spawn, close, stop, mirrors, secret = async () => true, answers }: ControlDeps) {
|
|
77
|
+
export function createControl({ lookup, call, csrf, canonical, pair, remoteOn, spawn, close, dismiss, stop, mirrors, secret = async () => true, answers }: ControlDeps) {
|
|
78
78
|
const busy = new Set<string>();
|
|
79
79
|
const pad = createKeys({ fresh: (id, key, pane) => mirrors?.fresh(id, key, pane) ?? false, secret, answerable: async (key) => Boolean(await answers?.target(key)), probe: async (key) => answers?.probe(key) });
|
|
80
80
|
/** The origin checks, then the session checks, then one Herdr call. `parts` is the path after api/: sessions/<key>/<action>, remote/pair, or server/stop. */
|
|
@@ -93,6 +93,7 @@ export function createControl({ lookup, call, csrf, canonical, pair, remoteOn, s
|
|
|
93
93
|
if (key !== "stop" || action || !stop) return no(404, "not_found", "No such action.");
|
|
94
94
|
return typeof by === "string" && by.length <= 200 && typeof take === "boolean" ? (stop({ by, take }), { status: 202, body: { stopping: true } }) : no(400, "bad_request", "A stop names who asks.");
|
|
95
95
|
}
|
|
96
|
+
if (scope === "dismiss" && !key) return (await dismiss?.(read.json.key)) ? { status: 200, body: {} } : no(404, "not_found", "Only a finished subagent on the net can be dismissed.");
|
|
96
97
|
if (scope === "close") return close && !action ? close(key, read.json) : no(close ? 404 : 503, close ? "not_found" : "unavailable", close ? "No such action." : "This server closes nothing.");
|
|
97
98
|
if (scope === "dirs" || scope === "open") return spawn && !action ? spawn([scope, key], read.json) : no(spawn ? 404 : 503, spawn ? "not_found" : "unavailable", spawn ? "No such action." : "This server opens nothing.");
|
|
98
99
|
if (scope === "remote" && key === "on" && !action) {
|
package/src/gui.ts
CHANGED
|
@@ -44,7 +44,7 @@ export interface Gui { url: string; port: number; remotePort: number; token: str
|
|
|
44
44
|
/** `net` is the registry behind the net reading (the allow list of session keys); without it no session can be watched. `call` reaches Herdr for input. */
|
|
45
45
|
/** `hub` carries answers to the dialogs bridges relay (dialogs.ts); it runs exactly as long as the server. */
|
|
46
46
|
/** `onRemote` turns remote access on from the page, in the session that runs the server. `onStop` takes another session's stop request (requestStop), so the owner also takes its remote entry down; without it the server stops itself. */
|
|
47
|
-
export interface GuiOptions { read(): Promise<Net>; net?: { lookup(key: string): Found | undefined; workspace(id: string): Ref[] }; call?: HerdrCall; hub?: Hub; dir?: string; paired?: string; port?: number; remotePort?: number; token?: string; csrf?: string; pollMs?: number; pingMs?: number; onStop?(asked: Asked): void; onRemote?(): Promise<void>; spawn?: ControlDeps["spawn"]; close?: ControlDeps["close"] }
|
|
47
|
+
export interface GuiOptions { read(): Promise<Net>; net?: { lookup(key: string): Found | undefined; workspace(id: string): Ref[]; dismiss?(key: string): boolean }; call?: HerdrCall; hub?: Hub; dir?: string; paired?: string; port?: number; remotePort?: number; token?: string; csrf?: string; pollMs?: number; pingMs?: number; onStop?(asked: Asked): void; onRemote?(): Promise<void>; spawn?: ControlDeps["spawn"]; close?: ControlDeps["close"] }
|
|
48
48
|
export interface Asked { by: string; take: boolean }
|
|
49
49
|
|
|
50
50
|
/** Starts the server. A preferred `port` and `remotePort` (with the `token` and `csrf`) are reused when free, so a restarted server keeps the URL and the page an open tab already has. */
|
|
@@ -65,7 +65,7 @@ export async function startGui({ read, net, call, hub, dir = BUNDLE, paired, por
|
|
|
65
65
|
const pair = (code = access.pair(), host = access.remote?.host, url = `https://${host}/${token}/pair/${code}`) => (code && host ? { url, rows: qr(url).map((row) => row.map(Number).join("")) } : undefined);
|
|
66
66
|
const mirrors = createMirrors({ call, lookup: (key) => net?.lookup(key), secret: waitsForSecret, canonical }), docs = hub && createDocs(hub, (key) => net?.lookup(key)?.name ?? key);
|
|
67
67
|
const stop = (asked: Asked) => void setTimeout(() => (onStop ? onStop(asked) : void halt()), 10); // after the reply has gone out
|
|
68
|
-
const control = createControl({ lookup: (key) => net?.lookup(key), call, csrf, canonical, pair, remoteOn: onRemote, spawn, close: close && (async (kind, json) => (await tick(), close(kind, json))), mirrors, stop, secret: waitsForSecret, answers: hub && { replay: hub.replay, ended: hub.ended, send: hub.send, probe: hub.probe, commands: hub.commands, target: async (key) => (await tick(), hub.target(key)) } });
|
|
68
|
+
const control = createControl({ lookup: (key) => net?.lookup(key), call, csrf, canonical, pair, remoteOn: onRemote, spawn, close: close && (async (kind, json) => (await tick(), close(kind, json))), dismiss: async (key) => typeof key === "string" && Boolean(net?.dismiss?.(key)) && (await tick(), true), mirrors, stop, secret: waitsForSecret, answers: hub && { replay: hub.replay, ended: hub.ended, send: hub.send, probe: hub.probe, commands: hub.commands, target: async (key) => (await tick(), hub.target(key)) } });
|
|
69
69
|
let last: string | undefined, problem: string | undefined, inflight: Promise<void> | undefined;
|
|
70
70
|
let poll: ReturnType<typeof setInterval> | undefined, beat: ReturnType<typeof setInterval> | undefined;
|
|
71
71
|
const send = (to: ServerResponse, data: string, event?: string) => to.writableEnded || to.write(`${event ? `event: ${event}\n` : ""}data: ${data}\n\n`); // a reading in flight at stop ends after the streams
|
|
@@ -132,7 +132,7 @@ export async function startGui({ read, net, call, hub, dir = BUNDLE, paired, por
|
|
|
132
132
|
return void fail(404);
|
|
133
133
|
}
|
|
134
134
|
if ((parts[0] === "server" || parts.join("/") === "remote/on") && who.remote) return void fail(403); // only this machine stops the server or opens it to the tailnet
|
|
135
|
-
if (["sessions", "remote", "server", "dirs", "open", "close"].includes(parts[0]!)) return void control(req, who.origin, parts).then(answer, () => answer({ status: 500, body: { error: "internal", reason: "The request could not be handled." } }));
|
|
135
|
+
if (["sessions", "remote", "server", "dirs", "open", "close", "dismiss"].includes(parts[0]!)) return void control(req, who.origin, parts).then(answer, () => answer({ status: 500, body: { error: "internal", reason: "The request could not be handled." } }));
|
|
136
136
|
// An entry never changes once written, so its image is cached for a day; the token in the URL keeps it to this page.
|
|
137
137
|
if (req.method === "GET" && parts[0] === "image") return void image(files, parts.slice(1)).then((p) => (p ? res.writeHead(200, { ...HEADERS, "content-type": p.type, "cache-control": "private, max-age=86400" }).end(p.bytes) : fail(404)), () => fail(404));
|
|
138
138
|
if (req.method === "GET") return void (parts[0] === "doc" && docs ? answer(docs.text(parts[1] ?? "")) : api(files, parts, url.searchParams).then(answer, () => fail(404)));
|
package/src/net.ts
CHANGED
|
@@ -95,10 +95,14 @@ export async function collectNet({ run, world = worldOf(run), sessions, now = Da
|
|
|
95
95
|
*/
|
|
96
96
|
export function netSource(env: { run: HerdrRun; world?: HerdrWorld; sessions(): Promise<Session[]>; sessionDir?: string; hub?: { relayed(sessions: Session[], refs: Map<string, Ref>): Relayed } }) {
|
|
97
97
|
let refs = new Map<string, Ref>(), live: Session[] = [];
|
|
98
|
-
const gone = new Map<string, { ref: Ref; at: number }>(), sessions = async () => (live = await env.sessions());
|
|
98
|
+
const gone = new Map<string, { ref: Ref; at: number }>(), sessions = async () => (live = await env.sessions()), dismissed = new Set<string>(), ended = new Set<string>();
|
|
99
|
+
const drop = (u: Unit) => (u.subs.forEach((c) => c.ended && ended.add(c.key)), (u.subs = u.subs.filter((c) => !(c.ended && dismissed.has(c.key))))); // finished subagents the page dismissed
|
|
99
100
|
return {
|
|
100
101
|
async read(): Promise<Net> {
|
|
101
102
|
const next = new Map<string, Ref>(), at = Date.now(), net = await collectNet({ ...env, sessions, refs: next });
|
|
103
|
+
ended.clear();
|
|
104
|
+
net.bases.forEach((b) => [...b.tabs.flatMap((t) => t.units), ...b.outside].forEach(drop));
|
|
105
|
+
for (const key of dismissed) if (!next.has(key)) dismissed.delete(key); // gone from the net: nothing left to hide
|
|
102
106
|
await withPending(net, (key) => next.get(key)?.file, env.hub?.relayed(live, next)); // what waiting units wait on, and the dialogs bridges relay
|
|
103
107
|
for (const [key, ref] of refs) if (!next.has(key)) gone.set(key, { ref, at });
|
|
104
108
|
for (const [key, old] of gone) if (next.has(key) || at - old.at > RECENT_MS) gone.delete(key);
|
|
@@ -111,5 +115,7 @@ export function netSource(env: { run: HerdrRun; world?: HerdrWorld; sessions():
|
|
|
111
115
|
return old && { ...old, live: false, successor: old.pane ? [...refs.values()].find((r) => r.pane === old.pane)?.key : undefined };
|
|
112
116
|
},
|
|
113
117
|
workspace: (id: string): Ref[] => [...refs.values()].filter((r) => r.base === id),
|
|
118
|
+
/** Hides a finished subagent from every page until it leaves the net; false for anything else. */
|
|
119
|
+
dismiss: (key: string) => ended.has(key) && Boolean(dismissed.add(key)),
|
|
114
120
|
};
|
|
115
121
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={},t=[`en`,`zh-TW`],n=`PARAGLIDE_LOCALE`,r=[`baseLocale`],i=[],a=typeof window>`u`;globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};var o=!1,s=()=>{let e=r;!a&&typeof window<`u`&&window.location?.href&&(e=ue(window.location.href));let t=c(e,typeof window<`u`?window.location?.href:void 0);if(t)return o||(o=!0,d(t,{reload:!1})),t;throw Error(`No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found`)};function c(e,t){let n;for(let t of e){if(t===`baseLocale`)n=`en`;else if(de(t)&&_.has(t)){let e=_.get(t);if(e){let t=e.getLocale();if(t instanceof Promise)continue;if(t!==void 0)return m(t)}}let e=p(n);if(e)return e}}var l=e=>{s=e},u=e=>{e?window.location.href=e:window.location.reload()},d=(e,t)=>{let n={reload:!0,...t},i;try{i=s()}catch{}let o=[],c=r;!a&&typeof window<`u`&&window.location?.href&&(c=ue(window.location.href));for(let t of c)if(t===`baseLocale`)continue;else if(de(t)&&_.has(t)){let n=_.get(t);if(n){let r=n.setLocale(e);r instanceof Promise&&(r=r.catch(e=>{throw Error(`Custom strategy "${t}" setLocale failed.`,{cause:e})}),o.push(r))}}let l=()=>{!a&&n.reload&&window.location&&e!==i&&u(void 0)};if(o.length)return Promise.all(o).then(()=>{l()});l()},f=()=>typeof window<`u`?window.location.origin:`http://fallback.com`;function p(e){if(typeof e!=`string`)return;let n=e.toLowerCase();for(let e of t)if(e.toLowerCase()===n)return e}function m(e){let n=p(e);if(n)return n;throw Error(`Invalid locale: ${e}. Expected one of: ${t.join(`, `)}`)}function h(e){return e}function g(t,n){return new e(t,n.href)}function ee(){return 0}function te(e){return i}function ne(e,t){return e.exec(t.href)}var re=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);RegExp(`(?:^|;\\s*)${re}=([^;]*)`);function ie(e){return ae(e)}function ae(e){let t=h(typeof e==`string`?new URL(e,f()):new URL(e.href)),n=t.pathname.replace(/^\/+/,``).split(`/`);return n.length>0&&p(n[0])&&(t.pathname=`/`+n.slice(1).join(`/`)),h(t)}var oe=-1,se,ce;function le(e){if(i.length===0)return;let t=typeof e==`string`?e:e.href,n=ee();if(se===t&&oe===n)return ce;let r=h(new URL(t,`http://example.com`)),a=ie(r),o=a.href===r.href?[r]:[r,a],s;for(let e of o){for(let t of te(e))if(ne(g(t.match,e),e)){s=t;break}if(s)break}return oe=n,se=t,ce=s,s}function ue(e){let t=le(e);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:r}var _=new Map;function de(e){return typeof e==`string`&&/^custom-[A-Za-z0-9_-]+$/.test(e)}var fe=((e={},t={})=>(t.locale??s())===`zh-TW`?`警示`:`Alerts`),pe=((e={},t={})=>(t.locale??s())===`zh-TW`?`所有基地`:`all bases`),me=((e={},t={})=>(t.locale??s())===`zh-TW`?``:`.`),he=((e={},t={})=>(t.locale??s())===`zh-TW`?`最後更新:`:`Last update`),ge=e=>`Disconnected. Gave up after ${e?.tries} tries; it reconnects when you return to this tab.`,_e=e=>`連線中斷。重試 ${e?.tries} 次後放棄;回到此分頁時會重新連線。`,ve=((e,t={})=>(t.locale??s())===`zh-TW`?_e(e):ge(e)),ye=e=>`The server is up but cannot read the net: ${e?.problem}`,be=e=>`伺服器正常,但讀不到網:${e?.problem}`,xe=((e,t={})=>(t.locale??s())===`zh-TW`?be(e):ye(e)),Se=((e={},t={})=>(t.locale??s())===`zh-TW`?`與稻草網的連線中斷,正在重新連線…畫面顯示的是最後已知狀態。`:`Disconnected from the straw net. Reconnecting… The view shows the last known state.`),Ce=e=>`Disconnected from the straw net. Reconnecting (try ${e?.attempt})… The view shows the last known state.`,we=e=>`與稻草網的連線中斷,正在重新連線(第 ${e?.attempt} 次)…畫面顯示的是最後已知狀態。`,Te=((e,t={})=>(t.locale??s())===`zh-TW`?we(e):Ce(e)),Ee=((e={},t={})=>(t.locale??s())===`zh-TW`?`Straw Net:所有基地`:`Straw Net: all bases`),De=((e={},t={})=>(t.locale??s())===`zh-TW`?`取消`:`Cancel`),Oe=((e={},t={})=>(t.locale??s())===`zh-TW`?`關閉`:`Close`),ke=e=>`Quit base ${e?.name}`,Ae=e=>`關掉基地 ${e?.name}`,je=((e,t={})=>(t.locale??s())===`zh-TW`?Ae(e):ke(e)),Me=e=>`Quit base ${e?.name}? Every agent in it and its tower quit.`,Ne=e=>`要關掉基地 ${e?.name} 嗎?裡面所有 agent 和塔台都會退出。`,Pe=((e,t={})=>(t.locale??s())===`zh-TW`?Ne(e):Me(e)),Fe=e=>`Quit squad ${e?.name}`,Ie=e=>`關掉小隊 ${e?.name}`,Le=((e,t={})=>(t.locale??s())===`zh-TW`?Ie(e):Fe(e)),Re=e=>`Quit squad ${e?.name}? Every agent in it quits.`,ze=e=>`要關掉小隊 ${e?.name} 嗎?裡面所有 agent 都會退出。`,Be=((e,t={})=>(t.locale??s())===`zh-TW`?ze(e):Re(e)),Ve=e=>`Quit the tower ${e?.name}? The base's mains become members again.`,He=e=>`要關掉塔台 ${e?.name} 嗎?這個基地的主智慧體都會降格成成員。`,Ue=((e,t={})=>(t.locale??s())===`zh-TW`?He(e):Ve(e)),We=e=>`Quit ${e?.name}`,Ge=e=>`關掉 ${e?.name}`,Ke=((e,t={})=>(t.locale??s())===`zh-TW`?Ge(e):We(e)),qe=e=>`Quit ${e?.name}? It quits pi and its pane closes.`,Je=e=>`要關掉 ${e?.name} 嗎?它會退出 pi,窗格也會關掉。`,Ye=((e,t={})=>(t.locale??s())===`zh-TW`?Je(e):qe(e)),Xe=e=>`control tower · ${e?.state}`,Ze=e=>`塔台 · ${e?.state}`,Qe=((e,t={})=>(t.locale??s())===`zh-TW`?Ze(e):Xe(e)),$e=((e={},t={})=>(t.locale??s())===`zh-TW`?`圖示來自 game-icons.net(Lorc、Delapouite),CC BY 3.0。`:`Icons from game-icons.net by Lorc and Delapouite, CC BY 3.0.`),et=((e={},t={})=>(t.locale??s())===`zh-TW`?`文件`:`Documents`),tt=((e={},t={})=>(t.locale??s())===`zh-TW`?`總塔台`:`head tower`),nt=((e={},t={})=>(t.locale??s())===`zh-TW`?`語言`:`Language`),rt=((e={},t={})=>(t.locale??s())===`zh-TW`?`連線中`:`connecting`),it=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時`:`live`),at=((e={},t={})=>(t.locale??s())===`zh-TW`?`離線`:`offline`),ot=((e={},t={})=>(t.locale??s())===`zh-TW`?`重新連線中`:`reconnecting`),st=((e={},t={})=>(t.locale??s())===`zh-TW`?`正體中文`:`English`),ct=((e={},t={})=>(t.locale??s())===`zh-TW`?`位置`:`Location`),lt=e=>`${e?.name} finished`,ut=e=>`${e?.name} 已完成`,dt=((e,t={})=>(t.locale??s())===`zh-TW`?ut(e):lt(e)),ft=e=>`${e?.name} hit an error`,pt=e=>`${e?.name} 發生錯誤`,mt=((e,t={})=>(t.locale??s())===`zh-TW`?pt(e):ft(e)),ht=e=>`${e?.name} went idle`,gt=e=>`${e?.name} 轉為閒置`,_t=((e,t={})=>(t.locale??s())===`zh-TW`?gt(e):ht(e)),vt=e=>`${e?.name} joined`,yt=e=>`${e?.name} 加入`,bt=((e,t={})=>(t.locale??s())===`zh-TW`?yt(e):vt(e)),xt=e=>`${e?.name} left`,St=e=>`${e?.name} 離開`,Ct=((e,t={})=>(t.locale??s())===`zh-TW`?St(e):xt(e)),wt=e=>`${e?.name} lost its status`,Tt=e=>`${e?.name} 失去狀態`,Et=((e,t={})=>(t.locale??s())===`zh-TW`?Tt(e):wt(e)),Dt=e=>`${e?.name} is waiting on a question`,Ot=e=>`${e?.name} 正在等待回答`,kt=((e,t={})=>(t.locale??s())===`zh-TW`?Ot(e):Dt(e)),At=e=>`${e?.name} started working`,jt=e=>`${e?.name} 開始工作`,Mt=((e,t={})=>(t.locale??s())===`zh-TW`?jt(e):At(e)),Nt=((e={},t={})=>(t.locale??s())===`zh-TW`?`已完成`:`finished`),Pt=((e={},t={})=>(t.locale??s())===`zh-TW`?`錯誤`:`error`),Ft=((e={},t={})=>(t.locale??s())===`zh-TW`?`閒置`:`idle`),It=((e={},t={})=>(t.locale??s())===`zh-TW`?`無狀態`:`no status`),Lt=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待回答`:`waiting on a question`),Rt=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`working`),zt=e=>`Monitor failed: ${e?.what}`,Bt=e=>`Monitor 出錯:${e?.what}`,Vt=((e,t={})=>(t.locale??s())===`zh-TW`?Bt(e):zt(e)),Ht=e=>`Monitor went quiet and stopped: ${e?.what}`,Ut=e=>`Monitor 太久沒輸出,已停止:${e?.what}`,Wt=((e,t={})=>(t.locale??s())===`zh-TW`?Ut(e):Ht(e)),Gt=((e={},t={})=>(t.locale??s(),`Logs`)),Kt=((e={},t={})=>(t.locale??s())===`zh-TW`?`從未`:`never`),qt=((e={},t={})=>(t.locale??s())===`zh-TW`?`+新基地`:`+ New base`),Jt=((e={},t={})=>(t.locale??s())===`zh-TW`?`沒有執行中的智慧體`:`no agent running`),Yt=((e={},t={})=>(t.locale??s())===`zh-TW`?`無警示`:`no alerts`),Xt=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器沒有回應。`:`The server did not answer.`),Zt=((e={},t={})=>(t.locale??s())===`zh-TW`?`尚無塔台`:`no tower yet`),Qt=((e={},t={})=>(t.locale??s())===`zh-TW`?`監看中`:`Watching a monitor`),$t=((e={},t={})=>(t.locale??s())===`zh-TW`?`思考中`:`thinking`),en=e=>`Finished ${e?.note}`,tn=e=>`完成了 ${e?.note}`,nn=((e,t={})=>(t.locale??s())===`zh-TW`?tn(e):en(e)),rn=e=>`Failed ${e?.note}`,an=e=>`出錯了 ${e?.note}`,on=((e,t={})=>(t.locale??s())===`zh-TW`?an(e):rn(e)),sn=e=>`Waiting on you ${e?.note}`,cn=e=>`等你回答 ${e?.note}`,ln=((e,t={})=>(t.locale??s())===`zh-TW`?cn(e):sn(e)),un=((e={},t={})=>(t.locale??s())===`zh-TW`?`+主智慧體`:`+ Main`),dn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+成員`:`+ Member`),fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`Outposts`),pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`手機`:`Phone`),mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`透過 Tailscale 配對手機`:`Pair a phone over Tailscale`),hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器送來的快照,頁面無法讀取`:`the server sent a snapshot the page cannot read`),gn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器回報了頁面無法讀取的問題`:`the server reported a problem the page cannot read`),v=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉`:`Quit`),_n=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉塔台`:`Quit tower`),vn=e=>`Refused (${e?.status}).`,yn=e=>`已拒絕(${e?.status})。`,bn=((e,t={})=>(t.locale??s())===`zh-TW`?yn(e):vn(e)),xn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒`:`Remind`),Sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`點一下允許瀏覽器通知`:`Press to allow browser notifications`),Cn=((e={},t={})=>(t.locale??s())===`zh-TW`?`瀏覽器已封鎖通知,要到網站設定裡允許`:`The browser blocks notifications; allow them in the site settings`),wn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已關`:`Reminders off`),Tn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已開:分頁不在前景時,單位等你回答、完成或出錯會跳系統通知`:`Reminders on: while the page is in the background, a unit waiting on you, finishing, or failing raises a system notification`),En=((e={},t={})=>(t.locale??s())===`zh-TW`?`這個瀏覽器不支援通知`:`This browser has no notifications`),Dn=((e={},t={})=>(t.locale??s())===`zh-TW`?`主智慧體`:`main`),On=((e={},t={})=>(t.locale??s())===`zh-TW`?`成員`:`member`),kn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`outpost`),An=((e={},t={})=>(t.locale??s())===`zh-TW`?`未編入`:`unaligned`),jn=((e={},t={})=>(t.locale??s(),`session`)),Mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`子智慧體`:`subagent`),Nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`塔台`:`tower`),Pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效`:`Sound`),Fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已關`:`Sounds off`),In=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已開`:`Sounds on`),Ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效:開關、音量與試聽`:`Sounds: on or off, volume, and a try`),Rn=((e={},t={})=>(t.locale??s())===`zh-TW`?`▶ 試聽`:`▶ Try`),zn=((e={},t={})=>(t.locale??s())===`zh-TW`?`音量`:`Volume`),Bn=((e={},t={})=>(t.locale??s())===`zh-TW`?`智慧體`:`Agents`),Vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`基地`:`Bases`),Hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待中`:`Waiting`),Un=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`Working`),Wn=((e={},t={})=>(t.locale??s())===`zh-TW`?`狀態`:`States`),Gn=e=>`tab ${e?.label}`,Kn=e=>`分頁 ${e?.label}`,qn=((e,t={})=>(t.locale??s())===`zh-TW`?Kn(e):Gn(e)),Jn=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時網況 · 通訊`:`live net · comms`),Yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`網的總計`:`Net totals`),Xn=e=>`${e?.label} tower`,Zn=e=>`${e?.label} 塔台`,Qn=((e,t={})=>(t.locale??s())===`zh-TW`?Zn(e):Xn(e)),$n=e=>`using ${e?.tool}`,er=e=>`使用 ${e?.tool}`,tr=((e,t={})=>(t.locale??s())===`zh-TW`?er(e):$n(e)),nr=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待變化…`:`Waiting for changes…`),rr=`sb-locale`;function ir(e){let t=/^zh\b/i.test(e)&&(/-(hant|tw|hk|mo)\b/i.test(e)?`zh-TW`:/-(hans|cn|sg|my)\b/i.test(e)?`zh-CN`:void 0);return p(e)??(t?p(t):void 0)??p(e.split(`-`)[0])}function ar(e,t){return p(e)??t.map(ir).find(Boolean)??`en`}var or={brand_label:Ee,tagline:Jn,totals_label:Yn,stat_bases:Vn,stat_agents:Bn,stat_working:Un,stat_waiting:Hn,alerts:fe,no_alerts:Yt,pair_button:pn,pair_title:mn,link_connecting:rt,location:ct,all_bases:pe,documents:et,net_log:Gt,states:Wn,mark_working:Rt,mark_waiting:Lt,mark_idle:Ft,mark_done:Nt,mark_error:Pt,credit:$e,language:nt,waiting_changes:nr,new_base:qt};Object.keys(or);function sr(){let e=null;try{e=localStorage.getItem(rr)}catch{}let n=ar(e,navigator.languages??[navigator.language]);l(()=>n),document.documentElement.lang=n;let r={m:(e,t)=>e.textContent=t,mLabel:(e,t)=>e.setAttribute(`aria-label`,t),mTitle:(e,t)=>e.title=t,mEmpty:(e,t)=>e.dataset.empty=t};for(let e of document.querySelectorAll(`[data-m], [data-m-label], [data-m-title], [data-m-empty]`))for(let[t,n]of Object.entries(r))e.dataset[t]&&n(e,or[e.dataset[t]]?.()??e.dataset[t]);let i=document.getElementById(`lang`);i.replaceChildren(...t.map(e=>new Option(st({},{locale:e}),e,!1,e===n))),i.onchange=()=>{try{localStorage.setItem(rr,i.value),location.reload()}catch{i.value=n}}}var cr={working:Mt,waiting:kt,idle:_t,done:dt,error:mt,unknown:Et};function lr(e){let t=new Map;for(let n of e.bases){n.tower&&t.set(`tower:${n.id}`,{name:Qn({label:n.label}),mark:n.tower.mark});for(let e of n.tabs.flatMap(e=>e.units))for(let n of[e,...e.subs])t.set(n.id,{name:n.name,mark:n.mark});for(let e of n.outposts)t.set(e.id,{name:e.label,mark:e.mark})}return t}function ur(e,t){if(!e)return[];let[n,r]=[lr(e),lr(t)],i=[];for(let[e,t]of r){let r=n.get(e);r?r.mark!==t.mark&&i.push({text:cr[t.mark]({name:t.name}),mark:t.mark}):i.push({text:bt({name:t.name}),mark:t.mark})}for(let[e,t]of n)r.has(e)||i.push({text:Ct({name:t.name}),mark:`idle`});return i}var dr=e=>e.unit??e.key,fr=e=>e===`waiting`||e===`error`?0:1;function pr(e,t){let n=new Map;for(let r of e.bases)for(let e of[...r.tower?[{...r.tower,role:`tower`}]:[],...[...r.tabs.flatMap(e=>e.units),...r.outside].flatMap(e=>[e,...e.subs])]){n.set(e.key,{key:e.key,ws:r.id,name:e.name,role:e.role,mark:e.mark,note:e.note,at:t,pending:e.pending,closed:!e.control||!!e.ended});for(let i of e.monitors??[])(i.status===`error`||i.status===`stale`)&&(a=>n.set(a,{key:a,unit:e.key,ws:r.id,name:e.name,role:e.role,mark:`error`,note:`monitor:${i.status}:${i.what}`,at:t}))(`${e.key}\u001fmonitor:${i.id}:${i.at}`)}return n}function mr(e,t){return[...t.values()].filter(t=>e?.get(t.key)?.mark!==t.mark&&(fr(t.mark)===0||e!==void 0&&t.mark===`done`))}var hr=`input, textarea, select, [role=textbox], [role=combobox], [role=listbox], .term-scroll`,gr=`button, a, summary, [role=button], [role=link]`,_r=`.ask-opt, [role=radio], [role=checkbox]`,vr=`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`;function yr(e,t,n=!1){if(t||e.defaultPrevented||e.isComposing||e.ctrlKey||e.altKey||e.metaKey)return;let r=e.target;if(!(r?.isContentEditable||r?.closest?.(hr))){if(e.key===`f`||e.key===`F`)return`zoom`;if(e.key===` `&&!r?.closest?.(_r)&&(n||!r?.closest?.(gr)))return`next`}}function br(e,t=()=>document.querySelector(vr)!==null,n=window){let r,i=!1,a=null;n.addEventListener(`pointerdown`,()=>i=!0,!0),n.addEventListener(`focusin`,e=>a=i?e.target:null,!0),n.addEventListener(`keydown`,n=>{let o=n.target===a;i=!1;let s=yr(n,t(),o);if(s){if(n.repeat)return r===s?n.preventDefault():void 0;e(s)&&(r=s,n.preventDefault())}}),n.addEventListener(`keyup`,e=>{r===`next`&&e.key===` `&&e.preventDefault(),r=void 0})}var xr=3e4,Sr=[`pointermove`,`pointerdown`,`keydown`,`wheel`,`touchstart`];function Cr(e=document.documentElement){if(matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=Date.now(),n,r=()=>{let i=t+xr-Date.now();i>0?n=setTimeout(r,i):(n=void 0,e.toggleAttribute(`data-calm`,!0))},i=()=>{t=Date.now(),n===void 0&&(e.toggleAttribute(`data-calm`,!1),n=setTimeout(r,xr))};for(let e of Sr)addEventListener(e,i,{capture:!0,passive:!0});document.addEventListener(`visibilitychange`,()=>document.hidden||i()),i()}var wr=(...e)=>e.filter(e=>e!==!1&&e!=null),Tr=(e,t)=>(e.classList.add(t),e.classList.toggle(`flip`));function Er(e,t,...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t??{}))r.setAttribute(e,n);return r.append(...wr(...n)),r}function Dr({x1:e,y1:t,x2:n,y2:r,mid:i},a=64){let o=Array.from({length:201},(a,o)=>{let s=o/200,c=1-s;return[c**3*e+3*c*c*s*i+3*c*s*s*i+s**3*n,c**3*t+3*c*c*s*t+3*c*s*s*r+s**3*r]}),s=o.reduce((e,t,n)=>(e.push(n?e[n-1]+Math.hypot(t[0]-o[n-1][0],t[1]-o[n-1][1]):0),e),[]);return Array.from({length:a+1},(e,t)=>{let n=t/a*s.at(-1),r=Math.max(1,s.findIndex(e=>e>=n)),[i,c]=[o[r-1],o[r]],l=s[r]>s[r-1]?(n-s[r-1])/(s[r]-s[r-1]):0;return[i[0]+(c[0]-i[0])*l,i[1]+(c[1]-i[1])*l]})}function Or(e,t){if(t||!e.length)return[];let n=document.createElement(`style`);return n.textContent=e.map((e,t)=>`@keyframes pk${t}{${Dr(e).map(([e,t],n,r)=>`${(n/(r.length-1)*100).toFixed(2)}%{transform:translate(${e.toFixed(1)}px,${t.toFixed(1)}px)}`).join(``)}}`).join(``),[n,...e.map((e,t)=>(e=>(e.className=`packet`,e.style.animationName=`pk${t}`,e))(document.createElement(`i`)))]}var kr=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),Ar=function(e,t){return new URL(e,t).href},jr={},Mr=function(e){return e.pathname.endsWith(`.css`)},Nr=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},y=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Ar(t,n);let r=s(t),i=Mr(r);return Nr(jr,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:kr,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function b(e,t,n,r,i=!1){Object.assign(e.dataset,t),[e.hidden,e.textContent]=[i,n],r&&e.setAttribute(`aria-label`,r)}var Pr=(e,t)=>b(e,{key:t.key??``,name:t.name,role:t.role},v(),Ke({name:t.name}),!(t.control&&t.key)||t.role===`subagent`),Fr=(e,t)=>b(e,{key:t?.key??``,name:t?.name??``,role:`tower`},_n(),void 0,!t?.control),Ir=(e,t)=>b(e,{ws:t.id,name:t.label},v(),je({name:t.label})),Lr=(e,t,n)=>b(e,{ws:t.id,name:n.label,tab:n.id},v(),Le({name:n.label})),x=(e,t)=>new Promise(n=>{let r=document.createElement(`dialog`),i=document.createElement(`p`),a=document.createElement(`div`),o=(e,t,i)=>Object.assign(document.createElement(`button`),{type:`button`,className:t,textContent:e,onclick:()=>(r.close(),n(i))});[r.className,i.textContent,a.className]=[`sheet`,e,`sheet-row`],a.append(...t?[o(De(),`later`,!1),o(t,`sheet-yes`,!0)]:[o(Oe(),`later`,!1)]),r.append(i,a),r.addEventListener(`close`,()=>(r.remove(),n(!1))),document.body.append(r),r.showModal()});function Rr(e,{route:t,net:n,go:r}){let i=t();if(i.view===`map`)return;if(e.close===`base`)return void(i.ws===e.ws&&r({view:`map`}));let a=e=>e.flatMap(e=>[e.key,...a(e.subs)]),o=e.close===`tab`&&i.ws===e.ws?n()?.bases.find(t=>t.id===e.ws)?.tabs.find(t=>t.id===e.tab):void 0;i.view===`session`&&(e.close===`unit`?i.key===e.key:o&&a(o.units).includes(i.key))&&r({view:`workspace`,ws:i.ws})}function zr(e){document.addEventListener(`click`,t=>{let n=t.target?.closest?.(`button[data-close]`),r=n?.dataset;n&&r&&(t.preventDefault(),x((r.close===`base`?Pe:r.close===`tab`?Be:r.role===`tower`?Ue:Ye)({name:r.name??``}),v()).then(t=>{t&&(n.toggleAttribute(`disabled`,!0),y(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:e})=>e(`close/${r.close}`,r.close===`unit`?{key:r.key}:{workspace:r.ws,...r.tab&&{tab:r.tab}})).then(t=>t.ok?Rr(r,e):x(t.body.reason??bn({status:t.status})),()=>x(Xt())).finally(()=>n.toggleAttribute(`disabled`,!1)))}))})}var Br=e=>{try{return decodeURIComponent(e)}catch{return e}},S=e=>/^\.+$/.test(e)?e.replaceAll(`.`,`%2E`):encodeURIComponent(e);function C(e){let[t,n]=e.split(`#`)[0].split(`?`),[r,i,a,o]=t.replace(/^\/+|\/+$/g,``).split(`/`).map(Br);if(r!==`w`||!i)return{view:`map`};if(a!==`s`||!o)return{view:`workspace`,ws:i};let s=new URLSearchParams(n).get(`at`);return s?{view:`session`,ws:i,key:o,at:s}:{view:`session`,ws:i,key:o}}var w=e=>e.view===`map`?``:e.view===`workspace`?`w/${S(e.ws)}`:`w/${S(e.ws)}/s/${S(e.key)}${e.at?`?at=${encodeURIComponent(e.at)}`:``}`,Vr=e=>e.view===`session`?{view:`workspace`,ws:e.ws}:{view:`map`},T=e=>e.view===`session`?e.key:e.view===`workspace`?`w:${e.ws}`:null;function Hr(e,t=new URL(document.baseURI).pathname){let n=()=>C(location.pathname.slice(t.length)+location.search),r={route:n,href:e=>w(e)||`./`,go(n){let r=t+w(n);location.pathname+location.search!==r&&history.pushState(null,``,r),e(n)}};return addEventListener(`popstate`,()=>e(n())),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[data-route]`);!t||e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),r.go(C(t.getAttribute(`data-route`))))}),r}var Ur={main:`main`,member:`member`,subagent:`subagent`,outpost:`outpost`,outside:`outside`,tower:`tower`},E={working:Rt,waiting:Lt,idle:Ft,done:Nt,error:Pt,unknown:It},Wr={main:Dn,member:On,subagent:Mn,tower:Nn,outpost:kn,outside:An,session:jn},Gr={thinking:$t,"watching a monitor":Qt,idle:Ft,"waiting on a question":Lt,finished:Nt},Kr=e=>Object.hasOwn(Wr,e)?Wr[e]():e,qr=e=>e===`waiting`||e===`error`,D=e=>{let t=new DOMParser().parseFromString(e.trim(),`text/html`).body.firstElementChild;if(!(t instanceof HTMLElement))throw Error(`bad template`);return document.importNode(t,!0)},O=(e,t)=>{let n=document.getElementById(e);if(!(n instanceof t))throw Error(`#${e} is missing from the page`);return n},k=(e,t,n)=>{let r=e.querySelector(t);r.textContent!==n&&(r.textContent=n)},A=(e,t)=>{if(e.dataset.mark===t)return;let n=e.dataset.mark!==void 0;e.dataset.mark=t,n&&Tr(e,`flash`)},Jr=e=>(t=>(e.slice(8,t)===`stale`?Wt:Vt)({what:e.slice(t+1)}))(e.indexOf(`:`,8)),j=(e,t)=>e?e.startsWith(`tool:`)?tr({tool:e.slice(5)}):e.startsWith(`monitor:`)?Jr(e):Object.hasOwn(Gr,e)?Gr[e]():e:E[t](),M=(e,t)=>{e.toggleAttribute(`hidden`,!t),t&&(e.setAttribute(`href`,w(t)||`./`),e.setAttribute(`data-route`,w(t)))},Yr=(e,t)=>{let n=t.getBoundingClientRect(),r=e.offsetWidth;e.style.top=`${n.bottom+8}px`,e.style.left=`${Math.max(8,Math.min(n.right-r,innerWidth-r-8))}px`},Xr=`<div class="plate"><i class="ring"></i><svg><use href="#i-main"/></svg><b class="badge"></b></div>`;function Zr(e,t,n,r){A(e,n);let i=e.querySelector(`use`),a=`#i-${Ur[t]??`member`}`,o=r?.filter(e=>e.onScreen).length;i.getAttribute(`href`)!==a&&i.setAttribute(`href`,a),o?e.dataset.docs=String(o):delete e.dataset.docs}function N(e,t,n,r){let i=new Map;for(let t of e.children)!t.classList.contains(`leaving`)&&t.dataset.key&&i.set(t.dataset.key,t);let a=e.firstElementChild;for(let o of t){let t=i.get(o.id);for(t||(t=n(o),t.dataset.key=o.id,t.classList.add(`enter`),setTimeout(()=>t.classList.remove(`enter`),600)),i.delete(o.id);a?.classList.contains(`leaving`);)a=a.nextElementSibling;t===a?a=a.nextElementSibling:e.insertBefore(t,a),r(t,o)}for(let e of i.values())e.classList.add(`leaving`),setTimeout(()=>e.remove(),400)}var P=()=>D(`<div class="unit"><div class="card"><a class="hit"></a>${Xr}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><span class="note"></span></span></div><button type="button" class="quit-btn" data-close="unit" hidden></button></div><div class="subs"></div></div>`);function F(e,t){let n=e.closest(`.base`)?.dataset.key,r=e.querySelector(`.hit`);M(r,t.key&&n?{view:`session`,ws:n,key:t.key}:void 0),r.setAttribute(`aria-label`,`${t.name}: ${j(t.note,t.mark)}`),r.toggleAttribute(`data-alert`,qr(t.mark)),A(e,t.mark),Zr(e.querySelector(`.plate`),t.role,t.mark,t.docs),k(e,`.name`,t.name),k(e,`.role`,Kr(t.role)),k(e,`.note`,j(t.note,t.mark)),Pr(e.querySelector(`:scope > .card > .quit-btn`),t),N(e.querySelector(`.subs`),t.subs??[],P,F)}function I(e,t,n){let r=t.tower?`main`:`member`;e.hidden=!!(n&&t.tower),e.dataset.open=r,e.dataset.ws=t.id,n&&(e.dataset.tab=n),e.textContent!==(r===`main`?un():dn())&&(e.textContent=r===`main`?un():dn())}var Qr=()=>D(`<section class="base"><header><div class="tower"><i class="sweep"></i><i class="pulse"></i><svg><use href="#i-tower"/></svg><b class="badge"></b></div><div class="title"><span class="crown"><svg><use href="#i-crown"/></svg>${tt()}</span><h2><a class="enter-base"></a></h2><p></p><button type="button" class="quit-btn tower-quit" data-close="unit" hidden></button></div><button type="button" class="quit-btn" data-close="base"></button></header><div class="spawn-btns"><button type="button" class="pair-btn"></button></div><div class="tabs"></div><div class="outposts" data-label="${fn()}"></div></section>`);function $r(e,t){A(e,t.mark),e.classList.toggle(`head`,t.head);let n=e.querySelector(`.tower`);n.classList.toggle(`ghost`,!t.tower),A(n,t.tower?.mark??`unknown`),k(e,`h2 a`,t.label),M(e.querySelector(`h2 a`),{view:`workspace`,ws:t.id}),k(e,`.title p`,t.tower?Qe({state:E[t.tower.mark]()}):Zt()),I(e.querySelector(`.spawn-btns button`),t),Ir(e.querySelector(`header > .quit-btn`),t),Fr(e.querySelector(`.tower-quit`),t.tower),N(e.querySelector(`.tabs`),t.tabs,()=>D(`<div class="tab"><h3><span></span><button type="button" class="tab-add"></button><button type="button" class="quit-btn" data-close="tab"></button></h3><div class="units"></div></div>`),(e,n)=>{k(e,`h3 span`,qn({label:n.label})),Lr(e.querySelector(`.quit-btn`),t,n),I(e.querySelector(`.tab-add`),t,n.id),N(e.querySelector(`.units`),n.units,P,F)}),N(e.querySelector(`.outposts`),t.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?Jt():void 0})),P,F)}function ei(e,t,n,r){let i=[...e.querySelectorAll(`.base:not(.leaving) .tower`)],a=e.querySelector(`.base.head:not(.leaving) .tower`),o=e.getBoundingClientRect(),s=e=>{let t=e.getBoundingClientRect();return[Math.round(t.x+t.width/2-o.x),Math.round(t.y+t.height/2-o.y)]},c=a?i.filter(e=>e!==a):[],l=c.map(e=>{let[[t,n],[r,i]]=[s(a),s(e)];return{x1:t,y1:n,x2:r,y2:i,mid:Math.round((t+r)/2)}}),u=l.map(({x1:e,y1:t,x2:n,y2:r,mid:i})=>`M${e} ${t}C${i} ${t} ${i} ${r} ${n} ${r}`),d=u.join(`|`);t.dataset.sig!==d&&(t.dataset.sig=d,t.replaceChildren(...u.map(e=>(t=>(t.setAttribute(`class`,`wire`),t.setAttribute(`d`,e),t))(document.createElementNS(`http://www.w3.org/2000/svg`,`path`)))),n.replaceChildren(...Or(l,r))),n.querySelectorAll(`.packet`).forEach((e,t)=>e.toggleAttribute(`data-live`,a.dataset.mark===`working`||c[t].dataset.mark===`working`))}function ti(){let[e,t,n,r,i]=[O(`map`,HTMLElement),O(`bases`,HTMLElement),O(`links`,SVGSVGElement),O(`packets`,HTMLElement),O(`log`,HTMLElement)],a=matchMedia(`(prefers-reduced-motion: reduce)`).matches,o=()=>!e.hidden&&ei(e,n,r,a);return new ResizeObserver(o).observe(e),Cr(),{layout:o,stats(e){let t=e.bases.flatMap(e=>e.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]))),n=e=>String(t.filter(t=>!e||t.mark===e).length);for(let[t,r]of[[`s-bases`,String(e.bases.length)],[`s-agents`,n()],[`s-working`,n(`working`)],[`s-waiting`,n(`waiting`)]])O(t,HTMLElement).textContent=r},show(e){N(t,e.bases,Qr,$r),requestAnimationFrame(o)},log(e){let t=new Date().toLocaleTimeString([],{hour12:!1});for(let n of e){let e=D(`<li><span></span><time></time></li>`);e.dataset.mark=n.mark,k(e,`span`,n.text),k(e,`time`,t),i.prepend(e)}for(;i.children.length>12;)i.lastElementChild.remove()},pause(e){document.documentElement.classList.toggle(`paused`,e)}}}var ni=new URL(`done-jqKY4qf5.mp3`,import.meta.url).href,ri=new URL(`error-DdTLgPEw.mp3`,import.meta.url).href,ii={waiting:new URL(`waiting-DOg8-8gu.mp3`,import.meta.url).href,error:ri,done:ni},ai=e=>e.mark===`waiting`||e.pending?`waiting`:e.mark===`error`?`error`:e.mark===`done`?`done`:void 0,L=(e,t)=>{try{return localStorage.getItem(e)??t}catch{return t}},R=(e,t)=>{try{localStorage.setItem(e,t)}catch{}};function oi(e){let t=e=>document.getElementById(e),n=t(`remind`),r=t(`sound`),i=t(`sound-pop`),a=t(`sound-on`),o=t(`sound-vol`),s=t(`sound-vol-out`),c=typeof Notification<`u`,l=L(`sb.remind`,`1`)===`1`,u=L(`sb.sound`,`0`)===`1`,d=Math.min(100,Math.max(0,Number(L(`sb.volume`,`60`))||0)),f,p,m=new Map,h=()=>{let e=c?Notification.permission:`denied`;n.setAttribute(`aria-pressed`,String(l)),n.dataset.state=l?e===`granted`?`on`:e===`denied`?`blocked`:`ask`:`off`,n.title=c?l?e===`granted`?Tn():e===`denied`?Cn():Sn():wn():En(),r.dataset.state=u?`on`:`off`,r.setAttribute(`aria-label`,u?In():Fn()),a.checked=u,o.value=s.value=String(d),p&&(p.gain.value=(d/100)**2)};n.textContent=xn(),r.textContent=Pn(),r.title=Ln(),t(`sound-on-label`).textContent=Pn(),t(`sound-vol-label`).textContent=zn(),t(`sound-try`).textContent=Rn(),n.onclick=async()=>{l&&c&&Notification.permission==="default"?await Notification.requestPermission().catch(()=>{}):R(`sb.remind`,(l=!l)?`1`:`0`),h()},i.addEventListener(`toggle`,e=>e.newState===`open`&&Yr(i,r)),a.onchange=()=>{R(`sb.sound`,(u=a.checked)?`1`:`0`),h(),u&&g(`done`)},o.oninput=()=>(R(`sb.volume`,String(d=Number(o.value))),h()),o.onchange=()=>g(`done`),t(`sound-try`).onclick=()=>g(`done`);function g(e){f??=new AudioContext,p||((p=f.createGain()).connect(f.destination),h());let t=f,n=p;m.has(e)||m.set(e,fetch(ii[e]).then(e=>e.arrayBuffer()).then(e=>t.decodeAudioData(e))),Promise.all([t.resume(),m.get(e)]).then(([,e])=>{let r=t.createBufferSource();r.buffer=e,r.connect(n),r.start()}).catch(()=>m.delete(e))}return h(),{signal(t){let n=t.flatMap(e=>(t=>t?[{a:e,k:t}]:[])(ai(e)));if(n.length&&(u&&g([`waiting`,`error`,`done`].find(e=>n.some(t=>t.k===e))),l&&c&&Notification.permission===`granted`&&(document.hidden||!document.hasFocus())))for(let{a:t,k:r}of n){let n=new Notification(t.name,{body:{waiting:ln,error:on,done:nn}[r]({note:t.note??``}).trim(),tag:t.key,icon:document.querySelector(`link[rel="icon"]`)?.href});n.onclick=()=>(window.focus(),n.close(),e(t))}}}}var si=45e3,ci=1e3,li=3e4,ui=(e,t)=>Math.min(li,ci*2**(e-1))*(.8+.4*t);function di(e){try{return JSON.parse(e)}catch{return}}function fi(e){let t,n,r,i=0,a={state:`connecting`,attempt:0},o=t=>e.onStatus(a={...a,...t}),s=()=>(e.clearTimeout(n),e.clearTimeout(r),n=r=void 0),c=()=>{let e=t;t=void 0,e?.close()},l=()=>{e.clearTimeout(r),r=e.setTimeout(()=>u(),si),o({state:`live`,attempt:0,lastContact:e.now()})},u=()=>{c(),s();let t=a.attempt+1;if(t>8)return o({state:`offline`,attempt:t});o({state:`reconnecting`,attempt:t}),e.hidden()||(n=e.setTimeout(d,ui(t,e.random())))},d=()=>{c(),s(),i=e.now();let n=t=e.open();n.onError(()=>t===n&&u()),n.listen(`message`,r=>{if(t!==n)return;let i=di(r);i&&e.onNet(i),o({problem:i?void 0:hn()}),l()}),n.listen(`ping`,()=>t===n&&l()),n.listen(`problem`,e=>{t===n&&(o({problem:di(e)??gn()}),l())}),r=e.setTimeout(()=>u(),si)};return{start(){o({state:`connecting`,attempt:0}),d()},resume(){let n=e.now()-i<2e3||a.lastContact!==void 0&&e.now()-a.lastContact<=2e4;t&&n||(o({attempt:0,state:a.state===`live`?`reconnecting`:a.state}),d())},restart:d,hide(){e.clearTimeout(n),n=void 0},stop(){c(),s()}}}sr();var z=ti(),B=e=>document.getElementById(e),pi=e=>e?new Date(e).toLocaleTimeString([],{hour12:!1}):Kt(),mi,hi,V,H,gi={state:`connecting`,attempt:0},U={view:`map`},_i=!1,vi,yi=``,W,bi,G=e=>W?e(W):void bi?.then(e);function xi(){bi??=y(async()=>{let{mountFocus:e}=await import(`./views-fb61UPmI.js`);return{mountFocus:e}},[],import.meta.url).then(({mountFocus:e})=>(W=e({data:Fi,restart:()=>$.restart(),openTile:J,embedTerminal:(e,t,n)=>new Promise(r=>q(i=>r(i.terminal.embed(e,t,n)))),online:()=>gi.state===`live`}),W.show(U,U),V&&W.net(V),W))}var K,Si,q=e=>{if(K)return e(K);Si??=y(async()=>{let{mountPanels:e}=await import(`./layer-B1r-8tXs.js`);return{mountPanels:e}},[],import.meta.url).then(({mountPanels:e})=>K=e({label:e=>V?.bases.find(t=>t.id===e)?.label??e,recent:async e=>(await(Z?Z.data(e).latest():X(e,`?limit=12`))).items,post:e=>Z&&((t,n)=>Z.data(e).post(t,n)),stream:()=>yi,showTerminal:(e,t)=>(K?.stack.close(),W?.terminal(t),Q.go({view:`session`,ws:e,key:t}))})),Si.then(e)},J=(e,t)=>q(n=>n.tiles.open(e,t)),Y=document.querySelector(`link[rel="icon"]`),Ci=Y&&decodeURIComponent(Y.href.slice(Y.href.indexOf(`,`)+1)),wi=0;function Ti(e){let t=e.bases.flatMap(e=>[...e.tower?[e.tower]:[],...[...e.tabs.flatMap(e=>e.units),...e.outside].flatMap(e=>[e,...e.subs])]).filter(e=>e.mark===`waiting`||e.pending).length;if(!Y||!Ci||t===wi)return;wi=t;let n=`<circle cx='23' cy='9' r='9' fill='#ffd166' stroke='#0b1220' stroke-width='2'/><text x='23' y='13' text-anchor='middle' font-family='sans-serif' font-size='${t>9?9:12}' font-weight='700' fill='#06101e'>${t>9?`9+`:t}</text>`;Y.href=`data:image/svg+xml,${encodeURIComponent(t?Ci.replace(`</svg>`,`${n}</svg>`):Ci)}`}var Ei;function Di(e){V=H=e,Ti(e);let t=pr(e,Date.now());if(Ei&&Li.signal(mr(Ei,t)),Ei=t,document.hidden)return;z.stats(e);let n=mr(vi,t);(n.length||K)&&q(e=>e.alerts(n,t)),vi=t,z.log(ur(hi,e)),hi=e,G(t=>t.net(e)),U.view===`map`&&(z.show(e),mi=e,H=void 0)}function Oi(e){let t=U,n=e.view===`workspace`&&t.view===`map`?document.querySelector(`#bases [data-key="${CSS.escape(e.ws)}"]`)?.getBoundingClientRect():void 0;U=e,e.view!==`map`&&xi(),B(`map`).hidden=e.view!==`map`,B(`legend`).hidden=e.view===`session`,G(r=>r.show(e,t,n)),e.view===`map`&&V&&V!==mi&&(Di(V),requestAnimationFrame(z.layout)),_i&&T(e)!==T(t)&&$.restart()}function ki(e){gi=e;let t=e.state===`reconnecting`||e.state===`offline`;document.body.dataset.stale=B(`stage`).dataset.stale=String(t),B(`link`).dataset.state=e.state,B(`link-text`).textContent={connecting:rt,live:it,reconnecting:ot,offline:at}[e.state](),W&&V&&W.net(V),K?.stack.redraw();let n=B(`banner`);n.hidden=!t&&!e.problem;let r=e.state===`offline`?ve({tries:e.attempt-1}):e.state===`reconnecting`?e.attempt?Te({attempt:e.attempt}):Se():xe({problem:e.problem??``}),i=document.createElement(`b`);i.textContent=pi(e.lastContact),n.replaceChildren(`${r} ${he()} `,i,me())}function Ai(e,t){try{let n=JSON.parse(t);G(t=>e===`history`?t.history(n):t.cards(n))}catch{}}var ji=document.querySelector(`meta[name="sb-build"]`)?.content,Mi=e=>!!(ji&&ji!==JSON.parse(e).build);function Ni(e){let t=new EventSource(e?`events?watch=${encodeURIComponent(e)}`:`events`);return{onError:e=>t.onerror=e,listen:(e,n)=>t.addEventListener(e,e=>n(e.data)),close:()=>t.close()}}var Pi=e=>fetch(`api/${e}`,{cache:`no-store`}).then(e=>e.ok?e.json():Promise.reject(Error(String(e.status)))),X=(e,t=``)=>Pi(`history/${encodeURIComponent(e)}${t}`),Z=void 0,Fi=e=>({older:t=>X(e,`?before=${encodeURIComponent(t)}`),latest:()=>X(e),entry:t=>Pi(`entry/${encodeURIComponent(e)}/${encodeURIComponent(t)}`).catch(()=>void 0),pic:(t,n)=>`api/image/${encodeURIComponent(e)}/${encodeURIComponent(t)}/${n}`}),Ii=()=>{let e=Ni(T(U));return e.listen(`history`,e=>Ai(`history`,e)),e.listen(`cards`,e=>Ai(`cards`,e)),e.listen(`hello`,e=>Mi(e)?location.reload():(yi=e,K?.terminal.hello())),e.listen(`mirror`,e=>K?.terminal.frame(e)),e};document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[data-alert]`),n=t&&C(t.getAttribute(`data-route`)??``);if(!n||n.view!==`session`||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let r=vi?.get(n.key);r&&(e.preventDefault(),q(e=>e.stack.show(r)))},!0);var Q=Hr(e=>Oi(e)),Li=oi(e=>Q.go({view:`session`,ws:e.ws,key:dr(e)})),$=fi({open:Ii,now:Date.now,setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),random:Math.random,hidden:()=>document.hidden,onNet:Di,onStatus:ki}),Ri=()=>$.resume();document.addEventListener(`visibilitychange`,()=>{if(z.pause(document.hidden),document.hidden)return $.hide();H&&Di(H),G(e=>e.wake()),Ri()}),addEventListener(`keydown`,e=>{e.key!==`Escape`||e.defaultPrevented||document.querySelector(`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`)||(e.preventDefault(),!K?.stack.close()&&U.view!==`map`&&Q.go(Vr(U)))}),br(e=>K?.hotkey(e)??!1),B(`pair`).hidden=location.hostname!==`127.0.0.1`,B(`pair`).addEventListener(`click`,()=>void y(async()=>{let{pairTile:e}=await import(`./pair-BwRLzIZW.js`);return{pairTile:e}},[],import.meta.url).then(({pairTile:e})=>J(e(),!0))),zr({route:()=>U,net:()=>V,go:e=>Q.go(e)}),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`button[data-open]`);t&&y(async()=>{let{openingOf:e,spawnTile:t}=await import(`./spawn-B6nd89Wa.js`);return{openingOf:e,spawnTile:t}},[],import.meta.url).then(({openingOf:e,spawnTile:n})=>{let r=e(t,V?.bases??[]);r&&J(n(r,(e,t,n)=>(K?.tiles.close(n),Q.go({view:`session`,ws:e,key:t}))),!0)})});for(let e of[`focus`,`pageshow`,`online`])window.addEventListener(e,()=>!document.hidden&&Ri());ki(gi),Oi(Q.route()),$.start(),_i=!0;export{et as A,bn as C,Yt as D,Xt as E,s as F,Oe as M,De as N,Jt as O,pe as P,Hn as S,Zt as T,Er as _,I as a,dr as b,Zr as c,A as d,Kr as f,y as g,qr as h,M as i,Qe as j,tt as k,Yr as l,k as m,E as n,O as o,N as p,Xr as r,j as s,Ur as t,D as u,Tr as v,fn as w,Un as x,fr as y};
|