prreviewbuddy 0.92.0 → 0.95.2
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 +101 -0
- package/dist/main.js +597 -136
- package/dist/{mcp_tools-BKPpd9dN.js → mcp_tools-DDbcXys2.js} +1274 -571
- package/dist/server.js +317 -413
- package/package.json +1 -1
- package/static/{chunk-CIJm20ER.js → chunk-CQIPqX7U.js} +1 -1
- package/static/chunk-Cs33-tV3.js +1 -0
- package/static/{chunk-Ahis0VaG.js → chunk-Cum6sHaC.js} +1 -1
- package/static/{chunk-DMxtqzNj.js → chunk-D1LBeOJc.js} +1 -1
- 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 +11 -0
- package/static/workspace.js +64 -64
- package/static/chunk-DRtin0n-.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{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as l,it as u,l as d,lt as f,m as p,nt as m,o as h,pt as g,q as _,rt as v,s as y,t as ee,ut as b,vt as x,xt as S}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{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as l,it as u,l as d,lt as f,m as p,nt as m,o as h,pt as g,q as _,rt as v,s as y,t as ee,ut as b,vt as x,xt as S}from"./chunk-Cs33-tV3.js";import{C,S as te,T as ne,_ as re,b as ie,d as ae,f as oe,g as se,h as ce,i as le,l as ue,m as de,o as fe,p as pe,u as me,v as he,w as ge,x as _e,y as ve}from"./chunk-CQIPqX7U.js";import{t as w}from"./chunk-CvSN2dS5.js";import{i as ye,n as be,r as xe,t as Se}from"./chunk-D1LBeOJc.js";import{t as Ce}from"./chunk-Dv0Wowan.js";import{t as we}from"./chunk-C8kkSv38.js";function T(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function Te(e){return T(e).replace(/`([^`\n]+)`/g,`<code>$1</code>`)}var Ee=`pr-helper-code-block`,De=`pr-helper-code-copy`,Oe=/^\u0002(\d+)\u0002/,ke=/^(?:https?:\/\/|#)/i,Ae=/^https:\/\//i,je=/^(?:image|img|screenshot|screen ?shot|picture|photo|pic)$/i,Me=/\.(?:png|jpe?g|gif|webp|svg|bmp|heic|avif|tiff?)$/i;function Ne(e){let t=(e??``).trim();return!t||je.test(t)||Me.test(t)?`View attached image`:`View image: ${t}`}function Pe(e,t){return Ae.test(e)?`<a href="${e}" target="_blank" rel="noopener noreferrer">${t}</a>`:null}function Fe(e,t){return Pe(T((e??``).trim()),T(t))}var E=e=>/^(?:left|right|center|justify)$/i.test(e)?e.toLowerCase():null,Ie=e=>/^[1-9]\d{0,2}$/.test(e)?e:null,Le=e=>/^\d{1,9}$/.test(e)?e:null,Re=e=>e.slice(0,300),ze=new Map(Object.entries({a:{href:e=>{let t=e.trim();return ke.test(t)?t:null},title:Re},abbr:{title:Re},b:{},blockquote:{},br:{},caption:{align:E},cite:{},code:{},dd:{},del:{},details:{},div:{align:E},dl:{},dt:{},em:{},hr:{},i:{},ins:{},kbd:{},li:{},mark:{},ol:{start:Le},p:{align:E},q:{},s:{},samp:{},small:{},span:{},strike:{},strong:{},sub:{},summary:{},sup:{},table:{align:E},tbody:{},td:{align:E,colspan:Ie,rowspan:Ie},tfoot:{},th:{align:E,colspan:Ie,rowspan:Ie},thead:{},tr:{align:E},u:{},ul:{},var:{},h1:{align:E},h2:{align:E},h3:{align:E},h4:{align:E},h5:{align:E},h6:{align:E}}).map(([e,t])=>[e,new Map(Object.entries({title:Re,...t}))])),Be=new Set([`br`,`hr`,`img`,`input`,`source`,`meta`,`link`,`base`,`wbr`,`col`,`area`,`track`,`param`,`embed`]),Ve=new Set([`script`,`style`,`iframe`,`object`,`embed`,`svg`,`math`,`template`,`noscript`,`textarea`,`frame`,`frameset`,`applet`,`head`,`title`,`select`]),He=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(`.`)),Ue=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(`.`)),We=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`),Ge=/([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;function Ke(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 qe(e){let t=new Map;for(let n of e.matchAll(Ge)){let e=n[1].toLowerCase();t.has(e)||t.set(e,Ke(n[2]??n[3]??n[4]??``))}return t}function Je(e){let t=e.match(/^h([1-6])$/);return t?`h${Math.min(Number(t[1]),3)+3}`:e}function Ye(e,t){let n=Je(e),r=ze.get(e),i=[];for(let[e,n]of qe(t)){let t=r.get(e),a=t?t(n):null;a!==null&&i.push(` ${e}="${T(a)}"`)}return e===`a`&&i.some(e=>e.startsWith(` href=`))&&i.push(` target="_blank" rel="noopener noreferrer"`),`<${n}${i.join(``)}>`}function Xe(e){let t=[],n=e=>`${t.push(e)-1}`,r=``,i=0;We.lastIndex=0;for(let t;t=We.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=qe(c),r=e.get(`alt`);u=n({kind:`text`,name:t,tag:``,markup:o?``:Fe(e.get(`src`),Ne(r))??T(r??``)})}else if(t===`video`||t===`audio`){let r=o?void 0:qe(c).get(`src`);if(!o&&!l){let n=e.slice(We.lastIndex),i=n.match(RegExp(`</${t}\\s*>`,`i`)),a=i?n.slice(0,i.index):``;r??=qe(a.match(/<source\b([^<>]*)>/i)?.[1]??``).get(`src`),i&&(We.lastIndex+=i.index+i[0].length)}u=n({kind:`text`,name:t,tag:``,markup:(o?null:Fe(r,t===`video`?`Open attached video`:`Open attached audio`))??``})}else if(Ve.has(t)){if(!o&&!l&&!Be.has(t)){let n=RegExp(`</${t}\\s*>`,`i`),r=e.slice(We.lastIndex),i=r.search(n);i!==-1&&(We.lastIndex+=i+r.slice(i).match(n)[0].length)}u=``}else if(He.has(t))u=n({kind:`text`,name:t,tag:``,markup:``});else if(ze.has(t)){let e=Je(t);u=o?n({kind:`close`,name:t,tag:e,markup:``}):Be.has(t)?n({kind:`void`,name:t,tag:e,markup:Ye(t,c)}):n({kind:`open`,name:t,tag:e,markup:Ye(t,c)})}}u!==null&&(r+=e.slice(i,t.index)+u,i=We.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 Qe(e,t){let n=e.match(Oe);return!!(n&&Ue.has(t.tokens[Number(n[1])].name))}function $e(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 et(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 tt=`\0`,nt=``,rt=/\u0000(\d+)\u0000/g,it=/^\u0000\d+\u0000$/,at=/\u0001(\d+)\u0001/g;function ot(e,t={}){let{text:n,blocks:r}=ft(dt(e.replace(/[\u0000\u0001\u0002]/g,``),t),t);if(!t.safeHtml)return gt(Ct(n),r);let i=Xe(n);return $e(et(gt(Ct(i.text,i),r),i))}function st(e){return e.match(/^\s*(`{3,}|~{3,})\s*[\w+#.-]*\s*$/)?.[1][0]??null}function ct(e,t){return RegExp(`^\\s*${t}{3,}\\s*$`).test(e)}var lt=/`[^`\n]+`|<!--/g;function ut(e,t){lt.lastIndex=t;for(let t;t=lt.exec(e);)if(t[0]===`<!--`)return t.index;return-1}function dt(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=ct(s,r);e&&(r=null),n.push({raw:s,visible:s,code:e?`close`:`body`});continue}if(!i&&(r=st(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=ut(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 ft(e,t={}){let n=[],r=[],i=null,a,o=()=>{r.push(`${tt}${n.length}${tt}`);let e=i.join(`
|
|
4
|
+
`);n.push(a===void 0?{code:e}:{code:e,diagram:{label:`Mermaid diagram: ${a??ht(e)}`}}),i=null};for(let n of e)n.absent||(n.code===`open`?(i=[],a=t.mermaid&&pt(n.raw).toLowerCase()===`mermaid`?mt(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 pt(e){return e.match(/^\s*(?:`{3,}|~{3,})\s*([\w+#.-]*)/)?.[1]??``}function mt(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 ht(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 gt(e,t){return e.replace(rt,(e,n)=>{let r=t[Number(n)];return r.diagram?yt(r.code,r.diagram.label):_t(r.code,`Copy`,`Copy code`)})}function _t(e,t,n,r=``){return`<div class="${Ee}"${r}><pre><code>${T(e)}</code></pre><button type="button" class="${De}" aria-label="${n}">${t}</button></div>`}var vt=0;function yt(e,t){let n=`prb-md-mermaid-source-${++vt}`;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="${T(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>`+_t(e,`Copy source`,`Copy source`,` id="${n}" data-md-mermaid-source`)+`</figure>`}function bt(e,t=0){let n=t;for(let t of e)n=t===` `?n+4-n%4:n+1;return n}function xt(e){return bt(e.match(/^[ \t]*/)[0])}function St(e){let t=e.match(/^([ \t]*)(?:([-*+])|(\d{1,9})[.)])([ \t]+)(\S.*)$/);if(!t)return null;let[,n,r,i,a,o]=t,s=bt(n)+(r?1:i.length+1),c=bt(a,s);return{tag:r?`ul`:`ol`,start:r?1:Number(i),text:o.trim(),content:c-s>4?s+1:c}}function Ct(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>${wt(r.join(` `),t)}</p>`),i.length&&n.push(`<blockquote>${wt(i.join(` `),t)}</blockquote>`),a){let e=e=>e.length===1?wt(e[0],t):e.map(e=>`<p>${wt(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?wt(e,t):`<p>${wt(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(T(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=xt(o),l=St(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&&Qe(e,t)){c(),s=[T(e)];continue}if(it.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}>${wt(l[2],t)}</h${e}>`);continue}let u=St(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 wt(e,t){let n=[];return T(e).replace(/`([^`\n]+)`/g,(e,t)=>(n.push(t),`${nt}${n.length-1}${nt}`)).replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/g,(e,n,r)=>t&&!Ze(r,t)?Pe(r,Ne(n))??e:e).replace(/(?<!!)\[([^\]\n]+)\]\(([^)\s]+)\)/g,(e,n,r)=>ke.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(at,(e,t)=>`<code>${n[Number(t)]}</code>`)}async function Tt(e){try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn(`PR Helper: clipboard write failed, falling back to execCommand`,t),Et(e)}}function Et(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 Dt=`pr-helper-msg-copy`,Ot=`pr-helper-chat-actions`,kt=`data-message-id`,At=`data-copy-source`,jt=`data-feedback-source`,Mt=`data-feedback-ref`,Nt={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 Pt(e){return zt(`${At}="${T(e)}"`)}var Ft=`pr-helper-finding-copy`,It=`data-copy-idle-label`,Lt=`data-copy-idle-aria`,Rt=`data-copy-idle-tip`;function zt(e,t){let{icon:n}=Nt.idle,r=t?.label??Nt.idle.label,i=t?.aria??Nt.idle.aria,a=t?` ${It}="${T(r)}" ${Lt}="${T(i)}" ${Rt}="${T(t.tip)}"`:``,o=`<button type="button" class="${t?`${Dt} ${Ft}`:Dt}" ${e}${a}${t?` data-tip="${T(t.tip)}"`:``} aria-label="${T(i)}"><span class="${Dt}-icon" aria-hidden="true">${Vt(n)}</span><span class="${Dt}-label"${r?``:` hidden`}>${T(r)}</span></button>`;return t?o:`<div class="${Ot}">${o}</div>`}function Bt(e,t){let n=Nt[t],r=t===`idle`?{...n,label:e.getAttribute(It)??n.label,aria:e.getAttribute(Lt)??n.aria}:n,i=e.querySelector(`.${Dt}-icon`),a=e.querySelector(`.${Dt}-label`);i&&(i.innerHTML=Vt(r.icon));let o=(e.getAttribute(It)??``)!==``,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(Rt)??``:r.label),e.setAttribute(`aria-label`,r.aria),e.classList.toggle(`copied`,t===`copied`),e.classList.toggle(`failed`,t===`failed`)}function Vt(e){return`<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">${e}</svg>`}var Ht=1400,Ut=`Copy`,Wt=`Copied`,Gt=/Mac|iPhone|iPad/.test(navigator.userAgent)?`Press ⌘C`:`Press Ctrl C`,Kt=new WeakMap;function qt(e,t={}){let n=e=>{let n=e.target;if(!(n instanceof Element))return;let r=n.closest(`.${De}`),i=r?null:n.closest(`.${Dt}`);!r&&!i||(e.preventDefault(),e.stopPropagation(),r?Xt(r):i&&Jt(i,t.messageSource))};return e.addEventListener(`click`,n,!0),()=>e.removeEventListener(`click`,n,!0)}async function Jt(e,t){let n=Yt(e,t);Qt(e,n!==null&&await Tt(n)?`copied`:`failed`)}function Yt(e,t){let n=e.getAttribute(At);if(n!==null)return n;let r=e.getAttribute(kt);return r&&t?t(r):null}async function Xt(e){let t=e.parentElement?.querySelector(`pre code`),n=t?await Tt(t.textContent??``):!1;!n&&t&&Zt(t),$t(e,n?Wt:Gt,n)}function Zt(e){let t=window.getSelection();if(!t)return;let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}function Qt(e,t){let n=Kt.get(e);n&&window.clearTimeout(n),Bt(e,t),Kt.set(e,window.setTimeout(()=>{Bt(e,`idle`),Kt.delete(e)},Ht))}function $t(e,t,n){let r=Kt.get(e);r&&window.clearTimeout(r);let i=e.dataset.idleLabel??=e.textContent||Ut;e.textContent=t,e.classList.toggle(`copied`,n),Kt.set(e,window.setTimeout(()=>{e.textContent=i,e.classList.remove(`copied`),Kt.delete(e)},Ht))}var en={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`]},tn=null;function nn(){return tn??=w(()=>import(`./chunk-D6oLtkSC.js`).then(e=>(e.default.initialize(en),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),tn}async function rn(e,t,n,r=nn){let i=await r();await i.parse(n);let{svg:a}=await i.render(t,n);e.innerHTML=a,on(e)}var an=`http://www.w3.org/2000/svg`;function on(e){for(let t of[...e.querySelectorAll(`a`)]){let n=e.ownerDocument.createElementNS(an,`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 sn=0;function cn(e,t={}){let n=t.engine??nn,r=t.observe??ln,i=new WeakSet;for(let t of e.querySelectorAll(`figure[data-md-mermaid]`))r(t,()=>{i.has(t)||(i.add(t),un(t,n))});let a=e=>{let t=e.target?.closest?.(`[data-md-mermaid-toggle]`);t&&fn(t)};return e.addEventListener(`click`,a),()=>e.removeEventListener(`click`,a)}function ln(e,t){let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(n.disconnect(),t())},{rootMargin:`200px`});n.observe(e)}async function un(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 rn(r,`prb-md-mermaid-${++sn}`,o,t),dn(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 dn(e){let t=parseFloat(e?.style.maxWidth??``);!e||!Number.isFinite(t)||t<=0||(e.setAttribute(`width`,String(t)),e.style.maxWidth=`none`)}function fn(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 pn=`pr-helper-selection-popover`,mn=`pr-helper-selection-popover-expanded`,hn=`pr-helper-selection-copy-done`,gn=8,_n=8,vn=1e3,yn=`Copy selected text`,bn=`Copy`,xn=`Copied`,Sn=`pr-helper-selection-popover-flat`,D=null;function Cn(e){return`<button type="button" class="pr-helper-selection-menu-item" data-selection-action="${T(e.id)}">${T(e.label)}</button>`}function wn(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(Cn).join(``)}${[...t].map(([e,t])=>`
|
|
10
10
|
<div class="pr-helper-selection-menu-group">
|
|
11
11
|
<div class="pr-helper-selection-menu-heading">${T(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(Cn).join(``)}</div>
|
|
13
|
+
</div>`).join(``)}`}function Tn(e){if(e.layout===`flat`)return En(e);let t=wn(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{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
18
18
|
</svg>
|
|
19
19
|
<span>${T(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="${yn}" 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,28 +27,28 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
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">${yn}</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 En(e){return`<div class="pr-helper-selection-menu">
|
|
34
|
+
${wn(e.actions)}
|
|
35
|
+
<button type="button" class="pr-helper-selection-menu-item pr-helper-selection-copy-item" data-selection-copy>${bn}</button>
|
|
36
|
+
</div>`}function Dn(e,t){let{width:n,height:r}=e.getBoundingClientRect(),i=t.top-r-gn,a=i>=_n?i:Math.min(t.bottom+gn,window.innerHeight-r-_n),o=Math.max(_n,Math.min(t.left,window.innerWidth-n-_n));e.style.top=`${Math.max(_n,a)}px`,e.style.left=`${o}px`}function On(){kn&&=(window.clearTimeout(kn),0),D?.popover.remove(),D=null}var kn=0;function An(e){let t=e.querySelector(`.pr-helper-selection-tip`),n=e.querySelector(`.pr-helper-selection-copy-item`);e.classList.add(hn),t&&(t.textContent=xn),n&&(n.textContent=xn),kn&&window.clearTimeout(kn),kn=window.setTimeout(()=>jn(e),vn)}function jn(e){kn&&=(window.clearTimeout(kn),0),e.classList.remove(hn);let t=e.querySelector(`.pr-helper-selection-tip`);t&&(t.textContent=yn);let n=e.querySelector(`.pr-helper-selection-copy-item`);n&&(n.textContent=bn)}async function Mn(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}An(e)}function Nn(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 Pn(e,t){let n={},r=()=>{let r=Nn(e,t);if(!r){(!D||D.owner===n)&&On();return}if(D&&D.owner!==n&&On(),D)D.popover.classList.remove(mn),jn(D.popover),D.text=r.text;else{let i=document.createElement(`div`);i.className=t.layout===`flat`?`${pn} ${Sn}`:pn,i.innerHTML=Tn(t),i.addEventListener(`mousedown`,e=>e.preventDefault()),i.addEventListener(`click`,n=>{let r=n.target;if(r.closest(`[data-selection-copy]`)){D?.text&&Mn(i,D.text);return}if(r.closest(`[data-selection-open]`)){i.classList.add(mn);let n=Nn(e,t);Dn(i,n?.rect??i.getBoundingClientRect());return}let a=r.closest(`[data-selection-action]`)?.dataset.selectionAction;if(!a||!D)return;let o=D.text;On(),t.onChoose(a,o)}),document.body.appendChild(i),D={popover:i,text:r.text,owner:n}}Dn(D.popover,r.rect)},i=e=>{D&&e.target instanceof Node&&D.popover.contains(e.target)||window.setTimeout(r,0)},a=e=>{(e.shiftKey||e.key===`Shift`)&&r()},o=()=>{if(!D)return;let e=window.getSelection();(!e||e.isCollapsed)&&On()},s=e=>{e.key===`Escape`&&On()},c=()=>On();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),On()}}var Fn=[{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 In(e){return![...Fn,...Ln].find(t=>t.id===e)?.instruction}var Ln=[{id:`add-to-chat`,label:`Add to chat`}],Rn=800;function zn(e,t={}){let n=t.maxChars??Rn,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 Bn(e,t,n={}){let r=zn(e,n);if(!r)return null;let i=[...Fn,...Ln].find(e=>e.id===t);return i?i.instruction?`${r}\n\n${i.instruction}`:`${r}\n\n`:null}function Vn(e){return e.closest(`[data-finding-card]`)?.querySelector(`[data-copy-source]`)?.getAttribute(`data-copy-source`)??``}var Hn=[`verify`,`decide`,`fix`];function O(e,t=``){return typeof e==`string`?e:t}var Un=`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 Wn(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 Gn=[`explain-detail`,`explain`];function Kn(e){return Gn.includes(e)}function qn(e){return e.action??`explain`}var Jn=`Ask more →`,Yn={"explain-detail":`Explanation · Technical`,explain:`Explanation · Simple`};function Xn(e){return Yn[qn(e)]}function Zn(e,t={}){let n=ot(e.text),r=t.askMore?`<button type="button" class="pr-helper-simple-explanation-more" data-simple-explanation-more>${Jn}</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">${Xn(e)}</summary>
|
|
45
45
|
<div class="pr-helper-simple-explanation-body pr-helper-markdown">${i}</div>
|
|
46
|
-
</details>`}function
|
|
46
|
+
</details>`}function Qn(e,t){return`.pr-helper-${e}-card[data-finding-card="${CSS.escape(t)}"]`}function $n(e){return e?.classList.contains(`pr-helper-issue-card`)?`issue`:e?.classList.contains(`pr-helper-question-card`)?`question`:null}function er(e,t){return Kn(e)&&t?{explains:{...t,action:e}}:{}}function tr(e){let t=nr(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 nr(e){let t=e.closest(`[data-finding-card]`),n=$n(t),r=t?.getAttribute(`data-finding-card`);return n&&r?{kind:n,id:r}:null}function rr(e,t){let n=e.querySelector(Qn(t.kind,t.id));if(!n)return;let r=Zn(t,{open:!0,askMore:!0}),i=n.querySelector(`:scope > [data-simple-explanation]`);if(i){i.outerHTML=r;return}ir(n,t.kind)?.insertAdjacentHTML(`afterend`,r)}function ir(e,t){let n=e.querySelector(`:scope > .pr-helper-issue-header`),r=n?.nextElementSibling?.matches(`[data-assessment-region]`)?n.nextElementSibling:n;if(t===`issue`)return e.querySelector(`:scope > .pr-helper-issue-impact, :scope > .pr-helper-issue-desc`)??e.querySelector(`:scope > [data-assessment-region]`)??e.querySelector(`:scope > .pr-helper-dismissal-stale`)??n;let i=r?.nextElementSibling;return i?.tagName===`H5`&&i.textContent===`Why this matters`?i.nextElementSibling:r??null}function ar(e,t){return e?.continues&&t.includes(e.text)?e.continues:void 0}var or=/^pr-helper-severity-(critical|major|minor|nit)$/;function sr(e,t,n){let r=e.querySelector(Qn(t.kind,t.id));if(!r)return null;if(t.kind===`issue`){for(let e of[...r.classList])or.test(e)&&r.classList.remove(e);t.cardClass&&r.classList.add(t.cardClass)}r.querySelector(`[data-grade-control]`)?.replaceWith(lr(e,t.grade)),r.querySelector(`[data-assessment-region]`)?.replaceWith(lr(e,t.region)),r.querySelector(`[${At}]`)?.setAttribute(At,t.copy);let i=r.querySelector(`[data-question-answered], [data-issue-dismissed]`),a=t.verdictClosed===!0;return i&&i.dataset.verdictClosed===`true`!==a&&(a?i.dataset.verdictClosed=`true`:delete i.dataset.verdictClosed,n?.(r,a)),cr(e),r}function cr(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=Wn(r);i&&n.append(lr(e,i))}}function lr(e,t){let n=e.createElement(`template`);return n.innerHTML=t.trim(),n.content}function ur(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 dr=`Could not reach PR Review Buddy. The workspace server may have stopped.`;async function fr(e,t,n,r,i){let a;try{a=await r.post(n)}catch{return ur(t,dr),!1}if(a===null)return!1;let o=a.body?.card?sr(e,a.body.card,r.onVerdictClosed):t;return a.status===200?((i===`grade`?o?.querySelector(`[data-grade-control] button`):o?.querySelector(`[data-assessment-region] summary, [data-grade-control] button`))?.focus(),!0):(ur(o,typeof a.body?.error==`string`?a.body.error:`That could not be saved.`),!1)}async function pr(e,t){let n=e.closest(`[data-grade-menu]`),r=e.closest(`[data-finding-card]`),i=nr(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),fr(e.ownerDocument,r,{op:`set`,kind:i.kind,id:i.id,from:o,to:a,...s?{reason:s}:{}},t,`grade`)}async function mr(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 fr(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 hr(e,t){e.addEventListener(`click`,e=>{let n=e.target,r=n?.closest(`[data-grade-menu] [data-grade-to]`);if(r){pr(r,t);return}let i=n?.closest(`[data-reassessment-decide]`);i&&mr(i,t)})}function gr(e){let t=Vn(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`${zn(t,{maxChars:1/0})}\n\n${zn(`${r}${i?`: ${i}`:``}`,{maxChars:1/0})}\n\n`}var _r=`Reassesses existing issues and questions using only your message in this turn.`;function vr(e,t=[]){return e.reconciles?yr(t):`<div class="prb-turn-actions" data-turn-actions="${e.askedAt}">
|
|
47
47
|
<button type="button" class="prb-turn-reconcile" data-reconcile-turn="${e.askedAt}">Reconcile with findings</button>
|
|
48
|
-
<span class="prb-turn-help">${T(
|
|
49
|
-
</div>`}function
|
|
48
|
+
<span class="prb-turn-help">${T(_r)}</span>
|
|
49
|
+
</div>`}function yr(e){if(!e.length)return``;let t=e.length===1?`Accept the suggestion`:`Accept all ${e.length} suggestions`;return`<div class="prb-turn-actions">
|
|
50
50
|
<button type="button" class="prb-turn-accept-all" data-reconcile-accept-all="${T(e.join(` `))}">${T(t)}</button>
|
|
51
|
-
</div>`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var
|
|
51
|
+
</div>`}Object.freeze([{id:`default-assumptions`,name:`What does it assume?`,prompt:`What assumptions does this change make? Say which are stated, which are implied, and what happens if one turns out to be wrong.`},{id:`default-explain-educational`,name:`Teach me this`,prompt:`Explain this in an educational way: the concepts it relies on, why it is built this way, and what I should take away from it.`},{id:`default-what-could-go-wrong`,name:`What could go wrong?`,prompt:`What could go wrong here? Think about edge cases, failure modes and the existing callers this could break.`},{id:`default-walkthrough`,name:`Walk me through it`,prompt:`Walk me through the implementation step by step, in the order the code runs.`},{id:`default-verify-manually`,name:`What should I verify?`,prompt:`What should I verify manually before approving this, and how would I check each one?`}].map(e=>Object.freeze(e)));var br=`saved:`,xr=`Your prompts`;function Sr(e){return`${br}${e}`}function Cr(e){return e.startsWith(`saved:`)?e.slice(6):null}var wr=[`failure`,`risk`,`intent`,`maintenance`,`other`,`closed`];function Tr(e){return wr.includes(e)}var Er=[`failure`,`risk`,`intent`,`maintenance`,`other`],Dr={failure:`Failures`,risk:`Possible risks`,intent:`Intent to confirm`,maintenance:`Maintenance`,other:`Other issues`};function Or(e){let t={bySection:{},verify:0,decide:0,fix:0,step:0};for(let n of e)t.bySection[n.section]=(t.bySection[n.section]??0)+1,n.next&&(t[n.next]+=1);return t}var kr=(e,t,n)=>`${e} ${e===1?t:n}`;function Ar(e){let t=Object.values(e.bySection).reduce((e,t)=>e+(t??0),0);if(t===0)return`No issues are outstanding from this analysis.`;let n=[e.verify?kr(e.verify,`verification step`,`verification steps`):``,e.decide?kr(e.decide,`decision`,`decisions`):``,e.fix?kr(e.fix,`fix`,`fixes`):``,e.step?kr(e.step,`next step`,`next steps`):``].filter(Boolean);return[kr(t,`outstanding issue`,`outstanding issues`),...n].join(` · `)}function jr(e){let t=Er.filter(t=>(e.bySection[t]??0)>0);return t.length<2?``:t.map(t=>`<button type="button" class="pr-helper-issue-nav-item" data-issue-nav="${t}">${T(Dr[t])}<span class="pr-helper-issue-nav-count">${e.bySection[t]}</span></button>`).join(``)}function Mr(e,t){e.addEventListener(`click`,t=>{let n=t.target?.closest(`[data-issue-nav]`);if(!n||!e.contains(n))return;let r=e.querySelector(`[data-impact-group="${n.dataset.issueNav}"]`);r&&(r.open||=!0,r.scrollIntoView({block:`start`,behavior:`smooth`}),r.querySelector(`summary`)?.focus({preventScroll:!0}))}),t&&e.addEventListener(`toggle`,e=>{let n=e.target,r=n.dataset?.impactGroup??(n.dataset?.closedFindings===`issues`?`closed`:void 0);r&&Tr(r)&&t(r,n.open)},!0)}function Nr(e){let t=Or([...e.querySelectorAll(`[data-issue-section]`)].filter(e=>!e.closest(`.pr-helper-closed-findings`)).map(e=>{let t=e.dataset.issueSection,n=e.dataset.issueNext;return{section:Er.includes(t)?t:`other`,...n===`step`||Hn.includes(n)?{next:n}:{}}}));for(let n of e.querySelectorAll(`[data-impact-group]`)){let e=t.bySection[n.dataset.impactGroup]??0;n.hidden=e===0;let r=n.querySelector(`[data-issue-group-count]`);r&&(r.textContent=String(e))}let n=e.querySelector(`[data-issues-attention]`);n&&(n.textContent=Ar(t));let r=e.querySelector(`[data-issue-nav-list]`);if(r){let e=jr(t);r.innerHTML=e,r.hidden=!e}}function Pr(e,t){let n=t.dataset.issueSection;return!n||!Er.includes(n)?null:e.querySelector(`[data-impact-group="${n}"] .pr-helper-issue-group-list`)}var Fr=[`prb-rail-review`,`prb-rail-path`,`prb-rail-kiss`];function Ir(e){return Fr.includes(e)}function Lr(e,t){if(!e||typeof e!=`object`)return;let n={};for(let r of t){let t=e[r];typeof t==`boolean`&&(n[r]=t)}return Object.keys(n).length>0?n:void 0}var Rr=e=>Lr(e,Fr),zr=e=>Lr(e,wr);function Br(e){if(!e||typeof e!=`object`)return{};let{ask:t,expanded:n,rail:r,issueGroups:i}=e,a=Rr(r),o=zr(i);return{...t===`open`||t===`closed`?{ask:t}:{},...n===`buddy`||n===`document`?{expanded:n}:{},...a?{rail:a}:{},...o?{issueGroups:o}:{}}}function Vr(e){return e?e===`buddy`?`buddy`:`document`:null}function Hr(e,t,n,r){if(!e||r&&e===`buddy`)return null;let i=e===`buddy`?`buddy`:t.kind===`section`?`guide`:t.view;return he.includes(i)&&n(i)?i:null}function Ur(e){if(!e)return{};try{return Br(JSON.parse(e))}catch{return{}}}function Wr(e,t,n){let r={...e,...e.rail?{rail:{...e.rail}}:{},...e.issueGroups?{issueGroups:{...e.issueGroups}}:{}};return{ask(e){if(!n())return;let i=e?`open`:`closed`;r.ask!==i&&(r.ask=i,t({ask:i}))},focus(e){if(!n())return;let i=Vr(e);(r.expanded??null)!==i&&(i?r.expanded=i:delete r.expanded,t({expanded:i}))},fold(e,i){!n()||!Ir(e)||(r.rail?.[e]??!0)!==i&&(r.rail={...r.rail,[e]:i},t({rail:{[e]:i}}))},issueFold(e,i){n()&&(r.issueGroups?.[e]??e!==`closed`)!==i&&(r.issueGroups={...r.issueGroups,[e]:i},t({issueGroups:{[e]:i}}))}}}function Gr(e,t,n,r){let i=n===`finding`?{maxChars:1/0}:{},a=Cr(e);if(a===null)return Bn(t,e,i);let o=r(a);if(!o)return null;let s=zn(t,i);return s?`${s}\n\n${o}`:null}function Kr(e,t,n){if(n.busy?.())return null;let r=Gr(e,t.text,t.context,n.savedPrompt);if(!r)return null;let i=In(e)||Cr(e)!==null;return t.context===`selection`||i?(n.stage(r),`staged`):(n.send(r),`sent`)}function qr(e){return e.reviewerClosed>0?`dealt with`:`resolved`}var Jr=`Run review again`;function Yr(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 Xr(e){let t=e.dataset.questionAnswered;t&&Yr(e.ownerDocument,t,e.dataset.answered===`true`||e.dataset.settled===`true`)}var Zr=`pr-helper-author-context-preview`,Qr=`View full PR description`,$r=`Show less`;function ei(e){let t=e.ownerDocument,n=t.getElementById(e.getAttribute(`aria-controls`)??``),r=t.getElementById(Zr);if(!n)return;let i=n.closest(`#${ii}`),a=i?[...i.querySelectorAll(`[data-author-context-toggle]`)]:[e],o=e.getAttribute(`aria-expanded`)!==`true`,s=ti(n);if(!o){let e=-ni(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?$r:Qr,e.hasAttribute(`data-author-context-head`)&&(e.hidden=!o);if(o){let e=Number(n.dataset.readingOffset??0);e>0&&ri(n,s,ni(n,s)+e);return}i&&ni(i,s)<0&&i.scrollIntoView({block:`start`}),e.hidden&&a.find(e=>!e.hidden)?.focus({preventScroll:!0})}function ti(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 ni(e,t){return e.getBoundingClientRect().top-(t?t.getBoundingClientRect().top:0)}function ri(e,t,n){(t??e.ownerDocument.defaultView)?.scrollBy(0,n)}var ii=`pr-helper-author-context`;function ai(e){let t=e.ownerDocument.getElementById(ii);if(!t)return;let n=t.querySelector(`[data-author-context-toggle]`);n?.getAttribute(`aria-expanded`)===`false`&&ei(n),t.scrollIntoView?.({block:`start`,behavior:`smooth`}),t.querySelector(`h4`)?.focus({preventScroll:!0})}({claude:`Claude Code`,codex:`Codex`,gemini:`Gemini CLI`}).claude;var oi=`"summary": WHAT the change does, for a reviewer about to read it. Roughly 80-120 words, and fewer for a small change. Name the parts that change and what each now does. Do not explain why the change exists, and do not judge whether it is correct or safe: other fields carry both.`,si=`"consequence": { "title": string, "scenario": string, "group": "failure" | "risk" | "intent" | "maintenance", "next"?: { "kind": "verify" | "decide" | "fix", "text": string } }`,ci=`${si.replace(`"consequence": `,`"consequence"?: `)} | null`,li=`"consequence" on an issue: the same issue told as what it means, for someone who knows the product but may not know its implementation. It is shown first; "title" and "description" stay the technical account behind it. Reframe around the consequence, do not just simplify the technical wording.
|
|
52
52
|
- "title": the observable consequence or the meaningful development constraint, as a short sentence (e.g. "Creating a meal can fail halfway, leaving it outside the planner").
|
|
53
53
|
- "scenario": one or two sentences: the triggering condition and what happens (e.g. "If adding it to the day fails after saving, the user sees an error but the meal still exists. Retrying may then be blocked by its name.").
|
|
54
54
|
- "next": the one specific step this issue calls for, when there is one. "kind" is "verify" for a test or evidence-gathering step that would settle whether it happens (e.g. "Try a receipt with an unreadable amount."), "decide" for an acceptance, requirement or intent call only the reviewer can make (e.g. "Confirm this broader change is intended."), and "fix" for a concrete corrective action the finding itself supports (e.g. "Update the recovery runbook to name the new restore command."). A fix is not a verification: do not label a remedy "verify". Omit "next" rather than write a generic step or invent a remedy the evidence does not support.
|
|
@@ -61,41 +61,41 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
61
61
|
- "confidence" is reported separately and does not decide the group. A well-evidenced failure stays a failure at medium confidence; a high severity does not make an unverified risk a failure; a low confidence does not by itself turn a failure into a risk.
|
|
62
62
|
- Keep every condition and qualification that affects the decision. Avoid code identifiers unless the consequence cannot be understood without one. Do not state severity.
|
|
63
63
|
- Never claim user harm, a measured performance effect, a reproduction or a certainty the evidence does not give. A performance concern nobody measured says so (e.g. "Opening a meal may do unnecessary work for nested meals... The effect has not been measured."). A maintenance or intent issue is described as one, not as a user-facing failure.
|
|
64
|
-
- An issue names a concrete consequence. A request for missing requirements with no concrete consequence is a question for the author, not an issue, and is never raised as both.`,
|
|
64
|
+
- An issue names a concrete consequence. A request for missing requirements with no concrete consequence is a question for the author, not an issue, and is never raised as both.`,ui=`"orientation": one sentence, at most about 25 words, naming the behaviour or product area this change touches, for a reviewer about to decide on its issues (e.g. "This change affects receipt extraction and how duplicate receipt details are combined."). Say what it touches, not whether it is safe, and do not summarise the issues.`,di=`"framing": { "question": string, "why": string, "needed"?: string }`,fi=`${di.replace(`"framing": `,`"framing"?: `)} | null`;`${si}${di}${oi}${li}${ui}`;function pi(e){return e?`View current PR description on GitHub ↗`:`View PR description on GitHub ↗`}function mi(e){let t=e.done-e.reviewerClosed;if(e.reviewerClosed===0){let t=e.byConversation??0;return t===0?`Resolved by the new commits (${e.done})`:t===e.done?`Resolved by the conversation (${e.done})`:`Resolved (${e.done})`}let n=e.byVerdict??0;return t===0&&n===0?`Dismissed by you (${e.done})`:t===0&&n===e.done?`Accepted as resolved (${e.done})`:`Dealt with (${e.done})`}function hi(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 gi(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 _i(e){return e instanceof Element&&e.closest(`[data-guide-jump]`)?.dataset.guideJump||null}function vi(e){for(let t of document.querySelectorAll(`[data-goto-section]`))t.setAttribute(`aria-current`,String(t.dataset.gotoSection===e))}function yi(){for(let e of document.querySelectorAll(`.prb-rail [data-goto-section]`))e.setAttribute(`aria-current`,`false`)}function bi(e,t){let n=e.trim();return n?`${n}\n\n${t}`:t}var xi=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 k(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=k(t.top);return{cited:k(t.cited),centre:k(t.centre),expand:k(t.expand,xi),position:k(t.position),tall:t.tall===!0,top:n>0?n:null,offset:Number.isFinite(Number(t.offset))?Math.round(Number(t.offset)):0}}function wi(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 Ti(e){let t=e.querySelector(`[data-change-navigator]`),n=e.querySelector(`.prb-code-scroll`),r=n&&n.scrollTop>0?wi(n):{top:null,offset:0};return{cited:k(e.dataset.cited),centre:k(e.dataset.centre),expand:k(e.dataset.expand,xi),position:k(t?.dataset.changePosition??e.dataset.position),tall:e.hasAttribute(`data-expanded`),...r}}function Ei(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 Oi(){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 ki(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 Ai(e){return[...e.querySelectorAll(`[data-file][aria-expanded="true"]`)].map(e=>{let t=Si(e);return{host:ki(e),file:e.getAttribute(`data-file`)??``,line:e.getAttribute(`data-line`)??``,...t?{state:Ti(t)}:{}}})}function ji(e,t){return e.host===t.host&&e.file===t.file&&e.line===t.line}function Mi(e,t){for(let n of e.querySelectorAll(`[data-file]`))if(n.getAttribute(`data-file`)===t.file&&(n.getAttribute(`data-line`)??``)===t.line&&ki(n)===t.host)return n;return null}function Ni(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 Pi(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:Ai(t),...g(t)}}async function Fi(e,t,r){if(!t)return!1;let{doc:i,main:a,rail:o,log:s}=e,l=t.folds&&typeof t.folds==`object`?t.folds:{};for(let e of i.querySelectorAll(`[data-rail-toggle][aria-controls]`)){let t=l[e.getAttribute(`aria-controls`)];typeof t==`boolean`&&r.setFold(e,t)}if(t.ask===`open`||t.ask===`closed`?r.setAsk(t.ask===`open`):t.ask===null&&r.clearAsk(),Array.isArray(t.panels)){let e=t.panels.filter(Ni).map(e=>({...e,state:Ci(e.state)}));for(let t of Ai(i))if(!e.some(e=>ji(e,t))){let e=Mi(i,t);e&&r.closePanel(e)}let n=[];for(let t of e){let e=Mi(i,t);e&&n.push(r.openPanel(e,t.state).catch(()=>{}))}await Promise.all(n)}if(!r.stillCurrent())return!1;let u=c(t,`main`);a&&u!==null&&(a.scrollTop=u);let d=c(t,`rail`);o&&d!==null&&(o.scrollTop=d);let f=c(t,`log`);return s&&f!==null&&(s.scrollTop=f),n(i,t.focus,t.focusVisible),!0}var Ii=`prb-ask-draft:`,Li=`prb-ask-staged:`,Ri=300;function zi(e){return`${Ii}${e}`}function Bi(e){return`${Li}${e}`}function Vi(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 Hi(e,t){let{storage:n,win:r}=t,i=zi(t.path),a=Bi(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=Vi(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(),Ri)},clear(){o!==null&&r.clearTimeout(o),o=null,s(``)}};return e.addEventListener(`input`,()=>l.saveSoon()),r.addEventListener(`pagehide`,()=>l.save()),l}`${fi}`,`${ci}${si}`;function Ui(){return`<button type="button" class="prb-update-btn" data-review-update>Update review</button>`}var Wi=`Updating this review checks the latest commits and refreshes the PR conversation. Your progress and Buddy AI history will be kept.`;function Gi(e){return`<details class="prb-update-alt">
|
|
65
65
|
<summary>Start a new review</summary>
|
|
66
66
|
<span>A brand new review, with its own findings and its own path through the change. Run <code>${T(e)}</code> in your session.<button type="button" class="prb-fresh-quiet" data-copy-command="${T(e)}">Copy</button></span>
|
|
67
|
-
</details>`}var
|
|
67
|
+
</details>`}var Ki=`prreviewbuddy review --fresh`;function qi(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 Ji(e,t){if(!t.actions)return!1;let n=e??(t.remote?na(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 Yi(e,t={}){let n=e??(t.remote?na(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?ra(n.code,r):ta(n.code,t.availability??null),u=e?[...l.facts,`checked ${T(Ce(n.checkedAt))}`]:l.facts;return`<div class="prb-fresh" data-state="${i||a?`changed`:`quiet`}" role="status">
|
|
68
68
|
<div class="prb-fresh-head">
|
|
69
69
|
<span class="prb-fresh-dot" data-freshness="${l.state}" aria-hidden="true"></span>
|
|
70
70
|
<strong class="prb-fresh-title">${T(l.title)}</strong>
|
|
71
71
|
<span class="prb-fresh-facts">${u.join(` · `)}</span>
|
|
72
72
|
</div>
|
|
73
73
|
${l.consequence?`<p class="prb-fresh-say">${l.consequence}</p>`:``}
|
|
74
|
-
${
|
|
75
|
-
</div>`}function
|
|
76
|
-
${r?
|
|
77
|
-
${r?
|
|
74
|
+
${Xi(n,t,i||a,Ji(e,t))}
|
|
75
|
+
</div>`}function Xi(e,t,n,r){let i=n?``:`<button type="button" class="prb-fresh-close" data-fresh-close aria-label="Close">×</button>`;return`<div class="prb-fresh-actions">
|
|
76
|
+
${r?Ui():``}
|
|
77
|
+
${r?Gi(Ki):``}
|
|
78
78
|
${i}
|
|
79
|
-
${
|
|
80
|
-
</div>`}function
|
|
79
|
+
${Zi(e,t,n,r===!0)}
|
|
80
|
+
</div>`}function Zi(e,t,n,r){let i=[r?T(Wi):``,t.remote?ia(e.code):aa(e.code,e.checkout.reason!==`no-pull-request`),oa(e,t.actions===!0),n?`<button type="button" class="prb-fresh-quiet" data-fresh-dismiss="${T(t.remote?.sha??e.code.latestSha??``)}">Dismiss this warning</button>`:``].filter(e=>e!==``);if(i.length===0)return``;let a=`<div class="prb-fresh-notes">${i.map(e=>`<p>${e}</p>`).join(``)}</div>`;return n?`<details class="prb-fresh-more">
|
|
81
81
|
<summary>More details</summary>
|
|
82
82
|
${a}
|
|
83
|
-
</details>`:a}function
|
|
83
|
+
</details>`:a}function Qi(e,t){return e===null?[]:[`${e} file${e===1?``:`s`} ${t}`]}function $i(e){return e?`<code title="${T(e)}">${T(e.slice(0,7))}</code>`:``}function ea(e){return e?[`reviewed ${$i(e)}`]:[]}function ta(e,t){if(e.state===`fixed`)return{state:`fixed`,title:`Freshness: Fixed`,facts:ea(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:ea(e.reviewedSha),consequence:``};if(e.state===`changed`){if(e.rewritten)return{state:`changed`,title:`Code rewritten`,facts:[...ea(e.reviewedSha),...Qi(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:[...ea(e.reviewedSha),...t,...Qi(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:ea(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:ea(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:ea(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 na(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 ra(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:[...ea(e.reviewedSha),...i,...n?Qi(n.changedFiles,n.rewritten?`differ`:`changed`):[],`seen ${T(Ce(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 ia(e){return`This review is based on ${$i(e.reviewedSha)}. The pull request has newer commits. <strong>Update review</strong> fetches them first.`}function aa(e,t){if(!e.comparison)return``;let n=`<code>${T(e.comparison.ref)}</code>`;return e.state===`current`?t?`This review is based on the latest PR commit ${$i(e.reviewedSha)}.`:`This review is based on ${$i(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 oa(e,t){if(!e.conversation.attached)return``;let n=T(Ce(e.conversation.importedAt));return t?`<button type="button" class="prb-fresh-quiet" data-pr-recheck>Re-check the conversation</button> to fetch new comments and reassess issues and questions against them, at the reviewed commit. Last checked ${n}.`:`The PR conversation was last checked ${n}.`}function sa(e,t){let n=pi(t===`changed`);for(let t of e.querySelectorAll(`[data-github-description]`))t.textContent!==n&&(t.textContent=n)}function ca(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${ua(e.draftComment.trim())}`:``].filter(e=>e!==``).join(`
|
|
84
84
|
|
|
85
|
-
`)}function
|
|
85
|
+
`)}function la(e){return e.length===0?``:[`## Simplification suggestions (${e.length})`,...e.map(ca)].join(`
|
|
86
86
|
|
|
87
|
-
`)}function
|
|
87
|
+
`)}function ua(e){return e.split(`
|
|
88
88
|
`).map(e=>e===``?`>`:`> ${e}`).join(`
|
|
89
|
-
`)}function
|
|
89
|
+
`)}function da(e,t=``){return`<div class="prb-doc-head">
|
|
90
90
|
<h3 class="prb-doc-title">${T(e)}</h3>
|
|
91
91
|
${t}
|
|
92
|
-
</div>`}var
|
|
92
|
+
</div>`}var fa=`<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/>`,pa=`<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7"/>`;function ma(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 ha(e,t){let n=`Expand ${t}`;return`<button type="button" class="prb-focus-toggle" data-focus-toggle="${e}" data-focus-name="${T(t)}" aria-pressed="false" aria-label="${T(n)}" title="${T(n)}">${ma(fa,`prb-focus-expand`)}${ma(pa,`prb-focus-collapse`)}</button>`}ha(`kiss`,`KISS review`),da(`Recommendations`,ha(`kissrecs`,`Recommendations`));var ga={author:{accepted:`Plan to simplify`,declined:`Keep as implemented`},reviewer:{accepted:`Raise with author`,declined:`Leave it`}};function _a(e,t){return t===`undecided`?`Open`:ga[e][t]}function va(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 ya(e){return`Decided (${e})`}function ba(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 xa(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">
|
|
93
93
|
<p><strong>This KISS review describes commit ${T(e.slice(0,7))}.</strong> The branch has moved on since. ${r}</p>
|
|
94
94
|
</div>`;let i=t.rewritten?`The branch has been rewritten since, so this report describes commits that are no longer on it.`:t.newCommits===null?`The branch has moved on since.`:`There ${t.newCommits===1?`has been 1 commit`:`have been ${t.newCommits} commits`} on the branch since.`;return`<div class="prb-kiss-fresh" data-kiss-freshness="changed" role="status">
|
|
95
95
|
<p><strong>This KISS review describes commit ${T(e.slice(0,7))}.</strong> ${T(i)}</p>
|
|
96
96
|
<p class="prb-kiss-fresh-note">Running KISS again analyses the branch as it is now. The report below and your decisions about it are kept either way.</p>
|
|
97
97
|
<p class="prb-kiss-fresh-actions">${r}${n.actions&&t.latestSha?`<button type="button" class="prb-kiss-fresh-dismiss" data-kiss-freshness-dismiss="${T(t.latestSha)}">Not now</button>`:``}</p>
|
|
98
|
-
</div>`}var
|
|
98
|
+
</div>`}var Sa=new WeakMap;function Ca(e){let t=e.dataset.kissDecide;return e.getAttribute(`aria-pressed`)===`true`?`undecided`:t}function wa(e,t,n){let r=e.dataset.decision??`undecided`,i=async()=>{Pa(e);let i=e.contains(document.activeElement);Ta(e,t),Ma(e,!0),Da(n),i&&Na(e);let a=await n.send({runId:e.dataset.kissRunId??``,recommendationId:e.dataset.kissRec??``,decision:t}).catch(()=>!1);if(Ma(e,!1),a){Da(n);return}Ta(e,r),Da(n),Fa(e,t,n)},a=(Sa.get(e)??Promise.resolve()).then(i,i);return Sa.set(e,a),a}function Ta(e,t){e.dataset.decision=t;let n=ja(e),r=e.querySelector(`[data-kiss-status]`);r&&(r.dataset.kissStatus=t,r.textContent=_a(n,t));for(let r of e.querySelectorAll(`[data-kiss-decide]`))r.setAttribute(`aria-pressed`,String(r.dataset.kissDecide===t)),r.textContent=ga[n][r.dataset.kissDecide];Ea(e,t!==`undecided`)}function Ea(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 Da(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=va(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=ya(r))}e.paintRail(n.length,i),Oa(t)}function Oa(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=Aa(t).filter(e=>n.has(e.id)),i=e.querySelector(`[data-kiss-rec][aria-busy]`)!==null,a=ba(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?la(r):``));let s=t.querySelector(`[data-kiss-handoff-note]`);s&&(s.textContent=a.note)}function ka(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),Oa(t))}function Aa(e){try{let t=JSON.parse(e.querySelector(`script[data-kiss-handoff-source]`)?.textContent??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function ja(e){return e.dataset.audience===`author`?`author`:`reviewer`}function Ma(e,t){e.toggleAttribute(`aria-busy`,t);for(let n of e.querySelectorAll(`[data-kiss-decide]`))n.disabled=t}function Na(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 Pa(e){e.querySelector(`[data-kiss-decision-error]`)?.remove()}function Fa(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 wa(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 Ia(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 La(e,t){t.complete!==void 0&&Ba(e,t.complete),t.activity!==void 0&&Ra(e,t.activity??void 0),t.lifecycle===void 0?t.activity!==void 0&&Va(e,za(e)):Va(e,t.lifecycle??void 0),t.queued!==void 0&&Ha(e,t.queued)}function Ra(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 za(e){let t=e.querySelector(`[data-review-menu]`);return b(t?{state:t.dataset.lifecycleState,at:Number(t.dataset.lifecycleAt)}:void 0)}function Ba(e,n){let r=n?`complete`:`in-progress`,i=e.querySelector(`[data-page-status]`);i&&me(i,r);let a=e.querySelector(`[data-review-menu] [data-mark-status]`);if(a){let e=n?`in-progress`:`complete`;a.dataset.markStatus=e,a.textContent=t(e)}}function Va(e,t){let n=e.querySelector(`[data-review-menu]`);n&&(t?(n.dataset.lifecycleState=t.state,n.dataset.lifecycleAt=String(t.at)):(delete n.dataset.lifecycleState,delete n.dataset.lifecycleAt));let r=n?Ua(n):void 0,i=e.querySelector(`[data-page-lifecycle]`);i&&ue(i,t,r);let o=e.querySelector(`[data-page-lifecycle-chip]`);if(o){let e=v(t,r);o.hidden=e===void 0,o.textContent=e??``}for(let n of e.querySelectorAll(`[data-review-menu] [data-lifecycle-set]`)){let e=n.dataset.lifecycleSet;n.hidden=!a(e,t,r),n.textContent=u(e,t,r)}}function Ha(e,t){e.querySelector(`[data-review-menu]`)?.toggleAttribute(`data-queued`,t);let n=e.querySelector(`[data-review-menu] [data-queue-action]`);n&&(n.dataset.queueAction=t?`remove`:`add`,n.textContent=_(t))}function Ua(e){return m(e.dataset)}function Wa(e){return b(e)??null}function Ga(e){if(typeof e!=`object`||!e)return null;let{complete:t,lifecycle:n,queued:r,activity:i}=e,a={lifecycle:Wa(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 Ka(){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 qa=`The workspace server did not answer. It may have stopped.`;function Ja(e){let t=()=>e.root.querySelector(`[data-review-menu]`),n=!1,r=async(t,r,i)=>{if(n)return{error:null,busy:!0};n=!0;let a=e.gate.begin();try{let n=await e.post(t,r),a=await n.json().catch(()=>null);return n.ok&&a?(La(e.root,i(a)),{error:null}):{error:typeof a?.error==`string`?a.error:`That could not be changed.`}}catch{return{error:qa}}finally{n=!1,a()}},i=e=>r(`/queue`,{action:e},e=>({lifecycle:Wa(e.lifecycle),queued:e.queued===!0}));return{setComplete:e=>r(`/state`,{complete:e},e=>({complete:typeof e.completedAt==`number`,queued:e.queued===!0})),setLifecycle:e=>r(`/lifecycle`,{state:e},e=>({lifecycle:Wa(e.lifecycle),queued:e.queued===!0})),setQueued:i,toggleQueued:()=>i(t()?.hasAttribute(`data-queued`)?`remove`:`add`),checkForUpdates:async()=>{await e.checkForUpdates()},deleteReview:async()=>{try{let t=await e.post(`/delete`);return t.ok?{error:null}:{error:(await t.json().catch(()=>null))?.error??`That could not be deleted.`}}catch{return{error:qa}}},offer:()=>{let r=t(),i=r?.hasAttribute(`data-can-write`)===!0,o=i&&r?.hasAttribute(`data-branch-actions`)===!0,s=r?b({state:r.dataset.lifecycleState,at:Number(r.dataset.lifecycleAt)}):void 0,c=r?m(r.dataset):void 0,l=e.root.querySelector(`[data-page-status]`)?.dataset.status===`complete`,u=!n;return{reviewed:u&&i&&!l,waiting:u&&o&&a(`waiting`,s,c),done:u&&o&&a(`done`,s,c),queue:u&&o,checkForUpdates:i&&r?.hasAttribute(`data-checkable`)===!0,delete:i}},busy:()=>n}}function Ya(e,t){return`${e} ${t}${e===1?``:`s`}`}function Xa(e,t){let n=e+t;return{total:n===0?`Nothing chosen`:`${n} chosen`,issues:e?Ya(e,`issue`):``,questions:t?Ya(t,`question`):``}}function Za(e,t){let n=Xa(e,t);return[n.total,n.issues,n.questions].filter(Boolean).join(` · `)}function Qa(e){return e===0?``:`${e} chosen`}function $a(e){let t=(e,t)=>{let n=t.map(e=>typeof e==`string`?{text:e.trim()}:{text:e.text.trim(),ref:e.ref}).filter(e=>e.text);return n.length===0?null:n.every(e=>e.ref)?`## ${e}\n\n${n.map(e=>`**${e.ref}.** ${e.text}`).join(`
|
|
99
99
|
|
|
100
100
|
`)}`:`## ${e}\n\n${n.map(({text:e},t)=>{let n=`${t+1}. `;return n+e.replace(/\n/g,`\n${` `.repeat(n.length)}`).replace(/\n +\n/g,`
|
|
101
101
|
|
|
@@ -103,7 +103,7 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
103
103
|
|
|
104
104
|
`)}`},n=[t(`Issues`,e.issues),t(`Questions`,e.questions)].filter(Boolean),r=e.reviewTag&&n.length&&[...e.issues,...e.questions].some(e=>typeof e!=`string`&&e.ref)?[`_References from review ${e.reviewTag}. Please keep them, and this line, in your reply._`]:[];return[...n,...r].join(`
|
|
105
105
|
|
|
106
|
-
`)}var Qa=e=>`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`;Qa(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),Qa(`<path d="M20 6 9 17l-5-5"/>`);function $a(e){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return Za({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}function eo(){let e=!1,t={issue:new Set,question:new Set},n=null,r=()=>{t.issue.clear(),t.question.clear()};return{selecting:()=>e,enter(){e=!0},exit(){e=!1,r()},clear:r,toggle(e,r,i){return!r||t[e].has(r)===i?!1:(i?t[e].add(r):t[e].delete(r),n=null,!0)},has:(e,n)=>t[e].has(n),ids:e=>t[e],total:()=>t.issue.size+t.question.size,reconcile(e){let r=!1;for(let n of[`issue`,`question`])for(let i of[...t[n]])e(n,i)||(t[n].delete(i),r=!0);return r&&(n=null),r},draft(e){if(n?.edited)return n.text;let t=e(),r=to(t);return n?.basis!==r&&(n={text:$a(t),edited:!1,basis:r}),n.text},edit(e){n!==null&&(n={...n,text:e,edited:!0})},edited:()=>n?.edited??!1,snapshot:()=>({selecting:e,issues:[...t.issue],questions:[...t.question],draft:n?{...n}:null}),restore(i){if(!ro(i))return!1;e=i.selecting,r();for(let e of i.issues)e&&t.issue.add(e);for(let e of i.questions)e&&t.question.add(e);return n=i.draft?{...i.draft}:null,!0}}}function to(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify([e.reviewTag??``,...t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1)])}var no=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function ro(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!no(t.issues)||!no(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var A=[`preview`,`markdown`],io={issue:`issues`,question:`questions`};function ao({root:e,showView:t}){let n=eo(),r=e=>e.closest(`[data-finding-card]`)?.getAttribute(`data-finding-card`)??``,i=e=>e.dataset.feedbackPick===`issue`||e.dataset.feedbackPick===`question`?e.dataset.feedbackPick:null;function a(){let t=n.selecting(),a=n.ids(`issue`).size,o=n.ids(`question`).size;e.querySelector(`.prb-body`)?.toggleAttribute(`data-feedback-selecting`,t);for(let n of e.querySelectorAll(`[data-feedback-select]`))n.setAttribute(`aria-pressed`,String(t));for(let t of e.querySelectorAll(`[data-feedback-pick]`)){let e=i(t);t.checked=e!==null&&n.has(e,r(t))}let s=e.querySelector(`[data-feedback-tray]`);if(s){s.hidden=!t;let e=Ja(a,o),n=s.querySelector(`[data-feedback-total]`);n&&(n.textContent=e.total);for(let t of[`issues`,`questions`]){let n=s.querySelector(`[data-feedback-goto="${t}"]`);if(!n)continue;let r=n.querySelector(`[data-feedback-goto-label]`);r&&(r.textContent=e[t]),n.hidden=e[t]===``}let r=s.querySelector(`[data-feedback-prepare]`);r&&(r.disabled=a+o===0)}for(let[n,r]of[[`issues`,a],[`questions`,o]]){let i=e.querySelector(`[data-rail-selected="${n}"]`);i&&(i.textContent=Xa(r),i.hidden=!t||r===0)}}function o(t){let n=e.querySelector(`[data-feedback-text]`);n&&(n.value=t),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:oo(e,`issue`,n.ids(`issue`)),questions:oo(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return $a(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Ya(n.ids(`issue`).size,n.ids(`question`).size));let r=e.querySelector(`[data-feedback-dialog]`);r&&!r.open&&r.showModal(),c.showDraftTab(`preview`),e.querySelector(`[data-draft-tab="preview"]`)?.focus()},showDraftTab(t){so(e,t)},state(){return{selecting:n.selecting(),issues:[...n.ids(`issue`)],questions:[...n.ids(`question`)]}}};return e.addEventListener(`change`,e=>{let t=e.target.closest(`[data-feedback-pick]`),n=t?i(t):null;t&&n&&c.toggle(n,r(t),t.checked)}),e.addEventListener(`input`,t=>{let r=t.target.closest(`[data-feedback-text]`);r&&(n.edit(r.value),e.querySelector(`[data-feedback-copy]`)?.setAttribute(Ot,r.value))}),e.addEventListener(`click`,r=>{let i=r.target;if(i.closest(`[data-feedback-select]`))return n.selecting()?c.exit():c.enter();if(i.closest(`[data-feedback-clear]`))return c.clear();if(i.closest(`[data-feedback-done]`))return c.exit();if(i.closest(`[data-feedback-prepare]`))return c.prepare();if(i.closest(`[data-feedback-close]`))return e.querySelector(`[data-feedback-dialog]`)?.close();let a=i.closest(`[data-draft-tab]`)?.dataset.draftTab;if(a===`preview`||a===`markdown`)return c.showDraftTab(a);let o=i.closest(`[data-feedback-goto]`)?.dataset.feedbackGoto;if(o===`issues`||o===`questions`)return t(o);let s=i.closest(`[data-finding-card]`);!s||i.closest(`a, button, input, select, textarea, label, summary, [data-menu], [role="button"], [contenteditable], [data-file], .prb-code`)||(e.getSelection()?.isCollapsed??!0)&&c.flip(s)}),e.addEventListener(`keydown`,t=>lo(e,t)),a(),c}function oo(e,t,n){return[...e.querySelectorAll(`[data-view="${io[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>{let n=t.querySelector(`[${kt}]`),r=n?.getAttribute(At);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function so(e,t){for(let n of A){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return co(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function co(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?it(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function lo(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=A.indexOf(n),i=t.key===`ArrowRight`?A[(r+1)%A.length]:t.key===`ArrowLeft`?A[(r+A.length-1)%A.length]:t.key===`Home`?A[0]:t.key===`End`?A[A.length-1]:null;i&&(t.preventDefault(),so(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function uo(e){let t=e.querySelector(`[data-feedback-text]`);if(t&&e.activeElement===t&&t.selectionStart!==t.selectionEnd)return!0;let n=e.getSelection();return!!(n&&!n.isCollapsed&&n.toString()!==``)}function fo(e,t){let n=()=>t.querySelector(`[data-feedback-dialog] [data-feedback-copy]`);return{"review.feedback.prepare":{available:()=>{let{issues:t,questions:n}=e.state();return t.length+n.length>0},run:()=>e.prepare()},"review.feedback.copyDraft":{available:()=>n()!==null&&!uo(t),run:()=>n()?.click()}}}function po(e){let t=e.querySelector(`.prb-view:is([data-view="issues"], [data-view="questions"]):not([hidden])`);return t?[...t.querySelectorAll(`[data-finding-card]`)].filter(e=>e.checkVisibility()&&!e.parentElement?.closest(`details:not([open])`)):[]}function mo(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function ho(e){let{doc:t}=e,n=Se({doc:t,item:`[data-finding-card]`,walk:()=>po(t),background:e.pane}),r=()=>n.holdsKeys()?n.current():null,i=e=>e?.querySelector(`[data-ask-buddy-menu]`)??null,a=e=>e?.querySelector(`[data-copy-source]`)??null,o=e=>e?.querySelector(`[data-feedback-pick]`)!=null;return{cursor:n,commands:{"review.findings.next":{available:()=>po(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>po(t).length>0,run:()=>n.move(-1)},"review.findings.askBuddy":{available:()=>i(r())!==null,run:()=>{let t=i(r());t&&e.openMenu(t,()=>n.refocus())}},"review.findings.copy":{available:()=>!mo(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}function go(e){return e.querySelector(`[data-review-home]`)?.dataset.viewNav??null}pa(`progress`,`Review progress`);function _o(e,t=Date.now()){return`Running for ${vo(t-e)}`}function vo(e){let t=Math.max(0,Math.round(e/1e3)),n=e=>String(e).padStart(2,`0`);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${n(t%60)}s`:`${Math.floor(t/3600)}h ${n(Math.floor(t/60)%60)}m ${n(t%60)}s`}var yo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function bo(e){let t=new Map;for(let n of Object.keys(yo)){let r=yo[n],i=e.querySelector(`[${r}]`);i&&!sa(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function xo(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||sa(t.phase):So(t.phase,n)}function So(e,t){return sa(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function Co(e,t,n){let r=[...e.querySelectorAll(`.prb-progress-step`)],i=r.findIndex(e=>e.dataset.phase===t);if(i===-1)return;r.forEach((e,t)=>{let n=t<i?`complete`:t===i?`active`:`pending`;e.dataset.state=n;let r=e.querySelector(`.prb-progress-label`),a=n===`complete`?e.dataset.labelDone:e.dataset.labelDoing;r&&a&&(r.textContent=a),t!==i&&e.querySelector(`[data-step-note]`)?.remove()});let a=r[i];if(!n||ca(n,a.querySelector(`.prb-progress-label`)?.textContent??``))return;let o=a.querySelector(`[data-step-note]`);o||(o=document.createElement(`p`),o.className=`prb-progress-note`,o.setAttribute(`data-step-note`,``),a.appendChild(o)),o.textContent=n}function wo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=_o(e))}}function To(e,t=1e3){let n=window.setInterval(()=>wo(e),t);return()=>window.clearInterval(n)}async function Eo({look:e,reload:t,giveUpMs:n=2e4,pauseMs:r=400}){let i=!1,a=()=>{i||(i=!0,t())};for(setTimeout(a,n);!i;){try{let t=await e();if(!t||t===`none`||sa(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function Do(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${T(e.scope)}" data-diagram-card="${T(e.scope)}">
|
|
106
|
+
`)}var eo=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>`;eo(`<path d="m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8"/>`),eo(`<path d="M20 6 9 17l-5-5"/>`);function to(e){let t=e=>e.ref?{text:e.text,ref:e.ref}:e.text;return $a({issues:e.issues.map(t),questions:e.questions.map(t),...e.reviewTag?{reviewTag:e.reviewTag}:{}})}function no(){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=ro(t);return n?.basis!==r&&(n={text:to(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(!ao(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 ro(e){let t=[...e.issues.map(e=>[`issue`,e.id,e.text]),...e.questions.map(e=>[`question`,e.id,e.text])];return JSON.stringify([e.reviewTag??``,...t.sort((e,t)=>e[0]+`\0`+e[1]<t[0]+`\0`+t[1]?-1:1)])}var io=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function ao(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.selecting!=`boolean`||!io(t.issues)||!io(t.questions))return!1;if(t.draft===null)return!0;if(!t.draft||typeof t.draft!=`object`)return!1;let n=t.draft;return typeof n.text==`string`&&typeof n.edited==`boolean`&&typeof n.basis==`string`}var A=[`preview`,`markdown`],oo={issue:`issues`,question:`questions`};function so({root:e,showView:t}){let n=no(),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=Xa(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=Qa(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(At,t)}let s=()=>{let t=e.querySelector(`[data-review-tag]`)?.dataset.reviewTag;return{issues:co(e,`issue`,n.ids(`issue`)),questions:co(e,`question`,n.ids(`question`)),...t?{reviewTag:t}:{}}},c={enter(){n.enter(),a()},exit(){n.exit(),a()},clear(){n.clear(),a()},toggle(e,t,r){n.toggle(e,t,r)&&a()},flip(e){let t=e.querySelector(`[data-feedback-pick]`),r=t?i(t):null,a=e.getAttribute(`data-finding-card`)??``;return!n.selecting()||!r||!a?!1:(c.toggle(r,a,!n.has(r,a)),!0)},compose(){return to(s())},prepare(){if(n.total()===0)return;o(n.draft(s));let t=e.querySelector(`[data-feedback-dialog-count]`);t&&(t.textContent=Za(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){lo(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(At,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=>fo(e,t)),a(),c}function co(e,t,n){return[...e.querySelectorAll(`[data-view="${oo[t]}"] [data-finding-card]`)].map(e=>({id:e.getAttribute(`data-finding-card`)??``,card:e})).filter(({id:e})=>n.has(e)).map(({id:e,card:t})=>{let n=t.querySelector(`[${jt}]`),r=n?.getAttribute(Mt);return{id:e,text:n?.getAttribute(`data-feedback-source`)??``,...r?{ref:r}:{}}})}function lo(e,t){for(let n of A){let r=e.querySelector(`[data-draft-tab="${n}"]`);r?.setAttribute(`aria-selected`,String(n===t)),r?.setAttribute(`tabindex`,n===t?`0`:`-1`);let i=e.querySelector(`#prb-draft-${n}`);i&&(i.hidden=n!==t)}if(t===`preview`)return uo(e);let n=e.querySelector(`[data-feedback-text]`);n?.setSelectionRange(0,0),n&&(n.scrollTop=0)}function uo(e){let t=e.querySelector(`[data-feedback-preview]`),n=e.querySelector(`[data-feedback-text]`)?.value??``;t&&(t.innerHTML=n.trim()?ot(n):`<p class="prb-draft-empty">The draft is empty.</p>`,t.scrollTop=0)}function fo(e,t){let n=t.target.closest(`[data-draft-tab]`)?.dataset.draftTab;if(!n)return;let r=A.indexOf(n),i=t.key===`ArrowRight`?A[(r+1)%A.length]:t.key===`ArrowLeft`?A[(r+A.length-1)%A.length]:t.key===`Home`?A[0]:t.key===`End`?A[A.length-1]:null;i&&(t.preventDefault(),lo(e,i),e.querySelector(`[data-draft-tab="${i}"]`)?.focus())}function po(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 mo(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&&!po(t),run:()=>n()?.click()}}}function ho(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 go(e){let t=e.getSelection();return!!(t&&!t.isCollapsed&&t.toString()!==``)}function _o(e){let{doc:t}=e,n=we({doc:t,item:`[data-finding-card]`,walk:()=>ho(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:()=>ho(t).length>0,run:()=>n.move(1)},"review.findings.previous":{available:()=>ho(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:()=>!go(t)&&a(r())!==null,run:()=>a(r())?.click()},"review.findings.choose":{available:()=>e.selecting()&&o(r()),run:()=>{let t=r();t&&e.flip(t)}}}}}function vo(e){return e.querySelector(`[data-review-home]`)?.dataset.viewNav??null}ha(`progress`,`Review progress`);function yo(e,t=Date.now()){return`Running for ${bo(t-e)}`}function bo(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 xo={job:`data-job-phase`,kiss:`data-kiss-phase`,update:`data-update-phase`};function So(e){let t=new Map;for(let n of Object.keys(xo)){let r=xo[n],i=e.querySelector(`[${r}]`);i&&!be(i.getAttribute(r)??void 0)&&t.set(n,i)}return t}function Co(e,t,n){return t.failed?!0:e===`update`?t.phase===`none`||be(t.phase):wo(t.phase,n)}function wo(e,t){return be(e)?!0:(e===`conversation`||e===`analysing`)&&!t.querySelector(`[data-view="files"]`)}function To(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||xe(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 Eo(e){for(let t of e.querySelectorAll(`[data-started-at]`)){let e=Number(t.dataset.startedAt);Number.isFinite(e)&&(t.textContent=yo(e))}}function Do(e,t=1e3){let n=window.setInterval(()=>Eo(e),t);return()=>window.clearInterval(n)}async function Oo({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`||be(t))return a()}catch{}await new Promise(e=>setTimeout(e,r))}}function ko(e,t,n){let r=e.scope===`change`?`Whole change`:t.get(e.scope)??`A theme of this change`,i=e.scope===`change`?``:e.scope;return`<article class="prb-diagram" id="prb-diagram-${T(e.scope)}" data-diagram-card="${T(e.scope)}">
|
|
107
107
|
<header class="prb-diagram-head">
|
|
108
108
|
<div class="prb-diagram-heading">
|
|
109
109
|
<h4 class="prb-diagram-title">
|
|
@@ -122,70 +122,70 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
122
122
|
</div>
|
|
123
123
|
</header>
|
|
124
124
|
${e.caption?`<p class="prb-diagram-caption">${T(e.caption)}</p>`:``}
|
|
125
|
-
${
|
|
125
|
+
${Ao(e,n)}
|
|
126
126
|
<div class="prb-diagram-canvas" data-diagram-canvas></div>
|
|
127
127
|
<details class="prb-diagram-source">
|
|
128
128
|
<summary>Diagram source</summary>
|
|
129
|
-
<div class="${
|
|
129
|
+
<div class="${Ee}"><pre><code data-mermaid-source>${T(e.mermaid)}</code></pre><button type="button" class="${De}" aria-label="Copy code">Copy</button></div>
|
|
130
130
|
</details>
|
|
131
|
-
</article>`}function
|
|
131
|
+
</article>`}function Ao(e,t){return!e.commitSha||!t||e.commitSha===t?``:`<p class="prb-diagram-stale">Drawn from <code>${T(e.commitSha.slice(0,7))}</code>, before this review was brought up to date. Regenerate to draw it from the commit the review now describes.</p>`}var jo=.5,Mo=3,No=1.25,Po=new WeakSet,Fo=new WeakMap,Io=new WeakMap,j=null;function Lo(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-diagram-stop]`);if(r){r.setAttribute(`disabled`,``),r.textContent=`Stopping…`,fetch(e.endpoint(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`diagram`})}).catch(()=>{}).finally(()=>{j?.abort()});return}let i=n.closest(`[data-diagram-toggle]`);if(i){Xo(i.closest(`[data-diagram-card]`),i.getAttribute(`aria-expanded`)===`true`);return}let a=n.closest(`[data-diagram-zoom]`);if(a){$o(a.closest(`[data-diagram-card]`),a.dataset.diagramZoom??`reset`);return}let o=n.closest(`[data-diagram-request]`);o?.dataset.diagramKind===`map`?zo(e):o&&Ro(e,o.dataset.diagramRequest||null)}),Uo(),Bo(),{drawPane:Zo}}async function Ro(e,t){if(j)return;let n=t??`change`,r=document.querySelector(`[data-diagram-pane]`),i=r?.querySelector(`[data-diagram-card="${ss(n)}"]`)??null??Ko(r,n,t);if(!i)return;Wo(),e.showDiagrams();let a=qo(i);j=new AbortController,ns(!1);try{let n=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({sectionId:t}),signal:j.signal}),r=await n.json().catch(()=>null);if(n.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!n.ok||!r?.diagram)return Jo(i,a,r?.error??`Buddy AI did not return a diagram. Check the terminal running PR Review Buddy.`);Yo(i,r.diagram,t)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){i.hasAttribute(`data-diagram-pending`)?(i.remove(),Wo()):a.remove();return}Jo(i,a,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{j=null,ns(!0)}}async function zo(e){if(j)return;let t=document.querySelector(`[data-map-body]`);if(!t)return;e.showMap();let n=Vo(t),r=t.closest(`[data-map-pane]`);r?.setAttribute(`data-map-running`,``),j=new AbortController,ns(!1);try{let t=await fetch(e.endpoint(`/diagram`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`map`}),signal:j.signal}),r=await t.json().catch(()=>null);if(t.status===409&&r?.running){window.location.reload();return}if(r?.stopped)throw new DOMException(`Stopped`,`AbortError`);if(!t.ok||!r?.changeMap){Ho(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),Wo()}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){n.remove();return}Ho(n,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}finally{r?.removeAttribute(`data-map-running`),j=null,ns(!0)}}function Bo(){let e=document.querySelector(`[data-map-pane][data-map-running] [data-map-body]`);e&&(Vo(e),ns(!1))}function Vo(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 Ho(e,t){e.className=`prb-diagram-failed`,e.textContent=t}function Uo(){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="${ss(n)}"]`)??Ko(e,n,t);r&&(Wo(),qo(r,{scroll:!1}),ns(!1))}function Wo(){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;Go(`map`,t>0),Go(`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 Go(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 Ko(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">
|
|
132
132
|
<div class="prb-diagram-heading">
|
|
133
133
|
<h4 class="prb-diagram-title">Drawing…</h4>
|
|
134
|
-
<p class="prb-diagram-scope">${t===`change`?`Whole change`:
|
|
134
|
+
<p class="prb-diagram-scope">${t===`change`?`Whole change`:os(rs(n))}</p>
|
|
135
135
|
</div>
|
|
136
|
-
</header>`,
|
|
136
|
+
</header>`,is(e,r,n),r}function qo(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:cs()?`auto`:`smooth`,block:`start`}),n}function Jo(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 Yo(e,t,n){let r=ko(t,new Map(n?[[n,rs(n)]]:[]),t.commitSha),i=document.createElement(`div`);i.innerHTML=r;let a=i.firstElementChild;a&&(e.replaceWith(a),Wo(),Qo(a))}function Xo(e,t){e&&(e.toggleAttribute(`data-diagram-collapsed`,t),e.querySelector(`[data-diagram-toggle]`)?.setAttribute(`aria-expanded`,String(!t)),t||Qo(e))}function Zo(){for(let e of document.querySelectorAll(`[data-diagram-pane] [data-diagram-card]`))Qo(e)}async function Qo(e){let t=e.querySelector(`[data-diagram-canvas]`),n=e.querySelector(`[data-mermaid-source]`)?.textContent??``;if(!(!t||!n||Po.has(e)||e.hasAttribute(`data-diagram-collapsed`))){Po.add(e);try{await rn(t,`prb-mermaid-${Math.random().toString(36).slice(2)}`,n)}catch{Po.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 $o(e,t){let n=e?.querySelector(`[data-diagram-canvas] svg`),r=e?.querySelector(`[data-diagram-canvas]`);if(!e||!n||!r)return;if(t===`reset`){Io.delete(e),r.removeAttribute(`data-zoomed`),n.style.removeProperty(`width`);return}let i=es(e,n);if(i<=0)return;let a=ts((Io.get(e)??1)*(t===`in`?No:1/No));Io.set(e,a),r.setAttribute(`data-zoomed`,``),n.style.width=`${Math.round(i*a)}px`}function es(e,t){let n=Fo.get(e);if(n)return n;let r=t.getBoundingClientRect().width;if(r>0)return Fo.set(e,r),r;let i=t.getAttribute(`viewBox`)?.split(/[\s,]+/),a=Number(i?.[2]??0);return Number.isFinite(a)?a:0}function ts(e){return Math.min(Mo,Math.max(jo,e))}function ns(e){for(let t of document.querySelectorAll(`[data-diagram-request]`))t.disabled=!e}function rs(e){return e?document.querySelector(`[data-goto-section="${ss(e)}"]`)?.querySelector(`.prb-rail-title`)?.textContent?.trim()||`A theme of this change`:`Whole change`}function is(e,t,n){let r=as(n);for(let n of e.querySelectorAll(`[data-diagram-card]`)){let e=n.dataset.diagramCard??``;if(as(e===`change`?null:e)>r){n.before(t);return}}e.appendChild(t)}function as(e){if(!e)return-1;let t=document.querySelector(`[data-goto-section="${ss(e)}"]`);return Number(t?.dataset.themeIndex??0)}function os(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function ss(e){return CSS.escape(e)}function cs(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ls=[`intent`,`actor`,`concept`,`state`,`constraint`,`risk`,`outcome`],us=[`Intent`,`Behaviour`,`Shared state`,`Risks & constraints`,`Outcome`],ds={mapTitle:100,intent:320,title:80,body:220,why:160,anchor:80,label:48,note:200},fs={intent:0,concept:1,actor:2,state:2,constraint:3,risk:3,outcome:4};function ps(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}=ms(t.nodes);return{schemaVersion:1,title:bs(O(t.title).trim(),ds.mapTitle)||`Change map`,intent:gs(t.intent,ds.intent)??{simple:``,technical:``},nodes:n,edges:hs(t.edges,r)}}function ms(e){let t=new Map,n=new Set,r=[];for(let i of e){if(typeof i!=`object`||!i)continue;let e=i,a=gs(e.title,ds.title);if(!a)continue;let o=O(e.id).trim()||a.technical;if(t.has(o))continue;let s=ys(vs(o)||`n${r.length+1}`,n);t.set(o,s),n.add(s);let c=ls.includes(e.role)?e.role:`concept`,l=gs(e.why,ds.why),u=bs(O(e.anchor).trim(),ds.anchor),d=O(e.sectionId).trim();r.push({id:s,role:c,stage:_s(e.stage,c),weight:e.weight===`primary`?`primary`:`supporting`,title:a,body:gs(e.body,ds.body)??{simple:``,technical:``},...l?{why:l}:{},...u?{anchor:u}:{},...d?{sectionId:d}:{}})}return{nodes:r,ids:t}}function hs(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(typeof r!=`object`||!r)continue;let e=r,i=gs(e.label,ds.label),a=t.get(O(e.from).trim())??O(e.from).trim(),o=t.get(O(e.to).trim())??O(e.to).trim();if(!i||!a||!o)continue;let s=gs(e.note,ds.note);n.push({from:a,to:o,label:i,...s?{note:s}:{}})}return n}function gs(e,t){if(typeof e==`string`){let n=bs(e.trim(),t);return n?{simple:n,technical:n}:null}if(typeof e!=`object`||!e)return null;let n=e,r=bs(O(n.simple).trim(),t),i=bs(O(n.technical).trim(),t);return!r&&!i?null:{simple:r||i,technical:i||r}}function _s(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=0&&e<=4?e:fs[t]}function vs(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,40)}function ys(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}function bs(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 xs(e,t){try{return Ss(ps(e),t).map}catch{return null}}function Ss(e,t){let n={droppedNodes:0,droppedEdges:0,withdrawnSections:0,demotedPrimaries:0},r=Ts(Cs(e.nodes,n).map(e=>ws(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:Es(r),edges:o},audit:n}}function Cs(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 ws(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 Ts(e,t){let n=0;return e.map(e=>e.weight!==`primary`||(n+=1,n<=3)?e:(t.demotedPrimaries+=1,{...e,weight:`supporting`}))}function Es(e){return[...e].sort((e,t)=>e.stage-t.stage)}function Ds(e){let{stored:t,sections:n,reviewedSha:r,register:i}=e,a=t?xs(t,n.map(e=>e.id)):null,o=!!(a&&t?.commitSha&&r&&t.commitSha!==r);if(!a||!t||o)return Os(o);let s=new Map(n.map(e=>[e.id,e.title]));return`<div class="prb-map" data-change-map data-register="${i}">
|
|
137
137
|
<header class="prb-map-head">
|
|
138
138
|
<div class="prb-map-heading">
|
|
139
139
|
<h4 class="prb-map-title">${T(a.title)}</h4>
|
|
140
140
|
${a.intent.simple||a.intent.technical?`<p class="prb-map-intent">${M(a.intent)}</p>`:``}
|
|
141
141
|
</div>
|
|
142
142
|
<div class="prb-map-tools">
|
|
143
|
-
${
|
|
143
|
+
${ks(i)}
|
|
144
144
|
<button type="button" class="prb-diagram-redraw" data-diagram-request="" data-diagram-kind="map">Regenerate</button>
|
|
145
145
|
</div>
|
|
146
146
|
</header>
|
|
147
147
|
<p class="prb-map-hint">Read from the goal to the outcome. Select an idea to see what it connects to.</p>
|
|
148
|
-
${
|
|
149
|
-
${
|
|
150
|
-
</div>`}function
|
|
148
|
+
${As(a,s)}
|
|
149
|
+
${Ps(a)}
|
|
150
|
+
</div>`}function Os(e){return`<div class="prb-map-empty" data-change-map-empty>
|
|
151
151
|
${e?`<p class="prb-map-stale">The review has moved on since the last map was drawn.</p>`:``}
|
|
152
152
|
<h4 class="prb-map-empty-title">See the change as a map</h4>
|
|
153
153
|
<p>See how the main ideas in this change connect, what depends on what, and where the important risks are. Each idea links back to its theme in the Review Path.</p>
|
|
154
154
|
<p class="prb-map-empty-note">Buddy AI builds it from this review, in plain words and technical ones. It takes a minute or two.</p>
|
|
155
155
|
<button type="button" class="prb-map-generate" data-diagram-request="" data-diagram-kind="map">Generate change map</button>
|
|
156
|
-
</div>`}function
|
|
157
|
-
<h5 class="prb-map-stage-title">${T(
|
|
158
|
-
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>
|
|
159
|
-
</div>`).join(``),i=e.edges.map((e,t)=>
|
|
156
|
+
</div>`}function ks(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 As(e,t){let n=[...new Set(e.nodes.map(e=>e.stage))].sort((e,t)=>e-t),r=n.map(n=>`<div class="prb-map-stage" data-map-stage="${n}">
|
|
157
|
+
<h5 class="prb-map-stage-title">${T(us[n]??``)}</h5>
|
|
158
|
+
${e.nodes.filter(e=>e.stage===n).sort((e,t)=>Number(t.weight===`primary`)-Number(e.weight===`primary`)).map(n=>Ms(n,t,e)).join(``)}
|
|
159
|
+
</div>`).join(``),i=e.edges.map((e,t)=>Ns(e,t)).join(``);return`<div class="prb-map-board" data-map-board style="--prb-map-stages: ${n.length}">
|
|
160
160
|
<svg class="prb-map-edges" data-map-edges aria-hidden="true" focusable="false"></svg>
|
|
161
161
|
${r}
|
|
162
162
|
<div class="prb-map-labels" aria-hidden="true">${i}</div>
|
|
163
|
-
</div>`}var
|
|
164
|
-
<p class="prb-map-role">${
|
|
163
|
+
</div>`}var js={intent:`Goal`,actor:`Actor`,concept:`Idea`,state:`Shared state`,constraint:`Rule`,risk:`Risk`,outcome:`Outcome`};function Ms(e,t,n){let r=T(e.id),i=e.sectionId?t.get(e.sectionId):void 0,a=new Map(n.nodes.map(e=>[e.id,e.title])),o=n.edges.map((e,t)=>({edge:e,index:t})).filter(({edge:t})=>t.from===e.id&&a.has(t.to)).map(({edge:e,index:t})=>`<li data-inline-edge="${t}" hidden><em>${M(e.label)}</em> <span aria-hidden="true">→</span> ${M(a.get(e.to))}</li>`).join(``);return`<article class="prb-map-node" data-map-node="${r}" data-role="${e.role}" data-weight="${e.weight}" tabindex="0" aria-labelledby="prb-map-node-${r}">
|
|
164
|
+
<p class="prb-map-role">${js[e.role]}${e.weight===`primary`?`<span class="prb-map-core"> · Core idea</span>`:``}</p>
|
|
165
165
|
<h5 class="prb-map-node-title" id="prb-map-node-${r}">${M(e.title)}</h5>
|
|
166
166
|
${e.body.simple||e.body.technical?`<p class="prb-map-node-body">${M(e.body)}</p>`:``}
|
|
167
167
|
${e.why?`<p class="prb-map-why"><span class="prb-map-why-lead">Why it matters:</span> ${M(e.why)}</p>`:``}
|
|
168
168
|
${e.anchor?`<code class="prb-map-anchor">${T(e.anchor)}</code>`:``}
|
|
169
169
|
${o?`<ul class="prb-map-inline" aria-hidden="true">${o}</ul>`:``}
|
|
170
170
|
${e.sectionId&&i?`<button type="button" class="prb-map-goto" data-goto-section="${T(e.sectionId)}" aria-label="Open ${T(i)} in the Review Path">Review Path: ${T(i)} <span aria-hidden="true">→</span></button>`:``}
|
|
171
|
-
</article>`}function
|
|
171
|
+
</article>`}function Ns(e,t){return`<span class="prb-map-label" data-map-edge="${t}" data-from="${T(e.from)}" data-to="${T(e.to)}">${M(e.label)}</span>`}function Ps(e){let t=new Map(e.nodes.map(e=>[e.id,e.title]));return`<details class="prb-map-list">
|
|
172
172
|
<summary>Read as a list</summary>
|
|
173
173
|
<ol>${e.edges.map(e=>{let n=t.get(e.from),r=t.get(e.to);return!n||!r?``:`<li><strong>${M(n)}</strong> <em>${M(e.label)}</em> <strong>${M(r)}</strong>${e.note?`<span class="prb-map-note"> — ${M(e.note)}</span>`:``}</li>`}).join(``)}</ol>
|
|
174
|
-
</details>`}function M(e){return e.simple===e.technical?Ce(e.simple):`<span data-reg="simple">${Ce(e.simple)}</span><span data-reg="technical">${Ce(e.technical)}</span>`}var Ns=`http://www.w3.org/2000/svg`,Ps=new WeakSet,Fs=new WeakMap;function Is(e){return document.addEventListener(`click`,t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-map-register-option]`);if(r){Xs(r.dataset.mapRegisterOption===`technical`?`technical`:`simple`,e);return}if(n.closest(`[data-goto-section]`))return;let i=n.closest(`[data-map-node]`),a=n.closest(`[data-map-board]`);a&&Ys(a,i&&i.classList.contains(`prb-map-node`)?i.dataset.mapNode??null:null)}),document.addEventListener(`focusin`,e=>{let t=e.target instanceof Element?e.target.closest(`.prb-map-node`):null,n=t?.closest(`[data-map-board]`);t&&n&&Ys(n,t.dataset.mapNode??null)}),document.addEventListener(`keydown`,t=>{let n=t.target;if(n instanceof HTMLElement){if(t.key===`Escape`&&n.closest(`[data-map-board]`)){let e=n.closest(`[data-map-board]`);e?.hasAttribute(`data-selecting`)&&(Ys(e,null),t.stopPropagation());return}if((t.key===`ArrowLeft`||t.key===`ArrowRight`)&&n.matches(`[role="tab"][data-diagram-mode]`)){t.preventDefault();let r=[...n.closest(`[role="tablist"]`)?.querySelectorAll(`[data-diagram-mode]`)??[]].map(e=>e.dataset.diagramMode??``),i=t.key===`ArrowRight`?1:-1,a=r[(r.indexOf(n.dataset.diagramMode??``)+i+r.length)%r.length];e.showView(a),document.querySelector(`.prb-view[data-view="${a}"] [data-diagram-mode="${a}"]`)?.focus()}}}),{layout:Ls,show:Rs}}function Ls(){for(let e of document.querySelectorAll(`[data-map-board]`))zs(e),Bs(e)}function Rs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Ts({stored:e,sections:Qs(),reviewedSha:e.commitSha,register:Zs()}),Ls())}function zs(e){if(Ps.has(e)||typeof ResizeObserver>`u`)return;Ps.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Bs(e)}))}).observe(e)}function Bs(e){let t=e.querySelector(`[data-map-edges]`);if(!t||e.offsetWidth===0)return;let n=e.getBoundingClientRect(),r=t=>{let r=t.getBoundingClientRect(),i=r.left-n.left+e.scrollLeft,a=r.top-n.top+e.scrollTop;return{left:i,top:a,right:i+r.width,bottom:a+r.height,cx:i+r.width/2,cy:a+r.height/2}},i=e.scrollWidth,a=e.scrollHeight;t.setAttribute(`width`,String(i)),t.setAttribute(`height`,String(a)),t.setAttribute(`viewBox`,`0 0 ${i} ${a}`),t.replaceChildren(Js());let o=new Map;for(let t of e.querySelectorAll(`.prb-map-node`))o.set(t.dataset.mapNode??``,r(t));let s=getComputedStyle(e).gridTemplateColumns.trim().split(/\s+/).length>1,c=[...e.querySelectorAll(`.prb-map-label[data-map-edge]`)].map(e=>{let t=o.get(e.dataset.from??``),n=o.get(e.dataset.to??``);return{label:e,from:t,to:n,ends:t&&n?Vs(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=Fs.get(e),_=g&&g.width===h?g.edges:new Set;Fs.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Hs(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Hs(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ws(s,i.from,c,i.to),[u,h,g,y]=l,ee=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>Gs(l,.05+t*.05)).some(e=>ee.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let b=document.createElementNS(Ns,`path`);b.setAttribute(`d`,`M${qs(u.x)},${qs(u.y)} C${qs(h.x)},${qs(h.y)} ${qs(g.x)},${qs(g.y)} ${qs(y.x)},${qs(y.y)}`),b.setAttribute(`class`,`prb-map-edge`),b.setAttribute(`marker-end`,`url(#prb-map-arrow)`),b.dataset.mapEdge=e.dataset.mapEdge??``,b.dataset.from=e.dataset.from??``,b.dataset.to=e.dataset.to??``,t.appendChild(b),e.hidden=!1;let x=e.offsetWidth,S=e.offsetHeight,C=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=Gs(l,e);return{left:t.x-x/2,top:t.y-S/2,right:t.x+x/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Ks(e,t,2)));if(!C){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(C),e.style.left=`${Math.round(C.left)}px`,e.style.top=`${Math.round(C.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Vs(e,t,n){let r=t.left-e.right,i=e.left-t.right,a=t.top-e.bottom,o=e.top-t.bottom,s=Math.max(r,i),c=Math.max(a,o);return s>0&&(n||c<=0)?r>=i?{from:`right`,to:`left`}:{from:`left`,to:`right`}:c>0?a>=o?{from:`bottom`,to:`top`}:{from:`top`,to:`bottom`}:{from:`right`,to:`right`}}function Hs(e,t,n){switch(t){case`top`:return{x:e.cx+n,y:e.top};case`bottom`:return{x:e.cx+n,y:e.bottom};case`left`:return{x:e.left,y:e.cy+n};case`right`:return{x:e.right,y:e.cy+n}}}var Us={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Ws(e,t,n,r){let i=Math.abs(t===`left`||t===`right`?n.x-e.x:n.y-e.y),a=Math.max(24,i/2),o=Us[t],s=Us[r];return[e,{x:e.x+o.x*a,y:e.y+o.y*a},{x:n.x+s.x*a,y:n.y+s.y*a},n]}function Gs([e,t,n,r],i){let a=1-i;return{x:a*a*a*e.x+3*a*a*i*t.x+3*a*i*i*n.x+i*i*i*r.x,y:a*a*a*e.y+3*a*a*i*t.y+3*a*i*i*n.y+i*i*i*r.y}}function Ks(e,t,n){return e.left<t.right+n&&e.right>t.left-n&&e.top<t.bottom+n&&e.bottom>t.top-n}function qs(e){return Math.round(e*10)/10}function Js(){let e=document.createElementNS(Ns,`defs`),t=document.createElementNS(Ns,`marker`);t.setAttribute(`id`,`prb-map-arrow`),t.setAttribute(`viewBox`,`0 0 10 10`),t.setAttribute(`refX`,`9`),t.setAttribute(`refY`,`5`),t.setAttribute(`markerWidth`,`7`),t.setAttribute(`markerHeight`,`7`),t.setAttribute(`orient`,`auto-start-reverse`);let n=document.createElementNS(Ns,`path`);return n.setAttribute(`d`,`M0,0 L10,5 L0,10 z`),n.setAttribute(`class`,`prb-map-arrow`),t.appendChild(n),e.appendChild(t),e}function Ys(e,t){for(let t of e.querySelectorAll(`[data-active], [data-near]`))t.removeAttribute(`data-active`),t.removeAttribute(`data-near`);if(e.toggleAttribute(`data-selecting`,t!==null),t!==null){e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(t)}"]`)?.setAttribute(`data-active`,``);for(let n of e.querySelectorAll(`[data-map-edge]`)){let r=n.getAttribute(`data-from`),i=n.getAttribute(`data-to`);if(r!==t&&i!==t)continue;n.setAttribute(`data-active`,``);let a=r===t?i:r;a&&e.querySelector(`.prb-map-node[data-map-node="${CSS.escape(a)}"]`)?.setAttribute(`data-near`,``)}}}function Xs(e,t){document.querySelector(`[data-map-pane]`)?.setAttribute(`data-map-register`,e);for(let t of document.querySelectorAll(`[data-change-map]`))t.dataset.register=e;for(let t of document.querySelectorAll(`[data-map-register-option]`))t.setAttribute(`aria-pressed`,String(t.dataset.mapRegisterOption===e));Ls(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Zs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function Qs(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var $s=`repository`,ec={minCharacters:8,maxLines:3,maxCharacters:400},tc=[`app`,`service`,`component`,`store`,`external`,`group`],nc=/^[a-z][a-z0-9-]*$/;function rc(e){let t=[];if(!fc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};mc(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=pc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=hc(n.title,`architecture.title`,t),i=gc(n.summary,`architecture.summary`,t),a=[],o=new Set;!Array.isArray(n.nodes)||n.nodes.length===0?t.push(`architecture.nodes must be a non-empty array.`):n.nodes.forEach((e,n)=>{let r=ac(e,`nodes[${n}]`,t);r&&(o.has(r.id)&&t.push(`nodes[${n}].id "${r.id}" is used twice.`),o.add(r.id),a.push(r))});let s=new Set(Array.isArray(n.nodes)?n.nodes.flatMap(e=>fc(e)&&typeof e.id==`string`&&nc.test(e.id)?[e.id]:[]):[]),c=new Map(a.map(e=>[e.id,e]));for(let e of a){if(e.parent===void 0)continue;let n=c.get(e.parent);n?n.kind!==`group`&&t.push(`Node "${e.id}" names parent "${e.parent}", which is not a group.`):s.has(e.parent)||t.push(`Node "${e.id}" names parent "${e.parent}", which is not a node.`)}for(let e of a)ic(e.id,c).includes(e.id)&&t.push(`Node "${e.id}" is its own ancestor.`),e.kind===`external`&&e.owns&&t.push(`Node "${e.id}" is external, so it cannot own files in this repository.`);let l=[],u=new Set;return Array.isArray(n.relationships)?n.relationships.forEach((e,n)=>{let r=`relationships[${n}]`,i=oc(e,r,t);if(!i)return;(u.has(i.id)||o.has(i.id))&&t.push(`${r}.id "${i.id}" is already used.`),u.add(i.id);let{source:a,target:d}=i;for(let[e,n]of[[`source`,a],[`target`,d]])s.has(n)||t.push(`${r}.${e} "${n}" is not a node.`);a===d?t.push(`${r} relates "${a}" to itself.`):c.has(a)&&c.has(d)&&(ic(a,c).includes(d)||ic(d,c).includes(a))&&t.push(`${r} relates "${a}" and "${d}", and one contains the other.`),l.push(i)}):t.push(`architecture.relationships must be an array.`),t.length>0||r===null?{ok:!1,errors:t}:{ok:!0,architecture:{schema:2,title:r,...i===void 0?{}:{summary:i},nodes:a,relationships:l}}}function ic(e,t){let n=[],r=t.get(e)?.parent;for(;r!==void 0&&!n.includes(r);)n.push(r),r=t.get(r)?.parent;return r!==void 0&&n.push(r),n}function ac(e,t,n){if(!fc(e))return n.push(`${t} must be an object.`),null;mc(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=pc(e,[`parent`,`description`,`owns`],t,n),i=_c(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${$s}": that name is kept for the whole repository. Choose another id.`);let a=hc(r.name,`${t}.name`,n),o=tc.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${tc.join(`, `)}.`);let s=r.parent===void 0?void 0:_c(r.parent,`${t}.parent`,n),c=gc(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:sc(r.owns,`${t}.owns`,n),u=cc(r.evidence,`${t}.evidence`,n);return i===null||a===null||!o||s===null||l===null||u===null?null:{id:i,name:a,kind:o,...s===void 0?{}:{parent:s},...c===void 0?{}:{description:c},...l===void 0?{}:{owns:l},evidence:u}}function oc(e,t,n){if(!fc(e))return n.push(`${t} must be an object.`),null;mc(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=pc(e,[`description`,`confidence`],t,n),i=_c(r.id,`${t}.id`,n),a=_c(r.source,`${t}.source`,n),o=_c(r.target,`${t}.target`,n),s=hc(r.label,`${t}.label`,n),c=gc(r.description,`${t}.description`,n),l=cc(r.evidence,`${t}.evidence`,n),u;return r.confidence!==void 0&&(typeof r.confidence==`number`&&r.confidence>=0&&r.confidence<=1?u=r.confidence:n.push(`${t}.confidence must be a number from 0 to 1.`)),i===null||a===null||o===null||s===null||l===null?null:{id:i,source:a,target:o,label:s,...c===void 0?{}:{description:c},evidence:l,...u===void 0?{}:{confidence:u}}}function sc(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must be a non-empty array of globs, or left out.`),null;let r=[];return e.forEach((e,i)=>{let a=hc(e,`${t}[${i}]`,n);a!==null&&(!dc(a)||a.startsWith(`./`)||a.startsWith(`!`)?n.push(`${t}[${i}] must be a glob relative to the repository, with forward slashes, no "..", no "./" and no "!".`):r.includes(a)?n.push(`${t}[${i}] "${a}" is listed twice.`):r.push(a))}),r.length===e.length?r:null}function cc(e,t,n){if(!Array.isArray(e)||e.length===0)return n.push(`${t} must list at least one location in the repository.`),null;let r=[];return e.forEach((e,i)=>{let a=`${t}[${i}]`;if(!fc(e)){n.push(`${a} must be an object.`);return}mc(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=pc(e,[`symbol`,`line`,`note`],a,n);let o=hc(e.path,`${a}.path`,n);o!==null&&!dc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=lc(e.quote,`${a}.quote`,n),c;e.symbol!==void 0&&(typeof e.symbol==`string`&&/^\S{1,120}$/.test(e.symbol)?c=e.symbol:n.push(`${a}.symbol must be a name with no spaces, at most 120 characters.`));let l=vc(e.line,`${a}.line`,n),u=gc(e.note,`${a}.note`,n);o!==null&&s!==null&&r.push({path:o,quote:s,...c===void 0?{}:{symbol:c},...l===void 0?{}:{line:l},...u===void 0?{}:{note:u}})}),r.length===e.length?r:null}function lc(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${ec.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=uc(r);return r.split(`
|
|
175
|
-
`).length>
|
|
176
|
-
`),nodes:r,edges:u}}function
|
|
174
|
+
</details>`}function M(e){return e.simple===e.technical?Te(e.simple):`<span data-reg="simple">${Te(e.simple)}</span><span data-reg="technical">${Te(e.technical)}</span>`}var Fs=`http://www.w3.org/2000/svg`,Is=new WeakSet,Ls=new WeakMap;function Rs(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){Zs(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&&Xs(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&&Xs(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`)&&(Xs(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:zs,show:Bs}}function zs(){for(let e of document.querySelectorAll(`[data-map-board]`))Vs(e),Hs(e)}function Bs(e){let t=document.querySelector(`[data-map-body]`);t&&(t.innerHTML=Ds({stored:e,sections:$s(),reviewedSha:e.commitSha,register:Qs()}),zs())}function Vs(e){if(Is.has(e)||typeof ResizeObserver>`u`)return;Is.add(e);let t=!1;new ResizeObserver(()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,Hs(e)}))}).observe(e)}function Hs(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(Ys());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?Us(t,n,s):null}}),l=new Map,u=(e,t,n,r)=>{let i=`${e}\u0000${t}`;l.set(i,[...l.get(i)??[],{edge:n,other:r}])};c.forEach(({label:e,from:t,to:n,ends:r},i)=>{!t||!n||!r||(u(e.dataset.from??``,r.from,i,n),u(e.dataset.to??``,r.to,i,t))});let d=(e,t,n,r)=>{let i=[...l.get(`${e}\u0000${t}`)??[]],a=t===`top`||t===`bottom`;i.sort((e,t)=>a?e.other.cx-t.other.cx:e.other.cy-t.other.cy);let o=i.findIndex(e=>e.edge===n),s=a?r.right-r.left:r.bottom-r.top,c=Math.min(18,s*.6/Math.max(1,i.length));return(o-(i.length-1)/2)*c},f=[],p=[...e.querySelectorAll(`.prb-map-stage-title`)].map(r),m=[...o.values()],h=e.clientWidth,g=Ls.get(e),_=g&&g.width===h?g.edges:new Set;Ls.set(e,{width:h,edges:_});let v=(t,n)=>{n&&_.add(t);let r=e.querySelector(`[data-inline-edge="${t}"]`);r&&(r.hidden=!n)};c.forEach(({label:e,from:n,to:r,ends:i},a)=>{let o=Number(e.dataset.mapEdge);if(!n||!r||!i){e.hidden=!0;return}if(_.has(o)){e.hidden=!0,v(o,!0);return}let s=Ws(n,i.from,d(e.dataset.from??``,i.from,a,n)),c=Ws(r,i.to,d(e.dataset.to??``,i.to,a,r)),l=Ks(s,i.from,c,i.to),[u,h,g,y]=l,ee=m.filter(e=>e!==n&&e!==r);if(Array.from({length:19},(e,t)=>qs(l,.05+t*.05)).some(e=>ee.some(t=>e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom))){e.hidden=!0,v(o,!0);return}let b=document.createElementNS(Fs,`path`);b.setAttribute(`d`,`M${N(u.x)},${N(u.y)} C${N(h.x)},${N(h.y)} ${N(g.x)},${N(g.y)} ${N(y.x)},${N(y.y)}`),b.setAttribute(`class`,`prb-map-edge`),b.setAttribute(`marker-end`,`url(#prb-map-arrow)`),b.dataset.mapEdge=e.dataset.mapEdge??``,b.dataset.from=e.dataset.from??``,b.dataset.to=e.dataset.to??``,t.appendChild(b),e.hidden=!1;let x=e.offsetWidth,S=e.offsetHeight,C=[.5,.4,.6,.3,.7,.22,.78].map(e=>{let t=qs(l,e);return{left:t.x-x/2,top:t.y-S/2,right:t.x+x/2,bottom:t.y+S/2}}).find(e=>![...m,...p,...f].some(t=>Js(e,t,2)));if(!C){b.remove(),e.hidden=!0,v(o,!0);return}v(o,!1),f.push(C),e.style.left=`${Math.round(C.left)}px`,e.style.top=`${Math.round(C.top)}px`}),e.setAttribute(`data-laid-out`,``)}function Us(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 Ws(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 Gs={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};function Ks(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=Gs[t],s=Gs[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 qs([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 Js(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 N(e){return Math.round(e*10)/10}function Ys(){let e=document.createElementNS(Fs,`defs`),t=document.createElementNS(Fs,`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(Fs,`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 Xs(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 Zs(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));zs(),fetch(t.endpoint(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({changeMapRegister:e})}).catch(()=>{})}function Qs(){return document.querySelector(`[data-map-pane]`)?.dataset.mapRegister===`technical`?`technical`:`simple`}function $s(){return[...document.querySelectorAll(`[data-goto-section][data-theme-index]`)].map(e=>({id:e.dataset.gotoSection??``,title:e.querySelector(`.prb-rail-title`)?.textContent?.trim()??``}))}var ec=`repository`,tc={minCharacters:8,maxLines:3,maxCharacters:400},nc=[`app`,`service`,`component`,`store`,`external`,`group`],rc=/^[a-z][a-z0-9-]*$/;function ic(e){let t=[];if(!pc(e))return{ok:!1,errors:[`The architecture must be a JSON object.`]};hc(e,[`schema`,`title`,`summary`,`nodes`,`relationships`],`architecture`,t);let n=mc(e,[`summary`],`architecture`,t);n.schema!==2&&t.push(`architecture.schema must be 2.`);let r=gc(n.title,`architecture.title`,t),i=_c(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=oc(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=>pc(e)&&typeof e.id==`string`&&rc.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)ac(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=sc(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)&&(ac(a,c).includes(d)||ac(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 ac(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 oc(e,t,n){if(!pc(e))return n.push(`${t} must be an object.`),null;hc(e,[`id`,`name`,`kind`,`parent`,`description`,`owns`,`evidence`],t,n);let r=mc(e,[`parent`,`description`,`owns`],t,n),i=vc(r.id,`${t}.id`,n);i===`repository`&&n.push(`${t}.id must not be "${ec}": that name is kept for the whole repository. Choose another id.`);let a=gc(r.name,`${t}.name`,n),o=nc.find(e=>e===r.kind);o||n.push(`${t}.kind must be one of ${nc.join(`, `)}.`);let s=r.parent===void 0?void 0:vc(r.parent,`${t}.parent`,n),c=_c(r.description,`${t}.description`,n),l=r.owns===void 0?void 0:cc(r.owns,`${t}.owns`,n),u=lc(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 sc(e,t,n){if(!pc(e))return n.push(`${t} must be an object.`),null;hc(e,[`id`,`source`,`target`,`label`,`description`,`evidence`,`confidence`],t,n);let r=mc(e,[`description`,`confidence`],t,n),i=vc(r.id,`${t}.id`,n),a=vc(r.source,`${t}.source`,n),o=vc(r.target,`${t}.target`,n),s=gc(r.label,`${t}.label`,n),c=_c(r.description,`${t}.description`,n),l=lc(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 cc(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=gc(e,`${t}[${i}]`,n);a!==null&&(!fc(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 lc(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(!pc(e)){n.push(`${a} must be an object.`);return}hc(e,[`path`,`quote`,`symbol`,`line`,`note`],a,n),e=mc(e,[`symbol`,`line`,`note`],a,n);let o=gc(e.path,`${a}.path`,n);o!==null&&!fc(o)&&n.push(`${a}.path must be relative to the repository, with forward slashes and no "..".`);let s=uc(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=yc(e.line,`${a}.line`,n),u=_c(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 uc(e,t,n){if(typeof e!=`string`||!e.trim())return n.push(`${t} must be one to ${tc.maxLines} lines copied from the file.`),null;let r=e.replace(/^\s*\n|\n\s*$/g,``),i=dc(r);return r.split(`
|
|
175
|
+
`).length>tc.maxLines||r.length>tc.maxCharacters?(n.push(`${t} must be at most ${tc.maxLines} lines and ${tc.maxCharacters} characters.`),null):i.length<tc.minCharacters?(n.push(`${t} "${i}" is too short to find again; quote at least ${tc.minCharacters} characters.`),null):r}function dc(e){return e.replace(/\s+/g,` `).trim()}function fc(e){return!e.startsWith(`/`)&&!e.includes(`\\`)&&!e.split(`/`).includes(`..`)}function pc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function mc(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 hc(e,t,n,r){for(let i of Object.keys(e))t.includes(i)||r.push(`${n} has an unknown field "${i}".`)}function gc(e,t,n){return typeof e==`string`&&e.trim()?e.trim():(n.push(`${t} must be a non-empty string.`),null)}function _c(e,t,n){if(e!==void 0)return gc(e,t,n)??void 0}function vc(e,t,n){if(typeof e==`string`&&rc.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 yc(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 bc(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,...ac(t,n)],i=e=>t!==null&&ac(e,n).includes(t),a=e=>{let a=[e,...ac(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 xc={app:[`(["`,`"])`],service:[`["`,`"]`],component:[`("`,`")`],store:[`[("`,`")]`],external:[`["`,`"]`],group:[`[["`,`"]]`]};function Sc(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 Cc(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]=xc[e.kind],r=e.detail?`${Sc(e.name)}<br>${Sc(e.detail)}`:Sc(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["${Sc(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}|"${Sc(e.label)}"| ${l(e.target)}`)}),o.push(` classDef part fill:#ffffff,stroke:#8c959f,color:#1f2328`,` classDef store fill:#fff8e6,stroke:#b08800,color:#1f2328`,` classDef external fill:#f6f8fa,stroke:#8c959f,stroke-dasharray:4 3,color:#424a53`,` classDef context fill:#f6f8fa,stroke:#d0d7de,stroke-dasharray:4 3,color:#57606a`,` classDef group fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#3b0764`),e.scope!==null&&o.push(` style scope fill:#faf5ff,stroke:#c4a5f5,color:#6b21a8`),{source:o.join(`
|
|
176
|
+
`),nodes:r,edges:u}}function wc(e,t=[null]){let n=new Map(e.nodes.map(e=>[e.id,e]));return`${t.map((t,r)=>{let i=bc(e,t),a=r===0&&t===null?`# ${Tc(e.title)}`:`## ${Tc(i.title)}`,o=t===null?e.summary:n.get(t)?.description,s=Cc(i,{edgeIds:!1}).source;return[a,...o?[Tc(o)]:[],["```mermaid",s,"```"].join(`
|
|
177
177
|
`)].join(`
|
|
178
178
|
|
|
179
179
|
`)}).join(`
|
|
180
180
|
|
|
181
|
-
`)}\n`}function
|
|
182
|
-
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var
|
|
181
|
+
`)}\n`}function Tc(e){return e.replace(/\s+/g,` `).trim().replace(/[\\`*_[\]<>#|]/g,`\\$&`)}var Ec={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 Dc(e){return Ec[e.stage]}var Oc={app:`Application`,service:`Service`,component:`Component`,store:`Store`,external:`External system`,group:`Group`},kc=5e3;function Ac(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&&Mc(e,n,n.dataset.architectureMap||`repository`);let r=t.target.closest(`[data-architecture-stop]`);r&&Nc(e,r,r.dataset.architectureStop||`repository`)}),Fc(e,()=>{r()?jc():n=!0});async function i(){if(n)return jc();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 Bc(r,`The architecture could not be read.`)}let s=ic(o.architecture);if(!s.ok)return Bc(r,`The architecture could not be read.`);let c={scope:ec,architecture:s.architecture,evidence:o.evidence??{}},l=new Map;for(let[e,t]of Object.entries(o.deeper??{})){let n=ic(t.architecture);n.ok&&l.set(e,{scope:e,architecture:n.architecture,evidence:t.evidence,...t.changed?{changed:t.changed}:{}})}let u=new Lc({canvas:r,inspector:i,trail:e.querySelector(`[data-architecture-trail]`),repository:c,deeper:l,embedded:o}),d=new URLSearchParams(window.location.search).get(`part`),f=u.draw(c).then(()=>d?u.reveal(d):void 0);return e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-architecture-select]`);n?.dataset.architectureSelect&&u.reveal(n.dataset.architectureSelect);let r=t.closest(`[data-architecture-copy]`);r&&Ic(r,c,l)}),f}return{show:i}}function jc(){let e=ge(window.location.hash,`architecture`);window.location.hash!==e&&window.history.replaceState(window.history.state,``,e),window.location.reload()}async function Mc(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 jc();Pc(t,(await r.json().catch(()=>null))?.error??`Mapping could not start.`)}catch{Pc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}async function Nc(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 jc();Pc(t,`Mapping could not be stopped.`)}catch{Pc(t,`Could not reach PR Review Buddy. The workspace server may have stopped.`)}t.disabled=!1}}function Pc(e,t){let n=P(`p`,`prb-arch-error`,t);n.setAttribute(`data-architecture-error`,``),n.setAttribute(`role`,`alert`),e.after(n)}function Fc(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}=Dc(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(),kc)};window.setTimeout(()=>void r(),kc)}async function Ic(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=>wc(e.architecture,[null,...r(e.architecture)])).join(`
|
|
182
|
+
`),a=e.textContent;try{await navigator.clipboard.writeText(i),e.textContent=`Copied`}catch{e.textContent=`Couldn't copy`}window.setTimeout(()=>e.textContent=a,2e3)}var Lc=class{parts;drawing=null;shown;constructor(e){this.parts=e,this.shown=e.repository}async draw(e,t=null){let{canvas:n,inspector:r,trail:i,embedded:a}=this.parts,o;try{o=await w(()=>import(`./chunk-CMZKCXl2.js`),[])}catch{return Bc(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&&zc(i,e.architecture,t,c,this.base()),this.hint()},affected:new Set(a.touched?.[e.scope]??[])}),t===null?i&&zc(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),Bc(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(...Rc(this.shown.scope,this.shown.changed,this.parts.embedded)),t.push(P(`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;Vc(t,this.shown,e,e=>void this.drawing?.showScope(e),e=>{let t=[];if(n.touched?.[this.shown.scope]?.includes(e.id)&&t.push(P(`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=P(`button`,`prb-arch-open`,`Open ${e.name} in depth`);r.type=`button`,r.addEventListener(`click`,()=>void this.draw(a));let i=Rc(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(P(`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(P(`p`,`prb-arch-error`,`Mapping this part in depth failed. ${r.message}`));let i=P(`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=P(`details`,`prb-arch-failure-details`,``),n=P(`ul`,``,``);for(let e of r.errors)n.append(P(`li`,``,e));e.append(P(`summary`,``,`What the checks found`),n),t.push(e)}}return t})}};function Rc(e,t,n){let r=t?[P(`p`,`prb-arch-meta prb-arch-changed`,t)]:[];if(n.running?.includes(e))return[...r,P(`p`,`prb-arch-meta`,`Mapping this part in depth again…`)];let i=n.failures?.[e],a=P(`button`,`prb-diagram-redraw`,`Remap this part`);return a.type=`button`,a.dataset.architectureMap=e,[...r,...i?[P(`p`,`prb-arch-error`,`Remapping this part failed. ${i.message}`)]:[],a]}function zc(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?[]:[...ac(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=P(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]:[P(`span`,`prb-arch-crumb-sep`,`›`),r]}))}function Bc(e,t){let n=document.createElement(`p`);n.className=`prb-arch-status`,n.textContent=t,e.replaceChildren(n)}function Vc(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=P(`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=[P(`p`,`prb-arch-kind`,`${Oc[c.kind]??c.kind}${c.parent?` in ${s(c.parent)}`:``}`),P(`h4`,`prb-arch-title`,c.name)];c.description&&l.push(P(`p`,`prb-arch-text`,c.description));let u=a.nodes.filter(e=>e.parent===c.id).length;if(u>0&&r){let e=P(`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(Hc(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(P(`h5`,`prb-arch-subhead`,`Relationships`));let e=P(`ul`,`prb-arch-related`,``);for(let t of d)e.append(P(`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(P(`p`,`prb-arch-kind`,`${l.length} relationships behind this arrow`));for(let e of l){let n=P(`section`,`prb-arch-relationship`,``);n.append(P(`p`,`prb-arch-kind`,`Relationship`),P(`h4`,`prb-arch-title`,`${s(e.source)} ${e.label} ${s(e.target)}`)),e.description&&n.append(P(`p`,`prb-arch-text`,e.description)),e.confidence!==void 0&&n.append(P(`p`,`prb-arch-meta`,`Inferred, with ${Math.round(e.confidence*100)}% confidence`)),n.append(Hc(e.evidence,t.evidence[e.id])),c.push(n)}e.replaceChildren(...c)}function Hc(e,t=[]){let n=P(`div`,`prb-arch-evidence`,``);n.append(P(`h5`,`prb-arch-subhead`,`Evidence`));let r=P(`ul`,`prb-arch-evidence-list`,``);return e.forEach((e,n)=>{let i=P(`li`,``,``),a=t[n];if(a&&a.state!==`missing`){let t=P(`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(P(`span`,`prb-arch-gone`,`The quoted code has changed; this opens ${e.symbol}`))}else i.append(P(`span`,`prb-arch-location`,e.path),P(`span`,`prb-arch-gone`,`No longer found in this checkout`));i.append(P(`code`,`prb-arch-quote`,e.quote)),e.note&&i.append(P(`span`,`prb-arch-note`,e.note)),r.append(i)}),n.append(r),n}function P(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r}function Uc(e,t){let n=t,r=null,i=!1,a=async()=>{let t=null;do{i=!1;let r=e.current(),a=await e.send(r);a===null&&(n=r),t=a}while(i);if(t===null)return;let r=await e.read();if(r!==null&&(n=r),i)return a();e.paint(n),e.fail(t)};return{changed:()=>{if(r){i=!0;return}r=a().finally(()=>{r=null})},idle:async()=>{for(;r;)await r}}}var Wc=5e3;function Gc(e,t=document,n=window){let r=()=>t.visibilityState===`visible`,a=async()=>{try{let n=await(await e.markSeen()).json();d(t,n.unread),i(t,n.running)}catch{}},o=async()=>{try{if(r()){let n=await(await e.askUnread()).json();i(t,n.running),typeof n.here==`number`&&n.here>0&&r()?await a():d(t,n.unread)}}catch{}n.setTimeout(()=>void o(),Wc)};t.addEventListener(`visibilitychange`,()=>{r()&&a()}),r()&&a(),n.setTimeout(()=>void o(),Wc)}function Kc(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}var qc=1e3,Jc=new WeakMap;function Yc(e,t){return e.length<=1e3?Kc(e)||` `:`${Kc(e.slice(0,qc))}\u2026 <button type="button" class="prb-code-long-toggle" data-full-line="${t}">Show full line</button>`}function Xc(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">${Yc(e.text,`old:${e.oldLine}`)}</td></tr>`).join(``)}function Zc(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?Xc(c):``}<tr class="${s}" data-line="${o}"><td class="prb-code-num">${o}</td><td class="prb-code-line">${Yc(i,`new:${o}`)}</td></tr>`}),a=r.get(e.totalLines+1);return a&&e.to===e.totalLines&&i.push(Xc(a)),i.join(``)}function Qc(e){let t=e.getAttribute(`aria-expanded`)!==`true`;e.setAttribute(`aria-expanded`,String(t));let n=e.closest(`tr`)?.nextElementSibling;for(;n?.classList.contains(`prb-code-deleted`);)n.hidden=!t,n=n.nextElementSibling}function $c(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&&Jc.set(r,o)}}function el(e){let t=Jc.get(e),n=e.closest(`td`);return t===void 0||!n?null:(n.textContent=t,n)}function tl(e){return e.deletion?2*e.line-1:2*e.line}function nl(e){return e%2==1?{line:(e+1)/2,deletion:!0}:{line:e/2,deletion:!1}}function rl(e,t){if(e.length===0)return``;let n=e.map(tl),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}">
|
|
183
183
|
<button type="button" class="prb-code-nav-step" data-change-step="previous"${i?``:` disabled`}>\u2191 Previous</button>
|
|
184
184
|
<span class="prb-code-nav-count" aria-live="polite">${s}</span>
|
|
185
185
|
<button type="button" class="prb-code-nav-step" data-change-step="next"${a?``:` disabled`}>Next \u2193</button>
|
|
186
|
-
</span>`}function rl(e,t){let n=(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number),r=Number(e.dataset.changePosition)||0,i=t===`next`?n.find(e=>e>r):[...n].reverse().find(e=>e<r);return i===void 0?null:{key:i,anchor:tl(i)}}function il(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function al(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(tl)}function ol(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?tl(t):void 0}function sl(e,t){return Math.max(e,+!t)+1}var cl=8;function ll(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)return t}return null}function ul(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function dl(e){let t=e.getBoundingClientRect().top;for(let n of e.querySelectorAll(`tr`)){let e=n.getBoundingClientRect();if(e.bottom>t)return{row:n,offset:e.top-t}}return null}function fl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function pl(e){if(!e.hasAttribute(`data-expanded`))return;let t=ll(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=ul({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function ml(e){let t=e.querySelector(`[data-code-expand]`),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=e.hasAttribute(`data-expanded`);t.hidden=!r&&n.scrollHeight<=n.clientHeight,t.textContent=r?`Collapse`:`Expand`,t.setAttribute(`aria-expanded`,String(r))}var hl=!1;function gl(){hl||(hl=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))pl(e)}))}function _l(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?dl(n):null;t?(e.setAttribute(`data-expanded`,``),pl(e),gl()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),ml(e),n&&r&&fl(n,r);let i=t?ll(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-cl)}var vl={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},yl=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],bl=`#tour`,P=16,F=6,xl=380,Sl=260;function Cl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:yl.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function wl(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,P,i-n-P),left:a((r-t)/2,P,r-t-P)};if(!e)return o;let s=a(e.top,P,i-n-P);if(e.right+P+t<=r-P)return{top:s,left:e.right+P};if(e.left-P-t>=P)return{top:s,left:e.left-P-t};let c=a(e.left,P,r-t-P);return e.bottom+P+n<=i-P?{top:e.bottom+P,left:c}:e.top-P-n>=P?{top:e.top-P-n,left:c}:{top:a(i-n-P,P,i-n-P),left:o.left}}function Tl(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function El(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function Dl(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(El(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(El(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function Ol(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function kl(e,t,n){let r=Cl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=Ol(e,`prb-tour-skip`,`Skip tour`),h=Ol(e,`prb-tour-back`,`Back`),g=Ol(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},ee=!1,b=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?Tl(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-F,0),t=Math.max(o.left-F,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+F,u)-t}px`,c.style.height=`${Math.min(o.bottom+F,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-F-32,u-o.right-F-32):0;l.style.width=`${f>=Sl?Math.min(xl,f):Math.min(xl,u-32)}px`;let p=l.getBoundingClientRect(),m=wl(o&&{top:o.top-F,left:o.left-F,bottom:o.bottom+F,right:o.right+F},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},x=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=Dl(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:vl.title,p.replaceChildren(...(i?i.body:vl.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,b(),g.focus({focusVisible:n})},S=r=>{if(!ee){ee=!0,y(),t.removeEventListener(`resize`,b),e.removeEventListener(`scroll`,b,!0),e.removeEventListener(`transitionend`,b,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):x(v+1,e.detail===0)),h.addEventListener(`click`,e=>x(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,b),e.addEventListener(`scroll`,b,!0),e.addEventListener(`transitionend`,b,!0),s.showModal(),x(-1,!1),{close:()=>S(`dismissed`)}}var Al={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function jl(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=Al[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=Ol(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function Ml(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:kl(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(jl(e,r),r):`started`}var Nl={rb:`ruby`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,ts:`typescript`,mts:`typescript`,cts:`typescript`,jsx:`jsx`,tsx:`tsx`,json:`json`,yml:`yaml`,yaml:`yaml`,md:`markdown`,html:`html`,css:`css`,scss:`scss`,sql:`sql`,py:`python`,java:`java`,kt:`kotlin`,kts:`kotlin`,go:`go`,rs:`rust`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,tf:`terraform`,tfvars:`terraform`};function Pl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Nl[t.slice(n+1).toLowerCase()]??null}function Fl(e){let t=new Set;for(let n of e){let e=Pl(n);e&&t.add(e)}return[...t]}var Il={ruby:()=>w(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>w(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>w(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>w(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>w(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>w(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>w(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>w(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>w(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>w(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>w(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>w(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>w(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>w(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>w(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>w(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>w(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>w(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>w(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>w(()=>import(`./chunk-DswuEJGm.js`),[])},Ll=`github-light-default`,Rl=null,zl=new Map;function Bl(){return Rl??=Promise.all([w(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),w(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),w(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(w(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),Rl}function Vl(e){let t=zl.get(e);return t||(t=Bl().then(async t=>t?(await t.loadLanguage(Il[e]),!0):!1).catch(()=>!1),zl.set(e,t)),t.then(e=>e?Bl():null)}var Hl={async preload(e){await Vl(e)},async tokenize(e,t){let n=await Vl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Ll}),a=i?.toLowerCase();return r.map(e=>e.map(e=>({content:e.content,...e.color&&e.color.toLowerCase()!==a?{color:e.color}:{}})))}catch{return null}}};function Ul(e,t=Hl){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Wl=/^#[0-9a-f]{3,8}$/i;function Gl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Wl.test(e.color)?`<span style="color:${e.color}">${Gc(e.content)}</span>`:Gc(e.content)).join(``)}function Kl(e){return e.length>1e3?e.slice(0,Kc):e}function ql(e,t,n){if(!e||t===``)return;let r=Gl(Kl(t),n);if(r===null)return;if(t.length<=1e3){if(e.childElementCount!==0||e.textContent!==t)return;e.innerHTML=r;return}let i=e.querySelector(`[data-full-line]`);i&&(e.innerHTML=`${r}… `,e.append(i))}async function Jl(e,t,n=Hl){let r=Pl(t.path);if(!r){delete e.dataset.syntax;return}e.dataset.syntax=r;let i=e.querySelector(`tbody`);if(!i)return;let a=()=>i.isConnected&&e.querySelector(`tbody`)===i,o=await n.tokenize(t.lines.map(Kl).join(`
|
|
187
|
-
`),r);if(a()){o&&t.lines.forEach((e,n)=>{
|
|
188
|
-
`),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;
|
|
186
|
+
</span>`}function il(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:nl(i)}}function al(e,t){return e.querySelector(t.deletion?`tr[data-before-line="${t.line}"]`:`tr[data-line="${t.line}"]`)}function ol(e){return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).map(nl)}function sl(e){if(!e)return;let t=Number(e.dataset.changePosition)||0;return(e.dataset.changeKeys??``).split(`,`).filter(Boolean).map(Number).includes(t)?nl(t):void 0}function cl(e,t){return Math.max(e,+!t)+1}var ll=8;function ul(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 dl(e){let t=e.panel-e.scroller;return Math.max(340,Math.floor(e.pane-t-16))}function fl(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 pl(e,t){let n=t.row.getBoundingClientRect().top-e.getBoundingClientRect().top-t.offset;e.scrollTop+=n}function ml(e){if(!e.hasAttribute(`data-expanded`))return;let t=ul(e),n=e.querySelector(`.prb-code-scroll`);if(!t||!n)return;let r=dl({pane:t.clientHeight,panel:e.offsetHeight,scroller:n.offsetHeight});e.style.setProperty(`--prb-code-expanded`,`${r}px`)}function hl(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 gl=!1;function _l(){gl||(gl=!0,window.addEventListener(`resize`,()=>{for(let e of document.querySelectorAll(`.prb-code[data-expanded]`))ml(e)}))}function vl(e,t){let n=e.querySelector(`.prb-code-scroll`),r=n?fl(n):null;t?(e.setAttribute(`data-expanded`,``),ml(e),_l()):(e.removeAttribute(`data-expanded`),e.style.removeProperty(`--prb-code-expanded`)),hl(e),n&&r&&pl(n,r);let i=t?ul(e):null;i&&(i.scrollTop+=e.getBoundingClientRect().top-i.getBoundingClientRect().top-ll)}var yl={title:`Start with understanding`,body:[`Welcome to PR Review Buddy.`,`Code review isn't just about finding bugs. It's about understanding what changed, why it changed, and whether it makes sense.`,`Let's walk through your first review.`]},bl=[{id:`story`,title:`The story behind the change`,body:[`Start here to understand why this change may have been made, what's changing, and the evidence behind the analysis.`,`It's your starting point, not the final verdict.`],target:{from:`.prb-view[data-view="overview"]`,to:`[data-tour="whats-changing"]`},reveal:`overview`},{id:`focus`,title:`Know where to focus`,body:[`Get a quick picture of the review's risk, issues, questions and affected files.`,`Use these signals to decide where to spend your attention, not as a substitute for reading the code.`],target:{from:`[data-tour="risk"]`,to:`[data-tour="stats"]`},reveal:`overview`},{id:`path`,title:`A path through the change`,body:[`Not sure where to begin? Follow the suggested review path.`,`It breaks the change into themes so you can explore the important parts in a more useful order.`],target:{from:`[data-tour="suggested-path"]`},reveal:`overview`},{id:`diagrams`,title:`See how the pieces fit`,body:[`Diagrams help you visualise the architecture and relationships involved in a change.`,`Use them to build context before diving into individual files.`],target:{from:`.prb-rail [data-view-nav="map"]`},reveal:`rail`},{id:`issues`,title:`Investigate, don't just accept`,body:[`Potential issues are starting points for investigation.`,`Examine the evidence, challenge the reasoning and decide whether each finding genuinely matters.`],target:{from:`.prb-rail [data-view-nav="issues"]`},reveal:`rail`},{id:`questions`,title:`Look beyond obvious problems`,body:[`Some changes need clarification rather than a fix.`,`Questions help you identify assumptions, missing context and decisions worth discussing with the author.`],target:{from:`.prb-rail [data-view-nav="questions"]`},reveal:`rail`},{id:`files`,title:`Get back to the code`,body:[`Explore the changed files and inspect the implementation yourself.`,`AI analysis helps direct your attention, but the code remains the source of truth.`],target:{from:`.prb-rail [data-view-nav="files"]`},reveal:`rail`},{id:`ask`,title:`Keep asking why`,body:[`Need a deeper explanation? Ask Buddy AI about the change, a finding or something you don't understand.`,`You can challenge its conclusions or ask it to explain things more simply.`],target:{from:`#prb-ask`},reveal:`ask`},{id:`judgement`,title:`Your judgement matters`,body:[`When you've investigated the change, use the review status to track your progress.`,`PR Review Buddy supports your judgement. It doesn't make the approval decision for you.`],target:{from:`[data-page-status]`},reveal:`none`}],xl=`#tour`,F=16,I=6,Sl=380,Cl=260;function wl(e){return e.querySelector(`.prb-rail[data-stale]`)?[]:bl.filter(t=>e.querySelector(t.target.from)&&(!t.target.to||e.querySelector(t.target.to)))}function Tl(e,t,n,r,i){let a=(e,t,n)=>Math.max(t,Math.min(e,Math.max(t,n))),o={top:a((i-n)/2,F,i-n-F),left:a((r-t)/2,F,r-t-F)};if(!e)return o;let s=a(e.top,F,i-n-F);if(e.right+F+t<=r-F)return{top:s,left:e.right+F};if(e.left-F-t>=F)return{top:s,left:e.left-F-t};let c=a(e.left,F,r-t-F);return e.bottom+F+n<=i-F?{top:e.bottom+F,left:c}:e.top-F-n>=F?{top:e.top-F-n,left:c}:{top:a(i-n-F,F,i-n-F),left:o.left}}function El(e,t){let n=e.getBoundingClientRect(),r=(t??e).getBoundingClientRect();return{top:n.top,bottom:Math.max(n.top,r.bottom),left:Math.min(n.left,r.left),right:Math.max(n.right,r.right)}}function Dl(e,t){let n=t.map(t=>[t,e.getAttribute(t)]);return()=>{for(let[t,r]of n)r===null?e.removeAttribute(t):e.setAttribute(t,r)}}function Ol(e,t){let n=[];if(t===`rail`){let t=e.documentElement;n.push(Dl(t,[`data-sidebar-hidden`,`data-sidebar-peek`])),t.removeAttribute(`data-sidebar-hidden`),t.hasAttribute(`data-sidebar-compact`)&&t.setAttribute(`data-sidebar-peek`,``)}if(t===`ask`){let t=e.querySelector(`.prb-body`);t&&t.getAttribute(`data-ask`)!==`open`&&(n.push(Dl(t,[`data-ask`])),t.setAttribute(`data-ask`,`open`))}return()=>{for(let e of n.reverse())e()}}function kl(e,t,n){let r=e.createElement(`button`);return r.type=`button`,r.className=t,r.textContent=n,r}function Al(e,t,n){let r=wl(e);if(r.length===0||e.querySelector(`dialog.prb-tour`))return null;let i=e.activeElement,a=[e.querySelector(`.prb-doc`),e.querySelector(`.prb-rail`)].map(e=>[e,e?.scrollTop??0]),o=n.host.enterTour(),s=e.createElement(`dialog`);s.className=`prb-tour`,s.setAttribute(`aria-labelledby`,`prb-tour-title`),s.setAttribute(`aria-describedby`,`prb-tour-text`);let c=e.createElement(`div`);c.className=`prb-tour-spot`,c.setAttribute(`aria-hidden`,`true`);let l=e.createElement(`div`);l.className=`prb-tour-card`;let u=e.createElement(`div`);u.className=`prb-tour-words`,u.setAttribute(`aria-live`,`polite`);let d=e.createElement(`p`);d.className=`prb-tour-count`;let f=e.createElement(`h2`);f.className=`prb-tour-title`,f.id=`prb-tour-title`;let p=e.createElement(`div`);p.className=`prb-tour-text`,p.id=`prb-tour-text`,u.append(d,f,p);let m=kl(e,`prb-tour-skip`,`Skip tour`),h=kl(e,`prb-tour-back`,`Back`),g=kl(e,`prb-tour-next`,`Next`),_=e.createElement(`div`);_.className=`prb-tour-actions`,_.append(m,h,g),l.append(u,_),s.append(c,l),e.body.append(s);let v=-1,y=()=>{},ee=!1,b=()=>{let n=r[v],i=n?e.querySelector(n.target.from):null,a=i?El(i,n?.target.to?e.querySelector(n.target.to):null):null,o=a&&a.bottom>a.top&&a.right>a.left?a:null,u=t.innerWidth,d=t.innerHeight;if(s.toggleAttribute(`data-spotless`,!o),o){let e=Math.max(o.top-I,0),t=Math.max(o.left-I,0);c.hidden=!1,c.style.top=`${e}px`,c.style.left=`${t}px`,c.style.width=`${Math.min(o.right+I,u)-t}px`,c.style.height=`${Math.min(o.bottom+I,d)-e}px`}else c.hidden=!0;let f=o?Math.max(o.left-I-32,u-o.right-I-32):0;l.style.width=`${f>=Cl?Math.min(Sl,f):Math.min(Sl,u-32)}px`;let p=l.getBoundingClientRect(),m=Tl(o&&{top:o.top-I,left:o.left-I,bottom:o.bottom+I,right:o.right+I},p.width,p.height,u,d);l.style.top=`${m.top}px`,l.style.left=`${m.left}px`},x=(t,n)=>{y(),y=()=>{},v=t;let i=r[v];if(s.toggleAttribute(`data-welcome`,!i),i){y=Ol(e,i.reveal);let t=e.querySelector(i.target.from);(i.target.to?e.querySelector(i.target.to):null)?.scrollIntoView({block:`nearest`}),t?.scrollIntoView({block:`nearest`})}d.textContent=i?`Step ${v+1} of ${r.length}`:`Welcome`,f.textContent=i?i.title:yl.title,p.replaceChildren(...(i?i.body:yl.body).map(t=>{let n=e.createElement(`p`);return n.textContent=t,n})),h.hidden=!i,g.textContent=i?v===r.length-1?`Finish`:`Next`:`Start tour`,b(),g.focus({focusVisible:n})},S=r=>{if(!ee){ee=!0,y(),t.removeEventListener(`resize`,b),e.removeEventListener(`scroll`,b,!0),e.removeEventListener(`transitionend`,b,!0),s.open&&s.close(),s.remove(),o();for(let[e,t]of a)e&&(e.scrollTop=t);n.mode===`first`&&n.host.save(r),i?.isConnected&&i.focus({focusVisible:!1})}};return g.addEventListener(`click`,e=>v===r.length-1?S(`completed`):x(v+1,e.detail===0)),h.addEventListener(`click`,e=>x(v-1,e.detail===0)),m.addEventListener(`click`,()=>S(`dismissed`)),s.addEventListener(`cancel`,()=>S(`dismissed`)),s.addEventListener(`close`,()=>S(`dismissed`)),s.addEventListener(`keydown`,t=>{if(t.key!==`Tab`)return;let n=[m,h,g].filter(e=>!e.hidden),r=n.indexOf(e.activeElement);t.preventDefault(),n[(r+(t.shiftKey?n.length-1:1))%n.length]?.focus()}),t.addEventListener(`resize`,b),e.addEventListener(`scroll`,b,!0),e.addEventListener(`transitionend`,b,!0),s.showModal(),x(-1,!1),{close:()=>S(`dismissed`)}}var jl={busy:`This review is being analysed or updated right now, so what the tour would point at is about to change. Replay it once that finishes, or from Help, which opens a review the tour can start on.`,empty:`This review has no completed analysis for the tour to walk through. Replay it from Help, which opens a review the tour can start on.`};function Ml(e,t){let n=e.activeElement,r=e.createElement(`dialog`);r.className=`prb-dialog`,r.setAttribute(`data-tour-unavailable`,t),r.setAttribute(`aria-labelledby`,`prb-tour-unavailable-title`);let i=e.createElement(`h2`);i.id=`prb-tour-unavailable-title`,i.textContent=`The guided tour can't start here`;let a=e.createElement(`p`);a.textContent=jl[t];let o=e.createElement(`div`);o.className=`prb-dialog-actions`;let s=kl(e,`prb-dialog-primary`,`OK`);return s.addEventListener(`click`,()=>r.close()),o.append(s),r.append(i,a,o),r.addEventListener(`close`,()=>{r.remove(),n?.isConnected&&n.focus({focusVisible:!1})}),e.body.append(r),r.showModal(),s.focus(),r}function Nl(e,t,n){let r=e.body.hasAttribute(`data-tour-busy`)||e.querySelector(`.prb-rail[data-stale]`)!==null?`busy`:Al(e,t,{mode:`replay`,host:n})?null:`empty`;return r?(Ml(e,r),r):`started`}var Pl={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 Fl(e){let t=e.slice(e.lastIndexOf(`/`)+1);if(t===`Dockerfile`||t.startsWith(`Dockerfile.`))return`docker`;let n=t.lastIndexOf(`.`);return n<=0?null:Pl[t.slice(n+1).toLowerCase()]??null}function Il(e){let t=new Set;for(let n of e){let e=Fl(n);e&&t.add(e)}return[...t]}var Ll={ruby:()=>w(()=>import(`./chunk-CAnKkQXq.js`),__vite__mapDeps([20,21,22,23,24,25,26,27,28,29,30])),javascript:()=>w(()=>import(`./chunk-D2pwppYQ.js`),__vite__mapDeps([31,22])),typescript:()=>w(()=>import(`./chunk-Cjc271yU.js`),__vite__mapDeps([32,27])),jsx:()=>w(()=>import(`./chunk-B2PgDgse.js`),__vite__mapDeps([33,25])),tsx:()=>w(()=>import(`./chunk-D95j_xjm.js`),__vite__mapDeps([34,28])),json:()=>w(()=>import(`./chunk-qhed-kSA.js`),[]),yaml:()=>w(()=>import(`./chunk-Cv3JjNkX.js`),__vite__mapDeps([35,30])),markdown:()=>w(()=>import(`./chunk-BYOwaDjH.js`),[]),html:()=>w(()=>import(`./chunk-EIJEcyW-.js`),__vite__mapDeps([36,23,21,22])),css:()=>w(()=>import(`./chunk-C3nvJp0N.js`),__vite__mapDeps([37,21])),scss:()=>w(()=>import(`./chunk-D2NZorQR.js`),__vite__mapDeps([38,21])),sql:()=>w(()=>import(`./chunk-NzFayA7r.js`),__vite__mapDeps([39,26])),python:()=>w(()=>import(`./chunk-gzcpVVnB.js`),[]),java:()=>w(()=>import(`./chunk-AdYjtsZU.js`),__vite__mapDeps([40,24])),kotlin:()=>w(()=>import(`./chunk-DhhofPvG.js`),[]),go:()=>w(()=>import(`./chunk-rLFTqkRN.js`),[]),rust:()=>w(()=>import(`./chunk-Cfkwpbl8.js`),[]),shellscript:()=>w(()=>import(`./chunk-pNSm1SyV.js`),__vite__mapDeps([41,29])),docker:()=>w(()=>import(`./chunk-IyjqRm3v.js`),[]),terraform:()=>w(()=>import(`./chunk-DswuEJGm.js`),[])},Rl=`github-light-default`,zl=null,Bl=new Map;function Vl(){return zl??=Promise.all([w(()=>import(`./chunk-c-cg1wCO.js`),__vite__mapDeps([42,4])),w(()=>import(`./chunk-CBrdyqSx.js`),__vite__mapDeps([43,4])),w(()=>import(`./chunk-BXViO-2h.js`),[])]).then(([{createHighlighterCore:e},{createOnigurumaEngine:t},n])=>e({themes:[n.default],langs:[],engine:t(w(()=>import(`./chunk-BnjxR4X6.js`),[]))})).catch(()=>null),zl}function Hl(e){let t=Bl.get(e);return t||(t=Vl().then(async t=>t?(await t.loadLanguage(Ll[e]),!0):!1).catch(()=>!1),Bl.set(e,t)),t.then(e=>e?Vl():null)}var Ul={async preload(e){await Hl(e)},async tokenize(e,t){let n=await Hl(t);if(!n)return null;try{let{tokens:r,fg:i}=n.codeToTokens(e,{lang:t,theme:Rl}),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 Wl(e,t=Ul){return Promise.all(e.map(e=>t.preload(e))).then(()=>void 0)}var Gl=/^#[0-9a-f]{3,8}$/i;function Kl(e,t){return!t||t.map(e=>e.content).join(``)!==e?null:t.map(e=>e.color&&Gl.test(e.color)?`<span style="color:${e.color}">${Kc(e.content)}</span>`:Kc(e.content)).join(``)}function ql(e){return e.length>1e3?e.slice(0,qc):e}function Jl(e,t,n){if(!e||t===``)return;let r=Kl(ql(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=Ul){let r=Fl(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(ql).join(`
|
|
187
|
+
`),r);if(a()){o&&t.lines.forEach((e,n)=>{Jl(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=>ql(e.text)).join(`
|
|
188
|
+
`),r);if(!a())return;if(!t)continue;let o=i.querySelector(`tr[data-before-line="${e.beforeLine}"]`)?.nextElementSibling;for(let[n,r]of e.lines.entries()){if(!o?.classList.contains(`prb-code-deleted`))break;Jl(o.querySelector(`.prb-code-line`),r.text,t[n]),o=o.nextElementSibling}}}}async function Xl(e,t=Ul){let n=e.closest(`.prb-code`)?.dataset.syntax,r=e.textContent??``;if(!n||!(n in Ll)||r===``)return;let i=await t.tokenize(r,n);if(!e.isConnected||e.childElementCount!==0||e.textContent!==r)return;let a=Kl(r,i?.[0]);a!==null&&i?.length===1&&(e.innerHTML=a)}var L=s({ownsRestore:!0}),Zl=document.body,Ql=Zl.dataset.apiBase??``,$l=Zl.dataset.token??``,eu=Zl.dataset.editorLabel??``,tu=Zl.dataset.editorTemplate??``,nu=Zl.dataset.repoPath??``,ru=Zl.dataset.explainPrompt??``,iu=Zl.dataset.sessionId??``;function R(e){return`${Ql}${e}?t=${encodeURIComponent($l)}`}var au=!1,ou=0,su=!1;function cu(e){ou++;try{e()}finally{ou--}}var lu=Ur(document.querySelector(`.prb-body`)?.dataset.reviewLayout),uu=Wr(lu,e=>{fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reviewLayout:e})}).catch(()=>{})},()=>au&&ou===0);function du(e){fetch(R(`/event`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),keepalive:!0}).catch(()=>{})}var fu=Lo({endpoint:R,showDiagrams:()=>Du(`diagram`),showMap:()=>Du(`map`),showChangeMap:e=>pu.show(e)}),pu=Rs({endpoint:R,showView:e=>Du(e)}),mu=Ac({endpoint:R}),hu=null,gu=`the whole change`;function _u(e){let t=C(e,bu),n=L.push(ie(t),t);vu++,xu(t),n&&yu(t)}var vu=0;function yu(e){let t=(e.kind===`section`?document.querySelector(`.prb-rail [data-goto-section="${CSS.escape(e.sectionId)}"] .prb-rail-title`):document.querySelector(`.prb-rail [data-view-nav="${CSS.escape(e.view)}"] .prb-rail-title`))?.textContent?.trim();t&&o(document,t)}var z=null,bu=document.querySelector(`[data-guide-start]`)?.dataset.guideStart??null;function xu(e){let t=C(e,bu);if(t!==e){let{kind:e,view:n,focus:r,...i}=x(history.state);L.replace(ie(t),{...i,...t})}let n=!z||!re(z,t);z=t,n&&(t.kind===`view`?ku(t.view):Nu(t.sectionId)),Tu(t.focus??null)}var Su={history:{get state(){return history.state},pushState:(e,t,n)=>{vu++,L.push(n,x(e))},replaceState:(e,t,n)=>L.replace(n,x(e)),back:()=>{su=!0,history.back()}},apply:xu},B=ye(document,{onOpen:e=>e.hasAttribute(`data-ask-buddy-menu`)?mf(e):hf(e),onClose:hf}),Cu={post:async e=>{let t=await fetch(R(`/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=>B.close(e),onVerdictClosed:(e,t)=>{let n=e.querySelector(`[data-question-answered], [data-issue-dismissed]`);if(n){if(n.dataset.questionAnswered!==void 0)pd(e,t||n.dataset.answered===`true`,`questions`),yd();else{let r=n.dataset.dismissed===`true`&&n.dataset.stale!==`true`;pd(e,t||r||n.dataset.settled===`true`,`issues`),xd()}}}};hr(document,Cu);var wu=document.querySelector(`[data-view="issues"]`);wu&&Mr(wu,(e,t)=>uu.issueFold(e,t));function Tu(e){se(document.querySelector(`.prb-body`),document,e),uu.focus(e),B.closeAll(),e===`buddy`&&Md()}function Eu(e){z&&(z.focus===e?ce(z,Su):pe(z,e,Su))}function Du(e,t={}){let n=t.keepFocus&&z?.focus?e:ve(e,z?.focus);_u({kind:`view`,view:e,...n?{focus:n}:{}})}function Ou(e){_u({kind:`section`,sectionId:e,...z?.focus===`guide`?{focus:`guide`}:{}})}function ku(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`&&du({event:`view_opened`,view:e}),e===`diagram`&&fu.drawPane(),e===`map`&&pu.layout(),e===`architecture`&&mu.show(),Au(),document.querySelector(`.prb-doc`)?.scrollTo({top:0})}function Au(){yi(),hu=null,gu=`the whole change`,Pu()}function ju(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,uu.fold(n.id,t))}function Mu(){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`)&&ju(e,!0)}}function Nu(e){ku(`guide`),Mu(),vi(e);let t=gi(e);if(!t)return;let n=document.querySelector(`[data-goto-section="${CSS.escape(e)}"]`);du({event:`theme_opened`,themeIndex:Number(n?.dataset.themeIndex??-1),attention:n?.querySelector(`.prb-attention`)?.dataset.attention??`medium`,isRecommendedStart:n?.dataset.recommendedStart===`true`}),hu=e,gu=t.querySelector(`.pr-helper-guide-section-title`)?.textContent?.trim()??`this theme`,Pu()}function Pu(){let e=document.querySelector(`[data-ask-scope]`);e&&(e.textContent=gu)}function V(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function Fu(e){return e.tagName===`LI`?{parent:e,position:`beforeend`}:{parent:e,position:`afterend`}}async function Iu(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}=Fu(e);o.insertAdjacentElement(s,a),e.setAttribute(`aria-expanded`,`true`),du({event:`file_opened`,fromFinding:i,targeted:r>0}),await Ru(a,n,{cited:r,centre:r,expand:0,position:r?2*r:0})}var Lu=Oi();function Ru(e,t,n){return Lu.run(e,n,async()=>{try{let{centre:r,expand:i}=n,a=`&path=${encodeURIComponent(t)}${r?`&line=${r}`:``}${i?`&expand=${i}`:``}`,o=await fetch(`${R(`/file`)}${a}`),s=await o.json();return o.ok?()=>zu(e,s,n):()=>{e.innerHTML=`<p class="prb-code-status">${V(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 zu(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=Zc(t,r),s=tu&&nu?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="${V(t.path)}" data-open-line="${r||t.from}">${V(`Open in ${eu||`editor`}`)}</button>`:``,c=t.pullRequest&&t.pullRequest.precise?`<a class="prb-code-open prb-code-pr" href="${V(t.pullRequest.href)}" target="_blank" rel="noopener noreferrer">${V(t.pullRequest.label)}</a>`:``,l=t.truncated?`<button type="button" class="prb-code-more" data-expand-file="${V(t.path)}" data-expand-line="${i||0}" data-expand-cited="${r||0}" data-expand-step="${cl(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>${V(t.sourceSha.slice(0,7))}</code>`:``}${u}${d}`:`Viewing your working folder${d}`}</span>${rl(t.changeAnchors??[],n.position)}</div>`,p=e.hasAttribute(`data-expanded`),m=`<button type="button" class="prb-code-open" data-code-expand aria-expanded="${p}">${p?`Collapse`:`Expand`}</button>`;e.innerHTML=`<div class="prb-code-header">
|
|
189
189
|
<span class="prb-code-range">lines ${t.from}\u2013${t.to} of ${t.totalLines}</span>
|
|
190
190
|
${c}
|
|
191
191
|
${s}
|
|
@@ -193,7 +193,7 @@ import{K as e,V as t,_t as n,a as r,c as i,ct as a,dt as o,ft as s,gt as c,ht as
|
|
|
193
193
|
</div>
|
|
194
194
|
${f}
|
|
195
195
|
<div class="prb-code-scroll"><table class="prb-code-table"><tbody>${o}</tbody></table></div>
|
|
196
|
-
${l}`,Qc(e,t),pl(e),ml(e),(n.focus?il(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Jl(e,t)}async function zu(e,t,n){let r=rl(t,n);if(!r)return;let i=il(e,r.anchor);if(i)t.outerHTML=nl(al(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Lu(e,t.dataset.expandFile,{cited:Number(t.dataset.expandCited)||0,centre:r.anchor.line,expand:Math.max(1,(Number(t.dataset.expandStep)||1)-1),position:r.key,focus:r.anchor})}let a=e.querySelector(`[data-change-step="${n}"]`),o=e.querySelector(`[data-change-step="${n===`next`?`previous`:`next`}"]`);(a&&!a.disabled?a:o)?.focus({preventScroll:!0})}function Bu(e,t,n){let r=`${tu.replace(/\/$/,``)}/${e}`,i=eu.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&uu({event:`editor_opened`,fromFinding:n}),window.location.href=i}var V=document.querySelector(`[data-ask-log]`);V&&V.querySelector(`.prb-msg`)&&V.scrollTo({top:V.scrollHeight});var Vu=document.querySelector(`[data-ask-form]`),H=Vu?.querySelector(`textarea`);function Hu(e,t){let n=document.createElement(`div`);return n.className=e===`user`?`prb-msg prb-msg-user`:`prb-msg prb-msg-${e===`error`?`error`:`assistant`}`,e===`assistant`?(n.classList.add(`prb-md`),n.innerHTML=it(t)+Mt(t)):n.textContent=t,V?.appendChild(n),V?.scrollTo({top:V.scrollHeight}),n}function Uu(e){if(!e||!V)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),V.appendChild(t.content)}async function Wu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await fr(t,Su)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Ju(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&Wu(r)});function Gu(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight}),e}var U=null,Ku=!!V?.querySelector(`[data-ask-pending]`);function qu(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,V?.appendChild(e),V?.scrollTo({top:V.scrollHeight})}async function Ju(e,t=`free_text`,n={}){let r=e.trim();if(!r||U||Ku)return;document.querySelector(`.prb-ask-empty`)?.remove(),Hu(`user`,r);let i=Gu();U=new AbortController,Xu(!0);try{let e=await fetch(L(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:mu,source:t,...n}),signal:U.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Yu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){qu();return}if(!e.ok||!a?.answer){Hu(`error`,a?.error??`Buddy AI did not answer. Check the terminal running PR Review Buddy.`);return}Hu(`assistant`,a.answer),typeof a.askedAt==`number`&&Uu(gr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&tr(document,a.explanation),a.reassessment?.card&&ar(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])ar(document,e,Su.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(qu(),Yu(r,n.continuesExplanation)):(Hu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Yu(r,n.continuesExplanation))}finally{U=null,Xu(!1)}}function Yu(e,t){!H||H.value||(H.value=e,Vp?.save(),t&&(W=W?.continues&&e.includes(W.text)?W:{text:e,source:`finding`,continues:t},Vp?.stage(W)))}function Xu(e){let t=Vu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(Zu))t.disabled=e;e&&z.closeAll(),e||H?.focus()}var Zu=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function Qu(){let e=Vu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(L(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{U?.abort()})}Vu?.addEventListener(`submit`,e=>{if(e.preventDefault(),U||Ku)return Qu();let t=H?.value??``;H&&(H.value=``),Vp?.clear();let n=rr(W,t);Ju(t,$u(t),n?{continuesExplanation:n}:{})}),Ku&&Xu(!0);var W=null;function $u(e){return W&&e.includes(W.text)?W.source:`free_text`}H?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),U||Ku)return;Vu?.requestSubmit()}}),H?.addEventListener(`input`,()=>{H&&(H.style.height=`auto`,H.style.height=`${Math.min(H.scrollHeight,140)}px`)});async function ed(e){try{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function td(e){return ed({answeredQuestionIds:e})}async function nd(){try{let e=await fetch(L(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function rd(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(ad(e,n),Jr(e))}}function id(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function ad(e,t){e.dataset.answered=String(t),e.textContent=t?`Mark as unanswered`:`Mark answered`;let n=e.closest(`[data-finding-card]`);n?.classList.toggle(`pr-helper-question-card-answered`,t),n&&fd(n,t||e.dataset.verdictClosed===`true`,`questions`),vd()}function od(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||ru})).filter(e=>e.id)}function sd(e){return ed({dismissedIssues:e})}function cd(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;fd(t,s,`issues`),bd()}}function ld(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=ru:delete e.dataset.dismissedIn;let n=e.closest(`[data-finding-card]`);n&&(n.classList.toggle(`pr-helper-issue-card-dismissed`,t),n.querySelector(`.pr-helper-dismissal-stale`)?.remove(),n.querySelector(`.pr-helper-finding-status-dismissed`)?.remove(),t&&n.querySelector(`.pr-helper-issue-badges`)?.prepend(ud()),fd(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),bd())}function ud(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Vn,e.textContent=`Dismissed by you`,e}var dd=new WeakMap;function fd(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&dd.set(e,{parent:t,before:e.nextElementSibling}),gd(n).append(e),t&&hd(t)}else pd(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();_d(n)}}function pd(e,t){let n=dd.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=dd.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=md(e)??Mr(document,e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function md(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function hd(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function gd(e){let t=document.querySelector(`[data-view="${e}"]`),n=t?.querySelector(`[data-closed-findings="${e}"] .pr-helper-closed-findings-list`);if(n)return n;let r=document.createElement(`details`);r.className=`pr-helper-closed-findings`,r.dataset.closedFindings=e;let i=document.createElement(`summary`);i.className=`pr-helper-closed-findings-summary`,i.setAttribute(`data-closed-findings-summary`,``);let a=document.createElement(`div`);return a.className=`pr-helper-closed-findings-list`,r.append(i,a),t?.append(r),a}function _d(e){let t=document.querySelector(`[data-closed-findings="${e}"]`),n=t?.querySelector(`[data-closed-findings-summary]`);if(!t||!n)return;let r=document.querySelectorAll(`[data-view="${e}"] [data-finding-card]`).length,i=t.querySelectorAll(`[data-finding-card]`).length;t.toggleAttribute(`data-nothing-open`,r===i),n.textContent=e===`questions`?`Answered (${i})`:ui(yd()),or(document)}function vd(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=di(e.length,t)),xd(`questions`,e.length,t,`question`,`answered`)}function yd(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function bd(){let e=yd();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`);t&&jr(t),xd(`issues`,e.total,e.open,`issue`,Gr(e))}function xd(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}var Sd=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:cd(e)}]));function Cd(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of Sd){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&ld(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??ru)!==r)&&(ld(e,!0),e.dataset.dismissedIn=r)}}var wd=e=>void r(y(),{kind:`failed`,text:e}),Td=Hc({current:id,send:td,read:async()=>(await nd())?.answered??null,paint:rd,fail:wd},id()),Ed=Hc({current:od,send:sd,read:async()=>(await nd())?.dismissed??null,paint:Cd,fail:wd},od());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){Au(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!l(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){Eu(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){Qr(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){ri(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){Eu(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Du(c.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){Bu(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){Zc(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&_l(e,!e.hasAttribute(`data-expanded`));return}let p=t.closest(`[data-change-step]`);if(p){let e=p.closest(`[data-change-navigator]`),t=p.closest(`.prb-code`);e&&t&&!p.disabled&&zu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=$c(m);e&&Yl(e);return}let h=t.closest(`[data-expand-file]`);if(h?.dataset.expandFile){let e=h.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Lu(e,h.dataset.expandFile,{cited:Number(h.dataset.expandCited)||0,centre:Number(h.dataset.expandLine)||0,expand:Number(h.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:ol(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){Tu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){ef(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){Fu(v);return}let y=pi(t);if(y){Du(y);return}let ee=t.closest(`[data-question-answered]`);if(ee?.dataset.questionAnswered){ad(ee,ee.dataset.answered!==`true`),Jr(ee);let e=id();Td.changed(),uu({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let b=t.closest(`[data-issue-dismissed]`);if(b?.dataset.issueDismissed){ld(b,b.dataset.stale===`true`||b.dataset.dismissed!==`true`);let e=od();Ed.changed(),uu({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let x=t.closest(`[data-suggestion]`);if(x){Ju(x.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){jd(),Ju(nu,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){tf(S.dataset.promptUse);return}let C=t.closest(`[data-prompt-edit]`);if(C?.dataset.promptEdit){Ef(C.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Ef(``);return}if(t.closest(`[data-ask-toggle]`)){let e=R?.focus;e?(ce(R,xu),kd(e!==`buddy`)):kd(!Od())}});var G=document.querySelector(`.prb-body`),Dd=document.querySelector(`.prb-ask`);function Od(){return!!Dd&&getComputedStyle(Dd).display!==`none`}function kd(e){G&&(G.dataset.ask=e?`open`:`closed`),Ad(e),lu.ask(e)}function Ad(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function jd(){R?.focus&&R.focus!==`buddy`&&ce(R,xu),kd(!0)}function Md(){Ad(Od())}window.addEventListener(`resize`,Md),ee(L(`/restart`));var Nd=document.querySelector(`[data-file-filter]`),Pd=document.querySelector(`[data-file-count]`),Fd=document.querySelector(`[data-file-none]`);function Id(){let e=(Nd?.value??``).trim().toLowerCase(),t=0,n=0;for(let r of document.querySelectorAll(`[data-view="files"] .prb-file`)){let i=e===``||(r.dataset.search??``).includes(e);r.hidden=!i,i&&(n+=1,r.classList.contains(`prb-file-referenced`)||(t+=1));let a=r.nextElementSibling;a?.classList.contains(`prb-code`)&&(a.hidden=!i)}for(let t of document.querySelectorAll(`[data-file-group]`)){let n=t.querySelectorAll(`.prb-file:not([hidden])`).length;t.hidden=n===0;let r=t.querySelector(`[data-group-heading]`);if(!r)continue;let i=Number(r.dataset.groupTotal)||0;r.textContent=e&&n!==i?`${r.dataset.groupHeading} · ${n} of ${i}`:`${r.dataset.groupHeading} · ${i}`}Fd&&(Fd.hidden=n>0),Pd&&(Pd.textContent=e?`${t} of ${Ld} file${Ld===1?``:`s`}`:`${Ld} file${Ld===1?``:`s`}`)}var Ld=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Nd?.addEventListener(`input`,Id),Nd?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Nd.value!==``&&(e.preventDefault(),Nd.value=``,Id())}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target,n=t.closest(`.prb-file[data-file][role="button"]`);!n||n!==t||(e.preventDefault(),Fu(n))});var Rd=320,zd=()=>Math.round(window.innerWidth/2),Bd=e=>Math.round(Math.min(zd(),Math.max(Rd,e)));function Vd(e){G&&(e===null?G.style.removeProperty(`--ask-width`):G.style.setProperty(`--ask-width`,`${e}px`))}function Hd(){return Dd?Math.round(Dd.getBoundingClientRect().width):Rd}function Ud(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var K=document.querySelector(`[data-ask-resize]`);K?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!G||!Dd)return;e.preventDefault(),K.setPointerCapture(e.pointerId),G.dataset.resizing=`true`;let t=e.clientX,n=Hd(),r=e=>{Vd(Bd(n+(t-e.clientX)))},i=()=>{K.removeEventListener(`pointermove`,r),K.removeEventListener(`pointerup`,i),K.removeEventListener(`pointercancel`,i),delete G.dataset.resizing,Ud(Hd())};K.addEventListener(`pointermove`,r),K.addEventListener(`pointerup`,i),K.addEventListener(`pointercancel`,i)}),K?.addEventListener(`keydown`,e=>{let t=e.shiftKey?64:16;if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=e.key===`ArrowLeft`?t:-t,r=Bd(Hd()+n);Vd(r),Ud(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Vd(null),Ud(null))}),K?.addEventListener(`dblclick`,()=>{Vd(null),Ud(null)}),window.addEventListener(`resize`,()=>{Od()&&G?.style.getPropertyValue(`--ask-width`)&&Vd(Bd(Hd()))});var Wd=3e4,Gd=document.visibilityState===`visible`?Date.now():null,Kd=0;function qd(){Gd!==null&&(Kd+=Date.now()-Gd,Gd=Date.now())}function Jd(){qd();let e=Math.round(Kd/1e3);return Kd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Gd=Date.now():(qd(),Gd=null)}),setInterval(()=>{let e=Jd();e>0&&uu({event:`workspace_heartbeat`,visibleSeconds:e})},Wd),window.addEventListener(`pagehide`,()=>{let e=L(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Jd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Yd=document.querySelector(`[data-prompt-bank]`),Xd=document.querySelector(`[data-prompt-list]`),q=Zd();function Zd(){try{let e=JSON.parse(Yd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function Qd(){if(!Xd)return;Xd.innerHTML=q.map(e=>`<span class="prb-bank-item">
|
|
197
|
-
<button type="button" class="prb-bank-use" data-prompt-use="${
|
|
198
|
-
<button type="button" class="prb-bank-edit" data-prompt-edit="${
|
|
199
|
-
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(q.length)),uf()}async function $d(e){let t=null;try{let n=await fetch(L(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);q=Array.isArray(r?.prompts)?r.prompts:q,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return Qd(),t}function ef(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Yd?.toggleAttribute(`data-collapsed`,e),Xd&&(Xd.hidden=e),fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function tf(e){let t=q.find(t=>t.id===e);!t||!H||(H.value=gi(H.value,t.prompt),jd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}var nf=document.querySelector(`.prb-doc`),rf=null,af=null;function of(){V&&(af?.(),af=Mn(V,{layout:`flat`,actions:Fn.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>df(e,`selection`,t)}))}var sf=`reassess`;function cf(e){let t=lf();if(!e)return t;let n={id:sf,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function lf(){return[...Nn.map(e=>({id:e.id,label:e.label})),...q.map(e=>({id:br(e.id),label:e.name,section:yr}))]}function uf(){nf&&(rf?.(),rf=Mn(nf,{triggerLabel:`Ask Buddy AI`,actions:lf(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>df(e,`selection`,t)}))}function df(e,t,n,r){Wr(e,{context:t,text:n},{savedPrompt:e=>q.find(t=>t.id===e)?.prompt??null,stage:e=>ff(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{jd(),Ju(t,`finding`,Qn(e,r?.ref))}})}function ff(e,t,n){H&&(W={text:e,source:t,...n?{continues:n}:{}},Vp?.stage(W),H.value=gi(H.value,e),jd(),H.focus(),H.setSelectionRange(H.value.length,H.value.length),H.dispatchEvent(new Event(`input`)))}function pf(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=Sn(cf(er(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(U||Ku)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function mf(e){let t=e.querySelector(`[data-menu-items]`),n=e.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!1),n&&(n.hidden=!0),e.querySelector(`[data-menu-error]`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-ask-buddy-menu] [data-selection-action]`),n=t?.closest(`[data-ask-buddy-menu]`),r=t?.dataset.selectionAction;if(!n||!r)return;let i=zn(n),a=er(n);if(z.close(n),r===sf){i&&a&&hf(a,i);return}i&&df(r,`finding`,i,a?{ref:a}:void 0)});function hf(e,t){if(U||Ku)return;let n=e.kind===`issue`?`severity`:`importance`;jd(),Ju(`${Ln(t,{maxChars:1/0})}\n\nReassess its ${n} in light of what we know now.`,`finding`,{reassesses:e})}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-reassessment-ask-more]`),n=t?mr(t):null;n&&ff(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=$n(t),r=zn(t);n&&r&&df(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),uf(),of();var J=ao({root:document,showView:e=>Eu(e)}),gf=ho({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>z.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>J.state().selecting,flip:e=>void J.flip(e)});Gt(document),on(document);var _f=document.querySelector(`[data-prompt-dialog]`),vf=document.querySelector(`[data-prompt-name]`),yf=document.querySelector(`[data-prompt-text]`),bf=document.querySelector(`[data-prompt-delete]`),xf=document.getElementById(`prb-prompt-title`),Sf=document.querySelector(`[data-prompt-error]`),Cf=document.querySelector(`[data-prompt-save]`);function wf(e){Sf&&(Sf.textContent=e??``,Sf.hidden=e===null)}var Tf=``;function Ef(e){let t=q.find(t=>t.id===e);Tf=t?.id??``,xf&&(xf.textContent=t?`Edit prompt`:`Save a prompt`),vf&&(vf.value=t?.name??``),yf&&(yf.value=t?.prompt??``),bf&&(bf.hidden=!t),wf(null),_f?.showModal(),vf?.focus()}async function Df(){let e=vf?.value.trim()??``,t=yf?.value.trim()??``;if(!e||!t){(e?yf:vf)?.focus();return}await kf(Tf?q.map(n=>n.id===Tf?{...n,name:e,prompt:t}:n):[...q,{id:crypto.randomUUID(),name:e,prompt:t}])}async function Of(){Tf&&await kf(q.filter(e=>e.id!==Tf))}async function kf(e){wf(null);let t=[Cf,bf].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await $d(e);for(let e of t)e.disabled=!1;if(n)return wf(n);_f?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>_f?.close()),bf?.addEventListener(`click`,()=>void Of()),Cf?.addEventListener(`click`,()=>void Df());var Y=document.querySelector(`[data-fresh-region]`),Af=document.querySelector(`[data-fresh-status]`),jf=document.querySelector(`[data-fresh-check]`),X=Hf(Y?.dataset.report),Mf=`prb-fresh-reopen`,Nf=Rf(),Pf=Y?.dataset.dismissedSha,Ff=Lf(Y?.dataset.availability),Z=If(Y?.dataset.remote);function If(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Lf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Rf(){try{return sessionStorage.getItem(Mf)!==null&&(sessionStorage.removeItem(Mf),!0)}catch{return!1}}Nf&&ap(),jf?.addEventListener(`click`,()=>void Kf());var zf=document.querySelector(`[data-fetch-remote]`);zf&&(fetch(L(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(zf.hidden=!1)}).catch(()=>{}),zf.addEventListener(`click`,()=>void Bf(zf)));async function Bf(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(L(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};r(y(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:le(n)}),n.fetched>0&&await Kf()}Y?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Nf=!1,ap();let n=t.closest(`[data-fresh-dismiss]`);n&&(Pf=n.dataset.freshDismiss||void 0,Nf=!1,ap(),Vf())});function Vf(){fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:Pf??null})}).catch(()=>{})}function Hf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Uf=Wa(),Wf=!1,Gf=null;async function Kf(){if(Wf)return;Wf=!0,Qf(!0),Gf&&await Gf;let e=$f(X,Z),t=await Jf(!1);Qf(!1),t&&ip(),Wf=!1,t&&(X?.code.state===`changed`||Z!==null)&&Pf!==void 0&&(Pf=void 0,Vf()),ap(),qf(t?$f(X,Z)===e?`No change`:`Updated`:`Could not check`)}function qf(e){Af&&(Af.textContent=e,window.setTimeout(op,2600))}async function Jf(e){let t=Uf.snapshot();try{let n=await(await fetch(`${L(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Ff=n.availability??null,Z=n.remote??null,tp=n.kiss??null,n.kissDismissedSha!==void 0&&(np=n.kissDismissedSha??void 0),n.prState!==void 0&&Zf(n.prState);let r=Ua(n.standing);return r&&Uf.current(t)&&Fa(document,r),!0}catch{return!1}}async function Yf(){if(Wf||Gf||!Y)return;let e=$f(X,Z),t=JSON.stringify(tp);Gf=Jf(!0);let n=await Gf;Gf=null,Xf=Date.now(),n&&($f(X,Z)!==e&&ap(),JSON.stringify(tp)!==t&&ip())}var Xf=Date.now();function Zf(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Pa(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function Qf(e){jf&&(jf.disabled=e),Af&&e&&(Af.textContent=`Checking…`,Af.dataset.state=`checking`)}function $f(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var ep=document.querySelector(`[data-kiss-fresh-region]`),tp=rp(ep?.dataset.freshness),np=ep?.dataset.dismissedSha;function rp(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function ip(){Da(tp?.state===`changed`),ep&&(ep.innerHTML=ya(ep.dataset.reviewedSha??``,tp,{dismissedSha:np,actions:Ql!==``}))}ep?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(np=t.dataset.kissFreshnessDismiss||void 0,ip(),fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:np??null})}).catch(()=>{}))});function ap(){Y&&(Y.innerHTML=Gi(X,{dismissedSha:Pf,open:Nf,actions:Ql!==``,availability:Ff,remote:Z}),op())}function op(){if(Af&&(X||Z)){let{label:e,state:t}=Ui(X,Z);Af.textContent=e,Af.dataset.state=t,ra(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return sp(n);let r=t.closest(`[data-notice-dismiss]`);if(r){let e=r instanceof HTMLAnchorElement;e||r.closest(`[data-notice]`)?.remove(),fetch(L(`/prefs`),{method:`POST`,keepalive:e,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void lp(i);if(t.closest(`[data-review-update]`))return void pp();let a=t.closest(`[data-update-cancel]`);if(a)return void hp(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void hp(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function sp(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>cp(e,`Copied`),()=>cp(e,`Select it`))}function cp(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function lp(e){let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t)e.disabled=!0;let n=Date.now(),r=()=>{let e=Math.max(1,Math.round((Date.now()-n)/1e3));for(let n of t){let t=up(n);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the conversation, ${e}s. ${vp}`:n.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Checking… ${e}s`}};r();let i=window.setInterval(r,1e3),a=up(e)?null:yp(e);try{await fetch(L(`/refresh`),{method:`POST`})}catch{}finally{window.clearInterval(i),a?.remove()}up(e)&&dp(),window.location.reload()}function up(e){return e.closest(`.prb-fresh-notes p`)}function dp(){try{sessionStorage.setItem(Mf,`1`)}catch{}}var fp=!1;async function pp(){if(fp)return;fp=!0;let e=[...document.querySelectorAll(`[data-review-update]`)];for(let t of e)t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Updating…`;let t=!1,n=()=>{t||(t=!0,window.clearInterval(r),window.location.reload())},r=window.setInterval(async()=>{try{let e=await(await fetch(L(`/job`))).json();e.update&&e.update.phase!==`none`&&!sa(e.update.phase)&&n()}catch{}},500);try{await fetch(L(`/update`),{method:`POST`})}catch{}n()}var mp={review:{path:`/job`,body:e=>({stop:e}),took:e=>e.stopped===!0,label:`Cancel review`,tooLate:`Too late to cancel: the review had already finished and was being saved.`,running:e=>e.phase},update:{path:`/update`,body:e=>({cancel:e}),took:e=>e.cancelled===!0,label:`Cancel update`,tooLate:`Too late to cancel: the update had already started saving its result.`,running:e=>e.update?.phase}};async function hp(e,t){let n=mp[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``;e.disabled=!0,e.textContent=`Cancelling…`;let i;try{let e=await fetch(L(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);i=n.took(await e.json())}catch{e.disabled=!1,e.textContent=n.label,_p(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}i||_p(e,n.tooLate),await Eo({look:async()=>{let e=await fetch(L(`/job`),{signal:AbortSignal.timeout(gp)});return n.running(await e.json())},reload:()=>window.location.reload()})}var gp=3e3;function _p(e,t){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-progress-cancel-status`);r||(r=document.createElement(`p`),r.className=`prb-progress-cancel-status`,r.setAttribute(`role`,`status`),n.appendChild(r)),r.textContent=t}var vp=`Fetching the latest threads from your pull request. This usually takes under a minute.`;function yp(e){let t=e.parentElement;if(!t)return null;let n=document.createElement(`span`);return n.className=`prb-recheck-status`,n.setAttribute(`role`,`status`),n.textContent=vp,t.appendChild(n),n}var bp=bo(document),xp=null,Sp=Date.now();function Cp(){xp===null&&(xp=window.setTimeout(()=>{xp=null,wp()},be(Date.now()-Sp)))}async function wp(){try{let e=await(await fetch(L(`/job`))).json();if(Ku&&!e.ask||Ep&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of bp){let r=t[e];if(r){if(xo(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?Co(n,r.phase,r.progress):Tp(n,r.progress)}}}catch{}Cp()}function Tp(e,t){if(!t)return;let n=e.querySelector(`.prb-job-progress`);n||(n=document.createElement(`span`),n.className=`prb-job-progress`,e.querySelector(`p`)?.appendChild(n)),n.textContent=` ${t}`}var Ep=document.querySelector(`[data-diagram-running]`)!==null;(bp.size>0||Ku||Ep)&&(Sp=Date.now(),Cp()),document.querySelector(`[data-started-at]`)&&To(document);function Dp(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function Op(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,Op(t);let r=e=>{t.disabled=!1,t.textContent=n,Dp(t,e)};fetch(L(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(L(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Kr,cp(t,`Could not start. Try again`,2500)}))});var kp={send:async e=>{let t=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kissDecision:e})});return t.ok?(await t.json().catch(()=>null))?.decision===e.decision:!1},paintRail:(e,t)=>{xd(`kiss`,e,t,`recommendation`,`decided`),xd(`kissrecs`,e,t,`recommendation`,`decided`)}};document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-kiss-decide]`),r=n?.closest(`[data-kiss-rec]`);if(n&&r&&!n.disabled){Sa(r,xa(n),kp);return}let i=t.closest(`[data-kiss-open-primary]`);i&&i.closest(`[data-kiss-rec]`)?.querySelector(`.prb-kiss-locations [data-primary]`)?.click()}),document.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-kiss-run-open]`)){let e=document.querySelector(`[data-kiss-run-dialog]`);e&&!e.open&&e.showModal();return}t.closest(`[data-kiss-run-cancel]`)&&t.closest(`dialog`)?.close()}),document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-kiss-audience]`);if(!t)return;let n=t.closest(`[data-kiss-run-control]`)?.querySelector(`[data-kiss-run]`);n&&(n.disabled=!1)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-run]`);if(!t||t.disabled)return;let n=t.closest(`[data-kiss-run-control]`),r=n?.querySelector(`[data-kiss-audience]:checked`)?.value;if(!r)return;let i=t.textContent??`Run KISS review`;t.disabled=!0,t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Starting…`,fetch(L(`/kiss`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({audience:r})}).then(e=>{if(e.ok)window.location.reload();else throw Error(`refused`)}).catch(()=>{t.disabled=!1,t.textContent=i;let e=document.createElement(`p`);e.className=`prb-kiss-refused`,e.setAttribute(`role`,`status`),e.textContent=`The KISS review could not be started. You can try again.`,n?.querySelector(`.prb-kiss-refused`)?.remove(),n?.appendChild(e)})});var Ap=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_e(e.state)??te(window.location.hash)??{kind:`view`,view:Ap},n=!R||!re(R,t),r=ou;ou=!1,r?bu(t):su(()=>bu(t)),n&&vu(t),Bp()});var jp=te(window.location.hash),Mp=window.location.hash===bl,Np=I.current().ui===null,Pp=window.matchMedia(`(max-width: 860px)`).matches,Fp=Np&&!jp?.focus?Br(cu.expanded,C(jp??{kind:`view`,view:Ap},yu),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Pp):null;if(Np&&G?.dataset.ask===`open`&&Pp&&delete G.dataset.ask,Fp){let e=jp??{kind:`view`,view:Ap};jp||(R=e);let t={...e,focus:Fp};I.replace(ie(t),t),bu(t)}else jp?bu(jp):(R={kind:`view`,view:Ap},I.replace(``,R));iu=!0;var Ip={enterTour(){let e=R,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||su(()=>bu({kind:`view`,view:`overview`})),()=>{!t&&e&&su(()=>bu(e))}},save(e){fetch(L(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};Mp?Ml(document,window,Ip):Xl.dataset.guidedTour===`offer`&&kl(document,window,{mode:`first`,host:Ip});var Lp={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:V,panes:G};I.setCapturer(()=>Ai(Lp));async function Rp(e,t,n){let r=e.dataset.file;if(!r)return;let i=Number(e.dataset.line)||0,a=t??{cited:i,centre:i,expand:0,position:i?2*i:0,tall:!1,top:null,offset:0},o=vi(e),s=o?Iu.pending(o):void 0;if(!o||!Ci(s?s.request:xi(o),a)){if(!o){o=document.createElement(`div`),o.className=`prb-code`,o.innerHTML=`<p class="prb-code-status">Reading…</p>`;let{parent:t,position:n}=Pu(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Lu(o,r,{cited:a.cited,centre:a.centre,expand:a.expand,position:a.position}))return}else if(s&&!await s.done)return;n()&&(a.tall!==o.hasAttribute(`data-expanded`)&&_l(o,a.tall),t&&Si(o,t.top,t.offset))}function zp(e){vi(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Bp(){let e=++_u,t=()=>_u===e;await ji(Lp,I.current().ui,{setFold:(e,t)=>su(()=>Au(e,t)),setAsk:e=>su(()=>kd(e)),clearAsk:()=>{G&&delete G.dataset.ask,Ad(Od())},openPanel:(e,n)=>Rp(e,n,t),closePanel:zp,stillCurrent:t})}Bp();var Vp=H?Ri(H,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;W=Vp?.restoredStage??null,Md(),Nu();var Hp=e=>{for(let t of document.querySelectorAll(`[data-analysis-details][open], [data-range-details][open]`))(!e||!t.contains(e))&&(t.open=!1)};document.addEventListener(`click`,e=>{Hp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Hp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-review-menu]`),$=Ka({root:document,post:(e,t)=>fetch(L(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Uf,checkForUpdates:()=>Kf()});function Up(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&z.open(Q),Q.querySelector(`[data-menu-error]`)?.remove();let n=document.createElement(`p`);n.className=`prb-menu-error`,n.setAttribute(`data-menu-error`,``),n.textContent=e,t?.append(n)}async function Wp(e,t){if($.busy())return;Q?.querySelector(`[data-menu-error]`)?.remove(),t&&(t.disabled=!0);let n=await e();if(t&&(t.disabled=!1),!n.busy){if(n.error===null)return void z.closeAll();Up(n.error)}}function Gp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Kp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&z.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}async function qp(e,t){if($.busy()||ae(t))return;oe(t,!0);let n;try{n=await e()}finally{oe(t,!1)}n.busy||n.error===null||r(y(),{kind:`failed`,text:n.error})}if(document.querySelector(`.prb-header-stats`)?.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`button[data-page-status]`);if(n){qp(()=>$.setComplete(n.dataset.status!==`complete`),n);return}let r=t?.closest(`[data-lifecycle-control]`),i=r?.querySelector(`button[data-page-lifecycle]`);if(!r||!i)return;let a=t?.closest(`[data-lifecycle-set]`);if(a){z.close(r,{returnFocus:!0}),qp(()=>$.setLifecycle(a.dataset.lifecycleSet),i);return}let o=i.dataset.lifecyclePress;t?.closest(`[data-lifecycle-pill]`)&&o&&o!==`menu`&&qp(()=>$.setLifecycle(o),i)}),Q){let t=Q.querySelector(`[data-confirm-delete]`),n=()=>mf(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),ne(a,a.dataset.copyId);return}if(t?.closest(`[data-tour-replay]`)){e.stopPropagation(),z.closeAll(),Ml(document,window,Ip);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){z.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Wp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Wp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Wp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Kp();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async t=>{let n=t.getAttribute(`aria-pressed`)!==`true`;t.disabled=!0;let r=null;try{let e=await fetch(L(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(t.disabled=!1,r===null){t.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{t.textContent=e(t.getAttribute(`aria-pressed`)===`true`)},1600);return}t.setAttribute(`aria-pressed`,String(r)),t.textContent=e(r)},i=async()=>{t&&(t.disabled=!0,t.textContent=`Deleting`);let{error:e}=await $.deleteReview();if(e===null)return void window.location.replace(`/`);t&&(t.disabled=!1,t.textContent=`Delete`),n(),Up(e)}}function Jp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>Eu(e,{keepFocus:!0})}}function Yp(){if(!R)return null;let e=R.focus??(R.kind===`section`?`guide`:R.view);return he.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Xp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}p(`review`,{...gf.commands,...fo(J,document),"review.section.review":{available:()=>go(document)!==null,run:()=>{let e=go(document);e&&Eu(e,{keepFocus:!0})}},"review.section.kiss":Jp(`kiss`),"review.section.issues":Jp(`issues`),"review.section.diagrams":Jp(`map`),"review.section.questions":Jp(`questions`),"review.section.files":Jp(`files`),"review.buddy.open":{available:()=>Dd!==null,run:()=>{R?.focus?pe(R,`buddy`,xu):kd(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Dd!==null&&H!==null,panel:fe({prompts:()=>q,choose:tf})},"review.focus.toggle":{available:()=>Yp()!==null,run:()=>{let e=Yp();e&&Tu(e)}},"review.leave":{available:e=>!!(e&&de(e,document,e.target===H||J.state().selecting||!!R?.focus)),run:e=>{H&&e?.target===H?H.blur():J.state().selecting?J.exit():R?.focus&&ce(R,xu)}},"review.feedback.toggle":{available:()=>J.state().selecting||Xp(),label:()=>J.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>J.state().selecting?J.exit():J.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Wp(()=>$.setComplete(!0),Gp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Wp(()=>$.setLifecycle(`waiting`),Gp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Wp(()=>$.setLifecycle(`done`),Gp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Wp(()=>$.toggleQueued(),Gp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Wi(X,{actions:Ql!==``&&!bp.has(`update`)&&!fp,remote:Z}),run:()=>void pp()},"review.delete":{available:()=>$.offer().delete,run:()=>Kp({focusCancel:!0})}},{onOpen:()=>z.closeAll()}),h(),Ql&&Wc({markSeen:()=>fetch(L(`/seen`),{method:`POST`}),askUnread:()=>fetch(L(`/unread`))}),setTimeout(()=>{Ul(Fl([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),S(window,()=>window.location.reload());var Zp=15e3,Qp=6e4;function $p(){return Ql!==``&&document.visibilityState===`visible`&&!bp.has(`update`)}document.addEventListener(`visibilitychange`,()=>{$p()&&Date.now()-Xf>=Zp&&Yf()}),window.setInterval(()=>{$p()&&Yf()},Qp);export{yc as n,tn as r,Sc as t};
|
|
196
|
+
${l}`,$c(e,t),ml(e),hl(e),(n.focus?al(e,n.focus):e.querySelector(`.prb-code-target`))?.scrollIntoView({block:`center`}),Yl(e,t)}async function Bu(e,t,n){let r=il(t,n);if(!r)return;let i=al(e,r.anchor);if(i)t.outerHTML=rl(ol(t),r.key),i.scrollIntoView({block:`center`});else{let t=e.querySelector(`[data-expand-file]`);if(!t?.dataset.expandFile)return;await Ru(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 Vu(e,t,n){let r=`${nu.replace(/\/$/,``)}/${e}`,i=tu.replace(`{path}`,r).replace(`{line}`,String(Math.max(1,t)));n!==null&&du({event:`editor_opened`,fromFinding:n}),window.location.href=i}var H=document.querySelector(`[data-ask-log]`);H&&H.querySelector(`.prb-msg`)&&H.scrollTo({top:H.scrollHeight});var Hu=document.querySelector(`[data-ask-form]`),U=Hu?.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=ot(t)+Pt(t)):n.textContent=t,H?.appendChild(n),H?.scrollTo({top:H.scrollHeight}),n}function Wu(e){if(!e||!H)return;let t=document.createElement(`template`);t.innerHTML=e.trim(),H.appendChild(t.content)}async function Gu(e){let t=(e.dataset.reconcileAcceptAll??``).split(` `).filter(Boolean);e.disabled=!0;let n=0;for(let e of t){let t=document.querySelector(`[data-reassessment-proposal="${CSS.escape(e)}"] [data-reassessment-decide="accepted"]`);t&&await mr(t,Cu)&&(n+=1)}let r=document.createElement(`p`);r.className=`prb-turn-help`,r.setAttribute(`role`,`status`),r.textContent=n===t.length?`Accepted ${n===1?`the suggestion`:`all ${n} suggestions`}.`:`Accepted ${n} of ${t.length}. The others had changed or were answered already; their cards show them as they stand.`,e.replaceWith(r)}document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`[data-reconcile-turn]`);if(n){let e=Number(n.dataset.reconcileTurn);Number.isFinite(e)&&Yu(`Reconcile with findings`,`reconcile`,{reconciles:{exchanges:[e]}});return}let r=t?.closest(`[data-reconcile-accept-all]`);r&&!r.disabled&&Gu(r)});function Ku(){let e=document.createElement(`div`);return e.className=`prb-thinking`,e.innerHTML=`<i></i><i></i><i></i><span>Reading the change…</span>`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight}),e}var W=null,qu=!!H?.querySelector(`[data-ask-pending]`);function Ju(){let e=document.createElement(`div`);e.className=`prb-stopped`,e.textContent=`Stopped.`,H?.appendChild(e),H?.scrollTo({top:H.scrollHeight})}async function Yu(e,t=`free_text`,n={}){let r=e.trim();if(!r||W||qu)return;document.querySelector(`.prb-ask-empty`)?.remove(),Uu(`user`,r);let i=Ku();W=new AbortController,Zu(!0);try{let e=await fetch(R(`/ask`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:r,sectionId:hu,source:t,...n}),signal:W.signal}),a=await e.json().catch(()=>null);if(e.status===409&&(a?.running||a?.updating)){Xu(r,n.continuesExplanation),window.location.reload();return}if(i.remove(),a?.stopped){Ju();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),typeof a.askedAt==`number`&&Wu(vr({askedAt:a.askedAt,reconciles:a.reconcileTurn},a.reconciliation?.proposals??[])),a.explanation&&rr(document,a.explanation),a.reassessment?.card&&sr(document,a.reassessment.card);for(let e of a.reconciliation?.cards??[])sr(document,e,Cu.onVerdictClosed)}catch(e){i.remove(),e instanceof DOMException&&e.name===`AbortError`?(Ju(),Xu(r,n.continuesExplanation)):(Uu(`error`,`Could not reach PR Review Buddy. The workspace server may have stopped.`),Xu(r,n.continuesExplanation))}finally{W=null,Zu(!1)}}function Xu(e,t){!U||U.value||(U.value=e,Up?.save(),t&&(G=G?.continues&&e.includes(G.text)?G:{text:e,source:`finding`,continues:t},Up?.stage(G)))}function Zu(e){let t=Hu?.querySelector(`button`);t&&(t.textContent=e?`Stop`:`Ask`,t.toggleAttribute(`data-stop`,e),t.disabled=!1);for(let t of document.querySelectorAll(Qu))t.disabled=e;e&&B.closeAll(),e||U?.focus()}var Qu=`[data-suggestion], .pr-helper-explain-simply-button, [data-reconcile-turn]`;function $u(){let e=Hu?.querySelector(`button`);e&&(e.textContent=`Stopping…`,e.disabled=!0),fetch(R(`/stop`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`ask`})}).catch(()=>{}).finally(()=>{W?.abort()})}Hu?.addEventListener(`submit`,e=>{if(e.preventDefault(),W||qu)return $u();let t=U?.value??``;U&&(U.value=``),Up?.clear();let n=ar(G,t);Yu(t,ed(t),n?{continuesExplanation:n}:{})}),qu&&Zu(!0);var G=null;function ed(e){return G&&e.includes(G.text)?G.source:`free_text`}U?.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),W||qu)return;Hu?.requestSubmit()}}),U?.addEventListener(`input`,()=>{U&&(U.style.height=`auto`,U.style.height=`${Math.min(U.scrollHeight,140)}px`)});async function td(e){try{let t=await fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(t.ok)return null;let n=await t.json().catch(()=>null);return typeof n?.error==`string`?n.error:`That could not be saved. The workspace server refused it.`}catch{return`The workspace server did not answer. It may have stopped.`}}function nd(e){return td({answeredQuestionIds:e})}async function rd(){try{let e=await fetch(R(`/state`)),t=await e.json().catch(()=>null);return!e.ok||!Array.isArray(t?.answeredQuestionIds)||!Array.isArray(t?.dismissedIssues)?null:{answered:t.answeredQuestionIds.filter(e=>typeof e==`string`),dismissed:t.dismissedIssues.filter(e=>typeof e?.id==`string`&&typeof e?.sessionId==`string`)}}catch{return null}}function id(e){let t=new Set(e);for(let e of document.querySelectorAll(`[data-question-answered]`)){let n=t.has(e.dataset.questionAnswered??``);e.dataset.answered===`true`!==n&&(od(e,n),Xr(e))}}function ad(){return[...document.querySelectorAll(`[data-question-answered][data-answered="true"]`)].map(e=>e.dataset.questionAnswered??``).filter(Boolean)}function od(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&&pd(n,t||e.dataset.verdictClosed===`true`,`questions`),yd()}function sd(){return[...document.querySelectorAll(`[data-issue-dismissed][data-dismissed="true"]`)].map(e=>({id:e.dataset.issueDismissed??``,sessionId:e.dataset.dismissedIn||iu})).filter(e=>e.id)}function cd(e){return td({dismissedIssues:e})}function ld(e){let t=e.closest(`[data-finding-card]`),{dismissed:n,stale:r,dismissedIn:i}=e.dataset,a=e.textContent,o=t?.classList.contains(`pr-helper-issue-card-dismissed`)??!1,s=e=>e?{element:e,parent:e.parentElement,before:e.nextSibling}:null,c=s(t?.querySelector(`.pr-helper-dismissal-stale`)),l=s(t?.querySelector(`.pr-helper-finding-status-dismissed`));return()=>{if(e.dataset.dismissed=n??`false`,r===void 0?delete e.dataset.stale:e.dataset.stale=r,i===void 0?delete e.dataset.dismissedIn:e.dataset.dismissedIn=i,e.textContent=a,!t)return;t.classList.toggle(`pr-helper-issue-card-dismissed`,o),t.querySelector(`.pr-helper-finding-status-dismissed`)?.remove();for(let e of[l,c])e?.parent&&e.parent.insertBefore(e.element,e.before?.parentNode===e.parent?e.before:null);let s=n===`true`&&r!==`true`||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`;pd(t,s,`issues`),xd()}}function ud(e,t){e.dataset.dismissed=String(t),e.textContent=t?`Reopen`:`Dismiss`,delete e.dataset.stale,t?e.dataset.dismissedIn=iu: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(dd()),pd(n,t||e.dataset.settled===`true`||e.dataset.verdictClosed===`true`,`issues`),xd())}function dd(){let e=document.createElement(`span`);return e.className=`pr-helper-finding-status pr-helper-finding-status-dismissed pr-helper-tip`,e.dataset.tip=Un,e.textContent=`Dismissed by you`,e}var fd=new WeakMap;function pd(e,t,n){let r=e.closest(`.pr-helper-closed-findings-list`);if(t!==!!r){if(t){let t=e.parentElement;t&&fd.set(e,{parent:t,before:e.nextElementSibling}),_d(n).append(e),t&&gd(t)}else md(e,n),(r?.children.length===0?r.closest(`.pr-helper-closed-findings`):null)?.remove();vd(n)}}function md(e,t){let n=fd.get(e);if(n?.parent.isConnected){let t=n.before;for(;t&&t.parentNode!==n.parent;)t=fd.get(t)?.before??null;n.parent.insertBefore(e,t)}else{let n=hd(e)??Pr(document,e)??document.querySelector(`[data-view="${t}"]`);n?.insertBefore(e,n.querySelector(`.pr-helper-closed-findings`))}e.closest(`.pr-helper-question-group`)?.removeAttribute(`hidden`)}function hd(e){let t=e.dataset.sectionId;return t?document.querySelector(`[data-question-group="${CSS.escape(t)}"]`):null}function gd(e){let t=e.closest(`.pr-helper-question-group`);t&&!t.querySelector(`[data-finding-card]`)&&(t.hidden=!0)}function _d(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 vd(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})`:mi(bd()),cr(document)}function yd(){let e=[...document.querySelectorAll(`[data-question-answered]`)];if(e.length===0)return;let t=e.filter(e=>e.dataset.answered!==`true`&&e.dataset.settled!==`true`&&e.dataset.verdictClosed!==`true`).length,n=document.querySelector(`.pr-helper-questions-progress`);n&&(n.innerHTML=hi(e.length,t)),Sd(`questions`,e.length,t,`question`,`answered`)}function bd(){let e=[...document.querySelectorAll(`[data-issue-dismissed]`)],t=0,n=0,r=0,i=0;for(let a of e){let e=a.dataset.settled===`true`,o=a.dataset.verdictClosed===`true`,s=a.dataset.dismissed===`true`&&a.dataset.stale!==`true`;!e&&!o&&!s?t+=1:e||(n+=1),!e&&o&&(i+=1),e&&a.dataset.settledBy===`conversation`&&(r+=1)}return{total:e.length,open:t,done:e.length-t,reviewerClosed:n,...r>0?{byConversation:r}:{},...i>0?{byVerdict:i}:{}}}function xd(){let e=bd();if(e.total===0)return;let t=document.querySelector(`[data-view="issues"]`);t&&Nr(t),Sd(`issues`,e.total,e.open,`issue`,qr(e))}function Sd(e,t,n,r,i){let a=document.querySelector(`[data-view-nav="${e}"] .prb-rail-count`);if(!a)return;let o=e=>`${e} ${r}${e===1?``:`s`}`,s=t-n;a.classList.toggle(`prb-rail-count-done`,t>0&&n===0),t===0?(a.textContent=`0`,a.setAttribute(`aria-label`,`No ${r}s`)):n===0?(a.textContent=`✓`,a.setAttribute(`aria-label`,`All ${o(t)} ${i}`)):(a.textContent=String(n),a.setAttribute(`aria-label`,s===0?o(t):`${n} of ${o(t)} left, ${s} ${i}`))}var Cd=new Map([...document.querySelectorAll(`[data-issue-dismissed]`)].map(e=>[e,{dismissed:e.dataset.dismissed===`true`,dismissedIn:e.dataset.dismissedIn,putBack:ld(e)}]));function wd(e){let t=new Map(e.map(e=>[e.id,e.sessionId]));for(let[e,n]of Cd){let r=t.get(e.dataset.issueDismissed??``);r===void 0?e.dataset.dismissed===`true`&&ud(e,!1):n.dismissed&&r===n.dismissedIn?n.putBack():(e.dataset.dismissed!==`true`||e.dataset.stale===`true`||(e.dataset.dismissedIn??iu)!==r)&&(ud(e,!0),e.dataset.dismissedIn=r)}}var Td=e=>void r(y(),{kind:`failed`,text:e}),Ed=Uc({current:ad,send:nd,read:async()=>(await rd())?.answered??null,paint:id,fail:Td},ad()),Dd=Uc({current:sd,send:cd,read:async()=>(await rd())?.dismissed??null,paint:wd,fail:Td},sd());document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-rail-toggle]`);if(n){ju(n,n.getAttribute(`aria-expanded`)!==`true`);return}let r=t.closest(`a[data-view-nav], a[data-goto-section]`);if(r&&!l(e))return;r&&e.preventDefault();let i=t.closest(`[data-view-nav]`);if(i?.dataset.viewNav){Du(i.dataset.viewNav);return}let a=t.closest(`[data-author-context-toggle]`);if(a){ei(a);return}let o=t.closest(`[data-author-context-reveal]`);if(o){ai(o);return}let s=t.closest(`[data-overview-nav]`);if(s?.dataset.overviewNav){Du(s.dataset.overviewNav===`guide`?`guide`:s.dataset.overviewNav);return}let c=t.closest(`[data-goto-section]`);if(c?.dataset.gotoSection){Ou(c.dataset.gotoSection);return}let u=t.closest(`[data-open-editor]`);if(u?.dataset.openEditor){Vu(u.dataset.openEditor,Number(u.dataset.openLine)||1,!u.closest(`[data-architecture]`)||null);return}let d=t.closest(`[data-deletion-toggle]`);if(d){Qc(d);return}let f=t.closest(`[data-code-expand]`);if(f){let e=f.closest(`.prb-code`);e&&vl(e,!e.hasAttribute(`data-expanded`));return}let p=t.closest(`[data-change-step]`);if(p){let e=p.closest(`[data-change-navigator]`),t=p.closest(`.prb-code`);e&&t&&!p.disabled&&Bu(t,e,p.dataset.changeStep===`previous`?`previous`:`next`);return}let m=t.closest(`[data-full-line]`);if(m){let e=el(m);e&&Xl(e);return}let h=t.closest(`[data-expand-file]`);if(h?.dataset.expandFile){let e=h.closest(`.prb-code`);if(e){let t=e.querySelector(`[data-change-navigator]`);Ru(e,h.dataset.expandFile,{cited:Number(h.dataset.expandCited)||0,centre:Number(h.dataset.expandLine)||0,expand:Number(h.dataset.expandStep)||1,position:Number(t?.dataset.changePosition)||0,focus:sl(t)})}return}let g=t.closest(`[data-focus-toggle]`);if(g?.dataset.focusToggle){Eu(g.dataset.focusToggle);return}let _=t.closest(`[data-prompt-toggle]`);if(_){tf(_.getAttribute(`aria-expanded`)===`true`);return}if(t.closest(`[data-ask-buddy-menu], [data-grade-menu]`))return;let v=t.closest(`[data-file]`);if(v?.dataset.file){Iu(v);return}let y=_i(t);if(y){Ou(y);return}let ee=t.closest(`[data-question-answered]`);if(ee?.dataset.questionAnswered){od(ee,ee.dataset.answered!==`true`),Xr(ee);let e=ad();Ed.changed(),du({event:`question_marked_answered`,answered:e.length,total:document.querySelectorAll(`[data-question-answered]`).length});return}let b=t.closest(`[data-issue-dismissed]`);if(b?.dataset.issueDismissed){ud(b,b.dataset.stale===`true`||b.dataset.dismissed!==`true`);let e=sd();Dd.changed(),du({event:`issue_dismissed`,dismissed:e.length,total:document.querySelectorAll(`[data-issue-dismissed]`).length});return}let x=t.closest(`[data-suggestion]`);if(x){Yu(x.textContent??``,`suggestion`);return}if(t.closest(`.pr-helper-explain-simply-button`)){Md(),Yu(ru,`explain_simply`);return}let S=t.closest(`[data-prompt-use]`);if(S?.dataset.promptUse){nf(S.dataset.promptUse);return}let C=t.closest(`[data-prompt-edit]`);if(C?.dataset.promptEdit){Df(C.dataset.promptEdit);return}if(t.closest(`[data-prompt-add]`)){Df(``);return}if(t.closest(`[data-ask-toggle]`)){let e=z?.focus;e?(ce(z,Su),Ad(e!==`buddy`)):Ad(!kd())}});var K=document.querySelector(`.prb-body`),Od=document.querySelector(`.prb-ask`);function kd(){return!!Od&&getComputedStyle(Od).display!==`none`}function Ad(e){K&&(K.dataset.ask=e?`open`:`closed`),jd(e),uu.ask(e)}function jd(e){for(let t of document.querySelectorAll(`[data-ask-toggle]`))t.setAttribute(`aria-expanded`,String(e))}function Md(){z?.focus&&z.focus!==`buddy`&&ce(z,Su),Ad(!0)}function Nd(){jd(kd())}window.addEventListener(`resize`,Nd),ee(R(`/restart`));var Pd=document.querySelector(`[data-file-filter]`),Fd=document.querySelector(`[data-file-count]`),Id=document.querySelector(`[data-file-none]`);function Ld(){let e=(Pd?.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}`}Id&&(Id.hidden=n>0),Fd&&(Fd.textContent=e?`${t} of ${Rd} file${Rd===1?``:`s`}`:`${Rd} file${Rd===1?``:`s`}`)}var Rd=document.querySelectorAll(`[data-view="files"] .prb-file:not(.prb-file-referenced)`).length;Pd?.addEventListener(`input`,Ld),Pd?.addEventListener(`keydown`,e=>{e.key===`Escape`&&Pd.value!==``&&(e.preventDefault(),Pd.value=``,Ld())}),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(),Iu(n))});var zd=320,Bd=()=>Math.round(window.innerWidth/2),Vd=e=>Math.round(Math.min(Bd(),Math.max(zd,e)));function Hd(e){K&&(e===null?K.style.removeProperty(`--ask-width`):K.style.setProperty(`--ask-width`,`${e}px`))}function Ud(){return Od?Math.round(Od.getBoundingClientRect().width):zd}function Wd(e){fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({askWidth:e})}).catch(()=>{})}var q=document.querySelector(`[data-ask-resize]`);q?.addEventListener(`pointerdown`,e=>{if(e.button!==0||!K||!Od)return;e.preventDefault(),q.setPointerCapture(e.pointerId),K.dataset.resizing=`true`;let t=e.clientX,n=Ud(),r=e=>{Hd(Vd(n+(t-e.clientX)))},i=()=>{q.removeEventListener(`pointermove`,r),q.removeEventListener(`pointerup`,i),q.removeEventListener(`pointercancel`,i),delete K.dataset.resizing,Wd(Ud())};q.addEventListener(`pointermove`,r),q.addEventListener(`pointerup`,i),q.addEventListener(`pointercancel`,i)}),q?.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=Vd(Ud()+n);Hd(r),Wd(r);return}(e.key===`Home`||e.key===`Escape`)&&(e.preventDefault(),Hd(null),Wd(null))}),q?.addEventListener(`dblclick`,()=>{Hd(null),Wd(null)}),window.addEventListener(`resize`,()=>{kd()&&K?.style.getPropertyValue(`--ask-width`)&&Hd(Vd(Ud()))});var Gd=3e4,Kd=document.visibilityState===`visible`?Date.now():null,qd=0;function Jd(){Kd!==null&&(qd+=Date.now()-Kd,Kd=Date.now())}function Yd(){Jd();let e=Math.round(qd/1e3);return qd-=e*1e3,e}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`?Kd=Date.now():(Jd(),Kd=null)}),setInterval(()=>{let e=Yd();e>0&&du({event:`workspace_heartbeat`,visibleSeconds:e})},Gd),window.addEventListener(`pagehide`,()=>{let e=R(`/event`),t=JSON.stringify({event:`review_completed`,trailingSeconds:Yd()});navigator.sendBeacon?.(e,new Blob([t],{type:`application/json`}))||fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})});var Xd=document.querySelector(`[data-prompt-bank]`),Zd=document.querySelector(`[data-prompt-list]`),J=Qd();function Qd(){try{let e=JSON.parse(Xd?.dataset.prompts??`[]`);return Array.isArray(e)?e:[]}catch{return[]}}function $d(){if(!Zd)return;Zd.innerHTML=J.map(e=>`<span class="prb-bank-item">
|
|
197
|
+
<button type="button" class="prb-bank-use" data-prompt-use="${V(e.id)}" title="${V(e.prompt)}">${V(e.name)}</button>
|
|
198
|
+
<button type="button" class="prb-bank-edit" data-prompt-edit="${V(e.id)}" aria-label="Edit ${V(e.name)}">✎</button>
|
|
199
|
+
</span>`).join(``);let e=document.querySelector(`[data-prompt-count]`);e&&(e.textContent=String(J.length)),df()}async function ef(e){let t=null;try{let n=await fetch(R(`/prompts`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompts:e})}),r=await n.json().catch(()=>null);J=Array.isArray(r?.prompts)?r.prompts:J,(!n.ok||!Array.isArray(r?.prompts))&&(t=typeof r?.error==`string`?r.error:`Your prompts were not saved. The workspace server refused the change.`)}catch{t=`Your prompts were not saved. The workspace server did not answer. It may have stopped.`}return $d(),t}function tf(e){document.querySelector(`[data-prompt-toggle]`)?.setAttribute(`aria-expanded`,String(!e)),Xd?.toggleAttribute(`data-collapsed`,e),Zd&&(Zd.hidden=e),fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptsCollapsed:e})}).catch(()=>{})}function nf(e){let t=J.find(t=>t.id===e);!t||!U||(U.value=bi(U.value,t.prompt),Md(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}var rf=document.querySelector(`.prb-doc`),af=null,of=null;function sf(){H&&(of?.(),of=Pn(H,{layout:`flat`,actions:Ln.map(e=>({id:e.id,label:e.label})),onChoose:(e,t)=>ff(e,`selection`,t)}))}var cf=`reassess`;function lf(e){let t=uf();if(!e)return t;let n={id:cf,label:`Reassess ${e.kind===`issue`?`severity`:`importance`}`};return[...t.filter(e=>!e.section),n,...t.filter(e=>e.section)]}function uf(){return[...Fn.map(e=>({id:e.id,label:e.label})),...J.map(e=>({id:Sr(e.id),label:e.name,section:xr}))]}function df(){rf&&(af?.(),af=Pn(rf,{triggerLabel:`Ask Buddy AI`,actions:uf(),ignoreWithin:`[data-ask-buddy-menu]`,onChoose:(e,t)=>ff(e,`selection`,t)}))}function ff(e,t,n,r){Kr(e,{context:t,text:n},{savedPrompt:e=>J.find(t=>t.id===e)?.prompt??null,stage:e=>pf(e,t,r?.continuesExplanation?r.ref:void 0),send:t=>{Md(),Yu(t,`finding`,er(e,r?.ref))}})}function pf(e,t,n){U&&(G={text:e,source:t,...n?{continues:n}:{}},Up?.stage(G),U.value=bi(U.value,e),Md(),U.focus(),U.setSelectionRange(U.value.length,U.value.length),U.dispatchEvent(new Event(`input`)))}function mf(e){let t=e.querySelector(`[data-menu-panel]`);if(t){t.innerHTML=wn(lf(nr(e)));for(let e of t.querySelectorAll(`[data-selection-action]`))e.setAttribute(`role`,`menuitem`);if(W||qu)for(let e of t.querySelectorAll(`button`))e.disabled=!0}}function hf(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=Vn(n),a=nr(n);if(B.close(n),r===cf){i&&a&&gf(a,i);return}i&&ff(r,`finding`,i,a?{ref:a}:void 0)});function gf(e,t){if(W||qu)return;let n=e.kind===`issue`?`severity`:`importance`;Md(),Yu(`${zn(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?gr(t):null;n&&pf(n,`finding`)}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-simple-explanation-more]`);if(!t)return;let n=tr(t),r=Vn(t);n&&r&&ff(`custom`,`finding`,r,{ref:n,continuesExplanation:!0})}),df(),sf();var Y=so({root:document,showView:e=>Du(e)}),_f=_o({doc:document,pane:()=>document.querySelector(`.prb-doc`),openMenu:(e,t)=>B.open(e,{focusFirst:!0,returnFocus:t}),selecting:()=>Y.state().selecting,flip:e=>void Y.flip(e)});qt(document),cn(document);var vf=document.querySelector(`[data-prompt-dialog]`),yf=document.querySelector(`[data-prompt-name]`),bf=document.querySelector(`[data-prompt-text]`),xf=document.querySelector(`[data-prompt-delete]`),Sf=document.getElementById(`prb-prompt-title`),Cf=document.querySelector(`[data-prompt-error]`),wf=document.querySelector(`[data-prompt-save]`);function Tf(e){Cf&&(Cf.textContent=e??``,Cf.hidden=e===null)}var Ef=``;function Df(e){let t=J.find(t=>t.id===e);Ef=t?.id??``,Sf&&(Sf.textContent=t?`Edit prompt`:`Save a prompt`),yf&&(yf.value=t?.name??``),bf&&(bf.value=t?.prompt??``),xf&&(xf.hidden=!t),Tf(null),vf?.showModal(),yf?.focus()}async function Of(){let e=yf?.value.trim()??``,t=bf?.value.trim()??``;if(!e||!t){(e?bf:yf)?.focus();return}await Af(Ef?J.map(n=>n.id===Ef?{...n,name:e,prompt:t}:n):[...J,{id:crypto.randomUUID(),name:e,prompt:t}])}async function kf(){Ef&&await Af(J.filter(e=>e.id!==Ef))}async function Af(e){Tf(null);let t=[wf,xf].filter(e=>e!==null);for(let e of t)e.disabled=!0;let n=await ef(e);for(let e of t)e.disabled=!1;if(n)return Tf(n);vf?.close()}document.querySelector(`[data-prompt-cancel]`)?.addEventListener(`click`,()=>vf?.close()),xf?.addEventListener(`click`,()=>void kf()),wf?.addEventListener(`click`,()=>void Of());var jf=document.querySelector(`[data-fresh-region]`),Mf=document.querySelector(`[data-fresh-status]`),Nf=document.querySelector(`[data-fresh-check]`),X=Wf(jf?.dataset.report),Pf=`prb-fresh-reopen`,Ff=Bf(),If=jf?.dataset.dismissedSha,Lf=zf(jf?.dataset.availability),Z=Rf(jf?.dataset.remote);function Rf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function zf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Bf(){try{return sessionStorage.getItem(Pf)!==null&&(sessionStorage.removeItem(Pf),!0)}catch{return!1}}Ff&&sp(),Nf?.addEventListener(`click`,()=>void Jf());var Vf=document.querySelector(`[data-fetch-remote]`);Vf&&(fetch(R(`/fetch`)).then(e=>e.ok?e.json():null).then(e=>{e?.fetchable===!0&&(Vf.hidden=!1)}).catch(()=>{}),Vf.addEventListener(`click`,()=>void Hf(Vf)));async function Hf(e){if(e.disabled)return;e.disabled=!0;let t=null;try{let e=await fetch(R(`/fetch`),{method:`POST`});e.ok&&(t=await e.json())}catch{}e.disabled=!1;let n=t??{repositories:1,fetched:0,failed:[],moved:0};r(y(),{kind:n.fetched<n.repositories?`failed`:`ready`,text:le(n)}),n.fetched>0&&await Jf()}jf?.addEventListener(`click`,e=>{let t=e.target;if(t.closest(`[data-fresh-close]`))return Ff=!1,sp();let n=t.closest(`[data-fresh-dismiss]`);n&&(If=n.dataset.freshDismiss||void 0,Ff=!1,sp(),Uf())});function Uf(){fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissFreshnessSha:If??null})}).catch(()=>{})}function Wf(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}var Gf=Ka(),Kf=!1,qf=null;async function Jf(){if(Kf)return;Kf=!0,ep(!0),qf&&await qf;let e=tp(X,Z),t=await Xf(!1);ep(!1),t&&op(),Kf=!1,t&&(X?.code.state===`changed`||Z!==null)&&If!==void 0&&(If=void 0,Uf()),sp(),Yf(t?tp(X,Z)===e?`No change`:`Updated`:`Could not check`)}function Yf(e){Mf&&(Mf.textContent=e,window.setTimeout(cp,2600))}async function Xf(e){let t=Gf.snapshot();try{let n=await(await fetch(`${R(`/freshness`)}${e?`&quiet=1`:``}`)).json();X=n.report??null,Lf=n.availability??null,Z=n.remote??null,rp=n.kiss??null,n.kissDismissedSha!==void 0&&(ip=n.kissDismissedSha??void 0),n.prState!==void 0&&$f(n.prState);let r=Ga(n.standing);return r&&Gf.current(t)&&La(document,r),!0}catch{return!1}}async function Zf(){if(Kf||qf||!jf)return;let e=tp(X,Z),t=JSON.stringify(rp);qf=Xf(!0);let n=await qf;qf=null,Qf=Date.now(),n&&(tp(X,Z)!==e&&sp(),JSON.stringify(rp)!==t&&op())}var Qf=Date.now();function $f(e){let t=document.querySelector(`[data-pr-state-slot]`);if(!t)return;let n=Ia(e,t.hasAttribute(`data-beside-number`));t.innerHTML!==n&&(t.innerHTML=n)}function ep(e){Nf&&(Nf.disabled=e),Mf&&e&&(Mf.textContent=`Checking…`,Mf.dataset.state=`checking`)}function tp(e,t){if(!e)return JSON.stringify({report:`none`,remote:t});let{checkedAt:n,...r}=e;return JSON.stringify({...r,remote:t})}var np=document.querySelector(`[data-kiss-fresh-region]`),rp=ap(np?.dataset.freshness),ip=np?.dataset.dismissedSha;function ap(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function op(){ka(rp?.state===`changed`),np&&(np.innerHTML=xa(np.dataset.reviewedSha??``,rp,{dismissedSha:ip,actions:$l!==``}))}np?.addEventListener(`click`,e=>{let t=e.target.closest(`[data-kiss-freshness-dismiss]`);t&&(ip=t.dataset.kissFreshnessDismiss||void 0,op(),fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dismissKissFreshnessSha:ip??null})}).catch(()=>{}))});function sp(){jf&&(jf.innerHTML=Yi(X,{dismissedSha:If,open:Ff,actions:$l!==``,availability:Lf,remote:Z}),cp())}function cp(){if(Mf&&(X||Z)){let{label:e,state:t}=qi(X,Z);Mf.textContent=e,Mf.dataset.state=t,sa(document,t)}}document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`[data-copy-command]`);if(n)return lp(n);let r=t.closest(`[data-notice-dismiss]`);if(r){let e=r instanceof HTMLAnchorElement;e||r.closest(`[data-notice]`)?.remove(),fetch(R(`/prefs`),{method:`POST`,keepalive:e,headers:{"content-type":`application/json`},body:JSON.stringify({dismissNotice:r.dataset.noticeDismiss})}).catch(()=>{});return}let i=t.closest(`[data-pr-recheck]`);if(i)return void dp(i);if(t.closest(`[data-review-update]`))return void hp();let a=t.closest(`[data-update-cancel]`);if(a)return void _p(a,`update`);let o=t.closest(`[data-review-cancel]`);if(o)return void _p(o,`review`);t.closest(`[data-update-close]`)&&document.querySelector(`[data-update-result]`)?.remove()});function lp(e){let t=e.dataset.copyCommand??``;navigator.clipboard?.writeText(t).then(()=>up(e,`Copied`),()=>up(e,`Select it`))}function up(e,t,n=1400){let r=e.textContent;e.textContent=t,setTimeout(()=>{e.textContent=r},n)}async function dp(e){if(mp)return;mp=!0;let t=[...document.querySelectorAll(`[data-pr-recheck]`)];for(let e of t){e.disabled=!0;let t=fp(e);t?t.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking the PR discussion. ${bp}`:e.innerHTML=`<span class="prb-spinner" aria-hidden="true"></span>Re-checking…`}fp(e)||xp(e);let n=!1,r=()=>{n||(n=!0,window.clearInterval(i),fp(e)&&pp(),window.location.reload())},i=window.setInterval(async()=>{try{let e=await(await fetch(R(`/job`))).json();e.update&&e.update.phase!==`none`&&!be(e.update.phase)&&r()}catch{}},500);try{await fetch(R(`/refresh`),{method:`POST`})}catch{}r()}function fp(e){return e.closest(`.prb-fresh-notes p`)}function pp(){try{sessionStorage.setItem(Pf,`1`)}catch{}}var mp=!1;async function hp(){if(mp)return;mp=!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(R(`/job`))).json();e.update&&e.update.phase!==`none`&&!be(e.update.phase)&&n()}catch{}},500);try{await fetch(R(`/update`),{method:`POST`})}catch{}n()}var gp={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 _p(e,t){let n=gp[t],r=(t===`review`?e.dataset.reviewCancel:e.dataset.updateCancel)??``,i=e.textContent??n.label;e.disabled=!0,e.textContent=`Cancelling…`;let a;try{let e=await fetch(R(n.path),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.body(r))});if(!e.ok)throw Error(`refused`);a=n.took(await e.json())}catch{e.disabled=!1,e.textContent=i,yp(e,`The workspace server did not answer, so nothing was cancelled. Try again.`);return}a||yp(e,n.tooLate),await Oo({look:async()=>{let e=await fetch(R(`/job`),{signal:AbortSignal.timeout(vp)});return n.running(await e.json())},reload:()=>window.location.reload()})}var vp=3e3;function yp(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 bp=`Fetching the latest comments, then reassessing issues and questions against anything new.`;function xp(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=bp,t.appendChild(n),n}var Sp=So(document),Cp=null,wp=Date.now();function Tp(){Cp===null&&(Cp=window.setTimeout(()=>{Cp=null,Ep()},Se(Date.now()-wp)))}async function Ep(){try{let e=await(await fetch(R(`/job`))).json();if(qu&&!e.ask||Op&&!e.diagram){window.location.reload();return}let t={job:e,kiss:e.kiss,update:e.update};for(let[e,n]of Sp){let r=t[e];if(r){if(Co(e,r,document)){window.location.reload();return}e===`update`||n.matches(`[data-progress-pane]`)?To(n,r.phase,r.progress):Dp(n,r.progress)}}}catch{}Tp()}function Dp(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 Op=document.querySelector(`[data-diagram-running]`)!==null;(Sp.size>0||qu||Op)&&(wp=Date.now(),Tp()),document.querySelector(`[data-started-at]`)&&Do(document);function kp(e,t=`The retry could not be started. You can try again.`){let n=e.parentElement;if(!n)return;let r=n.querySelector(`.prb-job-retry-status`);r||(r=document.createElement(`p`),r.className=`prb-job-retry-status`,r.setAttribute(`role`,`status`),n.insertBefore(r,e.nextSibling)),r.textContent=t}function Ap(e){e.parentElement?.querySelector(`.prb-job-retry-status`)?.remove()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-job-retry]`);if(!t)return;let n=t.textContent??`Retry`;t.disabled=!0,t.textContent=`Retrying…`,Ap(t);let r=e=>{t.disabled=!1,t.textContent=n,kp(t,e)};fetch(R(`/retry`),{method:`POST`}).then(async e=>{if(e.ok)return void window.location.reload();let t=await e.json().catch(()=>null);r(typeof t?.error==`string`?t.error:void 0)}).catch(()=>r(`The workspace server did not answer. It may have stopped.`))}),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-run-review-again]`);t&&(t.disabled=!0,t.textContent=`Starting…`,fetch(R(`/reanalyse`),{method:`POST`}).then(e=>{if(!e.ok)throw Error(`refused`);location.reload()}).catch(()=>{t.disabled=!1,t.textContent=Jr,up(t,`Could not start. Try again`,2500)}))});var jp={send:async e=>{let t=await fetch(R(`/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)=>{Sd(`kiss`,e,t,`recommendation`,`decided`),Sd(`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){wa(r,Ca(n),jp);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(R(`/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 Mp=document.body.dataset.defaultView||`overview`;window.addEventListener(`popstate`,e=>{let t=_e(e.state)??te(window.location.hash)??{kind:`view`,view:Mp},n=!z||!re(z,t),r=su;su=!1,r?xu(t):cu(()=>xu(t)),n&&yu(t),Hp()});var Np=te(window.location.hash),Pp=window.location.hash===xl,Fp=L.current().ui===null,Ip=window.matchMedia(`(max-width: 860px)`).matches,Lp=Fp&&!Np?.focus?Hr(lu.expanded,C(Np??{kind:`view`,view:Mp},bu),e=>document.querySelector(`[data-focus-toggle="${e}"]`)!==null,Ip):null;if(Fp&&K?.dataset.ask===`open`&&Ip&&delete K.dataset.ask,Lp){let e=Np??{kind:`view`,view:Mp};Np||(z=e);let t={...e,focus:Lp};L.replace(ie(t),t),xu(t)}else Np?xu(Np):(z={kind:`view`,view:Mp},L.replace(``,z));au=!0;var Rp={enterTour(){let e=z,t=e?.kind===`view`&&e.view===`overview`&&!e.focus;return t||cu(()=>xu({kind:`view`,view:`overview`})),()=>{!t&&e&&cu(()=>xu(e))}},save(e){fetch(R(`/prefs`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({guidedTour:e})}).catch(()=>{})}};Pp?Nl(document,window,Rp):Zl.dataset.guidedTour===`offer`&&Al(document,window,{mode:`first`,host:Rp});var zp={doc:document,main:document.querySelector(`main.prb-doc`),rail:document.querySelector(`.prb-rail`),log:H,panes:K};L.setCapturer(()=>Pi(zp));async function Bp(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?Lu.pending(o):void 0;if(!o||!Di(s?s.request:Ti(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}=Fu(e);t.insertAdjacentElement(n,o),e.setAttribute(`aria-expanded`,`true`)}if(!await Ru(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`)&&vl(o,a.tall),t&&Ei(o,t.top,t.offset))}function Vp(e){Si(e)?.remove(),e.setAttribute(`aria-expanded`,`false`)}async function Hp(){let e=++vu,t=()=>vu===e;await Fi(zp,L.current().ui,{setFold:(e,t)=>cu(()=>ju(e,t)),setAsk:e=>cu(()=>Ad(e)),clearAsk:()=>{K&&delete K.dataset.ask,jd(kd())},openPanel:(e,n)=>Bp(e,n,t),closePanel:Vp,stillCurrent:t})}Hp();var Up=U?Hi(U,{storage:(()=>{try{return window.sessionStorage}catch{return null}})(),path:window.location.pathname,restore:!0,win:window}):null;G=Up?.restoredStage??null,Nd(),Pu();var Wp=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=>{Wp(e.target)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Escape`)return;let t=document.querySelector(`[data-analysis-details][open], [data-range-details][open]`);t&&(Wp(),t.querySelector(`summary`)?.focus())});var Q=document.querySelector(`.prb-header [data-review-menu]`),$=Ja({root:document,post:(e,t)=>fetch(R(e),t===void 0?{method:`POST`}:{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),gate:Gf,checkForUpdates:()=>Jf()});function Gp(e){if(!Q)return;let t=Q.querySelector(`[data-menu-panel]`);t?.hidden&&B.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 Kp(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 B.closeAll();Gp(n.error)}}function qp(e){return Q?.querySelector(`[data-menu-items] ${e}`)??null}function Jp(e={}){if(!Q)return;Q.querySelector(`[data-menu-panel]`)?.hidden&&B.open(Q);let t=Q.querySelector(`[data-menu-items]`),n=Q.querySelector(`[data-menu-confirm]`);t&&(t.hidden=!0),n&&(n.hidden=!1),e.focusCancel&&Q.querySelector(`[data-cancel-delete]`)?.focus()}async function Yp(e,t){if($.busy()||ae(t))return;oe(t,!0);let n;try{n=await e()}finally{oe(t,!1)}n.busy||n.error===null||r(y(),{kind:`failed`,text:n.error})}if(document.querySelector(`.prb-header-stats`)?.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`button[data-page-status]`);if(n){Yp(()=>$.setComplete(n.dataset.status!==`complete`),n);return}let r=t?.closest(`[data-lifecycle-control]`),i=r?.querySelector(`button[data-page-lifecycle]`);if(!r||!i)return;let a=t?.closest(`[data-lifecycle-set]`);if(a){B.close(r,{returnFocus:!0}),Yp(()=>$.setLifecycle(a.dataset.lifecycleSet),i);return}let o=i.dataset.lifecyclePress;t?.closest(`[data-lifecycle-pill]`)&&o&&o!==`menu`&&Yp(()=>$.setLifecycle(o),i)}),Q){let t=Q.querySelector(`[data-confirm-delete]`),n=()=>hf(Q);Q.addEventListener(`click`,e=>{let t=e.target,a=t?.closest(`[data-copy-id]`);if(a?.dataset.copyId){e.stopPropagation(),ne(a,a.dataset.copyId);return}if(t?.closest(`[data-tour-replay]`)){e.stopPropagation(),B.closeAll(),Nl(document,window,Rp);return}let o=t?.closest(`[data-pin-toggle]`);if(o){e.stopPropagation(),r(o);return}if(t?.closest(`[data-fresh-check], [data-fetch-remote]`)){B.closeAll();return}let s=t?.closest(`[data-mark-status]`);if(s){e.stopPropagation(),Kp(()=>$.setComplete(s.dataset.markStatus===`complete`),s);return}let c=t?.closest(`[data-lifecycle-set]`);if(c){e.stopPropagation(),Kp(()=>$.setLifecycle(c.dataset.lifecycleSet),c);return}let l=t?.closest(`[data-queue-action]`);if(l){e.stopPropagation(),Kp(()=>$.setQueued(l.dataset.queueAction===`remove`?`remove`:`add`),l);return}if(t?.closest(`[data-delete]`)){e.stopPropagation(),Jp();return}if(t?.closest(`[data-cancel-delete]`)){e.stopPropagation(),n();return}t?.closest(`[data-confirm-delete]`)&&(e.stopPropagation(),i())});let r=async t=>{let n=t.getAttribute(`aria-pressed`)!==`true`;t.disabled=!0;let r=null;try{let e=await fetch(R(`/state`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pinned:n})});e.ok&&(r=(await e.json()).pinned===!0)}catch{}if(t.disabled=!1,r===null){t.textContent=n?`Could not pin`:`Could not unpin`,window.setTimeout(()=>{t.textContent=e(t.getAttribute(`aria-pressed`)===`true`)},1600);return}t.setAttribute(`aria-pressed`,String(r)),t.textContent=e(r)},i=async()=>{t&&(t.disabled=!0,t.textContent=`Deleting`);let{error:e}=await $.deleteReview();if(e===null)return void window.location.replace(`/`);t&&(t.disabled=!1,t.textContent=`Delete`),n(),Gp(e)}}function Xp(e){return{available:()=>document.querySelector(`.prb-rail a[data-view-nav="${e}"]`)!==null,run:()=>Du(e,{keepFocus:!0})}}function Zp(){if(!z)return null;let e=z.focus??(z.kind===`section`?`guide`:z.view);return he.includes(e)&&document.querySelector(`[data-focus-toggle="${e}"]`)?e:null}function Qp(){return[...document.querySelectorAll(`.prb-view:not([hidden]) [data-feedback-select]`)].some(e=>e.checkVisibility())}p(`review`,{..._f.commands,...mo(Y,document),"review.section.review":{available:()=>vo(document)!==null,run:()=>{let e=vo(document);e&&Du(e,{keepFocus:!0})}},"review.section.kiss":Xp(`kiss`),"review.section.issues":Xp(`issues`),"review.section.diagrams":Xp(`map`),"review.section.questions":Xp(`questions`),"review.section.files":Xp(`files`),"review.buddy.open":{available:()=>Od!==null,run:()=>{z?.focus?pe(z,`buddy`,Su):Ad(!0),document.querySelector(`[data-ask-form] textarea`)?.focus()}},"review.buddy.prompt":{available:()=>Od!==null&&U!==null,panel:fe({prompts:()=>J,choose:nf})},"review.focus.toggle":{available:()=>Zp()!==null,run:()=>{let e=Zp();e&&Eu(e)}},"review.leave":{available:e=>!!(e&&de(e,document,e.target===U||Y.state().selecting||!!z?.focus)),run:e=>{U&&e?.target===U?U.blur():Y.state().selecting?Y.exit():z?.focus&&ce(z,Su)}},"review.feedback.toggle":{available:()=>Y.state().selecting||Qp(),label:()=>Y.state().selecting?`Exit Prepare feedback`:`Start Prepare feedback`,run:()=>Y.state().selecting?Y.exit():Y.enter()},"review.mark.reviewed":{available:()=>$.offer().reviewed,run:()=>void Kp(()=>$.setComplete(!0),qp(`[data-mark-status]`))},"review.mark.waiting":{available:()=>$.offer().waiting,run:()=>void Kp(()=>$.setLifecycle(`waiting`),qp(`[data-lifecycle-set="waiting"]`))},"review.mark.done":{available:()=>$.offer().done,run:()=>void Kp(()=>$.setLifecycle(`done`),qp(`[data-lifecycle-set="done"]`))},"review.queue.toggle":{available:()=>$.offer().queue,run:()=>void Kp(()=>$.toggleQueued(),qp(`[data-queue-action]`))},"review.checkUpdates":{available:()=>$.offer().checkForUpdates,run:()=>void $.checkForUpdates()},"review.update":{available:()=>Ji(X,{actions:$l!==``&&!Sp.has(`update`)&&!mp,remote:Z}),run:()=>void hp()},"review.delete":{available:()=>$.offer().delete,run:()=>Jp({focusCancel:!0})}},{onOpen:()=>B.closeAll()}),h(),$l&&Gc({markSeen:()=>fetch(R(`/seen`),{method:`POST`}),askUnread:()=>fetch(R(`/unread`))}),setTimeout(()=>{Wl(Il([...document.querySelectorAll(`[data-view="files"] [data-file]`)].map(e=>e.dataset.file??``)))},0),S(window,()=>window.location.reload());var $p=15e3,em=6e4;function tm(){return $l!==``&&document.visibilityState===`visible`&&!Sp.has(`update`)}document.addEventListener(`visibilitychange`,()=>{tm()&&Date.now()-Qf>=$p&&Zf()}),window.setInterval(()=>{tm()&&Zf()},em);export{bc as n,rn as r,Cc as t};
|