glimmervoid 0.42.2 → 0.42.3
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.
|
@@ -17242,7 +17242,7 @@ function createSessionWorktreeLifecycle({ id, projectPath, integrationBranch = n
|
|
|
17242
17242
|
"--quiet",
|
|
17243
17243
|
candidate
|
|
17244
17244
|
], opts) !== null) return {
|
|
17245
|
-
ref: candidate,
|
|
17245
|
+
ref: await freshestBaseRef(candidate, opts),
|
|
17246
17246
|
verified: true
|
|
17247
17247
|
};
|
|
17248
17248
|
return {
|
|
@@ -17250,6 +17250,23 @@ function createSessionWorktreeLifecycle({ id, projectPath, integrationBranch = n
|
|
|
17250
17250
|
verified: false
|
|
17251
17251
|
};
|
|
17252
17252
|
}
|
|
17253
|
+
async function freshestBaseRef(baseBranch, opts) {
|
|
17254
|
+
const localRef = `refs/heads/${baseBranch}`;
|
|
17255
|
+
const originRef = `refs/remotes/origin/${baseBranch}`;
|
|
17256
|
+
const existingRefs = (await gitOut([
|
|
17257
|
+
"for-each-ref",
|
|
17258
|
+
"--format=%(refname)",
|
|
17259
|
+
localRef,
|
|
17260
|
+
originRef
|
|
17261
|
+
], opts)).split("\n");
|
|
17262
|
+
if (!existingRefs.includes(localRef) || !existingRefs.includes(originRef)) return baseBranch;
|
|
17263
|
+
return await gitLookup([
|
|
17264
|
+
"merge-base",
|
|
17265
|
+
"--is-ancestor",
|
|
17266
|
+
localRef,
|
|
17267
|
+
originRef
|
|
17268
|
+
], opts) !== null ? `origin/${baseBranch}` : baseBranch;
|
|
17269
|
+
}
|
|
17253
17270
|
function diffGitOptions(cwd) {
|
|
17254
17271
|
return {
|
|
17255
17272
|
cwd,
|
|
@@ -17318,7 +17335,7 @@ function createSessionWorktreeLifecycle({ id, projectPath, integrationBranch = n
|
|
|
17318
17335
|
async function memberMergeBase(member) {
|
|
17319
17336
|
const opts = diffGitOptions(member.dir);
|
|
17320
17337
|
const candidates = member.base ? [
|
|
17321
|
-
member.base,
|
|
17338
|
+
await freshestBaseRef(member.base, opts),
|
|
17322
17339
|
`origin/${member.base}`,
|
|
17323
17340
|
"origin/HEAD"
|
|
17324
17341
|
] : ["origin/HEAD"];
|
|
@@ -172,6 +172,6 @@ import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n a
|
|
|
172
172
|
`)||JSON.stringify(e.handReview)!==JSON.stringify(t.handReview)||JSON.stringify(e.queued)!==JSON.stringify(t.queued)?!1:JSON.stringify(e.drafts)===JSON.stringify(t.drafts)}var dq=12e4,fq=`The server did not answer within ${dq/1e3} s. Check GitHub before trying again.`,pq=`${G} Check GitHub before trying again.`,mq=`M4.5 0.5L8.5 5.5L4.5 10.5L0.5 5.5Z`,hq=`GitHub review`,gq=null,_q=null,vq=null,yq=null,bq=null,xq=null,Sq=null,Cq=null,wq=null,Tq=null,Eq=null,Dq=null,Oq=null,kq=null,Aq=null,jq=null,Mq=null,Nq=new Map,Pq=Af(()=>vq),Fq=Af(()=>vq),Iq=Af(()=>vq),Lq=new WeakMap,Rq=new Map,zq=new Map,Bq=new Map,Vq=pc(),Hq=hc(),Uq=new Set(Hq.split(`|`).filter(Boolean));function Wq(e){let t=uK(e),n=j(`span`,`pr-severity-meter`);if(n.setAttribute(`role`,`img`),n.setAttribute(`aria-label`,`${e.toLowerCase()} severity`),n.style.color=`var(${t.colorToken})`,e===`CRITICAL`){let e=a_(14,17);e.classList.add(`pr-severity-halo`),e.setAttribute(`viewBox`,`0 0 9 11`),e.append(i_(`path`,{d:mq,fill:`currentColor`})),n.append(e)}for(let e=0;e<3;e+=1){let r=a_(9,11),i=e<t.filledCount;r.append(i_(`path`,{d:mq,fill:i?`currentColor`:`none`,stroke:i?`currentColor`:`var(--border-hover)`,"stroke-width":`1`})),n.append(r)}return n}function Gq({verdict:e}){let t=j(`span`,`pr-verdict-seal`);t.dataset.tone=BK(e);let n=a_(20,20),r=dK(e);return n.append(i_(`circle`,{cx:`10`,cy:`10`,r:`8.5`,fill:r===`cross`?`currentColor`:`none`,stroke:`currentColor`,"stroke-width":`1.5`})),r===`check`&&n.append(i_(`path`,{d:`M6 10.5L8.7 13L14 7.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`})),r===`dot`&&n.append(i_(`circle`,{cx:`10`,cy:`10`,r:`2.4`,fill:`currentColor`})),r===`bar`&&n.append(i_(`path`,{d:`M6 10H14`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`})),r===`cross`&&n.append(i_(`path`,{d:`M7 7L13 13M13 7L7 13`,stroke:`var(--bg)`,"stroke-width":`1.8`,"stroke-linecap":`round`})),t.append(n,j(`span`,null,RK(e))),t}function Kq(){let e=a_(16,16);return e.append(i_(`rect`,{x:`1`,y:`1`,width:`14`,height:`14`,rx:`2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`})),e.append(i_(`path`,{d:`M6 6.2C6 4.9 7 4.2 8 4.2C9.1 4.2 10 5 10 6C10 7.4 8 7.4 8 9.2`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.3`,"stroke-linecap":`round`})),e.append(i_(`circle`,{cx:`8`,cy:`11.6`,r:`0.9`,fill:`currentColor`})),e}function qq(e){return dr(`pr-link`,wK(e.repo,e.number),e.url)}function Jq(e){let t=typeof e==`string`?Date.parse(e):e;return typeof t!=`number`||!Number.isFinite(t)||t<=0?null:t}function Yq(e,t){let n=Jq(t);if(n===null)return null;let r=j(`span`,null,`${e}${e?` `:``}${Of(n)}`);return r.dataset.ageAt=String(n),r.dataset.ageLabel=e,r}function Xq(e){let t=Lq.get(e);t&&(e.title=`${t()}${e.dataset.unseen?`
|
|
173
173
|
New ready review`:``}`,e.setAttribute(`aria-label`,e.title))}function Zq(){Iq.reset(),Qq(vq)}nh(Zq);function Qq(e){if(e){for(let t of e.querySelectorAll(`.pr-queue-row`))Lq.has(t)&&(Xq(t),Iq.onTick(()=>Xq(t)));for(let t of e.querySelectorAll(`.pr-rereview-notice`)){let e=_q?.drafts.find(e=>e.key===t.dataset.reviewKey),n=e?tK(e):null;if(!n)continue;let r=()=>{t.textContent=nK(n,eJ(n.submittedAt))};r(),Iq.onTick(r)}for(let t of e.querySelectorAll(`[data-review-title]`)){let e=t.dataset.reviewTitle??``,n=t.dataset.ageAt===void 0?null:Number(t.dataset.ageAt),r=()=>{let r=n===null?null:Of(n),i=eh()?iK(hq,r):iK(e,r);t.title=i,t.setAttribute(`aria-label`,i)};r(),Iq.onTick(r)}for(let t of e.querySelectorAll(`[data-age-at]`)){if(t.dataset.reviewTitle!==void 0)continue;let e=Number(t.dataset.ageAt),n=t.dataset.ageLabel??``;Iq.track(t,e,()=>`${n}${n?` `:``}${Of(e)}`)}}}function $q(e,t,n,r=!0){let i=aK(e,{isViewerShown:r});if(i.length===0)return null;let a=j(`span`,t),o=ur(i.map(e=>({login:e.login,tone:e.tone,title:iK(eh()?hq:e.text,eJ(e.submittedAt))})),n);for(let[e,t]of i.entries()){let n=o.children[e];if(!(n instanceof HTMLElement))continue;n.dataset.reviewTitle=t.text;let r=Jq(t.submittedAt);r!==null&&(n.dataset.ageAt=String(r))}return a.append(o),a}function eJ(e){let t=Jq(e);return t===null?null:Of(t)}function tJ(e,t,n){let r=j(`span`,n);return r.append(lr({login:e,cssPx:t}),j(`span`,`pr-author-login`,e)),r}function nJ(e,t){return`${wK(e.repo,e.number)}\n${yG(e,t).meaning}`}function rJ(e,t,n){let r=j(`button`,`pr-queue-row pr-queue-row-quiet`);r.type=`button`,r.dataset.reviewKey=e.key;let i=t===`ready`&&`reviewedHead`in e?`${e.key}@${e.reviewedHead}`:null;if(i&&Uq.has(i)){let e=j(`span`,`tab-activity active pr-queue-unseen`);e.setAttribute(`aria-hidden`,`true`),r.dataset.unseen=i,r.append(e)}r.setAttribute(`aria-current`,String(e.key===Tq));let a=`reviewedHead`in e?tK(e):null;Lq.set(r,()=>eh()?nJ(e,t):TG(e,t,{opened:eJ(e.prCreatedAt),reviewed:`reviewedHead`in e?eJ(e.reviewedAt):null,posted:`reviewedHead`in e?eJ(e.postedAt):null,viewerApproval:eJ(a?.submittedAt),githubReviews:`reviewedHead`in e?aK(e,{isViewerShown:t!==`posted`}).map(e=>eJ(e.submittedAt)):[]})),Xq(r);let o=cJ(e,n);if(t===`inReview`){let t=e,n=j(`span`,`pr-queue-elapsed`);Pq.track(n,t.startedAt,()=>HK(t,Date.now())),o.append(n)}if(t===`queued`){let t=Yq(``,e.prCreatedAt);t&&(t.classList.add(`pr-queue-elapsed`),o.append(t))}if(t!==`inReview`&&t!==`queued`){let t=e,n=Yq(``,t.reviewedAt)??Yq(``,t.prCreatedAt);n&&(n.classList.add(`pr-queue-elapsed`),o.append(n))}if(t===`discarded`)return r.classList.add(`pr-queue-row-compact`),r.append(o),iJ(r,e.key,i),r;r.classList.remove(`pr-queue-row-quiet`);let s=yG(e,t),c=j(`span`,`pr-queue-glyph`);c.append(nv(s.icon,s.tone));let l=j(`span`,`pr-queue-bottom`);if(l.append(sJ(s),tJ(e.author,16,`pr-queue-author`)),e.requestSource===`direct`){let e=j(`span`,`pr-queue-direct`,`@`);e.title=`Requested from you directly`,l.append(e)}t===`inReview`&&l.append(j(`span`,`pr-phase-label`,VK(e.phase))),r.append(c,o,l);let u=t===`inReview`||t===`queued`?null:$q(e,`pr-queue-reviewers`,16,t!==`posted`);return u&&l.append(u),iJ(r,e.key,i),r}function iJ(e,t,n){e.addEventListener(`click`,()=>{n&&Uq.delete(n)&&(lY(yl([...Uq])),e.querySelector(`.pr-queue-unseen`)?.remove(),delete e.dataset.unseen,Xq(e)),Tq=t,Eq=null,fJ(null);for(let e of xq?.querySelectorAll(`button[data-review-key]`)??[])e.setAttribute(`aria-current`,String(e.dataset.reviewKey===Tq));$J(GG(_q)),Iq.reset(),Qq(vq),document.documentElement.dataset.layout===`phone`&&Cq?.scrollIntoView({block:`start`,behavior:`smooth`})})}function aJ(e){let t=Object.values(GG(_q)).flat().find(t=>In(t)===e.toLowerCase());return t?oJ(t.key):null}function oJ(e){return xq?[...xq.querySelectorAll(`button[data-review-key]`)].find(t=>t.dataset.reviewKey===e)??null:null}function sJ(e){let t=j(`span`,`my-pr-stage pr-queue-state`,e.meaning);return t.dataset.tone=e.tone,t}function cJ(e,t){let n=j(`span`,`pr-queue-top`);return n.append(j(`strong`,`pr-queue-ref`,MG(e.repo,e.number,t)),j(`strong`,`pr-queue-ref-compact`,MG(e.repo,e.number,!1)),j(`span`,`pr-queue-title`,e.title)),n}function lJ(e,t){let n=j(`section`,`pr-queue-section`);n.append(j(`h3`,`pr-section-heading`,`Review by hand ${e.length}`));for(let r of e){let e=dr(`pr-queue-row`,``,r.url);Lq.set(e,()=>eh()?nJ(r,`handReview`):TG(r,`handReview`,{opened:eJ(r.prCreatedAt)})),Xq(e);let i=yG(r,`handReview`),a=j(`span`,`pr-queue-glyph`);a.append(nv(i.icon,i.tone));let o=j(`span`,`pr-queue-bottom`);o.append(sJ(i),tJ(r.author,16,`pr-queue-author`)),e.append(a,cJ(r,t),o),n.append(e)}return n}function uJ({title:e,detail:t}){let n=j(`section`,`pr-caught-up`);n.setAttribute(`role`,`status`);let r=j(`strong`,`pr-caught-up-title`);return r.append(nv(`ready`,`ok`),j(`span`,null,e)),n.append(r,j(`p`,`pr-caught-up-detail`,t)),n}function dJ(e,t){return e.kind===`banner`?[uJ(e)]:[j(`p`,`my-pr-note`,e.detail),lJ(t.handReview,jG(t))]}function fJ(e){Dq=e,Oq&&(Oq.hidden=e===null,Oq.textContent=e?.text??``,e&&(Oq.dataset.tone=e.tone))}function pJ(e,t,n,r){let i=j(`section`,`pr-queue-section`);i.append(j(`h3`,`pr-section-heading`,`${e} ${t.length}`));for(let e of t)i.append(rJ(e,n,r));return i}var mJ=`Open in session`,hJ=`Preparing the branch and session.`;function gJ(e,t,n){for(let r of document.querySelectorAll(`.pr-session-open-status`)){if(r.dataset.reviewKey!==e)continue;r.textContent=t,n&&(r.dataset.tone=n),n||delete r.dataset.tone;let i=r.parentElement?.querySelector(`.pr-session-open-button`);i&&(i.disabled=!1)}}function _J(e,t){let n=Nq.get(e);n&&window.clearTimeout(n.timer),Nq.set(e,{requestId:null,timer:0,text:t,tone:`error`}),gJ(e,t,`error`)}function vJ(e,t,n){if(Nq.get(e)?.requestId)return;let r=ud(`open-team-review-session`);if(!K({type:`open-team-review-session`,requestId:r,key:e})){n.dataset.tone=`error`,n.textContent=G;return}let i=window.setTimeout(()=>_J(e,`The server did not answer within ${dq/1e3} s.`),dq);Nq.set(e,{requestId:r,timer:i,text:hJ,tone:`busy`}),t.disabled=!0,n.dataset.tone=`busy`,n.textContent=hJ}function yJ(e){let t=j(`div`,`pr-session-open`),n=j(`button`,`pr-action pr-session-open-button`,mJ);n.type=`button`;let r=Nq.get(e.key);n.disabled=!!r?.requestId;let i=j(`span`,`pr-action-status pr-session-open-status`,r?.text??``);return i.dataset.reviewKey=e.key,r&&(i.dataset.tone=r.tone),i.setAttribute(`role`,`status`),i.setAttribute(`aria-live`,`polite`),n.addEventListener(`click`,()=>vJ(e.key,n,i)),t.append(n,i),t}function bJ(e){let t=j(`div`,`pr-detail-heading`);t.dataset.signature=lq(e);let n=j(`div`,`pr-detail-title`);n.append(qq(e),j(`h2`,null,e.title));let r=j(`div`,`pr-detail-meta`);r.append(tJ(e.author,20,`pr-detail-author`));let i=j(`span`,null,EK(e));i.title=DK(e),r.append(i);let a=Yq(`Opened`,e.prCreatedAt);if(a&&r.append(a),`reviewedHead`in e){let t=Yq(`Reviewed`,e.reviewedAt);t&&r.append(t);let n=Yq(`Posted`,e.postedAt);n&&r.append(n)}let o=`reviewedHead`in e?$q(e,`pr-detail-github`,20):null;if(o&&r.append(o),t.append(n,r,yJ(e)),`reviewedHead`in e){let n=CG(e.viewerThreads);if(n){let r=j(`p`,`pr-viewer-threads`,n);bG(e)&&(r.dataset.state=`all-resolved`),t.append(r)}}let s=`reviewedHead`in e?tK(e):null;if(s){let n=j(`p`,`pr-rereview-notice`,nK(s,eJ(s.submittedAt)));n.dataset.reviewKey=e.key,t.append(n)}return t}function xJ(e,t){let n=e.querySelector(`:scope > .pr-detail-heading`);if(!n||n.dataset.signature===lq(t))return e;let r=bJ(t),i=n.querySelector(`:scope > .pr-detail-title > .pr-detail-more`);return i&&r.querySelector(`:scope > .pr-detail-title`)?.append(i),n.replaceWith(r),e}function SJ(e){return`${JSON.stringify(e.threads)}:${e.liveHead}:${e.status}:${e.reviewedHead}:${e.error??``}:${e.postedEvent??``}:${e.earlierReview?.head??``}`}function CJ(e,t){for(let n of t){if(n.kind===`text`){e.append(document.createTextNode(n.text));continue}if(n.kind===`code`){e.append(j(`code`,null,n.text));continue}let t=j(`span`,`pr-citation`,n.text);t.title=n.text,e.append(t)}return e}function wJ(e,t){return CJ(e,yK(t))}function TJ(e,t,n){let r=j(`div`,`pr-assessment-part`);return n&&(r.dataset.tone=n),r.append(j(`h4`,`pr-assessment-title`,e),t),r}function EJ(e){let t=j(`ul`,`pr-assessment-list`);for(let n of e)t.append(wJ(j(`li`,null),n));return t}function DJ(e){let t=OK(e.assessment);if(t.length===0)return[];let n=j(`section`,`pr-about-box`);n.setAttribute(`aria-label`,`About this PR`),n.append(j(`h3`,`pr-assessment-title`,`About this PR`));for(let e of t){let t=e.kind===`goal`?`pr-verdict-summary pr-about-goal`:`pr-verdict-summary`;n.append(wJ(j(`p`,t),e.text))}return[n]}function OJ(e){let t=j(`section`,`pr-verdict-box`);t.setAttribute(`aria-label`,`Verdict`);let n=j(`div`,`pr-verdict-line`);return n.append(Gq(e)),t.append(n),e.assessment?(t.append(wJ(j(`p`,`pr-verdict-summary pr-verdict-reason`),e.summary)),t):(t.append(j(`p`,`pr-verdict-legacy`,jK)),t)}function kJ(e){let t=j(`details`,`pr-disclosure pr-coverage`),n=j(`summary`,`pr-disclosure-summary`),r=AK(e.assessment);n.append(j(`span`,`pr-disclosure-label`,r.label),j(`span`,`pr-disclosure-preview`,r.preview)),t.append(n);let{assessment:i}=e;return i?(i.checked.length>0&&t.append(TJ(`What the review checked`,EJ(i.checked))),i.gaps.length>0&&t.append(TJ(`Not covered`,EJ(i.gaps),`warning`)),t):(t.append(wJ(j(`p`,`pr-verdict-summary`),e.summary)),t)}function AJ(e){if(e.kind===`code`){let t=j(`pre`,`pr-comment-code`),n=j(`code`,null);return n.textContent=e.code,t.append(n),t}let t=j(`p`,`pr-comment-paragraph`);if(e.lead){let n=j(`strong`,`pr-comment-lead pr-comment-lead-${e.leadKind}`);e.leadKind===`question`&&n.append(Kq()),n.append(e.lead),t.append(n,` `)}return CJ(t,e.segments)}function jJ(e){let t=j(`details`,`pr-comment-content`),n=j(`summary`,`pr-comment-header`),r=xK(e.body),i=pK(e);i&&n.append(Wq(i));let a=j(`span`,`pr-comment-location`,qK(e));a.title=KK(e),n.append(a),n.append(j(`span`,`pr-comment-preview`,SK(r.paragraphs))),t.append(n);let o=j(`div`,`pr-comment-paragraphs`);for(let e of r.paragraphs)o.append(AJ(e));return t.append(o),t.open=i===`HIGH`||i===`CRITICAL`,t}function MJ(e,t){let n=j(`details`,`pr-disclosure pr-earlier-review`),r=j(`summary`,`pr-disclosure-summary`);r.append(j(`span`,`pr-disclosure-label`,`Earlier review`),j(`span`,`pr-disclosure-preview`,LK(e)));let i=j(`div`,`pr-earlier-review-body`),a=j(`div`,`pr-verdict-line`);a.append(Gq(e)),i.append(a),e.summary.trim()&&i.append(wJ(j(`p`,`pr-verdict-summary`),e.summary));for(let t of e.comments){let e=j(`article`,`pr-comment-card pr-comment-card-readonly`);e.append(jJ(t)),i.append(e)}return n.append(r,i),n.open=t,n}function NJ(e){let t=FK(e);if(!t)return[];let n=j(`p`,`pr-changed-since`,t);return n.append(` `,dr(`pr-changed-since-link`,`Compare changes`,IK(e),`Open the commits since this review on GitHub`)),[n]}function PJ(e){let t=_q?.drafts.find(t=>t.key===e.key)?.earlierReview??null;if(!t)return Aq=null,[];if(Aq?.key===e.key&&Aq.head===t.head)return[Aq.element];let n=MJ(t,!1);return Aq={key:e.key,head:t.head,element:n},[n]}function FJ(e,t,n,r){let i=j(`article`,`pr-comment-card`),a=j(`input`,`pr-comment-checkbox`);return a.type=`checkbox`,a.checked=n.has(t),a.setAttribute(`aria-label`,`Include comment on ${KK(e)}`),a.addEventListener(`change`,()=>{a.checked&&n.add(t),a.checked||n.delete(t),i.dataset.included=String(a.checked),r()}),i.dataset.included=String(a.checked),i.append(a,jJ(e)),i}var IJ=`More review actions`,LJ=`Your comments are on GitHub. Approve adds an approval without posting them again.`;function RJ(e,t,n,r){let i=sK(GG(_q));fJ(null);let a=ud(`team-review-action`);if(!K({type:`team-review-action`,requestId:a,...n}))return!1;let o=window.setTimeout(()=>{Bq.delete(t.key),r(!1,fq)},dq);return Bq.set(t.key,{requestId:a,action:n.action,origin:e,capturedOrder:i,pullRequest:wK(t.repo,t.number),timer:o,settle:r}),!0}function zJ(e){let t=j(`footer`,`pr-footer`),n=HJ(`discard`,()=>{Bq.has(e.key)||(n.disabled=!0,i.dataset.tone=`busy`,i.textContent=eq(`discard`),!RJ(`other`,e,YK(e.key),a)&&a(!1,G))}),r=Bq.has(e.key);n.disabled=r;let i=j(`span`,`pr-action-status`,r?eq(`discard`):``);i.setAttribute(`role`,`status`),i.setAttribute(`aria-live`,`polite`);let a=(t,r)=>{n.disabled=t,i.dataset.tone=t?`ok`:`error`,i.textContent=r,t||fJ({text:`${wK(e.repo,e.number)}: ${r}`,tone:`error`})};return t.append(n,i),t}var BJ=0;function VJ(e,t){let n=j(`div`,`pr-detail-more`),r=j(`button`,`review-icon-button review-more-button`);r.type=`button`,r.title=IJ,r.setAttribute(`aria-label`,IJ),r.setAttribute(`aria-haspopup`,`menu`),r.setAttribute(`aria-expanded`,`false`),r.append(d_(l_)),BJ+=1;let i=j(`div`,`review-more-menu`);i.id=`pr-more-menu-${BJ}`,i.setAttribute(`role`,`menu`),i.setAttribute(`aria-label`,IJ),i.hidden=!0,r.setAttribute(`aria-controls`,i.id);let a=e=>{e.key===`Escape`&&(e.preventDefault(),s(),r.focus())},o=e=>{e.target instanceof Node&&n.contains(e.target)||s()};function s(){i.hidden=!0,r.setAttribute(`aria-expanded`,`false`),document.removeEventListener(`keydown`,a),document.removeEventListener(`pointerdown`,o)}let c=()=>{i.hidden=!1,r.setAttribute(`aria-expanded`,`true`),document.addEventListener(`keydown`,a),document.addEventListener(`pointerdown`,o),i.querySelector(`button:not(:disabled)`)?.focus()};r.addEventListener(`click`,()=>{i.hidden?c():s()});let l=[r];for(let n of e){let e=j(`button`,`review-btn`,QK(n));e.type=`button`,e.dataset.action=n,e.setAttribute(`role`,`menuitem`),e.addEventListener(`click`,()=>{s(),t(n)}),l.push(e),i.append(e)}return n.append(r,i),{element:n,controls:l}}function HJ(e,t){let n=j(`button`,`pr-action`,QK(e));return n.type=`button`,n.dataset.action=e,n.addEventListener(`click`,()=>t(e)),n}function UJ(e,t){e.querySelector(`:scope > .pr-detail-heading > .pr-detail-title`)?.append(t)}function WJ(e){let t=j(`article`,`pr-detail`),n=j(`div`);n.dataset.reviewThreads=``,t.append(bJ(e),...DJ(e),n,OJ(e)),JJ(t,e);let r=j(`section`,`pr-posts`);r.setAttribute(`aria-label`,`Inline comments`);let i=j(`div`,`pr-posts-heading`);i.append(j(`h3`,null,`Inline comments`),j(`span`,null,String(e.comments.length))),r.append(i);let a=j(`details`,`pr-disclosure`),o=j(`summary`,`pr-disclosure-summary`),s=j(`span`,`pr-disclosure-preview`);o.append(j(`span`,`pr-disclosure-label`,`Review body`),s),a.append(o);let c=j(`textarea`,`pr-body-input`);c.setAttribute(`aria-label`,`Review body`),c.value=e.body,c.rows=Math.min(10,Math.max(3,e.body.split(`
|
|
174
174
|
`).length+1)),c.spellcheck=!0;let l=()=>{s.textContent=aG(c.value).split(/\r?\n/).map(e=>e.trim()).find(Boolean)||`No review body`};c.addEventListener(`input`,l),l(),a.append(c);let u=j(`details`,`pr-disclosure`);u.append(j(`summary`,`pr-disclosure-summary`,`Add a note`));let d=j(`textarea`,`pr-body-input pr-note-input`);d.setAttribute(`aria-label`,`Your note`),d.rows=2,d.spellcheck=!0,d.placeholder=`Posts above the automated-review note`,u.append(d);let f=new Set(e.comments.flatMap((e,t)=>mK(e)?[t]:[])),p=j(`footer`,`pr-footer`),m=j(`span`,`pr-action-status`);m.setAttribute(`role`,`status`),m.setAttribute(`aria-live`,`polite`);let h=()=>{Bq.has(e.key)||m.dataset.tone===`ok`||(m.textContent=``,delete m.dataset.tone)};for(let[t,n]of e.comments.entries())r.append(FJ(n,t,f,h));t.append(r,a,u,kJ(e)),e.earlierReview&&t.append(MJ(e.earlierReview,!1));let g=[],_=e=>{for(let t of g)t.disabled=e;t.dataset.busy=String(e)},v=(e,t)=>{_(e),m.dataset.tone=e?`ok`:`error`,m.textContent=t},y=t=>{if(Bq.has(e.key))return;_(!0),m.dataset.tone=`busy`,m.textContent=eq(t);let n=e.comments.filter((e,t)=>f.has(t));RJ(`ready`,e,XK(e,t,JK(d.value,c.value),n),v)||v(!1,G)},b=$K(e),x=b.footer.map(e=>HJ(e,y)),S=VJ(b.more,y);return g.push(...x,...S.controls),UJ(t,S.element),p.append(...x,m),t.append(p),{signature:cq(e),element:t,settle:v}}function GJ(e){let t=Rq.get(e.key);if(t&&(Bq.has(e.key)||t.signature===cq(e)))return JJ(t.element,e),xJ(t.element,e);let n=WJ(e);return Rq.set(e.key,n),n.element}function KJ(e,t){let n=j(`article`,`pr-detail`),r=j(`div`,`pr-detail-heading`),i=j(`div`,`pr-detail-title`);i.append(qq(e),j(`h2`,null,e.title));let a=j(`div`,`pr-detail-meta`);a.append(tJ(e.author,20,`pr-detail-author`));let o=Yq(`Opened`,e.prCreatedAt);return o&&a.append(o),r.append(i,a,yJ(e)),n.append(r,j(`p`,`pr-attention-detail`,nq(t)),zJ(e)),n}function qJ(e){let t=j(`article`,`pr-detail`);t.append(bJ(e));let n=j(`section`,`pr-progress`);n.setAttribute(`aria-label`,`Review progress`);let r=j(`ol`,`pr-progress-tracker`);for(let t of CK(e.phase)){let e=j(`li`,`pr-progress-stage`);e.dataset.state=t.state,e.append(j(`span`,`pr-progress-bar`),j(`span`,null,t.label)),r.append(e)}let i=j(`div`,`pr-progress-text`);Fq.track(i,e.startedAt,()=>UK(e,Date.now())),n.append(r,i),t.append(n);let a=j(`section`,`pr-steps`);a.append(j(`h3`,null,`Latest agent steps`));let o=j(`ol`,`pr-step-list`);for(let t of e.recentSteps){let n=j(`li`,`pr-step`),r=j(`span`,`pr-step-detail`,t.detail);r.title=t.detail,n.append(j(`span`,`pr-step-at`,Ul(e.startedAt,t.at)),j(`span`,`pr-step-tool`,t.tool),r),o.append(n)}return a.append(o),t.append(a,...PJ(e),zJ(e)),t}function JJ(e,t){if(Bq.has(t.key))return;let n=e.querySelector(`:scope > [data-review-threads]`),r=JSON.stringify([t.liveHead,t.threads]);n&&n.dataset.reviewThreads!==r&&(n.replaceChildren(...XJ(t)),n.dataset.reviewThreads=r)}function YJ(e,t,n,r){let i=j(`div`,t?`pr-thread-message pr-thread-message-muted`:`pr-thread-message`);if(i.append(j(`p`,`pr-thread-body pr-thread-preview`,e)),!n&&!QG(e,t?3:8))return i;let a=j(`details`,`pr-thread-disclosure`);return a.append(j(`summary`,`pr-thread-expand`,t?`Expand comment`:`Expand reply`),j(`p`,`pr-thread-body`,e)),n&&a.append(dr(`pr-link pr-thread-continues`,t?`Comment continues on GitHub`:`Reply continues on GitHub`,r)),i.append(a),i}function XJ(e){let t=XG(e);if(t.length===0)return[];let n=j(`section`,`my-pr-threads-section`);n.append(j(`h3`,`pr-section-heading`,`Answered threads`));let r=j(`div`,`my-pr-threads`);for(let n of t){let t=j(`div`,`my-pr-thread pr-thread-card`),i=j(`div`,`my-pr-thread-heading pr-thread-heading`),a=j(`span`,`pr-thread-chip`,n.judgementLabel);a.dataset.tone=n.judgementTone,i.append(dr(`pr-link my-pr-thread-location`,n.location,n.thread.url),a),t.append(i),n.judgementReason&&t.append(j(`p`,`my-pr-thread-meta`,n.judgementReason)),n.thread.viewerComment&&t.append(j(`div`,`my-pr-thread-meta`,`Your comment`),YJ(n.thread.viewerComment,!0,n.thread.viewerCommentTruncated===!0,n.thread.url));let o=j(`div`,`pr-detail-meta pr-thread-reply-meta`);o.append(j(`span`,`pr-author-login`,n.thread.lastReplyAuthor),` replied`);let s=Yq(``,n.thread.lastReplyAt);s&&o.append(s);let c=j(`span`,`pr-action-status`);c.setAttribute(`role`,`status`);let l=j(`button`,`pr-action`,`Resolve`);l.type=`button`,l.disabled=!n.canResolve||Bq.has(e.key);let u=(e,t)=>{l.disabled=e||!n.canResolve,c.textContent=t,c.dataset.tone=e?`ok`:`error`};l.addEventListener(`click`,()=>{Bq.has(e.key)||(l.disabled=!0,c.textContent=eq(`resolve-thread`),!RJ(`other`,e,XK(e,`resolve-thread`,``,[],n.thread.id),u)&&u(!1,G))}),t.append(o),n.thread.lastReplyBody&&t.append(YJ(n.thread.lastReplyBody,!1,n.thread.lastReplyTruncated===!0,n.thread.url));let d=j(`footer`,`pr-thread-footer`);d.append(c,l),t.append(d),n.thread.resolveError&&t.append(j(`p`,`pr-attention-detail`,n.thread.resolveError)),r.append(t)}return n.append(r),[n]}function ZJ(e){let t=j(`article`,`pr-detail`);if(t.append(bJ(e),...DJ(e),...XJ(e)),e.status===`posted`&&t.append(OJ(e),kJ(e)),e.status!==`posted`&&t.append(j(`p`,`pr-attention-detail`,WK(e))),e.status===`stale`&&t.append(...NJ(e)),e.earlierReview&&t.append(MJ(e.earlierReview,e.status===`stale`)),!NK(e.status))return zq.set(e.key,{signature:SJ(e),element:t,settle:()=>{}}),t;let n=j(`footer`,`pr-footer`),r=$K(e),i=j(`span`,`pr-action-status`,r.footer.includes(`approve-only`)?LJ:``);i.setAttribute(`role`,`status`),i.setAttribute(`aria-live`,`polite`);let a=[],o=(e,t)=>{for(let t of a)t.disabled=e;i.dataset.tone=e?`ok`:`error`,i.textContent=t},s=t=>{if(!Bq.has(e.key)){for(let e of a)e.disabled=!0;i.dataset.tone=`busy`,i.textContent=eq(t),!RJ(`other`,e,XK(e,t,``,[]),o)&&o(!1,G)}},c=r.footer.map(e=>HJ(e,s));if(a.push(...c),r.more.length>0){let e=VJ(r.more,s);a.push(...e.controls),UJ(t,e.element)}return n.append(...c,i),t.append(n),zq.set(e.key,{signature:SJ(e),element:t,settle:o}),t}function QJ(e){if(!NK(e.status)&&XG(e).length===0)return ZJ(e);let t=zq.get(e.key);return t&&(Bq.has(e.key)||t.signature===SJ(e))?xJ(t.element,e):ZJ(e)}function $J(e){if(!Cq)return;if(Tq=lK(e,Tq,Eq!==null),!Tq){let t=Eq?.actedKey??null,n=t&&[...e.ready,...e.attention].some(e=>e.key===t)?t:null;Eq&&={actedKey:n},Cq.replaceChildren(...dJ(OG(e,n),e)),kq=null;return}let t=e.ready.find(e=>e.key===Tq&&(JG(e).length>0||xG(e)));if(t&&t.status!==`ready`){let e=`threads:${SJ(t)}`,n=QJ(t);if(kq===e&&Cq.firstElementChild===n)return;Cq.replaceChildren(n),kq=e;return}let n=[...e.ready,...e.noReviewNeeded].find(e=>e.key===Tq&&e.status===`ready`);if(n){let e=`ready:${cq(n)}`,t=GJ(n);if(kq===e)return;Cq.replaceChildren(t),kq=e;return}let r=e.inReview.find(e=>e.key===Tq);if(r){Fq.reset(),Cq.replaceChildren(qJ(r)),kq=`inReview:${r.key}`;return}let i=e.queued.find(e=>e.key===Tq);if(i){let t=`queued:${i.key}:${e.inReview.length}`;if(kq===t)return;Cq.replaceChildren(KJ(i,e.inReview.length)),kq=t;return}let a=[...e.noReviewNeeded,...e.attention,...e.posted,...e.discarded].find(e=>e.key===Tq);a&&(Cq.replaceChildren(QJ(a)),kq=`${a.status}:${a.key}`)}function eY(){let e=j(`p`,`pr-empty`,rq(_q));return _q&&!_q.configured&&e.append(` `,xp(FG,IG,`Open Team review settings`)),e}function tY(){let e=iq(_q);return e?[j(`p`,`my-pr-note`,e)]:[]}function nY(e){for(let t of[...Rq.keys()])e.has(t)||Bq.has(t)||Rq.delete(t);let t=new Set(_q?.drafts.filter(e=>NK(e.status)).map(e=>e.key)??[]);for(let e of zq.keys())t.has(e)||Bq.has(e)||zq.delete(e)}function rY(){if(!vq||!yq||xq?.isConnected)return;let e=qB({queueLabel:`Review queue`,scopeTabs:yq,resizerLabel:`Resize review queue`});xq=e.queue,Oq=j(`p`,`pr-action-status pr-action-notice`),Oq.setAttribute(`role`,`status`),Oq.setAttribute(`aria-live`,`polite`),Cq=j(`div`,`pr-detail-body`),e.detail.append(Oq,Cq),fJ(Dq),bq&&e.foot.append(bq.control),vq.replaceChildren(e.columns),kq=null,Sq=null}function iY(e){if(!e)return;e.querySelector(`.pr-team-chip`)?.remove();let t=_q?.team;if(!t)return;let n=j(`span`,`pr-team-chip`);n.append(lr({login:t.slug,url:t.avatarUrl,cssPx:16}),j(`span`,null,t.name)),e.insertBefore(n,e.querySelector(`.pr-queue-toggle`))}function aY(){let e=document.activeElement;return!(e instanceof HTMLElement)||!xq?.contains(e)?null:e.dataset.reviewKey??null}function oY(e){e&&oJ(e)?.focus({preventScroll:!0})}function sY(){if(!vq)return;let e=aY(),t=GG(_q);if(nY(new Set([...t.ready,...t.noReviewNeeded].map(e=>e.key))),Iq.reset(),!_q?.configured||!oK(t)&&Eq===null){Pq.reset(),Fq.reset();let e=GB(yq);iY(e),vq.replaceChildren(e,...bq?[bq.notice]:[],...tY(),eY(),KB(bq?.control??null)),bq?.update(_q),xq=null,Sq=null,Cq=null,Oq=null,wq=null,kq=null;return}if(rY(),!xq)return;iY(vq.querySelector(`.pr-queue-head`)),Tq=lK(t,Tq,Eq!==null);let n=jG(t),r=JSON.stringify([t,n,Tq,iq(_q)]);if(r===Sq){bq?.update(_q),$J(t),Qq(vq);return}Sq=r,Pq.reset();let i=[],a=DG(t);a&&i.push(uJ({title:`All caught up`,detail:a})),t.ready.length&&i.push(pJ(`Ready`,t.ready,`ready`,n)),t.inReview.length&&(wq=pJ(`In review`,t.inReview,`inReview`,n),i.push(wq)),t.queued.length&&i.push(pJ(`Queued`,t.queued,`queued`,n)),t.noReviewNeeded.length&&i.push(pJ(`Already reviewed`,t.noReviewNeeded,`settled`,n)),t.handReview.length&&i.push(lJ(t.handReview,n)),t.attention.length&&i.push(pJ(`Needs attention`,t.attention,`attention`,n)),t.posted.length&&i.push(pJ(`Waiting on author`,t.posted,`posted`,n)),t.discarded.length&&i.push(pJ(`Not mine`,t.discarded,`discarded`,n)),xq.replaceChildren(...bq?[bq.notice]:[],...tY(),...i),bq?.update(_q),oY(e),$J(t),Qq(vq)}function cY(e){e!==Vq&&(Vq=e,mc(e))}function lY(e){e!==Hq&&(Hq=e,gc(e))}function uY(){if(!_q)return;let e=sq({readyEntries:aq(_q),acknowledged:Vq,unseen:Hq,isLooking:!vr(vq)});cY(e.acknowledged),lY(e.unseen),Uq=new Set(e.unseen.split(`|`).filter(Boolean)),jq?.(e.isShown);for(let t of document.querySelectorAll(`.pr-scope-tab[data-scope="team"] .tab-activity`))t.classList.toggle(`active`,e.isShown)}function dY(){_q&&(cY(oq(_q)),uY())}function fY(e){jq=e,uY()}function pY(e,t,n){return Mq=n?.openTerminal??Mq,vq||(yq=t,vq=j(`div`,`pr-content`),e.append(vq),bq=jW(`team-review`,vq),Pq.ensure(),Fq.ensure(),Iq.ensure(),sY(),vq)}function mY(e){let t=Ue.safeParse(e);if(!t.success)return;let n=_q;gq=t.data,_q=oG(gq,Hn),uY(),!(_q&&uq(n,_q)&&hY())&&sY()}function hY(){if(!_q||!wq?.isConnected)return!1;Pq.reset(),Iq.reset();let e=aY(),t=GG(_q),n=pJ(`In review`,t.inReview,`inReview`,jG(t));return wq.replaceWith(n),wq=n,oY(e),t.inReview.some(e=>e.key===Tq)&&$J(t),Qq(vq),!0}function gY(e){let t=e.key;if(!t)return;let n=Nq.get(t);n&&n.requestId===e.requestId&&(!e.ok||!e.sessionId?_J(t,e.error||`Could not open a session.`):(window.clearTimeout(n.timer),Nq.delete(t),gJ(t,``,null),Mq?.(e.sessionId)))}function _Y(e){if(e)return;for(let[e,t]of Nq)t.requestId&&_J(e,G);let t=[...Bq.values()];Bq.clear();for(let e of t)window.clearTimeout(e.timer),e.settle?.(!1,pq)}function vY(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.key!=`string`)return;let n=Bq.get(t.key);if(!n||n.requestId!==t.requestId)return;if(window.clearTimeout(n.timer),Bq.delete(t.key),n.action===`resolve-thread`){n.settle?.(t.ok===!0,typeof t.error==`string`?t.error:tq(n.action)),zq.delete(t.key),kq=null,t.ok===!0&&sY();return}let r=(n.origin===`ready`?Rq:zq).get(t.key);if(t.ok===!0){n.origin===`other`&&zq.delete(t.key);let e=AG({action:n.action,pullRequest:n.pullRequest,warning:typeof t.warning==`string`?t.warning:``,isActedSelected:Tq===t.key});if((r?.settle??n.settle)?.(!0,e.statusText),(e.notice||e.shouldAdvance)&&fJ(e.notice),!e.shouldAdvance)return;Tq=cK({capturedOrder:n.capturedOrder,actedKey:t.key,groups:GG(_q)}),Tq===null&&(Eq={actedKey:t.key}),sY()}else(r?.settle??n.settle)?.(!1,typeof t.error==`string`&&t.error?t.error:`The action failed.`)}Un(()=>{_q=oG(gq,Hn),uY(),sY()});function yY(e,t){let n=document.createElement(`div`);n.className=`pr-scope-tabs`,n.setAttribute(`role`,`tablist`),n.setAttribute(`aria-label`,`Reviews scope`);let r=[`team`,`mine`];for(let i of r){let a=document.createElement(`button`);if(a.className=`pr-scope-tab`,a.type=`button`,a.dataset.scope=i,a.setAttribute(`role`,`tab`),a.setAttribute(`aria-selected`,String(i===e)),a.tabIndex=i===e?0:-1,a.textContent=i===`team`?`Team`:`Mine`,i===`team`){let e=document.createElement(`span`);e.className=`tab-activity`,e.setAttribute(`aria-hidden`,`true`),a.append(e)}a.addEventListener(`click`,()=>t(i,!1)),a.addEventListener(`keydown`,e=>{e.key===`ArrowLeft`?(e.preventDefault(),t(r[(r.indexOf(i)+r.length-1)%r.length],!0)):e.key===`ArrowRight`&&(e.preventDefault(),t(r[(r.indexOf(i)+1)%r.length],!0))}),n.append(a)}return n}var bY=null;function xY(e){return bY?.(e)??!1}function SY(){tc()===`team`&&dY()}function CY(e,t){let n=(e,t)=>{if(s(e),SY(),!t)return;let n=(e===`team`?r:i).querySelector(`[aria-selected="true"]`);n&&n.getClientRects().length>0?n.focus():(e===`team`?a:o).querySelector(`.pr-queue-toggle`)?.focus()},r=yY(`team`,n),i=yY(`mine`,n),a=document.createElement(`div`);a.className=`pr-mode-root`;let o=document.createElement(`div`);o.className=`pr-mode-root`,e.append(a,o),pY(a,r,t),XW(o,i,t);function s(e){WB(),a.hidden=e!==`team`,o.hidden=e!==`mine`,nc(e)}bY=e=>{let n=qW(e),r=n??aJ(e);return!r||!t?.openReviews()?!1:(s(n?`mine`:`team`),r.click(),r.focus({preventScroll:!0}),r.scrollIntoView({block:`nearest`}),SY(),!0)},s(tc())}var wY={OPEN:0,MERGED:1,CLOSED:2};function TY(e){return e?wY[e.state]:wY.OPEN}function EY(e,t){let n=`${e.repo}#${e.number}`,r=`#${e.number}`;if(!t)return{key:n,text:r,url:e.url,hoverText:e.repo,look:null,tier:Mh(void 0)};let i=MU(t.stage);return{key:n,text:r,url:t.url,hoverText:`${e.repo}: ${t.title} (${jU(t.stage)})`,look:{icon:NU(t.stage),tone:i},tier:Mh(i)}}function DY(e,t){let n=e.map(e=>{let n=t(In(e));return{link:e,pr:n?pU(n):void 0}});return n.sort((e,t)=>TY(e.pr)-TY(t.pr)||t.link.linkedAt-e.link.linkedAt),n.map(({link:e,pr:t})=>EY(e,t))}var OY=new Map;function kY(e){return document.querySelectorAll(`[data-pr-chips-for="${CSS.escape(e)}"]`)}function AY(e){return DY(OY.get(e)??[],Hn).map(e=>({...e,className:`session-pr-chip`,linkUrl:e.url,ariaLabel:`Show pull request ${e.key} in Reviews`,hoverText:`${e.hoverText}. Show in Reviews; Cmd/Ctrl-click opens GitHub`,onActivate:()=>{xY(e.key)||sg(e.url)}}))}function jY(e,t){let n=rv(e,e),r=j(`button`,`session-pr-chip-unlink`);r.append(d_(o_)),r.type=`button`,r.title=`Unlink ${e.key} from this session`,r.setAttribute(`aria-label`,`Unlink pull request ${e.key}`),r.addEventListener(`click`,n=>{n.stopPropagation(),n.preventDefault(),Zd({title:`Unlink pull request`,message:`Unlink ${e.key} from this session? Its checks and reviews stop showing here until you link it again.`,confirmLabel:`Unlink`,danger:!0,onConfirm:()=>{Wv(t,{type:`unlink-session-pr`,id:t,key:e.key})}})});let i=j(`span`,`session-pr-chip-item`);return i.append(n,r),i}function MY(e,t){e.dataset.prChipsFor=t,cv(e,AY(t),e=>jY(e,t))}function NY(e){for(let t of e){let e=t.dataset.prChipsFor;e&&MY(t,e)}hv()}function PY(e,t){let n=tt.shape.links.safeParse(t??[]);OY.set(e,n.success?n.data:[]),NY(kY(e)),KW(OY)}function FY(e){OY.delete(e),KW(OY)}Un(()=>NY(document.querySelectorAll(`[data-pr-chips-for]`)));var IY=null,LY=new Set;function RY(){IY?.setAttribute(`aria-pressed`,String(!js()))}function zY(e){Ms(e),RY();for(let t of LY)t(e)}function BY(e){LY.add(e)}function VY(e){IY=e,RY(),e.addEventListener(`click`,()=>zY(!js()))}var HY={mine:`Mine`,run:`Run`,cancel:`Cancel`},UY={mine:`Mining merged pull requests.`,run:`Starting the run.`,cancel:`Cancelling the run.`},WY=null,GY=null,KY=null,qY=!0,JY=new Map,YY=new Map;function XY(e){return e===null?`n/a`:`${Math.round(e*100)}%`}function ZY(e){if(e===null)return`n/a`;let t=Math.round(e*100);return t>0?`+${t}`:String(t)}function QY(e,t){KY?.({type:`benchmark-action`,requestId:ud(`benchmark`),suiteId:e,action:t})===!0?(JY.set(e,t),YY.set(e,UY[t]),iX()):(YY.set(e,G),iX())}function $Y(e,t,n){let r=j(`button`,`bench-action-button`,HY[t]);return r.type=`button`,r.disabled=n,r.addEventListener(`click`,()=>QY(e.id,t)),r}function eX(e){let t=GY?.inFlight;if(!t||t.suiteId!==e.id)return``;let n=t.caseId?`case ${t.caseId}, `:``;return`Cell ${t.cellIndex+1} of ${t.cellCount}: ${n}arm ${t.armId}, trial ${t.trial}, ${t.phase}.`}function tX(e){let t=j(`td`,`bench-score`,XY(e?.recall??null));return e&&e.invalid>0&&(t.title=`${e.invalid} invalid or failed cell(s)`),e&&e.degraded>0&&(t.dataset.degraded=`true`),t}function nX(e){let t=e.armIds.filter(t=>t!==e.baselineArm),n=j(`table`,`bench-table`),r=j(`tr`);r.append(j(`th`,null,`Case`),...e.armIds.map(t=>j(`th`,null,t===e.baselineArm?`${t} (baseline)`:t))),r.append(...t.map(e=>j(`th`,null,`${e} vs baseline`))),n.append(r);for(let r of e.rows){let i=j(`tr`);i.append(j(`td`,`bench-case`,r.caseId),...e.armIds.map(e=>tX(r.arms[e]))),i.append(...t.map(e=>j(`td`,`bench-delta`,ZY(r.deltaVsBaseline[e]??null)))),n.append(i)}let i=[...new Set(e.armIds.flatMap(t=>Object.keys(e.totals[t]?.recallByTag??{})))].sort(),a=j(`tr`,`bench-total`);a.append(j(`td`,`bench-case`,`Paired recall`),...e.armIds.map(t=>tX(e.totals[t]))),n.append(a);for(let t of i){let r=j(`tr`,`bench-total`);r.append(j(`td`,`bench-case`,`Recall, ${t}`),...e.armIds.map(n=>j(`td`,`bench-score`,XY(e.totals[n]?.recallByTag[t]??null)))),n.append(r)}return n}function rX(e){let t=j(`div`,`bench-suite`),n=GY?.inFlight?.suiteId===e.id,r=!!GY?.inFlight&&!n,i=JY.has(e.id)||!qY,a=j(`div`,`bench-summary`);a.append(j(`span`,`bench-suite-title`,e.title),gr(`bench`,e.caseCount===1?`case`:`cases`,String(e.caseCount)),gr(`bench`,e.candidateCount===1?`candidate`:`candidates`,String(e.candidateCount)),gr(`bench`,`arms`,String(e.armIds.length))),t.append(a);let o=j(`div`,`bench-controls`),s=GY?.configured===!0&&e.error===null;o.append($Y(e,`mine`,!s||i||n),$Y(e,`run`,!s||i||n||r||e.caseCount===0),$Y(e,`cancel`,i||!n));let c=j(`span`,`bench-status`,(qY?``:`Not connected to the server. Reconnecting.`)||eX(e)||YY.get(e.id)||``);if(c.setAttribute(`role`,`status`),o.append(c),t.append(o),e.error)return t.append(j(`p`,`bench-error`,e.error)),t;let l=e.latestReport;return l?(t.append(j(`p`,`bench-run-line`,`Latest run ${l.runId}: ${l.status}. Only cases every arm scored count toward paired recall.`)),l.rows.length>0&&t.append(nX(l)),t):(t.append(j(`p`,`bench-empty`,e.caseCount===0?`Move approved candidates into the cases folder, then choose Run.`:`No run yet.`)),t)}function iX(){if(!WY)return;WY.textContent=``;let e=hr(`bench`,`Benchmarks`,`Suites from the benchmarks folder of the Glimmervoid home, one run at a time.`);if(WY.append(e),!GY)WY.append(j(`p`,`bench-empty`,`Waiting for the server.`));else if(!GY.configured)WY.append(j(`p`,`bench-empty`,GY.reason||`Benchmarks are off.`));else if(GY.suites.length===0)WY.append(j(`p`,`bench-empty`,`No suites yet. Create a folder holding suite.json under benchmarks in the Glimmervoid home.`));else for(let e of GY.suites)WY.append(rX(e))}function aX(e){KY=e}function oX(e){return WY||(WY=j(`div`,`bench-content`),e.append(WY),iX(),WY)}function sX(e){if(qY=e,!e){for(let e of JY.keys())YY.delete(e);JY.clear()}iX()}function cX(e){GY=e,iX()}function lX(e){JY.delete(e.suiteId);let t=GY?.suites.find(t=>t.id===e.suiteId)?.candidateCount??0,n={mine:`Mining finished. ${t} candidate${t===1?``:`s`} awaiting approval in the candidates folder.`,run:`Run ${e.runId??``} started.`,cancel:`Run cancelled.`};YY.set(e.suiteId,e.ok?n[e.action]:e.error||`The server refused the action.`),iX()}function uX(e){return e?e.configured?`No open issues.`:e.reason??`Loading issues.`:`Loading issues.`}function dX(e,t){return t===`all`||e.sources.includes(t)}function fX(e){return{all:e.length,me:e.filter(e=>dX(e,`me`)).length,team:e.filter(e=>dX(e,`team`)).length,project:e.filter(e=>dX(e,`project`)).length}}function pX(e,t,n){let r=t.query.trim().toLowerCase().split(/\s+/).filter(Boolean),i=e.filter(e=>{if(!dX(e,t.scope)||t.repo&&e.repo!==t.repo||t.label&&!e.labels.includes(t.label)||t.hasSession&&(!e.sessionId||!n.has(e.sessionId))||t.hasPr&&e.pullRequests.length===0||t.isUnassignedOnly&&e.assignees.length>0)return!1;let i=[e.title,`#${e.number}`,e.repo,e.author,...e.labels,...e.assignees,...e.teams].join(` `).toLowerCase();return r.every(e=>i.includes(e))}),a=e=>Date.parse(e)||0,o=e=>t.sort===`comments`?e.comments:t.sort===`created`?a(e.createdAt):a(e.updatedAt);return i.sort((e,t)=>o(t)-o(e)||e.key.localeCompare(t.key))}function mX(e){let t=new Map;for(let n of e){let e=t.get(n.repo)??[];e.push(n),t.set(n.repo,e)}return t}function hX(e){return{repos:[...new Set(e.map(e=>e.repo))].sort(),labels:[...new Set(e.flatMap(e=>e.labels))].sort()}}function gX(e){let t=[e.query.trim()&&`search "${e.query.trim()}"`,e.repo,e.label,e.hasSession&&`has session`,e.hasPr&&`has PR`,e.isUnassignedOnly&&`unassigned`].filter(Boolean);return t.length===0?``:`Filtered by ${t.join(`, `)}.`}function _X(e,t){let n=typeof e==`number`?e:Date.parse(e);if(!Number.isFinite(n))return`unknown`;let r=Math.round(Math.max(0,t-n)/6e4);if(r<1)return`now`;if(r<60)return`${r}m`;let i=Math.round(r/60);return i<48?`${i}h`:`${Math.round(i/24)}d`}function vX(e,t){let n=_X(e,t);return n===`now`?`just now`:n===`unknown`?`at an unknown time`:`${n} ago`}function yX(e,t){let n=ro(e.url),r=n?t(n.toLowerCase()):void 0;return r?Lr(r):e.state}var bX=45e3,xX=`The server did not answer within ${bX/1e3} s.`,SX=`Select the issue to load its description.`,CX=[{id:`all`,label:`All`},{id:`me`,label:`Mine`},{id:`team`,label:`Team`},{id:`project`,label:`Projects`}],wX={scope:`all`,repo:``,label:``,sort:`updated`,query:``,hasSession:!1,hasPr:!1,isUnassignedOnly:!1},TX=null,EX=null,DX=null,OX=null,kX=null,AX=null,jX=null,MX=null,NX=null,PX=null,FX=new Map,IX=!1,LX=null,RX=null,zX=new Map,BX=new Map,VX=new Map,HX=new Map,UX=new Map;function WX(e){return`${e.key}:${e.updatedAt}`}function GX(e){return e.sessionId?P.get(e.sessionId):void 0}function KX(e,t,n){let r=GX(t),i=r?.currentState??A.DORMANT,a=pr(i,r?.awaitingBackgroundTasks),o=r?`Session: ${a.label}`:`No session yet`,s=n?a.label:``;if(e.dataset.state===i&&e.title===o&&e.dataset.icon===a.icon&&e.textContent===s)return;e.dataset.state=i,e.dataset.icon=a.icon,e.title=o,e.setAttribute(`aria-label`,o);let c=j(`span`,`issues-state-icon`);ev(c,a.icon),e.replaceChildren(c),n&&e.append(s)}function qX(e,t=!1){let n=j(`span`,t?`issues-state`:`pr-queue-glyph issues-state`);return KX(n,e,t),n}function JX(e){let t=GX(e);return t?Sr(t):`none yet`}function YX(e){return[...zX.values()].some(t=>t.issueKey===e.key)}function XX(e){let t=zX.get(e);t&&(zX.delete(e),BX.set(t.issueKey,xX),aZ())}function ZX(e){let t=zX.get(e);return t?(clearTimeout(t.timeoutHandle),zX.delete(e),t):null}function QX(e){let t=WX(e);if(HX.has(t)||[...VX.values()].some(e=>e.cacheKey===t))return;let n=ud(`issue-detail`);UX.delete(t),RX?.({type:`issue-detail`,requestId:n,repo:e.repo,issueNumber:e.number})?VX.set(n,{cacheKey:t,timeoutHandle:setTimeout(()=>{VX.delete(n),UX.set(t,`${xX} ${SX}`),aZ()},bX)}):UX.set(t,`${G} ${SX}`)}function $X(e){let t=e.projectId;if(!t||GX(e)||YX(e))return;let n=ud(`open-issue-session`);RX?.({type:`open-issue-session`,requestId:n,projectId:t,repo:e.repo,issueNumber:e.number})?(zX.set(n,{issueKey:e.key,issueNumber:e.number,timeoutHandle:setTimeout(()=>XX(n),bX)}),BX.set(e.key,`Opening session.`),aZ()):(BX.set(e.key,G),aZ())}function eZ(e){let t=j(`button`,`pr-queue-row issue-row`);t.type=`button`,t.dataset.issueKey=e.key,t.setAttribute(`aria-current`,String(e.key===NX));let n=j(`span`,`pr-queue-top`);n.append(j(`span`,`pr-queue-ref`,`#${e.number}`),j(`span`,`pr-queue-title`,e.title||`Untitled issue`));let r=j(`span`,`pr-queue-bottom`);e.sources.includes(`me`)&&r.append(j(`span`,`issues-why`,`you`)),r.append(j(`span`,`issues-row-labels`,e.labels.join(`, `)));for(let t of e.pullRequests){let e=yX(t,Hn),n=j(`span`,`issues-row-pr`,`PR #${t.number} ${e}`);n.dataset.prState=e,r.append(n)}let i=j(`span`,`pr-queue-elapsed`,_X(e.updatedAt,Date.now()));return i.dataset.issueAge=e.updatedAt,r.append(i),t.append(qX(e),n,r),t.addEventListener(`click`,()=>{dZ(`select`),NX=e.key,TX&&(TX.dataset.detailOpen=`true`),QX(e),sZ(),OX&&(OX.scrollTop=0)}),t}function tZ(e,t,n){let r=j(`dd`);r.append(...n),e.append(j(`dt`,null,t),r)}function nZ(e){let t=j(`footer`,`pr-footer issues-detail-footer`),n=GX(e);if(n&&e.sessionId){let n=e.sessionId,r=j(`button`,`pr-action`,`Go to session`);r.type=`button`,r.addEventListener(`click`,()=>{dZ(`go-to-session`),Vv(n)}),t.append(r)}if(e.projectId&&!n){let n=j(`button`,`pr-action`,`Open session`);n.type=`button`,n.disabled=YX(e),n.addEventListener(`click`,()=>$X(e)),t.append(n)}t.append(dr(`pr-action pr-action-ghost`,`View on GitHub`,e.url));let r=BX.get(e.key),i=e.projectId?``:`Add a project for ${e.repo} in Settings to open sessions from here.`,a=j(`span`,`pr-action-status issue-open-status`,r??i);return a.setAttribute(`role`,`status`),YX(e)&&a.prepend(j(`span`,`issues-spinner`)),t.append(a),t}function rZ(e,t){let n=j(`span`,null,vX(e,t));return n.dataset.issueAgo=e,n}function iZ(){let e=OX?.querySelector(`.issues-detail`),t=NX?FX.get(NX):void 0;if(!e||!t)return;let n=e.querySelector(`.issues-facts .issues-state`);n&&KX(n,t,!0);let r=e.querySelector(`.issues-session-name`),i=JX(t);r&&r.textContent!==i&&(r.textContent=i);let a=String(!!GX(t));e.dataset.hasLiveSession!==a&&(e.dataset.hasLiveSession=a,e.querySelector(`.issues-detail-footer`)?.replaceWith(nZ(t)))}function aZ(){if(!OX)return;let e=PX?.issues.find(e=>e.key===NX);if(!e){OX.replaceChildren(j(`p`,`pr-empty`,`Pick an issue from the queue.`));return}let t=j(`article`,`pr-detail issues-detail`),n=j(`button`,`pr-action pr-action-ghost issues-back`,`Back to issues`);n.type=`button`,n.addEventListener(`click`,()=>{dZ(`back`),TX&&(TX.dataset.detailOpen=`false`),[...DX?.querySelectorAll(`[data-issue-key]`)??[]].find(e=>e.dataset.issueKey===NX)?.focus({preventScroll:!0})});let r=j(`header`,`pr-detail-heading`),i=j(`div`,`pr-detail-title`);i.append(dr(`pr-link`,`${e.repo}#${e.number}`,e.url),j(`h2`,null,e.title||`Untitled issue`));let a=Date.now(),o=j(`div`,`pr-detail-meta`),s=j(`span`,null,`opened by ${e.author||`unknown`} `),c=j(`span`,null,`updated `);s.append(rZ(e.createdAt,a)),c.append(rZ(e.updatedAt,a)),o.append(s,c,j(`span`,null,`${e.comments} comments`)),e.sources.includes(`me`)&&o.append(j(`span`,`issues-why`,`assigned to you`));for(let t of e.teams)o.append(j(`span`,null,`mentions ${t}`));r.append(i,o);let l=j(`dl`,`issues-facts`);tZ(l,`Repository`,[e.repo]),tZ(l,`Labels`,[e.labels.join(`, `)||`none`]),tZ(l,`Assignees`,[e.assignees.join(`, `)||`unassigned`]),t.dataset.hasLiveSession=String(!!GX(e)),tZ(l,`Session`,[qX(e,!0),j(`span`,`issues-session-name`,JX(e))]);let u=e.pullRequests.flatMap(e=>{let t=yX(e,Hn),n=j(`span`,`issues-pr-state`,t);return n.dataset.prState=t,[n,dr(`issues-inline-link`,`#${e.number} ${e.title}`,e.url)]});tZ(l,`Pull request`,u.length>0?u:[`none linked`]);let d=j(`section`,`issues-body-section`),f=WX(e),p=j(`div`,`issue-body`,HX.get(f)??UX.get(f)??`Loading description.`);HX.get(f)===``&&(p.textContent=`No description.`),p.setAttribute(`role`,`status`),d.append(j(`h3`,`pr-section-heading`,`Description`),p),t.append(n,r,l,d,nZ(e)),OX.replaceChildren(t)}function oZ(e,t,n,r){if(!e)return;let i=r&&!n.includes(r)?[...n,r].sort():n;e.replaceChildren(...[``,...i].map(e=>{let n=j(`option`,null,e||t);return n.value=e,n})),e.value=r}function sZ(){IX=!1,cZ(),aZ()}function cZ(){if(!TX||!DX||!EX)return;let e=PX?.issues??[],t=fX(e);for(let e of CX){EX.querySelector(`[data-scope="${e.id}"]`)?.setAttribute(`aria-selected`,String(e.id===wX.scope));let n=EX.querySelector(`[data-scope-count="${e.id}"]`);n&&(n.textContent=String(t[e.id]))}let n=hX(e);oZ(AX,`All repos`,n.repos,wX.repo),oZ(jX,`All labels`,n.labels,wX.label),kX&&(kX.textContent=gX(wX));let r=pX(e,wX,new Set(P.keys())),i=document.activeElement instanceof HTMLElement&&DX.contains(document.activeElement)?document.activeElement.dataset.issueKey:null,a=[...mX(r)].map(([e,t])=>{let n=j(`section`,`pr-queue-section`),r=j(`h3`,`pr-section-heading issues-repo-heading`,e);return t.some(e=>e.projectId)||r.append(j(`span`,`issues-repo-note`,`view only`)),r.append(j(`span`,`issues-repo-count`,String(t.length))),n.append(r,...t.map(eZ)),n});DX.replaceChildren(...a),r.length===0&&DX.append(j(`p`,`pr-empty`,e.length>0?`No open issues match these filters. Clear the search or pick All.`:uX(PX))),i&&[...DX.querySelectorAll(`[data-issue-key]`)].find(e=>e.dataset.issueKey===i)?.focus({preventScroll:!0}),NX&&!e.some(e=>e.key===NX)&&(NX=null,TX.dataset.detailOpen=`false`),LX?.update(PX),uZ()}function lZ(){let e=j(`div`,`issues-filters`),t=j(`div`,`issues-search-row`),n=j(`input`,`issues-search`);n.type=`search`,n.placeholder=`Search issues`,n.autocomplete=`off`,n.setAttribute(`aria-label`,`Search issues`),n.addEventListener(`input`,()=>{wX.query=n.value,sZ()}),n.addEventListener(`change`,()=>dZ(`search`));let r=j(`button`,`pr-action pr-action-ghost`,`Filters`);r.type=`button`,r.setAttribute(`aria-expanded`,`false`),r.setAttribute(`aria-controls`,`issues-filters-panel`);let i=j(`div`,`issues-filters-panel`);i.id=`issues-filters-panel`,i.hidden=!0,r.addEventListener(`click`,()=>{dZ(`filters-toggle`),i.hidden=!i.hidden,r.setAttribute(`aria-expanded`,String(!i.hidden))}),t.append(n,r);let a=j(`div`,`issues-filter-row`);function o(e){let t=j(`select`,`issues-field`);return t.setAttribute(`aria-label`,e),a.append(t),t}AX=o(`Repository`),AX.addEventListener(`change`,()=>{dZ(`filter`),wX.repo=AX?.value??``,sZ()}),jX=o(`Label`),jX.addEventListener(`change`,()=>{dZ(`filter`),wX.label=jX?.value??``,sZ()});let s=o(`Sort`);for(let[e,t]of[[`updated`,`Updated`],[`created`,`Newest`],[`comments`,`Most discussed`]]){let n=j(`option`,null,t);n.value=e??``,s.append(n)}s.addEventListener(`change`,()=>{dZ(`filter`),wX.sort=s.value,sZ()});let c=j(`div`,`issues-filter-row`);for(let[e,t]of[[`hasSession`,`Has session`],[`hasPr`,`Has PR`],[`isUnassignedOnly`,`Unassigned`]]){let n=j(`label`,`issues-toggle`),r=j(`input`);r.type=`checkbox`,r.addEventListener(`change`,()=>{dZ(`filter`),wX[e]=r.checked,sZ()}),n.append(r,` ${t}`),c.append(n)}return kX=j(`span`,`issues-filter-summary`),kX.setAttribute(`role`,`status`),i.append(a,c),e.append(t,kX,i),e}function uZ(){if(!TX||TX.closest(`[hidden]`)||document.hidden)return;let e=Date.now();MX&&(MX.textContent=PX?.lastSyncAt?`Synced ${vX(PX.lastSyncAt,e)}.`:`Not synced yet.`);for(let t of TX.querySelectorAll(`[data-issue-age]`))t.textContent=_X(t.dataset.issueAge??``,e);for(let t of TX.querySelectorAll(`[data-issue-ago]`))t.textContent=vX(t.dataset.issueAgo??``,e)}function dZ(e){RX?.({type:`dashboard-telemetry`,event:`operator_action`,properties:{surface:`issues`,action:e}})}function fZ(e){RX=e}function pZ(e){if(TX)return TX;TX=j(`div`,`issues-content`),TX.dataset.detailOpen=`false`,e.append(TX),LX=jW(`issues`,TX);let t=j(`div`,`pr-columns issues-columns`),n=j(`section`,`pr-queue-pane`);n.setAttribute(`aria-label`,`Issue queue`),EX=j(`div`,`pr-scope-tabs issues-scope-tabs`),EX.setAttribute(`role`,`tablist`),EX.setAttribute(`aria-label`,`Issue scope`);for(let e of CX){let t=j(`span`,`issues-scope`);t.setAttribute(`role`,`presentation`);let n=j(`button`,`pr-scope-tab`,e.label);n.type=`button`,n.dataset.scope=e.id,n.setAttribute(`role`,`tab`),n.addEventListener(`click`,()=>{dZ(`scope`),wX.scope=e.id,sZ()});let r=j(`span`,`issues-scope-count`);r.dataset.scopeCount=e.id,t.append(n,r),EX.append(t)}DX=j(`nav`,`pr-queue`),DX.setAttribute(`aria-label`,`Issues`);let r=KB(LX.control);return MX=j(`span`,`issues-sync`),MX.setAttribute(`role`,`status`),r.prepend(MX),r.append(LX.notice),n.append(GB(EX),lZ(),DX,r),OX=j(`section`,`pr-detail-host`),OX.setAttribute(`aria-label`,`Issue detail`),t.append(n,OX),TX.append(t),window.setInterval(uZ,3e4),sZ(),TX}function mZ(){IX&&hZ(),uZ()}function hZ(){if(vr(TX))IX=!0;else if(IX=!1,iZ(),wX.hasSession)cZ();else for(let e of DX?.querySelectorAll(`[data-issue-key]`)??[]){let t=FX.get(e.dataset.issueKey??``),n=e.querySelector(`.issues-state`);t&&n&&KX(n,t,!1)}}function gZ(e){if(!e){for(let e of zX.values())clearTimeout(e.timeoutHandle),BX.set(e.issueKey,G);zX.clear();for(let e of VX.values())clearTimeout(e.timeoutHandle),UX.set(e.cacheKey,`${G} ${SX}`);VX.clear(),sZ()}}function _Z(e){let t=PX?.issues.find(e=>e.key===NX);PX=e,FX=new Map(e.issues.map(e=>[e.key,e]));let n=e.issues.find(e=>e.key===NX);n&&n.updatedAt!==t?.updatedAt&&QX(n),sZ()}function vZ(e){let t=VX.get(e.requestId);t&&(clearTimeout(t.timeoutHandle),VX.delete(e.requestId),e.ok&&e.body!==null&&HX.set(t.cacheKey,e.body),(!e.ok||e.body===null)&&UX.set(t.cacheKey,e.error||`Could not load description. Select the issue to try again.`),aZ())}function yZ(e){if(typeof e.requestId!=`string`)return;let t=ZX(e.requestId);if(!t)return;let n=t.issueKey;if(e.ok===!0){let r=typeof e.sessionName==`string`?e.sessionName:`issue #${t.issueNumber}`,i=e.pending===!0?` Prompt queued.`:``,a=e.existing===!0?`already open`:`created`;BX.set(n,`Session "${r}" ${a}.${i}`);let o=PX?.issues.find(e=>e.key===n);o&&typeof e.sessionId==`string`&&(o.sessionId=e.sessionId),sZ();return}let r=typeof e.error==`string`&&e.error?e.error:`Could not open session.`;BX.set(n,r),aZ()}Un(sZ);var bZ=4e3;function xZ({render:e,holdMs:t=bZ,setTimer:n=setTimeout,clearTimer:r=clearTimeout}){let i=new Set,a=!1,o=null;function s(e){(o===null||e)&&(o!==null&&r(o),o=n(c,t))}function c(){o=null,i.size>0?s(!1):a&&(a=!1,e())}return{begin(e){i.add(e)},settle(e){i.delete(e),s(!0)},request(){i.size===0&&o===null?e():(a=!0,s(!1))},_state(){return{pending:i.size,held:a,armed:o!==null}}}}var SZ=null,CZ=null,wZ=null,TZ=null,EZ=`http://www.w3.org/2000/svg`,DZ=xl({getAck:dc,setAck:fc,signature:()=>_u({posthog:SZ}),isLooking:()=>!vr(CZ)}),OZ=xZ({render:bQ}),kZ=new Set,AZ=null,jZ=new Map,MZ=new WeakMap,NZ=`this issue`,PZ=Af(()=>CZ),FZ={spiking:`spiking`,regressed:`regressed`,worsened:`worsened`,new:`new`,quiet:`quiet`},IZ=[{columnId:`stripe`,headText:``,cellClass:`radar-stripe`,track:`auto`,phoneTrack:`auto`,isMagnitude:!1,startsActionCluster:!1},{columnId:`change`,headText:``,cellClass:`radar-change`,track:`auto`,phoneTrack:`minmax(68px, auto)`,isMagnitude:!1,startsActionCluster:!1},{columnId:`copy`,headText:``,cellClass:`radar-issue-copy`,track:`minmax(0, 1fr)`,phoneTrack:`minmax(0, 1fr)`,isMagnitude:!1,startsActionCluster:!0},{columnId:`occurrences`,headText:`Occurrences`,cellClass:`radar-metric`,track:`max-content`,phoneTrack:``,isMagnitude:!0,startsActionCluster:!1},{columnId:`users`,headText:`Users`,cellClass:`radar-metric`,track:`max-content`,phoneTrack:``,isMagnitude:!0,startsActionCluster:!1},{columnId:`trend`,headText:`Trend`,cellClass:`radar-issue-trend`,track:`max-content`,phoneTrack:``,isMagnitude:!0,startsActionCluster:!1}],LZ=IZ.map(e=>e.track).join(` `),RZ=IZ.filter(e=>!e.isMagnitude).map(e=>e.phoneTrack).join(` `),zZ=IZ.findIndex(e=>e.startsActionCluster)+1,BZ=3e4;function VZ(e){let t=j(`div`,e);return t.style.setProperty(`--radar-issue-grid`,LZ),t.style.setProperty(`--radar-issue-grid-phone`,RZ),t.style.setProperty(`--radar-issue-actions-start`,String(zZ)),t}function HZ(e,t){let n=j(`span`,`radar-issue-magnitudes`),r=!1;for(let i of IZ){let a=t(i);i.isMagnitude?(r||=(e.append(n),!0),n.append(a)):e.append(a)}}function UZ(e){return Number.isFinite(e)?String(e):`0`}function WZ(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?``:`elapsed ${Df(Date.now()-e)}`}function GZ(e){return typeof e?.issueId==`string`?e.issueId:``}function KZ(e,t){return[String(e??``),String(t??``)].join(`::`)}function qZ(e,t,n){let r=jZ.get(KZ(e,t));if(!r||!r.copy.isConnected)return!1;let i=Pl(n);return i?(r.summary||(r.summary=j(`span`,`radar-issue-summary`),r.copy.insertBefore(r.summary,r.copy.querySelector(`.radar-issue-meta`))),r.summary.textContent=i,!0):(r.summary?.remove(),r.summary=null,!0)}function JZ(e,t,n){let r=GZ(e);if(!r)return;AZ?.dialog.close();let i=Xf({issueTitle:String(e.title||r),projectLabel:n,onOpenReport:()=>XZ(e)});AZ={projectId:String(t??``),issueId:r,dialog:i},i.update(Fl(e))}function YZ(){if(!AZ)return;if(!AZ.dialog.isOpen()){AZ=null;return}let e=Il(SZ,AZ.projectId,AZ.issueId);e&&AZ.dialog.update(Fl(e))}function XZ(e){let t=GZ(e);t&&dd(`get-radar-report`,{issueId:t},{timeoutMs:q}).then(n=>{n.ok?n.found?Yf({issueId:t,issueTitle:String(e.title??``),format:String(n.format??``),content:String(n.content||``)}):Yf({issueId:t,issueTitle:String(e.title??``),message:String(n.message||`Report not found`)}):Yf({issueId:t,issueTitle:String(e.title??``),error:String(n.error||`Could not read report`)})}).catch(n=>{Yf({issueId:t,issueTitle:String(e.title??``),error:wd(n,q)})})}function ZZ(){let e=j(`div`,`radar-issue-actions`),t=j(`span`,`radar-issue-action-status`);t.setAttribute(`role`,`status`),e.append(t);let n=[],r=null,i=()=>{r?.remove(),r=null},a=t=>{i(),r=t,e.append(t)},o=e=>{for(let t of n)t.disabled=e};return{addButton:(r,i,a)=>{let o=j(`button`,`radar-issue-action`,r);return o.type=`button`,o.title=i,o.addEventListener(`click`,e=>{e.stopPropagation(),a()}),n.push(o),e.insertBefore(o,t),o},request:(e,n,r,a,s,c=null)=>{OZ.begin(e),o(!0),i(),t.dataset.tone=`busy`,t.textContent=a;let l=(n,r)=>{o(!1),i(),t.dataset.tone=n,t.textContent=r,OZ.settle(e)};dd(n,r,{timeoutMs:BZ}).then(e=>{e.ok?(l(`ok`,s(e)),c&&c(e)):l(`error`,String(e.error||`Request failed`))}).catch(e=>l(`error`,wd(e,BZ)))},showFollowUp:a,wrap:e}}function QZ(e){let t=j(`button`,`radar-issue-action radar-open-trace`,`Open trace`);return t.type=`button`,t.title=`Open the session trace`,t.addEventListener(`click`,t=>{t.stopPropagation(),yQ(e)}),t}function $Z(e,t,n){let{addButton:r,request:i,showFollowUp:a,wrap:o}=ZZ(),s=(n,r,a,o,s=null)=>i(`${n}:${e.issueId}`,n,{projectId:t,issueId:e.issueId,...r},a,o,s);return e.inFlight&&r(`View investigation`,`Watch the running investigation`,()=>JZ(e,t,n)),!e.inFlight&&e.verdict&&GZ(e)&&r(`Open report`,`Open the investigation report for this issue`,()=>XZ(e)),e.inFlight||r(`Open session`,`Paste an investigation prompt into the mapped project session`,()=>{s(`radar-open-session`,{},`Opening session`,e=>e.pending?`Starting ${String(e.sessionName||`session`)}; the prompt lands when it is up`:`Prompt pasted into ${String(e.sessionName||`the session`)}; press Enter there`,e=>{typeof e.sessionId==`string`&&TZ&&a(QZ(e.sessionId))})}),r(`Resolve`,`Mark this issue resolved in PostHog`,()=>{s(`radar-issue-action`,{action:`resolve`},`Resolving in PostHog`,()=>`Marked resolved`)}),r(`Suppress`,`Suppress this issue in PostHog`,()=>{Zd({title:`Suppress issue`,message:`This marks the issue suppressed in PostHog for everyone on the project.`,confirmLabel:`Suppress`,danger:!0,onConfirm:()=>s(`radar-issue-action`,{action:`suppress`},`Suppressing in PostHog`,()=>`Marked suppressed`)})}),o}function eQ(e){return eh()?NZ:e}function tQ(e){let t=MZ.get(e);t&&(e.title=t())}function nQ(){if(CZ)for(let e of CZ.querySelectorAll(`.radar-issue-reportable`))tQ(e)}nh(nQ);function rQ(e,t,n){e.classList.add(`radar-issue-reportable`),MZ.set(e,t),tQ(e),e.addEventListener(`click`,e=>{e.target instanceof Element&&(e.target.closest(`a, button`)||n())})}function iQ(e,t,n){let r=j(`div`,`radar-issue`);r.dataset.severity=Yl(e.change);let i=j(`span`,`radar-stripe`);i.setAttribute(`aria-hidden`,`true`);let a=j(`span`,`radar-change`,FZ[e.change??``]||String(e.change||`unknown`)),o=dr(`radar-issue-title`,String(e.title||`Untitled issue`),e.url,String(e.title||``)),s=j(`span`,`radar-metric`);s.append(j(`span`,`radar-metric-value`,UZ(e.occurrences)),j(`span`,`radar-metric-label`,`occ`));let c=j(`span`,`radar-metric`);c.append(j(`span`,`radar-metric-value`,UZ(e.users)),j(`span`,`radar-metric-label`,`users`));let l=$l(e.history),u=eu(l,64,16),d=u?document.createElementNS(EZ,`svg`):null;if(d){d.classList.add(`radar-sparkline`),d.setAttribute(`viewBox`,`0 0 64 16`),d.setAttribute(`width`,`64`),d.setAttribute(`height`,`16`),d.setAttribute(`role`,`img`),d.setAttribute(`focusable`,`false`);let e=document.createElementNS(EZ,`title`);e.textContent=nu(l);let t=document.createElementNS(EZ,`polyline`);t.setAttribute(`points`,u),d.append(e,t)}let f=Pl(e),p=j(`span`,`radar-issue-copy`);p.append(o);let m=null;f&&(m=j(`span`,`radar-issue-summary`),m.textContent=f,p.append(m)),jZ.set(KZ(t,e.issueId),{copy:p,summary:m});let h=j(`span`,`radar-issue-meta`),g=Xl(e);if(g!==null){let e=j(`span`,`radar-issue-seen`);e.title=new Date(g).toLocaleString(),PZ.track(e,g,Of),h.append(e)}let _=Zl(e);_&&h.append(j(`span`,`radar-issue-status`,_));let v=String(e.title||e.issueId);if(e.inFlight){let i=j(`span`,`radar-verdict`,`investigating`);i.dataset.verdict=`INVESTIGATING`,h.append(i);let a=typeof e.startedAt==`number`?e.startedAt:null;if(a!==null&&Number.isFinite(a)&&a>0){let e=j(`span`,`radar-issue-elapsed`);PZ.track(e,a,WZ),h.append(e)}GZ(e)&&rQ(r,()=>`Watch the investigation of ${eQ(v)}`,()=>JZ(e,t,n))}if(!e.inFlight&&e.verdict){let t=j(`span`,`radar-verdict`,Vl(e.verdict));t.dataset.verdict=e.verdict,h.append(t),GZ(e)&&rQ(r,()=>`View investigation report for ${eQ(v)}`,()=>XZ(e))}h.childElementCount>0&&p.append(h);let y=j(`span`,`radar-issue-trend`);d&&y.append(d);let b=tu(l);if(b){let e=j(`span`,`radar-delta`,`${b.direction===`up`?`+`:b.direction===`down`?`-`:`=`}${b.percent}%`);e.dataset.direction=b.direction,y.append(e)}let x={stripe:i,change:a,copy:p,occurrences:s,users:c,trend:y};return HZ(r,e=>x[e.columnId]),GZ(e)&&r.append($Z(e,t,n)),r}var aQ=(e,t,n)=>gr(`radar`,e,t,n);function oQ(e){return e.error?`poll failed: ${e.error}`:e.staleMs>0?`stale ${Df(e.staleMs)}`:``}function sQ(e,t,{showHost:n,nameTag:r,nameClass:i,hostClass:a}){let o=j(r,i,su(t));o.title=String(t.name||``),e.append(o);let s=n?cu(t.host):``;s&&e.append(j(`span`,a,s))}function cQ(){let e=VZ(`radar-column-heads`);for(let t of IZ){if(!t.headText){e.append(j(`span`));continue}let n=j(`span`,`radar-column-head`,t.headText);n.dataset.column=t.columnId,e.append(n)}return e}function lQ(e,t){let n=e.project,r=j(`div`,`radar-project`),i=yu(n.issues),a=ru(i),o=j(`div`,`radar-project-head`);sQ(o,n,{showHost:t,nameTag:`h3`,nameClass:`radar-project-name`,hostClass:`radar-project-host`}),r.append(o);let s=j(`div`,`radar-project-summary`);s.append(aQ(a.active===1?`active issue`:`active issues`,UZ(a.active))),s.append(aQ(`spiking`,UZ(a.spiking),a.spiking>0?`crit`:null)),s.append(aQ(`needs you`,UZ(a.needsHuman),a.needsHuman>0?`warn`:null));let c=oQ(e);if(c){let t=j(`span`,`radar-project-alert`,c);t.dataset.tone=e.error?`crit`:`warn`,s.append(t)}if(r.append(s),i.length===0)return r;r.append(cQ());let l=VZ(`radar-issues`);for(let e of i)l.append(iQ(e,n.projectId,su(n)));return r.append(l),r}function uQ(e,t){let n=e.project,r=j(`div`,`radar-quiet-row`),i=j(`span`,`radar-quiet-dot`);return i.setAttribute(`aria-hidden`,`true`),r.append(i),sQ(r,n,{showHost:t,nameTag:`span`,nameClass:`radar-quiet-name`,hostClass:`radar-quiet-host`}),r.append(j(`span`,`radar-quiet-count`,`0 issues`)),r}var dQ=(e,t)=>hr(`radar`,e,t);function fQ(){let e=j(`div`,`radar-issue`);return e.dataset.skeleton=``,HZ(e,e=>j(`span`,e.cellClass)),e}function pQ(){let e=VZ(`radar-issues`);e.setAttribute(`aria-busy`,`true`),e.setAttribute(`aria-label`,`Loading issues`);for(let t=0;t<5;t+=1)e.append(fQ());return e}function mQ(e){return e?.configured===!1?typeof e.reason==`string`&&e.reason.trim()!==``?`Fix it in`:`Switch it on in`:``}function hQ(e,t=`ready`){let n=dQ(`Errors`);if(t===`pending`)return n.append(pQ()),n;if(t===`placeholder`||e.length===0){let e=j(`p`,`radar-unconfigured`,Kl(SZ)),t=xp(`lanes-posthog`,`posthog-enabled`,`PostHog settings`),r=mQ(SZ);return e.append(document.createTextNode(r?` ${r} `:` `),t),n.append(e),n}let r=j(`div`,`radar-global-tick`),i=Number(SZ?.intervalMinutes);PZ.track(r,SZ?.ts,e=>{let t=`polled ${Of(e)}`;return!Number.isFinite(i)||i<=0?t:`${t}, every ${i}m`}),n.append(r);let a=i>0?i*6e4:0,{loud:o,quiet:s}=du(e,Date.now(),{intervalMs:a}),c=lu(e);for(let e of o)n.append(lQ(e,c));if(s.length===0)return n;let l=j(`div`,`radar-quiet`);for(let e of s)l.append(uQ(e,c));return n.append(l),n}function gQ(e){let{addButton:t,request:n,wrap:r}=ZZ();return e.issueId&&t(`Open report`,`Open the investigation report for this issue`,()=>{XZ({issueId:e.issueId,title:e.title})}),t(`Archive`,`Remove this investigation from the inbox`,()=>{n(`archive:${e.id}`,`radar-archive-investigation`,{id:e.id},`Archiving`,()=>`Archived`,()=>kZ.add(e.id))}),r}function _Q(e){let t=j(`div`,`radar-investigation`),n=j(`span`,`radar-verdict`,Vl(e.verdict));n.dataset.verdict=e.verdict;let r=dr(`radar-issue-title`,e.title,e.url),i=j(`span`,`radar-issue-copy`);if(i.append(r),e.summaryLine){let t=j(`span`,`radar-issue-summary`);t.textContent=e.summaryLine,i.append(t)}if(e.prUrl){let t=j(`a`,`radar-investigation-pr`,`fix PR`);t.href=e.prUrl,t.target=`_blank`,t.rel=`noopener`,t.title=e.prUrl,i.append(t)}if(t.append(n),e.mode===`fix`){let e=j(`span`,`radar-verdict`,`fix`);e.dataset.mode=`fix`,t.append(e)}if(t.append(i),e.projectLabel){let n=j(`span`,`radar-investigation-project`);n.textContent=e.projectLabel,t.append(n)}if(e.at>0){let n=j(`span`,`radar-investigation-time`,Of(e.at));n.title=new Date(e.at).toLocaleString(),t.append(n)}return t.append(gQ(e)),t}function vQ(e){let t=dQ(`Investigations`,`completed, not yet archived`),n=j(`div`,`radar-investigations`);for(let t of e)n.append(_Q(t));return t.append(n),t}function yQ(e){TZ&&TZ(e)}function bQ(){if(!CZ)return;CZ.textContent=``,jZ.clear(),PZ.reset();let e=_r(SZ),t=fu(SZ,kZ),n=Jl(SZ,e.length);CZ.append(hQ(e,n)),t.length>0&&CZ.append(vQ(t))}function xQ(){OZ.request()}function SQ(){wZ&&wZ(DZ.refresh())}function CQ(){DZ.acknowledge(),SQ()}function wQ(e){wZ=e,SQ()}function TQ(e){TZ=e}function EQ(e){if(CZ)return CZ;let t=j(`div`,`radar-content`);return e.appendChild(t),CZ=t,PZ.ensure(),bQ(),t}function DQ(e){SZ=e,pu(SZ,kZ),xQ(),SQ(),YZ()}function OQ(e){let t=Il(SZ,e.projectId,e.issueId)?.inFlight===!0;if(!Ll(SZ,e))return;YZ();let n=Il(SZ,e.projectId,e.issueId);t&&qZ(e.projectId,e.issueId,n)||xQ()}function kQ(e){AZ?.dialog.isOpen()&&zl(AZ,e)&&AZ.dialog.update(Rl(e))}function AQ(e){Bl(SZ,e)?(YZ(),xQ(),SQ()):kQ(e)}var jQ=Oh({requestPrefix:`session-setup`,dialogClass:`dialog coherence-journal-drawer session-setup-dialog`,titleText:`Session setup`,unavailableLabel:`Session setup unavailable`,timeoutMs:15e3});function MQ(e){let t=j(`ul`,`session-setup-list`);return t.append(...e.map(e=>j(`li`,null,e))),t}function NQ(e,t){e.replaceChildren();function n(t,n){if(n.length===0)return;let r=hr(`session-setup`,t);r.append(...n),e.append(r)}n(`Model`,t.model?[j(`p`,null,t.model)]:[]),n(`Plugins`,t.plugins.map(e=>{let t=j(`div`,`session-setup-plugin`);return t.append(j(`h3`,null,e.name)),e.skills.length>0&&t.append(j(`p`,`session-setup-label`,`Skills`),MQ(e.skills)),e.agents.length>0&&t.append(j(`p`,`session-setup-label`,`Agents`),MQ(e.agents)),t})),n(`MCP servers`,t.mcpServers.length>0?[MQ(t.mcpServers)]:[]),n(`Hooks`,[...t.hookEvents.map(e=>{let t=j(`p`,`session-setup-hook`);return t.append(j(`span`,null,e.event),j(`span`,`session-setup-label`,`${e.runCount} runs`)),t}),...t.hookCommands.map(e=>j(`pre`,`coherence-command`,e))]),n(`Skills`,t.skills.length>0?[MQ(t.skills)]:[]),n(`Agents`,t.agents.length>0?[MQ(t.agents)]:[])}function PQ(e){let t=j(`p`,`coherence-journal-status`,`Loading session setup`);t.setAttribute(`role`,`status`);let n=j(`div`,`session-setup-sections`);jQ.open({sessionId:e,status:t,body:[t,n],parts:{sections:n},buildRequest:t=>({type:`session-setup`,id:e,requestId:t})})}function FQ(e){let t=jQ.settleResponse(e);if(!t)return;if(!e.ok||!e.setup){t.status.textContent=e.error||`Could not read session setup`;return}let n=t.parts.sections;NQ(n,e.setup),t.status.textContent=n.childElementCount>0?``:`No session setup recorded yet`,t.status.hidden=n.childElementCount>0}function IQ(e){return{skipPerms:e.skipPerms??e.dangerouslySkipPermissions??!1,saneYolo:e.saneYolo===!0,worktree:e.worktree??e.isWorktree??!1,workspace:e.workspace??e.isWorkspace??!1,remoteWorkspace:e.remoteWorkspace??null,guarded:e.guarded??e.isGuarded??!1,guardrailsReleased:e.guardrailsReleased??e.isGuardrailsReleased??!1,ephemeral:e.ephemeral===!0,ownerId:e.ownerId??null,path:e.path,stateSince:e.stateSince,taskTitle:typeof e.taskTitle==`string`?e.taskTitle:null,taskTitleIsCustom:e.taskTitleIsCustom===!0}}var LQ=null,RQ=null,zQ=null,BQ=null,VQ=null,HQ=null,UQ=-1,WQ=null,GQ={isRightToLeft:!1,arcProgress:0},KQ=1,qQ=3;function JQ(){if(!LQ||WQ===null)return;let e=rs({viewportWidthPx:document.documentElement.clientWidth,viewportHeightPx:document.documentElement.clientHeight,verticalProgress:WQ,...GQ});cr(LQ,as(e,KQ,window.devicePixelRatio))}function YQ(){HQ!==null&&(clearTimeout(HQ),HQ=null)}function XQ(e=Us()){return qo({isEnabled:e,hasReducedMotion:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,isPhone:Ky(),options:Mc()})}function ZQ(e){e.onanimationend=null,e.style.animation=`none`,BQ&&(BQ.style.animation=`none`),e.hidden=!0}function QQ(e,t){if(!LQ||!RQ||!zQ||!BQ||XQ())return;let n=Mc();YQ();let r=Ko(n,UQ,Math.random,t);if(ZQ(LQ),!r){HQ=setTimeout(()=>QQ(!1),1e3);return}WQ=r.verticalProgress,GQ={isRightToLeft:r.isRightToLeft,arcProgress:r.arcProgress},KQ=n.flyingAnimalsScale,JQ();let i=Ro[r.animalIndex];RQ.className=`nyan-sprite ${i.sprite}`,zQ.className=`nyan-trail ${i.trail}`,UQ=r.animalIndex,VQ?.classList.remove(`is-booped`),LQ.hidden=!1,LQ.offsetWidth,LQ.style.animation=`nyan-fly ${r.durationSeconds}s linear`,BQ.style.animation=`nyan-trail-hold ${r.durationSeconds}s linear`,e&&(LQ.style.animationDelay=`-${r.firstDelaySeconds}s`,BQ.style.animationDelay=`-${r.firstDelaySeconds}s`),LQ.onanimationend=e=>{LQ&&e.target===LQ&&(ZQ(LQ),HQ=setTimeout(()=>QQ(!1),r.gapMs))}}function $Q(){if(LQ&&BQ&&VQ){VQ.classList.remove(`is-booped`),VQ.offsetWidth,VQ.classList.add(`is-booped`);for(let e of[...LQ.getAnimations(),...BQ.getAnimations()])e.playbackRate=qQ}}function e$(){if(LQ||XQ())return;LQ=document.createElement(`div`),LQ.className=`nyan-flight`,LQ.setAttribute(`aria-hidden`,`true`);let e=document.createElement(`div`);e.className=`nyan-trail-window`,BQ=document.createElement(`div`),BQ.className=`nyan-trail-hold`,zQ=document.createElement(`div`),BQ.append(zQ),e.append(BQ),RQ=document.createElement(`div`),VQ=document.createElement(`div`),VQ.className=`nyan-boop`,VQ.append(RQ),VQ.addEventListener(`pointerdown`,$Q),LQ.append(e,VQ),document.body.appendChild(LQ),window.addEventListener(`resize`,JQ),window.addEventListener(`orientationchange`,JQ),QQ(!0)}function t$(e){e$(),QQ(!1,e)}function n$(){YQ(),window.removeEventListener(`resize`,JQ),window.removeEventListener(`orientationchange`,JQ),LQ?.remove(),LQ=null,RQ=null,zQ=null,BQ=null,VQ=null,UQ=-1,WQ=null}var r$=!1;function i$(e){let t=document.documentElement;if(r$||(r$=!0,qy(()=>i$(Us())),window.matchMedia(`(prefers-reduced-motion: reduce)`).addEventListener(`change`,()=>i$(Us()))),e){if(t.dataset.flyingAnimals=`true`,XQ(e)){n$();return}e$()}else delete t.dataset.flyingAnimals,n$()}function a$(){let e=j(`div`),t=j(`p`,`flying-animals-status`);t.id=`flying-animals-gallery-status`,t.setAttribute(`role`,`status`);let n=j(`div`,`flying-animals-gallery`);n.setAttribute(`aria-label`,`Animal gallery`);let r=[],i=()=>{let e=XQ(),n=Wo(Mc().flyingAnimalsExcludedSprites);t.textContent=[e,n?``:`No animals are included, so automatic flights are paused.`].filter(Boolean).join(` `);for(let t of r)t.disabled=e!==null},a=Mc();for(let e of Ro){let o=j(`article`,`flying-animal-tile`),s=Ic(e),c=j(`label`,`flying-animal-include`),l=j(`input`,`settings-view-checkbox`);l.type=`checkbox`,l.checked=!a.flyingAnimalsExcludedSprites.includes(e.sprite),l.setAttribute(`aria-label`,`Include ${e.name}`),l.addEventListener(`change`,()=>{let t=new Set(Mc().flyingAnimalsExcludedSprites);l.checked&&t.delete(e.sprite),l.checked||t.add(e.sprite),jc([...t]),i$(Us()),i()}),c.append(l,document.createTextNode(`Include`));let u=j(`button`,`btn-dialog btn-dialog-cancel`,`Fly now`);u.type=`button`,u.setAttribute(`aria-describedby`,t.id),u.addEventListener(`click`,()=>t$(e.sprite)),r.push(u),o.append(s,j(`h2`,`flying-animal-name`,e.name),c,u),n.append(o)}return i(),e.append(t,n),e}var o$=`johncwaters/glimmervoid`,s$={maxConcurrentInvestigations:Math.ceil,minUsersToInvestigate:Math.ceil,userEscalationThreshold:Math.ceil,trafficSpikeMinUsers:Math.ceil,trafficSpikeBaselineDays:Math.floor};[...Object.entries(s$).map(([e,t])=>({path:[`posthog`,e],min:1,round:t}))];var c$=Object.freeze([`auto`,`calculate`,`display`]),l$=Object.freeze([`codex`,`grok`]),u$=Object.freeze([`dailyUsd`,`monthlyUsd`]),d$=e=>t({error:`${e} must be a boolean`}).optional(),f$=(e,t=!1)=>{let n=l({error:`${e} must be a string`});return(t?n.transform(e=>e.trim()):n).optional()},p$=e=>e.label?e.label:e.max==null?e.exclusiveMin?`greater than ${e.min}`:`at least ${e.min}`:`between ${e.min} and ${e.max}`,m$=(e,t=k)=>c({error:`${e} must be ${p$(t)}`}).finite().refine(e=>!t.exclusiveMin||e>t.min,{message:`${e} must be ${p$(t)}`}).refine(e=>t.exclusiveMin||e>=t.min,{message:`${e} must be ${p$(t)}`}).refine(e=>t.max==null||e<=t.max,{message:`${e} must be ${p$(t)}`}).optional(),h$=(e,t)=>m$(e,t).unwrap().int({error:`${e} must be a whole number ${p$(t)}`}).optional(),g$=(e,t)=>c({error:`${e} must be an integer between ${t.min} and ${t.max}`}).int({error:`${e} must be an integer between ${t.min} and ${t.max}`}).min(t.min,{error:`${e} must be an integer between ${t.min} and ${t.max}`}).max(t.max,{error:`${e} must be an integer between ${t.min} and ${t.max}`}).optional(),_$=(e,t)=>g(t,{error:`${e} must be an object`}).nullable().optional(),v$=Object.freeze([`release`,`main`]),y$=Object.freeze([`report`,`fix`]);g({refiner:g({enabled:d$(`taskTitle.refiner.enabled`),model:f$(`taskTitle.refiner.model`,!0),minIntervalSeconds:m$(`taskTitle.refiner.minIntervalSeconds`,{min:0}),timeoutSeconds:m$(`taskTitle.refiner.timeoutSeconds`,jt)},{error:`taskTitle.refiner must be an object`}).nullable().optional()},{error:`taskTitle must be an object`}).nullable().optional();var b$={enabled:d$(`branchGc.enabled`),worktrees:d$(`branchGc.worktrees`),prefixes:p(l({error:`branchGc.prefixes must be an array of strings`}).min(1,{error:`branchGc.prefixes entries must be non-empty strings`}),{error:`branchGc.prefixes must be an array of strings`}).optional(),dryRun:d$(`branchGc.dryRun`),staleDays:m$(`branchGc.staleDays`,Mt),deleteUnmerged:d$(`branchGc.deleteUnmerged`),intervalMs:m$(`branchGc.intervalMs`,Nt)},x$=g(b$,{error:`branchGc must be an object`});_$(`branchGc`,b$),x$.omit({prefixes:!0,dryRun:!0,worktrees:!0}).nullable().optional(),Object.freeze([`enabled`,`deleteUnmerged`]),Object.freeze([`staleDays`,`intervalMs`]),_$(`postTurnChecks`,{mode:u(y$,{error:`postTurnChecks.mode must be one of report, fix`}).optional()}),_$(`visions`,{enabled:d$(`visions.enabled`),autoFix:d$(`visions.autoFix`),projects:p(l({error:`visions.projects must be an array of strings`}),{error:`visions.projects must be an array of strings`}).optional(),dispatch:_$(`visions.dispatch`,{enabled:d$(`visions.dispatch.enabled`),model:f$(`visions.dispatch.model`,!0),quietMs:h$(`visions.dispatch.quietMs`,Pt),cooldownMs:h$(`visions.dispatch.cooldownMs`,Ft),maxPerHour:h$(`visions.dispatch.maxPerHour`,It),activityMaxPerHour:h$(`visions.dispatch.activityMaxPerHour`,Lt),dispatchTimeoutSeconds:h$(`visions.dispatch.dispatchTimeoutSeconds`,Rt)}),intent:_$(`visions.intent`,{threadTtlMs:h$(`visions.intent.threadTtlMs`,zt)})}),g({teams:p(l({error:`github.teams must be an array of org/slug strings`}).refine(e=>ie(e)!==null,{message:`github.teams entries must be org/slug with valid GitHub segments`}),{error:`github.teams must be an array of org/slug strings`}).optional()},{error:`github must be an object`}).nullable().optional(),_$(`teamReview`,{enabled:d$(`teamReview.enabled`),autoRebaseMyPrs:d$(`teamReview.autoRebaseMyPrs`),keepMergeableEnabled:d$(`teamReview.keepMergeableEnabled`),mergeQueueEnabled:d$(`teamReview.mergeQueueEnabled`),keepMergeableTimeoutMinutes:g$(`teamReview.keepMergeableTimeoutMinutes`,an),org:f$(`teamReview.org`,!0),team:f$(`teamReview.team`,!0),skill:f$(`teamReview.skill`,!0),reReviewAfterHours:m$(`teamReview.reReviewAfterHours`),skipIdleAfterDays:m$(`teamReview.skipIdleAfterDays`)}),_$(`benchmarks`,{enabled:d$(`benchmarks.enabled`)}),_$(`coherence`,{enabled:d$(`coherence.enabled`)});var S$={intervalMinutes:Bt,maxConcurrentInvestigations:Vt,investigationTimeoutSeconds:Ht,fixTimeoutSeconds:qt,minUsersToInvestigate:Ut,userEscalationThreshold:Wt,recurrenceWindowDays:Gt,transientRecurrenceLimit:Kt,trafficSpikeMultiplier:Jt,trafficSpikeMinUsers:Yt,trafficSpikeCooldownMinutes:Xt,trafficSpikeBaselineDays:Zt};_$(`posthog`,{enabled:d$(`posthog.enabled`),recurrenceDedupe:d$(`posthog.recurrenceDedupe`),trafficSpikeEnabled:d$(`posthog.trafficSpikeEnabled`),autoFix:d$(`posthog.autoFix`),host:f$(`posthog.host`,!0).refine(e=>e==null||!e||/^https?:\/\//i.test(e),{message:`posthog.host must be an http(s) URL`}),apiKey:f$(`posthog.apiKey`,!0),repoPath:f$(`posthog.repoPath`,!0),projects:a([m(`all`),p(c({error:`posthog.projects must be "all" or an array of positive integer project ids`}).int({error:`posthog.projects must be "all" or an array of positive integer project ids`}).positive({error:`posthog.projects must be "all" or an array of positive integer project ids`}),{error:`posthog.projects must be "all" or an array of positive integer project ids`})],{error:`posthog.projects must be "all" or an array of positive integer project ids`}).optional(),projectMap:i(l(),e(),{error:`posthog.projectMap must be an object`}).optional(),...Object.fromEntries(Object.entries(S$).map(([e,t])=>[e,Object.hasOwn(s$,e)?h$(`posthog.${e}`,t):m$(`posthog.${e}`,t)]))}),`${c$.join(`, `)}`,Object.fromEntries(l$.map(e=>[e,d$(`usage.vendors.${e}`)])),Object.fromEntries(u$.map(e=>[e,c({error:`usage.budget.${e} must be a positive number or null`}).positive({error:`usage.budget.${e} must be a positive number or null`}).nullable().optional()])),_$(`telegram`,{botToken:f$(`telegram.botToken`,!0),chatId:f$(`telegram.chatId`,!0)}),g({enabled:d$(`ingest.enabled`)},{error:`ingest must be an object`}).passthrough().optional(),g({enabled:d$(`trace.enabled`)},{error:`trace must be an object`}).optional(),g({enabled:d$(`planReview.enabled`)},{error:`planReview must be an object`}).optional();var C$=e=>p(l({error:`${e} must be an array of paths`}).trim().min(1,{error:`${e} must be an array of paths`}),{error:`${e} must be an array of paths`}).optional(),w$={unguardedRepos:C$(`guardrails.unguardedRepos`),blockedPaths:C$(`guardrails.blockedPaths`),unreadablePaths:C$(`guardrails.unreadablePaths`)};g(w$,{error:`guardrails must be an object`}).passthrough().optional();var T$={enabled:d$(`telemetry.enabled`)};g(T$,{error:`telemetry must be an object`}).strict().optional(),g(T$,{error:`telemetry must be an object`}).passthrough().optional();var E$={scope:`browser`,access:`editable`,takesEffect:`now`},D$={scope:`browser`,access:`advanced`,takesEffect:`now`},X={scope:`machine`,access:`editable`,takesEffect:`now`},O$={scope:`machine`,access:`editable`,takesEffect:`new-sessions`},k$={scope:`machine`,access:`readout`,takesEffect:`now`},Z={scope:`machine`,access:`file-only`},A$=1e3,j$=60,M$=60,N$=A$*j$,P$=N$*M$,F$=P$*24,I$={label:`investigations`,storedPerDisplay:1},L$={label:`sessions`,storedPerDisplay:1},R$={label:`recurrences`,storedPerDisplay:1},z$={label:`actions`,storedPerDisplay:1},B$={label:`seconds`,storedPerDisplay:1},V$={label:`minutes`,storedPerDisplay:1},H$={label:`hours`,storedPerDisplay:1},U$={label:`days`,storedPerDisplay:1},W$={label:`seconds`,storedPerDisplay:A$,storedLabel:`ms`},G$={label:`minutes`,storedPerDisplay:N$,storedLabel:`ms`},K$={label:`minutes`,storedPerDisplay:j$,storedLabel:`seconds`},q$={label:`hours`,storedPerDisplay:P$,storedLabel:`ms`},J$={label:`hours`,storedPerDisplay:M$,storedLabel:`minutes`},Y$={label:`days`,storedPerDisplay:F$,storedLabel:`ms`},X$={label:`USD`,storedPerDisplay:1},Z$={label:`users`,storedPerDisplay:1},Q$={label:`reviews per hour`,storedPerDisplay:1},$$={label:`times`,storedPerDisplay:1},Q=`A tuning knob kept out of the Settings view; the default suits almost every install.`,e1=`A diagnostic switch kept out of the Settings view; change it in config.json while investigating.`,t1=`Changes how the server process or its worktrees behave, so it is set in config.json with a restart or new sessions in mind.`,n1=`A structured value with no dashboard control; edit it in config.json.`,r1=`Never editable from the dashboard by rule; edit it in config.json.`;function i1(e){return e.map(e=>({value:e,label:e[0].toUpperCase()+e.slice(1)}))}var a1=Object.freeze({"machine-terminal":{title:`Terminal`,description:`Terminal behavior shared by dashboard clients.`},"machine-detection-sessions":{title:`Detection and sessions`,description:`Config-file-only detection, timing, worktree and process settings.`},"lanes-ingest":{title:`Ingest`,description:`The machine-context sources behind Visions.`}}),o1=Object.freeze([{id:`browser-appearance`,level:`browser`,title:`Appearance`,description:`How this browser draws the dashboard.`,legacyIds:[`browser-flying-animals`,`animals`,`flying-animals`],settings:[{id:`theme`,path:`pref:themeId`,title:`Theme`,description:`Color scheme for the dashboard.`,control:`select`,optionsFrom:`themes`,keywords:[`color`,`palette`],defaultValue:`phyrexian`,...E$},{id:`session-usage-chips`,path:`pref:sessionUsageChips`,title:`Show usage on session cards`,description:`Shows each card's transcript token count and CLI-reported cost when available, otherwise a calculated API list-price estimate.`,control:`toggle`,keywords:[`usage`,`cost`,`tokens`,`card`,`price`],defaultValue:!1,...E$},{id:`phone-arrow-pad`,path:`pref:phoneArrowPad`,title:`Swipe arrow pad on phone (experimental)`,description:`Replace the four arrow keys above the phone keyboard with one pad: swipe on it to send arrow keys, one per short drag.`,control:`toggle`,keywords:[`experimental`,`mobile`,`keys`,`arrows`,`swipe`,`gesture`],defaultValue:!1,...E$},{id:`flying-animals`,path:`pref:flyingAnimalsEnabled`,title:`Flying animals`,description:`Show animated animals flying across the dashboard.`,control:`toggle`,keywords:[`animation`,`motion`,`animals`],defaultValue:!1,...E$},{id:`animals-min-gap`,path:`pref:flyingAnimalsMinGapSeconds`,title:`Time between flights: minimum`,description:`Shortest pause between flights.`,control:`number`,integer:!1,step:.1,range:wt,unit:B$,maximumSettingId:`animals-max-gap`,keywords:[`animals`,`frequency`],defaultValue:Dt.flyingAnimalsMinGapSeconds,...D$},{id:`animals-max-gap`,path:`pref:flyingAnimalsMaxGapSeconds`,title:`Time between flights: maximum`,description:`Longest pause between flights.`,control:`number`,integer:!1,step:.1,range:wt,unit:B$,keywords:[`animals`,`frequency`],defaultValue:Dt.flyingAnimalsMaxGapSeconds,...D$},{id:`animals-min-duration`,path:`pref:flyingAnimalsMinDurationSeconds`,title:`Flight duration: minimum`,description:`Shortest flight, for faster animals.`,control:`number`,integer:!1,step:.1,range:Tt,unit:B$,maximumSettingId:`animals-max-duration`,keywords:[`animals`,`speed`],defaultValue:Dt.flyingAnimalsMinDurationSeconds,...D$},{id:`animals-max-duration`,path:`pref:flyingAnimalsMaxDurationSeconds`,title:`Flight duration: maximum`,description:`Longest flight, for slower animals.`,control:`number`,integer:!1,step:.1,range:Tt,unit:B$,keywords:[`animals`,`speed`],defaultValue:Dt.flyingAnimalsMaxDurationSeconds,...D$},{id:`animals-scale`,path:`pref:flyingAnimalsScale`,title:`Size multiplier`,description:`Scale applied on top of the viewport size.`,control:`number`,integer:!1,step:.1,range:Et,unit:$$,keywords:[`animals`,`size`],defaultValue:Dt.flyingAnimalsScale,...D$},{id:`animals-on-phone`,path:`pref:flyingAnimalsOnPhone`,title:`Show on phone layout`,description:`Allow flights on the phone layout.`,control:`toggle`,keywords:[`animals`,`mobile`],defaultValue:Dt.flyingAnimalsOnPhone,...D$}]},{id:`browser-notifications`,level:`browser`,title:`Notifications`,description:`How this browser, and the Telegram bot shared by every lane, get your attention.`,settings:[{id:`alert-sounds-enabled`,path:`pref:soundEnabled`,title:`Alert sounds`,legacyIds:[{sectionId:`browser-appearance`,settingId:`alert-sounds-enabled`}],description:`Play sounds when a session needs attention and when a merge celebration plays. The same switch as the note button in the desktop header.`,control:`toggle`,keywords:[`audio`,`mute`,`sound`,`notification`],defaultValue:!0,...E$},{id:`alert-sound`,path:`pref:soundId`,title:`Alert sound`,legacyIds:[{sectionId:`browser-appearance`,settingId:`alert-sound`}],description:`Sound played when a session needs attention. Your own .ogg, .mp3, .wav, .m4a or .webm files dropped into the sounds folder of the Glimmervoid home (~/.glimmervoid/sounds/, or $GLIMMERVOID_HOME/sounds/) are listed after the built-in sounds. Glimmervoid never creates that folder, so make it yourself; new files show up the next time Settings opens.`,control:`select`,optionsFrom:`sounds`,keywords:[`audio`,`notification`,`custom`],defaultValue:`chime`,...E$},{id:`desktop-notifications`,path:`pref:notificationsEnabled`,title:`Desktop notifications`,legacyIds:[{sectionId:`browser-appearance`,settingId:`desktop-notifications`}],description:`Raise a browser notification when a session needs attention while this dashboard is in the background.`,control:`toggle`,keywords:[`browser`,`attention`],defaultValue:!0,...E$}]},{id:`machine-telegram`,level:`machine`,parent:`browser-notifications`,title:`Telegram`,description:`One bot shared by session, PR review and PostHog notifications.`,legacyIds:[`telegram`,`notifications`],settings:[{id:`telegram-bot-token`,path:`telegram.botToken`,title:`Bot token`,description:`Credential used by the shared Telegram bot. Create a bot by messaging @BotFather in Telegram and sending /newbot; it replies with this token. When GLIMMERVOID_TELEGRAM_BOT_TOKEN supplies it, this field is read-only.`,control:`password`,keywords:[`credential`,`api`],defaultValue:``,...X},{id:`telegram-chat-id`,path:`telegram.chatId`,title:`Chat id`,description:`Destination chat for enabled Telegram lanes. Send your bot any message, then open https://api.telegram.org/bot<token>/getUpdates in a browser and copy the number under message.chat.id.`,control:`text`,keywords:[`destination`,`channel`],defaultValue:``,...X},{id:`telegram-session-notifications`,path:`telegramNotifications`,title:`Send session notifications`,description:`Send session completion, input and failure alerts when no dashboard is open. Unacknowledged alerts also escalate after the phone escalation delay while a dashboard remains open.`,control:`toggle`,keywords:[`phone`,`off dashboard`,`test`],defaultValue:!1,status:`telegram-delivery`,...X}]},{id:`machine-sessions`,level:`machine`,title:`Sessions`,description:`How sessions start, where projects are found, and what the dashboard shows for them.`,legacyIds:[`machine-general`,`general`,`machine-repositories`,`repos`,`repositories`],settings:[{id:`auto-resume`,path:`autoResume`,title:`Auto-resume sessions on startup`,description:`Resume conversations that were live when Glimmervoid last shut down or crashed, and tell sessions that were mid-turn, or had a background agent, monitor or scheduled wakeup in flight, to continue.`,control:`toggle`,keywords:[`startup`,`conversation`],defaultValue:!0,...X},{id:`conversation-view`,path:`conversationView`,title:`Conversation view (experimental)`,description:`Let each Claude Code and Codex session turn on a Conversation face from its card menu, which renders the transcript as messages, approvals and a composer. Sessions stay on the terminal until you turn it on for them. A Claude Code session started while this is on can answer its permission prompts and questions there. A Codex session connects on its next start, through a local app-server so approvals can be answered from the dashboard; guarded Codex sessions and those that bypass Codex hook trust keep the terminal only.`,control:`toggle`,keywords:[`experimental`,`transcript`,`chat`,`codex`,`claude`],defaultValue:!1,...X},{id:`zen-view`,path:`zenView`,title:`Zen view (experimental)`,description:`Add a Zen tab that shows no terminal until a session needs you, then shows only that session and what it needs.`,control:`toggle`,keywords:[`experimental`,`calm`,`focus`,`attention`,`needs you`],defaultValue:!1,...X},{id:`remote-sessions`,path:`remoteSessions`,title:`Remote Coder sessions (experimental)`,description:`Offer the Coder environments in config.json when adding a session, so the session runs in its own Coder workspace instead of on this machine. Off refuses new remote sessions; ones already running keep working until closed.`,control:`toggle`,keywords:[`experimental`,`coder`,`remote`,`workspace`,`cloud`],defaultValue:!1,...X},{id:`streamer-mode`,path:`streamerMode`,title:`Streamer mode`,description:`Hide sensitive details in the dashboard while screen sharing or streaming.`,control:`toggle`,keywords:[`streaming`,`screen share`,`privacy`],defaultValue:!1,...X},{id:`repository-roots`,path:`repoRoots`,title:`Repository roots`,description:`Directories scanned for projects when adding sessions.`,control:`list`,keywords:[`folders`,`project discovery`],defaultValue:[],listPlaceholder:`Repository root path`,listEmptyText:`No repository roots configured.`,...X},{id:`custom-agents`,path:`status:custom-agents`,title:`Custom agents`,description:`Extra agent CLIs a session can be spawned with, declared under customAgents in config.json.`,control:`readonly`,keywords:[`adapters`,`cli`],status:`custom-agents`,...k$},{id:`agent-logins`,path:`status:agent-logins`,title:`Agent logins`,description:`How Claude Code and Codex sign in inside a Coder workspace. Each uses the login already on this machine; Connect signs one in for Glimmervoid alone when there is none.`,control:`readonly`,keywords:[`claude`,`codex`,`sign in`,`login`,`coder`,`remote`],status:`agent-logins`,...k$}]},{id:`machine-guardrails`,level:`machine`,title:`Guardrails and unattended`,description:`What a guarded session may touch, and which unattended actions automated work may take. Claude Code sessions on Linux and macOS write anywhere this account can, except credentials, Glimmervoid's own state and the blocked folders here.`,legacyIds:[`lanes-unattended`,`unattended`],settings:[{id:`skip-permissions-by-default`,path:`skipPermissionsByDefault`,title:`Skip permission prompts by default`,description:`Start sessions whose project sets no permission choice with the agent CLI permission bypass flag.`,control:`toggle`,keywords:[`permissions`,`yolo`,`dangerously`],danger:!0,warning:`Enabling this control lets agents edit files and run shell commands without asking, and restarts running sessions that inherit it.`,defaultValue:!1,...X},{id:`sane-yolo`,path:`saneYolo`,title:`Sane YOLO`,description:`Block catastrophic commands in sessions that skip permission prompts when the cc-safety-net executable is available and trusted hooks are installed. Missing or untrusted hooks leave a session unprotected.`,control:`toggle`,keywords:[`permissions`,`yolo`,`safety`],defaultValue:!0,...O$},{id:`rtk-compression`,path:`rtk`,title:`rtk output compression`,description:`Compress Bash output with the rtk executable.`,control:`toggle`,keywords:[`bash`,`tokens`],danger:!0,status:`rtk-install`,warning:`Enabling this control permits Glimmervoid to install the pinned rtk executable automatically.`,defaultValue:!1,...O$},{id:`post-turn-checks-mode`,path:`postTurnChecks.mode`,title:`Post-turn checks mode`,description:`Default mode for post-turn checks. Project and individual rule modes override it, so Report can still allow file fixes.`,control:`select`,options:i1(y$),keywords:[`quality`,`fixes`],defaultValue:`report`,...X},{id:`branch-gc-delete-unmerged`,path:`branchGc.deleteUnmerged`,title:`Delete unmerged branches`,description:`Also delete stale remote branches with no merge proof. Off keeps every unmerged branch.`,control:`toggle`,keywords:[`git`,`cleanup`,`orphan`],danger:!0,warning:`Enabling this control lets branch cleanup delete stale remote branches without merge proof.`,defaultValue:!1,...X},{id:`guardrails-unguarded-repos`,path:`guardrails.unguardedRepos`,title:`Unguarded repositories`,description:`Folders whose sessions run without guardrails. A session started in one of these folders, or below it, is not guarded.`,control:`list`,keywords:[`guardrails`,`opt out`,`dotfiles`],danger:!0,warning:`A session without guardrails can read credentials and write anywhere this account can.`,defaultValue:[],listPlaceholder:`Folder path`,listEmptyText:`Every repository is guarded.`,...O$},{id:`guardrails-blocked-paths`,path:`guardrails.blockedPaths`,title:`Blocked folders`,description:`Extra folders and files a guarded session cannot write, on top of credentials and Glimmervoid's own state. A leading ~ means the home folder.`,control:`list`,keywords:[`guardrails`,`block`,`protect`],defaultValue:[],listPlaceholder:`~/folder`,listEmptyText:`Only the built-in list is blocked.`,...O$},{id:`guardrails-unreadable-paths`,path:`guardrails.unreadablePaths`,title:`Unreadable folders`,description:`Extra folders and files a guarded session cannot read, on top of the built-in credential list. A leading ~ means the home folder.`,control:`list`,keywords:[`guardrails`,`secrets`,`credentials`],defaultValue:[],listPlaceholder:`~/folder`,listEmptyText:`Only the built-in credential list is unreadable.`,...O$}]},{id:`machine-updates`,level:`machine`,title:`Updates`,description:`See which Glimmervoid version is running, which one is newest, and update in one step.`,legacyIds:[`updates`],settings:[{id:`update-actions`,path:`status:update-actions`,title:`Status and actions`,legacyIds:[`update-summary`,`update-installed`,`update-latest`,`update-last-checked`].map(e=>({sectionId:`machine-updates`,settingId:e})),description:`Whether this install is up to date, the running and newest versions, the last check, and the update and restart actions.`,control:`readonly`,keywords:[`version`,`available`,`current`,`check`,`restart`,`commit`,`installed`,`release`,`failure`],status:`update-actions`,...k$},{id:`update-channel`,path:`updateChannel`,title:`Channel`,description:`Track tagged releases or the upstream of the checked-out branch.`,control:`select`,options:i1(v$),keywords:[`release`,`branch`],defaultValue:`release`,...X},{id:`check-updates`,path:`checkForUpdates`,title:`Check for updates automatically`,description:`Check for a newer Glimmervoid at launch, while a dashboard is connected, and when this page opens.`,control:`toggle`,keywords:[`release`,`github`],defaultValue:!0,...X}]},{id:`machine-usage`,level:`machine`,title:`Usage`,description:`Local transcript accounting and estimated-cost budgets.`,legacyIds:[`usage`],settings:[{id:`usage-enabled`,path:`usage.enabled`,title:`Track token usage`,description:`Read local CLI transcripts and roll them into the Usage view and session chips.`,control:`toggle`,keywords:[`tokens`,`cost`],defaultValue:!0,status:`usage-last-report`,...X},{id:`usage-retain-days`,path:`usage.retainDays`,title:`Retain transcript detail`,description:`How long live transcript detail stays available. A monthly budget keeps detail from the start of the current month when that is longer.`,control:`number`,range:$t,unit:U$,keywords:[`history`,`retention`],defaultValue:90,...X},{id:`usage-daily-budget`,path:`usage.budget.dailyUsd`,title:`Daily budget`,description:`Estimated daily spend alert threshold. Alerts at 50%, 75% and 100% do not stop spending. Zero or below disables the threshold.`,control:`number`,range:nn,unit:X$,keywords:[`spend`,`alert`],defaultValue:null,integer:!1,nullable:!0,zeroIsNull:!0,step:.01,...X},{id:`usage-monthly-budget`,path:`usage.budget.monthlyUsd`,title:`Monthly budget`,description:`Estimated monthly spend alert threshold. Alerts at 50%, 75% and 100% do not stop spending. Zero or below disables the threshold.`,control:`number`,range:nn,unit:X$,keywords:[`spend`,`alert`],defaultValue:null,integer:!1,nullable:!0,zeroIsNull:!0,step:.01,...X}]},{id:`lanes-visions`,level:`lanes`,title:`Visions`,description:`Editor-buffer findings, bounded model comments, and the machine-context ingest behind them.`,legacyIds:[`lanes`,`visions`,`lanes-ingest`,`ingest`],settings:[{id:`visions-enabled`,path:`visions.enabled`,title:`Enable Visions`,description:`Set up supported editors detected on this machine, then show their buffer findings in the Visions view.`,control:`toggle`,keywords:[`editor`,`findings`,`lsp`],defaultValue:!1,...X},{id:`visions-dispatch-enabled`,path:`visions.dispatch.enabled`,title:`Enable model comments`,description:`Start bounded review sessions for local editor buffers.`,control:`toggle`,keywords:[`review`,`dispatch`],defaultValue:!1,...X},{id:`visions-max-per-hour`,path:`visions.dispatch.maxPerHour`,title:`Max per hour`,description:`Maximum review sessions dispatched per hour. One slot is reserved for edit reviews; activity-driven reviews take the rest, up to the activity cap set by visions.dispatch.activityMaxPerHour.`,control:`number`,range:k,unit:Q$,keywords:[`rate limit`,`reviews`],defaultValue:6,...X},{id:`visions-model`,path:`visions.dispatch.model`,title:`Model override`,description:`Leave blank to use the opus model alias.`,control:`text`,keywords:[`claude`,`override`],defaultValue:``,...X},{id:`visions-projects`,path:`visions.projects`,title:`Projects`,description:`Clear every selection, including unavailable projects, to accept buffers from every configured project.`,control:`projects`,keywords:[`repositories`,`filter`],defaultValue:[],...X},{id:`visions-auto-fix`,path:`visions.autoFix`,title:`Apply tier 1 fixes`,description:`Allow Visions to edit eligible open Markdown buffers, including inactive buffers, without asking.`,control:`toggle`,keywords:[`automatic`,`edits`],danger:!0,warning:`Enabling this control lets Visions edit eligible buffers without a carbon unit present.`,defaultValue:!1,...X},{id:`ingest-enabled`,path:`ingest.enabled`,title:`Enable machine context ingest`,description:`Enable the local activity feed behind Visions. Turning Visions on enables ingest unless ingest.enabled is explicitly false.`,control:`toggle`,keywords:[`events`,`activity`,`ingest`],defaultValue:!1,...X}]},{id:`lanes-posthog`,level:`lanes`,title:`PostHog`,description:`Error monitoring, investigations and traffic-spike alerts.`,legacyIds:[`posthog`],settings:[{id:`posthog-enabled`,path:`posthog.enabled`,title:`Enable PostHog monitoring`,description:`Poll PostHog error tracking and investigate issues that move.`,control:`toggle`,keywords:[`errors`,`monitoring`],defaultValue:!1,...X},{id:`posthog-host`,path:`posthog.host`,title:`Host`,description:`PostHog cloud or self-hosted HTTP URL.`,control:`text`,keywords:[`url`,`server`],defaultValue:`https://us.posthog.com`,...X},{id:`posthog-api-key`,path:`posthog.apiKey`,title:`Personal API key`,description:`Credential with read access to PostHog projects. When GLIMMERVOID_POSTHOG_API_KEY supplies it, this field is read-only.`,control:`password`,keywords:[`credential`,`token`],defaultValue:``,...X},{id:`posthog-projects`,path:`posthog.projects`,title:`Projects`,description:`PostHog project ids to monitor. config.json holds "all" or an array of ids, and an empty array monitors no project. In Settings that empty array shows as none, and an empty list saves "all".`,control:`list`,keywords:[`project ids`,`filter`],defaultValue:`all`,valueKind:`posthog-projects`,listPlaceholder:`Project id`,listEmptyText:`Every project the key can read.`,...X},{id:`posthog-interval`,path:`posthog.intervalMinutes`,title:`Poll interval`,description:`Delay between PostHog polling passes.`,control:`number`,integer:!1,step:`any`,range:k,unit:V$,keywords:[`refresh`,`schedule`],defaultValue:15,...X},{id:`posthog-max-investigations`,path:`posthog.maxConcurrentInvestigations`,title:`Max concurrent investigations`,description:`Maximum investigation sessions running together.`,control:`number`,range:k,unit:I$,keywords:[`parallel`,`workers`],defaultValue:2,...X},{id:`posthog-min-users`,path:`posthog.minUsersToInvestigate`,title:`Min users to investigate`,description:`Minimum affected users for a new issue investigation. Regressions, worsening issues and eligible error spikes bypass this minimum.`,control:`number`,range:k,unit:Z$,keywords:[`threshold`,`affected`],defaultValue:1,...X},{id:`posthog-traffic-enabled`,path:`posthog.trafficSpikeEnabled`,title:`Traffic spike alerts`,description:`Ping when recent unique users exceed a project baseline.`,control:`toggle`,keywords:[`analytics`,`alert`],defaultValue:!0,...X},{id:`posthog-auto-fix`,path:`posthog.autoFix`,title:`Attempt fixes for major issues`,description:`Allow an isolated agent to fix an issue, push a branch and open a pull request.`,control:`toggle`,keywords:[`automatic`,`pull request`],danger:!0,warning:`Enabling this control lets PostHog fixes commit, push and open pull requests automatically.`,defaultValue:!1,...X}]},{id:`lanes-team-review`,level:`lanes`,title:`Team review`,description:`Draft reviews of teammates' pull requests for you to post from the Reviews tab.`,legacyIds:[`team-review`,`reviews`],settings:[{id:`team-review-enabled`,path:`teamReview.enabled`,title:`Enable team review`,description:`Poll open pull requests from the team and draft a review of each one. Nothing is posted until you choose Approve or Comment.`,control:`toggle`,keywords:[`pull requests`,`github`],defaultValue:!1,...X},{id:`github-teams`,path:`github.teams`,title:`GitHub teams`,description:`Teams to search for review requests and members, one org/slug per entry. Leave empty to fall back to the legacy teamReview.org and teamReview.team keys in config.json.`,control:`list`,keywords:[`github`,`teams`,`review requests`],defaultValue:[],listPlaceholder:`org/team-slug`,listEmptyText:`No GitHub teams configured.`,...X},{id:`team-review-re-review-after-hours`,path:`teamReview.reReviewAfterHours`,title:`Re-review after`,description:`When a reviewed PR has a new head, review it again after this long since its last review. Queue review runs it at any time.`,control:`number`,range:k,unit:H$,keywords:[`review`,`delay`],defaultValue:24,integer:!1,step:.5,...X},{id:`team-review-skip-idle-after-days`,path:`teamReview.skipIdleAfterDays`,title:`Skip PRs idle for`,description:`Leave pull requests without GitHub activity for this long out of automatic review.`,control:`number`,range:k,unit:U$,keywords:[`idle`,`activity`],defaultValue:14,integer:!1,step:.5,...X},{id:`team-review-skill`,path:`teamReview.skill`,title:`Review skill`,description:`Name of a Claude Code skill installed for the review agent, for example your own PR review skill. Leave empty to let the agent review with whatever skills it has.`,control:`text`,keywords:[`skill`,`claude code`,`pr review`],defaultValue:``,...X},{id:`team-review-auto-rebase-my-prs`,path:`teamReview.autoRebaseMyPrs`,title:`Keep my pull requests rebased`,description:`On each poll, rebase your open, non-draft pull requests that are behind their base branch. A pull request with conflicts or checks still running is left alone, and a failed rebase is not retried until you push again.`,control:`toggle`,keywords:[`rebase`,`update branch`,`behind`,`my prs`],danger:!0,warning:`Enabling this control rewrites your pull request branches on GitHub. Pull before you push from a local checkout of one.`,defaultValue:!1,...X},{id:`team-review-keep-mergeable-enabled`,path:`teamReview.keepMergeableEnabled`,title:`Keep mergeable`,description:`Offer Keep mergeable on your pull requests: a guarded agent repairs conflicts and failing checks and pushes the repair. Off hides the control and starts no repair; the pull requests you chose stay chosen for when you turn it back on.`,control:`toggle`,keywords:[`repair`,`conflicts`,`my prs`],defaultValue:!0,...X},{id:`team-review-keep-mergeable-timeout`,path:`teamReview.keepMergeableTimeoutMinutes`,title:`Keep mergeable deadline`,description:`Longest a Keep mergeable repair session may run before it is stopped and nothing is pushed.`,control:`number`,range:an,unit:V$,keywords:[`timeout`,`repair`],defaultValue:30,...X},{id:`team-review-merge-queue-enabled`,path:`teamReview.mergeQueueEnabled`,title:`Merge when ready`,description:`Offer Merge when ready on your pull requests: queued pull requests are rebased when behind and merged once ready, one per repository per poll. Off hides the control and merges nothing; the queue is kept for when you turn it back on.`,control:`toggle`,keywords:[`merge queue`,`auto merge`,`my prs`],defaultValue:!0,...X}]},{id:`lanes-workflows`,level:`lanes`,title:`Workflows`,description:`Rules that act on pull request events in the repositories you choose.`,legacyIds:[`workflows`],settings:[{id:`workflows-enabled`,path:`workflows.enabled`,title:`Run workflows`,description:`Poll the repositories your enabled rules watch and run their actions. Off stops polling and every action, whatever each rule says.`,control:`toggle`,keywords:[`pull requests`,`automation`,`master switch`],defaultValue:!0,...X},{id:`workflows-max-concurrent-sessions`,path:`workflows.maxConcurrentSessions`,title:`Concurrent agent sessions`,description:`Most workflow agent sessions running at once. Up to twenty later spawns wait for a free slot; additional spawns are dropped and logged.`,control:`number`,range:on,unit:L$,keywords:[`parallel`,`spawn`],defaultValue:2,...X},{id:`workflows-rules`,path:`status:workflow-rules`,title:`Workflow rules`,description:`Each rule watches repositories for one pull request event (opened, checks-failed, review-requested, approved, commented or merged), narrows it by author, labels, base branch, your own pull requests or a review request to your team, and then notifies you, labels or comments on the pull request, or starts a guarded agent session that pushes nothing. Rules start disabled. Turn each rule on or off here; everything else about a rule is set in config.json under workflows.rules.`,control:`readonly`,keywords:[`pull requests`,`automation`,`github`,`rules`],status:`workflows`,...k$}]},{id:`lanes-benchmarks`,level:`lanes`,title:`Benchmarks`,description:`Compare agent setups on frozen cases from the suites in the benchmarks folder of the Glimmervoid home.`,legacyIds:[`benchmarks`],settings:[{id:`benchmarks-enabled`,path:`benchmarks.enabled`,title:`Enable benchmarks`,description:`Show the Bench tab. Nothing runs until you choose Mine or Run there.`,control:`toggle`,keywords:[`eval`,`arms`,`recall`,`compare`],defaultValue:!1,...X}]},{id:`lanes-coherence`,level:`lanes`,title:`Coherence (experimental)`,description:`Per-session Coherence hook status and decision journal for agent sessions.`,settings:[{id:`coherence-enabled`,path:`coherence.enabled`,title:`Show session Coherence`,description:`Shows each session's Coherence hook status and decision journal when the repository installed @posthog/coherence 1.8 or newer. Off by default.`,control:`toggle`,keywords:[`experimental`,`coherence`,`journal`,`decisions`],defaultValue:!1,...X}]},{id:`machine-privacy`,level:`machine`,title:`Privacy`,description:`What Glimmervoid sends about itself.`,legacyIds:[`privacy`,`telemetry`],settings:[{id:`telemetry-enabled`,path:`telemetry.enabled`,title:`Send anonymous usage and error data`,description:`Version, platform, app starts, daily activity, session starts and ends with agent kind, exit kind and duration, errors as their type, error code and scrubbed stack frames, per session token counts, models and estimated costs from the usage scan, under a random install id. Never error messages, paths, repository or branch names, prompts, objectives or terminal output. GLIMMERVOID_TELEMETRY=0, DO_NOT_TRACK=1 or CI=true turn it off regardless.`,control:`toggle`,keywords:[`telemetry`,`analytics`,`tracking`,`opt out`],defaultValue:!0,...X}]},{id:`browser-shortcuts`,level:`browser`,title:`Shortcuts and about`,description:`Keyboard reference and build information.`,legacyIds:[`shortcuts`],settings:[]}]),s1=Object.freeze([{id:`file-debug-mode`,path:`debugMode`,title:`Debug mode`,group:`machine-sessions`,description:`Show session-card diagnostics for state, transitions and detection signals.`,control:`toggle`,keywords:[`diagnostics`,`state`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:e1,...Z},{id:`file-replay-buffer`,path:`replayBufferKB`,title:`Replay buffer`,group:`machine-terminal`,description:`PTY output retained for clients that reconnect or join late.`,control:`number`,range:Ot,unit:{label:`KB`,storedPerDisplay:1},keywords:[`history`,`backfill`],defaultValue:512,takesEffect:`new-sessions`,fileOnlyReason:Q,...Z},{id:`file-session-memory-reserve`,path:`sessionMemoryReserveMB`,title:`Session memory reserve`,group:`machine-sessions`,description:`Free memory an automatic session start waits for; 0 starts sessions without checking.`,control:`number`,range:kt,unit:{label:`MB`,storedPerDisplay:1},keywords:[`memory`,`headroom`],defaultValue:600,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-cursor-blink`,path:`cursorBlink`,title:`Cursor blink`,group:`machine-terminal`,description:`Blink the cursor in every terminal.`,control:`toggle`,keywords:[`caret`,`terminal`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-detect-background-agents`,path:`detectBackgroundAgents`,title:`Detect background agents`,group:`machine-detection-sessions`,description:`Hold completion while tracked background work is active.`,control:`toggle`,keywords:[`subagents`,`completion`],defaultValue:!0,takesEffect:`new-sessions`,fileOnlyReason:e1,...Z},{id:`file-record-signals`,path:`recordSignals`,title:`Record structural signals`,group:`machine-detection-sessions`,description:`Keep forensic status and hook recordings for each session. Full capture (capture.enabled) records these signals even when this is off.`,control:`toggle`,keywords:[`recordings`,`diagnostics`],defaultValue:!0,takesEffect:`new-sessions`,fileOnlyReason:e1,...Z},{id:`file-trace-enabled`,path:`trace.enabled`,title:`Capture session traces`,group:`machine-detection-sessions`,description:`Keep normalized Claude transcript traces for session debugging.`,control:`toggle`,keywords:[`transcripts`,`diagnostics`],defaultValue:!0,takesEffect:`restart`,fileOnlyReason:e1,...Z},{id:`file-detect-scheduled-wakeups`,path:`detectScheduledWakeups`,title:`Detect scheduled wakeups`,group:`machine-detection-sessions`,description:`Surface advisory wakeup timing for scheduled sessions.`,control:`toggle`,keywords:[`schedule`,`sleep`],defaultValue:!0,takesEffect:`restart`,fileOnlyReason:e1,...Z},{id:`file-worktree-auto-rebase`,path:`worktreeAutoRebase`,title:`Worktree auto-rebase`,group:`machine-detection-sessions`,description:`Rebase eligible session worktrees when the integration branch moves.`,control:`toggle`,keywords:[`git`,`branch`],defaultValue:!0,takesEffect:`new-sessions`,fileOnlyReason:t1,...Z},{id:`file-worktree-sync-on-start`,path:`worktreeSyncOnStart`,title:`Worktree sync on start`,group:`machine-detection-sessions`,description:`Fetch origin and fast-forward the local integration branch before a session starts its worktree.`,control:`toggle`,keywords:[`git`,`fetch`,`fast-forward`],defaultValue:!0,takesEffect:`new-sessions`,fileOnlyReason:t1,...Z},{id:`file-worktree-rerere`,path:`worktreeRerere`,title:`Worktree rerere`,group:`machine-detection-sessions`,description:`Reuse recorded Git conflict resolutions.`,control:`toggle`,keywords:[`git`,`conflicts`],defaultValue:!0,takesEffect:`restart`,fileOnlyReason:t1,...Z},{id:`file-integration-branch`,path:`integrationBranch`,title:`Integration branch`,group:`machine-detection-sessions`,description:`Base branch for session worktrees. Empty = each repo's default branch. Existing sessions are never retargeted.`,control:`text`,nullable:!0,keywords:[`git`,`merge`],defaultValue:null,takesEffect:`new-sessions`,fileOnlyReason:t1,...Z},{id:`file-worktree-root`,path:`worktreeRoot`,title:`Worktree root`,group:`machine-detection-sessions`,description:`Directory that contains session worktrees. Existing worktrees are never relocated.`,control:`text`,keywords:[`git`,`directory`],defaultValue:``,takesEffect:`new-sessions`,fileOnlyReason:t1,...Z},{id:`file-worktree-share`,path:`worktreeShare`,title:`Shared worktree paths`,group:`machine-detection-sessions`,description:`Local paths copied or linked during worktree preparation.`,control:`list`,keywords:[`files`,`context`],defaultValue:[`node_modules`,`.env`,`.env.local`,`.claude`],takesEffect:`new-sessions`,fileOnlyReason:r1,...Z},{id:`file-port`,path:`port`,title:`Local port`,group:`machine-detection-sessions`,description:`Port used by the local dashboard listener.`,control:`number`,range:At,unit:{label:`port`,storedPerDisplay:1},keywords:[`server`,`listener`],defaultValue:3e3,takesEffect:`restart`,fileOnlyReason:r1,...Z},{id:`file-notify-debounce-ms`,path:`notifyDebounceMs`,title:`Notification debounce`,group:`machine-detection-sessions`,description:`Delay used to coalesce notification state changes.`,control:`number`,integer:!1,step:`any`,range:k,unit:W$,keywords:[`timer`,`alerts`],defaultValue:3e3,takesEffect:`new-sessions`,fileOnlyReason:Q,...Z},{id:`file-phone-escalation-ms`,path:`phoneEscalationMs`,title:`Phone escalation delay`,group:`machine-detection-sessions`,description:`Delay before off-dashboard escalation.`,control:`number`,integer:!1,step:`any`,range:k,unit:G$,keywords:[`timer`,`telegram`],defaultValue:3e5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-post-turn-checks`,path:`postTurnChecks`,title:`Post-turn checks`,group:`machine-detection-sessions`,description:`Deterministic checks run after eligible turns. The global mode is a default; project and individual rule modes can select fixes even when the global mode is report.`,control:`json`,keywords:[`quality`,`fixes`],defaultValue:{enabled:!0,mode:`report`,rules:{trailingWs:!0,finalNewline:!0,bom:!0,slop:!1}},takesEffect:`now`,fileOnlyReason:n1,...Z},{id:`file-branch-gc-enabled`,path:`branchGc.enabled`,title:`Branch cleanup`,group:`machine-detection-sessions`,description:`Enable cleanup of eligible session branches.`,control:`toggle`,keywords:[`git`,`cleanup`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:t1,...Z},{id:`file-branch-gc-worktrees`,path:`branchGc.worktrees`,title:`Local worktree cleanup`,group:`machine-detection-sessions`,description:`Enable cleanup of eligible local worktrees.`,control:`toggle`,keywords:[`git`,`worktree`,`cleanup`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:t1,...Z},{id:`file-branch-gc-prefixes`,path:`branchGc.prefixes`,title:`Branch cleanup prefixes`,group:`machine-detection-sessions`,description:`Branch prefixes that filter both remote branch cleanup and local worktree cleanup.`,control:`list`,keywords:[`git`,`branch`],defaultValue:[`glimmervoid/session/`,`worktree-agent-`],takesEffect:`now`,fileOnlyReason:t1,...Z},{id:`file-branch-gc-dry-run`,path:`branchGc.dryRun`,title:`Branch cleanup dry run`,group:`machine-detection-sessions`,description:`Report planned cleanup without deleting remote branches.`,control:`toggle`,keywords:[`git`,`safety`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:t1,...Z},{id:`file-branch-gc-stale-days`,path:`branchGc.staleDays`,title:`Branch stale days`,group:`machine-detection-sessions`,description:`Age threshold for orphan branch cleanup when unmerged deletion is on.`,control:`number`,integer:!1,step:`any`,range:k,unit:U$,keywords:[`git`,`retention`],defaultValue:14,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-branch-gc-interval-ms`,path:`branchGc.intervalMs`,title:`Branch cleanup interval`,group:`machine-detection-sessions`,description:`Delay between branch cleanup passes.`,control:`number`,integer:!1,step:`any`,range:k,unit:q$,keywords:[`git`,`schedule`],defaultValue:216e5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-custom-agents`,path:`customAgents`,title:`Custom agents`,group:`machine-detection-sessions`,description:`Extra agent CLIs a session can be spawned with. The Sessions section lists the declared agents and whether each command resolves.`,control:`json`,keywords:[`adapters`,`cli`],defaultValue:[],takesEffect:`new-sessions`,fileOnlyReason:r1,...Z},{id:`file-task-title-refiner-enabled`,path:`taskTitle.refiner.enabled`,title:`Refine task titles`,group:`machine-detection-sessions`,description:`Keep session card titles useful when prompts change topic by asking a model for a short title.`,control:`toggle`,keywords:[`title`,`refiner`,`card`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-task-title-refiner-model`,path:`taskTitle.refiner.model`,title:`Task title model`,group:`machine-detection-sessions`,description:`Claude model alias the title refiner asks.`,control:`text`,keywords:[`title`,`refiner`,`model`],defaultValue:`haiku`,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-task-title-refiner-min-interval`,path:`taskTitle.refiner.minIntervalSeconds`,title:`Task title refresh interval`,group:`machine-detection-sessions`,description:`Shortest pause between two title refinements of one session.`,control:`number`,integer:!1,step:`any`,range:Ct,unit:B$,keywords:[`title`,`refiner`,`interval`],defaultValue:60,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-task-title-refiner-timeout`,path:`taskTitle.refiner.timeoutSeconds`,title:`Task title timeout`,group:`machine-detection-sessions`,description:`Maximum time allowed for one title refinement.`,control:`number`,integer:!1,step:`any`,range:jt,unit:B$,keywords:[`title`,`refiner`,`deadline`],defaultValue:60,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-codex`,path:`usage.vendors.codex`,title:`Track Codex usage`,group:`machine-usage`,description:`Include local Codex CLI transcripts in usage reports.`,control:`toggle`,keywords:[`openai`,`vendor`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-grok`,path:`usage.vendors.grok`,title:`Track Grok usage`,group:`machine-usage`,description:`Include local Grok CLI transcripts in usage reports.`,control:`toggle`,keywords:[`xai`,`vendor`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-fetch-pricing`,path:`usage.fetchPricing`,title:`Fetch current model prices`,group:`machine-usage`,description:`Load public model prices when usage tracking starts, using a cached table for up to one day. Falls back to cached or bundled prices if the fetch fails; no daily refresh runs while tracking continues.`,control:`toggle`,keywords:[`rates`,`models`],defaultValue:!0,takesEffect:`restart`,fileOnlyReason:Q,...Z},{id:`file-usage-plan-limits`,path:`usage.planLimits`,title:`Show plan limits`,group:`machine-usage`,description:`Read the Claude plan limit the CLI reports and show it beside usage.`,control:`toggle`,keywords:[`plan`,`limits`,`quota`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-rtk-savings`,path:`usage.rtkSavings`,title:`Estimate rtk savings`,group:`machine-usage`,description:`Estimate the tokens rtk output compression saved and show it in the Usage view.`,control:`toggle`,keywords:[`rtk`,`savings`,`tokens`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-scan-interval`,path:`usage.scanIntervalMinutes`,title:`Scan interval`,group:`machine-usage`,description:`Periodic transcript polling interval. Session activity can also trigger scans between timer ticks.`,control:`number`,range:Qt,unit:V$,keywords:[`poll`,`refresh`],defaultValue:5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-warehouse-retain-days`,path:`usage.warehouseRetainDays`,title:`Retain usage history`,group:`machine-usage`,description:`How long the daily usage warehouse keeps rolled-up totals after transcript detail expires.`,control:`number`,range:rn.warehouseRetainDays,unit:U$,keywords:[`history`,`warehouse`,`retention`],defaultValue:365,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-session-block-hours`,path:`usage.sessionBlockHours`,title:`Session block length`,group:`machine-usage`,description:`Length of the rolling block the Usage view groups activity into.`,control:`number`,range:rn.sessionBlockHours,unit:H$,keywords:[`block`,`window`,`hours`],defaultValue:5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-cost-mode`,path:`usage.costMode`,title:`Cost mode`,group:`machine-usage`,description:`Choose whether recorded costs, calculated costs or both can appear.`,control:`select`,options:i1(c$),keywords:[`pricing`,`estimate`],defaultValue:`auto`,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-usage-extra-projects-dirs`,path:`usage.extraProjectsDirs`,title:`Extra transcript folders`,group:`machine-usage`,description:`Absolute paths of additional Claude projects folders the usage scan reads.`,control:`list`,keywords:[`transcripts`,`folders`,`scan`],defaultValue:[],takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-visions-quiet-delay`,path:`visions.dispatch.quietMs`,title:`Quiet delay`,group:`lanes-visions`,description:`Editor quiet time before a scheduled review. Saves and blank-line boundaries can dispatch immediately, subject to the other review limits.`,control:`number`,range:k,unit:W$,keywords:[`debounce`,`idle`],defaultValue:3e4,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-visions-cooldown`,path:`visions.dispatch.cooldownMs`,title:`Cooldown`,group:`lanes-visions`,description:`Minimum delay between reviews of the same document. Initial orientation reviews bypass this delay.`,control:`number`,range:k,unit:G$,keywords:[`rate limit`,`delay`],defaultValue:3e5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-visions-activity-max-per-hour`,path:`visions.dispatch.activityMaxPerHour`,title:`Activity max per hour`,group:`lanes-visions`,description:`Maximum activity-driven reviews dispatched per hour, capped at the overall hourly limit minus one to reserve an edit-review slot.`,control:`number`,range:Ct,unit:Q$,keywords:[`rate limit`,`events`],defaultValue:2,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-visions-dispatch-timeout`,path:`visions.dispatch.dispatchTimeoutSeconds`,title:`Dispatch timeout`,group:`lanes-visions`,description:`Maximum time allowed for one review session.`,control:`number`,range:k,unit:K$,keywords:[`deadline`,`review`],defaultValue:180,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-visions-intent-thread-ttl`,path:`visions.intent.threadTtlMs`,title:`Intent thread lifetime`,group:`lanes-visions`,description:`How long an intent thread nobody advanced stays live before it retires.`,control:`number`,range:k,unit:Y$,keywords:[`intent`,`decay`,`thread`],defaultValue:2592e5,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-terminal`,path:`ingest.sources.terminal.enabled`,title:`Terminal output source`,group:`lanes-ingest`,description:`Include terminal output in the ingest feed.`,control:`toggle`,keywords:[`pty`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-agent-logs`,path:`ingest.sources.agentLogs.enabled`,title:`Agent logs source`,group:`lanes-ingest`,description:`Include local agent logs in the ingest feed.`,control:`toggle`,keywords:[`transcript`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-git`,path:`ingest.sources.git.enabled`,title:`Git activity source`,group:`lanes-ingest`,description:`Include local Git activity in the ingest feed.`,control:`toggle`,keywords:[`commits`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-fs`,path:`ingest.sources.fs.enabled`,title:`File changes source`,group:`lanes-ingest`,description:`Include watched file changes in the ingest feed.`,control:`toggle`,keywords:[`filesystem`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-shell-history`,path:`ingest.sources.shellHistory.enabled`,title:`Shell history source`,group:`lanes-ingest`,description:`Include local shell history in the ingest feed.`,control:`toggle`,keywords:[`commands`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-ingest-editor`,path:`ingest.sources.editor.enabled`,title:`Editor events source`,group:`lanes-ingest`,description:`Include local editor events in the ingest feed.`,control:`toggle`,keywords:[`buffers`,`source`],defaultValue:!1,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-investigation-timeout`,path:`posthog.investigationTimeoutSeconds`,title:`Investigation timeout`,group:`lanes-posthog`,description:`Maximum time allowed for one investigation.`,control:`number`,integer:!1,step:`any`,range:k,unit:K$,keywords:[`deadline`,`session`],defaultValue:900,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-escalation`,path:`posthog.userEscalationThreshold`,title:`Escalation threshold`,group:`lanes-posthog`,description:`Affected-user count that escalates an issue.`,control:`number`,range:k,unit:Z$,keywords:[`threshold`,`severity`],defaultValue:25,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-fix-timeout`,path:`posthog.fixTimeoutSeconds`,title:`Fix timeout`,group:`lanes-posthog`,description:`Maximum time allowed for one fix session.`,control:`number`,integer:!1,step:`any`,range:qt,unit:K$,keywords:[`deadline`,`repair`],defaultValue:1800,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-traffic-multiplier`,path:`posthog.trafficSpikeMultiplier`,title:`Spike multiplier`,group:`lanes-posthog`,description:`Baseline multiplier required to classify a traffic spike.`,control:`number`,integer:!1,step:`any`,range:Jt,unit:$$,keywords:[`baseline`,`ratio`],defaultValue:3,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-traffic-min-users`,path:`posthog.trafficSpikeMinUsers`,title:`Min users to alert`,group:`lanes-posthog`,description:`Minimum recent unique users for an initial traffic-spike alert. Escalation and recovery alerts bypass this minimum.`,control:`number`,range:Yt,unit:Z$,keywords:[`threshold`,`analytics`],defaultValue:10,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-traffic-cooldown`,path:`posthog.trafficSpikeCooldownMinutes`,title:`Spike cooldown`,group:`lanes-posthog`,description:`Cooldown for new traffic spikes. Escalation and recovery alerts bypass it. Zero removes the time delay; repeated active-spike alerts are still suppressed.`,control:`number`,integer:!1,step:`any`,range:Ct,unit:J$,keywords:[`silence`,`delay`],defaultValue:360,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-traffic-baseline`,path:`posthog.trafficSpikeBaselineDays`,title:`Baseline window`,group:`lanes-posthog`,description:`Historical window used to calculate normal hourly traffic.`,control:`number`,range:Zt,unit:U$,keywords:[`history`,`analytics`],defaultValue:7,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-recurrence-dedupe`,path:`posthog.recurrenceDedupe`,title:`Deduplicate recurring issues`,group:`lanes-posthog`,description:`Treat an issue seen again inside the recurrence window as the same investigation instead of opening a new one.`,control:`toggle`,keywords:[`recurrence`,`dedupe`,`issues`],defaultValue:!0,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-recurrence-window-days`,path:`posthog.recurrenceWindowDays`,title:`Recurrence window`,group:`lanes-posthog`,description:`How far back an issue counts as a recurrence of an investigated one.`,control:`number`,integer:!1,step:`any`,range:k,unit:U$,keywords:[`recurrence`,`window`],defaultValue:7,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-transient-recurrence-limit`,path:`posthog.transientRecurrenceLimit`,title:`Transient recurrence limit`,group:`lanes-posthog`,description:`How many times a transient issue may recur before it is investigated again.`,control:`number`,integer:!1,step:`any`,range:k,unit:R$,keywords:[`recurrence`,`transient`,`limit`],defaultValue:3,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-repo-path`,path:`posthog.repoPath`,title:`Repository path`,group:`lanes-posthog`,description:`Absolute path of the local checkout investigations read and fixes branch from, for every project the project map does not name.`,control:`text`,keywords:[`repository`,`checkout`,`path`],defaultValue:``,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-posthog-project-map`,path:`posthog.projectMap`,title:`Project map`,group:`lanes-posthog`,description:`PostHog project id to a label: the name shown for that project, and, when it is an absolute path to a checkout, the repository its issues are investigated in.`,control:`json`,keywords:[`projects`,`repositories`,`map`],defaultValue:{},takesEffect:`now`,fileOnlyReason:n1,...Z},{id:`file-team-review-org`,path:`teamReview.org`,title:`GitHub organization (legacy)`,group:`lanes-team-review`,description:`Organization login that owns the team, for example PostHog. Read only when github.teams is empty.`,control:`text`,keywords:[`github`,`owner`,`legacy`],defaultValue:``,takesEffect:`now`,fileOnlyReason:`A legacy key: github.teams names teams as org/slug entries and wins whenever it is set.`,...Z},{id:`file-team-review-team`,path:`teamReview.team`,title:`GitHub team (legacy)`,group:`lanes-team-review`,description:`Team slug whose members and review requests are polled. Read only when github.teams is empty.`,control:`text`,keywords:[`github`,`slug`,`legacy`],defaultValue:``,takesEffect:`now`,fileOnlyReason:`A legacy key: github.teams names teams as org/slug entries and wins whenever it is set.`,...Z},{id:`file-workflows-max-actions-per-poll`,path:`workflows.maxActionsPerPoll`,title:`Actions per poll`,group:`lanes-workflows`,description:`Most actions run in one poll. The rest are dropped and logged.`,control:`number`,range:sn,unit:z$,keywords:[`cap`,`rate limit`],defaultValue:20,takesEffect:`now`,fileOnlyReason:Q,...Z},{id:`file-workflows-rules`,path:`workflows.rules`,title:`Workflow rule definitions`,group:`lanes-workflows`,description:`The rules the Workflows section switches on and off: each names its repositories, one pull request event, its filters and its actions.`,control:`json`,keywords:[`pull requests`,`automation`,`rules`],defaultValue:[],takesEffect:`now`,fileOnlyReason:`Rule definitions are written in config.json; the Workflows section only switches each rule on or off.`,...Z}]),c1=Object.freeze({sections:o1,fileOnly:s1}),l1=Object.freeze(Object.fromEntries(o1.flatMap(e=>(e.legacyIds??[]).map(t=>[t,e.id])))),u1=Object.freeze(o1.reduce((e,t)=>{for(let n of t.settings)for(let r of n.legacyIds??[])e[r.sectionId]={...e[r.sectionId],[r.settingId]:t.id};return e},{}));function d1(e){let t=[],n=e=>{if(!e||typeof e!=`object`)return e;let n=Array.isArray(e)?[]:{};return t.push([e,n]),n},r=n(e);for(let e=t.pop();e;e=t.pop()){let[t,r]=e;for(let[e,i]of Object.entries(t))Object.defineProperty(r,e,{value:n(i),writable:!0,enumerable:!0,configurable:!0})}return r}function f1(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n)return;n=n[e]}return n}function p1(e,t){let n=t.split(`.`),r=e;for(let e of n.slice(0,-1)){if(!r||typeof r!=`object`)return;r=r[e]}r&&typeof r==`object`&&delete r[n.at(-1)]}function m1(e,t,n){let r=t.split(`.`),i=e;for(let e of r.slice(0,-1))(!i[e]||typeof i[e]!=`object`||Array.isArray(i[e]))&&(i[e]={}),i=i[e];i[r.at(-1)]=d1(n)}function h1(e){return e.flatMap(e=>e.settings)}function g1(e){return e.access===`file-only`||e.control===`readonly`}function _1(e){let t=String(e??``).trim().toLowerCase();if(!t||t===`all`)return`all`;if(t===`none`)return[];let n=t.split(`,`).map(e=>e.trim());return n.every(e=>/^\d+$/.test(e)&&Number.isSafeInteger(Number(e))&&Number(e)>0)?n.map(Number):null}var v1=6;function y1(e,t){return e.control===`number`&&typeof t==`number`?t/(e.unit?.storedPerDisplay??1):e.valueKind===`posthog-projects`?Array.isArray(t)?t.length===0?[`none`]:t.map(String):[]:d1(t)}function b1(e){return e.control===`number`&&(e.unit?.storedPerDisplay??1)!==1}function x1(e){return String(Number(e.toFixed(v1)))}function S1(e,t){let n=y1(e,t);return e.valueKind===`posthog-projects`&&Array.isArray(n)?n.join(`, `)||`all`:typeof n==`number`&&e.unit?`${x1(n)} ${e.unit.label}`:JSON.stringify(n??null)}function C1(e,t){if(e.control===`number`){if(e.nullable&&(t==null||String(t).trim()===``))return null;let n=Number(t);if(e.zeroIsNull&&n<=0)return null;let r=n*(e.unit?.storedPerDisplay??1);return e.integer===!1?r:Math.round(r)}if(e.valueKind===`posthog-projects`)return _1(Array.isArray(t)?t.join(`,`):t);if(e.control===`text`||e.control===`password`){let n=String(t??``).trim();return e.nullable&&!n?null:n}return d1(t)}function w1(e){return String(e||``).toLowerCase().match(/[a-z0-9]+/g)||[]}var T1=3,E1=2,D1=1,O1=3,k1=30,A1=16;function j1(e,t){return e===t?T1:e.startsWith(t)?E1:t.length>=O1&&e.includes(t)?D1:0}function M1(e,t,n){let r=0;for(let n of t){let t=Math.max(0,...e.map(e=>j1(e,n)));if(t===0)return 0;r+=t}return r*n}function N1(e){return e.options?.map(e=>e.label).join(`, `)??``}function P1(e){return H1(e.group??``)?.title??``}function F1(e,t,n){let r=M1(w1(e.title),n,1e3),i=M1(w1(e.keywords.join(` `)),n,100),a=M1(t,n,10),o=M1(w1(e.path),n,10),s=M1(w1(N1(e)),n,10),c=M1(w1(e.description),n,1);return r+i+a+o+s+c}function I1(e){return e.section?.title??``}function L1(e,t){return Number(e.section===null)-Number(t.section===null)}function R1(e,t,n){return[[`title`,e.title],[`keywords`,e.keywords.join(` `)],[`section`,t?.title??P1(e)],[`description`,e.description],[`path`,e.path],[`options`,N1(e)]].flatMap(([e,t])=>{let r=[];for(let e of t.matchAll(/[a-z0-9]+/gi)){let t=e[0].toLowerCase();for(let i of n){if(j1(t,i)===0)continue;let n=e.index+t.indexOf(i);r.push({start:n,end:n+i.length})}}let i=[];for(let e of r.sort((e,t)=>e.start-t.start||e.end-t.end)){let t=i.at(-1);t&&e.start<=t.end?t.end=Math.max(t.end,e.end):i.push({...e})}return i.length?[{field:e,text:t,spans:i}]:[]})}function z1(e,t,n=[]){let r=w1(t).slice(0,A1);if(r.length===0)return[];let i=[];for(let t of e){let e=w1(t.title);for(let n of t.settings){let a=F1(n,e,r);a!==0&&i.push({section:t,setting:n,score:a,matches:R1(n,t,r)})}}for(let e of n){let t=F1(e,w1(P1(e)),r);t!==0&&i.push({section:null,setting:e,score:t,matches:R1(e,null,r)})}return i.sort((e,t)=>t.score-e.score||L1(e,t)||I1(e).localeCompare(I1(t))||e.setting.title.localeCompare(t.setting.title)).slice(0,k1)}function B1(e,t,n={},r={}){let i=/^#settings\/([^/]+)(?:\/([^/]+))?$/.exec(String(e||``));if(!i)return null;let a,o;try{a=decodeURIComponent(i[1]),o=i[2]?decodeURIComponent(i[2]):null}catch{return null}let s=n[a]||a,c=(o?r[s]?.[o]:void 0)||s,l=t.find(e=>e.id===c);if(!l)return null;let u=o?l.settings.find(e=>e.id===o||e.legacyIds?.some(e=>e.settingId===o&&e.sectionId===s)):null;return o&&!u?null:{sectionId:c,settingId:u?.id||null,hash:`#settings/${c}${u?`/${u.id}`:``}`}}function V1(e){let t=new Map,n=new Map;for(let r of[...h1(e.sections),...e.fileOnly])t.set(r.id,r),n.set(r.path,r);return{byId:t,byPath:n}}V1(c1);function H1(e,t=c1){let n=t.sections.find(t=>t.id===e);return n?{title:n.title,description:n.description}:a1[e]??null}function U1({checked:e=[],stored:t=[],rendered:n=[]}={}){let r=new Set(n),i=[...e];for(let e of t)typeof e==`string`&&e.trim()&&(r.has(e)||i.includes(e)||i.push(e));return i}function W1(e,t){let n=new Set(e.map(e=>e.id)),r=[...new Set(t)].filter(e=>!n.has(e));return[...e,...r.map(e=>({id:e,name:`Unavailable project (${e})`}))]}var G1=new WeakMap,K1=`Configured`,q1=`•`.repeat(12),J1=`Each line must be a positive whole-number PostHog project id, or the one word none.`,Y1=3,X1=200,Z1=new Set([`customAgents`]),Q1=1e-9,$1=`Lanes`,e0=Object.freeze({now:`Applies now`,"new-sessions":`New sessions`,restart:`After restart`}),t0=Object.freeze({browser:`This browser`,machine:`This machine`});function n0(e,t){let n=t.secretSources;if(!n||typeof n!=`object`)return null;let r=n[e.path];return typeof r==`string`?r:null}function r0(e){let t=e.rtkInstall;return t?.status===`installing`?`No rtk binary found. Glimmervoid is installing it into ~/.glimmervoid/bin now.`:e.rtkInstallSupported===!1?`No rtk binary found. Automatic installation is unavailable on this server platform; install a compatible binary manually.`:t?.status===`failed`?`No rtk binary found. The last install attempt failed: ${t.reason||`unknown reason`}. A save can retry after the ten-minute failure cooldown; saves during the cooldown skip installation.`:`No rtk binary found. Saving requests installation into ~/.glimmervoid/bin on supported server platforms, subject to installer eligibility.`}function i0(e){return e.control===`password`}function a0(e){return`${e.path}${K1}`}function o0(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((e,n)=>o0(e,t[n]));if(!e||!t||typeof e!=`object`||typeof t!=`object`)return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>Object.hasOwn(t,n)&&o0(e[n],t[n]))}function s0(e){return G1.get(e)||null}function c0(e){return Array.isArray(e)?e.map(e=>String(e)):[]}function l0(e){return e.split(`
|
|
175
|
-
`).map(e=>e.trim()).filter(e=>e!==``)}function u0(e){let t=e.range;if(!t)return null;let n={min:Number(y1(e,t.min))};return t.max!=null&&(n.max=Number(y1(e,t.max))),t.exclusiveMin&&(n.exclusiveMin=!0),n}function d0(e){let t=`Default ${S1(e,e.defaultValue)}`;return b1(e)?`${t}, stored as ${JSON.stringify(e.defaultValue)} ${e.unit?.storedLabel??``}`.trimEnd():t}function f0(e,t){let n=d0(e),r=Z1.has(e.path)?void 0:f1(t,e.path);if(r===void 0)return{currentText:null,defaultText:n,jsonFragment:null};let i={};return m1(i,e.path,r),{currentText:`Current ${S1(e,r)}`,defaultText:n,jsonFragment:JSON.stringify(i,null,2)}}function p0(e,t,n){let r=t??e.find(e=>e.id===n.group);if(!r)return H1(n.group??``)?.title??`config.json`;let i=e.find(e=>e.id===r.parent);return i?`${i.title} / ${r.title}`:r.level===`lanes`?`${$1} / ${r.title}`:r.title}function m0(e){let t=/^#settings(?:\?(.*))?$/.exec(String(e??``));if(!t)return null;let n=new URLSearchParams(t[1]??``).get(`q`)??``;return{query:Array.from(n.trim()).slice(0,X1).join(``).trim()}}function h0(e,t){return e.filter(e=>e.parent===t)}function g0(e,t){let n=e.find(e=>e.id===t);return n?n.parent?e.find(e=>e.id===n.parent)??n:n:null}function _0(e){return e.filter(e=>!e.parent)}function v0(e){let t=e.filter(e=>e.level===`lanes`);return[{heading:null,sections:e.filter(e=>e.level!==`lanes`)},{heading:$1,sections:t}].filter(e=>e.sections.length>0)}function y0(e,t,n,r){return r?`hidden`:n.trim()?`search`:t&&g0(e,t)?`section`:`list`}function b0(e,t={}){let n={};for(let r of h1(e)){if(g1(r))continue;if(r.path.startsWith(`pref:`)){let e=r.path.slice(5),i=t.prefs?.[e]??t[r.path];n[r.path]=y1(r,i??r.defaultValue);continue}if(i0(r)){let e=f1(t,a0(r))===!0;n[r.path]=e?q1:``;continue}let e=f1(t,r.path);n[r.path]=y1(r,e??r.defaultValue)}return G1.set(n,d1(t)),n}function x0(e,t,n){let r=h1(e).filter(e=>g1(e)||e.path.startsWith(`pref:`)||n0(e,s0(t)||{})||i0(e)&&n[e.path]===q1?!1:!o0(t[e.path],n[e.path]));if(r.length===0)return{};let i=s0(t)||{},a=(Array.isArray(i.projectChoices)?i.projectChoices:[]).map(e=>e.id).filter(e=>typeof e==`string`),o={},s=new Set;for(let e of r){let[r]=e.path.split(`.`);if(!e.path.includes(`.`)){o[r]=C1(e,n[e.path]);continue}if(!s.has(r)){let e=i[r];o[r]=e&&typeof e==`object`&&!Array.isArray(e)?d1(e):{},s.add(r)}let c=C1(e,n[e.path]);if(e.control===`projects`){let n=t[e.path];c=U1({checked:Array.isArray(c)?c:[],stored:Array.isArray(n)?n:[],rendered:W1(a.map(e=>({id:e,name:e})),Array.isArray(n)?n:[]).map(e=>e.id)})}m1(o,e.path,c)}for(let t of h1(e))i0(t)&&p1(o,a0(t));return delete o.secretSources,o}function S0(e,t,n,r){return Q0(x0(e,t,{...t,[n.path]:r}))}function C0(e){let t=e.unit?.label;return t?` of ${t}`:``}function w0(e){let t=u0(e);if(!t)return`Allowed range is unavailable.`;let n=`${e.integer!==!1&&!b1(e)?`whole number`:`number`}${C0(e)}`;return t.exclusiveMin&&t.min===0?`Must be a positive ${n}.`:t.max==null?`Must be a ${n} ${t.exclusiveMin?`above`:`of at least`} ${x1(t.min)}.`:`Must be a ${n} between ${x1(t.min)} and ${x1(t.max)}.`}function T0(e){return`Must be a multiple of ${S1(e,1)}.`}function E0(e){return Math.abs(e-Math.round(e))<Q1&&Number.isSafeInteger(Math.round(e))}function D0(e,t){return Number(C1({...e,integer:!1,nullable:!1,zeroIsNull:!1},t))}function O0(e,t){if(e.nullable&&(t==null||String(t).trim()===``))return null;let n=e.range;if(!n)return`Allowed range is unavailable.`;if(t==null||String(t).trim()===``)return w0(e);let r=Number(t);if(!Number.isFinite(r))return w0(e);if(e.zeroIsNull&&r<=0)return null;let i=D0(e,r);if(e.integer!==!1&&!E0(i))return b1(e)?T0(e):w0(e);let a=Number(C1(e,r));return n.exclusiveMin&&a<=n.min||!n.exclusiveMin&&a<n.min||n.max!=null&&a>n.max?w0(e):null}function k0(e,t,n=!1){return n?w0(e):O0(e,t.trim())}function A0(e,t){let n=t.trim();if(e.nullable&&n===``)return null;let r=Number(n);return e.zeroIsNull&&r<=0?null:r}function j0(e){if(e==null||e===``)return``;let t=Number(e);return Number.isFinite(t)?x1(t):String(e)}function M0(e,t){return Array.isArray(t)?e.valueKind===`posthog-projects`&&C1(e,t)===null?J1:null:`Must be a list.`}function N0(e,t){let n={};for(let r of h1(e)){if(g1(r))continue;let e=null;r.control===`number`&&(e=O0(r,t[r.path])),r.control===`list`&&(e=M0(r,t[r.path])),r.control===`select`&&r.options&&!r.options.some(e=>e.value===t[r.path])&&(e=`Choose one of the available options.`),e&&(n[r.id]=e)}return P0(h1(e),t,n),n}function P0(e,t,n){for(let r of e){let i=e.find(e=>e.id===r.maximumSettingId);if(!i||n[r.id]||n[i.id])continue;let a=t[r.path],o=t[i.path];Number(C1(r,a))>Number(C1(i,o))&&(n[r.id]=`Minimum must not exceed the maximum (${j0(o)}).`,n[i.id]=`Maximum must not be below the minimum (${j0(a)}).`)}}function F0(e,t){return h1(e).find(e=>e.id===t.maximumSettingId||e.maximumSettingId===t.id)}function I0(e,t,n){let r=F0(e,t);return N0([{id:`scoped`,level:`machine`,title:``,description:``,settings:r?[t,r]:[t]}],n)[t.id]??null}function L0(e,t){return e.control===`number`?A0(e,t):e.control===`list`?l0(t):t}function R0(e,t){return C1(e,e.control===`list`?c0(t):t)}function z0(e){return e?.isDirty===!0}function B0(e,t,n,r,i,a=!1){if(!z0(n))return{kind:`unchanged`};let o=t.control===`number`?k0(t,r,a):null;if(o)return{kind:`invalid`,error:o};let s=L0(t,r);if(o0(C1(t,s),R0(t,n.base)))return{kind:`unchanged`};let c=I0(e,t,{...i,[t.path]:s});return c?{kind:`invalid`,error:c}:{kind:`changed`,value:s}}function V0(e){return i0(e)?``:y1(e,e.defaultValue)}function H0(e,t){return o0(t,V0(e))}function U0(e){return e.presentation?e.presentation:(e.options?.length??0)<=Y1?`segmented`:`select`}function W0(e){return Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:e===!0}function G0(e,t){return e.danger===!0&&!!e.warning&&W0(t)}function K0(e,t){return G0(e,t)}function q0(e){return e.title.charAt(0).toLowerCase()+e.title.slice(1)}function J0(e){return i0(e)?`Reset removes the stored ${q0(e)}. Anything that relies on it stops until a new one is saved.`:K0(e,V0(e))?e.warning??``:null}function Y0(e){return[e.repos.join(`, `),e.trigger,e.actions.map(e=>e.type).join(`, `)].join(` `)}function X0(e){if(e==null)return[`No rules. Add workflows.rules to config.json.`];let t=On.safeParse(e);return t.success?t.data.rules.length===0?[`No rules. Add workflows.rules to config.json.`]:t.data.rules.map(e=>[e.name,e.enabled?`enabled`:`disabled`,Y0(e)].join(` `)):[`The workflows block is invalid, so no rule runs: ${t.error.issues[0]?.message??`unknown problem`}`]}function Z0(e){let t=On.safeParse(e??{});return t.success?t.data.rules.map(e=>({id:e.id,name:e.name,isEnabled:e.enabled,summary:Y0(e)})):[]}function Q0(e){let t=e.workflows;return typeof t!=`object`||!t||Array.isArray(t)?e:{...e,workflows:Object.fromEntries(Object.entries(t).filter(([e])=>e!==`rules`))}}var $0={teamReview:e=>e?.teamReview?.enabled===!0,posthog:e=>e?.posthog?.enabled===!0,visions:e=>e?.visions?.enabled===!0,usage:e=>e?.usage?.enabled!==!1,benchmarks:e=>e?.benchmarks?.enabled===!0,zenView:e=>e?.zenView===!0},e2=[{rule:`teamReview`,sectionId:`lanes-team-review`,settingId:`team-review-enabled`},{rule:`usage`,sectionId:`machine-usage`,settingId:`usage-enabled`},{rule:`posthog`,sectionId:`lanes-posthog`,settingId:`posthog-enabled`},{rule:`visions`,sectionId:`lanes-visions`,settingId:`visions-enabled`},{rule:`benchmarks`,sectionId:`lanes-benchmarks`,settingId:`benchmarks-enabled`},{rule:`zenView`,sectionId:`machine-sessions`,settingId:`zen-view`}],t2=2e4,$=null,n2=null,r2={claude:null,codex:null},i2=null,a2=null,o2=null,s2=null,c2=`all`,l2=!1,u2=null,d2=null,f2=!0,p2=Jj,m2=qj,h2=Kj,g2=!1,_2=null,v2=`day`,y2=new Set,b2=xl({getAck:_c,setAck:vc,signature:()=>xj($,r2.claude),isLooking:()=>!vr(i2)}),x2=null,S2=null,C2=null,w2=null,T2=null,E2=null,D2=null,O2=Af(()=>i2),k2=(e,t)=>hr(`usage`,e,t);function A2(e,t,n,r){let i=j(`div`,`usage-tile`);r&&r!==`ok`&&(i.dataset.tone=r);let a=j(`span`,`usage-tile-value`,t);i.append(a,j(`span`,`usage-tile-label`,e));let o=n?j(`span`,`usage-tile-sub`,n):null;return o&&i.append(o),{tile:i,valueEl:a,subEl:o}}function j2(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function M2(e,t,n){let r=j(`div`,`usage-meter`);r.dataset.tone=String(t),r.setAttribute(`role`,`progressbar`),r.setAttribute(`aria-valuemin`,`0`),r.setAttribute(`aria-valuemax`,`100`),r.setAttribute(`aria-label`,n);let i=j(`span`,`usage-meter-fill`);return r.append(i),N2(r,e),r}function N2(e,t){if(!e)return;let n=j2(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function P2(e,t,n,r){let i=j(`div`,`usage-table-scroll`);i.dataset.usageTable=r;let a=j(`table`,`usage-table`),o=j(`thead`),s=j(`tr`);for(let i of e){let e=j(`th`,i.numeric?`usage-num`:null);if(e.scope=`col`,!i.key){e.textContent=i.label,s.append(e);continue}let a=i.key;e.setAttribute(`aria-sort`,Gj(t,a));let o=j(`button`,`usage-sort`,i.label);o.type=`button`,o.dataset.sortKey=a,o.addEventListener(`click`,()=>{w4(`sort`),_2={kind:`sort`,table:r,key:a},n(a)}),e.append(o),s.append(e)}o.append(s);let c=j(`tbody`);return a.append(o,c),i.append(a),{wrap:i,body:c}}function F2(e,t){for(let n of t){let t=j(`td`,n.numeric?`usage-num`:n.className||null,n.node?null:n.text);n.node&&t.append(n.node),n.title&&(t.title=n.title),n.span&&(t.colSpan=n.span),e.append(t)}}function I2(e){let t=j(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(j(`span`,`usage-share-text`,Rk(e))),t;let n=j(`span`,`usage-share-bar`),r=j(`span`,`usage-share-fill`);return r.style.width=`${j2(e)}%`,n.append(r),t.append(n,j(`span`,`usage-share-text`,Rk(e))),t}function L2(){if(!x2?.isConnected)return;let e=Number($?.ts);x2.textContent=Number.isFinite(e)&&e>0?`Report ${Of(e)}`:``}function R2(){if(!S2?.isConnected)return;let e=Number(n2?.ts);S2.textContent=Number.isFinite(e)&&e>0?`Sessions ${Of(e)}`:``}function z2(){let e=Qk($?.activeBlock);e&&(C2?.isConnected&&(C2.textContent=`${e.pct}%`),w2?.isConnected&&(w2.textContent=`${Jk(e.remainingMinutes)} left`),T2?.isConnected&&N2(T2,e.pct))}function B2(e){let t=Ok.find(t=>t.value===e);return t?t.days:null}function V2(){let e=j(`div`,`usage-controls`),t=j(`label`,`usage-control`);t.append(j(`span`,`usage-control-label`,`Range`));let n=j(`select`,`usage-select`);for(let e of Ok){let t=j(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=c2,n.addEventListener(`change`,()=>{w4(`range`),c2=n.value,E4()}),t.append(n);let r=j(`button`,`usage-refresh`,`Refresh`);r.type=`button`,r.title=`Re-read every transcript from the start`,r.addEventListener(`click`,()=>{w4(`refresh`),E4({force:!0})});let i=j(`span`,`usage-refresh-status`,``);return E2=r,D2=i,x4(),e.append(t,r,i),e}function H2(){let e=k2(`Usage`,Uk($?.daily||[]));e.append(V2()),x2=j(`p`,`usage-meta`,``),e.append(x2),L2(),O2.onTick(L2);let t=Nj($);t&&e.append(j(`p`,`usage-warning`,t));let n=kj($?.pricing?.missing);return n&&e.append(j(`p`,`usage-warning`,n)),e}function U2(){let e=mj.filter(({vendor:e})=>_j(r2[e]));if(e.length===0)return null;let t=k2(`Plan limits`,gj(e.map(({vendor:e})=>e),$?.totals)),n=e.length>1,r=j(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(W2(r2[t],n?i:null));return t.append(r),t}function W2(e,t){let n=j(`div`,`usage-plan-vendor`);t&&n.append(j(`p`,`usage-plan-vendor-label`,t));let r=Ej(e?.ts);if(r){let e=j(`p`,`usage-meta`,r);e.dataset.tone=`warn`,n.append(e)}let i=j(`div`,`usage-plan`);for(let t of fj){let n=pj(e,t.key);n&&i.append(G2(t,n))}let a=j(`p`,`usage-meta`,``);n.append(i,a);let o=()=>{if(!a.isConnected)return;let t=wj(e?.ts);a.textContent=t?`Plan ${t}`:``};return o(),O2.onTick(o),n}function G2(e,t){let n=j(`div`,`usage-plan-window`),r=j(`div`,`usage-plan-head`);r.append(j(`span`,`usage-plan-label`,e.label)),r.append(j(`span`,`usage-plan-used`,Sj(t)));let i=j(`span`,`usage-plan-reset`,``);r.append(i),n.append(r),Number.isFinite(t.pct)&&n.append(M2(t.pct,$k(t.pct),`${e.label} plan limit used`));let a=()=>{i.isConnected&&(i.textContent=Cj(t.resetsAtMs))};return a(),O2.onTick(a),n}function K2(){let e=_A($,r2.claude),t=q2();if(e.length===0&&!t)return null;let n=k2(`Glimmervoid overhead`,e.length>0?lA:null);if(e.length>0){let t=j(`div`,`usage-tiles`);for(let n of e){let e=[vA(n),Ik(n.costUSD)].filter(Boolean).join(`, `);t.append(A2(`${n.label}, share of Claude use`,Rk(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=yA(t);e&&n.append(j(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(j(`p`,`usage-meta`,`Selected range by lane. ${cA}`)),n.append(t)),n}function q2(){if(!pA($))return null;let e=dA($),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=P2([{label:`Lane`},{label:`Cost`,numeric:!0},{label:`Tokens`,numeric:!0},{label:`Sessions`,numeric:!0},{label:`Share`,numeric:!0}],null,()=>{},`lane`);for(let n of e){let e=j(`tr`,`usage-row`);n.lane===`other`&&(e.dataset.lane=`other`),F2(e,[{text:uA(n.lane),className:`usage-lane-cell`},{text:Ik(n.costUSD),numeric:!0},{text:Lk(n.tokens),numeric:!0},{text:SA(n.sessions),numeric:!0},{node:I2(Vk(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function J2(){let e=$?.activeBlock,t=$?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=uj($?.totals),i=k2(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){i.append(j(`p`,`usage-empty`,`No active block.`));let e=Y2();return e&&i.append(e),i}let a=bj($,r2.claude),o=j(`div`,`usage-tiles`);o.append(A2(`block tokens`,Lk(e.tokens??0),Ik(e.costUSD??0),a).tile);for(let t of Xk(e.burn))o.append(A2(t.label,t.value,t.sub,a).tile);let s=Qk(e);if(s){let e=A2(`elapsed`,`${s.pct}%`,`${Jk(s.remainingMinutes)} left`);C2=e.valueEl,w2=e.subEl,o.append(e.tile)}i.append(o),s&&(T2=M2(s.pct,`ok`,`Elapsed share of the current block window`),i.append(T2),O2.onTick(z2));let c=Zk(e.projection);if(c){let e=j(`p`,`usage-projection`,c);e.dataset.tone=a,i.append(e)}let l=Y2();l&&i.append(l);let u=rA($?.tokenLimit);if(!u)return i;let d=tA($?.tokenLimit),f=bj($);i.append(M2(d,f,`Share of the largest completed block seen, estimated`));let p=j(`p`,`usage-meta`,u);p.dataset.tone=f,i.append(p),i.append(j(`p`,`usage-provenance`,yj(`estimated`)));let m=iA(e.projection,$?.tokenLimit);if(m){let e=j(`p`,`usage-meta`,m);e.dataset.tone=f,i.append(e)}return i}function Y2(){let e=$?.anomaly;if(!nj(e))return null;let t=j(`p`,`usage-meta`,ej(e));return t.dataset.tone=tj(e),t}function X2(){let e=tM($?.blocks);if(e.length===0)return null;let t=uj($?.totals),n=k2(`Recent blocks`,t?`newest first, ${t}`:`newest first`),r=j(`div`,`usage-blocks`),i=e.reduce((e,t)=>Math.max(e,t.tokens),0);for(let t of e){let e=j(`div`,`usage-block`);t.isActive&&(e.dataset.active=`true`),e.append(j(`span`,`usage-block-label`,Yk(t.startTs)));let n=j(`span`,`usage-block-bar`),a=j(`span`,`usage-block-fill`);a.style.width=`${j2(Vk(t.tokens,i)??0)}%`,n.append(a),e.append(n),e.append(j(`span`,`usage-block-value`,`${Lk(t.tokens)} ${Ik(t.costUSD)}`)),r.append(e)}return n.append(r),n}function Z2(){let e=$?.totals||{},t=eM($?.daily,Gk($)),n=k2(`Totals`,[Ek,$?.tz?`TZ ${$.tz}`:``].filter(Boolean).join(` `)),r=bj($,r2.claude),i=j(`div`,`usage-tiles`);i.append(A2(`today`,Lk(t?.tokens??0),Ik(t?.costUSD??0),r).tile),i.append(A2(`range total`,Lk(e.tokens??0),Ik(e.costUSD??0)).tile);let a=xA($);a&&i.append(A2(a.label,a.value,a.sub).tile),n.append(i);let o=Q2(e);o&&n.append(o);let s=cj(e)?sj(e):[];if(s.length>0){let e=j(`div`,`usage-tiles usage-vendor-tiles`);for(let t of s)e.append(A2(t.label,Lk(t.tokens),Ik(t.costUSD)).tile);n.append(e)}return S2=j(`p`,`usage-meta`,``),n.append(S2),R2(),O2.onTick(R2),n}function Q2(e){let t=oA(e);if(t.length===0)return null;let n=j(`div`,`usage-compo`),r=j(`div`,`usage-compo-bar`);r.setAttribute(`aria-hidden`,`true`);for(let e of t){if(e.pct<=0)continue;let t=j(`span`,`usage-compo-fill`);t.dataset.part=e.key,t.style.width=`${e.pct}%`,t.title=e.title,r.append(t)}let i=j(`div`,`usage-compo-legend`);for(let e of t){let t=j(`span`,`usage-compo-item`),n=j(`span`,`usage-compo-swatch`);n.dataset.part=e.key,t.append(n,j(`span`,`usage-compo-label`,e.label),j(`span`,`usage-compo-value`,e.value)),i.append(t)}return n.append(r,i),n}function $2(){let e=$?.savings;if(!TA(e))return null;let t=k2(`Savings`,``),n=j(`div`,`usage-tiles`),r=EA(e);r&&n.append(A2(`rtk compression`,r.value,r.sub).tile);let i=DA(e);return i&&n.append(A2(`Prompt cache`,i.value,i.sub).tile),t.append(n),t}function e4(){let e=OA($);if(e.length===0)return null;let t=k2(`Budgets`,`your own ceilings`),n=j(`div`,`usage-budgets`),r=xp(`machine-usage`,`usage-daily-budget`,`Budget settings`);n.appendChild(r);for(let t of e){let e=j(`div`,`usage-budget`),r=j(`div`,`usage-budget-head`);r.append(j(`span`,`usage-budget-label`,kA(t.scope))),r.append(j(`span`,`usage-budget-value`,AA(t))),r.append(j(`span`,`usage-budget-pct`,Rk(jA(t)))),e.append(r),e.append(M2(jA(t),t.tone,MA(t))),n.append(e)}return t.append(n),t}function t4(){let e=$?.daily||[],t=v2,n=$j(UA(e,t),p2),r=NA.find(e=>e.value===t)?.label||`Day`,i=k2(`Over time`,[KA(e)].filter(Boolean).join(`, `));if(i.append(n4()),n.length===0)return i.append(j(`p`,`usage-empty`,`No usage.`)),i;let a=i4(e);a&&i.append(a);let{wrap:o,body:s}=P2([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],p2,e=>{p2=Wj(p2,e),p4()},`day`);for(let e of n){let n=String(e.day??``),r=j(`tr`,`usage-row`);e.source===`history`&&(r.dataset.source=`history`);let i=Qj(e.models),a=`${t}:${n}`,o=a4(a,i.length);F2(r,[{node:r4(e,t),title:n},{text:Lk(e.tokens),numeric:!0},{text:Ik(e.costUSD),numeric:!0},{node:o,className:`usage-toggle-cell`}]),s.append(r),i.length!==0&&y2.has(a)&&s.append(o4(i))}return i.append(o),i}function n4(){let e=j(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of NA){let n=j(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===v2?`true`:`false`),n.addEventListener(`click`,()=>{v2!==t.value&&(w4(`period`),v2=t.value,_2={kind:`period`,view:t.value},p4())}),e.append(n)}return e}function r4(e,t){let n=j(`span`,`usage-period-cell`);return n.append(j(`span`,null,GA(e.day,t))),e.source===`history`&&n.append(j(`span`,`usage-history-tag`,`history`)),n}function i4(e){let{cells:t,max:n}=XA(e,{today:Gk($)});if(t.length===0||n<=0)return null;let r=j(`div`,`usage-heatmap-scroll`),i=j(`div`,`usage-heatmap`);i.setAttribute(`role`,`img`),i.setAttribute(`aria-label`,`Daily usage for the trailing ${Math.max(...t.map(e=>e.week))+1} weeks`);let a=j(`div`,`usage-heatmap-days`);for(let e of JA)a.append(j(`span`,`usage-heatmap-day`,e));for(let e of t){let t=j(`span`,`usage-heatmap-cell`);t.dataset.tone=String(e.tone),e.noData&&(t.dataset.noData=`true`),e.source===`history`&&(t.dataset.source=`history`),t.style.gridColumn=String(e.week+1),t.style.gridRow=String(e.weekday+1),t.title=ZA(e),i.append(t)}return r.append(a,i),r}function a4(e,t){if(t===0)return null;let n=j(`button`,`usage-toggle`,`Models`);return n.type=`button`,n.dataset.usageDay=e,n.setAttribute(`aria-expanded`,y2.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{w4(`expand`),_2={kind:`day`,day:e},y2.has(e)?(y2.delete(e),p4()):(y2.add(e),p4())}),n}function o4(e){let t=j(`tr`,`usage-row-breakdown`),n=j(`td`,`usage-models`);n.colSpan=4;for(let t of e){let e=j(`span`,`usage-model-chip`);e.append(j(`span`,`usage-model-name`,zj(t)),j(`span`,`usage-model-value`,`${Lk(t.tokens)} ${Ik(t.costUSD)}`)),n.append(e)}return t.append(n),t}function s4(e,t){let n=j(`span`,`usage-model-name-wrap`),r=oj(e,t);return r&&n.append(j(`span`,`usage-vendor-tag`,r)),n.append(j(`span`,null,zj(e))),n}function c4(){let e=Qj($?.models,m2),t=$?.totals||{},n=zk(t),r=k2(`By model`,Bk(n));if(e.length===0)return r.append(j(`p`,`usage-empty`,`No models.`)),r;let{wrap:i,body:a}=P2([{label:`Model`,key:`model`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Input`,numeric:!0,key:`input`},{label:`Output`,numeric:!0,key:`output`},{label:`Cache write`,numeric:!0,key:`cacheCreate`},{label:`Cache read`,numeric:!0,key:`cacheRead`}],m2,e=>{m2=Wj(m2,e),p4()},`model`);for(let r of e){let e=j(`tr`,`usage-row`);F2(e,[{node:s4(r,t),className:`usage-model-cell`,title:zj(r)},{text:Lk(r.tokens),numeric:!0},{text:Ik(r.costUSD),numeric:!0},{node:I2(Vk(r[n],t[n])),className:`usage-share-cell`},{text:Lk(r.input),numeric:!0},{text:Lk(r.output),numeric:!0},{text:Lk(r.cacheCreate),numeric:!0},{text:Lk(r.cacheRead),numeric:!0}]),a.append(e)}return r.append(i),r}function l4(){let e=Yj($?.sessions,h2),t=Xj(e,g2),n=$?.totals||{},r=zk(n),i=k2(`By session`,Bk(r));if(e.length===0)return i.append(j(`p`,`usage-empty`,`No sessions.`)),i;let{wrap:a,body:o}=P2([{label:`Session`,key:`label`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Last activity`,numeric:!0,key:`lastTs`}],h2,e=>{h2=Wj(h2,e),p4()},`session`);for(let e of t.rows){let t=j(`tr`,`usage-row`);Lj(e)&&(t.dataset.managed=`true`);let i=Rj(e),a=j(`span`,`usage-ago`,``);F2(t,[{text:i,className:`usage-session-cell`,title:e.project?String(e.project):i},{text:Lk(e.tokens),numeric:!0},{text:Ik(e.costUSD),numeric:!0},{node:I2(Vk(e[r],n[r])),className:`usage-share-cell`},{node:a,numeric:!0}]),O2.track(a,Number(e.lastTs),Of),o.append(t)}return i.append(a),e.length>10&&i.append(u4(t.hiddenCount)),i}function u4(e){let t=j(`div`,`usage-overflow`),n=Zj(e);n&&t.append(j(`p`,`usage-meta`,n));let r=j(`button`,`usage-toggle`,`All sessions`);return r.type=`button`,r.dataset.usageSessionsToggle=`true`,r.setAttribute(`aria-expanded`,g2?`true`:`false`),r.addEventListener(`click`,()=>{w4(`expand`),_2={kind:`sessions-toggle`},g2=!g2,p4()}),t.append(r),t}function d4(){let e=k2(`Not available`,``);return e.append(j(`p`,`usage-empty`,Mj($))),e.append(j(`p`,`usage-empty`,Dk)),e}function f4(){x2=null,S2=null,C2=null,w2=null,T2=null,E2=null,D2=null}function p4({force:e=!1}={}){if(!i2||!e&&vr(i2))return;let t=i2.parentElement,n=t?t.scrollTop:0;O2.reset(),f4(),i2.textContent=``,g4(),t&&(t.scrollTop=n),m4()}function m4(){let e=_2;if(_2=null,!e)return;let t=h4(e);if(!t||!i2)return;let n=i2.querySelector(t);n instanceof HTMLElement&&n.focus()}function h4(e){return e.kind===`day`?`.usage-toggle[data-usage-day="${CSS.escape(e.day)}"]`:e.kind===`period`?`.usage-period-button[data-period-view="${CSS.escape(e.view)}"]`:e.kind===`sessions-toggle`?`.usage-toggle[data-usage-sessions-toggle="true"]`:e.kind===`sort`?`[data-usage-table="${CSS.escape(e.table)}"] .usage-sort[data-sort-key="${CSS.escape(e.key)}"]`:null}function g4(){if(!i2)return;i2.append(H2());let e=U2();if(Pj($)){e&&i2.append(e),i2.append(d4());return}if(!$){e&&i2.append(e),i2.append(j(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,e4()].filter(e=>e!==null);i2.append(_4(`usage-band-now`,J2(),t,{sideFirst:!0}));let n=[$2()].filter(e=>e!==null);i2.append(_4(`usage-band-spend`,Z2(),n));let r=[X2()].filter(e=>e!==null);i2.append(_4(`usage-band-trend`,t4(),r));let i=K2();i&&i2.append(i),i2.append(c4(),l4())}function _4(e,t,n,{sideFirst:r=!1}={}){if(n.length===0)return t;let i=j(`div`,`usage-band ${e}`),a=j(`div`,`usage-band-col`);for(let e of n)a.append(e);return r?(i.append(a,t),i):(i.append(t,a),i)}function v4(){a2&&a2(b2.refresh())}function y4(){b2.acknowledge(),v4()}function b4(){return f2?l2?`Refreshing`:d2??``:$?`${G} The figures below are from before the connection dropped.`:G}function x4(){E2&&(E2.disabled=l2),D2&&(D2.textContent=b4(),!f2||!l2&&d2!==null?D2.dataset.tone=`error`:delete D2.dataset.tone)}function S4(e){l2=e,x4(),u2&&=(clearTimeout(u2),null),e&&(u2=setTimeout(()=>{u2=null,l2=!1,d2=`Usage did not answer within ${Math.round(t2/1e3)} s. Refresh to try again.`,x4()},t2))}function C4(e){a2=e,v4()}function w4(e){o2?.({type:`dashboard-telemetry`,event:`operator_action`,properties:{surface:`usage`,action:e}})}function T4(e){o2=e}function E4({force:e=!1}={}){if(!o2)return;s2=ud(`usage`);let t={type:`request-usage-report`,requestId:s2};e&&(t.force=!0);let n=B2(c2);n!==null&&(t.days=n),d2=null,S4(!0),!o2(t)&&(d2=G,S4(!1))}function D4(e){f2=e,x4()}function O4(e){if(i2)return i2;let t=j(`div`,`usage-content`);return e.appendChild(t),i2=t,O2.ensure(),p4({force:!0}),t}function k4(){p4({force:!0})}function A4(e){n2=e,$&&!Pj($)&&S2?.isConnected?R2():p4()}function j4(e){let t=e;r2={...r2,[hj(t)]:t},p4(),v4()}function M4(e){Fj(e,s2)&&(d2=null,S4(!1),$=e,p4(),v4())}function N4(){let e=$?.pricing||(n2?{source:n2.pricingSource}:null),t=Oj(e?.fetchedAt),n=[Dj(e,t!==null&&t>0?Of(t):``)],r=Mj($);r&&n.push(r);let i=jj($?.scan);return i&&n.push(i),n}var P4=Object.freeze({sounds:()=>pb(),themes:Fb}),F4=2200,I4=1600,L4=`browser-appearance`,R4=`browser-shortcuts`,z4=`lanes-features`,B4=Object.freeze({id:z4,level:`lanes`,title:`Features`,description:`Optional tabs, each hidden until its own toggle is on.`,settings:[]}),V4=`flying-animals`,H4=Object.freeze({ArrowRight:1,ArrowDown:1,ArrowLeft:-1,ArrowUp:-1});function U4(e){if(!e.optionsFrom)return e;let t=P4[e.optionsFrom]?.()??[];return{...e,options:t.map(e=>({value:e.id,label:e.label}))}}function W4(){let e=c1.sections.map(e=>({...e,settings:e.settings.map(U4)})),t=e.findIndex(e=>e.level===`lanes`);return Object.freeze([...e.slice(0,t),B4,...e.slice(t)])}var G4=W4(),K4=!1,q4=null,J4=null,Y4=null,X4=null,Z4=null,Q4=null,$4=null,e3=null,t3=G4[0],n3={},r3={},i3=new Map,a3=new Map,o3=new Map,s3=new WeakMap,c3=Promise.resolve(),l3=new Map,u3=``,d3=null,f3=null,p3=Cu,m3=()=>{},h3=null,g3=!1,_3=!1,v3=null,y3=new Set,b3=new Map;function x3(){return{themeId:Vs(),flyingAnimalsEnabled:Us(),...Nc(),soundEnabled:js(),soundId:mb(Ns()),notificationsEnabled:Fs(),sessionUsageChips:Ls(),phoneArrowPad:zs()}}function S3(e){r3=b0(G4,{...e,prefs:x3()}),Rf(e.agentLogins)}function C3(e){return o3.has(e.id)?o3.get(e.id):r3[e.path]}function w3(e){return[e,...h0(G4,e.id)]}function T3(e){return w3(e).flatMap(e=>e.settings)}function E3(e){return G4.find(t=>t.settings.some(t=>t.id===e.id))??t3}function D3(e,t=null){history.replaceState(history.state,``,vp(e,t))}function O3(e){requestAnimationFrame(()=>{let t=document.getElementById(e),n=t?.closest(`.settings-view-advanced-panel`);n&&(K4=!0,n.hidden=!1,e3?.querySelector(`.settings-view-advanced-toggle`)?.setAttribute(`aria-expanded`,`true`));let r=t?.closest(`.settings-view-setting`);r&&(r.scrollIntoView({block:`center`}),r.classList.remove(`settings-view-setting-flash`),requestAnimationFrame(()=>r.classList.add(`settings-view-setting-flash`)))})}function k3(e){for(let t of Up(Wp)){let n=j(`div`,`shortcut-group`);n.appendChild(j(`div`,`shortcut-group-title`,t.title));let r=j(`dl`,`shortcut-rows`);for(let e of t.items){let t=j(`dt`,`shortcut-keys`);e.combos.forEach((e,n)=>{n>0&&t.appendChild(j(`span`,`shortcut-sep`,`/`)),Gp(t,e)}),r.append(t,j(`dd`,`shortcut-label`,e.label))}n.appendChild(r),e.appendChild(n)}}var A3=[];function j3(e){A3=e}function M3(e){return A3.find(t=>t.gate!==void 0&&`fromSettings`in t.gate&&t.gate.fromSettings===e)?.label}function N3(e){let t=j(`ul`,`settings-view-stack settings-features`);for(let e of e2){let n=G4.find(t=>t.id===e.sectionId),r=F3(e.settingId),i=M3($0[e.rule]);if(!n||!r||!i)continue;let a=C3(r)===!0,o=j(`li`,`settings-feature`),s=j(`div`,`settings-feature-head`);s.append(j(`span`,`settings-feature-name`,i),R6(`feature`,a?`On`:`Off`)),o.append(s,j(`p`,`settings-view-section-description`,n.description),xp(e.sectionId,e.settingId,r.title)),t.appendChild(o)}e.appendChild(t)}function P3(e){let t=j(`div`,`settings-about`),n=j(`span`,`settings-about-version`,`GLIMMERVOID `);n.appendChild(j(`span`,`settings-about-v`,`v0.42.2`));let r=j(`span`,`settings-about-links`),i=j(`a`,`settings-about-link`,`GitHub`);i.href=`https://github.com/${o$}`,i.target=`_blank`,i.rel=`noopener`;let a=j(`a`,`settings-about-link`,`Changelog`);a.href=`https://github.com/${o$}/blob/main/CHANGELOG.md`,a.target=`_blank`,a.rel=`noopener`,r.append(i,a),t.append(n,r),e.appendChild(t)}function F3(e){return G4.flatMap(e=>e.settings).find(t=>t.id===e)??null}function I3(e){if(r3[`pref:soundEnabled`]===e)return;r3[`pref:soundEnabled`]=e;let t=F3(`alert-sounds-enabled`);t&&Z6(t)}var L3={"pref:flyingAnimalsMinGapSeconds":e=>Tc(Number(e)),"pref:flyingAnimalsMaxGapSeconds":e=>Ec(Number(e)),"pref:flyingAnimalsMinDurationSeconds":e=>Dc(Number(e)),"pref:flyingAnimalsMaxDurationSeconds":e=>Oc(Number(e)),"pref:flyingAnimalsScale":e=>kc(Number(e)),"pref:flyingAnimalsOnPhone":e=>Ac(e===!0)};function R3(e,t){if(e.path===`pref:sessionUsageChips`){Rs(t===!0),Mb(t===!0);return}if(e.path===`pref:phoneArrowPad`){Bs(t===!0),Nb(t===!0);return}if(e.path===`pref:themeId`){Hs(String(t)),jb(String(t));return}if(e.path===`pref:flyingAnimalsEnabled`){Ws(t===!0),i$(t===!0);return}let n=L3[e.path];n?(n(t),i$(Us())):e.path===`pref:soundEnabled`?zY(t===!0):e.path===`pref:soundId`?(Ps(String(t)),Tb(String(t))):e.path===`pref:notificationsEnabled`&&(Is(t===!0),t===!0&&sp().then(()=>Z6(e,{force:!0})))}function z3(e,t){let n=a3.get(e.id);n!==void 0&&clearTimeout(n),a3.delete(e.id),t&&i3.set(e.id,t),t||i3.delete(e.id),Q6(e)}function B3(e){z3(e,{tone:`saved`,text:`Saved`}),a3.set(e.id,window.setTimeout(()=>z3(e,null),F4))}function V3(e,t){l3.delete(e.id),e.path.startsWith(`pref:`)?(r3[e.path]=t,R3(e,t),Z6(e),B3(e)):o3.has(e.id)&&JSON.stringify(o3.get(e.id))===JSON.stringify(t)||(o3.set(e.id,t),z3(e,{tone:`saving`,text:`Saving`}),c3=c3.then(()=>H3(e,t)))}async function H3(e,t){let n=S0(G4,r3,e,t);if(Object.keys(n).length===0)o3.delete(e.id),z3(e,null),Z6(e);else{z3(e,{tone:`saving`,text:`Saving`});try{let r=await dd(`update-settings`,{settings:n});if(o3.get(e.id)===t&&o3.delete(e.id),r.type===`settings-error`){z3(e,{tone:`error`,text:String(r.message)}),Z6(e,{force:!0});return}if(r.type!==`settings-updated`){z3(e,{tone:`error`,text:`The server did not confirm the save.`}),Z6(e,{force:!0});return}A8(r.settings),B3(e)}catch(n){o3.get(e.id)===t&&o3.delete(e.id),z3(e,{tone:`error`,text:n?.message||`Failed to save the setting.`}),Z6(e,{force:!0})}}}function U3(e,t){t&&l3.set(e.id,t),t||l3.delete(e.id),Q6(e)}function W3(e,t){if(!t.exclusiveMin)return t.min;if(e.integer!==!1)return t.min+1}function G3(e){return e?`On`:`Off`}function K3(e){let t=j(`div`,`settings-view-toggle-wrap`),n=j(`label`,`settings-view-toggle`),r=j(`input`,`settings-view-checkbox`);r.type=`checkbox`,r.checked=C3(e)===!0,e.id===`desktop-notifications`&&!ap()&&(r.checked=!1,r.disabled=!0),r.setAttribute(`aria-labelledby`,e.id);let i=j(`span`,`settings-view-toggle-state`,G3(r.checked));return r.addEventListener(`change`,()=>{let t=r.checked;K0(e,t)?(r.checked=!1,i.textContent=G3(!1),Zd({title:e.title,message:e.warning??``,confirmLabel:`Turn on`,danger:!0,onConfirm:()=>V3(e,!0)})):(i.textContent=G3(t),V3(e,t))}),n.append(r,i),t.appendChild(n),t}function q3(e,t,n){e.addEventListener(`blur`,t),e.addEventListener(`keydown`,e=>{e.key===`Enter`?(e.preventDefault(),t()):e.key===`Escape`&&(e.preventDefault(),n())})}function J3(e){return e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&[`text`,`number`,`password`].includes(e.type)}function Y3(e,t){s3.set(t,{base:C3(e),isDirty:!1}),t.addEventListener(`input`,()=>{let e=s3.get(t);e&&(e.isDirty=!0)})}function X3(e,t,n){t.value!==n&&(t.value=n),s3.set(t,{base:C3(e),isDirty:!1}),U3(e,null)}function Z3(e,t,n,r=!1){let i=s3.get(t);if(!i)return;let a=B0(G4,e,i,t.value,r3,r);a.kind===`invalid`?U3(e,a.error):a.kind===`unchanged`?X3(e,t,n):K0(e,a.value)?(X3(e,t,n),Zd({title:e.title,message:e.warning??``,confirmLabel:`Save`,danger:!0,onConfirm:()=>V3(e,a.value)})):(s3.set(t,{base:a.value,isDirty:!1}),V3(e,a.value))}function Q3(e){let t=j(`input`,`settings-view-input`);t.type=e.control===`password`?`password`:`text`;let n=()=>String(C3(e)??``);t.value=n(),e.control===`password`&&(t.value=``,t.placeholder=n()?`Configured`:`Not configured`);let r=n0(e,n3);return r&&(t.disabled=!0,t.setAttribute(`aria-description`,`Supplied by ${r}`)),t.autocomplete=`off`,t.spellcheck=!1,t.setAttribute(`aria-labelledby`,e.id),Y3(e,t),q3(t,()=>{if(e.control===`password`){let n=t.value;if(n===``)return;X3(e,t,``),V3(e,n)}else Z3(e,t,n())},()=>X3(e,t,e.control===`password`?``:n())),t}function $3(e){let t=j(`input`,`settings-view-input`),n=u0(e);t.type=`number`;let r=()=>j0(C3(e));t.value=r(),t.step=e.integer===!1?String(e.step??`any`):`1`;let i=n?W3(e,n):void 0;i!=null&&(t.min=String(i)),n?.max!=null&&(t.max=String(n.max)),t.autocomplete=`off`,t.setAttribute(`aria-labelledby`,e.id),Y3(e,t),q3(t,()=>Z3(e,t,r(),t.validity.badInput),()=>X3(e,t,r()));let a=e.unit?.label;if(!a)return t;let o=j(`div`,`settings-view-number`),s=j(`span`,`settings-view-unit`,a);return s.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-description`,a),o.append(t,s),o}function e6(e,t){let n=[...e.querySelectorAll(`[role="radio"]`)],r=n.some(e=>e.dataset.value===t);for(let[e,i]of n.entries()){let n=i.dataset.value===t;i.setAttribute(`aria-checked`,String(n)),i.tabIndex=n||!r&&e===0?0:-1}}function t6(e,t,n){n!==String(C3(e))&&(e6(t,n),V3(e,n),e6(t,String(C3(e))))}function n6(e){let t=j(`div`,`settings-view-segmented`);t.setAttribute(`role`,`radiogroup`),t.setAttribute(`aria-labelledby`,e.id);let n=e.options??[];for(let r of n){let n=j(`button`,`settings-view-segment`,r.label);n.type=`button`,n.dataset.value=r.value,n.setAttribute(`role`,`radio`),n.addEventListener(`click`,()=>t6(e,t,r.value)),t.appendChild(n)}return t.addEventListener(`keydown`,r=>{let i=H4[r.key];if(!i||n.length===0)return;r.preventDefault();let a=Math.max(0,n.findIndex(t=>t.value===String(C3(e)))),o=n[(a+i+n.length)%n.length];t6(e,t,o.value),t.querySelector(`[data-value="${CSS.escape(o.value)}"]`)?.focus()}),e6(t,String(C3(e))),t}function r6(e){let t=j(`select`,`settings-view-input`);t.setAttribute(`aria-labelledby`,e.id);for(let n of e.options??[]){let e=j(`option`,null,n.label);e.value=n.value,t.appendChild(e)}return t.value=String(C3(e)),t.addEventListener(`change`,()=>V3(e,t.value)),t}function i6(e,t){let n=e.valueKind===`posthog-projects`?`One project id per line, or none for no project. Shift+Enter adds a line.`:`One entry per line. Shift+Enter adds a line.`;return t.length>0||!e.listEmptyText?n:`${e.listEmptyText} ${n}`}function a6(e){let t=j(`textarea`,`settings-view-input settings-view-list-input`),n=()=>c0(C3(e)),r=()=>n().join(`
|
|
175
|
+
`).map(e=>e.trim()).filter(e=>e!==``)}function u0(e){let t=e.range;if(!t)return null;let n={min:Number(y1(e,t.min))};return t.max!=null&&(n.max=Number(y1(e,t.max))),t.exclusiveMin&&(n.exclusiveMin=!0),n}function d0(e){let t=`Default ${S1(e,e.defaultValue)}`;return b1(e)?`${t}, stored as ${JSON.stringify(e.defaultValue)} ${e.unit?.storedLabel??``}`.trimEnd():t}function f0(e,t){let n=d0(e),r=Z1.has(e.path)?void 0:f1(t,e.path);if(r===void 0)return{currentText:null,defaultText:n,jsonFragment:null};let i={};return m1(i,e.path,r),{currentText:`Current ${S1(e,r)}`,defaultText:n,jsonFragment:JSON.stringify(i,null,2)}}function p0(e,t,n){let r=t??e.find(e=>e.id===n.group);if(!r)return H1(n.group??``)?.title??`config.json`;let i=e.find(e=>e.id===r.parent);return i?`${i.title} / ${r.title}`:r.level===`lanes`?`${$1} / ${r.title}`:r.title}function m0(e){let t=/^#settings(?:\?(.*))?$/.exec(String(e??``));if(!t)return null;let n=new URLSearchParams(t[1]??``).get(`q`)??``;return{query:Array.from(n.trim()).slice(0,X1).join(``).trim()}}function h0(e,t){return e.filter(e=>e.parent===t)}function g0(e,t){let n=e.find(e=>e.id===t);return n?n.parent?e.find(e=>e.id===n.parent)??n:n:null}function _0(e){return e.filter(e=>!e.parent)}function v0(e){let t=e.filter(e=>e.level===`lanes`);return[{heading:null,sections:e.filter(e=>e.level!==`lanes`)},{heading:$1,sections:t}].filter(e=>e.sections.length>0)}function y0(e,t,n,r){return r?`hidden`:n.trim()?`search`:t&&g0(e,t)?`section`:`list`}function b0(e,t={}){let n={};for(let r of h1(e)){if(g1(r))continue;if(r.path.startsWith(`pref:`)){let e=r.path.slice(5),i=t.prefs?.[e]??t[r.path];n[r.path]=y1(r,i??r.defaultValue);continue}if(i0(r)){let e=f1(t,a0(r))===!0;n[r.path]=e?q1:``;continue}let e=f1(t,r.path);n[r.path]=y1(r,e??r.defaultValue)}return G1.set(n,d1(t)),n}function x0(e,t,n){let r=h1(e).filter(e=>g1(e)||e.path.startsWith(`pref:`)||n0(e,s0(t)||{})||i0(e)&&n[e.path]===q1?!1:!o0(t[e.path],n[e.path]));if(r.length===0)return{};let i=s0(t)||{},a=(Array.isArray(i.projectChoices)?i.projectChoices:[]).map(e=>e.id).filter(e=>typeof e==`string`),o={},s=new Set;for(let e of r){let[r]=e.path.split(`.`);if(!e.path.includes(`.`)){o[r]=C1(e,n[e.path]);continue}if(!s.has(r)){let e=i[r];o[r]=e&&typeof e==`object`&&!Array.isArray(e)?d1(e):{},s.add(r)}let c=C1(e,n[e.path]);if(e.control===`projects`){let n=t[e.path];c=U1({checked:Array.isArray(c)?c:[],stored:Array.isArray(n)?n:[],rendered:W1(a.map(e=>({id:e,name:e})),Array.isArray(n)?n:[]).map(e=>e.id)})}m1(o,e.path,c)}for(let t of h1(e))i0(t)&&p1(o,a0(t));return delete o.secretSources,o}function S0(e,t,n,r){return Q0(x0(e,t,{...t,[n.path]:r}))}function C0(e){let t=e.unit?.label;return t?` of ${t}`:``}function w0(e){let t=u0(e);if(!t)return`Allowed range is unavailable.`;let n=`${e.integer!==!1&&!b1(e)?`whole number`:`number`}${C0(e)}`;return t.exclusiveMin&&t.min===0?`Must be a positive ${n}.`:t.max==null?`Must be a ${n} ${t.exclusiveMin?`above`:`of at least`} ${x1(t.min)}.`:`Must be a ${n} between ${x1(t.min)} and ${x1(t.max)}.`}function T0(e){return`Must be a multiple of ${S1(e,1)}.`}function E0(e){return Math.abs(e-Math.round(e))<Q1&&Number.isSafeInteger(Math.round(e))}function D0(e,t){return Number(C1({...e,integer:!1,nullable:!1,zeroIsNull:!1},t))}function O0(e,t){if(e.nullable&&(t==null||String(t).trim()===``))return null;let n=e.range;if(!n)return`Allowed range is unavailable.`;if(t==null||String(t).trim()===``)return w0(e);let r=Number(t);if(!Number.isFinite(r))return w0(e);if(e.zeroIsNull&&r<=0)return null;let i=D0(e,r);if(e.integer!==!1&&!E0(i))return b1(e)?T0(e):w0(e);let a=Number(C1(e,r));return n.exclusiveMin&&a<=n.min||!n.exclusiveMin&&a<n.min||n.max!=null&&a>n.max?w0(e):null}function k0(e,t,n=!1){return n?w0(e):O0(e,t.trim())}function A0(e,t){let n=t.trim();if(e.nullable&&n===``)return null;let r=Number(n);return e.zeroIsNull&&r<=0?null:r}function j0(e){if(e==null||e===``)return``;let t=Number(e);return Number.isFinite(t)?x1(t):String(e)}function M0(e,t){return Array.isArray(t)?e.valueKind===`posthog-projects`&&C1(e,t)===null?J1:null:`Must be a list.`}function N0(e,t){let n={};for(let r of h1(e)){if(g1(r))continue;let e=null;r.control===`number`&&(e=O0(r,t[r.path])),r.control===`list`&&(e=M0(r,t[r.path])),r.control===`select`&&r.options&&!r.options.some(e=>e.value===t[r.path])&&(e=`Choose one of the available options.`),e&&(n[r.id]=e)}return P0(h1(e),t,n),n}function P0(e,t,n){for(let r of e){let i=e.find(e=>e.id===r.maximumSettingId);if(!i||n[r.id]||n[i.id])continue;let a=t[r.path],o=t[i.path];Number(C1(r,a))>Number(C1(i,o))&&(n[r.id]=`Minimum must not exceed the maximum (${j0(o)}).`,n[i.id]=`Maximum must not be below the minimum (${j0(a)}).`)}}function F0(e,t){return h1(e).find(e=>e.id===t.maximumSettingId||e.maximumSettingId===t.id)}function I0(e,t,n){let r=F0(e,t);return N0([{id:`scoped`,level:`machine`,title:``,description:``,settings:r?[t,r]:[t]}],n)[t.id]??null}function L0(e,t){return e.control===`number`?A0(e,t):e.control===`list`?l0(t):t}function R0(e,t){return C1(e,e.control===`list`?c0(t):t)}function z0(e){return e?.isDirty===!0}function B0(e,t,n,r,i,a=!1){if(!z0(n))return{kind:`unchanged`};let o=t.control===`number`?k0(t,r,a):null;if(o)return{kind:`invalid`,error:o};let s=L0(t,r);if(o0(C1(t,s),R0(t,n.base)))return{kind:`unchanged`};let c=I0(e,t,{...i,[t.path]:s});return c?{kind:`invalid`,error:c}:{kind:`changed`,value:s}}function V0(e){return i0(e)?``:y1(e,e.defaultValue)}function H0(e,t){return o0(t,V0(e))}function U0(e){return e.presentation?e.presentation:(e.options?.length??0)<=Y1?`segmented`:`select`}function W0(e){return Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:e===!0}function G0(e,t){return e.danger===!0&&!!e.warning&&W0(t)}function K0(e,t){return G0(e,t)}function q0(e){return e.title.charAt(0).toLowerCase()+e.title.slice(1)}function J0(e){return i0(e)?`Reset removes the stored ${q0(e)}. Anything that relies on it stops until a new one is saved.`:K0(e,V0(e))?e.warning??``:null}function Y0(e){return[e.repos.join(`, `),e.trigger,e.actions.map(e=>e.type).join(`, `)].join(` `)}function X0(e){if(e==null)return[`No rules. Add workflows.rules to config.json.`];let t=On.safeParse(e);return t.success?t.data.rules.length===0?[`No rules. Add workflows.rules to config.json.`]:t.data.rules.map(e=>[e.name,e.enabled?`enabled`:`disabled`,Y0(e)].join(` `)):[`The workflows block is invalid, so no rule runs: ${t.error.issues[0]?.message??`unknown problem`}`]}function Z0(e){let t=On.safeParse(e??{});return t.success?t.data.rules.map(e=>({id:e.id,name:e.name,isEnabled:e.enabled,summary:Y0(e)})):[]}function Q0(e){let t=e.workflows;return typeof t!=`object`||!t||Array.isArray(t)?e:{...e,workflows:Object.fromEntries(Object.entries(t).filter(([e])=>e!==`rules`))}}var $0={teamReview:e=>e?.teamReview?.enabled===!0,posthog:e=>e?.posthog?.enabled===!0,visions:e=>e?.visions?.enabled===!0,usage:e=>e?.usage?.enabled!==!1,benchmarks:e=>e?.benchmarks?.enabled===!0,zenView:e=>e?.zenView===!0},e2=[{rule:`teamReview`,sectionId:`lanes-team-review`,settingId:`team-review-enabled`},{rule:`usage`,sectionId:`machine-usage`,settingId:`usage-enabled`},{rule:`posthog`,sectionId:`lanes-posthog`,settingId:`posthog-enabled`},{rule:`visions`,sectionId:`lanes-visions`,settingId:`visions-enabled`},{rule:`benchmarks`,sectionId:`lanes-benchmarks`,settingId:`benchmarks-enabled`},{rule:`zenView`,sectionId:`machine-sessions`,settingId:`zen-view`}],t2=2e4,$=null,n2=null,r2={claude:null,codex:null},i2=null,a2=null,o2=null,s2=null,c2=`all`,l2=!1,u2=null,d2=null,f2=!0,p2=Jj,m2=qj,h2=Kj,g2=!1,_2=null,v2=`day`,y2=new Set,b2=xl({getAck:_c,setAck:vc,signature:()=>xj($,r2.claude),isLooking:()=>!vr(i2)}),x2=null,S2=null,C2=null,w2=null,T2=null,E2=null,D2=null,O2=Af(()=>i2),k2=(e,t)=>hr(`usage`,e,t);function A2(e,t,n,r){let i=j(`div`,`usage-tile`);r&&r!==`ok`&&(i.dataset.tone=r);let a=j(`span`,`usage-tile-value`,t);i.append(a,j(`span`,`usage-tile-label`,e));let o=n?j(`span`,`usage-tile-sub`,n):null;return o&&i.append(o),{tile:i,valueEl:a,subEl:o}}function j2(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function M2(e,t,n){let r=j(`div`,`usage-meter`);r.dataset.tone=String(t),r.setAttribute(`role`,`progressbar`),r.setAttribute(`aria-valuemin`,`0`),r.setAttribute(`aria-valuemax`,`100`),r.setAttribute(`aria-label`,n);let i=j(`span`,`usage-meter-fill`);return r.append(i),N2(r,e),r}function N2(e,t){if(!e)return;let n=j2(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function P2(e,t,n,r){let i=j(`div`,`usage-table-scroll`);i.dataset.usageTable=r;let a=j(`table`,`usage-table`),o=j(`thead`),s=j(`tr`);for(let i of e){let e=j(`th`,i.numeric?`usage-num`:null);if(e.scope=`col`,!i.key){e.textContent=i.label,s.append(e);continue}let a=i.key;e.setAttribute(`aria-sort`,Gj(t,a));let o=j(`button`,`usage-sort`,i.label);o.type=`button`,o.dataset.sortKey=a,o.addEventListener(`click`,()=>{w4(`sort`),_2={kind:`sort`,table:r,key:a},n(a)}),e.append(o),s.append(e)}o.append(s);let c=j(`tbody`);return a.append(o,c),i.append(a),{wrap:i,body:c}}function F2(e,t){for(let n of t){let t=j(`td`,n.numeric?`usage-num`:n.className||null,n.node?null:n.text);n.node&&t.append(n.node),n.title&&(t.title=n.title),n.span&&(t.colSpan=n.span),e.append(t)}}function I2(e){let t=j(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(j(`span`,`usage-share-text`,Rk(e))),t;let n=j(`span`,`usage-share-bar`),r=j(`span`,`usage-share-fill`);return r.style.width=`${j2(e)}%`,n.append(r),t.append(n,j(`span`,`usage-share-text`,Rk(e))),t}function L2(){if(!x2?.isConnected)return;let e=Number($?.ts);x2.textContent=Number.isFinite(e)&&e>0?`Report ${Of(e)}`:``}function R2(){if(!S2?.isConnected)return;let e=Number(n2?.ts);S2.textContent=Number.isFinite(e)&&e>0?`Sessions ${Of(e)}`:``}function z2(){let e=Qk($?.activeBlock);e&&(C2?.isConnected&&(C2.textContent=`${e.pct}%`),w2?.isConnected&&(w2.textContent=`${Jk(e.remainingMinutes)} left`),T2?.isConnected&&N2(T2,e.pct))}function B2(e){let t=Ok.find(t=>t.value===e);return t?t.days:null}function V2(){let e=j(`div`,`usage-controls`),t=j(`label`,`usage-control`);t.append(j(`span`,`usage-control-label`,`Range`));let n=j(`select`,`usage-select`);for(let e of Ok){let t=j(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=c2,n.addEventListener(`change`,()=>{w4(`range`),c2=n.value,E4()}),t.append(n);let r=j(`button`,`usage-refresh`,`Refresh`);r.type=`button`,r.title=`Re-read every transcript from the start`,r.addEventListener(`click`,()=>{w4(`refresh`),E4({force:!0})});let i=j(`span`,`usage-refresh-status`,``);return E2=r,D2=i,x4(),e.append(t,r,i),e}function H2(){let e=k2(`Usage`,Uk($?.daily||[]));e.append(V2()),x2=j(`p`,`usage-meta`,``),e.append(x2),L2(),O2.onTick(L2);let t=Nj($);t&&e.append(j(`p`,`usage-warning`,t));let n=kj($?.pricing?.missing);return n&&e.append(j(`p`,`usage-warning`,n)),e}function U2(){let e=mj.filter(({vendor:e})=>_j(r2[e]));if(e.length===0)return null;let t=k2(`Plan limits`,gj(e.map(({vendor:e})=>e),$?.totals)),n=e.length>1,r=j(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(W2(r2[t],n?i:null));return t.append(r),t}function W2(e,t){let n=j(`div`,`usage-plan-vendor`);t&&n.append(j(`p`,`usage-plan-vendor-label`,t));let r=Ej(e?.ts);if(r){let e=j(`p`,`usage-meta`,r);e.dataset.tone=`warn`,n.append(e)}let i=j(`div`,`usage-plan`);for(let t of fj){let n=pj(e,t.key);n&&i.append(G2(t,n))}let a=j(`p`,`usage-meta`,``);n.append(i,a);let o=()=>{if(!a.isConnected)return;let t=wj(e?.ts);a.textContent=t?`Plan ${t}`:``};return o(),O2.onTick(o),n}function G2(e,t){let n=j(`div`,`usage-plan-window`),r=j(`div`,`usage-plan-head`);r.append(j(`span`,`usage-plan-label`,e.label)),r.append(j(`span`,`usage-plan-used`,Sj(t)));let i=j(`span`,`usage-plan-reset`,``);r.append(i),n.append(r),Number.isFinite(t.pct)&&n.append(M2(t.pct,$k(t.pct),`${e.label} plan limit used`));let a=()=>{i.isConnected&&(i.textContent=Cj(t.resetsAtMs))};return a(),O2.onTick(a),n}function K2(){let e=_A($,r2.claude),t=q2();if(e.length===0&&!t)return null;let n=k2(`Glimmervoid overhead`,e.length>0?lA:null);if(e.length>0){let t=j(`div`,`usage-tiles`);for(let n of e){let e=[vA(n),Ik(n.costUSD)].filter(Boolean).join(`, `);t.append(A2(`${n.label}, share of Claude use`,Rk(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=yA(t);e&&n.append(j(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(j(`p`,`usage-meta`,`Selected range by lane. ${cA}`)),n.append(t)),n}function q2(){if(!pA($))return null;let e=dA($),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=P2([{label:`Lane`},{label:`Cost`,numeric:!0},{label:`Tokens`,numeric:!0},{label:`Sessions`,numeric:!0},{label:`Share`,numeric:!0}],null,()=>{},`lane`);for(let n of e){let e=j(`tr`,`usage-row`);n.lane===`other`&&(e.dataset.lane=`other`),F2(e,[{text:uA(n.lane),className:`usage-lane-cell`},{text:Ik(n.costUSD),numeric:!0},{text:Lk(n.tokens),numeric:!0},{text:SA(n.sessions),numeric:!0},{node:I2(Vk(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function J2(){let e=$?.activeBlock,t=$?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=uj($?.totals),i=k2(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){i.append(j(`p`,`usage-empty`,`No active block.`));let e=Y2();return e&&i.append(e),i}let a=bj($,r2.claude),o=j(`div`,`usage-tiles`);o.append(A2(`block tokens`,Lk(e.tokens??0),Ik(e.costUSD??0),a).tile);for(let t of Xk(e.burn))o.append(A2(t.label,t.value,t.sub,a).tile);let s=Qk(e);if(s){let e=A2(`elapsed`,`${s.pct}%`,`${Jk(s.remainingMinutes)} left`);C2=e.valueEl,w2=e.subEl,o.append(e.tile)}i.append(o),s&&(T2=M2(s.pct,`ok`,`Elapsed share of the current block window`),i.append(T2),O2.onTick(z2));let c=Zk(e.projection);if(c){let e=j(`p`,`usage-projection`,c);e.dataset.tone=a,i.append(e)}let l=Y2();l&&i.append(l);let u=rA($?.tokenLimit);if(!u)return i;let d=tA($?.tokenLimit),f=bj($);i.append(M2(d,f,`Share of the largest completed block seen, estimated`));let p=j(`p`,`usage-meta`,u);p.dataset.tone=f,i.append(p),i.append(j(`p`,`usage-provenance`,yj(`estimated`)));let m=iA(e.projection,$?.tokenLimit);if(m){let e=j(`p`,`usage-meta`,m);e.dataset.tone=f,i.append(e)}return i}function Y2(){let e=$?.anomaly;if(!nj(e))return null;let t=j(`p`,`usage-meta`,ej(e));return t.dataset.tone=tj(e),t}function X2(){let e=tM($?.blocks);if(e.length===0)return null;let t=uj($?.totals),n=k2(`Recent blocks`,t?`newest first, ${t}`:`newest first`),r=j(`div`,`usage-blocks`),i=e.reduce((e,t)=>Math.max(e,t.tokens),0);for(let t of e){let e=j(`div`,`usage-block`);t.isActive&&(e.dataset.active=`true`),e.append(j(`span`,`usage-block-label`,Yk(t.startTs)));let n=j(`span`,`usage-block-bar`),a=j(`span`,`usage-block-fill`);a.style.width=`${j2(Vk(t.tokens,i)??0)}%`,n.append(a),e.append(n),e.append(j(`span`,`usage-block-value`,`${Lk(t.tokens)} ${Ik(t.costUSD)}`)),r.append(e)}return n.append(r),n}function Z2(){let e=$?.totals||{},t=eM($?.daily,Gk($)),n=k2(`Totals`,[Ek,$?.tz?`TZ ${$.tz}`:``].filter(Boolean).join(` `)),r=bj($,r2.claude),i=j(`div`,`usage-tiles`);i.append(A2(`today`,Lk(t?.tokens??0),Ik(t?.costUSD??0),r).tile),i.append(A2(`range total`,Lk(e.tokens??0),Ik(e.costUSD??0)).tile);let a=xA($);a&&i.append(A2(a.label,a.value,a.sub).tile),n.append(i);let o=Q2(e);o&&n.append(o);let s=cj(e)?sj(e):[];if(s.length>0){let e=j(`div`,`usage-tiles usage-vendor-tiles`);for(let t of s)e.append(A2(t.label,Lk(t.tokens),Ik(t.costUSD)).tile);n.append(e)}return S2=j(`p`,`usage-meta`,``),n.append(S2),R2(),O2.onTick(R2),n}function Q2(e){let t=oA(e);if(t.length===0)return null;let n=j(`div`,`usage-compo`),r=j(`div`,`usage-compo-bar`);r.setAttribute(`aria-hidden`,`true`);for(let e of t){if(e.pct<=0)continue;let t=j(`span`,`usage-compo-fill`);t.dataset.part=e.key,t.style.width=`${e.pct}%`,t.title=e.title,r.append(t)}let i=j(`div`,`usage-compo-legend`);for(let e of t){let t=j(`span`,`usage-compo-item`),n=j(`span`,`usage-compo-swatch`);n.dataset.part=e.key,t.append(n,j(`span`,`usage-compo-label`,e.label),j(`span`,`usage-compo-value`,e.value)),i.append(t)}return n.append(r,i),n}function $2(){let e=$?.savings;if(!TA(e))return null;let t=k2(`Savings`,``),n=j(`div`,`usage-tiles`),r=EA(e);r&&n.append(A2(`rtk compression`,r.value,r.sub).tile);let i=DA(e);return i&&n.append(A2(`Prompt cache`,i.value,i.sub).tile),t.append(n),t}function e4(){let e=OA($);if(e.length===0)return null;let t=k2(`Budgets`,`your own ceilings`),n=j(`div`,`usage-budgets`),r=xp(`machine-usage`,`usage-daily-budget`,`Budget settings`);n.appendChild(r);for(let t of e){let e=j(`div`,`usage-budget`),r=j(`div`,`usage-budget-head`);r.append(j(`span`,`usage-budget-label`,kA(t.scope))),r.append(j(`span`,`usage-budget-value`,AA(t))),r.append(j(`span`,`usage-budget-pct`,Rk(jA(t)))),e.append(r),e.append(M2(jA(t),t.tone,MA(t))),n.append(e)}return t.append(n),t}function t4(){let e=$?.daily||[],t=v2,n=$j(UA(e,t),p2),r=NA.find(e=>e.value===t)?.label||`Day`,i=k2(`Over time`,[KA(e)].filter(Boolean).join(`, `));if(i.append(n4()),n.length===0)return i.append(j(`p`,`usage-empty`,`No usage.`)),i;let a=i4(e);a&&i.append(a);let{wrap:o,body:s}=P2([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],p2,e=>{p2=Wj(p2,e),p4()},`day`);for(let e of n){let n=String(e.day??``),r=j(`tr`,`usage-row`);e.source===`history`&&(r.dataset.source=`history`);let i=Qj(e.models),a=`${t}:${n}`,o=a4(a,i.length);F2(r,[{node:r4(e,t),title:n},{text:Lk(e.tokens),numeric:!0},{text:Ik(e.costUSD),numeric:!0},{node:o,className:`usage-toggle-cell`}]),s.append(r),i.length!==0&&y2.has(a)&&s.append(o4(i))}return i.append(o),i}function n4(){let e=j(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of NA){let n=j(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===v2?`true`:`false`),n.addEventListener(`click`,()=>{v2!==t.value&&(w4(`period`),v2=t.value,_2={kind:`period`,view:t.value},p4())}),e.append(n)}return e}function r4(e,t){let n=j(`span`,`usage-period-cell`);return n.append(j(`span`,null,GA(e.day,t))),e.source===`history`&&n.append(j(`span`,`usage-history-tag`,`history`)),n}function i4(e){let{cells:t,max:n}=XA(e,{today:Gk($)});if(t.length===0||n<=0)return null;let r=j(`div`,`usage-heatmap-scroll`),i=j(`div`,`usage-heatmap`);i.setAttribute(`role`,`img`),i.setAttribute(`aria-label`,`Daily usage for the trailing ${Math.max(...t.map(e=>e.week))+1} weeks`);let a=j(`div`,`usage-heatmap-days`);for(let e of JA)a.append(j(`span`,`usage-heatmap-day`,e));for(let e of t){let t=j(`span`,`usage-heatmap-cell`);t.dataset.tone=String(e.tone),e.noData&&(t.dataset.noData=`true`),e.source===`history`&&(t.dataset.source=`history`),t.style.gridColumn=String(e.week+1),t.style.gridRow=String(e.weekday+1),t.title=ZA(e),i.append(t)}return r.append(a,i),r}function a4(e,t){if(t===0)return null;let n=j(`button`,`usage-toggle`,`Models`);return n.type=`button`,n.dataset.usageDay=e,n.setAttribute(`aria-expanded`,y2.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{w4(`expand`),_2={kind:`day`,day:e},y2.has(e)?(y2.delete(e),p4()):(y2.add(e),p4())}),n}function o4(e){let t=j(`tr`,`usage-row-breakdown`),n=j(`td`,`usage-models`);n.colSpan=4;for(let t of e){let e=j(`span`,`usage-model-chip`);e.append(j(`span`,`usage-model-name`,zj(t)),j(`span`,`usage-model-value`,`${Lk(t.tokens)} ${Ik(t.costUSD)}`)),n.append(e)}return t.append(n),t}function s4(e,t){let n=j(`span`,`usage-model-name-wrap`),r=oj(e,t);return r&&n.append(j(`span`,`usage-vendor-tag`,r)),n.append(j(`span`,null,zj(e))),n}function c4(){let e=Qj($?.models,m2),t=$?.totals||{},n=zk(t),r=k2(`By model`,Bk(n));if(e.length===0)return r.append(j(`p`,`usage-empty`,`No models.`)),r;let{wrap:i,body:a}=P2([{label:`Model`,key:`model`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Input`,numeric:!0,key:`input`},{label:`Output`,numeric:!0,key:`output`},{label:`Cache write`,numeric:!0,key:`cacheCreate`},{label:`Cache read`,numeric:!0,key:`cacheRead`}],m2,e=>{m2=Wj(m2,e),p4()},`model`);for(let r of e){let e=j(`tr`,`usage-row`);F2(e,[{node:s4(r,t),className:`usage-model-cell`,title:zj(r)},{text:Lk(r.tokens),numeric:!0},{text:Ik(r.costUSD),numeric:!0},{node:I2(Vk(r[n],t[n])),className:`usage-share-cell`},{text:Lk(r.input),numeric:!0},{text:Lk(r.output),numeric:!0},{text:Lk(r.cacheCreate),numeric:!0},{text:Lk(r.cacheRead),numeric:!0}]),a.append(e)}return r.append(i),r}function l4(){let e=Yj($?.sessions,h2),t=Xj(e,g2),n=$?.totals||{},r=zk(n),i=k2(`By session`,Bk(r));if(e.length===0)return i.append(j(`p`,`usage-empty`,`No sessions.`)),i;let{wrap:a,body:o}=P2([{label:`Session`,key:`label`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Last activity`,numeric:!0,key:`lastTs`}],h2,e=>{h2=Wj(h2,e),p4()},`session`);for(let e of t.rows){let t=j(`tr`,`usage-row`);Lj(e)&&(t.dataset.managed=`true`);let i=Rj(e),a=j(`span`,`usage-ago`,``);F2(t,[{text:i,className:`usage-session-cell`,title:e.project?String(e.project):i},{text:Lk(e.tokens),numeric:!0},{text:Ik(e.costUSD),numeric:!0},{node:I2(Vk(e[r],n[r])),className:`usage-share-cell`},{node:a,numeric:!0}]),O2.track(a,Number(e.lastTs),Of),o.append(t)}return i.append(a),e.length>10&&i.append(u4(t.hiddenCount)),i}function u4(e){let t=j(`div`,`usage-overflow`),n=Zj(e);n&&t.append(j(`p`,`usage-meta`,n));let r=j(`button`,`usage-toggle`,`All sessions`);return r.type=`button`,r.dataset.usageSessionsToggle=`true`,r.setAttribute(`aria-expanded`,g2?`true`:`false`),r.addEventListener(`click`,()=>{w4(`expand`),_2={kind:`sessions-toggle`},g2=!g2,p4()}),t.append(r),t}function d4(){let e=k2(`Not available`,``);return e.append(j(`p`,`usage-empty`,Mj($))),e.append(j(`p`,`usage-empty`,Dk)),e}function f4(){x2=null,S2=null,C2=null,w2=null,T2=null,E2=null,D2=null}function p4({force:e=!1}={}){if(!i2||!e&&vr(i2))return;let t=i2.parentElement,n=t?t.scrollTop:0;O2.reset(),f4(),i2.textContent=``,g4(),t&&(t.scrollTop=n),m4()}function m4(){let e=_2;if(_2=null,!e)return;let t=h4(e);if(!t||!i2)return;let n=i2.querySelector(t);n instanceof HTMLElement&&n.focus()}function h4(e){return e.kind===`day`?`.usage-toggle[data-usage-day="${CSS.escape(e.day)}"]`:e.kind===`period`?`.usage-period-button[data-period-view="${CSS.escape(e.view)}"]`:e.kind===`sessions-toggle`?`.usage-toggle[data-usage-sessions-toggle="true"]`:e.kind===`sort`?`[data-usage-table="${CSS.escape(e.table)}"] .usage-sort[data-sort-key="${CSS.escape(e.key)}"]`:null}function g4(){if(!i2)return;i2.append(H2());let e=U2();if(Pj($)){e&&i2.append(e),i2.append(d4());return}if(!$){e&&i2.append(e),i2.append(j(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,e4()].filter(e=>e!==null);i2.append(_4(`usage-band-now`,J2(),t,{sideFirst:!0}));let n=[$2()].filter(e=>e!==null);i2.append(_4(`usage-band-spend`,Z2(),n));let r=[X2()].filter(e=>e!==null);i2.append(_4(`usage-band-trend`,t4(),r));let i=K2();i&&i2.append(i),i2.append(c4(),l4())}function _4(e,t,n,{sideFirst:r=!1}={}){if(n.length===0)return t;let i=j(`div`,`usage-band ${e}`),a=j(`div`,`usage-band-col`);for(let e of n)a.append(e);return r?(i.append(a,t),i):(i.append(t,a),i)}function v4(){a2&&a2(b2.refresh())}function y4(){b2.acknowledge(),v4()}function b4(){return f2?l2?`Refreshing`:d2??``:$?`${G} The figures below are from before the connection dropped.`:G}function x4(){E2&&(E2.disabled=l2),D2&&(D2.textContent=b4(),!f2||!l2&&d2!==null?D2.dataset.tone=`error`:delete D2.dataset.tone)}function S4(e){l2=e,x4(),u2&&=(clearTimeout(u2),null),e&&(u2=setTimeout(()=>{u2=null,l2=!1,d2=`Usage did not answer within ${Math.round(t2/1e3)} s. Refresh to try again.`,x4()},t2))}function C4(e){a2=e,v4()}function w4(e){o2?.({type:`dashboard-telemetry`,event:`operator_action`,properties:{surface:`usage`,action:e}})}function T4(e){o2=e}function E4({force:e=!1}={}){if(!o2)return;s2=ud(`usage`);let t={type:`request-usage-report`,requestId:s2};e&&(t.force=!0);let n=B2(c2);n!==null&&(t.days=n),d2=null,S4(!0),!o2(t)&&(d2=G,S4(!1))}function D4(e){f2=e,x4()}function O4(e){if(i2)return i2;let t=j(`div`,`usage-content`);return e.appendChild(t),i2=t,O2.ensure(),p4({force:!0}),t}function k4(){p4({force:!0})}function A4(e){n2=e,$&&!Pj($)&&S2?.isConnected?R2():p4()}function j4(e){let t=e;r2={...r2,[hj(t)]:t},p4(),v4()}function M4(e){Fj(e,s2)&&(d2=null,S4(!1),$=e,p4(),v4())}function N4(){let e=$?.pricing||(n2?{source:n2.pricingSource}:null),t=Oj(e?.fetchedAt),n=[Dj(e,t!==null&&t>0?Of(t):``)],r=Mj($);r&&n.push(r);let i=jj($?.scan);return i&&n.push(i),n}var P4=Object.freeze({sounds:()=>pb(),themes:Fb}),F4=2200,I4=1600,L4=`browser-appearance`,R4=`browser-shortcuts`,z4=`lanes-features`,B4=Object.freeze({id:z4,level:`lanes`,title:`Features`,description:`Optional tabs, each hidden until its own toggle is on.`,settings:[]}),V4=`flying-animals`,H4=Object.freeze({ArrowRight:1,ArrowDown:1,ArrowLeft:-1,ArrowUp:-1});function U4(e){if(!e.optionsFrom)return e;let t=P4[e.optionsFrom]?.()??[];return{...e,options:t.map(e=>({value:e.id,label:e.label}))}}function W4(){let e=c1.sections.map(e=>({...e,settings:e.settings.map(U4)})),t=e.findIndex(e=>e.level===`lanes`);return Object.freeze([...e.slice(0,t),B4,...e.slice(t)])}var G4=W4(),K4=!1,q4=null,J4=null,Y4=null,X4=null,Z4=null,Q4=null,$4=null,e3=null,t3=G4[0],n3={},r3={},i3=new Map,a3=new Map,o3=new Map,s3=new WeakMap,c3=Promise.resolve(),l3=new Map,u3=``,d3=null,f3=null,p3=Cu,m3=()=>{},h3=null,g3=!1,_3=!1,v3=null,y3=new Set,b3=new Map;function x3(){return{themeId:Vs(),flyingAnimalsEnabled:Us(),...Nc(),soundEnabled:js(),soundId:mb(Ns()),notificationsEnabled:Fs(),sessionUsageChips:Ls(),phoneArrowPad:zs()}}function S3(e){r3=b0(G4,{...e,prefs:x3()}),Rf(e.agentLogins)}function C3(e){return o3.has(e.id)?o3.get(e.id):r3[e.path]}function w3(e){return[e,...h0(G4,e.id)]}function T3(e){return w3(e).flatMap(e=>e.settings)}function E3(e){return G4.find(t=>t.settings.some(t=>t.id===e.id))??t3}function D3(e,t=null){history.replaceState(history.state,``,vp(e,t))}function O3(e){requestAnimationFrame(()=>{let t=document.getElementById(e),n=t?.closest(`.settings-view-advanced-panel`);n&&(K4=!0,n.hidden=!1,e3?.querySelector(`.settings-view-advanced-toggle`)?.setAttribute(`aria-expanded`,`true`));let r=t?.closest(`.settings-view-setting`);r&&(r.scrollIntoView({block:`center`}),r.classList.remove(`settings-view-setting-flash`),requestAnimationFrame(()=>r.classList.add(`settings-view-setting-flash`)))})}function k3(e){for(let t of Up(Wp)){let n=j(`div`,`shortcut-group`);n.appendChild(j(`div`,`shortcut-group-title`,t.title));let r=j(`dl`,`shortcut-rows`);for(let e of t.items){let t=j(`dt`,`shortcut-keys`);e.combos.forEach((e,n)=>{n>0&&t.appendChild(j(`span`,`shortcut-sep`,`/`)),Gp(t,e)}),r.append(t,j(`dd`,`shortcut-label`,e.label))}n.appendChild(r),e.appendChild(n)}}var A3=[];function j3(e){A3=e}function M3(e){return A3.find(t=>t.gate!==void 0&&`fromSettings`in t.gate&&t.gate.fromSettings===e)?.label}function N3(e){let t=j(`ul`,`settings-view-stack settings-features`);for(let e of e2){let n=G4.find(t=>t.id===e.sectionId),r=F3(e.settingId),i=M3($0[e.rule]);if(!n||!r||!i)continue;let a=C3(r)===!0,o=j(`li`,`settings-feature`),s=j(`div`,`settings-feature-head`);s.append(j(`span`,`settings-feature-name`,i),R6(`feature`,a?`On`:`Off`)),o.append(s,j(`p`,`settings-view-section-description`,n.description),xp(e.sectionId,e.settingId,r.title)),t.appendChild(o)}e.appendChild(t)}function P3(e){let t=j(`div`,`settings-about`),n=j(`span`,`settings-about-version`,`GLIMMERVOID `);n.appendChild(j(`span`,`settings-about-v`,`v0.42.3`));let r=j(`span`,`settings-about-links`),i=j(`a`,`settings-about-link`,`GitHub`);i.href=`https://github.com/${o$}`,i.target=`_blank`,i.rel=`noopener`;let a=j(`a`,`settings-about-link`,`Changelog`);a.href=`https://github.com/${o$}/blob/main/CHANGELOG.md`,a.target=`_blank`,a.rel=`noopener`,r.append(i,a),t.append(n,r),e.appendChild(t)}function F3(e){return G4.flatMap(e=>e.settings).find(t=>t.id===e)??null}function I3(e){if(r3[`pref:soundEnabled`]===e)return;r3[`pref:soundEnabled`]=e;let t=F3(`alert-sounds-enabled`);t&&Z6(t)}var L3={"pref:flyingAnimalsMinGapSeconds":e=>Tc(Number(e)),"pref:flyingAnimalsMaxGapSeconds":e=>Ec(Number(e)),"pref:flyingAnimalsMinDurationSeconds":e=>Dc(Number(e)),"pref:flyingAnimalsMaxDurationSeconds":e=>Oc(Number(e)),"pref:flyingAnimalsScale":e=>kc(Number(e)),"pref:flyingAnimalsOnPhone":e=>Ac(e===!0)};function R3(e,t){if(e.path===`pref:sessionUsageChips`){Rs(t===!0),Mb(t===!0);return}if(e.path===`pref:phoneArrowPad`){Bs(t===!0),Nb(t===!0);return}if(e.path===`pref:themeId`){Hs(String(t)),jb(String(t));return}if(e.path===`pref:flyingAnimalsEnabled`){Ws(t===!0),i$(t===!0);return}let n=L3[e.path];n?(n(t),i$(Us())):e.path===`pref:soundEnabled`?zY(t===!0):e.path===`pref:soundId`?(Ps(String(t)),Tb(String(t))):e.path===`pref:notificationsEnabled`&&(Is(t===!0),t===!0&&sp().then(()=>Z6(e,{force:!0})))}function z3(e,t){let n=a3.get(e.id);n!==void 0&&clearTimeout(n),a3.delete(e.id),t&&i3.set(e.id,t),t||i3.delete(e.id),Q6(e)}function B3(e){z3(e,{tone:`saved`,text:`Saved`}),a3.set(e.id,window.setTimeout(()=>z3(e,null),F4))}function V3(e,t){l3.delete(e.id),e.path.startsWith(`pref:`)?(r3[e.path]=t,R3(e,t),Z6(e),B3(e)):o3.has(e.id)&&JSON.stringify(o3.get(e.id))===JSON.stringify(t)||(o3.set(e.id,t),z3(e,{tone:`saving`,text:`Saving`}),c3=c3.then(()=>H3(e,t)))}async function H3(e,t){let n=S0(G4,r3,e,t);if(Object.keys(n).length===0)o3.delete(e.id),z3(e,null),Z6(e);else{z3(e,{tone:`saving`,text:`Saving`});try{let r=await dd(`update-settings`,{settings:n});if(o3.get(e.id)===t&&o3.delete(e.id),r.type===`settings-error`){z3(e,{tone:`error`,text:String(r.message)}),Z6(e,{force:!0});return}if(r.type!==`settings-updated`){z3(e,{tone:`error`,text:`The server did not confirm the save.`}),Z6(e,{force:!0});return}A8(r.settings),B3(e)}catch(n){o3.get(e.id)===t&&o3.delete(e.id),z3(e,{tone:`error`,text:n?.message||`Failed to save the setting.`}),Z6(e,{force:!0})}}}function U3(e,t){t&&l3.set(e.id,t),t||l3.delete(e.id),Q6(e)}function W3(e,t){if(!t.exclusiveMin)return t.min;if(e.integer!==!1)return t.min+1}function G3(e){return e?`On`:`Off`}function K3(e){let t=j(`div`,`settings-view-toggle-wrap`),n=j(`label`,`settings-view-toggle`),r=j(`input`,`settings-view-checkbox`);r.type=`checkbox`,r.checked=C3(e)===!0,e.id===`desktop-notifications`&&!ap()&&(r.checked=!1,r.disabled=!0),r.setAttribute(`aria-labelledby`,e.id);let i=j(`span`,`settings-view-toggle-state`,G3(r.checked));return r.addEventListener(`change`,()=>{let t=r.checked;K0(e,t)?(r.checked=!1,i.textContent=G3(!1),Zd({title:e.title,message:e.warning??``,confirmLabel:`Turn on`,danger:!0,onConfirm:()=>V3(e,!0)})):(i.textContent=G3(t),V3(e,t))}),n.append(r,i),t.appendChild(n),t}function q3(e,t,n){e.addEventListener(`blur`,t),e.addEventListener(`keydown`,e=>{e.key===`Enter`?(e.preventDefault(),t()):e.key===`Escape`&&(e.preventDefault(),n())})}function J3(e){return e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&[`text`,`number`,`password`].includes(e.type)}function Y3(e,t){s3.set(t,{base:C3(e),isDirty:!1}),t.addEventListener(`input`,()=>{let e=s3.get(t);e&&(e.isDirty=!0)})}function X3(e,t,n){t.value!==n&&(t.value=n),s3.set(t,{base:C3(e),isDirty:!1}),U3(e,null)}function Z3(e,t,n,r=!1){let i=s3.get(t);if(!i)return;let a=B0(G4,e,i,t.value,r3,r);a.kind===`invalid`?U3(e,a.error):a.kind===`unchanged`?X3(e,t,n):K0(e,a.value)?(X3(e,t,n),Zd({title:e.title,message:e.warning??``,confirmLabel:`Save`,danger:!0,onConfirm:()=>V3(e,a.value)})):(s3.set(t,{base:a.value,isDirty:!1}),V3(e,a.value))}function Q3(e){let t=j(`input`,`settings-view-input`);t.type=e.control===`password`?`password`:`text`;let n=()=>String(C3(e)??``);t.value=n(),e.control===`password`&&(t.value=``,t.placeholder=n()?`Configured`:`Not configured`);let r=n0(e,n3);return r&&(t.disabled=!0,t.setAttribute(`aria-description`,`Supplied by ${r}`)),t.autocomplete=`off`,t.spellcheck=!1,t.setAttribute(`aria-labelledby`,e.id),Y3(e,t),q3(t,()=>{if(e.control===`password`){let n=t.value;if(n===``)return;X3(e,t,``),V3(e,n)}else Z3(e,t,n())},()=>X3(e,t,e.control===`password`?``:n())),t}function $3(e){let t=j(`input`,`settings-view-input`),n=u0(e);t.type=`number`;let r=()=>j0(C3(e));t.value=r(),t.step=e.integer===!1?String(e.step??`any`):`1`;let i=n?W3(e,n):void 0;i!=null&&(t.min=String(i)),n?.max!=null&&(t.max=String(n.max)),t.autocomplete=`off`,t.setAttribute(`aria-labelledby`,e.id),Y3(e,t),q3(t,()=>Z3(e,t,r(),t.validity.badInput),()=>X3(e,t,r()));let a=e.unit?.label;if(!a)return t;let o=j(`div`,`settings-view-number`),s=j(`span`,`settings-view-unit`,a);return s.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-description`,a),o.append(t,s),o}function e6(e,t){let n=[...e.querySelectorAll(`[role="radio"]`)],r=n.some(e=>e.dataset.value===t);for(let[e,i]of n.entries()){let n=i.dataset.value===t;i.setAttribute(`aria-checked`,String(n)),i.tabIndex=n||!r&&e===0?0:-1}}function t6(e,t,n){n!==String(C3(e))&&(e6(t,n),V3(e,n),e6(t,String(C3(e))))}function n6(e){let t=j(`div`,`settings-view-segmented`);t.setAttribute(`role`,`radiogroup`),t.setAttribute(`aria-labelledby`,e.id);let n=e.options??[];for(let r of n){let n=j(`button`,`settings-view-segment`,r.label);n.type=`button`,n.dataset.value=r.value,n.setAttribute(`role`,`radio`),n.addEventListener(`click`,()=>t6(e,t,r.value)),t.appendChild(n)}return t.addEventListener(`keydown`,r=>{let i=H4[r.key];if(!i||n.length===0)return;r.preventDefault();let a=Math.max(0,n.findIndex(t=>t.value===String(C3(e)))),o=n[(a+i+n.length)%n.length];t6(e,t,o.value),t.querySelector(`[data-value="${CSS.escape(o.value)}"]`)?.focus()}),e6(t,String(C3(e))),t}function r6(e){let t=j(`select`,`settings-view-input`);t.setAttribute(`aria-labelledby`,e.id);for(let n of e.options??[]){let e=j(`option`,null,n.label);e.value=n.value,t.appendChild(e)}return t.value=String(C3(e)),t.addEventListener(`change`,()=>V3(e,t.value)),t}function i6(e,t){let n=e.valueKind===`posthog-projects`?`One project id per line, or none for no project. Shift+Enter adds a line.`:`One entry per line. Shift+Enter adds a line.`;return t.length>0||!e.listEmptyText?n:`${e.listEmptyText} ${n}`}function a6(e){let t=j(`textarea`,`settings-view-input settings-view-list-input`),n=()=>c0(C3(e)),r=()=>n().join(`
|
|
176
176
|
`);t.rows=3,t.value=r(),t.autocomplete=`off`,t.spellcheck=!1,t.placeholder=e.listPlaceholder??``,t.setAttribute(`aria-labelledby`,e.id),Y3(e,t),t.addEventListener(`blur`,()=>Z3(e,t,r())),t.addEventListener(`keydown`,n=>{n.key===`Escape`?(n.preventDefault(),X3(e,t,r())):n.key!==`Enter`||n.shiftKey||(n.preventDefault(),Z3(e,t,r()))});let i=j(`div`,`settings-view-list`);return i.append(t,j(`span`,`settings-view-list-hint`,i6(e,n()))),i}function o6(e){let t=j(`div`,`settings-view-projects`),n=C3(e),r=new Set(Array.isArray(n)?n:[]),i=Array.isArray(n3.projectChoices)?n3.projectChoices:[];i.length===0&&t.appendChild(j(`div`,`settings-empty`,`No configured projects are available.`));for(let n of W1(i,[...r])){let i=j(`label`,`settings-view-project-choice`),a=j(`input`,`settings-view-checkbox`);a.type=`checkbox`,a.checked=r.has(n.id),a.addEventListener(`change`,()=>{let t=C3(e),r=new Set(Array.isArray(t)?t:[]);a.checked&&r.add(n.id),a.checked||r.delete(n.id),V3(e,[...r])}),i.append(a,document.createTextNode(n.name)),t.appendChild(i)}return t}function s6(e,t,{isPrimary:n=!1,isEnabled:r=!0}={}){let i=j(`button`,`btn-dialog ${n?`btn-dialog-confirm`:`btn-dialog-cancel`} settings-update-button`,e);return i.type=`button`,i.disabled=!r,i.addEventListener(`click`,t),i}function c6(e){let t=j(`span`,`settings-update-action-status`,e??``);return t.setAttribute(`role`,`status`),t}function l6(e){let t=Tu(p3,e);t!==p3&&(p3=t,P8())}function u6(){l6(K({type:`update-apply`})?`request-sent`:`request-unsent`)}function d6(){h3=Date.now();let e=K({type:`update-check`});_3=e,v3=e?null:G,P8()}function f6(){return _3?`Checking for updates.`:v3}function p6(){d3?(g3=!1,Yu({status:d3,checkForUpdates:n3.checkForUpdates,now:Date.now(),lastAutoCheckAt:h3})&&d6()):g3=!0}function m6(e){return e===`update`?s6(`Update`,u6,{isPrimary:!0}):e===`restart`?s6(`Restart`,m3,{isPrimary:!0}):s6(`Check for updates`,d6,{isEnabled:!_3})}function h6(){let e=ku({status:d3,journal:f3,request:p3}),t=j(`div`,`settings-update-actions`);if(e.actions.length>0){let n=j(`div`,`settings-update-buttons`);n.append(...e.actions.map(m6)),t.appendChild(n)}let n=f6();return n&&t.appendChild(c6(n)),e.note&&t.appendChild(c6(e.note)),e.command&&t.appendChild(j(`code`,`settings-update-command`,e.command)),t}function g6(e,...t){let n=j(`div`,`settings-update-fact`);return n.append(j(`span`,`settings-update-fact-label`,e),...t),n}function _6(){let e=Hu(f3);if(!e)return null;let t=j(`div`,`settings-update-progress`);t.dataset.state=e.state,t.setAttribute(`role`,`status`),e.terminalLine&&t.appendChild(j(`div`,`settings-update-terminal`,e.terminalLine));let n=j(`ol`,`settings-update-steps`);for(let t of e.steps){let e=j(`li`,`settings-update-step`);e.dataset.status=t.status,e.append(j(`span`,`settings-update-step-state`,t.status),j(`span`,`settings-update-step-label`,t.label)),n.appendChild(e)}if(t.appendChild(n),e.outputTail.length===0)return t;let r=j(`pre`,`settings-update-output`,e.outputTail.join(`
|
|
177
177
|
`));if(e.outputStepId&&(r.dataset.step=e.outputStepId),!e.outputStepLabel)return t.appendChild(r),t;let i=`Output from ${e.outputStepLabel}`;return r.setAttribute(`aria-label`,i),t.append(j(`div`,`settings-update-output-label`,i),r),t}function v6(){let e=Ju(d3),t=[e.label];if(e.behind&&t.push(j(`span`,`settings-update-behind`,e.behind)),e.releaseUrl){let n=j(`a`,`settings-link`,`View release`);n.href=e.releaseUrl,n.target=`_blank`,n.rel=`noopener noreferrer`,t.push(n)}return g6(`Latest`,...t)}function y6(){let e=j(`div`,`settings-view-status-block settings-update-status`),t=Gu(d3,f3),n=j(`div`,`settings-update-summary`,t.headline);n.dataset.tone=t.tone,e.appendChild(n),e.appendChild(g6(`Running`,qu(d3))),Ku(d3)&&e.appendChild(v6());let r=typeof d3?.lastCheckAt==`number`?d3.lastCheckAt:null,i=g6(`Last checked`,Xu({status:d3,checkForUpdates:n3.checkForUpdates,relativeTime:Of(r)}));r&&(i.title=new Date(r).toLocaleString()),e.appendChild(i),e.appendChild(h6());let a=_6();return a&&e.appendChild(a),e}function b6(e){return e===null?`not probed yet`:e?`resolved`:`not found on PATH`}function x6(){let e=Array.isArray(n3.customAgents)?n3.customAgents:[];return e.length===0?[`None declared. Add customAgents to config.json.`]:e.map(e=>{let t=e.args.length>0?`${e.command} ${e.args.join(` `)}`:e.command;return`${e.id} ${e.label} ${t} ${b6(e.resolvable)}`})}function S6(){let e=j(`div`,`settings-view-status-block`);e.appendChild(j(`div`,`settings-section-title`,`Declared agents`));for(let t of x6())e.appendChild(j(`div`,`settings-readonly`,t));return e}function C6(e){b3.set(e,{tone:`ok`,text:`Saved`}),window.setTimeout(()=>{b3.get(e)?.tone===`ok`&&(b3.delete(e),N8())},F4)}async function w6(e,t){y3.add(e.id),b3.delete(e.id),N8();try{let n=await dd(`update-settings`,{settings:{workflows:{rules:[{id:e.id,enabled:t}]}}},{timeoutMs:q});if(y3.delete(e.id),n.type===`settings-error`&&b3.set(e.id,{tone:`error`,text:String(n.message)}),n.type===`settings-updated`){C6(e.id),A8(n.settings);return}}catch(t){b3.set(e.id,{tone:`error`,text:wd(t,q)})}y3.delete(e.id),N8()}function T6(e){let t=Sd(`settings-workflow-rule-status`);if(y3.has(e.id))return t.show(`busy`,`Saving`),t.element;let n=b3.get(e.id);return n&&t.show(n.tone,n.text),t.element}function E6(e){let t=j(`div`,`settings-view-toggle-wrap`),n=j(`label`,`settings-view-toggle`),r=j(`input`,`settings-view-checkbox`);return r.type=`checkbox`,r.checked=e.isEnabled,r.disabled=y3.has(e.id),r.setAttribute(`aria-label`,`Run rule ${e.name}`),r.addEventListener(`change`,()=>{w6(e,r.checked)}),n.append(r,j(`span`,`settings-view-toggle-state`,G3(e.isEnabled)),j(`span`,`settings-readonly`,`${e.name} ${e.summary}`)),t.append(n,T6(e)),t}function D6(){let e=j(`div`,`settings-view-status-block`);e.appendChild(j(`div`,`settings-section-title`,`Rules`));let t=Z0(n3.workflows);if(t.length>0){for(let n of t)e.appendChild(E6(n));return e}for(let t of X0(n3.workflows))e.appendChild(j(`div`,`settings-readonly`,t));return e}function O6(){let e=j(`div`,`settings-view-status-block`);e.appendChild(j(`div`,`settings-section-title`,`Last report`));for(let t of N4())e.appendChild(j(`div`,`settings-readonly`,t));return e}function k6(){let e=j(`div`,`settings-view-status-block`);if((o3.get(`remote-sessions`)??r3.remoteSessions)!==!0)return e.appendChild(j(`div`,`settings-readonly`,`Turn on Remote Coder sessions (experimental) to connect agent logins for them.`)),e;for(let t of[`claude-code`,`codex`]){let n=j(`div`,`settings-telegram-test`),r=j(`button`,`btn-dialog btn-dialog-cancel`,`Connect`);r.type=`button`,r.addEventListener(`click`,()=>Wf(t)),n.append(j(`div`,`settings-readonly`,Hf(zf(t),t)),r),e.appendChild(n)}return e}function A6(e){return e.status===`agent-logins`?k6():e.status===`update-actions`?y6():e.status===`custom-agents`?S6():e.status===`workflows`?D6():j(`div`,`settings-readonly`,`Not available`)}function j6(e){return e.control===`readonly`?A6(e):e.control===`toggle`?K3(e):e.control===`number`?$3(e):e.control===`select`?U0(e)===`segmented`?n6(e):r6(e):e.control===`list`?a6(e):e.control===`projects`?o6(e):Q3(e)}function M6(e){let t=n0(e,n3);return t?`Supplied by ${t}. Change the server environment and restart to replace this credential.`:e.status!==`rtk-install`||C3(e)!==!0||n3.rtkAvailable?``:r0(n3)}function N6(e){if(e.control===`readonly`)return null;if(e.status===`usage-last-report`){let e=O6();return e.classList.add(`settings-view-status-slot`),e}if(e.id===`desktop-notifications`)return L6(e);if(e.status===`telegram-delivery`)return I6();let t=M6(e);return t?j(`div`,`settings-view-warning settings-view-status-slot`,t):null}function P6(){let e=vo.safeParse(n3.telegramDelivery);if(!e.success)return[];let{setupWarning:t,lastFailure:n}=e.data,r=t?[t]:[];return n&&r.push(`The last Telegram send failed at ${new Date(n.failedAt).toLocaleString()}: ${n.message}`),r}function F6(e){e.replaceChildren(...P6().map(e=>j(`p`,`settings-view-warning`,e)))}function I6(){let e=j(`div`,`settings-view-status-slot settings-telegram-delivery`),t=j(`div`,`settings-telegram-delivery-lines`);F6(t);let n=j(`button`,`btn-dialog btn-dialog-cancel`,`Send test message`);n.type=`button`;let r=Sd(`settings-telegram-test-status`);n.addEventListener(`click`,async()=>{n.disabled=!0;let e=await Td(`telegram-test`,{},r,{busyText:`Sending a test message to Telegram.`});n.disabled=!1,e?.type===`telegram-test-result`&&(n3={...n3,telegramDelivery:e.telegramDelivery},F6(t),e.ok?r.show(`ok`,`Sent. Check the Telegram chat for the test message.`):r.show(`error`,`Not sent: ${e.error??`Telegram refused the message.`}`))});let i=j(`div`,`settings-telegram-test`);return i.append(n,r.element),e.append(t,i),e}function L6(e){let t=up(()=>Z6(e,{force:!0}));return t.element.hidden?null:(t.element.classList.add(`settings-view-status-slot`),t.element)}function R6(e,t){let n=j(`span`,`settings-view-chip`,t);return n.dataset.chip=e,n}function z6(e,t){let n=yr(e);return n?n.then(()=>t,()=>`Copy failed`):Promise.resolve(`Copy failed`)}function B6(e,t,{copiedText:n,textToCopy:r}){let i=j(`span`,`settings-view-copy-status`);i.setAttribute(`role`,`status`),t.type=`button`,t.addEventListener(`click`,async()=>{i.textContent=await z6(r(),n),setTimeout(()=>{i.textContent=``},I4)}),e.append(t,i)}function V6(e){let t=j(`div`,`settings-view-setting-heading`),n=E3(e),r=j(`h2`,`settings-view-setting-title`,e.title);r.id=e.id,r.addEventListener(`click`,()=>D3(n.id,e.id));let i=j(`button`,`settings-view-copy-link`,`#`);return i.setAttribute(`aria-label`,`Copy link`),t.appendChild(r),B6(t,i,{copiedText:`Link copied`,textToCopy:()=>new URL(vp(n.id,e.id),location.href).href}),t}function H6(e){let t=j(`div`,`settings-view-chips`);return t.append(R6(`scope`,t0[e.scope]),R6(`effect`,e0[e.takesEffect])),t}function U6(e){return e.control===`readonly`||n0(e,n3)?!1:!H0(e,C3(e))}function W6(e){let t=j(`div`,`settings-view-control-foot`),n=j(`span`,`settings-view-save-status`);n.setAttribute(`role`,`status`);let r=j(`button`,`settings-view-reset`,`Reset`);return r.type=`button`,r.title=`Reset to the default value`,r.addEventListener(`click`,()=>{let t=V0(e),n=J0(e);n===null?V3(e,t):Zd({title:e.title,message:n,confirmLabel:`Reset`,danger:!0,onConfirm:()=>V3(e,t)})}),t.append(n,r),t}function G6(e,t){let n=e.querySelector(`.settings-view-save-status`),r=i3.get(t.id);n&&(n.textContent=r?.text??``,r&&(n.dataset.tone=r.tone),r||delete n.dataset.tone);let i=e.querySelector(`.settings-view-reset`);i&&(i.disabled=!U6(t));let a=e.querySelector(`.settings-view-field-error`),o=l3.get(t.id);a&&!o&&a.remove(),a&&o&&(a.textContent=o),!a&&o&&e.querySelector(`.settings-view-setting-control`)?.appendChild(j(`div`,`settings-view-field-error`,o))}function K6(e){let t=j(`article`,`settings-view-setting`);t.dataset.settingId=e.id,e.control===`readonly`&&(t.dataset.readout=`true`);let n=j(`div`,`settings-view-setting-text`);n.append(V6(e),j(`p`,`settings-view-setting-description`,e.description),H6(e));let r=j(`div`,`settings-view-setting-control`);r.appendChild(j6(e)),e.control!==`readonly`&&r.appendChild(W6(e)),t.append(n,r),G0(e,C3(e))&&t.appendChild(j(`div`,`settings-view-warning settings-warning`,e.warning));let i=N6(e);return i&&t.appendChild(i),G6(t,e),t}function q6(e){return e3?.querySelector(`[data-setting-id="${e.id}"]`)??null}function J6(e){let t=e.querySelector(`.settings-view-setting-control`);t&&(t.querySelector(`[role="radio"][aria-checked="true"]`)??t.querySelector(`input:not([disabled]), textarea:not([disabled]), select:not([disabled]), button:not([disabled])`))?.focus()}function Y6(e,t){if(!J3(e)||!J3(t))return;e.disabled=t.disabled,e.placeholder=t.placeholder;let n=s3.get(t);n&&!z0(s3.get(e))&&(s3.set(e,{base:n.base,isDirty:!1}),e.value!==t.value&&(e.value=t.value))}function X6(e,t,n){if(e===n){Y6(e,t);return}let r=[...e.children],i=[...t.children];for(let[t,a]of i.entries()){let i=r[t];i?i.contains(n)?X6(i,a,n):i.replaceWith(a):e.appendChild(a)}for(let e of r.slice(i.length))e.remove()}function Z6(e,{force:t=!1}={}){let n=q6(e);if(!n)return;let r=document.activeElement,i=n.contains(r),a=i&&!t&&J3(r)?r:null;(!a||!z0(s3.get(a)))&&l3.delete(e.id);let o=K6(e);a?X6(n,o,a):(n.replaceWith(o),i&&J6(o))}function Q6(e){let t=q6(e);t&&G6(t,e)}function $6(e){q6(e)?.querySelector(`.settings-view-setting-control`)?.replaceChildren(A6(e))}function e8(){for(let e of T3(t3))e.control===`readonly`?$6(e):Z6(e)}function t8(){let e=j(`button`,`btn-dialog btn-dialog-cancel`,`Reset all to defaults`);return e.type=`button`,e.addEventListener(`click`,()=>{Pc(),S3(n3),i$(Us()),o8()}),e}function n8(e){let t=j(`div`,`settings-view-advanced`),n=j(`button`,`dialog-advanced-toggle settings-view-advanced-toggle`,`Advanced`);n.type=`button`,n.setAttribute(`aria-expanded`,String(K4)),n.setAttribute(`aria-controls`,`settings-view-advanced-panel`);let r=j(`div`,`dialog-advanced-panel settings-view-advanced-panel`);r.id=`settings-view-advanced-panel`,r.hidden=!K4,n.addEventListener(`click`,()=>{K4=!K4,r.hidden=!K4,n.setAttribute(`aria-expanded`,String(K4))});for(let t of e)r.append(K6(t));return t3.id===L4&&r.append(t8()),t.append(n,r),t}function r8(e){let t=j(`div`,`settings-view-streamer-placeholder`),n=j(`button`,`btn-dialog btn-dialog-confirm`,`Turn off streamer mode`);n.type=`button`;let r=j(`span`,`settings-view-copy-status`,``);r.setAttribute(`role`,`status`),n.addEventListener(`click`,async()=>{n.disabled=!0,r.textContent=``;let e=await rh(!1);n.disabled=!1,r.textContent=e}),t.append(j(`p`,`settings-view-section-description`,`Settings are hidden in streamer mode.`),n,r),e.appendChild(t)}nh(()=>o8());function i8(e){let t=j(`header`,`settings-view-subsection`),n=j(`h2`,`settings-view-subsection-title`,e.title);return n.addEventListener(`click`,()=>D3(e.id)),t.append(n,j(`p`,`settings-view-section-description`,e.description)),t}function a8(e,t){for(let n of t.settings.filter(e=>e.access!==`advanced`))e.appendChild(K6(n)),n.id===V4&&e.appendChild(a$());let n=t.settings.filter(e=>e.access===`advanced`);n.length>0&&e.append(n8(n))}function o8(){if(v8(),u3){m8();return}if(!e3)return;if(e3.textContent=``,eh()){r8(e3);return}let e=j(`header`,`settings-view-section-header`),t=j(`h1`,`settings-view-section-title`,t3.title);if(t.tabIndex=-1,t.addEventListener(`click`,()=>D3(t3.id)),e.append(t,j(`p`,`settings-view-section-description`,t3.description)),e3.appendChild(e),t3.id===R4){let e=j(`div`,`shortcut-groups settings-view-shortcuts`);k3(e),e3.appendChild(e),e3.appendChild(Ov()),e3.appendChild(tee()),P3(e3);return}if(t3.id===z4){N3(e3);return}let n=j(`div`,`settings-view-stack`);for(let e of w3(t3))e.id!==t3.id&&n.appendChild(i8(e)),a8(n,e);e3.appendChild(n)}function s8(e,{focusContent:t=!1,settingId:n=null,updateHash:r=!0,openPhoneSection:i=!0}={}){r&&u3&&(u3=``,Z4&&(Z4.value=``));let a=g0(G4,e)??t3;t3.id!==a.id&&(K4=!1),t3=a;let o=G4.find(t=>t.id===e)??a;c8(X4),i&&Ky()&&(Q4=o.id),o8(),E8(t3)&&T8(),t3.id===`machine-updates`&&p6(),r&&D3(o.id,n),n&&O3(n),t&&e3?.querySelector(`h1`)?.focus()}function c8(e){for(let t of e?.querySelectorAll(`[data-settings-section]`)||[]){let e=t.dataset.settingsSection===t3.id;t.setAttribute(`aria-current`,e?`page`:`false`)}}function l8(e){return e.section!==null}function u8(e){Z4&&(Z4.value=``,u3=``,x8(),s8(e.section.id,{settingId:e.setting.id}))}function d8(e){return z1(c1.sections,e,c1.fileOnly)}function f8(e,t,n,r,i){let a=j(e,t),o=r.matches.find(e=>e.field===i),s=o?n.indexOf(o.text):-1;if(!o||s<0)return a.textContent=n,a;let c=0;for(let e of o.spans)a.append(n.slice(c,s+e.start),j(`mark`,`settings-view-search-highlight`,n.slice(s+e.start,s+e.end))),c=s+e.end;return a.append(n.slice(c)),a}function p8(e,t){let{currentText:n,defaultText:r,jsonFragment:i}=f0(t.setting,n3);if(n!==null&&e.appendChild(j(`span`,`settings-view-search-current`,n)),e.append(j(`span`,`settings-view-search-default`,r),H6(t.setting),j(`p`,`settings-view-list-hint`,`Edit in config.json or with glimmervoid settings set.`)),i===null)return;let a=j(`div`,`settings-view-control-foot`);B6(a,j(`button`,`settings-view-copy-json`,`Copy as JSON`),{copiedText:`JSON copied`,textToCopy:()=>i}),e.appendChild(a)}function m8(){if(!e3)return;if(e3.textContent=``,eh()){r8(e3);return}let e=d8(u3),t=j(`div`,`settings-view-section-header`);if(t.append(j(`h1`,`settings-view-section-title`,`Settings search`),j(`p`,`settings-view-section-description`,`${e.length} ${e.length===1?`result`:`results`} for "${u3}"`)),e3.appendChild(t),e.length===0){e3.appendChild(j(`p`,`settings-empty settings-view-search-empty`,`No settings found.`));return}let n=j(`ol`,`settings-view-search-results`);n.setAttribute(`aria-label`,`Settings search results`);for(let t of e){let e=j(`li`,`settings-view-search-result`);e.tabIndex=-1;let r=p0(G4,t.section,t.setting);e.appendChild(f8(`p`,`settings-view-search-breadcrumb`,r,t,`section`));let i=f8(`span`,`settings-view-setting-title`,t.setting.title,t,`title`);if(l8(t)){let n=j(`button`,`settings-view-search-open`);n.type=`button`,n.appendChild(i),n.addEventListener(`click`,()=>u8(t)),e.appendChild(n)}l8(t)||(e.classList.add(`settings-view-search-file-only`),e.appendChild(i)),e.append(f8(`p`,`settings-view-setting-description`,t.setting.description,t,`description`),f8(`code`,`settings-view-key-path`,t.setting.path,t,`path`));let a=new Set([`title`,`description`,`path`,`section`]);if(!t.matches.some(e=>a.has(e.field))){let n=t.matches.find(e=>e.field===`options`)??t.matches.find(e=>e.field===`keywords`);n&&e.appendChild(f8(`p`,`settings-view-list-hint`,n.text,t,n.field))}l8(t)||p8(e,t),n.appendChild(e)}e3.appendChild(n)}function h8(){return y0(G4,Q4,u3,eh())}var g8=new Set;function _8(e){g8.add(e)}function v8(){if(!Y4)return;let e=h8(),t=Y4.dataset.settingsScreen!==e;if(Y4.dataset.settingsScreen=e,$4&&($4.hidden=e!==`section`),t)for(let e of g8)e()}function y8(){return Ky()&&h8()===`section`}function b8(){if(!y8())return;let e=t3.id;S8(``),X4?.querySelector(`[data-settings-section="${e}"]`)?.focus()}function x8(){if(X4&&Y4){X4.textContent=``;for(let e of v0(_0(G4))){let t=j(`div`,`settings-view-nav-group`);e.heading&&t.appendChild(j(`div`,`settings-view-nav-heading`,e.heading));for(let n of e.sections){let e=j(`button`,`settings-view-nav-item`,n.title);e.type=`button`,e.dataset.settingsSection=n.id,e.addEventListener(`click`,()=>s8(n.id,{focusContent:Ky()})),t.appendChild(e)}X4.appendChild(t)}u3?(v8(),m8()):s8(t3.id,{updateHash:!1,openPhoneSection:!1})}}function S8(e,{updateHash:t=!0}={}){u3=e.trim(),Z4&&(Z4.value=e),Q4=null,t&&history.replaceState(history.state,``,bp(u3)),x8()}function C8(e){if(u3&&e.key===`Enter`&&e.target===Z4){let t=d8(u3).find(l8);if(!t)return;e.preventDefault(),u8(t);return}if(e.key===`Escape`&&u3){if(!Z4)return;e.preventDefault(),S8(``),Z4.focus();return}if(e.key!==`ArrowUp`&&e.key!==`ArrowDown`||!X4)return;let t=[...X4.querySelectorAll(`[data-settings-section]`)].filter(e=>e instanceof HTMLElement),n=document.activeElement;if(!(n instanceof HTMLElement))return;let r=t.indexOf(n);r<0||(e.preventDefault(),t[(r+(e.key===`ArrowDown`?1:-1)+t.length)%t.length].focus())}function w8(e,{onRestart:t=()=>{}}={}){m3=t,BY(I3),q4=e,q4.textContent=``,Y4=j(`div`,`settings-view-shell`);let n=j(`div`,`settings-view-sidebar`);Z4=j(`input`,`settings-view-search`),Z4.type=`search`,Z4.placeholder=`Search settings`,Z4.setAttribute(`aria-label`,`Search settings`),X4=j(`nav`,`settings-view-nav`),X4.setAttribute(`role`,`navigation`),X4.setAttribute(`aria-label`,`Settings sections`),$4=j(`button`,`settings-view-back`,`Back`),$4.type=`button`,$4.hidden=!0,$4.setAttribute(`aria-label`,`Back to settings sections`),$4.addEventListener(`click`,b8),e3=j(`div`,`settings-view-content`),e3.setAttribute(`aria-live`,`polite`),Z4.addEventListener(`input`,()=>{let e=Z4;e&&S8(e.value)}),Z4.addEventListener(`keydown`,C8),X4.addEventListener(`keydown`,C8),n.append(Z4,$4,X4),Y4.append(n,e3),q4.appendChild(Y4),S3(n3),x8(),T8(),J4?.disconnect(),J4=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&T8()}),J4.observe(q4)}function T8(){hb().then(D8)}function E8(e){return T3(e).some(e=>e.path===`pref:soundId`)}function D8(){if(G4=W4(),t3=g0(G4,t3.id)??G4[0],r3[`pref:soundId`]=mb(Ns()),u3){m8();return}let e=F3(`alert-sound`);e&&E8(t3)&&Z6(e)}function O8(e=null,t=null){let n=m0(e??location.hash);n?S8(n.query):(S8(``,{updateHash:!1}),Ky()&&!e?history.replaceState(history.state,``,bp(``)):s8(e||t3.id,{settingId:t}))}function k8(e){let t=m0(e);if(t){let e=bp(t.query);return{sectionId:e,settingId:null,hash:e}}return B1(e,G4,l1,u1)}function A8(e){e&&(n3=e,S3(n3),u3?m8():e8())}function j8(e){N8()}function M8(e,t){let n=t.querySelector(`.settings-view-status-slot`),r=N6(e);n&&r&&n.replaceWith(r),n&&!r&&n.remove(),!n&&r&&t.appendChild(r)}function N8(){for(let e of T3(t3)){if(!e.status)continue;let t=q6(e);t&&(e.control===`readonly`?$6(e):M8(e,t))}}function P8(){if(t3.id!==`machine-updates`)return;let e=F3(`update-actions`);e&&$6(e)}function F8(e){d3=e,_3=!1,v3=null,p3=Tu(p3,`status-frame`),P8(),g3&&t3.id===`machine-updates`&&p6()}function I8(e){f3=e,p3=Tu(p3,`progress-frame`),P8()}function L8(e){if(e.scope!==`update`)return!1;let t=wu(e.message),n=p3.requested;return p3=Tu(p3,`error-frame`,t),_3=!1,n||(v3=t),P8(),!0}function R8(){t3.id===L4&&o8()}window.matchMedia(`(prefers-reduced-motion: reduce)`).addEventListener(`change`,R8),qy(()=>{Q4=null,v8(),R8()}),Bf(N8);function z8(e,t){return typeof t!=`string`||t===``?{knownBuild:e,reload:!1}:e==null?{knownBuild:t,reload:!1}:e===t?{knownBuild:e,reload:!1}:{knownBuild:t,reload:!0}}var B8=`•`.repeat(8),V8=`[^/\\\\\\s"'\`<>:]+`,H8=RegExp(`(?<![\\w./\\\\-])(?:/home/${V8}|/Users/${V8}|[A-Za-z]:[\\\\/]Users[\\\\/]${V8}|/root(?![\\w.-]))`,`g`);function U8(e){let t=Bx(e);if(t.length===0)return e;let n=``,r=0;for(let i of t)n+=e.slice(r,i.start)+B8,r=i.end;return n+e.slice(r)}function W8(e){return e.replace(H8,`~`)}function G8(e){return W8(U8(e))}var K8=`.xterm, input, textarea, script, style, [contenteditable]:not([contenteditable="false"])`,q8=[`title`,`label`],J8=new WeakMap,Y8=new WeakMap,X8=null;function Z8(e){let t=e instanceof Element?e:e.parentElement;return!t||t.closest(K8)!==null}function Q8(e){let t=e.parentElement?.closest(`option`);return t!=null&&!t.hasAttribute(`value`)}function $8(e,t){if(t&&e===t.masked)return t;let n=G8(e);return n===e?null:{original:e,masked:n}}function e5(e){let t=Q8(e)?null:$8(e.data,J8.get(e));t?(J8.set(e,t),e.data!==t.masked&&(e.data=t.masked)):J8.delete(e)}function t5(e,t){let n=e.getAttribute(t),r=Y8.get(e),i=n===null?null:$8(n,r?.get(t));if(!i){r?.delete(t);return}let a=r??new Map;a.set(t,i),Y8.set(e,a),n!==i.masked&&e.setAttribute(t,i.masked)}function n5(e){for(let t of q8)t5(e,t)}function r5(e){return e instanceof Element&&e.matches(K8)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}function i5(e){n5(e);let t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,r5);for(let e=t.nextNode();e;e=t.nextNode())e instanceof Text&&e5(e),e instanceof Element&&n5(e)}function a5(e){Z8(e)||(e instanceof Text&&e5(e),e instanceof Element&&i5(e))}function o5(e){e instanceof Element&&!Z8(e)&&n5(e)}function s5(e){let t=new Set,n=new Set;for(let r of e){if(r.type===`childList`)for(let e of r.addedNodes)t.add(e);r.type===`characterData`&&t.add(r.target),r.type===`attributes`&&n.add(r.target)}for(let e of t)e.isConnected&&a5(e);for(let e of n)e.isConnected&&o5(e)}function c5(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);l5(e);for(let e=t.nextNode();e;e=t.nextNode())l5(e)}function l5(e){if(e instanceof Text){let t=J8.get(e);t&&e.data===t.masked&&(e.data=t.original);return}if(!(e instanceof Element))return;let t=Y8.get(e);if(t)for(let[n,r]of t)e.getAttribute(n)===r.masked&&e.setAttribute(n,r.original)}function u5(){if(X8)return;let e=new MutationObserver(t=>{s5(t),e.takeRecords()});i5(document.body),e.observe(document.body,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:q8}),X8=e}function d5(){X8&&(X8.disconnect(),X8=null,c5(document.body),J8=new WeakMap,Y8=new WeakMap)}function f5(e){e?u5():d5()}function p5(){f5(eh()),nh(f5)}function m5(e){if(typeof e!=`object`||!e||!(`telemetry`in e))return!1;let{telemetry:t}=e;return typeof t!=`object`||!t||!(`enabled`in t)?!1:t.enabled===!0}function h5(e){return typeof e!=`object`||!e||!(`telemetryForcedOff`in e)?!1:e.telemetryForcedOff===!0}function g5(e,t){return t||h5(e)?!1:m5(e)}var _5=2500;function v5({hasSnapshot:e,connectingTerminalCount:t,msSinceConnected:n}){return n<2500&&(!e||t>0)?`wait`:`reveal`}var y5=2166136261,b5=16777619;function x5(e){let t=y5;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,b5)>>>0;return t}var S5=18e4,C5=2**32,w5=new Set([A.INITIALIZING,A.STARTING,A.RUNNING,A.WAITING,A.IDLE,A.COMPLETE,A.FAILED]),T5=new Map([[A.INITIALIZING,Yn.INITIALIZING],[A.STARTING,Yn.STARTING],[A.RUNNING,Yn.RUNNING],[A.IDLE,Yn.IDLE]]),E5=new Map([[A.INITIALIZING,`resting`],[A.STARTING,`resting`],[A.WAITING,`alert`],[A.FAILED,`alert`],[A.COMPLETE,`sitting`],[A.IDLE,`asleep`]]);function D5(e){return w5.has(e)}function O5(e,t){let n=x5(e)/C5,r=Go(t,-1,()=>n);return r===null?null:Ro[r]??null}function k5(e){let t=x5(`${e}#spot`);return{leftPercent:6+t%78,topPercent:12+(t>>>8)%62,ambleDistancePx:24+(t>>>16)%64,ambleSeconds:9+(t>>>24)%9}}function A5({state:e,activity:t,lastOutputAtMs:n,nowMs:r}){return e===A.RUNNING?n!==void 0&&r-n>=S5?`asleep`:t===`quiet`?`resting`:`ambling`:E5.get(e)??`asleep`}function j5({state:e,unseenOutcome:t}){return e===A.WAITING?er.WAITING:e===A.FAILED&&t===`failed`?er.FAILED:null}function M5(e,t){return T5.get(e)??Cg(e,t)}var N5=new Set([A.RUNNING,A.STARTING,A.INITIALIZING]),P5=window.matchMedia?.(`(prefers-reduced-motion: reduce)`),F5=null,I5=!1,L5=null,R5=null,z5=new Map;function B5(e){let t=j(`div`,`zen-calm`),n=j(`div`,`zen-status-line`);n.setAttribute(`role`,`status`);let r=j(`span`,`zen-working-count`);n.append(j(`h2`,`zen-all-clear`,`ALL CLEAR`),r);let i=j(`div`,`zen-meadow`);i.setAttribute(`aria-label`,`Sessions`),t.append(n,i);let a=j(`div`,`zen-stage`),o=j(`div`,`zen-reason-line`);o.setAttribute(`role`,`status`);let s=j(`span`,`zen-staged-need`),c=j(`span`,`zen-queued-behind`);o.append(s,c);let l=j(`div`,`zen-pet-strip`);l.setAttribute(`aria-label`,`Other sessions`);let u=j(`button`,`btn-dialog`,`Next`);u.type=`button`,u.addEventListener(`click`,G5);let d=j(`div`,`zen-stage-bar`);d.append(o,l,u,Kp(Bp(`next-attention`,Wp)));let f=j(`div`,`zen-card-slot`);a.append(d,f),a.hidden=!0,e.append(t,a),F5={calm:t,workingCount:r,meadow:i,stage:a,stagedNeed:s,queuedBehind:c,petStrip:l,cardSlot:f}}function V5(){return I5}function H5(){if(F5){I5=!0;for(let e of z5.values())e.root.remove();z5.clear(),W5()}}function U5(){I5&&=(X5(),R5=null,!1)}function W5(){if(!I5)return;let e=J5();R5!==null&&!q5(R5)&&(R5=null),Y5(R5??xg(e,L5),e)}function G5(){if(!I5)return;R5=null;let e=L5,t=e===null?void 0:P.get(e),n=t!==void 0&&Eg({state:t.currentState,unseenOutcome:t.unseenOutcome});e!==null&&n&&fN(e);let r=J5().filter(t=>!n||t!==e);Y5(bg(r,e),r)}function K5(e){I5&&q5(e)&&(R5=e,Y5(e,J5()))}function q5(e){let t=P.get(e);return t!==void 0&&D5(t.currentState)}function J5(){return Ag(vg(Uv()))}function Y5(e,t){if(!F5)return;let n=e===null?void 0:P.get(e);if(e===null||!n){X5(),Q5(F5);return}let r=L5!==e;L5=e,F5.calm.hidden=!0,F5.stage.hidden=!1,Z5(F5,n,t.filter(t=>t!==e).length),$5(F5.petStrip,e),(jr()!==e||n.card.parentElement!==F5.cardSlot)&&(Mr(n,e,F5.cardSlot,{className:`zen-staged`}),VC(n,e,!0),r&&a7(n,e))}function X5(){L5!==null&&jr()===L5&&Nr(),L5=null}function Z5(e,t,n){e.stagedNeed.textContent=M5(t.currentState,t.pendingPromptKind),e.stagedNeed.dataset.state=t.currentState,e.queuedBehind.textContent=`${n} more waiting`,e.queuedBehind.hidden=n===0}function Q5(e){e.stage.hidden=!0,e.calm.hidden=!1;let t=Uv().filter(e=>N5.has(e.state)).length;e.workingCount.textContent=`${t} working`,$5(e.meadow,null)}function $5(e,t){let n=vg(Uv()).filter(e=>D5(e.state)&&e.id!==t),r=new Set(n.map(e=>e.id));for(let[e,t]of z5)r.has(e)||(t.root.remove(),P.has(e)||z5.delete(e));for(let t of n){let n=z5.get(t.id)??e7(t.id);n.root.parentElement!==e&&e.append(n.root),t7(n,t.ui,t.name)}}function e7(e){let t=j(`button`,`zen-pet`);t.type=`button`,t.dataset.sessionId=e;let n=k5(e);t.style.setProperty(`--zen-pet-left`,`${n.leftPercent}%`),t.style.setProperty(`--zen-pet-top`,`${n.topPercent}%`),t.style.setProperty(`--zen-pet-amble-distance`,`${n.ambleDistancePx}px`),t.style.setProperty(`--zen-pet-amble-duration`,`${n.ambleSeconds}s`),t.addEventListener(`click`,()=>K5(e));let r=j(`span`,`zen-pet-walker`),i=j(`span`,`zen-pet-bubble`);i.setAttribute(`aria-hidden`,`true`);let a=j(`span`,`zen-pet-facing`),o=j(`span`,`zen-pet-hopper`),s=O5(e,Mc().flyingAnimalsExcludedSprites);o.append(s?Ic(s,`zen-pet-sprite`):j(`span`,`zen-pet-dot`)),a.append(o);let c=j(`span`,`zen-pet-zzz`,`zzz`);c.setAttribute(`aria-hidden`,`true`);let l=j(`span`,`zen-pet-name`);r.append(i,a,c,l),t.append(r);let u={root:t,hopper:o,bubble:i,name:l};return z5.set(e,u),u}function t7(e,t,n){r7(e,t,performance.now()),e.root.dataset.state=t.currentState,e.name.textContent!==n&&(e.name.textContent=n),e.root.setAttribute(`aria-label`,n),e.root.title=`${gN(t.path)}: ${M5(t.currentState,t.pendingPromptKind)}`;let r=j5({state:t.currentState,unseenOutcome:t.unseenOutcome});e.bubble.hidden=r===null,r!==null&&ev(e.bubble,r)}function n7(e){P5?.matches||document.hidden||!e.hopper.animate||e.hopper.animate([{transform:`translateY(0)`},{transform:`translateY(-6px)`,offset:.4},{transform:`translateY(0)`}],{duration:320,easing:`cubic-bezier(0.22, 1, 0.36, 1)`})}function r7(e,t,n){e.root.dataset.mood=A5({state:t.currentState,activity:t._activity,lastOutputAtMs:t._lastOutputAt,nowMs:n})}function i7(e,t){if(!I5)return;let n=e.card?.dataset.id,r=n?z5.get(n):void 0;r?.root.isConnected&&(r7(r,e,performance.now()),t===`beat`&&n7(r))}mf(i7),Tf(()=>{if(!I5)return;let e=performance.now();for(let[t,n]of z5){let r=P.get(t);r&&n.root.isConnected&&r7(n,r,e)}});function a7(e,t){requestAnimationFrame(()=>requestAnimationFrame(()=>{I5&&L5===t&&!document.hidden&&document.hasFocus()&&e.term?.focus()}))}function o7(e,t){return t.isPhoneShellActive?t.phoneScreen===e:t.activeView===e}function s7(e,t){return e.flatMap(e=>!e.gate||!(`fromSettings`in e.gate)?[]:[{view:e,isAvailable:e.gate.fromSettings(t)}])}function c7(e){return{isActive:e===!0||typeof e==`string`,level:typeof e==`string`?e:null}}function l7(e,t){e?.refreshOn?.includes(t)&&e.refresh?.(t)}function u7(e,t,n){for(let r of e)o7(r.view,t)&&l7(r,n)}function d7(e){let t=[{view:`focus`,label:`Focus`,panelClass:`focus-view`,hasOwnPhoneScreen:!0,hasPanelChrome:!1,hasReviewSidebar:!0,mount:()=>SP({rail:document.getElementById(`focus-rail`),center:document.getElementById(`focus-center`),resizer:document.getElementById(`focus-rail-resizer`)}),activate:YP,deactivate:QP},{view:`zen`,label:`Zen`,panelClass:`zen-view`,hasOwnPhoneScreen:!0,hasPanelChrome:!1,gate:{fromSettings:$0.zenView},mount:B5,activate:H5,deactivate:U5},{view:`prs`,label:`Reviews`,glyph:`⇅`,panelClass:`pr-view`,gate:{fromSettings:$0.teamReview},mount:t=>CY(t,{openTerminal:e.openTerminal,openReviews:e.openReviews}),attention:{subscribe:fY,acknowledge:SY},onConnectionChange:e=>{$W(e),_Y(e)}},{view:`issues`,label:`Issues`,glyph:`#`,panelClass:`issues-view`,mount:pZ,refreshOn:[`shown`],refresh:mZ,onConnectionChange:gZ},{view:`usage`,label:`Usage`,glyph:`◔`,panelClass:`usage-view`,gate:{fromSettings:$0.usage},mount:O4,attention:{subscribe:C4,acknowledge:y4},onConnectionChange:D4,refreshOn:[`shown`,`connected`,`usage-sessions`],refresh:e=>{e===`shown`&&k4(),E4()}},{view:`radar`,label:`Radar`,glyph:`◎`,panelClass:`radar-view`,gate:{fromSettings:$0.posthog},mount:EQ,attention:{subscribe:wQ,acknowledge:CQ}},{view:`visions`,label:`Visions`,glyph:`◇`,panelClass:`visions-view`,gate:{fromSettings:$0.visions},mount:$I,attention:{subscribe:XI,acknowledge:()=>{tL(),eL()}},onConnectionChange:QI},{view:`hooks`,label:`Hooks`,glyph:`◈`,panelClass:`hooks-view`,mount:sz,refreshOn:[`shown`,`connected`,`hooks-updated`],refresh:e=>{e===`shown`&&cz(),oz()}},{view:`trace`,label:`Trace`,panelClass:`trace-view`,gate:{subscribe:v_},mount:gk,refreshOn:[`shown`],refresh:xk,onAvailabilityChange:e=>TQ(e?yk:null),onConnectionChange:Tk},{view:`benchmarks`,label:`Bench`,panelClass:`bench-view`,gate:{fromSettings:$0.benchmarks},mount:oX,onConnectionChange:sX},{view:`settings`,label:`Settings`,glyph:`@`,panelClass:`settings-view`,hasPanelChrome:!1,mount:t=>w8(t,{onRestart:e.onRestart})}],n=M(document,`#app-main`,`main`),r=t.map(t=>{let r=j(`button`,`header-tab`,t.label);r.id=`tab-${t.view}`,r.type=`button`;let i=`view-${t.view}`;r.setAttribute(`role`,`tab`),r.setAttribute(`aria-controls`,i);let a=t.view===`focus`;r.setAttribute(`aria-selected`,String(a)),r.tabIndex=a?0:-1,t.glyph&&(r.dataset.phoneGlyph=t.glyph);let o=document.getElementById(i)??j(`section`);if(o.classList.add(t.panelClass),o.id=i,o.setAttribute(`role`,`tabpanel`),o.setAttribute(`aria-labelledby`,r.id),o.hidden=!0,o.parentElement||n.append(o),r.hidden=t.gate!==void 0,o.classList.toggle(`view-panel`,t.hasPanelChrome!==!1),t.attention){let n=j(`span`,`tab-activity`);n.id=`tab-${t.view}-activity`,n.setAttribute(`aria-hidden`,`true`),r.append(n),t.attention.subscribe(r=>{let{isActive:i,level:a}=c7(r);n.classList.toggle(`active`,i),a===null&&n.removeAttribute(`data-attention`),a!==null&&n.setAttribute(`data-attention`,a),e.setPhoneAttention(t.view,r)})}return{...t,tab:r,el:o}});return M(document,`#header-tabs`,`div`).replaceChildren(...r.map(e=>e.tab)),r}jb(Vs()),Mb(Ls()),Nb(zs()),i$(Us()),Gy(),lg(document);var f7=M(document,`#connection-status`,`span`),p7=M(f7,`.connection-label`,`span`),m7=M(document,`#loading-screen`,`div`),h7=M(document,`#loading-status`,`div`),g7=M(document,`#loading-detail`,`div`),_7=M(document,`#shutdown-screen`,`div`),v7=M(document,`#shutdown-status`,`div`),y7=!1,b7=null,x7=!1;function S7(){let e=Lc(),t=m7.querySelector(`.loading-spinner`);e&&t&&t.replaceWith(Ic(e,`loading-animal`))}S7();function C7(){y7||b7===null||v5({hasSnapshot:x7,connectingTerminalCount:xC(),msSinceConnected:performance.now()-b7})===`reveal`&&w7()}bC(C7);function w7(){if(y7)return;y7=!0,m7.classList.add(`fade-out`);let e=()=>m7.remove();m7.addEventListener(`transitionend`,e,{once:!0}),setTimeout(e,1e3)}function T7(e,t){f7.dataset.state=`shutdown`,p7.textContent=e,f7.title=e,m9.disabled=!0,v7.textContent=t,_7.classList.add(`active`)}var E7=new Set([`disconnected`,`connecting`]);function D7(e,t,n){f7.dataset.state=e,f7.toggleAttribute(`data-reconnected`,n),p7.textContent=t,f7.title=t}function O7(e,t){D7(e,t,e===`connected`&&E7.has(f7.dataset.state??``))}function k7(e,t){f7.dataset.state!==`shutdown`&&D7(e===`verified`?`connected`:e,t,!1)}var A7=1e4,j7=`The server is not answering. Check the terminal running Glimmervoid for errors, or start it again with glimmervoid. This page reconnects on its own.`,M7=`Server not answering. Check the Glimmervoid terminal for errors, or run glimmervoid. This page retries on its own.`,N7=null,P7=!1;function F7(){h7.textContent=`Reconnecting to server...`,g7.textContent=M7,g7.hidden=!P7}function I7(){N7=null,P7=!0,y7?Dd(j7,{hidesInStreamerMode:!1}):F7()}function L7(){N7!==null||P7||(N7=window.setTimeout(I7,A7))}function R7(){N7!==null&&window.clearTimeout(N7),N7=null,P7=!1,g7.hidden=!0,Od(j7)}cd((e,t)=>{if(e===`connecting`||e===`verified`)k7(e,t);else{O7(e,t),UM(e===`connected`);for(let t of w9)t.onConnectionChange?.(e===`connected`);if(e===`connected`){if(R7(),A9&&j9(A9),_7.classList.contains(`active`)){location.reload();return}dm(),document.body.classList.add(`app-ready`),!y7&&b7===null&&(b7=performance.now(),h7.textContent=`Connecting to sessions...`,setTimeout(w7,_5)),C7(),Y9(),X7(`connected`),dd(`get-settings`,{}).then(e=>{e.settings&&(I9(e.settings),Ar()===`settings`&&y9(location.hash))}).catch(()=>{})}else e===`disconnected`&&_7.classList.contains(`active`)?v7.textContent=`Waiting for server...`:(L7(),y7||F7())}});function z7(){W5(),hZ(),WW(),AB()}function B7(){NP(),z7()}var V7=null;function H7(e){let t=z8(V7,e);V7=t.knownBuild,t.reload&&location.reload()}function U7(e){II(new Map(e.filter(e=>!e.ephemeral).map(e=>[e.id,e.name]))),j8(e.filter(e=>!e.ephemeral).map(e=>({id:e.id,name:e.name,agent:e.agent,permissionMode:e.dangerouslySkipPermissions?`Skip permissions`:`Default`})));for(let t of e){Hh(t.id,t.coherenceHooks),t.ephemeral||jv(t.path),PY(t.id,t.linkedPrs);let e=kM(t.id);e&&mN(t.id,t.state,t.stateSince),e&&j_(t.id,!!t.saneYolo),e&&aee(t.id,t.isGuarded,t.isGuardrailsReleased),e||PM(t.id,t.name,t.state,IQ(t)),uN(t.id,t.failureReason),OM(t.id,t.taskTitle,t.taskTitleIsCustom),GM(t.id,t.agent),iN(t.id,t.mergeStatus,t.mergeReason),WM(t.id,t.effectiveBase),JM(t.id,t.activeAgents,t.awaitingBackgroundTasks),eN(t.id,t.pendingWakeup),ZM(t.id,t.pendingPromptKind,t.isCompacting,t.isWaitingForMemory),QM(t.id,t.unseenOutcome),xM(t.id,t),RM(t.id,t.hasPlan),Y7(t.id)}NM(),Yg(P),NP(),ZP(),z7(),W7(),x9(location.hash),x7=!0,C7()}function W7(){bk([...P].map(([e,t])=>({id:e,name:Sr(t)||e})))}function G7(e,t){RM(e,t?.hasPlan===!0),QM(e,t?.unseenOutcome),Y7(e)}function K7(e){if(!kM(e.id))PM(e.id,e.session,e.to,IQ({skipPerms:e.skipPerms,saneYolo:e.saneYolo,stateSince:e.timestamp})),Yg(P),hZ();else if(e.to===A.DORMANT&&e.from!==A.DORMANT){let t=P.get(String(e.id)),n=document.querySelector(`.session-card[data-id="${CSS.escape(String(e.id))}"]`),r=n instanceof HTMLElement?n:null,i=r?r.dataset.skipPerms!==void 0:!1,a=e.saneYolo??(r?r.dataset.saneYolo!==void 0:!1),o=r?r.dataset.path:void 0;sN(e.id),PM(e.id,e.session,A.DORMANT,IQ({skipPerms:i,saneYolo:a,worktree:r?.dataset.worktree!==void 0,workspace:r?.dataset.workspace!==void 0,remoteWorkspace:r?.dataset.remoteWorkspace??null,guarded:r?.dataset.guarded!==void 0,guardrailsReleased:r?.dataset.guardrailsReleased!==void 0,ephemeral:r?.dataset.ephemeral!==void 0,path:o,stateSince:e.timestamp,taskTitle:t?.taskTitle,taskTitleIsCustom:t?.taskTitleIsCustom})),GM(e.id,t?.agent),G7(e.id,t),B7(),zE(e.id),Yg(P)}else mN(e.id,e.to,e.timestamp,e.event),uN(e.id,e.failureReason),e.saneYolo!==void 0&&j_(e.id,e.saneYolo),Yg(P),zE(e.id),B7(),Q_(e.id),e.to===A.INITIALIZING&&(e.from===A.DONE||e.from===A.FAILED)&&AC(e.id)}var q7=new Map;function J7(e){let t=new Set;for(let n of e){if(!n?.id)continue;t.add(n.id);let e={tokens:n.tokens,costUSD:n.costUSD,officialCostUSD:n.officialCostUSD};q7.set(n.id,e),YM(n.id,e)}for(let e of[...q7.keys()])t.has(e)||(q7.delete(e),YM(e,null))}function Y7(e){let t=q7.get(e);t&&YM(e,t)}T4(K),az(K),_k(K),fZ(K),aX(K),x_(MY),fv(Kh),fv(AY),C_({isReadable:qh,open:Yh}),T_(PQ);function X7(e){u7(w9,{isPhoneShellActive:OB(),activeView:Ar(),phoneScreen:kr.snapshot().phoneScreen},e)}nh(()=>X7(`settings-updated`));var Z7={snapshot:e=>{H7(e.serverBuild),U7(e.sessions)},"hooks-report":e=>lz(e),"save-hook-result":()=>uz(),"delete-hook-result":()=>uz(),"state-change":e=>K7(e),"session-added":e=>{e.ephemeral||jv(e.path),PY(e.id,e.linkedPrs),kM(e.id)||(PM(e.id,e.session,e.state,IQ(e)),GM(e.id,e.agent),Y7(e.id)),Yg(P),B7(),W7()},"session-removed":e=>{sN(e.id),Uh(e.id),VE(e.id),FY(e.id),Yg(P),B7(),W7()},"session-title":e=>{OM(e.id,e.taskTitle,e.isCustom),B7()},"session-prs":e=>PY(e.id,e.linkedPrs),"session-renamed":e=>{oN(e.id,e.newName),B7(),W7()},"session-modified":e=>{e.ephemeral||jv(e.path);let t=P.get(String(e.id));Hh(e.id,null),sN(e.id),VE(e.id),PY(e.id,e.linkedPrs),PM(e.id,e.session,e.state,IQ(e)),GM(e.id,e.agent),G7(e.id,t),Yg(P),B7(),W7()},"session-git":e=>iee(e.id,!!e.worktree),"session-agents":e=>{JM(e.id,e.activeAgents,e.awaitingBackgroundTasks),B7(),Q_(e.id)},"session-wakeup":e=>eN(e.id,e.pendingWakeup),"session-unseen":e=>{QM(e.id,e.unseenOutcome),NM(),Yg(P),B7()},"session-prompt":e=>{ZM(e.id,e.pendingPromptKind,e.isCompacting===!0,e.isWaitingForMemory===!0),z7()},"session-merge-status":e=>{rN(e.id,e.mergeStatus,e.reason),WP(e.id,e.mergeStatus),z7()},"session-worktree-blocked":e=>{Dd(`${e.session}: ${e.notice||`integration branch not found`}`)},"session-worktree-warning":e=>{Dd(`${e.session}: ${e.notice||`base branch warning`}`)},"session-worktree-ready":e=>{WM(e.id,e.base)},"session-diff":e=>{aN(e.id,{committed:e.committed,uncommitted:e.uncommitted,hasCommits:e.hasCommits})},"session-diff-error":e=>{PE(e.id,e.message)},"change-map":e=>FE(e.id,e.map),"branch-sync-status":e=>IE(e.id,e),"session-changed":e=>RE(e.id),"post-turn-result":e=>tN(e.id,e),"debug-state-response":e=>Z_(e),"session-trace-response":e=>{SM(e)||Sk(e)},"session-trace-changed":e=>{wM(e.id),Ck(e)},"session-conversation":e=>{xM(e.id,e),z7()},"session-plan-changed":e=>{zM(e),z7()},"session-plan-draft":e=>{BM(e)},"session-plan-response":e=>{VM(e)},"session-docs-changed":e=>Th(e),"session-docs-snapshot":e=>Eh(e),"session-coherence-hooks":e=>{Hh(e.id,e.coherenceHooks),B7()},"session-coherence":e=>{Wh(e),B7()},"session-coherence-snapshot":e=>{Gh(e),B7()},"session-coherence-journal-response":e=>Xh(e),"session-setup-response":e=>FQ(e),notify:e=>{_p(e),Q_(e.session)},"update-status":e=>{i9(e),F8(e)},"update-progress":e=>I8(e.journal),"post-turn-leftovers":e=>o9(e),error:e=>{let t=L8(e),n=wk(e);CM(e);let r=HM(e);t||n||r||Dd(e.message)},"session-error":e=>{jE(e.id),!HM(e)&&lN(e.id,e.message)},"settings-updated":e=>{e.settings&&I9(e.settings),dm()},"agent-logins":e=>Rf(e.logins),"health-snapshot":e=>{e.stats&&Sw(e.stats)},"radar-status":e=>DQ(e),"radar-investigation-activity":e=>OQ(e),"radar-investigation-finished":e=>AQ(e),"team-review-status":e=>mY(e),"github-prs":e=>Vn(e),"my-prs-status":ZW,"benchmark-status":e=>cX(e),"benchmark-action-result":e=>lX(e),"my-pr-merge-result":e=>eG(e),"team-review-action-result":e=>vY(e),"open-team-review-session-result":e=>gY(e),"issues-status":e=>_Z(e),"issue-detail-result":e=>vZ(e),"open-issue-session-result":e=>yZ(e),"usage-sessions":e=>{J7(e.sessions),A4(e)},"usage-report":e=>{M4(e),N8()},"plan-limits":e=>j4(e),"usage-budget-alert":e=>_p({session:`budget-${e.scope}-${e.periodKey}`,category:`threshold-${e.threshold}`,message:e.text,ignoreFocus:!0}),"visions-findings":e=>rL(e),"visions-comments":e=>iL(e),"visions-hand":e=>aL(e),"visions-intent":e=>oL(e),"visions-fix":e=>nL(e),"visions-snapshot":e=>lL(e),"ingest-activity":e=>sL(e),"ingest-snapshot":e=>cL(e),"client-trust":e=>G9(e.trust),"shutting-down":()=>T7(`Shutting down...`,`Shutting down sessions...`),restarting:()=>T7(`Restarting...`,`Restarting server...`)};function Q7(e){let t=Z7[e.type];t&&t(e)}ld(e=>{Q7(e),X7(e.type)});var $7,e9=null;function t9(e,t,n){e.onclick=()=>{let e=yr(n);e?e.then(()=>{t.textContent=`Copied`}).catch(()=>{t.textContent=`Copy failed`}):t.textContent=`Copy failed`}}var n9=xp(Cl,wl,`Update`).href;function r9(e){let{latestSha:t,latest:n}=e;return typeof n==`string`&&n?n:typeof t==`string`&&t?t:null}function i9(e){let t=M(document,`#update-banner`,`div`),{mode:n,tone:r,text:i}=Iu(e),a=r===`security`;if(!e.updateAvailable&&!a){t.hidden=!0;return}let o=r9(e),s=o&&n===`restart`?`${o}:ready`:o;if(a&&i===e9||!a&&$7!==void 0&&s===$7||!a&&s&&sc()===s)return;t.classList.toggle(`update-banner-security`,a);let c=String(e.command??``);M(document,`#update-banner-text`,`span`).textContent=i,M(document,`#update-banner-cmd`,`code`).textContent=c;let l=M(document,`#update-banner-update`,`a`);l.href=n9,l.hidden=n!==`link`;let u=M(document,`#update-banner-restart`,`button`);u.hidden=n!==`restart`,u.onclick=W9;let d=M(document,`#update-banner-cmd`,`code`);d.hidden=n!==`command`;let f=M(document,`#update-banner-copy`,`button`);f.hidden=n!==`command`;let p=M(document,`#update-banner-copy-status`,`span`);p.hidden=n!==`command`,p.textContent=``;let m=M(document,`#update-banner-link`,`a`);m.hidden=!e.releaseUrl,m.href=typeof e.releaseUrl==`string`?e.releaseUrl:``,t.hidden=!1,t9(f,p,c),M(document,`#update-banner-dismiss`,`button`).onclick=()=>{t.hidden=!0,a?e9=i:($7=s,cc(s))}}var a9=!1;function o9({repositories:e,command:t}){let n=M(document,`#post-turn-leftovers-banner`,`div`);if(e.length===0){n.hidden=!0;return}if(a9)return;let r=M(document,`#post-turn-leftovers-copy-status`,`span`);M(document,`#post-turn-leftovers-text`,`span`).textContent=$n(e.length),M(document,`#post-turn-leftovers-cmd`,`code`).textContent=t,r.textContent=``,n.hidden=!1,t9(M(document,`#post-turn-leftovers-copy`,`button`),r,t),M(document,`#post-turn-leftovers-dismiss`,`button`).onclick=()=>{a9=!0,n.hidden=!0}}var s9=M(document,`#telemetry-banner`,`div`);function c9(){uc(!0),s9.hidden=!0}function l9(e){s9.hidden=!g5(e,lc())}var u9=M(document,`#telemetry-banner-settings`,`a`);u9.href=xp(`privacy`,`telemetry-enabled`,`Open settings`).href,u9.addEventListener(`click`,c9),M(document,`#telemetry-banner-dismiss`,`button`).addEventListener(`click`,c9),M(document,`#btn-add-session-header`,`button`).addEventListener(`click`,Kf);var d9=M(document,`#btn-mute`,`button`);VY(d9);var f9=M(document,`#btn-streamer`,`button`);oh(f9),p5();var p9=M(document,`#power-menu`,`div`),m9=M(document,`#btn-power`,`button`);function h9(){m9.setAttribute(`aria-expanded`,p9.classList.contains(`open`)?`true`:`false`)}m9.addEventListener(`click`,e=>{e.stopPropagation(),p9.classList.toggle(`open`),h9()}),document.addEventListener(`click`,e=>{e.target instanceof Node&&(p9.contains(e.target)||(p9.classList.remove(`open`),h9()))}),mr(document.querySelector(`.header`));function g9(e){e&&O8(e),!MB(`settings`)&&N9(`settings`,{section:e})}function _9(){yp(location.hash)&&history.replaceState(history.state,``,`${location.pathname}${location.search}`)}function v9(e){return e?(O8(e.sectionId,e.settingId),MB(`settings`)||N9(`settings`,{section:e.sectionId,setting:e.settingId,persist:!1}),!0):!1}function y9(e){return v9(k8(e))}var b9=`No plan is stored for this session yet.`;function x9(e){let t=rp(e);return t?!kM(t)||(history.replaceState(history.state,``,`${location.pathname}${location.search}`),OB()?(DB(t)||Dd(b9),!0):(N9(`focus`,{persist:!1}),KP(t)||Dd(b9),!0)):!1}function S9(e){return x9(e)?!0:y9(e)}function C9(e){e.newURL===location.href&&S9(location.hash)}document.addEventListener(`click`,e=>{if(!OB()||e.defaultPrevented)return;let t=e.target instanceof Element?e.target.closest(`a[href^="#"]`):null;t instanceof HTMLAnchorElement&&S9(t.hash)&&e.preventDefault()}),oU(M(document,`#celebration-tray`,`div`),M(document,`#btn-celebrations`,`button`),M(document,`#celebration-tray-count`,`span`)),M(document,`#btn-help`,`button`).addEventListener(`click`,()=>{g9(`browser-shortcuts`)});var w9=d7({onRestart:W9,openTerminal:e=>{jB(e)||(N9(`focus`),GP(e))},openPlan:e=>{N9(`focus`),KP(e)},openReviews:()=>E9(`prs`)?(MB(`prs`)||N9(`prs`),!0):!1,setPhoneAttention:PB});j3(w9),DE({panel:document.getElementById(`review-sidebar`)});for(let e of w9)e.mount(e.el);function T9(e){return w9.find(t=>t.view===e)}function E9(e){return w9.some(t=>t.view===e&&!t.tab.hidden)}var D9=!0,O9=null;function k9(e){T9(e)?.attention?.acknowledge()}var A9=null;function j9(e){A9=K({type:`dashboard-telemetry`,event:`view_shown`,properties:{view:e}})?null:e}function M9(e){let t=T9(e);l7(t,`shown`),t&&j9(e)}function N9(e,{section:t,setting:n,persist:r=!0}={}){if(!E9(e))return;let i=Ar();kr.dispatch(`setActiveView`,e),D9=r,r&&(O9=null),document.body.dataset.activeView=e,document.body.dataset.reviewSidebarHidden=String(T9(e)?.hasReviewSidebar!==!0),r&&Ks(e);for(let t of w9){let n=t.view===e;t.el&&(t.el.hidden=!n),t.tab.setAttribute(`aria-selected`,String(n)),t.tab.tabIndex=n?0:-1}i!==e&&T9(i)?.deactivate?.(),T9(e)?.activate?.(),M9(e),i===`settings`&&e!==`settings`&&_9(),e===`settings`&&t&&O8(t,n??null),k9(e)}function P9(e,t){let{view:n}=e;e.tab.hidden=!t,NB(n,t),e.onAvailabilityChange?.(t),!OB()&&(!t&&Ar()===n&&N9(`focus`),t&&O9===n&&N9(n))}function F9(e){for(let{view:t,isAvailable:n}of s7(w9,e))P9(t,n)}function I9(e){jM(e),A8(e),HI(e),F9(e),l9(e),th(e.streamerMode===!0),yM(e.conversationView===!0)}for(let e of w9)e.gate&&(P9(e,!1),`subscribe`in e.gate&&e.gate.subscribe(t=>P9(e,t)));vk(()=>{E9(`trace`)&&(MB(`trace`)||N9(`trace`))});function L9(e,t){let n=w9.filter(e=>!e.tab.hidden),r=n[(n.findIndex(t=>t.view===e)+t+n.length)%n.length];return N9(r.view),r.tab}function R9(e){w9.some(e=>e.tab===document.activeElement)&&e.focus()}for(let e=0;e<w9.length;e++){let{view:t,tab:n}=w9[e];n.addEventListener(`click`,()=>N9(t)),n.addEventListener(`keydown`,e=>{(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||(e.preventDefault(),L9(Ar(),e.key===`ArrowRight`?1:-1).focus()))})}var z9=Gs(),B9=k8(location.hash),V9=rp(location.hash);if(B9&&N9(`settings`,{section:B9.sectionId,setting:B9.settingId,persist:!1}),V9&&N9(`focus`,{persist:!1}),!B9&&!V9){let e=E9(z9);e||(O9=z9),N9(e?z9:`focus`,{persist:e})}wB({panels:dz(w9),onScreenShown:e=>{M9(e),e!==`settings`&&_9(),e===`settings`&&!yp(location.hash)&&O8(),k9(e)},canGoBack:e=>e===`settings`&&y8(),onBack:e=>{e===`settings`&&b8()},headerControls:[M(document,`.header-title`,`h1`),M(document,`#status-indicator`,`div`),M(document,`#celebration-tray`,`div`),M(document,`#btn-add-session-header`,`button`),M(document,`#btn-help`,`button`),d9,f9,p9]}),_8(_B);function H9(e){if(e===`phone`){let e=xP();for(let e of w9)e.deactivate?.();let t=k8(location.hash);TB({sessionId:e??void 0,linkedScreenId:t?`settings`:void 0}),t&&O8(t.sectionId,t.settingId);return}let t=kB();EB();let n=Ar();N9(E9(n)?n:`focus`,{persist:D9}),t&&GP(t)}Ky()&&H9(`phone`),qy(H9),window.addEventListener(`hashchange`,C9);function U9({type:e,title:t,confirmLabel:n,danger:r,idleMessage:i,actionAfterKillingSessions:a}){p9.classList.remove(`open`),h9();let o=AM();Zd({title:t,message:o>0?`Kill ${o} session${o>1?`s`:``} and ${a}?`:i,confirmLabel:n,danger:r||o>0,onConfirm:()=>K({type:e})})}function W9(){U9({type:`restart-server`,title:`Restart Server`,confirmLabel:`Restart`,danger:!1,idleMessage:`Restart the server?`,actionAfterKillingSessions:`restart the server`})}M(document,`#btn-restart`,`button`).addEventListener(`click`,W9);function G9(e){let t=Gn(`shutdown`,e);M(document,`#btn-shutdown`,`button`).hidden=!t,M(document,`#menu-divider-shutdown`,`div`).hidden=!t}M(document,`#btn-shutdown`,`button`).addEventListener(`click`,()=>{U9({type:`shutdown`,title:`Shut Down Server`,confirmLabel:`Shut Down`,danger:!0,idleMessage:`Shut down the server?`,actionAfterKillingSessions:`shut down the server`})});var K9=new Set([`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`PageUp`,`PageDown`]);function q9(e,t){return e.value!==``&&K9.has(t.key)}function J9(e){let t=document.activeElement;return t instanceof HTMLElement?t.isContentEditable?!0:t instanceof HTMLTextAreaElement&&t.dataset.dashboardShortcuts===`allowed`?q9(t,e):(t.tagName===`INPUT`||t.tagName===`TEXTAREA`)&&!t.classList.contains(`xterm-helper-textarea`):!1}function oee({action:e,step:t}){switch(e){case`merge`:return HE(),!0;case`resolve-or-resync`:return WE()||qE(),!0;case`new-session`:return document.getElementById(`btn-add-session-header`)?.click(),!0;case`next-attention`:return Ky()?!1:V5()?(G5(),!0):bP()?(LP(),!0):(XP(()=>N9(`focus`)),!0);case`rail-step`:return bP()?(JP(t),!0):!1;case`view-step`:return!Ky()&&(R9(L9(Ar(),t)),!0);case`session-nth`:return bP()?(qP(t),!0):!1;case`streamer-mode`:return ah(),!0}}document.addEventListener(`keydown`,e=>{if(e.repeat||J9(e))return;let t=Ip(e,Wp,{isTerminalFocused:document.activeElement?.classList.contains(`xterm-helper-textarea`)??!1});t&&oee(t)&&e.preventDefault()});var see=Jn({mode:`trailing`,delayMs:150,run:()=>{K({type:`focus-change`,focused:document.hasFocus()})}});function Y9(){see.schedule()}function X9(){Y9(),zC(F(jr()))}window.addEventListener(`focus`,X9),window.addEventListener(`blur`,X9),document.addEventListener(`visibilitychange`,X9);var Z9=!1;async function Q9(){if(!Z9){Z9=!0,OC();try{if(await gd()===`ok`)return;for(let e of P.keys())AC(e)}finally{kC(),Z9=!1}}}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&(NS(),Q9())}),window.addEventListener(`online`,Q9);var $9=Lo(K);window.addEventListener(`error`,e=>$9(e.error)),window.addEventListener(`unhandledrejection`,e=>$9(e.reason)),window.addEventListener(`pageshow`,e=>{e.persisted&&(NS(),Q9())}),xw(M(document,`#health-footer-mount`,`div`)),rb(MM),L7(),hd();
|
package/dist/client/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/assets/favicon-CKygeLwW.svg">
|
|
8
8
|
<title>Glimmervoid</title>
|
|
9
9
|
<style>html,body{background:var(--bg,#0a0810);height:100%;color:var(--text,#c8c0e0);font-family:var(--font-mono,"CommitMono", "Cascadia Code", "Fira Code", "Consolas", "Menlo", monospace);margin:0;padding:0}.app-shell{display:none}html:not([data-layout=phone]) .app-ready .app-shell{display:contents}.loading-screen{z-index:9999;background:#0a0810;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:opacity .3s;display:flex;position:fixed;inset:0}.loading-screen.fade-out{opacity:0;pointer-events:none}.loading-title{letter-spacing:.1em;color:#e8e0ff;text-transform:uppercase;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:20px;font-weight:700}.loading-title:before{content:"▸";color:#c084fc}.loading-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px}.loading-detail{color:#5e5584;text-align:center;text-wrap:balance;max-width:min(34ch,100vw - 32px);margin-top:-8px;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px;line-height:1.6}.loading-spinner{border:2px solid #2a2440;border-top-color:#c084fc;border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.shutdown-screen:not(.active) .loading-spinner{animation:none}.shutdown-screen{z-index:9999;-webkit-backdrop-filter:blur();backdrop-filter:blur();pointer-events:none;opacity:0;background:#0a081000;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:background .4s,-webkit-backdrop-filter .4s,backdrop-filter .4s,opacity .3s;display:flex;position:fixed;inset:0}.shutdown-screen.active{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;opacity:1;background:#0a0810eb}.shutdown-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px;transition:color .3s}.shutdown-screen.done .loading-spinner{opacity:.3;border-color:#2a2440;animation:none}.shutdown-screen.done .shutdown-status{color:#4a4268}</style>
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CuuOi3Bp.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/zod-BRLv4KqJ.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/xterm-kR64YvZ-.js">
|
|
13
13
|
<link rel="stylesheet" crossorigin href="/assets/index-NhAGtpDY.css">
|
package/dist/server/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glimmervoid",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.3",
|
|
4
4
|
"description": "Mission control that ships. Not a terminal multiplexer: Claude Code, Codex and Grok each work in their own git worktree, and the one session that needs you comes to the front",
|
|
5
5
|
"main": "dist/server/index.js",
|
|
6
6
|
"type": "module",
|