pi-straw-boss 0.42.6 → 0.42.7
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/README.md +1 -1
- package/dist/gui/apple-touch-icon.png +0 -0
- package/dist/gui/assets/ask-D59mmrUS.js +1 -0
- package/dist/gui/assets/{chat-B5pnUCRX.js → chat-DnShX3ZO.js} +2 -2
- package/dist/gui/assets/drawer-DaA7PUPB.js +1 -0
- package/dist/gui/assets/{index-BHKpn5f0.js → index-BJJ5qgqM.js} +1 -1
- package/dist/gui/assets/{index-BObH_wDT.css → index-CG4JCAMB.css} +1 -1
- package/dist/gui/assets/{layer-8HcnRZuP.js → layer-BwEsneaD.js} +3 -3
- package/dist/gui/assets/lightbox-Dxnlx2V_.js +1 -0
- package/dist/gui/assets/open_main_title-DgDbRLoO.js +1 -0
- package/dist/gui/assets/pair-6DGLjFx1.js +1 -0
- package/dist/gui/assets/spawn-DMexSYb_.js +1 -0
- package/dist/gui/assets/{unit_count-KyfX3vlL.js → unit_count-BKn4rJ2g.js} +1 -1
- package/dist/gui/assets/views-vEKY7XBo.js +7 -0
- package/dist/gui/icon-192.png +0 -0
- package/dist/gui/icon-512.png +0 -0
- package/dist/gui/icon.svg +1 -1
- package/dist/gui/index.html +4 -4
- package/package.json +1 -1
- package/src/activity.ts +1 -1
- package/src/gui.ts +7 -3
- package/dist/gui/assets/ask-m7yzz3lq.js +0 -1
- package/dist/gui/assets/drawer-DLzgD0cJ.js +0 -1
- package/dist/gui/assets/lightbox-D5yGk0gu.js +0 -1
- package/dist/gui/assets/pair-C6UGzV_a.js +0 -1
- package/dist/gui/assets/spawn-4LBbzdOw.js +0 -1
- package/dist/gui/assets/views-jpxln_Is.js +0 -7
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Run a few agents on the same project and they start stepping on each other: two
|
|
|
33
33
|
- **Towers talk to each other.** A tower lists every workspace's tower (`tower_list`: who a message for it reaches, what its tabs work on) and writes to one or all of them (`tower_send`); a workspace without a tower is reached through its mains, else its members. Every `call_tower`, `boss_broadcast`, and `tower_send` message opens with a header the code writes: who sent it, in what role, to whom, and whether a reply is expected ([how](docs/how-it-works.md#talking-between-towers)).
|
|
34
34
|
- **A tower closes the mains it opened.** A main a tower opened for a request reports to the sender and to the tower, and the tower closes it (`boss_close_main`) when nothing is running in it ([how](docs/how-it-works.md#closing-an-opened-main)).
|
|
35
35
|
- **A digest for the tower**: joins, subagent launches, and renames in its workspace since its last run, read into its next run once and cleared ([how](docs/how-it-works.md#the-towers-digest)).
|
|
36
|
-
- **A browser view** of the whole net, `/boss gui`: every workspace as a base with its tower, agents, and subagents, animated and read-only. Click a base to zoom in, click a unit to read its chat as a live comms log; units that wait on you queue up as alerts, and Space opens the next one, F enlarges the top dialog, and Escape closes it (none of them while you type); a question is answered from the keyboard too: arrows choose, Tab moves between questions, and Enter confirms and goes on. A switch in the header's settings (the gear) raises a system notification, and another plays a sound, when a unit waits on you, fails, or finishes; finished units wait in a list of their own, cleared one by one or all at once, and a finished subagent on the map is dismissed one by one or all at once (Dismiss finished, beside the location). A unit's comms show its background monitors, and one that fails or goes quiet raises a notice (a quiet entry under the header's Notices button; only a unit waiting on you raises the prominent alert); a unit that is idle while a subagent of it works, or while a monitor of it runs, shows as commanding with a glow, and one that only waits on a running monitor shows its note in red. On a desktop a unit's terminal takes your keyboard once you click into it. It reads in English or Traditional Chinese, following your browser, with a language menu in the header's settings. + New base, the last card on the map, opens a base in a folder you pick with one member and no tower. A base without a tower takes more members (+ Member on the base adds one in a new tab, on a squad beside that squad), and its tower opens by the rules above; a base with a tower takes new mains (+ Main), each in a tab of its own. In a session's composer, a file pasted, dropped, or picked with + (20 MB at most) is stored in a private temp folder and its path goes into the message. × closes a base, a squad, or (in its view) a unit after a confirmation: each agent quits pi as `/quit` would, then its pane, tab, or workspace closes; nothing closes if one of them refuses. Each opening form takes an optional first message, and the folder picker stays inside your home folder and skips hidden folders.
|
|
36
|
+
- **A browser view** of the whole net, `/boss gui`: every workspace as a base with its tower, agents, and subagents, animated and read-only. Click a base to zoom in, click a unit to read its chat as a live comms log; units that wait on you queue up as alerts, and Space opens the next one, F enlarges the top dialog, and Escape closes it (none of them while you type); a question is answered from the keyboard too: arrows choose, Tab moves between questions, and Enter confirms and goes on. A switch in the header's settings (the gear) raises a system notification, and another plays a sound, when a unit waits on you, fails, or finishes; finished units wait in a list of their own, cleared one by one or all at once, and a finished subagent on the map is dismissed one by one or all at once (Dismiss finished, beside the location). A unit's comms show its background monitors, and one that fails or goes quiet raises a notice (a quiet entry under the header's Notices button; only a unit waiting on you raises the prominent alert); a unit that is idle while a subagent of it works, or while a monitor of it runs, shows as commanding with a glow, and one that only waits on a running monitor shows its note in red. On a desktop a unit's terminal takes your keyboard once you click into it. It reads in English or Traditional Chinese, following your browser, with a language menu in the header's settings. + New base, the last card on the map, opens a base in a folder you pick with one member and no tower. A base without a tower takes more members (+ Member on the base adds one in a new tab, on a squad beside that squad), and its tower opens by the rules above; a base with a tower takes new mains (+ Main, on the base or in the tower's comms), each in a tab of its own. In a session's composer, a file pasted, dropped, or picked with + (20 MB at most) is stored in a private temp folder and its path goes into the message. × closes a base, a squad, or (in its view) a unit after a confirmation: each agent quits pi as `/quit` would, then its pane, tab, or workspace closes; nothing closes if one of them refuses. Each opening form takes an optional first message, and the folder picker stays inside your home folder and skips hidden folders.
|
|
37
37
|
- **Broadcast** to a tab, a workspace, every tower (a workspace without one, through its mains or members), or every session.
|
|
38
38
|
- **Tidy tabs.** When a pi starts in a tab or quits out of it, the tab's panes are made equal again, so workers split off one by one don't leave a chain of halves.
|
|
39
39
|
- **Stranded subagents are asked to report.** A subagent that stays open after finishing, while the pi that launched it was restarted and no longer receives its result, is asked once over intercom to send its final report there ([how it works](docs/how-it-works.md#orphaned-subagents)).
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,U as t,x as n}from"./index-BJJ5qgqM.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`?`已複製到這台裝置的剪貼簿。`:`Copied to this device's clipboard.`),p=((e={},n={})=>(n.locale??t())===`zh-TW`?`複製指令`:`Copy command`),m=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個選項有預覽;請在終端機中查看。`:`It has a preview; see it in the terminal.`),h=((e={},n={})=>(n.locale??t())===`zh-TW`?`未確認。請查看終端機。`:`Not confirmed. Check the terminal.`),g=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註`:`Note`),_=((e={},n={})=>(n.locale??t())===`zh-TW`?`備註(選填)`:`Note (optional)`),v=e=>`Opened while ${e?.tool} was running; it may not be about that call.`,y=e=>`在 ${e?.tool} 執行時開啟,不一定與該呼叫有關。`,b=((e,n={})=>(n.locale??t())===`zh-TW`?y(e):v(e)),x=((e={},n={})=>(n.locale??t())===`zh-TW`?`選項`:`Options`),S=((e={},n={})=>(n.locale??t())===`zh-TW`?`另一個答案沒有被採用;這個可以送出。`:`The other answer was not taken; this one can go.`),C=((e={},n={})=>(n.locale??t())===`zh-TW`?`你的答案`:`Your own answer`),w=((e={},n={})=>(n.locale??t())===`zh-TW`?`或自己輸入答案`:`Or type your own answer`),T=((e={},n={})=>(n.locale??t())===`zh-TW`?`問題已變更,請重新閱讀。`:`The question changed; read it again.`),E=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 讀不懂這個答案。`:`The session could not read that answer.`),D=((e={},n={})=>(n.locale??t())===`zh-TW`?`這個答案不符合問題。`:`That answer does not fit the question.`),O=((e={},n={})=>(n.locale??t())===`zh-TW`?`session 拒絕了這個答案。`:`The session refused that answer.`),k=((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.`),A=((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.`),j=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出答案`:`Send answer`),M=((e={},n={})=>(n.locale??t())===`zh-TW`?`送出中…`:`Sending…`),N=((e={},n={})=>(n.locale??t())===`zh-TW`?`顯示終端機`:`Show terminal`),P=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中關閉。`:`It was dismissed in the terminal.`),F=((e={},n={})=>(n.locale??t())===`zh-TW`?`它已不再開啟。`:`It is no longer open.`),I=((e={},n={})=>(n.locale??t())===`zh-TW`?`已在終端機中回答。`:`It was already answered in the terminal.`),L=((e={},n={})=>(n.locale??t())===`zh-TW`?`連不上伺服器。`:`The server could not be reached.`),R=((e={},n={})=>(n.locale??t())===`zh-TW`?`它在等待對話框。`:`It waits on a dialog.`),z={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1};function B(e,t,n,r,i){let{q:a}=n,o=r[a],s=z[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 V(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=B(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 H=e=>e.multiple?c():e.freeform&&e.options.length?s():``,U=(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":x()},...e.options.map(e=>n(`li`,{class:`ask-opt`},n(`b`,null,e.title),e.description&&n(`small`,null,e.description)))),t&&H(e)&&n(`small`,{class:`ask-how`},H(e))),W=e=>e.replace(/[\u0000-\u0008\u000b-\u001f\u007f-\u009f\p{Cf}]/gu,`�`),G=e=>(e.select?.choices??[]).map((e,t)=>({...e,i:t})),K=(e,t,n)=>({...e.size?{choices:[...e].sort((e,t)=>e-t)}:{},...t.trim()?{text:t}:{},...n.trim()?{note:n}:{}}),q=(e,t,n)=>({dialog:e.dialog,digest:e.digest,answerId:n,...t}),J={digest:T,"not-allowed":D,malformed:E};function Y(t){let{outcome:n,reason:i,by:a}=t.body;return n===`accepted`?[`ok`,o()]:n===`stale`?[`error`,a===`local`?I():a===`cancel`?P():F()]:n===`rejected`?[`error`,(Object.hasOwn(J,String(i))?J[String(i)]:O)()]:n===`busy`?[`error`,r()]:n===`unknown`||t.status===504?[`error`,h(),!0]:[`error`,i??e({status:t.status})]}var X=e=>[`accepted`,`stale`,`busy`,`unknown`].includes(String(e.body.outcome))||e.status===504,Z=e=>e.answer?`d\n${e.answer.dialog}\n${e.answer.digest}`:`c\n${e.callId}\n${e.why??``}`;function Q(e,t,r=location.hostname!==`127.0.0.1`,o,s){let c,v,y,T=!1,E=!1,D;for(let e of[`focusin`,`pointerdown`])document.addEventListener(e,e=>v&&!v.el.contains(e.target)&&(v.lost=void 0));let O=(e,t,n,...r)=>(e.dataset.tone=t,e.replaceChildren(n,...r)),P=()=>{if(!v)return;let e=document.activeElement;e&&e!==document.body&&e!==v.lost&&(v.lost=void 0),v.controls.forEach(e=>e.disabled=!T||E||v.done),v.send&&(v.send.disabled=!T||E||v.done||!v.pick()),e&&v.el.contains(e)&&e.disabled&&(v.lost=e);let t=v.lost;t&&!t.disabled&&v.el.contains(t)&&(!document.activeElement||document.activeElement===document.body)&&(t.focus(),v.lost=void 0)};async function F(e,r){[e.sending,E,e.spell]=[!0,!0,!1],P(),O(e.note,``,M());let i=await t(`answer`,r).catch(()=>void 0),a=n(`button`,{type:`button`,class:`cmp-link`},l());a.onclick=()=>void F(e,r);let[o,c,u]=i?Y(i):[`error`,h(),!0];[e.done,e.sending,E,e.busy]=[!i||X(i),!1,!1,i?.body.outcome===`busy`],O(e.note,o,c,...u?[a]:[]),P(),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 r,i=G(t).map(e=>I(`radio`,W(e.label),[e.note&&W(e.note)],()=>(r=e.i,i.forEach((n,r)=>n.setAttribute(`aria-checked`,String(G(t)[r].i===e.i))),P()),e.i+1)),a=t.select?.copy!==void 0&&n(`button`,{type:`button`,class:`cmp-link`},p());return a&&(a.disabled=!navigator.clipboard,a.onclick=()=>void navigator.clipboard.writeText(t.select.copy).then(()=>O(e.note,`ok`,f()),()=>O(e.note,`error`,d()))),e.pick=()=>r===void 0?void 0:{choice:r},e.first=V(e.el,[{opts:i,multiple:!1,answered:()=>r!==void 0}],()=>e.send),e.controls=i,[n(`pre`,{class:`ask-title`},W(t.select.title)),n(`div`,{class:`ask-opts`,role:`radiogroup`,"aria-label":u()},...i),n(`div`,{class:`ask-acts`},e.send,a)]}function z(e,t){let r=t.questions.map(()=>({picks:new Set,text:n(`textarea`,{rows:`1`,maxlength:`8192`,class:`ask-own`,placeholder:w(),"aria-label":C()}),note:n(`input`,{type:`text`,maxlength:`2048`,class:`ask-own ask-memo`,placeholder:_(),"aria-label":g()})})),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&&m()],()=>{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)))),P()}));return o.text.oninput=()=>(t.multiple||(o.picks.clear(),c.forEach(e=>e.setAttribute(`aria-checked`,`false`))),P()),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":x()},...c),o.text,o.note)});return e.pick=()=>r.every(e=>e.picks.size||e.text.value.trim())?{answers:r.map(e=>K(e.picks,e.text.value,e.note.value))}:void 0,e.first=V(e.el,i,()=>e.send),[...a,n(`div`,{class:`ask-acts`},e.send)]}function B(e){let t=e.asks??(e.ask?[e.ask]:[]),s=t.length>1,c=e.answer,l={key:Z(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`},j())).onclick=()=>void(l.pick()&&F(l,q(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]?``:H(t[0])}`.trim()),f=o&&e.tool!==`secret_drop`&&n(`button`,{type:`button`,class:`cmp-link`},N());f&&(f.onclick=o);let p=e.answer?.twin&&e.tool&&e.tool!==`dialog`?[n(`p`,{class:`ask-why`},b({tool:e.tool}))]:[];return l.el.append(...p,...c&&!u?c.select?L(l,c):z(l,c):[...t.length?t.map(e=>U(e,s)):[n(`p`,{class:`ask-why`},u?r?k():A():e.why??R())],n(`div`,{class:`ask-acts`},u?n(`p`,{class:`ask-term`},i()):d,f)],l.note),l}let J=(t,n)=>{let r=document.activeElement;v&&v!==n&&(v.focus=v.el.contains(r)?r:void 0),[c,v,y]=[t,n,n?.send?n:y],e.replaceChildren(...n?[n.el]:[]),P(),n?.focus&&(!document.activeElement||document.activeElement===document.body)&&n.focus.focus()};return{enter(){let e=v&&!v.done?v.first?.():void 0;return!!(e&&!e.disabled&&(e.focus(),1))},update(e,t){T=t,e&&(D=void clearTimeout(D)),!e&&(v?.done||v?.sending)?D??=setTimeout(()=>(D=void 0,J()),6e3):e?v&&(Z(e)===v.key||!e.answer&&(v.done||v.sending)&&e.callId===c?.callId)?((v.busy||v.sending)&&!e.answer?v.spell=!0:v.busy&&v.spell&&e.answer&&([v.done,v.busy]=[!1,!1],O(v.note,``,S())),c=e):J(e,y?.key===Z(e)&&!y.done?y:B(e)):J(),P()}}}export{L as n,M as r,Q as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-
|
|
2
|
-
import{H as e,S as t,b as n,d as r,n as i,y as a}from"./index-BHKpn5f0.js";import{n as o,t as s}from"./views-jpxln_Is.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=r(`<span class="ava"><svg><use/></svg></span>`);return t.querySelector(`use`).setAttribute(`href`,`#i-${i[e]??e}`),t};function ge(e){let t=[],r=0;for(let i of e.matchAll(/https?:\/\/[^\s<>)\]]+/g))t.push(e.slice(r,i.index),n(`a`,{href:i[0],rel:`noopener noreferrer`,target:`_blank`},i[0])),r=i.index+i[0].length;return[...t,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=n(`div`,{class:`chat-list`}),b=n(`div`,{class:`chat-top`}),x=n(`div`,{class:`chat-live`}),S=n(`div`,{class:`chat-end`}),C=n(`button`,{class:`chat-pill`,type:`button`,hidden:``}),w=n(`p`,{class:`chat-empty`},T()),E=n(`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 n=await de(p,r,e,e=>(J(e),Y(e))).finally(()=>O=!1),i=m.get(e);if(A===e){if(!n||!i)return B();D.hold(),j=i,i.scrollIntoView({block:`center`}),t(i,`lit`),clearTimeout(M),M=window.setTimeout(()=>(j=void 0,i.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,t=0){if(!t||!r.pic)return null;let i=Array.from({length:t},(t,n)=>r.pic(e,n));return n(`div`,{class:`pics`},...i.map((e,t)=>{let r=n(`img`,{src:e,alt:_({n:t+1}),loading:`lazy`,decoding:`async`}),o=n(`button`,{type:`button`,class:`pic`,"aria-label":oe({n:t+1})},r);return r.addEventListener(`error`,()=>o.replaceWith(n(`em`,{class:`pic-gone`},v()))),o.addEventListener(`click`,()=>void a(async()=>{let{lightbox:e}=await import(`./lightbox-D5yGk0gu.js`);return{lightbox:e}},__vite__mapDeps([0]),import.meta.url).then(({lightbox:e})=>e(i,t))),o}))}function _e(e,t){let r=p.result(e.id),i=n(`pre`,{class:`out`},r?.text??``),a=n(`pre`,{class:`args`},e.args??``),o=e.cut?n(`button`,{class:`more`,type:`button`},R()):null;o?.addEventListener(`click`,()=>G(o,a,t,t=>(e=>e&&`${e.args??``}${e.cut?`\n${ee()}`:``}`)(t.tools?.find(t=>t.id===e.id))));let s=r?.more?n(`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?n(`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=n(`details`,{class:`act`},n(`summary`,{"data-mark":r?r.isError?`error`:`done`:`working`},n(`b`,{class:`badge`}),n(`code`,null,e.name),n(`span`,{class:`sum`},e.summary),c),a,o,r&&n(`div`,{class:`result`},r.images?n(`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 t=n(`time`,null,pe(e.at));switch(e.kind){case`user`:return n(`article`,{class:`tx you`},n(`header`,null,t,n(`b`,null,le()),H(`user`)),n(`div`,{class:`bubble`},...ge(e.text??``),K(e.id,e.images)));case`assistant`:{let r=i(),a=n(`pre`,{class:`thought-text`}),c=e.thought?n(`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)),n(`article`,{class:`tx in`},H(r.role),n(`div`,{class:`tx-body`},n(`header`,null,n(`b`,null,r.name),e.model?n(`span`,null,e.model):null,t,e.stop?n(`span`,{class:`stop`,"data-mark":`error`},e.stop):null),c,a,e.text?n(`div`,{class:`md`},s(o(e.text))):null,e.error?n(`p`,{class:`fault`},e.error):null,...(e.tools??[]).flatMap(t=>_e(t,e.id))))}case`bash`:return n(`article`,{class:`tx sys`},n(`details`,{class:`act`},n(`summary`,{"data-mark":e.exit?`error`:`done`},n(`b`,{class:`badge`}),n(`code`,null,`shell`),n(`span`,{class:`sum`},`! ${e.command}`),e.exit?n(`span`,{class:`stop`,"data-mark":`error`},te({code:e.exit})):null),e.text?n(`pre`,{class:`out`},e.text):null));case`notice`:return n(`article`,{class:`tx sys`},n(`details`,{class:`notice`},n(`summary`,null,H(`comms`),n(`em`,null,re()),he[e.type??``]?.()??e.type??ie(),` `,e.from&&u(e.from)||(e.from??``),t),n(`pre`,null,e.text??``)));case`divider`:return n(`article`,{class:`tx rule`},n(`details`,null,n(`summary`,null,e.type===`compaction`?f({tokens:(e.tokens??0).toLocaleString()}):c()),n(`pre`,null,e.text??``)));default:return n(`article`,{class:`tx note`},e.text??``,` `,t)}}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,t){x.dataset.mark=t,x.lastChild?.textContent!==e&&x.replaceChildren(...e?[n(`b`,{class:`badge`}),n(`span`,null,e)]:[])}}}export{U as mountChat,_ as t};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-CG4JCAMB.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{C as e,U as t,b as n,d as r,n as i,x as a}from"./index-BJJ5qgqM.js";import{n as o,t as s}from"./views-vEKY7XBo.js";var c=((e={},n={})=>(n.locale??t())===`zh-TW`?`分支摘要`:`branch summary`),l=((e={},n={})=>(n.locale??t())===`zh-TW`?`通訊紀錄`:`Comms log`),u=e=>`context compacted · ${e?.tokens} tokens summarized`,d=e=>`上下文已壓縮 · 摘要了 ${e?.tokens} tokens`,f=((e,n={})=>(n.locale??t())===`zh-TW`?d(e):u(e)),ee=((e={},n={})=>(n.locale??t())===`zh-TW`?`…(於 1 MB 截斷)`:`… (cut at 1 MB)`),p=e=>`exit ${e?.code}`,m=e=>`結束碼 ${e?.code}`,te=((e,n={})=>(n.locale??t())===`zh-TW`?m(e):p(e)),h=e=>`Image ${e?.n}`,g=e=>`圖片 ${e?.n}`,_=((e,n={})=>(n.locale??t())===`zh-TW`?g(e):h(e)),v=((e={},n={})=>(n.locale??t())===`zh-TW`?`圖片無法讀取`:`Image unavailable`),y=e=>`${e?.count} image(s)`,b=e=>`${e?.count} 張圖片`,ne=((e,n={})=>(n.locale??t())===`zh-TW`?b(e):y(e)),re=((e={},n={})=>(n.locale??t())===`zh-TW`?`收到`:`incoming`),x=((e={},n={})=>(n.locale??t())===`zh-TW`?`跳到最新`:`jump to latest`),S=e=>`${e?.count} new`,C=e=>`${e?.count} 則新訊息`,w=((e,n={})=>(n.locale??t())===`zh-TW`?C(e):S(e)),T=((e={},n={})=>(n.locale??t())===`zh-TW`?`還沒有通訊。`:`No transmissions yet.`),ie=((e={},n={})=>(n.locale??t())===`zh-TW`?`通知`:`notice`),E=((e={},n={})=>(n.locale??t())===`zh-TW`?`表單回覆`:`form answers`),D=((e={},n={})=>(n.locale??t())===`zh-TW`?`訊息,來自`:`message from`),O=((e={},n={})=>(n.locale??t())===`zh-TW`?`記憶`:`memory`),k=((e={},n={})=>(n.locale??t())===`zh-TW`?`監看`:`monitor`),A=((e={},n={})=>(n.locale??t())===`zh-TW`?`提問,來自`:`question from`),j=((e={},n={})=>(n.locale??t())===`zh-TW`?`回報,來自`:`report from`),M=((e={},n={})=>(n.locale??t())===`zh-TW`?`狀態:`:`status of`),ae=((e={},n={})=>(n.locale??t())===`zh-TW`?`在旁開啟`:`open beside`),N=e=>`Open image ${e?.n}`,P=e=>`打開圖片 ${e?.n}`,oe=((e,n={})=>(n.locale??t())===`zh-TW`?P(e):N(e)),F=e=>`show all (${e?.size})`,I=e=>`顯示全部(${e?.size})`,L=((e,n={})=>(n.locale??t())===`zh-TW`?I(e):F(e)),R=((e={},n={})=>(n.locale??t())===`zh-TW`?`顯示全部參數`:`show all arguments`),z=e=>`◇ thought · ${e?.count} chars`,B=e=>`◇ 思考 · ${e?.count} 字元`,se=((e,n={})=>(n.locale??t())===`zh-TW`?B(e):z(e)),ce=((e={},n={})=>(n.locale??t())===`zh-TW`?`◇ 思考 · 已遮蔽`:`◇ thought · redacted`),V=((e={},n={})=>(n.locale??t())===`zh-TW`?`無法取得`:`unavailable`),le=((e={},n={})=>(n.locale??t())===`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=r(`<span class="ava"><svg><use/></svg></span>`);return t.querySelector(`use`).setAttribute(`href`,`#i-${i[e]??e}`),t};function ge(e){let t=[],n=0;for(let r of e.matchAll(/https?:\/\/[^\s<>)\]]+/g))t.push(e.slice(n,r.index),a(`a`,{href:r[0],rel:`noopener noreferrer`,target:`_blank`},r[0])),n=r.index+r[0].length;return[...t,e.slice(n)]}function U(t,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=a(`div`,{class:`chat-list`}),b=a(`div`,{class:`chat-top`}),x=a(`div`,{class:`chat-live`}),S=a(`div`,{class:`chat-end`}),C=a(`button`,{class:`chat-pill`,type:`button`,hidden:``}),w=a(`p`,{class:`chat-empty`},T()),E=a(`div`,{class:`chat-scroll`,tabindex:`-1`,"aria-label":l()},b,y,x,S);t.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(t){O=!0;let n=await de(p,r,t,e=>(J(e),Y(e))).finally(()=>O=!1),i=m.get(t);if(A===t){if(!n||!i)return B();D.hold(),j=i,i.scrollIntoView({block:`center`}),e(i,`lit`),clearTimeout(M),M=window.setTimeout(()=>(j=void 0,i.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,t=0){if(!t||!r.pic)return null;let i=Array.from({length:t},(t,n)=>r.pic(e,n));return a(`div`,{class:`pics`},...i.map((e,t)=>{let r=a(`img`,{src:e,alt:_({n:t+1}),loading:`lazy`,decoding:`async`}),o=a(`button`,{type:`button`,class:`pic`,"aria-label":oe({n:t+1})},r);return r.addEventListener(`error`,()=>o.replaceWith(a(`em`,{class:`pic-gone`},v()))),o.addEventListener(`click`,()=>void n(async()=>{let{lightbox:e}=await import(`./lightbox-Dxnlx2V_.js`);return{lightbox:e}},__vite__mapDeps([0]),import.meta.url).then(({lightbox:e})=>e(i,t))),o}))}function _e(e,t){let n=p.result(e.id),r=a(`pre`,{class:`out`},n?.text??``),i=a(`pre`,{class:`args`},e.args??``),o=e.cut?a(`button`,{class:`more`,type:`button`},R()):null;o?.addEventListener(`click`,()=>G(o,i,t,t=>(e=>e&&`${e.args??``}${e.cut?`\n${ee()}`:``}`)(t.tools?.find(t=>t.id===e.id))));let s=n?.more?a(`button`,{class:`more`,type:`button`},L({size:me(n.bytes??0)})):null;s?.addEventListener(`click`,()=>G(s,r,n.id,e=>e.text));let c=e.name===`show_doc`&&d?a(`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=a(`details`,{class:`act`},a(`summary`,{"data-mark":n?n.isError?`error`:`done`:`working`},a(`b`,{class:`badge`}),a(`code`,null,e.name),a(`span`,{class:`sum`},e.summary),c),i,o,n&&a(`div`,{class:`result`},n.images?a(`em`,null,ne({count:n.images})):null,r,s)),u=n&&K(n.id,n.images);return u?[l,u]:[l]}function q(e){let t=a(`time`,null,pe(e.at));switch(e.kind){case`user`:return a(`article`,{class:`tx you`},a(`header`,null,t,a(`b`,null,le()),H(`user`)),a(`div`,{class:`bubble`},...ge(e.text??``),K(e.id,e.images)));case`assistant`:{let n=i(),r=a(`pre`,{class:`thought-text`}),c=e.thought?a(`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,r,e.id,e=>e.thoughtText)),a(`article`,{class:`tx in`},H(n.role),a(`div`,{class:`tx-body`},a(`header`,null,a(`b`,null,n.name),e.model?a(`span`,null,e.model):null,t,e.stop?a(`span`,{class:`stop`,"data-mark":`error`},e.stop):null),c,r,e.text?a(`div`,{class:`md`},s(o(e.text))):null,e.error?a(`p`,{class:`fault`},e.error):null,...(e.tools??[]).flatMap(t=>_e(t,e.id))))}case`bash`:return a(`article`,{class:`tx sys`},a(`details`,{class:`act`},a(`summary`,{"data-mark":e.exit?`error`:`done`},a(`b`,{class:`badge`}),a(`code`,null,`shell`),a(`span`,{class:`sum`},`! ${e.command}`),e.exit?a(`span`,{class:`stop`,"data-mark":`error`},te({code:e.exit})):null),e.text?a(`pre`,{class:`out`},e.text):null));case`notice`:return a(`article`,{class:`tx sys`},a(`details`,{class:`notice`},a(`summary`,null,H(`comms`),a(`em`,null,re()),he[e.type??``]?.()??e.type??ie(),` `,e.from&&u(e.from)||(e.from??``),t),a(`pre`,null,e.text??``)));case`divider`:return a(`article`,{class:`tx rule`},a(`details`,null,a(`summary`,null,e.type===`compaction`?f({tokens:(e.tokens??0).toLocaleString()}):c()),a(`pre`,null,e.text??``)));default:return a(`article`,{class:`tx note`},e.text??``,` `,t)}}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,t){x.dataset.mark=t,x.lastChild?.textContent!==e&&x.replaceChildren(...e?[a(`b`,{class:`badge`}),a(`span`,null,e)]:[])}}}export{U as mountChat,_ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./unit_count-BKn4rJ2g.js";import{D as n,U as r,a as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,p as f,v as p,x as m,y as h}from"./index-BJJ5qgqM.js";var g=((e={},t={})=>(t.locale??r())===`zh-TW`?`關閉清單`:`Close the list`),_=((e={},t={})=>(t.locale??r())===`zh-TW`?`切換到其他單位`:`Switch to a unit`),v=((e={},t={})=>(t.locale??r())===`zh-TW`?`回到主地圖`:`Back to the map`),y=((e={},t={})=>(t.locale??r())===`zh-TW`?`所有單位`:`All units`),b=((e={},t={})=>(t.locale??r())===`zh-TW`?`指揮中`:`commanding`),x=((e={},t={})=>(t.locale??r())===`zh-TW`?`已結束`:`ended`),S=((e={},t={})=>(t.locale??r())===`zh-TW`?`錯誤`:`error`),C=((e={},t={})=>(t.locale??r())===`zh-TW`?`閒置`:`idle`),w=((e={},t={})=>(t.locale??r())===`zh-TW`?`無狀態`:`unknown`),T=((e={},t={})=>(t.locale??r())===`zh-TW`?`等待`:`waiting`),E=((e={},t={})=>(t.locale??r())===`zh-TW`?`工作中`:`working`),D=.4;function O(e,t,n){let[r,i]=[Math.abs(e),Math.abs(t)];return Math.max(r,i)<10?`wait`:r>=1.7*i&&(n?e<0:e>0)?`drag`:`pass`}var k=(e,t,n)=>Math.abs(n)>=.45?n>0:e>=t*D,A=(e,t)=>t||e.some(e=>e.editable||e.sink||e.scrollsX||[`input`,`textarea`,`select`].includes(e.tag));function j(e){let t=e,n=getComputedStyle(e).overflowX;return{tag:e.tagName.toLowerCase(),editable:t.isContentEditable,sink:e.matches(`.composer, .term-sink`),scrollsX:(n===`auto`||n===`scroll`)&&e.scrollWidth>e.clientWidth+1}}var M=e=>{let t=[];for(let n=e;n;n=n.parentElement)t.push(j(n));return t},N={working:E,waiting:T,idle:C,done:x,error:S,unknown:w,commanding:b},P=(e,t,n)=>(t?x:N[e])({},n&&{locale:n}),F=(e,t)=>t.flatMap(t=>[t,...t.subs.map(e=>({...e,sub:!0}))].map(t=>({id:t.key,key:t.key,ws:e,name:t.name,role:t.role,mark:t.mark,note:t.note,ended:!!t.ended,sub:`sub`in t})));function I(t){return t.bases.flatMap(t=>{let r=[{id:`tower`,rows:t.tower?F(t.id,[{...t.tower,role:`tower`}]):[]},...t.tabs.map(e=>({id:e.id,label:n({label:e.label}),rows:F(t.id,e.units)})),{id:`outside`,label:e(),rows:F(t.id,t.outside)}].filter(e=>e.rows.length);return r.length?[{id:t.id,label:t.label,mark:t.mark,groups:r}]:[]})}var L=e=>e.reduce((e,t)=>(t.sub?e.at(-1)?.subs.push(t):e.push({...t,subs:[]}),e),[]),R=()=>a(`<div class="unit"><div class="card"><a class="hit"></a>${l}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><b class="dstate"></b><span class="note"></span></span></div></div><div class="subs"></div></div>`),z=()=>a(`<section class="dbase"><h3><a></a><small></small></h3><div class="dgroups"></div></section>`),B=()=>a(`<div class="dgroup"><h4></h4><div class="drows"></div></div>`),V=()=>matchMedia(`(max-width: 640px)`).matches;function H(){let e=m(`div`,{class:`drawer-body`}),n=m(`button`,{type:`button`,class:`x`,"aria-label":g()},`×`),r=m(`a`,{class:`drawer-map`},v()),a=m(`button`,{type:`button`,class:`pair-btn`,"data-close":`dismiss-all`,hidden:``});i(r,{view:`map`});let l=m(`aside`,{class:`drawer`,"aria-label":_()},m(`header`,null,m(`b`,null,y()),n),m(`div`,{class:`drawer-top`},r,a),e),b=m(`div`,{class:`drawer-veil`});document.body.append(b,l);let x,S,C=!1,w=0,T=0,E,D=()=>{h(a,x??{bases:[]});let n=(e,t)=>{i(e.querySelector(`.hit`),{view:`session`,ws:t.ws,key:t.key}),e.querySelector(`.hit`).setAttribute(`aria-label`,`${t.name}: ${P(t.mark,t.ended)}`),e.classList.toggle(`current`,t.key===S),e.toggleAttribute(`data-dismiss`,t.role===`subagent`&&t.ended),e.dataset.key=t.key,o(e,t.mark),u(e.querySelector(`.plate`),t.role,t.mark),s(e,`.name`,t.name),s(e,`.role`,f(t.role)),s(e,`.dstate`,P(t.mark,t.ended)),d(e,`.note`,t.note,t.mark,t.note?void 0:``),c(e.querySelector(`.subs`),t.subs??[],R,n)};c(e,I(x??{bases:[]}),z,(e,r)=>{o(e,r.mark),s(e,`h3 a`,r.label),i(e.querySelector(`h3 a`),{view:`workspace`,ws:r.id}),s(e,`small`,t({count:r.groups.reduce((e,t)=>e+t.rows.length,0)})),c(e.querySelector(`.dgroups`),r.groups,B,(e,t)=>{s(e,`h4`,t.label??``),e.querySelector(`h4`).toggleAttribute(`hidden`,!t.label),c(e.querySelector(`.drows`),L(t.rows),R,n)})})},j=e=>{w=Math.max(0,Math.min(T,e)),l.style.setProperty(`--dx`,`${w}px`),b.style.opacity=String(T?w/T:0),b.style.pointerEvents=w>0?`auto`:`none`},N=e=>{C=e,l.classList.toggle(`on`,e),l.inert=!e,document.documentElement.classList.remove(`drawer-drag`),j(e?T:0)},F=()=>{T=l.offsetWidth,D(),l.classList.add(`on`),document.documentElement.classList.add(`drawer-drag`)};l.inert=!0,document.addEventListener(`touchstart`,e=>{let t=e.target,n=l.contains(t)||t===b;if(E=void 0,!V()||e.touches.length!==1||document.querySelector(`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`)||(C?!n:A(M(t),!!getSelection()?.toString())))return;let r=e.touches[0],i=C?t.closest(`.unit[data-dismiss] > .card`)??void 0:void 0;E={x0:r.clientX,y0:r.clientY,mode:`wait`,was:C,base:w,last:r.clientX,at:performance.now(),v:0,card:i}},{passive:!0}),document.addEventListener(`touchmove`,e=>{if(!E||E.mode===`pass`)return;let t=e.touches[0],n=t.clientX-E.x0,r=t.clientY-E.y0;if(E.mode===`wait`){let e=O(n,r,E.was);if(e===`wait`)return;if(e===`pass`&&E.card&&O(n,r,!1)===`drag`)E.mode=`card`,E.card.classList.add(`swiping`);else if(e===`pass`)return void(E.mode=`pass`);else E.mode=`drag`,F()}e.preventDefault();let i=performance.now();if(E.v=(t.clientX-E.last)/Math.max(1,i-E.at),[E.last,E.at]=[t.clientX,i],E.mode!==`card`)return j(E.base+n);let a=Math.max(0,n);E.card.style.setProperty(`--sx`,`${a}px`),E.card.style.setProperty(`--so`,String(1-a/E.card.offsetWidth))},{passive:!1});let H=(e,t)=>{e.classList.remove(`swiping`),e.style.removeProperty(`--sx`),e.style.removeProperty(`--so`),t&&(e.classList.add(`gone`),p({key:e.parentElement.dataset.key}).then(t=>t||e.classList.remove(`gone`)))},U=e=>{let t=E;E=void 0,t?.mode===`drag`&&N(k(w,T,t.v)),t?.mode===`card`&&H(t.card,e.type===`touchend`&&k(Math.max(0,t.last-t.x0),t.card.offsetWidth,t.v))};return document.addEventListener(`touchend`,U),document.addEventListener(`touchcancel`,U),b.addEventListener(`click`,()=>N(!1)),l.addEventListener(`click`,e=>e.target.closest(`a[data-route], .x`)&&N(!1)),document.addEventListener(`keydown`,e=>C&&e.key===`Escape`&&(e.preventDefault(),N(!1)),!0),document.addEventListener(`sb-drawer`,()=>(C||F(),N(!C))),{net(e){x=e,C&&D()},route(e){S=e.view===`session`?e.key:void 0,r.toggleAttribute(`aria-current`,e.view===`map`),C&&D()}}}export{H as mountDrawer};
|
|
@@ -1 +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=>`${e?.n}d`,pe=e=>`${e?.n} 天`,me=((e,t={})=>(t.locale??s())===`zh-TW`?pe(e):fe(e)),he=e=>`${e?.n}h`,ge=e=>`${e?.n} 小時`,_e=((e,t={})=>(t.locale??s())===`zh-TW`?ge(e):he(e)),ve=e=>`${e?.n}m`,ye=e=>`${e?.n} 分`,be=((e,t={})=>(t.locale??s())===`zh-TW`?ye(e):ve(e)),xe=e=>`${e?.n}s`,Se=e=>`${e?.n} 秒`,Ce=((e,t={})=>(t.locale??s())===`zh-TW`?Se(e):xe(e)),we=((e={},t={})=>(t.locale??s())===`zh-TW`?`警示`:`Alerts`),Te=((e={},t={})=>(t.locale??s())===`zh-TW`?`所有基地`:`all bases`),Ee=((e={},t={})=>(t.locale??s())===`zh-TW`?``:`.`),De=((e={},t={})=>(t.locale??s())===`zh-TW`?`最後更新:`:`Last update`),Oe=e=>`Disconnected. Gave up after ${e?.tries} tries; it reconnects when you return to this tab.`,ke=e=>`連線中斷。重試 ${e?.tries} 次後放棄;回到此分頁時會重新連線。`,Ae=((e,t={})=>(t.locale??s())===`zh-TW`?ke(e):Oe(e)),je=e=>`The server is up but cannot read the net: ${e?.problem}`,Me=e=>`伺服器正常,但讀不到網:${e?.problem}`,Ne=((e,t={})=>(t.locale??s())===`zh-TW`?Me(e):je(e)),Pe=((e={},t={})=>(t.locale??s())===`zh-TW`?`與稻草網的連線中斷,正在重新連線…畫面顯示的是最後已知狀態。`:`Disconnected from the straw net. Reconnecting… The view shows the last known state.`),Fe=e=>`Disconnected from the straw net. Reconnecting (try ${e?.attempt})… The view shows the last known state.`,Ie=e=>`與稻草網的連線中斷,正在重新連線(第 ${e?.attempt} 次)…畫面顯示的是最後已知狀態。`,Le=((e,t={})=>(t.locale??s())===`zh-TW`?Ie(e):Fe(e)),Re=((e={},t={})=>(t.locale??s())===`zh-TW`?`Straw Net:所有基地`:`Straw Net: all bases`),ze=((e={},t={})=>(t.locale??s())===`zh-TW`?`取消`:`Cancel`),Be=((e={},t={})=>(t.locale??s())===`zh-TW`?`關閉`:`Close`),Ve=e=>`Quit base ${e?.name}`,He=e=>`關掉基地 ${e?.name}`,Ue=((e,t={})=>(t.locale??s())===`zh-TW`?He(e):Ve(e)),We=e=>`Quit base ${e?.name}? Every agent in it and its tower quit. Nothing quits while anything running would be lost.`,Ge=e=>`要關掉基地 ${e?.name} 嗎?裡面所有 agent 和塔台都會退出。有會遺失的東西時什麼都不關。`,Ke=((e,t={})=>(t.locale??s())===`zh-TW`?Ge(e):We(e)),qe=e=>`Quit squad ${e?.name}`,Je=e=>`關掉小隊 ${e?.name}`,Ye=((e,t={})=>(t.locale??s())===`zh-TW`?Je(e):qe(e)),Xe=e=>`Quit squad ${e?.name}? Every agent in it quits.`,Ze=e=>`要關掉小隊 ${e?.name} 嗎?裡面所有 agent 都會退出。`,Qe=((e,t={})=>(t.locale??s())===`zh-TW`?Ze(e):Xe(e)),$e=e=>`Quit the tower ${e?.name}? The base's mains become members again.`,et=e=>`要關掉塔台 ${e?.name} 嗎?這個基地的主智慧體都會降格成成員。`,tt=((e,t={})=>(t.locale??s())===`zh-TW`?et(e):$e(e)),nt=e=>`Quit ${e?.name}`,rt=e=>`關掉 ${e?.name}`,it=((e,t={})=>(t.locale??s())===`zh-TW`?rt(e):nt(e)),at=e=>`Quit ${e?.name}? It quits pi and its pane closes.`,ot=e=>`要關掉 ${e?.name} 嗎?它會退出 pi,窗格也會關掉。`,st=((e,t={})=>(t.locale??s())===`zh-TW`?ot(e):at(e)),ct=e=>`control tower · ${e?.state}`,lt=e=>`塔台 · ${e?.state}`,ut=((e,t={})=>(t.locale??s())===`zh-TW`?lt(e):ct(e)),dt=((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.`),ft=((e={},t={})=>(t.locale??s())===`zh-TW`?`移除`:`Dismiss`),pt=e=>`Dismiss finished (${e?.count})`,mt=e=>`移除已完成(${e?.count})`,ht=((e,t={})=>(t.locale??s())===`zh-TW`?mt(e):pt(e)),gt=e=>`Dismiss ${e?.name}`,_t=e=>`從畫面移除 ${e?.name}`,vt=((e,t={})=>(t.locale??s())===`zh-TW`?_t(e):gt(e)),yt=((e={},t={})=>(t.locale??s())===`zh-TW`?`文件`:`Documents`),bt=((e={},t={})=>(t.locale??s())===`zh-TW`?`總塔台`:`head tower`),xt=((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`),wt=((e={},t={})=>(t.locale??s())===`zh-TW`?`離線`:`offline`),Tt=((e={},t={})=>(t.locale??s())===`zh-TW`?`重新連線中`:`reconnecting`),Et=((e={},t={})=>(t.locale??s())===`zh-TW`?`正體中文`:`English`),Dt=((e={},t={})=>(t.locale??s())===`zh-TW`?`位置`:`Location`),Ot=e=>`${e?.name} is commanding`,kt=e=>`${e?.name} 指揮中`,At=((e,t={})=>(t.locale??s())===`zh-TW`?kt(e):Ot(e)),jt=e=>`${e?.name} finished`,Mt=e=>`${e?.name} 已完成`,Nt=((e,t={})=>(t.locale??s())===`zh-TW`?Mt(e):jt(e)),Pt=e=>`${e?.name} hit an error`,Ft=e=>`${e?.name} 發生錯誤`,It=((e,t={})=>(t.locale??s())===`zh-TW`?Ft(e):Pt(e)),Lt=e=>`${e?.name} went idle`,Rt=e=>`${e?.name} 轉為閒置`,zt=((e,t={})=>(t.locale??s())===`zh-TW`?Rt(e):Lt(e)),Bt=e=>`${e?.name} joined`,Vt=e=>`${e?.name} 加入`,Ht=((e,t={})=>(t.locale??s())===`zh-TW`?Vt(e):Bt(e)),Ut=e=>`${e?.name} left`,Wt=e=>`${e?.name} 離開`,Gt=((e,t={})=>(t.locale??s())===`zh-TW`?Wt(e):Ut(e)),Kt=e=>`${e?.name} lost its status`,qt=e=>`${e?.name} 失去狀態`,Jt=((e,t={})=>(t.locale??s())===`zh-TW`?qt(e):Kt(e)),Yt=e=>`${e?.name} is waiting on a question`,Xt=e=>`${e?.name} 正在等待回答`,Zt=((e,t={})=>(t.locale??s())===`zh-TW`?Xt(e):Yt(e)),Qt=e=>`${e?.name} started working`,$t=e=>`${e?.name} 開始工作`,en=((e,t={})=>(t.locale??s())===`zh-TW`?$t(e):Qt(e)),tn=((e={},t={})=>(t.locale??s())===`zh-TW`?`指揮中`:`commanding`),nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`已完成`:`finished`),rn=((e={},t={})=>(t.locale??s())===`zh-TW`?`錯誤`:`error`),an=((e={},t={})=>(t.locale??s())===`zh-TW`?`閒置`:`idle`),on=((e={},t={})=>(t.locale??s())===`zh-TW`?`無狀態`:`no status`),sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待回答`:`waiting on a question`),cn=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`working`),ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`地圖總覽`:`Overview of the map`),un=e=>`Monitor failed: ${e?.what}`,dn=e=>`Monitor 出錯:${e?.what}`,fn=((e,t={})=>(t.locale??s())===`zh-TW`?dn(e):un(e)),pn=e=>`Monitor went quiet and stopped: ${e?.what}`,mn=e=>`Monitor 太久沒輸出,已停止:${e?.what}`,hn=((e,t={})=>(t.locale??s())===`zh-TW`?mn(e):pn(e)),gn=((e={},t={})=>(t.locale??s())===`zh-TW`?`從未`:`never`),_n=((e={},t={})=>(t.locale??s())===`zh-TW`?`+新基地`:`+ New base`),vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`沒有執行中的智慧體`:`no agent running`),yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`無警示`:`no alerts`),v=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器沒有回應。`:`The server did not answer.`),bn=((e={},t={})=>(t.locale??s())===`zh-TW`?`尚無塔台`:`no tower yet`),xn=((e={},t={})=>(t.locale??s())===`zh-TW`?`監看中`:`Watching a monitor`),Sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`思考中`:`thinking`),Cn=e=>`Finished ${e?.note}`,wn=e=>`完成了 ${e?.note}`,Tn=((e,t={})=>(t.locale??s())===`zh-TW`?wn(e):Cn(e)),En=e=>`Failed ${e?.note}`,Dn=e=>`出錯了 ${e?.note}`,On=((e,t={})=>(t.locale??s())===`zh-TW`?Dn(e):En(e)),kn=e=>`Waiting on you ${e?.note}`,An=e=>`等你回答 ${e?.note}`,jn=((e,t={})=>(t.locale??s())===`zh-TW`?An(e):kn(e)),Mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+主智慧體`:`+ Main`),Nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+成員`:`+ Member`),Pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`Outposts`),Fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`手機`:`Phone`),In=((e={},t={})=>(t.locale??s())===`zh-TW`?`透過 Tailscale 配對手機`:`Pair a phone over Tailscale`),Ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`接回`:`Pop`),Rn=e=>`Pop ${e?.name}`,zn=e=>`接回 ${e?.name}`,Bn=((e,t={})=>(t.locale??s())===`zh-TW`?zn(e):Rn(e)),Vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器送來的快照,頁面無法讀取`:`the server sent a snapshot the page cannot read`),Hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器回報了頁面無法讀取的問題`:`the server reported a problem the page cannot read`),y=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉`:`Quit`),Un=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉塔台`:`Quit tower`),Wn=e=>`Refused (${e?.status}).`,Gn=e=>`已拒絕(${e?.status})。`,b=((e,t={})=>(t.locale??s())===`zh-TW`?Gn(e):Wn(e)),Kn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒`:`Remind`),qn=((e={},t={})=>(t.locale??s())===`zh-TW`?`點一下允許瀏覽器通知`:`Press to allow browser notifications`),Jn=((e={},t={})=>(t.locale??s())===`zh-TW`?`瀏覽器已封鎖通知,要到網站設定裡允許`:`The browser blocks notifications; allow them in the site settings`),Yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已關`:`Reminders off`),Xn=((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`),Zn=((e={},t={})=>(t.locale??s())===`zh-TW`?`這個瀏覽器不支援通知`:`This browser has no notifications`),Qn=((e={},t={})=>(t.locale??s())===`zh-TW`?`主智慧體`:`main`),$n=((e={},t={})=>(t.locale??s())===`zh-TW`?`成員`:`member`),er=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`outpost`),tr=((e={},t={})=>(t.locale??s())===`zh-TW`?`未編入`:`unaligned`),nr=((e={},t={})=>(t.locale??s(),`session`)),rr=((e={},t={})=>(t.locale??s())===`zh-TW`?`子智慧體`:`subagent`),ir=((e={},t={})=>(t.locale??s())===`zh-TW`?`塔台`:`tower`),ar=((e={},t={})=>(t.locale??s())===`zh-TW`?`設定`:`Settings`),or=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效`:`Sound`),sr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已關`:`Sounds off`),cr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已開`:`Sounds on`),lr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效:開關、音量與試聽`:`Sounds: on or off, volume, and a try`),ur=((e={},t={})=>(t.locale??s())===`zh-TW`?`▶ 試聽`:`▶ Try`),dr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音量`:`Volume`),fr=((e={},t={})=>(t.locale??s())===`zh-TW`?`收起`:`Stash`),pr=e=>`Stash base ${e?.name}`,mr=e=>`收起基地 ${e?.name}`,hr=((e,t={})=>(t.locale??s())===`zh-TW`?mr(e):pr(e)),gr=e=>`Stash base ${e?.name}? Its tower, mains, and members quit and come back with Pop. Nothing is stashed while anything running would be lost.`,_r=e=>`要收起基地 ${e?.name} 嗎?塔台、主智慧體和成員會結束,之後可以用「接回」叫回來。有會遺失的東西時不會收。`,vr=((e,t={})=>(t.locale??s())===`zh-TW`?_r(e):gr(e)),yr=e=>`Stashed (${e?.count})`,br=e=>`已收起(${e?.count})`,xr=((e,t={})=>(t.locale??s())===`zh-TW`?br(e):yr(e)),Sr=((e={},t={})=>(t.locale??s())===`zh-TW`?`智慧體`:`Agents`),Cr=((e={},t={})=>(t.locale??s())===`zh-TW`?`基地`:`Bases`),wr=((e={},t={})=>(t.locale??s())===`zh-TW`?`指揮中`:`Commanding`),Tr=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待中`:`Waiting`),Er=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`Working`),Dr=((e={},t={})=>(t.locale??s())===`zh-TW`?`狀態`:`States`),Or=e=>`tab ${e?.label}`,kr=e=>`分頁 ${e?.label}`,Ar=((e,t={})=>(t.locale??s())===`zh-TW`?kr(e):Or(e)),jr=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時網況 · 通訊`:`live net · comms`),Mr=((e={},t={})=>(t.locale??s())===`zh-TW`?`網路活動`:`Net activity`),Nr=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器啟動後還沒有動靜`:`Nothing has happened since the server started`),Pr=((e={},t={})=>(t.locale??s())===`zh-TW`?`現在`:`now`),Fr=e=>`${e?.count} events in 30 min`,Ir=e=>`近 30 分鐘 ${e?.count} 筆`,Lr=((e,t={})=>(t.locale??s())===`zh-TW`?Ir(e):Fr(e)),Rr=((e={},t={})=>(t.locale??s())===`zh-TW`?`網的總計`:`Net totals`),zr=e=>`using ${e?.tool}`,Br=e=>`使用 ${e?.tool}`,Vr=((e,t={})=>(t.locale??s())===`zh-TW`?Br(e):zr(e)),Hr=`sb-locale`;function Ur(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 Wr(e,t){return p(e)??t.map(Ur).find(Boolean)??`en`}var Gr={brand_label:Re,tagline:jr,totals_label:Rr,stat_bases:Cr,stat_agents:Sr,stat_working:Er,stat_waiting:Tr,stat_commanding:wr,mark_commanding:tn,alerts:we,no_alerts:yn,pair_button:Fn,pair_title:In,link_connecting:St,location:Dt,all_bases:Te,documents:yt,timeline:Mr,states:Dr,mark_working:cn,mark_waiting:sn,mark_idle:an,mark_done:nn,mark_error:rn,credit:dt,language:xt,settings:ar,new_base:_n};Object.keys(Gr);function Kr(){let e=null;try{e=localStorage.getItem(Hr)}catch{}let n=Wr(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,Gr[e.dataset[t]]?.()??e.dataset[t]);let i=document.getElementById(`lang`);i.replaceChildren(...t.map(e=>new Option(Et({},{locale:e}),e,!1,e===n))),i.onchange=()=>{try{localStorage.setItem(Hr,i.value),location.reload()}catch{i.value=n}}}var qr=e=>e.unit??e.key,x=e=>e.mark===`waiting`||e.pending?0:1;function Jr(e,t){let n=new Map;for(let r of e.bases)for(let e of[...r.tower?[{...r.tower,role:`tower`},...r.tower.subs]:[],...[...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 Yr(e,t){return[...t.values()].filter(t=>{let n=e?.get(t.key);return x(t)===0?!n||x(n)!==0||n.mark!==t.mark:e!==void 0&&n?.mark!==t.mark&&(t.mark===`error`||t.mark===`done`)})}var Xr=`input, textarea, select, [role=textbox], [role=combobox], [role=listbox], .term-scroll`,Zr=`button, a, summary, [role=button], [role=link]`,Qr=`.ask-opt, [role=radio], [role=checkbox]`,$r=`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`;function ei(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?.(Xr))){if(e.key===`f`||e.key===`F`)return`zoom`;if(e.key===` `&&!r?.closest?.(Qr)&&(n||!r?.closest?.(Zr)))return`next`}}function ti(e,t=()=>document.querySelector($r)!==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=ei(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 ni=3e4,ri=[`pointermove`,`pointerdown`,`keydown`,`wheel`,`touchstart`];function ii(e=document.documentElement){if(matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=Date.now(),n,r=()=>{let i=t+ni-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,ni))};for(let e of ri)addEventListener(e,i,{capture:!0,passive:!0});document.addEventListener(`visibilitychange`,()=>document.hidden||i()),i()}var ai=(...e)=>e.filter(e=>e!==!1&&e!=null),oi=(e,t)=>(e.classList.add(t),e.classList.toggle(`flip`));function si(e,t,...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t??{}))r.setAttribute(e,n);return r.append(...ai(...n)),r}var ci=140;function li(e,t){let n=document.createElement(`nav`),r=document.createElement(`div`),i=document.createElement(`i`);[n.className,r.className,i.className,n.hidden]=[`minimap`,`mm-in`,`mm-view`,!0],n.setAttribute(`aria-label`,ln()),n.append(r,i),document.body.append(n);let a=1,o=0,s=()=>{o=0;let t=e.getBoundingClientRect();i.style.transform=`translateY(${Math.round(Math.max(0,-t.top)*a)}px)`,i.style.height=`${Math.round(Math.min(innerHeight-Math.max(0,t.top),t.bottom)*a)}px`,n.classList.toggle(`away`,t.bottom<innerHeight)},c=()=>{let i=e.getBoundingClientRect();n.hidden=e.hidden||i.height<innerHeight*1.05||!matchMedia(`(min-width: 900px) and (hover: hover)`).matches,!n.hidden&&(a=Math.min(ci/i.width,innerHeight*.4/i.height),Object.assign(n.style,{width:`${Math.round(i.width*a)}px`,height:`${Math.round(i.height*a)}px`}),r.replaceChildren(...[...t.querySelectorAll(`:scope > .base:not(.leaving)`)].map(e=>{let t=e.getBoundingClientRect(),n=document.createElement(`i`);return n.dataset.mark=e.dataset.mark??`idle`,n.style.cssText=`left:${(t.left-i.left)*a}px;top:${(t.top-i.top)*a}px;width:${t.width*a}px;height:${t.height*a}px`,n})),s())};return addEventListener(`scroll`,()=>o||=requestAnimationFrame(s),{passive:!0}),addEventListener(`resize`,c),n.addEventListener(`click`,t=>{let n=e.getBoundingClientRect(),i=(t.clientY-r.getBoundingClientRect().top)/a;scrollTo({top:n.top+scrollY+i-innerHeight/2,behavior:matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})}),c}function ui({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 di(e,t){if(t||!e.length)return[];let n=document.createElement(`style`);return n.textContent=e.map((e,t)=>`@keyframes pk${t}{${ui(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 fi=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),pi=function(e,t){return new URL(e,t).href},mi={},hi=function(e){return e.pathname.endsWith(`.css`)},gi=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},S=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=pi(t,n);let r=s(t),i=hi(r);return gi(mi,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`:fi,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 C(e,t,n,r,i=!1){Object.assign(e.dataset,t),[e.hidden,e.textContent]=[i,n],r&&e.setAttribute(`aria-label`,r)}var _i=(e,t)=>t.role===`subagent`&&t.ended&&t.key?C(e,{close:`dismiss`,key:t.key,name:t.name,role:t.role},ft(),vt({name:t.name})):C(e,{close:`unit`,key:t.key??``,name:t.name,role:t.role},y(),it({name:t.name}),!(t.control&&t.key)||t.role===`subagent`),vi=(e,t)=>C(e,{key:t?.key??``,name:t?.name??``,role:`tower`},Un(),void 0,!t?.control),yi=(e,t)=>C(e,{ws:t.id,name:t.label},y(),Ue({name:t.label})),bi=(e,t)=>C(e,{ws:t.id,name:t.label},fr(),hr({name:t.label})),xi=(e,t,n)=>C(e,{ws:t.id,name:n.label,tab:n.id},y(),Ye({name:n.label})),w=(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(ze(),`later`,!1),o(t,`sheet-yes`,!0)]:[o(Be(),`later`,!1)]),r.append(i,a),r.addEventListener(`close`,()=>(r.remove(),n(!1))),document.body.append(r),r.showModal()}),Si=e=>e.bases.flatMap(e=>[...e.tower?[e.tower]:[],...e.tabs.flatMap(e=>e.units),...e.outside]).flatMap(e=>e.subs).filter(e=>e.ended).map(e=>e.key);function Ci(e,t){let n=Si(t).length;e.hidden=!n,n&&(e.textContent=ht({count:n}))}function wi(e,t,n){let r=n.stashed??[],i=JSON.stringify(r);e.hidden=!r.length;let a=t.closest(`[popover]`);!r.length&&a?.matches(`:popover-open`)&&a.hidePopover(),r.length&&(e.textContent=xr({count:r.length})),t.dataset.key!==i&&(t.dataset.key=i,t.replaceChildren(...r.map(e=>{let t=document.createElement(`li`),n=document.createElement(`span`),r=document.createElement(`button`);return n.textContent=e.name===e.label?e.label:`${e.name} (${e.label})`,[r.type,r.className]=[`button`,`pair-btn`],C(r,{close:`pop`,name:e.name},Ln(),Bn({name:e.name})),t.append(n,r),t})))}var Ti=e=>S(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:t})=>t(`dismiss`,e)).then(e=>e.ok||(w(e.body.reason??b({status:e.status})),!1),()=>(w(v()),!1));function Ei(e,{route:t,net:n,go:r}){let i=t();if(i.view===`map`)return;if(e.close===`base`||e.close===`stash`)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 Di(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`||r.close===`dismiss-all`)return void Ti(r.close===`dismiss`?{key:r.key}:{all:!0});if(r.close===`pop`)return void(n.toggleAttribute(`disabled`,!0),S(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:e})=>e(`close/pop`,{name:r.name})).then(e=>e.ok||w(e.body.reason??b({status:e.status})),()=>w(v())).finally(()=>n.toggleAttribute(`disabled`,!1)));w((r.close===`stash`?vr:r.close===`base`?Ke:r.close===`tab`?Qe:r.role===`tower`?tt:st)({name:r.name??``}),r.close===`stash`?fr():y()).then(t=>{t&&(n.toggleAttribute(`disabled`,!0),S(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===`base`?`all`:r.close}`,r.close===`unit`?{key:r.key}:{workspace:r.ws,...r.tab&&{tab:r.tab}})).then(t=>t.ok?Ei(r,e):w(t.body.reason??b({status:t.status})),()=>w(v())).finally(()=>n.toggleAttribute(`disabled`,!1)))})}})}var Oi=e=>{try{return decodeURIComponent(e)}catch{return e}},T=e=>/^\.+$/.test(e)?e.replaceAll(`.`,`%2E`):encodeURIComponent(e);function E(e){let[t,n]=e.split(`#`)[0].split(`?`),[r,i,a,o]=t.replace(/^\/+|\/+$/g,``).split(`/`).map(Oi);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 D=e=>e.view===`map`?``:e.view===`workspace`?`w/${T(e.ws)}`:`w/${T(e.ws)}/s/${T(e.key)}${e.at?`?at=${encodeURIComponent(e.at)}`:``}`,ki=e=>e.view===`session`?{view:`workspace`,ws:e.ws}:{view:`map`},O=e=>e.view===`session`?e.key:e.view===`workspace`?`w:${e.ws}`:null,Ai=e=>Math.max(0,e?.depth||0);function ji(e,t=new URL(document.baseURI).pathname){let n=()=>E(location.pathname.slice(t.length)+location.search),r={route:n,href:e=>D(e)||`./`,go(n){let r=t+D(n);location.pathname+location.search!==r&&history.pushState({depth:Ai(history.state)+1},``,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(),t.hasAttribute(`data-back`)&&Ai(history.state)>0?history.back():r.go(E(t.getAttribute(`data-route`))))}),r}var Mi={main:`main`,member:`member`,subagent:`subagent`,outpost:`outpost`,outside:`outside`,tower:`tower`},Ni={commanding:tn,working:cn,waiting:sn,idle:an,done:nn,error:rn,unknown:on},Pi={main:Qn,member:$n,subagent:rr,tower:ir,outpost:er,outside:tr,session:nr},Fi={thinking:Sn,"watching a monitor":xn,idle:an,"waiting on a question":sn,finished:nn},Ii={claude:`Claude`,codex:`Codex`},Li=e=>Object.hasOwn(Pi,e)?Pi[e]():e,Ri=e=>e===`waiting`||e===`error`,k=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)},A=(e,t)=>{let n=document.getElementById(e);if(!(n instanceof t))throw Error(`#${e} is missing from the page`);return n},j=(e,t,n)=>{let r=e.querySelector(t);r.textContent!==n&&(r.textContent=n)},M=(e,t)=>{if(e.dataset.mark===t)return;let n=e.dataset.mark!==void 0;e.dataset.mark=t,n&&oi(e,`flash`)},zi=e=>(t=>(e.slice(8,t)===`stale`?hn:fn)({what:e.slice(t+1)}))(e.indexOf(`:`,8)),N=(e,t)=>e?e.startsWith(`tool:`)?Vr({tool:e.slice(5)}):e.startsWith(`monitor:`)?zi(e):Object.hasOwn(Fi,e)?Fi[e]():e:Ni[t](),Bi=(e,t,n,r,i=N(n,r))=>{j(e,t,i),e.querySelector(t).toggleAttribute(`data-monitoring`,i===N(n,r)&&n===`watching a monitor`)},P=(e,t)=>{e.toggleAttribute(`hidden`,!t),t&&(e.setAttribute(`href`,D(t)||`./`),e.setAttribute(`data-route`,D(t)))},F=(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`},Vi=`<div class="plate"><i class="ring"></i><svg><use href="#i-main"/></svg><b class="badge"></b></div>`;function Hi(e,t,n,r){M(e,n);let i=e.querySelector(`use`),a=`#i-${Mi[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 I(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 Ui=(e,t=Math.max(0,Date.now()-e)/1e3)=>t<60?Ce({n:String(Math.floor(t))}):t<3600?be({n:String(Math.floor(t/60))}):t<86400?_e({n:String(Math.floor(t/3600))}):me({n:String(Math.floor(t/86400))}),Wi=(e,t)=>(t===void 0?delete e.dataset.since:e.dataset.since=String(t),e.textContent=t===void 0?``:Ui(t));function Gi(e,t=[]){let n=e.querySelector(`:scope > .ticks`),r=t.map(e=>`${e.at}${e.mark}`).join();n.dataset.sig!==r&&(n.dataset.sig=r,e.classList.toggle(`ticked`,t.length>0),n.replaceChildren(...t.map((e,n)=>{let r=document.createElement(`i`);return r.dataset.mark=e.mark,r.style.setProperty(`--o`,((n+1)/t.length).toFixed(2)),r})))}var L=()=>k(`<div class="unit"><div class="card"><a class="hit"></a>${Vi}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><em class="agent"></em><span class="note"></span><span class="age"></span></span><span class="todo" hidden><b></b><span></span></span></div><button type="button" class="quit-btn" data-close="unit" hidden></button><span class="ticks" aria-hidden="true"></span></div><div class="subs"></div></div>`);function R(e,t){let n=e.closest(`.base`)?.dataset.key,r=e.querySelector(`.hit`);P(r,t.key&&n?{view:`session`,ws:n,key:t.key}:void 0),r.setAttribute(`aria-label`,`${t.name}: ${N(t.note,t.mark)}`),r.toggleAttribute(`data-alert`,Ri(t.mark)),M(e,t.mark),Hi(e.querySelector(`.plate`),t.role,t.mark,t.docs),j(e,`.name`,t.name),j(e,`.role`,Li(t.role)),j(e,`.agent`,t.agent?Ii[t.agent]:``),Bi(e,`.note`,t.note,t.mark),Wi(e.querySelector(`:scope > .card .age`),t.since);let i=e.querySelector(`:scope > .card .todo`);i.hidden=!t.todo,t.todo&&(j(i,`b`,`${t.todo.done<t.todo.total?`◐`:`✓`} ${t.todo.done}/${t.todo.total}`),j(i,`span`,t.todo.now??``)),Gi(e.querySelector(`:scope > .card`),t.ticks),_i(e.querySelector(`:scope > .card > .quit-btn`),t),I(e.querySelector(`.subs`),t.subs??[],L,R)}function Ki(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`?Mn():Nn())&&(e.textContent=r===`main`?Mn():Nn())}var qi=()=>k(`<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>${bt()}</span><h2><a class="enter-base"></a></h2><p><span class="tstate"></span><span class="age"></span></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="subs tower-subs"></div><div class="spawn-btns"><button type="button" class="pair-btn"></button><button type="button" class="pair-btn" data-close="stash"></button></div><div class="tabs"></div><div class="outposts" data-label="${Pn()}"></div></section>`);function Ji(e,t){M(e,t.mark),e.classList.toggle(`head`,t.head);let n=e.querySelector(`.tower`);n.classList.toggle(`ghost`,!t.tower),M(n,t.tower?.mark??`unknown`),j(e,`h2 a`,t.label),P(e.querySelector(`h2 a`),{view:`workspace`,ws:t.id}),j(e,`.title .tstate`,t.tower?ut({state:Ni[t.tower.mark]()}):bn()),Wi(e.querySelector(`.title .age`),t.tower?.since),Ki(e.querySelector(`.spawn-btns button`),t),yi(e.querySelector(`header > .quit-btn`),t),bi(e.querySelector(`.spawn-btns [data-close=stash]`),t),vi(e.querySelector(`.tower-quit`),t.tower),I(e.querySelector(`.tower-subs`),t.tower?.subs??[],L,R),I(e.querySelector(`.tabs`),t.tabs,()=>k(`<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)=>{j(e,`h3 span`,Ar({label:n.label})),xi(e.querySelector(`.quit-btn`),t,n),Ki(e.querySelector(`.tab-add`),t,n.id),I(e.querySelector(`.units`),n.units,L,R)}),I(e.querySelector(`.outposts`),t.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?vn():void 0,since:e.since,ticks:e.ticks})),L,R)}function Yi(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(...di(l,r))),n.querySelectorAll(`.packet`).forEach((e,t)=>e.toggleAttribute(`data-live`,[`working`,`commanding`].includes(a.dataset.mark??``)||[`working`,`commanding`].includes(c[t].dataset.mark??``)))}var Xi=2,Zi=20;function Qi(){let[e,t,n,r]=[A(`map`,HTMLElement),A(`bases`,HTMLElement),A(`links`,SVGSVGElement),A(`packets`,HTMLElement)],i=matchMedia(`(prefers-reduced-motion: reduce)`).matches,a=new Set,o=li(e,t),s=()=>(o(),!e.hidden&&Yi(e,n,r,i)),c=0,l=()=>c||=requestAnimationFrame(()=>(c=0,s())),u=new ResizeObserver(e=>(e.forEach(({target:e,borderBoxSize:t})=>e.style.gridRowEnd=`span ${Math.ceil((t[0].blockSize+Zi)/Xi)}`),l()));return setInterval(()=>document.querySelectorAll(`.age[data-since]`).forEach(e=>Wi(e,Number(e.dataset.since))),15e3),addEventListener(`resize`,l),new ResizeObserver(([e])=>document.documentElement.style.setProperty(`--hud`,`${Math.ceil(e.borderBoxSize[0].blockSize)}px`)).observe(document.querySelector(`.hud`)),ii(),{layout:s,stats(e){let t=e.bases.flatMap(e=>[...e.tower?.subs??[],...e.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]))]),n=e=>String(t.filter(t=>!e||t.mark===e).length);A(`s-commanding`,HTMLElement).parentElement.toggleAttribute(`data-on`,t.some(e=>e.mark===`commanding`));for(let[t,r]of[[`s-bases`,String(e.bases.length)],[`s-agents`,n()],[`s-working`,n(`working`)],[`s-commanding`,n(`commanding`)],[`s-waiting`,n(`waiting`)]])A(t,HTMLElement).textContent=r},show(e){I(t,e.bases,qi,Ji);for(let e of t.children)a.has(e)||(a.add(e),u.observe(e));for(let e of a)e.isConnected||(a.delete(e),u.unobserve(e));requestAnimationFrame(s)},pause(e){document.documentElement.classList.toggle(`paused`,e)}}}var $i=new URL(`done-jqKY4qf5.mp3`,import.meta.url).href,ea=new URL(`error-DdTLgPEw.mp3`,import.meta.url).href,ta={waiting:new URL(`waiting-DOg8-8gu.mp3`,import.meta.url).href,error:ea,done:$i},na=e=>e.mark===`waiting`||e.pending?`waiting`:e.mark===`error`?`error`:e.mark===`done`?`done`:void 0,ra=(e,t)=>{try{return localStorage.getItem(e)??t}catch{return t}},ia=(e,t)=>{try{localStorage.setItem(e,t)}catch{}};function aa(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=ra(`sb.remind`,`1`)===`1`,u=ra(`sb.sound`,`0`)===`1`,d=Math.min(100,Math.max(0,Number(ra(`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`?Xn():e===`denied`?Jn():qn():Yn():Zn(),r.dataset.state=u?`on`:`off`,r.setAttribute(`aria-label`,u?cr():sr()),a.checked=u,o.value=s.value=String(d),p&&(p.gain.value=(d/100)**2)};n.textContent=Kn(),r.textContent=or(),r.title=lr(),t(`sound-on-label`).textContent=or(),t(`sound-vol-label`).textContent=dr(),t(`sound-try`).textContent=ur(),n.onclick=async()=>{l&&c&&Notification.permission==="default"?await Notification.requestPermission().catch(()=>{}):ia(`sb.remind`,(l=!l)?`1`:`0`),h()},i.addEventListener(`toggle`,e=>e.newState===`open`&&F(i,r)),a.onchange=()=>{ia(`sb.sound`,(u=a.checked)?`1`:`0`),h(),u&&g(`done`)},o.oninput=()=>(ia(`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(ta[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}]:[])(na(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:jn,error:On,done:Tn}[r]({note:t.note??``}).trim(),tag:t.key,icon:document.querySelector(`link[rel="icon"]`)?.href,silent:r!==`waiting`});n.onclick=()=>(window.focus(),n.close(),e(t))}}}}var oa=45e3,sa=1e3,ca=3e4,la=(e,t)=>Math.min(ca,sa*2**(e-1))*(.8+.4*t);function ua(e){try{return JSON.parse(e)}catch{return}}function da(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(),oa),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,la(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=ua(r);i&&e.onNet(i),o({problem:i?void 0:Vn()}),l()}),n.listen(`ping`,()=>t===n&&l()),n.listen(`problem`,e=>{t===n&&(o({problem:ua(e)??Hn()}),l())}),r=e.setTimeout(()=>u(),oa)};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()}}}var fa={commanding:At,working:en,waiting:Zt,idle:zt,done:Nt,error:It,unknown:Jt},pa=e=>(e.kind===`joined`?Ht:e.kind===`left`?Gt:fa[e.mark])({name:e.name}),ma=18e5,ha={waiting:0,error:0,working:1,commanding:1},ga=e=>new Date(e).toLocaleTimeString([],{hour12:!1});function _a(e){let[t,n,r,i,a]=[`.tl-lanes`,`.tl-axis`,`.tl-at`,`.tl-last`,`.tl-span`].map(t=>e.querySelector(t)),o=[],s=``;matchMedia(`(max-width: 640px)`).matches&&(e.open=!1);let c=()=>{let e=Date.now()-ma,s=o.filter(t=>t.at>=e),c=s.at(-1);t.replaceChildren(...s.map(t=>{let n=document.createElement(`a`),r=(t.at-e)/ma*100;return n.className=`tl-mark ${t.kind}${r>70?` end`:``}`,n.dataset.mark=t.kind===`left`?`unknown`:t.mark,n.style.cssText=`left:${r.toFixed(2)}%;top:${(ha[t.mark]??2)*14+4}px`,n.setAttribute(`aria-label`,`${ga(t.at)} ${pa(t)}`),P(n,t.key&&t.kind!==`left`?{view:`session`,ws:t.ws,key:t.key}:{view:`workspace`,ws:t.ws}),n})),n.replaceChildren(...[0,10,20].map(t=>Object.assign(document.createElement(`span`),{textContent:ga(e+t*6e4).slice(0,5)})),Object.assign(document.createElement(`span`),{textContent:Pr()})),r.textContent=c?ga(c.at):``,i.textContent=c?pa(c):Nr(),a.textContent=Lr({count:String(s.length)})};return setInterval(c,3e4),c(),{net(e){let t=e.events??[],n=t.map(e=>`${e.at}${e.kind}${e.key??e.name}${e.mark}`).join();n!==s&&(s=n,o=t,c())}}}Kr();var z=Qi(),va=_a(document.getElementById(`timeline`)),B=e=>document.getElementById(e),ya=e=>e?new Date(e).toLocaleTimeString([],{hour12:!1}):gn(),ba,V,H,xa={state:`connecting`,attempt:0},U={view:`map`},Sa=!1,Ca,wa=``,W,Ta,G=e=>W?e(W):void Ta?.then(e);function Ea(){Ta??=S(async()=>{let{mountFocus:e}=await import(`./views-jpxln_Is.js`);return{mountFocus:e}},[],import.meta.url).then(({mountFocus:e})=>(W=e({data:Ha,restart:()=>Z.restart(),openTile:Oa,embedTerminal:(e,t,n)=>new Promise(r=>q(i=>r(i.terminal.embed(e,t,n)))),online:()=>xa.state===`live`}),W.show(U,U),V&&W.net(V),W))}var K,Da,q=e=>{if(K)return e(K);Da??=S(async()=>{let{mountPanels:e}=await import(`./layer-8HcnRZuP.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(Y?Y.data(e).latest():Va(e,`?limit=12`))).items,post:e=>Y&&((t,n)=>Y.data(e).post(t,n)),stream:()=>wa,showTerminal:(e,t)=>(K?.stack.close(),W?.terminal(t),X.go({view:`session`,ws:e,key:t}))})),Da.then(e)},Oa=(e,t)=>q(n=>n.tiles.open(e,t)),J=document.querySelector(`link[rel="icon"]`),ka=J&&decodeURIComponent(J.href.slice(J.href.indexOf(`,`)+1)),Aa=0;function ja(e){let t=e.bases.flatMap(e=>[...e.tower?[e.tower,...e.tower.subs]:[],...[...e.tabs.flatMap(e=>e.units),...e.outside].flatMap(e=>[e,...e.subs])]).filter(e=>e.mark===`waiting`||e.pending).length;if(!J||!ka||t===Aa)return;Aa=t;let n=`<circle cx='23' cy='9' r='9' fill='#e0af68' stroke='#1a1b26' 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='#16161e'>${t>9?`9+`:t}</text>`;J.href=`data:image/svg+xml,${encodeURIComponent(t?ka.replace(`</svg>`,`${n}</svg>`):ka)}`}var Ma;function Na(e){V=H=e,ja(e);let t=Jr(e,Date.now());if(Ma&&Wa.signal(Yr(Ma,t)),Ma=t,document.hidden)return;z.stats(e),Ci(B(`dismiss-all`),e),wi(B(`stashed`),B(`stashed-list`),e),Q?.net(e);let n=Yr(Ca,t);(n.length||K)&&q(e=>e.alerts(n,t)),Ca=t,va.net(e),G(t=>t.net(e)),U.view===`map`&&(z.show(e),ba=e,H=void 0)}function Pa(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,Q?.route(e),e.view!==`map`&&Ea(),B(`map`).hidden=e.view!==`map`,B(`legend`).hidden=e.view===`session`,B(`stage`).dataset.view=e.view,G(r=>r.show(e,t,n)),e.view===`map`&&V&&V!==ba&&(Na(V),requestAnimationFrame(z.layout)),Sa&&O(e)!==O(t)&&Z.restart()}function Fa(e){xa=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:St,live:Ct,reconnecting:Tt,offline:wt}[e.state](),W&&V&&W.net(V),K?.stack.redraw();let n=B(`banner`);n.hidden=!t&&!e.problem;let r=e.state===`offline`?Ae({tries:e.attempt-1}):e.state===`reconnecting`?e.attempt?Le({attempt:e.attempt}):Pe():Ne({problem:e.problem??``}),i=document.createElement(`b`);i.textContent=ya(e.lastContact),n.replaceChildren(`${r} ${De()} `,i,Ee())}function Ia(e,t){try{let n=JSON.parse(t);G(t=>e===`history`?t.history(n):t.cards(n))}catch{}}var La=document.querySelector(`meta[name="sb-build"]`)?.content,Ra=e=>!!(La&&La!==JSON.parse(e).build);function za(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 Ba=e=>fetch(`api/${e}`,{cache:`no-store`}).then(e=>e.ok?e.json():Promise.reject(Error(String(e.status)))),Va=(e,t=``)=>Ba(`history/${encodeURIComponent(e)}${t}`),Y=void 0,Ha=e=>({older:t=>Va(e,`?before=${encodeURIComponent(t)}`),latest:()=>Va(e),entry:t=>Ba(`entry/${encodeURIComponent(e)}/${encodeURIComponent(t)}`).catch(()=>void 0),pic:(t,n)=>`api/image/${encodeURIComponent(e)}/${encodeURIComponent(t)}/${n}`}),Ua=()=>{let e=za(O(U));return e.listen(`history`,e=>Ia(`history`,e)),e.listen(`cards`,e=>Ia(`cards`,e)),e.listen(`hello`,e=>Ra(e)?location.reload():(wa=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&&E(t.getAttribute(`data-route`)??``);if(!n||n.view!==`session`||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let r=Ca?.get(n.key);r&&(e.preventDefault(),q(e=>e.stack.show(r)))},!0);var X=ji(e=>Pa(e)),Wa=aa(e=>X.go({view:`session`,ws:e.ws,key:qr(e)})),Z=da({open:Ua,now:Date.now,setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),random:Math.random,hidden:()=>document.hidden,onNet:Na,onStatus:Fa}),Ga=()=>Z.resume();document.addEventListener(`visibilitychange`,()=>{if(z.pause(document.hidden),document.hidden)return Z.hide();H&&Na(H),G(e=>e.wake()),Ga()}),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`&&X.go(ki(U)))}),ti(e=>K?.hotkey(e)??!1),B(`pair`).hidden=location.hostname!==`127.0.0.1`,B(`pair`).addEventListener(`click`,()=>void S(async()=>{let{pairTile:e}=await import(`./pair-C6UGzV_a.js`);return{pairTile:e}},[],import.meta.url).then(({pairTile:e})=>Oa(e(),!0)));var Q,$=matchMedia(`(pointer: coarse), (max-width: 640px)`),Ka=()=>void S(async()=>{let{mountDrawer:e}=await import(`./drawer-DLzgD0cJ.js`);return{mountDrawer:e}},[],import.meta.url).then(({mountDrawer:e})=>(Q??=e(),V&&Q.net(V),Q.route(U)));$.matches?Ka():$.addEventListener(`change`,()=>$.matches&&!Q&&Ka(),{once:!0}),Di({route:()=>U,net:()=>V,go:e=>X.go(e)}),B(`stashed-pop`).addEventListener(`toggle`,e=>e.newState===`open`&&F(B(`stashed-pop`),B(`stashed`))),B(`prefs-pop`).addEventListener(`toggle`,e=>e.newState===`open`&&F(B(`prefs-pop`),B(`prefs`))),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`button[data-open]`);t&&S(async()=>{let{openingOf:e,spawnTile:t}=await import(`./spawn-4LBbzdOw.js`);return{openingOf:e,spawnTile:t}},[],import.meta.url).then(({openingOf:e,spawnTile:n})=>{let r=e(t,V?.bases??[]);r&&Oa(n(r,(e,t,n)=>(K?.tiles.close(n),X.go({view:`session`,ws:e,key:t}))),!0)})});for(let e of[`focus`,`pageshow`,`online`])window.addEventListener(e,()=>!document.hidden&&Ga());Fa(xa),Pa(X.route()),Z.start(),Sa=!0;export{Pn as A,ze as B,$r as C,Er as D,Ar as E,gn as F,s as H,bt as I,yt as L,v as M,yn as N,Tr as O,vn as P,ut as R,oi as S,qr as T,Te as V,Ri as _,P as a,si as b,N as c,k as d,M as f,j as g,I as h,Vi as i,bn as j,b as k,Hi as l,Bi as m,Mi as n,Ki as o,Li as p,Ni as r,A as s,Ii as t,F as u,Ti as v,x as w,ai as x,S as y,Be as z};
|
|
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=>`${e?.n}d`,pe=e=>`${e?.n} 天`,me=((e,t={})=>(t.locale??s())===`zh-TW`?pe(e):fe(e)),he=e=>`${e?.n}h`,ge=e=>`${e?.n} 小時`,_e=((e,t={})=>(t.locale??s())===`zh-TW`?ge(e):he(e)),ve=e=>`${e?.n}m`,ye=e=>`${e?.n} 分`,be=((e,t={})=>(t.locale??s())===`zh-TW`?ye(e):ve(e)),xe=e=>`${e?.n}s`,Se=e=>`${e?.n} 秒`,Ce=((e,t={})=>(t.locale??s())===`zh-TW`?Se(e):xe(e)),we=((e={},t={})=>(t.locale??s())===`zh-TW`?`警示`:`Alerts`),Te=((e={},t={})=>(t.locale??s())===`zh-TW`?`所有基地`:`all bases`),Ee=((e={},t={})=>(t.locale??s())===`zh-TW`?``:`.`),De=((e={},t={})=>(t.locale??s())===`zh-TW`?`最後更新:`:`Last update`),Oe=e=>`Disconnected. Gave up after ${e?.tries} tries; it reconnects when you return to this tab.`,ke=e=>`連線中斷。重試 ${e?.tries} 次後放棄;回到此分頁時會重新連線。`,Ae=((e,t={})=>(t.locale??s())===`zh-TW`?ke(e):Oe(e)),je=e=>`The server is up but cannot read the net: ${e?.problem}`,Me=e=>`伺服器正常,但讀不到網:${e?.problem}`,Ne=((e,t={})=>(t.locale??s())===`zh-TW`?Me(e):je(e)),Pe=((e={},t={})=>(t.locale??s())===`zh-TW`?`與稻草網的連線中斷,正在重新連線…畫面顯示的是最後已知狀態。`:`Disconnected from the straw net. Reconnecting… The view shows the last known state.`),Fe=e=>`Disconnected from the straw net. Reconnecting (try ${e?.attempt})… The view shows the last known state.`,Ie=e=>`與稻草網的連線中斷,正在重新連線(第 ${e?.attempt} 次)…畫面顯示的是最後已知狀態。`,Le=((e,t={})=>(t.locale??s())===`zh-TW`?Ie(e):Fe(e)),Re=((e={},t={})=>(t.locale??s())===`zh-TW`?`Straw Net:所有基地`:`Straw Net: all bases`),ze=((e={},t={})=>(t.locale??s())===`zh-TW`?`取消`:`Cancel`),Be=((e={},t={})=>(t.locale??s())===`zh-TW`?`關閉`:`Close`),Ve=e=>`Quit base ${e?.name}`,He=e=>`關掉基地 ${e?.name}`,Ue=((e,t={})=>(t.locale??s())===`zh-TW`?He(e):Ve(e)),We=e=>`Quit base ${e?.name}? Every agent in it and its tower quit. Nothing quits while anything running would be lost.`,Ge=e=>`要關掉基地 ${e?.name} 嗎?裡面所有 agent 和塔台都會退出。有會遺失的東西時什麼都不關。`,Ke=((e,t={})=>(t.locale??s())===`zh-TW`?Ge(e):We(e)),qe=e=>`Quit squad ${e?.name}`,Je=e=>`關掉小隊 ${e?.name}`,Ye=((e,t={})=>(t.locale??s())===`zh-TW`?Je(e):qe(e)),Xe=e=>`Quit squad ${e?.name}? Every agent in it quits.`,Ze=e=>`要關掉小隊 ${e?.name} 嗎?裡面所有 agent 都會退出。`,Qe=((e,t={})=>(t.locale??s())===`zh-TW`?Ze(e):Xe(e)),$e=e=>`Quit the tower ${e?.name}? The base's mains become members again.`,et=e=>`要關掉塔台 ${e?.name} 嗎?這個基地的主智慧體都會降格成成員。`,tt=((e,t={})=>(t.locale??s())===`zh-TW`?et(e):$e(e)),nt=e=>`Quit ${e?.name}`,rt=e=>`關掉 ${e?.name}`,it=((e,t={})=>(t.locale??s())===`zh-TW`?rt(e):nt(e)),at=e=>`Quit ${e?.name}? It quits pi and its pane closes.`,ot=e=>`要關掉 ${e?.name} 嗎?它會退出 pi,窗格也會關掉。`,st=((e,t={})=>(t.locale??s())===`zh-TW`?ot(e):at(e)),ct=e=>`control tower · ${e?.state}`,lt=e=>`塔台 · ${e?.state}`,ut=((e,t={})=>(t.locale??s())===`zh-TW`?lt(e):ct(e)),dt=((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.`),ft=((e={},t={})=>(t.locale??s())===`zh-TW`?`移除`:`Dismiss`),pt=e=>`Dismiss finished (${e?.count})`,mt=e=>`移除已完成(${e?.count})`,ht=((e,t={})=>(t.locale??s())===`zh-TW`?mt(e):pt(e)),gt=e=>`Dismiss ${e?.name}`,_t=e=>`從畫面移除 ${e?.name}`,vt=((e,t={})=>(t.locale??s())===`zh-TW`?_t(e):gt(e)),yt=((e={},t={})=>(t.locale??s())===`zh-TW`?`文件`:`Documents`),bt=((e={},t={})=>(t.locale??s())===`zh-TW`?`總塔台`:`head tower`),xt=((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`),wt=((e={},t={})=>(t.locale??s())===`zh-TW`?`離線`:`offline`),Tt=((e={},t={})=>(t.locale??s())===`zh-TW`?`重新連線中`:`reconnecting`),Et=((e={},t={})=>(t.locale??s())===`zh-TW`?`正體中文`:`English`),Dt=((e={},t={})=>(t.locale??s())===`zh-TW`?`位置`:`Location`),Ot=e=>`${e?.name} is commanding`,kt=e=>`${e?.name} 指揮中`,At=((e,t={})=>(t.locale??s())===`zh-TW`?kt(e):Ot(e)),jt=e=>`${e?.name} finished`,Mt=e=>`${e?.name} 已完成`,Nt=((e,t={})=>(t.locale??s())===`zh-TW`?Mt(e):jt(e)),Pt=e=>`${e?.name} hit an error`,Ft=e=>`${e?.name} 發生錯誤`,It=((e,t={})=>(t.locale??s())===`zh-TW`?Ft(e):Pt(e)),Lt=e=>`${e?.name} went idle`,Rt=e=>`${e?.name} 轉為閒置`,zt=((e,t={})=>(t.locale??s())===`zh-TW`?Rt(e):Lt(e)),Bt=e=>`${e?.name} joined`,Vt=e=>`${e?.name} 加入`,Ht=((e,t={})=>(t.locale??s())===`zh-TW`?Vt(e):Bt(e)),Ut=e=>`${e?.name} left`,Wt=e=>`${e?.name} 離開`,Gt=((e,t={})=>(t.locale??s())===`zh-TW`?Wt(e):Ut(e)),Kt=e=>`${e?.name} lost its status`,qt=e=>`${e?.name} 失去狀態`,Jt=((e,t={})=>(t.locale??s())===`zh-TW`?qt(e):Kt(e)),Yt=e=>`${e?.name} is waiting on a question`,Xt=e=>`${e?.name} 正在等待回答`,Zt=((e,t={})=>(t.locale??s())===`zh-TW`?Xt(e):Yt(e)),Qt=e=>`${e?.name} started working`,$t=e=>`${e?.name} 開始工作`,en=((e,t={})=>(t.locale??s())===`zh-TW`?$t(e):Qt(e)),tn=((e={},t={})=>(t.locale??s())===`zh-TW`?`指揮中`:`commanding`),nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`已完成`:`finished`),rn=((e={},t={})=>(t.locale??s())===`zh-TW`?`錯誤`:`error`),an=((e={},t={})=>(t.locale??s())===`zh-TW`?`閒置`:`idle`),on=((e={},t={})=>(t.locale??s())===`zh-TW`?`無狀態`:`no status`),sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待回答`:`waiting on a question`),cn=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`working`),ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`地圖總覽`:`Overview of the map`),un=e=>`Monitor failed: ${e?.what}`,dn=e=>`Monitor 出錯:${e?.what}`,fn=((e,t={})=>(t.locale??s())===`zh-TW`?dn(e):un(e)),pn=e=>`Monitor went quiet and stopped: ${e?.what}`,mn=e=>`Monitor 太久沒輸出,已停止:${e?.what}`,hn=((e,t={})=>(t.locale??s())===`zh-TW`?mn(e):pn(e)),gn=((e={},t={})=>(t.locale??s())===`zh-TW`?`從未`:`never`),_n=((e={},t={})=>(t.locale??s())===`zh-TW`?`+新基地`:`+ New base`),vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`沒有執行中的智慧體`:`no agent running`),yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`無警示`:`no alerts`),v=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器沒有回應。`:`The server did not answer.`),bn=((e={},t={})=>(t.locale??s())===`zh-TW`?`尚無塔台`:`no tower yet`),xn=((e={},t={})=>(t.locale??s())===`zh-TW`?`監看中`:`Watching a monitor`),Sn=((e={},t={})=>(t.locale??s())===`zh-TW`?`思考中`:`thinking`),Cn=e=>`Finished ${e?.note}`,wn=e=>`完成了 ${e?.note}`,Tn=((e,t={})=>(t.locale??s())===`zh-TW`?wn(e):Cn(e)),En=e=>`Failed ${e?.note}`,Dn=e=>`出錯了 ${e?.note}`,On=((e,t={})=>(t.locale??s())===`zh-TW`?Dn(e):En(e)),kn=e=>`Waiting on you ${e?.note}`,An=e=>`等你回答 ${e?.note}`,jn=((e,t={})=>(t.locale??s())===`zh-TW`?An(e):kn(e)),Mn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+主智慧體`:`+ Main`),Nn=((e={},t={})=>(t.locale??s())===`zh-TW`?`+成員`:`+ Member`),Pn=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`Outposts`),Fn=((e={},t={})=>(t.locale??s())===`zh-TW`?`手機`:`Phone`),In=((e={},t={})=>(t.locale??s())===`zh-TW`?`透過 Tailscale 配對手機`:`Pair a phone over Tailscale`),Ln=((e={},t={})=>(t.locale??s())===`zh-TW`?`接回`:`Pop`),Rn=e=>`Pop ${e?.name}`,zn=e=>`接回 ${e?.name}`,Bn=((e,t={})=>(t.locale??s())===`zh-TW`?zn(e):Rn(e)),Vn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器送來的快照,頁面無法讀取`:`the server sent a snapshot the page cannot read`),Hn=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器回報了頁面無法讀取的問題`:`the server reported a problem the page cannot read`),y=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉`:`Quit`),Un=((e={},t={})=>(t.locale??s())===`zh-TW`?`關掉塔台`:`Quit tower`),Wn=e=>`Refused (${e?.status}).`,Gn=e=>`已拒絕(${e?.status})。`,b=((e,t={})=>(t.locale??s())===`zh-TW`?Gn(e):Wn(e)),Kn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒`:`Remind`),qn=((e={},t={})=>(t.locale??s())===`zh-TW`?`點一下允許瀏覽器通知`:`Press to allow browser notifications`),Jn=((e={},t={})=>(t.locale??s())===`zh-TW`?`瀏覽器已封鎖通知,要到網站設定裡允許`:`The browser blocks notifications; allow them in the site settings`),Yn=((e={},t={})=>(t.locale??s())===`zh-TW`?`提醒已關`:`Reminders off`),Xn=((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`),Zn=((e={},t={})=>(t.locale??s())===`zh-TW`?`這個瀏覽器不支援通知`:`This browser has no notifications`),Qn=((e={},t={})=>(t.locale??s())===`zh-TW`?`主智慧體`:`main`),$n=((e={},t={})=>(t.locale??s())===`zh-TW`?`成員`:`member`),er=((e={},t={})=>(t.locale??s())===`zh-TW`?`前哨`:`outpost`),tr=((e={},t={})=>(t.locale??s())===`zh-TW`?`未編入`:`unaligned`),nr=((e={},t={})=>(t.locale??s(),`session`)),rr=((e={},t={})=>(t.locale??s())===`zh-TW`?`子智慧體`:`subagent`),ir=((e={},t={})=>(t.locale??s())===`zh-TW`?`塔台`:`tower`),ar=((e={},t={})=>(t.locale??s())===`zh-TW`?`設定`:`Settings`),or=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效`:`Sound`),sr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已關`:`Sounds off`),cr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效已開`:`Sounds on`),lr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音效:開關、音量與試聽`:`Sounds: on or off, volume, and a try`),ur=((e={},t={})=>(t.locale??s())===`zh-TW`?`▶ 試聽`:`▶ Try`),dr=((e={},t={})=>(t.locale??s())===`zh-TW`?`音量`:`Volume`),fr=((e={},t={})=>(t.locale??s())===`zh-TW`?`收起`:`Stash`),pr=e=>`Stash base ${e?.name}`,mr=e=>`收起基地 ${e?.name}`,hr=((e,t={})=>(t.locale??s())===`zh-TW`?mr(e):pr(e)),gr=e=>`Stash base ${e?.name}? Its tower, mains, and members quit and come back with Pop. Nothing is stashed while anything running would be lost.`,_r=e=>`要收起基地 ${e?.name} 嗎?塔台、主智慧體和成員會結束,之後可以用「接回」叫回來。有會遺失的東西時不會收。`,vr=((e,t={})=>(t.locale??s())===`zh-TW`?_r(e):gr(e)),yr=e=>`Stashed (${e?.count})`,br=e=>`已收起(${e?.count})`,xr=((e,t={})=>(t.locale??s())===`zh-TW`?br(e):yr(e)),Sr=((e={},t={})=>(t.locale??s())===`zh-TW`?`智慧體`:`Agents`),Cr=((e={},t={})=>(t.locale??s())===`zh-TW`?`基地`:`Bases`),wr=((e={},t={})=>(t.locale??s())===`zh-TW`?`指揮中`:`Commanding`),Tr=((e={},t={})=>(t.locale??s())===`zh-TW`?`等待中`:`Waiting`),Er=((e={},t={})=>(t.locale??s())===`zh-TW`?`工作中`:`Working`),Dr=((e={},t={})=>(t.locale??s())===`zh-TW`?`狀態`:`States`),Or=e=>`tab ${e?.label}`,kr=e=>`分頁 ${e?.label}`,Ar=((e,t={})=>(t.locale??s())===`zh-TW`?kr(e):Or(e)),jr=((e={},t={})=>(t.locale??s())===`zh-TW`?`即時網況 · 通訊`:`live net · comms`),Mr=((e={},t={})=>(t.locale??s())===`zh-TW`?`網路活動`:`Net activity`),Nr=((e={},t={})=>(t.locale??s())===`zh-TW`?`伺服器啟動後還沒有動靜`:`Nothing has happened since the server started`),Pr=((e={},t={})=>(t.locale??s())===`zh-TW`?`現在`:`now`),Fr=e=>`${e?.count} events in 30 min`,Ir=e=>`近 30 分鐘 ${e?.count} 筆`,Lr=((e,t={})=>(t.locale??s())===`zh-TW`?Ir(e):Fr(e)),Rr=((e={},t={})=>(t.locale??s())===`zh-TW`?`網的總計`:`Net totals`),zr=e=>`using ${e?.tool}`,Br=e=>`使用 ${e?.tool}`,Vr=((e,t={})=>(t.locale??s())===`zh-TW`?Br(e):zr(e)),Hr=`sb-locale`;function Ur(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 Wr(e,t){return p(e)??t.map(Ur).find(Boolean)??`en`}var Gr={brand_label:Re,tagline:jr,totals_label:Rr,stat_bases:Cr,stat_agents:Sr,stat_working:Er,stat_waiting:Tr,stat_commanding:wr,mark_commanding:tn,alerts:we,no_alerts:yn,pair_button:Fn,pair_title:In,link_connecting:St,location:Dt,all_bases:Te,documents:yt,timeline:Mr,states:Dr,mark_working:cn,mark_waiting:sn,mark_idle:an,mark_done:nn,mark_error:rn,credit:dt,language:xt,settings:ar,new_base:_n};Object.keys(Gr);function Kr(){let e=null;try{e=localStorage.getItem(Hr)}catch{}let n=Wr(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,Gr[e.dataset[t]]?.()??e.dataset[t]);let i=document.getElementById(`lang`);i.replaceChildren(...t.map(e=>new Option(Et({},{locale:e}),e,!1,e===n))),i.onchange=()=>{try{localStorage.setItem(Hr,i.value),location.reload()}catch{i.value=n}}}var qr=e=>e.unit??e.key,x=e=>e.mark===`waiting`||e.pending?0:1;function Jr(e,t){let n=new Map;for(let r of e.bases)for(let e of[...r.tower?[{...r.tower,role:`tower`},...r.tower.subs]:[],...[...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 Yr(e,t){return[...t.values()].filter(t=>{let n=e?.get(t.key);return x(t)===0?!n||x(n)!==0||n.mark!==t.mark:e!==void 0&&n?.mark!==t.mark&&(t.mark===`error`||t.mark===`done`)})}var Xr=`input, textarea, select, [role=textbox], [role=combobox], [role=listbox], .term-scroll`,Zr=`button, a, summary, [role=button], [role=link]`,Qr=`.ask-opt, [role=radio], [role=checkbox]`,$r=`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`;function ei(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?.(Xr))){if(e.key===`f`||e.key===`F`)return`zoom`;if(e.key===` `&&!r?.closest?.(Qr)&&(n||!r?.closest?.(Zr)))return`next`}}function ti(e,t=()=>document.querySelector($r)!==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=ei(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 ni=3e4,ri=[`pointermove`,`pointerdown`,`keydown`,`wheel`,`touchstart`];function ii(e=document.documentElement){if(matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=Date.now(),n,r=()=>{let i=t+ni-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,ni))};for(let e of ri)addEventListener(e,i,{capture:!0,passive:!0});document.addEventListener(`visibilitychange`,()=>document.hidden||i()),i()}var ai=(...e)=>e.filter(e=>e!==!1&&e!=null),oi=(e,t)=>(e.classList.add(t),e.classList.toggle(`flip`));function si(e,t,...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t??{}))r.setAttribute(e,n);return r.append(...ai(...n)),r}var ci=140;function li(e,t){let n=document.createElement(`nav`),r=document.createElement(`div`),i=document.createElement(`i`);[n.className,r.className,i.className,n.hidden]=[`minimap`,`mm-in`,`mm-view`,!0],n.setAttribute(`aria-label`,ln()),n.append(r,i),document.body.append(n);let a=1,o=0,s=()=>{o=0;let t=e.getBoundingClientRect();i.style.transform=`translateY(${Math.round(Math.max(0,-t.top)*a)}px)`,i.style.height=`${Math.round(Math.min(innerHeight-Math.max(0,t.top),t.bottom)*a)}px`,n.classList.toggle(`away`,t.bottom<innerHeight)},c=()=>{let i=e.getBoundingClientRect();n.hidden=e.hidden||i.height<innerHeight*1.05||!matchMedia(`(min-width: 900px) and (hover: hover)`).matches,!n.hidden&&(a=Math.min(ci/i.width,innerHeight*.4/i.height),Object.assign(n.style,{width:`${Math.round(i.width*a)}px`,height:`${Math.round(i.height*a)}px`}),r.replaceChildren(...[...t.querySelectorAll(`:scope > .base:not(.leaving)`)].map(e=>{let t=e.getBoundingClientRect(),n=document.createElement(`i`);return n.dataset.mark=e.dataset.mark??`idle`,n.style.cssText=`left:${(t.left-i.left)*a}px;top:${(t.top-i.top)*a}px;width:${t.width*a}px;height:${t.height*a}px`,n})),s())};return addEventListener(`scroll`,()=>o||=requestAnimationFrame(s),{passive:!0}),addEventListener(`resize`,c),n.addEventListener(`click`,t=>{let n=e.getBoundingClientRect(),i=(t.clientY-r.getBoundingClientRect().top)/a;scrollTo({top:n.top+scrollY+i-innerHeight/2,behavior:matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})}),c}function ui({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 di(e,t){if(t||!e.length)return[];let n=document.createElement(`style`);return n.textContent=e.map((e,t)=>`@keyframes pk${t}{${ui(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 fi=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),pi=function(e,t){return new URL(e,t).href},mi={},hi=function(e){return e.pathname.endsWith(`.css`)},gi=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},S=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=pi(t,n);let r=s(t),i=hi(r);return gi(mi,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`:fi,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 C(e,t,n,r,i=!1){Object.assign(e.dataset,t),[e.hidden,e.textContent]=[i,n],r&&e.setAttribute(`aria-label`,r)}var _i=(e,t)=>t.role===`subagent`&&t.ended&&t.key?C(e,{close:`dismiss`,key:t.key,name:t.name,role:t.role},ft(),vt({name:t.name})):C(e,{close:`unit`,key:t.key??``,name:t.name,role:t.role},y(),it({name:t.name}),!(t.control&&t.key)||t.role===`subagent`),vi=(e,t)=>C(e,{key:t?.key??``,name:t?.name??``,role:`tower`},Un(),void 0,!t?.control),yi=(e,t)=>C(e,{ws:t.id,name:t.label},y(),Ue({name:t.label})),bi=(e,t)=>C(e,{ws:t.id,name:t.label},fr(),hr({name:t.label})),xi=(e,t,n)=>C(e,{ws:t.id,name:n.label,tab:n.id},y(),Ye({name:n.label})),w=(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(ze(),`later`,!1),o(t,`sheet-yes`,!0)]:[o(Be(),`later`,!1)]),r.append(i,a),r.addEventListener(`close`,()=>(r.remove(),n(!1))),document.body.append(r),r.showModal()}),Si=e=>e.bases.flatMap(e=>[...e.tower?[e.tower]:[],...e.tabs.flatMap(e=>e.units),...e.outside]).flatMap(e=>e.subs).filter(e=>e.ended).map(e=>e.key);function Ci(e,t){let n=Si(t).length;e.hidden=!n,n&&(e.textContent=ht({count:n}))}function wi(e,t,n){let r=n.stashed??[],i=JSON.stringify(r);e.hidden=!r.length;let a=t.closest(`[popover]`);!r.length&&a?.matches(`:popover-open`)&&a.hidePopover(),r.length&&(e.textContent=xr({count:r.length})),t.dataset.key!==i&&(t.dataset.key=i,t.replaceChildren(...r.map(e=>{let t=document.createElement(`li`),n=document.createElement(`span`),r=document.createElement(`button`);return n.textContent=e.name===e.label?e.label:`${e.name} (${e.label})`,[r.type,r.className]=[`button`,`pair-btn`],C(r,{close:`pop`,name:e.name},Ln(),Bn({name:e.name})),t.append(n,r),t})))}var Ti=e=>S(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:t})=>t(`dismiss`,e)).then(e=>e.ok||(w(e.body.reason??b({status:e.status})),!1),()=>(w(v()),!1));function Ei(e,{route:t,net:n,go:r}){let i=t();if(i.view===`map`)return;if(e.close===`base`||e.close===`stash`)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 Di(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`||r.close===`dismiss-all`)return void Ti(r.close===`dismiss`?{key:r.key}:{all:!0});if(r.close===`pop`)return void(n.toggleAttribute(`disabled`,!0),S(async()=>{let{post:e}=await import(`./post-UHMNmNgA.js`).then(e=>e.n);return{post:e}},[],import.meta.url).then(({post:e})=>e(`close/pop`,{name:r.name})).then(e=>e.ok||w(e.body.reason??b({status:e.status})),()=>w(v())).finally(()=>n.toggleAttribute(`disabled`,!1)));w((r.close===`stash`?vr:r.close===`base`?Ke:r.close===`tab`?Qe:r.role===`tower`?tt:st)({name:r.name??``}),r.close===`stash`?fr():y()).then(t=>{t&&(n.toggleAttribute(`disabled`,!0),S(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===`base`?`all`:r.close}`,r.close===`unit`?{key:r.key}:{workspace:r.ws,...r.tab&&{tab:r.tab}})).then(t=>t.ok?Ei(r,e):w(t.body.reason??b({status:t.status})),()=>w(v())).finally(()=>n.toggleAttribute(`disabled`,!1)))})}})}var Oi=e=>{try{return decodeURIComponent(e)}catch{return e}},T=e=>/^\.+$/.test(e)?e.replaceAll(`.`,`%2E`):encodeURIComponent(e);function E(e){let[t,n]=e.split(`#`)[0].split(`?`),[r,i,a,o]=t.replace(/^\/+|\/+$/g,``).split(`/`).map(Oi);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 D=e=>e.view===`map`?``:e.view===`workspace`?`w/${T(e.ws)}`:`w/${T(e.ws)}/s/${T(e.key)}${e.at?`?at=${encodeURIComponent(e.at)}`:``}`,ki=e=>e.view===`session`?{view:`workspace`,ws:e.ws}:{view:`map`},Ai=e=>e.view===`session`?e.key:e.view===`workspace`?`w:${e.ws}`:null,ji=e=>Math.max(0,e?.depth||0);function Mi(e,t=new URL(document.baseURI).pathname){let n=()=>E(location.pathname.slice(t.length)+location.search),r={route:n,href:e=>D(e)||`./`,go(n){let r=t+D(n);location.pathname+location.search!==r&&history.pushState({depth:ji(history.state)+1},``,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(),t.hasAttribute(`data-back`)&&ji(history.state)>0?history.back():r.go(E(t.getAttribute(`data-route`))))}),r}var Ni={main:`main`,member:`member`,subagent:`subagent`,outpost:`outpost`,outside:`outside`,tower:`tower`},Pi={commanding:tn,working:cn,waiting:sn,idle:an,done:nn,error:rn,unknown:on},Fi={main:Qn,member:$n,subagent:rr,tower:ir,outpost:er,outside:tr,session:nr},Ii={thinking:Sn,"watching a monitor":xn,idle:an,"waiting on a question":sn,finished:nn},Li={claude:`Claude`,codex:`Codex`},Ri=e=>Object.hasOwn(Fi,e)?Fi[e]():e,zi=e=>e===`waiting`||e===`error`,O=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)},k=(e,t)=>{let n=document.getElementById(e);if(!(n instanceof t))throw Error(`#${e} is missing from the page`);return n},A=(e,t,n)=>{let r=e.querySelector(t);r.textContent!==n&&(r.textContent=n)},j=(e,t)=>{if(e.dataset.mark===t)return;let n=e.dataset.mark!==void 0;e.dataset.mark=t,n&&oi(e,`flash`)},Bi=e=>(t=>(e.slice(8,t)===`stale`?hn:fn)({what:e.slice(t+1)}))(e.indexOf(`:`,8)),M=(e,t)=>e?e.startsWith(`tool:`)?Vr({tool:e.slice(5)}):e.startsWith(`monitor:`)?Bi(e):Object.hasOwn(Ii,e)?Ii[e]():e:Pi[t](),Vi=(e,t,n,r,i=M(n,r))=>{A(e,t,i),e.querySelector(t).toggleAttribute(`data-monitoring`,i===M(n,r)&&n===`watching a monitor`)},N=(e,t)=>{e.toggleAttribute(`hidden`,!t),t&&(e.setAttribute(`href`,D(t)||`./`),e.setAttribute(`data-route`,D(t)))},P=(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`},Hi=`<div class="plate"><i class="ring"></i><svg><use href="#i-main"/></svg><b class="badge"></b></div>`;function Ui(e,t,n,r){j(e,n);let i=e.querySelector(`use`),a=`#i-${Ni[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 F(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 Wi=(e,t=Math.max(0,Date.now()-e)/1e3)=>t<60?Ce({n:String(Math.floor(t))}):t<3600?be({n:String(Math.floor(t/60))}):t<86400?_e({n:String(Math.floor(t/3600))}):me({n:String(Math.floor(t/86400))}),Gi=(e,t)=>(t===void 0?delete e.dataset.since:e.dataset.since=String(t),e.textContent=t===void 0?``:Wi(t));function Ki(e,t=[]){let n=e.querySelector(`:scope > .ticks`),r=t.map(e=>`${e.at}${e.mark}`).join();n.dataset.sig!==r&&(n.dataset.sig=r,e.classList.toggle(`ticked`,t.length>0),n.replaceChildren(...t.map((e,n)=>{let r=document.createElement(`i`);return r.dataset.mark=e.mark,r.style.setProperty(`--o`,((n+1)/t.length).toFixed(2)),r})))}var I=()=>O(`<div class="unit"><div class="card"><a class="hit"></a>${Hi}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><em class="agent"></em><span class="note"></span><span class="age"></span></span><span class="todo" hidden><b></b><span></span></span></div><button type="button" class="quit-btn" data-close="unit" hidden></button><span class="ticks" aria-hidden="true"></span></div><div class="subs"></div></div>`);function L(e,t){let n=e.closest(`.base`)?.dataset.key,r=e.querySelector(`.hit`);N(r,t.key&&n?{view:`session`,ws:n,key:t.key}:void 0),r.setAttribute(`aria-label`,`${t.name}: ${M(t.note,t.mark)}`),r.toggleAttribute(`data-alert`,zi(t.mark)),j(e,t.mark),Ui(e.querySelector(`.plate`),t.role,t.mark,t.docs),A(e,`.name`,t.name),A(e,`.role`,Ri(t.role)),A(e,`.agent`,t.agent?Li[t.agent]:``),Vi(e,`.note`,t.note,t.mark),Gi(e.querySelector(`:scope > .card .age`),t.since);let i=e.querySelector(`:scope > .card .todo`);i.hidden=!t.todo,t.todo&&(A(i,`b`,`${t.todo.done<t.todo.total?`◐`:`✓`} ${t.todo.done}/${t.todo.total}`),A(i,`span`,t.todo.now??``)),Ki(e.querySelector(`:scope > .card`),t.ticks),_i(e.querySelector(`:scope > .card > .quit-btn`),t),F(e.querySelector(`.subs`),t.subs??[],I,L)}function qi(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`?Mn():Nn())&&(e.textContent=r===`main`?Mn():Nn())}var Ji=()=>O(`<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>${bt()}</span><h2><a class="enter-base"></a></h2><p><span class="tstate"></span><span class="age"></span></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="subs tower-subs"></div><div class="spawn-btns"><button type="button" class="pair-btn"></button><button type="button" class="pair-btn" data-close="stash"></button></div><div class="tabs"></div><div class="outposts" data-label="${Pn()}"></div></section>`);function Yi(e,t){j(e,t.mark),e.classList.toggle(`head`,t.head);let n=e.querySelector(`.tower`);n.classList.toggle(`ghost`,!t.tower),j(n,t.tower?.mark??`unknown`),A(e,`h2 a`,t.label),N(e.querySelector(`h2 a`),{view:`workspace`,ws:t.id}),A(e,`.title .tstate`,t.tower?ut({state:Pi[t.tower.mark]()}):bn()),Gi(e.querySelector(`.title .age`),t.tower?.since),qi(e.querySelector(`.spawn-btns button`),t),yi(e.querySelector(`header > .quit-btn`),t),bi(e.querySelector(`.spawn-btns [data-close=stash]`),t),vi(e.querySelector(`.tower-quit`),t.tower),F(e.querySelector(`.tower-subs`),t.tower?.subs??[],I,L),F(e.querySelector(`.tabs`),t.tabs,()=>O(`<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)=>{A(e,`h3 span`,Ar({label:n.label})),xi(e.querySelector(`.quit-btn`),t,n),qi(e.querySelector(`.tab-add`),t,n.id),F(e.querySelector(`.units`),n.units,I,L)}),F(e.querySelector(`.outposts`),t.outposts.map(e=>({id:e.id,name:e.label,role:`outpost`,mark:e.mark,note:e.mark===`unknown`?vn():void 0,since:e.since,ticks:e.ticks})),I,L)}function Xi(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(...di(l,r))),n.querySelectorAll(`.packet`).forEach((e,t)=>e.toggleAttribute(`data-live`,[`working`,`commanding`].includes(a.dataset.mark??``)||[`working`,`commanding`].includes(c[t].dataset.mark??``)))}var Zi=2,Qi=20;function $i(){let[e,t,n,r]=[k(`map`,HTMLElement),k(`bases`,HTMLElement),k(`links`,SVGSVGElement),k(`packets`,HTMLElement)],i=matchMedia(`(prefers-reduced-motion: reduce)`).matches,a=new Set,o=li(e,t),s=()=>(o(),!e.hidden&&Xi(e,n,r,i)),c=0,l=()=>c||=requestAnimationFrame(()=>(c=0,s())),u=new ResizeObserver(e=>(e.forEach(({target:e,borderBoxSize:t})=>e.style.gridRowEnd=`span ${Math.ceil((t[0].blockSize+Qi)/Zi)}`),l()));return setInterval(()=>document.querySelectorAll(`.age[data-since]`).forEach(e=>Gi(e,Number(e.dataset.since))),15e3),addEventListener(`resize`,l),new ResizeObserver(([e])=>document.documentElement.style.setProperty(`--hud`,`${Math.ceil(e.borderBoxSize[0].blockSize)}px`)).observe(document.querySelector(`.hud`)),ii(),{layout:s,stats(e){let t=e.bases.flatMap(e=>[...e.tower?.subs??[],...e.tabs.flatMap(e=>e.units.flatMap(e=>[e,...e.subs]))]),n=e=>String(t.filter(t=>!e||t.mark===e).length);k(`s-commanding`,HTMLElement).parentElement.toggleAttribute(`data-on`,t.some(e=>e.mark===`commanding`));for(let[t,r]of[[`s-bases`,String(e.bases.length)],[`s-agents`,n()],[`s-working`,n(`working`)],[`s-commanding`,n(`commanding`)],[`s-waiting`,n(`waiting`)]])k(t,HTMLElement).textContent=r},show(e){F(t,e.bases,Ji,Yi);for(let e of t.children)a.has(e)||(a.add(e),u.observe(e));for(let e of a)e.isConnected||(a.delete(e),u.unobserve(e));requestAnimationFrame(s)},pause(e){document.documentElement.classList.toggle(`paused`,e)}}}var ea=new URL(`done-jqKY4qf5.mp3`,import.meta.url).href,ta=new URL(`error-DdTLgPEw.mp3`,import.meta.url).href,na={waiting:new URL(`waiting-DOg8-8gu.mp3`,import.meta.url).href,error:ta,done:ea},ra=e=>e.mark===`waiting`||e.pending?`waiting`:e.mark===`error`?`error`:e.mark===`done`?`done`:void 0,ia=(e,t)=>{try{return localStorage.getItem(e)??t}catch{return t}},aa=(e,t)=>{try{localStorage.setItem(e,t)}catch{}};function oa(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=ia(`sb.remind`,`1`)===`1`,u=ia(`sb.sound`,`0`)===`1`,d=Math.min(100,Math.max(0,Number(ia(`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`?Xn():e===`denied`?Jn():qn():Yn():Zn(),r.dataset.state=u?`on`:`off`,r.setAttribute(`aria-label`,u?cr():sr()),a.checked=u,o.value=s.value=String(d),p&&(p.gain.value=(d/100)**2)};n.textContent=Kn(),r.textContent=or(),r.title=lr(),t(`sound-on-label`).textContent=or(),t(`sound-vol-label`).textContent=dr(),t(`sound-try`).textContent=ur(),n.onclick=async()=>{l&&c&&Notification.permission==="default"?await Notification.requestPermission().catch(()=>{}):aa(`sb.remind`,(l=!l)?`1`:`0`),h()},i.addEventListener(`toggle`,e=>e.newState===`open`&&P(i,r)),a.onchange=()=>{aa(`sb.sound`,(u=a.checked)?`1`:`0`),h(),u&&g(`done`)},o.oninput=()=>(aa(`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(na[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}]:[])(ra(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:jn,error:On,done:Tn}[r]({note:t.note??``}).trim(),tag:t.key,icon:document.querySelector(`link[rel="icon"]`)?.href,silent:r!==`waiting`});n.onclick=()=>(window.focus(),n.close(),e(t))}}}}var sa=45e3,ca=1e3,la=3e4,ua=(e,t)=>Math.min(la,ca*2**(e-1))*(.8+.4*t);function da(e){try{return JSON.parse(e)}catch{return}}function fa(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(),sa),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,ua(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=da(r);i&&e.onNet(i),o({problem:i?void 0:Vn()}),l()}),n.listen(`ping`,()=>t===n&&l()),n.listen(`problem`,e=>{t===n&&(o({problem:da(e)??Hn()}),l())}),r=e.setTimeout(()=>u(),sa)};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()}}}var pa={commanding:At,working:en,waiting:Zt,idle:zt,done:Nt,error:It,unknown:Jt},ma=e=>(e.kind===`joined`?Ht:e.kind===`left`?Gt:pa[e.mark])({name:e.name}),ha=18e5,ga={waiting:0,error:0,working:1,commanding:1},_a=e=>new Date(e).toLocaleTimeString([],{hour12:!1});function va(e){let[t,n,r,i,a]=[`.tl-lanes`,`.tl-axis`,`.tl-at`,`.tl-last`,`.tl-span`].map(t=>e.querySelector(t)),o=[],s=``;matchMedia(`(max-width: 640px)`).matches&&(e.open=!1);let c=()=>{let e=Date.now()-ha,s=o.filter(t=>t.at>=e),c=s.at(-1);t.replaceChildren(...s.map(t=>{let n=document.createElement(`a`),r=(t.at-e)/ha*100;return n.className=`tl-mark ${t.kind}${r>70?` end`:``}`,n.dataset.mark=t.kind===`left`?`unknown`:t.mark,n.style.cssText=`left:${r.toFixed(2)}%;top:${(ga[t.mark]??2)*14+4}px`,n.setAttribute(`aria-label`,`${_a(t.at)} ${ma(t)}`),N(n,t.key&&t.kind!==`left`?{view:`session`,ws:t.ws,key:t.key}:{view:`workspace`,ws:t.ws}),n})),n.replaceChildren(...[0,10,20].map(t=>Object.assign(document.createElement(`span`),{textContent:_a(e+t*6e4).slice(0,5)})),Object.assign(document.createElement(`span`),{textContent:Pr()})),r.textContent=c?_a(c.at):``,i.textContent=c?ma(c):Nr(),a.textContent=Lr({count:String(s.length)})};return setInterval(c,3e4),c(),{net(e){let t=e.events??[],n=t.map(e=>`${e.at}${e.kind}${e.key??e.name}${e.mark}`).join();n!==s&&(s=n,o=t,c())}}}Kr();var R=$i(),ya=va(document.getElementById(`timeline`)),z=e=>document.getElementById(e),ba=e=>e?new Date(e).toLocaleTimeString([],{hour12:!1}):gn(),xa,B,V,Sa={state:`connecting`,attempt:0},H={view:`map`},Ca=!1,wa,Ta=``,U,Ea,W=e=>U?e(U):void Ea?.then(e);function Da(){Ea??=S(async()=>{let{mountFocus:e}=await import(`./views-vEKY7XBo.js`);return{mountFocus:e}},[],import.meta.url).then(({mountFocus:e})=>(U=e({data:Ha,restart:()=>Z.restart(),openTile:ka,embedTerminal:(e,t,n)=>new Promise(r=>K(i=>r(i.terminal.embed(e,t,n)))),online:()=>Sa.state===`live`}),U.show(H,H),B&&U.net(B),U))}var G,Oa,K=e=>{if(G)return e(G);Oa??=S(async()=>{let{mountPanels:e}=await import(`./layer-BwEsneaD.js`);return{mountPanels:e}},[],import.meta.url).then(({mountPanels:e})=>G=e({label:e=>B?.bases.find(t=>t.id===e)?.label??e,recent:async e=>(await(Y?Y.data(e).latest():J(e,`?limit=12`))).items,post:e=>Y&&((t,n)=>Y.data(e).post(t,n)),stream:()=>Ta,showTerminal:(e,t)=>(G?.stack.close(),U?.terminal(t),X.go({view:`session`,ws:e,key:t}))})),Oa.then(e)},ka=(e,t)=>K(n=>n.tiles.open(e,t)),q=document.querySelector(`link[rel="icon"]`),Aa=q&&decodeURIComponent(q.href.slice(q.href.indexOf(`,`)+1)),ja=0;function Ma(e){let t=e.bases.flatMap(e=>[...e.tower?[e.tower,...e.tower.subs]:[],...[...e.tabs.flatMap(e=>e.units),...e.outside].flatMap(e=>[e,...e.subs])]).filter(e=>e.mark===`waiting`||e.pending).length;if(!q||!Aa||t===ja)return;ja=t;let n=`<circle cx='23' cy='9' r='9' fill='#e0af68' stroke='#1a1b26' 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='#16161e'>${t>9?`9+`:t}</text>`;q.href=`data:image/svg+xml,${encodeURIComponent(t?Aa.replace(`</svg>`,`${n}</svg>`):Aa)}`}var Na;function Pa(e){B=V=e,Ma(e);let t=Jr(e,Date.now());if(Na&&Wa.signal(Yr(Na,t)),Na=t,document.hidden)return;R.stats(e),Ci(z(`dismiss-all`),e),wi(z(`stashed`),z(`stashed-list`),e),Q?.net(e);let n=Yr(wa,t);(n.length||G)&&K(e=>e.alerts(n,t)),wa=t,ya.net(e),W(t=>t.net(e)),H.view===`map`&&(R.show(e),xa=e,V=void 0)}function Fa(e){let t=H,n=e.view===`workspace`&&t.view===`map`?document.querySelector(`#bases [data-key="${CSS.escape(e.ws)}"]`)?.getBoundingClientRect():void 0;H=e,Q?.route(e),e.view!==`map`&&Da(),z(`map`).hidden=e.view!==`map`,z(`legend`).hidden=e.view===`session`,z(`stage`).dataset.view=e.view,W(r=>r.show(e,t,n)),e.view===`map`&&B&&B!==xa&&(Pa(B),requestAnimationFrame(R.layout)),Ca&&Ai(e)!==Ai(t)&&Z.restart()}function Ia(e){Sa=e;let t=e.state===`reconnecting`||e.state===`offline`;document.body.dataset.stale=z(`stage`).dataset.stale=String(t),z(`link`).dataset.state=e.state,z(`link-text`).textContent={connecting:St,live:Ct,reconnecting:Tt,offline:wt}[e.state](),U&&B&&U.net(B),G?.stack.redraw();let n=z(`banner`);n.hidden=!t&&!e.problem;let r=e.state===`offline`?Ae({tries:e.attempt-1}):e.state===`reconnecting`?e.attempt?Le({attempt:e.attempt}):Pe():Ne({problem:e.problem??``}),i=document.createElement(`b`);i.textContent=ba(e.lastContact),n.replaceChildren(`${r} ${De()} `,i,Ee())}function La(e,t){try{let n=JSON.parse(t);W(t=>e===`history`?t.history(n):t.cards(n))}catch{}}var Ra=document.querySelector(`meta[name="sb-build"]`)?.content,za=e=>!!(Ra&&Ra!==JSON.parse(e).build);function Ba(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 Va=e=>fetch(`api/${e}`,{cache:`no-store`}).then(e=>e.ok?e.json():Promise.reject(Error(String(e.status)))),J=(e,t=``)=>Va(`history/${encodeURIComponent(e)}${t}`),Y=void 0,Ha=e=>({older:t=>J(e,`?before=${encodeURIComponent(t)}`),latest:()=>J(e),entry:t=>Va(`entry/${encodeURIComponent(e)}/${encodeURIComponent(t)}`).catch(()=>void 0),pic:(t,n)=>`api/image/${encodeURIComponent(e)}/${encodeURIComponent(t)}/${n}`}),Ua=()=>{let e=Ba(Ai(H));return e.listen(`history`,e=>La(`history`,e)),e.listen(`cards`,e=>La(`cards`,e)),e.listen(`hello`,e=>za(e)?location.reload():(Ta=e,G?.terminal.hello())),e.listen(`mirror`,e=>G?.terminal.frame(e)),e};document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[data-alert]`),n=t&&E(t.getAttribute(`data-route`)??``);if(!n||n.view!==`session`||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let r=wa?.get(n.key);r&&(e.preventDefault(),K(e=>e.stack.show(r)))},!0);var X=Mi(e=>Fa(e)),Wa=oa(e=>X.go({view:`session`,ws:e.ws,key:qr(e)})),Z=fa({open:Ua,now:Date.now,setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),random:Math.random,hidden:()=>document.hidden,onNet:Pa,onStatus:Ia}),Ga=()=>Z.resume();document.addEventListener(`visibilitychange`,()=>{if(R.pause(document.hidden),document.hidden)return Z.hide();V&&Pa(V),W(e=>e.wake()),Ga()}),addEventListener(`keydown`,e=>{e.key!==`Escape`||e.defaultPrevented||document.querySelector(`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`)||(e.preventDefault(),!G?.stack.close()&&H.view!==`map`&&X.go(ki(H)))}),ti(e=>G?.hotkey(e)??!1),z(`pair`).hidden=location.hostname!==`127.0.0.1`,z(`pair`).addEventListener(`click`,()=>void S(async()=>{let{pairTile:e}=await import(`./pair-6DGLjFx1.js`);return{pairTile:e}},[],import.meta.url).then(({pairTile:e})=>ka(e(),!0)));var Q,$=matchMedia(`(pointer: coarse), (max-width: 640px)`),Ka=()=>void S(async()=>{let{mountDrawer:e}=await import(`./drawer-DaA7PUPB.js`);return{mountDrawer:e}},[],import.meta.url).then(({mountDrawer:e})=>(Q??=e(),B&&Q.net(B),Q.route(H)));$.matches?Ka():$.addEventListener(`change`,()=>$.matches&&!Q&&Ka(),{once:!0}),Di({route:()=>H,net:()=>B,go:e=>X.go(e)}),z(`stashed-pop`).addEventListener(`toggle`,e=>e.newState===`open`&&P(z(`stashed-pop`),z(`stashed`))),z(`prefs-pop`).addEventListener(`toggle`,e=>e.newState===`open`&&P(z(`prefs-pop`),z(`prefs`))),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`button[data-open]`);t&&S(async()=>{let{openingOf:e,spawnTile:t}=await import(`./spawn-DMexSYb_.js`);return{openingOf:e,spawnTile:t}},[],import.meta.url).then(({openingOf:e,spawnTile:n})=>{let r=e(t,B?.bases??[]);r&&ka(n(r,(e,t,n)=>(G?.tiles.close(n),X.go({view:`session`,ws:e,key:t}))),!0)})});for(let e of[`focus`,`pageshow`,`online`])window.addEventListener(e,()=>!document.hidden&&Ga());Ia(Sa),Fa(X.route()),Z.start(),Ca=!0;export{b as A,Be as B,oi as C,Ar as D,qr as E,vn as F,Te as H,gn as I,bt as L,bn as M,v as N,Er as O,yn as P,yt as R,ai as S,x as T,s as U,ze as V,zi as _,N as a,S as b,M as c,O as d,j as f,A as g,F as h,Hi as i,Pn as j,Tr as k,Ui as l,Vi as m,Ni as n,qi as o,Ri as p,Pi as r,k as s,Li as t,P as u,Ti as v,$r as w,si as x,Ci as y,ut as z};
|