prreviewbuddy 0.91.1 → 0.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,49 +40,62 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
40
40
 
41
41
  `);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
42
42
  `).map(e=>`> ${e}`.trimEnd()).join(`
43
- `):``}function Rn(e,t,n={}){let r=Ln(e,n);if(!r)return null;let i=[...Nn,...Fn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function zn(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function O(e,t=``){return typeof e==`string`?e:t}var Bn=`Dismissed by you — you decided this finding needs no action. It stops counting towards what is left, and stays here so the decision is visible rather than lost.`;function Vn(e){return e===0?``:`<span class="pr-helper-closed-findings-waiting" data-closed-findings-waiting> ${e===1?`1 suggestion waiting`:`${e} suggestions waiting`}</span>`}var Hn=[`explain-detail`,`explain`];function Un(e){return Hn.includes(e)}function Wn(e){return e.action??`explain`}var Gn=`Ask more →`,Kn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function qn(e){return Kn[Wn(e)]}function Jn(e,t={}){let n=it(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Gn}</button>`:``,i=r&&n.endsWith(`</p>`)?`${n.slice(0,-4)} ${r}</p>`:n+r;return`<details class="pr-helper-simple-explanation" data-simple-explanation${Number.isFinite(e.writtenAt)?` data-explanation-written-at="${e.writtenAt}"`:``}${t.open?` open`:``}>
44
- <summary class="pr-helper-simple-explanation-summary">${qn(e)}</summary>
43
+ `):``}function Rn(e,t,n={}){let r=Ln(e,n);if(!r)return null;let i=[...Nn,...Fn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function zn(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var Bn=[`verify`,`decide`,`fix`];function O(e,t=``){return typeof e==`string`?e:t}var Vn=`Dismissed by you — you decided this finding needs no action. It stops counting towards what is left, and stays here so the decision is visible rather than lost.`;function Hn(e){return e===0?``:`<span class="pr-helper-closed-findings-waiting" data-closed-findings-waiting> ${e===1?`1 suggestion waiting`:`${e} suggestions waiting`}</span>`}var Un=[`explain-detail`,`explain`];function Wn(e){return Un.includes(e)}function Gn(e){return e.action??`explain`}var Kn=`Ask more →`,qn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Jn(e){return qn[Gn(e)]}function Yn(e,t={}){let n=it(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Kn}</button>`:``,i=r&&n.endsWith(`</p>`)?`${n.slice(0,-4)} ${r}</p>`:n+r;return`<details class="pr-helper-simple-explanation" data-simple-explanation${Number.isFinite(e.writtenAt)?` data-explanation-written-at="${e.writtenAt}"`:``}${t.open?` open`:``}>
44
+ <summary class="pr-helper-simple-explanation-summary">${Jn(e)}</summary>
45
45
  <div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
46
- </details>`}function Yn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Xn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Zn(e,t){return Un(e)&&t?{explains:{...t,action:e}}:{}}function Qn(e){let t=$n(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function $n(e){let t=e.closest(`[data-finding-card]`),n=Xn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function er(e,t){let n=e.querySelector(Yn(t.kind,t.id));if(!n)return;let r=Jn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}tr(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function tr(e,t){let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n;if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-impact, :scope > .pr-helper-issue-desc`)??e.querySelector(`:scope > [data-assessment-region]`)??e.querySelector(`:scope > .pr-helper-dismissal-stale`)??n;let i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function nr(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var rr=/^pr-helper-severity-(critical|major|minor|nit)$/;function ir(e,t,n){let r=e.querySelector(Yn(t.kind,t.id));if(!r)return null;if(t.kind===`issue`){for(let e of[...r.classList])rr.test(e)&&r.classList.remove(e);t.cardClass&&r.classList.add(t.cardClass)}r.querySelector(`[data-grade-control]`)?.replaceWith(or(e,t.grade)),r.querySelector(`[data-assessment-region]`)?.replaceWith(or(e,t.region)),r.querySelector(`[${Ot}]`)?.setAttribute(Ot,t.copy);let i=r.querySelector(`[data-question-answered], [data-issue-dismissed]`),a=t.verdictClosed===!0;return i&&i.dataset.verdictClosed===`true`!==a&&(a?i.dataset.verdictClosed=`true`:delete i.dataset.verdictClosed,n?.(r,a)),ar(e),r}function ar(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=Vn(r);i&&n.append(or(e,i))}}function or(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function sr(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var cr=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function lr(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return sr(t,cr),!1}if(a===null)return!1;let o=a.body?.card?ir(e,a.body.card,r.onVerdictClosed):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(sr(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function ur(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=$n(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),lr(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function dr(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await lr(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function fr(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){ur(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&dr(i,t)})}function pr(e){let t=zn(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${Ln(t,{maxChars:1/0})}\n\n${Ln(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}var mr=`Reassesses existing issues and questions using only your message in this turn.`;function hr(e,t=[]){return e.reconciles?gr(t):`<div class="prb-turn-actions" data-turn-actions="${e.askedAt}">
46
+ </details>`}function Xn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Zn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Qn(e,t){return Wn(e)&&t?{explains:{...t,action:e}}:{}}function $n(e){let t=er(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function er(e){let t=e.closest(`[data-finding-card]`),n=Zn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function tr(e,t){let n=e.querySelector(Xn(t.kind,t.id));if(!n)return;let r=Yn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}nr(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function nr(e,t){let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n;if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-impact, :scope > .pr-helper-issue-desc`)??e.querySelector(`:scope > [data-assessment-region]`)??e.querySelector(`:scope > .pr-helper-dismissal-stale`)??n;let i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function rr(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var ir=/^pr-helper-severity-(critical|major|minor|nit)$/;function ar(e,t,n){let r=e.querySelector(Xn(t.kind,t.id));if(!r)return null;if(t.kind===`issue`){for(let e of[...r.classList])ir.test(e)&&r.classList.remove(e);t.cardClass&&r.classList.add(t.cardClass)}r.querySelector(`[data-grade-control]`)?.replaceWith(sr(e,t.grade)),r.querySelector(`[data-assessment-region]`)?.replaceWith(sr(e,t.region)),r.querySelector(`[${Ot}]`)?.setAttribute(Ot,t.copy);let i=r.querySelector(`[data-question-answered], [data-issue-dismissed]`),a=t.verdictClosed===!0;return i&&i.dataset.verdictClosed===`true`!==a&&(a?i.dataset.verdictClosed=`true`:delete i.dataset.verdictClosed,n?.(r,a)),or(e),r}function or(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=Hn(r);i&&n.append(sr(e,i))}}function sr(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function cr(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var lr=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function ur(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return cr(t,lr),!1}if(a===null)return!1;let o=a.body?.card?ar(e,a.body.card,r.onVerdictClosed):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(cr(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function dr(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=er(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),ur(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function fr(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await ur(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function pr(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){dr(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&fr(i,t)})}function mr(e){let t=zn(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${Ln(t,{maxChars:1/0})}\n\n${Ln(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}var hr=`Reassesses existing issues and questions using only your message in this turn.`;function gr(e,t=[]){return e.reconciles?_r(t):`<div class="prb-turn-actions" data-turn-actions="${e.askedAt}">
47
47
  <button type="button" class="prb-turn-reconcile" data-reconcile-turn="${e.askedAt}">Reconcile with findings</button>
48
- <span class="prb-turn-help">${T(mr)}</span>
49
- </div>`}function gr(e){if(!e.length)return``;let t=e.length===1?`Accept the suggestion`:`Accept all ${e.length} suggestions`;return`<div class="prb-turn-actions">
48
+ <span class="prb-turn-help">${T(hr)}</span>
49
+ </div>`}function _r(e){if(!e.length)return``;let t=e.length===1?`Accept the suggestion`:`Accept all ${e.length} suggestions`;return`<div class="prb-turn-actions">
50
50
  <button type="button" class="prb-turn-accept-all" data-reconcile-accept-all="${T(e.join(` `))}">${T(t)}</button>
51
- </div>`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var _r=`saved:`,vr=`Your prompts`;function yr(e){return`${_r}${e}`}function br(e){return e.startsWith(`saved:`)?e.slice(6):null}var xr=[`failure`,`risk`,`intent`,`maintenance`,`other`,`closed`];function Sr(e){return xr.includes(e)}var Cr=[`failure`,`risk`,`intent`,`maintenance`,`other`],wr={failure:`Failures`,risk:`Possible risks`,intent:`Intent to confirm`,maintenance:`Maintenance`,other:`Other issues`};function Tr(e){let t={bySection:{},verify:0,decide:0,step:0};for(let n of e)t.bySection[n.section]=(t.bySection[n.section]??0)+1,n.next&&(t[n.next]+=1);return t}var Er=(e,t,n)=>`${e} ${e===1?t:n}`;function Dr(e){let t=Object.values(e.bySection).reduce((e,t)=>e+(t??0),0);if(t===0)return`No issues are outstanding from this analysis.`;let n=[e.verify?Er(e.verify,`verification step`,`verification steps`):``,e.decide?Er(e.decide,`decision`,`decisions`):``,e.step?Er(e.step,`next step`,`next steps`):``].filter(Boolean);return[Er(t,`outstanding issue`,`outstanding issues`),...n].join(` · `)}function Or(e){let t=Cr.filter(t=>(e.bySection[t]??0)>0);return t.length<2?``:t.map(t=>`<button type="button" class="pr-helper-issue-nav-item" data-issue-nav="${t}">${T(wr[t])}<span class="pr-helper-issue-nav-count">${e.bySection[t]}</span></button>`).join(``)}function kr(e,t){e.addEventListener(`click`,t=>{let n=t.target?.closest(`[data-issue-nav]`);if(!n||!e.contains(n))return;let r=e.querySelector(`[data-impact-group="${n.dataset.issueNav}"]`);r&&(r.open||=!0,r.scrollIntoView({block:`start`,behavior:`smooth`}),r.querySelector(`summary`)?.focus({preventScroll:!0}))}),t&&e.addEventListener(`toggle`,e=>{let n=e.target,r=n.dataset?.impactGroup??(n.dataset?.closedFindings===`issues`?`closed`:void 0);r&&Sr(r)&&t(r,n.open)},!0)}function Ar(e){let t=Tr([...e.querySelectorAll(`[data-issue-section]`)].filter(e=>!e.closest(`.pr-helper-closed-findings`)).map(e=>{let t=e.dataset.issueSection,n=e.dataset.issueNext;return{section:Cr.includes(t)?t:`other`,...n===`verify`||n===`decide`||n===`step`?{next:n}:{}}}));for(let n of e.querySelectorAll(`[data-impact-group]`)){let e=t.bySection[n.dataset.impactGroup]??0;n.hidden=e===0;let r=n.querySelector(`[data-issue-group-count]`);r&&(r.textContent=String(e))}let n=e.querySelector(`[data-issues-attention]`);n&&(n.textContent=Dr(t));let r=e.querySelector(`[data-issue-nav-list]`);if(r){let e=Or(t);r.innerHTML=e,r.hidden=!e}}function jr(e,t){let n=t.dataset.issueSection;return!n||!Cr.includes(n)?null:e.querySelector(`[data-impact-group="${n}"] .pr-helper-issue-group-list`)}var Mr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function Nr(e){return Mr.includes(e)}function Pr(e,t){if(!e||typeof e!=`object`)return;let n={};for(let r of t){let t=e[r];typeof t==`boolean`&&(n[r]=t)}return Object.keys(n).length>0?n:void 0}var Fr=e=>Pr(e,Mr),Ir=e=>Pr(e,xr);function Lr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r,issueGroups:i}=e,a=Fr(r),o=Ir(i);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...a?{rail:a}:{},...o?{issueGroups:o}:{}}}function Rr(e){return e?e===`buddy`?`buddy`:`document`:null}function zr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return he.includes(i)&&n(i)?i:null}function Br(e){if(!e)return{};try{return Lr(JSON.parse(e))}catch{return{}}}function Vr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{},...e.issueGroups?{issueGroups:{...e.issueGroups}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Rr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!Nr(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))},issueFold(e,i){n()&&(r.issueGroups?.[e]??e!==`closed`)!==i&&(r.issueGroups={...r.issueGroups,[e]:i},t({issueGroups:{[e]:i}}))}}}function Hr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=br(e);if(a===null)return Rn(t,e,i);let o=r(a);if(!o)return null;let s=Ln(t,i);return s?`${s}\n\n${o}`:null}function Ur(e,t,n){if(n.busy?.())return null;let r=Hr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=Pn(e)||br(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Wr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Gr=`Run review again`;function Kr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function qr(e){let t=e.dataset.questionAnswered;t&&Kr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Jr=`pr-helper-author-context-preview`,Yr=`View full PR description`,Xr=`Show less`;function Zr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Jr);if(!n)return;let i=n.closest(`#${ti}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Qr(n);if(!o){let e=-$r(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Xr:Yr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&ei(n,s,$r(n,s)+e);return}i&&$r(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Qr(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function $r(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function ei(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var ti=`pr-helper-author-context`;function ni(e){let t=e.ownerDocument.getElementById(ti);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Zr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;var ri=`"summary": WHAT the change does, for a reviewer about to read it. Roughly 80-120 words, and fewer for a small change. Name the parts that change and what each now does. Do not explain why the change exists, and do not judge whether it is correct or safe: other fields carry both.`,ii=`"consequence": { "title": string, "scenario": string, "group": "failure" | "risk" | "intent" | "maintenance", "next"?: { "kind": "verify" | "decide", "text": string } }`;`${ii.replace(`"consequence": `,`"consequence"?: `)}`,`${ii}${ri}`;function ai(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function oi(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}let n=e.byVerdict??0;return t===0&&n===0?`Dismissed by you (${e.done})`:t===0&&n===e.done?`Accepted as resolved (${e.done})`:`Dealt with (${e.done})`}function si(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">✓</span><span class="pr-helper-questions-progress-count">All ${e} questions answered</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} unanswered</span>`}function ci(e){let t=[...document.querySelectorAll(`[data-guide-detail]`)],n=t.find(t=>t.dataset.guideDetail===e);if(!n)return null;for(let e of t)e.hidden=e!==n;return n}function li(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function ui(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function di(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function fi(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var pi=50;function mi(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function k(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function hi(e){if(!e||typeof e!=`object`)return;let t=e,n=k(t.top);return{cited:k(t.cited),centre:k(t.centre),expand:k(t.expand,pi),position:k(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function gi(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function _i(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?gi(n):{top:null,offset:0};return{cited:k(e.dataset.cited),centre:k(e.dataset.centre),expand:k(e.dataset.expand,pi),position:k(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function vi(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function yi(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function bi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function xi(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function Si(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=mi(e);return{host:xi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:_i(t)}:{}}})}function Ci(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function wi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&xi(n)===t.host)return n;return null}function Ti(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function Ei(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:Si(t),...g(t)}}async function Di(e,t,r){if(!t)return!1;let{doc:i,main:a,rail:o,log:s}=e,l=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of i.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=l[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&r.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?r.setAsk(t.ask===`open`):t.ask===null&&r.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(Ti).map(e=>({...e,state:hi(e.state)}));for(let t of Si(i))if(!e.some(e=>Ci(e,t))){let e=wi(i,t);e&&r.closePanel(e)}let n=[];for(let t of e){let e=wi(i,t);e&&n.push(r.openPanel(e,t.state).catch(()=>{}))}await Promise.all(n)}if(!r.stillCurrent())return!1;let u=c(t,`main`);a&&u!==null&&(a.scrollTop=u);let d=c(t,`rail`);o&&d!==null&&(o.scrollTop=d);let f=c(t,`log`);return s&&f!==null&&(s.scrollTop=f),n(i,t.focus,t.focusVisible),!0}var Oi=`prb-ask-draft:`,ki=`prb-ask-staged:`,Ai=300;function ji(e){return`${Oi}${e}`}function Mi(e){return`${ki}${e}`}function Ni(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function Pi(e,t){let{storage:n,win:r}=t,i=ji(t.path),a=Mi(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Ni(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Ai)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function Fi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Ii=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Li(e){return`<details class="prb-update-alt">
51
+ </div>`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var vr=`saved:`,yr=`Your prompts`;function br(e){return`${vr}${e}`}function xr(e){return e.startsWith(`saved:`)?e.slice(6):null}var Sr=[`failure`,`risk`,`intent`,`maintenance`,`other`,`closed`];function Cr(e){return Sr.includes(e)}var wr=[`failure`,`risk`,`intent`,`maintenance`,`other`],Tr={failure:`Failures`,risk:`Possible risks`,intent:`Intent to confirm`,maintenance:`Maintenance`,other:`Other issues`};function Er(e){let t={bySection:{},verify:0,decide:0,fix:0,step:0};for(let n of e)t.bySection[n.section]=(t.bySection[n.section]??0)+1,n.next&&(t[n.next]+=1);return t}var Dr=(e,t,n)=>`${e} ${e===1?t:n}`;function Or(e){let t=Object.values(e.bySection).reduce((e,t)=>e+(t??0),0);if(t===0)return`No issues are outstanding from this analysis.`;let n=[e.verify?Dr(e.verify,`verification step`,`verification steps`):``,e.decide?Dr(e.decide,`decision`,`decisions`):``,e.fix?Dr(e.fix,`fix`,`fixes`):``,e.step?Dr(e.step,`next step`,`next steps`):``].filter(Boolean);return[Dr(t,`outstanding issue`,`outstanding issues`),...n].join(` · `)}function kr(e){let t=wr.filter(t=>(e.bySection[t]??0)>0);return t.length<2?``:t.map(t=>`<button type="button" class="pr-helper-issue-nav-item" data-issue-nav="${t}">${T(Tr[t])}<span class="pr-helper-issue-nav-count">${e.bySection[t]}</span></button>`).join(``)}function Ar(e,t){e.addEventListener(`click`,t=>{let n=t.target?.closest(`[data-issue-nav]`);if(!n||!e.contains(n))return;let r=e.querySelector(`[data-impact-group="${n.dataset.issueNav}"]`);r&&(r.open||=!0,r.scrollIntoView({block:`start`,behavior:`smooth`}),r.querySelector(`summary`)?.focus({preventScroll:!0}))}),t&&e.addEventListener(`toggle`,e=>{let n=e.target,r=n.dataset?.impactGroup??(n.dataset?.closedFindings===`issues`?`closed`:void 0);r&&Cr(r)&&t(r,n.open)},!0)}function jr(e){let t=Er([...e.querySelectorAll(`[data-issue-section]`)].filter(e=>!e.closest(`.pr-helper-closed-findings`)).map(e=>{let t=e.dataset.issueSection,n=e.dataset.issueNext;return{section:wr.includes(t)?t:`other`,...n===`step`||Bn.includes(n)?{next:n}:{}}}));for(let n of e.querySelectorAll(`[data-impact-group]`)){let e=t.bySection[n.dataset.impactGroup]??0;n.hidden=e===0;let r=n.querySelector(`[data-issue-group-count]`);r&&(r.textContent=String(e))}let n=e.querySelector(`[data-issues-attention]`);n&&(n.textContent=Or(t));let r=e.querySelector(`[data-issue-nav-list]`);if(r){let e=kr(t);r.innerHTML=e,r.hidden=!e}}function Mr(e,t){let n=t.dataset.issueSection;return!n||!wr.includes(n)?null:e.querySelector(`[data-impact-group="${n}"] .pr-helper-issue-group-list`)}var Nr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function Pr(e){return Nr.includes(e)}function Fr(e,t){if(!e||typeof e!=`object`)return;let n={};for(let r of t){let t=e[r];typeof t==`boolean`&&(n[r]=t)}return Object.keys(n).length>0?n:void 0}var Ir=e=>Fr(e,Nr),Lr=e=>Fr(e,Sr);function Rr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r,issueGroups:i}=e,a=Ir(r),o=Lr(i);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...a?{rail:a}:{},...o?{issueGroups:o}:{}}}function zr(e){return e?e===`buddy`?`buddy`:`document`:null}function Br(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return he.includes(i)&&n(i)?i:null}function Vr(e){if(!e)return{};try{return Rr(JSON.parse(e))}catch{return{}}}function Hr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{},...e.issueGroups?{issueGroups:{...e.issueGroups}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=zr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!Pr(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))},issueFold(e,i){n()&&(r.issueGroups?.[e]??e!==`closed`)!==i&&(r.issueGroups={...r.issueGroups,[e]:i},t({issueGroups:{[e]:i}}))}}}function Ur(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=xr(e);if(a===null)return Rn(t,e,i);let o=r(a);if(!o)return null;let s=Ln(t,i);return s?`${s}\n\n${o}`:null}function Wr(e,t,n){if(n.busy?.())return null;let r=Ur(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=Pn(e)||xr(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Gr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Kr=`Run review again`;function qr(e,t,n){for(let r of e.querySelectorAll(`[data-intent-question]`))if(r.dataset.intentQuestion===t){for(let e of r.querySelectorAll(`[data-intent-open]`))e.hidden=n;for(let e of r.querySelectorAll(`[data-intent-answered]`))e.hidden=!n}}function Jr(e){let t=e.dataset.questionAnswered;t&&qr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Yr=`pr-helper-author-context-preview`,Xr=`View full PR description`,Zr=`Show less`;function Qr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Yr);if(!n)return;let i=n.closest(`#${ni}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=$r(n);if(!o){let e=-ei(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Zr:Xr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&ti(n,s,ei(n,s)+e);return}i&&ei(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function $r(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function ei(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function ti(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var ni=`pr-helper-author-context`;function ri(e){let t=e.ownerDocument.getElementById(ni);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Qr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;var ii=`"summary": WHAT the change does, for a reviewer about to read it. Roughly 80-120 words, and fewer for a small change. Name the parts that change and what each now does. Do not explain why the change exists, and do not judge whether it is correct or safe: other fields carry both.`,ai=`"consequence": { "title": string, "scenario": string, "group": "failure" | "risk" | "intent" | "maintenance", "next"?: { "kind": "verify" | "decide" | "fix", "text": string } }`;`${ai.replace(`"consequence": `,`"consequence"?: `)}`;var oi=`"consequence" on an issue: the same issue told as what it means, for someone who knows the product but may not know its implementation. It is shown first; "title" and "description" stay the technical account behind it. Reframe around the consequence, do not just simplify the technical wording.
52
+ - "title": the observable consequence or the meaningful development constraint, as a short sentence (e.g. "Creating a meal can fail halfway, leaving it outside the planner").
53
+ - "scenario": one or two sentences: the triggering condition and what happens (e.g. "If adding it to the day fails after saving, the user sees an error but the meal still exists. Retrying may then be blocked by its name.").
54
+ - "next": the one specific step this issue calls for, when there is one. "kind" is "verify" for a test or evidence-gathering step that would settle whether it happens (e.g. "Try a receipt with an unreadable amount."), "decide" for an acceptance, requirement or intent call only the reviewer can make (e.g. "Confirm this broader change is intended."), and "fix" for a concrete corrective action the finding itself supports (e.g. "Update the recovery runbook to name the new restore command."). A fix is not a verification: do not label a remedy "verify". Omit "next" rather than write a generic step or invent a remedy the evidence does not support.
55
+ - "group", by the consequence and the evidence behind it, never by the kind of file, never by how sure you sound and independently of "severity":
56
+ - "failure" when the evidence you read establishes an incorrect outcome under a stated condition (e.g. "Saving a meal with no ingredients deletes the existing ones.").
57
+ - "risk" when a plausible adverse consequence still needs verifying (e.g. "Two people editing the same plan at once may overwrite each other; nothing shows whether saves are serialised."), and say what is unverified.
58
+ - "intent" when there is a concrete behavioural consequence whose acceptability depends on requirements or intent (e.g. "Rotating the sign-in secret now signs every customer out.").
59
+ - "maintenance" when it constrains future development, maintainability or reliability and no concrete failure or risk fits better (e.g. "Each new payment provider has to be added in four places that must stay in step.").
60
+ - Documentation, runbooks, configuration and scripts are classified by what they cause like any code: recovery instructions that restore to the wrong database cause an operational failure when the text establishes it, or a risk when unverified. They are not "maintenance" because they are documentation.
61
+ - "confidence" is reported separately and does not decide the group. A well-evidenced failure stays a failure at medium confidence; a high severity does not make an unverified risk a failure; a low confidence does not by itself turn a failure into a risk.
62
+ - Keep every condition and qualification that affects the decision. Avoid code identifiers unless the consequence cannot be understood without one. Do not state severity.
63
+ - Never claim user harm, a measured performance effect, a reproduction or a certainty the evidence does not give. A performance concern nobody measured says so (e.g. "Opening a meal may do unnecessary work for nested meals... The effect has not been measured."). A maintenance or intent issue is described as one, not as a user-facing failure.
64
+ - An issue names a concrete consequence. A request for missing requirements with no concrete consequence is a question for the author, not an issue, and is never raised as both.`,si=`"orientation": one sentence, at most about 25 words, naming the behaviour or product area this change touches, for a reviewer about to decide on its issues (e.g. "This change affects receipt extraction and how duplicate receipt details are combined."). Say what it touches, not whether it is safe, and do not summarise the issues.`,ci=`"framing": { "question": string, "why": string, "needed"?: string }`;`${ci.replace(`"framing": `,`"framing"?: `)}`,`${ai}${ci}${ii}${oi}${si}`;function li(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function ui(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}let n=e.byVerdict??0;return t===0&&n===0?`Dismissed by you (${e.done})`:t===0&&n===e.done?`Accepted as resolved (${e.done})`:`Dealt with (${e.done})`}function di(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">✓</span><span class="pr-helper-questions-progress-count">All ${e} questions answered</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} unanswered</span>`}function fi(e){let t=[...document.querySelectorAll(`[data-guide-detail]`)],n=t.find(t=>t.dataset.guideDetail===e);if(!n)return null;for(let e of t)e.hidden=e!==n;return n}function pi(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function mi(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function hi(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function gi(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var _i=50;function vi(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function k(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function yi(e){if(!e||typeof e!=`object`)return;let t=e,n=k(t.top);return{cited:k(t.cited),centre:k(t.centre),expand:k(t.expand,_i),position:k(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function bi(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function xi(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?bi(n):{top:null,offset:0};return{cited:k(e.dataset.cited),centre:k(e.dataset.centre),expand:k(e.dataset.expand,_i),position:k(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function Si(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function Ci(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function wi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function Ti(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function Ei(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=vi(e);return{host:Ti(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:xi(t)}:{}}})}function Di(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function Oi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&Ti(n)===t.host)return n;return null}function ki(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function Ai(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:Ei(t),...g(t)}}async function ji(e,t,r){if(!t)return!1;let{doc:i,main:a,rail:o,log:s}=e,l=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of i.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=l[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&r.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?r.setAsk(t.ask===`open`):t.ask===null&&r.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(ki).map(e=>({...e,state:yi(e.state)}));for(let t of Ei(i))if(!e.some(e=>Di(e,t))){let e=Oi(i,t);e&&r.closePanel(e)}let n=[];for(let t of e){let e=Oi(i,t);e&&n.push(r.openPanel(e,t.state).catch(()=>{}))}await Promise.all(n)}if(!r.stillCurrent())return!1;let u=c(t,`main`);a&&u!==null&&(a.scrollTop=u);let d=c(t,`rail`);o&&d!==null&&(o.scrollTop=d);let f=c(t,`log`);return s&&f!==null&&(s.scrollTop=f),n(i,t.focus,t.focusVisible),!0}var Mi=`prb-ask-draft:`,Ni=`prb-ask-staged:`,Pi=300;function Fi(e){return`${Mi}${e}`}function Ii(e){return`${Ni}${e}`}function Li(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function Ri(e,t){let{storage:n,win:r}=t,i=Fi(t.path),a=Ii(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Li(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Pi)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function zi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Bi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Vi(e){return`<details class="prb-update-alt">
52
65
  <summary>Start a new review</summary>
53
66
  <span>A brand new review, with its own findings and its own path through the change. Run <code>${T(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${T(e)}">Copy</button></span>
54
- </details>`}var Ri=`prreviewbuddy review --fresh`;function zi(e,t){return e?e.code.state===`fixed`?{label:`Freshness: Fixed`,state:`fixed`}:t?{label:`PR updated`,state:`changed`}:e.code.state===`changed`?{label:e.code.rewritten?`Code rewritten`:`Code changed`,state:`changed`}:e.code.state===`current`?{label:`Review up to date`,state:`current`}:{label:`Freshness unknown`,state:`unknown`}:t?{label:`PR updated`,state:`changed`}:{label:`Check for updates`,state:`unknown`}}function Bi(e,t){if(!t.actions)return!1;let n=e??(t.remote?Ji(t.remote):null);if(!n)return!1;let r=n.code.state===`fixed`?null:t.remote??null;return n.code.state===`changed`||r!==null||n.code.reason===`missing-commit`}function Vi(e,t={}){let n=e??(t.remote?Ji(t.remote):null);if(!n)return``;let r=n.code.state===`fixed`?null:t.remote??null,i=n.code.state===`changed`||r!==null,a=n.code.reason===`missing-commit`,o=t.availability?.state===`missing`,s=r?.sha??n.code.latestSha,c=t.dismissedSha!==void 0&&t.dismissedSha===s;if(!t.open&&!o&&(!(i||a)||c))return``;let l=r?Yi(n.code,r):qi(n.code,t.availability??null),u=e?[...l.facts,`checked ${T(xe(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
67
+ </details>`}var Hi=`prreviewbuddy review --fresh`;function Ui(e,t){return e?e.code.state===`fixed`?{label:`Freshness: Fixed`,state:`fixed`}:t?{label:`PR updated`,state:`changed`}:e.code.state===`changed`?{label:e.code.rewritten?`Code rewritten`:`Code changed`,state:`changed`}:e.code.state===`current`?{label:`Review up to date`,state:`current`}:{label:`Freshness unknown`,state:`unknown`}:t?{label:`PR updated`,state:`changed`}:{label:`Check for updates`,state:`unknown`}}function Wi(e,t){if(!t.actions)return!1;let n=e??(t.remote?Qi(t.remote):null);if(!n)return!1;let r=n.code.state===`fixed`?null:t.remote??null;return n.code.state===`changed`||r!==null||n.code.reason===`missing-commit`}function Gi(e,t={}){let n=e??(t.remote?Qi(t.remote):null);if(!n)return``;let r=n.code.state===`fixed`?null:t.remote??null,i=n.code.state===`changed`||r!==null,a=n.code.reason===`missing-commit`,o=t.availability?.state===`missing`,s=r?.sha??n.code.latestSha,c=t.dismissedSha!==void 0&&t.dismissedSha===s;if(!t.open&&!o&&(!(i||a)||c))return``;let l=r?$i(n.code,r):Zi(n.code,t.availability??null),u=e?[...l.facts,`checked ${T(xe(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
55
68
  <div class="prb-fresh-head">
56
69
  <span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
57
70
  <strong class="prb-fresh-title">${T(l.title)}</strong>
58
71
  <span class="prb-fresh-facts">${u.join(` &middot; `)}</span>
59
72
  </div>
60
73
  ${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
61
- ${Hi(n,t,i||a,Bi(e,t))}
62
- </div>`}function Hi(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
63
- ${r?Fi():``}
64
- ${r?Li(Ri):``}
74
+ ${Ki(n,t,i||a,Wi(e,t))}
75
+ </div>`}function Ki(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
76
+ ${r?zi():``}
77
+ ${r?Vi(Hi):``}
65
78
  ${i}
66
- ${Ui(e,t,n,r===!0)}
67
- </div>`}function Ui(e,t,n,r){let i=[r?T(Ii):``,t.remote?Xi(e.code):Zi(e.code,e.checkout.reason!==`no-pull-request`),Qi(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${T(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
79
+ ${qi(e,t,n,r===!0)}
80
+ </div>`}function qi(e,t,n,r){let i=[r?T(Bi):``,t.remote?ea(e.code):ta(e.code,e.checkout.reason!==`no-pull-request`),na(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${T(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
68
81
  <summary>More details</summary>
69
82
  ${a}
70
- </details>`:a}function Wi(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Gi(e){return e?`<code title="${T(e)}">${T(e.slice(0,7))}</code>`:``}function Ki(e){return e?[`reviewed ${Gi(e)}`]:[]}function qi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:Ki(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:Ki(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...Ki(e.reviewedSha),...Wi(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...Ki(e.reviewedSha),...t,...Wi(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:Ki(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:Ki(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:Ki(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function Ji(e){return{checkedAt:0,code:{state:`unknown`,reviewedSha:e.reviewedSha,latestSha:null,comparison:null,newCommits:null,changedFiles:null,rewritten:!1,reason:null},checkout:{state:`unknown`,relation:`unknown`,prHeadSha:null,presentLocally:!1,reason:null},conversation:{attached:!1}}}function Yi(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...Ki(e.reviewedSha),...i,...n?Wi(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${T(xe(t.observedAt))}`],consequence:n?.rewritten?`The branch was rebased or amended, so this review describes older code.`:`New commits landed, so the lines these findings cite may have moved.`}}function Xi(e){return`This review is based on ${Gi(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Zi(e,t){if(!e.comparison)return``;let n=`<code>${T(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Gi(e.reviewedSha)}.`:`This review is based on ${Gi(e.reviewedSha)}, the latest commit on ${n}.`:e.comparison.remote?`This review is currently based on ${n}. <strong>Check for updates</strong> compares against the latest version you already have locally. <strong>Update review</strong> fetches the newest version first.`:`This review is currently based on ${n}, the branch it is of.`}function Qi(e,t){if(!e.conversation.attached)return``;let n=T(xe(e.conversation.importedAt));return t?`<button type="button" class="prb-fresh-quiet" data-pr-recheck>Re-check the conversation</button> to refresh comments and resolved threads without re-running the code review. Last checked ${n}.`:`The PR conversation was last checked ${n}.`}function $i(e,t){let n=ai(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function ea(e){let t=e.gist||e.whyNotJustified,n=e.locations.find(e=>e.primary)??e.locations[0];return[`### ${e.title.trim()}`,t?`**Why it matters:** ${t.trim()}`:``,`**Simpler approach:** ${e.simplerDirection.trim()}`,n?`**Start here:** \`${n.line?`${n.path}:${n.line}`:n.path}\``:``,e.draftComment?.trim()?`**Draft comment:**\n\n${na(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
83
+ </details>`:a}function Ji(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Yi(e){return e?`<code title="${T(e)}">${T(e.slice(0,7))}</code>`:``}function Xi(e){return e?[`reviewed ${Yi(e)}`]:[]}function Zi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:Xi(e.reviewedSha),consequence:t?.state===`missing`?`That commit is no longer in this repository. The review still reads in full, but it cannot be analysed again until the commit is back.`:`This review is of one commit, and a commit does not change, so these findings keep describing it.`};if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:Xi(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...Xi(e.reviewedSha),...Ji(e.changedFiles,`differ`)],consequence:`The branch was rebased or amended, so this review describes older code.`};let t=e.newCommits===null?[]:[`${e.newCommits} new commit${e.newCommits===1?``:`s`}`];return{state:`changed`,title:`Code changed`,facts:[...Xi(e.reviewedSha),...t,...Ji(e.changedFiles,`changed`)],consequence:`New commits landed, so the lines these findings cite may have moved.`}}switch(e.reason){case`uncommitted`:return{state:`unknown`,title:`Cannot be compared`,facts:Xi(e.reviewedSha),consequence:`This review read uncommitted work and nothing recorded what the working tree held, so whether the files still match cannot be told from here.`};case`missing-commit`:return{state:`unknown`,title:`Reviewed commit is gone`,facts:Xi(e.reviewedSha),consequence:`It is not in this repository any more, after a force-push or a branch rebuilt from scratch, so nothing can be measured against it.`};case`no-branch`:return{state:`unknown`,title:`Cannot be compared`,facts:Xi(e.reviewedSha),consequence:`This review’s branch is not in this repository, which is what a pull request from a fork or a branch deleted after merging looks like, so whether the findings still describe it cannot be told from here.`};default:return{state:`unknown`,title:`Cannot be compared`,facts:[],consequence:`Git could not be read in this checkout.`}}}function Qi(e){return{checkedAt:0,code:{state:`unknown`,reviewedSha:e.reviewedSha,latestSha:null,comparison:null,newCommits:null,changedFiles:null,rewritten:!1,reason:null},checkout:{state:`unknown`,relation:`unknown`,prHeadSha:null,presentLocally:!1,reason:null},conversation:{attached:!1}}}function $i(e,t){let n=e.state===`changed`&&e.latestSha===t.sha?e:null,r=t.newCommits??n?.newCommits??null,i=n?.rewritten?[]:[r===null?`new commits on the pull request`:`${r} new commit${r===1?``:`s`}`];return{state:`changed`,title:`PR updated`,facts:[...Xi(e.reviewedSha),...i,...n?Ji(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${T(xe(t.observedAt))}`],consequence:n?.rewritten?`The branch was rebased or amended, so this review describes older code.`:`New commits landed, so the lines these findings cite may have moved.`}}function ea(e){return`This review is based on ${Yi(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function ta(e,t){if(!e.comparison)return``;let n=`<code>${T(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Yi(e.reviewedSha)}.`:`This review is based on ${Yi(e.reviewedSha)}, the latest commit on ${n}.`:e.comparison.remote?`This review is currently based on ${n}. <strong>Check for updates</strong> compares against the latest version you already have locally. <strong>Update review</strong> fetches the newest version first.`:`This review is currently based on ${n}, the branch it is of.`}function na(e,t){if(!e.conversation.attached)return``;let n=T(xe(e.conversation.importedAt));return t?`<button type="button" class="prb-fresh-quiet" data-pr-recheck>Re-check the conversation</button> to refresh comments and resolved threads without re-running the code review. Last checked ${n}.`:`The PR conversation was last checked ${n}.`}function ra(e,t){let n=li(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function ia(e){let t=e.gist||e.whyNotJustified,n=e.locations.find(e=>e.primary)??e.locations[0];return[`### ${e.title.trim()}`,t?`**Why it matters:** ${t.trim()}`:``,`**Simpler approach:** ${e.simplerDirection.trim()}`,n?`**Start here:** \`${n.line?`${n.path}:${n.line}`:n.path}\``:``,e.draftComment?.trim()?`**Draft comment:**\n\n${oa(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
71
84
 
72
- `)}function ta(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(ea)].join(`
85
+ `)}function aa(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(ia)].join(`
73
86
 
74
- `)}function na(e){return e.split(`
87
+ `)}function oa(e){return e.split(`
75
88
  `).map(e=>e===``?`>`:`> ${e}`).join(`
76
- `)}function ra(e){return e===`done`||e===`failed`}function ia(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function aa(e,t=``){return`<div class="prb-doc-head">
89
+ `)}function sa(e){return e===`done`||e===`failed`}function ca(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function la(e,t=``){return`<div class="prb-doc-head">
77
90
  <h3 class="prb-doc-title">${T(e)}</h3>
78
91
  ${t}
79
- </div>`}var oa=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,sa=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function ca(e,t){return`<svg class="${t}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`}function la(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${T(t)}" aria-pressed="false" aria-label="${T(n)}" title="${T(n)}">${ca(oa,`prb-focus-expand`)}${ca(sa,`prb-focus-collapse`)}</button>`}la(`kiss`,`KISS review`),aa(`Recommendations`,la(`kissrecs`,`Recommendations`));var ua={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function da(e,t){return t===`undecided`?`Open`:ua[e][t]}function fa(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} decided</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} undecided</span>`}function pa(e){return`Decided (${e})`}function ma(e,t,n=!1){return n?{enabled:!1,note:`Saving your decision. You can copy once it is saved.`}:t?{enabled:!1,note:`Run KISS again before handing these recommendations off.`}:e===0?{enabled:!1,note:`Choose Raise with author on the recommendations you want to hand off.`}:{enabled:!0,note:`${e===1?`1 recommendation`:`${e} recommendations`} to raise with the author.`}}function ha(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
92
+ </div>`}var ua=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,da=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function fa(e,t){return`<svg class="${t}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`}function pa(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${T(t)}" aria-pressed="false" aria-label="${T(n)}" title="${T(n)}">${fa(ua,`prb-focus-expand`)}${fa(da,`prb-focus-collapse`)}</button>`}pa(`kiss`,`KISS review`),la(`Recommendations`,pa(`kissrecs`,`Recommendations`));var ma={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function ha(e,t){return t===`undecided`?`Open`:ma[e][t]}function ga(e,t){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} decided</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} undecided</span>`}function _a(e){return`Decided (${e})`}function va(e,t,n=!1){return n?{enabled:!1,note:`Saving your decision. You can copy once it is saved.`}:t?{enabled:!1,note:`Run KISS again before handing these recommendations off.`}:e===0?{enabled:!1,note:`Choose Raise with author on the recommendations you want to hand off.`}:{enabled:!0,note:`${e===1?`1 recommendation`:`${e} recommendations`} to raise with the author.`}}function ya(e,t,n={}){if(!t||t.state!==`changed`)return``;let r=n.actions?`<button type="button" class="prb-kiss-fresh-run" data-kiss-run-open>Run again</button>`:``;if(n.dismissedSha&&n.dismissedSha===t.latestSha)return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" data-collapsed role="status">
80
93
  <p><strong>This KISS review describes commit ${T(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
81
94
  </div>`;let i=t.rewritten?`The branch has been rewritten since, so this report describes commits that are no longer on it.`:t.newCommits===null?`The branch has moved on since.`:`There ${t.newCommits===1?`has been 1 commit`:`have been ${t.newCommits} commits`} on the branch since.`;return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" role="status">
82
95
  <p><strong>This KISS review describes commit ${T(e.slice(0,7))}.</strong> ${T(i)}</p>
83
96
  <p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below and your decisions about it are kept either way.</p>
84
97
  <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${T(t.latestSha)}">Not now</button>`:``}</p>
85
- </div>`}var ga=new WeakMap;function _a(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function va(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Oa(e);let i=e.contains(document.activeElement);ya(e,t),Ea(e,!0),xa(n),i&&Da(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Ea(e,!1),a){xa(n);return}ya(e,r),xa(n),ka(e,t,n)},a=(ga.get(e)??Promise.resolve()).then(i,i);return ga.set(e,a),a}function ya(e,t){e.dataset.decision=t;let n=Ta(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=da(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=ua[n][r.dataset.kissDecide];ba(e,t!==`undecided`)}function ba(e,t){let n=(e.closest(`[data-view="kissrecs"]`)??document).querySelector(t?`[data-kiss-decided-list]`:`[data-kiss-open-list]`);if(!n||e.parentElement===n)return;let r=Number(e.dataset.rank),i=[...n.querySelectorAll(`:scope > [data-kiss-rec]`)].find(e=>Number(e.dataset.rank)>r);n.insertBefore(e,i??null)}function xa(e,t=document){let n=[...t.querySelectorAll(`[data-kiss-rec]`)];if(n.length===0)return;let r=n.filter(e=>e.dataset.decision&&e.dataset.decision!==`undecided`).length,i=n.length-r,a=t.querySelector(`[data-kiss-progress]`);a&&(a.innerHTML=fa(n.length,i));let o=t.querySelector(`[data-kiss-decided]`);if(o){o.hidden=r===0,o.toggleAttribute(`data-nothing-open`,i===0);let e=o.querySelector(`[data-kiss-decided-summary]`);e&&(e.textContent=pa(r))}e.paintRail(n.length,i),Sa(t)}function Sa(e=document){let t=e.querySelector(`[data-kiss-handoff]`);if(!t)return;let n=new Set([...e.querySelectorAll(`[data-kiss-rec][data-decision="accepted"]`)].map(e=>e.dataset.kissRec)),r=wa(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=ma(r.length,t.hasAttribute(`data-stale`),i),o=t.querySelector(`[data-kiss-handoff-copy]`);o&&(o.disabled=!a.enabled,o.setAttribute(`data-copy-source`,a.enabled?ta(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function Ca(e,t=document){for(let n of t.querySelectorAll(`[data-kiss-stale]`))n.hidden=!e;let n=t.querySelector(`[data-kiss-handoff]`);n&&(n.toggleAttribute(`data-stale`,e),Sa(t))}function wa(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function Ta(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Ea(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function Da(e){if(!e.closest(`[data-kiss-decided-list]`)){e.querySelector(`[data-kiss-decide][aria-pressed="true"], [data-kiss-decide]`)?.focus();return}let t=e.closest(`[data-view="kissrecs"]`)??document;(t.querySelector(`[data-kiss-open-list] > [data-kiss-rec] .prb-kiss-rec-title`)??t.querySelector(`[data-kiss-decided-summary]`))?.focus()}function Oa(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function ka(e,t,n){let r=document.createElement(`p`);r.className=`prb-kiss-decision-error`,r.dataset.kissDecisionError=``,r.setAttribute(`role`,`alert`),r.append(`Couldn't save that decision. `);let i=document.createElement(`button`);i.type=`button`,i.className=`prb-kiss-decision-retry`,i.textContent=`Try again`,i.addEventListener(`click`,()=>void va(e,t,n)),r.append(i),(e.querySelector(`[data-kiss-actions]`)??e).append(r);let a=e.closest(`[data-kiss-decided]`);a&&(a.open=!0),i.focus()}function Aa(e,t=!1){return e!==`merged`&&e!==`closed`?``:`<span class="prb-card-pr-state" data-pr-state="${e}">${e===`merged`?`Merged`:t?`Closed`:`PR closed`}</span>`}function ja(e,t){t.complete!==void 0&&Pa(e,t.complete),t.activity!==void 0&&Ma(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Fa(e,Na(e)):Fa(e,t.lifecycle??void 0),t.queued!==void 0&&Ia(e,t.queued)}function Ma(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(delete n.dataset.activityAt,delete n.dataset.activityKind,delete n.dataset.activityMovedAt,t&&(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind,t.movedAt!==void 0&&(n.dataset.activityMovedAt=String(t.movedAt))))}function Na(e){let t=e.querySelector(`[data-review-menu]`);return b(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Pa(e,n){let r=n?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&me(i,r);let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=n?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=t(e)}}function Fa(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?La(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);i&&ue(i,t,r);let o=e.querySelector(`[data-page-lifecycle-chip]`);if(o){let e=v(t,r);o.hidden=e===void 0,o.textContent=e??``}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=n.dataset.lifecycleSet;n.hidden=!a(e,t,r),n.textContent=u(e,t,r)}}function Ia(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=_(t))}function La(e){return m(e.dataset)}function Ra(e){return b(e)??null}function za(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Ra(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=f(i);e&&(a.activity=e)}return a}function Ba(){let e=0,t=0;return{snapshot:()=>e,current:n=>t===0&&n===e,begin:()=>{e+=1,t+=1;let n=!1;return()=>{n||(n=!0,e+=1,--t)}}}}var Va=`The workspace server did not answer. It may have stopped.`;function Ha(e){let t=()=>e.root.querySelector(`[data-review-menu]`),n=!1,r=async(t,r,i)=>{if(n)return{error:null,busy:!0};n=!0;let a=e.gate.begin();try{let n=await e.post(t,r),a=await n.json().catch(()=>null);return n.ok&&a?(ja(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Va}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:Ra(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>r(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>r(`/lifecycle`,{state:e},e=>({lifecycle:Ra(e.lifecycle),queued:e.queued===!0})),setQueued:i,toggleQueued:()=>i(t()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await e.checkForUpdates()},deleteReview:async()=>{try{let t=await e.post(`/delete`);return t.ok?{error:null}:{error:(await t.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:Va}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,o=i&&r?.hasAttribute(`data-branch-actions`)===!0,s=r?b({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,c=r?m(r.dataset):void 0,l=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,u=!n;return{reviewed:u&&i&&!l,waiting:u&&o&&a(`waiting`,s,c),done:u&&o&&a(`done`,s,c),queue:u&&o,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function Ua(e,t){return`${e} ${t}${e===1?``:`s`}`}function Wa(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Ua(e,`issue`):``,questions:t?Ua(t,`question`):``}}function Ga(e,t){let n=Wa(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Ka(e){return e===0?``:`${e} chosen`}function qa(e){let t=(e,t)=>{let n=t.map(e=>typeof e==`string`?{text:e.trim()}:{text:e.text.trim(),ref:e.ref}).filter(e=>e.text);return n.length===0?null:n.every(e=>e.ref)?`## ${e}\n\n${n.map(e=>`**${e.ref}.** ${e.text}`).join(`
98
+ </div>`}var ba=new WeakMap;function xa(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function Sa(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Ma(e);let i=e.contains(document.activeElement);Ca(e,t),Aa(e,!0),Ta(n),i&&ja(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Aa(e,!1),a){Ta(n);return}Ca(e,r),Ta(n),Na(e,t,n)},a=(ba.get(e)??Promise.resolve()).then(i,i);return ba.set(e,a),a}function Ca(e,t){e.dataset.decision=t;let n=ka(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=ha(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=ma[n][r.dataset.kissDecide];wa(e,t!==`undecided`)}function wa(e,t){let n=(e.closest(`[data-view="kissrecs"]`)??document).querySelector(t?`[data-kiss-decided-list]`:`[data-kiss-open-list]`);if(!n||e.parentElement===n)return;let r=Number(e.dataset.rank),i=[...n.querySelectorAll(`:scope > [data-kiss-rec]`)].find(e=>Number(e.dataset.rank)>r);n.insertBefore(e,i??null)}function Ta(e,t=document){let n=[...t.querySelectorAll(`[data-kiss-rec]`)];if(n.length===0)return;let r=n.filter(e=>e.dataset.decision&&e.dataset.decision!==`undecided`).length,i=n.length-r,a=t.querySelector(`[data-kiss-progress]`);a&&(a.innerHTML=ga(n.length,i));let o=t.querySelector(`[data-kiss-decided]`);if(o){o.hidden=r===0,o.toggleAttribute(`data-nothing-open`,i===0);let e=o.querySelector(`[data-kiss-decided-summary]`);e&&(e.textContent=_a(r))}e.paintRail(n.length,i),Ea(t)}function Ea(e=document){let t=e.querySelector(`[data-kiss-handoff]`);if(!t)return;let n=new Set([...e.querySelectorAll(`[data-kiss-rec][data-decision="accepted"]`)].map(e=>e.dataset.kissRec)),r=Oa(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=va(r.length,t.hasAttribute(`data-stale`),i),o=t.querySelector(`[data-kiss-handoff-copy]`);o&&(o.disabled=!a.enabled,o.setAttribute(`data-copy-source`,a.enabled?aa(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function Da(e,t=document){for(let n of t.querySelectorAll(`[data-kiss-stale]`))n.hidden=!e;let n=t.querySelector(`[data-kiss-handoff]`);n&&(n.toggleAttribute(`data-stale`,e),Ea(t))}function Oa(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ka(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Aa(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function ja(e){if(!e.closest(`[data-kiss-decided-list]`)){e.querySelector(`[data-kiss-decide][aria-pressed="true"], [data-kiss-decide]`)?.focus();return}let t=e.closest(`[data-view="kissrecs"]`)??document;(t.querySelector(`[data-kiss-open-list] > [data-kiss-rec] .prb-kiss-rec-title`)??t.querySelector(`[data-kiss-decided-summary]`))?.focus()}function Ma(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function Na(e,t,n){let r=document.createElement(`p`);r.className=`prb-kiss-decision-error`,r.dataset.kissDecisionError=``,r.setAttribute(`role`,`alert`),r.append(`Couldn't save that decision. `);let i=document.createElement(`button`);i.type=`button`,i.className=`prb-kiss-decision-retry`,i.textContent=`Try again`,i.addEventListener(`click`,()=>void Sa(e,t,n)),r.append(i),(e.querySelector(`[data-kiss-actions]`)??e).append(r);let a=e.closest(`[data-kiss-decided]`);a&&(a.open=!0),i.focus()}function Pa(e,t=!1){return e!==`merged`&&e!==`closed`?``:`<span class="prb-card-pr-state" data-pr-state="${e}">${e===`merged`?`Merged`:t?`Closed`:`PR closed`}</span>`}function Fa(e,t){t.complete!==void 0&&Ra(e,t.complete),t.activity!==void 0&&Ia(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&za(e,La(e)):za(e,t.lifecycle??void 0),t.queued!==void 0&&Ba(e,t.queued)}function Ia(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(delete n.dataset.activityAt,delete n.dataset.activityKind,delete n.dataset.activityMovedAt,t&&(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind,t.movedAt!==void 0&&(n.dataset.activityMovedAt=String(t.movedAt))))}function La(e){let t=e.querySelector(`[data-review-menu]`);return b(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Ra(e,n){let r=n?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&me(i,r);let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=n?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=t(e)}}function za(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?Va(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);i&&ue(i,t,r);let o=e.querySelector(`[data-page-lifecycle-chip]`);if(o){let e=v(t,r);o.hidden=e===void 0,o.textContent=e??``}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=n.dataset.lifecycleSet;n.hidden=!a(e,t,r),n.textContent=u(e,t,r)}}function Ba(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=_(t))}function Va(e){return m(e.dataset)}function Ha(e){return b(e)??null}function Ua(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Ha(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=f(i);e&&(a.activity=e)}return a}function Wa(){let e=0,t=0;return{snapshot:()=>e,current:n=>t===0&&n===e,begin:()=>{e+=1,t+=1;let n=!1;return()=>{n||(n=!0,e+=1,--t)}}}}var Ga=`The workspace server did not answer. It may have stopped.`;function Ka(e){let t=()=>e.root.querySelector(`[data-review-menu]`),n=!1,r=async(t,r,i)=>{if(n)return{error:null,busy:!0};n=!0;let a=e.gate.begin();try{let n=await e.post(t,r),a=await n.json().catch(()=>null);return n.ok&&a?(Fa(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Ga}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:Ha(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>r(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>r(`/lifecycle`,{state:e},e=>({lifecycle:Ha(e.lifecycle),queued:e.queued===!0})),setQueued:i,toggleQueued:()=>i(t()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await e.checkForUpdates()},deleteReview:async()=>{try{let t=await e.post(`/delete`);return t.ok?{error:null}:{error:(await t.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:Ga}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,o=i&&r?.hasAttribute(`data-branch-actions`)===!0,s=r?b({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,c=r?m(r.dataset):void 0,l=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,u=!n;return{reviewed:u&&i&&!l,waiting:u&&o&&a(`waiting`,s,c),done:u&&o&&a(`done`,s,c),queue:u&&o,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function qa(e,t){return`${e} ${t}${e===1?``:`s`}`}function Ja(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?qa(e,`issue`):``,questions:t?qa(t,`question`):``}}function Ya(e,t){let n=Ja(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Xa(e){return e===0?``:`${e} chosen`}function Za(e){let t=(e,t)=>{let n=t.map(e=>typeof e==`string`?{text:e.trim()}:{text:e.text.trim(),ref:e.ref}).filter(e=>e.text);return n.length===0?null:n.every(e=>e.ref)?`## ${e}\n\n${n.map(e=>`**${e.ref}.** ${e.text}`).join(`
86
99
 
87
100
  `)}`:`## ${e}\n\n${n.map(({text:e},t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
88
101
 
@@ -90,7 +103,7 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
90
103
 
91
104
  `)}`},n=[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean),r=e.reviewTag&&n.length&&[...e.issues,...e.questions].some(e=>typeof e!=`string`&&e.ref)?[`_References from review ${e.reviewTag}. Please keep them, and this line, in your reply._`]:[];return[...n,...r].join(`
92
105
 
93
- `)}var Ja=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;Ja(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Ja(`<path d="M20 6 9 17l-5-5"/>`);function Ya(e){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return qa({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}function Xa(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=Za(t);return n?.basis!==r&&(n={text:Ya(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!$a(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function Za(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify([e.reviewTag??``,...t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1)])}var Qa=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function $a(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Qa(t.issues)||!Qa(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var A=[`preview`,`markdown`],eo={issue:`issues`,question:`questions`};function to({root:e,showView:t}){let n=Xa(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Wa(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=Ka(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:no(e,`issue`,n.ids(`issue`)),questions:no(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return Ya(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Ga(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){ro(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>ao(e,t)),a(),c}function no(e,t,n){return[...e.querySelectorAll(`[data-view="${eo[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>{let n=t.querySelector(`[${kt}]`),r=n?.getAttribute(At);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function ro(e,t){for(let n of A){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return io(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function io(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?it(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function ao(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=A.indexOf(n),i=t.key===`ArrowRight`?A[(r+1)%A.length]:t.key===`ArrowLeft`?A[(r+A.length-1)%A.length]:t.key===`Home`?A[0]:t.key===`End`?A[A.length-1]:null;i&&(t.preventDefault(),ro(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function oo(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function so(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!oo(t),run:()=>n()?.click()}}}function co(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function lo(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function uo(e){let{doc:t}=e,n=Se({doc:t,item:`[data-finding-card]`,walk:()=>co(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>co(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>co(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!lo(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}function fo(e){return e.querySelector(`[data-review-home]`)?.dataset.viewNav??null}la(`progress`,`Review progress`);function po(e,t=Date.now()){return`Running for ${mo(t-e)}`}function mo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var ho={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function go(e){let t=new Map;for(let n of Object.keys(ho)){let r=ho[n],i=e.querySelector(`[${r}]`);i&&!ra(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function _o(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||ra(t.phase):vo(t.phase,n)}function vo(e,t){return ra(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function yo(e,t,n){let r=[...e.querySelectorAll(`.prb-progress-step`)],i=r.findIndex(e=>e.dataset.phase===t);if(i===-1)return;r.forEach((e,t)=>{let n=t<i?`complete`:t===i?`active`:`pending`;e.dataset.state=n;let r=e.querySelector(`.prb-progress-label`),a=n===`complete`?e.dataset.labelDone:e.dataset.labelDoing;r&&a&&(r.textContent=a),t!==i&&e.querySelector(`[data-step-note]`)?.remove()});let a=r[i];if(!n||ia(n,a.querySelector(`.prb-progress-label`)?.textContent??``))return;let o=a.querySelector(`[data-step-note]`);o||(o=document.createElement(`p`),o.className=`prb-progress-note`,o.setAttribute(`data-step-note`,``),a.appendChild(o)),o.textContent=n}function bo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=po(e))}}function xo(e,t=1e3){let n=window.setInterval(()=>bo(e),t);return()=>window.clearInterval(n)}async function So({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||ra(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function Co(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${T(e.scope)}" data-diagram-card="${T(e.scope)}">
106
+ `)}var Qa=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;Qa(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Qa(`<path d="M20 6 9 17l-5-5"/>`);function $a(e){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return Za({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}function eo(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=to(t);return n?.basis!==r&&(n={text:$a(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!ro(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function to(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify([e.reviewTag??``,...t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1)])}var no=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function ro(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!no(t.issues)||!no(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var A=[`preview`,`markdown`],io={issue:`issues`,question:`questions`};function ao({root:e,showView:t}){let n=eo(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Ja(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=Xa(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:oo(e,`issue`,n.ids(`issue`)),questions:oo(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return $a(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Ya(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){so(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>lo(e,t)),a(),c}function oo(e,t,n){return[...e.querySelectorAll(`[data-view="${io[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>{let n=t.querySelector(`[${kt}]`),r=n?.getAttribute(At);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function so(e,t){for(let n of A){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return co(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function co(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?it(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function lo(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=A.indexOf(n),i=t.key===`ArrowRight`?A[(r+1)%A.length]:t.key===`ArrowLeft`?A[(r+A.length-1)%A.length]:t.key===`Home`?A[0]:t.key===`End`?A[A.length-1]:null;i&&(t.preventDefault(),so(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function uo(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function fo(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!uo(t),run:()=>n()?.click()}}}function po(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function mo(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function ho(e){let{doc:t}=e,n=Se({doc:t,item:`[data-finding-card]`,walk:()=>po(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>po(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>po(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!mo(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}function go(e){return e.querySelector(`[data-review-home]`)?.dataset.viewNav??null}pa(`progress`,`Review progress`);function _o(e,t=Date.now()){return`Running for ${vo(t-e)}`}function vo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var yo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function bo(e){let t=new Map;for(let n of Object.keys(yo)){let r=yo[n],i=e.querySelector(`[${r}]`);i&&!sa(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function xo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||sa(t.phase):So(t.phase,n)}function So(e,t){return sa(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Co(e,t,n){let r=[...e.querySelectorAll(`.prb-progress-step`)],i=r.findIndex(e=>e.dataset.phase===t);if(i===-1)return;r.forEach((e,t)=>{let n=t<i?`complete`:t===i?`active`:`pending`;e.dataset.state=n;let r=e.querySelector(`.prb-progress-label`),a=n===`complete`?e.dataset.labelDone:e.dataset.labelDoing;r&&a&&(r.textContent=a),t!==i&&e.querySelector(`[data-step-note]`)?.remove()});let a=r[i];if(!n||ca(n,a.querySelector(`.prb-progress-label`)?.textContent??``))return;let o=a.querySelector(`[data-step-note]`);o||(o=document.createElement(`p`),o.className=`prb-progress-note`,o.setAttribute(`data-step-note`,``),a.appendChild(o)),o.textContent=n}function wo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=_o(e))}}function To(e,t=1e3){let n=window.setInterval(()=>wo(e),t);return()=>window.clearInterval(n)}async function Eo({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||sa(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function Do(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${T(e.scope)}" data-diagram-card="${T(e.scope)}">
94
107
  <header class="prb-diagram-head">
95
108
  <div class="prb-diagram-heading">
96
109
  <h4 class="prb-diagram-title">
@@ -109,70 +122,70 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
109
122
  </div>
110
123
  </header>
111
124
  ${e.caption?`<p class="prb-diagram-caption">${T(e.caption)}</p>`:``}
112
- ${wo(e,n)}
125
+ ${Oo(e,n)}
113
126
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
114
127
  <details class="prb-diagram-source">
115
128
  <summary>Diagram source</summary>
116
129
  <div class="${we}"><pre><code data-mermaid-source>${T(e.mermaid)}</code></pre><button type="button" class="${Te}" aria-label="Copy code">Copy</button></div>
117
130
  </details>
118
- </article>`}function wo(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${T(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var To=.5,Eo=3,Do=1.25,Oo=new WeakSet,ko=new WeakMap,Ao=new WeakMap,j=null;function jo(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{j?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Wo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){qo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?No(e):o&&Mo(e,o.dataset.diagramRequest||null)}),Lo(),Po(),{drawPane:Go}}async function Mo(e,t){if(j)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${ts(n)}"]`)??null??Bo(r,n,t);if(!i)return;Ro(),e.showDiagrams();let a=Vo(i);j=new AbortController,Xo(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:j.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return Ho(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Uo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Ro()):a.remove();return}Ho(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{j=null,Xo(!0)}}async function No(e){if(j)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=Fo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),j=new AbortController,Xo(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:j.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){Io(n,r?.error??`Buddy AI did not return a change map. Check the terminal running PR Review Buddy.`);return}n.remove(),e.showChangeMap(r.changeMap),Ro()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Io(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),j=null,Xo(!0)}}function Po(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(Fo(e),Xo(!1))}function Fo(e){e.parentElement?.querySelector(`[data-map-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-map-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the review and the change…</span>`;let n=document.createElement(`button`);return n.type=`button`,n.className=`prb-diagram-redraw`,n.setAttribute(`data-diagram-stop`,``),n.textContent=`Stop`,t.appendChild(n),e.before(t),t}function Io(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Lo(){let e=document.querySelector(`[data-diagram-pane][data-diagram-running]`);if(!e)return;let t=e.dataset.diagramRunning||null,n=t??`change`,r=e.querySelector(`[data-diagram-card="${ts(n)}"]`)??Bo(e,n,t);r&&(Ro(),Vo(r,{scroll:!1}),Xo(!1))}function Ro(){let e=document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]:not([data-diagram-pending])`).length,t=document.querySelectorAll(`[data-map-body] [data-change-map]`).length;zo(`map`,t>0),zo(`diagram`,e>0);let n=e+t,r=document.querySelector(`.prb-rail [data-view-nav="map"]`);if(!r)return;let i=r.querySelector(`.prb-rail-count`);if(n===0){i?.remove();return}i||(i=document.createElement(`span`),i.className=`prb-rail-count`,r.appendChild(i)),i.textContent=String(n),i.setAttribute(`aria-label`,n===1?`1 diagram`:`${n} diagrams`)}function zo(e,t){for(let n of document.querySelectorAll(`[data-diagram-mode="${e}"]`)){n.toggleAttribute(`data-ready`,t);let e=n.querySelector(`[data-mode-ready]`);e&&(e.hidden=!t)}}function Bo(e,t,n){if(!e)return null;let r=document.createElement(`article`);return r.className=`prb-diagram`,r.dataset.diagramCard=t,r.setAttribute(`data-diagram-pending`,``),r.innerHTML=`<header class="prb-diagram-head">
131
+ </article>`}function Oo(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${T(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var ko=.5,Ao=3,jo=1.25,Mo=new WeakSet,No=new WeakMap,Po=new WeakMap,j=null;function Fo(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{j?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Jo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Zo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Lo(e):o&&Io(e,o.dataset.diagramRequest||null)}),Vo(),Ro(),{drawPane:Yo}}async function Io(e,t){if(j)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${as(n)}"]`)??null??Wo(r,n,t);if(!i)return;Ho(),e.showDiagrams();let a=Go(i);j=new AbortController,es(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:j.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return Ko(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);qo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Ho()):a.remove();return}Ko(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{j=null,es(!0)}}async function Lo(e){if(j)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=zo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),j=new AbortController,es(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:j.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){Bo(n,r?.error??`Buddy AI did not return a change map. Check the terminal running PR Review Buddy.`);return}n.remove(),e.showChangeMap(r.changeMap),Ho()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Bo(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),j=null,es(!0)}}function Ro(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(zo(e),es(!1))}function zo(e){e.parentElement?.querySelector(`[data-map-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-map-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the review and the change…</span>`;let n=document.createElement(`button`);return n.type=`button`,n.className=`prb-diagram-redraw`,n.setAttribute(`data-diagram-stop`,``),n.textContent=`Stop`,t.appendChild(n),e.before(t),t}function Bo(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Vo(){let e=document.querySelector(`[data-diagram-pane][data-diagram-running]`);if(!e)return;let t=e.dataset.diagramRunning||null,n=t??`change`,r=e.querySelector(`[data-diagram-card="${as(n)}"]`)??Wo(e,n,t);r&&(Ho(),Go(r,{scroll:!1}),es(!1))}function Ho(){let e=document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]:not([data-diagram-pending])`).length,t=document.querySelectorAll(`[data-map-body] [data-change-map]`).length;Uo(`map`,t>0),Uo(`diagram`,e>0);let n=e+t,r=document.querySelector(`.prb-rail [data-view-nav="map"]`);if(!r)return;let i=r.querySelector(`.prb-rail-count`);if(n===0){i?.remove();return}i||(i=document.createElement(`span`),i.className=`prb-rail-count`,r.appendChild(i)),i.textContent=String(n),i.setAttribute(`aria-label`,n===1?`1 diagram`:`${n} diagrams`)}function Uo(e,t){for(let n of document.querySelectorAll(`[data-diagram-mode="${e}"]`)){n.toggleAttribute(`data-ready`,t);let e=n.querySelector(`[data-mode-ready]`);e&&(e.hidden=!t)}}function Wo(e,t,n){if(!e)return null;let r=document.createElement(`article`);return r.className=`prb-diagram`,r.dataset.diagramCard=t,r.setAttribute(`data-diagram-pending`,``),r.innerHTML=`<header class="prb-diagram-head">
119
132
  <div class="prb-diagram-heading">
120
133
  <h4 class="prb-diagram-title">Drawing…</h4>
121
- <p class="prb-diagram-scope">${t===`change`?`Whole change`:es(Zo(n))}</p>
134
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:is(ts(n))}</p>
122
135
  </div>
123
- </header>`,Qo(e,r,n),r}function Vo(e,{scroll:t=!0}={}){e.querySelector(`[data-diagram-status]`)?.remove();let n=document.createElement(`p`);n.className=`prb-diagram-status`,n.setAttribute(`data-diagram-status`,``),n.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the change…</span>`;let r=document.createElement(`button`);return r.type=`button`,r.className=`prb-diagram-redraw`,r.setAttribute(`data-diagram-stop`,``),r.textContent=`Stop`,n.appendChild(r),e.querySelector(`.prb-diagram-head`)?.insertAdjacentElement(`afterend`,n),t&&e.scrollIntoView({behavior:ns()?`auto`:`smooth`,block:`start`}),n}function Ho(e,t,n){if(t.className=`prb-diagram-failed`,t.textContent=n,e.hasAttribute(`data-diagram-pending`)){let n=document.createElement(`button`);n.type=`button`,n.className=`prb-diagram-redraw`,n.dataset.diagramRequest=e.dataset.diagramCard===`change`?``:e.dataset.diagramCard??``,n.textContent=`Try again`,t.appendChild(document.createTextNode(` `)),t.appendChild(n)}}function Uo(e,t,n){let r=Co(t,new Map(n?[[n,Zo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Ro(),Ko(a))}function Wo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Ko(e))}function Go(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Ko(e)}async function Ko(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Oo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Oo.add(e);try{await tn(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{Oo.delete(e),t.innerHTML=``;let n=document.createElement(`p`);n.className=`prb-diagram-failed`,n.textContent=`This diagram could not be drawn. Its source is below, and Regenerate will ask for another.`,t.replaceWith(n),e.querySelector(`details`)?.setAttribute(`open`,``)}}}function qo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Ao.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Jo(e,n);if(i<=0)return;let a=Yo((Ao.get(e)??1)*(t===`in`?Do:1/Do));Ao.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Jo(e,t){let n=ko.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return ko.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Yo(e){return Math.min(Eo,Math.max(To,e))}function Xo(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Zo(e){return e?document.querySelector(`[data-goto-section="${ts(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Qo(e,t,n){let r=$o(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if($o(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function $o(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${ts(e)}"]`);return Number(t?.dataset.themeIndex??0)}function es(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function ts(e){return CSS.escape(e)}function ns(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var rs=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],is=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],as={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},os={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function ss(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`The change map was not a JSON object.`);let t=e;if(!Array.isArray(t.nodes)||t.nodes.length===0)throw Error(`The change map had no nodes. This usually means the model ignored the requested shape.`);let{nodes:n,ids:r}=cs(t.nodes);return{schemaVersion:1,title:ms(O(t.title).trim(),as.mapTitle)||`Change map`,intent:us(t.intent,as.intent)??{simple:``,technical:``},nodes:n,edges:ls(t.edges,r)}}function cs(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=us(e.title,as.title);if(!a)continue;let o=O(e.id).trim()||a.technical;if(t.has(o))continue;let s=ps(fs(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=rs.includes(e.role)?e.role:`concept`,l=us(e.why,as.why),u=ms(O(e.anchor).trim(),as.anchor),d=O(e.sectionId).trim();r.push({id:s,role:c,stage:ds(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:us(e.body,as.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function ls(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=us(e.label,as.label),a=t.get(O(e.from).trim())??O(e.from).trim(),o=t.get(O(e.to).trim())??O(e.to).trim();if(!i||!a||!o)continue;let s=us(e.note,as.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function us(e,t){if(typeof e==`string`){let n=ms(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=ms(O(n.simple).trim(),t),i=ms(O(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function ds(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:os[t]}function fs(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function ps(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ms(e,t){if(e.length<=t)return e;let n=e.slice(0,t-1),r=n.lastIndexOf(` `);return`${(r>t/2?n.slice(0,r):n).trimEnd()}…`}function hs(e,t){try{return gs(ss(e),t).map}catch{return null}}function gs(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=ys(_s(e.nodes,n).map(e=>vs(e,t,n)),n),i=new Set(r.map(e=>e.id)),a=new Set,o=[];for(let t of e.edges){let e=`${t.from}\u0000${t.to}`;if(!i.has(t.from)||!i.has(t.to)||t.from===t.to||a.has(e)||o.length>=16){n.droppedEdges+=1;continue}a.add(e),o.push(t)}if(r.length<2||o.length===0)throw Error(`The change map had too little in it to draw: it needs at least two ideas and one relationship.`);return{map:{...e,nodes:bs(r),edges:o},audit:n}}function _s(e,t){if(e.length<=12)return e;let n=e.filter(e=>e.weight===`primary`).slice(0,3),r=e.filter(e=>!n.includes(e)).slice(0,12-n.length),i=new Set([...n,...r]);return t.droppedNodes+=e.length-i.size,e.filter(e=>i.has(e))}function vs(e,t,n){if(e.sectionId===void 0||t.includes(e.sectionId))return e;n.withdrawnSections+=1;let{sectionId:r,...i}=e;return i}function ys(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function bs(e){return[...e].sort((e,t)=>e.stage-t.stage)}function xs(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?hs(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Ss(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
136
+ </header>`,ns(e,r,n),r}function Go(e,{scroll:t=!0}={}){e.querySelector(`[data-diagram-status]`)?.remove();let n=document.createElement(`p`);n.className=`prb-diagram-status`,n.setAttribute(`data-diagram-status`,``),n.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading the change…</span>`;let r=document.createElement(`button`);return r.type=`button`,r.className=`prb-diagram-redraw`,r.setAttribute(`data-diagram-stop`,``),r.textContent=`Stop`,n.appendChild(r),e.querySelector(`.prb-diagram-head`)?.insertAdjacentElement(`afterend`,n),t&&e.scrollIntoView({behavior:os()?`auto`:`smooth`,block:`start`}),n}function Ko(e,t,n){if(t.className=`prb-diagram-failed`,t.textContent=n,e.hasAttribute(`data-diagram-pending`)){let n=document.createElement(`button`);n.type=`button`,n.className=`prb-diagram-redraw`,n.dataset.diagramRequest=e.dataset.diagramCard===`change`?``:e.dataset.diagramCard??``,n.textContent=`Try again`,t.appendChild(document.createTextNode(` `)),t.appendChild(n)}}function qo(e,t,n){let r=Do(t,new Map(n?[[n,ts(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Ho(),Xo(a))}function Jo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Xo(e))}function Yo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Xo(e)}async function Xo(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Mo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Mo.add(e);try{await tn(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{Mo.delete(e),t.innerHTML=``;let n=document.createElement(`p`);n.className=`prb-diagram-failed`,n.textContent=`This diagram could not be drawn. Its source is below, and Regenerate will ask for another.`,t.replaceWith(n),e.querySelector(`details`)?.setAttribute(`open`,``)}}}function Zo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Po.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Qo(e,n);if(i<=0)return;let a=$o((Po.get(e)??1)*(t===`in`?jo:1/jo));Po.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Qo(e,t){let n=No.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return No.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function $o(e){return Math.min(Ao,Math.max(ko,e))}function es(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function ts(e){return e?document.querySelector(`[data-goto-section="${as(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function ns(e,t,n){let r=rs(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(rs(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function rs(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${as(e)}"]`);return Number(t?.dataset.themeIndex??0)}function is(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function as(e){return CSS.escape(e)}function os(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ss=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],cs=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],ls={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},us={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function ds(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`The change map was not a JSON object.`);let t=e;if(!Array.isArray(t.nodes)||t.nodes.length===0)throw Error(`The change map had no nodes. This usually means the model ignored the requested shape.`);let{nodes:n,ids:r}=fs(t.nodes);return{schemaVersion:1,title:vs(O(t.title).trim(),ls.mapTitle)||`Change map`,intent:ms(t.intent,ls.intent)??{simple:``,technical:``},nodes:n,edges:ps(t.edges,r)}}function fs(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=ms(e.title,ls.title);if(!a)continue;let o=O(e.id).trim()||a.technical;if(t.has(o))continue;let s=_s(gs(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=ss.includes(e.role)?e.role:`concept`,l=ms(e.why,ls.why),u=vs(O(e.anchor).trim(),ls.anchor),d=O(e.sectionId).trim();r.push({id:s,role:c,stage:hs(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:ms(e.body,ls.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function ps(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=ms(e.label,ls.label),a=t.get(O(e.from).trim())??O(e.from).trim(),o=t.get(O(e.to).trim())??O(e.to).trim();if(!i||!a||!o)continue;let s=ms(e.note,ls.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function ms(e,t){if(typeof e==`string`){let n=vs(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=vs(O(n.simple).trim(),t),i=vs(O(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function hs(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:us[t]}function gs(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function _s(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function vs(e,t){if(e.length<=t)return e;let n=e.slice(0,t-1),r=n.lastIndexOf(` `);return`${(r>t/2?n.slice(0,r):n).trimEnd()}…`}function ys(e,t){try{return bs(ds(e),t).map}catch{return null}}function bs(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=Cs(xs(e.nodes,n).map(e=>Ss(e,t,n)),n),i=new Set(r.map(e=>e.id)),a=new Set,o=[];for(let t of e.edges){let e=`${t.from}\u0000${t.to}`;if(!i.has(t.from)||!i.has(t.to)||t.from===t.to||a.has(e)||o.length>=16){n.droppedEdges+=1;continue}a.add(e),o.push(t)}if(r.length<2||o.length===0)throw Error(`The change map had too little in it to draw: it needs at least two ideas and one relationship.`);return{map:{...e,nodes:ws(r),edges:o},audit:n}}function xs(e,t){if(e.length<=12)return e;let n=e.filter(e=>e.weight===`primary`).slice(0,3),r=e.filter(e=>!n.includes(e)).slice(0,12-n.length),i=new Set([...n,...r]);return t.droppedNodes+=e.length-i.size,e.filter(e=>i.has(e))}function Ss(e,t,n){if(e.sectionId===void 0||t.includes(e.sectionId))return e;n.withdrawnSections+=1;let{sectionId:r,...i}=e;return i}function Cs(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function ws(e){return[...e].sort((e,t)=>e.stage-t.stage)}function Ts(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?ys(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Es(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
124
137
  <header class="prb-map-head">
125
138
  <div class="prb-map-heading">
126
139
  <h4 class="prb-map-title">${T(a.title)}</h4>
127
140
  ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${M(a.intent)}</p>`:``}
128
141
  </div>
129
142
  <div class="prb-map-tools">
130
- ${Cs(i)}
143
+ ${Ds(i)}
131
144
  <button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
132
145
  </div>
133
146
  </header>
134
147
  <p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
135
- ${ws(a,s)}
136
- ${Os(a)}
137
- </div>`}function Ss(e){return`<div class="prb-map-empty" data-change-map-empty>
148
+ ${Os(a,s)}
149
+ ${Ms(a)}
150
+ </div>`}function Es(e){return`<div class="prb-map-empty" data-change-map-empty>
138
151
  ${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
139
152
  <h4 class="prb-map-empty-title">See the change as a map</h4>
140
153
  <p>See how the main ideas in this change connect, what depends on what, and where the important risks are. Each idea links back to its theme in the Review Path.</p>
141
154
  <p class="prb-map-empty-note">Buddy AI builds it from this review, in plain words and technical ones. It takes a minute or two.</p>
142
155
  <button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
143
- </div>`}function Cs(e){let t=(t,n)=>`<button type="button" class="prb-map-register" data-map-register-option="${t}" aria-pressed="${e===t}">${n}</button>`;return`<div class="prb-map-registers" role="group" aria-label="Wording">${t(`simple`,`Simple`)}${t(`technical`,`Technical`)}</div>`}function ws(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
144
- <h5 class="prb-map-stage-title">${T(is[n]??``)}</h5>
145
- ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Es(n,t,e)).join(``)}
146
- </div>`).join(``),i=e.edges.map((e,t)=>Ds(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
156
+ </div>`}function Ds(e){let t=(t,n)=>`<button type="button" class="prb-map-register" data-map-register-option="${t}" aria-pressed="${e===t}">${n}</button>`;return`<div class="prb-map-registers" role="group" aria-label="Wording">${t(`simple`,`Simple`)}${t(`technical`,`Technical`)}</div>`}function Os(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
157
+ <h5 class="prb-map-stage-title">${T(cs[n]??``)}</h5>
158
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>As(n,t,e)).join(``)}
159
+ </div>`).join(``),i=e.edges.map((e,t)=>js(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
147
160
  <svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
148
161
  ${r}
149
162
  <div class="prb-map-labels" aria-hidden="true">${i}</div>
150
- </div>`}var Ts={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Es(e,t,n){let r=T(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${M(e.label)}</em> <span aria-hidden="true">→</span> ${M(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
151
- <p class="prb-map-role">${Ts[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
163
+ </div>`}var ks={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function As(e,t,n){let r=T(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${M(e.label)}</em> <span aria-hidden="true">→</span> ${M(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
164
+ <p class="prb-map-role">${ks[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
152
165
  <h5 class="prb-map-node-title" id="prb-map-node-${r}">${M(e.title)}</h5>
153
166
  ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${M(e.body)}</p>`:``}
154
167
  ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${M(e.why)}</p>`:``}
155
168
  ${e.anchor?`<code class="prb-map-anchor">${T(e.anchor)}</code>`:``}
156
169
  ${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
157
170
  ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${T(e.sectionId)}" aria-label="Open ${T(i)} in the Review Path">Review Path: ${T(i)} <span aria-hidden="true">→</span></button>`:``}
158
- </article>`}function Ds(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${T(e.from)}" data-to="${T(e.to)}">${M(e.label)}</span>`}function Os(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
171
+ </article>`}function js(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${T(e.from)}" data-to="${T(e.to)}">${M(e.label)}</span>`}function Ms(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
159
172
  <summary>Read as a list</summary>
160
173
  <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${M(n)}</strong> <em>${M(e.label)}</em> <strong>${M(r)}</strong>${e.note?`<span class="prb-map-note"> — ${M(e.note)}</span>`:``}</li>`}).join(``)}</ol>
161
- </details>`}function M(e){return e.simple===e.technical?Ce(e.simple):`<span data-reg="simple">${Ce(e.simple)}</span><span data-reg="technical">${Ce(e.technical)}</span>`}var ks=`http://www.w3.org/2000/svg`,As=new WeakSet,js=new WeakMap;function Ms(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-map-register-option]`);if(r){Ks(r.dataset.mapRegisterOption===`technical`?`technical`:`simple`,e);return}if(n.closest(`[data-goto-section]`))return;let i=n.closest(`[data-map-node]`),a=n.closest(`[data-map-board]`);a&&Gs(a,i&&i.classList.contains(`prb-map-node`)?i.dataset.mapNode??null:null)}),document.addEventListener(`focusin`,e=>{let t=e.target instanceof Element?e.target.closest(`.prb-map-node`):null,n=t?.closest(`[data-map-board]`);t&&n&&Gs(n,t.dataset.mapNode??null)}),document.addEventListener(`keydown`,t=>{let n=t.target;if(n instanceof HTMLElement){if(t.key===`Escape`&&n.closest(`[data-map-board]`)){let e=n.closest(`[data-map-board]`);e?.hasAttribute(`data-selecting`)&&(Gs(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Ns,show:Ps}}function Ns(){for(let e of document.querySelectorAll(`[data-map-board]`))Fs(e),Is(e)}function Ps(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=xs({stored:e,sections:Js(),reviewedSha:e.commitSha,register:qs()}),Ns())}function Fs(e){if(As.has(e)||typeof ResizeObserver>`u`)return;As.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Is(e)}))}).observe(e)}function Is(e){let t=e.querySelector(`[data-map-edges]`);if(!t||e.offsetWidth===0)return;let n=e.getBoundingClientRect(),r=t=>{let r=t.getBoundingClientRect(),i=r.left-n.left+e.scrollLeft,a=r.top-n.top+e.scrollTop;return{left:i,top:a,right:i+r.width,bottom:a+r.height,cx:i+r.width/2,cy:a+r.height/2}},i=e.scrollWidth,a=e.scrollHeight;t.setAttribute(`width`,String(i)),t.setAttribute(`height`,String(a)),t.setAttribute(`viewBox`,`0 0 ${i} ${a}`),t.replaceChildren(Ws());let o=new Map;for(let t of e.querySelectorAll(`.prb-map-node`))o.set(t.dataset.mapNode??``,r(t));let s=getComputedStyle(e).gridTemplateColumns.trim().split(/\s+/).length>1,c=[...e.querySelectorAll(`.prb-map-label[data-map-edge]`)].map(e=>{let t=o.get(e.dataset.from??``),n=o.get(e.dataset.to??``);return{label:e,from:t,to:n,ends:t&&n?Ls(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=js.get(e),_=g&&g.width===h?g.edges:new Set;js.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Rs(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Rs(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Bs(s,i.from,c,i.to),[u,h,g,y]=l,ee=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Vs(l,.05+t*.05)).some(e=>ee.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let b=document.createElementNS(ks,`path`);b.setAttribute(`d`,`M${Us(u.x)},${Us(u.y)} C${Us(h.x)},${Us(h.y)} ${Us(g.x)},${Us(g.y)} ${Us(y.x)},${Us(y.y)}`),b.setAttribute(`class`,`prb-map-edge`),b.setAttribute(`marker-end`,`url(#prb-map-arrow)`),b.dataset.mapEdge=e.dataset.mapEdge??``,b.dataset.from=e.dataset.from??``,b.dataset.to=e.dataset.to??``,t.appendChild(b),e.hidden=!1;let x=e.offsetWidth,S=e.offsetHeight,C=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Vs(l,e);return{left:t.x-x/2,top:t.y-S/2,right:t.x+x/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Hs(e,t,2)));if(!C){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(C),e.style.left=`${Math.round(C.left)}px`,e.style.top=`${Math.round(C.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Ls(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function Rs(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var zs={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Bs(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=zs[t],s=zs[r];return[e,{x:e.x+o.x*a,y:e.y+o.y*a},{x:n.x+s.x*a,y:n.y+s.y*a},n]}function Vs([e,t,n,r],i){let a=1-i;return{x:a*a*a*e.x+3*a*a*i*t.x+3*a*i*i*n.x+i*i*i*r.x,y:a*a*a*e.y+3*a*a*i*t.y+3*a*i*i*n.y+i*i*i*r.y}}function Hs(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function Us(e){return Math.round(e*10)/10}function Ws(){let e=document.createElementNS(ks,`defs`),t=document.createElementNS(ks,`marker`);t.setAttribute(`id`,`prb-map-arrow`),t.setAttribute(`viewBox`,`0 0 10 10`),t.setAttribute(`refX`,`9`),t.setAttribute(`refY`,`5`),t.setAttribute(`markerWidth`,`7`),t.setAttribute(`markerHeight`,`7`),t.setAttribute(`orient`,`auto-start-reverse`);let n=document.createElementNS(ks,`path`);return n.setAttribute(`d`,`M0,0 L10,5 L0,10 z`),n.setAttribute(`class`,`prb-map-arrow`),t.appendChild(n),e.appendChild(t),e}function Gs(e,t){for(let t of e.querySelectorAll(`[data-active], [data-near]`))t.removeAttribute(`data-active`),t.removeAttribute(`data-near`);if(e.toggleAttribute(`data-selecting`,t!==null),t!==null){e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(t)}"]`)?.setAttribute(`data-active`,``);for(let n of e.querySelectorAll(`[data-map-edge]`)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`);if(r!==t&&i!==t)continue;n.setAttribute(`data-active`,``);let a=r===t?i:r;a&&e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(a)}"]`)?.setAttribute(`data-near`,``)}}}function Ks(e,t){document.querySelector(`[data-map-pane]`)?.setAttribute(`data-map-register`,e);for(let t of document.querySelectorAll(`[data-change-map]`))t.dataset.register=e;for(let t of document.querySelectorAll(`[data-map-register-option]`))t.setAttribute(`aria-pressed`,String(t.dataset.mapRegisterOption===e));Ns(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function qs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Js(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Ys=`repository`,Xs={minCharacters:8,maxLines:3,maxCharacters:400},Zs=[`app`,`service`,`component`,`store`,`external`,`group`],Qs=/^[a-z][a-z0-9-]*$/;function $s(e){let t=[];if(!cc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};uc(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=lc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=dc(n.title,`architecture.title`,t),i=fc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=tc(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>cc(e)&&typeof e.id==`string`&&Qs.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)ec(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=nc(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(ec(a,c).includes(d)||ec(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function ec(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function tc(e,t,n){if(!cc(e))return n.push(`${t} must be an object.`),null;uc(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=lc(e,[`parent`,`description`,`owns`],t,n),i=pc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Ys}": that name is kept for the whole repository. Choose another id.`);let a=dc(r.name,`${t}.name`,n),o=Zs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Zs.join(`, `)}.`);let s=r.parent===void 0?void 0:pc(r.parent,`${t}.parent`,n),c=fc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:rc(r.owns,`${t}.owns`,n),u=ic(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function nc(e,t,n){if(!cc(e))return n.push(`${t} must be an object.`),null;uc(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=lc(e,[`description`,`confidence`],t,n),i=pc(r.id,`${t}.id`,n),a=pc(r.source,`${t}.source`,n),o=pc(r.target,`${t}.target`,n),s=dc(r.label,`${t}.label`,n),c=fc(r.description,`${t}.description`,n),l=ic(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function rc(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=dc(e,`${t}[${i}]`,n);a!==null&&(!sc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function ic(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!cc(e)){n.push(`${a} must be an object.`);return}uc(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=lc(e,[`symbol`,`line`,`note`],a,n);let o=dc(e.path,`${a}.path`,n);o!==null&&!sc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=ac(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=mc(e.line,`${a}.line`,n),u=fc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function ac(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Xs.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=oc(r);return r.split(`
162
- `).length>Xs.maxLines||r.length>Xs.maxCharacters?(n.push(`${t} must be at most ${Xs.maxLines} lines and ${Xs.maxCharacters} characters.`),null):i.length<Xs.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Xs.minCharacters} characters.`),null):r}function oc(e){return e.replace(/\s+/g,` `).trim()}function sc(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function cc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function lc(e,t,n,r){let i=t.filter(t=>e[t]===null);if(i.length===0)return e;let a={...e};for(let e of i)r.push(e===`parent`?`${n}.parent must be omitted when the node has no parent; null is not allowed.`:`${n}.${e} must be omitted when there is nothing to give; null is not allowed.`),delete a[e];return a}function uc(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function dc(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function fc(e,t,n){if(e!==void 0)return dc(e,t,n)??void 0}function pc(e,t,n){if(typeof e==`string`&&Qs.test(e))return e;let r=typeof e==`string`?[...new Set([...e].filter(e=>e>``))]:[],i=r.map(e=>`"${e}" (U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,`0`)})`).join(`, `);return n.push(`${t} must be lowercase ASCII letters, digits and hyphens, starting with a letter${r.length>0?`; "${e}" contains ${i}, which ${r.length===1?`is`:`are`} not ASCII`:``}.`),null}function mc(e,t,n){if(e!==void 0){if(Number.isInteger(e)&&e>=1)return e;n.push(`${t} must be a whole number from 1.`)}}function hc(e,t){let n=new Map(e.nodes.map(e=>[e.id,e]));if(t!==null&&!e.nodes.some(e=>e.parent===t))throw Error(`"${t}" is not a group with members.`);let r=t===null?[]:[t,...ec(t,n)],i=e=>t!==null&&ec(e,n).includes(t),a=e=>{let a=[e,...ec(e,n)];if(t===null)return a[a.length-1];if(i(e))return a[a.indexOf(t)-1];let o=e,s=n.get(o)?.parent;for(;s!==void 0&&!r.includes(s);)o=s,s=n.get(o)?.parent;return o},o=e.nodes.filter(e=>t===null?e.parent===void 0:e.parent===t),s=new Set(o.map(e=>e.id)),c=new Map;for(let n of e.relationships){let e=a(n.source),r=a(n.target);if(e===r)continue;let i=e=>s.has(e)||e===t;if(!i(e)&&!i(r))continue;let o=`${e}>${r}`,l=c.get(o)??{id:o,source:e,target:r,relationships:[],label:``};l.relationships.push(n.id),c.set(o,l)}let l=new Set;for(let e of c.values())for(let n of[e.source,e.target])!s.has(n)&&n!==t&&l.add(n);let u=new Map(e.relationships.map(e=>[e.id,e.label]));for(let e of c.values())e.label=e.relationships.length===1?u.get(e.relationships[0]):`${e.relationships.length} relationships`;let d=t=>e.nodes.filter(e=>e.parent===t.id).length,f=(e,t)=>{let n=e.kind===`group`?d(e):0;return{id:e.id,name:e.name,kind:e.kind,member:t,opens:n,...n>0?{detail:n===1?`1 part`:`${n} parts`}:{}}};return{scope:t,title:t===null?e.title:n.get(t).name,nodes:[...o.map(e=>f(e,!0)),...e.nodes.filter(e=>l.has(e.id)).map(e=>f(e,!1))],edges:[...c.values()]}}var gc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function _c(e){return e.replace(/\s+/g,` `).replace(/#/g,`#35;`).replace(/"/g,`#quot;`).replace(/</g,`#lt;`).replace(/>/g,`#gt;`).replace(/%/g,`#37;`).replace(/`/g,`#96;`).trim()}function vc(e,t={}){let n=t.edgeIds??!0,r=new Map,i=new Map;e.nodes.forEach((e,t)=>{r.set(`n${t}`,e.id),i.set(e.id,`n${t}`)});let a=e=>{let[t,n]=gc[e.kind],r=e.detail?`${_c(e.name)}<br>${_c(e.detail)}`:_c(e.name),a=e.opens>0?`group`:e.member?e.kind===`external`?`external`:e.kind===`store`?`store`:`part`:`context`;return` ${i.get(e.id)}${t}${r}${n}:::${a}`},o=[`flowchart LR`],s=e.nodes.filter(e=>e.member),c=e.nodes.filter(e=>!e.member);e.scope===null?o.push(...s.map(a)):o.push(` subgraph scope["${_c(e.title)}"]`,...s.map(a),` end`),o.push(...c.map(a));let l=t=>t===e.scope?`scope`:i.get(t),u=new Map;return e.edges.forEach((e,t)=>{let r=`e${t}`;u.set(r,e);let i=e.relationships.length>1?`==>`:`-->`;o.push(` ${l(e.source)} ${n?`${r}@`:``}${i}|"${_c(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
163
- `),nodes:r,edges:u}}function yc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=hc(e,t),a=r===0&&t===null?`# ${bc(e.title)}`:`## ${bc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=vc(i,{edgeIds:!1}).source;return[a,...o?[bc(o)]:[],["```mermaid",s,"```"].join(`
174
+ </details>`}function M(e){return e.simple===e.technical?Ce(e.simple):`<span data-reg="simple">${Ce(e.simple)}</span><span data-reg="technical">${Ce(e.technical)}</span>`}var Ns=`http://www.w3.org/2000/svg`,Ps=new WeakSet,Fs=new WeakMap;function Is(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-map-register-option]`);if(r){Xs(r.dataset.mapRegisterOption===`technical`?`technical`:`simple`,e);return}if(n.closest(`[data-goto-section]`))return;let i=n.closest(`[data-map-node]`),a=n.closest(`[data-map-board]`);a&&Ys(a,i&&i.classList.contains(`prb-map-node`)?i.dataset.mapNode??null:null)}),document.addEventListener(`focusin`,e=>{let t=e.target instanceof Element?e.target.closest(`.prb-map-node`):null,n=t?.closest(`[data-map-board]`);t&&n&&Ys(n,t.dataset.mapNode??null)}),document.addEventListener(`keydown`,t=>{let n=t.target;if(n instanceof HTMLElement){if(t.key===`Escape`&&n.closest(`[data-map-board]`)){let e=n.closest(`[data-map-board]`);e?.hasAttribute(`data-selecting`)&&(Ys(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Ls,show:Rs}}function Ls(){for(let e of document.querySelectorAll(`[data-map-board]`))zs(e),Bs(e)}function Rs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Ts({stored:e,sections:Qs(),reviewedSha:e.commitSha,register:Zs()}),Ls())}function zs(e){if(Ps.has(e)||typeof ResizeObserver>`u`)return;Ps.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Bs(e)}))}).observe(e)}function Bs(e){let t=e.querySelector(`[data-map-edges]`);if(!t||e.offsetWidth===0)return;let n=e.getBoundingClientRect(),r=t=>{let r=t.getBoundingClientRect(),i=r.left-n.left+e.scrollLeft,a=r.top-n.top+e.scrollTop;return{left:i,top:a,right:i+r.width,bottom:a+r.height,cx:i+r.width/2,cy:a+r.height/2}},i=e.scrollWidth,a=e.scrollHeight;t.setAttribute(`width`,String(i)),t.setAttribute(`height`,String(a)),t.setAttribute(`viewBox`,`0 0 ${i} ${a}`),t.replaceChildren(Js());let o=new Map;for(let t of e.querySelectorAll(`.prb-map-node`))o.set(t.dataset.mapNode??``,r(t));let s=getComputedStyle(e).gridTemplateColumns.trim().split(/\s+/).length>1,c=[...e.querySelectorAll(`.prb-map-label[data-map-edge]`)].map(e=>{let t=o.get(e.dataset.from??``),n=o.get(e.dataset.to??``);return{label:e,from:t,to:n,ends:t&&n?Vs(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=Fs.get(e),_=g&&g.width===h?g.edges:new Set;Fs.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Hs(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Hs(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ws(s,i.from,c,i.to),[u,h,g,y]=l,ee=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Gs(l,.05+t*.05)).some(e=>ee.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let b=document.createElementNS(Ns,`path`);b.setAttribute(`d`,`M${qs(u.x)},${qs(u.y)} C${qs(h.x)},${qs(h.y)} ${qs(g.x)},${qs(g.y)} ${qs(y.x)},${qs(y.y)}`),b.setAttribute(`class`,`prb-map-edge`),b.setAttribute(`marker-end`,`url(#prb-map-arrow)`),b.dataset.mapEdge=e.dataset.mapEdge??``,b.dataset.from=e.dataset.from??``,b.dataset.to=e.dataset.to??``,t.appendChild(b),e.hidden=!1;let x=e.offsetWidth,S=e.offsetHeight,C=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Gs(l,e);return{left:t.x-x/2,top:t.y-S/2,right:t.x+x/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Ks(e,t,2)));if(!C){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(C),e.style.left=`${Math.round(C.left)}px`,e.style.top=`${Math.round(C.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Vs(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function Hs(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var Us={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Ws(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=Us[t],s=Us[r];return[e,{x:e.x+o.x*a,y:e.y+o.y*a},{x:n.x+s.x*a,y:n.y+s.y*a},n]}function Gs([e,t,n,r],i){let a=1-i;return{x:a*a*a*e.x+3*a*a*i*t.x+3*a*i*i*n.x+i*i*i*r.x,y:a*a*a*e.y+3*a*a*i*t.y+3*a*i*i*n.y+i*i*i*r.y}}function Ks(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function qs(e){return Math.round(e*10)/10}function Js(){let e=document.createElementNS(Ns,`defs`),t=document.createElementNS(Ns,`marker`);t.setAttribute(`id`,`prb-map-arrow`),t.setAttribute(`viewBox`,`0 0 10 10`),t.setAttribute(`refX`,`9`),t.setAttribute(`refY`,`5`),t.setAttribute(`markerWidth`,`7`),t.setAttribute(`markerHeight`,`7`),t.setAttribute(`orient`,`auto-start-reverse`);let n=document.createElementNS(Ns,`path`);return n.setAttribute(`d`,`M0,0 L10,5 L0,10 z`),n.setAttribute(`class`,`prb-map-arrow`),t.appendChild(n),e.appendChild(t),e}function Ys(e,t){for(let t of e.querySelectorAll(`[data-active], [data-near]`))t.removeAttribute(`data-active`),t.removeAttribute(`data-near`);if(e.toggleAttribute(`data-selecting`,t!==null),t!==null){e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(t)}"]`)?.setAttribute(`data-active`,``);for(let n of e.querySelectorAll(`[data-map-edge]`)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`);if(r!==t&&i!==t)continue;n.setAttribute(`data-active`,``);let a=r===t?i:r;a&&e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(a)}"]`)?.setAttribute(`data-near`,``)}}}function Xs(e,t){document.querySelector(`[data-map-pane]`)?.setAttribute(`data-map-register`,e);for(let t of document.querySelectorAll(`[data-change-map]`))t.dataset.register=e;for(let t of document.querySelectorAll(`[data-map-register-option]`))t.setAttribute(`aria-pressed`,String(t.dataset.mapRegisterOption===e));Ls(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Zs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Qs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var $s=`repository`,ec={minCharacters:8,maxLines:3,maxCharacters:400},tc=[`app`,`service`,`component`,`store`,`external`,`group`],nc=/^[a-z][a-z0-9-]*$/;function rc(e){let t=[];if(!fc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};mc(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=pc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=hc(n.title,`architecture.title`,t),i=gc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=ac(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>fc(e)&&typeof e.id==`string`&&nc.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)ic(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=oc(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(ic(a,c).includes(d)||ic(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function ic(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function ac(e,t,n){if(!fc(e))return n.push(`${t} must be an object.`),null;mc(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=pc(e,[`parent`,`description`,`owns`],t,n),i=_c(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${$s}": that name is kept for the whole repository. Choose another id.`);let a=hc(r.name,`${t}.name`,n),o=tc.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${tc.join(`, `)}.`);let s=r.parent===void 0?void 0:_c(r.parent,`${t}.parent`,n),c=gc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:sc(r.owns,`${t}.owns`,n),u=cc(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function oc(e,t,n){if(!fc(e))return n.push(`${t} must be an object.`),null;mc(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=pc(e,[`description`,`confidence`],t,n),i=_c(r.id,`${t}.id`,n),a=_c(r.source,`${t}.source`,n),o=_c(r.target,`${t}.target`,n),s=hc(r.label,`${t}.label`,n),c=gc(r.description,`${t}.description`,n),l=cc(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function sc(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=hc(e,`${t}[${i}]`,n);a!==null&&(!dc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function cc(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!fc(e)){n.push(`${a} must be an object.`);return}mc(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=pc(e,[`symbol`,`line`,`note`],a,n);let o=hc(e.path,`${a}.path`,n);o!==null&&!dc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=lc(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=vc(e.line,`${a}.line`,n),u=gc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function lc(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${ec.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=uc(r);return r.split(`
175
+ `).length>ec.maxLines||r.length>ec.maxCharacters?(n.push(`${t} must be at most ${ec.maxLines} lines and ${ec.maxCharacters} characters.`),null):i.length<ec.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${ec.minCharacters} characters.`),null):r}function uc(e){return e.replace(/\s+/g,` `).trim()}function dc(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function fc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pc(e,t,n,r){let i=t.filter(t=>e[t]===null);if(i.length===0)return e;let a={...e};for(let e of i)r.push(e===`parent`?`${n}.parent must be omitted when the node has no parent; null is not allowed.`:`${n}.${e} must be omitted when there is nothing to give; null is not allowed.`),delete a[e];return a}function mc(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function hc(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function gc(e,t,n){if(e!==void 0)return hc(e,t,n)??void 0}function _c(e,t,n){if(typeof e==`string`&&nc.test(e))return e;let r=typeof e==`string`?[...new Set([...e].filter(e=>e>``))]:[],i=r.map(e=>`"${e}" (U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,`0`)})`).join(`, `);return n.push(`${t} must be lowercase ASCII letters, digits and hyphens, starting with a letter${r.length>0?`; "${e}" contains ${i}, which ${r.length===1?`is`:`are`} not ASCII`:``}.`),null}function vc(e,t,n){if(e!==void 0){if(Number.isInteger(e)&&e>=1)return e;n.push(`${t} must be a whole number from 1.`)}}function yc(e,t){let n=new Map(e.nodes.map(e=>[e.id,e]));if(t!==null&&!e.nodes.some(e=>e.parent===t))throw Error(`"${t}" is not a group with members.`);let r=t===null?[]:[t,...ic(t,n)],i=e=>t!==null&&ic(e,n).includes(t),a=e=>{let a=[e,...ic(e,n)];if(t===null)return a[a.length-1];if(i(e))return a[a.indexOf(t)-1];let o=e,s=n.get(o)?.parent;for(;s!==void 0&&!r.includes(s);)o=s,s=n.get(o)?.parent;return o},o=e.nodes.filter(e=>t===null?e.parent===void 0:e.parent===t),s=new Set(o.map(e=>e.id)),c=new Map;for(let n of e.relationships){let e=a(n.source),r=a(n.target);if(e===r)continue;let i=e=>s.has(e)||e===t;if(!i(e)&&!i(r))continue;let o=`${e}>${r}`,l=c.get(o)??{id:o,source:e,target:r,relationships:[],label:``};l.relationships.push(n.id),c.set(o,l)}let l=new Set;for(let e of c.values())for(let n of[e.source,e.target])!s.has(n)&&n!==t&&l.add(n);let u=new Map(e.relationships.map(e=>[e.id,e.label]));for(let e of c.values())e.label=e.relationships.length===1?u.get(e.relationships[0]):`${e.relationships.length} relationships`;let d=t=>e.nodes.filter(e=>e.parent===t.id).length,f=(e,t)=>{let n=e.kind===`group`?d(e):0;return{id:e.id,name:e.name,kind:e.kind,member:t,opens:n,...n>0?{detail:n===1?`1 part`:`${n} parts`}:{}}};return{scope:t,title:t===null?e.title:n.get(t).name,nodes:[...o.map(e=>f(e,!0)),...e.nodes.filter(e=>l.has(e.id)).map(e=>f(e,!1))],edges:[...c.values()]}}var bc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function xc(e){return e.replace(/\s+/g,` `).replace(/#/g,`#35;`).replace(/"/g,`#quot;`).replace(/</g,`#lt;`).replace(/>/g,`#gt;`).replace(/%/g,`#37;`).replace(/`/g,`#96;`).trim()}function Sc(e,t={}){let n=t.edgeIds??!0,r=new Map,i=new Map;e.nodes.forEach((e,t)=>{r.set(`n${t}`,e.id),i.set(e.id,`n${t}`)});let a=e=>{let[t,n]=bc[e.kind],r=e.detail?`${xc(e.name)}<br>${xc(e.detail)}`:xc(e.name),a=e.opens>0?`group`:e.member?e.kind===`external`?`external`:e.kind===`store`?`store`:`part`:`context`;return` ${i.get(e.id)}${t}${r}${n}:::${a}`},o=[`flowchart LR`],s=e.nodes.filter(e=>e.member),c=e.nodes.filter(e=>!e.member);e.scope===null?o.push(...s.map(a)):o.push(` subgraph scope["${xc(e.title)}"]`,...s.map(a),` end`),o.push(...c.map(a));let l=t=>t===e.scope?`scope`:i.get(t),u=new Map;return e.edges.forEach((e,t)=>{let r=`e${t}`;u.set(r,e);let i=e.relationships.length>1?`==>`:`-->`;o.push(` ${l(e.source)} ${n?`${r}@`:``}${i}|"${xc(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
176
+ `),nodes:r,edges:u}}function Cc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=yc(e,t),a=r===0&&t===null?`# ${wc(e.title)}`:`## ${wc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=Sc(i,{edgeIds:!1}).source;return[a,...o?[wc(o)]:[],["```mermaid",s,"```"].join(`
164
177
  `)].join(`
165
178
 
166
179
  `)}).join(`
167
180
 
168
- `)}\n`}function bc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var xc={exploring:{title:`Exploring the code…`,detail:`Reading the repository and identifying its main parts.`},checking:{title:`Checking the evidence…`,detail:`Making sure every piece of code the map cites is really there.`},correcting:{title:`Correcting the map…`,detail:`Fixing what the checks found.`}};function Sc(e){return xc[e.stage]}var Cc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},wc=5e3;function Tc(e){let t=!1,n=!1,r=()=>document.querySelector(`[data-architecture-pane]`)?.hidden===!1;document.addEventListener(`click`,t=>{let n=t.target.closest(`[data-architecture-map]`);n&&Dc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&Oc(e,r,r.dataset.architectureStop||`repository`)}),Ac(e,()=>{r()?Ec():n=!0});async function i(){if(n)return Ec();if(t)return;let e=document.querySelector(`[data-architecture]`),r=e?.querySelector(`[data-architecture-canvas]`),i=e?.querySelector(`[data-architecture-inspector]`),a=e?.querySelector(`[data-architecture-model]`)?.textContent;if(!e||!r||!i||!a)return;t=!0;let o;try{o=JSON.parse(a)}catch{return Fc(r,`The architecture could not be read.`)}let s=$s(o.architecture);if(!s.ok)return Fc(r,`The architecture could not be read.`);let c={scope:Ys,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=$s(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Mc({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=new URLSearchParams(window.location.search).get(`part`),f=u.draw(c).then(()=>d?u.reveal(d):void 0);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&jc(r,c,l)}),f}return{show:i}}function Ec(){let e=ge(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function Dc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{let r=await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n})});if(r.status===202||r.status===409)return Ec();kc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{kc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function Oc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{if((await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n,stop:!0})})).ok)return Ec();kc(t,`Mapping could not be stopped.`)}catch{kc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function kc(e,t){let n=N(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function Ac(e,t){let n=[];try{n=JSON.parse(document.querySelector(`[data-architecture-runs]`)?.textContent??`[]`)}catch{return}if(n.length===0)return;let r=async()=>{try{let r=(await(await fetch(e.endpoint(`/job`))).json()).architecture??[];for(let e of r){let t=document.querySelector(`[data-architecture-running="${CSS.escape(e.scope)}"]`),{title:n,detail:r}=Sc(e),i=t?.querySelector(`[data-architecture-stage]`),a=t?.querySelector(`[data-architecture-stage-detail]`);i&&(i.textContent=n),a&&(a.textContent=r)}if(n.some(e=>!r.some(t=>t.scope===e)))return t()}catch{}window.setTimeout(()=>void r(),wc)};window.setTimeout(()=>void r(),wc)}async function jc(e,t,n){let r=e=>e.nodes.filter(t=>e.nodes.some(e=>e.parent===t.id)).map(e=>e.id),i=[t,...n.values()].map(e=>yc(e.architecture,[null,...r(e.architecture)])).join(`
169
- `),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Mc=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await w(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return Fc(n,`The architecture drawing could not be loaded. Reload the page to try again.`)}this.drawing?.dispose(),this.shown=e;let s=document.createElement(`div`);s.className=`prb-arch-host`,n.replaceChildren(s);let c=e=>void this.drawing?.showScope(e);try{this.drawing=await o.renderArchitectureWithMermaid(s,e.architecture,{onSelect:e=>this.inspect(e),onScopeChange:t=>{i&&Pc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&Pc(i,e.architecture,null,c,this.base()):await this.drawing.showScope(t),e!==this.parts.repository&&this.hint()}catch(e){console.error(`[prb architecture]`,e),Fc(n,`The architecture could not be drawn.`)}}async reveal(e){let t=this.parts.repository.architecture.nodes.find(t=>t.id===e);t&&(this.shown!==this.parts.repository&&await this.draw(this.parts.repository),await this.drawing?.showScope(t.parent??null),this.drawing?.select(e),this.parts.canvas.scrollIntoView({block:`nearest`,behavior:`smooth`}))}base(){if(this.shown===this.parts.repository)return[];let{repository:e}=this.parts,t=e.architecture.nodes.find(e=>e.id===this.shown.scope);return[{label:e.architecture.title,go:()=>void this.draw(e,t?.parent??null)},{label:`${t?.name??this.shown.scope} in depth`,go:()=>void this.drawing?.showScope(null)}]}hint(){let{inspector:e}=this.parts,t=[];this.shown!==this.parts.repository&&t.push(...Nc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(N(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;Ic(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(N(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=N(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Nc(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(N(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(N(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=N(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=N(`details`,`prb-arch-failure-details`,``),n=N(`ul`,``,``);for(let e of r.errors)n.append(N(`li`,``,e));e.append(N(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Nc(e,t,n){let r=t?[N(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,N(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=N(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[N(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function Pc(e,t,n,r,i=[]){let a=new Map(t.nodes.map(e=>[e.id,e])),o=[...i.length>0?i:[{label:t.title,go:()=>r(null)}],...(n===null?[]:[...ec(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=N(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[N(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function Fc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function Ic(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=N(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[N(`p`,`prb-arch-kind`,`${Cc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),N(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(N(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=N(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(Lc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(N(`h5`,`prb-arch-subhead`,`Relationships`));let e=N(`ul`,`prb-arch-related`,``);for(let t of d)e.append(N(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(N(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=N(`section`,`prb-arch-relationship`,``);n.append(N(`p`,`prb-arch-kind`,`Relationship`),N(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(N(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(N(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Lc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Lc(e,t=[]){let n=N(`div`,`prb-arch-evidence`,``);n.append(N(`h5`,`prb-arch-subhead`,`Evidence`));let r=N(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=N(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=N(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(N(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(N(`span`,`prb-arch-location`,e.path),N(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(N(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(N(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function N(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}function Rc(e,t){let n=t,r=null,i=!1,a=async()=>{let t=null;do{i=!1;let r=e.current(),a=await e.send(r);a===null&&(n=r),t=a}while(i);if(t===null)return;let r=await e.read();if(r!==null&&(n=r),i)return a();e.paint(n),e.fail(t)};return{changed:()=>{if(r){i=!0;return}r=a().finally(()=>{r=null})},idle:async()=>{for(;r;)await r}}}var zc=5e3;function Bc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,a=async()=>{try{let n=await(await e.markSeen()).json();d(t,n.unread),i(t,n.running)}catch{}},o=async()=>{try{if(r()){let n=await(await e.askUnread()).json();i(t,n.running),typeof n.here==`number`&&n.here>0&&r()?await a():d(t,n.unread)}}catch{}n.setTimeout(()=>void o(),zc)};t.addEventListener(`visibilitychange`,()=>{r()&&a()}),r()&&a(),n.setTimeout(()=>void o(),zc)}function Vc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Hc=1e3,Uc=new WeakMap;function Wc(e,t){return e.length<=1e3?Vc(e)||`&nbsp;`:`${Vc(e.slice(0,Hc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Gc(e){let t=e.lines.length;return`<tr class="prb-code-deletion" data-before-line="${e.beforeLine}"><td class="prb-code-num"></td><td class="prb-code-line"><button type="button" class="prb-code-deletion-toggle" data-deletion-toggle aria-expanded="false">− ${t} deleted ${t===1?`line`:`lines`}</button></td></tr>`+e.lines.map(e=>`<tr class="prb-code-deleted" hidden><td class="prb-code-num">− ${e.oldLine}</td><td class="prb-code-line">${Wc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Kc(e,t){let n=new Set(e.addedLines),r=new Map;for(let t of e.deletions??[])r.set(t.beforeLine,t);let i=e.lines.map((i,a)=>{let o=e.from+a,s=[n.has(o)?`prb-code-added`:``,o===t?`prb-code-target`:``].filter(Boolean).join(` `),c=r.get(o);return`${c?Gc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Wc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Gc(a)),i.join(``)}function qc(e){let t=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(t));let n=e.closest(`tr`)?.nextElementSibling;for(;n?.classList.contains(`prb-code-deleted`);)n.hidden=!t,n=n.nextElementSibling}function Jc(e,t){let n=new Map;for(let e of t.deletions??[])for(let t of e.lines)n.set(t.oldLine,t.text);for(let r of e.querySelectorAll(`[data-full-line]`)){let[e,i]=(r.dataset.fullLine??``).split(`:`),a=Number(i),o=e===`old`?n.get(a):t.lines[a-t.from];o!==void 0&&Uc.set(r,o)}}function Yc(e){let t=Uc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Xc(e){return e.deletion?2*e.line-1:2*e.line}function Zc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Qc(e,t){if(e.length===0)return``;let n=e.map(Xc),r=n.indexOf(t),i=n.some(e=>e<t),a=n.some(e=>e>t),o=e.length,s=r===-1?`${o} ${o===1?`change`:`changes`}`:`${r+1} of ${o}`;return`<span class="prb-code-nav" data-change-navigator data-change-keys="${n.join(`,`)}" data-change-position="${t}">
181
+ `)}\n`}function wc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var Tc={exploring:{title:`Exploring the code…`,detail:`Reading the repository and identifying its main parts.`},checking:{title:`Checking the evidence…`,detail:`Making sure every piece of code the map cites is really there.`},correcting:{title:`Correcting the map…`,detail:`Fixing what the checks found.`}};function Ec(e){return Tc[e.stage]}var Dc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},Oc=5e3;function kc(e){let t=!1,n=!1,r=()=>document.querySelector(`[data-architecture-pane]`)?.hidden===!1;document.addEventListener(`click`,t=>{let n=t.target.closest(`[data-architecture-map]`);n&&jc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&Mc(e,r,r.dataset.architectureStop||`repository`)}),Pc(e,()=>{r()?Ac():n=!0});async function i(){if(n)return Ac();if(t)return;let e=document.querySelector(`[data-architecture]`),r=e?.querySelector(`[data-architecture-canvas]`),i=e?.querySelector(`[data-architecture-inspector]`),a=e?.querySelector(`[data-architecture-model]`)?.textContent;if(!e||!r||!i||!a)return;t=!0;let o;try{o=JSON.parse(a)}catch{return zc(r,`The architecture could not be read.`)}let s=rc(o.architecture);if(!s.ok)return zc(r,`The architecture could not be read.`);let c={scope:$s,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=rc(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Ic({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=new URLSearchParams(window.location.search).get(`part`),f=u.draw(c).then(()=>d?u.reveal(d):void 0);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&Fc(r,c,l)}),f}return{show:i}}function Ac(){let e=ge(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function jc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{let r=await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n})});if(r.status===202||r.status===409)return Ac();Nc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{Nc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function Mc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{if((await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n,stop:!0})})).ok)return Ac();Nc(t,`Mapping could not be stopped.`)}catch{Nc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function Nc(e,t){let n=N(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function Pc(e,t){let n=[];try{n=JSON.parse(document.querySelector(`[data-architecture-runs]`)?.textContent??`[]`)}catch{return}if(n.length===0)return;let r=async()=>{try{let r=(await(await fetch(e.endpoint(`/job`))).json()).architecture??[];for(let e of r){let t=document.querySelector(`[data-architecture-running="${CSS.escape(e.scope)}"]`),{title:n,detail:r}=Ec(e),i=t?.querySelector(`[data-architecture-stage]`),a=t?.querySelector(`[data-architecture-stage-detail]`);i&&(i.textContent=n),a&&(a.textContent=r)}if(n.some(e=>!r.some(t=>t.scope===e)))return t()}catch{}window.setTimeout(()=>void r(),Oc)};window.setTimeout(()=>void r(),Oc)}async function Fc(e,t,n){let r=e=>e.nodes.filter(t=>e.nodes.some(e=>e.parent===t.id)).map(e=>e.id),i=[t,...n.values()].map(e=>Cc(e.architecture,[null,...r(e.architecture)])).join(`
182
+ `),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Ic=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await w(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return zc(n,`The architecture drawing could not be loaded. Reload the page to try again.`)}this.drawing?.dispose(),this.shown=e;let s=document.createElement(`div`);s.className=`prb-arch-host`,n.replaceChildren(s);let c=e=>void this.drawing?.showScope(e);try{this.drawing=await o.renderArchitectureWithMermaid(s,e.architecture,{onSelect:e=>this.inspect(e),onScopeChange:t=>{i&&Rc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&Rc(i,e.architecture,null,c,this.base()):await this.drawing.showScope(t),e!==this.parts.repository&&this.hint()}catch(e){console.error(`[prb architecture]`,e),zc(n,`The architecture could not be drawn.`)}}async reveal(e){let t=this.parts.repository.architecture.nodes.find(t=>t.id===e);t&&(this.shown!==this.parts.repository&&await this.draw(this.parts.repository),await this.drawing?.showScope(t.parent??null),this.drawing?.select(e),this.parts.canvas.scrollIntoView({block:`nearest`,behavior:`smooth`}))}base(){if(this.shown===this.parts.repository)return[];let{repository:e}=this.parts,t=e.architecture.nodes.find(e=>e.id===this.shown.scope);return[{label:e.architecture.title,go:()=>void this.draw(e,t?.parent??null)},{label:`${t?.name??this.shown.scope} in depth`,go:()=>void this.drawing?.showScope(null)}]}hint(){let{inspector:e}=this.parts,t=[];this.shown!==this.parts.repository&&t.push(...Lc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(N(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;Bc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(N(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=N(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Lc(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(N(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(N(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=N(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=N(`details`,`prb-arch-failure-details`,``),n=N(`ul`,``,``);for(let e of r.errors)n.append(N(`li`,``,e));e.append(N(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Lc(e,t,n){let r=t?[N(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,N(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=N(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[N(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function Rc(e,t,n,r,i=[]){let a=new Map(t.nodes.map(e=>[e.id,e])),o=[...i.length>0?i:[{label:t.title,go:()=>r(null)}],...(n===null?[]:[...ic(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=N(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[N(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function zc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function Bc(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=N(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[N(`p`,`prb-arch-kind`,`${Dc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),N(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(N(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=N(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(Vc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(N(`h5`,`prb-arch-subhead`,`Relationships`));let e=N(`ul`,`prb-arch-related`,``);for(let t of d)e.append(N(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(N(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=N(`section`,`prb-arch-relationship`,``);n.append(N(`p`,`prb-arch-kind`,`Relationship`),N(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(N(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(N(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Vc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Vc(e,t=[]){let n=N(`div`,`prb-arch-evidence`,``);n.append(N(`h5`,`prb-arch-subhead`,`Evidence`));let r=N(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=N(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=N(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(N(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(N(`span`,`prb-arch-location`,e.path),N(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(N(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(N(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function N(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}function Hc(e,t){let n=t,r=null,i=!1,a=async()=>{let t=null;do{i=!1;let r=e.current(),a=await e.send(r);a===null&&(n=r),t=a}while(i);if(t===null)return;let r=await e.read();if(r!==null&&(n=r),i)return a();e.paint(n),e.fail(t)};return{changed:()=>{if(r){i=!0;return}r=a().finally(()=>{r=null})},idle:async()=>{for(;r;)await r}}}var Uc=5e3;function Wc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,a=async()=>{try{let n=await(await e.markSeen()).json();d(t,n.unread),i(t,n.running)}catch{}},o=async()=>{try{if(r()){let n=await(await e.askUnread()).json();i(t,n.running),typeof n.here==`number`&&n.here>0&&r()?await a():d(t,n.unread)}}catch{}n.setTimeout(()=>void o(),Uc)};t.addEventListener(`visibilitychange`,()=>{r()&&a()}),r()&&a(),n.setTimeout(()=>void o(),Uc)}function Gc(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Kc=1e3,qc=new WeakMap;function Jc(e,t){return e.length<=1e3?Gc(e)||`&nbsp;`:`${Gc(e.slice(0,Kc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Yc(e){let t=e.lines.length;return`<tr class="prb-code-deletion" data-before-line="${e.beforeLine}"><td class="prb-code-num"></td><td class="prb-code-line"><button type="button" class="prb-code-deletion-toggle" data-deletion-toggle aria-expanded="false">− ${t} deleted ${t===1?`line`:`lines`}</button></td></tr>`+e.lines.map(e=>`<tr class="prb-code-deleted" hidden><td class="prb-code-num">− ${e.oldLine}</td><td class="prb-code-line">${Jc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Xc(e,t){let n=new Set(e.addedLines),r=new Map;for(let t of e.deletions??[])r.set(t.beforeLine,t);let i=e.lines.map((i,a)=>{let o=e.from+a,s=[n.has(o)?`prb-code-added`:``,o===t?`prb-code-target`:``].filter(Boolean).join(` `),c=r.get(o);return`${c?Yc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Jc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Yc(a)),i.join(``)}function Zc(e){let t=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(t));let n=e.closest(`tr`)?.nextElementSibling;for(;n?.classList.contains(`prb-code-deleted`);)n.hidden=!t,n=n.nextElementSibling}function Qc(e,t){let n=new Map;for(let e of t.deletions??[])for(let t of e.lines)n.set(t.oldLine,t.text);for(let r of e.querySelectorAll(`[data-full-line]`)){let[e,i]=(r.dataset.fullLine??``).split(`:`),a=Number(i),o=e===`old`?n.get(a):t.lines[a-t.from];o!==void 0&&qc.set(r,o)}}function $c(e){let t=qc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function el(e){return e.deletion?2*e.line-1:2*e.line}function tl(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function nl(e,t){if(e.length===0)return``;let n=e.map(el),r=n.indexOf(t),i=n.some(e=>e<t),a=n.some(e=>e>t),o=e.length,s=r===-1?`${o} ${o===1?`change`:`changes`}`:`${r+1} of ${o}`;return`<span class="prb-code-nav" data-change-navigator data-change-keys="${n.join(`,`)}" data-change-position="${t}">
170
183
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
171
184
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
172
185
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
173
- </span>`}function $c(e,t){let n=(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number),r=Number(e.dataset.changePosition)||0,i=t===`next`?n.find(e=>e>r):[...n].reverse().find(e=>e<r);return i===void 0?null:{key:i,anchor:Zc(i)}}function el(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function tl(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Zc)}function nl(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Zc(t):void 0}function rl(e,t){return Math.max(e,+!t)+1}var il=8;function al(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)return t}return null}function ol(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function sl(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{row:n,offset:e.top-t}}return null}function cl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function ll(e){if(!e.hasAttribute(`data-expanded`))return;let t=al(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ol({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function ul(e){let t=e.querySelector(`[data-code-expand]`),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=e.hasAttribute(`data-expanded`);t.hidden=!r&&n.scrollHeight<=n.clientHeight,t.textContent=r?`Collapse`:`Expand`,t.setAttribute(`aria-expanded`,String(r))}var dl=!1;function fl(){dl||(dl=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))ll(e)}))}function pl(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?sl(n):null;t?(e.setAttribute(`data-expanded`,``),ll(e),fl()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),ul(e),n&&r&&cl(n,r);let i=t?al(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-il)}var ml={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},hl=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],gl=`#tour`,P=16,F=6,_l=380,vl=260;function yl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:hl.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function bl(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,P,i-n-P),left:a((r-t)/2,P,r-t-P)};if(!e)return o;let s=a(e.top,P,i-n-P);if(e.right+P+t<=r-P)return{top:s,left:e.right+P};if(e.left-P-t>=P)return{top:s,left:e.left-P-t};let c=a(e.left,P,r-t-P);return e.bottom+P+n<=i-P?{top:e.bottom+P,left:c}:e.top-P-n>=P?{top:e.top-P-n,left:c}:{top:a(i-n-P,P,i-n-P),left:o.left}}function xl(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function Sl(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function Cl(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(Sl(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(Sl(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function wl(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function Tl(e,t,n){let r=yl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=wl(e,`prb-tour-skip`,`Skip tour`),h=wl(e,`prb-tour-back`,`Back`),g=wl(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},ee=!1,b=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?xl(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-F,0),t=Math.max(o.left-F,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+F,u)-t}px`,c.style.height=`${Math.min(o.bottom+F,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-F-32,u-o.right-F-32):0;l.style.width=`${f>=vl?Math.min(_l,f):Math.min(_l,u-32)}px`;let p=l.getBoundingClientRect(),m=bl(o&&{top:o.top-F,left:o.left-F,bottom:o.bottom+F,right:o.right+F},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},x=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=Cl(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:ml.title,p.replaceChildren(...(i?i.body:ml.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,b(),g.focus({focusVisible:n})},S=r=>{if(!ee){ee=!0,y(),t.removeEventListener(`resize`,b),e.removeEventListener(`scroll`,b,!0),e.removeEventListener(`transitionend`,b,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):x(v+1,e.detail===0)),h.addEventListener(`click`,e=>x(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,b),e.addEventListener(`scroll`,b,!0),e.addEventListener(`transitionend`,b,!0),s.showModal(),x(-1,!1),{close:()=>S(`dismissed`)}}var El={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function Dl(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=El[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=wl(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function Ol(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:Tl(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(Dl(e,r),r):`started`}var kl={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function Al(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:kl[t.slice(n+1).toLowerCase()]??null}function jl(e){let t=new Set;for(let n of e){let e=Al(n);e&&t.add(e)}return[...t]}var Ml={ruby:()=>w(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>w(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>w(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>w(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>w(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>w(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>w(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>w(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>w(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>w(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>w(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>w(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>w(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>w(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>w(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>w(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>w(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>w(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>w(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>w(()=>import(`./chunk-DswuEJGm.js`),[])},Nl=`github-light-default`,Pl=null,Fl=new Map;function Il(){return Pl??=Promise.all([w(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),w(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),w(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(w(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Pl}function Ll(e){let t=Fl.get(e);return t||(t=Il().then(async t=>t?(await t.loadLanguage(Ml[e]),!0):!1).catch(()=>!1),Fl.set(e,t)),t.then(e=>e?Il():null)}var Rl={async preload(e){await Ll(e)},async tokenize(e,t){let n=await Ll(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Nl}),a=i?.toLowerCase();return r.map(e=>e.map(e=>({content:e.content,...e.color&&e.color.toLowerCase()!==a?{color:e.color}:{}})))}catch{return null}}};function zl(e,t=Rl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Bl=/^#[0-9a-f]{3,8}$/i;function Vl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Bl.test(e.color)?`<span style="color:${e.color}">${Vc(e.content)}</span>`:Vc(e.content)).join(``)}function Hl(e){return e.length>1e3?e.slice(0,Hc):e}function Ul(e,t,n){if(!e||t===``)return;let r=Vl(Hl(t),n);if(r===null)return;if(t.length<=1e3){if(e.childElementCount!==0||e.textContent!==t)return;e.innerHTML=r;return}let i=e.querySelector(`[data-full-line]`);i&&(e.innerHTML=`${r}… `,e.append(i))}async function Wl(e,t,n=Rl){let r=Al(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(Hl).join(`
174
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{Ul(i.querySelector(`tr[data-line="${t.from+n}"] .prb-code-line`),e,o[n])});for(let e of t.deletions??[]){if(!i.querySelector(`tr[data-before-line="${e.beforeLine}"]`))continue;let t=await n.tokenize(e.lines.map(e=>Hl(e.text)).join(`
175
- `),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;Ul(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Gl(e,t=Rl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Ml)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Vl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var I=s({ownsRestore:!0}),Kl=document.body,ql=Kl.dataset.apiBase??``,Jl=Kl.dataset.token??``,Yl=Kl.dataset.editorLabel??``,Xl=Kl.dataset.editorTemplate??``,Zl=Kl.dataset.repoPath??``,Ql=Kl.dataset.explainPrompt??``,$l=Kl.dataset.sessionId??``;function L(e){return`${ql}${e}?t=${encodeURIComponent(Jl)}`}var eu=!1,tu=0,nu=!1;function ru(e){tu++;try{e()}finally{tu--}}var iu=Br(document.querySelector(`.prb-body`)?.dataset.reviewLayout),au=Vr(iu,e=>{fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>eu&&tu===0);function ou(e){fetch(L(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var su=jo({endpoint:L,showDiagrams:()=>Su(`diagram`),showMap:()=>Su(`map`),showChangeMap:e=>cu.show(e)}),cu=Ms({endpoint:L,showView:e=>Su(e)}),lu=Tc({endpoint:L}),uu=null,du=`the whole change`;function fu(e){let t=C(e,hu),n=I.push(ie(t),t);pu++,gu(t),n&&mu(t)}var pu=0;function mu(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&o(document,t)}var R=null,hu=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function gu(e){let t=C(e,hu);if(t!==e){let{kind:e,view:n,focus:r,...i}=x(history.state);I.replace(ie(t),{...i,...t})}let n=!R||!re(R,t);R=t,n&&(t.kind===`view`?wu(t.view):Ou(t.sectionId)),bu(t.focus??null)}var _u={history:{get state(){return history.state},pushState:(e,t,n)=>{pu++,I.push(n,x(e))},replaceState:(e,t,n)=>I.replace(n,x(e)),back:()=>{nu=!0,history.back()}},apply:gu},z=ye(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?lf(e):uf(e),onClose:uf}),vu={post:async e=>{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reassessment:e})});return{status:t.status,body:await t.json().catch(()=>null)}},closeMenu:e=>z.close(e),onVerdictClosed:(e,t)=>{let n=e.querySelector(`[data-question-answered], [data-issue-dismissed]`);if(n){if(n.dataset.questionAnswered!==void 0)cd(e,t||n.dataset.answered===`true`,`questions`),md();else{let r=n.dataset.dismissed===`true`&&n.dataset.stale!==`true`;cd(e,t||r||n.dataset.settled===`true`,`issues`),gd()}}}};fr(document,vu);var yu=document.querySelector(`[data-view="issues"]`);yu&&kr(yu,(e,t)=>au.issueFold(e,t));function bu(e){se(document.querySelector(`.prb-body`),document,e),au.focus(e),z.closeAll(),e===`buddy`&&Dd()}function xu(e){R&&(R.focus===e?ce(R,_u):pe(R,e,_u))}function Su(e,t={}){let n=t.keepFocus&&R?.focus?e:ve(e,R?.focus);fu({kind:`view`,view:e,...n?{focus:n}:{}})}function Cu(e){fu({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function wu(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]:not([role="tab"])`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e||(t.dataset.viewAlso??``).split(` `).includes(e)));e!==`architecture`&&ou({event:`view_opened`,view:e}),e===`diagram`&&su.drawPane(),e===`map`&&cu.layout(),e===`architecture`&&lu.show(),Tu(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Tu(){di(),uu=null,du=`the whole change`,ku()}function Eu(e,t){let n=document.getElementById(e.getAttribute(`aria-controls`)??``);n&&(e.setAttribute(`aria-expanded`,String(t)),e.setAttribute(`aria-label`,`${t?`Collapse`:`Expand`} ${e.dataset.railToggle??`this section`}`),n.hidden=!t,au.fold(n.id,t))}function Du(){for(let e of document.querySelectorAll(`[data-rail-toggle]`)){let t=document.getElementById(e.getAttribute(`aria-controls`)??``);(t?.contains(document.getElementById(`prb-rail-path`))||t?.id===`prb-rail-path`)&&Eu(e,!0)}}function Ou(e){wu(`guide`),Du(),ui(e);let t=ci(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);ou({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),uu=e,du=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,ku()}function ku(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=du)}function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Au(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function ju(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;if(t?.classList.contains(`prb-code`)){t.remove(),e.setAttribute(`aria-expanded`,`false`);return}let n=e.dataset.file;if(!n)return;let r=Number(e.dataset.line)||0,i=e.tagName!==`LI`,a=document.createElement(`div`);a.className=`prb-code`,a.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:o,position:s}=Au(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),ou({event:`file_opened`,fromFinding:i,targeted:r>0}),await Nu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var Mu=bi();function Nu(e,t,n){return Mu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${L(`/file`)}${a}`),s=await o.json();return o.ok?()=>Pu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${B(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function Pu(e,t,n){let{cited:r,centre:i,expand:a}=n;e.dataset.cited=String(r),e.dataset.centre=String(i),e.dataset.expand=String(a),e.dataset.position=String(n.position);let o=Kc(t,r),s=Xl&&Zl?t.checkout===`absent`?`<button type="button" class="prb-code-open" disabled>Not in your working folder</button>`:`<button type="button" class="prb-code-open" data-open-editor="${B(t.path)}" data-open-line="${r||t.from}">${B(`Open in ${Yl||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${B(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${B(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${B(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${rl(a,i)}">Show more of this file</button>`:``,u=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,d=t.changes===`unavailable`?` · change details unavailable`:``,f=`<div class="prb-code-source"><span>${t.source===`commit`?`Viewing reviewed version${t.sourceSha?` <code>${B(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Qc(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
186
+ </span>`}function rl(e,t){let n=(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number),r=Number(e.dataset.changePosition)||0,i=t===`next`?n.find(e=>e>r):[...n].reverse().find(e=>e<r);return i===void 0?null:{key:i,anchor:tl(i)}}function il(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function al(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(tl)}function ol(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?tl(t):void 0}function sl(e,t){return Math.max(e,+!t)+1}var cl=8;function ll(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)return t}return null}function ul(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function dl(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{row:n,offset:e.top-t}}return null}function fl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function pl(e){if(!e.hasAttribute(`data-expanded`))return;let t=ll(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ul({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function ml(e){let t=e.querySelector(`[data-code-expand]`),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=e.hasAttribute(`data-expanded`);t.hidden=!r&&n.scrollHeight<=n.clientHeight,t.textContent=r?`Collapse`:`Expand`,t.setAttribute(`aria-expanded`,String(r))}var hl=!1;function gl(){hl||(hl=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))pl(e)}))}function _l(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?dl(n):null;t?(e.setAttribute(`data-expanded`,``),pl(e),gl()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),ml(e),n&&r&&fl(n,r);let i=t?ll(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-cl)}var vl={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},yl=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],bl=`#tour`,P=16,F=6,xl=380,Sl=260;function Cl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:yl.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function wl(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,P,i-n-P),left:a((r-t)/2,P,r-t-P)};if(!e)return o;let s=a(e.top,P,i-n-P);if(e.right+P+t<=r-P)return{top:s,left:e.right+P};if(e.left-P-t>=P)return{top:s,left:e.left-P-t};let c=a(e.left,P,r-t-P);return e.bottom+P+n<=i-P?{top:e.bottom+P,left:c}:e.top-P-n>=P?{top:e.top-P-n,left:c}:{top:a(i-n-P,P,i-n-P),left:o.left}}function Tl(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function El(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function Dl(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(El(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(El(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function Ol(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function kl(e,t,n){let r=Cl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=Ol(e,`prb-tour-skip`,`Skip tour`),h=Ol(e,`prb-tour-back`,`Back`),g=Ol(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},ee=!1,b=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?Tl(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-F,0),t=Math.max(o.left-F,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+F,u)-t}px`,c.style.height=`${Math.min(o.bottom+F,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-F-32,u-o.right-F-32):0;l.style.width=`${f>=Sl?Math.min(xl,f):Math.min(xl,u-32)}px`;let p=l.getBoundingClientRect(),m=wl(o&&{top:o.top-F,left:o.left-F,bottom:o.bottom+F,right:o.right+F},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},x=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=Dl(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:vl.title,p.replaceChildren(...(i?i.body:vl.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,b(),g.focus({focusVisible:n})},S=r=>{if(!ee){ee=!0,y(),t.removeEventListener(`resize`,b),e.removeEventListener(`scroll`,b,!0),e.removeEventListener(`transitionend`,b,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):x(v+1,e.detail===0)),h.addEventListener(`click`,e=>x(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,b),e.addEventListener(`scroll`,b,!0),e.addEventListener(`transitionend`,b,!0),s.showModal(),x(-1,!1),{close:()=>S(`dismissed`)}}var Al={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function jl(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=Al[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=Ol(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function Ml(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:kl(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(jl(e,r),r):`started`}var Nl={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function Pl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Nl[t.slice(n+1).toLowerCase()]??null}function Fl(e){let t=new Set;for(let n of e){let e=Pl(n);e&&t.add(e)}return[...t]}var Il={ruby:()=>w(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>w(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>w(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>w(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>w(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>w(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>w(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>w(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>w(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>w(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>w(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>w(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>w(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>w(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>w(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>w(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>w(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>w(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>w(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>w(()=>import(`./chunk-DswuEJGm.js`),[])},Ll=`github-light-default`,Rl=null,zl=new Map;function Bl(){return Rl??=Promise.all([w(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),w(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),w(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(w(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Rl}function Vl(e){let t=zl.get(e);return t||(t=Bl().then(async t=>t?(await t.loadLanguage(Il[e]),!0):!1).catch(()=>!1),zl.set(e,t)),t.then(e=>e?Bl():null)}var Hl={async preload(e){await Vl(e)},async tokenize(e,t){let n=await Vl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Ll}),a=i?.toLowerCase();return r.map(e=>e.map(e=>({content:e.content,...e.color&&e.color.toLowerCase()!==a?{color:e.color}:{}})))}catch{return null}}};function Ul(e,t=Hl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Wl=/^#[0-9a-f]{3,8}$/i;function Gl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Wl.test(e.color)?`<span style="color:${e.color}">${Gc(e.content)}</span>`:Gc(e.content)).join(``)}function Kl(e){return e.length>1e3?e.slice(0,Kc):e}function ql(e,t,n){if(!e||t===``)return;let r=Gl(Kl(t),n);if(r===null)return;if(t.length<=1e3){if(e.childElementCount!==0||e.textContent!==t)return;e.innerHTML=r;return}let i=e.querySelector(`[data-full-line]`);i&&(e.innerHTML=`${r}… `,e.append(i))}async function Jl(e,t,n=Hl){let r=Pl(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(Kl).join(`
187
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{ql(i.querySelector(`tr[data-line="${t.from+n}"] .prb-code-line`),e,o[n])});for(let e of t.deletions??[]){if(!i.querySelector(`tr[data-before-line="${e.beforeLine}"]`))continue;let t=await n.tokenize(e.lines.map(e=>Kl(e.text)).join(`
188
+ `),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;ql(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Yl(e,t=Hl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Il)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Gl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var I=s({ownsRestore:!0}),Xl=document.body,Zl=Xl.dataset.apiBase??``,Ql=Xl.dataset.token??``,$l=Xl.dataset.editorLabel??``,eu=Xl.dataset.editorTemplate??``,tu=Xl.dataset.repoPath??``,nu=Xl.dataset.explainPrompt??``,ru=Xl.dataset.sessionId??``;function L(e){return`${Zl}${e}?t=${encodeURIComponent(Ql)}`}var iu=!1,au=0,ou=!1;function su(e){au++;try{e()}finally{au--}}var cu=Vr(document.querySelector(`.prb-body`)?.dataset.reviewLayout),lu=Hr(cu,e=>{fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>iu&&au===0);function uu(e){fetch(L(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var du=Fo({endpoint:L,showDiagrams:()=>Eu(`diagram`),showMap:()=>Eu(`map`),showChangeMap:e=>fu.show(e)}),fu=Is({endpoint:L,showView:e=>Eu(e)}),pu=kc({endpoint:L}),mu=null,hu=`the whole change`;function gu(e){let t=C(e,yu),n=I.push(ie(t),t);_u++,bu(t),n&&vu(t)}var _u=0;function vu(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&o(document,t)}var R=null,yu=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function bu(e){let t=C(e,yu);if(t!==e){let{kind:e,view:n,focus:r,...i}=x(history.state);I.replace(ie(t),{...i,...t})}let n=!R||!re(R,t);R=t,n&&(t.kind===`view`?Ou(t.view):Mu(t.sectionId)),wu(t.focus??null)}var xu={history:{get state(){return history.state},pushState:(e,t,n)=>{_u++,I.push(n,x(e))},replaceState:(e,t,n)=>I.replace(n,x(e)),back:()=>{ou=!0,history.back()}},apply:bu},z=ye(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?pf(e):mf(e),onClose:mf}),Su={post:async e=>{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reassessment:e})});return{status:t.status,body:await t.json().catch(()=>null)}},closeMenu:e=>z.close(e),onVerdictClosed:(e,t)=>{let n=e.querySelector(`[data-question-answered], [data-issue-dismissed]`);if(n){if(n.dataset.questionAnswered!==void 0)fd(e,t||n.dataset.answered===`true`,`questions`),vd();else{let r=n.dataset.dismissed===`true`&&n.dataset.stale!==`true`;fd(e,t||r||n.dataset.settled===`true`,`issues`),bd()}}}};pr(document,Su);var Cu=document.querySelector(`[data-view="issues"]`);Cu&&Ar(Cu,(e,t)=>lu.issueFold(e,t));function wu(e){se(document.querySelector(`.prb-body`),document,e),lu.focus(e),z.closeAll(),e===`buddy`&&jd()}function Tu(e){R&&(R.focus===e?ce(R,xu):pe(R,e,xu))}function Eu(e,t={}){let n=t.keepFocus&&R?.focus?e:ve(e,R?.focus);gu({kind:`view`,view:e,...n?{focus:n}:{}})}function Du(e){gu({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function Ou(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]:not([role="tab"])`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e||(t.dataset.viewAlso??``).split(` `).includes(e)));e!==`architecture`&&uu({event:`view_opened`,view:e}),e===`diagram`&&du.drawPane(),e===`map`&&fu.layout(),e===`architecture`&&pu.show(),ku(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function ku(){hi(),mu=null,hu=`the whole change`,Nu()}function Au(e,t){let n=document.getElementById(e.getAttribute(`aria-controls`)??``);n&&(e.setAttribute(`aria-expanded`,String(t)),e.setAttribute(`aria-label`,`${t?`Collapse`:`Expand`} ${e.dataset.railToggle??`this section`}`),n.hidden=!t,lu.fold(n.id,t))}function ju(){for(let e of document.querySelectorAll(`[data-rail-toggle]`)){let t=document.getElementById(e.getAttribute(`aria-controls`)??``);(t?.contains(document.getElementById(`prb-rail-path`))||t?.id===`prb-rail-path`)&&Au(e,!0)}}function Mu(e){Ou(`guide`),ju(),mi(e);let t=fi(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);uu({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),mu=e,hu=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Nu()}function Nu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=hu)}function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Pu(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Fu(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;if(t?.classList.contains(`prb-code`)){t.remove(),e.setAttribute(`aria-expanded`,`false`);return}let n=e.dataset.file;if(!n)return;let r=Number(e.dataset.line)||0,i=e.tagName!==`LI`,a=document.createElement(`div`);a.className=`prb-code`,a.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:o,position:s}=Pu(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),uu({event:`file_opened`,fromFinding:i,targeted:r>0}),await Lu(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var Iu=wi();function Lu(e,t,n){return Iu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${L(`/file`)}${a}`),s=await o.json();return o.ok?()=>Ru(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${B(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function Ru(e,t,n){let{cited:r,centre:i,expand:a}=n;e.dataset.cited=String(r),e.dataset.centre=String(i),e.dataset.expand=String(a),e.dataset.position=String(n.position);let o=Xc(t,r),s=eu&&tu?t.checkout===`absent`?`<button type="button" class="prb-code-open" disabled>Not in your working folder</button>`:`<button type="button" class="prb-code-open" data-open-editor="${B(t.path)}" data-open-line="${r||t.from}">${B(`Open in ${$l||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${B(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${B(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${B(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${sl(a,i)}">Show more of this file</button>`:``,u=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,d=t.changes===`unavailable`?` · change details unavailable`:``,f=`<div class="prb-code-source"><span>${t.source===`commit`?`Viewing reviewed version${t.sourceSha?` <code>${B(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${nl(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
176
189
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
177
190
  ${c}
178
191
  ${s}
@@ -180,7 +193,7 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
180
193
  </div>
181
194
  ${f}
182
195
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
183
- ${l}`,Jc(e,t),ll(e),ul(e),(n.focus?el(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Wl(e,t)}async function Fu(e,t,n){let r=$c(t,n);if(!r)return;let i=el(e,r.anchor);if(i)t.outerHTML=Qc(tl(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Nu(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function Iu(e,t,n){let r=`${Zl.replace(/\/$/,``)}/${e}`,i=Xl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&ou({event:`editor_opened`,fromFinding:n}),window.location.href=i}var V=document.querySelector(`[data-ask-log]`);V&&V.querySelector(`.prb-msg`)&&V.scrollTo({top:V.scrollHeight});var Lu=document.querySelector(`[data-ask-form]`),H=Lu?.querySelector(`textarea`);function Ru(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=it(t)+Mt(t)):n.textContent=t,V?.appendChild(n),V?.scrollTo({top:V.scrollHeight}),n}function zu(e){if(!e||!V)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),V.appendChild(t.content)}async function Bu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await dr(t,vu)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Wu(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&Bu(r)});function Vu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight}),e}var U=null,Hu=!!V?.querySelector(`[data-ask-pending]`);function Uu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight})}async function Wu(e,t=`free_text`,n={}){let r=e.trim();if(!r||U||Hu)return;document.querySelector(`.prb-ask-empty`)?.remove(),Ru(`user`,r);let i=Vu();U=new AbortController,Ku(!0);try{let e=await fetch(L(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:uu,source:t,...n}),signal:U.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Gu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){Uu();return}if(!e.ok||!a?.answer){Ru(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Ru(`assistant`,a.answer),typeof a.askedAt==`number`&&zu(hr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&er(document,a.explanation),a.reassessment?.card&&ir(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])ir(document,e,vu.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(Uu(),Gu(r,n.continuesExplanation)):(Ru(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Gu(r,n.continuesExplanation))}finally{U=null,Ku(!1)}}function Gu(e,t){!H||H.value||(H.value=e,Lp?.save(),t&&(W=W?.continues&&e.includes(W.text)?W:{text:e,source:`finding`,continues:t},Lp?.stage(W)))}function Ku(e){let t=Lu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(qu))t.disabled=e;e&&z.closeAll(),e||H?.focus()}var qu=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function Ju(){let e=Lu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(L(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{U?.abort()})}Lu?.addEventListener(`submit`,e=>{if(e.preventDefault(),U||Hu)return Ju();let t=H?.value??``;H&&(H.value=``),Lp?.clear();let n=nr(W,t);Wu(t,Yu(t),n?{continuesExplanation:n}:{})}),Hu&&Ku(!0);var W=null;function Yu(e){return W&&e.includes(W.text)?W.source:`free_text`}H?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),U||Hu)return;Lu?.requestSubmit()}}),H?.addEventListener(`input`,()=>{H&&(H.style.height=`auto`,H.style.height=`${Math.min(H.scrollHeight,140)}px`)});async function Xu(e){try{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function Zu(e){return Xu({answeredQuestionIds:e})}async function Qu(){try{let e=await fetch(L(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function $u(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(td(e,n),qr(e))}}function ed(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function td(e,t){e.dataset.answered=String(t),e.textContent=t?`Mark as unanswered`:`Mark answered`;let n=e.closest(`[data-finding-card]`);n?.classList.toggle(`pr-helper-question-card-answered`,t),n&&cd(n,t||e.dataset.verdictClosed===`true`,`questions`),md()}function nd(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||$l})).filter(e=>e.id)}function rd(e){return Xu({dismissedIssues:e})}function id(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;cd(t,s,`issues`),gd()}}function ad(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=$l:delete e.dataset.dismissedIn;let n=e.closest(`[data-finding-card]`);n&&(n.classList.toggle(`pr-helper-issue-card-dismissed`,t),n.querySelector(`.pr-helper-dismissal-stale`)?.remove(),n.querySelector(`.pr-helper-finding-status-dismissed`)?.remove(),t&&n.querySelector(`.pr-helper-issue-badges`)?.prepend(od()),cd(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),gd())}function od(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Bn,e.textContent=`Dismissed by you`,e}var sd=new WeakMap;function cd(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&sd.set(e,{parent:t,before:e.nextElementSibling}),fd(n).append(e),t&&dd(t)}else ld(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();pd(n)}}function ld(e,t){let n=sd.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=sd.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=ud(e)??jr(document,e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function ud(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function dd(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function fd(e){let t=document.querySelector(`[data-view="${e}"]`),n=t?.querySelector(`[data-closed-findings="${e}"] .pr-helper-closed-findings-list`);if(n)return n;let r=document.createElement(`details`);r.className=`pr-helper-closed-findings`,r.dataset.closedFindings=e;let i=document.createElement(`summary`);i.className=`pr-helper-closed-findings-summary`,i.setAttribute(`data-closed-findings-summary`,``);let a=document.createElement(`div`);return a.className=`pr-helper-closed-findings-list`,r.append(i,a),t?.append(r),a}function pd(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:oi(hd()),ar(document)}function md(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=si(e.length,t)),_d(`questions`,e.length,t,`question`,`answered`)}function hd(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function gd(){let e=hd();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`);t&&Ar(t),_d(`issues`,e.total,e.open,`issue`,Wr(e))}function _d(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}var vd=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:id(e)}]));function yd(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of vd){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&ad(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??$l)!==r)&&(ad(e,!0),e.dataset.dismissedIn=r)}}var bd=e=>void r(y(),{kind:`failed`,text:e}),xd=Rc({current:ed,send:Zu,read:async()=>(await Qu())?.answered??null,paint:$u,fail:bd},ed()),Sd=Rc({current:nd,send:rd,read:async()=>(await Qu())?.dismissed??null,paint:yd,fail:bd},nd());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){Eu(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!l(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){Su(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Zr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){ni(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){Su(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Cu(c.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){Iu(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){qc(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&pl(e,!e.hasAttribute(`data-expanded`));return}let p=t.closest(`[data-change-step]`);if(p){let e=p.closest(`[data-change-navigator]`),t=p.closest(`.prb-code`);e&&t&&!p.disabled&&Fu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=Yc(m);e&&Gl(e);return}let h=t.closest(`[data-expand-file]`);if(h?.dataset.expandFile){let e=h.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Nu(e,h.dataset.expandFile,{cited:Number(h.dataset.expandCited)||0,centre:Number(h.dataset.expandLine)||0,expand:Number(h.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:nl(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){xu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){Xd(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){ju(v);return}let y=li(t);if(y){Cu(y);return}let ee=t.closest(`[data-question-answered]`);if(ee?.dataset.questionAnswered){td(ee,ee.dataset.answered!==`true`),qr(ee);let e=ed();xd.changed(),ou({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let b=t.closest(`[data-issue-dismissed]`);if(b?.dataset.issueDismissed){ad(b,b.dataset.stale===`true`||b.dataset.dismissed!==`true`);let e=nd();Sd.changed(),ou({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let x=t.closest(`[data-suggestion]`);if(x){Wu(x.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Dd(),Wu(Ql,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){Zd(S.dataset.promptUse);return}let C=t.closest(`[data-prompt-edit]`);if(C?.dataset.promptEdit){Sf(C.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Sf(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(ce(R,_u),Td(e!==`buddy`)):Td(!wd())}});var G=document.querySelector(`.prb-body`),Cd=document.querySelector(`.prb-ask`);function wd(){return!!Cd&&getComputedStyle(Cd).display!==`none`}function Td(e){G&&(G.dataset.ask=e?`open`:`closed`),Ed(e),au.ask(e)}function Ed(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Dd(){R?.focus&&R.focus!==`buddy`&&ce(R,_u),Td(!0)}function Od(){Ed(wd())}window.addEventListener(`resize`,Od),ee(L(`/restart`));var kd=document.querySelector(`[data-file-filter]`),Ad=document.querySelector(`[data-file-count]`),jd=document.querySelector(`[data-file-none]`);function Md(){let e=(kd?.value??``).trim().toLowerCase(),t=0,n=0;for(let r of document.querySelectorAll(`[data-view="files"] .prb-file`)){let i=e===``||(r.dataset.search??``).includes(e);r.hidden=!i,i&&(n+=1,r.classList.contains(`prb-file-referenced`)||(t+=1));let a=r.nextElementSibling;a?.classList.contains(`prb-code`)&&(a.hidden=!i)}for(let t of document.querySelectorAll(`[data-file-group]`)){let n=t.querySelectorAll(`.prb-file:not([hidden])`).length;t.hidden=n===0;let r=t.querySelector(`[data-group-heading]`);if(!r)continue;let i=Number(r.dataset.groupTotal)||0;r.textContent=e&&n!==i?`${r.dataset.groupHeading} · ${n} of ${i}`:`${r.dataset.groupHeading} · ${i}`}jd&&(jd.hidden=n>0),Ad&&(Ad.textContent=e?`${t} of ${Nd} file${Nd===1?``:`s`}`:`${Nd} file${Nd===1?``:`s`}`)}var Nd=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;kd?.addEventListener(`input`,Md),kd?.addEventListener(`keydown`,e=>{e.key===`Escape`&&kd.value!==``&&(e.preventDefault(),kd.value=``,Md())}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target,n=t.closest(`.prb-file[data-file][role="button"]`);!n||n!==t||(e.preventDefault(),ju(n))});var Pd=320,Fd=()=>Math.round(window.innerWidth/2),Id=e=>Math.round(Math.min(Fd(),Math.max(Pd,e)));function Ld(e){G&&(e===null?G.style.removeProperty(`--ask-width`):G.style.setProperty(`--ask-width`,`${e}px`))}function Rd(){return Cd?Math.round(Cd.getBoundingClientRect().width):Pd}function zd(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var K=document.querySelector(`[data-ask-resize]`);K?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!G||!Cd)return;e.preventDefault(),K.setPointerCapture(e.pointerId),G.dataset.resizing=`true`;let t=e.clientX,n=Rd(),r=e=>{Ld(Id(n+(t-e.clientX)))},i=()=>{K.removeEventListener(`pointermove`,r),K.removeEventListener(`pointerup`,i),K.removeEventListener(`pointercancel`,i),delete G.dataset.resizing,zd(Rd())};K.addEventListener(`pointermove`,r),K.addEventListener(`pointerup`,i),K.addEventListener(`pointercancel`,i)}),K?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=Id(Rd()+n);Ld(r),zd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Ld(null),zd(null))}),K?.addEventListener(`dblclick`,()=>{Ld(null),zd(null)}),window.addEventListener(`resize`,()=>{wd()&&G?.style.getPropertyValue(`--ask-width`)&&Ld(Id(Rd()))});var Bd=3e4,Vd=document.visibilityState===`visible`?Date.now():null,Hd=0;function Ud(){Vd!==null&&(Hd+=Date.now()-Vd,Vd=Date.now())}function Wd(){Ud();let e=Math.round(Hd/1e3);return Hd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Vd=Date.now():(Ud(),Vd=null)}),setInterval(()=>{let e=Wd();e>0&&ou({event:`workspace_heartbeat`,visibleSeconds:e})},Bd),window.addEventListener(`pagehide`,()=>{let e=L(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Wd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Gd=document.querySelector(`[data-prompt-bank]`),Kd=document.querySelector(`[data-prompt-list]`),q=qd();function qd(){try{let e=JSON.parse(Gd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Jd(){if(!Kd)return;Kd.innerHTML=q.map(e=>`<span class="prb-bank-item">
196
+ ${l}`,Qc(e,t),pl(e),ml(e),(n.focus?il(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Jl(e,t)}async function zu(e,t,n){let r=rl(t,n);if(!r)return;let i=il(e,r.anchor);if(i)t.outerHTML=nl(al(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Lu(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function Bu(e,t,n){let r=`${tu.replace(/\/$/,``)}/${e}`,i=eu.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&uu({event:`editor_opened`,fromFinding:n}),window.location.href=i}var V=document.querySelector(`[data-ask-log]`);V&&V.querySelector(`.prb-msg`)&&V.scrollTo({top:V.scrollHeight});var Vu=document.querySelector(`[data-ask-form]`),H=Vu?.querySelector(`textarea`);function Hu(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=it(t)+Mt(t)):n.textContent=t,V?.appendChild(n),V?.scrollTo({top:V.scrollHeight}),n}function Uu(e){if(!e||!V)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),V.appendChild(t.content)}async function Wu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await fr(t,Su)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Ju(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&Wu(r)});function Gu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight}),e}var U=null,Ku=!!V?.querySelector(`[data-ask-pending]`);function qu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight})}async function Ju(e,t=`free_text`,n={}){let r=e.trim();if(!r||U||Ku)return;document.querySelector(`.prb-ask-empty`)?.remove(),Hu(`user`,r);let i=Gu();U=new AbortController,Xu(!0);try{let e=await fetch(L(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:mu,source:t,...n}),signal:U.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Yu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){qu();return}if(!e.ok||!a?.answer){Hu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Hu(`assistant`,a.answer),typeof a.askedAt==`number`&&Uu(gr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&tr(document,a.explanation),a.reassessment?.card&&ar(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])ar(document,e,Su.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(qu(),Yu(r,n.continuesExplanation)):(Hu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Yu(r,n.continuesExplanation))}finally{U=null,Xu(!1)}}function Yu(e,t){!H||H.value||(H.value=e,Vp?.save(),t&&(W=W?.continues&&e.includes(W.text)?W:{text:e,source:`finding`,continues:t},Vp?.stage(W)))}function Xu(e){let t=Vu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(Zu))t.disabled=e;e&&z.closeAll(),e||H?.focus()}var Zu=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function Qu(){let e=Vu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(L(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{U?.abort()})}Vu?.addEventListener(`submit`,e=>{if(e.preventDefault(),U||Ku)return Qu();let t=H?.value??``;H&&(H.value=``),Vp?.clear();let n=rr(W,t);Ju(t,$u(t),n?{continuesExplanation:n}:{})}),Ku&&Xu(!0);var W=null;function $u(e){return W&&e.includes(W.text)?W.source:`free_text`}H?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),U||Ku)return;Vu?.requestSubmit()}}),H?.addEventListener(`input`,()=>{H&&(H.style.height=`auto`,H.style.height=`${Math.min(H.scrollHeight,140)}px`)});async function ed(e){try{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function td(e){return ed({answeredQuestionIds:e})}async function nd(){try{let e=await fetch(L(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function rd(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(ad(e,n),Jr(e))}}function id(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function ad(e,t){e.dataset.answered=String(t),e.textContent=t?`Mark as unanswered`:`Mark answered`;let n=e.closest(`[data-finding-card]`);n?.classList.toggle(`pr-helper-question-card-answered`,t),n&&fd(n,t||e.dataset.verdictClosed===`true`,`questions`),vd()}function od(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||ru})).filter(e=>e.id)}function sd(e){return ed({dismissedIssues:e})}function cd(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;fd(t,s,`issues`),bd()}}function ld(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=ru:delete e.dataset.dismissedIn;let n=e.closest(`[data-finding-card]`);n&&(n.classList.toggle(`pr-helper-issue-card-dismissed`,t),n.querySelector(`.pr-helper-dismissal-stale`)?.remove(),n.querySelector(`.pr-helper-finding-status-dismissed`)?.remove(),t&&n.querySelector(`.pr-helper-issue-badges`)?.prepend(ud()),fd(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),bd())}function ud(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Vn,e.textContent=`Dismissed by you`,e}var dd=new WeakMap;function fd(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&dd.set(e,{parent:t,before:e.nextElementSibling}),gd(n).append(e),t&&hd(t)}else pd(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();_d(n)}}function pd(e,t){let n=dd.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=dd.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=md(e)??Mr(document,e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function md(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function hd(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function gd(e){let t=document.querySelector(`[data-view="${e}"]`),n=t?.querySelector(`[data-closed-findings="${e}"] .pr-helper-closed-findings-list`);if(n)return n;let r=document.createElement(`details`);r.className=`pr-helper-closed-findings`,r.dataset.closedFindings=e;let i=document.createElement(`summary`);i.className=`pr-helper-closed-findings-summary`,i.setAttribute(`data-closed-findings-summary`,``);let a=document.createElement(`div`);return a.className=`pr-helper-closed-findings-list`,r.append(i,a),t?.append(r),a}function _d(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:ui(yd()),or(document)}function vd(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=di(e.length,t)),xd(`questions`,e.length,t,`question`,`answered`)}function yd(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function bd(){let e=yd();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`);t&&jr(t),xd(`issues`,e.total,e.open,`issue`,Gr(e))}function xd(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}var Sd=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:cd(e)}]));function Cd(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of Sd){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&ld(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??ru)!==r)&&(ld(e,!0),e.dataset.dismissedIn=r)}}var wd=e=>void r(y(),{kind:`failed`,text:e}),Td=Hc({current:id,send:td,read:async()=>(await nd())?.answered??null,paint:rd,fail:wd},id()),Ed=Hc({current:od,send:sd,read:async()=>(await nd())?.dismissed??null,paint:Cd,fail:wd},od());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){Au(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!l(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){Eu(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Qr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){ri(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){Eu(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Du(c.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){Bu(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){Zc(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&_l(e,!e.hasAttribute(`data-expanded`));return}let p=t.closest(`[data-change-step]`);if(p){let e=p.closest(`[data-change-navigator]`),t=p.closest(`.prb-code`);e&&t&&!p.disabled&&zu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=$c(m);e&&Yl(e);return}let h=t.closest(`[data-expand-file]`);if(h?.dataset.expandFile){let e=h.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Lu(e,h.dataset.expandFile,{cited:Number(h.dataset.expandCited)||0,centre:Number(h.dataset.expandLine)||0,expand:Number(h.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:ol(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){Tu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){ef(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){Fu(v);return}let y=pi(t);if(y){Du(y);return}let ee=t.closest(`[data-question-answered]`);if(ee?.dataset.questionAnswered){ad(ee,ee.dataset.answered!==`true`),Jr(ee);let e=id();Td.changed(),uu({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let b=t.closest(`[data-issue-dismissed]`);if(b?.dataset.issueDismissed){ld(b,b.dataset.stale===`true`||b.dataset.dismissed!==`true`);let e=od();Ed.changed(),uu({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let x=t.closest(`[data-suggestion]`);if(x){Ju(x.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){jd(),Ju(nu,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){tf(S.dataset.promptUse);return}let C=t.closest(`[data-prompt-edit]`);if(C?.dataset.promptEdit){Ef(C.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Ef(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(ce(R,xu),kd(e!==`buddy`)):kd(!Od())}});var G=document.querySelector(`.prb-body`),Dd=document.querySelector(`.prb-ask`);function Od(){return!!Dd&&getComputedStyle(Dd).display!==`none`}function kd(e){G&&(G.dataset.ask=e?`open`:`closed`),Ad(e),lu.ask(e)}function Ad(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function jd(){R?.focus&&R.focus!==`buddy`&&ce(R,xu),kd(!0)}function Md(){Ad(Od())}window.addEventListener(`resize`,Md),ee(L(`/restart`));var Nd=document.querySelector(`[data-file-filter]`),Pd=document.querySelector(`[data-file-count]`),Fd=document.querySelector(`[data-file-none]`);function Id(){let e=(Nd?.value??``).trim().toLowerCase(),t=0,n=0;for(let r of document.querySelectorAll(`[data-view="files"] .prb-file`)){let i=e===``||(r.dataset.search??``).includes(e);r.hidden=!i,i&&(n+=1,r.classList.contains(`prb-file-referenced`)||(t+=1));let a=r.nextElementSibling;a?.classList.contains(`prb-code`)&&(a.hidden=!i)}for(let t of document.querySelectorAll(`[data-file-group]`)){let n=t.querySelectorAll(`.prb-file:not([hidden])`).length;t.hidden=n===0;let r=t.querySelector(`[data-group-heading]`);if(!r)continue;let i=Number(r.dataset.groupTotal)||0;r.textContent=e&&n!==i?`${r.dataset.groupHeading} · ${n} of ${i}`:`${r.dataset.groupHeading} · ${i}`}Fd&&(Fd.hidden=n>0),Pd&&(Pd.textContent=e?`${t} of ${Ld} file${Ld===1?``:`s`}`:`${Ld} file${Ld===1?``:`s`}`)}var Ld=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Nd?.addEventListener(`input`,Id),Nd?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Nd.value!==``&&(e.preventDefault(),Nd.value=``,Id())}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target,n=t.closest(`.prb-file[data-file][role="button"]`);!n||n!==t||(e.preventDefault(),Fu(n))});var Rd=320,zd=()=>Math.round(window.innerWidth/2),Bd=e=>Math.round(Math.min(zd(),Math.max(Rd,e)));function Vd(e){G&&(e===null?G.style.removeProperty(`--ask-width`):G.style.setProperty(`--ask-width`,`${e}px`))}function Hd(){return Dd?Math.round(Dd.getBoundingClientRect().width):Rd}function Ud(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var K=document.querySelector(`[data-ask-resize]`);K?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!G||!Dd)return;e.preventDefault(),K.setPointerCapture(e.pointerId),G.dataset.resizing=`true`;let t=e.clientX,n=Hd(),r=e=>{Vd(Bd(n+(t-e.clientX)))},i=()=>{K.removeEventListener(`pointermove`,r),K.removeEventListener(`pointerup`,i),K.removeEventListener(`pointercancel`,i),delete G.dataset.resizing,Ud(Hd())};K.addEventListener(`pointermove`,r),K.addEventListener(`pointerup`,i),K.addEventListener(`pointercancel`,i)}),K?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=Bd(Hd()+n);Vd(r),Ud(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Vd(null),Ud(null))}),K?.addEventListener(`dblclick`,()=>{Vd(null),Ud(null)}),window.addEventListener(`resize`,()=>{Od()&&G?.style.getPropertyValue(`--ask-width`)&&Vd(Bd(Hd()))});var Wd=3e4,Gd=document.visibilityState===`visible`?Date.now():null,Kd=0;function qd(){Gd!==null&&(Kd+=Date.now()-Gd,Gd=Date.now())}function Jd(){qd();let e=Math.round(Kd/1e3);return Kd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Gd=Date.now():(qd(),Gd=null)}),setInterval(()=>{let e=Jd();e>0&&uu({event:`workspace_heartbeat`,visibleSeconds:e})},Wd),window.addEventListener(`pagehide`,()=>{let e=L(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Jd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Yd=document.querySelector(`[data-prompt-bank]`),Xd=document.querySelector(`[data-prompt-list]`),q=Zd();function Zd(){try{let e=JSON.parse(Yd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Qd(){if(!Xd)return;Xd.innerHTML=q.map(e=>`<span class="prb-bank-item">
184
197
  <button type="button" class="prb-bank-use" data-prompt-use="${B(e.id)}" title="${B(e.prompt)}">${B(e.name)}</button>
185
198
  <button type="button" class="prb-bank-edit" data-prompt-edit="${B(e.id)}" aria-label="Edit ${B(e.name)}">&#9998;</button>
186
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(q.length)),of()}async function Yd(e){let t=null;try{let n=await fetch(L(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);q=Array.isArray(r?.prompts)?r.prompts:q,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return Jd(),t}function Xd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Gd?.toggleAttribute(`data-collapsed`,e),Kd&&(Kd.hidden=e),fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Zd(e){let t=q.find(t=>t.id===e);!t||!H||(H.value=fi(H.value,t.prompt),Dd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}var Qd=document.querySelector(`.prb-doc`),$d=null,ef=null;function tf(){V&&(ef?.(),ef=Mn(V,{layout:`flat`,actions:Fn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>sf(e,`selection`,t)}))}var nf=`reassess`;function rf(e){let t=af();if(!e)return t;let n={id:nf,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function af(){return[...Nn.map(e=>({id:e.id,label:e.label})),...q.map(e=>({id:yr(e.id),label:e.name,section:vr}))]}function of(){Qd&&($d?.(),$d=Mn(Qd,{triggerLabel:`Ask Buddy AI`,actions:af(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>sf(e,`selection`,t)}))}function sf(e,t,n,r){Ur(e,{context:t,text:n},{savedPrompt:e=>q.find(t=>t.id===e)?.prompt??null,stage:e=>cf(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Dd(),Wu(t,`finding`,Zn(e,r?.ref))}})}function cf(e,t,n){H&&(W={text:e,source:t,...n?{continues:n}:{}},Lp?.stage(W),H.value=fi(H.value,e),Dd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}function lf(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Sn(rf($n(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(U||Hu)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function uf(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=zn(n),a=$n(n);if(z.close(n),r===nf){i&&a&&df(a,i);return}i&&sf(r,`finding`,i,a?{ref:a}:void 0)});function df(e,t){if(U||Hu)return;let n=e.kind===`issue`?`severity`:`importance`;Dd(),Wu(`${Ln(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?pr(t):null;n&&cf(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Qn(t),r=zn(t);n&&r&&sf(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),of(),tf();var J=to({root:document,showView:e=>Su(e)}),ff=uo({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>z.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>J.state().selecting,flip:e=>void J.flip(e)});Gt(document),on(document);var pf=document.querySelector(`[data-prompt-dialog]`),mf=document.querySelector(`[data-prompt-name]`),hf=document.querySelector(`[data-prompt-text]`),gf=document.querySelector(`[data-prompt-delete]`),_f=document.getElementById(`prb-prompt-title`),vf=document.querySelector(`[data-prompt-error]`),yf=document.querySelector(`[data-prompt-save]`);function bf(e){vf&&(vf.textContent=e??``,vf.hidden=e===null)}var xf=``;function Sf(e){let t=q.find(t=>t.id===e);xf=t?.id??``,_f&&(_f.textContent=t?`Edit prompt`:`Save a prompt`),mf&&(mf.value=t?.name??``),hf&&(hf.value=t?.prompt??``),gf&&(gf.hidden=!t),bf(null),pf?.showModal(),mf?.focus()}async function Cf(){let e=mf?.value.trim()??``,t=hf?.value.trim()??``;if(!e||!t){(e?hf:mf)?.focus();return}await Tf(xf?q.map(n=>n.id===xf?{...n,name:e,prompt:t}:n):[...q,{id:crypto.randomUUID(),name:e,prompt:t}])}async function wf(){xf&&await Tf(q.filter(e=>e.id!==xf))}async function Tf(e){bf(null);let t=[yf,gf].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await Yd(e);for(let e of t)e.disabled=!1;if(n)return bf(n);pf?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>pf?.close()),gf?.addEventListener(`click`,()=>void wf()),yf?.addEventListener(`click`,()=>void Cf());var Y=document.querySelector(`[data-fresh-region]`),Ef=document.querySelector(`[data-fresh-status]`),Df=document.querySelector(`[data-fresh-check]`),X=Rf(Y?.dataset.report),Of=`prb-fresh-reopen`,kf=Pf(),Af=Y?.dataset.dismissedSha,jf=Nf(Y?.dataset.availability),Z=Mf(Y?.dataset.remote);function Mf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Nf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Pf(){try{return sessionStorage.getItem(Of)!==null&&(sessionStorage.removeItem(Of),!0)}catch{return!1}}kf&&tp(),Df?.addEventListener(`click`,()=>void Hf());var Ff=document.querySelector(`[data-fetch-remote]`);Ff&&(fetch(L(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Ff.hidden=!1)}).catch(()=>{}),Ff.addEventListener(`click`,()=>void If(Ff)));async function If(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(L(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};r(y(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:le(n)}),n.fetched>0&&await Hf()}Y?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return kf=!1,tp();let n=t.closest(`[data-fresh-dismiss]`);n&&(Af=n.dataset.freshDismiss||void 0,kf=!1,tp(),Lf())});function Lf(){fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Af??null})}).catch(()=>{})}function Rf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var zf=Ba(),Bf=!1,Vf=null;async function Hf(){if(Bf)return;Bf=!0,Jf(!0),Vf&&await Vf;let e=Yf(X,Z),t=await Wf(!1);Jf(!1),t&&ep(),Bf=!1,t&&(X?.code.state===`changed`||Z!==null)&&Af!==void 0&&(Af=void 0,Lf()),tp(),Uf(t?Yf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Uf(e){Ef&&(Ef.textContent=e,window.setTimeout(np,2600))}async function Wf(e){let t=zf.snapshot();try{let n=await(await fetch(`${L(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,jf=n.availability??null,Z=n.remote??null,Zf=n.kiss??null,n.kissDismissedSha!==void 0&&(Qf=n.kissDismissedSha??void 0),n.prState!==void 0&&qf(n.prState);let r=za(n.standing);return r&&zf.current(t)&&ja(document,r),!0}catch{return!1}}async function Gf(){if(Bf||Vf||!Y)return;let e=Yf(X,Z),t=JSON.stringify(Zf);Vf=Wf(!0);let n=await Vf;Vf=null,Kf=Date.now(),n&&(Yf(X,Z)!==e&&tp(),JSON.stringify(Zf)!==t&&ep())}var Kf=Date.now();function qf(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Aa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Jf(e){Df&&(Df.disabled=e),Ef&&e&&(Ef.textContent=`Checking…`,Ef.dataset.state=`checking`)}function Yf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Xf=document.querySelector(`[data-kiss-fresh-region]`),Zf=$f(Xf?.dataset.freshness),Qf=Xf?.dataset.dismissedSha;function $f(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ep(){Ca(Zf?.state===`changed`),Xf&&(Xf.innerHTML=ha(Xf.dataset.reviewedSha??``,Zf,{dismissedSha:Qf,actions:Jl!==``}))}Xf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Qf=t.dataset.kissFreshnessDismiss||void 0,ep(),fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Qf??null})}).catch(()=>{}))});function tp(){Y&&(Y.innerHTML=Vi(X,{dismissedSha:Af,open:kf,actions:Jl!==``,availability:jf,remote:Z}),np())}function np(){if(Ef&&(X||Z)){let{label:e,state:t}=zi(X,Z);Ef.textContent=e,Ef.dataset.state=t,$i(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return rp(n);let r=t.closest(`[data-notice-dismiss]`);if(r){let e=r instanceof HTMLAnchorElement;e||r.closest(`[data-notice]`)?.remove(),fetch(L(`/prefs`),{method:`POST`,keepalive:e,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void ap(i);if(t.closest(`[data-review-update]`))return void lp();let a=t.closest(`[data-update-cancel]`);if(a)return void dp(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void dp(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function rp(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>ip(e,`Copied`),()=>ip(e,`Select it`))}function ip(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function ap(e){let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t)e.disabled=!0;let n=Date.now(),r=()=>{let e=Math.max(1,Math.round((Date.now()-n)/1e3));for(let n of t){let t=op(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${mp}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=op(e)?null:hp(e);try{await fetch(L(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}op(e)&&sp(),window.location.reload()}function op(e){return e.closest(`.prb-fresh-notes p`)}function sp(){try{sessionStorage.setItem(Of,`1`)}catch{}}var cp=!1;async function lp(){if(cp)return;cp=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(L(`/job`))).json();e.update&&e.update.phase!==`none`&&!ra(e.update.phase)&&n()}catch{}},500);try{await fetch(L(`/update`),{method:`POST`})}catch{}n()}var up={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function dp(e,t){let n=up[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(L(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,pp(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||pp(e,n.tooLate),await So({look:async()=>{let e=await fetch(L(`/job`),{signal:AbortSignal.timeout(fp)});return n.running(await e.json())},reload:()=>window.location.reload()})}var fp=3e3;function pp(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var mp=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function hp(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),n.textContent=mp,t.appendChild(n),n}var gp=go(document),_p=null,vp=Date.now();function yp(){_p===null&&(_p=window.setTimeout(()=>{_p=null,bp()},be(Date.now()-vp)))}async function bp(){try{let e=await(await fetch(L(`/job`))).json();if(Hu&&!e.ask||Sp&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of gp){let r=t[e];if(r){if(_o(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?yo(n,r.phase,r.progress):xp(n,r.progress)}}}catch{}yp()}function xp(e,t){if(!t)return;let n=e.querySelector(`.prb-job-progress`);n||(n=document.createElement(`span`),n.className=`prb-job-progress`,e.querySelector(`p`)?.appendChild(n)),n.textContent=` ${t}`}var Sp=document.querySelector(`[data-diagram-running]`)!==null;(gp.size>0||Hu||Sp)&&(vp=Date.now(),yp()),document.querySelector(`[data-started-at]`)&&xo(document);function Cp(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function wp(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,wp(t);let r=e=>{t.disabled=!1,t.textContent=n,Cp(t,e)};fetch(L(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(L(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Gr,ip(t,`Could not start. Try again`,2500)}))});var Tp={send:async e=>{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{_d(`kiss`,e,t,`recommendation`,`decided`),_d(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){va(r,_a(n),Tp);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(L(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Ep=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_e(e.state)??te(window.location.hash)??{kind:`view`,view:Ep},n=!R||!re(R,t),r=nu;nu=!1,r?gu(t):ru(()=>gu(t)),n&&mu(t),Ip()});var Dp=te(window.location.hash),Op=window.location.hash===gl,kp=I.current().ui===null,Ap=window.matchMedia(`(max-width: 860px)`).matches,jp=kp&&!Dp?.focus?zr(iu.expanded,C(Dp??{kind:`view`,view:Ep},hu),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Ap):null;if(kp&&G?.dataset.ask===`open`&&Ap&&delete G.dataset.ask,jp){let e=Dp??{kind:`view`,view:Ep};Dp||(R=e);let t={...e,focus:jp};I.replace(ie(t),t),gu(t)}else Dp?gu(Dp):(R={kind:`view`,view:Ep},I.replace(``,R));eu=!0;var Mp={enterTour(){let e=R,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||ru(()=>gu({kind:`view`,view:`overview`})),()=>{!t&&e&&ru(()=>gu(e))}},save(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};Op?Ol(document,window,Mp):Kl.dataset.guidedTour===`offer`&&Tl(document,window,{mode:`first`,host:Mp});var Np={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:V,panes:G};I.setCapturer(()=>Ei(Np));async function Pp(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=mi(e),s=o?Mu.pending(o):void 0;if(!o||!yi(s?s.request:_i(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=Au(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Nu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&pl(o,a.tall),t&&vi(o,t.top,t.offset))}function Fp(e){mi(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Ip(){let e=++pu,t=()=>pu===e;await Di(Np,I.current().ui,{setFold:(e,t)=>ru(()=>Eu(e,t)),setAsk:e=>ru(()=>Td(e)),clearAsk:()=>{G&&delete G.dataset.ask,Ed(wd())},openPanel:(e,n)=>Pp(e,n,t),closePanel:Fp,stillCurrent:t})}Ip();var Lp=H?Pi(H,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;W=Lp?.restoredStage??null,Od(),ku();var Rp=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open], [data-range-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{Rp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Rp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-review-menu]`),$=Ha({root:document,post:(e,t)=>fetch(L(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:zf,checkForUpdates:()=>Hf()});function zp(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&z.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Bp(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void z.closeAll();zp(n.error)}}function Vp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Hp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&z.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}async function Up(e,t){if($.busy()||ae(t))return;oe(t,!0);let n;try{n=await e()}finally{oe(t,!1)}n.busy||n.error===null||r(y(),{kind:`failed`,text:n.error})}if(document.querySelector(`.prb-header-stats`)?.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`button[data-page-status]`);if(n){Up(()=>$.setComplete(n.dataset.status!==`complete`),n);return}let r=t?.closest(`[data-lifecycle-control]`),i=r?.querySelector(`button[data-page-lifecycle]`);if(!r||!i)return;let a=t?.closest(`[data-lifecycle-set]`);if(a){z.close(r,{returnFocus:!0}),Up(()=>$.setLifecycle(a.dataset.lifecycleSet),i);return}let o=i.dataset.lifecyclePress;t?.closest(`[data-lifecycle-pill]`)&&o&&o!==`menu`&&Up(()=>$.setLifecycle(o),i)}),Q){let t=Q.querySelector(`[data-confirm-delete]`),n=()=>uf(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),ne(a,a.dataset.copyId);return}if(t?.closest(`[data-tour-replay]`)){e.stopPropagation(),z.closeAll(),Ol(document,window,Mp);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){z.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Bp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Bp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Bp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Hp();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async t=>{let n=t.getAttribute(`aria-pressed`)!==`true`;t.disabled=!0;let r=null;try{let e=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(t.disabled=!1,r===null){t.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{t.textContent=e(t.getAttribute(`aria-pressed`)===`true`)},1600);return}t.setAttribute(`aria-pressed`,String(r)),t.textContent=e(r)},i=async()=>{t&&(t.disabled=!0,t.textContent=`Deleting`);let{error:e}=await $.deleteReview();if(e===null)return void window.location.replace(`/`);t&&(t.disabled=!1,t.textContent=`Delete`),n(),zp(e)}}function Wp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>Su(e,{keepFocus:!0})}}function Gp(){if(!R)return null;let e=R.focus??(R.kind===`section`?`guide`:R.view);return he.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Kp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}p(`review`,{...ff.commands,...so(J,document),"review.section.review":{available:()=>fo(document)!==null,run:()=>{let e=fo(document);e&&Su(e,{keepFocus:!0})}},"review.section.kiss":Wp(`kiss`),"review.section.issues":Wp(`issues`),"review.section.diagrams":Wp(`map`),"review.section.questions":Wp(`questions`),"review.section.files":Wp(`files`),"review.buddy.open":{available:()=>Cd!==null,run:()=>{R?.focus?pe(R,`buddy`,_u):Td(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Cd!==null&&H!==null,panel:fe({prompts:()=>q,choose:Zd})},"review.focus.toggle":{available:()=>Gp()!==null,run:()=>{let e=Gp();e&&xu(e)}},"review.leave":{available:e=>!!(e&&de(e,document,e.target===H||J.state().selecting||!!R?.focus)),run:e=>{H&&e?.target===H?H.blur():J.state().selecting?J.exit():R?.focus&&ce(R,_u)}},"review.feedback.toggle":{available:()=>J.state().selecting||Kp(),label:()=>J.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>J.state().selecting?J.exit():J.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Bp(()=>$.setComplete(!0),Vp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Bp(()=>$.setLifecycle(`waiting`),Vp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Bp(()=>$.setLifecycle(`done`),Vp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Bp(()=>$.toggleQueued(),Vp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Bi(X,{actions:Jl!==``&&!gp.has(`update`)&&!cp,remote:Z}),run:()=>void lp()},"review.delete":{available:()=>$.offer().delete,run:()=>Hp({focusCancel:!0})}},{onOpen:()=>z.closeAll()}),h(),Jl&&Bc({markSeen:()=>fetch(L(`/seen`),{method:`POST`}),askUnread:()=>fetch(L(`/unread`))}),setTimeout(()=>{zl(jl([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),S(window,()=>window.location.reload());var qp=15e3,Jp=6e4;function Yp(){return Jl!==``&&document.visibilityState===`visible`&&!gp.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Yp()&&Date.now()-Kf>=qp&&Gf()}),window.setInterval(()=>{Yp()&&Gf()},Jp);export{hc as n,tn as r,vc as t};
199
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(q.length)),uf()}async function $d(e){let t=null;try{let n=await fetch(L(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);q=Array.isArray(r?.prompts)?r.prompts:q,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return Qd(),t}function ef(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Yd?.toggleAttribute(`data-collapsed`,e),Xd&&(Xd.hidden=e),fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function tf(e){let t=q.find(t=>t.id===e);!t||!H||(H.value=gi(H.value,t.prompt),jd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}var nf=document.querySelector(`.prb-doc`),rf=null,af=null;function of(){V&&(af?.(),af=Mn(V,{layout:`flat`,actions:Fn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>df(e,`selection`,t)}))}var sf=`reassess`;function cf(e){let t=lf();if(!e)return t;let n={id:sf,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function lf(){return[...Nn.map(e=>({id:e.id,label:e.label})),...q.map(e=>({id:br(e.id),label:e.name,section:yr}))]}function uf(){nf&&(rf?.(),rf=Mn(nf,{triggerLabel:`Ask Buddy AI`,actions:lf(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>df(e,`selection`,t)}))}function df(e,t,n,r){Wr(e,{context:t,text:n},{savedPrompt:e=>q.find(t=>t.id===e)?.prompt??null,stage:e=>ff(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{jd(),Ju(t,`finding`,Qn(e,r?.ref))}})}function ff(e,t,n){H&&(W={text:e,source:t,...n?{continues:n}:{}},Vp?.stage(W),H.value=gi(H.value,e),jd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}function pf(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Sn(cf(er(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(U||Ku)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function mf(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=zn(n),a=er(n);if(z.close(n),r===sf){i&&a&&hf(a,i);return}i&&df(r,`finding`,i,a?{ref:a}:void 0)});function hf(e,t){if(U||Ku)return;let n=e.kind===`issue`?`severity`:`importance`;jd(),Ju(`${Ln(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?mr(t):null;n&&ff(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=$n(t),r=zn(t);n&&r&&df(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),uf(),of();var J=ao({root:document,showView:e=>Eu(e)}),gf=ho({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>z.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>J.state().selecting,flip:e=>void J.flip(e)});Gt(document),on(document);var _f=document.querySelector(`[data-prompt-dialog]`),vf=document.querySelector(`[data-prompt-name]`),yf=document.querySelector(`[data-prompt-text]`),bf=document.querySelector(`[data-prompt-delete]`),xf=document.getElementById(`prb-prompt-title`),Sf=document.querySelector(`[data-prompt-error]`),Cf=document.querySelector(`[data-prompt-save]`);function wf(e){Sf&&(Sf.textContent=e??``,Sf.hidden=e===null)}var Tf=``;function Ef(e){let t=q.find(t=>t.id===e);Tf=t?.id??``,xf&&(xf.textContent=t?`Edit prompt`:`Save a prompt`),vf&&(vf.value=t?.name??``),yf&&(yf.value=t?.prompt??``),bf&&(bf.hidden=!t),wf(null),_f?.showModal(),vf?.focus()}async function Df(){let e=vf?.value.trim()??``,t=yf?.value.trim()??``;if(!e||!t){(e?yf:vf)?.focus();return}await kf(Tf?q.map(n=>n.id===Tf?{...n,name:e,prompt:t}:n):[...q,{id:crypto.randomUUID(),name:e,prompt:t}])}async function Of(){Tf&&await kf(q.filter(e=>e.id!==Tf))}async function kf(e){wf(null);let t=[Cf,bf].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await $d(e);for(let e of t)e.disabled=!1;if(n)return wf(n);_f?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>_f?.close()),bf?.addEventListener(`click`,()=>void Of()),Cf?.addEventListener(`click`,()=>void Df());var Y=document.querySelector(`[data-fresh-region]`),Af=document.querySelector(`[data-fresh-status]`),jf=document.querySelector(`[data-fresh-check]`),X=Hf(Y?.dataset.report),Mf=`prb-fresh-reopen`,Nf=Rf(),Pf=Y?.dataset.dismissedSha,Ff=Lf(Y?.dataset.availability),Z=If(Y?.dataset.remote);function If(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Lf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Rf(){try{return sessionStorage.getItem(Mf)!==null&&(sessionStorage.removeItem(Mf),!0)}catch{return!1}}Nf&&ap(),jf?.addEventListener(`click`,()=>void Kf());var zf=document.querySelector(`[data-fetch-remote]`);zf&&(fetch(L(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(zf.hidden=!1)}).catch(()=>{}),zf.addEventListener(`click`,()=>void Bf(zf)));async function Bf(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(L(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};r(y(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:le(n)}),n.fetched>0&&await Kf()}Y?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Nf=!1,ap();let n=t.closest(`[data-fresh-dismiss]`);n&&(Pf=n.dataset.freshDismiss||void 0,Nf=!1,ap(),Vf())});function Vf(){fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Pf??null})}).catch(()=>{})}function Hf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Uf=Wa(),Wf=!1,Gf=null;async function Kf(){if(Wf)return;Wf=!0,Qf(!0),Gf&&await Gf;let e=$f(X,Z),t=await Jf(!1);Qf(!1),t&&ip(),Wf=!1,t&&(X?.code.state===`changed`||Z!==null)&&Pf!==void 0&&(Pf=void 0,Vf()),ap(),qf(t?$f(X,Z)===e?`No change`:`Updated`:`Could not check`)}function qf(e){Af&&(Af.textContent=e,window.setTimeout(op,2600))}async function Jf(e){let t=Uf.snapshot();try{let n=await(await fetch(`${L(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Ff=n.availability??null,Z=n.remote??null,tp=n.kiss??null,n.kissDismissedSha!==void 0&&(np=n.kissDismissedSha??void 0),n.prState!==void 0&&Zf(n.prState);let r=Ua(n.standing);return r&&Uf.current(t)&&Fa(document,r),!0}catch{return!1}}async function Yf(){if(Wf||Gf||!Y)return;let e=$f(X,Z),t=JSON.stringify(tp);Gf=Jf(!0);let n=await Gf;Gf=null,Xf=Date.now(),n&&($f(X,Z)!==e&&ap(),JSON.stringify(tp)!==t&&ip())}var Xf=Date.now();function Zf(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Pa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Qf(e){jf&&(jf.disabled=e),Af&&e&&(Af.textContent=`Checking…`,Af.dataset.state=`checking`)}function $f(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var ep=document.querySelector(`[data-kiss-fresh-region]`),tp=rp(ep?.dataset.freshness),np=ep?.dataset.dismissedSha;function rp(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ip(){Da(tp?.state===`changed`),ep&&(ep.innerHTML=ya(ep.dataset.reviewedSha??``,tp,{dismissedSha:np,actions:Ql!==``}))}ep?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(np=t.dataset.kissFreshnessDismiss||void 0,ip(),fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:np??null})}).catch(()=>{}))});function ap(){Y&&(Y.innerHTML=Gi(X,{dismissedSha:Pf,open:Nf,actions:Ql!==``,availability:Ff,remote:Z}),op())}function op(){if(Af&&(X||Z)){let{label:e,state:t}=Ui(X,Z);Af.textContent=e,Af.dataset.state=t,ra(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return sp(n);let r=t.closest(`[data-notice-dismiss]`);if(r){let e=r instanceof HTMLAnchorElement;e||r.closest(`[data-notice]`)?.remove(),fetch(L(`/prefs`),{method:`POST`,keepalive:e,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void lp(i);if(t.closest(`[data-review-update]`))return void pp();let a=t.closest(`[data-update-cancel]`);if(a)return void hp(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void hp(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function sp(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>cp(e,`Copied`),()=>cp(e,`Select it`))}function cp(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function lp(e){let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t)e.disabled=!0;let n=Date.now(),r=()=>{let e=Math.max(1,Math.round((Date.now()-n)/1e3));for(let n of t){let t=up(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${vp}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=up(e)?null:yp(e);try{await fetch(L(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}up(e)&&dp(),window.location.reload()}function up(e){return e.closest(`.prb-fresh-notes p`)}function dp(){try{sessionStorage.setItem(Mf,`1`)}catch{}}var fp=!1;async function pp(){if(fp)return;fp=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(L(`/job`))).json();e.update&&e.update.phase!==`none`&&!sa(e.update.phase)&&n()}catch{}},500);try{await fetch(L(`/update`),{method:`POST`})}catch{}n()}var mp={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function hp(e,t){let n=mp[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(L(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,_p(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||_p(e,n.tooLate),await Eo({look:async()=>{let e=await fetch(L(`/job`),{signal:AbortSignal.timeout(gp)});return n.running(await e.json())},reload:()=>window.location.reload()})}var gp=3e3;function _p(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var vp=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function yp(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),n.textContent=vp,t.appendChild(n),n}var bp=bo(document),xp=null,Sp=Date.now();function Cp(){xp===null&&(xp=window.setTimeout(()=>{xp=null,wp()},be(Date.now()-Sp)))}async function wp(){try{let e=await(await fetch(L(`/job`))).json();if(Ku&&!e.ask||Ep&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of bp){let r=t[e];if(r){if(xo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?Co(n,r.phase,r.progress):Tp(n,r.progress)}}}catch{}Cp()}function Tp(e,t){if(!t)return;let n=e.querySelector(`.prb-job-progress`);n||(n=document.createElement(`span`),n.className=`prb-job-progress`,e.querySelector(`p`)?.appendChild(n)),n.textContent=` ${t}`}var Ep=document.querySelector(`[data-diagram-running]`)!==null;(bp.size>0||Ku||Ep)&&(Sp=Date.now(),Cp()),document.querySelector(`[data-started-at]`)&&To(document);function Dp(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function Op(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,Op(t);let r=e=>{t.disabled=!1,t.textContent=n,Dp(t,e)};fetch(L(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(L(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Kr,cp(t,`Could not start. Try again`,2500)}))});var kp={send:async e=>{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{xd(`kiss`,e,t,`recommendation`,`decided`),xd(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){Sa(r,xa(n),kp);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(L(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Ap=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_e(e.state)??te(window.location.hash)??{kind:`view`,view:Ap},n=!R||!re(R,t),r=ou;ou=!1,r?bu(t):su(()=>bu(t)),n&&vu(t),Bp()});var jp=te(window.location.hash),Mp=window.location.hash===bl,Np=I.current().ui===null,Pp=window.matchMedia(`(max-width: 860px)`).matches,Fp=Np&&!jp?.focus?Br(cu.expanded,C(jp??{kind:`view`,view:Ap},yu),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Pp):null;if(Np&&G?.dataset.ask===`open`&&Pp&&delete G.dataset.ask,Fp){let e=jp??{kind:`view`,view:Ap};jp||(R=e);let t={...e,focus:Fp};I.replace(ie(t),t),bu(t)}else jp?bu(jp):(R={kind:`view`,view:Ap},I.replace(``,R));iu=!0;var Ip={enterTour(){let e=R,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||su(()=>bu({kind:`view`,view:`overview`})),()=>{!t&&e&&su(()=>bu(e))}},save(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};Mp?Ml(document,window,Ip):Xl.dataset.guidedTour===`offer`&&kl(document,window,{mode:`first`,host:Ip});var Lp={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:V,panes:G};I.setCapturer(()=>Ai(Lp));async function Rp(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=vi(e),s=o?Iu.pending(o):void 0;if(!o||!Ci(s?s.request:xi(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=Pu(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Lu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&_l(o,a.tall),t&&Si(o,t.top,t.offset))}function zp(e){vi(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Bp(){let e=++_u,t=()=>_u===e;await ji(Lp,I.current().ui,{setFold:(e,t)=>su(()=>Au(e,t)),setAsk:e=>su(()=>kd(e)),clearAsk:()=>{G&&delete G.dataset.ask,Ad(Od())},openPanel:(e,n)=>Rp(e,n,t),closePanel:zp,stillCurrent:t})}Bp();var Vp=H?Ri(H,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;W=Vp?.restoredStage??null,Md(),Nu();var Hp=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open], [data-range-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{Hp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Hp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-review-menu]`),$=Ka({root:document,post:(e,t)=>fetch(L(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Uf,checkForUpdates:()=>Kf()});function Up(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&z.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Wp(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void z.closeAll();Up(n.error)}}function Gp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Kp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&z.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}async function qp(e,t){if($.busy()||ae(t))return;oe(t,!0);let n;try{n=await e()}finally{oe(t,!1)}n.busy||n.error===null||r(y(),{kind:`failed`,text:n.error})}if(document.querySelector(`.prb-header-stats`)?.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`button[data-page-status]`);if(n){qp(()=>$.setComplete(n.dataset.status!==`complete`),n);return}let r=t?.closest(`[data-lifecycle-control]`),i=r?.querySelector(`button[data-page-lifecycle]`);if(!r||!i)return;let a=t?.closest(`[data-lifecycle-set]`);if(a){z.close(r,{returnFocus:!0}),qp(()=>$.setLifecycle(a.dataset.lifecycleSet),i);return}let o=i.dataset.lifecyclePress;t?.closest(`[data-lifecycle-pill]`)&&o&&o!==`menu`&&qp(()=>$.setLifecycle(o),i)}),Q){let t=Q.querySelector(`[data-confirm-delete]`),n=()=>mf(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),ne(a,a.dataset.copyId);return}if(t?.closest(`[data-tour-replay]`)){e.stopPropagation(),z.closeAll(),Ml(document,window,Ip);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){z.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Wp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Wp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Wp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Kp();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async t=>{let n=t.getAttribute(`aria-pressed`)!==`true`;t.disabled=!0;let r=null;try{let e=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(t.disabled=!1,r===null){t.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{t.textContent=e(t.getAttribute(`aria-pressed`)===`true`)},1600);return}t.setAttribute(`aria-pressed`,String(r)),t.textContent=e(r)},i=async()=>{t&&(t.disabled=!0,t.textContent=`Deleting`);let{error:e}=await $.deleteReview();if(e===null)return void window.location.replace(`/`);t&&(t.disabled=!1,t.textContent=`Delete`),n(),Up(e)}}function Jp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>Eu(e,{keepFocus:!0})}}function Yp(){if(!R)return null;let e=R.focus??(R.kind===`section`?`guide`:R.view);return he.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Xp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}p(`review`,{...gf.commands,...fo(J,document),"review.section.review":{available:()=>go(document)!==null,run:()=>{let e=go(document);e&&Eu(e,{keepFocus:!0})}},"review.section.kiss":Jp(`kiss`),"review.section.issues":Jp(`issues`),"review.section.diagrams":Jp(`map`),"review.section.questions":Jp(`questions`),"review.section.files":Jp(`files`),"review.buddy.open":{available:()=>Dd!==null,run:()=>{R?.focus?pe(R,`buddy`,xu):kd(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Dd!==null&&H!==null,panel:fe({prompts:()=>q,choose:tf})},"review.focus.toggle":{available:()=>Yp()!==null,run:()=>{let e=Yp();e&&Tu(e)}},"review.leave":{available:e=>!!(e&&de(e,document,e.target===H||J.state().selecting||!!R?.focus)),run:e=>{H&&e?.target===H?H.blur():J.state().selecting?J.exit():R?.focus&&ce(R,xu)}},"review.feedback.toggle":{available:()=>J.state().selecting||Xp(),label:()=>J.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>J.state().selecting?J.exit():J.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Wp(()=>$.setComplete(!0),Gp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Wp(()=>$.setLifecycle(`waiting`),Gp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Wp(()=>$.setLifecycle(`done`),Gp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Wp(()=>$.toggleQueued(),Gp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Wi(X,{actions:Ql!==``&&!bp.has(`update`)&&!fp,remote:Z}),run:()=>void pp()},"review.delete":{available:()=>$.offer().delete,run:()=>Kp({focusCancel:!0})}},{onOpen:()=>z.closeAll()}),h(),Ql&&Wc({markSeen:()=>fetch(L(`/seen`),{method:`POST`}),askUnread:()=>fetch(L(`/unread`))}),setTimeout(()=>{Ul(Fl([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),S(window,()=>window.location.reload());var Zp=15e3,Qp=6e4;function $p(){return Ql!==``&&document.visibilityState===`visible`&&!bp.has(`update`)}document.addEventListener(`visibilitychange`,()=>{$p()&&Date.now()-Xf>=Zp&&Yf()}),window.setInterval(()=>{$p()&&Yf()},Qp);export{yc as n,tn as r,Sc as t};