prreviewbuddy 0.25.7 → 0.25.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -0
- package/dist/main.js +76 -9
- package/dist/{relative_time-CDvK_Zaj.js → relative_time-vn8Ex9E8.js} +847 -505
- package/dist/server.js +312 -42
- package/package.json +1 -1
- package/static/chunk-B80S6zbH.js +4 -4
- package/static/chunk-CIsM3PMS.js +1 -0
- package/static/{chunk-B9H2wUlQ.js → chunk-gBDI1-Cy.js} +1 -1
- package/static/reviews.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +48 -0
- package/static/workspace.js +44 -44
package/static/workspace.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-B80S6zbH.js","chunk-CQfKfv79.js","chunk-DsF7k-Jl.js","chunk-CeiETtR3.js","chunk-DqZGGQx6.js","chunk-CZus5tIC.js","chunk-LHD4D-55.js","chunk-DmHr41SG.js","chunk-oZJp8_Oh.js","chunk-Bd8oAEBF.js","chunk-Dy-Kn_BL.js","chunk-7inUl5Il.js","chunk-DEKSwylx.js","chunk-MLIlWKCY.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-B0xoFuVi.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./chunk-
|
|
3
|
-
`),r=[],
|
|
2
|
+
import{t as e}from"./chunk-CIsM3PMS.js";import{n as t,t as n}from"./chunk-gBDI1-Cy.js";function r(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}var i=`pr-helper-code-block`,a=`pr-helper-code-copy`,o=`\0`,s=``,c=/\u0000(\d+)\u0000/g,ee=/^\u0000\d+\u0000$/,l=/\u0001(\d+)\u0001/g,u=/^(?:https?:\/\/|#)/i;function te(e){let{text:t,blocks:n}=ne(e.replace(/[\u0000\u0001]/g,``));return re(ie(t),n)}function ne(e){let t=[],n=e.split(`
|
|
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*$`),s=[];for(i+=1;i<n.length&&!a.test(n[i]);)s.push(n[i]),i+=1;i+=1,r.push(`${o}${t.length}${o}`),t.push(s.join(`
|
|
4
4
|
`))}return{text:r.join(`
|
|
5
|
-
`),blocks:t}}function
|
|
6
|
-
`)){let e=o.trim();if(!e){a();continue}if(
|
|
5
|
+
`),blocks:t}}function re(e,t){return e.replace(c,(e,n)=>`<div class="${i}"><pre><code>${r(t[Number(n)])}</code></pre><button type="button" class="${a}" aria-label="Copy code">Copy</button></div>`)}function ie(e){let t=[],n=[],r=[],i=null,a=()=>{n.length&&t.push(`<p>${ae(n.join(` `))}</p>`),r.length&&t.push(`<blockquote>${ae(r.join(` `))}</blockquote>`),i&&t.push(`<${i.tag}>${i.items.map(e=>`<li>${ae(e)}</li>`).join(``)}</${i.tag}>`),n=[],r=[],i=null};for(let o of e.split(`
|
|
6
|
+
`)){let e=o.trim();if(!e){a();continue}if(ee.test(e)){a(),t.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){a(),t.push(`<hr>`);continue}let s=e.match(/^(#{1,6})\s+(.+)$/);if(s){a();let e=Math.min(s[1].length,3)+3;t.push(`<h${e}>${ae(s[2])}</h${e}>`);continue}let c=e.match(/^[-*+]\s+(.+)$/);if(c){i?.tag!==`ul`&&(a(),i={tag:`ul`,items:[]}),i.items.push(c[1]);continue}let l=e.match(/^\d{1,9}[.)]\s+(.+)$/);if(l){i?.tag!==`ol`&&(a(),i={tag:`ol`,items:[]}),i.items.push(l[1]);continue}let u=e.match(/^>\s?(.*)$/);if(u){r.length||a(),r.push(u[1]);continue}if(i&&i.items.length){i.items[i.items.length-1]+=` ${e}`;continue}if(r.length){r[r.length-1]+=` ${e}`;continue}n.push(e)}return a(),t.join(``)}function ae(e){let t=[];return r(e).replace(/`([^`\n]+)`/g,(e,n)=>(t.push(n),`${s}${t.length-1}${s}`)).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,t,n)=>u.test(n)?`<a href="${n}" target="_blank" rel="noopener noreferrer">${t}</a>`:e).replace(/\*\*([^*\n]+)\*\*/g,`<strong>$1</strong>`).replace(/__([^_\n]+)__/g,`<strong>$1</strong>`).replace(/(^|[^*\w])\*([^*\n]+)\*/g,`$1<em>$2</em>`).replace(/(^|[^_\w])_([^_\n]+)_(?![\w_])/g,`$1<em>$2</em>`).replace(l,(e,n)=>`<code>${t[Number(n)]}</code>`)}var oe=`pr-helper-selection-popover`,se=`pr-helper-selection-popover-expanded`,ce=`pr-helper-selection-copy-done`,le=8,d=8,ue=1e3,de=`Copy selected text`,fe=`Copy`,pe=`Copied`,me=`pr-helper-selection-popover-flat`,f=null;function he(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${r(e.id)}">${r(e.label)}</button>`}function ge(e){let t=new Map;for(let n of e){if(!n.section)continue;let e=t.get(n.section);e?e.push(n):t.set(n.section,[n])}return`${e.filter(e=>!e.section).map(he).join(``)}${[...t].map(([e,t])=>`
|
|
7
7
|
<div class="pr-helper-selection-menu-group">
|
|
8
|
-
<div class="pr-helper-selection-menu-heading">${
|
|
9
|
-
<div class="pr-helper-selection-menu-group-items">${
|
|
10
|
-
</div>`).join(``)}`}function
|
|
8
|
+
<div class="pr-helper-selection-menu-heading">${r(e)}</div>
|
|
9
|
+
<div class="pr-helper-selection-menu-group-items">${t.map(he).join(``)}</div>
|
|
10
|
+
</div>`).join(``)}`}function _e(e){if(e.layout===`flat`)return ve(e);let t=ge(e.actions);return`
|
|
11
11
|
<div class="pr-helper-selection-bar">
|
|
12
12
|
<button type="button" class="pr-helper-selection-trigger" data-selection-open>
|
|
13
13
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true">
|
|
14
14
|
<path d="M1.75 1h12.5A1.75 1.75 0 0 1 16 2.75v8.5A1.75 1.75 0 0 1 14.25 13H8.06l-3.5 2.63A.75.75 0 0 1 3.36 15v-2H1.75A1.75 1.75 0 0 1 0 11.25v-8.5A1.75 1.75 0 0 1 1.75 1Z"/>
|
|
15
15
|
</svg>
|
|
16
|
-
<span>${
|
|
16
|
+
<span>${r(e.triggerLabel??`Ask`)}</span>
|
|
17
17
|
</button>
|
|
18
|
-
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${
|
|
18
|
+
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${de}" aria-describedby="pr-helper-selection-tip">
|
|
19
19
|
<svg class="pr-helper-selection-copy-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true">
|
|
20
20
|
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/>
|
|
21
21
|
<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/>
|
|
@@ -24,81 +24,81 @@ import{t as e}from"./chunk-B9H2wUlQ.js";function t(e){return e.replace(/&/g,`&am
|
|
|
24
24
|
<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L1.22 8.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"/>
|
|
25
25
|
</svg>
|
|
26
26
|
</button>
|
|
27
|
-
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${
|
|
27
|
+
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${de}</span>
|
|
28
28
|
</div>
|
|
29
|
-
<div class="pr-helper-selection-menu">${
|
|
30
|
-
`}function
|
|
31
|
-
${
|
|
32
|
-
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${
|
|
33
|
-
</div>`}function
|
|
29
|
+
<div class="pr-helper-selection-menu">${t}</div>
|
|
30
|
+
`}function ve(e){return`<div class="pr-helper-selection-menu">
|
|
31
|
+
${ge(e.actions)}
|
|
32
|
+
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${fe}</button>
|
|
33
|
+
</div>`}function ye(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-le,a=i>=d?i:Math.min(t.bottom+le,window.innerHeight-r-d),o=Math.max(d,Math.min(t.left,window.innerWidth-n-d));e.style.top=`${Math.max(d,a)}px`,e.style.left=`${o}px`}function p(){m&&=(window.clearTimeout(m),0),f?.popover.remove(),f=null}var m=0;function be(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(ce),t&&(t.textContent=pe),n&&(n.textContent=pe),m&&window.clearTimeout(m),m=window.setTimeout(()=>xe(e),ue)}function xe(e){m&&=(window.clearTimeout(m),0),e.classList.remove(ce);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=de);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=fe)}async function Se(e,t){try{await navigator.clipboard.writeText(t)}catch(e){console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,e);let t=!1;try{t=document.execCommand(`copy`)}catch(e){console.warn(`PR Helper: clipboard fallback failed`,e)}if(!t)return}be(e)}function Ce(e,t){let n=window.getSelection();if(!n||n.isCollapsed||n.rangeCount===0)return null;let r=n.toString().trim();if(!r)return null;let i=n.getRangeAt(0);if(!e.contains(i.commonAncestorContainer))return null;if(t.onlyWithin||t.ignoreWithin){let e=i.commonAncestorContainer,n=e instanceof HTMLElement?e:e.parentElement;if(t.onlyWithin&&!n?.closest(t.onlyWithin)||t.ignoreWithin&&n?.closest(t.ignoreWithin))return null}let a=i.getBoundingClientRect();return a.width===0&&a.height===0?null:{text:r,rect:a}}function we(e,t){let n={},r=()=>{let r=Ce(e,t);if(!r){(!f||f.owner===n)&&p();return}if(f&&f.owner!==n&&p(),f)f.popover.classList.remove(se),xe(f.popover),f.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${oe} ${me}`:oe,i.innerHTML=_e(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){f?.text&&Se(i,f.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(se);let n=Ce(e,t);ye(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!f)return;let o=f.text;p(),t.onChoose(a,o)}),document.body.appendChild(i),f={popover:i,text:r.text,owner:n}}ye(f.popover,r.rect)},i=e=>{f&&e.target instanceof Node&&f.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!f)return;let e=window.getSelection();(!e||e.isCollapsed)&&p()},s=e=>{e.key===`Escape`&&p()},c=()=>p();return document.addEventListener(`mouseup`,i,!0),document.addEventListener(`keyup`,a,!0),e.addEventListener(`scroll`,c,!0),document.addEventListener(`selectionchange`,o),document.addEventListener(`keydown`,s),window.addEventListener(`scroll`,c,!0),()=>{document.removeEventListener(`mouseup`,i,!0),document.removeEventListener(`keyup`,a,!0),e.removeEventListener(`scroll`,c,!0),document.removeEventListener(`selectionchange`,o),document.removeEventListener(`keydown`,s),window.removeEventListener(`scroll`,c,!0),p()}}async function Te(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),Ee(e)}}function Ee(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch(e){return console.warn(`PR Helper: clipboard fallback failed`,e),!1}finally{t.remove()}}var h=`pr-helper-msg-copy`,De=`pr-helper-chat-actions`,Oe=`data-message-id`,ke=`data-copy-source`,Ae={idle:{icon:`<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>`,label:``,aria:`Copy message`},copied:{icon:`<path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>`,label:`Copied`,aria:`Copied`},failed:{icon:`<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>`,label:`Copy failed`,aria:`Copy failed`}};function je(e){return Me(`${ke}="${r(e)}"`)}function Me(e){let{icon:t,label:n,aria:r}=Ae.idle;return`<div class="${De}"><button type="button" class="${h}" ${e} aria-label="${r}"><span class="${h}-icon" aria-hidden="true">${Pe(t)}</span><span class="${h}-label"${n?``:` hidden`}>${n}</span></button></div>`}function Ne(e,t){let n=Ae[t],r=e.querySelector(`.${h}-icon`),i=e.querySelector(`.${h}-label`);r&&(r.innerHTML=Pe(n.icon)),i instanceof HTMLElement&&(i.textContent=n.label,i.hidden=n.label===``),e.setAttribute(`aria-label`,n.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Pe(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Fe=1400,Ie=`Copy`,Le=`Copied`,Re=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,g=new WeakMap;function ze(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${a}`),i=r?null:n.closest(`.${h}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?He(r):i&&Be(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Be(e,t){let n=Ve(e,t);We(e,n!==null&&await Te(n)?`copied`:`failed`)}function Ve(e,t){let n=e.getAttribute(ke);if(n!==null)return n;let r=e.getAttribute(Oe);return r&&t?t(r):null}async function He(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await Te(t.textContent??``):!1;!n&&t&&Ue(t),Ge(e,n?Le:Re,n)}function Ue(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function We(e,t){let n=g.get(e);n&&window.clearTimeout(n),Ne(e,t),g.set(e,window.setTimeout(()=>{Ne(e,`idle`),g.delete(e)},Fe))}function Ge(e,t,n){let r=g.get(e);r&&window.clearTimeout(r),e.textContent=t,e.classList.toggle(`copied`,n),g.set(e,window.setTimeout(()=>{e.textContent=Ie,e.classList.remove(`copied`),g.delete(e)},Fe))}var Ke=[{id:`explain`,label:`Explain`,instruction:`Explain this in simpler terms.`},{id:`is-problem`,label:`Is this actually a problem?`,instruction:`Is this actually a problem? Be specific about when it would and would not matter.`},{id:`better-implementation`,label:`Suggest a better implementation`,instruction:`Suggest a better implementation for this.`},{id:`author-question`,label:`Generate a question for the author`,instruction:`Generate a question I could ask the author about this.`},{id:`custom`,label:`Ask a question`}],qe=[{id:`add-to-chat`,label:`Add to chat`}],Je=800;function Ye(e){let t=e.replace(/\r\n/g,`
|
|
34
34
|
`).split(`
|
|
35
35
|
`).map(e=>e.replace(/\s+$/,``));for(;t.length&&!t[0].trim();)t.shift();for(;t.length&&!t[t.length-1].trim();)t.pop();let n=t.filter(e=>e.trim()).map(e=>e.match(/^[ \t]*/)[0].length),r=n.length?Math.min(...n):0,i=t.map(e=>e.slice(r)).join(`
|
|
36
36
|
`).replace(/\n{3,}/g,`
|
|
37
37
|
|
|
38
|
-
`);return i.trim()?(i.length>
|
|
38
|
+
`);return i.trim()?(i.length>Je?`${i.slice(0,Je).trimEnd()}…`:i).split(`
|
|
39
39
|
`).map(e=>`> ${e}`.trimEnd()).join(`
|
|
40
|
-
`):``}function
|
|
40
|
+
`):``}function Xe(e,t){let n=Ye(e);if(!n)return null;let r=[...Ke,...qe].find(e=>e.id===t);return r?r.instruction?`${n}\n\n${r.instruction}`:`${n}\n\n`:null}var Ze=`saved:`,Qe=`Your prompts`;function $e(e){return`${Ze}${e}`}function et(e){return e.startsWith(`saved:`)?e.slice(6):null}function tt(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var nt=`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 rt(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 it(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 at(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 ot(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var st=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`diagram`,`kiss`,`kissrecs`],ct=`#theme-`;function lt(e){return`#${e}`}function ut(e){return`${ct}${encodeURIComponent(e)}`}function dt(e){return e.kind===`view`?lt(e.view):ut(e.sectionId)}function ft(e){if(e.startsWith(ct)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return st.includes(t)?{kind:`view`,view:t}:null}function pt(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 mt(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var ht=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function gt(e){return`<details class="prb-update-alt">
|
|
41
41
|
<summary>Start a new review</summary>
|
|
42
|
-
<span>A brand new review, with its own findings and its own path through the change. Run <code>${
|
|
43
|
-
</details>`}var
|
|
42
|
+
<span>A brand new review, with its own findings and its own path through the change. Run <code>${r(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${r(e)}">Copy</button></span>
|
|
43
|
+
</details>`}var _t=`prreviewbuddy review --fresh`;function vt(e){return e?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`}:{label:`Check for updates`,state:`unknown`}}function yt(e,t={}){if(!e)return``;let n=e.code.state===`changed`,i=e.code.reason===`missing-commit`,a=t.dismissedSha!==void 0&&t.dismissedSha===e.code.latestSha;if(!t.open&&(!(n||i)||a))return``;let o=wt(e.code),s=[...o.facts,`checked ${r(pt(e.checkedAt))}`];return`<div class="prb-fresh" data-state="${n||i?`changed`:`quiet`}" role="status">
|
|
44
44
|
<div class="prb-fresh-head">
|
|
45
45
|
<span class="prb-fresh-dot" data-freshness="${o.state}" aria-hidden="true"></span>
|
|
46
|
-
<strong class="prb-fresh-title">${
|
|
46
|
+
<strong class="prb-fresh-title">${r(o.title)}</strong>
|
|
47
47
|
<span class="prb-fresh-facts">${s.join(` · `)}</span>
|
|
48
48
|
</div>
|
|
49
49
|
${o.consequence?`<p class="prb-fresh-say">${o.consequence}</p>`:``}
|
|
50
|
-
${
|
|
51
|
-
</div>`}function
|
|
52
|
-
${r?
|
|
50
|
+
${bt(e,t,n||i)}
|
|
51
|
+
</div>`}function bt(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?mt():``}
|
|
53
53
|
<button type="button" class="prb-fresh-quiet" data-fresh-recheck>Check review status</button>
|
|
54
|
-
${r?
|
|
54
|
+
${r?gt(_t):``}
|
|
55
55
|
${i}
|
|
56
|
-
${
|
|
57
|
-
</div>`}function
|
|
56
|
+
${xt(e,t,n,r===!0)}
|
|
57
|
+
</div>`}function xt(e,t,n,i){let a=[i?r(ht):``,Tt(e.code,e.checkout.reason!==`no-pull-request`),Et(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${r(e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(a.length===0)return``;let o=`<div class="prb-fresh-notes">${a.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
|
|
58
58
|
<summary>More details</summary>
|
|
59
59
|
${o}
|
|
60
|
-
</details>`:o}function
|
|
61
|
-
<p><strong>This KISS review describes commit ${
|
|
60
|
+
</details>`:o}function St(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Ct(e){return e?`<code title="${r(e)}">${r(e.slice(0,7))}</code>`:``}function _(e){return e?[`reviewed ${Ct(e)}`]:[]}function wt(e){if(e.state===`current`)return{state:`current`,title:`Review up to date`,facts:_(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[..._(e.reviewedSha),...St(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:[..._(e.reviewedSha),...t,...St(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:_(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:_(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:_(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 Tt(e,t){if(!e.comparison)return``;let n=`<code>${r(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Ct(e.reviewedSha)}.`:`This review is based on ${Ct(e.reviewedSha)}, the latest commit on ${n}.`:e.comparison.remote?`This review is currently based on ${n}. <strong>Check review status</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 Et(e,t){if(!e.conversation.attached)return``;let n=r(pt(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 Dt(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Ot(e,t,n={}){if(!t||t.state!==`changed`||n.dismissedSha&&n.dismissedSha===t.latestSha)return``;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">
|
|
61
|
+
<p><strong>This KISS review describes commit ${r(e.slice(0,7))}.</strong> ${r(i)}</p>
|
|
62
62
|
<p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below is kept either way.</p>
|
|
63
|
-
${
|
|
64
|
-
</div>`}function
|
|
63
|
+
${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${r(t.latestSha)}">Not now</button>`:``}
|
|
64
|
+
</div>`}function kt(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`}`}function At(e){return e===`done`||e===`failed`}function jt(e,t){return At(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Mt(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||Dt(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 Nt(e){let t=e.querySelector(`[data-started-at]`),n=Number(t?.dataset.startedAt);!t||!Number.isFinite(n)||(t.textContent=`Running for ${kt(n)}.`)}function Pt(e,t,n){let o=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,s=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${r(e.scope)}" data-diagram-card="${r(e.scope)}">
|
|
65
65
|
<header class="prb-diagram-head">
|
|
66
66
|
<div class="prb-diagram-heading">
|
|
67
67
|
<h4 class="prb-diagram-title">
|
|
68
68
|
<button type="button" class="prb-diagram-toggle" data-diagram-toggle aria-expanded="true">
|
|
69
69
|
<span class="prb-diagram-disclosure" aria-hidden="true">▼</span>
|
|
70
|
-
<span>${
|
|
70
|
+
<span>${r(e.title)}</span>
|
|
71
71
|
</button>
|
|
72
72
|
</h4>
|
|
73
|
-
<p class="prb-diagram-scope">${
|
|
73
|
+
<p class="prb-diagram-scope">${r(o)}</p>
|
|
74
74
|
</div>
|
|
75
75
|
<div class="prb-diagram-tools">
|
|
76
76
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="out" aria-label="Zoom out">−</button>
|
|
77
77
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="reset">Fit</button>
|
|
78
78
|
<button type="button" class="prb-diagram-zoom" data-diagram-zoom="in" aria-label="Zoom in">+</button>
|
|
79
|
-
<button type="button" class="prb-diagram-redraw" data-diagram-request="${
|
|
79
|
+
<button type="button" class="prb-diagram-redraw" data-diagram-request="${r(s)}">Regenerate</button>
|
|
80
80
|
</div>
|
|
81
81
|
</header>
|
|
82
|
-
${e.caption?`<p class="prb-diagram-caption">${
|
|
83
|
-
${
|
|
82
|
+
${e.caption?`<p class="prb-diagram-caption">${r(e.caption)}</p>`:``}
|
|
83
|
+
${Ft(e,n)}
|
|
84
84
|
<div class="prb-diagram-canvas" data-diagram-canvas></div>
|
|
85
85
|
<details class="prb-diagram-source">
|
|
86
86
|
<summary>Diagram source</summary>
|
|
87
|
-
<div class="${
|
|
87
|
+
<div class="${i}"><pre><code data-mermaid-source>${r(e.mermaid)}</code></pre><button type="button" class="${a}" aria-label="Copy code">Copy</button></div>
|
|
88
88
|
</details>
|
|
89
|
-
</article>`}function
|
|
89
|
+
</article>`}function Ft(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${r(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 It=`modulepreload`,Lt=function(e){return`/`+e},Rt={},zt=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=Lt(t,n),t=s(t),t in Rt)return;Rt[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`:It,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)})},Bt=.5,Vt=3,Ht=1.25,Ut=null;function Wt(){return Ut??=zt(()=>import(`./chunk-B80S6zbH.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])),Ut}var Gt=new WeakSet,Kt=new WeakMap,qt=new WeakMap,v=null;function Jt(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…`,v?.abort();return}let i=n.closest(`[data-diagram-toggle]`);if(i){tn(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){an(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o&&Yt(e,o.dataset.diagramRequest||null)}),{drawPane:nn}}async function Yt(e,t){if(v)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${pn(n)}"]`)??null??Zt(r,n,t);if(!i)return;Xt(),e.showDiagrams();let a=Qt(i);v=new AbortController,cn(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:v.signal}),r=await n.json().catch(()=>null);if(!n.ok||!r?.diagram)return $t(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);en(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Xt()):a.remove();return}$t(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{v=null,cn(!0)}}function Xt(){let e=document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`).length,t=document.querySelector(`[data-view-nav="diagram"]`);if(e===0){t?.remove();return}if(!t){let e=document.querySelector(`[data-view-nav="issues"]`);if(!e)return;t=document.createElement(`button`),t.setAttribute(`type`,`button`),t.className=`prb-rail-item`,t.dataset.viewNav=`diagram`,t.innerHTML=`<span class="prb-rail-order"></span><span class="prb-rail-label"><span class="prb-rail-title">Diagrams</span></span><span class="prb-rail-count"></span>`,e.before(t)}let n=t.querySelector(`.prb-rail-count`);n&&(n.textContent=String(e),n.setAttribute(`aria-label`,e===1?`1 diagram`:`${e} diagrams`))}function Zt(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">
|
|
90
90
|
<div class="prb-diagram-heading">
|
|
91
91
|
<h4 class="prb-diagram-title">Drawing…</h4>
|
|
92
|
-
<p class="prb-diagram-scope">${t===`change`?`Whole change`:ln(
|
|
92
|
+
<p class="prb-diagram-scope">${t===`change`?`Whole change`:fn(ln(n))}</p>
|
|
93
93
|
</div>
|
|
94
|
-
</header>`,
|
|
94
|
+
</header>`,un(e,r,n),r}function Qt(e){e.querySelector(`[data-diagram-status]`)?.remove();let t=document.createElement(`p`);t.className=`prb-diagram-status`,t.setAttribute(`data-diagram-status`,``),t.innerHTML=`<span class="prb-thinking"><i></i><i></i><i></i></span><span>Reading 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.querySelector(`.prb-diagram-head`)?.insertAdjacentElement(`afterend`,t),e.scrollIntoView({behavior:mn()?`auto`:`smooth`,block:`start`}),t}function $t(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 en(e,t,n){let r=Pt(t,new Map(n?[[n,ln(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Xt(),rn(a))}function tn(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||rn(e))}function nn(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))rn(e)}async function rn(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Gt.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Gt.add(e);try{let e=await Wt();await e.parse(n);let{svg:r}=await e.render(`prb-mermaid-${Math.random().toString(36).slice(2)}`,n);t.innerHTML=r}catch{Gt.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 an(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){qt.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=on(e,n);if(i<=0)return;let a=sn((qt.get(e)??1)*(t===`in`?Ht:1/Ht));qt.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function on(e,t){let n=Kt.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Kt.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function sn(e){return Math.min(Vt,Math.max(Bt,e))}function cn(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function ln(e){return e?document.querySelector(`[data-goto-section="${pn(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function un(e,t,n){let r=dn(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(dn(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function dn(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${pn(e)}"]`);return Number(t?.dataset.themeIndex??0)}function fn(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function pn(e){return CSS.escape(e)}function mn(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var y=document.body,hn=y.dataset.apiBase??``,gn=y.dataset.token??``,_n=y.dataset.editorLabel??``,vn=y.dataset.editorTemplate??``,yn=y.dataset.repoPath??``,bn=y.dataset.explainPrompt??``,xn=y.dataset.sessionId??``;function b(e){return`${hn}${e}?t=${encodeURIComponent(gn)}`}function x(e){fetch(b(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Sn=Jt({endpoint:b,showDiagrams:()=>Tn(`diagram`)}),S=null,C=`whole change`;function Cn(e){let t=dt(e);window.location.hash!==t&&history.pushState(e,``,t),wn(e)}function wn(e){e.kind===`view`?Dn(e.view):jn(e.sectionId)}function Tn(e){Cn({kind:`view`,view:e})}function En(e){Cn({kind:`section`,sectionId:e})}function Dn(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e));x({event:`view_opened`,view:e}),e===`diagram`&&Sn.drawPane(),On(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function On(){for(let e of document.querySelectorAll(`[data-goto-section]`))e.setAttribute(`aria-current`,`false`);S=null,C=`whole change`,Nn()}function kn(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 An(){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`)&&kn(e,!0)}}function jn(e){Dn(`guide`),An();for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e));let t=document.getElementById(`pr-helper-guide-section-${e}`);if(!t)return;t.classList.remove(`pr-helper-guide-section-collapsed`),t.scrollIntoView({behavior:Mn()?`auto`:`smooth`,block:`start`});let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);x({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),S=e,C=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Nn()}function Mn(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Nn(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=C,e.title=S?`Questions are answered about "${C}"`:`Questions cover the whole change`)}function w(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function Pn(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Fn(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}=Pn(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),x({event:`file_opened`,fromFinding:i,targeted:r>0}),await In(a,n,r,0)}async function In(e,t,n,r){try{let i=`&path=${encodeURIComponent(t)}${n?`&line=${n}`:``}${r?`&expand=${r}`:``}`,a=await fetch(`${b(`/file`)}${i}`),o=await a.json();if(!a.ok){e.innerHTML=`<p class="prb-code-status">${w(o?.error??`Could not read that file.`)}</p>`;return}Ln(e,o,n,r)}catch{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}function Ln(e,t,n,r){let i=new Set(t.addedLines),a=t.lines.map((e,r)=>{let a=t.from+r;return`<tr class="${[i.has(a)?`prb-code-added`:``,a===n?`prb-code-target`:``].filter(Boolean).join(` `)}"><td class="prb-code-num">${a}</td><td class="prb-code-line">${w(e)||` `}</td></tr>`}).join(``),o=vn&&yn?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="${w(t.path)}" data-open-line="${n||t.from}">${w(`Open in ${_n||`editor`}`)}</button>`:``,s=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${w(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${w(t.pullRequest.label)}</a>`:``,c=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${w(t.path)}" data-expand-line="${n||0}" data-expand-step="${r+1}">Show more of this file</button>`:``,ee=t.checkout===`differs`?` · your editor will show a different version`:t.checkout===`absent`?` · not in your working folder`:``,l=t.source===`commit`?`<p class="prb-code-source">Viewing reviewed version${t.sourceSha?` <code>${w(t.sourceSha.slice(0,7))}</code>`:``}${ee}</p>`:`<p class="prb-code-source">Viewing your working folder</p>`;e.innerHTML=`<div class="prb-code-header">
|
|
95
95
|
<span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
|
|
96
96
|
${s}
|
|
97
97
|
${o}
|
|
98
98
|
</div>
|
|
99
|
-
${
|
|
99
|
+
${l}
|
|
100
100
|
<div class="prb-code-scroll"><table class="prb-code-table"><tbody>${a}</tbody></table></div>
|
|
101
|
-
${c}`,e.querySelector(`.prb-code-target`)?.scrollIntoView({block:`center`})}function Fn(e,t,n){let r=`${gn.replace(/\/$/,``)}/${e}`,i=hn.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));C({event:`editor_opened`,fromFinding:n}),window.location.href=i}var D=document.querySelector(`[data-ask-log]`);D&&D.querySelector(`.prb-msg`)&&D.scrollTo({top:D.scrollHeight});var O=document.querySelector(`[data-ask-form]`),k=O?.querySelector(`textarea`);function In(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=u(t)+De(t)):n.textContent=t,D?.appendChild(n),D?.scrollTo({top:D.scrollHeight}),n}function Ln(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,D?.appendChild(e),D?.scrollTo({top:D.scrollHeight}),e}var A=null;function Rn(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,D?.appendChild(e),D?.scrollTo({top:D.scrollHeight})}async function zn(e,t=`free_text`){let n=e.trim();if(!n)return;document.querySelector(`.prb-ask-empty`)?.remove(),In(`user`,n);let r=Ln();A=new AbortController,Bn(!0);try{let e=await fetch(S(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:w,source:t}),signal:A.signal}),i=await e.json().catch(()=>null);if(r.remove(),!e.ok||!i?.answer){In(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}In(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(Rn(),k&&(k.value=n)):In(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{A=null,Bn(!1)}}function Bn(e){let t=O?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),k&&(k.disabled=e),e||k?.focus()}function Vn(){let e=O?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),A?.abort()}O?.addEventListener(`submit`,e=>{if(e.preventDefault(),A)return Vn();let t=k?.value??``;k&&(k.value=``),zn(t,Un(t))});var Hn=null;function Un(e){return Hn&&e.includes(Hn)?`selection`:`free_text`}k?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),O?.requestSubmit())}),k?.addEventListener(`input`,()=>{k&&(k.style.height=`auto`,k.style.height=`${Math.min(k.scrollHeight,140)}px`)});async function Wn(e){try{await fetch(S(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Gn(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Kn(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&&Qn(n,t,`questions`),ir()}function qn(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||vn})).filter(e=>e.id)}async function Jn(e){try{await fetch(S(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Yn(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=vn: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(Xn()),Qn(n,t||e.dataset.settled===`true`,`issues`),or())}function Xn(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Qe,e.textContent=`Dismissed by you`,e}var Zn=new WeakMap;function Qn(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Zn.set(e,{parent:t,before:e.nextElementSibling}),nr(n).append(e),t&&tr(t)}else $n(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();rr(n)}}function $n(e,t){let n=Zn.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=er(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function er(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function tr(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function nr(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 rr(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=et(ar())}function ir(){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=tt(e.length,t)),sr(`questions`,e.length,t,`question`,`answered`)}function ar(){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 or(){let e=ar();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=$e(e.total,e.open,Ze(e))),sr(`issues`,e.total,e.open,`issue`,Ze(e))}function sr(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){En(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){Sn(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){Sn(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){Cn(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){Fn(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-expand-file]`);if(s?.dataset.expandFile){let e=s.closest(`.prb-code`);e&&Nn(e,s.dataset.expandFile,Number(s.dataset.expandLine)||0,Number(s.dataset.expandStep)||1);return}let c=t.closest(`[data-file]`);if(c?.dataset.file){Mn(c);return}let l=t.closest(`[data-guide-toggle]`);if(l?.dataset.guideToggle){document.getElementById(`pr-helper-guide-section-${l.dataset.guideToggle}`)?.classList.toggle(`pr-helper-guide-section-collapsed`);return}let u=t.closest(`[data-question-answered]`);if(u?.dataset.questionAnswered){Kn(u,u.dataset.answered!==`true`);let e=Gn();Wn(e),C({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let d=t.closest(`[data-issue-dismissed]`);if(d?.dataset.issueDismissed){Yn(d,d.dataset.stale===`true`||d.dataset.dismissed!==`true`);let e=qn();Jn(e),C({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let ee=t.closest(`[data-suggestion]`);if(ee){zn(ee.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){ur(),zn(_n,`explain_simply`);return}let te=t.closest(`[data-prompt-use]`);if(te?.dataset.promptUse){kr(te.dataset.promptUse);return}let f=t.closest(`[data-prompt-edit]`);if(f?.dataset.promptEdit){Br(f.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Br(``);return}t.closest(`[data-ask-toggle]`)&&lr(!cr())});var j=document.querySelector(`.prb-body`),M=document.querySelector(`.prb-ask`);function cr(){return!!M&&getComputedStyle(M).display!==`none`}function lr(e){j&&(j.dataset.ask=e?`open`:`closed`),document.querySelector(`[data-ask-toggle]`)?.setAttribute(`aria-expanded`,String(e))}function ur(){lr(!0)}function dr(){document.querySelector(`[data-ask-toggle]`)?.setAttribute(`aria-expanded`,String(cr()))}window.addEventListener(`resize`,dr);var N=document.querySelector(`[data-shutdown]`),fr=document.querySelector(`[data-shutdown-dialog]`),P=document.querySelector(`[data-shutdown-confirm]`);N?.addEventListener(`click`,()=>fr?.showModal()),document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>fr?.close()),P?.addEventListener(`click`,()=>{P.disabled=!0,P.textContent=`Stopping…`,fetch(S(`/shutdown`),{method:`POST`}).then(()=>{fr?.close(),pr()}).catch(()=>{P.disabled=!1,P.textContent=`Stop server`})});function pr(){document.body.dataset.serverStopped=`true`;let e=document.createElement(`div`);e.className=`prb-stopped-notice`,e.setAttribute(`role`,`status`);let t=document.body.dataset.wayBack;e.textContent=t?`Workspace server stopped. This page is no longer being served. Run ${t} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(e),N&&(N.textContent=`Server stopped`,N.disabled=!0)}var F=document.querySelector(`[data-file-filter]`),mr=document.querySelector(`[data-file-count]`),hr=document.querySelector(`[data-file-none]`);function gr(){let e=(F?.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}`}hr&&(hr.hidden=n>0),mr&&(mr.textContent=e?`${t} of ${I} file${I===1?``:`s`}`:`${I} file${I===1?``:`s`}`)}var I=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;F?.addEventListener(`input`,gr),F?.addEventListener(`keydown`,e=>{e.key===`Escape`&&F.value!==``&&(e.preventDefault(),F.value=``,gr())}),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(),Mn(n))});var _r=320,vr=()=>Math.round(window.innerWidth/2),yr=e=>Math.round(Math.min(vr(),Math.max(_r,e)));function L(e){j&&(e===null?j.style.removeProperty(`--ask-width`):j.style.setProperty(`--ask-width`,`${e}px`))}function R(){return M?Math.round(M.getBoundingClientRect().width):_r}function z(e){fetch(S(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var B=document.querySelector(`[data-ask-resize]`);B?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!j||!M)return;e.preventDefault(),B.setPointerCapture(e.pointerId),j.dataset.resizing=`true`;let t=e.clientX,n=R(),r=e=>{L(yr(n+(t-e.clientX)))},i=()=>{B.removeEventListener(`pointermove`,r),B.removeEventListener(`pointerup`,i),B.removeEventListener(`pointercancel`,i),delete j.dataset.resizing,z(R())};B.addEventListener(`pointermove`,r),B.addEventListener(`pointerup`,i),B.addEventListener(`pointercancel`,i)}),B?.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=yr(R()+n);L(r),z(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),L(null),z(null))}),B?.addEventListener(`dblclick`,()=>{L(null),z(null)}),window.addEventListener(`resize`,()=>{cr()&&j?.style.getPropertyValue(`--ask-width`)&&L(yr(R()))});var br=3e4,V=document.visibilityState===`visible`?Date.now():null,xr=0;function Sr(){V!==null&&(xr+=Date.now()-V,V=Date.now())}function Cr(){Sr();let e=Math.round(xr/1e3);return xr-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?V=Date.now():(Sr(),V=null)}),setInterval(()=>{let e=Cr();e>0&&C({event:`workspace_heartbeat`,visibleSeconds:e})},br),window.addEventListener(`pagehide`,()=>{let e=S(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Cr()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var wr=document.querySelector(`[data-prompt-bank]`),Tr=document.querySelector(`[data-prompt-list]`),H=Er();function Er(){try{let e=JSON.parse(wr?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Dr(){Tr&&(Tr.innerHTML=H.map(e=>`<span class="prb-bank-item">
|
|
102
|
-
<button type="button" class="prb-bank-use" data-prompt-use="${
|
|
103
|
-
<button type="button" class="prb-bank-edit" data-prompt-edit="${
|
|
104
|
-
</span>`).join(``),Pr())}async function Or(e){try{let t=await(await fetch(S(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);H=Array.isArray(t?.prompts)?t.prompts:H}catch{}Dr()}function kr(e){let t=H.find(t=>t.id===e);!t||!k||(k.value=nt(k.value,t.prompt),ur(),k.focus(),k.setSelectionRange(k.value.length,k.value.length),k.dispatchEvent(new Event(`input`)))}var Ar=document.querySelector(`.prb-doc`),jr=null,Mr=null;function Nr(){D&&(Mr?.(),Mr=be(D,{layout:`flat`,actions:Ue.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Fr(e,t)}))}function Pr(){Ar&&(jr?.(),jr=be(Ar,{triggerLabel:`Ask Buddy AI`,actions:[...He.map(e=>({id:e.id,label:e.label})),...H.map(e=>({id:Ye(e.id),label:e.name,section:Je}))],onChoose:(e,t)=>Fr(e,t)}))}function Fr(e,t){let n=Ir(e,t);!n||!k||(Hn=n,k.value=nt(k.value,n),ur(),k.focus(),k.setSelectionRange(k.value.length,k.value.length),k.dispatchEvent(new Event(`input`)))}function Ir(e,t){let n=Xe(e);if(n===null)return Ke(t,e);let r=H.find(e=>e.id===n);if(!r)return null;let i=Ge(t);return i?`${i}\n\n${r.prompt}`:null}Pr(),Nr(),Fe(document);var U=document.querySelector(`[data-prompt-dialog]`),W=document.querySelector(`[data-prompt-name]`),Lr=document.querySelector(`[data-prompt-text]`),Rr=document.querySelector(`[data-prompt-delete]`),zr=document.getElementById(`prb-prompt-title`),G=``;function Br(e){let t=H.find(t=>t.id===e);G=t?.id??``,zr&&(zr.textContent=t?`Edit prompt`:`Save a prompt`),W&&(W.value=t?.name??``),Lr&&(Lr.value=t?.prompt??``),Rr&&(Rr.hidden=!t),U?.showModal(),W?.focus()}async function Vr(){let e=W?.value.trim()??``,t=Lr?.value.trim()??``;if(!e||!t){(e?Lr:W)?.focus();return}let n=G?H.map(n=>n.id===G?{...n,name:e,prompt:t}:n):[...H,{id:crypto.randomUUID(),name:e,prompt:t}];U?.close(),await Or(n)}async function Hr(){if(!G)return;let e=H.filter(e=>e.id!==G);U?.close(),await Or(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>U?.close()),Rr?.addEventListener(`click`,()=>void Hr()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Vr());var K=document.querySelector(`[data-complete]`);K?.addEventListener(`click`,()=>{let e=K.getAttribute(`aria-pressed`)!==`true`;Ur(e),fetch(S(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({complete:e})}).then(async e=>{let t=await e.json().catch(()=>null);t&&Ur(t.completedAt!==null)}).catch(()=>Ur(!e))});function Ur(e){K&&(K.setAttribute(`aria-pressed`,String(e)),K.textContent=e?`Reviewed`:`Mark reviewed`)}var q=document.querySelector(`[data-fresh-region]`),J=document.querySelector(`[data-fresh-check]`),Y=qr(q?.dataset.report),Wr=`prb-fresh-reopen`,X=Kr(),Gr=q?.dataset.dismissedSha;function Kr(){try{return sessionStorage.getItem(Wr)!==null&&(sessionStorage.removeItem(Wr),!0)}catch{return!1}}X&&(J?.setAttribute(`aria-expanded`,`true`),Q()),J?.addEventListener(`click`,()=>{X=!X,J.setAttribute(`aria-expanded`,String(X)),X?Yr():Q()}),q?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-recheck]`))return void Yr();if(t.closest(`[data-fresh-close]`))return X=!1,J?.setAttribute(`aria-expanded`,`false`),Q();let n=t.closest(`[data-fresh-dismiss]`);n&&(Gr=n.dataset.freshDismiss||void 0,X=!1,J?.setAttribute(`aria-expanded`,`false`),Q(),fetch(S(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Gr??null})}).catch(()=>{}))});function qr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Jr=!1;async function Yr(){if(Jr)return;Jr=!0,Xr(!0);let e=Zr(Y),t=!1;try{let e=await(await fetch(S(`/freshness`))).json();Y=e.report??null,Qr=e.kiss??null,e.kissDismissedSha!==void 0&&($r=e.kissDismissedSha??void 0),ti(),t=!0}catch{}Jr=!1,Q();let n=t?Zr(Y)===e?`No change`:`Updated`:`Could not check`,r=q?.querySelector(`[data-fresh-recheck]`)??J;r&&ri(r,n,2600)}function Xr(e){let t=[...q?.querySelectorAll(`[data-fresh-recheck]`)??[]];for(let n of t)n.disabled=e,e&&(n.textContent=`Checking…`);t.length===0&&J&&e&&(J.textContent=`Checking…`)}function Zr(e){if(!e)return`none`;let{checkedAt:t,...n}=e;return JSON.stringify(n)}var Z=document.querySelector(`[data-kiss-fresh-region]`),Qr=ei(Z?.dataset.freshness),$r=Z?.dataset.dismissedSha;function ei(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ti(){Z&&(Z.innerHTML=Tt(Z.dataset.reviewedSha??``,Qr,{dismissedSha:$r,actions:pn!==``}))}Z?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&($r=t.dataset.kissFreshnessDismiss||void 0,ti(),fetch(S(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:$r??null})}).catch(()=>{}))});function Q(){if(q&&(q.innerHTML=ht(Y,{dismissedSha:Gr,open:X,actions:pn!==``}),J&&Y)){let{label:e,state:t}=mt(Y);J.textContent=e,J.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return ni(n);let r=t.closest(`[data-pr-recheck]`);if(r)return void ii(r);let i=t.closest(`[data-review-update]`);if(i)return void si(i);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function ni(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>ri(e,`Copied`),()=>ri(e,`Select it`))}function ri(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function ii(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=ai(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${ui}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=ai(e)?null:di(e);try{await fetch(S(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}ai(e)&&oi(),window.location.reload()}function ai(e){return e.closest(`.prb-fresh-notes p`)}function oi(){try{sessionStorage.setItem(Wr,`1`)}catch{}}async function si(e){let t=[...document.querySelectorAll(`[data-review-update]`)];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)n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating… ${e}s`;i&&(i.textContent=ci(e))},i=li(e);r();let a=window.setInterval(r,1e3);try{await fetch(S(`/update`),{method:`POST`})}catch{}finally{window.clearInterval(a),i?.remove()}window.location.reload()}function ci(e){return e<5?`Bringing your branch up to date.`:e<25?`Re-reading the pull request conversation.`:`The coding agent is reading the new commits and working out what they did to each finding. This usually takes a few minutes.`}function li(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),t.appendChild(n),n}var ui=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function di(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=ui,t.appendChild(n),n}var fi=document.querySelector(`[data-job-phase]`),pi=document.querySelector(`[data-kiss-phase]`),mi=null,hi=Date.now();function gi(){mi===null&&(mi=window.setTimeout(()=>{mi=null,_i()},wt(Date.now()-hi)))}async function _i(){try{let e=await(await fetch(S(`/job`))).json(),t=[[fi,e],[pi,e.kiss]];for(let[e,n]of t){if(!e||!n)continue;if(n.failed||Ot(n.phase,document)){window.location.reload();return}let t=e.matches(`[data-progress-pane]`)?e:null;t?(kt(t,n.phase,n.progress),At(t)):vi(e,n.progress)}}catch{}gi()}function vi(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}`}function yi(e,t){return e!==null&&!Dt(t)}(yi(fi,fi?.dataset.jobPhase)||yi(pi,pi?.dataset.kissPhase))&&(hi=Date.now(),gi());function bi(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 xi(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…`,xi(t),fetch(S(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);hi=Date.now(),gi()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,bi(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(S(`/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 Si=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{xn(e.state??ct(window.location.hash)??{kind:`view`,view:Si})});var Ci=ct(window.location.hash);Ci?xn(Ci):history.replaceState({kind:`view`,view:Si},``,window.location.pathname+window.location.search),dr(),An();var wi=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{wi(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open]`);t&&(wi(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let t=$.querySelector(`[data-menu-trigger]`),n=$.querySelector(`[data-menu-panel]`),r=()=>{n&&(n.hidden=!0),t?.setAttribute(`aria-expanded`,`false`)};t?.addEventListener(`click`,e=>{if(e.stopPropagation(),!n)return;let r=n.hidden;n.hidden=!r,t.setAttribute(`aria-expanded`,String(r))}),$.addEventListener(`click`,t=>{let n=t.target?.closest(`[data-copy-id]`);n?.dataset.copyId&&(t.stopPropagation(),e(n,n.dataset.copyId))}),document.addEventListener(`click`,e=>{$.contains(e.target)||r()}),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&n&&!n.hidden&&(r(),t?.focus())})}export{It as t};
|
|
101
|
+
${c}`,e.querySelector(`.prb-code-target`)?.scrollIntoView({block:`center`})}function Rn(e,t,n){let r=`${yn.replace(/\/$/,``)}/${e}`,i=vn.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));x({event:`editor_opened`,fromFinding:n}),window.location.href=i}var T=document.querySelector(`[data-ask-log]`);T&&T.querySelector(`.prb-msg`)&&T.scrollTo({top:T.scrollHeight});var E=document.querySelector(`[data-ask-form]`),D=E?.querySelector(`textarea`);function zn(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=te(t)+je(t)):n.textContent=t,T?.appendChild(n),T?.scrollTo({top:T.scrollHeight}),n}function Bn(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,T?.appendChild(e),T?.scrollTo({top:T.scrollHeight}),e}var O=null;function Vn(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,T?.appendChild(e),T?.scrollTo({top:T.scrollHeight})}async function Hn(e,t=`free_text`){let n=e.trim();if(!n)return;document.querySelector(`.prb-ask-empty`)?.remove(),zn(`user`,n);let r=Bn();O=new AbortController,Un(!0);try{let e=await fetch(b(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:n,sectionId:S,source:t}),signal:O.signal}),i=await e.json().catch(()=>null);if(r.remove(),!e.ok||!i?.answer){zn(`error`,i?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}zn(`assistant`,i.answer)}catch(e){r.remove(),e instanceof DOMException&&e.name===`AbortError`?(Vn(),D&&(D.value=n)):zn(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{O=null,Un(!1)}}function Un(e){let t=E?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1),D&&(D.disabled=e),e||D?.focus()}function Wn(){let e=E?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),O?.abort()}E?.addEventListener(`submit`,e=>{if(e.preventDefault(),O)return Wn();let t=D?.value??``;D&&(D.value=``),Hn(t,Kn(t))});var Gn=null;function Kn(e){return Gn&&e.includes(Gn)?`selection`:`free_text`}D?.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),E?.requestSubmit())}),D?.addEventListener(`input`,()=>{D&&(D.style.height=`auto`,D.style.height=`${Math.min(D.scrollHeight,140)}px`)});async function qn(e){try{await fetch(b(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Jn(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function Yn(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&&tr(n,t,`questions`),sr()}function Xn(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||xn})).filter(e=>e.id)}async function Zn(e){try{await fetch(b(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Qn(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=xn: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($n()),tr(n,t||e.dataset.settled===`true`,`issues`),lr())}function $n(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=nt,e.textContent=`Dismissed by you`,e}var er=new WeakMap;function tr(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&er.set(e,{parent:t,before:e.nextElementSibling}),ar(n).append(e),t&&ir(t)}else nr(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();or(n)}}function nr(e,t){let n=er.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=rr(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function rr(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function ir(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function ar(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 or(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=it(cr())}function sr(){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=at(e.length,t)),ur(`questions`,e.length,t,`question`,`answered`)}function cr(){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 lr(){let e=cr();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=rt(e.total,e.open,tt(e))),ur(`issues`,e.total,e.open,`issue`,tt(e))}function ur(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){kn(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`[data-view-nav]`);if(r?.dataset.viewNav){Tn(r.dataset.viewNav);return}let i=t.closest(`[data-overview-nav]`);if(i?.dataset.overviewNav){Tn(i.dataset.overviewNav===`guide`?`guide`:i.dataset.overviewNav);return}let a=t.closest(`[data-goto-section]`);if(a?.dataset.gotoSection){En(a.dataset.gotoSection);return}let o=t.closest(`[data-open-editor]`);if(o?.dataset.openEditor){Rn(o.dataset.openEditor,Number(o.dataset.openLine)||1,!0);return}let s=t.closest(`[data-expand-file]`);if(s?.dataset.expandFile){let e=s.closest(`.prb-code`);e&&In(e,s.dataset.expandFile,Number(s.dataset.expandLine)||0,Number(s.dataset.expandStep)||1);return}let c=t.closest(`[data-file]`);if(c?.dataset.file){Fn(c);return}let ee=t.closest(`[data-guide-toggle]`);if(ee?.dataset.guideToggle){document.getElementById(`pr-helper-guide-section-${ee.dataset.guideToggle}`)?.classList.toggle(`pr-helper-guide-section-collapsed`);return}let l=t.closest(`[data-question-answered]`);if(l?.dataset.questionAnswered){Yn(l,l.dataset.answered!==`true`);let e=Jn();qn(e),x({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let u=t.closest(`[data-issue-dismissed]`);if(u?.dataset.issueDismissed){Qn(u,u.dataset.stale===`true`||u.dataset.dismissed!==`true`);let e=Xn();Zn(e),x({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let te=t.closest(`[data-suggestion]`);if(te){Hn(te.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){pr(),Hn(bn,`explain_simply`);return}let ne=t.closest(`[data-prompt-use]`);if(ne?.dataset.promptUse){Mr(ne.dataset.promptUse);return}let re=t.closest(`[data-prompt-edit]`);if(re?.dataset.promptEdit){Hr(re.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Hr(``);return}t.closest(`[data-ask-toggle]`)&&fr(!dr())});var k=document.querySelector(`.prb-body`),A=document.querySelector(`.prb-ask`);function dr(){return!!A&&getComputedStyle(A).display!==`none`}function fr(e){k&&(k.dataset.ask=e?`open`:`closed`),document.querySelector(`[data-ask-toggle]`)?.setAttribute(`aria-expanded`,String(e))}function pr(){fr(!0)}function mr(){document.querySelector(`[data-ask-toggle]`)?.setAttribute(`aria-expanded`,String(dr()))}window.addEventListener(`resize`,mr);var j=document.querySelector(`[data-shutdown]`),hr=document.querySelector(`[data-shutdown-dialog]`),M=document.querySelector(`[data-shutdown-confirm]`);j?.addEventListener(`click`,()=>hr?.showModal()),document.querySelector(`[data-shutdown-cancel]`)?.addEventListener(`click`,()=>hr?.close()),M?.addEventListener(`click`,()=>{M.disabled=!0,M.textContent=`Stopping…`,fetch(b(`/shutdown`),{method:`POST`}).then(()=>{hr?.close(),gr()}).catch(()=>{M.disabled=!1,M.textContent=`Stop server`})});function gr(){document.body.dataset.serverStopped=`true`;let e=document.createElement(`div`);e.className=`prb-stopped-notice`,e.setAttribute(`role`,`status`);let t=document.body.dataset.wayBack;e.textContent=t?`Workspace server stopped. This page is no longer being served. Run ${t} to bring it back.`:`Workspace server stopped. This page is no longer being served.`,document.body.prepend(e),j&&(j.textContent=`Server stopped`,j.disabled=!0)}var N=document.querySelector(`[data-file-filter]`),_r=document.querySelector(`[data-file-count]`),vr=document.querySelector(`[data-file-none]`);function yr(){let e=(N?.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}`}vr&&(vr.hidden=n>0),_r&&(_r.textContent=e?`${t} of ${P} file${P===1?``:`s`}`:`${P} file${P===1?``:`s`}`)}var P=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;N?.addEventListener(`input`,yr),N?.addEventListener(`keydown`,e=>{e.key===`Escape`&&N.value!==``&&(e.preventDefault(),N.value=``,yr())}),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(),Fn(n))});var br=320,xr=()=>Math.round(window.innerWidth/2),Sr=e=>Math.round(Math.min(xr(),Math.max(br,e)));function F(e){k&&(e===null?k.style.removeProperty(`--ask-width`):k.style.setProperty(`--ask-width`,`${e}px`))}function I(){return A?Math.round(A.getBoundingClientRect().width):br}function L(e){fetch(b(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var R=document.querySelector(`[data-ask-resize]`);R?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!k||!A)return;e.preventDefault(),R.setPointerCapture(e.pointerId),k.dataset.resizing=`true`;let t=e.clientX,n=I(),r=e=>{F(Sr(n+(t-e.clientX)))},i=()=>{R.removeEventListener(`pointermove`,r),R.removeEventListener(`pointerup`,i),R.removeEventListener(`pointercancel`,i),delete k.dataset.resizing,L(I())};R.addEventListener(`pointermove`,r),R.addEventListener(`pointerup`,i),R.addEventListener(`pointercancel`,i)}),R?.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=Sr(I()+n);F(r),L(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),F(null),L(null))}),R?.addEventListener(`dblclick`,()=>{F(null),L(null)}),window.addEventListener(`resize`,()=>{dr()&&k?.style.getPropertyValue(`--ask-width`)&&F(Sr(I()))});var Cr=3e4,z=document.visibilityState===`visible`?Date.now():null,wr=0;function Tr(){z!==null&&(wr+=Date.now()-z,z=Date.now())}function Er(){Tr();let e=Math.round(wr/1e3);return wr-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?z=Date.now():(Tr(),z=null)}),setInterval(()=>{let e=Er();e>0&&x({event:`workspace_heartbeat`,visibleSeconds:e})},Cr),window.addEventListener(`pagehide`,()=>{let e=b(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Er()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Dr=document.querySelector(`[data-prompt-bank]`),Or=document.querySelector(`[data-prompt-list]`),B=kr();function kr(){try{let e=JSON.parse(Dr?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Ar(){Or&&(Or.innerHTML=B.map(e=>`<span class="prb-bank-item">
|
|
102
|
+
<button type="button" class="prb-bank-use" data-prompt-use="${w(e.id)}" title="${w(e.prompt)}">${w(e.name)}</button>
|
|
103
|
+
<button type="button" class="prb-bank-edit" data-prompt-edit="${w(e.id)}" aria-label="Edit ${w(e.name)}">✎</button>
|
|
104
|
+
</span>`).join(``),Lr())}async function jr(e){try{let t=await(await fetch(b(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})})).json().catch(()=>null);B=Array.isArray(t?.prompts)?t.prompts:B}catch{}Ar()}function Mr(e){let t=B.find(t=>t.id===e);!t||!D||(D.value=ot(D.value,t.prompt),pr(),D.focus(),D.setSelectionRange(D.value.length,D.value.length),D.dispatchEvent(new Event(`input`)))}var Nr=document.querySelector(`.prb-doc`),Pr=null,Fr=null;function Ir(){T&&(Fr?.(),Fr=we(T,{layout:`flat`,actions:qe.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Rr(e,t)}))}function Lr(){Nr&&(Pr?.(),Pr=we(Nr,{triggerLabel:`Ask Buddy AI`,actions:[...Ke.map(e=>({id:e.id,label:e.label})),...B.map(e=>({id:$e(e.id),label:e.name,section:Qe}))],onChoose:(e,t)=>Rr(e,t)}))}function Rr(e,t){let n=zr(e,t);!n||!D||(Gn=n,D.value=ot(D.value,n),pr(),D.focus(),D.setSelectionRange(D.value.length,D.value.length),D.dispatchEvent(new Event(`input`)))}function zr(e,t){let n=et(e);if(n===null)return Xe(t,e);let r=B.find(e=>e.id===n);if(!r)return null;let i=Ye(t);return i?`${i}\n\n${r.prompt}`:null}Lr(),Ir(),ze(document);var V=document.querySelector(`[data-prompt-dialog]`),H=document.querySelector(`[data-prompt-name]`),U=document.querySelector(`[data-prompt-text]`),Br=document.querySelector(`[data-prompt-delete]`),Vr=document.getElementById(`prb-prompt-title`),W=``;function Hr(e){let t=B.find(t=>t.id===e);W=t?.id??``,Vr&&(Vr.textContent=t?`Edit prompt`:`Save a prompt`),H&&(H.value=t?.name??``),U&&(U.value=t?.prompt??``),Br&&(Br.hidden=!t),V?.showModal(),H?.focus()}async function Ur(){let e=H?.value.trim()??``,t=U?.value.trim()??``;if(!e||!t){(e?U:H)?.focus();return}let n=W?B.map(n=>n.id===W?{...n,name:e,prompt:t}:n):[...B,{id:crypto.randomUUID(),name:e,prompt:t}];V?.close(),await jr(n)}async function Wr(){if(!W)return;let e=B.filter(e=>e.id!==W);V?.close(),await jr(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>V?.close()),Br?.addEventListener(`click`,()=>void Wr()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Ur());var G=document.querySelector(`[data-complete]`);G?.addEventListener(`click`,()=>{let e=G.getAttribute(`aria-pressed`)!==`true`;Gr(e),fetch(b(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({complete:e})}).then(async e=>{let t=await e.json().catch(()=>null);t&&Gr(t.completedAt!==null)}).catch(()=>Gr(!e))});function Gr(e){G&&(G.setAttribute(`aria-pressed`,String(e)),G.textContent=e?`Reviewed`:`Mark reviewed`)}var K=document.querySelector(`[data-fresh-region]`),q=document.querySelector(`[data-fresh-check]`),J=Yr(K?.dataset.report),Kr=`prb-fresh-reopen`,Y=Jr(),qr=K?.dataset.dismissedSha;function Jr(){try{return sessionStorage.getItem(Kr)!==null&&(sessionStorage.removeItem(Kr),!0)}catch{return!1}}Y&&(q?.setAttribute(`aria-expanded`,`true`),Z()),q?.addEventListener(`click`,()=>{Y=!Y,q.setAttribute(`aria-expanded`,String(Y)),Y?Zr():Z()}),K?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-recheck]`))return void Zr();if(t.closest(`[data-fresh-close]`))return Y=!1,q?.setAttribute(`aria-expanded`,`false`),Z();let n=t.closest(`[data-fresh-dismiss]`);n&&(qr=n.dataset.freshDismiss||void 0,Y=!1,q?.setAttribute(`aria-expanded`,`false`),Z(),fetch(b(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:qr??null})}).catch(()=>{}))});function Yr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Xr=!1;async function Zr(){if(Xr)return;Xr=!0,Qr(!0);let e=$r(J),t=!1;try{let e=await(await fetch(b(`/freshness`))).json();J=e.report??null,ei=e.kiss??null,e.kissDismissedSha!==void 0&&(ti=e.kissDismissedSha??void 0),ri(),t=!0}catch{}Xr=!1,Z();let n=t?$r(J)===e?`No change`:`Updated`:`Could not check`,r=K?.querySelector(`[data-fresh-recheck]`)??q;r&&ai(r,n,2600)}function Qr(e){let t=[...K?.querySelectorAll(`[data-fresh-recheck]`)??[]];for(let n of t)n.disabled=e,e&&(n.textContent=`Checking…`);t.length===0&&q&&e&&(q.textContent=`Checking…`)}function $r(e){if(!e)return`none`;let{checkedAt:t,...n}=e;return JSON.stringify(n)}var X=document.querySelector(`[data-kiss-fresh-region]`),ei=ni(X?.dataset.freshness),ti=X?.dataset.dismissedSha;function ni(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ri(){X&&(X.innerHTML=Ot(X.dataset.reviewedSha??``,ei,{dismissedSha:ti,actions:gn!==``}))}X?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(ti=t.dataset.kissFreshnessDismiss||void 0,ri(),fetch(b(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:ti??null})}).catch(()=>{}))});function Z(){if(K&&(K.innerHTML=yt(J,{dismissedSha:qr,open:Y,actions:gn!==``}),q&&J)){let{label:e,state:t}=vt(J);q.textContent=e,q.dataset.state=t}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return ii(n);let r=t.closest(`[data-pr-recheck]`);if(r)return void oi(r);let i=t.closest(`[data-review-update]`);if(i)return void li(i);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function ii(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>ai(e,`Copied`),()=>ai(e,`Select it`))}function ai(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function oi(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=si(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${ui}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=si(e)?null:di(e);try{await fetch(b(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}si(e)&&ci(),window.location.reload()}function si(e){return e.closest(`.prb-fresh-notes p`)}function ci(){try{sessionStorage.setItem(Kr,`1`)}catch{}}async function li(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(b(`/job`))).json();e.update&&e.update.phase!==`none`&&!At(e.update.phase)&&r()}catch{}},500);try{await fetch(b(`/update`),{method:`POST`})}catch{}r()}var ui=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function di(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=ui,t.appendChild(n),n}var fi=document.querySelector(`[data-job-phase]`),pi=document.querySelector(`[data-kiss-phase]`),Q=document.querySelector(`[data-update-phase]`),mi=null,hi=Date.now();function gi(){mi===null&&(mi=window.setTimeout(()=>{mi=null,_i()},n(Date.now()-hi)))}async function _i(){try{let e=await(await fetch(b(`/job`))).json();if(Q&&e.update){if(e.update.phase===`none`||e.update.failed||At(e.update.phase)){window.location.reload();return}Mt(Q,e.update.phase,e.update.progress),Nt(Q)}let t=[[fi,e],[pi,e.kiss]];for(let[e,n]of t){if(!e||!n)continue;if(n.failed||jt(n.phase,document)){window.location.reload();return}let t=e.matches(`[data-progress-pane]`)?e:null;t?(Mt(t,n.phase,n.progress),Nt(t)):vi(e,n.progress)}}catch{}gi()}function vi(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}`}function yi(e,t){return e!==null&&!At(t)}(yi(fi,fi?.dataset.jobPhase)||yi(pi,pi?.dataset.kissPhase)||yi(Q,Q?.dataset.updatePhase))&&(hi=Date.now(),gi());function bi(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 xi(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…`,xi(t),fetch(b(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);hi=Date.now(),gi()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,bi(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(b(`/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 Si=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{wn(e.state??ft(window.location.hash)??{kind:`view`,view:Si})});var Ci=ft(window.location.hash);Ci?wn(Ci):history.replaceState({kind:`view`,view:Si},``,window.location.pathname+window.location.search),mr(),Nn();var wi=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{wi(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open]`);t&&(wi(),t.querySelector(`summary`)?.focus())});var $=document.querySelector(`.prb-header [data-menu]`);if($){let e=$.querySelector(`[data-menu-trigger]`),n=$.querySelector(`[data-menu-panel]`),r=()=>{n&&(n.hidden=!0),e?.setAttribute(`aria-expanded`,`false`)};e?.addEventListener(`click`,t=>{if(t.stopPropagation(),!n)return;let r=n.hidden;n.hidden=!r,e.setAttribute(`aria-expanded`,String(r))}),$.addEventListener(`click`,e=>{let n=e.target?.closest(`[data-copy-id]`);n?.dataset.copyId&&(e.stopPropagation(),t(n,n.dataset.copyId))}),document.addEventListener(`click`,e=>{$.contains(e.target)||r()}),document.addEventListener(`keydown`,t=>{t.key===`Escape`&&n&&!n.hidden&&(r(),e?.focus())})}e(window,()=>window.location.reload());export{zt as t};
|