prreviewbuddy 0.52.2 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-BeqgAIrQ.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-CN9Gw02i.js","chunk-DJ4Pz6CG.js","chunk-B2kMZj3m.js","chunk-DN473Oml.js","chunk-DwZ_OKDV.js","chunk-CFLfawWY.js","chunk-Wc3Sd0cy.js","chunk-Dy-Kn_BL.js","chunk-CUxm3YXF.js","chunk-tz4nb_gp.js","chunk-BsaS8BTP.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-nU5620mN.js","chunk-CAnKkQXq.js","chunk-LbU1hoFO.js","chunk-BzbQS41l.js","chunk-BsjqnLg3.js","chunk-BtIQNnN0.js","chunk-D3KKoC5L.js","chunk-CP0rg-5b.js","chunk-j_1H8WHN.js","chunk-BOvsFOI6.js","chunk-CqHdAlCp.js","chunk-DijMHRDA.js","chunk-D2pwppYQ.js","chunk-Cjc271yU.js","chunk-B2PgDgse.js","chunk-D95j_xjm.js","chunk-Cv3JjNkX.js","chunk-EIJEcyW-.js","chunk-C3nvJp0N.js","chunk-D2NZorQR.js","chunk-NzFayA7r.js","chunk-AdYjtsZU.js","chunk-pNSm1SyV.js","chunk-c-cg1wCO.js","chunk-CBrdyqSx.js"])))=>i.map(i=>d[i]);
2
- import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as a,D as o,E as s,O as c,T as l,g as u,i as d,j as f,k as p,v as m,y as h}from"./chunk-CofqJ-Qn.js";function g(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function _(e){return g(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var v=`pr-helper-code-block`,y=`pr-helper-code-copy`,ee=`\0`,b=``,te=/\u0000(\d+)\u0000/g,ne=/^\u0000\d+\u0000$/,re=/\u0001(\d+)\u0001/g,ie=/^(?:https?:\/\/|#)/i;function ae(e){let{text:t,blocks:n}=oe(e.replace(/[\u0000\u0001]/g,``));return se(ce(t),n)}function oe(e){let t=[],n=e.split(`
2
+ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{c as a,i as o,o as s,s as c}from"./chunk-RriGSD6H.js";import{C as l,S as u,b as d,d as f,m as p,p as m,x as h}from"./chunk-BpiqRF0Y.js";function g(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function _(e){return g(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var v=`pr-helper-code-block`,y=`pr-helper-code-copy`,ee=`\0`,b=``,te=/\u0000(\d+)\u0000/g,ne=/^\u0000\d+\u0000$/,re=/\u0001(\d+)\u0001/g,ie=/^(?:https?:\/\/|#)/i;function ae(e){let{text:t,blocks:n}=oe(e.replace(/[\u0000\u0001]/g,``));return se(ce(t),n)}function oe(e){let t=[],n=e.split(`
3
3
  `),r=[],i=0;for(;i<n.length;){let e=n[i].match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/);if(!e){r.push(n[i]),i+=1;continue}let a=RegExp(`^\\s*${e[1][0]}{3,}\\s*$`),o=[];for(i+=1;i<n.length&&!a.test(n[i]);)o.push(n[i]),i+=1;i+=1,r.push(`${ee}${t.length}${ee}`),t.push(o.join(`
4
4
  `))}return{text:r.join(`
5
5
  `),blocks:t}}function se(e,t){return e.replace(te,(e,n)=>`<div class="${v}"><pre><code>${g(t[Number(n)])}</code></pre><button type="button" class="${y}" aria-label="Copy code">Copy</button></div>`)}function ce(e){let t=[],n=[],r=[],i=null,a=()=>{n.length&&t.push(`<p>${le(n.join(` `))}</p>`),r.length&&t.push(`<blockquote>${le(r.join(` `))}</blockquote>`),i&&t.push(`<${i.tag}>${i.items.map(e=>`<li>${le(e)}</li>`).join(``)}</${i.tag}>`),n=[],r=[],i=null};for(let o of e.split(`
@@ -37,33 +37,41 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
37
37
 
38
38
  `);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
39
39
  `).map(e=>`> ${e}`.trimEnd()).join(`
40
- `):``}function ot(e,t,n={}){let r=at(e,n);if(!r)return null;let i=[...tt,...rt].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}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 st=`saved:`,ct=`Your prompts`;function lt(e){return`${st}${e}`}function ut(e){return e.startsWith(`saved:`)?e.slice(6):null}function dt(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var ft=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`map`,`diagram`,`kiss`,`kissrecs`],pt=`#theme-`,mt=[`buddy`,`overview`,`guide`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],ht=`&focus=`;function gt(e){return`#${e}`}function _t(e){return`${pt}${encodeURIComponent(e)}`}function vt(e){let t=e.kind===`view`?gt(e.view):_t(e.sectionId);return e.focus?`${t}${ht}${e.focus}`:t}function yt(e){let{focus:t,...n}=e;return n}function bt(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function xt(e){return mt.includes(e)}function St(e){let t=e.indexOf(ht);if(t===-1)return Ct(e);let n=Ct(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return xt(r)?{...n,focus:r}:n}function Ct(e){if(e.startsWith(pt)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ft.includes(t)?{kind:`view`,view:t}:null}var wt=`pushedFocus`;function Tt(e){let{[wt]:t,...n}=e;return n}function Et(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Dt(e,t,n){if(e.focus===t)return;let r={...yt(Tt(e)),focus:t};e.focus&&n.history.state?.[wt]?n.history.replaceState({...r,[wt]:!0},``,vt(r)):n.history.pushState({...r,[wt]:!0},``,vt(r)),n.apply(r)}function Ot(e,t){if(!e.focus)return;if(t.history.state?.[wt]){t.history.back();return}let n=yt(Tt(e));t.history.replaceState(n,``,vt(n)),t.apply(n)}function kt(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&r.value!==``)}function At(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}function jt(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ut(e);if(a===null)return ot(t,e,i);let o=r(a);if(!o)return null;let s=at(t,i);return s?`${s}\n\n${o}`:null}function Mt(e,t,n){if(n.busy?.())return null;let r=jt(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=nt(e)||ut(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}var Nt=`button:not([disabled])`;function Pt(e){return e.querySelector(`[data-menu-panel]`)}function Ft(e){return e.querySelector(`[data-menu-trigger]`)}function It(e){let t=Pt(e);return t?[...t.querySelectorAll(Nt)].filter(e=>!e.closest(`[hidden]`)):[]}function Lt(e,t={}){let n=null,r=t.within?`${t.within} [data-menu]`:`[data-menu]`,i=e=>e&&(!t.within||e.closest(t.within))?e:null,a=(e,r={})=>{let i=Pt(e);if(!i||i.hidden)return;i.hidden=!0;let a=Ft(e);a?.setAttribute(`aria-expanded`,`false`),n===e&&(n=null),t.onClose?.(e),r.returnFocus&&a?.focus()},o=()=>{for(let t of e.querySelectorAll(r))a(t)},s=(e,r)=>{let i=Pt(e);i&&(o(),t.onOpen?.(e),i.hidden=!1,Ft(e)?.setAttribute(`aria-expanded`,`true`),n=e,r&&It(e)[0]?.focus())};return e.addEventListener(`click`,e=>{let t=e.target,r=i(t?.closest?.(`[data-menu]`)??null);if(!r){o();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;Pt(r)?.hidden?s(r,t):a(r);return}n&&n!==r&&a(n)}),e.addEventListener(`keydown`,e=>{if(n&&!n.isConnected&&(n=null),!n)return;let t=n;if(e.key===`Escape`){e.preventDefault(),a(t,{returnFocus:!0});return}if(!t.contains(e.target))return;if(e.key===`Tab`){a(t);return}let r=It(t);if(r.length===0)return;let i=r.indexOf(e.target),o=e.key===`ArrowDown`?r[(i+1)%r.length]:e.key===`ArrowUp`?r[(i-1+r.length)%r.length]:e.key===`Home`?r[0]:e.key===`End`?r[r.length-1]:null;o&&(e.preventDefault(),o.focus())}),{open:e=>s(e,!1),close:a,closeAll:o}}function Rt(e){return e.reviewerClosed>0?`dealt with`:`resolved`}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function E(e,t=``){return typeof e==`string`?e:t}var zt=`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 Bt(e,t,n=`resolved`){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} issues ${n}</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} still open</span>`}function Vt(e){let t=e.done-e.reviewerClosed;return e.reviewerClosed===0?`Resolved by the new commits (${e.done})`:t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function Ht(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 Ut(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 Wt(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function Gt(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function Kt(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function qt(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}function Jt(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function Yt(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Xt=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Zt(e){return`<details class="prb-update-alt">
40
+ `):``}function ot(e,t,n={}){let r=at(e,n);if(!r)return null;let i=[...tt,...rt].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}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 st=`saved:`,ct=`Your prompts`;function lt(e){return`${st}${e}`}function ut(e){return e.startsWith(`saved:`)?e.slice(6):null}function dt(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var ft=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`map`,`diagram`,`kiss`,`kissrecs`],pt=`#theme-`,mt=[`buddy`,`overview`,`guide`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],ht=`&focus=`;function gt(e){return`#${e}`}function _t(e){return`${pt}${encodeURIComponent(e)}`}function vt(e){let t=e.kind===`view`?gt(e.view):_t(e.sectionId);return e.focus?`${t}${ht}${e.focus}`:t}function yt(e){let{focus:t,...n}=e;return n}function bt(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function xt(e){return mt.includes(e)}function St(e){let t=e.indexOf(ht);if(t===-1)return Ct(e);let n=Ct(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return xt(r)?{...n,focus:r}:n}function Ct(e){if(e.startsWith(pt)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ft.includes(t)?{kind:`view`,view:t}:null}var wt=`pushedFocus`;function Tt(e){let{[wt]:t,...n}=e;return n}function Et(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Dt(e,t,n){if(e.focus===t)return;let r={...yt(Tt(e)),focus:t};e.focus&&n.history.state?.[wt]?n.history.replaceState({...r,[wt]:!0},``,vt(r)):n.history.pushState({...r,[wt]:!0},``,vt(r)),n.apply(r)}function Ot(e,t){if(!e.focus)return;if(t.history.state?.[wt]){t.history.back();return}let n=yt(Tt(e));t.history.replaceState(n,``,vt(n)),t.apply(n)}function kt(e,t,n){if(!n||e.key!==`Escape`||e.defaultPrevented||t.querySelector(`dialog[open], [data-menu-panel]:not([hidden]), [data-analysis-details][open], [data-range-details][open], .pr-helper-selection-popover`))return!1;let r=e.target;return!(r?.closest?.(`[data-ask-resize]`)||r instanceof HTMLInputElement&&r.value!==``)}function At(e,t,n){e&&(n?e.dataset.focus=n:delete e.dataset.focus);for(let e of t.querySelectorAll(`[data-focus-toggle]`)){let t=e.dataset.focusToggle===n,r=e.dataset.focusName??`this`,i=t?`Exit focus on ${r}`:`Expand ${r}`;e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,i),e.setAttribute(`title`,t?`${i} (Esc)`:i)}}function jt(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ut(e);if(a===null)return ot(t,e,i);let o=r(a);if(!o)return null;let s=at(t,i);return s?`${s}\n\n${o}`:null}function Mt(e,t,n){if(n.busy?.())return null;let r=jt(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=nt(e)||ut(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}var Nt=`button:not([disabled])`;function Pt(e){return e.querySelector(`[data-menu-panel]`)}function Ft(e){return e.querySelector(`[data-menu-trigger]`)}function It(e){let t=Pt(e);return t?[...t.querySelectorAll(Nt)].filter(e=>!e.closest(`[hidden]`)):[]}function Lt(e,t={}){let n=null,r=t.within?`${t.within} [data-menu]`:`[data-menu]`,i=e=>e&&(!t.within||e.closest(t.within))?e:null,a=(e,r={})=>{let i=Pt(e);if(!i||i.hidden)return;i.hidden=!0;let a=Ft(e);a?.setAttribute(`aria-expanded`,`false`),n===e&&(n=null),t.onClose?.(e),r.returnFocus&&a?.focus()},o=()=>{for(let t of e.querySelectorAll(r))a(t)},s=(e,r)=>{let i=Pt(e);i&&(o(),t.onOpen?.(e),i.hidden=!1,Ft(e)?.setAttribute(`aria-expanded`,`true`),n=e,r&&It(e)[0]?.focus())};return e.addEventListener(`click`,e=>{let t=e.target,r=i(t?.closest?.(`[data-menu]`)??null);if(!r){o();return}if(t?.closest(`[data-menu-trigger]`)){let t=e.detail===0;Pt(r)?.hidden?s(r,t):a(r);return}n&&n!==r&&a(n)}),e.addEventListener(`keydown`,e=>{if(n&&!n.isConnected&&(n=null),!n)return;let t=n;if(e.key===`Escape`){e.preventDefault(),a(t,{returnFocus:!0});return}if(!t.contains(e.target))return;if(e.key===`Tab`){a(t);return}let r=It(t);if(r.length===0)return;let i=r.indexOf(e.target),o=e.key===`ArrowDown`?r[(i+1)%r.length]:e.key===`ArrowUp`?r[(i-1+r.length)%r.length]:e.key===`Home`?r[0]:e.key===`End`?r[r.length-1]:null;o&&(e.preventDefault(),o.focus())}),{open:e=>s(e,!1),close:a,closeAll:o}}function Rt(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var zt=`Run review again`;function Bt(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 Vt(e){let t=e.dataset.questionAnswered;t&&Bt(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Ht=`pr-helper-author-context-collapsed`,Ut=`Show full description`,Wt=`Show less`;function Gt(e){let t=e.ownerDocument.getElementById(e.getAttribute(`aria-controls`)??``);if(!t)return;let n=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(n)),t.classList.toggle(Ht,!n),e.textContent=n?Wt:Ut}var Kt=`pr-helper-author-context`;function qt(e){let t=e.ownerDocument.getElementById(Kt);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Gt(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}function Jt(e){let t=e?.closest?.(`.${Ht}`);if(!t)return;let n=t.ownerDocument.querySelector(`[data-author-context-toggle][aria-controls="${t.id}"]`);n&&Gt(n),t.scrollTop=0}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function E(e,t=``){return typeof e==`string`?e:t}var Yt=`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 Xt(e,t,n=`resolved`){return t===0?`<span class="pr-helper-questions-progress-check" aria-hidden="true">\u2713</span><span class="pr-helper-questions-progress-count">All ${e} issues ${n}</span>`:`<span class="pr-helper-questions-progress-count">${t} of ${e} still open</span>`}function Zt(e){let t=e.done-e.reviewerClosed;return e.reviewerClosed===0?`Resolved by the new commits (${e.done})`:t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function Qt(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 $t(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 en(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function tn(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function nn(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function rn(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}function an(e){if(!Number.isFinite(e))return``;let t=Math.round((Date.now()-e)/6e4);if(t<1)return`just now`;if(t<60)return`${t} minute${t===1?``:`s`} ago`;let n=Math.round(t/60);if(n<24)return`${n} hour${n===1?``:`s`} ago`;let r=Math.round(n/24);return`${r} day${r===1?``:`s`} ago`}function on(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var sn=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function cn(e){return`<details class="prb-update-alt">
41
41
  <summary>Start a new review</summary>
42
42
  <span>A brand new review, with its own findings and its own path through the change. Run <code>${g(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${g(e)}">Copy</button></span>
43
- </details>`}var Qt=`prreviewbuddy review --fresh`;function $t(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 en(e,t={}){let n=e??(t.remote?sn(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?cn(n.code,r):on(n.code,t.availability??null),u=e?[...l.facts,`checked ${g(Jt(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
43
+ </details>`}var ln=`prreviewbuddy review --fresh`;function un(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 dn(e,t={}){let n=e??(t.remote?_n(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?vn(n.code,r):gn(n.code,t.availability??null),u=e?[...l.facts,`checked ${g(an(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
44
44
  <div class="prb-fresh-head">
45
45
  <span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
46
46
  <strong class="prb-fresh-title">${g(l.title)}</strong>
47
47
  <span class="prb-fresh-facts">${u.join(` &middot; `)}</span>
48
48
  </div>
49
49
  ${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
50
- ${tn(n,t,i||a)}
51
- </div>`}function tn(e,t,n){let r=t.actions&&n,i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
52
- ${r?Yt():``}
53
- ${r?Zt(Qt):``}
50
+ ${fn(n,t,i||a)}
51
+ </div>`}function fn(e,t,n){let r=t.actions&&n,i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
52
+ ${r?on():``}
53
+ ${r?cn(ln):``}
54
54
  ${i}
55
- ${nn(e,t,n,r===!0)}
56
- </div>`}function nn(e,t,n,r){let i=[r?g(Xt):``,t.remote?ln(e.code):un(e.code,e.checkout.reason!==`no-pull-request`),dn(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${g(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">
55
+ ${pn(e,t,n,r===!0)}
56
+ </div>`}function pn(e,t,n,r){let i=[r?g(sn):``,t.remote?yn(e.code):bn(e.code,e.checkout.reason!==`no-pull-request`),xn(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${g(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">
57
57
  <summary>More details</summary>
58
58
  ${a}
59
- </details>`:a}function rn(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function an(e){return e?`<code title="${g(e)}">${g(e.slice(0,7))}</code>`:``}function D(e){return e?[`reviewed ${an(e)}`]:[]}function on(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:D(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:D(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...D(e.reviewedSha),...rn(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:[...D(e.reviewedSha),...t,...rn(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:D(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:D(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:D(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 sn(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 cn(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:[...D(e.reviewedSha),...i,...n?rn(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${g(Jt(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 ln(e){return`This review is based on ${an(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function un(e,t){if(!e.comparison)return``;let n=`<code>${g(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${an(e.reviewedSha)}.`:`This review is based on ${an(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 dn(e,t){if(!e.conversation.attached)return``;let n=g(Jt(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 fn(e){return e===`done`||e===`failed`}function pn(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function mn(e,t=``){return`<div class="prb-doc-head">
59
+ </details>`:a}function mn(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function hn(e){return e?`<code title="${g(e)}">${g(e.slice(0,7))}</code>`:``}function D(e){return e?[`reviewed ${hn(e)}`]:[]}function gn(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:D(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:D(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...D(e.reviewedSha),...mn(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:[...D(e.reviewedSha),...t,...mn(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:D(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:D(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:D(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 _n(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 vn(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:[...D(e.reviewedSha),...i,...n?mn(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${g(an(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 yn(e){return`This review is based on ${hn(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function bn(e,t){if(!e.comparison)return``;let n=`<code>${g(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${hn(e.reviewedSha)}.`:`This review is based on ${hn(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 xn(e,t){if(!e.conversation.attached)return``;let n=g(an(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 Sn(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${wn(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
60
+
61
+ `)}function Cn(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Sn)].join(`
62
+
63
+ `)}function wn(e){return e.split(`
64
+ `).map(e=>e===``?`>`:`> ${e}`).join(`
65
+ `)}function Tn(e){return e===`done`||e===`failed`}function En(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Dn(e,t=``){return`<div class="prb-doc-head">
60
66
  <h3 class="prb-doc-title">${g(e)}</h3>
61
67
  ${t}
62
- </div>`}var hn=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,gn=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function _n(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 vn(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${g(t)}" aria-pressed="false" aria-label="${g(n)}" title="${g(n)}">${_n(hn,`prb-focus-expand`)}${_n(gn,`prb-focus-collapse`)}</button>`}vn(`kiss`,`KISS review`),mn(`Recommendations`,vn(`kissrecs`,`Recommendations`));function yn(e,t,n={}){if(!t||t.state!==`changed`||n.dismissedSha&&n.dismissedSha===t.latestSha)return``;let r=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">
63
- <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> ${g(r)}</p>
64
- <p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below is kept either way.</p>
65
- ${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${g(t.latestSha)}">Not now</button>`:``}
66
- </div>`}function bn(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 xn(e,t){t.complete!==void 0&&wn(e,t.complete),t.activity!==void 0&&Sn(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Tn(e,Cn(e)):Tn(e,t.lifecycle??void 0),t.queued!==void 0&&En(e,t.queued)}function Sn(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind):(delete n.dataset.activityAt,delete n.dataset.activityKind))}function Cn(e){let t=e.querySelector(`[data-review-menu]`);return c(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function wn(e,t){let n=t?`complete`:`in-progress`,r=e.querySelector(`[data-page-status]`);r&&(r.dataset.status=n,r.textContent=l(n));let i=e.querySelector(`[data-review-menu] [data-mark-status]`);if(i){let e=t?`in-progress`:`complete`;i.dataset.markStatus=e,i.textContent=u(e)}}function Tn(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?Dn(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);if(i){let e=s(t,r);i.hidden=e===void 0,i.textContent=e?.text??``,i.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`))n.hidden=!o(n.dataset.lifecycleSet,t,r)}function En(e,t){let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=h(t))}function Dn(e){let t=Number(e.dataset.activityAt),n=e.dataset.activityKind;return Number.isFinite(t)&&n?{at:t,kind:n}:void 0}function On(e){return c(e)??null}var kn=[`created`,`updated`,`merged`,`closed`,`reopened`];function An(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:On(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else if(typeof i==`object`){let{at:e,kind:t}=i;typeof e==`number`&&Number.isFinite(e)&&kn.includes(t)&&(a.activity={at:e,kind:t})}return a}function jn(){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)}}}}function Mn(e,t=Date.now()){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return`${n} second${n===1?``:`s`}`;let r=Math.round(n/60);return`${r} minute${r===1?``:`s`}`}vn(`progress`,`Review progress`);var Nn={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function Pn(e){let t=new Map;for(let n of Object.keys(Nn)){let r=Nn[n],i=e.querySelector(`[${r}]`);i&&!fn(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Fn(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||fn(t.phase):In(t.phase,n)}function In(e,t){return fn(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Ln(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||pn(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 Rn(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${Mn(n)}.`)}function zn(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-${g(e.scope)}" data-diagram-card="${g(e.scope)}">
68
+ </div>`}var On=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,kn=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function An(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 jn(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${g(t)}" aria-pressed="false" aria-label="${g(n)}" title="${g(n)}">${An(On,`prb-focus-expand`)}${An(kn,`prb-focus-collapse`)}</button>`}jn(`kiss`,`KISS review`),Dn(`Recommendations`,jn(`kissrecs`,`Recommendations`));var Mn={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function Nn(e,t){return t===`undecided`?`Open`:Mn[e][t]}function Pn(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 Fn(e){return`Decided (${e})`}function In(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 Ln(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">
69
+ <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
70
+ </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">
71
+ <p><strong>This KISS review describes commit ${g(e.slice(0,7))}.</strong> ${g(i)}</p>
72
+ <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>
73
+ <p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${g(t.latestSha)}">Not now</button>`:``}</p>
74
+ </div>`}var Rn=new WeakMap;function zn(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function Bn(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Xn(e);let i=e.contains(document.activeElement);Vn(e,t),Jn(e,!0),Un(n),i&&Yn(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Jn(e,!1),a){Un(n);return}Vn(e,r),Un(n),Zn(e,t,n)},a=(Rn.get(e)??Promise.resolve()).then(i,i);return Rn.set(e,a),a}function Vn(e,t){e.dataset.decision=t;let n=qn(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=Nn(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=Mn[n][r.dataset.kissDecide];Hn(e,t!==`undecided`)}function Hn(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 Un(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=Pn(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=Fn(r))}e.paintRail(n.length,i),Wn(t)}function Wn(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=Kn(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=In(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?Cn(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function Gn(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),Wn(t))}function Kn(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function qn(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Jn(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function Yn(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 Xn(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function Zn(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 Bn(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 Qn(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 $n(e,t){t.complete!==void 0&&nr(e,t.complete),t.activity!==void 0&&er(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&rr(e,tr(e)):rr(e,t.lifecycle??void 0),t.queued!==void 0&&ir(e,t.queued)}function er(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind):(delete n.dataset.activityAt,delete n.dataset.activityKind))}function tr(e){let t=e.querySelector(`[data-review-menu]`);return l(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function nr(e,t){let n=t?`complete`:`in-progress`,r=e.querySelector(`[data-page-status]`);r&&(r.dataset.status=n,r.textContent=d(n));let i=e.querySelector(`[data-review-menu] [data-mark-status]`);if(i){let e=t?`in-progress`:`complete`;i.dataset.markStatus=e,i.textContent=f(e)}}function rr(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?ar(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);if(i){let e=h(t,r);i.hidden=e===void 0,i.textContent=e?.text??``,i.toggleAttribute(`data-changed`,e?.changed===!0)}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`))n.hidden=!u(n.dataset.lifecycleSet,t,r)}function ir(e,t){let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=p(t))}function ar(e){let t=Number(e.dataset.activityAt),n=e.dataset.activityKind;return Number.isFinite(t)&&n?{at:t,kind:n}:void 0}function or(e){return l(e)??null}var sr=[`created`,`updated`,`merged`,`closed`,`reopened`];function cr(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:or(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else if(typeof i==`object`){let{at:e,kind:t}=i;typeof e==`number`&&Number.isFinite(e)&&sr.includes(t)&&(a.activity={at:e,kind:t})}return a}function lr(){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)}}}}function ur(e,t=Date.now()){let n=Math.max(0,Math.round((t-e)/1e3));if(n<60)return`${n} second${n===1?``:`s`}`;let r=Math.round(n/60);return`${r} minute${r===1?``:`s`}`}jn(`progress`,`Review progress`);var dr={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function fr(e){let t=new Map;for(let n of Object.keys(dr)){let r=dr[n],i=e.querySelector(`[${r}]`);i&&!Tn(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function pr(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Tn(t.phase):mr(t.phase,n)}function mr(e,t){return Tn(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function hr(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||En(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 gr(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${ur(n)}.`)}function _r(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-${g(e.scope)}" data-diagram-card="${g(e.scope)}">
67
75
  <header class="prb-diagram-head">
68
76
  <div class="prb-diagram-heading">
69
77
  <h4 class="prb-diagram-title">
@@ -82,62 +90,62 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
82
90
  </div>
83
91
  </header>
84
92
  ${e.caption?`<p class="prb-diagram-caption">${g(e.caption)}</p>`:``}
85
- ${Bn(e,n)}
93
+ ${vr(e,n)}
86
94
  <div class="prb-diagram-canvas" data-diagram-canvas></div>
87
95
  <details class="prb-diagram-source">
88
96
  <summary>Diagram source</summary>
89
97
  <div class="${v}"><pre><code data-mermaid-source>${g(e.mermaid)}</code></pre><button type="button" class="${y}" aria-label="Copy code">Copy</button></div>
90
98
  </details>
91
- </article>`}function Bn(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${g(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 Vn=`modulepreload`,Hn=function(e){return`/`+e},Un={},O=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Hn(t,n),t=s(t),t in Un)return;Un[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Vn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Wn=.5,Gn=3,Kn=1.25,qn=null;function Jn(){return qn??=O(()=>import(`./chunk-BeqgAIrQ.js`).then(e=>(e.default.initialize({startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),qn}var Yn=new WeakSet,Xn=new WeakMap,Zn=new WeakMap,k=null;function Qn(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(()=>{k?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){dr(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){mr(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?er(e):o&&$n(e,o.dataset.diagramRequest||null)}),ir(),tr(),{drawPane:fr}}async function $n(e,t){if(k)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${xr(n)}"]`)??null??sr(r,n,t);if(!i)return;ar(),e.showDiagrams();let a=cr(i);k=new AbortController,A(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:k.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 lr(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);ur(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),ar()):a.remove();return}lr(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{k=null,A(!0)}}async function er(e){if(k)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=nr(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),k=new AbortController,A(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:k.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){rr(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),ar()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}rr(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),k=null,A(!0)}}function tr(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(nr(e),A(!1))}function nr(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 rr(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function ir(){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="${xr(n)}"]`)??sr(e,n,t);r&&(ar(),cr(r,{scroll:!1}),A(!1))}function ar(){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;or(`map`,t>0),or(`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 or(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 sr(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">
99
+ </article>`}function vr(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${g(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 yr=`modulepreload`,br=function(e){return`/`+e},xr={},O=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=br(t,n),t=s(t),t in xr)return;xr[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:yr,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Sr=.5,Cr=3,wr=1.25,Tr=null;function Er(){return Tr??=O(()=>import(`./chunk-BeqgAIrQ.js`).then(e=>(e.default.initialize({startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),Tr}var Dr=new WeakSet,Or=new WeakMap,kr=new WeakMap,k=null;function Ar(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(()=>{k?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Ur(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Kr(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Mr(e):o&&jr(e,o.dataset.diagramRequest||null)}),Ir(),Nr(),{drawPane:Wr}}async function jr(e,t){if(k)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${$r(n)}"]`)??null??zr(r,n,t);if(!i)return;Lr(),e.showDiagrams();let a=Br(i);k=new AbortController,A(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:k.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 Vr(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Hr(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Lr()):a.remove();return}Vr(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{k=null,A(!0)}}async function Mr(e){if(k)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=Pr(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),k=new AbortController,A(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:k.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){Fr(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),Lr()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Fr(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),k=null,A(!0)}}function Nr(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(Pr(e),A(!1))}function Pr(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 Fr(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Ir(){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="${$r(n)}"]`)??zr(e,n,t);r&&(Lr(),Br(r,{scroll:!1}),A(!1))}function Lr(){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;Rr(`map`,t>0),Rr(`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 Rr(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 zr(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">
92
100
  <div class="prb-diagram-heading">
93
101
  <h4 class="prb-diagram-title">Drawing…</h4>
94
- <p class="prb-diagram-scope">${t===`change`?`Whole change`:br(_r(n))}</p>
102
+ <p class="prb-diagram-scope">${t===`change`?`Whole change`:Qr(Yr(n))}</p>
95
103
  </div>
96
- </header>`,vr(e,r,n),r}function cr(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:Sr()?`auto`:`smooth`,block:`start`}),n}function lr(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 ur(e,t,n){let r=zn(t,new Map(n?[[n,_r(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),ar(),pr(a))}function dr(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||pr(e))}function fr(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))pr(e)}async function pr(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Yn.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Yn.add(e);try{let e=await Jn();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{Yn.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 mr(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Zn.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=hr(e,n);if(i<=0)return;let a=gr((Zn.get(e)??1)*(t===`in`?Kn:1/Kn));Zn.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function hr(e,t){let n=Xn.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Xn.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function gr(e){return Math.min(Gn,Math.max(Wn,e))}function A(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function _r(e){return e?document.querySelector(`[data-goto-section="${xr(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function vr(e,t,n){let r=yr(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(yr(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function yr(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${xr(e)}"]`);return Number(t?.dataset.themeIndex??0)}function br(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function xr(e){return CSS.escape(e)}function Sr(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Cr=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],wr=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],j={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Tr={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function Er(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}=Dr(t.nodes);return{schemaVersion:1,title:Mr(E(t.title).trim(),j.mapTitle)||`Change map`,intent:M(t.intent,j.intent)??{simple:``,technical:``},nodes:n,edges:Or(t.edges,r)}}function Dr(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=M(e.title,j.title);if(!a)continue;let o=E(e.id).trim()||a.technical;if(t.has(o))continue;let s=jr(Ar(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Cr.includes(e.role)?e.role:`concept`,l=M(e.why,j.why),u=Mr(E(e.anchor).trim(),j.anchor),d=E(e.sectionId).trim();r.push({id:s,role:c,stage:kr(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:M(e.body,j.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function Or(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=M(e.label,j.label),a=t.get(E(e.from).trim())??E(e.from).trim(),o=t.get(E(e.to).trim())??E(e.to).trim();if(!i||!a||!o)continue;let s=M(e.note,j.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function M(e,t){if(typeof e==`string`){let n=Mr(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=Mr(E(n.simple).trim(),t),i=Mr(E(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function kr(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Tr[t]}function Ar(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function jr(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Mr(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 Nr(e,t){try{return Pr(Er(e),t).map}catch{return null}}function Pr(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=Lr(Fr(e.nodes,n).map(e=>Ir(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:Rr(r),edges:o},audit:n}}function Fr(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 Ir(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 Lr(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function Rr(e){return[...e].sort((e,t)=>e.stage-t.stage)}function zr(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?Nr(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Br(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
104
+ </header>`,Xr(e,r,n),r}function Br(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:ei()?`auto`:`smooth`,block:`start`}),n}function Vr(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 Hr(e,t,n){let r=_r(t,new Map(n?[[n,Yr(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Lr(),Gr(a))}function Ur(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Gr(e))}function Wr(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Gr(e)}async function Gr(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Dr.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Dr.add(e);try{let e=await Er();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{Dr.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 Kr(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){kr.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=qr(e,n);if(i<=0)return;let a=Jr((kr.get(e)??1)*(t===`in`?wr:1/wr));kr.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function qr(e,t){let n=Or.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Or.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Jr(e){return Math.min(Cr,Math.max(Sr,e))}function A(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Yr(e){return e?document.querySelector(`[data-goto-section="${$r(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Xr(e,t,n){let r=Zr(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Zr(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Zr(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${$r(e)}"]`);return Number(t?.dataset.themeIndex??0)}function Qr(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function $r(e){return CSS.escape(e)}function ei(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ti=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],ni=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],j={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},ri={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function ii(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}=ai(t.nodes);return{schemaVersion:1,title:ui(E(t.title).trim(),j.mapTitle)||`Change map`,intent:M(t.intent,j.intent)??{simple:``,technical:``},nodes:n,edges:oi(t.edges,r)}}function ai(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=M(e.title,j.title);if(!a)continue;let o=E(e.id).trim()||a.technical;if(t.has(o))continue;let s=li(ci(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=ti.includes(e.role)?e.role:`concept`,l=M(e.why,j.why),u=ui(E(e.anchor).trim(),j.anchor),d=E(e.sectionId).trim();r.push({id:s,role:c,stage:si(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:M(e.body,j.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function oi(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=M(e.label,j.label),a=t.get(E(e.from).trim())??E(e.from).trim(),o=t.get(E(e.to).trim())??E(e.to).trim();if(!i||!a||!o)continue;let s=M(e.note,j.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function M(e,t){if(typeof e==`string`){let n=ui(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=ui(E(n.simple).trim(),t),i=ui(E(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function si(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:ri[t]}function ci(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function li(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ui(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 di(e,t){try{return fi(ii(e),t).map}catch{return null}}function fi(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=hi(pi(e.nodes,n).map(e=>mi(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:gi(r),edges:o},audit:n}}function pi(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 mi(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 hi(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function gi(e){return[...e].sort((e,t)=>e.stage-t.stage)}function _i(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?di(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return vi(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
97
105
  <header class="prb-map-head">
98
106
  <div class="prb-map-heading">
99
107
  <h4 class="prb-map-title">${g(a.title)}</h4>
100
108
  ${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${N(a.intent)}</p>`:``}
101
109
  </div>
102
110
  <div class="prb-map-tools">
103
- ${Vr(i)}
111
+ ${yi(i)}
104
112
  <button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
105
113
  </div>
106
114
  </header>
107
115
  <p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
108
- ${Hr(a,s)}
109
- ${Kr(a)}
110
- </div>`}function Br(e){return`<div class="prb-map-empty" data-change-map-empty>
116
+ ${bi(a,s)}
117
+ ${wi(a)}
118
+ </div>`}function vi(e){return`<div class="prb-map-empty" data-change-map-empty>
111
119
  ${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
112
120
  <h4 class="prb-map-empty-title">See the change as a map</h4>
113
121
  <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>
114
122
  <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>
115
123
  <button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
116
- </div>`}function Vr(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 Hr(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}">
117
- <h5 class="prb-map-stage-title">${g(wr[n]??``)}</h5>
118
- ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Wr(n,t,e)).join(``)}
119
- </div>`).join(``),i=e.edges.map((e,t)=>Gr(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
124
+ </div>`}function yi(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 bi(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}">
125
+ <h5 class="prb-map-stage-title">${g(ni[n]??``)}</h5>
126
+ ${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Si(n,t,e)).join(``)}
127
+ </div>`).join(``),i=e.edges.map((e,t)=>Ci(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
120
128
  <svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
121
129
  ${r}
122
130
  <div class="prb-map-labels" aria-hidden="true">${i}</div>
123
- </div>`}var Ur={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Wr(e,t,n){let r=g(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>${N(e.label)}</em> <span aria-hidden="true">→</span> ${N(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}">
124
- <p class="prb-map-role">${Ur[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
131
+ </div>`}var xi={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Si(e,t,n){let r=g(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>${N(e.label)}</em> <span aria-hidden="true">→</span> ${N(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}">
132
+ <p class="prb-map-role">${xi[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
125
133
  <h5 class="prb-map-node-title" id="prb-map-node-${r}">${N(e.title)}</h5>
126
134
  ${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${N(e.body)}</p>`:``}
127
135
  ${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${N(e.why)}</p>`:``}
128
136
  ${e.anchor?`<code class="prb-map-anchor">${g(e.anchor)}</code>`:``}
129
137
  ${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
130
138
  ${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${g(e.sectionId)}" aria-label="Open ${g(i)} in the Review Path">Review Path: ${g(i)} <span aria-hidden="true">→</span></button>`:``}
131
- </article>`}function Gr(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${g(e.from)}" data-to="${g(e.to)}">${N(e.label)}</span>`}function Kr(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
139
+ </article>`}function Ci(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${g(e.from)}" data-to="${g(e.to)}">${N(e.label)}</span>`}function wi(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
132
140
  <summary>Read as a list</summary>
133
141
  <ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${N(n)}</strong> <em>${N(e.label)}</em> <strong>${N(r)}</strong>${e.note?`<span class="prb-map-note"> — ${N(e.note)}</span>`:``}</li>`}).join(``)}</ol>
134
- </details>`}function N(e){return e.simple===e.technical?_(e.simple):`<span data-reg="simple">${_(e.simple)}</span><span data-reg="technical">${_(e.technical)}</span>`}var qr=`http://www.w3.org/2000/svg`,Jr=new WeakSet,Yr=new WeakMap;function Xr(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){li(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&&ci(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&&ci(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`)&&(ci(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=n.dataset.diagramMode===`map`?`diagram`:`map`;e.showView(r),document.querySelector(`.prb-view[data-view="${r}"] [data-diagram-mode="${r}"]`)?.focus()}}}),{layout:Zr,show:Qr}}function Zr(){for(let e of document.querySelectorAll(`[data-map-board]`))$r(e),ei(e)}function Qr(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=zr({stored:e,sections:di(),reviewedSha:e.commitSha,register:ui()}),Zr())}function $r(e){if(Jr.has(e)||typeof ResizeObserver>`u`)return;Jr.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,ei(e)}))}).observe(e)}function ei(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(si());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?ti(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=Yr.get(e),_=g&&g.width===h?g.edges:new Set;Yr.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=ni(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=ni(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=ii(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)=>ai(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(qr,`path`);b.setAttribute(`d`,`M${P(u.x)},${P(u.y)} C${P(h.x)},${P(h.y)} ${P(g.x)},${P(g.y)} ${P(y.x)},${P(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 te=e.offsetWidth,ne=e.offsetHeight,re=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=ai(l,e);return{left:t.x-te/2,top:t.y-ne/2,right:t.x+te/2,bottom:t.y+ne/2}}).find(e=>![...m,...p,...f].some(t=>oi(e,t,2)));if(!re){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(re),e.style.left=`${Math.round(re.left)}px`,e.style.top=`${Math.round(re.top)}px`}),e.setAttribute(`data-laid-out`,``)}function ti(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 ni(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 ri={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function ii(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=ri[t],s=ri[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 ai([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 oi(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 P(e){return Math.round(e*10)/10}function si(){let e=document.createElementNS(qr,`defs`),t=document.createElementNS(qr,`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(qr,`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 ci(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 li(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));Zr(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function ui(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function di(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}function fi(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var pi=1e3,mi=new WeakMap;function hi(e,t){return e.length<=1e3?fi(e)||`&nbsp;`:`${fi(e.slice(0,pi))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function gi(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">${hi(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function _i(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?gi(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${hi(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(gi(a)),i.join(``)}function vi(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 yi(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&&mi.set(r,o)}}function bi(e){let t=mi.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function xi(e){return e.deletion?2*e.line-1:2*e.line}function Si(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Ci(e,t){if(e.length===0)return``;let n=e.map(xi),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}">
142
+ </details>`}function N(e){return e.simple===e.technical?_(e.simple):`<span data-reg="simple">${_(e.simple)}</span><span data-reg="technical">${_(e.technical)}</span>`}var Ti=`http://www.w3.org/2000/svg`,Ei=new WeakSet,Di=new WeakMap;function Oi(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){Vi(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&&Bi(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&&Bi(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`)&&(Bi(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=n.dataset.diagramMode===`map`?`diagram`:`map`;e.showView(r),document.querySelector(`.prb-view[data-view="${r}"] [data-diagram-mode="${r}"]`)?.focus()}}}),{layout:ki,show:Ai}}function ki(){for(let e of document.querySelectorAll(`[data-map-board]`))ji(e),Mi(e)}function Ai(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=_i({stored:e,sections:Ui(),reviewedSha:e.commitSha,register:Hi()}),ki())}function ji(e){if(Ei.has(e)||typeof ResizeObserver>`u`)return;Ei.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Mi(e)}))}).observe(e)}function Mi(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(zi());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?Ni(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=Di.get(e),_=g&&g.width===h?g.edges:new Set;Di.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=Pi(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Pi(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ii(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)=>Li(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(Ti,`path`);b.setAttribute(`d`,`M${P(u.x)},${P(u.y)} C${P(h.x)},${P(h.y)} ${P(g.x)},${P(g.y)} ${P(y.x)},${P(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 te=e.offsetWidth,ne=e.offsetHeight,re=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Li(l,e);return{left:t.x-te/2,top:t.y-ne/2,right:t.x+te/2,bottom:t.y+ne/2}}).find(e=>![...m,...p,...f].some(t=>Ri(e,t,2)));if(!re){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(re),e.style.left=`${Math.round(re.left)}px`,e.style.top=`${Math.round(re.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Ni(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 Pi(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 Fi={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Ii(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=Fi[t],s=Fi[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 Li([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 Ri(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 P(e){return Math.round(e*10)/10}function zi(){let e=document.createElementNS(Ti,`defs`),t=document.createElementNS(Ti,`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(Ti,`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 Bi(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 Vi(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));ki(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Hi(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Ui(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}function Wi(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Gi=1e3,Ki=new WeakMap;function qi(e,t){return e.length<=1e3?Wi(e)||`&nbsp;`:`${Wi(e.slice(0,Gi))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Ji(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">${qi(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Yi(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?Ji(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${qi(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Ji(a)),i.join(``)}function Xi(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 Zi(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&&Ki.set(r,o)}}function Qi(e){let t=Ki.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function $i(e){return e.deletion?2*e.line-1:2*e.line}function ea(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function ta(e,t){if(e.length===0)return``;let n=e.map($i),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}">
135
143
  <button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
136
144
  <span class="prb-code-nav-count" aria-live="polite">${s}</span>
137
145
  <button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
138
- </span>`}function wi(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:Si(i)}}function Ti(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Ei(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Si)}function Di(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Si(t):void 0}function Oi(e,t){return Math.max(e,+!t)+1}var ki=8;function Ai(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 ji(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Mi(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 Ni(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function Pi(e){if(!e.hasAttribute(`data-expanded`))return;let t=Ai(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ji({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function Fi(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 Ii=!1;function Li(){Ii||(Ii=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))Pi(e)}))}function Ri(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Mi(n):null;t?(e.setAttribute(`data-expanded`,``),Pi(e),Li()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),Fi(e),n&&r&&Ni(n,r);let i=t?Ai(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-ki)}var zi={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 Bi(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:zi[t.slice(n+1).toLowerCase()]??null}function Vi(e){let t=new Set;for(let n of e){let e=Bi(n);e&&t.add(e)}return[...t]}var Hi={ruby:()=>O(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([19,20,21,22,23,24,25,26,27,28,29])),javascript:()=>O(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([30,21])),typescript:()=>O(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([31,26])),jsx:()=>O(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([32,24])),tsx:()=>O(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([33,27])),json:()=>O(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>O(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([34,29])),markdown:()=>O(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>O(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([35,22,20,21])),css:()=>O(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([36,20])),scss:()=>O(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([37,20])),sql:()=>O(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([38,25])),python:()=>O(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>O(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([39,23])),kotlin:()=>O(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>O(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>O(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>O(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([40,28])),docker:()=>O(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>O(()=>import(`./chunk-DswuEJGm.js`),[])},Ui=`github-light-default`,Wi=null,Gi=new Map;function Ki(){return Wi??=Promise.all([O(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([41,3])),O(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([42,3])),O(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(O(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Wi}function qi(e){let t=Gi.get(e);return t||(t=Ki().then(async t=>t?(await t.loadLanguage(Hi[e]),!0):!1).catch(()=>!1),Gi.set(e,t)),t.then(e=>e?Ki():null)}var Ji={async preload(e){await qi(e)},async tokenize(e,t){let n=await qi(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Ui}),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 Yi(e,t=Ji){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Xi=/^#[0-9a-f]{3,8}$/i;function Zi(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Xi.test(e.color)?`<span style="color:${e.color}">${fi(e.content)}</span>`:fi(e.content)).join(``)}function Qi(e){return e.length>1e3?e.slice(0,pi):e}function $i(e,t,n){if(!e||t===``)return;let r=Zi(Qi(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 ea(e,t,n=Ji){let r=Bi(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(Qi).join(`
139
- `),r);if(a()){o&&t.lines.forEach((e,n)=>{$i(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=>Qi(e.text)).join(`
140
- `),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;$i(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function ta(e,t=Ji){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Hi)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Zi(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var F=document.body,na=F.dataset.apiBase??``,ra=F.dataset.token??``,ia=F.dataset.editorLabel??``,aa=F.dataset.editorTemplate??``,oa=F.dataset.repoPath??``,sa=F.dataset.explainPrompt??``,ca=F.dataset.sessionId??``;function I(e){return`${na}${e}?t=${encodeURIComponent(ra)}`}function L(e){fetch(I(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var la=Qn({endpoint:I,showDiagrams:()=>xa(`diagram`),showMap:()=>xa(`map`),showChangeMap:e=>ua.show(e)}),ua=Xr({endpoint:I,showView:e=>xa(e)}),da=null,fa=`the whole change`;function pa(e){let t=bt(e,ma),n=vt(t);window.location.hash!==n&&history.pushState(t,``,n),ha(t)}var R=null,ma=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function ha(e){let t=bt(e,ma);if(t!==e){let{kind:e,view:n,focus:r,...i}=history.state??{};history.replaceState({...i,...t},``,vt(t))}let n=!R||!Et(R,t);R=t,n&&(t.kind===`view`?Ca(t.view):Da(t.sectionId)),va(t.focus??null)}var ga={history,apply:ha},_a=Lt(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?qo(e):Jo(e),onClose:Jo});function va(e){At(document.querySelector(`.prb-body`),document,e),_a.closeAll(),e===`buddy`&&mo()}function ya(e){R&&(R.focus===e?Ot(R,ga):Dt(R,e,ga))}window.addEventListener(`keydown`,e=>{!R||!kt(e,document,!!R.focus)||(e.preventDefault(),Ot(R,ga))},!0);var ba=[`map`,`diagram`];function xa(e){pa({kind:`view`,view:e,...ba.includes(e)&&ba.includes(R?.focus??``)?{focus:e}:{}})}function Sa(e){pa({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function Ca(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===e));L({event:`view_opened`,view:e}),e===`diagram`&&la.drawPane(),e===`map`&&ua.layout(),wa(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function wa(){Kt(),da=null,fa=`the whole change`,Oa()}function Ta(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)}function Ea(){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`)&&Ta(e,!0)}}function Da(e){Ca(`guide`),Ea(),Gt(e);let t=Ut(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);L({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),da=e,fa=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Oa()}function Oa(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=fa)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function ka(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Aa(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}=ka(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),L({event:`file_opened`,fromFinding:i,targeted:r>0}),await ja(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}async function ja(e,t,n){try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${I(`/file`)}${a}`),s=await o.json();if(!o.ok){e.innerHTML=`<p class="prb-code-status">${z(s?.error??`Could not read that file.`)}</p>`;return}Ma(e,s,n)}catch{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}function Ma(e,t,n){let{cited:r,centre:i,expand:a}=n,o=_i(t,r),s=aa&&oa?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="${z(t.path)}" data-open-line="${r||t.from}">${z(`Open in ${ia||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${z(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${z(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${z(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${Oi(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>${z(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Ci(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">
146
+ </span>`}function na(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:ea(i)}}function ra(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function ia(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(ea)}function aa(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?ea(t):void 0}function oa(e,t){return Math.max(e,+!t)+1}var sa=8;function ca(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 la(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function ua(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 da(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function fa(e){if(!e.hasAttribute(`data-expanded`))return;let t=ca(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=la({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function pa(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 ma=!1;function ha(){ma||(ma=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))fa(e)}))}function ga(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?ua(n):null;t?(e.setAttribute(`data-expanded`,``),fa(e),ha()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),pa(e),n&&r&&da(n,r);let i=t?ca(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-sa)}var _a={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 va(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:_a[t.slice(n+1).toLowerCase()]??null}function ya(e){let t=new Set;for(let n of e){let e=va(n);e&&t.add(e)}return[...t]}var ba={ruby:()=>O(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([19,20,21,22,23,24,25,26,27,28,29])),javascript:()=>O(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([30,21])),typescript:()=>O(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([31,26])),jsx:()=>O(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([32,24])),tsx:()=>O(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([33,27])),json:()=>O(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>O(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([34,29])),markdown:()=>O(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>O(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([35,22,20,21])),css:()=>O(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([36,20])),scss:()=>O(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([37,20])),sql:()=>O(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([38,25])),python:()=>O(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>O(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([39,23])),kotlin:()=>O(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>O(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>O(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>O(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([40,28])),docker:()=>O(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>O(()=>import(`./chunk-DswuEJGm.js`),[])},xa=`github-light-default`,Sa=null,Ca=new Map;function wa(){return Sa??=Promise.all([O(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([41,3])),O(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([42,3])),O(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(O(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Sa}function Ta(e){let t=Ca.get(e);return t||(t=wa().then(async t=>t?(await t.loadLanguage(ba[e]),!0):!1).catch(()=>!1),Ca.set(e,t)),t.then(e=>e?wa():null)}var Ea={async preload(e){await Ta(e)},async tokenize(e,t){let n=await Ta(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:xa}),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 Da(e,t=Ea){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Oa=/^#[0-9a-f]{3,8}$/i;function ka(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Oa.test(e.color)?`<span style="color:${e.color}">${Wi(e.content)}</span>`:Wi(e.content)).join(``)}function Aa(e){return e.length>1e3?e.slice(0,Gi):e}function ja(e,t,n){if(!e||t===``)return;let r=ka(Aa(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 Ma(e,t,n=Ea){let r=va(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(Aa).join(`
147
+ `),r);if(a()){o&&t.lines.forEach((e,n)=>{ja(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=>Aa(e.text)).join(`
148
+ `),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;ja(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Na(e,t=Ea){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in ba)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=ka(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var F=document.body,Pa=F.dataset.apiBase??``,Fa=F.dataset.token??``,Ia=F.dataset.editorLabel??``,La=F.dataset.editorTemplate??``,Ra=F.dataset.repoPath??``,za=F.dataset.explainPrompt??``,Ba=F.dataset.sessionId??``;function I(e){return`${Pa}${e}?t=${encodeURIComponent(Fa)}`}function L(e){fetch(I(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Va=Ar({endpoint:I,showDiagrams:()=>$a(`diagram`),showMap:()=>$a(`map`),showChangeMap:e=>Ha.show(e)}),Ha=Oi({endpoint:I,showView:e=>$a(e)}),Ua=null,Wa=`the whole change`;function Ga(e){let t=bt(e,Ka),n=vt(t);window.location.hash!==n&&history.pushState(t,``,n),qa(t)}var R=null,Ka=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function qa(e){let t=bt(e,Ka);if(t!==e){let{kind:e,view:n,focus:r,...i}=history.state??{};history.replaceState({...i,...t},``,vt(t))}let n=!R||!Et(R,t);R=t,n&&(t.kind===`view`?to(t.view):ao(t.sectionId)),Xa(t.focus??null)}var Ja={history,apply:qa},Ya=Lt(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Ts(e):Es(e),onClose:Es});function Xa(e){At(document.querySelector(`.prb-body`),document,e),Ya.closeAll(),e===`buddy`&&Ko()}function Za(e){R&&(R.focus===e?Ot(R,Ja):Dt(R,e,Ja))}window.addEventListener(`keydown`,e=>{!R||!kt(e,document,!!R.focus)||(e.preventDefault(),Ot(R,Ja))},!0);var Qa=[`map`,`diagram`];function $a(e){Ga({kind:`view`,view:e,...Qa.includes(e)&&Qa.includes(R?.focus??``)?{focus:e}:{}})}function eo(e){Ga({kind:`section`,sectionId:e,...R?.focus===`guide`?{focus:`guide`}:{}})}function to(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===e));L({event:`view_opened`,view:e}),e===`diagram`&&Va.drawPane(),e===`map`&&Ha.layout(),no(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function no(){nn(),Ua=null,Wa=`the whole change`,oo()}function ro(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)}function io(){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`)&&ro(e,!0)}}function ao(e){to(`guide`),io(),tn(e);let t=$t(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);L({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),Ua=e,Wa=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,oo()}function oo(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Wa)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function so(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function co(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}=so(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),L({event:`file_opened`,fromFinding:i,targeted:r>0}),await lo(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}async function lo(e,t,n){try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${I(`/file`)}${a}`),s=await o.json();if(!o.ok){e.innerHTML=`<p class="prb-code-status">${z(s?.error??`Could not read that file.`)}</p>`;return}uo(e,s,n)}catch{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}function uo(e,t,n){let{cited:r,centre:i,expand:a}=n,o=Yi(t,r),s=La&&Ra?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="${z(t.path)}" data-open-line="${r||t.from}">${z(`Open in ${Ia||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${z(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${z(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${z(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${oa(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>${z(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${ta(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">
141
149
  <span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
142
150
  ${c}
143
151
  ${s}
@@ -145,7 +153,7 @@ import{a as e,i as t,o as n,t as r,u as i}from"./chunk-B5CvMZtt.js";import{A as
145
153
  </div>
146
154
  ${f}
147
155
  <div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
148
- ${l}`,yi(e,t),Pi(e),Fi(e),(n.focus?Ti(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),ea(e,t)}async function Na(e,t,n){let r=wi(t,n);if(!r)return;let i=Ti(e,r.anchor);if(i)t.outerHTML=Ci(Ei(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await ja(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 Pa(e,t,n){let r=`${oa.replace(/\/$/,``)}/${e}`,i=aa.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));L({event:`editor_opened`,fromFinding:n}),window.location.href=i}var B=document.querySelector(`[data-ask-log]`);B&&B.querySelector(`.prb-msg`)&&B.scrollTo({top:B.scrollHeight});var Fa=document.querySelector(`[data-ask-form]`),V=Fa?.querySelector(`textarea`);function Ia(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=ae(t)+ge(t)):n.textContent=t,B?.appendChild(n),B?.scrollTo({top:B.scrollHeight}),n}function La(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight}),e}var H=null,U=!!B?.querySelector(`[data-ask-pending]`);function Ra(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function za(e,t=`free_text`){let n=e.trim();if(!n||H||U)return;document.querySelector(`.prb-ask-empty`)?.remove(),Ia(`user`,n);let r=La();H=new AbortController,Ba(!0);try{let e=await fetch(I(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:da,source:t}),signal:H.signal}),i=await e.json().catch(()=>null);if(e.status===409&&(i?.running||i?.updating)){window.location.reload();return}if(r.remove(),i?.stopped){Ra();return}if(!e.ok||!i?.answer){Ia(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Ia(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(Ra(),V&&!V.value&&(V.value=n)):Ia(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{H=null,Ba(!1)}}function Ba(e){let t=Fa?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),V&&(V.disabled=e);for(let t of document.querySelectorAll(Va))t.disabled=e;e&&_a.closeAll(),e||V?.focus()}var Va=`[data-suggestion], .pr-helper-explain-simply-button`;function Ha(){let e=Fa?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(I(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{H?.abort()})}Fa?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||U)return Ha();let t=V?.value??``;V&&(V.value=``),za(t,Wa(t))}),U&&Ba(!0);var Ua=null;function Wa(e){return Ua&&e.includes(Ua.text)?Ua.source:`free_text`}V?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Fa?.requestSubmit())}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function Ga(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Ka(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function qa(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&&$a(n,t,`questions`),ao()}function Ja(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||ca})).filter(e=>e.id)}async function Ya(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Xa(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=ca: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(Za()),$a(n,t||e.dataset.settled===`true`,`issues`),so())}function Za(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=zt,e.textContent=`Dismissed by you`,e}var Qa=new WeakMap;function $a(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Qa.set(e,{parent:t,before:e.nextElementSibling}),ro(n).append(e),t&&no(t)}else eo(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();io(n)}}function eo(e,t){let n=Qa.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=to(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function to(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function no(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function ro(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 io(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;if(t.toggleAttribute(`data-nothing-open`,r===i),e===`questions`){n.textContent=`Answered (${i})`;return}n.textContent=Vt(oo())}function ao(){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`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=Ht(e.length,t)),co(`questions`,e.length,t,`question`,`answered`)}function oo(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0;for(let r of e){let e=r.dataset.settled===`true`,i=r.dataset.dismissed===`true`&&r.dataset.stale!==`true`;!e&&!i?t+=1:!e&&i&&(n+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n}}function so(){let e=oo();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`),n=t?.querySelector(`.pr-helper-findings-progress`);!n&&t&&e.done>0&&(n=document.createElement(`div`),n.className=`pr-helper-findings-progress`,n.setAttribute(`role`,`status`),t.querySelector(`.prb-doc-title`)?.after(n)),n&&(n.innerHTML=Bt(e.total,e.open,Rt(e))),co(`issues`,e.total,e.open,`issue`,Rt(e))}function co(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}`))}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){Ta(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){xa(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){xa(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){Sa(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){Pa(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-deletion-toggle]`);if(s){vi(s);return}let c=t.closest(`[data-code-expand]`);if(c){let e=c.closest(`.prb-code`);e&&Ri(e,!e.hasAttribute(`data-expanded`));return}let l=t.closest(`[data-change-step]`);if(l){let e=l.closest(`[data-change-navigator]`),t=l.closest(`.prb-code`);e&&t&&!l.disabled&&Na(t,e,l.dataset.changeStep===`previous`?`previous`:`next`);return}let u=t.closest(`[data-full-line]`);if(u){let e=bi(u);e&&ta(e);return}let d=t.closest(`[data-expand-file]`);if(d?.dataset.expandFile){let e=d.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);ja(e,d.dataset.expandFile,{cited:Number(d.dataset.expandCited)||0,centre:Number(d.dataset.expandLine)||0,expand:Number(d.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:Di(t)})}return}let f=t.closest(`[data-focus-toggle]`);if(f?.dataset.focusToggle){ya(f.dataset.focusToggle);return}let p=t.closest(`[data-prompt-toggle]`);if(p){Lo(p.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let m=t.closest(`[data-file]`);if(m?.dataset.file){Aa(m);return}let h=Wt(t);if(h){Sa(h);return}let g=t.closest(`[data-question-answered]`);if(g?.dataset.questionAnswered){qa(g,g.dataset.answered!==`true`);let e=Ka();Ga(e),L({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let _=t.closest(`[data-issue-dismissed]`);if(_?.dataset.issueDismissed){Xa(_,_.dataset.stale===`true`||_.dataset.dismissed!==`true`);let e=Ja();Ya(e),L({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let v=t.closest(`[data-suggestion]`);if(v){za(v.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){mo(),za(sa,`explain_simply`);return}let y=t.closest(`[data-prompt-use]`);if(y?.dataset.promptUse){Ro(y.dataset.promptUse);return}let ee=t.closest(`[data-prompt-edit]`);if(ee?.dataset.promptEdit){ts(ee.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){ts(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(Ot(R,ga),fo(e!==`buddy`)):fo(!uo())}});var W=document.querySelector(`.prb-body`),lo=document.querySelector(`.prb-ask`);function uo(){return!!lo&&getComputedStyle(lo).display!==`none`}function fo(e){W&&(W.dataset.ask=e?`open`:`closed`),po(e)}function po(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function mo(){R?.focus&&R.focus!==`buddy`&&Ot(R,ga),fo(!0)}function ho(){po(uo())}window.addEventListener(`resize`,ho),r(I(`/restart`));var go=document.querySelector(`[data-file-filter]`),_o=document.querySelector(`[data-file-count]`),vo=document.querySelector(`[data-file-none]`);function yo(){let e=(go?.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}`}vo&&(vo.hidden=n>0),_o&&(_o.textContent=e?`${t} of ${bo} file${bo===1?``:`s`}`:`${bo} file${bo===1?``:`s`}`)}var bo=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;go?.addEventListener(`input`,yo),go?.addEventListener(`keydown`,e=>{e.key===`Escape`&&go.value!==``&&(e.preventDefault(),go.value=``,yo())}),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(),Aa(n))});var xo=320,So=()=>Math.round(window.innerWidth/2),Co=e=>Math.round(Math.min(So(),Math.max(xo,e)));function wo(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function To(){return lo?Math.round(lo.getBoundingClientRect().width):xo}function Eo(e){fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!W||!lo)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=To(),r=e=>{wo(Co(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,Eo(To())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.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=Co(To()+n);wo(r),Eo(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),wo(null),Eo(null))}),G?.addEventListener(`dblclick`,()=>{wo(null),Eo(null)}),window.addEventListener(`resize`,()=>{uo()&&W?.style.getPropertyValue(`--ask-width`)&&wo(Co(To()))});var Do=3e4,Oo=document.visibilityState===`visible`?Date.now():null,ko=0;function Ao(){Oo!==null&&(ko+=Date.now()-Oo,Oo=Date.now())}function jo(){Ao();let e=Math.round(ko/1e3);return ko-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Oo=Date.now():(Ao(),Oo=null)}),setInterval(()=>{let e=jo();e>0&&L({event:`workspace_heartbeat`,visibleSeconds:e})},Do),window.addEventListener(`pagehide`,()=>{let e=I(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:jo()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Mo=document.querySelector(`[data-prompt-bank]`),No=document.querySelector(`[data-prompt-list]`),K=Po();function Po(){try{let e=JSON.parse(Mo?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Fo(){if(!No)return;No.innerHTML=K.map(e=>`<span class="prb-bank-item">
156
+ ${l}`,Zi(e,t),fa(e),pa(e),(n.focus?ra(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Ma(e,t)}async function fo(e,t,n){let r=na(t,n);if(!r)return;let i=ra(e,r.anchor);if(i)t.outerHTML=ta(ia(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await lo(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 po(e,t,n){let r=`${Ra.replace(/\/$/,``)}/${e}`,i=La.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));L({event:`editor_opened`,fromFinding:n}),window.location.href=i}var B=document.querySelector(`[data-ask-log]`);B&&B.querySelector(`.prb-msg`)&&B.scrollTo({top:B.scrollHeight});var mo=document.querySelector(`[data-ask-form]`),V=mo?.querySelector(`textarea`);function ho(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=ae(t)+ge(t)):n.textContent=t,B?.appendChild(n),B?.scrollTo({top:B.scrollHeight}),n}function go(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight}),e}var H=null,U=!!B?.querySelector(`[data-ask-pending]`);function _o(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,B?.appendChild(e),B?.scrollTo({top:B.scrollHeight})}async function vo(e,t=`free_text`){let n=e.trim();if(!n||H||U)return;document.querySelector(`.prb-ask-empty`)?.remove(),ho(`user`,n);let r=go();H=new AbortController,yo(!0);try{let e=await fetch(I(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:Ua,source:t}),signal:H.signal}),i=await e.json().catch(()=>null);if(e.status===409&&(i?.running||i?.updating)){window.location.reload();return}if(r.remove(),i?.stopped){_o();return}if(!e.ok||!i?.answer){ho(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}ho(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(_o(),V&&!V.value&&(V.value=n)):ho(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{H=null,yo(!1)}}function yo(e){let t=mo?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),V&&(V.disabled=e);for(let t of document.querySelectorAll(bo))t.disabled=e;e&&Ya.closeAll(),e||V?.focus()}var bo=`[data-suggestion], .pr-helper-explain-simply-button`;function xo(){let e=mo?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(I(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{H?.abort()})}mo?.addEventListener(`submit`,e=>{if(e.preventDefault(),H||U)return xo();let t=V?.value??``;V&&(V.value=``),vo(t,Co(t))}),U&&yo(!0);var So=null;function Co(e){return So&&e.includes(So.text)?So.source:`free_text`}V?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),mo?.requestSubmit())}),V?.addEventListener(`input`,()=>{V&&(V.style.height=`auto`,V.style.height=`${Math.min(V.scrollHeight,140)}px`)});async function wo(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function To(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Eo(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&&Mo(n,t,`questions`),Ro()}function Do(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Ba})).filter(e=>e.id)}async function Oo(e){try{await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function ko(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Ba: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(Ao()),Mo(n,t||e.dataset.settled===`true`,`issues`),Bo())}function Ao(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Yt,e.textContent=`Dismissed by you`,e}var jo=new WeakMap;function Mo(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&jo.set(e,{parent:t,before:e.nextElementSibling}),Io(n).append(e),t&&Fo(t)}else No(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Lo(n)}}function No(e,t){let n=jo.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Po(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Po(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Fo(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Io(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 Lo(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;if(t.toggleAttribute(`data-nothing-open`,r===i),e===`questions`){n.textContent=`Answered (${i})`;return}n.textContent=Zt(zo())}function Ro(){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`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=Qt(e.length,t)),Vo(`questions`,e.length,t,`question`,`answered`)}function zo(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0;for(let r of e){let e=r.dataset.settled===`true`,i=r.dataset.dismissed===`true`&&r.dataset.stale!==`true`;!e&&!i?t+=1:!e&&i&&(n+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n}}function Bo(){let e=zo();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`),n=t?.querySelector(`.pr-helper-findings-progress`);!n&&t&&e.done>0&&(n=document.createElement(`div`),n.className=`pr-helper-findings-progress`,n.setAttribute(`role`,`status`),t.querySelector(`.prb-doc-title`)?.after(n)),n&&(n.innerHTML=Xt(e.total,e.open,Rt(e))),Vo(`issues`,e.total,e.open,`issue`,Rt(e))}function Vo(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}`))}document.addEventListener(`focusin`,e=>Jt(e.target)),document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){ro(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){$a(r.dataset.viewNav);return}let i=t.closest(`[data-author-context-toggle]`);if(i){Gt(i);return}let a=t.closest(`[data-author-context-reveal]`);if(a){qt(a);return}let o=t.closest(`[data-overview-nav]`);if(o?.dataset.overviewNav){$a(o.dataset.overviewNav===`guide`?`guide`:o.dataset.overviewNav);return}let s=t.closest(`[data-goto-section]`);if(s?.dataset.gotoSection){eo(s.dataset.gotoSection);return}let c=t.closest(`[data-open-editor]`);if(c?.dataset.openEditor){po(c.dataset.openEditor,Number(c.dataset.openLine)||1,!0);return}let l=t.closest(`[data-deletion-toggle]`);if(l){Xi(l);return}let u=t.closest(`[data-code-expand]`);if(u){let e=u.closest(`.prb-code`);e&&ga(e,!e.hasAttribute(`data-expanded`));return}let d=t.closest(`[data-change-step]`);if(d){let e=d.closest(`[data-change-navigator]`),t=d.closest(`.prb-code`);e&&t&&!d.disabled&&fo(t,e,d.dataset.changeStep===`previous`?`previous`:`next`);return}let f=t.closest(`[data-full-line]`);if(f){let e=Qi(f);e&&Na(e);return}let p=t.closest(`[data-expand-file]`);if(p?.dataset.expandFile){let e=p.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);lo(e,p.dataset.expandFile,{cited:Number(p.dataset.expandCited)||0,centre:Number(p.dataset.expandLine)||0,expand:Number(p.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:aa(t)})}return}let m=t.closest(`[data-focus-toggle]`);if(m?.dataset.focusToggle){Za(m.dataset.focusToggle);return}let h=t.closest(`[data-prompt-toggle]`);if(h){hs(h.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu]`))return;let g=t.closest(`[data-file]`);if(g?.dataset.file){co(g);return}let _=en(t);if(_){eo(_);return}let v=t.closest(`[data-question-answered]`);if(v?.dataset.questionAnswered){Eo(v,v.dataset.answered!==`true`),Vt(v);let e=To();wo(e),L({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let y=t.closest(`[data-issue-dismissed]`);if(y?.dataset.issueDismissed){ko(y,y.dataset.stale===`true`||y.dataset.dismissed!==`true`);let e=Do();Oo(e),L({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ee=t.closest(`[data-suggestion]`);if(ee){vo(ee.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Ko(),vo(za,`explain_simply`);return}let b=t.closest(`[data-prompt-use]`);if(b?.dataset.promptUse){gs(b.dataset.promptUse);return}let te=t.closest(`[data-prompt-edit]`);if(te?.dataset.promptEdit){Ns(te.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Ns(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(Ot(R,Ja),Wo(e!==`buddy`)):Wo(!Uo())}});var W=document.querySelector(`.prb-body`),Ho=document.querySelector(`.prb-ask`);function Uo(){return!!Ho&&getComputedStyle(Ho).display!==`none`}function Wo(e){W&&(W.dataset.ask=e?`open`:`closed`),Go(e)}function Go(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Ko(){R?.focus&&R.focus!==`buddy`&&Ot(R,Ja),Wo(!0)}function qo(){Go(Uo())}window.addEventListener(`resize`,qo),r(I(`/restart`));var Jo=document.querySelector(`[data-file-filter]`),Yo=document.querySelector(`[data-file-count]`),Xo=document.querySelector(`[data-file-none]`);function Zo(){let e=(Jo?.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}`}Xo&&(Xo.hidden=n>0),Yo&&(Yo.textContent=e?`${t} of ${Qo} file${Qo===1?``:`s`}`:`${Qo} file${Qo===1?``:`s`}`)}var Qo=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Jo?.addEventListener(`input`,Zo),Jo?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Jo.value!==``&&(e.preventDefault(),Jo.value=``,Zo())}),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(),co(n))});var $o=320,es=()=>Math.round(window.innerWidth/2),ts=e=>Math.round(Math.min(es(),Math.max($o,e)));function ns(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function rs(){return Ho?Math.round(Ho.getBoundingClientRect().width):$o}function is(e){fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var G=document.querySelector(`[data-ask-resize]`);G?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!W||!Ho)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=rs(),r=e=>{ns(ts(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,is(rs())};G.addEventListener(`pointermove`,r),G.addEventListener(`pointerup`,i),G.addEventListener(`pointercancel`,i)}),G?.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=ts(rs()+n);ns(r),is(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),ns(null),is(null))}),G?.addEventListener(`dblclick`,()=>{ns(null),is(null)}),window.addEventListener(`resize`,()=>{Uo()&&W?.style.getPropertyValue(`--ask-width`)&&ns(ts(rs()))});var as=3e4,os=document.visibilityState===`visible`?Date.now():null,ss=0;function cs(){os!==null&&(ss+=Date.now()-os,os=Date.now())}function ls(){cs();let e=Math.round(ss/1e3);return ss-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?os=Date.now():(cs(),os=null)}),setInterval(()=>{let e=ls();e>0&&L({event:`workspace_heartbeat`,visibleSeconds:e})},as),window.addEventListener(`pagehide`,()=>{let e=I(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:ls()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var us=document.querySelector(`[data-prompt-bank]`),ds=document.querySelector(`[data-prompt-list]`),K=fs();function fs(){try{let e=JSON.parse(us?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function ps(){if(!ds)return;ds.innerHTML=K.map(e=>`<span class="prb-bank-item">
149
157
  <button type="button" class="prb-bank-use" data-prompt-use="${z(e.id)}" title="${z(e.prompt)}">${z(e.name)}</button>
150
158
  <button type="button" class="prb-bank-edit" data-prompt-edit="${z(e.id)}" aria-label="Edit ${z(e.name)}">&#9998;</button>
151
- </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Wo()}async function Io(e){try{let t=await(await fetch(I(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}Fo()}function Lo(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Mo?.toggleAttribute(`data-collapsed`,e),No&&(No.hidden=e),fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function Ro(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=qt(V.value,t.prompt),mo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var zo=document.querySelector(`.prb-doc`),Bo=null,Vo=null;function Ho(){B&&(Vo?.(),Vo=et(B,{layout:`flat`,actions:rt.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Go(e,`selection`,t)}))}function Uo(){return[...tt.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:lt(e.id),label:e.name,section:ct}))]}function Wo(){zo&&(Bo?.(),Bo=et(zo,{triggerLabel:`Ask Buddy AI`,actions:Uo(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Go(e,`selection`,t)}))}function Go(e,t,n){Mt(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>Ko(e,t),send:e=>{mo(),za(e,`finding`)}})}function Ko(e,t){V&&(Ua={text:e,source:t},V.value=qt(V.value,e),mo(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function qo(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Ke(Uo());for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(H||U)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Jo(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=dt(n);_a.close(n),i&&Go(r,`finding`,i)}),Wo(),Ho(),Oe(document);var Yo=document.querySelector(`[data-prompt-dialog]`),Xo=document.querySelector(`[data-prompt-name]`),Zo=document.querySelector(`[data-prompt-text]`),Qo=document.querySelector(`[data-prompt-delete]`),$o=document.getElementById(`prb-prompt-title`),es=``;function ts(e){let t=K.find(t=>t.id===e);es=t?.id??``,$o&&($o.textContent=t?`Edit prompt`:`Save a prompt`),Xo&&(Xo.value=t?.name??``),Zo&&(Zo.value=t?.prompt??``),Qo&&(Qo.hidden=!t),Yo?.showModal(),Xo?.focus()}async function ns(){let e=Xo?.value.trim()??``,t=Zo?.value.trim()??``;if(!e||!t){(e?Zo:Xo)?.focus();return}let n=es?K.map(n=>n.id===es?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Yo?.close(),await Io(n)}async function rs(){if(!es)return;let e=K.filter(e=>e.id!==es);Yo?.close(),await Io(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Yo?.close()),Qo?.addEventListener(`click`,()=>void rs()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void ns());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),is=document.querySelector(`[data-fresh-check]`),Y=hs(q?.dataset.report),as=`prb-fresh-reopen`,os=ds(),ss=q?.dataset.dismissedSha,cs=us(q?.dataset.availability),X=ls(q?.dataset.remote);function ls(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function us(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ds(){try{return sessionStorage.getItem(as)!==null&&(sessionStorage.removeItem(as),!0)}catch{return!1}}os&&As(),is?.addEventListener(`click`,()=>void vs());var fs=document.querySelector(`[data-fetch-remote]`);fs&&(fetch(I(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(fs.hidden=!1)}).catch(()=>{}),fs.addEventListener(`click`,()=>void ps(fs)));async function ps(e){if(e.disabled)return;e.disabled=!0;let r=null;try{let e=await fetch(I(`/fetch`),{method:`POST`});e.ok&&(r=await e.json())}catch{}e.disabled=!1;let i=r??{repositories:1,fetched:0,failed:[],moved:0};t(n(),{kind:i.fetched<i.repositories?`failed`:`ready`,text:d(i)}),i.fetched>0&&await vs()}q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return os=!1,As();let n=t.closest(`[data-fresh-dismiss]`);n&&(ss=n.dataset.freshDismiss||void 0,os=!1,As(),ms())});function ms(){fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:ss??null})}).catch(()=>{})}function hs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var gs=jn(),_s=!1,Z=null;async function vs(){if(_s)return;_s=!0,ws(!0),Z&&await Z;let e=Ts(Y,X),t=await bs(!1);ws(!1),t&&ks(),_s=!1,t&&(Y?.code.state===`changed`||X!==null)&&ss!==void 0&&(ss=void 0,ms()),As(),ys(t?Ts(Y,X)===e?`No change`:`Updated`:`Could not check`)}function ys(e){J&&(J.textContent=e,window.setTimeout(js,2600))}async function bs(e){let t=gs.snapshot();try{let n=await(await fetch(`${I(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,cs=n.availability??null,X=n.remote??null,Es=n.kiss??null,n.kissDismissedSha!==void 0&&(Ds=n.kissDismissedSha??void 0),n.prState!==void 0&&Cs(n.prState);let r=An(n.standing);return r&&gs.current(t)&&xn(document,r),!0}catch{return!1}}async function xs(){if(_s||Z||!q)return;let e=Ts(Y,X),t=JSON.stringify(Es);Z=bs(!0);let n=await Z;Z=null,Ss=Date.now(),n&&(Ts(Y,X)!==e&&As(),JSON.stringify(Es)!==t&&ks())}var Ss=Date.now();function Cs(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=bn(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function ws(e){is&&(is.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function Ts(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Q=document.querySelector(`[data-kiss-fresh-region]`),Es=Os(Q?.dataset.freshness),Ds=Q?.dataset.dismissedSha;function Os(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ks(){Q&&(Q.innerHTML=yn(Q.dataset.reviewedSha??``,Es,{dismissedSha:Ds,actions:ra!==``}))}Q?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(Ds=t.dataset.kissFreshnessDismiss||void 0,ks(),fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:Ds??null})}).catch(()=>{}))});function As(){q&&(q.innerHTML=en(Y,{dismissedSha:ss,open:os,actions:ra!==``,availability:cs,remote:X}),js())}function js(){if(J&&(Y||X)){let{label:e,state:t}=$t(Y,X);J.textContent=e,J.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return Ms(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(I(`/prefs`),{method:`POST`,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 Ps(i);let a=t.closest(`[data-review-update]`);if(a)return void Ls(a);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function Ms(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>Ns(e,`Copied`),()=>Ns(e,`Select it`))}function Ns(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function Ps(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=Fs(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Rs}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=Fs(e)?null:zs(e);try{await fetch(I(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}Fs(e)&&Is(),window.location.reload()}function Fs(e){return e.closest(`.prb-fresh-notes p`)}function Is(){try{sessionStorage.setItem(as,`1`)}catch{}}async function Ls(e){let t=[...document.querySelectorAll(`[data-review-update]`)];for(let e of t)e.disabled=!0,e.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let n=!1,r=()=>{n||(n=!0,window.clearInterval(i),window.location.reload())},i=window.setInterval(async()=>{try{let e=await(await fetch(I(`/job`))).json();e.update&&e.update.phase!==`none`&&!fn(e.update.phase)&&r()}catch{}},500);try{await fetch(I(`/update`),{method:`POST`})}catch{}r()}var Rs=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function zs(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=Rs,t.appendChild(n),n}var Bs=Pn(document),Vs=null,Hs=Date.now();function Us(){Vs===null&&(Vs=window.setTimeout(()=>{Vs=null,Ws()},p(Date.now()-Hs)))}async function Ws(){try{let e=await(await fetch(I(`/job`))).json();if(U&&!e.ask||Ks&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Bs){let r=t[e];if(r){if(Fn(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(Ln(n,r.phase,r.progress),Rn(n)):Gs(n,r.progress)}}}catch{}Us()}function Gs(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 Ks=document.querySelector(`[data-diagram-running]`)!==null;(Bs.size>0||U||Ks)&&(Hs=Date.now(),Us());function qs(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function Js(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,Js(t),fetch(I(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Hs=Date.now(),Us()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,qs(t)}))}),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;r&&(t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(I(`/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=`Run KISS review`;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 Ys=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{ha(e.state??St(window.location.hash)??{kind:`view`,view:Ys})});var Xs=St(window.location.hash);Xs?ha(Xs):(R={kind:`view`,view:Ys},history.replaceState(R,``,window.location.pathname+window.location.search)),ho(),Oa();var Zs=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=>{Zs(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Zs(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let e=$.querySelector(`[data-menu-panel]`),t=$.querySelector(`[data-menu-items]`),n=$.querySelector(`[data-menu-confirm]`),r=$.querySelector(`[data-confirm-delete]`),i=()=>Jo($);$.addEventListener(`click`,e=>{let r=e.target,l=r?.closest(`[data-copy-id]`);if(l?.dataset.copyId){e.stopPropagation(),a(l,l.dataset.copyId);return}let u=r?.closest(`[data-pin-toggle]`);if(u){e.stopPropagation(),s(u);return}if(r?.closest(`[data-fresh-check], [data-fetch-remote]`)){_a.closeAll();return}let d=r?.closest(`[data-mark-status]`);if(d){e.stopPropagation(),o(d,`/state`,{complete:d.dataset.markStatus===`complete`},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0}));return}let f=r?.closest(`[data-lifecycle-set]`);if(f){e.stopPropagation(),o(f,`/lifecycle`,{state:f.dataset.lifecycleSet},e=>({lifecycle:On(e.lifecycle),queued:e.queued===!0}));return}let p=r?.closest(`[data-queue-action]`);if(p){e.stopPropagation(),o(p,`/queue`,{action:p.dataset.queueAction},e=>({lifecycle:On(e.lifecycle),queued:e.queued===!0}));return}if(r?.closest(`[data-delete]`)){e.stopPropagation(),t&&(t.hidden=!0),n&&(n.hidden=!1);return}if(r?.closest(`[data-cancel-delete]`)){e.stopPropagation(),i();return}r?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),c())});let o=async(t,n,r,i)=>{$.querySelector(`[data-menu-error]`)?.remove(),t.disabled=!0;let a=gs.begin(),o=null;try{let e=await fetch(I(n),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)}),t=await e.json().catch(()=>null);e.ok&&t?xn(document,i(t)):o=typeof t?.error==`string`?t.error:`That could not be changed.`}catch{o=`The workspace server did not answer. It may have stopped.`}finally{a()}if(t.disabled=!1,o===null)return void _a.closeAll();let s=document.createElement(`p`);s.className=`prb-menu-error`,s.setAttribute(`data-menu-error`,``),s.textContent=o,e?.append(s)},s=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let n=null;try{let e=await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(n=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,n===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=m(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=m(n)},c=async()=>{r&&(r.disabled=!0,r.textContent=`Deleting`);let t;try{let e=await fetch(I(`/delete`),{method:`POST`});if(e.ok)return void window.location.replace(`/`);t=(await e.json().catch(()=>null))?.error??`That could not be deleted.`}catch{t=`The workspace server did not answer. It may have stopped.`}r&&(r.disabled=!1,r.textContent=`Delete`),i();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e?.append(n)}}e(),setTimeout(()=>{Yi(Vi([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),i(window,()=>window.location.reload()),f(window,document.querySelector(`main.prb-doc`));var Qs=15e3,$s=6e4;function ec(){return ra!==``&&document.visibilityState===`visible`&&!Bs.has(`update`)}document.addEventListener(`visibilitychange`,()=>{ec()&&Date.now()-Ss>=Qs&&xs()}),window.setInterval(()=>{ec()&&xs()},$s);export{O as t};
159
+ </span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Ss()}async function ms(e){try{let t=await(await fetch(I(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);K=Array.isArray(t?.prompts)?t.prompts:K}catch{}ps()}function hs(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),us?.toggleAttribute(`data-collapsed`,e),ds&&(ds.hidden=e),fetch(I(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function gs(e){let t=K.find(t=>t.id===e);!t||!V||(V.value=rn(V.value,t.prompt),Ko(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}var _s=document.querySelector(`.prb-doc`),vs=null,ys=null;function bs(){B&&(ys?.(),ys=et(B,{layout:`flat`,actions:rt.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Cs(e,`selection`,t)}))}function xs(){return[...tt.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:lt(e.id),label:e.name,section:ct}))]}function Ss(){_s&&(vs?.(),vs=et(_s,{triggerLabel:`Ask Buddy AI`,actions:xs(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Cs(e,`selection`,t)}))}function Cs(e,t,n){Mt(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>ws(e,t),send:e=>{Ko(),vo(e,`finding`)}})}function ws(e,t){V&&(So={text:e,source:t},V.value=rn(V.value,e),Ko(),V.focus(),V.setSelectionRange(V.value.length,V.value.length),V.dispatchEvent(new Event(`input`)))}function Ts(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Ke(xs());for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(H||U)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Es(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=dt(n);Ya.close(n),i&&Cs(r,`finding`,i)}),Ss(),bs(),Oe(document);var Ds=document.querySelector(`[data-prompt-dialog]`),Os=document.querySelector(`[data-prompt-name]`),ks=document.querySelector(`[data-prompt-text]`),As=document.querySelector(`[data-prompt-delete]`),js=document.getElementById(`prb-prompt-title`),Ms=``;function Ns(e){let t=K.find(t=>t.id===e);Ms=t?.id??``,js&&(js.textContent=t?`Edit prompt`:`Save a prompt`),Os&&(Os.value=t?.name??``),ks&&(ks.value=t?.prompt??``),As&&(As.hidden=!t),Ds?.showModal(),Os?.focus()}async function Ps(){let e=Os?.value.trim()??``,t=ks?.value.trim()??``;if(!e||!t){(e?ks:Os)?.focus();return}let n=Ms?K.map(n=>n.id===Ms?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Ds?.close(),await ms(n)}async function Fs(){if(!Ms)return;let e=K.filter(e=>e.id!==Ms);Ds?.close(),await ms(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Ds?.close()),As?.addEventListener(`click`,()=>void Fs()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Ps());var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-status]`),Is=document.querySelector(`[data-fresh-check]`),Y=qs(q?.dataset.report),Ls=`prb-fresh-reopen`,Rs=Us(),zs=q?.dataset.dismissedSha,Bs=Hs(q?.dataset.availability),X=Vs(q?.dataset.remote);function Vs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Hs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Us(){try{return sessionStorage.getItem(Ls)!==null&&(sessionStorage.removeItem(Ls),!0)}catch{return!1}}Rs&&cc(),Is?.addEventListener(`click`,()=>void Xs());var Ws=document.querySelector(`[data-fetch-remote]`);Ws&&(fetch(I(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Ws.hidden=!1)}).catch(()=>{}),Ws.addEventListener(`click`,()=>void Gs(Ws)));async function Gs(e){if(e.disabled)return;e.disabled=!0;let r=null;try{let e=await fetch(I(`/fetch`),{method:`POST`});e.ok&&(r=await e.json())}catch{}e.disabled=!1;let i=r??{repositories:1,fetched:0,failed:[],moved:0};t(n(),{kind:i.fetched<i.repositories?`failed`:`ready`,text:o(i)}),i.fetched>0&&await Xs()}q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Rs=!1,cc();let n=t.closest(`[data-fresh-dismiss]`);n&&(zs=n.dataset.freshDismiss||void 0,Rs=!1,cc(),Ks())});function Ks(){fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:zs??null})}).catch(()=>{})}function qs(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Js=lr(),Ys=!1,Z=null;async function Xs(){if(Ys)return;Ys=!0,nc(!0),Z&&await Z;let e=rc(Y,X),t=await Qs(!1);nc(!1),t&&sc(),Ys=!1,t&&(Y?.code.state===`changed`||X!==null)&&zs!==void 0&&(zs=void 0,Ks()),cc(),Zs(t?rc(Y,X)===e?`No change`:`Updated`:`Could not check`)}function Zs(e){J&&(J.textContent=e,window.setTimeout(lc,2600))}async function Qs(e){let t=Js.snapshot();try{let n=await(await fetch(`${I(`/freshness`)}${e?`&quiet=1`:``}`)).json();Y=n.report??null,Bs=n.availability??null,X=n.remote??null,ic=n.kiss??null,n.kissDismissedSha!==void 0&&(ac=n.kissDismissedSha??void 0),n.prState!==void 0&&tc(n.prState);let r=cr(n.standing);return r&&Js.current(t)&&$n(document,r),!0}catch{return!1}}async function $s(){if(Ys||Z||!q)return;let e=rc(Y,X),t=JSON.stringify(ic);Z=Qs(!0);let n=await Z;Z=null,ec=Date.now(),n&&(rc(Y,X)!==e&&cc(),JSON.stringify(ic)!==t&&sc())}var ec=Date.now();function tc(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Qn(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function nc(e){Is&&(Is.disabled=e),J&&e&&(J.textContent=`Checking…`,J.dataset.state=`checking`)}function rc(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var Q=document.querySelector(`[data-kiss-fresh-region]`),ic=oc(Q?.dataset.freshness),ac=Q?.dataset.dismissedSha;function oc(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function sc(){Gn(ic?.state===`changed`),Q&&(Q.innerHTML=Ln(Q.dataset.reviewedSha??``,ic,{dismissedSha:ac,actions:Fa!==``}))}Q?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(ac=t.dataset.kissFreshnessDismiss||void 0,sc(),fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:ac??null})}).catch(()=>{}))});function cc(){q&&(q.innerHTML=dn(Y,{dismissedSha:zs,open:Rs,actions:Fa!==``,availability:Bs,remote:X}),lc())}function lc(){if(J&&(Y||X)){let{label:e,state:t}=un(Y,X);J.textContent=e,J.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return uc(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(I(`/prefs`),{method:`POST`,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 fc(i);let a=t.closest(`[data-review-update]`);if(a)return void hc(a);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function uc(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>dc(e,`Copied`),()=>dc(e,`Select it`))}function dc(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function fc(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=pc(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${gc}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=pc(e)?null:_c(e);try{await fetch(I(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}pc(e)&&mc(),window.location.reload()}function pc(e){return e.closest(`.prb-fresh-notes p`)}function mc(){try{sessionStorage.setItem(Ls,`1`)}catch{}}async function hc(e){let t=[...document.querySelectorAll(`[data-review-update]`)];for(let e of t)e.disabled=!0,e.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let n=!1,r=()=>{n||(n=!0,window.clearInterval(i),window.location.reload())},i=window.setInterval(async()=>{try{let e=await(await fetch(I(`/job`))).json();e.update&&e.update.phase!==`none`&&!Tn(e.update.phase)&&r()}catch{}},500);try{await fetch(I(`/update`),{method:`POST`})}catch{}r()}var gc=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function _c(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=gc,t.appendChild(n),n}var vc=fr(document),yc=null,bc=Date.now();function xc(){yc===null&&(yc=window.setTimeout(()=>{yc=null,Sc()},s(Date.now()-bc)))}async function Sc(){try{let e=await(await fetch(I(`/job`))).json();if(U&&!e.ask||wc&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of vc){let r=t[e];if(r){if(pr(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?(hr(n,r.phase,r.progress),gr(n)):Cc(n,r.progress)}}}catch{}xc()}function Cc(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 wc=document.querySelector(`[data-diagram-running]`)!==null;(vc.size>0||U||wc)&&(bc=Date.now(),xc());function Tc(e){let t=e.parentElement;if(!t)return;let n=t.querySelector(`.prb-job-retry-status`);n||(n=document.createElement(`p`),n.className=`prb-job-retry-status`,n.setAttribute(`role`,`status`),t.insertBefore(n,e.nextSibling)),n.textContent=`The retry could not be started. You can try again.`}function Ec(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);t&&(t.disabled=!0,t.textContent=`Retrying…`,Ec(t),fetch(I(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);bc=Date.now(),xc()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Tc(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(I(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=zt,dc(t,`Could not start. Try again`,2500)}))});var Dc={send:async e=>{let t=await fetch(I(`/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)=>{Vo(`kiss`,e,t,`recommendation`,`decided`),Vo(`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){Bn(r,zn(n),Dc);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(I(`/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 Oc=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{qa(e.state??St(window.location.hash)??{kind:`view`,view:Oc})});var kc=St(window.location.hash);kc?qa(kc):(R={kind:`view`,view:Oc},history.replaceState(R,``,window.location.pathname+window.location.search)),qo(),oo();var Ac=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=>{Ac(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Ac(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let e=$.querySelector(`[data-menu-panel]`),t=$.querySelector(`[data-menu-items]`),n=$.querySelector(`[data-menu-confirm]`),r=$.querySelector(`[data-confirm-delete]`),i=()=>Es($);$.addEventListener(`click`,e=>{let r=e.target,l=r?.closest(`[data-copy-id]`);if(l?.dataset.copyId){e.stopPropagation(),c(l,l.dataset.copyId);return}let u=r?.closest(`[data-pin-toggle]`);if(u){e.stopPropagation(),o(u);return}if(r?.closest(`[data-fresh-check], [data-fetch-remote]`)){Ya.closeAll();return}let d=r?.closest(`[data-mark-status]`);if(d){e.stopPropagation(),a(d,`/state`,{complete:d.dataset.markStatus===`complete`},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0}));return}let f=r?.closest(`[data-lifecycle-set]`);if(f){e.stopPropagation(),a(f,`/lifecycle`,{state:f.dataset.lifecycleSet},e=>({lifecycle:or(e.lifecycle),queued:e.queued===!0}));return}let p=r?.closest(`[data-queue-action]`);if(p){e.stopPropagation(),a(p,`/queue`,{action:p.dataset.queueAction},e=>({lifecycle:or(e.lifecycle),queued:e.queued===!0}));return}if(r?.closest(`[data-delete]`)){e.stopPropagation(),t&&(t.hidden=!0),n&&(n.hidden=!1);return}if(r?.closest(`[data-cancel-delete]`)){e.stopPropagation(),i();return}r?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),s())});let a=async(t,n,r,i)=>{$.querySelector(`[data-menu-error]`)?.remove(),t.disabled=!0;let a=Js.begin(),o=null;try{let e=await fetch(I(n),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)}),t=await e.json().catch(()=>null);e.ok&&t?$n(document,i(t)):o=typeof t?.error==`string`?t.error:`That could not be changed.`}catch{o=`The workspace server did not answer. It may have stopped.`}finally{a()}if(t.disabled=!1,o===null)return void Ya.closeAll();let s=document.createElement(`p`);s.className=`prb-menu-error`,s.setAttribute(`data-menu-error`,``),s.textContent=o,e?.append(s)},o=async e=>{let t=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let n=null;try{let e=await fetch(I(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:t})});e.ok&&(n=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,n===null){e.textContent=t?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=m(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(n)),e.textContent=m(n)},s=async()=>{r&&(r.disabled=!0,r.textContent=`Deleting`);let t;try{let e=await fetch(I(`/delete`),{method:`POST`});if(e.ok)return void window.location.replace(`/`);t=(await e.json().catch(()=>null))?.error??`That could not be deleted.`}catch{t=`The workspace server did not answer. It may have stopped.`}r&&(r.disabled=!1,r.textContent=`Delete`),i();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=t,e?.append(n)}}e(),setTimeout(()=>{Da(ya([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),i(window,()=>window.location.reload()),a(window,document.querySelector(`main.prb-doc`));var jc=15e3,Mc=6e4;function Nc(){return Fa!==``&&document.visibilityState===`visible`&&!vc.has(`update`)}document.addEventListener(`visibilitychange`,()=>{Nc()&&Date.now()-ec>=jc&&$s()}),window.setInterval(()=>{Nc()&&$s()},Mc);export{O as t};