prreviewbuddy 0.82.1 → 0.83.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/dist/server.js +180 -65
- package/package.json +1 -1
- package/static/{chunk-CxFmUaBj.js → chunk-B2vcrGTe.js} +1 -1
- package/static/{chunk-CWRKWlhO.js → chunk-BL6xJoZm.js} +1 -1
- package/static/chunk-DWTt0jUK.js +1 -0
- package/static/chunk-DwdwtB9r.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +172 -44
- package/static/workspace.js +58 -58
- package/static/chunk-CQNkZ9TG.js +0 -1
- package/static/chunk-h55PfL_M.js +0 -1
package/static/workspace.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunk-D6oLtkSC.js","chunk-CvSN2dS5.js","chunk-DsF7k-Jl.js","chunk-BWjKdrB5.js","chunk-hePW80VL.js","chunk-DIEkEPeW.js","chunk-D7hFEgee.js","chunk-B2kMZj3m.js","chunk-BXful7fw.js","chunk-9OYdRhXM.js","chunk-DyBGMc4d.js","chunk-D71XVZIg.js","chunk-Dy-Kn_BL.js","chunk-B-Up-Dum.js","chunk-CCkeMk9N.js","chunk-DwHSAwhM.js","chunk-fybaL0A-.js","chunk-BifhSqXX.js","chunk-DS17s2tU.js","chunk-Baon_ihZ.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{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d as u,dt as d,et as f,ft as ee,i as p,it as te,lt as m,nt as ne,o as h,ot as re,r as ie,rt as g,st as _,t as ae,tt as v}from"./chunk-
|
|
3
|
-
`)){let c=o;if(o+=s.length+1,r){let e=
|
|
4
|
-
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??
|
|
5
|
-
`),blocks:n}}function
|
|
6
|
-
`).map(e=>e.trim()),n=0;if(t.find(e=>e)===`---`){let e=t.indexOf(`---`),r=t.indexOf(`---`,e+1);n=r===-1?t.length:r+1}return t.slice(n).find(e=>e&&!e.startsWith(`%%`))?.split(/\s+/)[0]||`diagram`}function
|
|
2
|
+
import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d as u,dt as d,et as f,ft as ee,i as p,it as te,lt as m,nt as ne,o as h,ot as re,r as ie,rt as g,st as _,t as ae,tt as v}from"./chunk-DwdwtB9r.js";import{i as oe,l as se,o as ce}from"./chunk-DWTt0jUK.js";import{t as y}from"./chunk-CvSN2dS5.js";import{n as le,t as ue}from"./chunk-B2vcrGTe.js";import{t as de}from"./chunk-Dv0Wowan.js";import{t as fe}from"./chunk-C8kkSv38.js";function b(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function pe(e){return b(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var me=`pr-helper-code-block`,he=`pr-helper-code-copy`,ge=/^\u0002(\d+)\u0002/,_e=/^(?:https?:\/\/|#)/i,ve=/^https:\/\//i,ye=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,be=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function xe(e){let t=(e??``).trim();return!t||ye.test(t)||be.test(t)?`View attached image`:`View image: ${t}`}function Se(e,t){return ve.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Ce(e,t){return Se(b((e??``).trim()),b(t))}var x=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,we=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Te=e=>/^\d{1,9}$/.test(e)?e:null,Ee=e=>e.slice(0,300),De=new Map(Object.entries({a:{href:e=>{let t=e.trim();return _e.test(t)?t:null},title:Ee},abbr:{title:Ee},b:{},blockquote:{},br:{},caption:{align:x},cite:{},code:{},dd:{},del:{},details:{},div:{align:x},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Te},p:{align:x},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:x},tbody:{},td:{align:x,colspan:we,rowspan:we},tfoot:{},th:{align:x,colspan:we,rowspan:we},thead:{},tr:{align:x},u:{},ul:{},var:{},h1:{align:x},h2:{align:x},h3:{align:x},h4:{align:x},h5:{align:x},h6:{align:x}}).map(([e,t])=>[e,new Map(Object.entries({title:Ee,...t}))])),Oe=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),ke=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),Ae=new Set(`picture.pre.source.track.input.form.label.button.option.optgroup.font.center.section.article.header.footer.nav.figure.figcaption.main.aside.html.body.meta.link.base.wbr.col.colgroup.area.map.param.fieldset.legend.dialog`.split(`.`)),je=new Set(`address.article.aside.blockquote.caption.center.dd.details.dialog.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),Me=new RegExp(["`[^`\\n]+`",`<(\\/?)([A-Za-z][A-Za-z0-9-]*)((?:\\s+[^\\s"'<>\\/=]+(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s"'=<>\`]+))?)*)\\s*(\\/?)>`,`&(?:#\\d{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});`].join(`|`),`g`),Ne=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Pe(e){return e.replace(/&(#\d{1,7}|#[xX][0-9a-fA-F]{1,6}|amp|lt|gt|quot|apos|nbsp);/g,(e,t)=>{if(t[0]===`#`){let e=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return e>0&&e<=1114111?String.fromCodePoint(e):``}return{amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:`\xA0`}[t]??``})}function Fe(e){let t=new Map;for(let n of e.matchAll(Ne)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Pe(n[2]??n[3]??n[4]??``))}return t}function Ie(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Le(e,t){let n=Ie(e),r=De.get(e),i=[];for(let[e,n]of Fe(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${b(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Re(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;Me.lastIndex=0;for(let t;t=Me.exec(e);){let[a,o,s,c,l]=t,u=null;if(a[0]===`&`)u=n({kind:`entity`,name:``,tag:``,markup:a});else if(s){let t=s.toLowerCase();if(t===`img`){let e=Fe(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Ce(e.get(`src`),xe(r))??b(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:Fe(c).get(`src`);if(!o&&!l){let n=e.slice(Me.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=Fe(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(Me.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Ce(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(ke.has(t)){if(!o&&!l&&!Oe.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(Me.lastIndex),i=r.search(n);i!==-1&&(Me.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(Ae.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(De.has(t)){let e=Ie(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Oe.has(t)?n({kind:`void`,name:t,tag:e,markup:Le(t,c)}):n({kind:`open`,name:t,tag:e,markup:Le(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=Me.lastIndex)}return{text:r+e.slice(i),tokens:t}}function ze(e,t){for(let n of e.matchAll(/\u0002(\d+)\u0002/g))if(t.tokens[Number(n[1])].kind!==`entity`)return!0;return!1}function Be(e,t){let n=e.match(ge);return!!(n&&je.has(t.tokens[Number(n[1])].name))}function Ve(e){let t=[];return e.replace(/<a\b[^>]*>|<\/a>/g,e=>{if(e===`</a>`)return t.pop()?``:e;let n=t.length>0;return t.push(n),n?``:e})}function He(e,t){let n=[],r=e=>{let r=t.tokens[e];if(r.kind===`open`)return n.push(r.tag),r.markup;if(r.kind===`close`){let e=n.lastIndexOf(r.tag);return e===-1?``:n.splice(e).reverse().map(e=>`</${e}>`).join(``)}return r.markup},i=``,a=0,o=!1;for(let n=0;n<e.length;n++){let s=e[n];if(s===`<`)o=!0;else if(s===`>`)o=!1;else if(s===``){let s=e.indexOf(``,n+1);if(s===-1)break;let c=Number(e.slice(n+1,s));i+=e.slice(a,n)+(o&&t.tokens[c].kind!==`entity`?``:r(c)),n=s,a=s+1}}return i+e.slice(a)+n.reverse().map(e=>`</${e}>`).join(``)}var Ue=`\0`,We=``,Ge=/\u0000(\d+)\u0000/g,Ke=/^\u0000\d+\u0000$/,qe=/\u0001(\d+)\u0001/g;function Je(e,t={}){let{text:n,blocks:r}=et($e(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return it(dt(n),r);let i=Re(n);return Ve(He(it(dt(i.text,i),r),i))}function Ye(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function Xe(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var Ze=/`[^`\n]+`|<!--/g;function Qe(e,t){Ze.lastIndex=t;for(let t;t=Ze.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function $e(e,t={}){let n=[],r=null,i=!1,a=null,o=0;for(let s of e.split(`
|
|
3
|
+
`)){let c=o;if(o+=s.length+1,r){let e=Xe(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=Ye(s),r)){n.push({raw:s,visible:s,code:`open`});continue}if(!t.hideHtmlComments){n.push({raw:s,visible:s});continue}let l=i?a:null,u=``,d=0;for(;d<s.length;){if(i){let e=s.indexOf(`-->`,d);if(e===-1)break;d=e+3,i=!1;continue}let t=Qe(s,d);if(t===-1||e.indexOf(`-->`,c+t+4)===-1){u+=s.slice(d);break}u+=s.slice(d,t),d=t+4,i=!0}if(l){l.visible+=u,n.push({raw:s,visible:``,absent:!0});continue}let f={raw:s,visible:u};i&&(a=u.trim()===``?null:f),n.push(f)}return n}function et(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${Ue}${n.length}${Ue}`);let e=i.join(`
|
|
4
|
+
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??rt(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&tt(n.raw).toLowerCase()===`mermaid`?nt(r):void 0):n.code===`body`?i.push(n.raw):n.code===`close`?o():r.push(n.visible));return i&&o(),{text:r.join(`
|
|
5
|
+
`),blocks:n}}function tt(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function nt(e){for(let t=e.length-1;t>=0;t--){let n=e[t].trim();if(!n)continue;let r=n.match(/^#{1,6}\s+(.+?)\s*#*$/)?.[1]??n.match(/^(\*\*|__)(.+)\1$/)?.[2];return r&&r.replace(/[`*_]/g,``).trim()||null}return null}function rt(e){let t=e.split(`
|
|
6
|
+
`).map(e=>e.trim()),n=0;if(t.find(e=>e)===`---`){let e=t.indexOf(`---`),r=t.indexOf(`---`,e+1);n=r===-1?t.length:r+1}return t.slice(n).find(e=>e&&!e.startsWith(`%%`))?.split(/\s+/)[0]||`diagram`}function it(e,t){return e.replace(Ge,(e,n)=>{let r=t[Number(n)];return r.diagram?st(r.code,r.diagram.label):at(r.code,`Copy`,`Copy code`)})}function at(e,t,n,r=``){return`<div class="${me}"${r}><pre><code>${b(e)}</code></pre><button type="button" class="${he}" aria-label="${n}">${t}</button></div>`}var ot=0;function st(e,t){let n=`prb-md-mermaid-source-${++ot}`;return`<figure class="prb-md-mermaid" data-md-mermaid data-state="source"><div class="prb-md-mermaid-canvas" data-md-mermaid-canvas role="img" aria-label="${b(t)}" hidden></div><p class="prb-md-mermaid-error" data-md-mermaid-error hidden>This diagram couldn\u2019t be displayed.</p><button type="button" class="prb-md-mermaid-toggle" data-md-mermaid-toggle aria-expanded="true" aria-controls="${n}" hidden>Hide source</button>`+at(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function ct(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function lt(e){return ct(e.match(/^[ \t]*/)[0])}function ut(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=ct(n)+(r?1:i.length+1),c=ct(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function dt(e,t){let n=[],r=[],i=[],a=null,o=e=>e.tag===`ol`&&e.start!==1?` start="${e.start}"`:``,s=null,c=()=>{if(r.length&&n.push(`<p>${ft(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${ft(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?ft(e[0],t):e.map(e=>`<p>${ft(e,t)}</p>`).join(``),r=t=>`<${t.tag}${o(t)}>${t.items.map(t=>`<li>${e(t.paras)}</li>`).join(``)}</${t.tag}>`,i=({blocks:e})=>{let n=e.filter(e=>typeof e==`string`).length===1;return e.map(e=>typeof e==`string`?n?ft(e,t):`<p>${ft(e,t)}</p>`:r(e)).join(``)};n.push(`<${a.tag}${o(a)}>${a.items.map(e=>`<li>${i(e)}</li>`).join(``)}</${a.tag}>`)}r=[],i=[],a=null};for(let o of e.split(`
|
|
7
7
|
`)){let e=o.trim();if(s){if(e){s.push(b(e));continue}n.push(s.join(`
|
|
8
|
-
`)),s=null}if(!e){a&&!r.length&&!i.length?a.gap=!0:c();continue}if(a?.items.length){let t=a.items[a.items.length-1],n=t.blocks[t.blocks.length-1],r=typeof n==`string`?null:n,i=r?.items[r.items.length-1]??null,s=
|
|
9
|
-
`)),n.join(``)}function
|
|
8
|
+
`)),s=null}if(!e){a&&!r.length&&!i.length?a.gap=!0:c();continue}if(a?.items.length){let t=a.items[a.items.length-1],n=t.blocks[t.blocks.length-1],r=typeof n==`string`?null:n,i=r?.items[r.items.length-1]??null,s=lt(o),l=ut(o),u=a.gap;if(a.gap=!1,l&&s>=t.content){let e=r&&i&&(s>=i.content||r.tag===l.tag),n={paras:[l.text],content:l.content};e?r.items.push(n):t.blocks.push({tag:l.tag,start:l.start,items:[n]});continue}if(!l&&u){if(i&&s>=i.content){i.paras.push(e);continue}if(s>=t.content){t.blocks.push(e);continue}c()}else l&&u&&l.tag!==a.tag&&c()}if(t&&Be(e,t)){c(),s=[b(e)];continue}if(Ke.test(e)){c(),n.push(e);continue}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(e)){c(),n.push(`<hr>`);continue}let l=e.match(/^(#{1,6})\s+(.+)$/);if(l){c();let e=Math.min(l[1].length,3)+3;n.push(`<h${e}>${ft(l[2],t)}</h${e}>`);continue}let u=ut(o);if(u){let e=a;e?.tag!==u.tag&&(c(),e=a={tag:u.tag,start:u.start,items:[],gap:!1}),e.items.push({blocks:[u.text],content:u.content});continue}let d=e.match(/^>\s?(.*)$/);if(d){i.length||c(),i.push(d[1]);continue}if(a&&a.items.length){let{blocks:t}=a.items[a.items.length-1],n=t[t.length-1];if(typeof n==`string`)t[t.length-1]=`${n} ${e}`;else{let t=n.items[n.items.length-1].paras;t[t.length-1]+=` ${e}`}continue}if(i.length){i[i.length-1]+=` ${e}`;continue}r.push(e)}return c(),s&&n.push(s.join(`
|
|
9
|
+
`)),n.join(``)}function ft(e,t){let n=[];return b(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${We}${n.length-1}${We}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!ze(r,t)?Se(r,xe(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>_e.test(r)&&!(t&&ze(r,t))?`<a href="${r}" target="_blank" rel="noopener noreferrer">${n}</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(qe,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function pt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),mt(e)}}function mt(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 ht=`pr-helper-msg-copy`,gt=`pr-helper-chat-actions`,_t=`data-message-id`,vt=`data-copy-source`,yt={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 bt(e){return Tt(`${vt}="${b(e)}"`)}var xt=`pr-helper-finding-copy`,St=`data-copy-idle-label`,Ct=`data-copy-idle-aria`,wt=`data-copy-idle-tip`;function Tt(e,t){let{icon:n}=yt.idle,r=t?.label??yt.idle.label,i=t?.aria??yt.idle.aria,a=t?` ${St}="${b(r)}" ${Ct}="${b(i)}" ${wt}="${b(t.tip)}"`:``,o=`<button type="button" class="${t?`${ht} ${xt}`:ht}" ${e}${a}${t?` data-tip="${b(t.tip)}"`:``} aria-label="${b(i)}"><span class="${ht}-icon" aria-hidden="true">${Dt(n)}</span><span class="${ht}-label"${r?``:` hidden`}>${b(r)}</span></button>`;return t?o:`<div class="${gt}">${o}</div>`}function Et(e,t){let n=yt[t],r=t===`idle`?{...n,label:e.getAttribute(St)??n.label,aria:e.getAttribute(Ct)??n.aria}:n,i=e.querySelector(`.${ht}-icon`),a=e.querySelector(`.${ht}-label`);i&&(i.innerHTML=Dt(r.icon));let o=(e.getAttribute(St)??``)!==``,s=e.classList.contains(`pr-helper-finding-copy`)&&!o;a instanceof HTMLElement&&(a.textContent=s?``:r.label,a.hidden=s||r.label===``),s&&e.setAttribute(`data-tip`,t===`idle`?e.getAttribute(wt)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Dt(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Ot=1400,kt=`Copy`,At=`Copied`,jt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,Mt=new WeakMap;function Nt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${he}`),i=r?null:n.closest(`.${ht}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?It(r):i&&Pt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Pt(e,t){let n=Ft(e,t);Rt(e,n!==null&&await pt(n)?`copied`:`failed`)}function Ft(e,t){let n=e.getAttribute(vt);if(n!==null)return n;let r=e.getAttribute(_t);return r&&t?t(r):null}async function It(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await pt(t.textContent??``):!1;!n&&t&&Lt(t),zt(e,n?At:jt,n)}function Lt(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Rt(e,t){let n=Mt.get(e);n&&window.clearTimeout(n),Et(e,t),Mt.set(e,window.setTimeout(()=>{Et(e,`idle`),Mt.delete(e)},Ot))}function zt(e,t,n){let r=Mt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||kt;e.textContent=t,e.classList.toggle(`copied`,n),Mt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),Mt.delete(e)},Ot))}var Bt={startOnLoad:!1,securityLevel:`strict`,htmlLabels:!1,flowchart:{htmlLabels:!1},theme:`neutral`,fontFamily:`inherit`,suppressErrorRendering:!0,secure:[`secure`,`securityLevel`,`startOnLoad`,`maxTextSize`,`suppressErrorRendering`,`maxEdges`,`htmlLabels`,`flowchart`,`themeCSS`,`themeVariables`,`theme`,`darkMode`,`fontFamily`,`dompurifyConfig`,`arrowMarkerAbsolute`,`deterministicIds`,`deterministicIDSeed`]},Vt=null;function Ht(){return Vt??=y(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(Bt),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),Vt}async function Ut(e,t,n,r=Ht){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,Gt(e)}var Wt=`http://www.w3.org/2000/svg`;function Gt(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(Wt,`g`);for(let e of[...t.attributes])/^(?:xlink:)?href$|^target$|^rel$/i.test(e.name)||n.setAttribute(e.name,e.value);n.append(...t.childNodes),t.replaceWith(n)}for(let t of e.querySelectorAll(`.clickable`))t.classList.remove(`clickable`)}var Kt=0;function qt(e,t={}){let n=t.engine??Ht,r=t.observe??Jt,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),Yt(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&Zt(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function Jt(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function Yt(e,t){let n=t=>e.querySelector(`[data-md-mermaid-${t}]`),r=n(`canvas`),i=n(`source`),a=n(`toggle`),o=i?.querySelector(`pre code`)?.textContent??``;if(!(!r||!i||!a))try{await Ut(r,`prb-md-mermaid-${++Kt}`,o,t),Xt(r.querySelector(`svg`)),r.hidden=!1,i.hidden=!0,a.hidden=!1,a.textContent=`View source`,a.setAttribute(`aria-expanded`,`false`),e.dataset.state=`diagram`}catch{e.dataset.state=`failed`;let t=n(`error`);t&&(t.hidden=!1)}}function Xt(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function Zt(e){let t=e.closest(`figure`)?.querySelector(`[data-md-mermaid-source]`);if(!t)return;let n=t.hidden;t.hidden=!n,e.textContent=n?`Hide source`:`View source`,e.setAttribute(`aria-expanded`,String(n))}var Qt=`pr-helper-selection-popover`,$t=`pr-helper-selection-popover-expanded`,en=`pr-helper-selection-copy-done`,tn=8,nn=8,rn=1e3,an=`Copy selected text`,on=`Copy`,sn=`Copied`,cn=`pr-helper-selection-popover-flat`,S=null;function ln(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${b(e.id)}">${b(e.label)}</button>`}function un(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(ln).join(``)}${[...t].map(([e,t])=>`
|
|
10
10
|
<div class="pr-helper-selection-menu-group">
|
|
11
11
|
<div class="pr-helper-selection-menu-heading">${b(e)}</div>
|
|
12
|
-
<div class="pr-helper-selection-menu-group-items">${t.map(
|
|
13
|
-
</div>`).join(``)}`}function
|
|
12
|
+
<div class="pr-helper-selection-menu-group-items">${t.map(ln).join(``)}</div>
|
|
13
|
+
</div>`).join(``)}`}function dn(e){if(e.layout===`flat`)return fn(e);let t=un(e.actions);return`
|
|
14
14
|
<div class="pr-helper-selection-bar">
|
|
15
15
|
<button type="button" class="pr-helper-selection-trigger" data-selection-open>
|
|
16
16
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true">
|
|
@@ -18,7 +18,7 @@ import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d
|
|
|
18
18
|
</svg>
|
|
19
19
|
<span>${b(e.triggerLabel??`Ask`)}</span>
|
|
20
20
|
</button>
|
|
21
|
-
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${
|
|
21
|
+
<button type="button" class="pr-helper-selection-copy" data-selection-copy aria-label="${an}" aria-describedby="pr-helper-selection-tip">
|
|
22
22
|
<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">
|
|
23
23
|
<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"/>
|
|
24
24
|
<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"/>
|
|
@@ -27,63 +27,63 @@ import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d
|
|
|
27
27
|
<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"/>
|
|
28
28
|
</svg>
|
|
29
29
|
</button>
|
|
30
|
-
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${
|
|
30
|
+
<span class="pr-helper-selection-tip" id="pr-helper-selection-tip" role="tooltip">${an}</span>
|
|
31
31
|
</div>
|
|
32
32
|
<div class="pr-helper-selection-menu">${t}</div>
|
|
33
|
-
`}function
|
|
34
|
-
${
|
|
35
|
-
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${
|
|
36
|
-
</div>`}function
|
|
33
|
+
`}function fn(e){return`<div class="pr-helper-selection-menu">
|
|
34
|
+
${un(e.actions)}
|
|
35
|
+
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${on}</button>
|
|
36
|
+
</div>`}function pn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-tn,a=i>=nn?i:Math.min(t.bottom+tn,window.innerHeight-r-nn),o=Math.max(nn,Math.min(t.left,window.innerWidth-n-nn));e.style.top=`${Math.max(nn,a)}px`,e.style.left=`${o}px`}function mn(){hn&&=(window.clearTimeout(hn),0),S?.popover.remove(),S=null}var hn=0;function gn(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(en),t&&(t.textContent=sn),n&&(n.textContent=sn),hn&&window.clearTimeout(hn),hn=window.setTimeout(()=>_n(e),rn)}function _n(e){hn&&=(window.clearTimeout(hn),0),e.classList.remove(en);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=an);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=on)}async function vn(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}gn(e)}function yn(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 bn(e,t){let n={},r=()=>{let r=yn(e,t);if(!r){(!S||S.owner===n)&&mn();return}if(S&&S.owner!==n&&mn(),S)S.popover.classList.remove($t),_n(S.popover),S.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${Qt} ${cn}`:Qt,i.innerHTML=dn(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){S?.text&&vn(i,S.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add($t);let n=yn(e,t);pn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!S)return;let o=S.text;mn(),t.onChoose(a,o)}),document.body.appendChild(i),S={popover:i,text:r.text,owner:n}}pn(S.popover,r.rect)},i=e=>{S&&e.target instanceof Node&&S.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!S)return;let e=window.getSelection();(!e||e.isCollapsed)&&mn()},s=e=>{e.key===`Escape`&&mn()},c=()=>mn();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),mn()}}var xn=[{id:`explain-detail`,label:`Explain (technical)`,instruction:`Explain this, keeping the technical detail.`},{id:`explain`,label:`Explain (simple)`,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:`why-matters`,label:`Why does this matter?`,instruction:`Why does this matter? Say who or what it affects, and when.`},{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`}];function Sn(e){return![...xn,...Cn].find(t=>t.id===e)?.instruction}var Cn=[{id:`add-to-chat`,label:`Add to chat`}],wn=800;function Tn(e,t={}){let n=t.maxChars??wn,r=e.replace(/\r\n/g,`
|
|
37
37
|
`).split(`
|
|
38
38
|
`).map(e=>e.replace(/\s+$/,``));for(;r.length&&!r[0].trim();)r.shift();for(;r.length&&!r[r.length-1].trim();)r.pop();let i=r.filter(e=>e.trim()).map(e=>e.match(/^[ \t]*/)[0].length),a=i.length?Math.min(...i):0,o=r.map(e=>e.slice(a)).join(`
|
|
39
39
|
`).replace(/\n{3,}/g,`
|
|
40
40
|
|
|
41
41
|
`);return o.trim()?(o.length>n?`${o.slice(0,n).trimEnd()}…`:o).split(`
|
|
42
42
|
`).map(e=>`> ${e}`.trimEnd()).join(`
|
|
43
|
-
`):``}function
|
|
44
|
-
<summary class="pr-helper-simple-explanation-summary">${
|
|
43
|
+
`):``}function En(e,t,n={}){let r=Tn(e,n);if(!r)return null;let i=[...xn,...Cn].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function Dn(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}function C(e,t=``){return typeof e==`string`?e:t}var On=`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 kn(e){return e===0?``:`<span class="pr-helper-closed-findings-waiting" data-closed-findings-waiting> ${e===1?`1 suggestion waiting`:`${e} suggestions waiting`}</span>`}var An=[`explain-detail`,`explain`];function jn(e){return An.includes(e)}function Mn(e){return e.action??`explain`}var Nn=`Ask more →`,Pn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Fn(e){return Pn[Mn(e)]}function In(e,t={}){let n=Je(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Nn}</button>`:``,i=r&&n.endsWith(`</p>`)?`${n.slice(0,-4)} ${r}</p>`:n+r;return`<details class="pr-helper-simple-explanation" data-simple-explanation${Number.isFinite(e.writtenAt)?` data-explanation-written-at="${e.writtenAt}"`:``}${t.open?` open`:``}>
|
|
44
|
+
<summary class="pr-helper-simple-explanation-summary">${Fn(e)}</summary>
|
|
45
45
|
<div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
|
|
46
|
-
</details>`}function In(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Ln(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function Rn(e,t){return An(e)&&t?{explains:{...t,action:e}}:{}}function zn(e){let t=Bn(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function Bn(e){let t=e.closest(`[data-finding-card]`),n=Ln(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Vn(e,t){let n=e.querySelector(In(t.kind,t.id));if(!n)return;let r=Fn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Hn(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Hn(e,t){if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-desc`);let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n,i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function Un(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Wn=/^pr-helper-severity-(critical|major|minor|nit)$/;function Gn(e,t){let n=e.querySelector(In(t.kind,t.id));if(!n)return null;if(t.kind===`issue`){for(let e of[...n.classList])Wn.test(e)&&n.classList.remove(e);t.cardClass&&n.classList.add(t.cardClass)}return n.querySelector(`[data-grade-control]`)?.replaceWith(qn(e,t.grade)),n.querySelector(`[data-assessment-region]`)?.replaceWith(qn(e,t.region)),n.querySelector(`[${_t}]`)?.setAttribute(_t,t.copy),Kn(e),n}function Kn(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=On(r);i&&n.append(qn(e,i))}}function qn(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function Jn(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var Yn=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function Xn(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return Jn(t,Yn),!1}if(a===null)return!1;let o=a.body?.card?Gn(e,a.body.card):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(Jn(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function Zn(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=Bn(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),Xn(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function Qn(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await Xn(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function $n(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){Zn(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&Qn(i,t)})}function er(e){let t=En(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${wn(t,{maxChars:1/0})}\n\n${wn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}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 tr=`saved:`,nr=`Your prompts`;function rr(e){return`${tr}${e}`}function ir(e){return e.startsWith(`saved:`)?e.slice(6):null}var ar=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],or=`#theme-`,sr=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],cr=`&focus=`;function lr(e){return`#${e}`}function ur(e){return`${or}${encodeURIComponent(e)}`}function w(e){let t=e.kind===`view`?lr(e.view):ur(e.sectionId);return e.focus?`${t}${cr}${e.focus}`:t}var dr=[`architecture`,`map`,`diagram`];function fr(e,t){return dr.includes(e)&&dr.includes(t??``)?e:void 0}function pr(e,t){let n=vr(e),r=n?.kind===`view`&&n.view===t?n.focus:fr(t,n?.focus);return w({kind:`view`,view:t,...r?{focus:r}:{}})}function mr(e){let{focus:t,...n}=e;return n}function hr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function gr(e){return sr.includes(e)}function _r(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&gr(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&ar.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function vr(e){let t=e.indexOf(cr);if(t===-1)return yr(e);let n=yr(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return gr(r)?{...n,focus:r}:n}function yr(e){if(e.startsWith(or)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return ar.includes(t)?{kind:`view`,view:t}:null}var br=`pushedFocus`;function xr(e){let{[br]:t,...n}=e;return n}function Sr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function Cr(e,t,n){if(e.focus===t)return;let r={...mr(xr(e)),focus:t};e.focus&&n.history.state?.[br]?n.history.replaceState({...r,[br]:!0},``,w(r)):n.history.pushState({...r,[br]:!0},``,w(r)),n.apply(r)}function wr(e,t){if(!e.focus)return;if(t.history.state?.[br]){t.history.back();return}let n=mr(xr(e));t.history.replaceState(n,``,w(n)),t.apply(n)}function Tr(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&&d(r)&&r.value!==``)}function Er(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)}}var Dr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function Or(e){return Dr.includes(e)}function kr(e){if(!e||typeof e!=`object`)return;let t={};for(let n of Dr){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function Ar(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=kr(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function jr(e){return e?e===`buddy`?`buddy`:`document`:null}function Mr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return sr.includes(i)&&n(i)?i:null}function Nr(e){if(!e)return{};try{return Ar(JSON.parse(e))}catch{return{}}}function Pr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=jr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!Or(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Fr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ir(e);if(a===null)return Tn(t,e,i);let o=r(a);if(!o)return null;let s=wn(t,i);return s?`${s}\n\n${o}`:null}function Ir(e,t,n){if(n.busy?.())return null;let r=Fr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=xn(e)||ir(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Lr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Rr=`Run review again`;function zr(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 Br(e){let t=e.dataset.questionAnswered;t&&zr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Vr=`pr-helper-author-context-preview`,Hr=`View full PR description`,Ur=`Show less`;function Wr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Vr);if(!n)return;let i=n.closest(`#${Jr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Gr(n);if(!o){let e=-Kr(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Ur:Hr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&qr(n,s,Kr(n,s)+e);return}i&&Kr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Gr(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function Kr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function qr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Jr=`pr-helper-author-context`;function Yr(e){let t=e.ownerDocument.getElementById(Jr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Wr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Xr(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Zr(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 Qr(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}return t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function $r(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 ei(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 ti(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function ni(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function ri(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function ii(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var ai=50;function oi(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function T(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function si(e){if(!e||typeof e!=`object`)return;let t=e,n=T(t.top);return{cited:T(t.cited),centre:T(t.centre),expand:T(t.expand,ai),position:T(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function ci(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function li(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?ci(n):{top:null,offset:0};return{cited:T(e.dataset.cited),centre:T(e.dataset.centre),expand:T(e.dataset.expand,ai),position:T(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function ui(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function di(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function fi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function pi(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function mi(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=oi(e);return{host:pi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:li(t)}:{}}})}function hi(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function gi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&pi(n)===t.host)return n;return null}function _i(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function vi(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:mi(t),...te(t)}}async function yi(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,s=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=s[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?n.setAsk(t.ask===`open`):t.ask===null&&n.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(_i).map(e=>({...e,state:si(e.state)}));for(let t of mi(r))if(!e.some(e=>hi(e,t))){let e=gi(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=gi(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=_(t,`main`);i&&c!==null&&(i.scrollTop=c);let u=_(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=_(t,`log`);return o&&d!==null&&(o.scrollTop=d),l(r,t.focus,t.focusVisible),!0}var bi=`prb-ask-draft:`,xi=`prb-ask-staged:`,Si=300;function Ci(e){return`${bi}${e}`}function wi(e){return`${xi}${e}`}function Ti(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function Ei(e,t){let{storage:n,win:r}=t,i=Ci(t.path),a=wi(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Ti(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Si)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function Di(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Oi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function ki(e){return`<details class="prb-update-alt">
|
|
46
|
+
</details>`}function Ln(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function Rn(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function zn(e,t){return jn(e)&&t?{explains:{...t,action:e}}:{}}function Bn(e){let t=Vn(e),n=e.closest(`[data-simple-explanation]`);if(!t||!n)return null;let r=Number(n.getAttribute(`data-explanation-written-at`)??NaN);return Number.isFinite(r)?{...t,writtenAt:r}:t}function Vn(e){let t=e.closest(`[data-finding-card]`),n=Rn(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function Hn(e,t){let n=e.querySelector(Ln(t.kind,t.id));if(!n)return;let r=In(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}Un(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function Un(e,t){if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-desc`);let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n,i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function Wn(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var Gn=/^pr-helper-severity-(critical|major|minor|nit)$/;function Kn(e,t){let n=e.querySelector(Ln(t.kind,t.id));if(!n)return null;if(t.kind===`issue`){for(let e of[...n.classList])Gn.test(e)&&n.classList.remove(e);t.cardClass&&n.classList.add(t.cardClass)}return n.querySelector(`[data-grade-control]`)?.replaceWith(Jn(e,t.grade)),n.querySelector(`[data-assessment-region]`)?.replaceWith(Jn(e,t.region)),n.querySelector(`[${vt}]`)?.setAttribute(vt,t.copy),qn(e),n}function qn(e){for(let t of e.querySelectorAll(`[data-closed-findings]`)){let n=t.querySelector(`[data-closed-findings-summary]`);if(!n)continue;let r=t.querySelectorAll(`.pr-helper-closed-findings-list [data-reassessment-proposal]`).length;n.querySelector(`[data-closed-findings-waiting]`)?.remove();let i=kn(r);i&&n.append(Jn(e,i))}}function Jn(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function Yn(e,t){let n=e?.querySelector(`[data-assessment-region]`);if(!n)return;n.querySelector(`.pr-helper-reassessment-error`)?.remove();let r=n.ownerDocument.createElement(`p`);r.className=`pr-helper-reassessment-error`,r.setAttribute(`role`,`alert`),r.textContent=t,n.append(r)}var Xn=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function Zn(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return Yn(t,Xn),!1}if(a===null)return!1;let o=a.body?.card?Kn(e,a.body.card):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(Yn(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function Qn(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=Vn(e),a=e.dataset.gradeTo;if(!n||!r||!i||!a)return!1;let o=n.dataset.gradeFrom||null,s=n.querySelector(`[data-grade-reason]`)?.value.trim()??``;return t.closeMenu?.(n),Zn(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function $n(e,t){let n=e.closest(`[data-reassessment-proposal]`),r=e.closest(`[data-finding-card]`),i=e.dataset.reassessmentDecide,a=n?.dataset.reassessmentProposal;if(!r||!a||i!==`accepted`&&i!==`declined`)return!1;for(let e of n.querySelectorAll(`button`))e.disabled=!0;let o=await Zn(e.ownerDocument,r,{op:`decide`,proposalId:a,decision:i},t,`region`);if(!o)for(let e of n.querySelectorAll(`button`))e.disabled=!1;return o}function er(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){Qn(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&$n(i,t)})}function tr(e){let t=Dn(e);if(!t)return null;let n=e.closest(`[data-reassessment-proposal]`),r=n?.querySelector(`.pr-helper-reassessment-proposal-title`)?.textContent?.trim()??``,i=n?.querySelector(`.pr-helper-reassessment-reason`)?.textContent?.trim()??``;return`${Tn(t,{maxChars:1/0})}\n\n${Tn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}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 nr=`saved:`,rr=`Your prompts`;function ir(e){return`${nr}${e}`}function ar(e){return e.startsWith(`saved:`)?e.slice(6):null}var or=[`progress`,`overview`,`guide`,`issues`,`questions`,`files`,`prcontext`,`architecture`,`map`,`diagram`,`kiss`,`kissrecs`],sr=`#theme-`,cr=[`buddy`,`overview`,`guide`,`architecture`,`map`,`diagram`,`issues`,`questions`,`files`,`prcontext`,`kiss`,`kissrecs`,`progress`],lr=`&focus=`;function ur(e){return`#${e}`}function dr(e){return`${sr}${encodeURIComponent(e)}`}function w(e){let t=e.kind===`view`?ur(e.view):dr(e.sectionId);return e.focus?`${t}${lr}${e.focus}`:t}var fr=[`architecture`,`map`,`diagram`];function pr(e,t){return fr.includes(e)&&fr.includes(t??``)?e:void 0}function mr(e,t){let n=yr(e),r=n?.kind===`view`&&n.view===t?n.focus:pr(t,n?.focus);return w({kind:`view`,view:t,...r?{focus:r}:{}})}function hr(e){let{focus:t,...n}=e;return n}function gr(e,t){return e.kind!==`view`||e.view!==`guide`||!t?e:{kind:`section`,sectionId:t,...e.focus?{focus:e.focus}:{}}}function _r(e){return cr.includes(e)}function vr(e){if(!e||typeof e!=`object`)return null;let{kind:t,view:n,sectionId:r,focus:i}=e,a=typeof i==`string`&&_r(i)?{focus:i}:{};return t===`view`&&typeof n==`string`&&or.includes(n)?{kind:t,view:n,...a}:t===`section`&&typeof r==`string`&&r!==``?{kind:t,sectionId:r,...a}:null}function yr(e){let t=e.indexOf(lr);if(t===-1)return br(e);let n=br(e.slice(0,t));if(!n)return null;let r=e.slice(t+7);return _r(r)?{...n,focus:r}:n}function br(e){if(e.startsWith(sr)){let t=e.slice(7);if(!t)return null;try{return{kind:`section`,sectionId:decodeURIComponent(t)}}catch{return null}}let t=e.replace(/^#/,``);return or.includes(t)?{kind:`view`,view:t}:null}var xr=`pushedFocus`;function Sr(e){let{[xr]:t,...n}=e;return n}function Cr(e,t){return e.kind===`view`&&t.kind===`view`?e.view===t.view:e.kind===`section`&&t.kind===`section`&&e.sectionId===t.sectionId}function wr(e,t,n){if(e.focus===t)return;let r={...hr(Sr(e)),focus:t};e.focus&&n.history.state?.[xr]?n.history.replaceState({...r,[xr]:!0},``,w(r)):n.history.pushState({...r,[xr]:!0},``,w(r)),n.apply(r)}function Tr(e,t){if(!e.focus)return;if(t.history.state?.[xr]){t.history.back();return}let n=hr(Sr(e));t.history.replaceState(n,``,w(n)),t.apply(n)}function Er(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&&d(r)&&r.value!==``)}function Dr(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)}}var Or=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function kr(e){return Or.includes(e)}function Ar(e){if(!e||typeof e!=`object`)return;let t={};for(let n of Or){let r=e[n];typeof r==`boolean`&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}function jr(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r}=e,i=Ar(r);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...i?{rail:i}:{}}}function Mr(e){return e?e===`buddy`?`buddy`:`document`:null}function Nr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return cr.includes(i)&&n(i)?i:null}function Pr(e){if(!e)return{};try{return jr(JSON.parse(e))}catch{return{}}}function Fr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Mr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!kr(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))}}}function Ir(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=ar(e);if(a===null)return En(t,e,i);let o=r(a);if(!o)return null;let s=Tn(t,i);return s?`${s}\n\n${o}`:null}function Lr(e,t,n){if(n.busy?.())return null;let r=Ir(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=Sn(e)||ar(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function Rr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var zr=`Run review again`;function Br(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 Vr(e){let t=e.dataset.questionAnswered;t&&Br(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Hr=`pr-helper-author-context-preview`,Ur=`View full PR description`,Wr=`Show less`;function Gr(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Hr);if(!n)return;let i=n.closest(`#${Yr}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=Kr(n);if(!o){let e=-qr(n,s);e>0?n.dataset.readingOffset=String(e):delete n.dataset.readingOffset}n.hidden=!o,r&&(r.hidden=o),i?.toggleAttribute(`data-expanded`,o);for(let e of a)e.setAttribute(`aria-expanded`,String(o)),e.textContent=o?Wr:Ur,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&Jr(n,s,qr(n,s)+e);return}i&&qr(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function Kr(e){let t=e.ownerDocument.defaultView;for(let n=e.parentElement;n;n=n.parentElement)if(/^(?:auto|scroll|overlay)$/.test(t?.getComputedStyle(n).overflowY??``))return n;return null}function qr(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function Jr(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var Yr=`pr-helper-author-context`;function Xr(e){let t=e.ownerDocument.getElementById(Yr);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&Gr(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;function Zr(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function Qr(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 $r(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}return t===0?`Dismissed by you (${e.done})`:`Dealt with (${e.done})`}function ei(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 ti(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 ni(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function ri(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function ii(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function ai(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var oi=50;function si(e){let t=e.tagName===`LI`?e.querySelector(`:scope > .prb-code`):e.nextElementSibling;return t?.classList.contains(`prb-code`)?t:null}function T(e,t=2**53-1){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),t):0}function ci(e){if(!e||typeof e!=`object`)return;let t=e,n=T(t.top);return{cited:T(t.cited),centre:T(t.centre),expand:T(t.expand,oi),position:T(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function li(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr[data-line]`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{top:Number(n.dataset.line)||null,offset:Math.round(e.top-t)}}return{top:null,offset:0}}function ui(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?li(n):{top:null,offset:0};return{cited:T(e.dataset.cited),centre:T(e.dataset.centre),expand:T(e.dataset.expand,oi),position:T(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function di(e,t,n){let r=e.querySelector(`.prb-code-scroll`);if(!r)return;if(t===null){r.scrollTop=0;return}let i=null,a=1/0;for(let e of r.querySelectorAll(`tr[data-line]`)){let n=Math.abs((Number(e.dataset.line)||0)-t);n<a&&(i=e,a=n)}i&&(r.scrollTop+=i.getBoundingClientRect().top-r.getBoundingClientRect().top-n)}function fi(e,t){return e.cited===t.cited&&e.centre===t.centre&&e.expand===t.expand&&e.position===t.position}function pi(){let e=new WeakMap,t=0;return{run(n,r,i){let a=++t,o=i().then(t=>e.get(n)?.ticket===a&&(e.delete(n),t(),!0),()=>(e.get(n)?.ticket===a&&e.delete(n),!1));return e.set(n,{ticket:a,request:r,done:o}),o},pending(t){return e.get(t)}}}function mi(e){let t=e.closest(`[data-finding-card]`);if(t)return`card:${t.getAttribute(`data-finding-card`)??``}`;let n=e.closest(`[data-guide-section]`);return n?`theme:${n.getAttribute(`data-guide-section`)??``}`:`view:${e.closest(`[data-view]`)?.getAttribute(`data-view`)??``}`}function hi(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=si(e);return{host:mi(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:ui(t)}:{}}})}function gi(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function _i(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&mi(n)===t.host)return n;return null}function vi(e){if(!e||typeof e!=`object`)return!1;let{host:t,file:n,line:r}=e;return typeof t==`string`&&typeof n==`string`&&n!==``&&typeof r==`string`}function yi(e){let{doc:t,main:n,rail:r,log:i,panes:a}=e,o={};for(let e of t.querySelectorAll(`[data-rail-toggle][aria-controls]`))o[e.getAttribute(`aria-controls`)]=e.getAttribute(`aria-expanded`)===`true`;let s=a?.dataset.ask;return{main:n?.scrollTop??0,rail:r?.scrollTop??0,ask:s===`open`||s===`closed`?s:null,log:i?.scrollTop??0,folds:o,panels:hi(t),...te(t)}}async function bi(e,t,n){if(!t)return!1;let{doc:r,main:i,rail:a,log:o}=e,s=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of r.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=s[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&n.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?n.setAsk(t.ask===`open`):t.ask===null&&n.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(vi).map(e=>({...e,state:ci(e.state)}));for(let t of hi(r))if(!e.some(e=>gi(e,t))){let e=_i(r,t);e&&n.closePanel(e)}let i=[];for(let t of e){let e=_i(r,t);e&&i.push(n.openPanel(e,t.state).catch(()=>{}))}await Promise.all(i)}if(!n.stillCurrent())return!1;let c=_(t,`main`);i&&c!==null&&(i.scrollTop=c);let u=_(t,`rail`);a&&u!==null&&(a.scrollTop=u);let d=_(t,`log`);return o&&d!==null&&(o.scrollTop=d),l(r,t.focus,t.focusVisible),!0}var xi=`prb-ask-draft:`,Si=`prb-ask-staged:`,Ci=300;function wi(e){return`${xi}${e}`}function Ti(e){return`${Si}${e}`}function Ei(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t?.text!=`string`||t.source!==`selection`&&t.source!==`finding`)return null;let n=t.continues,r=n&&typeof n.id==`string`&&(n.kind===`issue`||n.kind===`question`)?{kind:n.kind,id:n.id,...Number.isFinite(n.writtenAt)?{writtenAt:n.writtenAt}:{}}:void 0;return{text:t.text,source:t.source,...r?{continues:r}:{}}}catch{return null}}function Di(e,t){let{storage:n,win:r}=t,i=wi(t.path),a=Ti(t.path),o=null,s=e=>{try{e.trim()===``?(n?.removeItem(i),n?.removeItem(a)):n?.setItem(i,e)}catch{}},c=null;if(t.restore&&e.value===``)try{let t=n?.getItem(i);if(t){e.value=t;let r=Ei(n?.getItem(a));c=r&&t.includes(r.text)?r:null}}catch{}let l={restoredStage:c,stage(e){try{n?.setItem(a,JSON.stringify(e))}catch{}},save(){o!==null&&r.clearTimeout(o),o=null,s(e.value)},saveSoon(){o!==null&&r.clearTimeout(o),o=r.setTimeout(()=>l.save(),Ci)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}function Oi(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var ki=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Ai(e){return`<details class="prb-update-alt">
|
|
47
47
|
<summary>Start a new review</summary>
|
|
48
48
|
<span>A brand new review, with its own findings and its own path through the change. Run <code>${b(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${b(e)}">Copy</button></span>
|
|
49
|
-
</details>`}var
|
|
49
|
+
</details>`}var ji=`prreviewbuddy review --fresh`;function Mi(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 Ni(e,t){if(!t.actions)return!1;let n=e??(t.remote?Bi(t.remote):null);if(!n)return!1;let r=n.code.state===`fixed`?null:t.remote??null;return n.code.state===`changed`||r!==null||n.code.reason===`missing-commit`}function Pi(e,t={}){let n=e??(t.remote?Bi(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?Vi(n.code,r):zi(n.code,t.availability??null),u=e?[...l.facts,`checked ${b(de(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
|
|
50
50
|
<div class="prb-fresh-head">
|
|
51
51
|
<span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
|
|
52
52
|
<strong class="prb-fresh-title">${b(l.title)}</strong>
|
|
53
53
|
<span class="prb-fresh-facts">${u.join(` · `)}</span>
|
|
54
54
|
</div>
|
|
55
55
|
${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
|
|
56
|
-
${
|
|
57
|
-
</div>`}function
|
|
58
|
-
${r?
|
|
59
|
-
${r?
|
|
56
|
+
${Fi(n,t,i||a,Ni(e,t))}
|
|
57
|
+
</div>`}function Fi(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
|
|
58
|
+
${r?Oi():``}
|
|
59
|
+
${r?Ai(ji):``}
|
|
60
60
|
${i}
|
|
61
|
-
${
|
|
62
|
-
</div>`}function
|
|
61
|
+
${Ii(e,t,n,r===!0)}
|
|
62
|
+
</div>`}function Ii(e,t,n,r){let i=[r?b(ki):``,t.remote?Hi(e.code):Ui(e.code,e.checkout.reason!==`no-pull-request`),Wi(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${b(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">
|
|
63
63
|
<summary>More details</summary>
|
|
64
64
|
${a}
|
|
65
|
-
</details>`:a}function
|
|
65
|
+
</details>`:a}function Li(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function Ri(e){return e?`<code title="${b(e)}">${b(e.slice(0,7))}</code>`:``}function E(e){return e?[`reviewed ${Ri(e)}`]:[]}function zi(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:E(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:E(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...E(e.reviewedSha),...Li(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(e.reviewedSha),...t,...Li(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(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(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(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 Bi(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 Vi(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:[...E(e.reviewedSha),...i,...n?Li(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${b(de(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 Hi(e){return`This review is based on ${Ri(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function Ui(e,t){if(!e.comparison)return``;let n=`<code>${b(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${Ri(e.reviewedSha)}.`:`This review is based on ${Ri(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 Wi(e,t){if(!e.conversation.attached)return``;let n=b(de(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 Gi(e,t){let n=Zr(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function Ki(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${Ji(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
|
|
66
66
|
|
|
67
|
-
`)}function
|
|
67
|
+
`)}function qi(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(Ki)].join(`
|
|
68
68
|
|
|
69
|
-
`)}function
|
|
69
|
+
`)}function Ji(e){return e.split(`
|
|
70
70
|
`).map(e=>e===``?`>`:`> ${e}`).join(`
|
|
71
|
-
`)}function
|
|
71
|
+
`)}function Yi(e){return e===`done`||e===`failed`}function Xi(e,t){let n=e=>e.toLowerCase().replace(/\bthe\b/g,``).replace(/[^a-z]/g,``);return n(e)===n(t)}function Zi(e,t=``){return`<div class="prb-doc-head">
|
|
72
72
|
<h3 class="prb-doc-title">${b(e)}</h3>
|
|
73
73
|
${t}
|
|
74
|
-
</div>`}var
|
|
74
|
+
</div>`}var Qi=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,$i=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function ea(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 ta(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${b(t)}" aria-pressed="false" aria-label="${b(n)}" title="${b(n)}">${ea(Qi,`prb-focus-expand`)}${ea($i,`prb-focus-collapse`)}</button>`}ta(`kiss`,`KISS review`),Zi(`Recommendations`,ta(`kissrecs`,`Recommendations`));var na={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function ra(e,t){return t===`undecided`?`Open`:na[e][t]}function ia(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 aa(e){return`Decided (${e})`}function oa(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 sa(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">
|
|
75
75
|
<p><strong>This KISS review describes commit ${b(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
|
|
76
76
|
</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">
|
|
77
77
|
<p><strong>This KISS review describes commit ${b(e.slice(0,7))}.</strong> ${b(i)}</p>
|
|
78
78
|
<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>
|
|
79
79
|
<p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${b(t.latestSha)}">Not now</button>`:``}</p>
|
|
80
|
-
</div>`}var
|
|
80
|
+
</div>`}var ca=new WeakMap;function la(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function ua(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{ba(e);let i=e.contains(document.activeElement);da(e,t),va(e,!0),pa(n),i&&ya(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(va(e,!1),a){pa(n);return}da(e,r),pa(n),xa(e,t,n)},a=(ca.get(e)??Promise.resolve()).then(i,i);return ca.set(e,a),a}function da(e,t){e.dataset.decision=t;let n=_a(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=ra(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=na[n][r.dataset.kissDecide];fa(e,t!==`undecided`)}function fa(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 pa(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=ia(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=aa(r))}e.paintRail(n.length,i),ma(t)}function ma(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=ga(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=oa(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?qi(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function ha(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),ma(t))}function ga(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function _a(e){return e.dataset.audience===`author`?`author`:`reviewer`}function va(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function ya(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 ba(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function xa(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 ua(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 Sa(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 Ca(e,t){t.complete!==void 0&&Ea(e,t.complete),t.activity!==void 0&&wa(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Da(e,Ta(e)):Da(e,t.lifecycle??void 0),t.queued!==void 0&&Oa(e,t.queued)}function wa(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(delete n.dataset.activityAt,delete n.dataset.activityKind,delete n.dataset.activityMovedAt,t&&(n.dataset.activityAt=String(t.at),n.dataset.activityKind=t.kind,t.movedAt!==void 0&&(n.dataset.activityMovedAt=String(t.movedAt))))}function Ta(e){let t=e.querySelector(`[data-review-menu]`);return v(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Ea(e,t){let r=t?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&(i.dataset.status=r,i.textContent=o(r));let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=t?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=n(e)}}function Da(t,n){let i=t.querySelector(`[data-review-menu]`);i&&(n?(i.dataset.lifecycleState=n.state,i.dataset.lifecycleAt=String(n.at)):(delete i.dataset.lifecycleState,delete i.dataset.lifecycleAt));let a=i?ka(i):void 0,o=t.querySelector(`[data-page-lifecycle]`);if(o){let e=r(n,a);o.hidden=e===void 0,o.textContent=e?.text??``,o.toggleAttribute(`data-changed`,e?.changed===!0)}for(let r of t.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let t=r.dataset.lifecycleSet;r.hidden=!e(t,n,a),r.textContent=s(t,n,a)}}function Oa(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=i(t))}function ka(e){return a(e.dataset)}function Aa(e){return v(e)??null}function ja(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Aa(n)};if(typeof t==`boolean`&&(a.complete=t),typeof r==`boolean`&&(a.queued=r),i===null)a.activity=null;else{let e=f(i);e&&(a.activity=e)}return a}function Ma(){let e=0,t=0;return{snapshot:()=>e,current:n=>t===0&&n===e,begin:()=>{e+=1,t+=1;let n=!1;return()=>{n||(n=!0,e+=1,--t)}}}}var Na=`The workspace server did not answer. It may have stopped.`;function Pa(t){let n=()=>t.root.querySelector(`[data-review-menu]`),r=!1,i=async(e,n,i)=>{if(r)return{error:null,busy:!0};r=!0;let a=t.gate.begin();try{let r=await t.post(e,n),a=await r.json().catch(()=>null);return r.ok&&a?(Ca(t.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:Na}}finally{r=!1,a()}},o=e=>i(`/queue`,{action:e},e=>({lifecycle:Aa(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>i(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>i(`/lifecycle`,{state:e},e=>({lifecycle:Aa(e.lifecycle),queued:e.queued===!0})),setQueued:o,toggleQueued:()=>o(n()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await t.checkForUpdates()},deleteReview:async()=>{try{let e=await t.post(`/delete`);return e.ok?{error:null}:{error:(await e.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:Na}}},offer:()=>{let i=n(),o=i?.hasAttribute(`data-can-write`)===!0,s=o&&i?.hasAttribute(`data-branch-actions`)===!0,c=i?v({state:i.dataset.lifecycleState,at:Number(i.dataset.lifecycleAt)}):void 0,l=i?a(i.dataset):void 0,u=t.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,d=!r;return{reviewed:d&&o&&!u,waiting:d&&s&&e(`waiting`,c,l),done:d&&s&&e(`done`,c,l),queue:d&&s,checkForUpdates:o&&i?.hasAttribute(`data-checkable`)===!0,delete:o}},busy:()=>r}}function Fa(e,t){return`${e} ${t}${e===1?``:`s`}`}function Ia(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Fa(e,`issue`):``,questions:t?Fa(t,`question`):``}}function La(e,t){let n=Ia(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Ra(e){return e===0?``:`${e} chosen`}function za(e){let t=(e,t)=>{let n=t.map(e=>e.trim()).filter(Boolean);return n.length===0?null:`## ${e}\n\n${n.map((e,t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
|
|
81
81
|
|
|
82
82
|
`)}).join(`
|
|
83
83
|
|
|
84
84
|
`)}`};return[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean).join(`
|
|
85
85
|
|
|
86
|
-
`)}var za=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;za(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),za(`<path d="M20 6 9 17l-5-5"/>`);function Ba(e){return Ra({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Va(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=Ha(t);return n?.basis!==r&&(n={text:Ba(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!Wa(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function Ha(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify(t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1))}var Ua=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Wa(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Ua(t.issues)||!Ua(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var D=[`preview`,`markdown`],Ga={issue:`issues`,question:`questions`};function Ka({root:e,showView:t}){let n=Va(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Fa(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=La(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,t)}let s=()=>({issues:qa(e,`issue`,n.ids(`issue`)),questions:qa(e,`question`,n.ids(`question`))}),c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return Ba(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Ia(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){Ja(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(_t,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>Xa(e,t)),a(),c}function qa(e,t,n){return[...e.querySelectorAll(`[data-view="${Ga[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>({id:e,text:t.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``}))}function Ja(e,t){for(let n of D){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return Ya(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Ya(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?qe(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function Xa(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=D.indexOf(n),i=t.key===`ArrowRight`?D[(r+1)%D.length]:t.key===`ArrowLeft`?D[(r+D.length-1)%D.length]:t.key===`Home`?D[0]:t.key===`End`?D[D.length-1]:null;i&&(t.preventDefault(),Ja(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Za(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function Qa(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!Za(t),run:()=>n()?.click()}}}function $a(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function eo(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function to(e){let{doc:t}=e,n=de({doc:t,item:`[data-finding-card]`,walk:()=>$a(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>$a(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>$a(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!eo(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}var no=`prb-rail-review`;function ro(e){return(e.getElementById(no)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}function io(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.name}\n${e.prompt}`.toLowerCase();return n.every(e=>t.includes(e))})}function ao(e){return e<0||e>=10?null:e===9?`0`:String(e+1)}function oo(e){return/^[0-9]$/.test(e)?e===`0`?9:Number(e)-1:null}function so(e){return{title:`Choose a prompt`,mount(t,n){let r=t.ownerDocument,i=e.prompts(),a=r.createElement(`input`);a.type=`search`,a.className=`prb-palette-input`,a.placeholder=`Filter prompts`,a.setAttribute(`aria-label`,`Filter prompts`),a.spellcheck=!1;let o=r.createElement(`p`);o.className=`prb-palette-summary`,o.setAttribute(`aria-live`,`polite`);let s=r.createElement(`div`);s.className=`prb-palette-results`,s.setAttribute(`role`,`group`),s.setAttribute(`aria-label`,`Prompts`);let c=[],l=()=>[...s.querySelectorAll(`[data-prompt-choice]`)],u=()=>{let e=r.activeElement===a;for(let[t,n]of l().entries())n.toggleAttribute(`data-enter-target`,e&&t===0)},d=()=>{c=io(i,a.value),s.replaceChildren(...c.map((e,t)=>{let n=r.createElement(`button`);n.type=`button`,n.className=`prb-palette-result prb-palette-prompt`,n.dataset.promptChoice=e.id;let i=r.createElement(`kbd`);i.className=`prb-kbd prb-palette-num`;let a=ao(t);a?i.textContent=a:i.setAttribute(`aria-hidden`,`true`);let o=r.createElement(`span`);o.className=`prb-palette-prompt-text`;let s=r.createElement(`span`);s.className=`prb-palette-result-title`,s.textContent=e.name;let c=r.createElement(`span`);return c.className=`prb-palette-prompt-said`,c.textContent=e.prompt,o.append(s,c),n.append(i,o),n})),o.textContent=i.length===0?`No saved prompts yet. Add one under Your prompts in Buddy AI.`:c.length===0?`No prompts match.`:c.length===i.length?`${i.length} ${i.length===1?`prompt`:`prompts`}`:`${c.length} of ${i.length} prompts`,u()},f=t=>{!t||!c.some(e=>e.id===t)||(n(),e.choose(t))},ee=e=>{a.value=e===`Backspace`?a.value.slice(0,-1):a.value+e,a.focus(),a.dispatchEvent(new Event(`input`,{bubbles:!0}))};a.addEventListener(`input`,d),a.addEventListener(`focus`,u),a.addEventListener(`blur`,u),s.addEventListener(`click`,e=>{f(e.target.closest(`[data-prompt-choice]`)?.dataset.promptChoice)}),t.addEventListener(`keydown`,e=>{if(e.isComposing||e.metaKey||e.ctrlKey||e.altKey)return;let t=l(),n=e.target===a,r=t.indexOf(e.target),i=oo(e.key);if(i!==null)return e.preventDefault(),f(t[i]?.dataset.promptChoice);if(e.key===`Enter`)return e.preventDefault(),f((n?t[0]:t[r])?.dataset.promptChoice);let o=e.key===`ArrowDown`||!n&&e.key===`j`,s=e.key===`ArrowUp`||!n&&e.key===`k`;if(o||s){let n=o?r<0?t[0]:t[r+1]:r<=0?a:t[r-1];e.preventDefault(),n?.focus();return}!n&&(e.key.length===1||e.key===`Backspace`)&&(e.preventDefault(),ee(e.key))}),t.append(a,o,s),d(),a.focus()}}}ea(`progress`,`Review progress`);function co(e,t=Date.now()){return`Running for ${lo(t-e)}`}function lo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var uo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function fo(e){let t=new Map;for(let n of Object.keys(uo)){let r=uo[n],i=e.querySelector(`[${r}]`);i&&!Ji(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function po(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Ji(t.phase):mo(t.phase,n)}function mo(e,t){return Ji(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function ho(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||Yi(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 go(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=co(e))}}function _o(e,t=1e3){let n=window.setInterval(()=>go(e),t);return()=>window.clearInterval(n)}async function vo({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||Ji(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function yo(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-${b(e.scope)}" data-diagram-card="${b(e.scope)}">
|
|
86
|
+
`)}var Ba=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;Ba(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Ba(`<path d="M20 6 9 17l-5-5"/>`);function Va(e){return za({issues:e.issues.map(e=>e.text),questions:e.questions.map(e=>e.text)})}function Ha(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=Ua(t);return n?.basis!==r&&(n={text:Va(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!Ga(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function Ua(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify(t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1))}var Wa=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Ga(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!Wa(t.issues)||!Wa(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var D=[`preview`,`markdown`],Ka={issue:`issues`,question:`questions`};function qa({root:e,showView:t}){let n=Ha(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Ia(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=Ra(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(vt,t)}let s=()=>({issues:Ja(e,`issue`,n.ids(`issue`)),questions:Ja(e,`question`,n.ids(`question`))}),c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return Va(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=La(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){Ya(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(vt,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>Za(e,t)),a(),c}function Ja(e,t,n){return[...e.querySelectorAll(`[data-view="${Ka[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>({id:e,text:t.querySelector(`[data-feedback-source]`)?.getAttribute(`data-feedback-source`)??``}))}function Ya(e,t){for(let n of D){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return Xa(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function Xa(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?Je(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function Za(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=D.indexOf(n),i=t.key===`ArrowRight`?D[(r+1)%D.length]:t.key===`ArrowLeft`?D[(r+D.length-1)%D.length]:t.key===`Home`?D[0]:t.key===`End`?D[D.length-1]:null;i&&(t.preventDefault(),Ya(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function Qa(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function $a(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!Qa(t),run:()=>n()?.click()}}}function eo(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function to(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function no(e){let{doc:t}=e,n=fe({doc:t,item:`[data-finding-card]`,walk:()=>eo(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>eo(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>eo(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!to(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}var ro=`prb-rail-review`;function io(e){return(e.getElementById(ro)?.closest(`.prb-rail-group`)?.querySelector(`a.prb-rail-group-title`))?.dataset.viewNav??null}ta(`progress`,`Review progress`);function ao(e,t=Date.now()){return`Running for ${oo(t-e)}`}function oo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var so={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function co(e){let t=new Map;for(let n of Object.keys(so)){let r=so[n],i=e.querySelector(`[${r}]`);i&&!Yi(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function lo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||Yi(t.phase):uo(t.phase,n)}function uo(e,t){return Yi(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function fo(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||Xi(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 po(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=ao(e))}}function mo(e,t=1e3){let n=window.setInterval(()=>po(e),t);return()=>window.clearInterval(n)}async function ho({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||Yi(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function go(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-${b(e.scope)}" data-diagram-card="${b(e.scope)}">
|
|
87
87
|
<header class="prb-diagram-head">
|
|
88
88
|
<div class="prb-diagram-heading">
|
|
89
89
|
<h4 class="prb-diagram-title">
|
|
@@ -102,70 +102,70 @@ import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d
|
|
|
102
102
|
</div>
|
|
103
103
|
</header>
|
|
104
104
|
${e.caption?`<p class="prb-diagram-caption">${b(e.caption)}</p>`:``}
|
|
105
|
-
${
|
|
105
|
+
${_o(e,n)}
|
|
106
106
|
<div class="prb-diagram-canvas" data-diagram-canvas></div>
|
|
107
107
|
<details class="prb-diagram-source">
|
|
108
108
|
<summary>Diagram source</summary>
|
|
109
|
-
<div class="${
|
|
109
|
+
<div class="${me}"><pre><code data-mermaid-source>${b(e.mermaid)}</code></pre><button type="button" class="${he}" aria-label="Copy code">Copy</button></div>
|
|
110
110
|
</details>
|
|
111
|
-
</article>`}function
|
|
111
|
+
</article>`}function _o(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${b(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 vo=.5,yo=3,bo=1.25,xo=new WeakSet,So=new WeakMap,Co=new WeakMap,O=null;function wo(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(()=>{O?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Lo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){Bo(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?Eo(e):o&&To(e,o.dataset.diagramRequest||null)}),Ao(),Do(),{drawPane:Ro}}async function To(e,t){if(O)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${Jo(n)}"]`)??null??No(r,n,t);if(!i)return;jo(),e.showDiagrams();let a=Po(i);O=new AbortController,Uo(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:O.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 Fo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Io(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),jo()):a.remove();return}Fo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{O=null,Uo(!0)}}async function Eo(e){if(O)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=Oo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),O=new AbortController,Uo(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:O.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){ko(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),jo()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}ko(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),O=null,Uo(!0)}}function Do(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(Oo(e),Uo(!1))}function Oo(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 ko(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Ao(){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="${Jo(n)}"]`)??No(e,n,t);r&&(jo(),Po(r,{scroll:!1}),Uo(!1))}function jo(){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;Mo(`map`,t>0),Mo(`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 Mo(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 No(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">
|
|
112
112
|
<div class="prb-diagram-heading">
|
|
113
113
|
<h4 class="prb-diagram-title">Drawing…</h4>
|
|
114
|
-
<p class="prb-diagram-scope">${t===`change`?`Whole change`:
|
|
114
|
+
<p class="prb-diagram-scope">${t===`change`?`Whole change`:qo(Wo(n))}</p>
|
|
115
115
|
</div>
|
|
116
|
-
</header>`,
|
|
116
|
+
</header>`,Go(e,r,n),r}function Po(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:Yo()?`auto`:`smooth`,block:`start`}),n}function Fo(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 Io(e,t,n){let r=go(t,new Map(n?[[n,Wo(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),jo(),zo(a))}function Lo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||zo(e))}function Ro(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))zo(e)}async function zo(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||xo.has(e)||e.hasAttribute(`data-diagram-collapsed`))){xo.add(e);try{await Ut(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{xo.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 Bo(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Co.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=Vo(e,n);if(i<=0)return;let a=Ho((Co.get(e)??1)*(t===`in`?bo:1/bo));Co.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function Vo(e,t){let n=So.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return So.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function Ho(e){return Math.min(yo,Math.max(vo,e))}function Uo(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function Wo(e){return e?document.querySelector(`[data-goto-section="${Jo(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function Go(e,t,n){let r=Ko(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(Ko(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function Ko(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${Jo(e)}"]`);return Number(t?.dataset.themeIndex??0)}function qo(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Jo(e){return CSS.escape(e)}function Yo(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var Xo=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],Zo=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],k={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},Qo={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function $o(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}=es(t.nodes);return{schemaVersion:1,title:os(C(t.title).trim(),k.mapTitle)||`Change map`,intent:ns(t.intent,k.intent)??{simple:``,technical:``},nodes:n,edges:ts(t.edges,r)}}function es(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=ns(e.title,k.title);if(!a)continue;let o=C(e.id).trim()||a.technical;if(t.has(o))continue;let s=as(is(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=Xo.includes(e.role)?e.role:`concept`,l=ns(e.why,k.why),u=os(C(e.anchor).trim(),k.anchor),d=C(e.sectionId).trim();r.push({id:s,role:c,stage:rs(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:ns(e.body,k.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function ts(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=ns(e.label,k.label),a=t.get(C(e.from).trim())??C(e.from).trim(),o=t.get(C(e.to).trim())??C(e.to).trim();if(!i||!a||!o)continue;let s=ns(e.note,k.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function ns(e,t){if(typeof e==`string`){let n=os(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=os(C(n.simple).trim(),t),i=os(C(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function rs(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:Qo[t]}function is(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function as(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function os(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 ss(e,t){try{return cs($o(e),t).map}catch{return null}}function cs(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=ds(ls(e.nodes,n).map(e=>us(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:fs(r),edges:o},audit:n}}function ls(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 us(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 ds(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function fs(e){return[...e].sort((e,t)=>e.stage-t.stage)}function ps(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?ss(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return ms(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
|
|
117
117
|
<header class="prb-map-head">
|
|
118
118
|
<div class="prb-map-heading">
|
|
119
119
|
<h4 class="prb-map-title">${b(a.title)}</h4>
|
|
120
120
|
${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${A(a.intent)}</p>`:``}
|
|
121
121
|
</div>
|
|
122
122
|
<div class="prb-map-tools">
|
|
123
|
-
${
|
|
123
|
+
${hs(i)}
|
|
124
124
|
<button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
|
|
125
125
|
</div>
|
|
126
126
|
</header>
|
|
127
127
|
<p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
|
|
128
|
-
${
|
|
129
|
-
${
|
|
130
|
-
</div>`}function
|
|
128
|
+
${gs(a,s)}
|
|
129
|
+
${bs(a)}
|
|
130
|
+
</div>`}function ms(e){return`<div class="prb-map-empty" data-change-map-empty>
|
|
131
131
|
${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
|
|
132
132
|
<h4 class="prb-map-empty-title">See the change as a map</h4>
|
|
133
133
|
<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>
|
|
134
134
|
<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>
|
|
135
135
|
<button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
|
|
136
|
-
</div>`}function
|
|
137
|
-
<h5 class="prb-map-stage-title">${b(
|
|
138
|
-
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>
|
|
139
|
-
</div>`).join(``),i=e.edges.map((e,t)=>
|
|
136
|
+
</div>`}function hs(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 gs(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}">
|
|
137
|
+
<h5 class="prb-map-stage-title">${b(Zo[n]??``)}</h5>
|
|
138
|
+
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>vs(n,t,e)).join(``)}
|
|
139
|
+
</div>`).join(``),i=e.edges.map((e,t)=>ys(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
|
|
140
140
|
<svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
|
|
141
141
|
${r}
|
|
142
142
|
<div class="prb-map-labels" aria-hidden="true">${i}</div>
|
|
143
|
-
</div>`}var
|
|
144
|
-
<p class="prb-map-role">${
|
|
143
|
+
</div>`}var _s={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function vs(e,t,n){let r=b(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>${A(e.label)}</em> <span aria-hidden="true">→</span> ${A(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}">
|
|
144
|
+
<p class="prb-map-role">${_s[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
|
|
145
145
|
<h5 class="prb-map-node-title" id="prb-map-node-${r}">${A(e.title)}</h5>
|
|
146
146
|
${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${A(e.body)}</p>`:``}
|
|
147
147
|
${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${A(e.why)}</p>`:``}
|
|
148
148
|
${e.anchor?`<code class="prb-map-anchor">${b(e.anchor)}</code>`:``}
|
|
149
149
|
${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
|
|
150
150
|
${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${b(e.sectionId)}" aria-label="Open ${b(i)} in the Review Path">Review Path: ${b(i)} <span aria-hidden="true">→</span></button>`:``}
|
|
151
|
-
</article>`}function
|
|
151
|
+
</article>`}function ys(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${b(e.from)}" data-to="${b(e.to)}">${A(e.label)}</span>`}function bs(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
|
|
152
152
|
<summary>Read as a list</summary>
|
|
153
153
|
<ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${A(n)}</strong> <em>${A(e.label)}</em> <strong>${A(r)}</strong>${e.note?`<span class="prb-map-note"> — ${A(e.note)}</span>`:``}</li>`}).join(``)}</ol>
|
|
154
|
-
</details>`}function A(e){return e.simple===e.technical?fe(e.simple):`<span data-reg="simple">${fe(e.simple)}</span><span data-reg="technical">${fe(e.technical)}</span>`}var ws=`http://www.w3.org/2000/svg`,Ts=new WeakSet,Es=new WeakMap;function Ds(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){Bs(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&&zs(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&&zs(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`)&&(zs(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Os,show:ks}}function Os(){for(let e of document.querySelectorAll(`[data-map-board]`))As(e),js(e)}function ks(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=gs({stored:e,sections:Hs(),reviewedSha:e.commitSha,register:Vs()}),Os())}function As(e){if(Ts.has(e)||typeof ResizeObserver>`u`)return;Ts.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,js(e)}))}).observe(e)}function js(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(Rs());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?Ms(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=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),p=[...o.values()],te=e.clientWidth,m=Es.get(e),ne=m&&m.width===te?m.edges:new Set;Es.set(e,{width:te,edges:ne});let h=(t,n)=>{n&&ne.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(ne.has(o)){e.hidden=!0,h(o,!0);return}let s=Ns(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ns(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Fs(s,i.from,c,i.to),[u,te,m,re]=l,ie=p.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Is(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,h(o,!0);return}let g=document.createElementNS(ws,`path`);g.setAttribute(`d`,`M${j(u.x)},${j(u.y)} C${j(te.x)},${j(te.y)} ${j(m.x)},${j(m.y)} ${j(re.x)},${j(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let _=e.offsetWidth,ae=e.offsetHeight,v=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Is(l,e);return{left:t.x-_/2,top:t.y-ae/2,right:t.x+_/2,bottom:t.y+ae/2}}).find(e=>![...p,...ee,...f].some(t=>Ls(e,t,2)));if(!v){g.remove(),e.hidden=!0,h(o,!0);return}h(o,!1),f.push(v),e.style.left=`${Math.round(v.left)}px`,e.style.top=`${Math.round(v.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Ms(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 Ns(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 Ps={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Fs(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=Ps[t],s=Ps[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 Is([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 Ls(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 j(e){return Math.round(e*10)/10}function Rs(){let e=document.createElementNS(ws,`defs`),t=document.createElementNS(ws,`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(ws,`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 zs(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 Bs(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));Os(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Vs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Hs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Us=`repository`,Ws={minCharacters:8,maxLines:3,maxCharacters:400},Gs=[`app`,`service`,`component`,`store`,`external`,`group`],Ks=/^[a-z][a-z0-9-]*$/;function qs(e){let t=[];if(!nc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};ic(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=rc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=ac(n.title,`architecture.title`,t),i=oc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=Ys(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>nc(e)&&typeof e.id==`string`&&Ks.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)Js(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=Xs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(Js(a,c).includes(d)||Js(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function Js(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function Ys(e,t,n){if(!nc(e))return n.push(`${t} must be an object.`),null;ic(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=rc(e,[`parent`,`description`,`owns`],t,n),i=sc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Us}": that name is kept for the whole repository. Choose another id.`);let a=ac(r.name,`${t}.name`,n),o=Gs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Gs.join(`, `)}.`);let s=r.parent===void 0?void 0:sc(r.parent,`${t}.parent`,n),c=oc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Zs(r.owns,`${t}.owns`,n),u=Qs(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function Xs(e,t,n){if(!nc(e))return n.push(`${t} must be an object.`),null;ic(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=rc(e,[`description`,`confidence`],t,n),i=sc(r.id,`${t}.id`,n),a=sc(r.source,`${t}.source`,n),o=sc(r.target,`${t}.target`,n),s=ac(r.label,`${t}.label`,n),c=oc(r.description,`${t}.description`,n),l=Qs(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function Zs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=ac(e,`${t}[${i}]`,n);a!==null&&(!tc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function Qs(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!nc(e)){n.push(`${a} must be an object.`);return}ic(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=rc(e,[`symbol`,`line`,`note`],a,n);let o=ac(e.path,`${a}.path`,n);o!==null&&!tc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=$s(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=cc(e.line,`${a}.line`,n),u=oc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function $s(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Ws.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=ec(r);return r.split(`
|
|
155
|
-
`).length>
|
|
156
|
-
`),nodes:r,edges:u}}function
|
|
154
|
+
</details>`}function A(e){return e.simple===e.technical?pe(e.simple):`<span data-reg="simple">${pe(e.simple)}</span><span data-reg="technical">${pe(e.technical)}</span>`}var xs=`http://www.w3.org/2000/svg`,Ss=new WeakSet,Cs=new WeakMap;function ws(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){Ls(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&&Is(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&&Is(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`)&&(Is(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Ts,show:Es}}function Ts(){for(let e of document.querySelectorAll(`[data-map-board]`))Ds(e),Os(e)}function Es(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=ps({stored:e,sections:zs(),reviewedSha:e.commitSha,register:Rs()}),Ts())}function Ds(e){if(Ss.has(e)||typeof ResizeObserver>`u`)return;Ss.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Os(e)}))}).observe(e)}function Os(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(Fs());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?ks(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=[],ee=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),p=[...o.values()],te=e.clientWidth,m=Cs.get(e),ne=m&&m.width===te?m.edges:new Set;Cs.set(e,{width:te,edges:ne});let h=(t,n)=>{n&&ne.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(ne.has(o)){e.hidden=!0,h(o,!0);return}let s=As(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=As(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ms(s,i.from,c,i.to),[u,te,m,re]=l,ie=p.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Ns(l,.05+t*.05)).some(e=>ie.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,h(o,!0);return}let g=document.createElementNS(xs,`path`);g.setAttribute(`d`,`M${j(u.x)},${j(u.y)} C${j(te.x)},${j(te.y)} ${j(m.x)},${j(m.y)} ${j(re.x)},${j(re.y)}`),g.setAttribute(`class`,`prb-map-edge`),g.setAttribute(`marker-end`,`url(#prb-map-arrow)`),g.dataset.mapEdge=e.dataset.mapEdge??``,g.dataset.from=e.dataset.from??``,g.dataset.to=e.dataset.to??``,t.appendChild(g),e.hidden=!1;let _=e.offsetWidth,ae=e.offsetHeight,v=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Ns(l,e);return{left:t.x-_/2,top:t.y-ae/2,right:t.x+_/2,bottom:t.y+ae/2}}).find(e=>![...p,...ee,...f].some(t=>Ps(e,t,2)));if(!v){g.remove(),e.hidden=!0,h(o,!0);return}h(o,!1),f.push(v),e.style.left=`${Math.round(v.left)}px`,e.style.top=`${Math.round(v.top)}px`}),e.setAttribute(`data-laid-out`,``)}function ks(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 As(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 js={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Ms(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=js[t],s=js[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 Ns([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 Ps(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 j(e){return Math.round(e*10)/10}function Fs(){let e=document.createElementNS(xs,`defs`),t=document.createElementNS(xs,`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(xs,`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 Is(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 Ls(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));Ts(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Rs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function zs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var Bs=`repository`,Vs={minCharacters:8,maxLines:3,maxCharacters:400},Hs=[`app`,`service`,`component`,`store`,`external`,`group`],Us=/^[a-z][a-z0-9-]*$/;function Ws(e){let t=[];if(!$s(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};tc(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=ec(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=nc(n.title,`architecture.title`,t),i=rc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=Ks(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>$s(e)&&typeof e.id==`string`&&Us.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)Gs(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=qs(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(Gs(a,c).includes(d)||Gs(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function Gs(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function Ks(e,t,n){if(!$s(e))return n.push(`${t} must be an object.`),null;tc(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=ec(e,[`parent`,`description`,`owns`],t,n),i=ic(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${Bs}": that name is kept for the whole repository. Choose another id.`);let a=nc(r.name,`${t}.name`,n),o=Hs.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${Hs.join(`, `)}.`);let s=r.parent===void 0?void 0:ic(r.parent,`${t}.parent`,n),c=rc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:Js(r.owns,`${t}.owns`,n),u=Ys(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function qs(e,t,n){if(!$s(e))return n.push(`${t} must be an object.`),null;tc(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=ec(e,[`description`,`confidence`],t,n),i=ic(r.id,`${t}.id`,n),a=ic(r.source,`${t}.source`,n),o=ic(r.target,`${t}.target`,n),s=nc(r.label,`${t}.label`,n),c=rc(r.description,`${t}.description`,n),l=Ys(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function Js(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=nc(e,`${t}[${i}]`,n);a!==null&&(!Qs(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function Ys(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!$s(e)){n.push(`${a} must be an object.`);return}tc(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=ec(e,[`symbol`,`line`,`note`],a,n);let o=nc(e.path,`${a}.path`,n);o!==null&&!Qs(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=Xs(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=ac(e.line,`${a}.line`,n),u=rc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function Xs(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${Vs.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=Zs(r);return r.split(`
|
|
155
|
+
`).length>Vs.maxLines||r.length>Vs.maxCharacters?(n.push(`${t} must be at most ${Vs.maxLines} lines and ${Vs.maxCharacters} characters.`),null):i.length<Vs.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${Vs.minCharacters} characters.`),null):r}function Zs(e){return e.replace(/\s+/g,` `).trim()}function Qs(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function $s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ec(e,t,n,r){let i=t.filter(t=>e[t]===null);if(i.length===0)return e;let a={...e};for(let e of i)r.push(e===`parent`?`${n}.parent must be omitted when the node has no parent; null is not allowed.`:`${n}.${e} must be omitted when there is nothing to give; null is not allowed.`),delete a[e];return a}function tc(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function nc(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function rc(e,t,n){if(e!==void 0)return nc(e,t,n)??void 0}function ic(e,t,n){if(typeof e==`string`&&Us.test(e))return e;let r=typeof e==`string`?[...new Set([...e].filter(e=>e>``))]:[],i=r.map(e=>`"${e}" (U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,`0`)})`).join(`, `);return n.push(`${t} must be lowercase ASCII letters, digits and hyphens, starting with a letter${r.length>0?`; "${e}" contains ${i}, which ${r.length===1?`is`:`are`} not ASCII`:``}.`),null}function ac(e,t,n){if(e!==void 0){if(Number.isInteger(e)&&e>=1)return e;n.push(`${t} must be a whole number from 1.`)}}function oc(e,t){let n=new Map(e.nodes.map(e=>[e.id,e]));if(t!==null&&!e.nodes.some(e=>e.parent===t))throw Error(`"${t}" is not a group with members.`);let r=t===null?[]:[t,...Gs(t,n)],i=e=>t!==null&&Gs(e,n).includes(t),a=e=>{let a=[e,...Gs(e,n)];if(t===null)return a[a.length-1];if(i(e))return a[a.indexOf(t)-1];let o=e,s=n.get(o)?.parent;for(;s!==void 0&&!r.includes(s);)o=s,s=n.get(o)?.parent;return o},o=e.nodes.filter(e=>t===null?e.parent===void 0:e.parent===t),s=new Set(o.map(e=>e.id)),c=new Map;for(let n of e.relationships){let e=a(n.source),r=a(n.target);if(e===r)continue;let i=e=>s.has(e)||e===t;if(!i(e)&&!i(r))continue;let o=`${e}>${r}`,l=c.get(o)??{id:o,source:e,target:r,relationships:[],label:``};l.relationships.push(n.id),c.set(o,l)}let l=new Set;for(let e of c.values())for(let n of[e.source,e.target])!s.has(n)&&n!==t&&l.add(n);let u=new Map(e.relationships.map(e=>[e.id,e.label]));for(let e of c.values())e.label=e.relationships.length===1?u.get(e.relationships[0]):`${e.relationships.length} relationships`;let d=t=>e.nodes.filter(e=>e.parent===t.id).length,f=(e,t)=>{let n=e.kind===`group`?d(e):0;return{id:e.id,name:e.name,kind:e.kind,member:t,opens:n,...n>0?{detail:n===1?`1 part`:`${n} parts`}:{}}};return{scope:t,title:t===null?e.title:n.get(t).name,nodes:[...o.map(e=>f(e,!0)),...e.nodes.filter(e=>l.has(e.id)).map(e=>f(e,!1))],edges:[...c.values()]}}var sc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function cc(e){return e.replace(/\s+/g,` `).replace(/#/g,`#35;`).replace(/"/g,`#quot;`).replace(/</g,`#lt;`).replace(/>/g,`#gt;`).replace(/%/g,`#37;`).replace(/`/g,`#96;`).trim()}function lc(e,t={}){let n=t.edgeIds??!0,r=new Map,i=new Map;e.nodes.forEach((e,t)=>{r.set(`n${t}`,e.id),i.set(e.id,`n${t}`)});let a=e=>{let[t,n]=sc[e.kind],r=e.detail?`${cc(e.name)}<br>${cc(e.detail)}`:cc(e.name),a=e.opens>0?`group`:e.member?e.kind===`external`?`external`:e.kind===`store`?`store`:`part`:`context`;return` ${i.get(e.id)}${t}${r}${n}:::${a}`},o=[`flowchart LR`],s=e.nodes.filter(e=>e.member),c=e.nodes.filter(e=>!e.member);e.scope===null?o.push(...s.map(a)):o.push(` subgraph scope["${cc(e.title)}"]`,...s.map(a),` end`),o.push(...c.map(a));let l=t=>t===e.scope?`scope`:i.get(t),u=new Map;return e.edges.forEach((e,t)=>{let r=`e${t}`;u.set(r,e);let i=e.relationships.length>1?`==>`:`-->`;o.push(` ${l(e.source)} ${n?`${r}@`:``}${i}|"${cc(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
|
|
156
|
+
`),nodes:r,edges:u}}function uc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=oc(e,t),a=r===0&&t===null?`# ${dc(e.title)}`:`## ${dc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=lc(i,{edgeIds:!1}).source;return[a,...o?[dc(o)]:[],["```mermaid",s,"```"].join(`
|
|
157
157
|
`)].join(`
|
|
158
158
|
|
|
159
159
|
`)}).join(`
|
|
160
160
|
|
|
161
|
-
`)}\n`}function
|
|
162
|
-
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var
|
|
161
|
+
`)}\n`}function dc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var fc={exploring:{title:`Exploring the code…`,detail:`Reading the repository and identifying its main parts.`},checking:{title:`Checking the evidence…`,detail:`Making sure every piece of code the map cites is really there.`},correcting:{title:`Correcting the map…`,detail:`Fixing what the checks found.`}};function pc(e){return fc[e.stage]}var mc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},hc=5e3;function gc(e){let t=!1,n=!1,r=()=>document.querySelector(`[data-architecture-pane]`)?.hidden===!1;document.addEventListener(`click`,t=>{let n=t.target.closest(`[data-architecture-map]`);n&&vc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&yc(e,r,r.dataset.architectureStop||`repository`)}),xc(e,()=>{r()?_c():n=!0});async function i(){if(n)return _c();if(t)return;let e=document.querySelector(`[data-architecture]`),r=e?.querySelector(`[data-architecture-canvas]`),i=e?.querySelector(`[data-architecture-inspector]`),a=e?.querySelector(`[data-architecture-model]`)?.textContent;if(!e||!r||!i||!a)return;t=!0;let o;try{o=JSON.parse(a)}catch{return Ec(r,`The architecture could not be read.`)}let s=Ws(o.architecture);if(!s.ok)return Ec(r,`The architecture could not be read.`);let c={scope:Bs,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=Ws(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Cc({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=u.draw(c);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&Sc(r,c,l)}),d}return{show:i}}function _c(){let e=mr(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function vc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{let r=await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n})});if(r.status===202||r.status===409)return _c();bc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{bc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function yc(e,t,n){if(!t.disabled){t.disabled=!0,t.parentElement?.querySelector(`[data-architecture-error]`)?.remove();try{if((await fetch(e.endpoint(`/architecture`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({scope:n,stop:!0})})).ok)return _c();bc(t,`Mapping could not be stopped.`)}catch{bc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function bc(e,t){let n=M(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function xc(e,t){let n=[];try{n=JSON.parse(document.querySelector(`[data-architecture-runs]`)?.textContent??`[]`)}catch{return}if(n.length===0)return;let r=async()=>{try{let r=(await(await fetch(e.endpoint(`/job`))).json()).architecture??[];for(let e of r){let t=document.querySelector(`[data-architecture-running="${CSS.escape(e.scope)}"]`),{title:n,detail:r}=pc(e),i=t?.querySelector(`[data-architecture-stage]`),a=t?.querySelector(`[data-architecture-stage-detail]`);i&&(i.textContent=n),a&&(a.textContent=r)}if(n.some(e=>!r.some(t=>t.scope===e)))return t()}catch{}window.setTimeout(()=>void r(),hc)};window.setTimeout(()=>void r(),hc)}async function Sc(e,t,n){let r=e=>e.nodes.filter(t=>e.nodes.some(e=>e.parent===t.id)).map(e=>e.id),i=[t,...n.values()].map(e=>uc(e.architecture,[null,...r(e.architecture)])).join(`
|
|
162
|
+
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Cc=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await y(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return Ec(n,`The architecture drawing could not be loaded. Reload the page to try again.`)}this.drawing?.dispose(),this.shown=e;let s=document.createElement(`div`);s.className=`prb-arch-host`,n.replaceChildren(s);let c=e=>void this.drawing?.showScope(e);try{this.drawing=await o.renderArchitectureWithMermaid(s,e.architecture,{onSelect:e=>this.inspect(e),onScopeChange:t=>{i&&Tc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&Tc(i,e.architecture,null,c,this.base()):await this.drawing.showScope(t),e!==this.parts.repository&&this.hint()}catch(e){console.error(`[prb architecture]`,e),Ec(n,`The architecture could not be drawn.`)}}async reveal(e){let t=this.parts.repository.architecture.nodes.find(t=>t.id===e);t&&(this.shown!==this.parts.repository&&await this.draw(this.parts.repository),await this.drawing?.showScope(t.parent??null),this.drawing?.select(e),this.parts.canvas.scrollIntoView({block:`nearest`,behavior:`smooth`}))}base(){if(this.shown===this.parts.repository)return[];let{repository:e}=this.parts,t=e.architecture.nodes.find(e=>e.id===this.shown.scope);return[{label:e.architecture.title,go:()=>void this.draw(e,t?.parent??null)},{label:`${t?.name??this.shown.scope} in depth`,go:()=>void this.drawing?.showScope(null)}]}hint(){let{inspector:e}=this.parts,t=[];this.shown!==this.parts.repository&&t.push(...wc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`)),e.replaceChildren(...t)}inspect(e){let{inspector:t,embedded:n,deeper:r}=this.parts,i=this.shown===this.parts.repository;Dc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(M(`p`,`prb-arch-meta prb-arch-touched`,`This change touches files in this part.`)),!i)return t;let a=r.get(e.id);if(a){let r=M(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=wc(e.id,a.changed,n),o=i.at(-1)?.tagName===`BUTTON`?i.pop():void 0;t.push(...i,r,...o?[o]:[])}else if(n.running?.includes(e.id))t.push(M(`p`,`prb-arch-meta`,`Mapping this part in depth…`));else if(n.mappable?.includes(e.id)){let r=n.failures?.[e.id];r&&t.push(M(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=M(`button`,`prb-diagram-redraw`,r?`Retry mapping this part in depth`:`Map this part in depth`);if(i.type=`button`,i.dataset.architectureMap=e.id,t.push(i),r&&r.errors.length>0){let e=M(`details`,`prb-arch-failure-details`,``),n=M(`ul`,``,``);for(let e of r.errors)n.append(M(`li`,``,e));e.append(M(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function wc(e,t,n){let r=t?[M(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,M(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=M(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[M(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function Tc(e,t,n,r,i=[]){let a=new Map(t.nodes.map(e=>[e.id,e])),o=[...i.length>0?i:[{label:t.title,go:()=>r(null)}],...(n===null?[]:[...Gs(n,a).reverse(),n]).map(e=>({label:a.get(e)?.name??e,go:()=>r(e)}))];e.replaceChildren(...o.flatMap((e,t)=>{let n=t===o.length-1,r=M(n?`span`:`button`,`prb-arch-crumb`,e.label);return n?r.setAttribute(`aria-current`,`location`):(r.type=`button`,r.addEventListener(`click`,e.go)),t===0?[r]:[M(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function Ec(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function Dc(e,t,n,r,i){let{architecture:a}=t,o=new Map(a.nodes.map(e=>[e.id,e])),s=e=>o.get(e)?.name??e;if(n.kind===`none`){let t=M(`p`,`prb-arch-hint`,`Select a part or an arrow to see what it is and the code it rests on.`);e.replaceChildren(t);return}if(n.kind===`node`){let c=o.get(n.id);if(!c)return;let l=[M(`p`,`prb-arch-kind`,`${mc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),M(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(M(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=M(`button`,`prb-arch-open`,`Show the ${u} parts inside ${c.name}`);e.type=`button`,e.addEventListener(`click`,()=>r(c.id)),l.push(e)}i&&l.push(...i(c)),l.push(Oc(c.evidence,t.evidence[c.id]));let d=a.relationships.filter(e=>e.source===c.id||e.target===c.id);if(d.length>0){l.push(M(`h5`,`prb-arch-subhead`,`Relationships`));let e=M(`ul`,`prb-arch-related`,``);for(let t of d)e.append(M(`li`,``,`${s(t.source)} ${t.label} ${s(t.target)}`));l.push(e)}e.replaceChildren(...l);return}let c=[],l=n.ids.flatMap(e=>a.relationships.find(t=>t.id===e)??[]);l.length>1&&c.push(M(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=M(`section`,`prb-arch-relationship`,``);n.append(M(`p`,`prb-arch-kind`,`Relationship`),M(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(M(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(M(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Oc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Oc(e,t=[]){let n=M(`div`,`prb-arch-evidence`,``);n.append(M(`h5`,`prb-arch-subhead`,`Evidence`));let r=M(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=M(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=M(`button`,`prb-arch-location`,`${e.path}:${a.line}${a.endLine===a.line?``:`–${a.endLine}`}`);t.type=`button`,t.dataset.openEditor=e.path,t.dataset.openLine=String(a.line),i.append(t),a.via===`symbol`&&i.append(M(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(M(`span`,`prb-arch-location`,e.path),M(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(M(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(M(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function M(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}var kc=5e3;function Ac(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,i=async()=>{try{h(t,(await(await e.markSeen()).json()).unread)}catch{}},a=async()=>{try{if(r()){let n=await(await e.askUnread()).json();typeof n.here==`number`&&n.here>0&&r()?await i():h(t,n.unread)}}catch{}n.setTimeout(()=>void a(),kc)};t.addEventListener(`visibilitychange`,()=>{r()&&i()}),r()&&i(),n.setTimeout(()=>void a(),kc)}function jc(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}var Mc=1e3,Nc=new WeakMap;function Pc(e,t){return e.length<=1e3?jc(e)||` `:`${jc(e.slice(0,Mc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Fc(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">${Pc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Ic(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?Fc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Pc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Fc(a)),i.join(``)}function Lc(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 Rc(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&&Nc.set(r,o)}}function zc(e){let t=Nc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function Bc(e){return e.deletion?2*e.line-1:2*e.line}function Vc(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function Hc(e,t){if(e.length===0)return``;let n=e.map(Bc),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}">
|
|
163
163
|
<button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
|
|
164
164
|
<span class="prb-code-nav-count" aria-live="polite">${s}</span>
|
|
165
165
|
<button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
|
|
166
|
-
</span>`}function
|
|
167
|
-
`),r);if(a()){o&&t.lines.forEach((e,n)=>{
|
|
168
|
-
`),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;
|
|
166
|
+
</span>`}function Uc(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:Vc(i)}}function Wc(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function Gc(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(Vc)}function Kc(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?Vc(t):void 0}function qc(e,t){return Math.max(e,+!t)+1}var Jc=8;function Yc(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 Xc(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function Zc(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 Qc(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function $c(e){if(!e.hasAttribute(`data-expanded`))return;let t=Yc(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=Xc({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function el(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 tl=!1;function nl(){tl||(tl=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))$c(e)}))}function rl(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?Zc(n):null;t?(e.setAttribute(`data-expanded`,``),$c(e),nl()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),el(e),n&&r&&Qc(n,r);let i=t?Yc(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-Jc)}var il={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function al(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:il[t.slice(n+1).toLowerCase()]??null}function ol(e){let t=new Set;for(let n of e){let e=al(n);e&&t.add(e)}return[...t]}var sl={ruby:()=>y(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>y(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>y(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>y(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>y(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>y(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>y(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>y(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>y(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>y(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>y(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>y(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>y(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>y(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>y(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>y(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>y(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>y(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>y(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>y(()=>import(`./chunk-DswuEJGm.js`),[])},cl=`github-light-default`,ll=null,ul=new Map;function dl(){return ll??=Promise.all([y(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),y(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),y(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(y(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),ll}function fl(e){let t=ul.get(e);return t||(t=dl().then(async t=>t?(await t.loadLanguage(sl[e]),!0):!1).catch(()=>!1),ul.set(e,t)),t.then(e=>e?dl():null)}var pl={async preload(e){await fl(e)},async tokenize(e,t){let n=await fl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:cl}),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 ml(e,t=pl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var hl=/^#[0-9a-f]{3,8}$/i;function gl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&hl.test(e.color)?`<span style="color:${e.color}">${jc(e.content)}</span>`:jc(e.content)).join(``)}function _l(e){return e.length>1e3?e.slice(0,Mc):e}function vl(e,t,n){if(!e||t===``)return;let r=gl(_l(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 yl(e,t,n=pl){let r=al(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(_l).join(`
|
|
167
|
+
`),r);if(a()){o&&t.lines.forEach((e,n)=>{vl(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=>_l(e.text)).join(`
|
|
168
|
+
`),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;vl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function bl(e,t=pl){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in sl)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=gl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var N=g({ownsRestore:!0}),xl=document.body,Sl=xl.dataset.apiBase??``,Cl=xl.dataset.token??``,wl=xl.dataset.editorLabel??``,Tl=xl.dataset.editorTemplate??``,El=xl.dataset.repoPath??``,Dl=xl.dataset.explainPrompt??``,Ol=xl.dataset.sessionId??``;function P(e){return`${Sl}${e}?t=${encodeURIComponent(Cl)}`}var kl=!1,Al=0,jl=!1;function Ml(e){Al++;try{e()}finally{Al--}}var Nl=Pr(document.querySelector(`.prb-body`)?.dataset.reviewLayout),Pl=Fr(Nl,e=>{fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>kl&&Al===0);function Fl(e){fetch(P(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var Il=wo({endpoint:P,showDiagrams:()=>L(`diagram`),showMap:()=>L(`map`),showChangeMap:e=>Ll.show(e)}),Ll=ws({endpoint:P,showView:e=>L(e)}),Rl=gc({endpoint:P}),zl=null,Bl=`the whole change`;function Vl(e){let t=gr(e,Wl),n=N.push(w(t),t);Hl++,Gl(t),n&&Ul(t)}var Hl=0;function Ul(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&ne(document,t)}var F=null,Wl=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function Gl(e){let t=gr(e,Wl);if(t!==e){let{kind:e,view:n,focus:r,...i}=m(history.state);N.replace(w(t),{...i,...t})}let n=!F||!Cr(F,t);F=t,n&&(t.kind===`view`?Xl(t.view):eu(t.sectionId)),ql(t.focus??null)}var Kl={history:{get state(){return history.state},pushState:(e,t,n)=>{Hl++,N.push(n,m(e))},replaceState:(e,t,n)=>N.replace(n,m(e)),back:()=>{jl=!0,history.back()}},apply:Gl},I=le(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?Sd(e):Cd(e),onClose:Cd});er(document,{post:async e=>{let t=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reassessment:e})});return{status:t.status,body:await t.json().catch(()=>null)}},closeMenu:e=>I.close(e)});function ql(e){Dr(document.querySelector(`.prb-body`),document,e),Pl.focus(e),I.closeAll(),e===`buddy`&&Vu()}function Jl(e){F&&(F.focus===e?Tr(F,Kl):wr(F,e,Kl))}function L(e,t={}){let n=t.keepFocus&&F?.focus?e:pr(e,F?.focus);Vl({kind:`view`,view:e,...n?{focus:n}:{}})}function Yl(e){Vl({kind:`section`,sectionId:e,...F?.focus===`guide`?{focus:`guide`}:{}})}function Xl(e){for(let t of document.querySelectorAll(`.prb-view`))t.hidden=t.dataset.view!==e;for(let t of document.querySelectorAll(`[data-view-nav]:not([role="tab"])`))t.setAttribute(`aria-current`,String(t.dataset.viewNav===e||(t.dataset.viewAlso??``).split(` `).includes(e)));e!==`architecture`&&Fl({event:`view_opened`,view:e}),e===`diagram`&&Il.drawPane(),e===`map`&&Ll.layout(),e===`architecture`&&Rl.show(),Zl(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Zl(){ii(),zl=null,Bl=`the whole change`,tu()}function Ql(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,Pl.fold(n.id,t))}function $l(){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`)&&Ql(e,!0)}}function eu(e){Xl(`guide`),$l(),ri(e);let t=ti(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);Fl({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),zl=e,Bl=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,tu()}function tu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=Bl)}function R(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function nu(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function ru(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}=nu(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),Fl({event:`file_opened`,fromFinding:i,targeted:r>0}),await au(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var iu=pi();function au(e,t,n){return iu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${P(`/file`)}${a}`),s=await o.json();return o.ok?()=>ou(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${R(s?.error??`Could not read that file.`)}</p>`}}catch{return()=>{e.innerHTML=`<p class="prb-code-status">Could not reach PR Review Buddy. The workspace server may have stopped.</p>`}}})}function ou(e,t,n){let{cited:r,centre:i,expand:a}=n;e.dataset.cited=String(r),e.dataset.centre=String(i),e.dataset.expand=String(a),e.dataset.position=String(n.position);let o=Ic(t,r),s=Tl&&El?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="${R(t.path)}" data-open-line="${r||t.from}">${R(`Open in ${wl||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${R(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${R(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${R(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${qc(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>${R(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${Hc(t.changeAnchors??[],n.position)}</div>`,ee=e.hasAttribute(`data-expanded`),p=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${ee}">${ee?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
|
|
169
169
|
<span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
|
|
170
170
|
${c}
|
|
171
171
|
${s}
|
|
@@ -173,7 +173,7 @@ import{$ as e,H as t,L as n,Q as r,U as i,X as a,Y as o,Z as s,a as c,ct as l,d
|
|
|
173
173
|
</div>
|
|
174
174
|
${f}
|
|
175
175
|
<div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
|
|
176
|
-
${l}`,Vc(e,t),nl(e),rl(e),(n.focus?qc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Sl(e,t)}async function uu(e,t,n){let r=Kc(t,n);if(!r)return;let i=qc(e,r.anchor);if(i)t.outerHTML=Gc(Jc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await cu(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 du(e,t,n){let r=`${kl.replace(/\/$/,``)}/${e}`,i=Ol.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Rl({event:`editor_opened`,fromFinding:n}),window.location.href=i}var z=document.querySelector(`[data-ask-log]`);z&&z.querySelector(`.prb-msg`)&&z.scrollTo({top:z.scrollHeight});var fu=document.querySelector(`[data-ask-form]`),B=fu?.querySelector(`textarea`);function pu(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=qe(t)+yt(t)):n.textContent=t,z?.appendChild(n),z?.scrollTo({top:z.scrollHeight}),n}function mu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight}),e}var V=null,H=!!z?.querySelector(`[data-ask-pending]`);function hu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight})}async function gu(e,t=`free_text`,n={}){let r=e.trim();if(!r||V||H)return;document.querySelector(`.prb-ask-empty`)?.remove(),pu(`user`,r);let i=mu();V=new AbortController,vu(!0);try{let e=await fetch(P(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:Hl,source:t,...n}),signal:V.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){_u(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){hu();return}if(!e.ok||!a?.answer){pu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}pu(`assistant`,a.answer),a.explanation&&Vn(document,a.explanation),a.reassessment?.card&&Gn(document,a.reassessment.card)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(hu(),_u(r,n.continuesExplanation)):(pu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),_u(r,n.continuesExplanation))}finally{V=null,vu(!1)}}function _u(e,t){!B||B.value||(B.value=e,qf?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},qf?.stage(U)))}function vu(e){let t=fu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(yu))t.disabled=e;e&&I.closeAll(),e||B?.focus()}var yu=`[data-suggestion], .pr-helper-explain-simply-button`;function bu(){let e=fu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(P(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{V?.abort()})}fu?.addEventListener(`submit`,e=>{if(e.preventDefault(),V||H)return bu();let t=B?.value??``;B&&(B.value=``),qf?.clear();let n=Un(U,t);gu(t,xu(t),n?{continuesExplanation:n}:{})}),H&&vu(!0);var U=null;function xu(e){return U&&e.includes(U.text)?U.source:`free_text`}B?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),V||H)return;fu?.requestSubmit()}}),B?.addEventListener(`input`,()=>{B&&(B.style.height=`auto`,B.style.height=`${Math.min(B.scrollHeight,140)}px`)});async function Su(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function Cu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function wu(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&&Au(n,t,`questions`),Iu()}function Tu(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||jl})).filter(e=>e.id)}async function Eu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function Du(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=jl: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(Ou()),Au(n,t||e.dataset.settled===`true`,`issues`),Ru())}function Ou(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Dn,e.textContent=`Dismissed by you`,e}var ku=new WeakMap;function Au(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&ku.set(e,{parent:t,before:e.nextElementSibling}),Pu(n).append(e),t&&Nu(t)}else ju(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Fu(n)}}function ju(e,t){let n=ku.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=Mu(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function Mu(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Nu(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function Pu(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 Fu(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:Qr(Lu()),Kn(document)}function Iu(){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=$r(e.length,t)),zu(`questions`,e.length,t,`question`,`answered`)}function Lu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0;for(let i of e){let e=i.dataset.settled===`true`,a=i.dataset.dismissed===`true`&&i.dataset.stale!==`true`;!e&&!a?t+=1:!e&&a&&(n+=1),e&&i.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{}}}function Ru(){let e=Lu();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=Zr(e.total,e.open,Lr(e))),zu(`issues`,e.total,e.open,`issue`,Lr(e))}function zu(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){tu(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!re(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){L(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Wr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Yr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){L(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Ql(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){du(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){Bc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&ol(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&uu(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let ee=t.closest(`[data-full-line]`);if(ee){let e=Hc(ee);e&&Cl(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]`);cu(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:Yc(t)})}return}let te=t.closest(`[data-focus-toggle]`);if(te?.dataset.focusToggle){Zl(te.dataset.focusToggle);return}let m=t.closest(`[data-prompt-toggle]`);if(m){pd(m.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let ne=t.closest(`[data-file]`);if(ne?.dataset.file){ou(ne);return}let h=ti(t);if(h){Ql(h);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){wu(ie,ie.dataset.answered!==`true`),Br(ie);let e=Cu();Su(e),Rl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){Du(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Tu();Eu(e),Rl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let _=t.closest(`[data-suggestion]`);if(_){gu(_.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Wu(),gu(Al,`explain_simply`);return}let ae=t.closest(`[data-prompt-use]`);if(ae?.dataset.promptUse){md(ae.dataset.promptUse);return}let v=t.closest(`[data-prompt-edit]`);if(v?.dataset.promptEdit){Fd(v.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Fd(``);return}if(t.closest(`[data-ask-toggle]`)){let e=F?.focus;e?(wr(F,Yl),Hu(e!==`buddy`)):Hu(!Vu())}});var W=document.querySelector(`.prb-body`),Bu=document.querySelector(`.prb-ask`);function Vu(){return!!Bu&&getComputedStyle(Bu).display!==`none`}function Hu(e){W&&(W.dataset.ask=e?`open`:`closed`),Uu(e),Ll.ask(e)}function Uu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Wu(){F?.focus&&F.focus!==`buddy`&&wr(F,Yl),Hu(!0)}function Gu(){Uu(Vu())}window.addEventListener(`resize`,Gu),ae(P(`/restart`));var Ku=document.querySelector(`[data-file-filter]`),qu=document.querySelector(`[data-file-count]`),Ju=document.querySelector(`[data-file-none]`);function Yu(){let e=(Ku?.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}`}Ju&&(Ju.hidden=n>0),qu&&(qu.textContent=e?`${t} of ${Xu} file${Xu===1?``:`s`}`:`${Xu} file${Xu===1?``:`s`}`)}var Xu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Ku?.addEventListener(`input`,Yu),Ku?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Ku.value!==``&&(e.preventDefault(),Ku.value=``,Yu())}),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(),ou(n))});var Zu=320,Qu=()=>Math.round(window.innerWidth/2),$u=e=>Math.round(Math.min(Qu(),Math.max(Zu,e)));function ed(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function td(){return Bu?Math.round(Bu.getBoundingClientRect().width):Zu}function nd(e){fetch(P(`/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||!Bu)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=td(),r=e=>{ed($u(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,nd(td())};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=$u(td()+n);ed(r),nd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),ed(null),nd(null))}),G?.addEventListener(`dblclick`,()=>{ed(null),nd(null)}),window.addEventListener(`resize`,()=>{Vu()&&W?.style.getPropertyValue(`--ask-width`)&&ed($u(td()))});var rd=3e4,id=document.visibilityState===`visible`?Date.now():null,ad=0;function od(){id!==null&&(ad+=Date.now()-id,id=Date.now())}function sd(){od();let e=Math.round(ad/1e3);return ad-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?id=Date.now():(od(),id=null)}),setInterval(()=>{let e=sd();e>0&&Rl({event:`workspace_heartbeat`,visibleSeconds:e})},rd),window.addEventListener(`pagehide`,()=>{let e=P(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:sd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var cd=document.querySelector(`[data-prompt-bank]`),ld=document.querySelector(`[data-prompt-list]`),K=ud();function ud(){try{let e=JSON.parse(cd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function dd(){if(!ld)return;ld.innerHTML=K.map(e=>`<span class="prb-bank-item">
|
|
176
|
+
${l}`,Rc(e,t),$c(e),el(e),(n.focus?Wc(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),yl(e,t)}async function su(e,t,n){let r=Uc(t,n);if(!r)return;let i=Wc(e,r.anchor);if(i)t.outerHTML=Hc(Gc(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await au(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 cu(e,t,n){let r=`${El.replace(/\/$/,``)}/${e}`,i=Tl.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&Fl({event:`editor_opened`,fromFinding:n}),window.location.href=i}var z=document.querySelector(`[data-ask-log]`);z&&z.querySelector(`.prb-msg`)&&z.scrollTo({top:z.scrollHeight});var lu=document.querySelector(`[data-ask-form]`),B=lu?.querySelector(`textarea`);function uu(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=Je(t)+bt(t)):n.textContent=t,z?.appendChild(n),z?.scrollTo({top:z.scrollHeight}),n}function du(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight}),e}var V=null,H=!!z?.querySelector(`[data-ask-pending]`);function fu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,z?.appendChild(e),z?.scrollTo({top:z.scrollHeight})}async function pu(e,t=`free_text`,n={}){let r=e.trim();if(!r||V||H)return;document.querySelector(`.prb-ask-empty`)?.remove(),uu(`user`,r);let i=du();V=new AbortController,hu(!0);try{let e=await fetch(P(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:zl,source:t,...n}),signal:V.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){mu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){fu();return}if(!e.ok||!a?.answer){uu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}uu(`assistant`,a.answer),a.explanation&&Hn(document,a.explanation),a.reassessment?.card&&Kn(document,a.reassessment.card)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(fu(),mu(r,n.continuesExplanation)):(uu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),mu(r,n.continuesExplanation))}finally{V=null,hu(!1)}}function mu(e,t){!B||B.value||(B.value=e,Wf?.save(),t&&(U=U?.continues&&e.includes(U.text)?U:{text:e,source:`finding`,continues:t},Wf?.stage(U)))}function hu(e){let t=lu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(gu))t.disabled=e;e&&I.closeAll(),e||B?.focus()}var gu=`[data-suggestion], .pr-helper-explain-simply-button`;function _u(){let e=lu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(P(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{V?.abort()})}lu?.addEventListener(`submit`,e=>{if(e.preventDefault(),V||H)return _u();let t=B?.value??``;B&&(B.value=``),Wf?.clear();let n=Wn(U,t);pu(t,vu(t),n?{continuesExplanation:n}:{})}),H&&hu(!0);var U=null;function vu(e){return U&&e.includes(U.text)?U.source:`free_text`}B?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),V||H)return;lu?.requestSubmit()}}),B?.addEventListener(`input`,()=>{B&&(B.style.height=`auto`,B.style.height=`${Math.min(B.scrollHeight,140)}px`)});async function yu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answeredQuestionIds:e})})}catch{}}function bu(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function xu(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&&Du(n,t,`questions`),Nu()}function Su(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||Ol})).filter(e=>e.id)}async function Cu(e){try{await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissedIssues:e})})}catch{}}function wu(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=Ol: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(Tu()),Du(n,t||e.dataset.settled===`true`,`issues`),Fu())}function Tu(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=On,e.textContent=`Dismissed by you`,e}var Eu=new WeakMap;function Du(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&Eu.set(e,{parent:t,before:e.nextElementSibling}),ju(n).append(e),t&&Au(t)}else Ou(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();Mu(n)}}function Ou(e,t){let n=Eu.get(e);if(n?.parent.isConnected)n.parent.insertBefore(e,n.before);else{let n=ku(e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function ku(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function Au(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function ju(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 Mu(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:$r(Pu()),qn(document)}function Nu(){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=ei(e.length,t)),Iu(`questions`,e.length,t,`question`,`answered`)}function Pu(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0;for(let i of e){let e=i.dataset.settled===`true`,a=i.dataset.dismissed===`true`&&i.dataset.stale!==`true`;!e&&!a?t+=1:!e&&a&&(n+=1),e&&i.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{}}}function Fu(){let e=Pu();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=Qr(e.total,e.open,Rr(e))),Iu(`issues`,e.total,e.open,`issue`,Rr(e))}function Iu(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){Ql(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!re(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){L(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Gr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){Xr(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){L(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Yl(c.dataset.gotoSection);return}let l=t.closest(`[data-open-editor]`);if(l?.dataset.openEditor){cu(l.dataset.openEditor,Number(l.dataset.openLine)||1,!l.closest(`[data-architecture]`)||null);return}let u=t.closest(`[data-deletion-toggle]`);if(u){Lc(u);return}let d=t.closest(`[data-code-expand]`);if(d){let e=d.closest(`.prb-code`);e&&rl(e,!e.hasAttribute(`data-expanded`));return}let f=t.closest(`[data-change-step]`);if(f){let e=f.closest(`[data-change-navigator]`),t=f.closest(`.prb-code`);e&&t&&!f.disabled&&su(t,e,f.dataset.changeStep===`previous`?`previous`:`next`);return}let ee=t.closest(`[data-full-line]`);if(ee){let e=zc(ee);e&&bl(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]`);au(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:Kc(t)})}return}let te=t.closest(`[data-focus-toggle]`);if(te?.dataset.focusToggle){Jl(te.dataset.focusToggle);return}let m=t.closest(`[data-prompt-toggle]`);if(m){ud(m.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let ne=t.closest(`[data-file]`);if(ne?.dataset.file){ru(ne);return}let h=ni(t);if(h){Yl(h);return}let ie=t.closest(`[data-question-answered]`);if(ie?.dataset.questionAnswered){xu(ie,ie.dataset.answered!==`true`),Vr(ie);let e=bu();yu(e),Fl({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let g=t.closest(`[data-issue-dismissed]`);if(g?.dataset.issueDismissed){wu(g,g.dataset.stale===`true`||g.dataset.dismissed!==`true`);let e=Su();Cu(e),Fl({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let _=t.closest(`[data-suggestion]`);if(_){pu(_.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Vu(),pu(Dl,`explain_simply`);return}let ae=t.closest(`[data-prompt-use]`);if(ae?.dataset.promptUse){dd(ae.dataset.promptUse);return}let v=t.closest(`[data-prompt-edit]`);if(v?.dataset.promptEdit){Md(v.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Md(``);return}if(t.closest(`[data-ask-toggle]`)){let e=F?.focus;e?(Tr(F,Kl),zu(e!==`buddy`)):zu(!Ru())}});var W=document.querySelector(`.prb-body`),Lu=document.querySelector(`.prb-ask`);function Ru(){return!!Lu&&getComputedStyle(Lu).display!==`none`}function zu(e){W&&(W.dataset.ask=e?`open`:`closed`),Bu(e),Pl.ask(e)}function Bu(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Vu(){F?.focus&&F.focus!==`buddy`&&Tr(F,Kl),zu(!0)}function Hu(){Bu(Ru())}window.addEventListener(`resize`,Hu),ae(P(`/restart`));var Uu=document.querySelector(`[data-file-filter]`),Wu=document.querySelector(`[data-file-count]`),Gu=document.querySelector(`[data-file-none]`);function Ku(){let e=(Uu?.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}`}Gu&&(Gu.hidden=n>0),Wu&&(Wu.textContent=e?`${t} of ${qu} file${qu===1?``:`s`}`:`${qu} file${qu===1?``:`s`}`)}var qu=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Uu?.addEventListener(`input`,Ku),Uu?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Uu.value!==``&&(e.preventDefault(),Uu.value=``,Ku())}),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(),ru(n))});var Ju=320,Yu=()=>Math.round(window.innerWidth/2),Xu=e=>Math.round(Math.min(Yu(),Math.max(Ju,e)));function Zu(e){W&&(e===null?W.style.removeProperty(`--ask-width`):W.style.setProperty(`--ask-width`,`${e}px`))}function Qu(){return Lu?Math.round(Lu.getBoundingClientRect().width):Ju}function $u(e){fetch(P(`/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||!Lu)return;e.preventDefault(),G.setPointerCapture(e.pointerId),W.dataset.resizing=`true`;let t=e.clientX,n=Qu(),r=e=>{Zu(Xu(n+(t-e.clientX)))},i=()=>{G.removeEventListener(`pointermove`,r),G.removeEventListener(`pointerup`,i),G.removeEventListener(`pointercancel`,i),delete W.dataset.resizing,$u(Qu())};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=Xu(Qu()+n);Zu(r),$u(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Zu(null),$u(null))}),G?.addEventListener(`dblclick`,()=>{Zu(null),$u(null)}),window.addEventListener(`resize`,()=>{Ru()&&W?.style.getPropertyValue(`--ask-width`)&&Zu(Xu(Qu()))});var ed=3e4,td=document.visibilityState===`visible`?Date.now():null,nd=0;function rd(){td!==null&&(nd+=Date.now()-td,td=Date.now())}function id(){rd();let e=Math.round(nd/1e3);return nd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?td=Date.now():(rd(),td=null)}),setInterval(()=>{let e=id();e>0&&Fl({event:`workspace_heartbeat`,visibleSeconds:e})},ed),window.addEventListener(`pagehide`,()=>{let e=P(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:id()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var ad=document.querySelector(`[data-prompt-bank]`),od=document.querySelector(`[data-prompt-list]`),K=sd();function sd(){try{let e=JSON.parse(ad?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function cd(){if(!od)return;od.innerHTML=K.map(e=>`<span class="prb-bank-item">
|
|
177
177
|
<button type="button" class="prb-bank-use" data-prompt-use="${R(e.id)}" title="${R(e.prompt)}">${R(e.name)}</button>
|
|
178
178
|
<button type="button" class="prb-bank-edit" data-prompt-edit="${R(e.id)}" aria-label="Edit ${R(e.name)}">✎</button>
|
|
179
|
-
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),Sd()}async function fd(e){try{let t=await(await fetch(P(`/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{}dd()}function pd(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),cd?.toggleAttribute(`data-collapsed`,e),ld&&(ld.hidden=e),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function md(e){let t=K.find(t=>t.id===e);!t||!B||(B.value=ii(B.value,t.prompt),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}var hd=document.querySelector(`.prb-doc`),gd=null,_d=null;function vd(){z&&(_d?.(),_d=yn(z,{layout:`flat`,actions:Sn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>Cd(e,`selection`,t)}))}var yd=`reassess`;function bd(e){let t=xd();if(!e)return t;let n={id:yd,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function xd(){return[...bn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:rr(e.id),label:e.name,section:nr}))]}function Sd(){hd&&(gd?.(),gd=yn(hd,{triggerLabel:`Ask Buddy AI`,actions:xd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>Cd(e,`selection`,t)}))}function Cd(e,t,n,r){Ir(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>wd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Wu(),gu(t,`finding`,Rn(e,r?.ref))}})}function wd(e,t,n){B&&(U={text:e,source:t,...n?{continues:n}:{}},qf?.stage(U),B.value=ii(B.value,e),Wu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}function Td(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=ln(bd(Bn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(V||H)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Ed(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=En(n),a=Bn(n);if(I.close(n),r===yd){i&&a&&Dd(a,i);return}i&&Cd(r,`finding`,i,a?{ref:a}:void 0)});function Dd(e,t){if(V||H)return;let n=e.kind===`issue`?`severity`:`importance`;Wu(),gu(`${wn(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?er(t):null;n&&wd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=zn(t),r=En(t);n&&r&&Cd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),Sd(),vd();var q=Ka({root:document,showView:e=>L(e)}),Od=to({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>I.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});Mt(document),Kt(document);var kd=document.querySelector(`[data-prompt-dialog]`),Ad=document.querySelector(`[data-prompt-name]`),jd=document.querySelector(`[data-prompt-text]`),Md=document.querySelector(`[data-prompt-delete]`),Nd=document.getElementById(`prb-prompt-title`),Pd=``;function Fd(e){let t=K.find(t=>t.id===e);Pd=t?.id??``,Nd&&(Nd.textContent=t?`Edit prompt`:`Save a prompt`),Ad&&(Ad.value=t?.name??``),jd&&(jd.value=t?.prompt??``),Md&&(Md.hidden=!t),kd?.showModal(),Ad?.focus()}async function Id(){let e=Ad?.value.trim()??``,t=jd?.value.trim()??``;if(!e||!t){(e?jd:Ad)?.focus();return}let n=Pd?K.map(n=>n.id===Pd?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];kd?.close(),await fd(n)}async function Ld(){if(!Pd)return;let e=K.filter(e=>e.id!==Pd);kd?.close(),await fd(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>kd?.close()),Md?.addEventListener(`click`,()=>void Ld()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Id());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),Rd=document.querySelector(`[data-fresh-check]`),X=Yd(J?.dataset.report),zd=`prb-fresh-reopen`,Bd=Gd(),Vd=J?.dataset.dismissedSha,Hd=Wd(J?.dataset.availability),Z=Ud(J?.dataset.remote);function Ud(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Wd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Gd(){try{return sessionStorage.getItem(zd)!==null&&(sessionStorage.removeItem(zd),!0)}catch{return!1}}Bd&&pf(),Rd?.addEventListener(`click`,()=>void $d());var Kd=document.querySelector(`[data-fetch-remote]`);Kd&&(fetch(P(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Kd.hidden=!1)}).catch(()=>{}),Kd.addEventListener(`click`,()=>void qd(Kd)));async function qd(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(P(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};ie(c(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:oe(n)}),n.fetched>0&&await $d()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Bd=!1,pf();let n=t.closest(`[data-fresh-dismiss]`);n&&(Vd=n.dataset.freshDismiss||void 0,Bd=!1,pf(),Jd())});function Jd(){fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Vd??null})}).catch(()=>{})}function Yd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Xd=ja(),Zd=!1,Qd=null;async function $d(){if(Zd)return;Zd=!0,of(!0),Qd&&await Qd;let e=sf(X,Z),t=await tf(!1);of(!1),t&&ff(),Zd=!1,t&&(X?.code.state===`changed`||Z!==null)&&Vd!==void 0&&(Vd=void 0,Jd()),pf(),ef(t?sf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function ef(e){Y&&(Y.textContent=e,window.setTimeout(mf,2600))}async function tf(e){let t=Xd.snapshot();try{let n=await(await fetch(`${P(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Hd=n.availability??null,Z=n.remote??null,lf=n.kiss??null,n.kissDismissedSha!==void 0&&(uf=n.kissDismissedSha??void 0),n.prState!==void 0&&af(n.prState);let r=Aa(n.standing);return r&&Xd.current(t)&&Sa(document,r),!0}catch{return!1}}async function nf(){if(Zd||Qd||!J)return;let e=sf(X,Z),t=JSON.stringify(lf);Qd=tf(!0);let n=await Qd;Qd=null,rf=Date.now(),n&&(sf(X,Z)!==e&&pf(),JSON.stringify(lf)!==t&&ff())}var rf=Date.now();function af(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=xa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function of(e){Rd&&(Rd.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function sf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var cf=document.querySelector(`[data-kiss-fresh-region]`),lf=df(cf?.dataset.freshness),uf=cf?.dataset.dismissedSha;function df(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ff(){ma(lf?.state===`changed`),cf&&(cf.innerHTML=oa(cf.dataset.reviewedSha??``,lf,{dismissedSha:uf,actions:El!==``}))}cf?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(uf=t.dataset.kissFreshnessDismiss||void 0,ff(),fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:uf??null})}).catch(()=>{}))});function pf(){J&&(J.innerHTML=Ni(X,{dismissedSha:Vd,open:Bd,actions:El!==``,availability:Hd,remote:Z}),mf())}function mf(){if(Y&&(X||Z)){let{label:e,state:t}=ji(X,Z);Y.textContent=e,Y.dataset.state=t,Wi(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return hf(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(P(`/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 _f(i);if(t.closest(`[data-review-update]`))return void xf();let a=t.closest(`[data-update-cancel]`);if(a)return void Cf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void Cf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function hf(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>gf(e,`Copied`),()=>gf(e,`Select it`))}function gf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function _f(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=vf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Ef}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=vf(e)?null:Df(e);try{await fetch(P(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}vf(e)&&yf(),window.location.reload()}function vf(e){return e.closest(`.prb-fresh-notes p`)}function yf(){try{sessionStorage.setItem(zd,`1`)}catch{}}var bf=!1;async function xf(){if(bf)return;bf=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(P(`/job`))).json();e.update&&e.update.phase!==`none`&&!Ji(e.update.phase)&&n()}catch{}},500);try{await fetch(P(`/update`),{method:`POST`})}catch{}n()}var Sf={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function Cf(e,t){let n=Sf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(P(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,Tf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Tf(e,n.tooLate),await vo({look:async()=>{let e=await fetch(P(`/job`),{signal:AbortSignal.timeout(wf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var wf=3e3;function Tf(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var Ef=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function Df(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=Ef,t.appendChild(n),n}var Of=fo(document),kf=null,Af=Date.now();function jf(){kf===null&&(kf=window.setTimeout(()=>{kf=null,Mf()},le(Date.now()-Af)))}async function Mf(){try{let e=await(await fetch(P(`/job`))).json();if(H&&!e.ask||Pf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Of){let r=t[e];if(r){if(po(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?ho(n,r.phase,r.progress):Nf(n,r.progress)}}}catch{}jf()}function Nf(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 Pf=document.querySelector(`[data-diagram-running]`)!==null;(Of.size>0||H||Pf)&&(Af=Date.now(),jf()),document.querySelector(`[data-started-at]`)&&_o(document);function Ff(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 If(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…`,If(t),fetch(P(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Af=Date.now(),jf()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Ff(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(P(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Rr,gf(t,`Could not start. Try again`,2500)}))});var Lf={send:async e=>{let t=await fetch(P(`/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)=>{zu(`kiss`,e,t,`recommendation`,`decided`),zu(`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){la(r,ca(n),Lf);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(P(`/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 Rf=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_r(e.state)??vr(window.location.hash)??{kind:`view`,view:Rf},n=!F||!Sr(F,t),r=Pl;Pl=!1,r?Jl(t):Fl(()=>Jl(t)),n&&Kl(t),Kf()});var zf=vr(window.location.hash),Bf=N.current().ui===null,Vf=window.matchMedia(`(max-width: 860px)`).matches,Hf=Bf&&!zf?.focus?Mr(Il.expanded,hr(zf??{kind:`view`,view:Rf},ql),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Vf):null;if(Bf&&W?.dataset.ask===`open`&&Vf&&delete W.dataset.ask,Hf){let e=zf??{kind:`view`,view:Rf};zf||(F=e);let t={...e,focus:Hf};N.replace(w(t),t),Jl(t)}else zf?Jl(zf):(F={kind:`view`,view:Rf},N.replace(``,F));Ml=!0;var Uf={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:z,panes:W};N.setCapturer(()=>vi(Uf));async function Wf(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=oi(e),s=o?su.pending(o):void 0;if(!o||!di(s?s.request:li(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=au(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await cu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&ol(o,a.tall),t&&ui(o,t.top,t.offset))}function Gf(e){oi(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Kf(){let e=++Gl,t=()=>Gl===e;await yi(Uf,N.current().ui,{setFold:(e,t)=>Fl(()=>tu(e,t)),setAsk:e=>Fl(()=>Hu(e)),clearAsk:()=>{W&&delete W.dataset.ask,Uu(Vu())},openPanel:(e,n)=>Wf(e,n,t),closePanel:Gf,stillCurrent:t})}Kf();var qf=B?Ei(B,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=qf?.restoredStage??null,Gu(),iu();var Jf=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=>{Jf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Jf(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Na({root:document,post:(e,t)=>fetch(P(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Xd,checkForUpdates:()=>$d()});function Yf(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&I.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Xf(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void I.closeAll();Yf(n.error)}}function Zf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Qf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&I.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}if(Q){let e=Q.querySelector(`[data-confirm-delete]`),n=()=>Ed(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),se(a,a.dataset.copyId);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){I.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Xf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Xf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Xf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Qf();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async e=>{let n=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let r=null;try{let e=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,r===null){e.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=t(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(r)),e.textContent=t(r)},i=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:t}=await $.deleteReview();if(t===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),n(),Yf(t)}}function $f(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>L(e,{keepFocus:!0})}}function ep(){if(!F)return null;let e=F.focus??(F.kind===`section`?`guide`:F.view);return sr.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function tp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}u(`review`,{...Od.commands,...Qa(q,document),"review.section.review":{available:()=>ro(document)!==null,run:()=>{let e=ro(document);e&&L(e,{keepFocus:!0})}},"review.section.kiss":$f(`kiss`),"review.section.issues":$f(`issues`),"review.section.diagrams":$f(`map`),"review.section.questions":$f(`questions`),"review.section.files":$f(`files`),"review.buddy.open":{available:()=>Bu!==null,run:()=>{F?.focus?Cr(F,`buddy`,Yl):Hu(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Bu!==null&&B!==null,panel:so({prompts:()=>K,choose:md})},"review.focus.toggle":{available:()=>ep()!==null,run:()=>{let e=ep();e&&Zl(e)}},"review.leave":{available:e=>!!(e&&Tr(e,document,e.target===B||q.state().selecting||!!F?.focus)),run:e=>{B&&e?.target===B?B.blur():q.state().selecting?q.exit():F?.focus&&wr(F,Yl)}},"review.feedback.toggle":{available:()=>q.state().selecting||tp(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Xf(()=>$.setComplete(!0),Zf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Xf(()=>$.setLifecycle(`waiting`),Zf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Xf(()=>$.setLifecycle(`done`),Zf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Xf(()=>$.toggleQueued(),Zf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Mi(X,{actions:El!==``&&!Of.has(`update`)&&!bf,remote:Z}),run:()=>void xf()},"review.delete":{available:()=>$.offer().delete,run:()=>Qf({focusCancel:!0})}},{onOpen:()=>I.closeAll()}),p(),El&&Nc({markSeen:()=>fetch(P(`/seen`),{method:`POST`}),askUnread:()=>fetch(P(`/unread`))}),setTimeout(()=>{_l(ll([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),ee(window,()=>window.location.reload());var np=15e3,rp=6e4;function ip(){return El!==``&&document.visibilityState===`visible`&&!Of.has(`update`)}document.addEventListener(`visibilitychange`,()=>{ip()&&Date.now()-rf>=np&&nf()}),window.setInterval(()=>{ip()&&nf()},rp);export{lc as n,Ht as r,fc as t};
|
|
179
|
+
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(K.length)),yd()}async function ld(e){try{let t=await(await fetch(P(`/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{}cd()}function ud(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),ad?.toggleAttribute(`data-collapsed`,e),od&&(od.hidden=e),fetch(P(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function dd(e){let t=K.find(t=>t.id===e);!t||!B||(B.value=ai(B.value,t.prompt),Vu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}var fd=document.querySelector(`.prb-doc`),pd=null,md=null;function hd(){z&&(md?.(),md=bn(z,{layout:`flat`,actions:Cn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>bd(e,`selection`,t)}))}var gd=`reassess`;function _d(e){let t=vd();if(!e)return t;let n={id:gd,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function vd(){return[...xn.map(e=>({id:e.id,label:e.label})),...K.map(e=>({id:ir(e.id),label:e.name,section:rr}))]}function yd(){fd&&(pd?.(),pd=bn(fd,{triggerLabel:`Ask Buddy AI`,actions:vd(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>bd(e,`selection`,t)}))}function bd(e,t,n,r){Lr(e,{context:t,text:n},{savedPrompt:e=>K.find(t=>t.id===e)?.prompt??null,stage:e=>xd(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Vu(),pu(t,`finding`,zn(e,r?.ref))}})}function xd(e,t,n){B&&(U={text:e,source:t,...n?{continues:n}:{}},Wf?.stage(U),B.value=ai(B.value,e),Vu(),B.focus(),B.setSelectionRange(B.value.length,B.value.length),B.dispatchEvent(new Event(`input`)))}function Sd(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=un(_d(Vn(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(V||H)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function Cd(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=Dn(n),a=Vn(n);if(I.close(n),r===gd){i&&a&&wd(a,i);return}i&&bd(r,`finding`,i,a?{ref:a}:void 0)});function wd(e,t){if(V||H)return;let n=e.kind===`issue`?`severity`:`importance`;Vu(),pu(`${Tn(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?tr(t):null;n&&xd(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=Bn(t),r=Dn(t);n&&r&&bd(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),yd(),hd();var q=qa({root:document,showView:e=>L(e)}),Td=no({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>I.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>q.state().selecting,flip:e=>void q.flip(e)});Nt(document),qt(document);var Ed=document.querySelector(`[data-prompt-dialog]`),Dd=document.querySelector(`[data-prompt-name]`),Od=document.querySelector(`[data-prompt-text]`),kd=document.querySelector(`[data-prompt-delete]`),Ad=document.getElementById(`prb-prompt-title`),jd=``;function Md(e){let t=K.find(t=>t.id===e);jd=t?.id??``,Ad&&(Ad.textContent=t?`Edit prompt`:`Save a prompt`),Dd&&(Dd.value=t?.name??``),Od&&(Od.value=t?.prompt??``),kd&&(kd.hidden=!t),Ed?.showModal(),Dd?.focus()}async function Nd(){let e=Dd?.value.trim()??``,t=Od?.value.trim()??``;if(!e||!t){(e?Od:Dd)?.focus();return}let n=jd?K.map(n=>n.id===jd?{...n,name:e,prompt:t}:n):[...K,{id:crypto.randomUUID(),name:e,prompt:t}];Ed?.close(),await ld(n)}async function Pd(){if(!jd)return;let e=K.filter(e=>e.id!==jd);Ed?.close(),await ld(e)}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>Ed?.close()),kd?.addEventListener(`click`,()=>void Pd()),document.querySelector(`[data-prompt-save]`)?.addEventListener(`click`,()=>void Nd());var J=document.querySelector(`[data-fresh-region]`),Y=document.querySelector(`[data-fresh-status]`),Fd=document.querySelector(`[data-fresh-check]`),X=Kd(J?.dataset.report),Id=`prb-fresh-reopen`,Ld=Hd(),Rd=J?.dataset.dismissedSha,zd=Vd(J?.dataset.availability),Z=Bd(J?.dataset.remote);function Bd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Vd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Hd(){try{return sessionStorage.getItem(Id)!==null&&(sessionStorage.removeItem(Id),!0)}catch{return!1}}Ld&&uf(),Fd?.addEventListener(`click`,()=>void Xd());var Ud=document.querySelector(`[data-fetch-remote]`);Ud&&(fetch(P(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Ud.hidden=!1)}).catch(()=>{}),Ud.addEventListener(`click`,()=>void Wd(Ud)));async function Wd(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(P(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};ie(c(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:oe(n)}),n.fetched>0&&await Xd()}J?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Ld=!1,uf();let n=t.closest(`[data-fresh-dismiss]`);n&&(Rd=n.dataset.freshDismiss||void 0,Ld=!1,uf(),Gd())});function Gd(){fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Rd??null})}).catch(()=>{})}function Kd(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var qd=Ma(),Jd=!1,Yd=null;async function Xd(){if(Jd)return;Jd=!0,nf(!0),Yd&&await Yd;let e=rf(X,Z),t=await Qd(!1);nf(!1),t&&lf(),Jd=!1,t&&(X?.code.state===`changed`||Z!==null)&&Rd!==void 0&&(Rd=void 0,Gd()),uf(),Zd(t?rf(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Zd(e){Y&&(Y.textContent=e,window.setTimeout(df,2600))}async function Qd(e){let t=qd.snapshot();try{let n=await(await fetch(`${P(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,zd=n.availability??null,Z=n.remote??null,of=n.kiss??null,n.kissDismissedSha!==void 0&&(sf=n.kissDismissedSha??void 0),n.prState!==void 0&&tf(n.prState);let r=ja(n.standing);return r&&qd.current(t)&&Ca(document,r),!0}catch{return!1}}async function $d(){if(Jd||Yd||!J)return;let e=rf(X,Z),t=JSON.stringify(of);Yd=Qd(!0);let n=await Yd;Yd=null,ef=Date.now(),n&&(rf(X,Z)!==e&&uf(),JSON.stringify(of)!==t&&lf())}var ef=Date.now();function tf(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Sa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function nf(e){Fd&&(Fd.disabled=e),Y&&e&&(Y.textContent=`Checking…`,Y.dataset.state=`checking`)}function rf(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var af=document.querySelector(`[data-kiss-fresh-region]`),of=cf(af?.dataset.freshness),sf=af?.dataset.dismissedSha;function cf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function lf(){ha(of?.state===`changed`),af&&(af.innerHTML=sa(af.dataset.reviewedSha??``,of,{dismissedSha:sf,actions:Cl!==``}))}af?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(sf=t.dataset.kissFreshnessDismiss||void 0,lf(),fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:sf??null})}).catch(()=>{}))});function uf(){J&&(J.innerHTML=Pi(X,{dismissedSha:Rd,open:Ld,actions:Cl!==``,availability:zd,remote:Z}),df())}function df(){if(Y&&(X||Z)){let{label:e,state:t}=Mi(X,Z);Y.textContent=e,Y.dataset.state=t,Gi(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return ff(n);let r=t.closest(`[data-notice-dismiss]`);if(r){r.closest(`[data-notice]`)?.remove(),fetch(P(`/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 mf(i);if(t.closest(`[data-review-update]`))return void vf();let a=t.closest(`[data-update-cancel]`);if(a)return void bf(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void bf(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function ff(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>pf(e,`Copied`),()=>pf(e,`Select it`))}function pf(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function mf(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=hf(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${Cf}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=hf(e)?null:wf(e);try{await fetch(P(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}hf(e)&&gf(),window.location.reload()}function hf(e){return e.closest(`.prb-fresh-notes p`)}function gf(){try{sessionStorage.setItem(Id,`1`)}catch{}}var _f=!1;async function vf(){if(_f)return;_f=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(P(`/job`))).json();e.update&&e.update.phase!==`none`&&!Yi(e.update.phase)&&n()}catch{}},500);try{await fetch(P(`/update`),{method:`POST`})}catch{}n()}var yf={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function bf(e,t){let n=yf[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(P(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,Sf(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||Sf(e,n.tooLate),await ho({look:async()=>{let e=await fetch(P(`/job`),{signal:AbortSignal.timeout(xf)});return n.running(await e.json())},reload:()=>window.location.reload()})}var xf=3e3;function Sf(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var Cf=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function wf(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=Cf,t.appendChild(n),n}var Tf=co(document),Ef=null,Df=Date.now();function Of(){Ef===null&&(Ef=window.setTimeout(()=>{Ef=null,kf()},ue(Date.now()-Df)))}async function kf(){try{let e=await(await fetch(P(`/job`))).json();if(H&&!e.ask||jf&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Tf){let r=t[e];if(r){if(lo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?fo(n,r.phase,r.progress):Af(n,r.progress)}}}catch{}Of()}function Af(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 jf=document.querySelector(`[data-diagram-running]`)!==null;(Tf.size>0||H||jf)&&(Df=Date.now(),Of()),document.querySelector(`[data-started-at]`)&&mo(document);function Mf(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 Nf(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…`,Nf(t),fetch(P(`/retry`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);Df=Date.now(),Of()}).catch(()=>{t.disabled=!1,t.textContent=`Retry`,Mf(t)}))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(P(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=zr,pf(t,`Could not start. Try again`,2500)}))});var Pf={send:async e=>{let t=await fetch(P(`/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)=>{Iu(`kiss`,e,t,`recommendation`,`decided`),Iu(`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){ua(r,la(n),Pf);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(P(`/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 Ff=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=vr(e.state)??yr(window.location.hash)??{kind:`view`,view:Ff},n=!F||!Cr(F,t),r=jl;jl=!1,r?Gl(t):Ml(()=>Gl(t)),n&&Ul(t),Uf()});var If=yr(window.location.hash),Lf=N.current().ui===null,Rf=window.matchMedia(`(max-width: 860px)`).matches,zf=Lf&&!If?.focus?Nr(Nl.expanded,gr(If??{kind:`view`,view:Ff},Wl),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Rf):null;if(Lf&&W?.dataset.ask===`open`&&Rf&&delete W.dataset.ask,zf){let e=If??{kind:`view`,view:Ff};If||(F=e);let t={...e,focus:zf};N.replace(w(t),t),Gl(t)}else If?Gl(If):(F={kind:`view`,view:Ff},N.replace(``,F));kl=!0;var Bf={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:z,panes:W};N.setCapturer(()=>yi(Bf));async function Vf(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=si(e),s=o?iu.pending(o):void 0;if(!o||!fi(s?s.request:ui(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=nu(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await au(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&rl(o,a.tall),t&&di(o,t.top,t.offset))}function Hf(e){si(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Uf(){let e=++Hl,t=()=>Hl===e;await bi(Bf,N.current().ui,{setFold:(e,t)=>Ml(()=>Ql(e,t)),setAsk:e=>Ml(()=>zu(e)),clearAsk:()=>{W&&delete W.dataset.ask,Bu(Ru())},openPanel:(e,n)=>Vf(e,n,t),closePanel:Hf,stillCurrent:t})}Uf();var Wf=B?Di(B,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;U=Wf?.restoredStage??null,Hu(),tu();var Gf=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=>{Gf(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Gf(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-menu]`),$=Pa({root:document,post:(e,t)=>fetch(P(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:qd,checkForUpdates:()=>Xd()});function Kf(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&I.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function qf(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void I.closeAll();Kf(n.error)}}function Jf(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Yf(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&I.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}if(Q){let e=Q.querySelector(`[data-confirm-delete]`),n=()=>Cd(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),se(a,a.dataset.copyId);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){I.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),qf(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),qf(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),qf(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Yf();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async e=>{let n=e.getAttribute(`aria-pressed`)!==`true`;e.disabled=!0;let r=null;try{let e=await fetch(P(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(e.disabled=!1,r===null){e.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{e.textContent=t(e.getAttribute(`aria-pressed`)===`true`)},1600);return}e.setAttribute(`aria-pressed`,String(r)),e.textContent=t(r)},i=async()=>{e&&(e.disabled=!0,e.textContent=`Deleting`);let{error:t}=await $.deleteReview();if(t===null)return void window.location.replace(`/`);e&&(e.disabled=!1,e.textContent=`Delete`),n(),Kf(t)}}function Xf(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>L(e,{keepFocus:!0})}}function Zf(){if(!F)return null;let e=F.focus??(F.kind===`section`?`guide`:F.view);return cr.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Qf(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}u(`review`,{...Td.commands,...$a(q,document),"review.section.review":{available:()=>io(document)!==null,run:()=>{let e=io(document);e&&L(e,{keepFocus:!0})}},"review.section.kiss":Xf(`kiss`),"review.section.issues":Xf(`issues`),"review.section.diagrams":Xf(`map`),"review.section.questions":Xf(`questions`),"review.section.files":Xf(`files`),"review.buddy.open":{available:()=>Lu!==null,run:()=>{F?.focus?wr(F,`buddy`,Kl):zu(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Lu!==null&&B!==null,panel:ce({prompts:()=>K,choose:dd})},"review.focus.toggle":{available:()=>Zf()!==null,run:()=>{let e=Zf();e&&Jl(e)}},"review.leave":{available:e=>!!(e&&Er(e,document,e.target===B||q.state().selecting||!!F?.focus)),run:e=>{B&&e?.target===B?B.blur():q.state().selecting?q.exit():F?.focus&&Tr(F,Kl)}},"review.feedback.toggle":{available:()=>q.state().selecting||Qf(),label:()=>q.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>q.state().selecting?q.exit():q.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void qf(()=>$.setComplete(!0),Jf(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void qf(()=>$.setLifecycle(`waiting`),Jf(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void qf(()=>$.setLifecycle(`done`),Jf(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void qf(()=>$.toggleQueued(),Jf(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Ni(X,{actions:Cl!==``&&!Tf.has(`update`)&&!_f,remote:Z}),run:()=>void vf()},"review.delete":{available:()=>$.offer().delete,run:()=>Yf({focusCancel:!0})}},{onOpen:()=>I.closeAll()}),p(),Cl&&Ac({markSeen:()=>fetch(P(`/seen`),{method:`POST`}),askUnread:()=>fetch(P(`/unread`))}),setTimeout(()=>{ml(ol([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),ee(window,()=>window.location.reload());var $f=15e3,ep=6e4;function tp(){return Cl!==``&&document.visibilityState===`visible`&&!Tf.has(`update`)}document.addEventListener(`visibilitychange`,()=>{tp()&&Date.now()-ef>=$f&&$d()}),window.setInterval(()=>{tp()&&$d()},ep);export{oc as n,Ut as r,lc as t};
|