@preventive/triage 1.0.0-alpha.3 → 1.0.0-alpha.30
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/LICENSE-APACHE +202 -0
- package/api/reap.ts +17 -0
- package/cli.js +6 -0
- package/client/finding-link.js +305 -0
- package/client/linked-findings.d.ts +1 -0
- package/client/linked-findings.js +111 -0
- package/common/bundle-commit.d.ts +1 -0
- package/common/bundle-commit.js +4 -0
- package/common/bundle-metadata.d.ts +10 -0
- package/common/bundle-metadata.js +182 -0
- package/common/bundle-reasons.d.ts +2 -0
- package/common/bundle-reasons.js +21 -0
- package/common/bundle-source-links.d.ts +5 -0
- package/common/bundle-source-links.js +82 -0
- package/common/bundle-sources.d.ts +3 -0
- package/common/bundle-sources.js +284 -0
- package/common/bundle-stats.js +41 -0
- package/common/bundle-tabs.js +1 -0
- package/common/code-language.js +51 -0
- package/common/default-scan-models.ts +30 -0
- package/common/finding-id.js +47 -0
- package/common/github-issue-labels.d.ts +1 -0
- package/common/github-issue-labels.js +11 -0
- package/common/github-pr.ts +56 -0
- package/common/managed/comments.ts +34 -0
- package/common/managed/permissions.ts +35 -0
- package/common/managed/report-content.ts +42 -0
- package/common/managed/report-filter.ts +108 -0
- package/common/managed/roles.ts +28 -0
- package/common/managed/routes.d.ts +2 -0
- package/common/managed/routes.js +124 -0
- package/common/managed/scan-models.ts +6 -0
- package/common/managed/triage.ts +83 -0
- package/common/save-error-reason.ts +20 -7
- package/common/scan-server.ts +13 -0
- package/common/server-info.ts +35 -0
- package/common/utf8.d.ts +3 -0
- package/common/utf8.js +45 -0
- package/out/brotli-fallback.js +3 -3
- package/out/client-managed-import.js +81 -0
- package/out/client-managed.js +167 -0
- package/out/client-sync.js +16 -13
- package/out/github-issue-authorized.html +3 -0
- package/out/github-issue-authorized.js +1 -0
- package/out/graph.js +30 -4
- package/out/index.html +55 -8
- package/out/prism.js +2 -2
- package/out/stasis.svg +20 -0
- package/out/terminal.js +273 -39
- package/out/view.css +1 -1
- package/out/view.js +259 -63
- package/package.json +205 -57
- package/server-common/database-config.ts +16 -0
- package/server-common/initialize.ts +18 -0
- package/server-common/npm-advisories.ts +101 -0
- package/{server → server-common}/origin.ts +5 -5
- package/server-common/reap.ts +48 -0
- package/server-common/scan-config.ts +19 -0
- package/server-common/standalone.ts +29 -0
- package/server-common/storage-crypto.ts +182 -0
- package/server-common/storage-log.ts +38 -0
- package/server-common/vercel-blob.ts +102 -0
- package/server-e2e/app.ts +486 -0
- package/{server → server-e2e}/auth.ts +5 -1
- package/{server → server-e2e}/bus-receiver.ts +2 -1
- package/{server → server-e2e}/cli.js +9 -4
- package/{server → server-e2e}/config.ts +56 -35
- package/{server → server-e2e}/db-neon.ts +2 -2
- package/{server → server-e2e}/db-revision-sql.ts +1 -1
- package/{server → server-e2e}/db-stmt.ts +2 -2
- package/{server → server-e2e}/db.ts +7 -7
- package/{server → server-e2e}/http.ts +110 -12
- package/{server → server-e2e}/hub.ts +40 -9
- package/server-e2e/index.ts +17 -0
- package/server-e2e/lifecycle.ts +95 -0
- package/{server → server-e2e}/neon-driver.ts +2 -2
- package/{server → server-e2e}/npm-proxy.ts +11 -144
- package/{server → server-e2e}/objstore/blob-fs.ts +2 -2
- package/{server → server-e2e}/objstore/blob-vercel.ts +13 -117
- package/{server → server-e2e}/objstore/blob.ts +9 -2
- package/server-e2e/objstore/fetch-mint-guard.ts +74 -0
- package/{server → server-e2e}/objstore/handlers.ts +9 -8
- package/{server → server-e2e}/objstore/init.ts +35 -18
- package/{server → server-e2e}/objstore/reaper.ts +31 -11
- package/server-e2e/objstore/rest-deny.ts +28 -0
- package/server-e2e/objstore/rest-mint.ts +224 -0
- package/{server → server-e2e}/objstore/rest.ts +58 -33
- package/{server → server-e2e}/objstore/sign.ts +105 -0
- package/{server → server-e2e}/objstore/store-neon.ts +6 -10
- package/{server → server-e2e}/objstore/store.ts +7 -7
- package/{server → server-e2e}/objstore/tokens.ts +1 -1
- package/{server → server-e2e}/pubsub.ts +12 -9
- package/{server → server-e2e}/sign.ts +4 -4
- package/{server → server-e2e}/sse-server.ts +102 -68
- package/{server → server-e2e}/sse-session.ts +28 -8
- package/{server → server-e2e}/static.ts +31 -21
- package/server-e2e/sync-handlers.ts +408 -0
- package/{server → server-e2e}/util.ts +9 -0
- package/{server → server-e2e}/ws-server.ts +20 -9
- package/server-managed/activity.ts +231 -0
- package/server-managed/avatar-store.ts +12 -0
- package/server-managed/blob-store.ts +17 -0
- package/server-managed/brotli.ts +10 -0
- package/server-managed/bundle-advisories.ts +53 -0
- package/server-managed/bundle-advisory-inventory.ts +75 -0
- package/server-managed/bundle-build-diagnostics.d.ts +10 -0
- package/server-managed/bundle-build-diagnostics.js +23 -0
- package/server-managed/bundle-build-leases.ts +41 -0
- package/server-managed/bundle-build-worker.js +54 -0
- package/server-managed/bundle-build.ts +168 -0
- package/server-managed/bundle-cache.ts +166 -0
- package/server-managed/bundle-catalog.ts +29 -0
- package/server-managed/bundle-store.ts +24 -0
- package/server-managed/bundle-summary-cache.ts +116 -0
- package/server-managed/bundle.ts +104 -0
- package/server-managed/cache-storage.ts +19 -0
- package/server-managed/cli.js +21 -0
- package/server-managed/combined.ts +46 -0
- package/server-managed/comments.ts +151 -0
- package/server-managed/config.ts +149 -0
- package/server-managed/content-access.ts +15 -0
- package/server-managed/crypto.ts +25 -0
- package/server-managed/db-methods.ts +1517 -0
- package/server-managed/db-neon.ts +277 -0
- package/server-managed/db-schema.ts +206 -0
- package/server-managed/db-table-names.ts +22 -0
- package/server-managed/db.ts +120 -0
- package/server-managed/github-app.ts +385 -0
- package/server-managed/github-errors.ts +49 -0
- package/server-managed/github-issue-oauth.ts +48 -0
- package/server-managed/github-issues.ts +152 -0
- package/server-managed/github-metadata.ts +98 -0
- package/server-managed/github-oauth.ts +199 -0
- package/server-managed/github-pulls.ts +227 -0
- package/server-managed/http-response.ts +18 -0
- package/server-managed/http.ts +2350 -0
- package/server-managed/import-triage.ts +51 -0
- package/server-managed/index.ts +175 -0
- package/server-managed/managed-issues.ts +47 -0
- package/server-managed/management-catalog.ts +45 -0
- package/server-managed/management.ts +86 -0
- package/server-managed/object-storage-disk.ts +144 -0
- package/server-managed/object-storage-vercel.ts +60 -0
- package/server-managed/object-storage.ts +71 -0
- package/server-managed/package-entry-points.ts +51 -0
- package/server-managed/public-workspace.ts +146 -0
- package/server-managed/repo-path.ts +21 -0
- package/server-managed/report-migration.ts +35 -0
- package/server-managed/report-query.ts +10 -0
- package/server-managed/report-response.ts +16 -0
- package/server-managed/report-sources.ts +166 -0
- package/server-managed/repository-browser.ts +139 -0
- package/server-managed/repository-discovery.ts +82 -0
- package/server-managed/repository-policy.ts +27 -0
- package/server-managed/revisions.ts +35 -0
- package/server-managed/session.ts +78 -0
- package/server-managed/slugs.ts +38 -0
- package/server-managed/solidity-entry-points.ts +69 -0
- package/server-managed/sql-postgres.ts +31 -0
- package/server-managed/sql.ts +72 -0
- package/server-managed/static.ts +28 -0
- package/server-managed/storage-command.ts +16 -0
- package/server-managed/storage-db.ts +175 -0
- package/server-managed/storage-encryption.ts +211 -0
- package/server-managed/storage-maintenance.ts +223 -0
- package/server-managed/storage-payload.ts +72 -0
- package/server-managed/storage-stores.ts +81 -0
- package/server-managed/storage.ts +58 -0
- package/server-managed/team-catalog.ts +7 -0
- package/server-managed/team-feed.ts +173 -0
- package/server-managed/team-reports.ts +219 -0
- package/server-managed/triage-response.ts +16 -0
- package/server-managed/uploads.ts +65 -0
- package/server-managed/workspace-shares.ts +162 -0
- package/server.ts +50 -0
- package/server/index.ts +0 -477
- package/server/lifecycle.ts +0 -204
- package/server/sync-handlers.ts +0 -320
- /package/{LICENSE → LICENSE-MIT} +0 -0
- /package/{server → server-e2e}/config.example.json +0 -0
- /package/{server → server-e2e}/objstore/fs.ts +0 -0
- /package/{server → server-e2e}/peer.ts +0 -0
- /package/{server → server-e2e}/validation.ts +0 -0
package/out/view.js
CHANGED
|
@@ -1,52 +1,169 @@
|
|
|
1
|
-
var
|
|
2
|
-
\f\r]`,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),hd=/'/g,gd=/"/g,yd=/^(?:script|style|textarea|title)$/i,Ci=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),c=Ci(1),F0=Ci(2),M0=Ci(3),ae=Symbol.for("lit-noChange"),g=Symbol.for("lit-nothing"),md=new WeakMap,sr=ir.createTreeWalker(ir,129);function wd(e,t){if(!Si(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return ud!==void 0?ud.createHTML(t):t}var vd=(e,t)=>{let r=e.length-1,n=[],o,s=t===2?"<svg>":t===3?"<math>":"",i=fn;for(let l=0;l<r;l++){let d=e[l],u,p,f=-1,h=0;for(;h<d.length&&(i.lastIndex=h,p=i.exec(d),p!==null);)h=i.lastIndex,i===fn?p[1]==="!--"?i=pd:p[1]!==void 0?i=fd:p[2]!==void 0?(yd.test(p[2])&&(o=RegExp("</"+p[2],"g")),i=or):p[3]!==void 0&&(i=or):i===or?p[0]===">"?(i=o??fn,f=-1):p[1]===void 0?f=-2:(f=i.lastIndex-p[2].length,u=p[1],i=p[3]===void 0?or:p[3]==='"'?gd:hd):i===gd||i===hd?i=or:i===pd||i===fd?i=fn:(i=or,o=void 0);let b=i===or&&e[l+1].startsWith("/>")?" ":"";s+=i===fn?d+Cg:f>=0?(n.push(u),d.slice(0,f)+xi+d.slice(f)+Ct+b):d+Ct+(f===-2?l:b)}return[wd(e,s+(e[r]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),n]},mn=class e{constructor({strings:t,_$litType$:r},n){let o;this.parts=[];let s=0,i=0,l=t.length-1,d=this.parts,[u,p]=vd(t,r);if(this.el=e.createElement(u,n),sr.currentNode=this.el.content,r===2||r===3){let f=this.el.content.firstChild;f.replaceWith(...f.childNodes)}for(;(o=sr.nextNode())!==null&&d.length<l;){if(o.nodeType===1){if(o.hasAttributes())for(let f of o.getAttributeNames())if(f.endsWith(xi)){let h=p[i++],b=o.getAttribute(f).split(Ct),m=/([.?@])?(.*)/.exec(h);d.push({type:1,index:s,name:m[2],strings:b,ctor:m[1]==="."?Lo:m[1]==="?"?Po:m[1]==="@"?Oo:lr}),o.removeAttribute(f)}else f.startsWith(Ct)&&(d.push({type:6,index:s}),o.removeAttribute(f));if(yd.test(o.tagName)){let f=o.textContent.split(Ct),h=f.length-1;if(h>0){o.textContent=Fo?Fo.emptyScript:"";for(let b=0;b<h;b++)o.append(f[b],hn()),sr.nextNode(),d.push({type:2,index:++s});o.append(f[h],hn())}}}else if(o.nodeType===8)if(o.data===_i)d.push({type:2,index:s});else{let f=-1;for(;(f=o.data.indexOf(Ct,f+1))!==-1;)d.push({type:7,index:s}),f+=Ct.length-1}s++}}static createElement(t,r){let n=ir.createElement("template");return n.innerHTML=t,n}};function ar(e,t,r=e,n){if(t===ae)return t;let o=n!==void 0?r._$Co?.[n]:r._$Cl,s=gn(t)?void 0:t._$litDirective$;return o?.constructor!==s&&(o?._$AO?.(!1),s===void 0?o=void 0:(o=new s(e),o._$AT(e,r,n)),n!==void 0?(r._$Co??=[])[n]=o:r._$Cl=o),o!==void 0&&(t=ar(e,o._$AS(e,t.values),o,n)),t}var Mo=class{constructor(t,r){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=r}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:r},parts:n}=this._$AD,o=(t?.creationScope??ir).importNode(r,!0);sr.currentNode=o;let s=sr.nextNode(),i=0,l=0,d=n[0];for(;d!==void 0;){if(i===d.index){let u;d.type===2?u=new Ir(s,s.nextSibling,this,t):d.type===1?u=new d.ctor(s,d.name,d.strings,this,t):d.type===6&&(u=new No(s,this,t)),this._$AV.push(u),d=n[++l]}i!==d?.index&&(s=sr.nextNode(),i++)}return sr.currentNode=ir,o}p(t){let r=0;for(let n of this._$AV)n!==void 0&&(n.strings!==void 0?(n._$AI(t,n,r),r+=n.strings.length-2):n._$AI(t[r])),r++}},Ir=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,r,n,o){this.type=2,this._$AH=g,this._$AN=void 0,this._$AA=t,this._$AB=r,this._$AM=n,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,r=this._$AM;return r!==void 0&&t?.nodeType===11&&(t=r.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,r=this){t=ar(this,t,r),gn(t)?t===g||t==null||t===""?(this._$AH!==g&&this._$AR(),this._$AH=g):t!==this._$AH&&t!==ae&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):bd(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==g&&gn(this._$AH)?this._$AA.nextSibling.data=t:this.T(ir.createTextNode(t)),this._$AH=t}$(t){let{values:r,_$litType$:n}=t,o=typeof n=="number"?this._$AC(t):(n.el===void 0&&(n.el=mn.createElement(wd(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===o)this._$AH.p(r);else{let s=new Mo(o,this),i=s.u(this.options);s.p(r),this.T(i),this._$AH=s}}_$AC(t){let r=md.get(t.strings);return r===void 0&&md.set(t.strings,r=new mn(t)),r}k(t){Si(this._$AH)||(this._$AH=[],this._$AR());let r=this._$AH,n,o=0;for(let s of t)o===r.length?r.push(n=new e(this.O(hn()),this.O(hn()),this,this.options)):n=r[o],n._$AI(s),o++;o<r.length&&(this._$AR(n&&n._$AB.nextSibling,o),r.length=o)}_$AR(t=this._$AA.nextSibling,r){for(this._$AP?.(!1,!0,r);t!==this._$AB;){let n=dd(t).nextSibling;dd(t).remove(),t=n}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},lr=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,r,n,o,s){this.type=1,this._$AH=g,this._$AN=void 0,this.element=t,this.name=r,this._$AM=o,this.options=s,n.length>2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=g}_$AI(t,r=this,n,o){let s=this.strings,i=!1;if(s===void 0)t=ar(this,t,r,0),i=!gn(t)||t!==this._$AH&&t!==ae,i&&(this._$AH=t);else{let l=t,d,u;for(t=s[0],d=0;d<s.length-1;d++)u=ar(this,l[n+d],r,d),u===ae&&(u=this._$AH[d]),i||=!gn(u)||u!==this._$AH[d],u===g?t=g:t!==g&&(t+=(u??"")+s[d+1]),this._$AH[d]=u}i&&!o&&this.j(t)}j(t){t===g?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},Lo=class extends lr{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===g?void 0:t}},Po=class extends lr{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==g)}},Oo=class extends lr{constructor(t,r,n,o,s){super(t,r,n,o,s),this.type=5}_$AI(t,r=this){if((t=ar(this,t,r,0)??g)===ae)return;let n=this._$AH,o=t===g&&n!==g||t.capture!==n.capture||t.once!==n.once||t.passive!==n.passive,s=t!==g&&(n===g||o);o&&this.element.removeEventListener(this.name,this,n),s&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},No=class{constructor(t,r,n){this.element=t,this.type=6,this._$AN=void 0,this._$AM=r,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(t){ar(this,t)}},kd={M:xi,P:Ct,A:_i,C:1,L:vd,R:Mo,D:bd,V:ar,I:Ir,H:lr,N:Po,U:Oo,B:Lo,F:No},Eg=$i.litHtmlPolyfillSupport;Eg?.(mn,Ir),($i.litHtmlVersions??=[]).push("3.3.2");var W=(e,t,r)=>{let n=r?.renderBefore??t,o=n._$litPart$;if(o===void 0){let s=r?.renderBefore??null;n._$litPart$=o=new Ir(t.insertBefore(hn(),s),s,void 0,r??{})}return o._$AI(e),o};var Ei=globalThis,H=class extends St{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=W(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return ae}};H._$litElement$=!0,H.finalized=!0,Ei.litElementHydrateSupport?.({LitElement:H});var Ag=Ei.litElementPolyfillSupport;Ag?.({LitElement:H});(Ei.litElementVersions??=[]).push("4.2.2");var Be={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},ft=e=>(...t)=>({_$litDirective$:e,values:t}),Je=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,r,n){this._$Ct=t,this._$AM=r,this._$Ci=n}_$AS(t,r){return this.update(t,r)}update(t,r){return this.render(...r)}};var F=ft(class extends Je{constructor(e){if(super(e),e.type!==Be.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(n=>n!=="")));for(let n in t)t[n]&&!this.nt?.has(n)&&this.st.add(n);return this.render(t)}let r=e.element.classList;for(let n of this.st)n in t||(r.remove(n),this.st.delete(n));for(let n in t){let o=!!t[n];o===this.st.has(n)||this.nt?.has(n)||(o?(r.add(n),this.st.add(n)):(r.remove(n),this.st.delete(n)))}return ae}});var{I:Tg}=kd,$d=e=>e;var _d=e=>e.strings===void 0,xd=()=>document.createComment(""),Rr=(e,t,r)=>{let n=e._$AA.parentNode,o=t===void 0?e._$AB:t._$AA;if(r===void 0){let s=n.insertBefore(xd(),o),i=n.insertBefore(xd(),o);r=new Tg(s,i,e,e.options)}else{let s=r._$AB.nextSibling,i=r._$AM,l=i!==e;if(l){let d;r._$AQ?.(e),r._$AM=e,r._$AP!==void 0&&(d=e._$AU)!==i._$AU&&r._$AP(d)}if(s!==o||l){let d=r._$AA;for(;d!==s;){let u=$d(d).nextSibling;$d(n).insertBefore(d,o),d=u}}}return r},Ot=(e,t,r=e)=>(e._$AI(t,r),e),Ig={},Do=(e,t=Ig)=>e._$AH=t,Sd=e=>e._$AH,Uo=e=>{e._$AR(),e._$AA.remove()};var Cd=(e,t,r)=>{let n=new Map;for(let o=t;o<=r;o++)n.set(e[o],o);return n},J=ft(class extends Je{constructor(e){if(super(e),e.type!==Be.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,r){let n;r===void 0?r=t:t!==void 0&&(n=t);let o=[],s=[],i=0;for(let l of e)o[i]=n?n(l,i):i,s[i]=r(l,i),i++;return{values:s,keys:o}}render(e,t,r){return this.dt(e,t,r).values}update(e,[t,r,n]){let o=Sd(e),{values:s,keys:i}=this.dt(t,r,n);if(!Array.isArray(o))return this.ut=i,s;let l=this.ut??=[],d=[],u,p,f=0,h=o.length-1,b=0,m=s.length-1;for(;f<=h&&b<=m;)if(o[f]===null)f++;else if(o[h]===null)h--;else if(l[f]===i[b])d[b]=Ot(o[f],s[b]),f++,b++;else if(l[h]===i[m])d[m]=Ot(o[h],s[m]),h--,m--;else if(l[f]===i[m])d[m]=Ot(o[f],s[m]),Rr(e,d[m+1],o[f]),f++,m--;else if(l[h]===i[b])d[b]=Ot(o[h],s[b]),Rr(e,o[f],o[h]),h--,b++;else if(u===void 0&&(u=Cd(i,b,m),p=Cd(l,f,h)),u.has(l[f]))if(u.has(l[h])){let y=p.get(i[b]),k=y!==void 0?o[y]:null;if(k===null){let w=Rr(e,o[f]);Ot(w,s[b]),d[b]=w}else d[b]=Ot(k,s[b]),Rr(e,o[f],k),o[y]=null;b++}else Uo(o[h]),h--;else Uo(o[f]),f++;for(;b<=m;){let y=Rr(e,d[m+1]);Ot(y,s[b]),d[b++]=y}for(;f<=h;){let y=o[f++];y!==null&&Uo(y)}return this.ut=i,Do(e,d),ae}});var Ed="important",Rg=" !"+Ed,ve=ft(class extends Je{constructor(e){if(super(e),e.type!==Be.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,r)=>{let n=e[r];return n==null?t:t+`${r=r.includes("-")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${n};`},"")}update(e,[t]){let{style:r}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let n of this.ft)t[n]==null&&(this.ft.delete(n),n.includes("-")?r.removeProperty(n):r[n]=null);for(let n in t){let o=t[n];if(o!=null){this.ft.add(n);let s=typeof o=="string"&&o.endsWith(Rg);n.includes("-")||s?r.setProperty(n,s?o.slice(0,-11):o,s?Ed:""):r[n]=o}}return ae}});var Ri=new WeakMap,Rd=Symbol("iteration key");function Bg(e){Ri.set(e,new Map)}function Fg(e,{target:t,key:r,type:n}){n==="iterate"&&(r=Rd);let o=Ri.get(t),s=o.get(r);s||(s=new Set,o.set(r,s)),s.has(e)||(s.add(e),e.cleaners.push(s))}function Mg({target:e,key:t,type:r}){let n=Ri.get(e),o=new Set;if(r==="clear"?n.forEach((s,i)=>{Ai(o,n,i)}):Ai(o,n,t),r==="add"||r==="delete"||r==="clear"){let s=Array.isArray(e)?"length":Rd;Ai(o,n,s)}return o}function Ai(e,t,r){let n=t.get(r);n&&n.forEach(e.add,e)}function Bd(e){e.cleaners&&e.cleaners.forEach(Lg,e),e.cleaners=[]}function Lg(e){e.delete(this)}var Br=[],Ti=!1;function Pg(e,t,r,n){if(e.unobserved)return Reflect.apply(t,r,n);if(Br.indexOf(e)===-1){Bd(e);try{return Br.push(e),Reflect.apply(t,r,n)}finally{Br.pop()}}}function ot(e){let t=Br[Br.length-1];t&&(Fd(t,e),Fg(t,e))}function Nt(e){Mg(e).forEach(Og,e)}function Og(e){Fd(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function Fd(e,t){if(e.debugger&&!Ti)try{Ti=!0,e.debugger(t)}finally{Ti=!1}}function Md(){return Br.length>0}var Ad=Symbol("is reaction");function Ld(e,t={}){let r=e[Ad]?e:function n(){return Pg(n,e,this,arguments)};return r.scheduler=t.scheduler,r.debugger=t.debugger,r[Ad]=!0,t.lazy||r(),r}function Bi(e){e.unobserved||(e.unobserved=!0,Bd(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}var Ce=new WeakMap,Ho=new WeakMap,Ng=Object.prototype.hasOwnProperty;function Wo(e){let t=Ho.get(e);return Md()&&typeof e=="object"&&e!==null?t||jo(e):t||e}function Ii(e,t){let r=e.next;return e.next=()=>{let{done:n,value:o}=r.call(e);return n||(t?o[1]=Wo(o[1]):o=Wo(o)),{done:n,value:o}},e}var Td={has(e){let t=Ce.get(this),r=Reflect.getPrototypeOf(this);return ot({target:t,key:e,type:"has"}),r.has.apply(t,arguments)},get(e){let t=Ce.get(this),r=Reflect.getPrototypeOf(this);return ot({target:t,key:e,type:"get"}),Wo(r.get.apply(t,arguments))},add(e){let t=Ce.get(this),r=Reflect.getPrototypeOf(this),n=r.has.call(t,e),o=r.add.apply(t,arguments);return n||Nt({target:t,key:e,value:e,type:"add"}),o},set(e,t){let r=Ce.get(this),n=Reflect.getPrototypeOf(this),o=n.has.call(r,e),s=n.get.call(r,e),i=n.set.apply(r,arguments);return o?t!==s&&Nt({target:r,key:e,value:t,oldValue:s,type:"set"}):Nt({target:r,key:e,value:t,type:"add"}),i},delete(e){let t=Ce.get(this),r=Reflect.getPrototypeOf(this),n=r.has.call(t,e),o=r.get?r.get.call(t,e):void 0,s=r.delete.apply(t,arguments);return n&&Nt({target:t,key:e,oldValue:o,type:"delete"}),s},clear(){let e=Ce.get(this),t=Reflect.getPrototypeOf(this),r=e.size!==0,n=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return r&&Nt({target:e,oldTarget:n,type:"clear"}),o},forEach(e,...t){let r=Ce.get(this),n=Reflect.getPrototypeOf(this);ot({target:r,type:"iterate"});let o=(s,...i)=>e(Wo(s),...i);return n.forEach.call(r,o,...t)},keys(){let e=Ce.get(this),t=Reflect.getPrototypeOf(this);return ot({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=Ce.get(this),t=Reflect.getPrototypeOf(this);ot({target:e,type:"iterate"});let r=t.values.apply(e,arguments);return Ii(r,!1)},entries(){let e=Ce.get(this),t=Reflect.getPrototypeOf(this);ot({target:e,type:"iterate"});let r=t.entries.apply(e,arguments);return Ii(r,!0)},[Symbol.iterator](){let e=Ce.get(this),t=Reflect.getPrototypeOf(this);ot({target:e,type:"iterate"});let r=t[Symbol.iterator].apply(e,arguments);return Ii(r,e instanceof Map)},get size(){let e=Ce.get(this),t=Reflect.getPrototypeOf(this);return ot({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},zo={get(e,t,r){return e=Ng.call(Td,t)?Td:e,Reflect.get(e,t,r)}},Id=typeof window=="object"?window:Function("return this")(),Pd=new Map([[Map,zo],[Set,zo],[WeakMap,zo],[WeakSet,zo],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);function Dg({constructor:e}){return!(typeof e=="function"&&e.name in Id&&Id[e.name]===e)||Pd.has(e)}function Ug(e){return Pd.get(e.constructor)}var Od=Object.prototype.hasOwnProperty,zg=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));function Wg(e,t,r){let n=Reflect.get(e,t,r);if(typeof t=="symbol"&&zg.has(t))return n;ot({target:e,key:t,receiver:r,type:"get"});let o=Ho.get(n);if(Md()&&typeof n=="object"&&n!==null){if(o)return o;let s=Reflect.getOwnPropertyDescriptor(e,t);if(!s||!(s.writable===!1&&s.configurable===!1))return jo(n)}return o||n}function Hg(e,t){let r=Reflect.has(e,t);return ot({target:e,key:t,type:"has"}),r}function jg(e){return ot({target:e,type:"iterate"}),Reflect.ownKeys(e)}function Vg(e,t,r,n){typeof r=="object"&&r!==null&&(r=Ce.get(r)||r);let o=Od.call(e,t),s=e[t],i=Reflect.set(e,t,r,n);return e!==Ce.get(n)||(o?r!==s&&Nt({target:e,key:t,value:r,oldValue:s,receiver:n,type:"set"}):Nt({target:e,key:t,value:r,receiver:n,type:"add"})),i}function Kg(e,t){let r=Od.call(e,t),n=e[t],o=Reflect.deleteProperty(e,t);return r&&Nt({target:e,key:t,oldValue:n,type:"delete"}),o}var qg={get:Wg,has:Hg,ownKeys:jg,set:Vg,deleteProperty:Kg};function jo(e={}){return Ce.has(e)||!Dg(e)?e:Ho.get(e)||Gg(e)}function Gg(e){let t=Ug(e)||qg,r=new Proxy(e,t);return Ho.set(e,r),Ce.set(r,e),Bg(e),r}var Nd=jo;function Fi(e){let t=!0,r=Ld(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{r()}catch(n){throw Bi(r),n}return()=>Bi(r)}var L=class extends H{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Fi(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,r=Fi(n=>{if(!n){r(),this._dispose===r&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=r,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}};globalThis[Symbol.for("@rray/frontend")]={LitElement:H,html:c,nothing:g,render:W,unsafeCSS:A,StateElement:L,classMap:F,repeat:J,styleMap:ve};var Ee=document.querySelector("#drop-zone"),C=document.querySelector("#report"),Dd=document.querySelector("app-sidebar");function Fr(e,t){let r=URL.createObjectURL(e),n=document.createElement("span");n.style.display="none",W(c`<a href="${r}" download="${t}"></a>`,n),document.body.append(n),n.firstElementChild.click(),n.remove(),URL.revokeObjectURL(r)}function ht(e){return new Error("Another dialog is already open. Close it and try again.",{cause:e})}function zd(e){let t=e?.package?.npm?.version;if(typeof t=="string"&&t)return t;let r=e?.file;if(!r)return null;let n=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(r);if(!n)return null;let o=n[1],s=o.indexOf("_");s>0&&(o=o.slice(0,s));let i=o.lastIndexOf("@");return i<=0?null:o.slice(i+1)||null}function Vo(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function Ko(e,t,r,n){e.reports.add(r);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let s=!o.has(r);return o.add(r),e.keys.has(t)||(e.keys.add(t),e.findings.push(n),e.files.has(n.file)||e.files.set(n.file,[]),e.files.get(n.file).push(n)),s}function qo(e,t,r,n){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(l=>n(l)===t);o>=0&&e.findings.splice(o,1);let s=e.files.get(r);if(!s)return;let i=s.findIndex(l=>n(l)===t);i>=0&&s.splice(i,1),s.length===0&&e.files.delete(r)}function Go(e){let t=new Set;for(let r of e._keyReports.values())for(let n of r)t.add(n);e.reports=t}function Wd(e,t,r,n,o){let s=e.byVersion.get(t);s||(s=Vo(),e.byVersion.set(t,s)),Ko(s,n,o,r)}function Hd(e,t,r,n,o,s){let i=e.byVersion.get(t);if(!i)return;let l=i._keyReports.get(r);if(l&&(l.delete(o),l.size===0&&qo(i,r,n,s)),i._keyReports.size===0){e.byVersion.delete(t);return}Go(i)}function Mi(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[r,n=""]=Ud(e,"-"),[o,s=""]=Ud(t,"-"),i=r.split("."),l=o.split("."),d=Math.max(i.length,l.length);for(let u=0;u<d;u++){let p=i[u]??"0",f=l[u]??"0",h=/^\d+$/u.test(p),b=/^\d+$/u.test(f);if(h&&b){let m=Number(f)-Number(p);if(m!==0)return m}else{let m=f.localeCompare(p);if(m!==0)return m}}return n===""&&s!==""?-1:n!==""&&s===""?1:s.localeCompare(n)}function Ud(e,t){let r=e.indexOf(t);return r<0?[e,""]:[e.slice(0,r),e.slice(r+1)]}var Yg=new TextEncoder,Jg=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});function G(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return Yg.encode(e)}function ce(e){if(!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer))throw new TypeError(`decodeUtf8 expects a BufferSource, got ${e===null?"null":typeof e}`);return Jg.decode(e)}async function bn(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}async function gt(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}async function Yo(e){return await bn(G(e))}async function yn(e){return ce(await gt(e))}async function jd(e){let t=await crypto.subtle.digest("SHA-512",e);return`sha512-${new Uint8Array(t).toBase64()}`}var st=new Uint8Array([68,86,69,49]),Mr=12,Xg=32,Qg="deepview-passkey.v1.content-key";function wn(){return!(typeof window>"u"||typeof PublicKeyCredential>"u"||typeof navigator>"u"||!navigator.credentials)}async function Vd(){if(typeof PublicKeyCredential>"u")return!1;let e=PublicKeyCredential.getClientCapabilities;if(typeof e!="function")return null;try{let t=await e.call(PublicKeyCredential);if(!t||typeof t!="object")return null;let r=t["extension:prf"],n=t.prf;return r===!0||n===!0?!0:r===!1||n===!1?!1:null}catch{return null}}function Jo(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}async function Li(e){if(e.length<32)throw new Error(`PRF output too short (${e.length} bytes; need \u2265 32)`);let t=await crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits"]),r=await crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-256",salt:new Uint8Array,info:G(Qg)},t,Xg*8);return new Uint8Array(r)}function Pi(e){return crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!1,["encrypt","decrypt"])}async function Dt(e,t,r){let n=Jo(Mr),o=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:n,additionalData:r},e,t)),s=new Uint8Array(st.length+Mr+o.length);return s.set(st,0),s.set(n,st.length),s.set(o,st.length+Mr),s}async function cr(e,t,r){if(!Pe(t))throw new Error("passkey: missing envelope magic");if(t.length<st.length+Mr+16)throw new Error("passkey: envelope too short");let n=t.subarray(st.length,st.length+Mr),o=t.subarray(st.length+Mr);return new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:r},e,o))}function Pe(e){if(e.length<st.length)return!1;for(let t=0;t<st.length;t++)if(e[t]!==st[t])return!1;return!0}async function Kd(e){if(!wn())throw new Error("passkey: not supported in this environment");let t=Jo(32),r=Jo(32),n=await navigator.credentials.create({publicKey:{challenge:t,rp:{name:e.rpName,id:e.rpId},user:{id:e.userId,name:e.userName,displayName:e.userName},pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],authenticatorSelection:{residentKey:"required",userVerification:"required"},extensions:{prf:{eval:{first:r}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(n instanceof PublicKeyCredential))throw new Error("passkey: registration returned no credential");let o=new Uint8Array(n.rawId).toBase64({alphabet:"base64url",omitPadding:!0}),s=n.getClientExtensionResults().prf,i=s?.results?.first?new Uint8Array(s.results.first):null;return{credentialId:o,prfSalt:r.toBase64({alphabet:"base64url",omitPadding:!0}),prfOutput:i}}async function Oi(e){if(!wn())throw new Error("passkey: not supported in this environment");let t=Jo(32),r=Uint8Array.fromBase64(e.credentialId,{alphabet:"base64url"}),n=Uint8Array.fromBase64(e.prfSalt,{alphabet:"base64url"}),o=await navigator.credentials.get({publicKey:{challenge:t,rpId:e.rpId,allowCredentials:[{type:"public-key",id:r}],userVerification:"required",extensions:{prf:{eval:{first:n}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(o instanceof PublicKeyCredential))throw new Error("passkey: assertion returned no credential");let i=o.getClientExtensionResults().prf?.results?.first;if(!i)throw new Error("passkey: authenticator did not return PRF output (extension unsupported)");return new Uint8Array(i)}var vn=Object.freeze(["deepview.workspaces","deepview.sync.sessions","deepview.sync.userEnabled","deepview.sync.password","deepview.repoUrls","deepview.fileCounts","deepview.lastFile"]),Fe=new Map,Ni=!1,Et=new Map,Xe=new Map,Di=new Set;function Lr(e){return Di.add(e),()=>Di.delete(e)}function Zg(){for(let e of Di)try{e()}catch(t){console.warn("secure-storage after-hydrate listener:",t)}}function Xo(e){let t=Jd()??"";return G(`deepview.secure.v1|${t}|${e}`)}function Ui(e){try{let t=Uint8Array.fromBase64(e);if(Pe(t))return t}catch{}return null}function he(e){return Fe.get(e)??null}async function ke(e,t){if(typeof t!="string")throw new TypeError("secure-storage: value must be a string");if(X()&&!$e())throw new Error(`secure-storage: vault locked, cannot save "${e}"`);if(Yd())throw new Error(`secure-storage: wipe in progress, cannot save "${e}"`);let r=Fe.has(e),n=Fe.get(e);Fe.set(e,t),Xe.set(e,t);let o=Et.get(e)??Promise.resolve(),s=()=>{Xe.get(e)===t&&Xe.delete(e)},i=o.catch(()=>{}).then(()=>em(e,t)).then(()=>s(),l=>{throw s(),Fe.get(e)===t&&(r?Fe.set(e,n):Fe.delete(e)),l});Et.set(e,i.catch(()=>{})),await i}async function Pr(e){let t=Symbol("secure-storage:removed");Fe.delete(e),Xe.set(e,t);let r=Et.get(e)??Promise.resolve(),n=()=>{try{localStorage.removeItem(e)}catch{}Xe.get(e)===t&&(Xe.delete(e),Fe.delete(e))},o=r.catch(()=>{}).then(()=>n());Et.set(e,o.catch(()=>{})),await o}async function em(e,t){let r=$e();if(r){let n=await Dt(r,G(t),Xo(e));localStorage.setItem(e,n.toBase64())}else localStorage.setItem(e,t)}async function Ut(){Ni||ge(()=>{Ut().catch(r=>console.warn("secure-storage rehydrate:",r))}),Ni=!0;for(let r of[...Fe.keys()])Xe.has(r)||Fe.delete(r);let e=$e(),t=[];for(let r of vn){if(Xe.has(r))continue;let n=localStorage.getItem(r);if(n===null)continue;let o=Ui(n);if(o){if(!e)continue;try{let s=await cr(e,o,Xo(r));if(Xe.has(r))continue;Fe.set(r,ce(s))}catch(s){console.warn(`secure-storage: decrypt failed for "${r}":`,s)}}else Fe.set(r,n),e&&X()&&t.push([r,n])}Zg(),t.length>0&&queueMicrotask(()=>{for(let[r,n]of t)Fe.get(r)===n&&ke(r,n).catch(o=>{console.warn(`secure-storage: self-heal failed for "${r}":`,o)})})}async function qd(e,t){let r=Et.get(e)??Promise.resolve(),n=async()=>{if(Xe.has(e))return;let s=localStorage.getItem(e);if(s===null)return;let i=await t(s);i!==null&&(Xe.has(e)||(localStorage.setItem(e,i.storageValue),Fe.set(e,i.cacheValue)))},o=r.catch(()=>{}).then(n);Et.set(e,o.catch(()=>{})),await o}async function zi({seal:e}){for(let t of vn)await qd(t,async r=>{if(Ui(r))return null;let n=$e();return n?{storageValue:(await Dt(n,G(r),Xo(t))).toBase64(),cacheValue:r}:null})}async function Wi({open:e}){for(let t of vn)await qd(t,async r=>{let n=Ui(r);if(!n)return null;let o=await e(n,Xo(t)),s=ce(o);return{storageValue:s,cacheValue:s}})}var tm="deepview.secure.v1.mutate:";function Hi(e,t){return vn.includes(e)?navigator.locks.request(tm+e,async()=>{let r=Et.get(e);r&&await r.catch(()=>{}),await Ut();let n=he(e),o=await t(n);if(!(o==null||o===n)){if(typeof o!="string")throw new TypeError(`secure-storage: mutate updater for "${e}" must return a string`);await ke(e,o)}}):Promise.reject(new Error(`secure-storage: mutate() called with non-secure key "${e}"`))}async function Gd(){await Promise.allSettled([...Et.values()]),Xe.clear(),Et.clear()}typeof window<"u"&&window.addEventListener("storage",e=>{!Ni||!e.key||!vn.includes(e.key)||Ut().catch(()=>{})});var xn="deepview.passkey.v1",Or="deepview.passkey.userId",Zo="deepview.passkey.cleanDisable",Qe="deepview.passkey.v1.write",nm="deepview.triage.v1|",om="deepview.opfs.v1|",sm="deepview.bundle.v1|",ee=null,mt=null,zt=null,$n=0;function Ki(){return $n>0}var ji=0;function Yd(){return ji>0}function dr(){try{let e=localStorage.getItem(xn);if(!e)return null;let t=JSON.parse(e);return t&&typeof t=="object"&&t.enabled===!0&&typeof t.credentialId=="string"&&t.credentialId.length>0&&typeof t.prfSalt=="string"&&t.prfSalt.length>0&&typeof t.userId=="string"&&t.userId.length>0?t:null}catch{return null}}function Xd(e){localStorage.setItem(xn,JSON.stringify(e))}function im(){localStorage.removeItem(xn)}function am(){try{let t=localStorage.getItem(Or);if(t){let r=Uint8Array.fromBase64(t,{alphabet:"base64url"});if(r.length===16)return r}}catch{}let e=new Uint8Array(16);crypto.getRandomValues(e);try{localStorage.setItem(Or,e.toBase64({alphabet:"base64url",omitPadding:!0}))}catch{}return e}function es(){return typeof location>"u"?"":location.hostname}function X(){return dr()!==null}function it(){return ee!==null}function bt(){return!(!wn()||typeof navigator>"u"||!navigator.locks?.request||!es())}function Jd(){return mt}function _n(){if(dr()!==null)return!1;try{return localStorage.getItem(Zo)==="1"?!1:localStorage.getItem(Or)!==null}catch{return!1}}function $e(){return ee}function Sn(){return G(nm+(mt??""))}function ts(e){if(typeof e!="string")throw new TypeError("passkey vault: OPFS AAD requires a filename string");return G(om+(mt??"")+"|"+e)}function rs(e){if(typeof e!="string")throw new TypeError("passkey vault: bundle AAD requires a slot string");return G(sm+(mt??"")+"|"+e)}var Vi=new Set;function ge(e){return Vi.add(e),()=>Vi.delete(e)}function Nr(){for(let e of Vi)try{e()}catch(t){console.warn("passkey vault listener:",t)}}async function Cn({signal:e}={}){let t=dr();if(!t)return!1;let r;try{r=await Oi({credentialId:t.credentialId,prfSalt:t.prfSalt,rpId:t.rpId??es(),...e?{signal:e}:{}})}catch(o){if(o&&o.name==="NotAllowedError"||o&&o.name==="AbortError")return!1;throw o&&o.message?.includes("PRF")?kn(o):o}if(!r||r.length<32)throw kn();let n=await Li(r);return r.fill(0),navigator.locks.request(Qe,async()=>{let o=dr();if(!o||o.credentialId!==t.credentialId)throw n.fill(0),new Error("passkey: vault state changed during unlock (another tab wiped or re-enabled it). Reload this page and try again.");return ee=await Pi(n),n.fill(0),mt=o.userId,zt=o.credentialId,Nr(),!0})}function kn(e){let t=new Error("Your browser or authenticator doesn't support passkey-derived encryption keys (the WebAuthn PRF extension). Try Chrome 116+, Safari 18+, or Firefox 130+ on a device with a platform authenticator (TouchID / Windows Hello).");return e&&(t.cause=e),t}function qi({migrate:e,userName:t,rpName:r,signal:n,acknowledgeOrphan:o}){if(!wn())throw new Error("passkey: WebAuthn unavailable in this environment");if(_n()&&!o)throw new Error("passkey: a previous vault exists on this device with no metadata. Any data encrypted under the old passkey will be unreadable after a new setup. Call enableEncryption({acknowledgeOrphan: true}) to proceed, or wipeAllVaultData() to start clean first.");let s=es();return navigator.locks.request(Qe,async()=>{if(X())throw new Error("passkey: encryption is already enabled");if(await Vd()===!1)throw kn();let l=am(),d=await Kd({userName:t||"DeepView user",userId:l,rpName:r||"DeepView",rpId:s,...n?{signal:n}:{}}),u=d.prfOutput;if(!u)try{u=await Oi({credentialId:d.credentialId,prfSalt:d.prfSalt,rpId:s,...n?{signal:n}:{}})}catch(m){let y=l.toBase64({alphabet:"base64url",omitPadding:!0});await Qo({credentialId:d.credentialId,rpId:s,userId:y}).catch(()=>{});try{localStorage.removeItem(Or)}catch{}throw m&&m.message?.includes("PRF")?kn(m):m}if(!u||u.length<32){let m=l.toBase64({alphabet:"base64url",omitPadding:!0});await Qo({credentialId:d.credentialId,rpId:s,userId:m}).catch(()=>{});try{localStorage.removeItem(Or)}catch{}throw kn()}let p=await Li(u);u.fill(0);let f=await Pi(p);p.fill(0);let h=l.toBase64({alphabet:"base64url",omitPadding:!0}),b={enabled:!0,credentialId:d.credentialId,prfSalt:d.prfSalt,userId:h,rpId:s,createdAt:Date.now()};ee=f,mt=h,zt=d.credentialId,Xd(b),typeof e=="function"&&await e({seal:(y,k)=>Dt(f,y,k)});try{localStorage.removeItem(Zo)}catch{}return Nr(),!0})}async function Gi({migrate:e}){if(!X())return{disabled:!1,signalAttempted:!1};if(!it())throw new Error("passkey: must unlock before disabling encryption");$n+=1;try{return await navigator.locks.request(Qe,async()=>{let t=dr();if(!t)return{disabled:!1,signalAttempted:!1};let r=ee;if(!r)return{disabled:!1,signalAttempted:!1};if(im(),ee=null,zt=null,typeof e=="function"){let o=(s,i)=>cr(r,s,i);try{await e({open:o})}catch(s){throw Xd(t),ee=r,zt=t.credentialId,Nr(),s}}mt=null;try{localStorage.setItem(Zo,"1")}catch{}let n=await Qo(t).catch(()=>!1);return Nr(),{disabled:!0,signalAttempted:n}})}finally{$n-=1}}async function Qo({credentialId:e,rpId:t,userId:r}){if(typeof PublicKeyCredential>"u"||!t)return!1;let n=PublicKeyCredential,o=!1;if(typeof n.signalUnknownCredential=="function"){o=!0;try{await n.signalUnknownCredential({rpId:t,credentialId:e})}catch{}}if(typeof n.signalAllAcceptedCredentials=="function"&&r){o=!0;try{await n.signalAllAcceptedCredentials({rpId:t,userId:r,allAcceptedCredentialIds:[]})}catch{}}return o}async function lm(e,t){try{return await e.removeEntry(t,{recursive:!0}),null}catch(r){return r?.name==="NotFoundError"?null:`${t}: ${r?.message??String(r)}`}}async function cm(e){let t=[];if(typeof navigator>"u"||!navigator.storage?.getDirectory)return t;let r;try{r=await navigator.storage.getDirectory()}catch(n){return t.push(`storage root: ${n?.message??String(n)}`),t}for(let n of e){let o=await lm(r,n);o&&t.push(o)}return t}async function En({refuseIfEnabled:e=!1}={}){$n+=1,ji+=1;try{return await navigator.locks.request(Qe,async()=>{if(e&&X())throw new Error("passkey: encryption was just enabled in another tab. Reload this page to unlock instead of wiping.");await Gd();let t=dr();if(t)try{await Qo({credentialId:t.credentialId,rpId:t.rpId??es(),userId:t.userId})}catch{}try{localStorage.removeItem(xn)}catch{}try{localStorage.removeItem(Or)}catch{}try{localStorage.removeItem(Zo)}catch{}for(let n of["deepview.workspaces","deepview.sync.sessions","deepview.sync.userEnabled","deepview.repoUrls","deepview.fileCounts","deepview.lastFile","deepview.triage","deepview.triage.pending","deepview.passkey.firstImportPrompted","deepview.viewMode"])try{localStorage.removeItem(n)}catch{}try{let n=[];for(let o=0;o<localStorage.length;o+=1){let s=localStorage.key(o);s&&s.startsWith("deepview.report:")&&n.push(s)}for(let o of n)try{localStorage.removeItem(o)}catch{}}catch{}ee=null,mt=null,zt=null,Nr();let r=await cm(["deepview-reports","deepview-bundles"]);if(r.length>0)throw new Error(`passkey: wipe partially succeeded \u2014 localStorage cleared but the following OPFS paths could not be removed: ${r.join("; ")}. Open DevTools \u2192 Application \u2192 Storage \u2192 Origin Private File System to inspect, or use the browser's site-data clear tool to finish.`)})}finally{$n-=1,ji-=1}}function Qd(e){return ee?Dt(ee,e,Sn()):Promise.reject(new Error("passkey: vault locked, cannot seal triage"))}function Zd(e){return ee?cr(ee,e,Sn()):Promise.reject(new Error("passkey: vault locked, cannot open triage"))}function ns(e,t){return ee?Dt(ee,e,ts(t)):Promise.reject(new Error("passkey: vault locked, cannot seal OPFS file"))}function eu(e,t){return ee?cr(ee,e,ts(t)):Promise.reject(new Error("passkey: vault locked, cannot open OPFS file"))}function Yi(e,t){return ee?Dt(ee,e,rs(t)):Promise.reject(new Error("passkey: vault locked, cannot seal bundle"))}function Ji(e,t){return ee?cr(ee,e,rs(t)):Promise.reject(new Error("passkey: vault locked, cannot open bundle"))}typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key!==xn)return;let t=dr();(!t&&ee||t&&ee&&t.credentialId!==zt)&&(ee=null,mt=null,zt=null),Nr()});var ea="__meta__",dm="deepview-reports",ta="deepview-bundles",At="deepview.report:",tu=!1;async function ra(e,{create:t,warnOnce:r=!1}={}){try{return await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:t})}catch(n){return r&&!tu&&(tu=!0,console.warn("OPFS unavailable, falling back to gzipped localStorage (limited quota).",n)),null}}async function os(e,t){let r=await e.createWritable();try{await r.write(t),await r.close()}catch(n){try{await r.abort(n)}catch{}throw n}}async function Xi(e,t){if(!Pe(e))return e;if(!$e())throw new Error(`storage: vault locked, cannot decrypt "${t}"`);return await eu(e,t)}async function An(e,t,r,n,o=()=>{}){if(X()&&!$e())throw o(),new Error(`storage: vault locked, cannot save ${n}`);let s=$e(),i=s?await t(e,r):e;if($e()!==s)throw o(),new Error(`storage: vault state changed mid-save for ${n}; retry`);return i}function ur(){return ra(dm,{create:!0,warnOnce:!0})}var at=new Map,Wt=new Map,Qi=new Map;function re(e){Qi.set(e,(Qi.get(e)??0)+1)}function ru(e){return Qi.get(e)??0}var Zi=new Set;function nu(e){return Zi.add(e),()=>Zi.delete(e)}function Dr(e,t){for(let r of Zi)try{r(e,t)}catch(n){console.warn("storage file-change listener:",n)}}async function le(){let e=await ur();if(e){let r=[];for await(let[n]of e.entries())r.push(n);return r.toSorted()}let t=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n&&n.startsWith(At)&&t.push(n.slice(At.length))}return t.toSorted()}async function lt(e,t){if(typeof e!="string"||e.includes("\0"))throw new Error("Invalid report name: contains NUL byte or is not a string");return re(e),navigator.locks.request(Qe,{mode:"shared"},async()=>{let r=await ur();if(r){let s=await bn(G(t));s=await An(s,ns,e,`"${e}"`,()=>re(e));let l=await(await r.getFileHandle(e,{create:!0})).createWritable();try{await l.write(s),await l.close()}catch(d){at.delete(e),re(e);try{await l.abort(d)}catch{}throw d}at.set(e,t),re(e),Dr(e,"save");return}let n=G(t);n=await bn(n),n=await An(n,ns,e,`"${e}"`,()=>re(e));let o=n.toBase64();try{localStorage.setItem(At+e,o),at.set(e,t),re(e),Dr(e,"save")}catch(s){throw re(e),new Error(`localStorage write failed for ${e}: ${s.message}`,{cause:s})}})}async function Me(e){if(at.has(e))return at.get(e);if(Wt.has(e))return Wt.get(e);let t=ru(e),r=(async()=>{let n=await ur();if(n){let d=await(await n.getFileHandle(e)).getFile(),u=new Uint8Array(await d.arrayBuffer());if(u=await Xi(u,e),u.length>=2&&u[0]===31&&u[1]===139){let f=await gt(u);return ce(f)}let p=ce(u);return lt(e,p).catch(f=>{console.warn(`storage: legacy-uncompressed migration of "${e}" failed:`,f)}),p}let o=localStorage.getItem(At+e);if(o===null)throw new Error(`File not found: ${e}`);let s=Uint8Array.fromBase64(o);s=await Xi(s,e);let i=await gt(s);return ce(i)})();Wt.set(e,r);try{let n=await r;return ru(e)===t&&at.set(e,n),n}finally{Wt.delete(e)}}async function pr(e){let t=await ur(),r;if(t){let o=await(await t.getFileHandle(e)).getFile();r=new Uint8Array(await o.arrayBuffer())}else{let n=localStorage.getItem(At+e);if(n===null)throw new Error(`File not found: ${e}`);r=Uint8Array.fromBase64(n)}return r=await Xi(r,e),r}async function In(e,t){if(typeof e!="string"||e.includes("\0"))throw new Error("Invalid report name: contains NUL byte or is not a string");return re(e),at.delete(e),navigator.locks.request(Qe,{mode:"shared"},async()=>{let r=await An(t,ns,e,`"${e}"`,()=>re(e)),n=await ur();if(n){let s=await(await n.getFileHandle(e,{create:!0})).createWritable();try{await s.write(r),await s.close()}catch(i){re(e);try{await s.abort(i)}catch{}throw i}re(e),Dr(e,"save");return}try{localStorage.setItem(At+e,r.toBase64()),re(e),Dr(e,"save")}catch(o){throw re(e),new Error(`localStorage write failed for ${e}: ${o.message}`,{cause:o})}})}async function Ur(e){return re(e),at.delete(e),Wt.delete(e),navigator.locks.request(Qe,{mode:"shared"},async()=>{let t=await ur();if(t){try{await t.removeEntry(e)}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw re(e),r}re(e),Dr(e,"delete");return}localStorage.removeItem(At+e),re(e),Dr(e,"delete")})}var Tn="_meta.json";function Rn(){return ra(ta,{create:!0})}function na(e){return e.replaceAll("/","_")}async function oa(e){let t;try{let o=await(await e.getFileHandle(Tn)).getFile();t=new Uint8Array(await o.arrayBuffer())}catch(n){return n instanceof DOMException&&n.name==="NotFoundError"?[]:(console.warn("readBundleMeta: failed to read _meta.json:",n),[])}let r=t;if(Pe(t)){if(!$e())return console.warn("readBundleMeta: vault locked, returning empty bundle list"),[];try{r=await Ji(t,ea)}catch(o){return console.warn("readBundleMeta: decrypt failed (tampering, key mismatch, or vault identity drift):",o),[]}}try{let n=JSON.parse(ce(r));return Array.isArray(n)?n:[]}catch(n){return console.warn("readBundleMeta: JSON.parse failed:",n),[]}}async function ou(e,t){let r=G(JSON.stringify(t));r=await An(r,Yi,ea,"bundle metadata");try{await e.removeEntry(Tn)}catch{}let n=await e.getFileHandle(Tn,{create:!0});await os(n,r)}var um=`${ta}/${Tn}`;function su(e){return navigator.locks.request(um,e)}async function ct(){let e=await Rn();return e?[...await oa(e)].toSorted((r,n)=>r.name.localeCompare(n.name)):[]}async function sa(){if(typeof navigator>"u"||!navigator.storage?.getDirectory)return!1;let e=await ra(ta,{create:!1});if(!e)return!1;try{for await(let t of e.entries())return!0}catch{}return!1}async function fr(e,t){let r=await Rn();if(!r)throw new Error(`Cannot save bundle ${e}: OPFS unavailable`);let n=t instanceof Uint8Array?t:G(t),o=await jd(n),s=na(o),i=e.toLowerCase().endsWith(".map")?await bn(n):n;return navigator.locks.request(Qe,{mode:"shared"},async()=>{i=await An(i,Yi,o,`bundle "${e}"`);try{await r.removeEntry(s)}catch{}let l=await r.getFileHandle(s,{create:!0});await os(l,i);try{await su(async()=>{let d=await oa(r),u=d.findIndex(p=>p.integrity===o);u>=0?d[u]={integrity:o,name:e}:d.push({integrity:o,name:e}),await ou(r,d)})}catch(d){try{await r.removeEntry(s)}catch{}throw d}return{integrity:o,name:e}})}async function ia(e){let t=await Rn();if(t)return navigator.locks.request(Qe,{mode:"shared"},async()=>{try{await t.removeEntry(na(e))}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw r}await su(async()=>{let r=await oa(t),n=r.filter(o=>o.integrity!==e);n.length!==r.length&&await ou(t,n)})})}async function hr(e){let t=await Rn();if(!t)throw new Error("OPFS unavailable");let n=await(await t.getFileHandle(na(e))).getFile(),o=new Uint8Array(await n.arrayBuffer());if(Pe(o)){if(!$e())throw new Error(`storage: vault locked, cannot read bundle "${e}"`);o=await Ji(o,e)}return o.length>=2&&o[0]===31&&o[1]===139?await gt(o):o}async function pm(e,t){let r=await ur();if(r){let l=await(await r.getFileHandle(e)).getFile(),d=new Uint8Array(await l.arrayBuffer()),u=await t(d);if(u===null)return;at.delete(e),Wt.delete(e),re(e);let p=await r.getFileHandle(e,{create:!0});await os(p,u),re(e);return}let n=localStorage.getItem(At+e);if(n===null)return;let o=Uint8Array.fromBase64(n),s=await t(o);s!==null&&(at.delete(e),Wt.delete(e),re(e),localStorage.setItem(At+e,s.toBase64()),re(e))}function iu(e,t){return e.seal?r=>Pe(r)?null:e.seal(r,t):r=>Pe(r)?e.open(r,t):null}async function au(e){let t=await le();for(let r of t)try{await pm(r,iu(e,ts(r)))}catch(n){if(n instanceof DOMException&&n.name==="NotFoundError")continue;throw n}}var aa=({seal:e})=>au({seal:e}),la=({open:e})=>au({open:e});async function fm(){let e=await Rn();if(!e)return{dir:null,keys:[]};let t=[];for await(let[r]of e.entries())t.push(r);return{dir:e,keys:t}}function hm(e){return e===Tn?ea:e.startsWith("sha512-")?e.replaceAll("_","/"):null}async function gm(e,t,r){let o=await(await e.getFileHandle(t)).getFile(),s=new Uint8Array(await o.arrayBuffer()),i=await r(s);if(i===null)return;let l=await e.getFileHandle(t,{create:!0});await os(l,i)}async function lu(e){let{dir:t,keys:r}=await fm();if(t)for(let n of r){let o=hm(n);if(o!==null)try{await gm(t,n,iu(e,rs(o)))}catch(s){if(s instanceof DOMException&&s.name==="NotFoundError")continue;throw s}}}var ca=({seal:e})=>lu({seal:e}),da=({open:e})=>lu({open:e});ge(()=>{at.clear(),Wt.clear()});var is="deepview.viewMode",ss="deepview.repoUrls",mm=new Set(["grouped","list","table","kanban","focus"]);function bm(){try{let e=localStorage.getItem(is);return e!==null&&mm.has(e)?e:null}catch{return null}}function pa(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function as(){return pa(he(ss))}function He(e){return e?as()[e]??"":""}var ua=new Set;function cu(e){return ua.add(e),()=>{ua.delete(e)}}function ym(e){for(let t of ua)try{t(e)}catch(r){console.warn("repo-url listener:",r)}}function je(e,t){if(!e)return;let r=as();t?r[e]=t:delete r[e],ke(ss,JSON.stringify(r)).catch(n=>console.warn("saveRepoUrlFor:",n)),Hi(ss,n=>{let o=pa(n);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(n=>console.warn("saveRepoUrlFor cross-tab merge:",n)),ym(e)}async function du(e,t){await Hi(ss,r=>{let n=pa(r),o=t==="replace"?{...e}:t==="prefer-imported"?{...n,...e}:{...e,...n};return JSON.stringify(o)}),uu()}var a=Nd({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,currentView:"findings",bundles:[],selectedBundle:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleCodeSearchMode:"files",bundleCodeSearchQuery:"",filterSeverities:new Set,filterColors:new Set,filterSources:new Set,filterAnalyzer:"",filterRepo:"",filterConfMin:0,filterConfMax:10,filterInclude:"",repoUrl:"",repoEditing:!1,sortBy:"severity",viewMode:bm()??"table",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,focusGid:null,focusCodeTick:0});function uu(){a.repoEditing||a.currentFile&&(a.repoUrl=He(a.currentFile))}Lr(()=>{uu()});var wm=/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*$/mu;function vm(e){switch(e.toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"HIGH_BUG":return"high_bug";case"BUG":return"bug";case"INFO":case"INFORMATIONAL":return"informational";default:return"medium"}}function km(e){if(e)switch(e.toLowerCase()){case"high":return 8;case"medium":return 5;case"low":return 2;default:return}}function $m(e){return typeof e=="string"?e.replace(/^`(.*)`$/u,"$1"):e}function zr(e){let t=e.replaceAll(/\r\n?/gu,`
|
|
4
|
-
|
|
5
|
-
`
|
|
6
|
-
`).
|
|
7
|
-
`).
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
`)
|
|
11
|
-
`),
|
|
12
|
-
`)
|
|
13
|
-
|
|
14
|
-
`)
|
|
15
|
-
`)
|
|
16
|
-
`;async function Un(e){let t=Uint8Array.fromBase64(e),r=G(jm),n=new Uint8Array(r.length+t.length);n.set(r,0),n.set(t,r.length);let o=new Uint8Array(await crypto.subtle.digest("SHA-256",n)),i=Array.from(o.subarray(0,16),u=>u.toString(16).padStart(2,"0")).join("").split("");i[12]="8";let l=parseInt(i[16],16)&3|8;i[16]=l.toString(16);let d=i.join("");return`${d.slice(0,8)}-${d.slice(8,12)}-${d.slice(12,16)}-${d.slice(16,20)}-${d.slice(20,32)}`}function zn(e){let t=new Set;function r(o){return t.add(o),()=>t.delete(o)}function n(o){for(let s of t)try{s(o)}catch(i){console.warn(`workspace ${e} listener failed:`,i)}}return{on:r,fire:n}}var bu=zn("create"),yu=zn("delete"),wu=zn("privateKey"),vu=zn("report-membership"),ku=zn("bundle-membership"),Vm=bu.on,Ea=yu.on,Aa=wu.on,Ta=vu.on,Ia=ku.on,hs=bu.fire,Ra=yu.fire,Ba=wu.fire,gs=vu.fire,ms=ku.fire;var Ma="deepview.workspaces",Km=1;function Wn(){try{let e=he(Ma);if(!e)return[];let t=JSON.parse(e);return t&&typeof t=="object"&&Array.isArray(t.workspaces)?t.workspaces:Array.isArray(t)?t:[]}catch{return[]}}async function qm(e){await ke(Ma,JSON.stringify({version:Km,workspaces:e}))}var Gm=Ma;function Jr(e){return navigator.locks.request(Gm,async()=>{await Ut();let t=Wn(),r=await e(t);if(r!==!1)return await qm(t),r})}function Hn(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}var dt=Wn().map(Hn);function La(){dt=Wn().map(Hn)}function Pa(e){dt=dt.filter(t=>t.id!==e.id),dt.push(Hn(e))}function Ym(e,t){let r=Array.isArray(e[t])?[...e[t]]:[],n=dt.find(o=>o.id===e.id);if(n){n[t]=r;return}dt.push(Hn(e))}function Jm(e){dt=dt.filter(t=>t.id!==e)}function z(){let e=Wn();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}var Xm=200;function vt(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,Xm)||null}async function Oa(e){let t=vt(e);if(!t)return null;let r=new Uint8Array(32);crypto.getRandomValues(r);let n=r.toBase64(),o={id:await Un(n),name:t,privateKey:n,reports:[],bundles:[],createdAt:Date.now()};return await Jr(i=>i.some(l=>l.id===o.id)?!1:(i.push(o),o))?(Pa(o),o):null}async function Na(e){await Jr(r=>{let n=r.findIndex(o=>o.id===e);return n<0?!1:(r.splice(n,1),!0)})&&(Ra(e),Jm(e))}async function Da(e,t){let r=vt(t);return!(!r||!await Jr(o=>{let s=o.find(i=>i.id===e);return!s||s.name===r?!1:(s.name=r,s)}))}async function $u(e){let t=await Jr(o=>{let s=o.findIndex(p=>p.id===e.id),i=s>=0?o[s]:null,l=vt(e.name)??i?.name??"Workspace",d=e.preserveBundles?Array.isArray(i?.bundles)?i.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],u={id:e.id,name:l,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(d)],createdAt:e.createdAt??Date.now()};return s>=0?o[s]=u:o.push(u),{previous:i,next:u}}),{next:r}=t,n=dt.find(o=>o.id===r.id)??null;return n==null?hs(r.id):(n.privateKey!==r.privateKey&&Ba(r.id),bs(n.reports,r.reports)||gs(r.id),bs(n.bundles,r.bundles)||ms(r.id)),Pa(r),r}async function Ua({id:e,name:t,privateKey:r,createdAt:n}){let o=null;return await Jr(s=>{let i=vt(t);if(!i)return o={status:"name-collision",existing:null},!1;let l=s.find(p=>p.id===e)??null;if(l)return o={status:"already-attached",workspace:l},!1;let d=s.find(p=>vt(p.name)===i)??null;if(d)return o={status:"name-collision",existing:d},!1;let u={id:e,name:i,privateKey:r,reports:[],bundles:[],createdAt:n??Date.now()};s.push(u),o={status:"attached",workspace:u}}),o?.status==="attached"&&(hs(o.workspace.id),Pa(o.workspace)),o}function bs(e,t){let r=new Set(e),n=new Set(t);if(r.size!==n.size)return!1;for(let o of r)if(!n.has(o))return!1;return!0}async function Fa({identifier:e,workspaceId:t,field:r,fire:n,additive:o=!1,from:s=void 0}){let i=await Jr(u=>{if((u.find(m=>Array.isArray(m[r])&&m[r].includes(e))?.id??null)===(t??null))return!1;let f=null;if(t!=null&&(f=u.find(m=>m.id===t)??null,!f))return!1;let h=new Set;if(!o)for(let m of u)s!==void 0&&m.id!==s||(Array.isArray(m[r])||(m[r]=[]),m[r].includes(e)&&(m[r]=m[r].filter(y=>y!==e),h.add(m.id)));if(f&&(Array.isArray(f[r])||(f[r]=[]),f[r].includes(e)||(f[r].push(e),h.add(f.id))),h.size===0)return!1;let b=new Map;for(let m of h){let y=u.find(k=>k.id===m);y&&b.set(m,y)}return{affected:h,snapshot:b}});if(!i)return;let{affected:l,snapshot:d}=i;for(let u of l){n(u);let p=d.get(u);p&&Ym(p,r)}}function xu(e,t){return{move:(r,n)=>Fa({identifier:r,workspaceId:n,field:e,fire:t}),add:(r,n)=>Fa({identifier:r,workspaceId:n,field:e,fire:t,additive:!0}),remove:(r,n)=>Fa({identifier:r,field:e,fire:t,from:n})}}var za=xu("reports",gs),Wa=xu("bundles",ms),jn=za.move,Tt=za.add,Vn=za.remove,Ha=Wa.move,br=Wa.add,ja=Wa.remove;function Qm(){let e=Wn().map(Hn),t=dt,r=new Map(t.map(o=>[o.id,o])),n=new Map(e.map(o=>[o.id,o]));for(let o of r.keys())n.has(o)||Ra(o);for(let[o,s]of n){let i=r.get(o);if(!i){hs(o);continue}i.privateKey!==s.privateKey&&Ba(o),bs(i.reports,s.reports)||gs(o),bs(i.bundles,s.bundles)||ms(o)}dt=e}Lr(()=>{Qm()});function _u(e){return e==="fixed"||e==="invalid"||e==="deleted"?e:void 0}function de(e){if(e)return _u(e.triage)??(e.deleted?"deleted":void 0)}function Zm(e){return e?!e.color&&!de(e)&&!e.comment&&!e.fix&&!(e.ignoredReports&&e.ignoredReports.length>0):!0}function It(e,t,r){let n=e.get(t)?.ignoredReports;return Array.isArray(n)&&n.includes(r)}function Kn(e){if(!e||typeof e!="object")return;let t=e,r={};typeof t.color=="string"&&t.color&&(r.color=t.color);let n=_u(t.triage)??(t.deleted?"deleted":void 0);if(n&&(r.triage=n),typeof t.comment=="string"&&t.comment&&(r.comment=t.comment),typeof t.fix=="string"&&t.fix&&(r.fix=t.fix),Array.isArray(t.ignoredReports)){let o=t.ignoredReports.filter(s=>typeof s=="string"&&s.length>0);o.length>0&&(r.ignoredReports=o)}return Zm(r)?void 0:r}function eb(e,t){let r=e??[],n=t??[];if(r.length!==n.length)return!1;if(r.length===0)return!0;let o=new Set(r);for(let s of n)if(!o.has(s))return!1;return!0}function tb(e,t){let r=e??{},n=t??{};return(r.color??"")===(n.color??"")&&(de(r)??"")===(de(n)??"")&&(r.comment??"")===(n.comment??"")&&(r.fix??"")===(n.fix??"")&&eb(r.ignoredReports,n.ignoredReports)}function M(e,t,r){let n=e.get(t),o=Kn({...n,...r});return o===void 0?e.delete(t):tb(n,o)?!1:(e.set(t,o),!0)}function ne(e,t,r,n){let o=new Set(e.get(t)?.ignoredReports??[]);return n?o.add(r):o.delete(r),M(e,t,{ignoredReports:o.size>0?[...o]:void 0})}var Va=()=>{};function Cu(e){Va=typeof e=="function"?e:()=>{}}var Kt="deepview.triage",Rt="deepview.triage.pending",kt=/^\d+$/u;async function rb(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function nb(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}var ob="deepview.triage.save",Su=0;function Ka(){let e={};for(let[t,r]of a.triage){if(kt.test(t))continue;let n=Kn(r);n&&(e[t]=n)}return e}function oe(){let e=++Su,t=Ka(),r=Object.keys(t).length===0,n=r?null:JSON.stringify(t);if(n!=null)try{localStorage.setItem(Rt,n)}catch{}return navigator.locks.request(Qe,{mode:"shared"},async()=>{let o=null,s=null;if(n!=null)try{let i=G(n),l=await rb(i);s=$e(),o=(s?await Qd(l):l).toBase64()}catch(i){console.warn("Failed to save triage:",i),Va();return}await navigator.locks.request(ob,()=>{try{if(e!==Su)return;if(n!=null&&$e()!==s){queueMicrotask(()=>{oe()});return}if(r)localStorage.removeItem(Kt),localStorage.removeItem(Rt);else{localStorage.setItem(Kt,o);try{localStorage.removeItem(Rt)}catch{}}}catch(i){console.warn("Failed to save triage:",i)}}),Va()})}async function Eu(){let e=localStorage.getItem(Rt);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(Kt);if(!t)return null;let r=Uint8Array.fromBase64(t);if(Pe(r)){if(!$e())throw new Error("triage: vault locked, cannot decrypt envelope");r=await Zd(r)}let n=await nb(r);return JSON.parse(ce(n))}function Au(e,{replace:t=!1}={}){let r=a.triage;if(t){let n=null,o=localStorage.getItem(Rt);if(o)try{n=JSON.parse(o)}catch{}let s=i=>n!=null&&i in n;for(let i of[...r.keys()]){if(kt.test(i))continue;let l=e?.[i],d=!e||!(i in e);!(s(i)&&n[i]?.color)&&(d||!l?.color)&&M(r,i,{color:void 0}),!(s(i)&&(n[i]?.triage||n[i]?.deleted))&&!de(l)&&M(r,i,{triage:void 0}),!(s(i)&&n[i]?.comment)&&(d||typeof l?.comment!="string"||!l.comment)&&M(r,i,{comment:void 0}),!(s(i)&&n[i]?.fix)&&(d||typeof l?.fix!="string"||!l.fix)&&M(r,i,{fix:void 0})}for(let i of[...r.keys()]){if(kt.test(i))continue;let l=r.get(i)?.ignoredReports;if(!l||l.length===0)continue;let d=e?.[i],u=!!de(d);for(let p of[...l]){if(s(i)&&Array.isArray(n[i]?.ignoredReports)&&n[i].ignoredReports.includes(p))continue;if(u){ne(r,i,p,!1);continue}let f=d?.ignoredReports;(!Array.isArray(f)||!f.includes(p))&&ne(r,i,p,!1)}}}if(e)for(let[n,o]of Object.entries(e)){let s=de(o),i={};if(o&&o.color&&(i.color=o.color),s&&(i.triage=s),o&&typeof o.comment=="string"&&o.comment&&(i.comment=o.comment),o&&typeof o.fix=="string"&&o.fix&&(i.fix=o.fix),Object.keys(i).length>0&&M(r,n,i),!s&&o&&Array.isArray(o.ignoredReports)){let l=new Set(r.get(n)?.ignoredReports??[]),d=!1;for(let u of o.ignoredReports)typeof u=="string"&&!l.has(u)&&(l.add(u),d=!0);d&&M(r,n,{ignoredReports:[...l]})}}}async function sb(){try{let e=await Eu();Au(e)}catch(e){console.warn("Failed to load triage:",e)}}async function Tu(){try{let e=await Eu();Au(e,{replace:!0})}catch(e){console.warn("Failed to reload triage:",e)}}typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==Kt&&e.key!==Rt||Tu()});var qn=sb();ge(()=>{Tu()});ge(()=>{$e()&&localStorage.getItem(Rt)&&oe()});async function qa({seal:e}){try{localStorage.removeItem(Rt)}catch{}let t=localStorage.getItem(Kt);if(!t)return;let r=Uint8Array.fromBase64(t);if(Pe(r))return;let n=await e(r,Sn());localStorage.setItem(Kt,n.toBase64())}async function Ga({open:e}){try{localStorage.removeItem(Rt)}catch{}let t=localStorage.getItem(Kt);if(!t)return;let r=Uint8Array.fromBase64(t);if(!Pe(r))return;let n=await e(r,Sn());localStorage.setItem(Kt,n.toBase64())}var Iu="deepview.lastFile",Gn=null;function Ya(){return Gn||(Gn=ib(),Gn.catch(()=>{Gn=null})),Gn}async function ib(){try{await qn}catch{}let e=await le(),t=new Set(e),r=new Set(e),n=new Set;for(let o of e){if(!o.toLowerCase().endsWith(".deepseek"))continue;let s=o.slice(0,-9)+".md";if(t.has(s))continue;let i;try{i=await Me(o),await lt(s,i),await Ur(o)}catch(p){console.warn(`migrate: failed to rename ${o} -> ${s}`,p);continue}t.delete(o),t.add(s),n.add(o);let l=Nn(o);if(Yr(o),l===void 0){let{count:p,source:f}=Oe(i);Ve(s,p,f)}else{let{source:p}=Oe(i);Ve(s,l,p)}let d=He(o);d&&(je(o,""),je(s,d));let u=!1;for(let[p,f]of[...a.triage])f.ignoredReports?.includes(o)&&(ne(a.triage,p,o,!1),ne(a.triage,p,s,!0),u=!0);if(u&&await oe(),he(Iu)===o)try{await ke(Iu,s)}catch{}}for(let o of z())for(let s of o.reports){if(!s.toLowerCase().endsWith(".deepseek")||!n.has(s)&&r.has(s))continue;let i=s.slice(0,-9)+".md";await Vn(s,o.id),await Tt(i,o.id)}}var Ja=1;function ab(){let e=Ka(),t=as();return{version:Ja,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function lb(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function Xa(){let e=ab();return{blob:new Blob([await Yo(JSON.stringify(e))]),filename:lb()}}async function Qa(e){let t;try{t=await yn(new Uint8Array(await e.arrayBuffer()))}catch(n){throw new Error(`Failed to gunzip: ${n.message}`,{cause:n})}let r;try{r=JSON.parse(t)}catch(n){throw new Error(`Failed to parse JSON: ${n.message}`,{cause:n})}if(!r||typeof r!="object")throw new Error("Invalid backup file (not an object)");if(r.version!==Ja)throw new Error(`Unsupported backup version: ${r.version} (expected ${Ja})`);if(!r.triage||typeof r.triage!="object")throw new Error("Backup is missing the `triage` map");if(!r.repoUrls||typeof r.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return r}async function Za(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let r=e.triage,n=a.triage;if(t==="replace")for(let l of[...n.keys()])kt.test(l)||n.delete(l);let o=t==="prefer-current";for(let[l,d]of Object.entries(r)){if(kt.test(l)||!d||typeof d!="object")continue;typeof d.color=="string"&&d.color&&(!o||!n.get(l)?.color)&&M(n,l,{color:d.color});let u=de(d);if(u&&(!o||!de(n.get(l)))&&M(n,l,{triage:u}),typeof d.comment=="string"&&d.comment&&(!o||!n.get(l)?.comment)&&M(n,l,{comment:d.comment}),typeof d.fix=="string"&&d.fix&&(!o||!n.get(l)?.fix)&&M(n,l,{fix:d.fix}),Array.isArray(d.ignoredReports)&&!de(n.get(l)))for(let p of d.ignoredReports)typeof p=="string"&&(o&&It(n,l,p)||ne(n,l,p,!0))}await oe();let s=0,i=null;try{await du(e.repoUrls,t),s=Object.keys(e.repoUrls).length}catch(l){console.warn("applyTriageImport: repo-URL import failed:",l),i=l}return{triageEntries:Object.keys(r).length,repoUrls:s,repoUrlError:i}}function cb(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function el(e){let t=new Set;for(let r of e){let n;try{n=await Me(r)}catch(i){if(cb(i))continue;throw new Error(`Failed to read ${r}: ${i.message}`,{cause:i})}if(n==null)continue;let o=Ht(n);if(!Array.isArray(o?.findings))continue;let s=jt(o.findings);await Hr(s);for(let i of s)i.id&&t.add(i.id)}return t}function db(){let e=new Set;for(let t of a.triage.keys())kt.test(t)||e.add(t);return e}async function ys(e){let t=db();if(t.size===0)return{orphanedCount:0,sharedCount:0};let r=await el(e),n=new Set;for(let p of t)r.has(p)&&n.add(p);if(n.size===0)return{orphanedCount:0,sharedCount:0};let o=await le(),s=new Set(e),i=o.filter(p=>!s.has(p)),l=await el(i),d=0,u=0;for(let p of n)l.has(p)?u++:d++;return{orphanedCount:d,sharedCount:u}}async function ws(){let e=new Set(a.triage.keys()),t=[];for(let[i,l]of a.triage)if(l.ignoredReports)for(let d of l.ignoredReports)t.push({id:i,report:d});let r=await le(),n=new Set(r),o=await el(r),s=!1;for(let i of e){if(kt.test(i)||o.has(i))continue;let l=a.triage.get(i);!l||!(l.color||de(l)||l.comment||l.fix)||M(a.triage,i,{color:void 0,triage:void 0,comment:void 0,fix:void 0,deleted:void 0})&&(s=!0)}for(let{id:i,report:l}of t)kt.test(i)||o.has(i)&&n.has(l)||It(a.triage,i,l)&&ne(a.triage,i,l,!1)&&(s=!0);s&&await oe()}var tl=1,Gt=16,Ru=12,Bu=1+Gt+Ru+16,qt=1+Gt+Ru;async function Fu(e,t){let r=await crypto.subtle.importKey("raw",G(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:t,iterations:3e6},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function Mu(e){return!(e instanceof Uint8Array)||e.length<Bu?!1:e[0]===tl}async function vs(e,t){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof t!="string"||!t)throw new TypeError("encryptWithPassword: password required");let r=new Uint8Array(qt+e.length+16);r[0]=tl,crypto.getRandomValues(r.subarray(1,1+Gt)),crypto.getRandomValues(r.subarray(1+Gt,qt));let n=r.subarray(1,1+Gt),o=r.subarray(1+Gt,qt),s=await Fu(t,n),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:r.subarray(0,qt)},s,e));return r.set(i,qt),r}async function pb(e,t){if(typeof t!="string"||!t)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<Bu)return{ok:!1,reason:"malformed"};if(e[0]!==tl)return{ok:!1,reason:"malformed"};let r=e.subarray(1,1+Gt),n=e.subarray(1+Gt,qt),o=e.subarray(qt),s=await Fu(t,r),i;try{i=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:e.subarray(0,qt)},s,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:i}}async function ks(e,t,r){if(!r||typeof r.malformedMsg!="string"||typeof r.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let n=await pb(e,t);if(n.ok)return n.plaintext;throw n.reason==="wrong-password"?new Error(r.wrongPasswordMsg):new Error(r.malformedMsg)}var Yn=Mu,Lu=vs;function Pu(e,t){return ks(e,t,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var fb=1;async function hb(e){let t=new Set,r=Ht(e);if(!Array.isArray(r?.findings))return t;let n=jt(r.findings);await Hr(n);for(let o of n)o.id&&t.add(o.id);return t}function Ou(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function gb(e){if(!Array.isArray(e)||e.length===0)return[];let t=await ct(),r=new Map(t.map(o=>[o.integrity,o.name])),n=[];for(let o of e){let s=r.get(o);if(!s)continue;let i;try{i=await hr(o)}catch(l){console.warn(`Workspace export: failed to read bundle ${o}: ${l?.message??l}`);continue}n.push({integrity:o,name:s,data:i.toBase64()})}return n}async function mb(e,{includeBundleBytes:t=!1}={}){let r=[],n=new Set;for(let u of e.reports??[]){let p;try{p=await Me(u)}catch(f){console.warn(`Workspace export: skipping ${u}: ${f?.message??f}`),(f instanceof DOMException&&f.name==="NotFoundError"||typeof f?.message=="string"&&f.message.startsWith("File not found:"))&&await jn(u,null);continue}r.push({name:u,content:p});for(let f of await hb(p))n.add(f)}let o=new Set(e.reports??[]),s={};for(let[u,p]of a.triage){if(!n.has(u))continue;let f=(p.ignoredReports??[]).filter(b=>o.has(b)),h=Kn({...p,ignoredReports:f});h&&(s[u]=h)}let i={};for(let u of r){let p=He(u.name);p&&(i[u.name]=p)}let l=(e.bundles??[]).filter(u=>typeof u=="string"&&u.length>0),d={version:fb,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:r,bundles:l,repoUrls:i,triage:s};if(t){let u=await gb(l);u.length>0&&(d.bundleBlobs=u)}return d}async function Nu(e,{includeBundleBytes:t=!1}={}){let r=await mb(e,{includeBundleBytes:t});return{blob:new Blob([await Yo(JSON.stringify(r))]),filename:`${Ou(e.name)}.deepview-workspace.json.gz`}}async function bb(e,t,{includeBundleBytes:r=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:n}=await Nu(e,{includeBundleBytes:r}),o=new Uint8Array(await n.arrayBuffer()),s=await Lu(o,t);return{blob:new Blob([s],{type:"application/octet-stream"}),filename:`${Ou(e.name)}.deepview-workspace.enc`}}async function rl(e,{password:t,includeBundleBytes:r=!1}={}){return typeof t=="string"&&t?await bb(e,t,{includeBundleBytes:r}):await Nu(e,{includeBundleBytes:r})}var yb=1,Du=1024,Uu=1024,$s=200,ju=100*1024*1024,wb=Math.ceil(ju*4/3)+16,zu=512,Wu=64;function vb(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==yb)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>Uu)return`reports count (${e.reports.length}) exceeds cap (${Uu})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>Du)return`bundles count (${e.bundles.length}) exceeds cap (${Du})`;for(let t of e.bundles){if(typeof t!="string")return"bundles entries must be strings";if(t.length>$s)return`bundle integrity exceeds per-entry length cap (${$s})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>Wu)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${Wu})`;for(let t of e.bundleBlobs){if(!t||typeof t!="object"||Array.isArray(t))return"bundleBlobs entries must be objects";if(typeof t.integrity!="string"||t.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(t.integrity.length>$s)return`bundleBlobs.integrity exceeds per-entry length cap (${$s})`;if(typeof t.name!="string"||t.name.length===0)return"bundleBlobs.name must be a non-empty string";if(t.name.length>zu)return`bundleBlobs.name exceeds per-entry length cap (${zu})`;if(t.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof t.data!="string")return"bundleBlobs.data must be a base64 string";if(t.data.length>wb)return`bundleBlobs.data exceeds per-blob size cap (${ju} bytes raw)`}}return null}async function nl(e){return new Uint8Array(await e.arrayBuffer())}async function xs(e,t){if(Yn(e)){if(typeof t!="string"||!t)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let n=await Pu(e,t);try{return Hu(await yn(n))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let r;try{r=await yn(e)}catch(n){throw new Error(`gzip decompression failed: ${n.message}`,{cause:n})}return Hu(r)}function Hu(e){let t;try{t=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let r=vb(t);if(r===null)return t;let n=r.includes("exceeds cap");throw new Error(n?r:`not a deepview workspace export: ${r}`)}function kb(e){return de(e)??null}async function $b(e){let t=new Map;for(let r of e??[]){if(typeof r?.content!="string")continue;let n=Ht(r.content);if(!n?.findings)continue;let o=jt(n.findings);await Hr(o);for(let s of o)!s.id||t.has(s.id)||t.set(s.id,{severity:s.severity,file:s.file,line:s.line,description:Sa(s.description)})}return t}async function xb(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return;let n=a.triage,o=[];for(let[s,i]of Object.entries(e)){if(!i||typeof i!="object")continue;let l=n.get(s)?.color,d=typeof i.color=="string"?i.color:void 0;d&&l&&l!==d?o.push({id:s,property:"color",local:l,imported:d}):d&&d!==l&&M(n,s,{color:d});let u=n.get(s)?.comment??"",p=typeof i.comment=="string"?i.comment:"";p&&u&&u!==p?o.push({id:s,property:"comment",local:u,imported:p}):p&&p!==u&&M(n,s,{comment:p});let f=n.get(s)?.fix??"",h=typeof i.fix=="string"?i.fix:"";h&&f&&f!==h?o.push({id:s,property:"fix",local:f,imported:h}):h&&h!==f&&M(n,s,{fix:h});let b=kb(i),m=de(n.get(s))??null;b&&m&&m!==b?o.push({id:s,property:"triage",local:m,imported:b}):b&&!m&&M(n,s,{triage:b,ignoredReports:void 0});let y=Array.isArray(i.ignoredReports)?i.ignoredReports:[];if(!de(n.get(s)))for(let k of y)typeof k=="string"&&ne(n,s,k,!0)}if(o.length>0&&t){let s=await t(o,r??new Map);s&&_b(o,s)}await oe()}function _b(e,t){for(let r of e){let n=`${r.id}:${r.property}`;t[n]==="imported"&&Sb(r.id,r.property)===r.local&&(r.property==="color"?M(a.triage,r.id,{color:r.imported}):r.property==="comment"?M(a.triage,r.id,{comment:r.imported}):r.property==="fix"?M(a.triage,r.id,{fix:r.imported}):r.property==="triage"&&M(a.triage,r.id,{triage:r.imported,ignoredReports:void 0}))}}function Sb(e,t){if(t==="color")return a.triage.get(e)?.color;if(t==="triage")return de(a.triage.get(e))??null;if(t==="comment")return a.triage.get(e)?.comment??"";if(t==="fix")return a.triage.get(e)?.fix??""}async function Cb(e){if(Array.isArray(e))for(let t of e){let r;try{r=Uint8Array.fromBase64(t.data)}catch(n){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${n?.message??n}`);continue}try{let n=await fr(t.name,r);n?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${n?.integrity})`)}catch(n){console.warn(`Workspace import: failed to save bundle ${t.name}: ${n?.message??n}`)}}}async function ol(e,{conflictResolver:t}={}){let r=[];for(let u of e.reports)if(!(typeof u?.name!="string"||typeof u?.content!="string"))try{await lt(u.name,u.content);let{count:p,source:f}=Oe(u.content);Ve(u.name,p,f??Dn(u.name)),r.push(u.name)}catch(p){console.warn(`Workspace import: failed to save ${u.name}: ${p.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await Cb(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await $b(e.reports):new Map;await xb(e.triage,t,o);let s=Array.isArray(e.bundles),i=s?e.bundles.filter(u=>typeof u=="string"&&u.length>0):[],l=await $u({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:r,bundles:s?i:void 0,preserveBundles:!s,createdAt:e.workspace.createdAt}),d=new Set(r);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[u,p]of Object.entries(e.repoUrls))!d.has(u)||typeof p!="string"||!p||He(u)||(je(u,p),a.currentFile===u&&(a.repoUrl=p));return l}async function sl({id:e,name:t,privateKeyBase64:r,password:n}){if(typeof e!="string"||!e)throw new TypeError("encodeShareLink: id required");if(typeof t!="string"||!t)throw new TypeError("encodeShareLink: name required");if(typeof r!="string"||!r)throw new TypeError("encodeShareLink: privateKey required");if(typeof n!="string"||!n)throw new TypeError("encodeShareLink: password required");let s=await Un(r)===e?{v:1,n:t,k:r}:{v:1,i:e,n:t,k:r};return(await vs(G(JSON.stringify(s)),n)).toBase64({alphabet:"base64url",omitPadding:!0})}async function il({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let r;try{r=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let n=await ks(r,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await Eb(n)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function Eb(e){let t=JSON.parse(ce(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Un(t.k),name:t.n,privateKeyBase64:t.k}}function al(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function ll(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let r=t.replace(/^#/u,"");if(!r)return null;for(let n of r.split("&")){let o=n.indexOf("=");if(o<0||n.slice(0,o)!=="share")continue;return n.slice(o+1)||null}return null}var Ab={get state(){return a},listWorkspaces:z,addReportToWorkspace:Tt,addBundleToWorkspace:br,onReportMembershipChanged:Ta,onBundleMembershipChanged:Ia,onWorkspaceDeleted:Ea,onWorkspacePrivateKeyChanged:Aa,analyzeContent:Oe,setCount:Ve,gunzipBytes:gt,listBundles:ct,listFiles:le,readBundle:hr,readFileBytes:pr,saveBundle:fr,saveFileBytes:In,saveTriage:oe,getSecureItem:he,setSecureItem:ke,removeSecureItem:Pr,onSecureStorageHydrated:Lr};function Vu(e){e.installSyncHost(Ab),Cu(()=>e.triageSync.notify())}var U=null,Jn=null;function Yu(){try{return he("deepview.sync.userEnabled")!=="0"}catch{return!0}}function cl(){return Jn||(Jn=(async()=>{let e="./client-sync.js";try{let t=await import(e);return Vu(t),U=t,Tb(),t}catch(t){throw Jn=null,t}})(),Jn)}function Ju(){return cl()}var Xu=[];function Qn(e){U?e(U):Xu.push(e)}function Tb(){let e=Xu.splice(0);for(let t of e)try{t(U)}catch(r){console.warn("client-sync: deferred apply failed:",r)}}function Xn(e,t){let r={cancelled:!1,unsub:null};return Qn(n=>{r.cancelled||(r.unsub=t(n,e))}),()=>{r.cancelled=!0,r.unsub&&r.unsub()}}function dl(e,t){return U?U.isInRemote(e,t):!1}function Qu(e,t){return U?U.isBundleInRemote(e,t):!1}var Ib="deepview.objstore-presence.";function Zu(e){try{let t=localStorage.getItem(Ib+e);if(!t)return null;let r=JSON.parse(t);return r&&typeof r=="object"?r:null}catch{return null}}function Zn(e,t){if(U&&U.isInRemote(e,t))return!0;let r=Zu(e);if(!r||typeof r.names!="object")return!1;for(let n of Object.values(r.names))if(n===t)return!0;return!1}function ul(e,t){if(U&&U.isBundleInRemote(e,t))return!0;let r=Zu(e);if(!r||typeof r.bundles!="object")return!1;for(let n of Object.values(r.bundles))if(n===t)return!0;return!1}function ep(e){return U?U.remoteCount(e):0}function tp(e){return Xn(e,(t,r)=>t.onAutoDownloaded(r))}function rp(e){return Xn(e,(t,r)=>t.onBundleAutoDownloaded(r))}function np(e){return Xn(e,(t,r)=>t.onChange(r))}var Ku=null,qu=null,Gu=null,_s=[];function op(e){if(U){U.setRedraw(e);return}Ku=e,Qn(t=>{Ku===e&&t.setRedraw(e)})}function sp(e){if(U){U.setAuthenticationResolver(e);return}qu=e,Qn(t=>{qu===e&&t.setAuthenticationResolver(e)})}function ip(e){if(U){U.setHydrationConflictResolver(e);return}Gu=e,Qn(t=>{Gu===e&&t.setHydrationConflictResolver(e)})}async function Bt(e,t){if(!(!Yu()&&!U))return(await cl())[e](...t)}function ap(...e){return Bt("fetchFile",e)}function lp(...e){return Bt("fetchBundleFromRemote",e)}function Ss(...e){return Bt("putFile",e)}function cp(...e){return Bt("putBundleToRemote",e)}function Cs(...e){return Bt("deleteFromRemote",e)}function Es(...e){return Bt("deleteBundleFromRemote",e)}function As(...e){return Bt("openWorkspace",e)}function eo(...e){return Bt("closeWorkspace",e)}function dp(...e){return Bt("recheckRemoteStorage",e)}function Yt(e,t){if(U)return U.triageSync[e](...t);Qn(r=>{r.triageSync[e](...t)})}var N={get status(){return U?U.triageSync.status:"off"},get openSessions(){return U?U.triageSync.openSessions:[]},get persistenceDegraded(){return U?U.triageSync.persistenceDegraded:!1},setEnabled(e){if(e===!0)return cl().then(t=>{t.triageSync.setEnabled(!0);let r=_s;_s=[];for(let n of r)try{t.openWorkspace(n)}catch(o){console.warn(`client-sync: openWorkspace(${n}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(U){_s=U.openWorkspaceIds();for(let t of _s)try{U.closeWorkspace(t)}catch(r){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,r)}U.triageSync.setEnabled(!1);return}Yt("setEnabled",[e])},isEnabled(){return U?U.triageSync.isEnabled():Yu()},openSession(e){Yt("openSession",[e])},closeSession(e){Yt("closeSession",[e])},refreshSession(e){Yt("refreshSession",[e])},dismissError(e){Yt("dismissError",[e])},setForcedOff(e){Yt("setForcedOff",[e])},setServerUrl(e){Yt("setServerUrl",[e])},getServerUrl(){return U?U.triageSync.getServerUrl():null},notify(){Yt("notify",[])},onStatusChange(e){return Xn(e,(t,r)=>t.triageSync.onStatusChange(r))},onPersistenceDegraded(e){return Xn(e,(t,r)=>t.triageSync.onPersistenceDegraded(r))}};var to=class extends Je{constructor(t){if(super(t),this.it=g,t.type!==Be.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===g||t==null)return this._t=void 0,this.it=t;if(t===ae)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let r=[t];return r.raw=r,this._t={_$litType$:this.constructor.resultType,strings:r,values:[]}}};to.directiveName="unsafeHTML",to.resultType=1;var ue=ft(to);var up=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host(.empty){display:none}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:baseline;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:4px;&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:4px;padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:4px;padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--text) r g b / .04);border:1px solid var(--border);border-radius:5px;transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:3px;padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:var(--muted);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}.group-count{font-weight:500;letter-spacing:.04em;color:var(--muted);font-size:.7rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:4px;padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item.workspace-item{display:flex;align-items:stretch;gap:.15rem}.file-item.workspace-item button.file-name{flex:1;min-width:0}.file-item.workspace-item .workspace-count{align-self:center;margin-right:.35rem}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:4px;padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:3px;padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item{list-style:none;position:relative;&.hidden{display:none}}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:0 2px 2px 0;pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:0 5px 5px 0;font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.workspace-count-missing{margin-left:2px;opacity:.55;font-style:italic}.file-item.current button.file-name{background:rgb(from var(--text) r g b / .05);border-color:var(--border);.file-icon,.file-count{color:var(--text)}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:help;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:4px}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:4px;padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
var AF=Object.defineProperty;var k=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var gb=(e,t)=>{for(var r in t)AF(e,r,{get:t[r],enumerable:!0})};var Sp,Cp,bb,hS,Ac,F,Te,mS,vb,yb=k(()=>{Sp=globalThis,Cp=Sp.ShadowRoot&&(Sp.ShadyCSS===void 0||Sp.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,bb=Symbol(),hS=new WeakMap,Ac=class{constructor(t,r,n){if(this._$cssResult$=!0,n!==bb)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=r}get styleSheet(){let t=this.o,r=this.t;if(Cp&&t===void 0){let n=r!==void 0&&r.length===1;n&&(t=hS.get(r)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&hS.set(r,t))}return t}toString(){return this.cssText}},F=e=>new Ac(typeof e=="string"?e:e+"",void 0,bb),Te=(e,...t)=>{let r=e.length===1?e[0]:t.reduce((n,o,i)=>n+(s=>{if(s._$cssResult$===!0)return s.cssText;if(typeof s=="number")return s;throw Error("Value passed to 'css' function must be a 'css' function result: "+s+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(o)+e[i+1],e[0]);return new Ac(r,e,bb)},mS=(e,t)=>{if(Cp)e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet);else for(let r of t){let n=document.createElement("style"),o=Sp.litNonce;o!==void 0&&n.setAttribute("nonce",o),n.textContent=r.cssText,e.appendChild(n)}},vb=Cp?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return F(r)})(e):e});var IF,TF,LF,FF,BF,OF,Ep,gS,NF,PF,Ic,wb,vS,bS,io,Mp=k(()=>{yb();yb();({is:IF,defineProperty:TF,getOwnPropertyDescriptor:LF,getOwnPropertyNames:FF,getOwnPropertySymbols:BF,getPrototypeOf:OF}=Object),Ep=globalThis,gS=Ep.trustedTypes,NF=gS?gS.emptyScript:"",PF=Ep.reactiveElementPolyfillSupport,Ic=(e,t)=>e,wb={toAttribute(e,t){switch(t){case Boolean:e=e?NF:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=e!==null;break;case Number:r=e===null?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch{r=null}}return r}},vS=(e,t)=>!IF(e,t),bS={attribute:!0,type:String,converter:wb,reflect:!1,useDefault:!1,hasChanged:vS};Symbol.metadata??=Symbol("metadata"),Ep.litPropertyMetadata??=new WeakMap;io=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,r=bS){if(r.state&&(r.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((r=Object.create(r)).wrapped=!0),this.elementProperties.set(t,r),!r.noAccessor){let n=Symbol(),o=this.getPropertyDescriptor(t,n,r);o!==void 0&&TF(this.prototype,t,o)}}static getPropertyDescriptor(t,r,n){let{get:o,set:i}=LF(this.prototype,t)??{get(){return this[r]},set(s){this[r]=s}};return{get:o,set(s){let a=o?.call(this);i?.call(this,s),this.requestUpdate(t,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??bS}static _$Ei(){if(this.hasOwnProperty(Ic("elementProperties")))return;let t=OF(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(Ic("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Ic("properties"))){let r=this.properties,n=[...FF(r),...BF(r)];for(let o of n)this.createProperty(o,r[o])}let t=this[Symbol.metadata];if(t!==null){let r=litPropertyMetadata.get(t);if(r!==void 0)for(let[n,o]of r)this.elementProperties.set(n,o)}this._$Eh=new Map;for(let[r,n]of this.elementProperties){let o=this._$Eu(r,n);o!==void 0&&this._$Eh.set(o,r)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let r=[];if(Array.isArray(t)){let n=new Set(t.flat(1/0).reverse());for(let o of n)r.unshift(vb(o))}else t!==void 0&&r.push(vb(t));return r}static _$Eu(t,r){let n=r.attribute;return n===!1?void 0:typeof n=="string"?n:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,r=this.constructor.elementProperties;for(let n of r.keys())this.hasOwnProperty(n)&&(t.set(n,this[n]),delete this[n]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return mS(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,r,n){this._$AK(t,n)}_$ET(t,r){let n=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,n);if(o!==void 0&&n.reflect===!0){let i=(n.converter?.toAttribute!==void 0?n.converter:wb).toAttribute(r,n.type);this._$Em=t,i==null?this.removeAttribute(o):this.setAttribute(o,i),this._$Em=null}}_$AK(t,r){let n=this.constructor,o=n._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let i=n.getPropertyOptions(o),s=typeof i.converter=="function"?{fromAttribute:i.converter}:i.converter?.fromAttribute!==void 0?i.converter:wb;this._$Em=o;let a=s.fromAttribute(r,i.type);this[o]=a??this._$Ej?.get(o)??a,this._$Em=null}}requestUpdate(t,r,n,o=!1,i){if(t!==void 0){let s=this.constructor;if(o===!1&&(i=this[t]),n??=s.getPropertyOptions(t),!((n.hasChanged??vS)(i,r)||n.useDefault&&n.reflect&&i===this._$Ej?.get(t)&&!this.hasAttribute(s._$Eu(t,n))))return;this.C(t,r,n)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,r,{useDefault:n,reflect:o,wrapped:i},s){n&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,s??r??this[t]),i!==!0||s!==void 0)||(this._$AL.has(t)||(this.hasUpdated||n||(r=void 0),this._$AL.set(t,r)),o===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(r){Promise.reject(r)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[o,i]of this._$Ep)this[o]=i;this._$Ep=void 0}let n=this.constructor.elementProperties;if(n.size>0)for(let[o,i]of n){let{wrapped:s}=i,a=this[o];s!==!0||this._$AL.has(o)||a===void 0||this.C(o,void 0,i,a)}}let t=!1,r=this._$AL;try{t=this.shouldUpdate(r),t?(this.willUpdate(r),this._$EO?.forEach(n=>n.hostUpdate?.()),this.update(r)):this._$EM()}catch(n){throw t=!1,this._$EM(),n}t&&this._$AE(r)}willUpdate(t){}_$AE(t){this._$EO?.forEach(r=>r.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(r=>this._$ET(r,this[r])),this._$EM()}updated(t){}firstUpdated(t){}};io.elementStyles=[],io.shadowRootOptions={mode:"open"},io[Ic("elementProperties")]=new Map,io[Ic("finalized")]=new Map,PF?.({ReactiveElement:io}),(Ep.reactiveElementVersions??=[]).push("2.1.2")});function MS(e,t){if(!Sb(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return wS!==void 0?wS.createHTML(t):t}function is(e,t,r=e,n){if(t===et)return t;let o=n!==void 0?r._$Co?.[n]:r._$Cl,i=Fc(t)?void 0:t._$litDirective$;return o?.constructor!==i&&(o?._$AO?.(!1),i===void 0?o=void 0:(o=new i(e),o._$AT(e,r,n)),n!==void 0?(r._$Co??=[])[n]=o:r._$Cl=o),o!==void 0&&(t=is(e,o._$AS(e,t.values),o,n)),t}var xb,yS,Rp,wS,$b,so,_b,DF,os,Lc,Fc,Sb,CS,kb,Tc,kS,xS,rs,$S,_S,ES,Cb,d,Mt,eq,et,m,SS,ns,RS,Bc,Ap,Ma,ss,Ip,Tp,Lp,Fp,AS,zF,ae,Jr=k(()=>{xb=globalThis,yS=e=>e,Rp=xb.trustedTypes,wS=Rp?Rp.createPolicy("lit-html",{createHTML:e=>e}):void 0,$b="$lit$",so=`lit$${Math.random().toFixed(9).slice(2)}$`,_b="?"+so,DF=`<${_b}>`,os=document,Lc=()=>os.createComment(""),Fc=e=>e===null||typeof e!="object"&&typeof e!="function",Sb=Array.isArray,CS=e=>Sb(e)||typeof e?.[Symbol.iterator]=="function",kb=`[
|
|
2
|
+
\f\r]`,Tc=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,kS=/-->/g,xS=/>/g,rs=RegExp(`>|${kb}(?:([^\\s"'>=/]+)(${kb}*=${kb}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),$S=/'/g,_S=/"/g,ES=/^(?:script|style|textarea|title)$/i,Cb=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),d=Cb(1),Mt=Cb(2),eq=Cb(3),et=Symbol.for("lit-noChange"),m=Symbol.for("lit-nothing"),SS=new WeakMap,ns=os.createTreeWalker(os,129);RS=(e,t)=>{let r=e.length-1,n=[],o,i=t===2?"<svg>":t===3?"<math>":"",s=Tc;for(let a=0;a<r;a++){let c=e[a],u,p,f=-1,h=0;for(;h<c.length&&(s.lastIndex=h,p=s.exec(c),p!==null);)h=s.lastIndex,s===Tc?p[1]==="!--"?s=kS:p[1]!==void 0?s=xS:p[2]!==void 0?(ES.test(p[2])&&(o=RegExp("</"+p[2],"g")),s=rs):p[3]!==void 0&&(s=rs):s===rs?p[0]===">"?(s=o??Tc,f=-1):p[1]===void 0?f=-2:(f=s.lastIndex-p[2].length,u=p[1],s=p[3]===void 0?rs:p[3]==='"'?_S:$S):s===_S||s===$S?s=rs:s===kS||s===xS?s=Tc:(s=rs,o=void 0);let g=s===rs&&e[a+1].startsWith("/>")?" ":"";i+=s===Tc?c+DF:f>=0?(n.push(u),c.slice(0,f)+$b+c.slice(f)+so+g):c+so+(f===-2?a:g)}return[MS(e,i+(e[r]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),n]},Bc=class e{constructor({strings:t,_$litType$:r},n){let o;this.parts=[];let i=0,s=0,a=t.length-1,c=this.parts,[u,p]=RS(t,r);if(this.el=e.createElement(u,n),ns.currentNode=this.el.content,r===2||r===3){let f=this.el.content.firstChild;f.replaceWith(...f.childNodes)}for(;(o=ns.nextNode())!==null&&c.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let f of o.getAttributeNames())if(f.endsWith($b)){let h=p[s++],g=o.getAttribute(f).split(so),b=/([.?@])?(.*)/.exec(h);c.push({type:1,index:i,name:b[2],strings:g,ctor:b[1]==="."?Ip:b[1]==="?"?Tp:b[1]==="@"?Lp:ss}),o.removeAttribute(f)}else f.startsWith(so)&&(c.push({type:6,index:i}),o.removeAttribute(f));if(ES.test(o.tagName)){let f=o.textContent.split(so),h=f.length-1;if(h>0){o.textContent=Rp?Rp.emptyScript:"";for(let g=0;g<h;g++)o.append(f[g],Lc()),ns.nextNode(),c.push({type:2,index:++i});o.append(f[h],Lc())}}}else if(o.nodeType===8)if(o.data===_b)c.push({type:2,index:i});else{let f=-1;for(;(f=o.data.indexOf(so,f+1))!==-1;)c.push({type:7,index:i}),f+=so.length-1}i++}}static createElement(t,r){let n=os.createElement("template");return n.innerHTML=t,n}};Ap=class{constructor(t,r){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=r}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:r},parts:n}=this._$AD,o=(t?.creationScope??os).importNode(r,!0);ns.currentNode=o;let i=ns.nextNode(),s=0,a=0,c=n[0];for(;c!==void 0;){if(s===c.index){let u;c.type===2?u=new Ma(i,i.nextSibling,this,t):c.type===1?u=new c.ctor(i,c.name,c.strings,this,t):c.type===6&&(u=new Fp(i,this,t)),this._$AV.push(u),c=n[++a]}s!==c?.index&&(i=ns.nextNode(),s++)}return ns.currentNode=os,o}p(t){let r=0;for(let n of this._$AV)n!==void 0&&(n.strings!==void 0?(n._$AI(t,n,r),r+=n.strings.length-2):n._$AI(t[r])),r++}},Ma=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,r,n,o){this.type=2,this._$AH=m,this._$AN=void 0,this._$AA=t,this._$AB=r,this._$AM=n,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,r=this._$AM;return r!==void 0&&t?.nodeType===11&&(t=r.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,r=this){t=is(this,t,r),Fc(t)?t===m||t==null||t===""?(this._$AH!==m&&this._$AR(),this._$AH=m):t!==this._$AH&&t!==et&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):CS(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==m&&Fc(this._$AH)?this._$AA.nextSibling.data=t:this.T(os.createTextNode(t)),this._$AH=t}$(t){let{values:r,_$litType$:n}=t,o=typeof n=="number"?this._$AC(t):(n.el===void 0&&(n.el=Bc.createElement(MS(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===o)this._$AH.p(r);else{let i=new Ap(o,this),s=i.u(this.options);i.p(r),this.T(s),this._$AH=i}}_$AC(t){let r=SS.get(t.strings);return r===void 0&&SS.set(t.strings,r=new Bc(t)),r}k(t){Sb(this._$AH)||(this._$AH=[],this._$AR());let r=this._$AH,n,o=0;for(let i of t)o===r.length?r.push(n=new e(this.O(Lc()),this.O(Lc()),this,this.options)):n=r[o],n._$AI(i),o++;o<r.length&&(this._$AR(n&&n._$AB.nextSibling,o),r.length=o)}_$AR(t=this._$AA.nextSibling,r){for(this._$AP?.(!1,!0,r);t!==this._$AB;){let n=yS(t).nextSibling;yS(t).remove(),t=n}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},ss=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,r,n,o,i){this.type=1,this._$AH=m,this._$AN=void 0,this.element=t,this.name=r,this._$AM=o,this.options=i,n.length>2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=m}_$AI(t,r=this,n,o){let i=this.strings,s=!1;if(i===void 0)t=is(this,t,r,0),s=!Fc(t)||t!==this._$AH&&t!==et,s&&(this._$AH=t);else{let a=t,c,u;for(t=i[0],c=0;c<i.length-1;c++)u=is(this,a[n+c],r,c),u===et&&(u=this._$AH[c]),s||=!Fc(u)||u!==this._$AH[c],u===m?t=m:t!==m&&(t+=(u??"")+i[c+1]),this._$AH[c]=u}s&&!o&&this.j(t)}j(t){t===m?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},Ip=class extends ss{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===m?void 0:t}},Tp=class extends ss{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==m)}},Lp=class extends ss{constructor(t,r,n,o,i){super(t,r,n,o,i),this.type=5}_$AI(t,r=this){if((t=is(this,t,r,0)??m)===et)return;let n=this._$AH,o=t===m&&n!==m||t.capture!==n.capture||t.once!==n.once||t.passive!==n.passive,i=t!==m&&(n===m||o);o&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},Fp=class{constructor(t,r,n){this.element=t,this.type=6,this._$AN=void 0,this._$AM=r,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(t){is(this,t)}},AS={M:$b,P:so,A:_b,C:1,L:RS,R:Ap,D:CS,V:is,I:Ma,H:ss,N:Tp,U:Lp,B:Ip,F:Fp},zF=xb.litHtmlPolyfillSupport;zF?.(Bc,Ma),(xb.litHtmlVersions??=[]).push("3.3.3");ae=(e,t,r)=>{let n=r?.renderBefore??t,o=n._$litPart$;if(o===void 0){let i=r?.renderBefore??null;n._$litPart$=o=new Ma(t.insertBefore(Lc(),i),i,void 0,r??{})}return o._$AI(e),o}});var Eb,J,UF,IS=k(()=>{Mp();Mp();Jr();Jr();Eb=globalThis,J=class extends io{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=ae(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return et}};J._$litElement$=!0,J.finalized=!0,Eb.litElementHydrateSupport?.({LitElement:J});UF=Eb.litElementPolyfillSupport;UF?.({LitElement:J});(Eb.litElementVersions??=[]).push("4.2.2")});var TS=k(()=>{});var T=k(()=>{Mp();Jr();IS();TS()});var Nt,Ar,er,as=k(()=>{Nt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Ar=e=>(...t)=>({_$litDirective$:e,values:t}),er=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,r,n){this._$Ct=t,this._$AM=r,this._$Ci=n}_$AS(t,r){return this.update(t,r)}update(t,r){return this.render(...r)}}});var z,LS=k(()=>{Jr();as();z=Ar(class extends er{constructor(e){if(super(e),e.type!==Nt.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(n=>n!=="")));for(let n in t)t[n]&&!this.nt?.has(n)&&this.st.add(n);return this.render(t)}let r=e.element.classList;for(let n of this.st)n in t||(r.remove(n),this.st.delete(n));for(let n in t){let o=!!t[n];o===this.st.has(n)||this.nt?.has(n)||(o?(r.add(n),this.st.add(n)):(r.remove(n),this.st.delete(n)))}return et}})});var He=k(()=>{LS()});var HF,FS,OS,BS,Ra,qo,jF,Aa,NS,Bp,Op=k(()=>{Jr();({I:HF}=AS),FS=e=>e,OS=e=>e.strings===void 0,BS=()=>document.createComment(""),Ra=(e,t,r)=>{let n=e._$AA.parentNode,o=t===void 0?e._$AB:t._$AA;if(r===void 0){let i=n.insertBefore(BS(),o),s=n.insertBefore(BS(),o);r=new HF(i,s,e,e.options)}else{let i=r._$AB.nextSibling,s=r._$AM,a=s!==e;if(a){let c;r._$AQ?.(e),r._$AM=e,r._$AP!==void 0&&(c=e._$AU)!==s._$AU&&r._$AP(c)}if(i!==o||a){let c=r._$AA;for(;c!==i;){let u=FS(c).nextSibling;FS(n).insertBefore(c,o),c=u}}}return r},qo=(e,t,r=e)=>(e._$AI(t,r),e),jF={},Aa=(e,t=jF)=>e._$AH=t,NS=e=>e._$AH,Bp=e=>{e._$AR(),e._$AA.remove()}});var PS,oe,DS=k(()=>{Jr();as();Op();PS=(e,t,r)=>{let n=new Map;for(let o=t;o<=r;o++)n.set(e[o],o);return n},oe=Ar(class extends er{constructor(e){if(super(e),e.type!==Nt.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,r){let n;r===void 0?r=t:t!==void 0&&(n=t);let o=[],i=[],s=0;for(let a of e)o[s]=n?n(a,s):s,i[s]=r(a,s),s++;return{values:i,keys:o}}render(e,t,r){return this.dt(e,t,r).values}update(e,[t,r,n]){let o=NS(e),{values:i,keys:s}=this.dt(t,r,n);if(!Array.isArray(o))return this.ut=s,i;let a=this.ut??=[],c=[],u,p,f=0,h=o.length-1,g=0,b=i.length-1;for(;f<=h&&g<=b;)if(o[f]===null)f++;else if(o[h]===null)h--;else if(a[f]===s[g])c[g]=qo(o[f],i[g]),f++,g++;else if(a[h]===s[b])c[b]=qo(o[h],i[b]),h--,b--;else if(a[f]===s[b])c[b]=qo(o[f],i[b]),Ra(e,c[b+1],o[f]),f++,b--;else if(a[h]===s[g])c[g]=qo(o[h],i[g]),Ra(e,o[f],o[h]),h--,g++;else if(u===void 0&&(u=PS(s,g,b),p=PS(a,f,h)),u.has(a[f]))if(u.has(a[h])){let v=p.get(s[g]),x=v!==void 0?o[v]:null;if(x===null){let w=Ra(e,o[f]);qo(w,i[g]),c[g]=w}else c[g]=qo(x,i[g]),Ra(e,o[f],x),o[v]=null;g++}else Bp(o[h]),h--;else Bp(o[f]),f++;for(;g<=b;){let v=Ra(e,c[b+1]);qo(v,i[g]),c[g++]=v}for(;f<=h;){let v=o[f++];v!==null&&Bp(v)}return this.ut=s,Aa(e,c),et}})});var Pt=k(()=>{DS()});var zS,VF,Me,US=k(()=>{Jr();as();zS="important",VF=" !"+zS,Me=Ar(class extends er{constructor(e){if(super(e),e.type!==Nt.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,r)=>{let n=e[r];return n==null?t:t+`${r=r.includes("-")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${n};`},"")}update(e,[t]){let{style:r}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let n of this.ft)t[n]==null&&(this.ft.delete(n),n.includes("-")?r.removeProperty(n):r[n]=null);for(let n in t){let o=t[n];if(o!=null){this.ft.add(n);let i=typeof o=="string"&&o.endsWith(VF);n.includes("-")||i?r.setProperty(n,i?o.slice(0,-11):o,i?zS:""):r[n]=o}}return et}})});var ao=k(()=>{US()});function WF(e){Ib.set(e,new Map)}function GF(e,{target:t,key:r,type:n}){n==="iterate"&&(r=WS);let o=Ib.get(t),i=o.get(r);i||(i=new Set,o.set(r,i)),i.has(e)||(i.add(e),e.cleaners.push(i))}function KF({target:e,key:t,type:r}){let n=Ib.get(e),o=new Set;if(r==="clear"?n.forEach((i,s)=>{Mb(o,n,s)}):Mb(o,n,t),r==="add"||r==="delete"||r==="clear"){let i=Array.isArray(e)?"length":WS;Mb(o,n,i)}return o}function Mb(e,t,r){let n=t.get(r);n&&n.forEach(e.add,e)}function GS(e){e.cleaners&&e.cleaners.forEach(qF,e),e.cleaners=[]}function qF(e){e.delete(this)}function YF(e,t,r,n){if(e.unobserved)return Reflect.apply(t,r,n);if(Ia.indexOf(e)===-1){GS(e);try{return Ia.push(e),Reflect.apply(t,r,n)}finally{Ia.pop()}}}function Zr(e){let t=Ia[Ia.length-1];t&&(KS(t,e),GF(t,e))}function Yo(e){KF(e).forEach(XF,e)}function XF(e){KS(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function KS(e,t){if(e.debugger&&!Rb)try{Rb=!0,e.debugger(t)}finally{Rb=!1}}function qS(){return Ia.length>0}function YS(e,t={}){let r=e[HS]?e:function n(){return YF(n,e,this,arguments)};return r.scheduler=t.scheduler,r.debugger=t.debugger,r[HS]=!0,t.lazy||r(),r}function Tb(e){e.unobserved||(e.unobserved=!0,GS(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}function Pp(e){let t=Dp.get(e);return qS()&&typeof e=="object"&&e!==null?t||zp(e):t||e}function Ab(e,t){let r=e.next;return e.next=()=>{let{done:n,value:o}=r.call(e);return n||(t?o[1]=Pp(o[1]):o=Pp(o)),{done:n,value:o}},e}function ZF({constructor:e}){return!(typeof e=="function"&&e.name in VS&&VS[e.name]===e)||XS.has(e)}function QF(e){return XS.get(e.constructor)}function tB(e,t,r){let n=Reflect.get(e,t,r);if(typeof t=="symbol"&&eB.has(t))return n;Zr({target:e,key:t,receiver:r,type:"get"});let o=Dp.get(n);if(qS()&&typeof n=="object"&&n!==null){if(o)return o;let i=Reflect.getOwnPropertyDescriptor(e,t);if(!i||!(i.writable===!1&&i.configurable===!1))return zp(n)}return o||n}function rB(e,t){let r=Reflect.has(e,t);return Zr({target:e,key:t,type:"has"}),r}function nB(e){return Zr({target:e,type:"iterate"}),Reflect.ownKeys(e)}function oB(e,t,r,n){typeof r=="object"&&r!==null&&(r=Rt.get(r)||r);let o=JS.call(e,t),i=e[t],s=Reflect.set(e,t,r,n);return e!==Rt.get(n)||(o?r!==i&&Yo({target:e,key:t,value:r,oldValue:i,receiver:n,type:"set"}):Yo({target:e,key:t,value:r,receiver:n,type:"add"})),s}function iB(e,t){let r=JS.call(e,t),n=e[t],o=Reflect.deleteProperty(e,t);return r&&Yo({target:e,key:t,oldValue:n,type:"delete"}),o}function zp(e={}){return Rt.has(e)||!ZF(e)?e:Dp.get(e)||aB(e)}function aB(e){let t=QF(e)||sB,r=new Proxy(e,t);return Dp.set(e,r),Rt.set(r,e),WF(e),r}var Ib,WS,Ia,Rb,HS,Rt,Dp,JF,jS,Np,VS,XS,JS,eB,sB,ZS=k(()=>{Ib=new WeakMap,WS=Symbol("iteration key");Ia=[],Rb=!1;HS=Symbol("is reaction");Rt=new WeakMap,Dp=new WeakMap,JF=Object.prototype.hasOwnProperty;jS={has(e){let t=Rt.get(this),r=Reflect.getPrototypeOf(this);return Zr({target:t,key:e,type:"has"}),r.has.apply(t,arguments)},get(e){let t=Rt.get(this),r=Reflect.getPrototypeOf(this);return Zr({target:t,key:e,type:"get"}),Pp(r.get.apply(t,arguments))},add(e){let t=Rt.get(this),r=Reflect.getPrototypeOf(this),n=r.has.call(t,e),o=r.add.apply(t,arguments);return n||Yo({target:t,key:e,value:e,type:"add"}),o},set(e,t){let r=Rt.get(this),n=Reflect.getPrototypeOf(this),o=n.has.call(r,e),i=n.get.call(r,e),s=n.set.apply(r,arguments);return o?t!==i&&Yo({target:r,key:e,value:t,oldValue:i,type:"set"}):Yo({target:r,key:e,value:t,type:"add"}),s},delete(e){let t=Rt.get(this),r=Reflect.getPrototypeOf(this),n=r.has.call(t,e),o=r.get?r.get.call(t,e):void 0,i=r.delete.apply(t,arguments);return n&&Yo({target:t,key:e,oldValue:o,type:"delete"}),i},clear(){let e=Rt.get(this),t=Reflect.getPrototypeOf(this),r=e.size!==0,n=e instanceof Map?new Map(e):new Set(e),o=t.clear.apply(e,arguments);return r&&Yo({target:e,oldTarget:n,type:"clear"}),o},forEach(e,...t){let r=Rt.get(this),n=Reflect.getPrototypeOf(this);Zr({target:r,type:"iterate"});let o=(i,...s)=>e(Pp(i),...s);return n.forEach.call(r,o,...t)},keys(){let e=Rt.get(this),t=Reflect.getPrototypeOf(this);return Zr({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=Rt.get(this),t=Reflect.getPrototypeOf(this);Zr({target:e,type:"iterate"});let r=t.values.apply(e,arguments);return Ab(r,!1)},entries(){let e=Rt.get(this),t=Reflect.getPrototypeOf(this);Zr({target:e,type:"iterate"});let r=t.entries.apply(e,arguments);return Ab(r,!0)},[Symbol.iterator](){let e=Rt.get(this),t=Reflect.getPrototypeOf(this);Zr({target:e,type:"iterate"});let r=t[Symbol.iterator].apply(e,arguments);return Ab(r,e instanceof Map)},get size(){let e=Rt.get(this),t=Reflect.getPrototypeOf(this);return Zr({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Np={get(e,t,r){return e=JF.call(jS,t)?jS:e,Reflect.get(e,t,r)}},VS=typeof window=="object"?window:Function("return this")(),XS=new Map([[Map,Np],[Set,Np],[WeakMap,Np],[WeakSet,Np],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);JS=Object.prototype.hasOwnProperty,eB=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));sB={get:tB,has:rB,ownKeys:nB,set:oB,deleteProperty:iB}});function Lb(e){let t=!0,r=YS(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{r()}catch(n){throw Tb(r),n}return()=>Tb(r)}var ls,Oc=k(()=>{ZS();ls=zp});var QS=k(()=>{});var e2=k(()=>{QS()});var X,Re=k(()=>{T();Oc();T();Pt();e2();X=class extends J{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Lb(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,r=Lb(n=>{if(!n){r(),this._dispose===r&&(this._dispose=null),this.updateComplete.then(()=>this.requestUpdate());return}t=this._render()});return this._dispose=r,t}),this._disposers.push(()=>this._dispose&&this._dispose())}disconnectedCallback(){for(super.disconnectedCallback();this._disposers.length>0;)this._disposers.pop()()}}});function lo(e,t){let r=URL.createObjectURL(e),n=document.createElement("span");n.style.display="none",ae(d`<a href="${r}" download="${t}"></a>`,n),document.body.append(n),n.firstElementChild.click(),n.remove(),URL.revokeObjectURL(r)}function Ta(e){return new Error("Another dialog is already open. Close it and try again.",{cause:e})}var Ye,N,t2,mr=k(()=>{"use strict";T();Ye=document.querySelector("#drop-zone"),N=document.querySelector("#report"),t2=document.querySelector("app-sidebar")});function xe(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return r2.encode(e)}function cs(e){if(typeof e!="string")throw new TypeError(`utf8ByteLength expects a string, got ${typeof e}`);if(/[\u0100-\uFFFF]/.test(e))return r2.encode(e).byteLength;let t=/[\u0080-\u00FF]/gu,r=e.length;for(;t.test(e);){let n=t.lastIndex-1;for(let o=0;n<e.length&&o<cB;n++)e.codePointAt(n)>127?(r++,o=0):o++;t.lastIndex=n}return r}function at(e){if(!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer))throw new TypeError(`decodeUtf8 expects a BufferSource, got ${e===null?"null":typeof e}`);return lB.decode(e)}var r2,lB,cB,Dt=k(()=>{"use strict";r2=new TextEncoder,lB=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});cB=2});function Nc(){return!(typeof window>"u"||typeof PublicKeyCredential>"u"||typeof navigator>"u"||!navigator.credentials)}async function n2(){if(typeof PublicKeyCredential>"u")return!1;let e=PublicKeyCredential.getClientCapabilities;if(typeof e!="function")return null;try{let t=await e.call(PublicKeyCredential);if(!t||typeof t!="object")return null;let r=t["extension:prf"],n=t.prf;return r===!0||n===!0?!0:r===!1||n===!1?!1:null}catch{return null}}function Up(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}async function Fb(e){if(e.length<32)throw new Error(`PRF output too short (${e.length} bytes; need \u2265 32)`);let t=await crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits"]),r=await crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-256",salt:new Uint8Array,info:xe(uB)},t,dB*8);return new Uint8Array(r)}function Bb(e){return crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!1,["encrypt","decrypt"])}async function Xo(e,t,r){let n=Up(La),o=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:n,additionalData:r},e,t)),i=new Uint8Array(Qr.length+La+o.length);return i.set(Qr,0),i.set(n,Qr.length),i.set(o,Qr.length+La),i}async function ds(e,t,r){if(!zt(t))throw new Error("passkey: missing envelope magic");if(t.length<Qr.length+La+16)throw new Error("passkey: envelope too short");let n=t.subarray(Qr.length,Qr.length+La),o=t.subarray(Qr.length+La);return new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:r},e,o))}function zt(e){if(e.length<Qr.length)return!1;for(let t=0;t<Qr.length;t++)if(e[t]!==Qr[t])return!1;return!0}async function o2(e){if(!Nc())throw new Error("passkey: not supported in this environment");let t=Up(32),r=Up(32),n=await navigator.credentials.create({publicKey:{challenge:t,rp:{name:e.rpName,id:e.rpId},user:{id:e.userId,name:e.userName,displayName:e.userName},pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],authenticatorSelection:{residentKey:"required",userVerification:"required"},extensions:{prf:{eval:{first:r}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(n instanceof PublicKeyCredential))throw new Error("passkey: registration returned no credential");let o=new Uint8Array(n.rawId).toBase64({alphabet:"base64url",omitPadding:!0}),i=n.getClientExtensionResults().prf,s=i?.results?.first?new Uint8Array(i.results.first):null;return{credentialId:o,prfSalt:r.toBase64({alphabet:"base64url",omitPadding:!0}),prfOutput:s}}async function Ob(e){if(!Nc())throw new Error("passkey: not supported in this environment");let t=Up(32),r=Uint8Array.fromBase64(e.credentialId,{alphabet:"base64url"}),n=Uint8Array.fromBase64(e.prfSalt,{alphabet:"base64url"}),o=await navigator.credentials.get({publicKey:{challenge:t,rpId:e.rpId,allowCredentials:[{type:"public-key",id:r}],userVerification:"required",extensions:{prf:{eval:{first:n}}},timeout:e.timeoutMs??12e4},...e.signal?{signal:e.signal}:{}});if(!(o instanceof PublicKeyCredential))throw new Error("passkey: assertion returned no credential");let s=o.getClientExtensionResults().prf?.results?.first;if(!s)throw new Error("passkey: authenticator did not return PRF output (extension unsupported)");return new Uint8Array(s)}var Qr,La,dB,uB,Nb=k(()=>{"use strict";Dt();Qr=new Uint8Array([68,86,69,49]),La=12,dB=32,uB="deepview-passkey.v1.content-key"});function zb(){return Dc>0}function i2(){return Pb>0}function us(){try{let e=localStorage.getItem(zc);if(!e)return null;let t=JSON.parse(e);return t&&typeof t=="object"&&t.enabled===!0&&typeof t.credentialId=="string"&&t.credentialId.length>0&&typeof t.prfSalt=="string"&&t.prfSalt.length>0&&typeof t.userId=="string"&&t.userId.length>0?t:null}catch{return null}}function s2(e){localStorage.setItem(zc,JSON.stringify(e))}function mB(){localStorage.removeItem(zc)}function gB(){try{let t=localStorage.getItem(Fa);if(t){let r=Uint8Array.fromBase64(t,{alphabet:"base64url"});if(r.length===16)return r}}catch{}let e=new Uint8Array(16);crypto.getRandomValues(e);try{localStorage.setItem(Fa,e.toBase64({alphabet:"base64url",omitPadding:!0}))}catch{}return e}function Vp(){return typeof location>"u"?"":location.hostname}function me(){return us()!==null}function tr(){return ze!==null}function _n(){return!(!Nc()||typeof navigator>"u"||!navigator.locks?.request||!Vp())}function a2(){return xn}function Uc(){if(us()!==null)return!1;try{return localStorage.getItem(jp)==="1"?!1:localStorage.getItem(Fa)!==null}catch{return!1}}function pt(){return ze}function Hc(){return xe(pB+(xn??""))}function Wp(e){if(typeof e!="string")throw new TypeError("passkey vault: OPFS AAD requires a filename string");return xe(fB+(xn??"")+"|"+e)}function Gp(e){if(typeof e!="string")throw new TypeError("passkey vault: bundle AAD requires a slot string");return xe(hB+(xn??"")+"|"+e)}function tt(e){return Db.add(e),()=>Db.delete(e)}function Ba(){for(let e of Db)try{e()}catch(t){console.warn("passkey vault listener:",t)}}async function ps({signal:e}={}){let t=us();if(!t)return!1;let r;try{r=await Ob({credentialId:t.credentialId,prfSalt:t.prfSalt,rpId:t.rpId??Vp(),...e?{signal:e}:{}})}catch(o){if(o&&o.name==="NotAllowedError"||o&&o.name==="AbortError")return!1;throw o&&o.message?.includes("PRF")?Pc(o):o}if(!r||r.length<32)throw Pc();let n=await Fb(r);return r.fill(0),navigator.locks.request($n,async()=>{let o=us();if(!o||o.credentialId!==t.credentialId)throw n.fill(0),new Error("passkey: vault state changed during unlock (another tab wiped or re-enabled it). Reload this page and try again.");return ze=await Bb(n),n.fill(0),xn=o.userId,Jo=o.credentialId,Ba(),!0})}function Pc(e){let t=new Error("Your browser or authenticator doesn't support passkey-derived encryption keys (the WebAuthn PRF extension). Try Chrome 116+, Safari 18+, or Firefox 130+ on a device with a platform authenticator (TouchID / Windows Hello).");return e&&(t.cause=e),t}function Ub({migrate:e,userName:t,rpName:r,signal:n,acknowledgeOrphan:o}){if(!Nc())throw new Error("passkey: WebAuthn unavailable in this environment");if(Uc()&&!o)throw new Error("passkey: a previous vault exists on this device with no metadata. Any data encrypted under the old passkey will be unreadable after a new setup. Call enableEncryption({acknowledgeOrphan: true}) to proceed, or wipeAllVaultData() to start clean first.");let i=Vp();return navigator.locks.request($n,async()=>{if(me())throw new Error("passkey: encryption is already enabled");if(await n2()===!1)throw Pc();let a=gB(),c=await o2({userName:t||"DeepView user",userId:a,rpName:r||"DeepView",rpId:i,...n?{signal:n}:{}}),u=c.prfOutput;if(!u)try{u=await Ob({credentialId:c.credentialId,prfSalt:c.prfSalt,rpId:i,...n?{signal:n}:{}})}catch(b){let v=a.toBase64({alphabet:"base64url",omitPadding:!0});await Hp({credentialId:c.credentialId,rpId:i,userId:v}).catch(()=>{});try{localStorage.removeItem(Fa)}catch{}throw b&&b.message?.includes("PRF")?Pc(b):b}if(!u||u.length<32){let b=a.toBase64({alphabet:"base64url",omitPadding:!0});await Hp({credentialId:c.credentialId,rpId:i,userId:b}).catch(()=>{});try{localStorage.removeItem(Fa)}catch{}throw Pc()}let p=await Fb(u);u.fill(0);let f=await Bb(p);p.fill(0);let h=a.toBase64({alphabet:"base64url",omitPadding:!0}),g={enabled:!0,credentialId:c.credentialId,prfSalt:c.prfSalt,userId:h,rpId:i,createdAt:Date.now()};ze=f,xn=h,Jo=c.credentialId,s2(g),typeof e=="function"&&await e({seal:(v,x)=>Xo(f,v,x)});try{localStorage.removeItem(jp)}catch{}return Ba(),!0})}async function Hb({migrate:e}){if(!me())return{disabled:!1,signalAttempted:!1};if(!tr())throw new Error("passkey: must unlock before disabling encryption");Dc+=1;try{return await navigator.locks.request($n,async()=>{let t=us();if(!t)return{disabled:!1,signalAttempted:!1};let r=ze;if(!r)return{disabled:!1,signalAttempted:!1};if(mB(),ze=null,Jo=null,typeof e=="function"){let o=(i,s)=>ds(r,i,s);try{await e({open:o})}catch(i){throw s2(t),ze=r,Jo=t.credentialId,Ba(),i}}xn=null;try{localStorage.setItem(jp,"1")}catch{}let n=await Hp(t).catch(()=>!1);return Ba(),{disabled:!0,signalAttempted:n}})}finally{Dc-=1}}async function Hp({credentialId:e,rpId:t,userId:r}){if(typeof PublicKeyCredential>"u"||!t)return!1;let n=PublicKeyCredential,o=!1;if(typeof n.signalUnknownCredential=="function"){o=!0;try{await n.signalUnknownCredential({rpId:t,credentialId:e})}catch{}}if(typeof n.signalAllAcceptedCredentials=="function"&&r){o=!0;try{await n.signalAllAcceptedCredentials({rpId:t,userId:r,allAcceptedCredentialIds:[]})}catch{}}return o}async function bB(e,t){try{return await e.removeEntry(t,{recursive:!0}),null}catch(r){return r?.name==="NotFoundError"?null:`${t}: ${r?.message??String(r)}`}}async function vB(e){let t=[];if(typeof navigator>"u"||!navigator.storage?.getDirectory)return t;let r;try{r=await navigator.storage.getDirectory()}catch(n){return t.push(`storage root: ${n?.message??String(n)}`),t}for(let n of e){let o=await bB(r,n);o&&t.push(o)}return t}async function jc({refuseIfEnabled:e=!1}={}){Dc+=1,Pb+=1;try{return await navigator.locks.request($n,async()=>{if(e&&me())throw new Error("passkey: encryption was just enabled in another tab. Reload this page to unlock instead of wiping.");await u2();let t=us();if(t)try{await Hp({credentialId:t.credentialId,rpId:t.rpId??Vp(),userId:t.userId})}catch{}try{localStorage.removeItem(zc)}catch{}try{localStorage.removeItem(Fa)}catch{}try{localStorage.removeItem(jp)}catch{}for(let n of["deepview.workspaces","deepview.sync.sessions","deepview.sync.userEnabled","deepview.repoUrls","deepview.fileCounts","deepview.workspaceApp","deepview.lastFile","deepview.scan.access","deepview.triage","deepview.triage.pending","deepview.passkey.firstImportPrompted","deepview.viewMode"])try{localStorage.removeItem(n)}catch{}try{let n=[];for(let o=0;o<localStorage.length;o+=1){let i=localStorage.key(o);i&&i.startsWith("deepview.report:")&&n.push(i)}for(let o of n)try{localStorage.removeItem(o)}catch{}}catch{}ze=null,xn=null,Jo=null,Ba();let r=await vB(["deepview-reports","deepview-bundles"]);if(r.length>0)throw new Error(`passkey: wipe partially succeeded \u2014 localStorage cleared but the following OPFS paths could not be removed: ${r.join("; ")}. Open DevTools \u2192 Application \u2192 Storage \u2192 Origin Private File System to inspect, or use the browser's site-data clear tool to finish.`)})}finally{Dc-=1,Pb-=1}}function l2(e){return ze?Xo(ze,e,Hc()):Promise.reject(new Error("passkey: vault locked, cannot seal triage"))}function c2(e){return ze?ds(ze,e,Hc()):Promise.reject(new Error("passkey: vault locked, cannot open triage"))}function Kp(e,t){return ze?Xo(ze,e,Wp(t)):Promise.reject(new Error("passkey: vault locked, cannot seal OPFS file"))}function d2(e,t){return ze?ds(ze,e,Wp(t)):Promise.reject(new Error("passkey: vault locked, cannot open OPFS file"))}function qp(e,t){return ze?Xo(ze,e,Gp(t)):Promise.reject(new Error("passkey: vault locked, cannot seal bundle"))}function Yp(e,t){return ze?ds(ze,e,Gp(t)):Promise.reject(new Error("passkey: vault locked, cannot open bundle"))}var zc,Fa,jp,$n,pB,fB,hB,ze,xn,Jo,Dc,Pb,Db,Oa=k(()=>{"use strict";Nb();Dt();en();zc="deepview.passkey.v1",Fa="deepview.passkey.userId",jp="deepview.passkey.cleanDisable",$n="deepview.passkey.v1.write",pB="deepview.triage.v1|",fB="deepview.opfs.v1|",hB="deepview.bundle.v1|",ze=null,xn=null,Jo=null,Dc=0;Pb=0;Db=new Set;typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key!==zc)return;let t=us();(!t&&ze||t&&ze&&t.credentialId!==Jo)&&(ze=null,xn=null,Jo=null),Ba()})});function Sn(e){let t=()=>e();return Xp.add(t),Jp&&queueMicrotask(()=>{if(Xp.has(t))try{t()}catch(r){console.warn("secure-storage after-hydrate listener:",r)}}),()=>Xp.delete(t)}function yB(){for(let e of Xp)try{e()}catch(t){console.warn("secure-storage after-hydrate listener:",t)}}function Zp(e){let t=a2()??"";return xe(`deepview.secure.v1|${t}|${e}`)}function jb(e){try{let t=Uint8Array.fromBase64(e);if(zt(t))return t}catch{}return null}function Le(e){return At.get(e)??null}async function lt(e,t){if(typeof t!="string")throw new TypeError("secure-storage: value must be a string");if(me()&&!pt())throw new Error(`secure-storage: vault locked, cannot save "${e}"`);if(i2())throw new Error(`secure-storage: wipe in progress, cannot save "${e}"`);let r=At.has(e),n=At.get(e);At.set(e,t),gr.set(e,t);let o=co.get(e)??Promise.resolve(),i=()=>{gr.get(e)===t&&gr.delete(e)},s=o.catch(()=>{}).then(()=>wB(e,t)).then(()=>i(),a=>{throw i(),At.get(e)===t&&(r?At.set(e,n):At.delete(e)),a});co.set(e,s.catch(()=>{})),await s}async function Zo(e){let t=Symbol("secure-storage:removed");At.delete(e),gr.set(e,t);let r=co.get(e)??Promise.resolve(),n=()=>{try{localStorage.removeItem(e)}catch{}gr.get(e)===t&&(gr.delete(e),At.delete(e))},o=r.catch(()=>{}).then(()=>n());co.set(e,o.catch(()=>{})),await o}async function wB(e,t){let r=pt();if(r){let n=await Xo(r,xe(t),Zp(e));localStorage.setItem(e,n.toBase64())}else localStorage.setItem(e,t)}async function Cn(){Jp||tt(()=>{Cn().catch(e=>console.warn("secure-storage rehydrate:",e))}),Jp=!0;for(let e of[...At.keys()])gr.has(e)||At.delete(e);await p2(Na,!0)}async function Vb(e){if(!Na.includes(e))throw new Error(`secure-storage: unknown secure key "${e}"`);return gr.has(e)||At.delete(e),(await p2([e],!1)).get(e)??null}async function p2(e,t){let r=pt(),n=[],o=new Map;for(let i of e){if(gr.has(i)){o.set(i,Le(i));continue}let s=localStorage.getItem(i);if(s===null)continue;let a=jb(s);if(a){if(!r)continue;try{let c=await ds(r,a,Zp(i));if(gr.has(i)){o.set(i,Le(i));continue}let u=at(c);At.set(i,u),o.set(i,u)}catch(c){console.warn(`secure-storage: decrypt failed for "${i}":`,c)}}else At.set(i,s),o.set(i,s),r&&me()&&n.push([i,s])}return t&&yB(),n.length>0&&queueMicrotask(()=>{for(let[i,s]of n)At.get(i)===s&<(i,s).catch(a=>{console.warn(`secure-storage: self-heal failed for "${i}":`,a)})}),o}async function f2(e,t){let r=co.get(e)??Promise.resolve(),n=async()=>{if(gr.has(e))return;let i=localStorage.getItem(e);if(i===null)return;let s=await t(i);s!==null&&(gr.has(e)||(localStorage.setItem(e,s.storageValue),At.set(e,s.cacheValue)))},o=r.catch(()=>{}).then(n);co.set(e,o.catch(()=>{})),await o}async function Wb({seal:e}){for(let t of Na)await f2(t,async r=>{if(jb(r))return null;let n=pt();return n?{storageValue:(await Xo(n,xe(r),Zp(t))).toBase64(),cacheValue:r}:null})}async function Gb({open:e}){for(let t of Na)await f2(t,async r=>{let n=jb(r);if(!n)return null;let o=await e(n,Zp(t)),i=at(o);return{storageValue:i,cacheValue:i}})}function Pa(e,t){return Na.includes(e)?navigator.locks.request(kB+e,async()=>{let r=co.get(e);r&&await r.catch(()=>{}),await Cn();let n=Le(e),o=await t(n);if(!(o==null||o===n)){if(typeof o!="string")throw new TypeError(`secure-storage: mutate updater for "${e}" must return a string`);await lt(e,o)}}):Promise.reject(new Error(`secure-storage: mutate() called with non-secure key "${e}"`))}async function u2(){await Promise.allSettled([...co.values()]),gr.clear(),co.clear()}var Na,At,Jp,co,gr,Xp,kB,en=k(()=>{"use strict";Dt();Nb();Oa();Na=Object.freeze(["deepview.workspaces","deepview.sync.sessions","deepview.sync.userEnabled","deepview.sync.password","deepview.repoUrls","deepview.fileCounts","deepview.workspaceApp","deepview.lastFile","deepview.scan.access"]),At=new Map,Jp=!1,co=new Map,gr=new Map,Xp=new Set;kB="deepview.secure.v1.mutate:";typeof window<"u"&&window.addEventListener("storage",e=>{!Jp||!e.key||!Na.includes(e.key)||Cn().catch(()=>{})})});var Kb,h2=k(()=>{"use strict";Kb="/api/config"});function Vc(e){if(typeof e!="string"||!e.trim())return null;try{let t=new URL(e);return!["http:","https:"].includes(t.protocol)||t.username||t.password||t.search||t.hash?null:(t.pathname=t.pathname.replace(/\/+$/u,"")+"/",t.href)}catch{return null}}var m2,qb=k(()=>{"use strict";m2="http://127.0.0.1:3123/"});function Wc(){try{return localStorage.getItem(Yb)==="1"}catch{return!1}}function Qp(){try{localStorage.setItem(Yb,"1")}catch{}}function tn(e){return e==="managed+e2e"||e==="e2e+managed"}function Da(e,t){return(e==="managed"||tn(e))&&/^\/(?:team|manage)(?:\/|$)/u.test(t)}function Xb(e,t=null){return t&&(tn(e)||e===t)?t:e==="managed"||e==="managed+e2e"?"managed":"e2e"}function Jb(e,t){return e&&tn(e.mode)&&t.mode==="e2e"?{...e,githubNewIssueLabels:t.githubNewIssueLabels??"",...t.deepviewScanServer?{deepviewScanServer:t.deepviewScanServer}:{}}:t}function Zb(e){if(e==null||typeof e!="object")return null;let t=e.mode;if(t!=="e2e"&&t!=="managed"&&t!=="managed+e2e"&&t!=="e2e+managed")return null;let r=null,n=e.managed;if(n!=null&&typeof n=="object"){let s=n.loginPath,a=n.cookieName;typeof s=="string"&&typeof a=="string"&&(r={loginPath:s,cookieName:a},n.allowShare===!0&&(r.allowShare=!0))}let o=t==="managed"?null:Vc(e.deepviewScanServer),i=e.githubNewIssueLabels;return{mode:t,managed:r,...o?{deepviewScanServer:o}:{},...typeof i=="string"&&i.length<=4096?{githubNewIssueLabels:i}:{}}}async function ef(){try{let e=await fetch(Kb,{credentials:"same-origin",cache:"no-store",headers:{accept:"application/json"}});return e.status===404?"standalone":e.ok?Zb(await e.json()):null}catch{return null}}async function Qb(e,t=3e3){let r;try{return await Promise.race([e,new Promise(n=>{r=setTimeout(()=>n(null),t)})])}catch{return null}finally{clearTimeout(r)}}function br(){try{let e=localStorage.getItem(g2);if(e==null)return null;let t=Zb(JSON.parse(e));return t?{mode:t.mode,managed:t.managed}:null}catch{return null}}function ev(e){try{localStorage.setItem(g2,JSON.stringify({mode:e.mode,managed:e.managed})),localStorage.removeItem(Yb)}catch{}}var g2,Yb,tv=k(()=>{"use strict";h2();qb();g2="deepview.sync.serverInfo",Yb="deepview.sync.standaloneProbe"});function _B(){try{let e=localStorage.getItem(tf);return e!==null&&$B.has(e)?e:null}catch{return null}}function SB(){try{let e=localStorage.getItem(nf);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function Yc(e){if(!Number.isFinite(e))return qc;let t=Math.round(e*10)/10;return Math.min(Math.max(t,of),sf)}function CB(){try{let e=localStorage.getItem(rf);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?Yc(t):null}catch{return null}}function af(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function lf(){return af(Le(Kc))}function Ut(e){return e?lf()[e]??"":""}function y2(e){return rv.add(e),()=>{rv.delete(e)}}function w2(e){for(let t of rv)try{t(e)}catch(r){console.warn("repo-url listener:",r)}}function rn(e,t){if(C()||!e)return;let r=lf();t?r[e]=t:delete r[e],lt(Kc,JSON.stringify(r)).catch(n=>console.warn("saveRepoUrlFor:",n)),Pa(Kc,n=>{let o=af(n);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(n=>console.warn("saveRepoUrlFor cross-tab merge:",n)),w2(e)}async function k2(e,t){await Pa(Kc,r=>{let n=af(r),o=t==="replace"?{...e}:t==="prefer-imported"?{...n,...e}:{...e,...n};return JSON.stringify(o)}),iv()}async function cf(e){if(!e||typeof e!="object")return[];let t=[];if(await Pa(Kc,r=>{let n=af(r);t=[];for(let[o,i]of Object.entries(e))!o||typeof i!="string"||!i||n[o]||(n[o]=i,t.push(o));return t.length===0?r:JSON.stringify(n)}),t.length===0)return t;iv();for(let r of t)w2(r);return t}async function nv(e,t){return!e||!t?!1:(await cf({[e]:t})).length>0}function C(){return l.serverMode==="managed"&&!l.localMode}function uo(e){l.localMode=!!e}function df(e,t=globalThis.location?.pathname??""){let r=Da(e,t);r&&(l.serverModeSelection="managed"),l.serverModeConfig=e,l.serverMode=Xb(e,l.serverModeSelection),l.serverModeSelection!==l.serverMode&&(l.serverModeSelection=null),(r||l.serverMode==="e2e"||tn(e))&&uo(!1)}function ov(){return tn(l.serverModeConfig)?(l.serverModeSelection=l.serverMode==="managed"?"e2e":"managed",l.serverMode=l.serverModeSelection,uo(!1),!0):l.serverMode!=="managed"?!1:(uo(!l.localMode),!0)}function En(){return l.serverMode==="standalone"&&l.localMode?"local":l.serverMode!=="managed"?l.serverMode:l.localMode?"local":"managed"}function iv(){C()||l.repoEditing||l.currentFile&&(l.repoUrl=Ut(l.currentFile))}var v2,tf,Kc,rf,nf,$B,qc,of,sf,rv,Gc,b2,l,rr=k(()=>{"use strict";Oc();en();tv();v2="deepview.viewMode",tf="deepview.severityMode",Kc="deepview.repoUrls",rf="deepview.focusSplit",nf="deepview.kanbanDetailFullscreen",$B=new Set(["corrected","original"]),qc=50,of=20,sf=80;try{localStorage.removeItem(v2)}catch{}rv=new Set;Gc=br(),b2=Da(Gc?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,l=ls({reports:[],workspaceMerges:[],currentFile:null,currentWorkspace:null,currentManagedTeam:null,currentManagedReport:null,currentReportWorkspace:null,currentView:"findings",currentLinks:null,bundles:[],storedFiles:[],selectedBundle:null,selectedBundleWorkspace:null,scanSelection:null,bundleCreationRepoId:null,bundleDetails:null,bundleDetailsTab:"overview",selectedPackage:null,selectedPackageVersion:null,packageDetailsTab:"overview",packageSlideTriage:null,packageSlideTransient:!1,packagesSearchQuery:"",packagesSortBy:"findings-desc",expandedPackages:new Set,selectedRepository:null,repositoryDetailsTab:"overview",repositorySlideTriage:null,repositorySlideTransient:!1,repositoriesSearchQuery:"",repositoriesSortBy:"findings-desc",bundleSourceFile:null,bundleSourceFindingIdx:null,bundleOverviewFilesSort:"name",bundleOverviewPackagesSort:"size",bundleCodeHistory:null,bundleCodeSearchMode:"files",bundleCodeSearchQuery:"",bundleSearchQuery:"",bundleSearchRegex:!1,bundleSearchCase:!1,bundleSearchContext:!0,filterSeverities:new Set,filterColors:new Set,filterSources:new Set,filterAnalyzer:"",filterModel:"",filterRepo:"",filterRevalidate:"",filterPartial:"",showRevalidation:!0,revalidationDetailed:!1,upstreamOnly:!1,revalidateConflicts:new Map,codePreviews:new Set,filterConfMin:0,filterConfMax:10,filterInclude:"",filterIncludeNegate:!1,filterComment:"",filterFix:"",filterFlagged:"",filterDuplicates:"",filterCrossContext:"",filterAppStacked:"",filterSecurity:"",repoUrl:"",repoEditing:!1,sortBy:"severity",viewMode:"kanban",severityMode:_B()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:SB()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:CB()??qc,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:Xb(Gc?.mode??"e2e",b2),serverModeConfig:Gc?.mode??null,serverModeSelection:b2,deepviewScanServer:null,githubNewIssueLabels:Gc?.githubNewIssueLabels??"",localMode:!1,managed:Gc?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map});Sn(()=>{iv()})});var Mn,uf=k(()=>{"use strict";Mn=new Set(["overview","graph","treemap","compare","advisories","issues","code","search","terminal"])});function MB(e){for(let t=0;t<e.length;t++){let r=e.codePointAt(t);if(r<32||r===127)return!0}return!1}function RB(e){return typeof e=="string"&&e.length>0&&e.length<=Xc&&!MB(e)}function Ht(e){return RB(e)&&!EB.test(e)}var EB,Xc,pf=k(()=>{"use strict";EB=/^\d+$/u;Xc=512});function x2(e){if(!Ht(e)||e==="."||e==="..")return null;try{return`/finding/${encodeURIComponent(e)}`}catch{return null}}function vr(e){if(!e)return null;if(e.view==="home")return"/";if(e.view==="bundles"){if(!/^[A-Za-z0-9_-]+$/u.test(e.bundleSlug??"")||e.teamSlug!=null&&!/^[A-Za-z0-9_-]+$/u.test(e.teamSlug))return null;let n=e.bundleTab??"overview";return Mn.has(n)?`${e.teamSlug?`/team/${e.teamSlug}`:"/manage"}/bundle/${e.bundleSlug}${n==="overview"?"":`/${n}`}`:null}if(Object.hasOwn(fs,e.view)){let n=fs[e.view];return e.view==="manage-bundles"&&Number.isSafeInteger(e.createRepoId)&&e.createRepoId>0?`${n}?createRepo=${e.createRepoId}`:e.view==="manage-scans"&&e.bundleId?`${n}?bundle=${encodeURIComponent(e.bundleId)}`:e.view==="manage-history"&&e.actor?`${n}?actor=${encodeURIComponent(e.actor)}`:n}if(!["findings","files"].includes(e.view)||!e.teamSlug||[e.teamSlug,e.reportSlug].some(n=>n!=null&&!/^[A-Za-z0-9_-]+$/u.test(n)))return null;let t=`/team/${encodeURIComponent(e.teamSlug)}`,r=e.reportSlug?`/report/${encodeURIComponent(e.reportSlug)}`:"";if(e.finding){let n=x2(e.finding.id);return e.view==="findings"&&n?`${t}${r}${n}`:null}return`${t}${r}${e.view==="files"?"/files":""}`}function Jc(e){let t=e.pathname.replace(/\/$/u,"")||"/";if(t==="/"||t==="/index.html")return{view:"home"};let r=Object.keys(fs).find(i=>fs[i]===t);if(r){let i=Number(e.searchParams.get("createRepo"));return{view:r,...r==="manage-bundles"&&Number.isSafeInteger(i)&&i>0?{createRepoId:i}:{},...r==="manage-history"&&e.searchParams.get("actor")?{actor:e.searchParams.get("actor")}:{},...r==="manage-scans"&&e.searchParams.get("bundle")?{bundleId:e.searchParams.get("bundle")}:{}}}let n=/^(?:\/team\/([A-Za-z0-9_-]+)|\/manage)\/bundle\/([A-Za-z0-9_-]+)(?:\/([a-z]+))?$/u.exec(t);if(n){let i=n[3]??"overview";return Mn.has(i)?{view:"bundles",teamSlug:n[1]??null,bundleSlug:n[2],bundleTab:i}:null}let o=/^\/team\/([^/]+)(?:\/report\/([^/]+))?(?:\/(files)|\/finding\/([^/]+))?$/u.exec(t);if(!o)return null;try{let i=decodeURIComponent(o[1]),s=o[2]?decodeURIComponent(o[2]):null;if([i,s].some(c=>c!=null&&!/^[A-Za-z0-9_-]+$/u.test(c))||o[4]?.length>Xc*9)return null;let a=o[4]?decodeURIComponent(o[4]):null;return a!=null&&!x2(a)?null:{view:o[3]?"files":"findings",teamSlug:i,reportSlug:s,...a==null?{}:{finding:{id:a}}}}catch{return null}}function ff(e,t,r=[]){if(e.view==="bundles"){let{teamSlug:f,bundleSlug:h,...g}=e,b=f==null?[]:t.filter($=>$.slug===f);if(f!=null&&b.length!==1)return null;let v=b[0],x=f==null?r:t.flatMap($=>$.bundles??[]),w=new Set(x.filter($=>$.slug===h).map($=>$.id)),y=(v?.bundles??r).find($=>$.slug===h);return h&&y&&w.size===1?{...g,teamId:v?.id??null,bundleId:y.id}:null}if(!["findings","files"].includes(e.view))return e;let{teamSlug:n,reportSlug:o,...i}=e,s=t.filter(f=>f.slug===n);if(!n||s.length!==1)return null;let a=s[0];if(o==null)return{...i,teamId:a.id,reportId:null};let c=t.flatMap(f=>f.reports??[]).filter(f=>f.slug===o),u=new Set(c.map(f=>f.id)),p=(a.reports??[]).find(f=>f.slug===o);return p&&u.size===1?{...i,teamId:a.id,reportId:p.id}:null}function wt(e,t,r=[]){if(e.view==="bundles"){let{teamId:u,bundleId:p,...f}=e,h=t.find(v=>v.id===u);if(u!=null&&!h?.slug)return null;let g=(h?.bundles??r).find(v=>v.id===p);if(!g?.slug)return null;let b={...f,teamSlug:h?.slug??null,bundleSlug:g.slug};return ff(b,t,r)?b:null}if(!["findings","files"].includes(e.view))return e;let{teamId:n,reportId:o,...i}=e,s=t.find(u=>u.id===n),a=o==null?null:s?.reports?.find(u=>u.id===o);if(!s?.slug||o!=null&&!a?.slug)return null;let c={...i,teamSlug:s.slug,reportSlug:a?.slug??null};return ff(c,t)?c:null}var fs,po=k(()=>{"use strict";uf();pf();fs=Object.freeze({manage:"/manage","manage-bundles":"/manage/bundle","manage-scans":"/manage/scans","manage-reports":"/manage/report","manage-repos":"/manage/repositories","admin-users":"/manage/users","manage-teams":"/manage/team","manage-import":"/manage/import","manage-links":"/manage/links","manage-history":"/manage/history"})});function _2(e,t){return`${e}\0${t}`}function S2(e){return typeof e=="string"&&IB.test(e)}async function It(e,t){let r=LB[e];if(!r||typeof t!="string"||!t)return null;let n=_2(e,t),o=sv.get(n);if(o!==void 0)return o;let i;try{let s=await crypto.subtle.digest("SHA-256",xe(r+t));i=new Uint8Array(s).slice(0,AB).toBase64({alphabet:"base64url",omitPadding:!0})}catch{return null}return sv.set(n,i),i}function hf(e,t){return typeof t!="string"||!t?null:sv.get(_2(e,t))??null}function FB(e,t){let r=[];for(let[n,o]of[["report",e],["workspace",t]]){if(o==null||o===""){r.push(Zc);continue}if(!S2(o))throw new TypeError(`encodeFindingRef: ${n} must be a link hint token, not a name`);r.push(o)}return r.every(n=>n===Zc)?null:r[0]===Zc?`w${r[1]}`:r.join("")}function BB(e){let t=[e.slice(0,$2),e.slice($2)].map(r=>r===Zc?null:r);return{report:t[0],workspace:t[1]}}function Rn({id:e,report:t,workspace:r}={}){if(!Ht(e))throw new TypeError("encodeFindingRef: a persistent finding id is required");let n=[`finding=${encodeURIComponent(e)}`],o=FB(t,r);return o&&n.push(`v=${o}`),n.join("&")}function av(e,t){let r=Rn(e);return typeof location>"u"?`${t??""}#${r}`:`${location.origin}${t??location.pathname}#${r}`}function Qo(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let r=t.replace(/^#/u,"");if(!r)return null;let n={id:null,report:null,workspace:null};for(let o of r.split("&")){let i=o.indexOf("=");if(i<0)continue;let s=o.slice(0,i),a=o.slice(i+1);if(!a)continue;if(s==="v"){if(a.length===5&&a[0]==="w"&&S2(a.slice(1))){let u=a.slice(1);Object.assign(n,{report:null,workspace:u===Zc?null:u});continue}if(!TB.test(a))continue;Object.assign(n,BB(a));continue}if(s!=="finding"||a.length>Xc*3)continue;let c;try{c=decodeURIComponent(a)}catch{continue}Ht(c)&&(n.id=c)}return n.id?n:null}function C2(e,{managed:t=!1}={}){if(typeof location>"u")return null;let r;try{r=new URL(e)}catch{return null}if(r.href!==e||r.protocol!==location.protocol||r.host!==location.host||r.username||r.password)return null;let n=Jc(r);if(n?.finding)return{id:n.finding.id,fragment:Rn(n.finding),path:vr(n)};if(t&&n?.view!=="home"&&!/\/(?:index|view)\.html$/u.test(r.pathname))return null;let o=Qo(r.hash);if(!o)return null;let i=Rn(o);return{id:o.id,fragment:i,path:`/#${i}`}}var AB,$2,IB,TB,Zc,LB,sv,za=k(()=>{"use strict";Dt();po();pf();pf();AB=3,$2=4,IB=/^[\w-]{4}$/u,TB=/^[\w-]{8}$/u,Zc="AAAA",LB={report:`deepview/finding-link/report/v1
|
|
4
|
+
`,workspace:`deepview/finding-link/workspace/v1
|
|
5
|
+
`},sv=new Map});function OB(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let{id:t}=e;return typeof t=="string"&&t.length>0?t:null}function Ir(e){let t;try{t=JSON.parse(e)}catch{return null}if(!Array.isArray(t)||t.length===0)return null;let r=[],n=0;for(let o of t){if(!Array.isArray(o))return null;let i=new Set;for(let s of o){let a=OB(s);if(a===null)return null;Ht(a)?i.add(a):n++}i.size>1&&r.push([...i])}return{groups:r,skipped:n}}function mf(e){let t=new Set;for(let r of e)for(let n of r)t.add(n);return t.size}function gf(e,t){for(let r of e)for(let n of r){let o=t.get(n);o||t.set(n,o=new Set);for(let i of r)i!==n&&o.add(i)}return t}var Xe,hs=k(()=>{"use strict";za();Xe="links"});function ft(e){let t=[],r=-1,n="",o=0,i=0,s=0;for(let a of e.split(`
|
|
6
|
+
`)){let c=s;s+=a.length+1;let u=NB.exec(a);if(r!==-1){u&&u[2]===n&&u[1].length<=o+3&&(t.push([r,c+a.length]),r=-1);continue}if(u&&u[1].length<=i+3){r=c,n=u[2],o=u[1].length;continue}if(!a.trim())continue;let p=Ua.exec(a),f=/^ */u.exec(a)[0].length;p&&p[1].length<=i+3?i=p[0].length:f<i&&(i=0)}return r!==-1&&t.push([r,e.length]),t}function yr(e,t){return e.some(([r,n])=>t>=r&&t<n)}function Tr(e){return String(e??"").replaceAll(/\r\n?/gu,`
|
|
7
|
+
`)}function bf(e){return/^[0-9a-f]{7,64}$/iu.test(e)}function fo(e,t){let r=ft(e),n=[...e.matchAll(t)].filter(o=>!yr(r,o.index));return n.map((o,i)=>({heading:o[1],body:e.slice(o.index+o[0].length+1,n[i+1]?.index)}))}function gs(e,t){let r=ft(e),n=[...e.matchAll(t)].find(o=>!yr(r,o.index));return n?{head:e.slice(0,n.index),subs:fo(e,t)}:{head:e,subs:[]}}function td(e){let t=e.indexOf(`
|
|
8
|
+
`);return t===-1?{title:e.trim(),body:""}:{title:e.slice(0,t).trim(),body:e.slice(t+1)}}function PB(e){let t=[];for(let r of e.split(`
|
|
9
|
+
`)){let n=r.trim();if(!n.startsWith("|")||/^[\s:|-]+$/u.test(n)&&n.includes("-"))continue;let o=n.replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(i=>i.trim());t.push(o)}return t}function rd(e){let t=PB(e);if(t.length<2)return[];let r=t[0].map(o=>o.toLowerCase()),n=[];for(let o of t.slice(1)){if(o.length===r.length&&o.every((s,a)=>s.toLowerCase()===r[a]))continue;let i={};r.forEach((s,a)=>{s&&(i[s]=o[a]??"")}),n.push(i)}return n}function E2(e){let t=Object.create(null),r=Object.create(null),n=[],o=null,i="",s=[],a="",c=(f,h,g)=>{!f||f in t||(t[f]=g.trim(),r[f]=h)},u=()=>{o&&c(o,i,s.join(`
|
|
10
|
+
`)),o=null,i="",s=[]},p=f=>{(o?s:n).push(f)};for(let f of e.split(`
|
|
11
|
+
`)){let h=/^ {0,3}(```|~~~)/u.exec(f),g=h!==null&&(!a||h[1]===a);if(g&&(a=a?"":h[1]),g||a){p(f);continue}if(!f.trim()){o?u():n.push(f);continue}let b=/^\s*(?:[-*] +)?\*\*([^:*]+):\*\*\s*(.*)$/u.exec(f);if(b){u();let v=b[1].trim(),x=b[2],w;for(;(w=/\s+[·•]\s+\*\*([^:*]+):\*\*\s*/u.exec(x))!==null;)c(v.toLowerCase(),v,x.slice(0,w.index)),v=w[1].trim(),x=x.slice(w.index+w[0].length);o=v.toLowerCase(),i=v,s=[x];continue}if(/^\s*(?:#{1,6} |\||[-=*_]{3,}\s*$)/u.test(f)){u();continue}p(f)}return u(),{fields:t,labels:r,prose:n.join(`
|
|
12
|
+
`).trim()}}function vf(e){let t=(e||"").trim(),r="",n=Ha(t);n&&(t=n.label.trim(),r=n.url.trim());let o="",i=/#L(\d+)/u.exec(r);i&&(o=i[1]);let c=[...t.matchAll(/`([^`]+)`/gu)].map(f=>f[1].trim()).find(f=>!f.includes("(")&&(f.includes("/")||/\.\w/u.test(f)))??(t.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),u=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(c);u&&(c=u[1],o||(o=u[2]));let p=lv.exec(c);return p?(o||(o=p[2]),{file:p[1],line:o,locationLink:r}):{file:c,line:o||"?",locationLink:r}}function cv(e){return e.replaceAll("**","")}function Ha(e){let t=String(e??""),r=DB(t,zB(t)),n=UB(t),o=t.indexOf("]");for(let i=t.indexOf("[");i!==-1;i=t.indexOf("[",i+1)){for(;o!==-1&&o<=i;)o=t.indexOf("]",o+1);for(let s of[o,r.get(i)??-1]){if(s===-1||s===i+1||t[s+1]!=="(")continue;let a=HB(t,s+1,n);if(a!==null)return{label:t.slice(i+1,s),url:a,index:i}}}return null}function DB(e,t){let r=new Map,n=[];for(let o=0;o<e.length;o++){let i=e[o];M2(e,o)?o++:i==="`"?o=t.get(o)??o:i==="["?n.push(o):i==="]"&&n.length>0&&r.set(n.pop(),o)}return r}function zB(e){let t=[];for(let o=e.indexOf("`");o!==-1;o=e.indexOf("`",o)){let i=1;for(;e[o+i]==="`";)i++;t.push([o,i]),o+=i}let r=new Map,n=new Map;for(let o=t.length-1;o>=0;o--){let[i,s]=t[o],a=n.get(s);a!==void 0&&r.set(i,a+s-1),n.set(s,i)}return r}function UB(e){let t=e.length,r=new Int32Array(t+1).fill(-1),n=new Int32Array(t+1).fill(-1),o=new Int32Array(t+1).fill(-1),i=new Int32Array(t+1).fill(-1);for(let c=t-1;c>=0;c--)r[c]=e[c]===")"?c:r[c+1],n[c]=/\s/u.test(e[c])?c:n[c+1],o[c]=e[c]===">"?c:o[c+1],i[c]=e[c]===`
|
|
13
|
+
`?c:i[c+1];let s=new Map,a=[];for(let c=0;c<t;c++){let u=e[c];M2(e,c)?c++:n[c]===c?a.length=0:u==="("?a.push(c):u===")"&&a.length>0&&s.set(a.pop(),c)}return{balanced:s,nextClose:r,nextSpace:n,nextAngle:o,nextLine:i}}function HB(e,t,r){let n=jB(e,t,r);if(n)return n;let o=r.balanced.get(t);if(o!==void 0)return o>t+1?e.slice(t+1,o):null;let i=r.nextClose[t+1],s=r.nextSpace[t+1];return i===-1||i===t+1||s!==-1&&s<i?null:e.slice(t+1,i)}function jB(e,t,r){if(e[t+1]!=="<")return"";let n=r.nextAngle[t+2],o=r.nextLine[t+2];return n===-1||o!==-1&&o<n||e[n+1]!==")"?"":e.slice(t+2,n)}function M2(e,t){return e[t]==="\\"&&WB.test(e[t+1]??"")}function nd(e){return typeof e=="string"?e.replace(VB,"$1"):e}function R2(e){let t=/^\[(.+)\]$/u.exec(e.trim());return t?t[1].trim():e.trim()}function bs(e){let t=(e||"").trim();return/^[-–—]+$/u.test(t)?"":t}var NB,Ua,Qc,ed,ms,lv,VB,WB,Lr=k(()=>{NB=/^( *)(```|~~~)/u,Ua=/^( *)(?:[-*+]|\d{1,9}[.)]) +(?=\S)/u;Qc=/^## +(.*)$/gmu,ed=/^### +(.*)$/gmu,ms=/^#### +(.*)$/gmu,lv=/^(.+):(\d+(?:-\d+)?)$/u;VB=/\\([!-/:-@[-`{-~])/gu,WB=/[!-/:-@[-`{-~]/u});function dv(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return GB.encode(e)}var GB,A2=k(()=>{GB=new TextEncoder});function KB(e){return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}async function uv(e){let t=typeof e=="string"?dv(e):e,r=new Uint8Array(await crypto.subtle.digest("SHA-512",t));return`sha512-${btoa(String.fromCodePoint(...r))}`}async function qB(e){let t=dv(JSON.stringify(e)),r=await crypto.subtle.digest("SHA-256",t),n=new Uint8Array(r,0,16);n[6]=n[6]&15|64,n[8]=n[8]&63|128;let o=KB(n);return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function pv(e){if(typeof crypto?.subtle?.digest!="function")return null;let t=fv(e);try{return await qB(t)}catch{return null}}function fv(e){if(e._idBasis)return e._idBasis;let{severity:t,description:r}=e;return e.fileHash?{severity:t,description:r,fileHash:e.fileHash}:e.location?{severity:t,description:r,location:e.location}:{severity:t,description:r,file:e.file,line:e.line}}var yf=k(()=>{A2()});function An(e){return typeof e=="string"&&e.trim().toLowerCase()==="informative"?"informational":e}function Tt(e,t=e.severity){let r=An(e.severity);return r!==e.severity&&(!e.id&&!e._idBasis&&(e._idBasis=fv({...e,severity:t})),e.severity=r),e.correctedSeverity!==void 0&&(e.correctedSeverity=An(e.correctedSeverity)),e}var In=k(()=>{yf()});function XB(e){switch(e.toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"HIGH_BUG":return"high_bug";case"BUG":return"bug";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return"medium"}}function JB(e){if(e!==void 0)return I2.get(T2(e))??I2.get("medium")}function L2(e){let r=Tr(e).trim().split(YB);if(r.length===1)return null;let n=[];for(let o=1;o<r.length;o+=2){let i=XB(r[o]);for(let s of r[o+1].split(/^### /mu).slice(1)){let a=QB(s,i);a&&n.push(a)}}return n.length===0?null:{type:"security",source:"deepsec",findings:n}}function QB(e,t){let{title:r,body:n}=td(e);if(!r)return null;let o=n.replace(/\n---\s*$/u,"").trim(),i={};for(let x of o.matchAll(/^- \*\*([^:*]+):\*\*\s*(.+)$/gmu))i[x[1].trim().toLowerCase()]=x[2].trim();let s=/^\*\*Recommendation:\*\*\s*/mu.exec(o),a=o,c="";s&&(a=o.slice(0,s.index),c=o.slice(s.index+s[0].length).trim());let u=a.split(`
|
|
14
|
+
`).filter(x=>!/^\s*- \*\*/u.test(x)).join(`
|
|
15
|
+
`).replaceAll("**","").trim(),p=[r,u].filter(Boolean).join(`
|
|
16
|
+
|
|
17
|
+
`),f=(i.file||"unknown").replace(/^`(.*)`$/u,"$1"),h=(i.lines||"").split(",").map(x=>x.trim()).find(Boolean)||"?",g={file:f,line:h,severity:t,description:p};c&&(g.recommendation=c.replaceAll("**",""));let b=JB(i.confidence);b!==void 0&&(g.confidence=b);let v=ZB.get(T2(i.revalidation));return v&&(g.revalidate=v,g.revalidateSource="deepsec",i.reasoning&&(g.revalidateVerdict=i.reasoning.replaceAll("**",""))),i.slug&&(g.slug=i.slug),Tt(g,t==="informative"?"medium":t)}var YB,T2,I2,ZB,F2=k(()=>{Lr();In();YB=/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*\n/mu;T2=e=>String(e??"").toLowerCase().replaceAll(/[^a-z]+/gu,""),I2=new Map([["high",8],["medium",6],["low",4]]);ZB=new Map([["confirmed","confirmed"],["falsepositive","refuted"],["uncertain","unknown"]])});function Tn(e){return ja[An(e)]??String(e??"")}var ja,ei,od,kt,Va=k(()=>{In();ja={critical:"Critical",high:"High",medium:"Medium",low:"Low",high_bug:"High bug",bug:"Bug",informational:"Informational"},ei={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},od={red:"Red",blue:"Blue",green:"Green",gray:"Gray",none:"Unmarked"},kt={"claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium"}});function B2(e){return e=An(e),e!=null&&e in We?e:null}function Fr(e){return B2(e?.correctedSeverity)??An(e?.severity)}function wr(e){let t=B2(e?.correctedSeverity);return t!=null&&t!==An(e?.severity)}function ue(e,t){return t==="original"?An(e?.severity):Fr(e)}function Wa(e){let t=e?._correctedByReport;return t&&new Set(Object.values(t).map(n=>An(n?.severity))).size>1?t:null}function $e(e){return eO.has(e?.revalidate)?e.revalidate:""}function nn(e,t=e?.source){return Object.hasOwn(kt,t)||$e(e)==="revalidation"}function hv(e,t=e?._source??e?.source){let r=typeof t=="string"&&t!==""&&t!=="deepview",n=r?t:e?.analyzer??e?.type??e?._analyzer;return e?.security===!0||(n==="security"||n==="dependencies")&&e?.security!==!1||r&&["critical","high","medium","low"].includes(e?.severity)}function ys(e){return e&&e.replace(/^[^/]+\//u,"").replace(/^claude-/u,"").replaceAll("-"," ")}function id(e,t=!0){let r=t&&$e(e)==="revalidation"?"revalidate":"";return[e?.type,r,ys(e?.model),e?.effort,e?.exportsMode].filter(Boolean).join(" \xB7 ")}function jt(e,t){if(!e)return e;let r=e;t?.exportsMode==="isolate"&&(r=r.replace(/^\((?:[^()]|\([^()]*\))*\): \[export:\s*\w+\] /u,""),r=r.replace(/^\[export:\s*\w+\] /u,""));let n=[t?.exportName,t?.methodName].filter(Boolean).map(o=>o.replaceAll(/[.*+?^${}()|[\]\\]/gu,"\\$&"));for(let o of n)r=r.replaceAll(new RegExp(`\\[export:\\s*${o}\\]\\s*`,"gu"),"");for(let o of n)r=r.replace(new RegExp(`^\\(\`?${o}\`?\\): `,"u"),"");return r}function ho(e){let t=e?.exportName,r=e?.methodName;return t&&r&&t!==r?`${t}.${r}`:t||r||""}function ws(e){if(!e)return"";for(let t of e.split(`
|
|
18
|
+
`))if(t.trim())return t.trim();return""}function mv(e){return typeof e?.title=="string"?e.title.trim():""}function Ge(e){return mv(e)||ws(jt(e?.description,e))}function ti(e){let t=jt(e?.description,e)||"",r=mv(e);if(r){let i=t.trim(),s=i.indexOf(`
|
|
19
|
+
`);return(s<0?i:i.slice(0,s)).trim()!==r?{title:r,body:i}:{title:r,body:s<0?"":i.slice(s+1).replace(/^\s+/u,"")}}if(!t)return{title:"",body:""};let n=t.indexOf(`
|
|
20
|
+
`);if(n<0)return{title:"",body:t};if(ft(t)[0]?.[0]===0)return{title:"",body:t};let o=t.slice(n+1).replace(/^\s+/u,"");return o?{title:t.slice(0,n).trim(),body:o}:{title:"",body:t}}function Ga(e){let t=mv(e);if(!t)return jt(e?.description,e)||"";let{body:r}=ti(e);return r?`${t}
|
|
21
|
+
|
|
22
|
+
${r}`:t}function rO(e){let t=ft(e);if(t.length===0)return e.split(/\n{2,}/u);let r=[],n=0;for(let o of e.matchAll(/\n{2,}/gu))yr(t,o.index)||(r.push(e.slice(n,o.index)),n=o.index+o[0].length);return r.push(e.slice(n)),r}function Ka(e){let t=[];for(let r of rO(e||"")){if(!r.trim())continue;let n=tO.exec(r);if(n){t.push({label:n[1].trim(),body:r.slice(n[0].length).trim()});continue}let o=t.at(-1);o&&o.label===null?o.body+=`
|
|
23
|
+
|
|
24
|
+
${r}`:t.push({label:null,body:r})}return t}function xt(e){return Number.isFinite(parseInt(e?.line,10))?`${e.file}:${e.line}`:e?.file??""}function ks(e){let t=r=>typeof r=="string"?r:"";return`${t(e?.observation)}
|
|
25
|
+
${t(e?.text)}`.trim()}var We,Ne,vs,eO,tO,xs=k(()=>{Lr();Va();In();We={critical:6,high:5,medium:4,low:3,high_bug:2,bug:1,informational:0},Ne=["critical","high","medium","low","high_bug","bug","informational"];vs=["revalidation","refuted","unreachable","confirmed","partial","unknown"],eO=new Set(vs);tO=/^\*\*([^*\n]+):\*\*[ \t]*/u});function Pe(e){if(typeof e!="string"||e.length===0)return!1;try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function gv(e){return String(e??"").replaceAll(/\s*\n\s*/gu," ").replaceAll("|","\\|").trim()}function ht(e){let t=String(e??"");if(t==="")return"";let r=Math.max(0,...[...t.matchAll(/`+/gu)].map(i=>i[0].length)),n="`".repeat(r+1),o=t.startsWith("`")||t.endsWith("`")?" ":"";return`${n}${o}${t}${o}${n}`}function N2(e){return String(e??"").replaceAll(/[[\]]/gu,"\\$&")}function $s(e,t){let r=/[\s()<>]/u.test(t)?`<${t.replaceAll(">","%3E")}>`:t;return`[${e}](${r})`}function wf(e){return Pe(e)?`<${e}>`:String(e??"")}function P2(e,t){let r=String(e??"").toLowerCase().replaceAll(/[^\p{L}\p{N}\p{M}\s_-]/gu,"").replaceAll(/\s/gu,"-"),n=r;for(let o=1;t.has(n);o++)n=`${r}-${o}`;return t.add(n),n}function Ln(e,t){return`${"#".repeat(Math.min(6,Math.max(1,e)))} ${t}`}function bv(e,t,r=[]){let n=e.map((o,i)=>r[i]==="right"?"---:":"---");return[e,n,...t].map(o=>`| ${o.join(" | ")} |`).join(`
|
|
26
|
+
`)}function D2(e){let t=e instanceof Date?e:new Date(e);if(Number.isNaN(t.getTime()))return"";let r=n=>String(n).padStart(2,"0");return`${t.getUTCFullYear()}-${r(t.getUTCMonth()+1)}-${r(t.getUTCDate())} ${r(t.getUTCHours())}:${r(t.getUTCMinutes())} UTC`}function qa(e,t,r=`${t}s`){return`${e} ${e===1?t:r}`}function sd(e){return e.filter(t=>typeof t=="string"&&t.trim()).map(t=>t.replace(/\s+$/u,"")).join(`
|
|
27
|
+
|
|
28
|
+
`)}function Ya(e){let t=oO(Tr(e).trim());return t?iO(t):""}function oO(e){if(!e)return"";let t=ft(e).at(-1);if(!t||t[1]<e.length)return e;let r=e.slice(t[0]).split(`
|
|
29
|
+
`),n=O2.exec(r[0])?.[1]??"```";return r.length>1&&O2.exec(r.at(-1))?.[1]?.startsWith(n.slice(0,3))?e:`${e}
|
|
30
|
+
${n}`}function z2(e,t){let r=ft(e),n=0;return e.split(`
|
|
31
|
+
`).map(o=>{let i=n;return n+=o.length+1,yr(r,i)?o:t(o)}).join(`
|
|
32
|
+
`)}function iO(e){return z2(e,t=>t.replace(nO,"$1\\$2"))}function U2(e){return z2(String(e??""),t=>t.replace(/^( {0,3})\\(\\*#)/u,"$1$2"))}function H2(e,t){let r=" ".repeat(e.length);return t.split(`
|
|
33
|
+
`).map(n=>n?r+n:"").join(`
|
|
34
|
+
`)}var O2,nO,ad=k(()=>{Lr();O2=/^ *(`{3,}|~{3,})/u,nO=/^( {0,3})(\\*#)/u});function Fn(e){let t=/(`+)(.+?)\1(?!`)/u.exec(String(e??""));if(!t)return null;let r=t[2];if(r.length>2&&r.startsWith(" ")&&r.endsWith(" ")){let n=r.slice(1,-1);if(n.startsWith("`")||n.endsWith("`"))return n}return r}function kf(e){let t=Ha(String(e??""));return t?.index===0?{label:t.label,url:t.url}:null}function W2(e){let t=/^<(https?:[^>\s]*)>$/u.exec(e.trim());return t?t[1]:null}function G2(e){let t=lv.exec(e);return t?{file:t[1],line:t[2]}:{file:e,line:"?"}}function lO(e){let t=e.indexOf(".");return t>0?{exportName:e.slice(0,t),methodName:e.slice(t+1)}:{exportName:e}}function _s(e){let t=String(e??"").trim();return sO.get(t.toLowerCase())??t}function cO(e){let t={},r=e.trim(),n=/ · (`+)(.+?)\1$/u.exec(r);n&&(Object.assign(t,lO(Fn(n[0]))),r=r.slice(0,n.index));let o=kf(r),i=Fn(o?o.label:r);return i!==null&&Object.assign(t,G2(i)),o&&Pe(o.url)&&(t.location=o.url),t}function uO(e){let t={},r=e.trim();r.endsWith(j2)&&(t.critical=!0,r=r.slice(0,-j2.length));let n=r.indexOf(dO);n!==-1&&(r=r.slice(0,n));let o=/^(.*?) — corrected (from|to) (.*)$/u.exec(r);return o?o[2]==="from"?(t.severity=_s(o[3]),t.correctedSeverity=_s(o[1])):(t.severity=_s(o[1]),t.correctedSeverity=_s(o[3])):t.severity=_s(r),t}function hO(e){return/\d/u.test(e)||/^(?:opus|sonnet|haiku|gpt|gemini|fable|mythos|llama|mistral)\b/iu.test(e)}function xf(e){let t=e.trim(),r=V2.get(t.toLowerCase());if(r)return{source:r};let n={},o=[];for(let i of t.split(" \xB7 ").map(s=>s.trim()).filter(Boolean))i==="revalidate"&&!n.revalidate?n.revalidate="revalidation":fO.has(i)&&!n.exportsMode?n.exportsMode=i:pO.has(i)&&!n.effort?n.effort=i:o.push(i);return o.length>1?[n.type,n.model]=o:o.length===1&&(n[hO(o[0])?"model":"type"]=o[0]),{run:n}}function vv(e){let t=e.trim(),r=kf(t);return r?r.label.trim():W2(t)??t}function mO(e){let t=kf(e.trim());if(t){let r=t.url.split("/").at(-1)??"";return bf(r)?r:Fn(t.label)??r}return Fn(e)??e.trim()}function gO(e){let t=Fn(e)??e.trim(),r=t.lastIndexOf("@");return{npm:r>0?{name:t.slice(0,r),version:t.slice(r+1)}:{name:t}}}function bO(e){let t=e.trim().toLowerCase();return t==="the revalidation pass itself"?"revalidation":aO.has(t)?t:void 0}function K2(e,t,r){let n=vO.get(t.trim().toLowerCase());n&&n(e,r.trim())}function q2(e){let t=e.split(`
|
|
35
|
+
`),r=0,n=()=>{for(;r<t.length&&!t[r].trim();)r++},o=()=>{let a=[];for(;r<t.length;){let c=yO.exec(t[r]);if(!c)break;a.push([c[1].trim(),c[2].trim()]),r++}return a};n();let i=o();if(i.length>0)return{title:"",facts:i,rest:t.slice(r).join(`
|
|
36
|
+
`)};let s=[];for(;r<t.length&&t[r].trim();)s.push(t[r++]);return n(),i=o(),i.length===0?{title:"",facts:i,rest:e}:{title:Xa(s.join(`
|
|
37
|
+
`).trim()),facts:i,rest:t.slice(r).join(`
|
|
38
|
+
`)}}function Xa(e){return U2(e)}function Y2(e,t){let r=new RegExp(`^#{${t}} +(.*)$`,"gmu"),n=ft(e),o=[...e.matchAll(r)].filter(a=>!yr(n,a.index)),i=e.slice(0,o[0]?.index??e.length).trim(),s=o.map((a,c)=>({label:a[1].trim(),body:e.slice(a.index+a[0].length,o[c+1]?.index).trim()}));return{lead:i,sections:s}}function X2(e){let t=[],r=ft(e),n=0;for(let o of e.split(`
|
|
39
|
+
`)){let i=yr(r,n)?null:wO.exec(o);n+=o.length+1,i?t.push({ref:i[2].trim(),indent:i[1].length+2,note:[]}):t.length>0&&t.at(-1).note.push(o)}return t.map(o=>kO(o))}function kO({ref:e,indent:t,note:r}){let n={},o=kf(e),i=W2(e),s=i===null?Fn(o?o.label:e):null;s!==null&&Object.assign(n,G2(s));let a=o?o.url:i;Pe(a)&&(n.url=a);let c=Xa(r.map(u=>u.slice(Math.min(t,/^ */u.exec(u)[0].length))).join(`
|
|
40
|
+
`).trim());return c&&(n.text=c),n}function Z2(e){let t=e.length,r=1/0;for(let n=e.length-1;n>=0;n--){let o=xO.indexOf(e[n].label.toLowerCase());if(o===-1||o>=r)break;r=o,t=n}return{paragraphs:e.slice(0,t),fields:e.slice(t).map(n=>[J2.get(n.label.toLowerCase()),n.body])}}function Q2(e,t,r){let n=[],o=ws(t),i=e.endsWith("\u2026")?e.slice(0,-1).trimEnd():"";!e||o===e||i&&o.startsWith(i)?n.push(t):n.push(e,t);for(let{label:s,body:a}of r)n.push(a?`**${s}:** ${a}`:`**${s}:**`);return n.filter(Boolean).join(`
|
|
41
|
+
|
|
42
|
+
`)}var sO,V2,aO,j2,dO,pO,fO,vO,yO,wO,J2,xO,e5=k(()=>{xs();Va();Lr();ad();sO=new Map(Object.entries(ja).map(([e,t])=>[t.toLowerCase(),e])),V2=new Map(Object.entries(kt).map(([e,t])=>[t.toLowerCase(),e])),aO=new Set(vs);j2=" \xB7 flagged critical by the analyzer",dO=" (varies across reports \u2014 ";pO=new Set(["max","xhigh","high","medium","low","minimal"]),fO=new Set(["list","isolate"]);vO=new Map([["location",(e,t)=>Object.assign(e,cO(t))],["severity",(e,t)=>Object.assign(e,uO(t))],["confidence",(e,t)=>{let r=/^(\d+(?:\.\d+)?)\/10$/u.exec(t);r&&(e.confidence=Number(r[1]))}],["revalidation",(e,t)=>{let r=bO(t);r&&(e.revalidate=r)}],["revalidated by",(e,t)=>{let r=t.trim();r&&(e.revalidateSource=V2.get(r.toLowerCase())??r)}],["repository",(e,t)=>{e.repo={github:vv(t)}}],["introduced in",(e,t)=>{e.commitHash=mO(t)}],["package",(e,t)=>{e.package=gO(t)}],["priority",(e,t)=>{e.priority=/^-?\d+(?:\.\d+)?$/u.test(t)?Number(t):t}],["found while analyzing",(e,t)=>{e.discoveredIn=Fn(t)??t}],["detailed report",(e,t)=>{e.reportPath=Fn(t)??t}],["commit audited",(e,t)=>{e.auditedCommit=Fn(t)??t}],["id",(e,t)=>{e.id=Fn(t)??t}],...[["category","category"],["status","status"],["branch","branch"],["date created","dateCreated"],["detected at","detectedAt"],["committed at","committedAt"],["poc status","pocStatus"],["variant of","parent"],["slug","slug"]].map(([e,t])=>[e,(r,n)=>{r[t]=n}])]);yO=/^- \*\*([^*\n]+?):\*\* ?(.*)$/u;wO=/^(\d+)\. (.*)$/u;J2=new Map([["impact","impact"],["reproduction","reproduction"],["recommendation","recommendation"],["confidence reasoning","confidenceReason"],["revalidation verdict","revalidateVerdict"],["revalidation recommendation","revalidateRecommendation"]]),xO=[...J2.keys()]});function r5(e){let t=Tr(e).trim();if(!$O.test(t))return null;let{head:r,subs:n}=gs(t,Qc),o=[];for(let{heading:i,body:s}of n){if(i.trim().toLowerCase()==="summary")continue;let a=EO(i);for(let c of fo(s,ed))o.push(RO(c,a))}return IO(MO(r),o)}function EO(e){let t=/^(.*?)\s*\(\d+\)\s*$/u.exec(e.trim());return _s(t?t[1]:e)}function MO(e){let t=new Map;for(let r of e.matchAll(SO)){let n=r[1].trim().toLowerCase();t.has(n)||t.set(n,r[2].trim())}return{sources:(t.get("source")??"").split(",").map(r=>xf(r).source).filter(Boolean),analyzers:(t.get("analyzer")??t.get("analyzers")??"").split(";").map(r=>r.trim()).filter(Boolean),repo:t.has("repository")?vv(t.get("repository")):""}}function RO({heading:e,body:t},r){let n=e.trim().replace(/^\d+\.\s+/u,""),o=gs(t,ms).subs.filter(i=>_O.test(i.heading.trim()));return o.length===0?[t5(t,4,n,r)]:o.map(i=>t5(i.body,5,n,r))}function t5(e,t,r,n){let{title:o,facts:i,rest:s}=q2(e),{lead:a,sections:c}=Y2(s,t),u={file:"unknown",line:"?"},p=null;for(let[y,$]of i)y.trim().toLowerCase()==="analyzer"?p=xf($):K2(u,y,$);u.severity||(u.severity=n||"medium");let f=o||r,h=f!=="Untitled finding"&&f!==xt(u),g=c.filter(y=>!CO.has(y.label.toLowerCase())).map(y=>({label:y.label,body:Xa(y.body)})),{paragraphs:b,fields:v}=Z2(g);u.description=Q2(h?f:"",Xa(a),b);let x=c.filter(y=>y.label.toLowerCase()==="evidence").flatMap(y=>X2(y.body));x.length>0&&(u.evidence=x);for(let[y,$]of v)u[y]=$;let w=c.find(y=>y.label.toLowerCase()==="severity correction");return w?.body&&(u.correctedSeverityReason=Xa(w.body)),{finding:Tt(u),analyzer:p}}function AO(e,t){let r={source:null,run:{}};if(t.some(o=>o.analyzer!==null)){let o=new Set(t.map(i=>i.analyzer?.source??null));o.size===1&&!o.has(null)&&([r.source]=o);for(let i of t)i.analyzer?.run?Object.assign(i.finding,i.analyzer.run):i.analyzer?.source&&!r.source&&(i.finding.source=i.analyzer.source);return r}let n=e.analyzers.length===1?xf(e.analyzers[0]):null;return n?.source?r.source=n.source:n?.run?r.run=n.run:e.analyzers.length===0&&e.sources.length===1&&([r.source]=e.sources),r}function IO(e,t){let r=t.flat(),{source:n,run:o}=AO(e,r),i={},s=new Set(r.map(u=>u.finding.type).filter(Boolean)),a=o.type??(s.size===1?[...s][0]:null)??(n?"security":null);a&&(i.type=a),n&&(i.source=n);for(let u of["model","effort","exportsMode"])o[u]&&(i[u]=o[u]);e.repo&&(i.repo={github:e.repo});let c=t.map(u=>u.map(p=>p.finding));return c.every(u=>u.length===1)?i.findings=c.flat():i.groups=c,i}var $O,_O,SO,CO,n5=k(()=>{xs();Lr();e5();In();$O=/^<!--\s*DeepView findings export\b[^>]*-->/u,_O=/^Case \d+ of \d+(?:\s|$)/u,SO=/^- \*\*([^*\n]+?):\*\* ?(.*)$/gmu,CO=new Set(["evidence","severity correction","comment"])});function o5(e){let t=LO(e);if(!t)return null;let{severity:r,description:n,location:o,file:i,line:s}=t;return o?{severity:r,description:n,location:o}:{severity:r,description:n,file:i,line:s}}function LO(e){let t=e.indexOf(`
|
|
43
|
+
`),r=(t===-1?e:e.slice(0,t)).trim();if(!r)return null;let n=t===-1?"":e.slice(t+1),{sectionsText:o,metaText:i}=FO(n),s=BO(o),a=OO(i),{file:c,line:u,locationLink:p}=NO(s.location||""),f=(a.severity||"").toLowerCase();return{severity:TO.has(f)?f:"medium",description:PO(r,s),location:p,file:c||"unknown",line:u}}function FO(e){let t=/^---\s*$/mu,r=t.exec(e);if(!r)return{sectionsText:e,metaText:""};let n=e.slice(0,r.index).trim(),o=e.slice(r.index+r[0].length).replace(/^\n/u,""),i=t.exec(o),s=i?o.slice(0,i.index):o;return{sectionsText:n,metaText:s}}function BO(e){let t={},r=e.split(/^## /mu);for(let n=1;n<r.length;n++){let o=r[n],i=o.indexOf(`
|
|
44
|
+
`),s=(i===-1?o:o.slice(0,i)).trim().toLowerCase(),a=(i===-1?"":o.slice(i+1)).trim();s&&(t[s]=a)}return t}function OO(e){let t={};for(let r of e.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))t[r[1].trim().toLowerCase()]=r[2].trim();return t}function NO(e){let t="",r="?",n="",o=e.match(/\[([^\]]+)\]\(([^)]+)\)/u);if(o){t=o[1].trim(),n=o[2];let s=o[2].match(/#L(\d+)/u);s&&(r=s[1])}else t=e.trim(),n=e.trim();let i=t.match(/^(.+):(\d+)$/u);return i&&(t=i[1],r==="?"&&(r=i[2])),{file:t,line:r,locationLink:n}}function PO(e,t){let r=[e];return t.details&&r.push(t.details),t.impact&&r.push(`Impact: ${t.impact}`),t["reproduction steps"]&&r.push(`Reproduction: ${t["reproduction steps"]}`),DO(r.join(`
|
|
45
|
+
|
|
46
|
+
`))}function DO(e){return e.replaceAll("**","")}var TO,i5=k(()=>{TO=new Set(["critical","high","medium","low","high_bug","bug","informational"])});function l5(e){let t=Tr(e).trim();if(!t.startsWith("# "))return null;let r=t.split(/^# /mu).filter(o=>o.trim().length>0),n=[];for(let o of r){let i=UO(o);i&&n.push(i)}return n.length===0?null:{type:"security",source:"claude-security",findings:n}}function UO(e){let{title:t,body:r}=td(e);if(!t)return null;let{sectionsText:n,metaText:o}=HO(r),i=jO(n),s=VO(o),a=qO(i.evidence||""),{file:c,line:u,locationLink:p}=c5(i.location||a[0]?.ref||""),f=(s.severity||"").toLowerCase(),h=zO.has(f)?f:"medium",g=XO(t,i,a.length>0),b={file:c||"unknown",line:u,severity:h,description:g};p&&(b.location=p),a.length>0&&(b.evidence=a.map(YO)),i["reproduction steps"]&&(b.reproduction=WO(i["reproduction steps"])),i["recommended fix"]&&(b.recommendation=i["recommended fix"]),s.repository&&(b.repo={github:s.repository}),s.branch&&(b.branch=s.branch),s["date created"]&&(b.dateCreated=s["date created"]),s.status&&(b.status=s.status),s.category&&(b.category=s.category);let v=o5(e);return v&&(b._idBasis=v),Tt(b)}function HO(e){let t=/^---\s*$/mu,r=t.exec(e);if(!r)return{sectionsText:e,metaText:""};let n=e.slice(0,r.index).trim(),o=e.slice(r.index+r[0].length).replace(/^\n/u,""),i=t.exec(o),s=i?o.slice(0,i.index):o;return{sectionsText:n,metaText:s}}function jO(e){let t={};for(let r of e.split(/^## /mu).slice(1)){let{title:n,body:o}=td(r),i=n.toLowerCase();i&&(t[i]=o.trim())}return t}function VO(e){let t={};for(let r of e.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))t[r[1].trim().toLowerCase()]=r[2].trim();return t}function c5(e){let t="",r="?",n="",o=Ha(e);if(o){t=o.label.trim(),n=o.url.trim();let s=n.match(/#L(\d+)(?:-L?(\d+))?/u);s&&(r=s[2]?`${s[1]}-${s[2]}`:s[1])}else t=e.trim(),n=e.trim();t=nd(t.replaceAll("`","")).trim();let i=t.match(/^(.+):(\d+)(?:\s*[-–—]\s*L?(\d+))?$/u);return i&&(t=i[1],r==="?"&&(r=i[3]?`${i[2]}-${i[3]}`:i[2])),{file:t,line:r,locationLink:n,linked:o!==null}}function WO(e){let t=e.split(`
|
|
47
|
+
`),r=t.findIndex(a=>a.trim());if(r===-1||!Ua.test(t[r])||t.some((a,c)=>c!==r&&Ua.test(a)))return e;let n=t[r].replace(/^ */u,""),o=n.replace(Ua,"");if(!o.trim())return e;let i=s5(o)??s5(n);if(i===null&&(Ua.test(o)||KO.test(n)))return e;let s=i===null?[o]:i.length===1?[i[0].step]:i.map(({number:a,step:c})=>`${a}. ${c}`);return t.splice(r,1,...s),t.join(`
|
|
48
|
+
`)}function s5(e){let t=[...e.matchAll(GO)];if(t.length===0||t[0].index!==0)return null;let r=[];for(let[n,o]of t.entries()){let i=Number(o[1]);if(n>0&&i<=r[n-1].number)return null;let s=e.slice(o.index+o[0].length,t[n+1]?.index).trim();if(!s)return null;r.push({number:i,step:s})}return r}function qO(e){let t=[];for(let r of e.split(`
|
|
49
|
+
`))a5.test(r)?t.push({ref:r.replace(a5,"").trim(),note:[]}):t.length>0&&r.trim()&&t.at(-1).note.push(r.trim());if(t.length===0){let r=e.split(`
|
|
50
|
+
`).map(i=>i.trim()).filter(Boolean),n=r.findIndex(i=>Ha(i)!==null);if(n===-1&&r.length!==1)return[];let o=n===-1?0:n;t.push({ref:r[o],note:r.filter((i,s)=>s!==o)})}return t.filter(r=>r.ref)}function YO({ref:e,note:t}){let{file:r,line:n,locationLink:o,linked:i}=c5(e),s={file:r||"unknown",line:n};o&&i&&(s.url=o);let a=t.join(`
|
|
51
|
+
`);return a&&(s.text=a),s}function XO(e,t,r){let n=[e];return t.details&&n.push(t.details),t.evidence&&!r&&n.push(`**Evidence:**
|
|
52
|
+
${t.evidence}`),t.impact&&n.push(`**Impact:** ${t.impact}`),n.join(`
|
|
53
|
+
|
|
54
|
+
`)}var zO,GO,KO,a5,d5=k(()=>{i5();In();Lr();zO=new Set(["critical","high","medium","low","high_bug","bug","informational","informative"]);GO=/(?:^|[ \t])(\d{1,9})\)(?=[ \t]|$)/gu,KO=/^\d{1,9}\)(?=[ \t]|$)/u;a5=/^[ \t]*(?:\d+[.)]|[-*+])\s+/u});function JO(e){let t=(e||"").trim(),r="",n=/\[([^\]]+)\]\(([^)]+)\)/u.exec(t);n&&(t=n[1].trim(),r=n[2].trim());let o="",i=/#L(\d+)/u.exec(r);i&&(o=i[1]);let c=[...t.matchAll(/`([^`]+)`/gu)].map(f=>f[1].trim()).find(f=>!f.includes("(")&&(f.includes("/")||/\.\w/u.test(f)))??(t.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),u=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(c);u&&(c=u[1],o||(o=u[2]));let p=/^(.+):(\d+(?:-\d+)?)$/u.exec(c);return p?(o||(o=p[2]),{file:p[1],line:o,locationLink:r}):{file:c,line:o||"?",locationLink:r}}function $f({severity:e,description:t,ref:r,lineBullet:n="",id:o=""}){let i=JO(r),s=i.file||"unknown",a=i.line==="?"&&n?n:i.line,c=i.locationLink||(s==="unknown"&&o?`piolium:${o}`:"");return c?{severity:e,description:t,location:c}:{severity:e,description:t,file:s,line:a}}var yv=k(()=>{});function mo(e,t){if(!t.source)for(let r of u5)e[r]==null&&t[r]!=null&&(e[r]=t[r])}function ld(e){return QO.test(e)}function $t(e){let t=e?.repo?.github;if(typeof t!="string")return null;let r=t.trim().replace(/\/+$/u,"");if(!r)return null;let n=ZO.exec(r),o=(n?`${n[1]}/${n[2]}`:r).replace(/\.git$/u,"");return ld(o)?o:null}function Bn(e){let r=(typeof e?.directory=="string"?e.directory.trim():"").replace(/^(?:\.\/)+/u,"").replaceAll(/^\/+|\/+$/gu,"").replaceAll(/\/{2,}/gu,"/");return!r||r==="."||/[?#]/u.test(r)||r.split("/").includes("..")?"":r}var u5,ZO,QO,_f=k(()=>{u5=["type","model","think","effort","exportsMode"];ZO=/^(?:https?:\/\/)?(?:www\.)?github\.com\/([^/?#]+)\/([^/?#]+?)(?:\.git)?(?:[/?#].*)?$/iu,QO=/^[\w.-]+\/[\w.-]+$/u});function ri(e){switch(((e||"").trim().split(/\s+/u)[0]||"").replaceAll(/[`*]+/gu,"").toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return""}}function cd(...e){return{severity:e.find(Boolean)||"medium",identitySeverity:e.find(t=>t&&t!=="informative")||"medium"}}function dd(e){let t=/^([CHML])-?\d+$/iu.exec((e||"").trim());return t?{C:"critical",H:"high",M:"medium",L:"low"}[t[1].toUpperCase()]:""}function wv(e){let t=/^(critical|high|medium|low|informational|informative|info)(?:[ -](?:severity|risk))?(?:[ -]findings?)?(?:\s*\(\d+\))?$/iu.exec((e||"").trim());return t?ri(t[1]):""}function p5(e){let t=/^(critical|high|medium|low|informational|informative|info)\b/iu.exec((e||"").trim());return t?ri(t[1]):""}function Cf(e){return/^variants?\s*(?:\(\d+\))?\s*:?$/iu.test((e||"").trim())}function Ef(e){let t=/^([CHML]-?\d{1,4}|(?:p|q|b|r|m|l|x|diff)\d{0,4}-\d{2,4})(?:-([A-Za-z0-9][\w-]*))?$/iu.exec(e||"");return t?{id:t[1].toUpperCase(),slug:t[2]||""}:null}function Sf(e){return(e||"").replaceAll("-"," ")}function ud(e){let t=(e||"").trim(),r=/^\[([^\]]+)\]\([^)]*\)$/u.exec(t);return R2(r?r[1]:t).toUpperCase()}function kv(e){let t=/^\[([^\]]+)\]\(([^)]+)\)\s*[:—–-]*\s*(.*)$/u.exec(e);return t?{text:t[3]?`${t[1].trim()} ${t[3].trim()}`:t[1].trim(),link:t[2].trim()}:null}function xv(e){let t=e.search(/\s/u),r=(t===-1?e:e.slice(0,t)).replace(/[:.,—–-]+$/u,""),n=Ef(r);if(!n)return null;let o=(t===-1?"":e.slice(t+1)).replace(/^[:—–-]+\s*/u,"").trim();return{id:n.id,slug:n.slug,rest:o}}function $v(e){let{text:t,link:r}=kv(e)??{text:e,link:""},n=/^\[([^\]]+)\] *(.*)$/u.exec(t);if(n){let i=Ef(n[1].trim());return i?{id:i.id,title:n[2].trim()||Sf(i.slug)||i.id,link:r}:{id:n[1].trim().toUpperCase(),title:n[2].trim(),link:r}}let o=xv(t);return o?{id:o.id,title:o.rest||Sf(o.slug)||o.id,link:r}:{id:"",title:t.trim(),link:r}}function f5(e){let t={},r=i=>(/`([^`]+)`/u.exec(i)?.[1]??i.split(/\s+/u)[0]??"").trim(),n=/^\s*(?:[-*] +)?\*\*Target:?\*\*\s*(.*)$/imu.exec(e||"");if(n){let i=r(n[1]);ld(i)&&(t.repo=i)}let o=/^\s*(?:[-*] +)?\*\*Commit[^:*]*:?\*\*\s*(.*)$/imu.exec(e||"");if(o){let i=r(o[1]);bf(i)&&(t.commitHash=i)}return t}function Sv(e){for(let t of _v)if(e[t])return e[t];return""}var _v,Cv=k(()=>{Lr();_f();_v=["key code reference","key code","code reference","location","affected file","file","path"]});function Mf(e){return{id:ud(e.id||""),title:bs(e.title),severity:bs(e.severity),pocStatus:bs(e["poc status"]||e.poc),status:bs(e.status),parent:ud(bs(e.parent||"")),location:bs(e.location)}}function Rf(e,t=""){let{severity:r,identitySeverity:n}=cd(ri(e.severity),t,dd(e.id)),{file:o,line:i,locationLink:s}=vf(e.location||""),a={file:o||"unknown",line:i,severity:r,description:cv(e.title||e.id)};return s?a.location=s:a.file==="unknown"&&e.id&&(a.location=`piolium:${e.id}`),a._idBasis=$f({severity:n,description:a.description,ref:e.location||"",id:e.id}),e.pocStatus&&(a.pocStatus=e.pocStatus),e.status&&(a.status=e.status),e.parent&&(a.parent=e.parent),Tt(a)}function Ev(e,t,r){let n=[];for(let o of e.split(`
|
|
55
|
+
`)){let i=/^\s{0,3}(?:[-*+]|\d{1,3}[.)])\s+(.+)$/u.exec(o);if(!i)continue;let s=i[1].trim();if(/^\*\*[^:*]+:\*\*/u.test(s))continue;let a=kv(s),c=a?.link??"";if(a)s=a.text;else{let x=/^\*\*([^*]+)\*\*\s*[:—–-]*\s*(.*)$/u.exec(s);x&&(s=x[2]?`${x[1].trim()} ${x[2].trim()}`:x[1].trim())}if(/^(?:none\b|no |n\/a\b)/iu.test(s))continue;let u=xv(s),p=u?.id??"",f=s;if(u){let x=Sf(u.slug);f=x&&u.rest?`${x}
|
|
56
|
+
|
|
57
|
+
${u.rest}`:u.rest||x||u.id}let h=r.get(p),{severity:g,identitySeverity:b}=cd(ri(h?.severity),t,dd(p)),v={file:"unknown",line:"?",severity:g,description:cv(f)};p?v.location=`piolium:${p}`:c&&(v.location=c),c.endsWith("report.md")&&(v.reportPath=c),h?.pocStatus&&(v.pocStatus=h.pocStatus),h?.status&&(v.status=h.status),h?.parent&&(v.parent=h.parent),n.push({id:p,finding:Tt(v,b)})}return n}function Mv(e,t,r,n=""){let o=[];for(let s of rd(e)){let a=Mf(s);!a.id&&!a.title||(!a.parent&&r&&(a.parent=r),a.id&&!t.has(a.id)&&t.set(a.id,a),o.push({id:a.id,finding:Rf(a,n)}))}if(o.length>0)return o;let i=Ev(e,n,t);for(let s of i)r&&!s.finding.parent&&(s.finding.parent=r);return i}var h5=k(()=>{Lr();yv();In();Cv()});function tN(e){return eN.has(e)||e.startsWith("findings by severity")}function nN(e){return rN.test(e)}function m5(e){let{id:t}=$v(e);return!!(t&&Ef(t))}function oN(e){let t=fo(e,ed);return(t.length>0?t:fo(e,ms)).some(({heading:n})=>m5(n))}function g5(e){let t=Tr(e).trim();if(!/^# +Security Audit Report\b/mu.test(t)&&!/^## +Technical Findings Detail\s*$/imu.test(t)&&!/^## +Findings by Severity\b/imu.test(t))return null;let r=lN(t),n=cN(r["summary of findings"]||""),o=f5(gs(t,Qc).head),i=[],s=new Set,a=[],c=({id:p,finding:f})=>{i.push(f),p&&s.add(p)},u=p=>{for(let f of p)c(f)};for(let[p,f]of Object.entries(r)){let h=wv(p);h||tN(p)?u(Rv(f,h,n,a)):!nN(p)&&oN(f)&&u(Rv(f,p5(p),n,a))}for(let p of a)(!p.id||!s.has(p.id))&&c(p);for(let p of n.values())s.has(p.id)||c({id:p.id,finding:Rf(p)});if(i.length===0)return null;for(let p of i)o.repo&&(p.repo={github:o.repo}),o.commitHash&&!p.auditedCommit&&(p.auditedCommit=o.commitHash);return{type:"security",source:"piolium",findings:i}}function iN(e,t,r,n){let o=[],i="";for(let{heading:s,body:a}of e){let c=wv(s);if(c)o.push(...Rv(a,c,t,r)),i="";else if(Cf(s))o.push(...aN(a,t,i,r,n));else{let u=sN(s,a,t,r,n);o.push(...u),i=u[0]?.id||i}}return o}function sN(e,t,r,n,o){let{head:i,subs:s}=gs(t,ms),a=b5(e,i,r,o),c=a!==null&&!a.id&&s.some(p=>!Cf(p.heading)&&m5(p.heading)),u=a&&!c?[a]:[];return u.push(...Av(s,r,n,o,a?.id||"")),u}function aN(e,t,r,n,o){let{head:i,subs:s}=gs(e,ms);return n.push(...Mv(i,t,r,o)),Av(s,t,n,o,"")}function Av(e,t,r,n,o){let i=[],s="";for(let{heading:a,body:c}of e){if(Cf(a)){r.push(...Mv(c,t,o??s,n));continue}let u=b5(a,c,t,n);u&&(i.push(u),s=u.id||s)}return i}function Rv(e,t,r,n){let o=fo(e,ed);if(o.length>0)return iN(o,r,n,t);let i=Av(fo(e,ms),r,n,t,null);if(i.length>0)return i;let s=rd(e).map(Mf).filter(a=>a.id||a.title);if(s.length>0){for(let a of s)!a.severity&&t&&(a.severity=t),a.id&&!r.has(a.id)?r.set(a.id,a):a.id||n.push({id:"",finding:Rf(a,t)});return[]}return n.push(...Ev(e,t,r)),[]}function b5(e,t,r,n=""){let o=e.trim();if(!o)return null;let{id:i,title:s,link:a}=$v(o),c=r.get(i);!i&&s&&(c=[...r.values()].find(R=>R.title.toLowerCase()===s.toLowerCase()),i=c?.id??"");let{fields:u,labels:p,prose:f}=E2(t),{severity:h,identitySeverity:g}=cd(ri(u.severity),ri(c?.severity),n,dd(i)),b=vf(Sv(u)),v=/\d+/u.exec(u.line||u.lines||"")?.[0]??"",x=b.line==="?"&&v?v:b.line,w=/\*\*Variant of:?\*\*\s*\[?([^\]\s)]+)/iu.exec(t),y=f.split(`
|
|
58
|
+
`).filter(R=>!/^\s*<a\s[^>]*>\s*<\/a>\s*$/iu.test(R)&&!/\*\*Variant of:?\*\*/iu.test(R)).join(`
|
|
59
|
+
`).trim(),$={file:b.file||"unknown",line:x,severity:h,description:uN(s||i,u,p,y)};b.locationLink?$.location=b.locationLink:$.file==="unknown"&&i&&($.location=`piolium:${i}`),$._idBasis=$f({severity:g,description:$.description,ref:Sv(u),lineBullet:v,id:i});let _=u["poc status"]||u.poc||c?.pocStatus;_&&($.pocStatus=_);let S=u["detailed report"]||(a.endsWith("report.md")?a:"");S&&($.reportPath=S),c?.status&&($.status=c.status);let M=c?.parent||(w?ud(w[1]):"");return M&&($.parent=M),{id:i,finding:Tt($)}}function lN(e){let t=Object.create(null);for(let{heading:r,body:n}of fo(e,Qc)){let o=r.trim().toLowerCase();o&&(t[o]=o in t?`${t[o]}
|
|
60
|
+
${n}`:n)}return t}function cN(e){let t=new Map;for(let r of rd(e)){let n=Mf(r);n.id&&t.set(n.id,n)}return t}function uN(e,t,r,n){let o=[e];t.summary&&o.push(t.summary),n&&o.push(n);for(let[i,s]of Object.entries(t))!s||dN.has(i)||o.push(`**${r[i]||i}:** ${s}`);return o.filter(Boolean).join(`
|
|
61
|
+
|
|
62
|
+
`)}var eN,rN,dN,v5=k(()=>{Lr();yv();In();h5();Cv();eN=new Set(["technical findings detail","technical findings","detailed findings","findings detail","findings"]);rN=/^(?:summary of findings|deferred|methodolog|executive|conclusion|attack surface|coverage|discoveries|scope|table of contents|contents|appendix|recommendation|remediation)/u;dN=new Set([..._v,"severity","summary","files","poc","poc status","line","lines","detailed report","proof of concept","evidence","variant of","pattern","status","id","title"])});function fN(e){let t=[],r=[],n="",o=!1,i=e.length;for(let s=0;s<i;s++){let a=e[s];o?a==='"'?e[s+1]==='"'?(n+='"',s++):o=!1:n+=a:a==='"'?o=!0:a===","?(r.push(n),n=""):a===`
|
|
63
|
+
`||a==="\r"?(r.push(n),t.push(r),r=[],n="",a==="\r"&&e[s+1]===`
|
|
64
|
+
`&&s++):n+=a}for((n!==""||r.length>0)&&(r.push(n),t.push(r));t.length>0&&t.at(-1).length===1&&t.at(-1)[0]==="";)t.pop();return t}function hN(e,t){return t.map(r=>{let n=Object.create(null);return e.forEach((o,i)=>{n[o]=r[i]??""}),n})}function pd(e){let t=fN(e);if(t.length<2)throw new Error("Codex CSV: empty or missing header row");let[r,...n]=t;for(let s of pN)if(!r.includes(s))throw new Error(`Codex CSV: missing required column "${s}"`);let o=new Map;for(let s of hN(r,n)){let a=s.configured_scan_id;a&&(o.has(a)||o.set(a,[]),o.get(a).push(s))}if(o.size===0)throw new Error("Codex CSV: no rows with a configured_scan_id");let i=[];for(let[s,a]of o){let c=new Set(a.map(f=>f.repository).filter(Boolean));if(c.size>1)throw new Error(`Codex CSV: scan ${s} contains multiple repositories: ${[...c].join(", ")}`);let p=`${[...c][0]||"unknown-repo"}:${s.replace(/^[^:]+:/u,"")}`;i.push({displayName:p,data:{type:"security",source:"codex-security",findings:a.map(mN)}})}return i}function mN(e){let t=e.relevant_paths.split(" | ").map(o=>o.trim()).find(Boolean)||"unknown",r=[e.title,e.description].filter(Boolean).join(`
|
|
65
|
+
|
|
66
|
+
`),n={id:e.finding_url,file:t,line:"?",severity:(e.severity||"medium").toLowerCase(),description:r,repo:{github:e.repository}};return e.commit_hash&&(n.commitHash=e.commit_hash),e.detected_at&&(n.detectedAt=e.detected_at),e.committed_at&&(n.committedAt=e.committed_at),Tt(n)}var pN,y5=k(()=>{In();pN=["finding_url","repository","title","description","severity","configured_scan_id","relevant_paths"]});function gN(){let e=[],t=new Map,r=i=>{if(!t.has(i)){let s={security:!1};s.parent=s,t.set(i,s),typeof i=="string"&&e.push(i)}return t.get(i)},n=i=>{let s=i;for(;s.parent!==s;)s=s.parent;for(;i.parent!==i;){let a=i.parent;i.parent=s,i=a}return s};return{nodeFor:r,root:n,join:(i,s)=>{i=n(i),s=n(s),i!==s&&(s.parent=i,i.security||=s.security)},ids:e}}function go(e,{source:t,linkedIds:r=()=>[],knownRows:n=()=>[]}={}){let{nodeFor:o,root:i,join:s,ids:a}=gN(),c=[],u=(h,g=!1)=>{let b;for(let v of h){if(!v||typeof v!="object")continue;let x=o(v.id||v);i(x).security||=g?v.isSecurity===!0:hv(v,v._source??v.source??t),b?s(b,x):b=x,g||c.push([v,x])}};for(let h of e)u(h);let p=new Set;for(let h=0;h<a.length;h++){let g=a[h],b=o(g);for(let v of r(g))s(b,o(v));for(let v of n([g]))p.has(v)||(p.add(v),u(v.members,!0))}let f=!1;for(let[h,g]of c){let b=i(g).security;h.isSecurity!==b&&(h.isSecurity=b,f=!0)}return f}var w5=k(()=>{xs()});function Iv(e){let t=Ge(e)||xt(e)||"Untitled finding";return t.length>k5?`${t.slice(0,k5-1).trimEnd()}\u2026`:t}function Tv(e){let t=String(e??"").trim();return Pe(t)?wf(t):ld(t)?$s(t,`https://github.com/${t}`):t}function _5(e,t,r){return t?kt[t]??String(t):id(e,r)}function on(e){return typeof e=="number"?Number.isFinite(e)?String(e):"":typeof e=="string"?e.replaceAll(/\s*\n\s*/gu," ").trim():""}function x5(e){return typeof e=="string"?e.trim():""}function wN(e,t){let r=t.severityMode==="original",n=Tn(ue(e,t.severityMode));wr(e)&&(n+=r?` \u2014 corrected to ${Tn(Fr(e))}`:` \u2014 corrected from ${Tn(e.severity)}`);let o=Wa(e);if(o){let i=Object.entries(o).map(([s,a])=>`${s||"this report"}: ${Tn(a?.severity)}`);n+=` (varies across reports \u2014 ${i.join("; ")})`}return e.critical===!0&&(n+=" \xB7 flagged critical by the analyzer"),n}function kN(e,t){let r=xt(e);if(!r)return"";let n=t.hooks.location(e),o=Pe(n)?$s(ht(r),n):ht(r),i=ho(e);return i?`${o} \xB7 ${ht(i)}`:o}function xN(e){if(!e)return"";let t=[],r=ei[e.triage]??(e.ignored?ei.ignored:"");return r&&t.push(r),e.color&&t.push(`${od[e.color]??e.color} mark`),e.flagged===!0&&t.push("Flagged"),t.join(" \xB7 ")}function $N(e){let t=on(e);return t?kt[t]??t:""}function _N(e,t){let r=on(e.commitHash);if(!r)return"";let n=t.hooks.commit(e);return Pe(n)?$s(ht(r.slice(0,7)),n):ht(r)}function SN(e,t,r){let n=[],o=(p,f)=>{f&&n.push(`- **${p}:** ${f}`)};o("Location",kN(e,t)),o("Severity",wN(e,t)),e.confidence!==void 0&&e.confidence!==null&&o("Confidence",`${e.confidence}/10`),t.showAnalyzer&&o("Analyzer",t.analyzerOf(e)),o("Category",on(e.category));let i=t.revalidation?$e(e):"";i&&o("Revalidation",i==="revalidation"?"the revalidation pass itself":i),i&&o("Revalidated by",$N(e.revalidateSource)),o("Triage",xN(r)),r?.fix&&o("Fix",wf(String(r.fix).trim())),t.showReport&&o("Report",ht(t.hooks.report(e)??""));let s=on(e.repo?.github);s&&s!==t.repo&&o("Repository",Tv(s)),o("Introduced in",_N(e,t));let a=on(e.discoveredIn);a&&a!==String(e.file??"").trim()&&o("Found while analyzing",ht(a));let c=e.package?.npm,u=on(c?.name);u&&o("Package",ht(on(c.version)?`${u}@${on(c.version)}`:u));for(let[p,f]of vN)o(p,on(e[f]));for(let[p,f]of yN)o(p,ht(on(e[f])));return o("ID",ht(on(e.id))),n.join(`
|
|
67
|
+
`)}function Af(e,t,r){let n=Ya(r);return n?`${Ln(e,t)}
|
|
68
|
+
|
|
69
|
+
${n}`:Ln(e,t)}function CN(e,t){return(Array.isArray(e.evidence)?e.evidence:[]).map((n,o)=>{let i=`${o+1}. `,s=xt(n),a=t.hooks.evidence(n,e,o),c="";s?c=Pe(a)?$s(ht(s),a):ht(s):Pe(a)&&(c=wf(a));let u=Ya(ks(n)),p=i+(c||"(no reference)");return u?`${p}
|
|
70
|
+
|
|
71
|
+
${H2(i,u)}`:p}).join(`
|
|
72
|
+
|
|
73
|
+
`)}function EN(e,t,r){let n=ti(e),o=Tr(n.body),i=Ge(e),s=i!==""&&Iv(e)!==i,a=!s&&!n.title&&o.trim()===i,c=s&&ws(o)!==i?`${i}
|
|
74
|
+
|
|
75
|
+
${o}`:o,u=Ka(a?"":c),p=u.findIndex(v=>v.label!==null),f=p===-1?u:u.slice(0,p),h=p===-1?[]:u.slice(p),g=f.map(v=>Ya(v.body)),b=CN(e,t);b&&g.push(`${Ln(r,"Evidence")}
|
|
76
|
+
|
|
77
|
+
${b}`);for(let v of h)g.push(v.label===null?Ya(v.body):Af(r,v.label,v.body));return g}function $5(e,t,r){let n=t.hooks.annotation(e),o=[SN(e,t,n),...EN(e,t,r)];for(let[s,a,c]of bN){if(c&&!t.revalidation)continue;let u=e[a],p=typeof u=="string"?jt(u,e):"";p.trim()&&o.push(Af(r,s,p))}wr(e)&&x5(e.correctedSeverityReason)&&o.push(Af(r,"Severity correction",e.correctedSeverityReason));let i=x5(n?.comment);return i&&o.push(Af(r,"Comment",i)),o}function S5(e,t,{headingText:r,depth:n}){let o=[Ln(n,r)];if(e.length===1)return sd([...o,...$5(e[0],t,n+1)]);let i=[...new Set(e.map(c=>t.hooks.report(c)).filter(Boolean))],s=i.length>1?` \u2014 reported in ${i.map(c=>ht(c)).join(", ")}`:"";o.push(`${qa(e.length,"case")} of this finding${s}.`);let a=Ge(e[0]);return e.forEach((c,u)=>{let p=xt(c);o.push(Ln(n+1,`Case ${u+1} of ${e.length}${p?` \u2014 ${ht(p)}`:""}`));let f=Ge(c);f&&f!==a&&o.push(Ya(f)),o.push(...$5(c,t,n+2))}),sd(o)}var k5,bN,vN,yN,C5=k(()=>{xs();Va();ad();_f();Lr();k5=120;bN=[["Impact","impact",!1],["Reproduction","reproduction",!1],["Recommendation","recommendation",!1],["Confidence reasoning","confidenceReason",!1],["Revalidation verdict","revalidateVerdict",!0],["Revalidation recommendation","revalidateRecommendation",!0]],vN=[["Status","status"],["Branch","branch"],["Date created","dateCreated"],["Detected at","detectedAt"],["Committed at","committedAt"],["PoC status","pocStatus"],["Variant of","parent"],["Slug","slug"],["Priority","priority"]],yN=[["Detailed report","reportPath"],["Commit audited","auditedCommit"]]});function AN(e){let t={};for(let[r,n]of Object.entries(RN))t[r]=typeof e?.[r]=="function"?e[r]:n;return t}function IN(e,t){let r=o=>typeof o?.source=="string"&&o.source?o.source:null;if(e.length===1)return o=>r(o)??e[0].source??null;let n=new Map(e.map(o=>[o.name,o.source??null]));return o=>r(o)??n.get(t.report(o))??null}function TN(e,t,r){let n=e.view?.revalidation!==!1,o=(Array.isArray(e.reports)?e.reports:[]).filter(u=>u&&typeof u=="object"),i=IN(o,t),s=u=>_5(u,i(u),n),a=new Set(r.map(s)),c=new Set(r.map(u=>t.report(u)).filter(Boolean));return{hooks:t,analyzerOf:s,severityMode:e.view?.severityMode==="original"?"original":"corrected",revalidation:n,showAnalyzer:a.size>1,showReport:c.size>1||o.length>1,repo:typeof e.repo=="string"&&e.repo?e.repo:null}}function LN(e){if(!e)return"";let t=[e.bucket?`${e.bucket} findings`:"Live findings"];return e.severityMode==="original"?t.push("original analyzer severities"):e.severityMode==="corrected"&&t.push("corrected severities"),e.revalidation===!1?t.push("code view \u2014 the revalidation pass is not applied"):e.revalidation===!0&&(e.revalidationDetail===!0?t.push("detailed app view \u2014 the revalidation pass is applied, with the rows it re-rated"):e.revalidationDetail===!1?t.push("app view \u2014 the revalidation pass is applied, standing in for the rows it re-rated"):t.push("app view \u2014 the revalidation pass is applied")),t.join(" \xB7 ")}function FN(e){if(!e)return"";let t=Number(e.included)||0,r=Number(e.total)||0;return r===0?"no findings":t>=r?`all ${qa(r,"finding")}`:`${t} of ${qa(r,"finding")} (${r-t} filtered out)`}function BN(e,t,r){let n=[],o=(p,f)=>{f&&n.push(`- **${p}:** ${f}`)},i=Array.isArray(e.reports)?e.reports:[],s=[...new Set(i.map(p=>kt[p?.source]??"").filter(Boolean))];o("Source",s.join(", "));let a=i.map(p=>p?.name).filter(Boolean);o(a.length===1?"Report":"Reports",a.map(p=>ht(p)).join(", ")),o("Workspace",typeof e.workspace=="string"?e.workspace.trim():""),t.repo&&o("Repository",Tv(t.repo));let c=[...new Set(r.map(t.analyzerOf).filter(Boolean))],u=c.length===s.length&&c.every(p=>s.includes(p));return c.length>0&&!u&&o(c.length===1?"Analyzer":"Analyzers",c.join("; ")),e.generatedAt&&o("Exported",D2(e.generatedAt)),o("View",LN(e.view)),Array.isArray(e.filters)&&o("Filters",e.filters.length>0?e.filters.map(p=>`${p.label}: ${p.value}`).join(" \xB7 "):"none"),o("Included",FN(e.counts)),n.join(`
|
|
78
|
+
`)}function ON(e,t){let r=new Map;for(let s of e){let a=ue(s[0],t.severityMode)??"informational";r.has(a)||r.set(a,[]),r.get(a).push(s)}let n=[...Ne,...[...r.keys()].filter(s=>!Ne.includes(s))],o=new Set,i=[];for(let s of n)for(let a of r.get(s)??[]){let c=i.length+1,u=Iv(a[0]),p=`${c}. ${u}`;i.push({group:a,number:c,severity:s,title:u,headingText:p,slug:P2(p,o)})}return i}function E5(e){let t=new Map;for(let r of e)t.set(r.severity,(t.get(r.severity)??0)+1);return t}function NN(e,t){let r={flagged:0,marked:0,commented:0,fixed:0};for(let{group:o}of e)for(let i of o){let s=t.hooks.annotation(i);s&&(s.flagged===!0&&r.flagged++,s.color&&r.marked++,s.comment&&r.commented++,s.fix&&r.fixed++)}let n=[];return r.flagged&&n.push(`${r.flagged} flagged`),r.marked&&n.push(`${r.marked} colour-marked`),r.commented&&n.push(`${r.commented} commented`),r.fixed&&n.push(`${r.fixed} with a fix link`),n.length>0?`Annotations: ${n.join(", ")}.`:""}function PN(e){let t=e.some(({group:o})=>o.some(i=>i.confidence!==void 0&&i.confidence!==null)),r=["#","Severity","Finding","Location"];t&&r.push("Confidence");let n=e.map(o=>{let i=o.group[0],s=o.group.length>1?` (${qa(o.group.length,"case")})`:"",a=xt(i),c=[String(o.number),Tn(o.severity),$s(gv(N2(o.title)),`#${o.slug}`)+s,a?gv(ht(a)):""];return t&&c.push(i.confidence===void 0||i.confidence===null?"":`${i.confidence}/10`),c});return bv(r,n,["right"])}function DN(e,t){let r=[Ln(2,"Summary")];if(e.length===0)return[...r,"No findings are included."];let n=[...E5(e)].map(([i,s])=>[Tn(i),String(s)]);n.push(["**Total**",`**${e.length}**`]),r.push(bv(["Severity","Findings"],n,["left","right"]));let o=NN(e,t);return o&&r.push(o),r.push(PN(e)),r}function zN(e,t){let r=E5(e),n=[],o=null;for(let i of e)i.severity!==o&&(o=i.severity,n.push(Ln(2,`${Tn(o)} (${r.get(o)})`))),n.push(S5(i.group,t,{headingText:i.headingText,depth:3}));return n}function Lv(e={},t={}){let r=AN(t),n=(Array.isArray(e.groups)?e.groups:[]).map(c=>Array.isArray(c)?c:[c]).map(c=>c.filter(u=>u&&typeof u=="object")).filter(c=>c.length>0),o=n.flat(),i=TN(e,r,o),s=ON(n,i),a=[MN,Ln(1,typeof e.title=="string"&&e.title.trim()?e.title.trim():"Findings"),BN(e,i,o),...DN(s,i),...zN(s,i)];return`${sd(a)}
|
|
79
|
+
`}var MN,RN,M5=k(()=>{xs();Va();C5();ad();MN="<!-- DeepView findings export -->",RN={annotation:()=>null,location:e=>typeof e?.location=="string"?e.location:null,evidence:e=>typeof e?.url=="string"?e.url:null,commit:()=>null,report:()=>null}});function mt(e){return Array.isArray(e?.findings)?e.findings:Array.isArray(e?.groups)?e.groups:null}function If(e,t){return typeof t=="string"&&/\.csv$/iu.test(t)?"codex":sn(e).format}function sn(e){let t;try{let r=JSON.parse(e);if(mt(r)){for(let n of A5(mt(r)))Tt(n);return{data:r,format:"json",reason:null}}return{data:null,format:null,reason:"JSON, but not a report: no findings array"}}catch(r){t=r}for(let[r,n]of UN){let o=n(e);if(o)return{data:o,format:r,reason:null}}return{data:null,format:null,reason:`Not JSON, and not a recognized markdown format. (JSON error: ${t.message})`}}function R5(e){let{data:t}=sn(e);return t?{count:mt(t).length,source:t.source,recognized:!0}:{count:0,recognized:!1}}function A5(e){return e.flat().filter(t=>t&&typeof t=="object")}async function Fv(e){for(let n of e)Tt(n);let t=e.filter(n=>!n.id);if(t.length===0)return;let r=await Promise.all(t.map(pv));t.forEach((n,o)=>{r[o]&&(n.id=r[o])})}async function nr(e){let{data:t,format:r}=sn(e);if(!t)return null;let n=A5(mt(t));return await Fv(n),{format:r,data:t,findings:n}}var UN,ge=k(()=>{F2();n5();d5();v5();yf();In();y5();yf();_f();w5();M5();Va();xs();Lr();ad();UN=[["deepview-md",r5],["deepsec",L2],["piolium",g5],["claude-security",l5]]});function I5(){Ja=null}function fd(){return C()&&Ja?.teamId===l.currentManagedTeam&&Ja?.userId===l.managedSession?.id&&Ja?.role===l.managedSession?.role?Ja:null}function T5(e,t){let r=new Map,n=new Map,o=[],i=[];for(let s of t){let a=s.data;if(a.source==="links"&&Array.isArray(a.links)){o.push({id:s.id,name:s.filename,groups:a.links,skipped:0}),gf(a.links,n);continue}for(let[c,u]of(mt(a)??[]).entries()){let p=(Array.isArray(u)?u:[u]).filter(h=>h&&typeof h=="object").map(h=>{let g={...h,_managedReportId:s.id,_reportName:s.filename,_repoFallback:s.repo.github,_repoDirectory:s.repo.directory,_source:h.source??a.source??null,_bundleHashes:a.bundleHashes??[]};return mo(g,a),g._analyzer=g._source??g.type??null,"isApp"in g||(g.isApp=nn(g,g._source)),g}),f={report:s.filename,managedReportId:s.id,index:c,members:p};i.push(f);for(let h of p)r.has(h.id)||r.set(h.id,[]),r.get(h.id).push(f)}}Ja={teamId:e,userId:l.managedSession?.id,role:l.managedSession?.role,links:o,rows:i,byId:r,duplicates:n},l.linksTick++,l.findingIndexTick++}function Tf(e){let t=fd();return[...new Set(e.flatMap(r=>t?.byId.get(r)??[]))]}function L5(e){for(let t of Tf([e])){let r=Ge(t.members.find(n=>n.id===e));if(r)return r}return""}var Ja,hd=k(()=>{"use strict";rr();hs();ge();Ja=null});function ni(e){if(e?.name!==HN)return!1;let t=e.version;return!t||t===jN}function B5(e){let t=e?.package?.npm,r=t?.version;if(typeof r=="string"&&r&&!ni(t))return r;let n=e?.file;if(!n)return null;let o=/(?:^|\/)node_modules\/\.pnpm\/([^/]+)\/node_modules\//u.exec(n);if(!o)return null;let i=o[1],s=i.indexOf("_");s>0&&(i=i.slice(0,s));let a=i.lastIndexOf("@");return a<=0?null:i.slice(a+1)||null}function Lf(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function Ff(e,t,r,n){e.reports.add(r);let o=e._keyReports.get(t);o||e._keyReports.set(t,o=new Set);let i=!o.has(r);return o.add(r),e.keys.has(t)||(e.keys.add(t),e.findings.push(n),e.files.has(n.file)||e.files.set(n.file,[]),e.files.get(n.file).push(n)),i}function Bf(e,t,r,n){e._keyReports.delete(t),e.keys.delete(t);let o=e.findings.findIndex(a=>n(a)===t);o>=0&&e.findings.splice(o,1);let i=e.files.get(r);if(!i)return;let s=i.findIndex(a=>n(a)===t);s>=0&&i.splice(s,1),i.length===0&&e.files.delete(r)}function Of(e){let t=new Set;for(let r of e._keyReports.values())for(let n of r)t.add(n);e.reports=t}function O5(e,t,r,n,o){let i=e.byVersion.get(t);i||(i=Lf(),e.byVersion.set(t,i)),Ff(i,n,o,r)}function N5(e,t,r,n,o,i){let s=e.byVersion.get(t);if(!s)return;let a=s._keyReports.get(r);if(a&&(a.delete(o),a.size===0&&Bf(s,r,n,i)),s._keyReports.size===0){e.byVersion.delete(t);return}Of(s)}function Bv(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[r,n=""]=F5(e,"-"),[o,i=""]=F5(t,"-"),s=r.split("."),a=o.split("."),c=Math.max(s.length,a.length);for(let u=0;u<c;u++){let p=s[u]??"0",f=a[u]??"0",h=/^\d+$/u.test(p),g=/^\d+$/u.test(f);if(h&&g){let b=Number(f)-Number(p);if(b!==0)return b}else{let b=f.localeCompare(p);if(b!==0)return b}}return n===""&&i!==""?-1:n!==""&&i===""?1:i.localeCompare(n)}function F5(e,t){let r=e.indexOf(t);return r<0?[e,""]:[e.slice(0,r),e.slice(r+1)]}var HN,jN,Ov=k(()=>{"use strict";HN="solidity-bundle",jN="0.0.0"});async function Za(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}async function On(e,{maxBytes:t}={}){let r=new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"));if(t==null)return new Uint8Array(await new Response(r).arrayBuffer());let n=r.getReader(),o=[],i=0;for(;;){let{value:c,done:u}=await n.read();if(u)break;if(i+=c.length,i>t){try{await n.cancel()}catch{}throw new Error(`gunzipBytes: decompressed size exceeds ${t}-byte cap`)}o.push(c)}let s=new Uint8Array(i),a=0;for(let c of o)s.set(c,a),a+=c.length;return s}async function md(e){return await Za(xe(e))}async function Ss(e){return at(await On(e))}var Qa=k(()=>{"use strict";Dt()});async function P5(e){let t=await crypto.subtle.digest("SHA-512",e);return`sha512-${new Uint8Array(t).toBase64()}`}var D5=k(()=>{"use strict"});function H5(e,t,r,n){return navigator.locks.request(`deepview-storage/${e}/${t}`,{mode:r},n)}function j5(e,t,r){return H5(e,t,"shared",r)}function vd(e,t,r){return H5(e,t,"exclusive",()=>navigator.locks.request($n,{mode:"shared"},r))}async function Hv(e,{create:t,warnOnce:r=!1}={}){try{return await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:t})}catch(n){return r&&!z5&&(z5=!0,console.warn("OPFS unavailable, falling back to gzipped localStorage (limited quota).",n)),null}}async function yd(e,t){let r=await e.createWritable();try{await r.write(t),await r.close()}catch(n){try{await r.abort(n)}catch{}throw n}}async function jv(e,t){if(!zt(e))return e;if(!pt())throw new Error(`storage: vault locked, cannot decrypt "${t}"`);return await d2(e,t)}function zf(e){return e.length===0?!0:e.length>=18&&e[0]===31&&e[1]===139&&e.at(-4)===0&&e.at(-3)===0&&e.at(-2)===0&&e.at(-1)===0}async function Vv(e,t){gd(e)===t&&(console.warn(`storage: report "${e}" is an empty/corrupt on-disk entry \u2014 quarantining, will read as missing`),await navigator.locks.request($n,{mode:"exclusive"},async()=>{if(gd(e)!==t)return;je(e),Br.delete(e);let r=await si();if(r)try{await r.removeEntry(e)}catch{}Uf(e),je(e),Cs(e,"delete")}))}async function Wv(e,t,r){try{(await t.getFile()).size===0&&await e.removeEntry(r)}catch{}}async function el(e,t,r,n,o=()=>{}){if(me()&&!pt())throw o(),new Error(`storage: vault locked, cannot save ${n}`);let i=pt(),s=i?await t(e,r):e;if(pt()!==i)throw o(),new Error(`storage: vault state changed mid-save for ${n}; retry`);return s}function si(){return Hv(VN,{create:!0,warnOnce:!0})}function Nf(e){try{return localStorage.getItem(ii+e)}catch{return null}}function Uf(e){try{localStorage.removeItem(ii+e)}catch{}}function WN(){let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r&&r.startsWith(ii)&&e.push(r.slice(ii.length))}return e}function je(e){Nv.set(e,(Nv.get(e)??0)+1)}function gd(e){return Nv.get(e)??0}function kr(e){return Pv.add(e),()=>Pv.delete(e)}function Cs(e,t){for(let r of Pv)try{r(e,t)}catch(n){console.warn("storage file-change listener:",n)}}async function fe(){let e=new Set(WN()),t=await si();if(t)for await(let[r]of t.entries())e.add(r);return[...e].toSorted()}async function Or(e,t){if(typeof e!="string"||e.includes("\0"))throw new Error("Invalid report name: contains NUL byte or is not a string");if(t==="")throw new Error(`Refusing to save empty report "${e}"`);return je(e),vd("report",e,async()=>{let r=await si();if(r){let i=await Za(xe(t));i=await el(i,Kp,e,`"${e}"`,()=>je(e));let s=await r.getFileHandle(e,{create:!0}),a=await s.createWritable();try{await a.write(i),await a.close()}catch(c){Br.delete(e),je(e);try{await a.abort(c)}catch{}throw await Wv(r,s,e),c}Br.set(e,t),je(e),Uf(e),Cs(e,"save");return}let n=xe(t);n=await Za(n),n=await el(n,Kp,e,`"${e}"`,()=>je(e));let o=n.toBase64();try{localStorage.setItem(ii+e,o),Br.set(e,t),je(e),Cs(e,"save")}catch(i){throw je(e),new Error(`localStorage write failed for ${e}: ${i.message}`,{cause:i})}})}async function U5(e,t){let r=Nf(e);if(r===null)return null;let n=Uint8Array.fromBase64(r);if(n=await jv(n,e),zf(n))throw await Vv(e,t),new Error(`File not found: ${e}`);return at(await On(n))}async function De(e){if(Br.has(e))return Br.get(e);if(oi.has(e))return oi.get(e);let t=gd(e),r=(async()=>{let n=await si();if(n){let i;try{i=await n.getFileHandle(e)}catch(u){if(u instanceof DOMException&&u.name==="NotFoundError"){let p=await U5(e,t);if(p!==null)return Or(e,p).catch(f=>{console.warn(`storage: stranded-localStorage migration of "${e}" failed:`,f)}),p}throw u}let s=await i.getFile(),a=new Uint8Array(await s.arrayBuffer());if(a=await jv(a,e),zf(a))throw await Vv(e,t),new Error(`File not found: ${e}`);if(a.length>=2&&a[0]===31&&a[1]===139){let u=await On(a);return at(u)}let c=at(a);return Or(e,c).catch(u=>{console.warn(`storage: legacy-uncompressed migration of "${e}" failed:`,u)}),c}let o=await U5(e,t);if(o===null)throw new Error(`File not found: ${e}`);return o})();oi.set(e,r);try{let n=await r;return gd(e)===t&&Br.set(e,n),n}finally{oi.delete(e)}}async function ai(e){let t=gd(e),r=await si(),n;if(r){let o=null;try{o=await r.getFileHandle(e)}catch(i){if(!(i instanceof DOMException)||i.name!=="NotFoundError")throw i;let s=Nf(e);if(s===null)throw i;n=Uint8Array.fromBase64(s)}if(o){let i=await o.getFile();n=new Uint8Array(await i.arrayBuffer())}}else{let o=Nf(e);if(o===null)throw new Error(`File not found: ${e}`);n=Uint8Array.fromBase64(o)}if(n=await jv(n,e),zf(n))throw await Vv(e,t),new Error(`File not found: ${e}`);return n}async function V5(e){let t=await ai(e),r=t[0]===31&&t[1]===139?await On(t):t;return at(r)}async function Gv(e,t){if(typeof e!="string"||e.includes("\0"))throw new Error("Invalid report name: contains NUL byte or is not a string");if(zf(t))throw new Error(`Refusing to save empty report bytes for "${e}"`);return je(e),Br.delete(e),vd("report",e,async()=>{let r=await el(t,Kp,e,`"${e}"`,()=>je(e)),n=await si();if(n){let o=await n.getFileHandle(e,{create:!0}),i=await o.createWritable();try{await i.write(r),await i.close()}catch(s){je(e);try{await i.abort(s)}catch{}throw await Wv(n,o,e),s}je(e),Uf(e),Cs(e,"save");return}try{localStorage.setItem(ii+e,r.toBase64()),je(e),Cs(e,"save")}catch(o){throw je(e),new Error(`localStorage write failed for ${e}: ${o.message}`,{cause:o})}})}async function tl(e){return je(e),Br.delete(e),oi.delete(e),vd("report",e,async()=>{let t=await si();if(t){try{await t.removeEntry(e)}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw je(e),r}Uf(e),je(e),Cs(e,"delete");return}localStorage.removeItem(ii+e),je(e),Cs(e,"delete")})}function W5(e){return Dv.add(e),()=>Dv.delete(e)}function Df(e,t){for(let r of Dv)try{r(e,t)}catch(n){console.warn("storage bundle-change listener:",n)}}function Ms(){return Hv(Uv,{create:!0})}function Es(e){return e.replaceAll("/","_")}async function Kv(e){let t;try{let o=await(await e.getFileHandle(bd)).getFile();t=new Uint8Array(await o.arrayBuffer())}catch(n){return n instanceof DOMException&&n.name==="NotFoundError"?[]:(console.warn("readBundleMeta: failed to read _meta.json:",n),[])}let r=t;if(zt(t)){if(!pt())return console.warn("readBundleMeta: vault locked, returning empty bundle list"),[];try{r=await Yp(t,zv)}catch(o){return console.warn("readBundleMeta: decrypt failed (tampering, key mismatch, or vault identity drift):",o),[]}}try{let n=JSON.parse(at(r));return Array.isArray(n)?n:[]}catch(n){return console.warn("readBundleMeta: JSON.parse failed:",n),[]}}async function G5(e,t){let r=xe(JSON.stringify(t));r=await el(r,qp,zv,"bundle metadata");try{await e.removeEntry(bd)}catch{}let n=await e.getFileHandle(bd,{create:!0});await yd(n,r)}function qv(e){return navigator.locks.request(K5,e)}async function Vt(){let e=await Ms();return e?[...await navigator.locks.request(K5,{mode:"shared"},()=>Kv(e))].toSorted((r,n)=>r.name.localeCompare(n.name)):[]}function wd(){return Y5(()=>!0)}function q5(){return Y5((e,t)=>t.kind==="file"&&/^sha512-[A-Za-z0-9+_]{86}==$/u.test(e))}async function Y5(e){if(typeof navigator>"u"||!navigator.storage?.getDirectory)return!1;let t=await Hv(Uv,{create:!1});if(!t)return!1;try{for await(let[r,n]of t.entries())if(e(r,n))return!0}catch{}return!1}async function Rs(e,t){let r=await Ms();if(!r)throw new Error(`Cannot save bundle ${e}: OPFS unavailable`);let n=t instanceof Uint8Array?t:xe(t),o=await P5(n),i=Es(o),s=e.toLowerCase().endsWith(".map")?await Za(n):n;return vd("bundle",o,async()=>{s=await el(s,qp,o,`bundle "${e}"`);try{await r.removeEntry(i)}catch{}let a=await r.getFileHandle(i,{create:!0});await yd(a,s);try{await qv(async()=>{let c=await Kv(r),u=c.findIndex(p=>p.integrity===o);u>=0?c[u]={integrity:o,name:e}:c.push({integrity:o,name:e}),await G5(r,c)})}catch(c){try{await r.removeEntry(i),Df(o,"delete")}catch{}throw c}return Df(o,"save"),{integrity:o,name:e}})}async function Yv(e){let t=await Ms();if(t)return vd("bundle",e,async()=>{try{await t.removeEntry(Es(e))}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw r}Df(e,"delete");try{await qv(async()=>{try{await t.removeEntry(Es(e)+Pf)}catch(o){if(!(o instanceof DOMException)||o.name!=="NotFoundError")throw o}let r=await Kv(t),n=r.filter(o=>o.integrity!==e);n.length!==r.length&&await G5(t,n)})}finally{Df(e,"delete")}})}async function an(e){let t=await Ms();if(!t)throw new Error("OPFS unavailable");let n=await(await t.getFileHandle(Es(e))).getFile(),o=new Uint8Array(await n.arrayBuffer());if(zt(o)){if(!pt())throw new Error(`storage: vault locked, cannot read bundle "${e}"`);o=await Yp(o,e)}return o.length>=2&&o[0]===31&&o[1]===139?await On(o):o}async function Xv(e){let t=await Ms();if(!t||me()&&!pt())return null;try{let r=await t.getFileHandle(Es(e)+Pf),n=new Uint8Array(await(await r.getFile()).arrayBuffer());return zt(n)&&(n=await Yp(n,e+Pf)),JSON.parse(at(await On(n)))}catch{return null}}async function Jv(e,t){let r=await Za(xe(JSON.stringify(t)));return navigator.locks.request($n,{mode:"shared"},()=>qv(async()=>{let n=await Ms();if(!n)return;await n.getFileHandle(Es(e));let o=e+Pf,i=await el(r,qp,o,"bundle index"),s=await n.getFileHandle(Es(o),{create:!0});await yd(s,i)}))}async function GN(e,t){let r=await si();if(r){let s=null;try{s=await r.getFileHandle(e)}catch(a){if(!(a instanceof DOMException)||a.name!=="NotFoundError")throw a}if(s){let a=await s.getFile(),c=new Uint8Array(await a.arrayBuffer()),u=await t(c);if(u===null)return;Br.delete(e),oi.delete(e),je(e);let p=await r.getFileHandle(e,{create:!0});try{await yd(p,u)}catch(f){throw await Wv(r,p,e),f}je(e);return}}let n=Nf(e);if(n===null)return;let o=Uint8Array.fromBase64(n),i=await t(o);i!==null&&(Br.delete(e),oi.delete(e),je(e),localStorage.setItem(ii+e,i.toBase64()),je(e))}function X5(e,t){return e.seal?r=>zt(r)?null:e.seal(r,t):r=>zt(r)?e.open(r,t):null}async function J5(e){let t=await fe();for(let r of t)try{await GN(r,X5(e,Wp(r)))}catch(n){if(n instanceof DOMException&&n.name==="NotFoundError")continue;throw n}}async function KN(){let e=await Ms();if(!e)return{dir:null,keys:[]};let t=[];for await(let[r]of e.entries())t.push(r);return{dir:e,keys:t}}function qN(e){return e===bd?zv:e.startsWith("sha512-")?e.replaceAll("_","/"):null}async function YN(e,t,r){let o=await(await e.getFileHandle(t)).getFile(),i=new Uint8Array(await o.arrayBuffer()),s=await r(i);if(s===null)return;let a=await e.getFileHandle(t,{create:!0});await yd(a,s)}async function Z5(e){let{dir:t,keys:r}=await KN();if(t)for(let n of r){let o=qN(n);if(o!==null)try{await YN(t,n,X5(e,Gp(o)))}catch(i){if(i instanceof DOMException&&i.name==="NotFoundError")continue;throw i}}}var zv,VN,Uv,ii,z5,Br,oi,Nv,Pv,bd,Pf,Dv,K5,Zv,Qv,ey,ty,xr=k(()=>{"use strict";Dt();Qa();D5();Oa();zv="__meta__",VN="deepview-reports",Uv="deepview-bundles",ii="deepview.report:";z5=!1;Br=new Map,oi=new Map,Nv=new Map;Pv=new Set;bd="_meta.json",Pf=".index-v1",Dv=new Set;K5=`${Uv}/${bd}`;Zv=({seal:e})=>J5({seal:e}),Qv=({open:e})=>J5({open:e});ey=({seal:e})=>Z5({seal:e}),ty=({open:e})=>Z5({open:e});tt(()=>{Br.clear(),oi.clear()})});function XN(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!ni(t))return t.name;if(!e?.file)return null;let r=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,n;for(;(n=r.exec(e.file))!==null;)if(n[1]!==".pnpm")return n[1];return null}function JN(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function ZN(e,t){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:typeof t=="string"&&t?t:null}function oy(e){return ry.add(e),()=>ry.delete(e)}function iy(){for(let e of ry)try{e()}catch{}}function sy(e){return As.get(e)?.list??[]}function ay(){let e=0;for(let t of As.values())e+=t.list.length;return e}function Nn(){return rl}function Ts(){return nl}function $d(e,t){let r=As.get(e);if(!r)return[];let n=r.reports.get(li(t));return n?[...n]:[]}function ly(e,t){let r=rl.get(e);if(!r)return[];let n=r._keyReports.get(li(t));return n?[...n]:[]}function cy(e,t){let r=nl.get(e);if(!r)return[];let n=r._keyReports.get(li(t));return n?[...n]:[]}function Ls(e){return C()?[...new Set(Tf([e]).map(t=>t.report))]:[...Is.get(e)?.reports.keys()??[]]}function dy(e){if(C())return L5(e);for(let{title:t}of Is.get(e)?.reports.values()??[])if(t)return t;return""}function ci(e){if(C())return Tf(e);let t=new Set;for(let r of e)for(let n of Is.get(r)?.reports.values()??[])for(let o of n.rows)t.add(o);return[...t]}function li(e){return e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`}function jf(e,t,r){let n=Hf.get(e);n||(n={hash:[],pkg:[],repo:[],id:[]},Hf.set(e,n)),n[t].push(r)}function QN(e,t,r){let n=Is.get(e.id);n||Is.set(e.id,n={reports:new Map});let o=n.reports.get(t);return o?(o.rows.add(r),!1):(n.reports.set(t,{title:Ge(e),rows:new Set([r])}),jf(t,"id",e.id),!0)}function e9(e,t,r){let n=As.get(e.fileHash);n||(n={keys:new Set,list:[],reports:new Map},As.set(e.fileHash,n));let o=n.reports.get(t);o||(o=new Set,n.reports.set(t,o));let i=!o.has(r);return o.add(r),i&&jf(r,"hash",{hash:e.fileHash,key:t}),n.keys.has(t)?i:(n.keys.add(t),n.list.push(e),!0)}function t9(e,t,r){let n=XN(e);if(!n)return!1;let o=B5(e),i=rl.get(n);if(i||(i={...Lf(),repos:new Set,byVersion:new Map,_repoReports:new Map},rl.set(n,i)),typeof e.repo?.github=="string"&&e.repo.github){i.repos.add(e.repo.github);let a=i._repoReports.get(e.repo.github);a||i._repoReports.set(e.repo.github,a=new Set),a.add(r)}O5(i,o,e,t,r);let s=Ff(i,t,r,e);return jf(r,"pkg",{pkg:n,key:t,file:e.file,version:o}),s}function r9(e,t,r,n){if(JN(e))return!1;let o=ZN(e,n);if(!o)return!1;let i=nl.get(o);i||(i=Lf(),nl.set(o,i));let s=Ff(i,t,r,e);return s&&jf(r,"repo",{repo:o,key:t,file:e.file}),s}function uy(e){let t=Hf.get(e);if(Hf.delete(e),xd.delete(e),!t)return!1;let r=!1;for(let{hash:o,key:i}of t.hash){let s=As.get(o);if(!s)continue;let a=s.reports.get(i);if(a){if(a.delete(e)&&(r=!0),a.size===0){s.reports.delete(i),s.keys.delete(i);let c=s.list.findIndex(u=>li(u)===i);c>=0&&s.list.splice(c,1)}s.keys.size===0&&As.delete(o)}}let n=new Set;for(let{pkg:o,key:i,file:s,version:a}of t.pkg){let c=rl.get(o);if(!c)continue;let u=c._keyReports.get(i);if(u){if(u.delete(e)&&(r=!0),u.size===0&&Bf(c,i,s,li),N5(c,a,i,s,e,li),!n.has(o)){n.add(o);for(let p of[...c._repoReports.keys()]){let f=c._repoReports.get(p);f?.delete(e)&&f.size===0&&(c._repoReports.delete(p),c.repos.delete(p),r=!0)}}c._keyReports.size===0?rl.delete(o):Of(c)}}for(let{repo:o,key:i,file:s}of t.repo){let a=nl.get(o);if(!a)continue;let c=a._keyReports.get(i);c&&(c.delete(e)&&(r=!0),c.size===0&&Bf(a,i,s,li),a._keyReports.size===0?nl.delete(o):Of(a))}for(let o of t.id){let i=Is.get(o);i&&(i.reports.delete(e)&&(r=!0),i.reports.size===0&&Is.delete(o))}return r}async function n9(e){if(xd.has(e))return!1;xd.add(e);try{let t=await De(e),r=await nr(t);if(!r)return!1;let{data:n,findings:o}=r;if(o.length===0)return!1;for(let a of o)mo(a,n);go(mt(n).map(a=>Array.isArray(a)?a:[a]),{source:n.source});let i=$t(n)??"";if(!i)try{i=Ut(e)}catch{}let s=!1;for(let a of o){let c=li(a);a.fileHash&&e9(a,c,e)&&(s=!0),a.file&&t9(a,c,e)&&(s=!0),a.file&&r9(a,c,e,i)&&(s=!0)}for(let[a,c]of mt(n).entries()){let u=(Array.isArray(c)?c:[c]).filter(f=>f?.id);if(u.length===0)continue;let p={report:e,index:a,members:u.map(f=>{let h=f.source??n.source??null;return{id:f.id,title:Ge(f),source:h,revalidate:$e(f),isApp:f.isApp??nn(f,h),isSecurity:f.isSecurity}})};for(let f of u)QN(f,e,p)&&(s=!0)}return xd.has(e)?s:(uy(e),ny=!0,!1)}catch{return xd.delete(e),!1}}function Nr(){return C()?Promise.resolve():kd||(kd=(async()=>{try{do{ny=!1;let e=await fe();for(let t of e)await n9(t)&&iy()}while(ny)}finally{kd=null}})(),kd)}var As,rl,nl,Is,Hf,xd,ry,kd,ny,Q5=k(()=>{"use strict";rr();hd();Ov();xr();rr();ge();As=new Map,rl=new Map,nl=new Map,Is=new Map,Hf=new Map;xd=new Set,ry=new Set,kd=null,ny=!1;kr(e=>{uy(e)&&iy()});y2(e=>{uy(e)&&iy(),Nr().catch(()=>{})})});function fy(e){return py.add(e),()=>py.delete(e)}function eC(){for(let e of py)try{e()}catch{}}function Sd(e,t){if(!e||!t)return!1;let r=!ol.has(e);ol.set(e,t),Vf.delete(e);for(let[n,o]of t){if(!o)continue;let i=_d.get(o);i||(i=new Map,_d.set(o,i)),i.set(e,n)}return r&&eC(),r}function hy(e){let t=ol.get(e);if(ol.delete(e),Vf.delete(e),!!t){for(let r of t.values()){let n=_d.get(r);n&&(n.delete(e),n.size===0&&_d.delete(r))}eC()}}function my(e,t){let r=ol.get(e);if(!r||typeof t!="string"||t==="")return null;if(r.has(t))return t;let n=o9(e,r).get(tC(t));if(!n)return null;let o=t.startsWith("/")?t:`/${t}`,i=null;for(let s of n)if(s.endsWith(o)){if(i!==null)return null;i=s}return i}function tC(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function o9(e,t){let r=Vf.get(e);if(r)return r;r=new Map;for(let n of t.keys()){let o=tC(n),i=r.get(o);i?i.push(n):r.set(o,[n])}return Vf.set(e,r),r}function Fs(e){if(!e)return[];let t=_d.get(e);if(!t)return[];let r=[];for(let[n,o]of t)r.push({integrity:n,file:o});return r}function gy(e){return ol.has(e)}var _d,ol,Vf,py,rC=k(()=>{"use strict";_d=new Map,ol=new Map,Vf=new Map,py=new Set});function Gf(){return Ed||(Ed=s9(),Ed)}function s9(e=Le(nC)){let t;try{t=JSON.parse(e||"{}")}catch{t={}}return i9.has(t?.__v)?t.__v=by:t={__v:by},t}function vy(){lt(nC,JSON.stringify(Ed)).catch(e=>console.warn("counts persist:",e))}function oC(e,t=Gf()){if(e==="__v")return;let r=t[e];if(r!==void 0)return typeof r=="number"?{count:r}:r}function Md(e){return oC(e)?.count}function Lt(e){return oC(e)?.source}function Wt(e,t,r){let n=Gf();n[e]={count:t,source:r??null},vy()}function sl(e){let t=Gf();delete t[e],vy()}function Gt(e){let t=Ir(e);return t?{count:mf(t.groups),source:Xe,recognized:!0}:R5(e)}function a9(e,t){for(let{names:r,onUpdate:n}of Wf)if(r.has(e))try{n(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function yy(e,t){if(Cd){t&&Wf.push({names:new Set(e),onUpdate:t});for(let r of e)il.add(r);return Cd}return il=new Set(e),Wf=t?[{names:new Set(e),onUpdate:t}]:[],Cd=(async()=>{await Promise.resolve();try{let r=Gf();for(;il.size>0;){let n=il.values().next().value;if(il.delete(n),r[n]===void 0)try{let o=await De(n);if(r[n]!==void 0)continue;let{count:i,source:s}=Gt(o);r[n]=s?{count:i,source:s}:{count:i},vy(),a9(n,i)}catch{}}}finally{Cd=null,il=null,Wf=null}})(),Cd}var nC,by,i9,Ed,Cd,il,Wf,al=k(()=>{"use strict";xr();ge();hs();en();nC="deepview.fileCounts",by=4,i9=new Set([3,by]),Ed=null;Cd=null,il=null,Wf=null});async function Rd(e){let t=Uint8Array.fromBase64(e),r=xe(l9),n=new Uint8Array(r.length+t.length);n.set(r,0),n.set(t,r.length);let o=new Uint8Array(await crypto.subtle.digest("SHA-256",n)),s=Array.from(o.subarray(0,16),u=>u.toString(16).padStart(2,"0")).join("").split("");s[12]="8";let a=parseInt(s[16],16)&3|8;s[16]=a.toString(16);let c=s.join("");return`${c.slice(0,8)}-${c.slice(8,12)}-${c.slice(12,16)}-${c.slice(16,20)}-${c.slice(20,32)}`}var l9,wy=k(()=>{"use strict";Dt();l9=`deepview/workspace-id/v1
|
|
80
|
+
`});function Ad(e){let t=new Set;function r(o){return t.add(o),()=>t.delete(o)}function n(o){for(let i of t)try{i(o)}catch(s){console.warn(`workspace ${e} listener failed:`,s)}}return{on:r,fire:n}}var iC,sC,aC,lC,cC,c9,Id,ky,Td,xy,Kf,$y,_y,qf,Yf,Sy=k(()=>{"use strict";iC=Ad("create"),sC=Ad("delete"),aC=Ad("privateKey"),lC=Ad("report-membership"),cC=Ad("bundle-membership"),c9=iC.on,Id=sC.on,ky=aC.on,Td=lC.on,xy=cC.on,Kf=iC.fire,$y=sC.fire,_y=aC.fire,qf=lC.fire,Yf=cC.fire});function Ld(){try{let e=Le(Ey);if(!e)return[];let t=JSON.parse(e);return t&&typeof t=="object"&&Array.isArray(t.workspaces)?t.workspaces:Array.isArray(t)?t:[]}catch{return[]}}async function u9(e){await lt(Ey,JSON.stringify({version:d9,workspaces:e}))}function ll(e){return navigator.locks.request(p9,async()=>{await Cn();let t=Ld(),r=await e(t);if(r!==!1)return await u9(t),r})}function Fd(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}function Bd(){ln=Ld().map(Fd)}function My(e){ln=ln.filter(t=>t.id!==e.id),ln.push(Fd(e))}function f9(e,t){let r=Array.isArray(e[t])?[...e[t]]:[],n=ln.find(o=>o.id===e.id);if(n){n[t]=r;return}ln.push(Fd(e))}function h9(e){ln=ln.filter(t=>t.id!==e)}function Q(){let e=Ld();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}function Pn(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,m9)||null}async function Ry(e){let t=Pn(e);if(!t)return null;let r=new Uint8Array(32);crypto.getRandomValues(r);let n=r.toBase64(),o={id:await Rd(n),name:t,privateKey:n,reports:[],bundles:[],createdAt:Date.now()};return await ll(s=>s.some(a=>a.id===o.id)?!1:(s.push(o),o))?(My(o),o):null}async function Ay(e){await ll(r=>{let n=r.findIndex(o=>o.id===e);return n<0?!1:(r.splice(n,1),!0)})&&($y(e),h9(e))}async function Iy(e,t){let r=Pn(t);return!(!r||!await ll(o=>{let i=o.find(s=>s.id===e);return!i||i.name===r?!1:(i.name=r,i)}))}async function dC(e){let t=await ll(o=>{let i=o.findIndex(p=>p.id===e.id),s=i>=0?o[i]:null,a=Pn(e.name)??s?.name??"Workspace",c=e.preserveBundles?Array.isArray(s?.bundles)?s.bundles:[]:Array.isArray(e.bundles)?e.bundles:[],u={id:e.id,name:a,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...new Set(e.reports)]:[],bundles:[...new Set(c)],createdAt:e.createdAt??Date.now()};return i>=0?o[i]=u:o.push(u),{previous:s,next:u}}),{next:r}=t,n=ln.find(o=>o.id===r.id)??null;return n==null?Kf(r.id):(n.privateKey!==r.privateKey&&_y(r.id),Xf(n.reports,r.reports)||qf(r.id),Xf(n.bundles,r.bundles)||Yf(r.id)),My(r),r}async function Ty({id:e,name:t,privateKey:r,createdAt:n}){let o=null;return await ll(i=>{let s=Pn(t);if(!s)return o={status:"name-collision",existing:null},!1;let a=i.find(p=>p.id===e)??null;if(a)return o={status:"already-attached",workspace:a},!1;let c=i.find(p=>Pn(p.name)===s)??null;if(c)return o={status:"name-collision",existing:c},!1;let u={id:e,name:s,privateKey:r,reports:[],bundles:[],createdAt:n??Date.now()};i.push(u),o={status:"attached",workspace:u}}),o?.status==="attached"&&(Kf(o.workspace.id),My(o.workspace)),o}function Xf(e,t){let r=new Set(e),n=new Set(t);if(r.size!==n.size)return!1;for(let o of r)if(!n.has(o))return!1;return!0}async function Cy({identifier:e,workspaceId:t,field:r,fire:n,additive:o=!1,from:i=void 0}){let s=await ll(u=>{if((u.find(b=>Array.isArray(b[r])&&b[r].includes(e))?.id??null)===(t??null))return!1;let f=null;if(t!=null&&(f=u.find(b=>b.id===t)??null,!f))return!1;let h=new Set;if(!o)for(let b of u)i!==void 0&&b.id!==i||(Array.isArray(b[r])||(b[r]=[]),b[r].includes(e)&&(b[r]=b[r].filter(v=>v!==e),h.add(b.id)));if(f&&(Array.isArray(f[r])||(f[r]=[]),f[r].includes(e)||(f[r].push(e),h.add(f.id))),h.size===0)return!1;let g=new Map;for(let b of h){let v=u.find(x=>x.id===b);v&&g.set(b,v)}return{affected:h,snapshot:g}});if(!s)return;let{affected:a,snapshot:c}=s;for(let u of a){n(u);let p=c.get(u);p&&f9(p,r)}}function uC(e,t){return{move:(r,n)=>Cy({identifier:r,workspaceId:n,field:e,fire:t}),add:(r,n)=>Cy({identifier:r,workspaceId:n,field:e,fire:t,additive:!0}),remove:(r,n)=>Cy({identifier:r,field:e,fire:t,from:n})}}function g9(){let e=Ld().map(Fd),t=ln,r=new Map(t.map(o=>[o.id,o])),n=new Map(e.map(o=>[o.id,o]));for(let o of r.keys())n.has(o)||$y(o);for(let[o,i]of n){let s=r.get(o);if(!s){Kf(o);continue}s.privateKey!==i.privateKey&&_y(o),Xf(s.reports,i.reports)||qf(o),Xf(s.bundles,i.bundles)||Yf(o)}ln=e}var Ey,d9,p9,ln,m9,Ly,Fy,Od,Bs,Nd,By,Os,Oy,di=k(()=>{"use strict";wy();en();Sy();Ey="deepview.workspaces",d9=1;p9=Ey;ln=Ld().map(Fd);m9=200;Ly=uC("reports",qf),Fy=uC("bundles",Yf),Od=Ly.move,Bs=Ly.add,Nd=Ly.remove,By=Fy.move,Os=Fy.add,Oy=Fy.remove;Sn(()=>{g9()})});async function Ny(e){if(!e)return null;let t=Q(),n=(await Promise.all(t.map(o=>It("workspace",o.id)))).indexOf(e);return n===-1?null:t[n]}async function Py(e){if(!e)return null;let t=await fe(),n=(await Promise.all(t.map(o=>It("report",o)))).indexOf(e);return n===-1?null:t[n]}async function b9(e,t){let r;try{r=await De(e)}catch{return!1}return r==null?!1:(await nr(r))?.findings.some(o=>o.id===t)??!1}async function Dy(e,{skip:t=[]}={}){if(!e)return null;let r=new Set(t),n=(await fe()).filter(o=>!r.has(o));for(let o of n)if(await b9(o,e))return o;return null}function Pd(e){return e?Q().filter(t=>t.reports.includes(e)):[]}var pC=k(()=>{"use strict";za();xr();di();ge()});function zy(e){if(!e)return"";for(let t of e.split(`
|
|
81
|
+
`))if(t.trim())return t.trim();return""}function Uy(e){let t=new Set(e.map(n=>n.id)),r=new Map;for(let n of l.reports)for(let o of n.groups)for(let i of o){let s=i.id??String(i._id);if(!(!t.has(s)||r.has(s))&&(r.set(s,{severity:i.severity,file:i.file,line:i.line,description:zy(i.description)}),r.size===t.size))return r}return r}var Hy=k(()=>{"use strict";rr()});function Gy(){return C()||cn}function Ns(e){return jy.add(e),()=>jy.delete(e)}function cl(){for(let e of jy)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Ky(){let e=new Map;for(let t of ui.values())t&&gf(t.groups,e);Wy=e}function qy(){if(C())return fd()?.links??[];let e=[];for(let[t,r]of ui)r&&e.push({name:t,groups:r.groups,skipped:r.skipped});return e.toSorted((t,r)=>t.name.localeCompare(r.name))}function Yy(){return C()?!!fd()?.duplicates.size:Wy.size>0}function $r(e){if(C())return[...fd()?.duplicates.get(e)??[]];let t=Wy.get(e);return t?[...t]:[]}async function fC(e){if(ui.has(e))return!1;let t=Jf.get(e)??0,r;try{r=await De(e)}catch{return!1}if(r==null)return!1;if((Jf.get(e)??0)!==t)return Ud=!0,!1;let n=/^\s*\[/u.test(r)?Ir(r):null;if(ui.set(e,n),n&&Lt(e)!==Xe)Wt(e,mf(n.groups),Xe);else if(!n&&Lt(e)===Xe){let{count:o,source:i}=Gt(r);Wt(e,o,i)}return n!==null}function Zf(){return C()?Promise.resolve():zd||(zd=(async()=>{try{let e,t;do{t=Vy,e=await fe(),cn&&e.some(o=>!ui.has(o))&&(cn=!1,cl());let r=e.filter(o=>Lt(o)===Xe);(await Promise.all(r.map(o=>fC(o)))).some(Boolean)&&(Ky(),cl())}while(t!==Vy);return e}catch(e){throw cn&&(cn=!1,cl()),e}finally{zd=null}})(),zd)}function Hd(){return C()?Promise.resolve():Dd||(Dd=(async()=>{try{do{Ud=!1;let e=await Zf(),t=!1;for(let o of e)await fC(o)&&(t=!0);let r=!Ud&&e.every(o=>ui.has(o)),n=cn!==r;cn=r,t&&Ky(),(t||n)&&cl()}while(Ud)}catch(e){throw cn&&(cn=!1,cl()),e}finally{Dd=null}})(),Dd)}var ui,Wy,Jf,jy,Dd,zd,Vy,Ud,cn,Xy=k(()=>{"use strict";rr();hd();hs();xr();al();ui=new Map,Wy=new Map,Jf=new Map,jy=new Set,Dd=null,zd=null,Vy=0,Ud=!1,cn=!1;kr(e=>{let t=cn;cn=!1,Vy++,Jf.set(e,(Jf.get(e)??0)+1),Ud=!0;let r=ui.get(e)!=null;ui.delete(e),r&&Ky(),(r||t)&&cl()})});function hC(e){return e==="inprogress"||e==="fixed"||e==="invalid"||e==="deleted"?e:void 0}function Ve(e){if(e)return hC(e.triage)??(e.deleted?"deleted":void 0)}function v9(e){return e?!e.color&&!Ve(e)&&!e.comment&&!e.fix&&!(e.ignoredReports&&e.ignoredReports.length>0)&&e.flagged===void 0:!0}function bo(e,t,r){let n=e.get(t)?.ignoredReports;return Array.isArray(n)&&n.includes(r)}function dl(e){if(!e||typeof e!="object")return;let t=e,r={};typeof t.color=="string"&&t.color&&(r.color=t.color);let n=hC(t.triage)??(t.deleted?"deleted":void 0);if(n&&(r.triage=n),typeof t.comment=="string"&&t.comment&&(r.comment=t.comment),typeof t.fix=="string"&&t.fix&&(r.fix=t.fix),typeof t.flagged=="boolean"&&(r.flagged=t.flagged),Array.isArray(t.ignoredReports)){let o=t.ignoredReports.filter(i=>typeof i=="string"&&i.length>0);o.length>0&&(r.ignoredReports=o)}return v9(r)?void 0:r}function y9(e,t){let r=e??[],n=t??[];if(r.length!==n.length)return!1;if(r.length===0)return!0;let o=new Set(r);for(let i of n)if(!o.has(i))return!1;return!0}function mC(e,t){let r=e??{},n=t??{};return(r.color??"")===(n.color??"")&&(Ve(r)??"")===(Ve(n)??"")&&(r.comment??"")===(n.comment??"")&&(r.fix??"")===(n.fix??"")&&r.flagged===n.flagged&&y9(r.ignoredReports,n.ignoredReports)}function ee(e,t,r){let n=e.get(t),o=dl({...n,...r});return o===void 0?e.delete(t):mC(n,o)?!1:(e.set(t,o),!0)}function Qf(e,t,r){let n=dl(r),o=e.get(t);return n===void 0?e.delete(t):mC(o,n)?!1:(e.set(t,n),!0)}function _t(e,t,r,n){let o=new Set(e.get(t)?.ignoredReports??[]);return n?o.add(r):o.delete(r),ee(e,t,{ignoredReports:o.size>0?[...o]:void 0})}var pi=k(()=>{"use strict"});function Zy(e){Jy=typeof e=="function"?e:()=>{}}function Qy(e){bC=typeof e=="function"?e:()=>{}}function e0(e){vC=typeof e=="function"?e:()=>{}}async function w9(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function k9(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}function t0(){let e={};for(let[t,r]of l.triage){if(Dn.test(t))continue;let n=dl(r);n&&(e[t]=n)}return e}function _e(){if(C())return bC(),Promise.resolve();let e=++gC,t=t0(),r=Object.keys(t).length===0,n=r?null:JSON.stringify(t);if(n!=null)try{localStorage.setItem(vo,n)}catch{}return navigator.locks.request($n,{mode:"shared"},async()=>{let o=null,i=null;if(n!=null)try{let s=xe(n),a=await w9(s);i=pt(),o=(i?await l2(a):a).toBase64()}catch(s){console.warn("Failed to save triage:",s),Jy();return}await navigator.locks.request(x9,()=>{try{if(e!==gC)return;if(n!=null&&pt()!==i){queueMicrotask(()=>{_e()});return}if(r)localStorage.removeItem(fi),localStorage.removeItem(vo);else{localStorage.setItem(fi,o);try{localStorage.removeItem(vo)}catch{}}}catch(s){console.warn("Failed to save triage:",s)}}),Jy()})}async function eh(){let e=localStorage.getItem(vo);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(fi);if(!t)return null;let r=Uint8Array.fromBase64(t);if(zt(r)){if(!pt())throw new Error("triage: vault locked, cannot decrypt envelope");r=await c2(r)}let n=await k9(r);return JSON.parse(at(n))}function yC(e,{replace:t=!1}={}){let r=l.triage;if(t){let n=null,o=localStorage.getItem(vo);if(o)try{n=JSON.parse(o)}catch{}let i=s=>n!=null&&s in n;for(let s of[...r.keys()]){if(Dn.test(s))continue;let a=e?.[s],c=!e||!(s in e);!(i(s)&&n[s]?.color)&&(c||!a?.color)&&ee(r,s,{color:void 0}),!(i(s)&&(n[s]?.triage||n[s]?.deleted))&&!Ve(a)&&ee(r,s,{triage:void 0}),!(i(s)&&n[s]?.comment)&&(c||typeof a?.comment!="string"||!a.comment)&&ee(r,s,{comment:void 0}),!(i(s)&&n[s]?.fix)&&(c||typeof a?.fix!="string"||!a.fix)&&ee(r,s,{fix:void 0}),!(i(s)&&n[s]?.flagged!==void 0)&&(c||a?.flagged===void 0)&&ee(r,s,{flagged:void 0})}for(let s of[...r.keys()]){if(Dn.test(s))continue;let a=r.get(s)?.ignoredReports;if(!a||a.length===0)continue;let c=e?.[s],u=!!Ve(c);for(let p of[...a]){if(i(s)&&Array.isArray(n[s]?.ignoredReports)&&n[s].ignoredReports.includes(p))continue;if(u){_t(r,s,p,!1);continue}let f=c?.ignoredReports;(!Array.isArray(f)||!f.includes(p))&&_t(r,s,p,!1)}}}if(e)for(let[n,o]of Object.entries(e)){let i=Ve(o),s={};if(o&&o.color&&(s.color=o.color),i&&(s.triage=i),o&&typeof o.comment=="string"&&o.comment&&(s.comment=o.comment),o&&typeof o.fix=="string"&&o.fix&&(s.fix=o.fix),o&&typeof o.flagged=="boolean"&&(s.flagged=o.flagged),Object.keys(s).length>0&&ee(r,n,s),!i&&o&&Array.isArray(o.ignoredReports)){let a=new Set(r.get(n)?.ignoredReports??[]),c=!1;for(let u of o.ignoredReports)typeof u=="string"&&!a.has(u)&&(a.add(u),c=!0);c&&ee(r,n,{ignoredReports:[...a]})}}}async function $9(){if(!C())try{let e=await eh();if(C())return;yC(e)}catch(e){console.warn("Failed to load triage:",e)}}async function jd(){if(!C())try{let e=await eh();if(C())return;yC(e,{replace:!0}),vC()}catch(e){console.warn("Failed to reload triage:",e)}}function Ps(){return C()?Promise.resolve():_9??=$9()}async function r0({seal:e}){try{localStorage.removeItem(vo)}catch{}let t=localStorage.getItem(fi);if(!t)return;let r=Uint8Array.fromBase64(t);if(zt(r))return;let n=await e(r,Hc());localStorage.setItem(fi,n.toBase64())}async function n0({open:e}){try{localStorage.removeItem(vo)}catch{}let t=localStorage.getItem(fi);if(!t)return;let r=Uint8Array.fromBase64(t);if(!zt(r))return;let n=await e(r,Hc());localStorage.setItem(fi,n.toBase64())}var Jy,bC,vC,fi,vo,Dn,x9,gC,_9,hi=k(()=>{"use strict";rr();Dt();pi();Oa();Jy=()=>{};bC=()=>{};vC=()=>{};fi="deepview.triage",vo="deepview.triage.pending",Dn=/^\d+$/u;x9="deepview.triage.save",gC=0;typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==fi&&e.key!==vo||jd()});tt(()=>{jd()});tt(()=>{C()||pt()&&localStorage.getItem(vo)&&_e()})});function th(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function rh(e){if(typeof e!="string"||!e)return null;if(e.startsWith("r:"))try{let t=JSON.parse(e.slice(2));if(t&&typeof t.name=="string"&&t.name&&typeof t.workspaceId=="string"&&t.workspaceId)return{name:t.name,workspaceId:t.workspaceId}}catch{}return{name:e,workspaceId:null}}var nh=k(()=>{"use strict"});function o0(){return Vd||(Vd=S9(),Vd.catch(()=>{Vd=null})),Vd}async function S9(){try{await Ps()}catch{}let e=await fe(),t=new Set(e),r=new Set(e),n=new Set;for(let o of e){if(!o.toLowerCase().endsWith(".deepseek"))continue;let i=o.slice(0,-9)+".md";if(t.has(i))continue;let s;try{s=await De(o),await Or(i,s),await tl(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${i}`,f);continue}t.delete(o),t.add(i),n.add(o);let a=Md(o);if(sl(o),a===void 0){let{count:f,source:h}=Gt(s);Wt(i,f,h)}else{let{source:f}=Gt(s);Wt(i,a,f)}let c=Ut(o);c&&(rn(o,""),rn(i,c));let u=!1;for(let[f,h]of[...l.triage])h.ignoredReports?.includes(o)&&(_t(l.triage,f,o,!1),_t(l.triage,f,i,!0),u=!0);u&&await _e();let p=rh(Le(wC));if(p?.name===o)try{await lt(wC,th(i,p.workspaceId))}catch{}}for(let o of Q())for(let i of o.reports){if(!i.toLowerCase().endsWith(".deepseek")||!n.has(i)&&r.has(i))continue;let s=i.slice(0,-9)+".md";await Nd(i,o.id),await Bs(s,o.id)}}var wC,Vd,kC=k(()=>{"use strict";xr();al();di();rr();hi();en();pi();nh();wC="deepview.lastFile",Vd=null});function i0(){return{...xC,hydrateKey:Vb,readTriageBlob:eh}}function s0(e=xC){let t=()=>e.isEncryptionEnabled()&&!e.isUnlocked(),r=(o,i,s)=>{let a=!1,c=!1,u=e.onVaultStateChange(()=>{a=!0}),p=i==="report"?e.onFileMutated:e.onBundleMutated,f=s===void 0?null:p(h=>{h===s&&(c=!0)});return{check(){if(o?.throwIfAborted(),t()||a)throw new Error("Local data is locked or has changed. Unlock it and select the file again.");if(c)throw new Error(`This local ${i} changed. Select it again before importing.`)},unsubscribe(){u(),f?.()}}},n=async o=>o==="report"?(await e.listFiles()).map(i=>({value:i,label:i})):(await e.listBundles()).map(i=>({value:i.integrity,label:i.name,secondary:i.integrity}));return{get locked(){return t()},async hasData(o){return o==="report"?(await e.listFiles()).length>0:t()?e.hasStoredBundleBytes():(await e.listBundles()).length>0},async list(o){let i=r();try{i.check();let s=await n(o);return i.check(),s}finally{i.unsubscribe()}},unlock(o){return e.unlockEncryption(o)},subscribe(o){let i=e.onVaultStateChange(()=>o()),s=e.onFileMutated(c=>o({kind:"report",value:c})),a=e.onBundleMutated(c=>o({kind:"bundle",value:c}));return()=>{i(),s(),a()}},async importItem(o,i,s,{signal:a}={}){let c=r(a,o,i);try{c.check();let{result:u}=await e.withStoredItem(o,i,async()=>{c.check();let p=(await n(o)).find(g=>g.value===i);if(c.check(),!p)throw new Error("This file is no longer in local storage. Select another file.");let f=o==="report"?await e.readFile(i):await e.readBundle(i);c.check();let h=new File([f],p.label,{type:o==="report"?"text/plain":"application/octet-stream"});try{let g=Promise.resolve(s(h));return g.catch(()=>{}),{result:g}}finally{c.unsubscribe()}});return u}finally{c.unsubscribe()}}}}var xC,$C=k(()=>{"use strict";xr();Oa();en();hi();xC={hasStoredBundleBytes:q5,listBundles:Vt,listFiles:fe,onBundleMutated:W5,onFileMutated:kr,readBundle:an,readFile:V5,withStoredItem:j5,isEncryptionEnabled:me,isUnlocked:tr,onVaultStateChange:tt,unlockEncryption:ps}});function _C(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function ul(){if(!_C()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function a0(){let e={supported:_C(),persisted:null,usage:null,quota:null};if(!e.supported)return e;if(typeof navigator.storage.persisted=="function")try{e.persisted=await navigator.storage.persisted()}catch{}if(typeof navigator.storage.estimate=="function")try{let t=await navigator.storage.estimate();typeof t?.usage=="number"&&(e.usage=t.usage),typeof t?.quota=="number"&&(e.quota=t.quota)}catch{}return e}var SC=k(()=>{"use strict"});function CC(){for(let e of l0)e()}function pl(){return Le(oh)!=null}function c0(e){try{let t=JSON.parse(Le(oh)),r=t?.provider==="moonshotai"?"moonshot":t?.provider;return!e||t?.server!==e||typeof t.deepview!="string"||!t.deepview.trim()||![null,"anthropic","openai","moonshot","openrouter"].includes(r)||typeof t.token!="string"?null:{...t,provider:r}}catch{return null}}async function d0({server:e,deepview:t,provider:r,token:n}){await lt(oh,JSON.stringify({server:e,deepview:t,provider:r,token:n})),CC()}async function u0(){await Zo(oh),CC()}function p0(e){l0.add(e);let t=Sn(e);return()=>{l0.delete(e),t()}}var oh,l0,EC=k(()=>{"use strict";en();oh="deepview.scan.access",l0=new Set});function C9(){let e=t0(),t=lf();return{version:f0,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function E9(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function h0(){let e=C9();return{blob:new Blob([await md(JSON.stringify(e))]),filename:E9()}}async function m0(e){let t;try{t=await Ss(new Uint8Array(await e.arrayBuffer()))}catch(n){throw new Error(`Failed to gunzip: ${n.message}`,{cause:n})}let r;try{r=JSON.parse(t)}catch(n){throw new Error(`Failed to parse JSON: ${n.message}`,{cause:n})}if(!r||typeof r!="object")throw new Error("Invalid backup file (not an object)");if(r.version!==f0)throw new Error(`Unsupported backup version: ${r.version} (expected ${f0})`);if(!r.triage||typeof r.triage!="object")throw new Error("Backup is missing the `triage` map");if(!r.repoUrls||typeof r.repoUrls!="object")throw new Error("Backup is missing the `repoUrls` map");return r}async function g0(e,t){if(!["replace","prefer-imported","prefer-current"].includes(t))throw new Error(`Unknown merge mode: ${t}`);if(!e||typeof e!="object")throw new Error("Invalid payload: not an object");if(!e.triage||typeof e.triage!="object"||Array.isArray(e.triage))throw new Error("Invalid payload: missing or non-object `triage`");if(!e.repoUrls||typeof e.repoUrls!="object"||Array.isArray(e.repoUrls))throw new Error("Invalid payload: missing or non-object `repoUrls`");let r=e.triage,n=l.triage;if(t==="replace")for(let a of[...n.keys()])Dn.test(a)||n.delete(a);let o=t==="prefer-current";for(let[a,c]of Object.entries(r)){if(Dn.test(a)||!c||typeof c!="object")continue;typeof c.color=="string"&&c.color&&(!o||!n.get(a)?.color)&&ee(n,a,{color:c.color});let u=Ve(c);if(u&&(!o||!Ve(n.get(a)))&&ee(n,a,{triage:u}),typeof c.comment=="string"&&c.comment&&(!o||!n.get(a)?.comment)&&ee(n,a,{comment:c.comment}),typeof c.fix=="string"&&c.fix&&(!o||!n.get(a)?.fix)&&ee(n,a,{fix:c.fix}),typeof c.flagged=="boolean"&&(!o||n.get(a)?.flagged===void 0)&&ee(n,a,{flagged:c.flagged}),Array.isArray(c.ignoredReports)&&!Ve(n.get(a)))for(let p of c.ignoredReports)typeof p=="string"&&(o&&bo(n,a,p)||_t(n,a,p,!0))}await _e();let i=0,s=null;try{await k2(e.repoUrls,t),i=Object.keys(e.repoUrls).length}catch(a){console.warn("applyTriageImport: repo-URL import failed:",a),s=a}return{triageEntries:Object.keys(r).length,repoUrls:i,repoUrlError:s}}var f0,MC=k(()=>{"use strict";Qa();pi();rr();hi();f0=1});function M9(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function b0(e){let t=new Set;for(let r of e){let n;try{n=await De(r)}catch(i){if(M9(i))continue;throw new Error(`Failed to read ${r}: ${i.message}`,{cause:i})}if(n==null)continue;let o=await nr(n);if(o)for(let i of o.findings)i.id&&t.add(i.id)}return t}function R9(){let e=new Set;for(let t of l.triage.keys())Dn.test(t)||e.add(t);return e}async function ih(e){let t=R9();if(t.size===0)return{orphanedCount:0,sharedCount:0};let r=await b0(e),n=new Set;for(let p of t)r.has(p)&&n.add(p);if(n.size===0)return{orphanedCount:0,sharedCount:0};let o=await fe(),i=new Set(e),s=o.filter(p=>!i.has(p)),a=await b0(s),c=0,u=0;for(let p of n)a.has(p)?u++:c++;return{orphanedCount:c,sharedCount:u}}async function sh(){let e=new Set(l.triage.keys()),t=[];for(let[s,a]of l.triage)if(a.ignoredReports)for(let c of a.ignoredReports)t.push({id:s,report:c});let r=await fe(),n=new Set(r),o=await b0(r),i=!1;for(let s of e){if(Dn.test(s)||o.has(s))continue;let a=l.triage.get(s);!a||!(a.color||Ve(a)||a.comment||a.fix||a.flagged!==void 0)||ee(l.triage,s,{color:void 0,triage:void 0,comment:void 0,fix:void 0,flagged:void 0,deleted:void 0})&&(i=!0)}for(let{id:s,report:a}of t)Dn.test(s)||o.has(s)&&n.has(a)||bo(l.triage,s,a)&&_t(l.triage,s,a,!1)&&(i=!0);i&&await _e()}var RC=k(()=>{"use strict";rr();pi();hi();xr();ge()});var AC=k(()=>{"use strict"});async function LC(e,t){let r=await crypto.subtle.importKey("raw",xe(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:t,iterations:3e6},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function FC(e){return!(e instanceof Uint8Array)||e.length<TC?!1:e[0]===v0}async function ah(e,t){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof t!="string"||!t)throw new TypeError("encryptWithPassword: password required");let r=new Uint8Array(mi+e.length+16);r[0]=v0,crypto.getRandomValues(r.subarray(1,1+gi)),crypto.getRandomValues(r.subarray(1+gi,mi));let n=r.subarray(1,1+gi),o=r.subarray(1+gi,mi),i=await LC(t,n),s=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:r.subarray(0,mi)},i,e));return r.set(s,mi),r}async function I9(e,t){if(typeof t!="string"||!t)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<TC)return{ok:!1,reason:"malformed"};if(e[0]!==v0)return{ok:!1,reason:"malformed"};let r=e.subarray(1,1+gi),n=e.subarray(1+gi,mi),o=e.subarray(mi),i=await LC(t,r),s;try{s=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:e.subarray(0,mi)},i,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:s}}async function lh(e,t,r){if(!r||typeof r.malformedMsg!="string"||typeof r.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let n=await I9(e,t);if(n.ok)return n.plaintext;throw n.reason==="wrong-password"?new Error(r.wrongPasswordMsg):new Error(r.malformedMsg)}var v0,gi,IC,TC,mi,y0=k(()=>{"use strict";Dt();AC();v0=1,gi=16,IC=12,TC=1+gi+IC+16,mi=1+gi+IC});function OC(e,t){return lh(e,t,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var Wd,BC,Gd=k(()=>{"use strict";y0();Wd=FC,BC=ah});async function L9(e){let t=new Set,r=await nr(e);for(let n of r?.findings??[])n.id&&t.add(n.id);return t}function w0(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function F9(e){if(!Array.isArray(e)||e.length===0)return[];let t=await Vt(),r=new Map(t.map(o=>[o.integrity,o.name])),n=[];for(let o of e){let i=r.get(o);if(!i)continue;let s;try{s=await an(o)}catch(a){console.warn(`Workspace export: failed to read bundle ${o}: ${a?.message??a}`);continue}n.push({integrity:o,name:i,data:s.toBase64()})}return n}function B9(e){let t=Ut(e);return t?{github:t}:null}async function NC(e){let t=[];for(let r of e.reports??[]){let n;try{n=await De(r)}catch(i){console.warn(`Workspace export: skipping ${r}: ${i?.message??i}`),(i instanceof DOMException&&i.name==="NotFoundError"||typeof i?.message=="string"&&i.message.startsWith("File not found:"))&&await Od(r,null);continue}let o=B9(r);t.push(o?{name:r,content:n,repo:o}:{name:r,content:n})}return t}async function O9(e,{includeBundleBytes:t=!1}={}){let r=await NC(e),n=new Set;for(let u of r)for(let p of await L9(u.content))n.add(p);let o=new Set(e.reports??[]),i={};for(let[u,p]of l.triage){if(!n.has(u))continue;let f=(p.ignoredReports??[]).filter(g=>o.has(g)),h=dl({...p,ignoredReports:f});h&&(i[u]=h)}let s={};for(let u of r)u.repo?.github&&(s[u.name]=u.repo.github);let a=(e.bundles??[]).filter(u=>typeof u=="string"&&u.length>0),c={version:T9,exportedAt:new Date().toISOString(),workspace:{id:e.id,name:e.name,privateKey:e.privateKey,createdAt:e.createdAt},reports:r,bundles:a,repoUrls:s,triage:i};if(t){let u=await F9(a);u.length>0&&(c.bundleBlobs=u)}return c}async function PC(e,{includeBundleBytes:t=!1}={}){let r=await O9(e,{includeBundleBytes:t});return{blob:new Blob([await md(JSON.stringify(r))]),filename:`${w0(e.name)}.deepview-workspace.json.gz`}}async function N9(e,t,{includeBundleBytes:r=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:n}=await PC(e,{includeBundleBytes:r}),o=new Uint8Array(await n.arrayBuffer()),i=await BC(o,t);return{blob:new Blob([i],{type:"application/octet-stream"}),filename:`${w0(e.name)}.deepview-workspace.enc`}}async function k0(e,{password:t,includeBundleBytes:r=!1}={}){return typeof t=="string"&&t?await N9(e,t,{includeBundleBytes:r}):await PC(e,{includeBundleBytes:r})}async function P9(e){return{reports:await NC(e)}}async function x0(e){let t=await P9(e);return{blob:new Blob([await md(JSON.stringify(t))]),filename:`${w0(e.name)}.deepview-reports.json.gz`}}var T9,DC=k(()=>{"use strict";rr();pi();xr();di();ge();Qa();Gd();T9=1});function U9(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==D9)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>fl)return`reports count (${e.reports.length}) exceeds cap (${fl})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>zC)return`bundles count (${e.bundles.length}) exceeds cap (${zC})`;for(let t of e.bundles){if(typeof t!="string")return"bundles entries must be strings";if(t.length>ch)return`bundle integrity exceeds per-entry length cap (${ch})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>HC)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${HC})`;for(let t of e.bundleBlobs){if(!t||typeof t!="object"||Array.isArray(t))return"bundleBlobs entries must be objects";if(typeof t.integrity!="string"||t.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(t.integrity.length>ch)return`bundleBlobs.integrity exceeds per-entry length cap (${ch})`;if(typeof t.name!="string"||t.name.length===0)return"bundleBlobs.name must be a non-empty string";if(t.name.length>UC)return`bundleBlobs.name exceeds per-entry length cap (${UC})`;if(t.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof t.data!="string")return"bundleBlobs.data must be a base64 string";if(t.data.length>z9)return`bundleBlobs.data exceeds per-blob size cap (${jC} bytes raw)`}}return null}async function dh(e){return new Uint8Array(await e.arrayBuffer())}async function uh(e,t){if(Wd(e)){if(typeof t!="string"||!t)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let n=await OC(e,t);try{return hl(await Ss(n))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let r;try{r=await Ss(e)}catch(n){throw new Error(`gzip decompression failed: ${n.message}`,{cause:n})}return hl(r)}function hl(e){let t;try{t=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let r=U9(t);if(r===null)return t;let n=r.includes("exceeds cap");throw new Error(n?r:`not a deepview workspace export: ${r}`)}var D9,zC,fl,ch,jC,z9,UC,HC,VC=k(()=>{"use strict";Qa();Gd();D9=1,zC=1024,fl=1024,ch=200,jC=100*1024*1024,z9=Math.ceil(jC*4/3)+16,UC=512,HC=64});function H9(e){return Ve(e)??null}async function j9(e){let t=new Map;for(let r of e??[]){if(typeof r?.content!="string")continue;let n=await nr(r.content);if(n)for(let o of n.findings)!o.id||t.has(o.id)||t.set(o.id,{severity:o.severity,file:o.file,line:o.line,description:zy(o.description)})}return t}async function V9(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return;let n=l.triage,o=[];for(let[i,s]of Object.entries(e)){if(!s||typeof s!="object")continue;let a=n.get(i)?.color,c=typeof s.color=="string"?s.color:void 0;c&&a&&a!==c?o.push({id:i,property:"color",local:a,imported:c}):c&&c!==a&&ee(n,i,{color:c});let u=n.get(i)?.comment??"",p=typeof s.comment=="string"?s.comment:"";p&&u&&u!==p?o.push({id:i,property:"comment",local:u,imported:p}):p&&p!==u&&ee(n,i,{comment:p});let f=n.get(i)?.fix??"",h=typeof s.fix=="string"?s.fix:"";h&&f&&f!==h?o.push({id:i,property:"fix",local:f,imported:h}):h&&h!==f&&ee(n,i,{fix:h});let g=H9(s),b=Ve(n.get(i))??null;g&&b&&b!==g?o.push({id:i,property:"triage",local:b,imported:g}):g&&!b&&ee(n,i,{triage:g,ignoredReports:void 0});let v=n.get(i)?.flagged,x=typeof s.flagged=="boolean"?s.flagged:void 0;x!==void 0&&v!==void 0&&v!==x?o.push({id:i,property:"flagged",local:v?"flagged":"not flagged",imported:x?"flagged":"not flagged"}):x!==void 0&&x!==v&&ee(n,i,{flagged:x});let w=Array.isArray(s.ignoredReports)?s.ignoredReports:[];if(!Ve(n.get(i)))for(let y of w)typeof y=="string"&&_t(n,i,y,!0)}if(o.length>0&&t){let i=await t(o,r??new Map);i&&W9(o,i)}await _e()}function W9(e,t){for(let r of e){let n=`${r.id}:${r.property}`;t[n]==="imported"&&G9(r.id,r.property)===r.local&&(r.property==="color"?ee(l.triage,r.id,{color:r.imported}):r.property==="comment"?ee(l.triage,r.id,{comment:r.imported}):r.property==="fix"?ee(l.triage,r.id,{fix:r.imported}):r.property==="triage"?ee(l.triage,r.id,{triage:r.imported,ignoredReports:void 0}):r.property==="flagged"&&ee(l.triage,r.id,{flagged:r.imported==="flagged"?!0:r.imported==="not flagged"?!1:void 0}))}}function G9(e,t){if(t==="color")return l.triage.get(e)?.color;if(t==="triage")return Ve(l.triage.get(e))??null;if(t==="comment")return l.triage.get(e)?.comment??"";if(t==="fix")return l.triage.get(e)?.fix??"";if(t==="flagged"){let r=l.triage.get(e)?.flagged;return r===!0?"flagged":r===!1?"not flagged":""}}async function K9(e){if(Array.isArray(e))for(let t of e){let r;try{r=Uint8Array.fromBase64(t.data)}catch(n){console.warn(`Workspace import: failed to decode bundle ${t.integrity}: ${n?.message??n}`);continue}try{let n=await Rs(t.name,r);n?.integrity!==t.integrity&&console.warn(`Workspace import: bundle ${t.name} integrity mismatch (claimed ${t.integrity}, computed ${n?.integrity})`)}catch(n){console.warn(`Workspace import: failed to save bundle ${t.name}: ${n?.message??n}`)}}}async function $0(e,{conflictResolver:t}={}){let r=[];for(let p of e.reports)if(!(typeof p?.name!="string"||typeof p?.content!="string"))try{await Or(p.name,p.content);let{count:f,source:h}=Gt(p.content);Wt(p.name,f,h??Lt(p.name)),r.push(p.name)}catch(f){console.warn(`Workspace import: failed to save ${p.name}: ${f.message}`)}Array.isArray(e.bundleBlobs)&&e.bundleBlobs.length>0&&await K9(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await j9(e.reports):new Map;await V9(e.triage,t,o);let i=Array.isArray(e.bundles),s=i?e.bundles.filter(p=>typeof p=="string"&&p.length>0):[],a=await dC({id:e.workspace.id,name:e.workspace.name,privateKey:e.workspace.privateKey,reports:r,bundles:i?s:void 0,preserveBundles:!i,createdAt:e.workspace.createdAt}),c=new Set(r),u=Object.create(null);if(e.repoUrls&&typeof e.repoUrls=="object")for(let[p,f]of Object.entries(e.repoUrls))!c.has(p)||typeof f!="string"||!f||(u[p]=f);if(Object.keys(u).length>0)try{await cf(u)}catch(p){console.warn("Workspace import: failed to adopt per-report repository URLs:",p)}return a}var _0=k(()=>{"use strict";rr();xr();di();hi();al();Hy();ge();pi();VC()});function q9(e){return!e||typeof e!="object"||Array.isArray(e)?"payload is not an object":e.version!==void 0||e.workspace!==void 0?"payload claims to be a workspace export":Array.isArray(e.reports)?e.reports.length>fl?`reports count (${e.reports.length}) exceeds cap (${fl})`:null:"reports field must be an array"}function WC(e){return q9(e)===null}async function S0(e){if(Wd(e))return{kind:"encrypted"};let t;try{t=await Ss(e)}catch(n){throw new Error(`gzip decompression failed: ${n.message}`,{cause:n})}let r;try{r=JSON.parse(t)}catch{return{kind:"workspace",text:t}}return WC(r)?{kind:"reports",reports:r.reports}:{kind:"workspace",text:t}}var GC=k(()=>{"use strict";_0();Qa();Gd()});async function C0({id:e,name:t,privateKeyBase64:r,password:n}){if(typeof e!="string"||!e)throw new TypeError("encodeShareLink: id required");if(typeof t!="string"||!t)throw new TypeError("encodeShareLink: name required");if(typeof r!="string"||!r)throw new TypeError("encodeShareLink: privateKey required");if(typeof n!="string"||!n)throw new TypeError("encodeShareLink: password required");let i=await Rd(r)===e?{v:1,n:t,k:r}:{v:1,i:e,n:t,k:r};return(await ah(xe(JSON.stringify(i)),n)).toBase64({alphabet:"base64url",omitPadding:!0})}async function E0({encoded:e,password:t}){if(typeof e!="string"||!e)throw new Error("malformed share link");if(typeof t!="string"||!t)throw new TypeError("decodeShareLink: password required");let r;try{r=Uint8Array.fromBase64(e,{alphabet:"base64url"})}catch{throw new Error("malformed share link")}let n=await lh(r,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await Y9(n)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function Y9(e){let t=JSON.parse(at(e));if(!t||typeof t!="object"||typeof t.n!="string"||typeof t.k!="string"||!t.n||!t.k)throw new Error("shape");if(t.i!==void 0&&(typeof t.i!="string"||!t.i))throw new Error("shape");if(typeof t.i=="string"&&t.i.length>256)throw new Error("shape");if(t.n.length>1024)throw new Error("shape");if(Uint8Array.fromBase64(t.k).length!==32)throw new Error("shape");return{id:typeof t.i=="string"?t.i:await Rd(t.k),name:t.n,privateKeyBase64:t.k}}function M0(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function R0(e){let t=typeof e=="string"?e:typeof location>"u"?"":location.hash;if(!t)return null;let r=t.replace(/^#/u,"");if(!r)return null;for(let n of r.split("&")){let o=n.indexOf("=");if(o<0||n.slice(0,o)!=="share")continue;return n.slice(o+1)||null}return null}var KC=k(()=>{"use strict";Dt();y0();wy()});function gl(e=Le(L0)){try{let t=JSON.parse(e);if(t?.version===qC&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:qC,revision:"",links:"[]",entries:{}}}function ml(){for(let e of A0)e()}function XC(e){let t=hh.then(()=>Pa(L0,r=>e(gl(r))));return hh=t.catch(r=>console.warn("workspace App cache:",r)),t}function ph(e){return JSON.stringify(e.reports.toSorted())}function JC(){return JSON.stringify(qy().map(({name:e,groups:t})=>({name:e,groups:t})))}function O0(e){return Gy()&&e.links===JC()}function ZC(e,t){return e.workspaceRevisions?.[t]??""}function QC(e,t,r){return r.workspaceId===t?.id&&r.workspaceEpoch===(fh.get(t?.id)??0)&&r.workspaceRevision===ZC(e,t?.id)}function e6(e,t,r){return r.reportEpoch===B0&&r.reportRevision===(e.reportRevision??e.revision)&&QC(e,t,r)}function N0(e,t){return e6(gl(),e,t)}function t6(e,t){if(T0||I0.has(e.id))return null;let r=t.entries[e.id];return!r||r.reports!==ph(e)||typeof r.appMode!="boolean"||r.appMode&&(!Number.isSafeInteger(r.appFindings)||r.appFindings<0)?null:r}function P0(e){return t6(e,gl())?.appMode??null}function Ds(e){let t=gl(),r=t6(e,t);return!r||!O0(t)?null:r}async function Kd(e,t=null){let r;do r=hh,await r;while(r!==hh);let n=gl(),o=n.reportRevision??n.revision;return t&&(!e6(n,e,t)||!O0(n))?null:{epoch:F0,revision:n.revision,reportEpoch:B0,reportRevision:o,workspaceId:e?.id,workspaceEpoch:fh.get(e?.id)??0,workspaceRevision:ZC(n,e?.id)}}async function D0(e,t,r){let n=!1;return await XC(o=>{if(r.epoch!==F0||r.revision!==o.revision||!QC(o,e,r)||!O0(o))return;let i=Q().find(s=>s.id===e.id);if(!(!i||ph(i)!==ph(e)))return o.entries[e.id]={...t,reports:ph(e)},n=!0,JSON.stringify(o)}),n&&ml(),n}function mh(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)F0++,t===void 0&&B0++,T0++;else for(let r of e)fh.set(r,(fh.get(r)??0)+1),I0.add(r);return ml(),XC(r=>{if(r.reportRevision??=r.revision,e===null)r.revision=crypto.randomUUID(),t===void 0&&(r.reportRevision=r.revision),r.entries={};else{r.workspaceRevisions??={};for(let n of e)r.workspaceRevisions[n]=crypto.randomUUID(),delete r.entries[n]}return t!==void 0&&(r.links=t),JSON.stringify(r)}).finally(()=>{if(e===null)T0--;else for(let r of e)I0.delete(r);ml()})}function z0(e){return A0.add(e),()=>A0.delete(e)}var L0,qC,A0,I0,T0,F0,B0,fh,hh,YC,r6=k(()=>{"use strict";en();di();Sy();xr();Xy();L0="deepview.workspaceApp",qC=2,A0=new Set,I0=new Set,T0=0,F0=0,B0=0,fh=new Map,hh=Promise.resolve(),YC=null;Sn(()=>{let e=Le(L0);e!==YC&&(YC=e,ml())});Td(e=>{mh([e]).catch(()=>{})});Id(e=>{mh([e]).catch(()=>{})});kr(e=>{let t=Q().filter(r=>r.reports.includes(e)).map(r=>r.id);mh(t).catch(()=>{})});Ns(()=>{if(!Gy()){ml();return}let e=JC();gl().links===e?ml():mh(null,e).catch(()=>{})})});var U=k(()=>{"use strict";Q5();Ov();rC();al();za();pC();Hy();hs();Xy();kC();$C();Oa();SC();en();EC();rr();tv();xr();MC();RC();hi();pi();Gd();DC();_0();GC();KC();di();r6()});function n6(e){e.installSyncHost(X9),Zy(()=>e.triageSync.notify())}var X9,o6=k(()=>{"use strict";rr();al();di();xr();hi();en();X9={get state(){return l},listWorkspaces:Q,addReportToWorkspace:Bs,addBundleToWorkspace:Os,onReportMembershipChanged:Td,onBundleMembershipChanged:xy,onWorkspaceDeleted:Id,onWorkspacePrivateKeyChanged:ky,analyzeContent:Gt,setCount:Wt,gunzipBytes:On,listBundles:Vt,listFiles:fe,readBundle:an,readFileBytes:ai,saveBundle:Rs,saveFileBytes:Gv,onFileMutated:kr,saveTriage:_e,getSecureItem:Le,setSecureItem:lt,removeSecureItem:Zo,onSecureStorageHydrated:Sn}});function l6(){try{return Le("deepview.sync.userEnabled")!=="0"}catch{return!0}}function vh(e){c6=!!e}function bh(){if(c6||l.serverMode!=="e2e")return!0;try{return br()?.mode==="managed"}catch{return!1}}function qd(){return zs||(bh()&&!se?Promise.resolve(null):(zs=(async()=>{let e="./client-sync.js";try{let t=await import(e);return n6(t),se=t,J9(),t}catch(t){throw zs=null,t}})(),zs))}function Yd(e){se?e(se):d6.push(e)}function J9(){let e=d6.splice(0);for(let t of e)try{t(se)}catch(r){console.warn("client-sync: deferred apply failed:",r)}}function Us(e,t){let r={cancelled:!1,unsub:null};return Yd(n=>{r.cancelled||(r.unsub=t(n,e))}),()=>{r.cancelled=!0,r.unsub&&r.unsub()}}function U0(e,t){return se?se.isInRemote(e,t):!1}function u6(e,t){return se?se.isBundleInRemote(e,t):!1}function p6(e){try{let t=localStorage.getItem(Z9+e);if(!t)return null;let r=JSON.parse(t);return r&&typeof r=="object"?r:null}catch{return null}}function bl(e,t){if(se&&se.isInRemote(e,t))return!0;let r=p6(e);return!r||typeof r.names!="object"?!1:Object.values(r.names).includes(t)}function H0(e,t){if(se&&se.isBundleInRemote(e,t))return!0;let r=p6(e);return!r||typeof r.bundles!="object"?!1:Object.values(r.bundles).includes(t)}function j0(e){return se?se.remoteCount(e):0}function f6(e){return se?se.differingReports(e):[]}function h6(e){return Us(e,(t,r)=>t.onAutoDownloaded(r))}function m6(e){return Us(e,(t,r)=>t.onBundleAutoDownloaded(r))}function g6(e){return Us(e,(t,r)=>t.onChange(r))}function b6(e){if(se){se.setRedraw(e);return}i6=e,Yd(t=>{i6===e&&t.setRedraw(e)})}function v6(e){if(se){se.setAuthenticationResolver(e);return}s6=e,Yd(t=>{s6===e&&t.setAuthenticationResolver(e)})}function y6(e){if(se){se.setHydrationConflictResolver(e);return}a6=e,Yd(t=>{a6===e&&t.setHydrationConflictResolver(e)})}async function zn(e,t){if(bh()||!l6()&&!se)return;let r=await qd();if(!(!r||bh()))return r[e](...t)}function w6(...e){return zn("downloadFileFromRemote",e)}function k6(...e){return zn("fetchBundleFromRemote",e)}function yh(...e){return zn("putFile",e)}function x6(...e){return zn("holdLocalChangeChecks",e)}function $6(...e){return zn("putBundleToRemote",e)}function wh(...e){return zn("deleteFromRemote",e)}function kh(...e){return zn("deleteBundleFromRemote",e)}function Xd(...e){return zn("openWorkspace",e)}async function V0(...e){return(se??(zs?await zs:null))?.closeWorkspace(...e)}function _6(...e){return zn("recheckRemoteStorage",e)}function S6(...e){return zn("resolveReportDifference",e)}function yo(e,t){if(se)return se.triageSync[e](...t);Yd(r=>{r.triageSync[e](...t)})}var se,zs,c6,d6,Z9,i6,s6,a6,gh,te,dn=k(()=>{"use strict";U();o6();se=null,zs=null;c6=!1;d6=[];Z9="deepview.objstore-presence.";i6=null,s6=null,a6=null,gh=[];te={get status(){return se?se.triageSync.status:"off"},get openSessions(){return se?se.triageSync.openSessions:[]},get persistenceDegraded(){return se?se.triageSync.persistenceDegraded:!1},get proxyAuthRequired(){return se?se.triageSync.proxyAuthRequired:!1},setEnabled(e){if(e===!0)return bh()?Promise.resolve(null):qd().then(t=>{t.triageSync.setEnabled(!0);let r=gh;gh=[];for(let n of r)try{t.openWorkspace(n)}catch(o){console.warn(`client-sync: openWorkspace(${n}) failed during re-enable:`,o)}return null}).catch(t=>(console.warn("client-sync: setEnabled load failed:",t),null));if(se){gh=se.openWorkspaceIds();for(let t of gh)try{se.closeWorkspace(t)}catch(r){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,r)}se.triageSync.setEnabled(!1);return}yo("setEnabled",[e])},isEnabled(){return se?se.triageSync.isEnabled():l6()},openSession(e){yo("openSession",[e])},closeSession(e){yo("closeSession",[e])},refreshSession(e){yo("refreshSession",[e])},dismissError(e){yo("dismissError",[e])},setForcedOff(e){yo("setForcedOff",[e])},setProtocolLocked(e){yo("setProtocolLocked",[e])},setServerUrl(e){yo("setServerUrl",[e])},getServerUrl(){return se?se.triageSync.getServerUrl():null},notify(){yo("notify",[])},onStatusChange(e){return Us(e,(t,r)=>t.triageSync.onStatusChange(r))},onServerInfo(e){return Us(e,(t,r)=>t.triageSync.onServerInfo(r))},onPersistenceDegraded(e){return Us(e,(t,r)=>t.triageSync.onPersistenceDegraded(r))},onProxyAuthRequired(e){return Us(e,(t,r)=>t.triageSync.onProxyAuthRequired(r))}}});function W0(e){if(!e?.startsWith("#public="))return null;let t=/^#public=([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]{43})$/u.exec(e);return t?{id:t[1],token:t[2]}:{id:"",token:""}}function Un(){return E6}function Hs(e,t=E6){return t?`${e}#public=${t.id}.${t.token}`:e}var C6,E6,js=k(()=>{"use strict";C6=globalThis.location?.hash,E6=W0(C6);globalThis.addEventListener?.("hashchange",()=>{let e=globalThis.location?.hash;e?.startsWith("#public=")&&e!==C6&&globalThis.location.reload()})});function G0(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function Q9(e){let t=e.location.hash,r=W0(t),n=!1,o=null,i=0,s=null,a=null,c=!1,u=null,p=null;function f(){return e.location.hash.startsWith("#public=")&&e.location.hash!==t}function h($){let _=Jc($),S=_?.view==="home"?Qo($.hash):null;return _?{..._,...S?{finding:S}:{}}:null}function g(){try{let $=e.sessionStorage?.getItem(xh);if(e.sessionStorage?.removeItem(xh),!$)return null;let _=new URL($,e.location.origin),S=_.origin===e.location.origin?h(_):null;return S?.finding?S:null}catch{return null}}function b(){if(!n||!Qo(e.location.hash)||u===e.location.href||e.history.state?.[Hn]&&e.history.state[Hn]!==o)return;let $=u=e.location.href,_=h(new URL($));x(_??{view:"home"},{replace:!0}).finally(()=>{u===$&&(u=null)})}function v($){f()||($=Hs($,r),e.history.replaceState(n?{[Hn]:o}:null,"",$),a=$)}async function x($,{replace:_=!1,pop:S=!1}={}){if(!n||!s||f())return!1;$??={view:"home"};let M=vr($);if(M===null)return!1;let R=++i,P=p={route:$,findingRoute:null},L=()=>n&&R===i&&!f(),A=!1;try{A=await s($,L)}catch(W){console.warn("managed: navigation failed:",W)}return L()?A?(typeof A=="object"&&(M=vr(A)??M),G0(P.findingRoute,typeof A=="object"?A:$)&&(M=vr(P.findingRoute)),p=null,S||_?v(M):Hs(M,r)!==a&&(M=Hs(M,r),e.history.pushState({[Hn]:o},"",M),a=M),!0):(await s({view:"home"},L),L()&&(p=null,v("/")),!1):!1}function w($){if(f())return;if(!n){$.state?.[Hn]&&v("/");return}if((!$.state?.[Hn]||$.state[Hn]===o)&&Qo(e.location.hash)){b();return}let _=$.state?.[Hn]===o?h(new URL(e.location.href)):null;x(_??{view:"home"},{pop:!0})}function y($){if(!n||$.defaultPrevented||$.button!==0||$.metaKey||$.ctrlKey||$.shiftKey||$.altKey)return;let _=$.composedPath().find(R=>R.matches?.("a.comment-self-ref[href]"));if(!_||_.hasAttribute("download")||_.target&&_.target!=="_self")return;let S=new URL(_.href);if(S.origin!==e.location.origin)return;let M=h(S);if(M?.finding)return $.preventDefault(),x(M)}return{get active(){return n},rememberFinding(){let $=h(new URL(e.location.href));if(!$?.finding)return;let _=$.view==="home"?`/#${Rn($.finding)}`:vr($);try{e.sessionStorage?.setItem(xh,_)}catch{}},start($){if(n)return;n=!0,s=$,o=typeof e.history.state?.[Hn]=="string"?e.history.state[Hn]:e.crypto.randomUUID(),c||(e.addEventListener("popstate",w),e.addEventListener("hashchange",b),e.addEventListener("click",y),e.launchQueue?.setConsumer(({targetURL:M})=>{if(!n||!M)return;let R=new URL(M);if(R.origin!==e.location.origin)return;let P=h(R);P&&x(P)}),c=!0);let _=g(),S=h(new URL(e.location.href))??{view:"home"};return _&&S.view==="home"&&!S.finding&&(S=_),x(S,{replace:!0})},navigate:x,replaceFindingRoute($){if(!n||$?.view!=="findings"||f())return;let _=vr($);if(_!=null){if(p){(p.route.view==="home"&&p.route.finding||G0($,{...p.route,view:"findings"}))&&(p.findingRoute=$);return}G0($,Jc(new URL(e.location.href)))&&Hs(_,r)!==a&&v(_)}},replaceRoute($){if(!n||!$||f())return;let _=vr($);_!=null&&v(_)},reset({force:$=!1}={}){if(++i,p=null,n||$){try{e.sessionStorage?.removeItem(xh)}catch{}n=!1,o=null,s=null,v("/")}}}}var Hn,xh,Fe,vl=k(()=>{"use strict";po();za();js();Hn="deepviewManagedNavigation",xh="deepviewManagedLoginFinding";Fe=typeof window>"u"?null:Q9(window)});function M6(e){return typeof e=="string"&&Jd.includes(e)}function yl(e,t){let r=Jd.indexOf(e);return r!==-1&&r<=Jd.indexOf(t)}var Jd,Zd=k(()=>{"use strict";Jd=["admin","manage","triage","view","none"]});function Vs(e){return C()&&!l.managedSession?.publicShare&&yl(l.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}var $h=k(()=>{"use strict";U();Zd()});function K0(){return jn?.getPreviewRole()??null}function R6(){jn?.setPreviewRole(null)}function A6(){jn?.resetManagedAppState()}function I6(e){jn?.setManagedAppSession(e)}function T6(e){return jn?.setManagedReportCatalog(e)??new Set}function wl(e,t=l.currentManagedTeam){return jn?.readReportSources(e,t)}function L6(){jn?.clearReportSources(),jn?.clearFindingHistory()}async function _h(e,t=l.currentManagedTeam){return(await Be()).fetchReportSources(e,t)}function Be(){return Qd||(Qd=(async()=>{let e="./client-managed.js";try{return jn=await import(e),jn}catch(t){throw Qd=null,t}})(),Qd)}async function F6(e){return(await Be()).probeSession(e)}async function B6(e){return(await Be()).probeTeams(e)}async function O6(){return(await Be()).fetchManagedBundleCatalog()}async function N6(e){return(await Be()).openManagedShareDialog(e,"",l.managedSession)}async function P6(e){let t=()=>l.managedSession?.id===e.session.id&&l.managedSession?.csrfToken===e.session.csrfToken&&l.currentManagedTeam===e.teamId,r=await Be();return t()?r.openManagedIssueDialog({...e,isCurrent:t}):null}async function D6(e){if(!Vs(e))return null;let t=l.reports,r=l.managedSession,n=l.currentManagedTeam,o=()=>Vs(e)&&l.managedSession===r&&l.currentManagedTeam===n&&l.reports===t,i=await Be();return o()?i.openFindingHistoryDialog({finding:e,teamId:n,isCurrent:o}):null}async function z6(e,t){return(await Be()).fetchTeamAnnotations(e,t)}async function q0(e,t=l.currentManagedTeam,r){return(await Be()).fetchReportTriage(e,t,r)}async function U6(e,t){return(await Be()).fetchFixes(e,t)}async function H6(e,t=l.currentManagedTeam,r){return(await Be()).fetchReportComments(e,t,r)}async function j6(e,t,r,n=l.currentManagedTeam){return(await Be()).saveReportComment(e,t,r,n)}async function V6(e,t,r,n,o=l.currentManagedTeam){return(await Be()).deleteReportComment(e,t,r,n,o)}async function W6(e,t,r,n=l.currentManagedTeam){return(await Be()).pushReportTriage(e,t,r,n)}async function G6(e){return e&&Fe?.rememberFinding(),(await Be()).login(e)}async function K6(e){return(await Be()).logout(e)}async function Sh(e){return(await Be()).fetchBundleMetadata(e)}async function q6(e,t){return(await Be()).fetchBundleContents(e,t)}async function Ch(e){return(await Be()).fetchTeamReports(e)}async function Y6(e,t){return(await Be()).watchTeamFeed(e,t)}async function X6(e,t=l.currentManagedTeam,r="",n=!1){return(await Be()).fetchBundleAdvisories(e,t,r,n)}var Qd,jn,Kt=k(()=>{"use strict";U();vl();$h();Qd=null,jn=null});var eu,V,J6=k(()=>{Jr();as();eu=class extends er{constructor(t){if(super(t),this.it=m,t.type!==Nt.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===m||t==null)return this._t=void 0,this.it=t;if(t===et)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let r=[t];return r.raw=r,this._t={_$litType$:this.constructor.resultType,strings:r,values:[]}}};eu.directiveName="unsafeHTML",eu.resultType=1;V=Ar(eu)});var Je=k(()=>{J6()});function Z6(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function eP(e){let[t,r,n]=e.split("/");return n===void 0&&t!==void 0&&r!==void 0&&t.length<=39&&/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u.test(t)&&r.length<=100&&r!=="."&&r!==".."&&/^[a-zA-Z\d._-]+$/u.test(r)}function Q6(e,t){if(typeof e!="string"||e.length>2048)return null;let r;try{r=new URL(e)}catch{return null}if(r.href!==e||r.origin!=="https://github.com"||r.username||r.password)return null;let n=t.exec(r.pathname);if(!n)return null;let o=`${n[1]}/${n[2]}`,i=Number(n[3]);return!eP(o)||!Number.isSafeInteger(i)||i<=0?null:{repo:o,number:i}}function Y0(e){return Q6(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function X0(e){return Q6(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function J0(e){let t=Y0(e);if(t)return{...t,kind:"pull"};let r=X0(e);return r?{...r,kind:"issue"}:null}function Eh(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}var Z0=k(()=>{"use strict"});function tP(e){let t=e?.teams?.find(r=>r.id===e.teamId);return t?!t.cacheKey||!Array.isArray(t.reports)||t.reports.some(r=>!r.cacheKey)?e.teams:JSON.stringify([t.cacheKey,t.reports.map(r=>[r.id,r.cacheKey]).toSorted()]):null}var Mh,e3=k(()=>{"use strict";Z0();Mh=class{constructor({context:t,fetchWorkspace:r,changed:n=()=>{},now:o=Date.now}){this.getContext=t,this.fetchWorkspace=r,this.changed=n,this.now=o,this.entries=new Map,this.expires=0,this.context=null,this.scope=null,this.timer=null,this.run=null}reset(){this.run?.abort(),this.run=null,clearTimeout(this.timer),this.timer=null,this.entries.clear(),this.expires=0,this.context=null,this.scope=null}syncContext(){let t=this.getContext();if(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||t?.teams!==this.context?.teams){let r=tP(t);(t?.key!==this.context?.key||t?.teamId!==this.context?.teamId||r!==this.scope)&&this.reset(),this.context=t,this.scope=r}return this.scope===null?null:this.context}read(t){let n=this.syncContext()?.teamId&&J0(t);return n?this.expires>this.now()?this.entries.get(Eh(n))??null:(!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0)),this.entries.get(Eh(n))??null):null}async flush(){let t=this.syncContext();if(!t?.teamId||this.run||this.expires>this.now())return;let r=this.run=new AbortController,n;try{n=await this.fetchWorkspace(t.teamId,r.signal)}catch{n=null}if(this.syncContext(),!(this.run!==r||r.signal.aborted)){this.entries.clear();for(let o of Array.isArray(n)?n:[]){let i=J0(o?.url);if(i&&typeof o.title=="string"&&["open","draft","closed","merged"].includes(o.status)){let s=i.kind==="issue"&&o.status==="closed"?Z6(o.stateReason):null;this.entries.set(Eh(i),{title:o.title,description:typeof o.description=="string"?o.description:null,status:o.status,stateReason:s})}}this.expires=this.now()+6e4,this.run=null,this.changed()}}}});function t3(e){return Rh.add(e),()=>Rh.delete(e)}function ew(){Q0.reset();for(let e of Rh)e()}function tw(e){l.currentManagedTeam===e&&ew()}var Rh,Q0,Ah=k(()=>{"use strict";U();e3();Kt();Rh=new Set,Q0=new Mh({context:()=>{let e=l.managedSession;return C()&&e?.id&&l.currentManagedTeam?{key:JSON.stringify([e.id,e.role,e.csrfToken]),teamId:l.currentManagedTeam,teams:l.managedTeams}:null},fetchWorkspace:U6,changed:()=>{for(let e of Rh)e()}})});function rP(){return Vn||(Vn=document.createElement("div"),Vn.id="app-toast",Vn.setAttribute("role","status"),Vn.setAttribute("aria-live","polite"),document.body.append(Vn),Vn)}function St(e,{kind:t="info",duration:r=5200}={}){let n=rP(),o=++Ih;clearTimeout(tu),tu=null,n.className=t,n.textContent=e,requestAnimationFrame(()=>{Ih===o&&n.classList.add("visible")});let i=()=>{Ih===o&&rw()};return r>0&&(tu=setTimeout(i,r)),i}function rw(){Ih++,Vn&&(clearTimeout(tu),tu=null,Vn.classList.remove("visible"))}var Vn,tu,Ih,kl=k(()=>{"use strict";Vn=null,tu=null,Ih=0});function Th(e){return{managedId:e.id,slug:e.slug,integrity:e.integrity,kind:e.kind,summary:e.summary,name:e.filename,size:e.byteSize,repoId:e.repoId,repoFullName:e.repoFullName,repoDirectory:e.repoDirectory??""}}function xl(e,t,r,n="overview"){if(!t?.managedId)return null;let o=e.find(i=>i.id===r&&i.bundles?.some(s=>s.id===t.managedId));return r!=null&&!o?null:wt({view:"bundles",teamId:o?.id??null,bundleId:t.managedId,bundleTab:n},e,[{id:t.managedId,slug:t.slug}])}function r3(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,Th(t)])).values()]}var Lh=k(()=>{"use strict";po()});function n3(e,t,r){if(e.currentView!=="findings"&&e.currentView!=="files"&&e.currentView!=="links"||!e.currentManagedTeam)return!1;let n=t.find(s=>s.id===e.currentManagedTeam);if(r.has(`team:${e.currentManagedTeam}`)||!n||e.managedReports.some(s=>r.has(s.id)))return!0;let o=new Set(n.reports.map(s=>s.id));if(e.currentManagedReport!==null)return!o.has(e.currentManagedReport);let i=new Set(e.managedReports.map(s=>s.id));return o.size!==i.size||[...o].some(s=>!i.has(s))}var o3=k(()=>{"use strict"});function nP(e){let t=1/0,r=Date.now()+5e3;for(let n of e)for(let o of n.bundles??[])["stasis","sourcemap"].includes(o.kind)&&o.summary==null&&(t=Math.min(t,Math.max(r,o.summaryRetryAt??0)));return t}function i3(e){let t=null,r=null,n=null;return async({generation:o,session:i,signal:s,reuse:a=!1,revision:c=null})=>{if(s.aborted)return null;let u=JSON.stringify([o,i?.id,i?.role,i?.csrfToken]);if(n!==u&&(t?.controller.abort(),t=null,r=null,n=u),r&&Date.now()<r.expiresAt&&(a||c!==null&&c===r.revision))return r.teams;if(!t||t.signal.aborted||c!==null&&t.revision!==c){t?.controller.abort(),r=null;let h=new AbortController,g=AbortSignal.any([s,h.signal]),b={controller:h,signal:g,promise:null,revision:c};t=b;let v=null;b.promise=e({fallback:null,signal:g,onRevision:x=>{v=x}}).then(x=>g.aborted||n!==u?null:(x!==null&&(r={teams:x,revision:v,expiresAt:nP(x)}),x)).finally(()=>{t===b&&(t=null)})}let p=t,f=()=>p.controller.abort();s.addEventListener("abort",f,{once:!0});try{let h=await p.promise;return s.aborted||p.signal.aborted?null:h}finally{s.removeEventListener("abort",f)}}}var s3=k(()=>{"use strict"});function rt(){return a3}function Ws(){return nw.signal}function Ft(){return nw.abort(),nw=new AbortController,++a3}var a3,nw,$l=k(()=>{"use strict";a3=0,nw=new AbortController});function wo(e){return!Number.isFinite(e)||e<0?"\u2014":e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KiB`:e<1073741824?`${(e/1048576).toFixed(1)} MiB`:`${(e/1073741824).toFixed(1)} GiB`}function ru(e){return Array.isArray(e)?e.reduce((t,r)=>({bytes:t.bytes!=null&&Number.isFinite(r.bytes)?t.bytes+r.bytes:null,lines:t.lines!=null&&Number.isFinite(r.lines)?t.lines+r.lines:null}),{bytes:0,lines:0}):{bytes:null,lines:null}}function ow(e){return(e??[]).filter(t=>!["resource:base64","directory"].includes(t.format))}var _l=k(()=>{"use strict"});function iw(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function l3(e){let t=e.summary,r=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&r.push(wo(e.byteSize)),t&&[t.files,t.lines].every(n=>Number.isSafeInteger(n)&&n>=0)&&r.push(`${t.files.toLocaleString()} files`,`${t.lines.toLocaleString()} LoC`),r.join(" \xB7 ")}function c3(e,t=""){let r=t.trim().toLowerCase(),n=o=>String(o??"").toLowerCase().includes(r);return(Array.isArray(e)?e:[]).flatMap(o=>{let i=(o.reports??[]).filter(a=>n(a.filename)),s=(o.bundles??[]).filter(a=>n(a.filename));return n(o.name)||i.length>0||s.length>0?[{team:o,reports:i,bundles:s}]:[]})}var d3=k(()=>{"use strict";_l()});function oP(){return{showAll:!1,splitOwnDirs:!1,packagesView:!1,dependencyPackagesView:!1,bundleLayout:"graph",bundleReason:null,bundleReasonFor:null,selected:null,focusedPkg:null,topPkgsTab:"issues",edgeOpacity:.22,nodeSize:1,showLabels:!1,selectedSeverities:new Set,selectedColors:new Set,pathFilter:"",hidden:new Set,solo:null,graphState:null,layoutCache:null}}function Ze(){B.graphState?._cleanup&&B.graphState._cleanup(),B.graphState=null}function u3(){return bi}var bi,B,ko=k(()=>{"use strict";bi=oP(),B=new Proxy(bi,{get(e,t){return bi[t]},set(e,t,r){return bi[t]=r,!0},has(e,t){return t in bi},deleteProperty(e,t){return delete bi[t]},ownKeys(){return Reflect.ownKeys(bi)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(bi,t)}})});var p3=k(()=>{"use strict"});var Fh,or,vi,f3,h3,Bh,Sl,Cl,El,Oh,m3,Wn,Nh,g3,b3,gt=k(()=>{"use strict";Fh="m5.875 10.154 1.376-.772.023-.067-.023-.037h-.067l-.23-.015-.787-.02-.681-.03-.661-.035-.166-.035-.156-.205.016-.103.14-.094.2.018.442.03.665.046.481.028.714.075h.113l.016-.047-.039-.028-.03-.028-.687-.466-.744-.492-.39-.284-.21-.143-.106-.135-.046-.294.19-.21.258.017.065.018.26.2.557.43.726.535.106.089.042-.03.006-.022-.048-.08-.395-.713-.422-.726-.187-.301-.05-.18a1 1 0 0 1-.03-.213l.218-.296.12-.039.29.039.123.106.18.413.293.65.453.884.133.262.07.242.027.075h.046v-.043l.038-.497.069-.611.067-.787.023-.221.11-.266.218-.143.17.081.14.2-.02.13-.083.54-.163.846-.106.567h.062l.07-.07.287-.382.482-.602.213-.239.248-.264.159-.125h.301l.221.329-.099.34-.31.393-.256.333-.369.496-.23.397.021.032.055-.006.832-.177.45-.081.537-.092.243.113.026.115-.096.236-.573.141-.673.135-1.003.237-.012.01.014.017.452.042.193.01h.473l.88.066.23.153.138.186-.023.141-.354.181-.478-.113-1.116-.266-.383-.096h-.053v.032l.32.312.584.528.731.68.037.168-.094.133-.099-.014-.643-.484-.248-.218-.561-.472H9.08v.05l.129.189.684 1.027.035.315-.05.103-.177.062-.194-.036-.4-.561-.413-.632-.333-.567-.041.023-.197 2.116-.092.108-.212.082-.177-.135-.094-.218.094-.43.113-.561.092-.447.083-.554.05-.184-.004-.013-.04.006-.418.574-.636.858-.503.539-.12.048-.21-.108.02-.193.117-.172.696-.886.42-.549.27-.317-.001-.046h-.016l-1.85 1.201-.328.042-.142-.132.018-.218.067-.071.556-.383Z",or='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2 2 5v6l6 3 6-3V5L8 2Z"/><path d="M2 5l6 3 6-3"/><path d="M8 8v6"/></svg>',vi='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="11" height="9" rx="1.2"/><path d="M6 4V3h4v1"/></svg>',f3='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4.5 4.5 7 2-5 5z"/><circle cx="4.5" cy="4.5" r="2" fill="currentColor"/><circle cx="11.5" cy="6.5" r="2" fill="currentColor"/><circle cx="6.5" cy="11.5" r="2" fill="currentColor"/></svg>',h3='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="2.5" r="1.5" fill="currentColor"/><circle cx="3" cy="13" r="1.5" fill="currentColor"/><circle cx="8" cy="13" r="1.5" fill="currentColor"/><circle cx="13" cy="13" r="1.5" fill="currentColor"/><path d="M8 4v3M8 7H3m5 0h5M3 7v4M8 7v4M13 7v4"/></svg>',Bh='<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>',Sl='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6.67 8.67a3.33 3.33 0 0 0 5.03.36l2-2a3.33 3.33 0 0 0-4.71-4.71l-1.15 1.14"/><path d="M9.33 7.33a3.33 3.33 0 0 0-5.03-.36l-2 2a3.33 3.33 0 0 0 4.71 4.71l1.14-1.14"/></svg>',Cl='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 1.5H2.5a1 1 0 0 0-1 1V5m9.5-3.5h2.5a1 1 0 0 1 1 1V5M1.5 11v2.5a1 1 0 0 0 1 1H5m6 0h2.5a1 1 0 0 0 1-1V11"/><circle cx="7.25" cy="7.25" r="2.75"/><path d="m9.25 9.25 2.25 2.25"/></svg>',El='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 1.5H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V5.5L9 1.5ZM9 1.5v4h4M5.5 8h5m-5 3h3.5"/></svg>',Oh='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m4.5 4.5-3 3.5 3 3.5m7-7 3 3.5-3 3.5M9.5 2l-3 12"/></svg>',m3='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6.5 3.5 1.6 3.9L12 9l-3.9 1.6-1.6 3.9-1.6-3.9L1 9l3.9-1.6 1.6-3.9ZM12 1.5v4m-2-2h4"/></svg>',Wn='<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>',Nh='<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M1 8h3.5m7 0H15"/><circle cx="8" cy="8" r="3.5"/></svg>',g3='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m10 2 4 4-8 8H2v-4l8-8Zm-1 1 4 4"/></svg>',b3='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4h12M6 4V2h4v2M4 4l.6 10h6.8L12 4M6.5 7v4m3-4v4"/></svg>'});var v3,iP,nu,nt,Ph=k(()=>{"use strict";gt();v3={default:{className:"brand-deepview",mark:'<path class="fg" d="M7.843 6.719c-1.605 0-2.926 1.292-3.477 1.947.466.58 1.872 2.024 3.496 2.024s2.907-1.292 3.486-2.005c-.627-.703-1.88-1.966-3.505-1.966m.019 3.857c-1.51 0-2.802-1.263-3.353-1.9.55-.617 1.814-1.852 3.334-1.852 1.51 0 2.698 1.12 3.335 1.852-.533.618-1.787 1.9-3.316 1.9m-.019-3.42c-.826 0-1.577.694-1.577 1.596 0 .789.599 1.577 1.577 1.577.893 0 1.587-.684 1.587-1.577-.01-.779-.627-1.596-1.587-1.596m0 3.069a1.476 1.476 0 0 1-1.482-1.473c0-.722.599-1.491 1.482-1.491.846 0 1.482.693 1.492 1.491 0 .808-.618 1.473-1.492 1.473m.01-2.727c-.637 0-1.264.532-1.264 1.244 0 .627.475 1.235 1.245 1.245.684 0 1.254-.522 1.254-1.244 0-.58-.475-1.236-1.235-1.245m-.02 2.403a1.167 1.167 0 0 1-1.149-1.159c0-.532.456-1.14 1.169-1.149.56 0 1.149.427 1.159 1.15 0 .636-.485 1.158-1.179 1.158m-.769-1.833c-.19.238-.275.494-.237.864l.74.057zm1.026-.294c-.295-.057-.665 0-.912.228l.323.607zm.133.047-.38.56.988.114c-.057-.275-.323-.579-.608-.674m-.124.741.456.912c.21-.209.352-.484.314-.836zm-1.225.504a.97.97 0 0 0 .57.617l.399-.551zm.713.664c.313.076.636.01.845-.161l-.295-.618zm-.637 1.55c0 .028-.028.066-.066.066h-.59c-.028 0-.066-.028-.066-.066s.029-.066.067-.066h.579c.048 0 .076.028.076.066m.712 0c0 .028-.028.066-.066.066h-.437c-.028 0-.066-.028-.066-.066s.028-.066.066-.066h.437c.038 0 .066.028.066.066m.666 0c0 .028-.029.066-.067.066h-.37c-.029 0-.067-.028-.067-.066s.029-.066.067-.066h.37c.038 0 .067.028.067.066m-1.672.351c0 .029-.029.067-.067.067h-.295c-.028 0-.066-.028-.066-.066 0-.029.029-.067.067-.067h.294c.038 0 .066.028.066.066m.694 0c0 .029-.028.067-.066.067h-.409c-.028 0-.066-.028-.066-.066 0-.029.028-.067.066-.067h.399c.038 0 .076.028.076.066m.732 0c0 .029-.029.067-.067.067h-.465c-.029 0-.067-.028-.067-.066 0-.029.029-.067.067-.067h.465c.038 0 .067.028.067.066m-1.093.371a.065.065 0 0 1-.067.066h-.627c-.028 0-.075-.028-.066-.066 0-.028.029-.066.067-.066h.627c.038 0 .066.028.066.066m.684 0a.065.065 0 0 1-.066.066h-.39c-.028 0-.076-.028-.066-.066 0-.028.028-.066.066-.066h.39c.038 0 .066.028.066.066M5.088 6.263c-.019-.105-.114-.19-.237-.19s-.257.104-.257.237.105.238.247.238c.105 0 .218-.076.238-.18h.864v.826l.095-.048V6.31c0-.028-.019-.057-.048-.057h-.902zm-.237.19c-.076 0-.143-.066-.143-.143s.066-.142.143-.142.142.066.142.143c.01.076-.066.142-.143.142m2.89-.323H6.38l.418-.475v-.332a.255.255 0 0 0 .218-.248c0-.123-.114-.256-.256-.256s-.266.114-.266.257c0 .123.095.228.209.247v.284l-.456.523v.893l.095-.047v-.742h1.396c.029 0 .067-.009.067-.057 0-.028-.019-.047-.067-.047m-1.13-1.054c0-.076.066-.152.152-.152s.152.066.152.151c0 .076-.066.152-.152.152s-.152-.066-.152-.152m-.836 5.264h-.874c-.019-.105-.114-.219-.247-.219s-.256.105-.256.257c0 .132.114.275.266.275.104 0 .218-.076.237-.19h.827v.608l-.257.285a.3.3 0 0 0-.095-.019c-.133 0-.256.105-.256.228 0 .133.104.238.237.238.124 0 .247-.105.247-.238a.23.23 0 0 0-.057-.152l.285-.304v-.712c0-.029-.019-.058-.057-.058m-1.121.219a.16.16 0 0 1-.152-.161c0-.077.066-.162.152-.162s.152.066.152.152-.066.171-.152.171m.713 1.14c-.076 0-.143-.066-.143-.143s.066-.133.143-.133.142.067.142.143c0 .066-.066.133-.143.133m5.472-1.377a.24.24 0 0 0-.237.208h-1.13c-.029 0-.038.02-.038.048v.712l-.323.39h-.029a.245.245 0 0 0-.247.247c0 .133.114.256.247.256s.247-.113.247-.256a.26.26 0 0 0-.123-.219l.313-.38v-.674h1.083c.019.105.114.2.238.2.133 0 .266-.105.266-.257 0-.133-.105-.276-.266-.276m-1.758 1.767a.15.15 0 0 1-.143-.152c0-.075.067-.142.143-.142s.152.066.152.143a.15.15 0 0 1-.152.151m1.758-1.33a.15.15 0 0 1-.143-.152.147.147 0 0 1 .294.001.15.15 0 0 1-.152.151M8.917 5.55h-.399a.075.075 0 0 1-.076-.076c0-.028.029-.066.067-.066h.418c.028 0 .066.028.066.066s-.038.076-.076.076m.742 0H9.22c-.038 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.437c.038 0 .066.028.066.066s-.028.076-.066.076m.883 0h-.598c-.029 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.598c.028 0 .066.028.066.066s-.028.076-.066.076m-1.282.4h-.741c-.038 0-.076-.029-.076-.067s.028-.076.066-.076h.75c.039 0 .067.038.067.076 0 .029-.028.067-.066.067m.797 0h-.503c-.038 0-.076-.029-.076-.067s.028-.066.066-.066h.513c.038 0 .067.028.067.066 0 .029-.029.067-.067.067m.476 0h-.19c-.039 0-.067-.029-.067-.067s.028-.066.066-.066h.2c.028 0 .066.028.066.066 0 .029-.028.067-.075.067m-1.682.398h-.332c-.039 0-.077-.028-.077-.066s.029-.066.067-.066h.342c.038 0 .076.028.076.066s-.028.066-.076.066m.789 0h-.494c-.038 0-.067-.028-.067-.066s.029-.066.067-.066h.494c.038 0 .066.028.066.066s-.028.066-.066.066m.893 0h-.599c-.038 0-.076-.028-.076-.066s.028-.066.066-.066h.618c.028 0 .066.028.066.066s-.028.066-.076.066m.418.305a.69.69 0 0 0-.674.712c0 .086.019.18.048.257l.085.066c-.028-.085-.057-.171-.057-.304 0-.285.228-.646.598-.646.295 0 .599.228.599.636a.58.58 0 0 1-.599.59.8.8 0 0 1-.237-.048l.123.114a.4.4 0 0 0 .114.01c.39 0 .684-.276.684-.666 0-.313-.266-.712-.684-.722m.353.552-.019-.01-.161.19-.143-.01-.057-.047-.019-.133.19-.2a.28.28 0 0 0-.361.077c-.076.095-.076.209-.038.351l-.247.304.171.152.266-.266c.142.038.285.019.38-.095a.31.31 0 0 0 .038-.313"/>'},"claude-security":{className:"brand-claude",mark:`<path class="fg" d="${Fh}"/>`},"codex-security":{className:"brand-codex",mark:'<path class="fg" d="M11.04 8.364a1.72 1.72 0 0 0-.152-1.432 1.8 1.8 0 0 0-1.925-.846 1.8 1.8 0 0 0-.778-.498 1.8 1.8 0 0 0-.927-.05 1.8 1.8 0 0 0-.827.414 1.77 1.77 0 0 0-.507.767 1.8 1.8 0 0 0-.683.297 1.75 1.75 0 0 0-.499.549 1.75 1.75 0 0 0 .22 2.07 1.72 1.72 0 0 0 .151 1.432 1.8 1.8 0 0 0 1.926.846 1.77 1.77 0 0 0 1.333.587c.78 0 1.47-.496 1.707-1.227a1.8 1.8 0 0 0 .684-.298 1.75 1.75 0 0 0 .499-.548 1.75 1.75 0 0 0-.222-2.063m-2.667 3.678a1.33 1.33 0 0 1-.851-.304l.042-.024 1.413-.804a.23.23 0 0 0 .116-.199V8.747l.597.34q.01.005.011.015v1.629a1.323 1.323 0 0 1-1.328 1.31m-2.857-1.203a1.3 1.3 0 0 1-.158-.879l.042.025 1.414.805a.23.23 0 0 0 .23 0l1.729-.982v.68a.02.02 0 0 1-.01.018l-1.431.814a1.34 1.34 0 0 1-1.816-.48m-.372-3.037a1.32 1.32 0 0 1 .7-.574v1.656a.22.22 0 0 0 .114.197l1.72.979-.598.34a.02.02 0 0 1-.021 0L5.63 9.587a1.304 1.304 0 0 1-.487-1.791zm4.907 1.125L8.327 7.94l.596-.34a.02.02 0 0 1 .02 0l1.43.814a1.3 1.3 0 0 1 .512.528 1.3 1.3 0 0 1-.118 1.4 1.33 1.33 0 0 1-.595.436V9.122a.23.23 0 0 0-.12-.195m.594-.881-.042-.025-1.411-.812a.23.23 0 0 0-.232 0l-1.727.983v-.68a.02.02 0 0 1 .008-.018l1.429-.813a1.34 1.34 0 0 1 1.425.061 1.3 1.3 0 0 1 .55 1.298zM6.908 9.252l-.597-.34a.02.02 0 0 1-.012-.016V7.271c0-.249.073-.493.209-.703s.329-.378.557-.483a1.35 1.35 0 0 1 1.415.18l-.042.023-1.413.804a.23.23 0 0 0-.116.2zm.324-.69.77-.438.77.438v.875l-.768.437-.77-.437z"/>'},deepsec:{className:"brand-vercel",mark:'<path class="fg" d="m8 5.97 3.5 6.062h-7Z"/>'},piolium:{className:"brand-piolium",mark:'<path class="fg" d="M8 6.4 5.6 7.2v2.3c0 1.6 1 2.7 2.4 3.3 1.4-.6 2.4-1.7 2.4-3.3V7.2Z"/>'}},iP={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"]},nu=Object.fromEntries(Object.entries(v3).map(([e,{className:t,mark:r}])=>{let[n,o]=iP[e],i=e==="codex-security"||e==="deepsec"?` stroke="${o}" stroke-width=".5"`:"";return[e,`<svg class="file-icon ${t}" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path class="bg" fill="${n}"${i} d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/><g fill="${o}">${r}</g></svg>`]})),nt=Object.fromEntries(Object.entries(v3).map(([e,{className:t,mark:r}])=>[e,`<span class="report-logo ${t}" aria-hidden="true"><svg viewBox="${e==="default"?"3.5 4 9 9":"4 5 8 8"}" width="14" height="14">${r}</svg></span>`]))});function y3(e){return e!=="default"&&Object.hasOwn(nt,e)?e:null}function ou(e){return y3(e._source??e.source)}function w3(e){let t=new Set;for(let o of e){let i=y3(o.source);i!==null&&t.add(i);for(let s of o.groups.flat()){let a=ou(s);a!==null&&t.add(a)}}let r=Object.keys(kt),n=o=>{let i=r.indexOf(o);return i===-1?r.length:i};return[...t].toSorted((o,i)=>n(o)-n(i)||o.localeCompare(i))}function ot(e){return sw(e,Lt(e))}function sw(e,t){if(t===Xe)return Xe;if(t!==void 0)return sP.has(t)?t:"default";let r=e.toLowerCase();return r.endsWith(".codex")?"codex-security":r.endsWith(".md")?"claude-security":"default"}function Dh(e){return Lt(e)===Xe}function Ae(e){return e.toLowerCase().endsWith(".codex")?e.slice(0,-6).replaceAll("__","/"):e}var Se,sP,Gs,un=k(()=>{"use strict";U();Ph();Ph();ge();gt();Se={...nu,[Xe]:Sl},sP=new Set(["claude-security","codex-security","deepsec","piolium"]),Gs={...kt,default:"DeepView"}});function iu(e=document){if(e.querySelector(":modal"))return!0;for(let t of e.querySelectorAll("*"))if(t.shadowRoot&&iu(t.shadowRoot))return!0;return!1}var aw=k(()=>{"use strict"});function su(e){return typeof e=="string"&&/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(e)?e:null}var zh=k(()=>{"use strict"});function aP(){return Pr||(Pr=document.createElement("div"),Pr.id="styled-tooltip",Pr.setAttribute("popover","manual"),document.body.append(Pr),Pr)}function lP(e){typeof e.showPopover=="function"&&(e.matches(":popover-open")&&e.hidePopover(),e.showPopover())}function lw(e,{placement:t="cursor"}={}){t=e.dataset.tooltipPlacement??t;let r=aP(),n=e.dataset.tooltip??"",o=e.dataset.tooltipRepo??"",i=su(e.dataset.tooltipCommit),s=["stasis","sourcemap"].includes(e.dataset.tooltipBundle)?e.dataset.tooltipBundle:"",a=e.dataset.tooltipStats??"",c=e.dataset.tooltipPackage??"",u=e.dataset.tooltipEcosystem??"",p=e.dataset.tooltipVersion??"",f=e.dataset.tooltipFiles??"",h=JSON.stringify([n,o,i,s,a,c,u,p,f]);if(!n||yi===e&&k3===h)return;if(r.textContent=n,c){let S=document.createElement("div");S.className="tooltip-package";let M=e.querySelector("svg")?.cloneNode(!0);M&&S.append(M);let R=document.createElement("span");R.className="tooltip-package-details";for(let P of[c,p,/^\d+$/u.test(f)?`${f} ${f==="1"?"file":"files"}`:""].filter(Boolean)){let L=document.createElement("span");L.textContent=P,R.append(L)}S.append(R),r.append(S)}if(o||i){let S=document.createElement("div");if(S.className="tooltip-repo",o){S.innerHTML=Wn;let M=document.createElement("span");M.textContent=o,S.append(M)}if(i){let M=document.createElement("span");M.className="tooltip-commit",M.innerHTML=Nh;let R=document.createElement("span");R.textContent=i.slice(0,7),M.append(R),S.append(M)}r.append(S)}if(s||a){let S=document.createElement("div");if(S.className="tooltip-bundle",s==="stasis"){let P=document.createElement("img");P.src="./stasis.svg",P.alt="",S.append(P)}else S.innerHTML=or;let M=document.createElement("span"),R=s==="stasis"?"Stasis":s==="sourcemap"?"Sourcemap":"";M.textContent=[R,a].filter(Boolean).join(" \xB7 "),S.append(M),r.append(S)}lP(r),r.style.left="0px",r.style.top="0px",r.style.transform="none",r.classList.add("visible");let g=S3,b=C3+dP;if(t==="right"||t==="right-start"){let S=e.getBoundingClientRect();g=S.right+uP,b=S.top+(t==="right"?S.height/2:0)}let v=window.innerWidth-r.offsetWidth-Uh,x=Math.max(Uh,Math.min(g,v));r.style.left=`${Math.round(x)}px`;let w=r.offsetHeight,y=t==="right"?b-w/2:b,$=window.innerHeight-w-Uh,_=Math.max(Uh,Math.min(y,$));r.style.top=`${Math.round(_)}px`,yi=e,k3=h}function wi(){clearTimeout(au),au=null,Pr&&(Pr.classList.remove("visible"),typeof Pr.hidePopover=="function"&&Pr.matches(":popover-open")&&Pr.hidePopover()),yi=null}function E3(e,{gate:t,placement:r}={}){t&&!t(e)||(clearTimeout(au),au=setTimeout(()=>{lw(e,{placement:r})},cP))}function $3(e,t){for(let r of e.composedPath()){if(r===t)break;if(r.nodeType===1&&Object.hasOwn(r.dataset,"tooltip"))return r}return null}function qt(e,t){!e||x3.has(e)||(x3.add(e),e.addEventListener("mouseover",r=>{let n=$3(r,e);if(!n){wi();return}n!==yi&&E3(n,t)}),e.addEventListener("mouseout",r=>{let n=$3(r,e),o=r.relatedTarget?.closest?.("[data-tooltip]")??null;n&&n===o||wi()}))}function M3(){_3||(_3=!0,document.body.addEventListener("mouseover",e=>{if(e.target.closest("[data-tooltip-managed]"))return;let t=e.target.closest("[data-tooltip]");!t||t===yi||(wi(),E3(t))}),document.body.addEventListener("mouseout",e=>{e.target.closest("[data-tooltip-managed]")||e.relatedTarget?.closest?.("[data-tooltip-managed]")||!yi&&!au||yi&&yi.contains(e.relatedTarget)||wi()}))}var Pr,yi,k3,au,S3,C3,cP,dP,uP,Uh,x3,_3,xo=k(()=>{"use strict";gt();zh();yi=null,k3="",au=null,S3=0,C3=0;document.addEventListener("mousemove",e=>{S3=e.clientX,C3=e.clientY},{passive:!0});cP=100,dP=14,uP=8,Uh=8;x3=new WeakSet;_3=!1});var A3,R3=k(()=>{A3=`a{cursor:default}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}button,summary,select,label,legend,header h3,.section-title,.ui-hint,.hint,.note,.lwd-note,.lwd-empty,.empty:not(.error,[role=alert]),.empty-discussion,.history-state[role=status],.history-summary{cursor:default;user-select:none;-webkit-user-select:none}input:not([type=checkbox],[type=radio]),textarea,[contenteditable],pre,code,.mono{cursor:text;user-select:text;-webkit-user-select:text}dialog{margin-top:5rem;margin-inline:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--surface);color:var(--text);padding:1.1rem 1.25rem 1rem;max-width:480px;width:min(94vw,480px);box-shadow:0 20px 60px #00000059;&::backdrop{background:rgb(from var(--theme-bar) r g b / .55);backdrop-filter:blur(2px)}}header h3{margin:0 0 .6rem;font-size:1rem;font-weight:600}.nwd-input{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}.nwd-note{margin:.55rem 0 0;color:var(--muted);font-size:.74rem;line-height:1.45}.nwd-intro{margin:0 0 .8rem;color:var(--muted);font-size:.82rem;line-height:1.5}.nwd-actions{display:flex;align-items:center;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.nwd-spacer{flex:1}.nwd-actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent);&:hover:not(:disabled){color:var(--surface);filter:brightness(1.08)}}&.quiet{border-color:transparent;color:var(--muted);&:hover:not(:disabled){border-color:transparent}}&.danger{color:var(--critical, #f87171);border-color:var(--border);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--critical, #f87171)}}&:disabled{opacity:.5}}@media(display-mode:window-controls-overlay){dialog{-webkit-app-region:no-drag;app-region:no-drag}}
|
|
82
|
+
`});function le(e,t={}){return new Promise(r=>{let n=document.createElement(e);Object.assign(n,t),n.addEventListener("resolve",o=>{n.remove(),r(o.detail)}),document.body.append(n)})}function ki(e,t,r){return new Promise((n,o)=>{let i=document.createElement(e);Object.assign(i,t),i.exclusive=!0,i.addEventListener("resolve",s=>{i.remove(),n(s.detail)}),i.addEventListener("modal-conflict",s=>{r(i),i.remove(),o(Ta(s.detail?.cause))}),document.body.append(i)})}var D,pe=k(()=>{"use strict";T();mr();aw();xo();R3();D=class extends J{static styles=[F(A3)];exclusive=!1;firstUpdated(){qt(this.renderRoot),this.beforeOpen();let t=this.renderRoot.querySelector("dialog");if(t){if(this.exclusive&&iu()){this._conflict(new DOMException("Another modal dialog is already open","InvalidStateError"));return}try{t.showModal()}catch(r){this._conflict(r);return}this.focusInitial()}}_conflict(t){this._settled=!0,this.dispatchEvent(new CustomEvent("modal-conflict",{detail:{cause:t}}))}beforeOpen(){}focusInitial(){(this.renderRoot.querySelector("input, textarea")??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector("button"))?.focus()}_finish(t){this._settled||(this._settled=!0,this.renderRoot.querySelector("dialog")?.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t})))}_onClose=()=>this._finish(null)}});var Dr,Ks=k(()=>{Dr=`dialog{max-width:520px;width:min(94vw,520px)}.wsl-field{display:block;margin-top:.6rem;color:var(--text);font-size:.78rem;>span{display:block;margin-bottom:.25rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}}.wsl-ack{display:flex;align-items:flex-start;gap:.5rem;margin-top:.6rem;color:var(--text);font-size:.8rem;line-height:1.4;>input[type=checkbox]{flex:0 0 auto;margin-top:.15rem}>span{flex:1 1 auto}}.wsl-link{display:block;width:100%;box-sizing:border-box;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.78rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;word-break:break-all}.wsl-error{margin:.55rem 0 0;color:var(--critical, #f87171);font-size:.74rem;line-height:1.4}.wsl-warning{padding:.55rem .65rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 6px);background:rgb(from var(--critical, #f87171) r g b / .08);>p+p{margin-top:.45rem}}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}.nwd-actions button.primary.danger{background:var(--critical, #f87171);border-color:var(--critical, #f87171);color:var(--surface);&:hover:not(:disabled){border-color:var(--critical, #f87171);color:var(--surface);filter:brightness(1.08)}}
|
|
83
|
+
`});function Hh({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return ki("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var cw,dw=k(()=>{"use strict";T();pe();Ks();cw=class extends D{static styles=[...D.styles,F(Dr)];static properties={_password:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this._password="",this._busy=!1,this._error="",this._settled=!1,this._tryPassword=null}_finish(t){this._settled||(this._password="",this._tryPassword=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await this._tryPassword(this._password);if(this._settled)return;this._finish(t)}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onUnlock())};render(){return d`<dialog @close="${this._onClose}"><header><h3>Unlock encrypted workspace</h3></header><p class="nwd-note ui-hint">This workspace bundle is password-protected. Enter the password the sender shared with you separately to decrypt and import it.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-bundle-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?d`<p class="wsl-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer></dialog>`}};customElements.define("workspace-unlock-bundle-dialog",cw)});var I3,T3,lu,L3,F3,pte,fte,hte,mte,gte,uw=k(()=>{"use strict";I3=globalThis[Symbol.for("@rray/frontend")];if(!I3)throw new Error("@rray/frontend global not installed; view.js must run before lazy bundles import this wrapper");({LitElement:T3,html:lu,nothing:L3,unsafeCSS:F3,render:pte,StateElement:fte,classMap:hte,repeat:mte,styleMap:gte}=I3)});function xi(e,t=!1){Ml=e!==!1&&!t}function du(){return Ml}function _r(e){return Ml?$e(e):""}function W3(e){return $e(e)!==""}function mw(e){let t=$e(e);return t!==""&&t!=="revalidation"}function jh(e){return e.some(t=>(t.groups??[]).some(r=>r.some(mw)))}function gw(e){let t=_r(e);return t&&t!=="revalidation"?t:null}function uu(e){return _r(e)==="revalidation"}function qs(e){return G3.has(_r(e))}function K3(e){return G3.has(_r(e))}function Wh(e){return Vh.find(t=>t.value===e)?.kinds??null}function pu(e,t){let r=Wh(e);return r?.includes("partial")?t==="only"?["partial"]:t==="exclude"?["confirmed"]:r:r}function q3(e){let t=new Set(e);return Vh.filter(r=>r.kinds.some(n=>t.has(n)))}function Kh(e){return new RegExp(`(^|/)${e}/`,"u")}function Y3(e){return new RegExp(`^(?:.*/)?${e}/(?:@[^/]+/[^/]+|[^/]+)/(.*)$`,"u")}function hP(e){e!==cu&&(cu=e,bw=Kh(e),Z3=Y3(e))}function qh(e){let t=!1,r=!1,n=o=>(!t&&X3.test(o)&&(t=!0),!r&&J3.test(o)&&(r=!0),t);e:for(let o of e){for(let i of o.groups??[])for(let s of i)if(n(s.file))break e;if(o.tree){for(let i of Object.keys(o.tree))if(n(i))break e}}hP(t?"node_modules":r?"vendor":"dependencies")}function Q3(){return cu}function ir(e){return bw.test(e)}function Yh(e){let t=!1;for(let r of e??[])for(let n of r.groups??[])for(let o of n){if(o.isApp!==!1)continue;let i=pw.has(o);"isUpstream"in o&&!i||(ir(o.file)?(o.isUpstream!==!0&&(t=!0),o.isUpstream=!0,pw.add(o)):i&&(t=!0,delete o.isUpstream,pw.delete(o)))}return t}function B3(e){let t=typeof e=="string"?e:"";return X3.test(t)||J3.test(t)||bw.test(t)}function O3(e){return mP.exec(typeof e=="string"?e:"")?.[1]??null}function we(e){return typeof e!="number"||!Number.isFinite(e)?null:`${e.toLocaleString()} B`}function Sr(e){if(e.length<=1)return{prefix:"",stripped:[...e]};let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=0;for(let s=0;s<r-1&&t.every(a=>a[s]===t[0][s]);s++)n=s+1;if(n>0&&t[0][n-1].startsWith("@")&&n--,n>0&&t[0][n-1]==="node_modules"&&n--,n===0)return{prefix:"",stripped:[...e]};let o=`${t[0].slice(0,n).join("/")}/`,i=t.map(s=>s.slice(n).join("/"));return{prefix:o,stripped:i}}function gP(e){return e.match(Z3)?.[1]??e}function e4(e){let t=Ml?[gw(e),e.revalidateVerdict,e.revalidateRecommendation]:[];return[e.file,e.title,e.description,e.impact,e.reproduction,hu(e),e.recommendation,e.confidenceReason,...t,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
|
|
84
|
+
`).toLowerCase()}function Ys(e){return[typeof e?.category=="string"?e.category.trim():"",id(e,Ml)].filter(Boolean).join(" \xB7 ")}function fu(e){if(e.length===0)return"";let t=e[0];for(let r=1;r<e.length;r++){for(;t&&!e[r].startsWith(t);)t=t.slice(0,-1);if(!t)return""}return t}function it(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}function t4(e){if(!e)return null;let t=e.trim().replace(/\/$/u,"");return t?/^https?:\/\//iu.test(t)?t:/^github\.com\//iu.test(t)?`https://${t}`:`https://github.com/${t}`:null}function vP(e){return bP.test(e||"")}function N3(e){if(e==null||typeof e=="string")return{id:e??"",prefix:""};let t=Bn(e);return{id:typeof e.github=="string"?e.github:"",prefix:t?`${t}/`:""}}function yP(e,t,r){if(vP(e))return null;let n=N3(t);if(n.id)return`https://github.com/${n.id}/blob/HEAD/${n.prefix}${gP(e)}`;if(ir(e))return null;let o=N3(r),i=t4(o.id);return i?`${i}/blob/HEAD/${o.prefix}${e}`:null}function vw(e,t){let r=e?.file??"",n=zr(e,t);return n?lu`<a href="${wP(n)}" target="_blank" rel="noopener">${r}</a>`:r}function wP(e){return e.replace(/#L\d+(?:-L?\d+)?$/u,"")}function zr(e,t){if(!e)return null;if(Pe(e.location))return e.location;let r=yP(e.file,e.repo,t);if(!r)return null;let n=parseInt(e.line,10);return Number.isFinite(n)?`${r}#L${n}`:r}function r4(e){let t=typeof e=="string"?kP.exec(e):null;if(!t)return"";let r=t[2],n=xP.exec(r);if(!n)return`${t[1]}/${r}`;r=r.slice(0,n.index);let o=n[2]?`${n[1]}-${n[2]}`:n[1];return`${t[1]}/${r}:${o}`}function n4(e){return e.split(/(\n{2,})/u).map(t=>{if(/^\n+$/u.test(t))return t;let r=t.split(`
|
|
85
|
+
`);return r.some(n=>$P.test(n))?t:r.map(n=>n.trim()).filter(Boolean).join(" ")}).join("")}function P3(e,t,r){let n=t?/^\n*/u.exec(e)[0]:"",o=e.slice(n.length),i=r?/\n*$/u.exec(o)[0]:"";return n+n4(o.slice(0,o.length-i.length))+i}function Rl(e){if(!e)return e;let t=ft(e);if(t.length===0)return n4(e);let r=[],n=0;for(let[o,i]of t)o>n&&r.push(P3(e.slice(n,o),n>0,!0)),r.push(e.slice(o,i)),n=i;return n<e.length&&r.push(P3(e.slice(n),!0,!1)),r.join("")}function o4(e,t){let r=0;for(;r<t&&e[r]===" ";)r++;return e.slice(r)}function SP(e){let t=e.split(`
|
|
86
|
+
`),r=D3.exec(t[0]),n=(r?.[2]??"```").slice(0,3),o=(r?.[3]??"").trim().split(/\s+/u)[0].toLowerCase(),s=!!(t.length>1?D3.exec(t.at(-1)):null)?.[2].startsWith(n),a=r?.[1].length??0,c=t.slice(1,s?-1:void 0);return{lang:_P.test(o)?o:"",code:(a>0?c.map(u=>o4(u,a)):c).join(`
|
|
87
|
+
`)}}function i4(e){let t=ft(e||"");if(t.length===0)return[e];let r=[],n=0,o=(i,s)=>{let a=(s?i.replace(/^\n+/u,""):i).replace(/\n+$/u,"");a&&r.push(a)};for(let[i,s]of t)i>n&&o(e.slice(n,i),n>0),r.push(SP(e.slice(i,s))),n=s;return n<e.length&&o(e.slice(n),!0),r}function CP(e){return/^ */u.exec(e)[0].length}function U3(e){let t=e.length;for(;t>0&&!e[t-1].trim();)t--;return e.slice(0,t).join(`
|
|
88
|
+
`)}function s4(e){let t=typeof e=="string"?e:"";if(!t)return[e];let r=ft(t),n=t.split(`
|
|
89
|
+
`),o=[],i=0;for(let f of n)o.push(i),i+=f.length+1;let s=f=>!yr(r,o[f])&&!z3.test(n[f])&&fw.test(n[f]),a=[],c=0,u=0,p=f=>{let h=n.slice(c,f).join(`
|
|
90
|
+
`).replace(/^\n+/u,"").replace(/\n+$/u,"");h.trim()&&a.push(h)};for(;u<n.length;){if(!s(u)){u++;continue}p(u);let f=fw.exec(n[u]),h=!!f[2],g=[],b=null,v=!1;for(;u<n.length;){let x=n[u];if(!yr(r,o[u])){if(!x.trim()){b.lines.push(""),v=!0,u++;continue}let w=CP(x),y=z3.test(x)?null:fw.exec(x);if(y&&(!b||w<b.column)){if(!!y[2]!==h)break;b&&g.push(U3(b.lines)),b={column:y[0].length,lines:[x.slice(y[0].length)]},v=!1,u++;continue}if(w<b.column&&v)break}b.lines.push(o4(x,b.column)),v=!1,u++}b&&g.push(U3(b.lines)),a.push({ordered:h,start:h?Number(f[2]):null,items:g}),c=u}return a.length===0?[e]:(p(n.length),a)}function Bt(e){if(typeof e=="number")return Number.isFinite(e)&&e>=1?{start:Math.floor(e),end:Math.floor(e)}:null;let t=EP.exec(String(e??"").trim());if(!t)return null;let r=parseInt(t[1],10),n=t[2]===void 0?r:parseInt(t[2],10);return!Number.isFinite(r)||r<1||!Number.isFinite(n)||n<1?null:{start:Math.min(r,n),end:Math.max(r,n)}}function Xh(e){return e?e.start===e.end?String(e.start):`${e.start}-${e.end}`:""}function MP(e){if(e&&typeof e=="object"){let t=Bt(e.start);if(!t)return null;let r=Bt(e.end)??t;return{start:t.start,end:Math.max(t.start,r.end)}}return Bt(e)}function a4(e,t,r=4){let n=typeof e=="string"&&e!==""?e.split(`
|
|
91
|
+
`):[];if(n.length===0)return{text:"",startLine:1,lines:[]};let o=MP(t),i=o&&{start:Math.min(o.start,n.length),end:Math.min(o.end,n.length)},s=i?Math.max(1,i.start-r):1,a=i?Math.min(n.length,i.end+r):Math.min(n.length,r*2+1),c=n.slice(s-1,a);return{text:c.join(`
|
|
92
|
+
`),startLine:s,lines:c}}function Jh(e,t,r,n){if(Pe(e?.url))return e.url;let o=e?.file;if(typeof o!="string"||o==="")return null;let i=t?.file??"",s=t?.repo?.github,a=()=>s?zr({file:o,line:e?.line,repo:t.repo},null):null;if(n===0&&o===i)return a();let c=O3(o);return c!==null&&c===O3(i)?a():B3(o)?null:s&&!B3(i)?a():zr({file:o,line:e?.line},r)}function l4(e,{spaced:t=!1}={}){let r=Array.isArray(e?.evidence)?e.evidence:[];return r.length===0?"":r.map((n,o)=>{let i=xt(n),s=[`${o+1}. ${n.url?`[${i}](${n.url})`:i}`],a=ks(n);if(a)for(let c of a.split(`
|
|
93
|
+
`))s.push(` ${c}`);return s.join(`
|
|
94
|
+
`)}).join(t?`
|
|
95
|
+
|
|
96
|
+
`:`
|
|
97
|
+
`)}function hu(e){let t=l4(e);return t?`**Evidence:**
|
|
98
|
+
${t}`:""}function c4(e){let t=/^\[([^\]]+)\]\(([^)\s]+)\)$/u.exec(e);return!t||!Pe(t[2])?null:{label:nd(t[1].trim())||t[2],url:t[2]}}function d4(e,t){let r=parseInt(e?.line,10);if(!Number.isFinite(r))return L3;let n=zr(e,t),o=`line ${r}`;return n?lu`<a href="${n}" target="_blank" rel="noopener">${o}</a>`:o}function Zh(e,t){return!e||!t?null:`${/^https?:/iu.test(e)?e.replace(/\/$/u,""):`https://github.com/${e}`}/commit/${t}`}function u4(e,t){let r=[];t&&r.push(`Repo: ${t}`);let n=xt(e);n&&r.push(`Location: ${n}`),e?.confidence!=null&&r.push(`Confidence: ${e.confidence}/10`);let o=_r(e);o&&r.push(`Revalidation: ${o}`);let i=[];r.length>0&&i.push(r.join(`
|
|
99
|
+
`));let{title:s,body:a}=ti(e);s&&i.push(`# ${s}`),a&&i.push(a.trim());let c=l4(e,{spaced:!0});c&&i.push(`# Evidence
|
|
100
|
+
|
|
101
|
+
${c}`);for(let[u,p]of RP){if(!Ml&&p.startsWith("revalidate"))continue;let f=jt(e?.[p],e)?.trim();f&&i.push(`# ${u}
|
|
102
|
+
|
|
103
|
+
${f}`)}return i.join(`
|
|
104
|
+
|
|
105
|
+
`)}function p4(e,{title:t,body:r,labels:n=[]}={}){let o=t4(e);if(!o)return null;let i;try{i=new URL(o).host.toLowerCase()}catch{return null}if(i!=="github.com")return null;let s=new URLSearchParams;t&&s.set("title",t),r&&s.set("body",r),n.length>0&&s.set("labels",n.join(","));let a=s.toString();return a?`${o}/issues/new?${a}`:`${o}/issues/new`}function j3(e){return e.length<=39&&AP.test(e)}function V3(e){return e.length<=100&&e!=="."&&e!==".."&&IP.test(e)}function BP(e){let t;try{t=new URL(e)}catch{return null}if(t.href!==e||t.protocol!=="https:"||t.hostname.toLowerCase()!=="github.com"||t.port||t.username||t.password)return null;let r=t.pathname.split("/");if(r.at(-1)===""&&r.pop(),r.length===3&&r[1]==="advisories"){let p=r[2];return H3.test(p)?{url:`https://github.com/advisories/${p}`,label:p}:null}if(r.length===6&&r[3]==="security"&&r[4]==="advisories"){let[,p,f,,,h]=r;return!j3(p)||!V3(f)||!H3.test(h)?null:{url:`https://github.com/${p}/${f}/security/advisories/${h}`,label:h}}if(r.length!==5)return null;let[,n,o,i,s]=r;if(!j3(n)||!V3(o))return null;let a;if(i==="issues"||i==="pull"){if(!TP.test(s))return null;a=`${n}/${o}#${s}`}else if(i==="commit"){if(!LP.test(s))return null;a=`${n}/${o}@${s.slice(0,7)}`}else return null;let c=FP.test(t.hash)?t.hash:"";return{url:`https://github.com/${n}/${o}/${i}/${s}${c}`,label:a}}function Xs(e){if(typeof e!="string")return null;let t=mu(e);return t!==e||OP.test(e)?t.slice(0,8):null}function mu(e){let t=String(e),r="https://chatgpt.com/codex/cloud/security/findings/";return t.startsWith(r)?t.slice(r.length):t}function NP(e,t){let r=C2(e,{managed:t});if(!r)return null;let n=Xs(r.id);return{url:t?r.path:`#${r.fragment}`,label:n?`finding ${n}`:"finding",self:!0}}function DP(e){let t=e.length;for(;t>0&&PP.has(e[t-1]);)t--;return t===e.length?e:e.slice(0,t)}function f4(e,{managed:t=!1}={}){if(typeof e!="string"||e.length===0)return[];let r=[],n=0;hw.lastIndex=0;let o;for(;(o=hw.exec(e))!==null;){let i=DP(o[0]),s=i?BP(i)??NP(i,t):null;s&&(o.index>n&&r.push(e.slice(n,o.index)),r.push(s),n=o.index+i.length,hw.lastIndex=n)}return n<e.length&&r.push(e.slice(n)),r}var Ml,G3,Vh,Gh,X3,J3,cu,bw,Z3,pw,mP,bP,kP,xP,$P,D3,_P,fw,z3,EP,RP,AP,IP,TP,LP,FP,H3,OP,hw,PP,he=k(()=>{"use strict";ge();uw();za();Ml=!0;G3=new Set(["refuted","unreachable"]);Vh=[{value:"confirmed",label:"Confirmed",kinds:["confirmed","partial","revalidation"]},{value:"unreachable",label:"Unreachable",kinds:["unreachable"]},{value:"refuted",label:"Refuted",kinds:["refuted"]}];Gh=["","exclude","only"];X3=Kh("node_modules"),J3=Kh("vendor"),cu="node_modules",bw=Kh(cu),Z3=Y3(cu);pw=new WeakSet;mP=/^(.*(?:^|\/)node_modules\/(?:@[^/]+\/[^/]+|[^/]+))(?:\/|$)/u;bP=/^(?:@[\w.-]+\/)?[\w.-]+@[^/\s@]+$/u;kP=/^https?:\/\/(?:www\.)?github\.com\/([^/\s]+\/[^/\s]+)\/(?:blob|tree|blame)\/[^/\s]+\/(\S+)$/u,xP=/#L(\d+)(?:-L?(\d+))?$/u;$P=/^(?:\s+\S|[-*+] |\d+[.)] |>|#{1,6} |\||`{3}|~{3})/u;D3=/^( *)(`{3,}|~{3,})(.*)$/u,_P=/^[a-z0-9+#._-]{1,20}$/u;fw=/^( *)(?:[-*+]|(\d{1,9})[.)]) +(?=\S)/u,z3=/^ {0,3}([-*_])(?: *\1){2,} *$/u;EP=/^(\d+)(?:\s*-\s*(\d+))?$/u;RP=[["Impact","impact"],["Reproduction","reproduction"],["Recommendation","recommendation"],["Confidence reason","confidenceReason"],["Revalidation verdict","revalidateVerdict"],["Revalidation recommendation","revalidateRecommendation"]];AP=/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u,IP=/^[a-zA-Z\d._-]+$/u,TP=/^[1-9]\d{0,9}$/u,LP=/^[a-fA-F\d]{7,40}$/u,FP=/^#[\w-]+$/u,H3=/^GHSA(?:-[0-9a-z]{4}){3}$/u;OP=/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/u;hw=/https?:\/\/[^\s<>"'`(){}[\]|\\^]+/giu,PP=new Set([")",".",",","!","?",";",":","'",'"',"*","]","}",">"])});var $i,gu=k(()=>{$i=`.conflict-sev{display:inline-block;padding:1px .4rem;border-radius:3px;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;flex-shrink:0;&.sev-critical{background:var(--critical)}&.sev-high{background:var(--high)}&.sev-medium{background:var(--medium)}&.sev-low{background:var(--low)}&.sev-high_bug{background:var(--high-bug)}&.sev-bug{background:var(--bug)}&.sev-informational{background:var(--info)}}
|
|
106
|
+
`});var m4,h4=k(()=>{m4=`dialog{max-width:720px;width:min(94vw,720px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .75rem;color:var(--muted);font-size:.82rem}.bulk{display:flex;gap:.4rem;margin-bottom:.7rem;padding-bottom:.7rem;border-bottom:1px solid var(--border)}.bulk button,.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}}.list{list-style:none;margin:0;padding:0;max-height:60vh;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;display:flex;flex-direction:column;gap:.5rem}.card{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem .6rem;background:rgb(from var(--text) r g b / .02)}.card-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;color:var(--muted);padding:1px .3rem;background:rgb(from var(--text) r g b / .05);border-radius:var(--ui-radius, 3px)}.desc{font-size:.78rem;color:var(--muted);margin-bottom:.55rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rows{display:flex;flex-direction:column;gap:.35rem}.row{display:grid;grid-template-columns:5rem 1fr 1fr;align-items:stretch;gap:.4rem}.row-label{color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;align-self:center}.choice{position:relative;display:flex;flex-direction:column;gap:.15rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);min-width:0;&:has(input:checked){border-color:var(--accent);background:rgb(from var(--accent) r g b / .07)}&:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:1px}}.choice input[type=radio]{position:absolute;opacity:0;pointer-events:none}.choice-label{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.choice:has(input:checked) .choice-label{color:var(--accent)}.choice-value{font-size:.82rem;min-width:0}.flag-badge{font-size:.82rem;color:var(--muted)}.flag-badge.on{color:var(--accent);font-weight:600}.color{display:inline-flex;align-items:center;gap:.35rem}.color-dot{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .2);flex-shrink:0;&.marker-red{background:var(--marker-red)}&.marker-blue{background:var(--marker-blue)}&.marker-green{background:var(--marker-green)}&.marker-gray{background:var(--marker-gray)}}.color-name{text-transform:capitalize}.comment-text,.fix-text{cursor:text;user-select:text;-webkit-user-select:text}.comment-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;& em{color:var(--muted);font-style:italic}}.fix-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}
|
|
107
|
+
`});function Qh({tabs:e,current:t,prefix:r,select:n,disabled:o=!1}){return d`<div class="dlg-tabs" role="tablist" @keydown="${s=>{if(s.key!=="ArrowLeft"&&s.key!=="ArrowRight")return;s.preventDefault();let a=e.findIndex(f=>f.id===t),c=s.key==="ArrowRight"?1:-1,u=e[(a+c+e.length)%e.length];if(!u||u.id===t)return;let p=s.currentTarget;n(u.id),requestAnimationFrame(()=>p.querySelector(`#${r}-tab-${u.id}`)?.focus())}}">${e.map(s=>d`<button type="button" role="tab" class="dlg-tab" id="${`${r}-tab-${s.id}`}" aria-controls="${`${r}-panel-${s.id}`}" aria-selected="${String(t===s.id)}" tabindex="${t===s.id?0:-1}" ?disabled="${o&&t!==s.id}" @click="${()=>n(s.id)}">${s.icon??m}${s.label}</button>`)}</div>`}function _i(e){if(!e)return m;let t=e.replaceAll("_"," ");return d`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function HP(e){return`bundle-${e.slice(7,19)}\u2026`}function Si(e){return e.kind==="bundle"?e.label??HP(e.identifier):e.identifier}function g4(e){return e.kind==="bundle"?"bundle":Dh(e.identifier)?"links file":"report"}function em(e){let t=e.length,r=t===1,n=new Set(e.map(g4)),o="items";if(n.size===1){let i=[...n][0];o=r?i:`${i}s`}return{count:t,singular:r,kindLabel:o}}function tm(e){return d`<ul class="lwd-list">${e.map(t=>{let r=g4(t);return d`<li>${Si(t)}${r==="report"?m:d`<span class="lwd-kind-tag">${r}</span>`}</li>`})}</ul>`}function rm(e){return e.length===0?m:d`<ul class="lwd-list" role="alert">${e.map(t=>d`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}var $o=k(()=>{"use strict";T();un()});function jP(e){return e?d`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:d`<em>none</em>`}function VP(e){return d`<span class="comment-text">${e||d`<em>empty</em>`}</span>`}function WP(e){return e?Pe(e)?d`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:d`<span class="fix-text">${e}</span>`:d`<span class="comment-text"><em>empty</em></span>`}function GP(e){return e?d`<span class="${`triage triage-${e}`}">${e}</span>`:d`<em>none</em>`}function KP(e){return e?d`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:d`<em>none</em>`}function b4(e,t){return e==="color"?jP(t):e==="comment"?VP(t):e==="fix"?WP(t):e==="triage"?GP(t):e==="flagged"?KP(t):d`${String(t)}`}function qP(e,t){let r=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return d`<div class="card-head">${_i(e?.severity)} ${r?d`<span class="loc" title="${r}">${r}</span>`:m} <code class="id" title="${t}">${t.slice(0,8)}…</code></div>${e?.description?d`<div class="desc" title="${e.description}">${e.description}</div>`:m}`}function Al(e,t,r={}){return new Promise((n,o)=>{let i=document.createElement("triage-conflict-dialog");i.conflicts=e,i.findingLookup=t,i.labels={...y4,...r},i.addEventListener("resolve",s=>{i.remove(),n(s.detail)}),i.addEventListener("modal-conflict",s=>{i.remove(),o(Ta(s.detail?.cause))}),document.body.append(i)})}var y4,v4,YP,yw,bu=k(()=>{"use strict";T();he();mr();pe();gu();h4();$o();y4={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},v4={color:0,comment:1,fix:2,triage:3,flagged:4},YP={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},yw=class extends D{static styles=[...D.styles,F($i),F(m4)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...y4},this._settled=!1}focusInitial(){}_blockEscClose=t=>t.preventDefault();_onClick=t=>{let r=t.target.closest("[data-bulk]");if(!r)return;let n=r.dataset.bulk;for(let o of this.renderRoot.querySelectorAll(`input[type="radio"][value="${n}"]`))o.checked=!0};_onSubmit=t=>{t.preventDefault();let r={};for(let n of this.conflicts){let o=`${n.id}:${n.property}`,i=this.renderRoot.querySelector(`input[name="conflict-${CSS.escape(o)}"]:checked`);i&&(r[o]=i.value)}this._finish(r)};render(){let t=this.labels,r=new Map;for(let p of this.conflicts)r.has(p.id)||r.set(p.id,[]),r.get(p.id).push(p);for(let p of r.values())p.sort((f,h)=>(v4[f.property]??99)-(v4[h.property]??99));let n=this.conflicts.filter(p=>p.property==="color").length,o=this.conflicts.filter(p=>p.property==="comment").length,i=this.conflicts.filter(p=>p.property==="fix").length,s=this.conflicts.filter(p=>p.property==="triage").length,a=this.conflicts.filter(p=>p.property==="flagged").length,c=[n?`${n} color${n===1?"":"s"}`:"",o?`${o} comment${o===1?"":"s"}`:"",i?`${i} fix${i===1?"":"es"}`:"",s?`${s} triage state${s===1?"":"s"}`:"",a?`${a} flag${a===1?"":"s"}`:""].filter(Boolean).join(", "),u=`${r.size} finding${r.size===1?"":"s"}`;return d`<dialog @click="${this._onClick}" @cancel="${this._blockEscClose}" @close="${this._onClose}"><header><h3>${t.title}</h3><p>${u} ${t.intro} ${c}.${t.trailingNote?` ${t.trailingNote}`:""}</p><div class="bulk"><button type="button" data-bulk="local">Keep all current</button> <button type="button" data-bulk="imported">${t.importedSideLabel} (all)</button></div></header><form @submit="${this._onSubmit}"><ul class="list">${[...r.entries()].map(([p,f])=>d`<li class="card" data-id="${p}">${qP(this.findingLookup.get(p),p)}<div class="rows">${f.map(h=>{let g=`${h.id}:${h.property}`,b=`conflict-${g}`;return d`<div class="row" data-key="${g}"><span class="row-label">${YP[h.property]??h.property}</span> <label class="choice"><input type="radio" name="${b}" value="local" required> <span class="choice-label">Keep current</span> <span class="choice-value">${b4(h.property,h.local)}</span></label> <label class="choice"><input type="radio" name="${b}" value="imported" required> <span class="choice-label">${t.importedSideLabel}</span> <span class="choice-value">${b4(h.property,h.imported)}</span></label></div>`})}</div></li>`)}</ul><footer class="actions"><button type="submit" class="primary">${t.applyButton}</button></footer></form></dialog>`}};customElements.define("triage-conflict-dialog",yw)});var Ot,_o=k(()=>{Ot=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
|
|
108
|
+
`});var Ur,Il=k(()=>{"use strict";T();pe();_o();Ur=class extends D{static styles=[...D.styles,F(Ot)];focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}confirmationResult(t){return{confirmed:t}}_finish(t){this._settled||super._finish(this.confirmationResult(!!t))}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0)}});function w4(e){return le("local-triage-import-dialog",e)}var ww,k4=k(()=>{"use strict";T();pe();Il();ww=class extends Ur{static properties={matched:{type:Number},available:{type:Number}};constructor(){super(),this.matched=0,this.available=0}firstUpdated(){if(this.signal?.aborted){this._onCancel();return}this.signal?.addEventListener("abort",this._onCancel,{once:!0}),super.firstUpdated()}disconnectedCallback(){this.signal?.removeEventListener("abort",this._onCancel),super.disconnectedCallback()}confirmationResult(t){return{confirmed:t&&this.matched>0&&!this.signal?.aborted}}render(){return d`<dialog aria-labelledby="import-title" @close="${this._onClose}"><header><h3 id="import-title">Import local triage</h3></header><p class="lwd-body"><strong>${this.matched}</strong> of <strong>${this.available}</strong> local triage ${this.available===1?"entry":"entries"} can be imported.</p><p class="lwd-note">${this.matched>0?"Import saved triage and comments for these findings? Conflicting values will prompt for resolution.":this.available>0?"None match findings in managed reports.":"There is no saved local triage to import."}</p>${this.available>this.matched?d`<p class="lwd-empty">Unmatched entries stay in this browser.</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">${this.matched>0?"Cancel":"Close"}</button> ${this.matched>0?d`<button type="button" class="primary" @click="${this._onConfirm}">Import triage</button>`:m}</footer></dialog>`}};customElements.define("local-triage-import-dialog",ww)});function nm(){let e=new Set;if(l.currentWorkspace||!Yy())return e;let t=l.currentFile??l.reports[0]?.fileName;if(!t)return e;let r=new Set;for(let n of l.reports)if(n.fileName===t)for(let o of n.groups)for(let i of o)i.id!=null&&r.add(String(i.id));for(let n of r)$r(n).some(o=>!r.has(o)&&Ls(o).some(i=>i!==t))&&e.add(n);return e}var kw=k(()=>{"use strict";U()});function yu(e){return ys(e.model)||null}function $w(e){let t=Gn();if(t.filterAnalyzer){let r=e._analyzer??null,n=t.filterAnalyzer===Ci?null:t.filterAnalyzer;if(r!==n)return!1}if(t.filterModel){let r=yu(e),n=t.filterModel===Ei?null:t.filterModel;if(r!==n)return!1}return!0}function _w(e){let t=typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:null;return e.isApp&&!(e._source??e.source)&&t?t:typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:t}function _4(e){let t=new Set;for(let r of e)for(let n of r)t.add(_w(n));return t}function Tl(){l.filterSeverities=new Set,l.filterColors=new Set,l.filterSources=new Set,l.filterAnalyzer="",l.filterModel="",l.filterRepo="",l.filterConfMin=0,l.filterConfMax=10,l.filterInclude="",l.filterIncludeNegate=!1,l.filterComment="",l.filterFix="",l.filterFlagged="",l.filterDuplicates="",l.filterCrossContext="",l.filterAppStacked="",l.filterSecurity="",l.filterRevalidate="",l.filterPartial="",l.sortBy="severity"}function S4(){let e={};for(let t of JP){let r=l[t];e[t]=r instanceof Set?new Set(r):r}return e}function wu(e){Sw=e}function ku(){Sw=null}function Gn(){return Sw??l}function vu(e){if(e.confidence!==void 0)return e.confidence;if(e.critical===!0||e._source)return 10}function Cw(e){return e.every(t=>t.every(r=>vu(r)!==void 0))&&e.some(t=>t.some(ZP))}function C4(e,t,r=_r){return e.some(n=>{let o=["refuted","unreachable"].includes(r(n))?0:vu(n);return o===void 0?t===0:o>=t})}function om(e,t=Hr){let r=e.map(t).filter(i=>i.length>0);if(!r.some(i=>i.some(s=>vu(s)!==void 0)))return 0;let n=i=>r.reduce((s,a)=>s+(a.some(c=>(vu(c)??-1)>=i)?1:0),0),o;for(n(6)<=25?o=6:n(7)<=25?o=7:o=8;o>0&&n(o-1)===n(o);)o--;return o}function E4(e){return _r(e)||(e._source&&!e._sourcePass?"revalidation":"")}function M4(e){let t=pu("confirmed","");return e.some(r=>t.includes(E4(r)))}function R4(e,t){return Cw(e)?t:0}function A4(e,t=Hr,r=_r){let n=new Set(e.ruledOutIds??[]);for(let o of e)for(let i of o)["refuted","unreachable"].includes(r(i))&&n.add(q(i));for(let o of e){let i=t(o);if(i.length!==0&&i.some(s=>pu("confirmed","").includes(r(s)||(s._source&&!s._sourcePass?"revalidation":"")))){for(let s of o)if(n.add(q(s)),s.isApp&&Array.isArray(s.revalidateInputs))for(let a of s.revalidateInputs)a&&n.add(a)}}return n}function I4(e,t,r,n=_r){let o=R4(e,t),i=e.filter(a=>C4(a,o,n));if(i.length===0)return!1;let s=new Set(pu("confirmed",""));return e.some(a=>a.some(c=>s.has(n(c))))?i.every(a=>a.every(c=>r.has(q(c)))):!1}function Ew(e,t){let r=e.map(Hr).filter(n=>n.length>0);return I4(r,t,A4(e))?"confirmed":""}function im(e){return l.showRevalidation===!1||l.upstreamOnly||Co()?!1:Mw(e)}function Mw(e,{tabs:t=Hr,kindOf:r=_r,severityMode:n=l.severityMode}={}){let o=e.map(t).filter(a=>a.length>0),i=A4(e,t,r);if(!I4(o,om(e,t),i,r))return!1;let s=R4(o,6);return o.every(a=>!C4(a,s,r)||!a.some(c=>ue(c,n)!=="low")||a.every(c=>i.has(q(c))))}function Zs(e,{resetSort:t=!0}={}){l.filterConfMin=om(e),l.filterConfMax=10,l.filterRevalidate=Ew(e,l.filterConfMin),l.filterPartial="",t&&(l.sortBy=Rw(e)?"priority-desc":"severity")}function Rw(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(T4(t)===void 0)return!1;let r=t.filter(o=>o.isApp);if(r.length===0)return!0;let n=t.some(o=>o.priority!==void 0);return r.some(o=>o.priority!==void 0||!n&&qs(o))})}function T4(e){let t=e.find(r=>r.priority!==void 0);return t?t.priority:e.some(qs)?0:void 0}function L4(e){let t=Gn();if(t.filterSources.size===1){let r=t.filterSources.has("own");if(r&&ir(e.file)||!r&&!ir(e.file))return!1}if(t.filterRevalidate){let r=pu(t.filterRevalidate,t.filterPartial);if(r&&!r.includes(E4(e)))return!1}if(!t.filterRevalidate){let r=K3(e)?0:vu(e);if(r===void 0){if(t.filterConfMin>0)return!1}else if(r<t.filterConfMin||t.filterConfMax<10&&r>t.filterConfMax)return!1}return!0}function QP(e){if(!L4(e))return!1;let t=Gn(),r=t.filterInclude.toLowerCase();if(t.filterSeverities.size>0&&!t.filterSeverities.has(ue(e,l.severityMode)))return!1;if(t.filterColors.size>0){let n=Ce(e)?.color??"none";if(!t.filterColors.has(n))return!1}if(!$w(e))return!1;if(t.filterRepo){let n=_w(e),o=t.filterRepo===Js?null:t.filterRepo;if(n!==o)return!1}if(r){let n=Ce(e),o=e4(e).includes(r)||(n?.comment??"").toLowerCase().includes(r)||(n?.fix??"").toLowerCase().includes(r);return t.filterIncludeNegate?!o:o}return!0}function eD(e){let t=Gn();if(!t.filterComment&&!t.filterFix&&!t.filterFlagged)return!0;let r=n=>e.some(o=>n(Ce(o)));if(t.filterComment){let n=r(o=>!!o?.comment);if(t.filterComment==="with"?!n:n)return!1}if(t.filterFix){let n=r(o=>!!o?.fix);if(t.filterFix==="with"?!n:n)return!1}if(t.filterFlagged){let n=r(o=>o?.flagged===!0);if(t.filterFlagged==="with"?!n:n)return!1}return!0}function tD(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!ni(t))return t.name;let r=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(r)?.[1]??null}function F4(){return l.showRevalidation!==!1&&!l.upstreamOnly}function Aw(e){if(F4())return!1;let t=Hr(e);if(t.length<2)return!1;let r=new Set,n=new Set;for(let o of t){let i=_w(o);i&&r.add(i);let s=tD(o);s&&n.add(s)}return r.size>1||n.size>1}function Iw(e){if(!F4()||Hr(e).length===0)return!1;let r=e.filter(n=>n.isApp);return r.length>0&&r.length>1}function xw(e){return e.some(t=>t.isSecurity===!0)}function B4(e){return e.some(xw)&&e.some(t=>!xw(t))}function O4(e){return e.filter(t=>t.some(L4)).map(Hr)}function Mi(e){let t=!l.currentWorkspace&&Gn().filterDuplicates,r=t?nm():null,n=Gn().filterCrossContext,o=Gn().filterAppStacked,i=Gn().filterSecurity;return e.filter(s=>s.some(QP)&&eD(s)&&(!t||t==="with"===s.some(a=>r.has(q(a))))&&(!n||n==="with"===Aw(s))&&(!o||o==="with"===Iw(s))&&(!i||i==="with"===xw(s)))}function x4(e,t){let r=t==="desc"?-1:11;return(n,o)=>{let i=n[e]??r,s=o[e]??r;return(t==="desc"?s-i:i-s)||n.file.localeCompare(o.file)}}function N4(e){let t=e==="desc"?-1:11;return(r,n)=>{let o=r.confidence===void 0&&r.critical===!0,i=n.confidence===void 0&&n.critical===!0,s=r.confidence??(o?10:t),a=n.confidence??(i?10:t);return(e==="desc"?a-s:s-a)||(o===i?0:o?-1:1)||r.file.localeCompare(n.file)}}function sm(e){let t=rD[l.sortBy];if(!t)return[...e];if(l.sortBy==="priority-desc"||l.sortBy==="priority-asc"){let r=l.sortBy==="priority-desc"?"desc":"asc",n=r==="desc"?-1:11;return e.map(o=>({p:T4(o),g:o})).toSorted((o,i)=>{let s=o.p??n,a=i.p??n;return(r==="desc"?a-s:s-a)||So(o.g).file.localeCompare(So(i.g).file)}).map(o=>o.g)}return e.map(r=>({p:So(r),g:r})).toSorted((r,n)=>t(r.p,n.p)).map(r=>r.g)}var Ci,Js,Ei,JP,Sw,ZP,$4,rD,pn=k(()=>{"use strict";U();he();ct();kw();Ci="\0",Js="",Ei="";JP=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];Sw=null;ZP=e=>e.confidence!==void 0||e.critical===!0;$4=N4("desc"),rD={severity:(e,t)=>(We[ue(t,l.severityMode)]||0)-(We[ue(e,l.severityMode)]||0)||$4(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":$4,"confidence-asc":N4("asc"),"priority-desc":x4("priority","desc"),"priority-asc":x4("priority","asc")}});function P4(e){return Object.fromEntries(Object.entries(e).filter(([t,r])=>t.startsWith("revalidate")&&r!=null))}function D4(e,t,r){let n=P4(t);if(!e._revalidationCopies){let o=P4(e);if(Object.keys(o).length===0&&Object.keys(n).length===0)return[];e._revalidationCopies=Object.keys(o).length>0?[{reportName:e._reportName??"",fields:o}]:[]}return Object.keys(n).length>0&&e._revalidationCopies.push({reportName:r,fields:n}),e._revalidationCopies}function z4(e){let t=new Map,r=new Set(vs);for(let{reportName:n,fields:o}of e)for(let[i,s]of Object.entries(o)){if(s==null)continue;let a=i==="revalidate"?$e(o)||String(s).trim().toLowerCase():String(s).trim();if(i==="revalidate"&&!a||i==="revalidate"&&!r.has(a))continue;t.has(i)||t.set(i,new Map);let c=t.get(i);c.has(a)||c.set(a,new Set),c.get(a).add(n)}return[...t].filter(([,n])=>n.size>1).map(([n,o])=>({field:n,variants:[...o].map(([i,s])=>({value:i,reports:[...s]}))}))}var Tw=k(()=>{"use strict";ge()});function U4(e,t){if(!e||!t||e===t)return!1;let r=!1;for(let[n,o]of Object.entries(t)){if(n.startsWith("_")||nD.has(n)||o==null)continue;if(n==="revalidate"){let s=$e(t);if(!s)continue;let a=$e(e);a?a!==s&&(r=!0):e[n]=o;continue}let i=e[n];if(i==null){e[n]=o;continue}n.startsWith("revalidate")&&String(i).trim()!==String(o).trim()&&(r=!0)}return r}function Lw(e,t,r,n){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:Fr(e),reason:e.correctedSeverityReason}},e._correctedByReport[r]={severity:Fr(t),reason:t.correctedSeverityReason});let o=D4(e,t,r);(U4(e,t)||n.has(e.id))&&n.set(e.id,{finding:e,copies:o})}var nD,Fw=k(()=>{"use strict";ge();Tw();he();nD=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"])});function xu(e,t=null){let r=t??e.filter(p=>p.isApp),n=e.filter(p=>!p.isApp);if(r.length===0||n.length===0)return[e];if(t&&e.some(p=>p.isApp))return[e];if(n.some(p=>typeof p.id!="string"||!p.id))return[e];let o=new Set(n.map(p=>p.id)),i=new Map,s=new Set;for(let p of r){let f=p.revalidateInputs===void 0?[]:p.revalidateInputs;if(!Array.isArray(f))return[e];for(let h of f){if(!o.has(h))return[e];s.add(h)}i.set(p,f)}if(s.size!==o.size)return[e];let a=new Map([...o].map(p=>[p,p])),c=p=>{let f=p;for(;a.get(f)!==f;)f=a.get(f);for(;a.get(p)!==f;){let h=a.get(p);a.set(p,f),p=h}return f};for(let p of i.values()){if(p.length===0)continue;let f=c(p[0]);for(let h of p)a.set(c(h),f)}let u=new Map;for(let p of e){let f=i.get(p),h=f?f.length>0?c(f[0]):p:c(p.id);u.has(h)||u.set(h,[]),u.get(h).push(p)}return u.size===1?[e]:[...u.values()]}var Bw=k(()=>{"use strict"});function am(e,{showRevalidation:t=!0,upstreamOnly:r=!1,hideRuledOut:n=!1,merges:o=[]}={}){let i=[],s=new Set;for(let v=0;v<e.length;v++){let x=e[v];for(let w of x.groups){for(let _ of w)_.id&&["refuted","unreachable"].includes($e(_))&&s.add(_.id);let y=r?w.filter(_=>_.isUpstream&&$e(_)!=="revalidation").map(H4):t?n?w.filter(_=>!["refuted","unreachable"].includes($e(_))):w:w.filter(_=>$e(_)!=="revalidation").map(H4),$=y.length===w.length&&y.every((_,S)=>_===w[S])?w:y;$.length>0&&i.push({group:$,sourceGroup:w,reportIndex:v,reportName:x.fileName??"",hasApp:$.some(_=>_.isApp)})}}let a=i.map((v,x)=>x),c=i.map(v=>v.hasApp),u=v=>{let x=v;for(;a[x]!==x;)x=a[x];for(;a[v]!==x;){let w=a[v];a[v]=x,v=w}return x},p=(v,x)=>{v=u(v),x=u(x),v!==x&&(a[x]=v,c[v]||=c[x])},f=new Map;for(let v=0;v<i.length;v++)for(let x of i[v].group)x.id&&(f.has(x.id)||f.set(x.id,[]),f.get(x.id).push({index:v,app:x.isApp}));for(let v of f.values()){let x=new Map,w=v.find(y=>y.app);for(let{index:y}of v){w&&p(w.index,y);let $=i[y].reportIndex;x.has($)?p(x.get($),y):x.set($,y)}}for(let v of f.values()){let x=null;for(let{index:w}of v)c[u(w)]||(x===null?x=w:p(x,w))}for(let v of o){let x=null;for(let w of v)for(let{index:y}of f.get(w)??[])x===null?x=y:p(x,y)}let h=new Map;for(let v=0;v<i.length;v++){let x=u(v);h.has(x)||h.set(x,[]),h.get(x).push(i[v])}let g=new Map,b=[];for(let v of h.values()){let x=v[0].group,w=x.map(R=>R.id).filter(Boolean);if(v.length===1&&new Set(w).size===w.length&&o.length===0){let R=e.length>1&&x.find(P=>P.isApp);if(R){let P=[...x];P.workspaceKey=R.id??String(R._id),b.push(...Ow(v,P,t,r))}else b.push(...Ow(v,x,t,r));continue}let y=new Map,$=new Map,_=[];for(let{group:R,reportName:P}of v)for(let L of R)if(L.id&&$.has(L.id))Lw($.get(L.id),L,P,y);else{let A={...L,_reportName:L._reportName??P};L.id&&$.set(L.id,A),_.push(A)}let S=new Set;for(let R of o)for(let P of R)$.has(P)&&S.add(P);for(let{group:R}of v)if(R.length>1)for(let P of R)P.id&&S.add(P.id);let M=[...S].map(R=>$.get(R));for(let R of _)S.has(R.id)||M.push(R);if(e.length>1){let R=M.find(P=>P.isApp);R&&(M.workspaceKey=R.id??String(R._id))}b.push(...Ow(v,M,t,r));for(let[R,P]of y){let L=g.get(R);g.set(R,L?{finding:L.finding,copies:[...L.copies,...P.copies]}:P)}}return Object.defineProperty(b,"ruledOutIds",{value:s,configurable:!0}),{groups:b,conflicts:g}}function Ow(e,t,r,n){if(r)return[t];if(n){let i=e.flatMap(p=>p.sourceGroup),s=xu(i);if(s.length===1)return[t];let a=[],c=new Set;for(let p of s){let f=new Set(p.filter(g=>!g.isApp&&g.id).map(g=>g.id)),h=t.filter(g=>f.has(g.id));if(h.length>0){a.push(h);for(let g of h)c.add(g.id)}}let u=new Set(t.map(p=>p.id).filter(Boolean));return c.size===u.size?a:[t]}let o=e.flatMap(i=>i.sourceGroup.filter(s=>s.isApp));return xu(t,o)}function H4(e){let t=Object.keys(e).filter(n=>n.startsWith("revalidate")||n==="_revalidationCopies");if(t.length===0)return e;let r={...e};for(let n of t)delete r[n];return r}var Nw=k(()=>{"use strict";ge();Fw();Bw()});function Cr(){return l.currentView==="links"&&Qs?.owner===l.currentLinks?Qs:null}function lm(){Pw++,Qs=null}async function j4(e,t,r,n){if(l.currentView!=="links"||!l.currentLinks)return;let o=ls(l.currentLinks),i=++Pw;Qs={owner:o,id:e,reportName:t,group:null,error:""},l.focusCodeStack=[],l.focusCodeAt=0;let s=()=>i===Pw&&l.currentView==="links"&&l.currentLinks===o;try{if(C()){let g=ci([e]).find(b=>b.report===t&&(!n||b.managedReportId===n)&&(r==null||b.index===Number(r)));if(!g)throw new Error("This finding is no longer in the team.");Qs={owner:o,id:e,reportName:t,group:g.members.map(b=>({...b})),error:""},l.activeTabByGroup.set(g.members[0].id,e);return}let a=await nr(await De(t));if(!s())return;let c=(mt(a?.data)??[]).map(g=>Array.isArray(g)?g:[g]),u=g=>g?.some(b=>String(b?.id)===e),p=u(c[r])?c[r]:c.find(u);if(!p)throw new Error("This finding is no longer in the report.");let{data:f}=a,h=p.filter(g=>g?.id).map(g=>{let b={...g,_reportName:t,_repoFallback:$t(f)??Ut(t),_repoDirectory:Bn(f?.repo),_bundleHashes:f.bundleHashes??[],_source:g.source??f.source??null};return mo(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=nn(b,b._source)),b});await Promise.all([Ps(),It("report",t),...Pd(t).map(g=>It("workspace",g.id))]),s()&&(go([h],{linkedIds:$r,knownRows:g=>[...ci(g),...l.reports.flatMap(b=>b.groups??[]).filter(b=>b.some(v=>g.includes(v.id))).map(b=>({members:b}))]}),Qs.group=h,l.activeTabByGroup.set(h[0].id,e))}catch(a){s()&&(Qs.error=a.message||"Unable to load this finding.")}}var Qs,Pw,cm=k(()=>{"use strict";U();Oc();ge();Qs=null,Pw=0});function dm(e,t,r,n=r){let o=e.map((f,h)=>h),i=f=>{for(;o[f]!==f;)o[f]=o[o[f]],f=o[f];return f},s=e.map(r),a=new Map;for(let f=0;f<s.length;f++)for(let h of s[f])h.id&&(a.has(h.id)||a.set(h.id,[]),a.get(h.id).push(f));for(let[f,h]of a)for(let g of t(f))if(g!==f)for(let b of h)for(let v of a.get(g)??[]){let x=i(b),w=i(v);x!==w&&(o[w]=x)}let c=new Map;for(let f=0;f<e.length;f++){let h=i(f);c.has(h)||c.set(h,[]),c.get(h).push(f)}if(c.size===e.length)return e;let u=f=>f.id??String(f._id),p=[...c.values()].map(f=>{if(f.length===1)return e[f[0]];let h=new Map;for(let x of f)for(let w of n(e[x]))h.has(u(w))||h.set(u(w),w);let g=new Map;for(let x of f)for(let w of e[x])g.has(u(w))||g.set(u(w),h.get(u(w))??w);let b=[...g.values()],v=e[f[0]];return b.workspaceKey=v.workspaceKey??u(v[0]),b.linkedTabs=[...h.values()],b});return Object.defineProperty(p,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),p}var Dw=k(()=>{"use strict"});function q(e){return e.id??String(e._id)}function de(e){return e.workspaceKey??q(e[0])}function zw(e){return Array.isArray(e)?e:[e]}function Co(){return l.revalidationDetailed===!0}function Uw(e){return e?._reportName??""}function oD(){let e=l.reports;return!Array.isArray(e)||e.length===0?!0:(e!==V4&&(V4=e,W4=jh(e)),W4)}function Ue(e){return!e.isUpstream||l.showRevalidation===!1||l.upstreamOnly===!0||!oD()}function Ce(e){if(!Ue(e))return;let t=l.triage.get(q(e));if(!C())return t;let r=l.managedComments?.get(e.id)??[];return r.length===0&&!t?.comment?t:{...t,comment:r.map(n=>n.authorLogin?`${n.authorLogin}: ${n.body}`:n.body).join(`
|
|
109
|
+
|
|
110
|
+
`)}}function Hw(e){return Ue(e)&&bo(l.triage,q(e),Uw(e))}function $u(e,t=Ce(e)){if(Ue(e))return t?.triage??(Hw(e)?"ignored":void 0)}function Hr(e){return Cr()?.group===e?e:e.linkedTabs?e.linkedTabs:Co()?e:G4(e)}function G4(e){return e.length<=1||!e.some(uu)?e:e.filter(uu)}function Kn(e){let t=Hr(e);return t.length<=1?t:[...t].toSorted((r,n)=>{let o=uu(r)?1:0,i=uu(n)?1:0;if(o!==i)return i-o;let s=Ce(r)?.color?1:0,a=Ce(n)?.color?1:0;if(s!==a)return a-s;let c=We[ue(r,l.severityMode)]||0,u=We[ue(n,l.severityMode)]||0;if(c!==u)return u-c;let p=r.confidence??-1;return(n.confidence??-1)-p})}function So(e){return e.length===1?e[0]:Kn(e)[0]}function K4(e){let t=[],r=[];for(let n of e)(n.isApp?t:r).push(n);return{app:t,source:r}}function iD(e){let t=Ce(e);return!!t?.comment||!!t?.fix||t?.flagged===!0}function Oe(e){if(e.length===1)return e[0];let t=Kn(e);if(t.length===1)return t[0];let r=l.activeTabByGroup.get(de(e));if(r){let o=t.find(i=>q(i)===r);if(o)return o}let n=t;if(l.filterAnalyzer||l.filterModel){let o=t.filter($w);o.length>0&&(n=o)}return n.find(iD)??n[0]}function q4(e){return e?._repoFallback||l.repoUrl||""}function sr(e){return{github:q4(e),directory:e?._repoDirectory??""}}function um(e){for(let t of Nn().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||q4(e)||null}function Ll(e){if(!Array.isArray(e))return[];let t=e.filter(r=>!r.isUpstream);return t.length===0||t.length===e.length?e:t}function Ke(e){let t=Ll(e),r=0,n=!1,o,i=!1,s=!1,a,c=!1,u=null,p=!1,f=!0;for(let x of t){let w=Ce(x),y=$u(x,w),$=w?.color;$===void 0&&y===void 0||(r++,$!==void 0&&(i?$!==o&&(n=!0):(i=!0,o=$)),c?y!==a&&(s=!0):(c=!0,a=y),y?(u===null&&(u=y),y==="ignored"?f=!1:p=!0):f=!1)}let h=n||s,g=!h&&i?o:null,b=r>0&&f,v=!h&&u!==null?u:null;return{hasConflict:h,commonColor:g,anyTriage:p,allTriaged:b,commonTriage:v,allIgnored:v==="ignored"&&r===t.length,isInProgress:v==="inprogress",isFixed:v==="fixed",isInvalid:v==="invalid",isDeleted:v==="deleted",isIgnored:v==="ignored"}}function Y4(e,t){if(!Array.isArray(e)||e.length<2)return!1;let r=e.filter(Ue);if(r.length<2)return!1;let n=(t??"").trim();return r.every(o=>jw(o,n))}function jw(e,t){if(!Ue(e))return!1;let r=(Ce(e)?.fix??"").trim();return r===""||r===(t??"").trim()}function X4(e,t){if(!Ue(Oe(e)))return{targets:[],clearing:!1};let r=Ke(e);return{targets:Ri(e,r),clearing:t==="restore"||Vw(e,r)===t}}function Ri(e,t=Ke(e)){let r=Ll(e),n=e.linkedTabs||r!==e&&e.some(o=>o.isApp)?r:t.hasConflict?[Oe(e)]:r;return n.every(Ue)?n:n.filter(Ue)}function Vw(e,t=Ke(e),r=null){return e.linkedTabs||e.some(n=>n.isApp)&&Ll(e)!==e||!t.hasConflict?t.commonTriage??null:$u(r??Oe(e))??null}function pm(e){let t=Ll(e);if(t.length<2)return!1;let n=Ke(e).commonTriage;if(!n||n==="ignored")return!1;let o=!1;for(let i of t){if(!Ue(i))continue;let s=q(i),a=l.triage.get(s);$u(i,a)!==n&&(a?.ignoredReports?.length||ee(l.triage,s,{triage:n})&&(o=!0))}return o}function Ai(){Er=null}function fm(e,t=!1,r=!1){let n=l.reports,o=l.workspaceMerges,i=C();(!Er||Er.reports.length!==n.length||Er.reports.some((a,c)=>a!==n[c])||Er.merges!==o||Er.mergeCount!==o.length||Er.securityLinksTick!==l.linksTick||Er.findingIndexTick!==l.findingIndexTick||Er.managed!==i)&&(go(n.flatMap(a=>a.groups??[]),{linkedIds:$r,knownRows:ci}),Er={reports:[...n],merges:o,mergeCount:o.length,managed:i,securityLinksTick:l.linksTick,findingIndexTick:l.findingIndexTick});let s=t?"upstream":e?r?"workspace-app":"app":"code";return Er[s]||(Er[s]=am(n,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:r,merges:o})),Er[s]}function J4(){return fm(l.showRevalidation!==!1).groups}function Ww(){return fm(!0).groups}function Z4(){return fm(!0,!1,!!l.currentWorkspace).conflicts}function Mr(){let e=fm(l.showRevalidation!==!1,l.upstreamOnly===!0,!!l.currentWorkspace),t=e.groups;if(l.showRevalidation===!1||l.upstreamOnly)return t;if(l.currentWorkspace){let r=Co();return(!e.linkedGroups||e.linksTick!==l.linksTick||e.linkedDetailed!==r)&&(e.linkedGroups=dm(t,$r,G4,Hr),e.linksTick=l.linksTick,e.linkedDetailed=r),e.linkedGroups}return Co()?t:e.visibleGroups??=(()=>{let r=t.flatMap(n=>{let o=n.filter(i=>!qs(i));return o.length===n.length?[n]:o.length===0?[]:(o.workspaceKey=de(n),[o])});return Object.defineProperty(r,"ruledOutIds",{value:t.ruledOutIds,configurable:!0}),r})()}function qn(){let e=Mr();if(l.viewMode==="kanban")return e;let t=e.filter(r=>Ke(r).commonTriage===l.shownTriage);return Object.defineProperty(t,"ruledOutIds",{value:e.ruledOutIds,configurable:!0}),t}function Q4(e){if(l.showRevalidation||l.upstreamOnly||!Array.isArray(e)||e.length===0)return e;let t=new Set(e.map(q)),r=new Map;for(let n of Ww())for(let o of xu(n))if(o.some(i=>t.has(q(i))))for(let i of o)r.set(q(i),i);return r.size===e.length&&e.every(n=>r.get(q(n))===n)?e:r.size>0?[...r.values()]:e}function ar(e){let t=Cr()?.group;if(t&&de(t)===e)return t;for(let r of Mr())if(de(r)===e)return r;return null}var V4,W4,Er,ct=k(()=>{"use strict";U();ge();he();pn();Nw();cm();Dw();Bw();Fw();V4=null,W4=!0;Er=null});function eE(e){return e==null?"(none)":Kw[e]??e}function tE(e){return e??"(no model)"}var Kw,Gw,qw=k(()=>{"use strict";T();He();Re();U();pn();ge();Kw=kt;Gw=class extends X{static properties={analyzers:{attribute:!1},models:{attribute:!1},groups:{attribute:!1},_open:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.analyzers=[],this.models=[],this.groups=[],this._open=!1}render(){let t=this.analyzers.length>1,r=this.models.length>1;if(!t&&!r)return m;let n=l.filterAnalyzer===""?void 0:l.filterAnalyzer===Ci?null:l.filterAnalyzer,o=l.filterModel===""?void 0:l.filterModel===Ei?null:l.filterModel,i=new Map,s=new Map;for(let f of this.groups){let h=new Set,g=new Set;for(let b of f){let v=b._analyzer??null,x=yu(b);(o===void 0||x===o)&&h.add(v),(n===void 0||v===n)&&g.add(x)}for(let b of h)i.set(b,(i.get(b)??0)+1);for(let b of g)s.set(b,(s.get(b)??0)+1)}let a=n===void 0?null:eE(n),c=o===void 0?null:tE(o),u=a!=null&&c!=null?`${a} \xB7 ${c}`:a??c??(t?"All analyzers":"All models"),p=a!=null||c!=null;return d`<button type="button" class="${z({"analyzer-btn":!0,active:p})}" popovertarget="analyzer-select-menu" popovertargetaction="toggle" aria-label="${`Filter by analyzer / model: ${u}`}"><span class="analyzer-btn-label">${u}</span> <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="analyzer-select-menu" class="analyzer-menu" @beforetoggle="${this._onToggle}">${t?this._column({dim:"analyzer",heading:"Analyzer",allLabel:"All analyzers",values:this.analyzers,sentinel:Ci,labelOf:eE,counts:i,current:l.filterAnalyzer}):m} ${t&&r?d`<div class="analyzer-menu-sep"></div>`:m} ${r?this._column({dim:"model",heading:"Model",allLabel:"All models",values:this.models,sentinel:Ei,labelOf:tE,counts:s,current:l.filterModel}):m}</div>`}_column({dim:t,heading:r,allLabel:n,values:o,sentinel:i,labelOf:s,counts:a,current:c}){return d`<div class="analyzer-menu-col" role="group" aria-label="${`Filter by ${t}`}"><div class="analyzer-menu-head">${r}</div><button type="button" aria-pressed="${String(c==="")}" class="${z({"analyzer-menu-item":!0,active:c===""})}" @click="${()=>this._pick(t,"")}"><span class="analyzer-menu-label">${n}</span></button> ${o.map(u=>{let p=u??i,f=a.get(u)??0,h=c===p;return d`<button type="button" aria-pressed="${String(h)}" class="${z({"analyzer-menu-item":!0,active:h,zero:f===0})}" @click="${()=>this._pick(t,p)}"><span class="analyzer-menu-label">${s(u)}</span><span class="analyzer-menu-count">${f}</span></button>`})}</div>`}_pick(t,r){let n=t==="analyzer"?l.filterAnalyzer:l.filterModel,o=r!==""&&n===r?"":r;this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{analyzer:t==="analyzer"?o:l.filterAnalyzer,model:t==="model"?o:l.filterModel},bubbles:!0,composed:!0}))}_onToggle=t=>{this._open=t.newState==="open",this._open&&this._position()};_position(){let t=this.querySelector(".analyzer-menu"),r=this.querySelector(".analyzer-btn");if(!t||!r)return;let n=r.getBoundingClientRect(),o=t.offsetWidth||240,i=t.offsetHeight||200,s=4,a=n.left;a+o>window.innerWidth-4&&(a=window.innerWidth-o-4),a<4&&(a=4);let c=n.bottom+s;c+i>window.innerHeight-4&&n.top>i+s&&(c=n.top-i-s),t.style.top=`${c}px`,t.style.left=`${a}px`}updated(){this._open&&this.querySelector(".analyzer-menu")?.matches(":popover-open")&&this._position()}};customElements.define("analyzer-select",Gw)});function Yw(e,t){if(t==null)return e.length+1;let r=e.indexOf(t);return r===-1?e.length:r}function cD(e,t,r){for(let n of r){let o=lD[n],i=o(e[n])-o(t[n]);if(i!==0)return i;let s=String(e[n]??"").localeCompare(String(t[n]??""));if(s!==0)return s}return 0}function nE(e,t,{typePrefix:r=!0}={}){return e==="type"?r?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function dD(e,t){let r=t.filter(i=>i!=="exportsMode"),n=[],o=new Map;for(let i of e){if(i.exportsMode==null){n.push({...i});continue}let s=r.map(u=>i[u]??"").join("|"),a=o.get(s);if(a){a.exportsMode=`${a.exportsMode}+${i.exportsMode}`;continue}let c={...i};o.set(s,c),n.push(c)}return n}function oE(e,t=hm){let r=new Map;for(let h of e){let g={};for(let v of t)g[v]=v==="model"?ys(h.model)??null:h[v]??null;let b=t.map(v=>g[v]??"").join("|");r.has(b)||r.set(b,g)}let n=[...r.values()].toSorted((h,g)=>cD(h,g,t));if(n.length===0)return[];let o={};for(let h of t)o[h]=new Set(n.map(g=>g[h])).size===1;let i=t.filter(h=>!o[h]),s=i.includes("exportsMode")?dD(n,t):n,a=s.length>2&&i.includes("type")&&i.length>1,c=["model","effort"].filter(h=>t.includes(h)&&o[h]),u=[...c,...t.filter(h=>!c.includes(h))],p=[],f=!1;for(let h of u)if(o[h]){let g=nE(h,s[0][h]);g!=null&&p.push(g)}else if(!f){for(let g of s){let b=i.map(v=>nE(v,g[v],{typePrefix:!a})).filter(v=>v!=null);b.length>0&&p.push(b.join(" \xB7 "))}f=!0}return p}var hm,rE,sD,aD,lD,iE=k(()=>{"use strict";he();hm=["type","model","effort","exportsMode"],rE=["security","correctness"],sD=["max","xhigh","high","medium","low","minimal"],aD=["list","isolate"];lD={type:e=>e==="terminal"?rE.length+2:Yw(rE,e),model:e=>e==null?1:0,effort:e=>Yw(sD,e),exportsMode:e=>Yw(aD,e)}});function sE(e=!1,t=""){let r=new Set;return["deepview",...e?["security"]:[],...t.split(",")].map(n=>n.trim()).filter(n=>{let o=n.toLowerCase();return!n||r.has(o)?!1:(r.add(o),!0)})}var aE=k(()=>{"use strict"});function Rr(e,t){if(typeof t=="string"&&lE[t])return lE[t];if(typeof e!="string")return null;let r=e.slice(e.lastIndexOf("/")+1),n=r.lastIndexOf(".");return n<=0?null:uD[r.slice(n+1).toLowerCase()]??null}var uD,lE,mm=k(()=>{"use strict";uD={__proto__:null,js:"javascript",mjs:"javascript",cjs:"javascript",jsx:"jsx",ts:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",yml:"yaml",yaml:"yaml",sh:"bash",bash:"bash",md:"markdown",markdown:"markdown",sol:"solidity",php:"php",phtml:"php",rs:"rust",rb:"ruby",py:"python",pyw:"python",pyi:"python",java:"java",cpp:"cpp",cc:"cpp",cxx:"cpp","c++":"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",m:"objectivec",mm:"objectivec"},lE={__proto__:null,module:"javascript",commonjs:"javascript","module-typescript":"typescript","commonjs-typescript":"typescript",json:"json",solidity:"solidity",php:"php",shell:"bash",rust:"rust",java:"java",objc:"objectivec",objcpp:"objectivec",c:"c","c-header":"c",cpp:"cpp","cpp-header":"cpp",ruby:"ruby",podspec:"ruby",podfile:"ruby",fastlane:"ruby","podfile-lock":"yaml",xml:"markup"}});function pD(){return gm||(gm=(async()=>await import("./prism.js"))(),gm)}function cE(e){return typeof e!="string"?null:fD[e.toLowerCase()]??null}async function jr(e,t,r=null){if(!t)return null;try{return(await pD()).highlight(e,t,r)}catch{return null}}function dE(e){let t=[],r=[],n="",o=0;for(;o<e.length;){let i=e.indexOf("<",o),a=(i===-1?e.slice(o):e.slice(o,i)).split(`
|
|
111
|
+
`);n+=a[0];for(let p=1;p<a.length;p++){for(let f=r.length-1;f>=0;f--)n+=r[f].close;t.push(n),n=r.map(f=>f.open).join("")+a[p]}if(i===-1)break;let c=e.indexOf(">",i);if(c===-1){n+=e.slice(i);break}let u=e.slice(i,c+1);u.startsWith("</")?r.pop():r.push({open:u,close:`</${/^<([a-zA-Z][^\s/>]*)/u.exec(u)?.[1]??"span"}>`}),n+=u,o=c+1}return t.push(n),t}var gm,fD,ea=k(()=>{"use strict";mm();gm=null;fD={__proto__:null,js:"javascript",javascript:"javascript",mjs:"javascript",cjs:"javascript",node:"javascript",jsx:"jsx",ts:"typescript",typescript:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",markup:"markup",yaml:"yaml",yml:"yaml",sh:"bash",bash:"bash",shell:"bash",zsh:"bash",console:"bash",md:"markdown",markdown:"markdown",sol:"solidity",solidity:"solidity",rs:"rust",rust:"rust",rb:"ruby",ruby:"ruby",py:"python",python:"python",py3:"python",python3:"python",php:"php",phtml:"php",java:"java",cpp:"cpp","c++":"cpp",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp","h++":"cpp",h:"cpp",c:"c",objc:"objectivec",objectivec:"objectivec","objective-c":"objectivec",m:"objectivec",mm:"objectivec"}});function hD(){Zw||(Zw=!0,queueMicrotask(()=>{Zw=!1,l.codeBlockTick++,E()}))}function Qw(e,t){let r=cE(t);if(!r||!e)return null;let n=`${r}\0${e}`;return Xw.has(n)?Xw.get(n):(Jw.has(n)||(Jw.add(n),(async()=>{let o=await jr(e,r);Xw.set(n,o??null),Jw.delete(n),hD()})()),null)}var Xw,Jw,Zw,uE=k(()=>{"use strict";U();ea();Yt();Xw=new Map,Jw=new Set,Zw=!1});function wD(e,t,r){if(e===t)return e;let n=e1(e);if(n!==e1(t)&&pE(e)===pE(t))return n?t:e;throw new Error(`format conflict for '${r}' ('${t}' vs '${e}')`)}function ta(e,t){return t===""?e:e==="."?t:`${e}/${t}`}function r1({name:e,version:t,ecosystem:r,files:n}){return Z(r===void 0||typeof r=="string"),t1({name:e,version:t??void 0,ecosystem:r,files:fn(Object.entries(n))})}function gE(e,{scope:t="full"}={}){let r=new Set;for(let[n,{files:o}]of e)if(!(t!=="full"&&!Bl(n)))for(let i of Object.keys(o))r.add(ta(n,i));return r}function kD(e,{what:t,files:r,formats:n,scope:o}){if(e.includes("\\"))return"holds a '\\'";if(_u(e))return"escapes the root";if(o!=="full"&&!Bl(e))return`is outside node_modules, which a '${o}'-scope ${t} does not record`;if(!r.has(e))return`names no file the ${t} records`;let i=n.get(e);return i==="directory"?"is a directory capture, not a file":e1(i)?`is a payload-free '${i}' record, not a file`:null}function bE(e,{what:t,files:r,formats:n,scope:o}){for(let i of e){let s=kD(i,{what:t,files:r,formats:n,scope:o});Z(s===null,`${t}: executable entry '${i}' ${s}`)}}function vE(e,{what:t,files:r,formats:n,scope:o="full"}){if(e===void 0)return new Set;let i=`${t}: executable`;Z(Array.isArray(e),`${i} must be an array of file paths`);let s=new Set;for(let a of e)Z(typeof a=="string"&&a!=="",`${i} entry must be a non-empty string`),Z(!s.has(a),`${i} entry '${a}' is listed twice`),s.add(a);return bE(s,{what:t,files:r,formats:n,scope:o}),s}function yE(e,{what:t,modules:r,formats:n,scope:o}){if(e.size!==0)return bE(e,{what:t,files:gE(r,{scope:o}),formats:n,scope:o}),vm(e)}function Z(e,t){if(!e)throw new Error(t)}function wE(e,t){let[r,n]=[e.split("/"),t.split("/")];for(;r.length>0&&r[0]===n[0];)r.shift(),n.shift();if(r.length===0&&n.length===0)return 0;if(r.length<2)return n.length<2&&r>n?1:-1;if(n.length<2)return 1;if(r[0]==="*")return-1;if(n[0]==="*"||r[0]==="node_modules")return 1;if(n[0]==="node_modules")return-1;let[o,i]=[r,n].map(s=>s.join(String.fromCodePoint(0)));if(o<i)return-1;if(o>i)return 1;throw new Error("Unreachable")}function _u(e){if(e.startsWith("/"))return!0;if(!e.includes(".."))return!1;let t=0;for(let r of e.split("/"))if(!(r==="."||r==="")){if(r!=="..")t++;else if(--t<0)return!0}return!1}function _E(e,t){Z(Array.isArray(e),`${t}: entries must be an array of file paths`);let r=new Set;for(let n of e)$E(n,t),Z(!r.has(n),`${t}: entry '${n}' is listed twice`),r.add(n);return r}function SE(e,t){for(let r of e)$E(r,t);return vm(e)}function CE(e,t){Eo(e,"formats"),Z(yD.has(t),`unknown format '${t}' for ${e}`)}function EE(e){Z(Fl(e));let t=new Map;for(let[r,n]of Object.entries(e)){CE(r,n);let o=r===""?".":r;Z(!t.has(o),`duplicate format key '${o}'`),t.set(o,n)}return t}function ME(e){for(let[t,r]of e)CE(t,r);return n1(e)}function RE(e){for(let[,t]of e){Z(t instanceof Map);for(let[r,n]of t){Eo(r,"imports"),Z(n instanceof Map);for(let[,o]of n){if(typeof o=="string"){Eo(o,"imports");continue}Z(o instanceof Map&&o.size>0,"import target must be a file or a non-empty {platform: file} map");for(let[i,s]of o)Z(typeof i=="string"&&i.length>0&&!i.includes("/"),`invalid platform key '${i}'`),Z(typeof s=="string"),Eo(s,"imports")}}}}function AE(e){Z(Fl(e));let t=kE(e);return RE(t),t}function IE(e){return RE(e),n1(e)}function TE(e,{skipEmpty:t=!1}={}){let r={modules:[],sources:[]};for(let[n,o]of e){if(t&&Object.keys(o.files).length===0)continue;let i=Bl(n);i&&Z(o.name&&o.version&&o.files);let s=fn(Object.entries(o.files).toSorted(bm));r[i?"modules":"sources"].push([n,t1({...o,files:s})])}return{modules:fn(r.modules.toSorted(bm)),sources:fn(r.sources.toSorted(bm))}}function xD(e,t){let r=e instanceof Map;if(r!==t instanceof Map)return!1;if(!r)return e===t;if(e.size!==t.size)return!1;for(let[n,o]of e)if(t.get(n)!==o)return!1;return!0}function LE(e,t,r){let n=new Map,o=i=>{for(let[s,a]of i){let c=fE(n,s);for(let[u,p]of a){let f=fE(c,u);for(let[h,g]of p)f.has(h)?Z(xD(f.get(h),g),`${r}: import '${h}' from '${u}' resolves differently ('${hE(f.get(h))}' vs '${hE(g)}')`):f.set(h,g instanceof Map?new Map(g):g)}}};return o(e),o(t),n}function FE(e,t,r){let n=new Map,o=i=>{for(let[s,a]of i){let c=n.get(s);if(c===void 0){n.set(s,a);continue}try{n.set(s,wD(a,c,s))}catch(u){throw new Error(`${r}: ${u.message}`,{cause:u})}}};return o(e),o(t),n}function BE(e,t,r,n){if(e.size===0)return new Set(t);let o=gE(r,{scope:n}),i=new Set(t);for(let s of e)o.has(s)||i.add(s);return i}function ym(e,t,r){let n=ta(e,t);return(n!=="."||t!=="")&&$D.test(n)&&Z(!1,`${r}: non-canonical file key ${JSON.stringify(n)}`),n.includes("\\")&&Z(!1,`${r}: file key '${n}' holds a '\\', which no path may`),n}function wm(e,t,r){let n=new Map;for(let[o,{files:i}]of e){typeof o!="string"&&Z(!1,`${t}: bucket dir ${String(o)} is not a string`),Eo(o,t);for(let s of Object.keys(i)){let a=ym(o,s,t),c=n.get(a);c!==void 0&&r(a,c,o),n.set(a,o)}}return n}function NE(e,t,r){let n=new Map,o=i=>{for(let[s,a]of i){let c=n.get(s);if(c===void 0){n.set(s,t1({...a,files:Object.assign(Object.create(null),a.files)}));continue}Z(c.name===a.name,`${r}: module '${s}' name mismatch ('${c.name}' vs '${a.name}')`),Z(c.version===a.version,`${r}: module '${s}' version mismatch ('${c.version}' vs '${a.version}')`+(c.version==null==(a.version==null)?"":" -- an artifact from an older stasis may record a placeholder version for a workspace package without one; regenerate it (bundle=replace / lock=replace)")),Z(c.ecosystem===a.ecosystem,`${r}: module '${s}' ecosystem mismatch ('${c.ecosystem??"(none)"}' vs '${a.ecosystem??"(none)"}')`);for(let[u,p]of Object.entries(a.files))Object.hasOwn(c.files,u)?Z(c.files[u]===p,`${r}: content mismatch for '${ta(s,u)}'`):c.files[u]=p}};return o(e),o(t),wm(n,r,(i,s,a)=>Z(!1,`${r}: file '${i}' is bucketed under both '${s}' and '${a}' -- module bucketing changed between the artifacts (a workspace package without a version now owns its own bucket); regenerate the artifact (bundle=replace / lock=replace)`)),n}function Bl(e){return e.split("/").includes("node_modules")}function _D(e){let t="node_modules/",r=e.length;for(;(r=e.lastIndexOf(t,r-1))!==-1;)if(r===0||e[r-1]==="/")return r;return-1}function PE(e){let t="node_modules/",r=_D(e);if(r===-1)return null;let n=r+t.length,o=e.slice(n).split("/"),i=o[0].startsWith("@")?2:1;if(o.length<=i||o.slice(0,i).some(a=>!a))return null;let s=o.slice(0,i).join("/");return{dir:e.slice(0,n)+s,rel:o.slice(i).join("/"),name:s}}var mD,gD,bD,vD,mE,yD,e1,pE,t1,bm,Fl,fn,vm,n1,fE,kE,xE,Eo,$E,hE,$D,OE,DE=k(()=>{mD=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),gD=new Set(["solidity","php","shell","rust"]),bD=new Set(["java","kotlin","gradle","objc","objcpp","swift","c","cpp","c-header","cpp-header","ruby","python","cmake","podspec","podfile","podfile-lock","template","xml","env","fastlane","pbxproj"]),vD=new Set(["resource","resource:base64"]),mE=new Set(["stat:file","stat:directory"]),yD=new Set([...mD,...gD,...bD,...vD,"patch","directory",...mE]),e1=e=>mE.has(e),pE=e=>e==="directory"||e==="stat:directory"?"directory":"file";t1=({name:e,version:t,ecosystem:r,files:n})=>({name:e,version:t,...r===void 0?{}:{ecosystem:r},files:n});bm=(e,t)=>wE(e[0],t[0]),Fl=e=>e&&[null,Object.prototype].includes(Object.getPrototypeOf(e)),fn=e=>Object.setPrototypeOf(Object.fromEntries(e),null),vm=e=>[...e].toSorted(wE),n1=(e,{sorted:t=!0}={})=>{let r=t?[...e].toSorted(bm):[...e];return fn(r.map(([n,o])=>[n,o instanceof Map?n1(o,{sorted:t}):o]))},fE=(e,t)=>e.get(t)??e.set(t,new Map).get(t),kE=e=>new Map(Object.entries(e).map(([t,r])=>[t,Fl(r)?kE(r):r]));xE=e=>e.includes("\\")||_u(e),Eo=(e,t)=>Z(!xE(e),`${t}: path '${e}' escapes the root or holds a '\\'`),$E=(e,t)=>Z(typeof e=="string"&&e!==""&&!xE(e),`${t}: invalid entry ${JSON.stringify(e)}`);hE=e=>e instanceof Map?`{${[...e].map(([t,r])=>`${t}: ${r}`).join(", ")}}`:e;$D=/(?:^|\/)\.{0,2}(?:\/|$)/u;OE=(e,t)=>r=>Z(!1,`duplicate file key '${r}' across ${e} buckets -- module bucketing changed between writes (a workspace package without a version now owns its own bucket); regenerate the ${t}`)});function SD(){throw new Error("bundle: file contents are not retained by this contents-free Bundle")}var Ii,zE,UE,HE,CD,o1,ED,MD,RD,WE,AD,s1,jE,VE,i1,GE,ID,Vr,km=k(()=>{DE();Ii=1,zE=0,UE=OE("bundle","artifact (bundle=replace)"),HE=e=>PE(e)??{dir:".",rel:e==="."?"":e,name:null};CD=(e,{files:t,...r})=>{let n=Object.create(null);for(let[o,i]of Object.entries(t))typeof i!="symbol"&&Z(!1,`bundle: file '${ta(e,o)}' is not a placeholder`),Object.defineProperty(n,o,{get:SD,enumerable:!0});return{...r,files:Object.freeze(n)}},o1=(e,t)=>{if(e===void 0&&t===void 0)return;let r=new Map;for(let n of[e,t])for(let[o,i]of Object.entries(n??{})){if(!Array.isArray(i))continue;let s=r.get(o);s===void 0&&r.set(o,s=new Set);for(let a of i)s.add(a)}return fn([...r.keys()].toSorted().map(n=>[n,vm(r.get(n))]))},ED=/^(?=[A-Za-z0-9-]{1,39}\/)[A-Za-z0-9](?:-?[A-Za-z0-9])*\/(?!\.\.?$)[\w.-]{1,100}$/u,MD=/^(?!\.\.?(?:\/|$))[\w.~@+-]+(?:\/(?!\.\.?(?:\/|$))[\w.~@+-]+)*$/u,RD=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u,WE={github:e=>typeof e=="string"&&ED.test(e),directory:e=>typeof e=="string"&&e.length<=1024&&MD.test(e),root:e=>e===!0,commit:e=>typeof e=="string"&&RD.test(e)},AD=(e,t)=>{if(e?.github===void 0||e.github.toLowerCase()!==t?.github?.toLowerCase())return;let r=Object.keys(WE).filter(n=>e[n]!==void 0&&(n==="github"||e[n]===t[n]));return fn(r.map(n=>[n,e[n]]))},s1=(e,t,r)=>{if(e===void 0)return;Z(Fl(e),`bundle ${r} must be an object`);for(let o of Object.keys(e))Z(Object.hasOwn(t,o),`unknown bundle ${r} key '${o}'`);let n=Object.entries(t).map(([o,i])=>typeof i=="object"?[o,s1(e[o],i,`${r}.${o}`)]:(Z(e[o]===void 0||i(e[o]),`invalid bundle ${r}.${o}: ${JSON.stringify(e[o])}`),[o,e[o]])).filter(([,o])=>o!==void 0);return n.length===0?void 0:Object.freeze(fn(n))},jE=e=>{let t=s1(e,WE,"repo");return Z(t?.directory===void 0||t.root===void 0,"bundle repo has both directory and root"),t},VE=e=>typeof e=="string"&&/^[\w.+@/~'!()*-]+$/u.test(e),i1={name:VE,version:VE},GE={npm:i1,composer:i1,cargo:i1},ID=(e,t)=>fn(Object.keys(GE).map(r=>{let[n,o]=[e?.[r],t?.[r]];return[r,n?.name!==void 0&&n.name===o?.name?fn(Object.entries(n).filter(([i,s])=>s===o[i])):void 0]})),Vr=class e{static VERSION=Ii;version=Ii;config;entries;modules;formats;imports;executable;reason;#e;get repo(){return this.#e}set repo(t){this.#e=jE(t)}#t;get package(){return this.#t}set package(t){this.#t=s1(t,GE,"package")}constructor({config:t={scope:"full"},entries:r,modules:n,formats:o,imports:i,executable:s,reason:a,repo:c,package:u,version:p=Ii}={}){Z([zE,Ii].includes(p)),Z(["node_modules","full"].includes(t.scope)),this.version=p,this.config=t,this.entries=r??new Set,this.modules=n??new Map,this.formats=o??new Map,this.imports=i??new Map,this.executable=s??new Set,this.reason=a,this.repo=jE(c),this.package=u}get sources(){let t=new Map;for(let[r,{files:n}]of this.modules)for(let[o,i]of Object.entries(n))t.set(ta(r,o),i);return t}static isResourceFormat(t){return t==="resource"||t==="resource:base64"||t==="directory"}get hasCode(){for(let[t,{files:r}]of this.modules)for(let n of Object.keys(r))if(!e.isResourceFormat(this.formats.get(ta(t,n))))return!0;return!1}static parse(t){return e.fromJSON(JSON.parse(t))}static fileKeyAt(t){let[r,n,o,i]=t;if(typeof n=="string"){if(t.length===2&&r==="sources"){let s=HE(n);return ym(s.dir,s.rel,"bundle")}if(t.length===4&&(r==="sources"||r==="modules")&&o==="files"&&typeof i=="string")return ym(n,i,"bundle")}}static fromJSON(t,{contents:r=!0}={}){Z(t.version===Ii||t.version===zE),Z(["node_modules","full"].includes(t.config?.scope));let n=EE(t.formats),o=new Map,i=new Set;if(t.version===Ii){let c=t.config.scope==="full";if(t.modules!==void 0){Z(typeof t.modules=="object"&&t.modules!==null);for(let[u,p]of Object.entries(t.modules))Z(Bl(u)),Eo(u,"bundle"),Z(p?.name&&p.version&&p.files),o.set(u,r1(p))}if(c){Z(t.sources&&typeof t.sources=="object");for(let[u,p]of Object.entries(t.sources))Z(!Bl(u)),Eo(u,"bundle"),Z(p?.name&&p.files),o.set(u,r1(p));t.entries!==void 0&&(i=_E(t.entries,"bundle"))}else Z(t.entries===void 0),Z(t.sources===void 0)}else{Z(t.sources);for(let[c,u]of Object.entries(t.sources)){Eo(c,"bundle");let{dir:p,rel:f,name:h}=HE(c);Z(!_u(p)&&!_u(f)),o.has(p)||o.set(p,{name:h,version:null,files:Object.create(null)});let{files:g}=o.get(p);Z(!Object.hasOwn(g,f),"bundle: duplicate file key '.' (v0 '' and '.')"),g[f]=u}}let s=wm(o,"bundle",UE),a=AE(t.imports);if(!r)for(let[c,u]of o)o.set(c,CD(c,u));return new e({version:t.version,config:t.config,entries:i,modules:o,formats:n,imports:a,executable:t.version===Ii?vE(t.executable,{what:"bundle",files:s,formats:n,scope:t.config.scope}):new Set,reason:Fl(t.reason)?t.reason:void 0,repo:t.repo,package:t.package})}serialize(){wm(this.modules,"bundle",UE);let{modules:t,sources:r}=TE(this.modules,{skipEmpty:!0}),n=this.config.scope==="full",o={version:Ii,config:this.config};this.repo!==void 0&&(o.repo=this.repo),this.package!==void 0&&(o.package=this.package),n&&(o.entries=SE(this.entries,"bundle")),o.formats=ME(this.formats),o.imports=IE(this.imports);let i=yE(this.executable,{what:"bundle",modules:this.modules,formats:this.formats,scope:this.config.scope});return i!==void 0&&(o.executable=i),this.reason!==void 0&&(o.reason=o1(this.reason,void 0)),n&&(o.sources=r),o.modules=t,JSON.stringify(o,void 0,2)}withReason(t){let{version:r,config:n,entries:o,modules:i,formats:s,imports:a,executable:c,repo:u,package:p}=this,f=o1(this.reason,{[t]:[...this.sources.keys()]});return new e({version:r,config:n,entries:o,modules:i,formats:s,imports:a,executable:c,reason:f,repo:u,package:p})}merge(t){return Z(this.config.scope===t.config.scope,`bundle merge: scope mismatch ('${this.config.scope}' vs '${t.config.scope}')`),new e({config:{scope:this.config.scope},entries:new Set([...this.entries,...t.entries]),modules:NE(this.modules,t.modules,"bundle merge"),formats:FE(this.formats,t.formats,"bundle merge"),imports:LE(this.imports,t.imports,"bundle merge"),executable:BE(this.executable,t.executable,t.modules,this.config.scope),reason:o1(this.reason,t.reason),repo:AD(this.repo,t.repo),package:ID(this.package,t.package)})}}});function TD(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function LD(e,t){let r=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(r).arrayBuffer())}async function FD(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let r=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;r&&r.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}function OD(){return $m||($m=(async()=>await import(KE))(),$m)}function l1(){a1=!0,Yn&&(Yn.terminate(),Yn=null);let e=[...Ol.values()];Ol.clear();for(let t of e)t.resolve(_m)}function ND(e){let{id:t,bytes:r,error:n}=e.data??{},o=Ol.get(t);o&&(Ol.delete(t),n?o.reject(new Error(n)):o.resolve(r))}function PD(){if(Yn)return Yn;if(a1||typeof Worker>"u")return null;try{Yn=new Worker(new URL(KE,import.meta.url),{type:"module"})}catch{return a1=!0,null}return Yn.addEventListener("message",ND),Yn.addEventListener("error",l1),Yn.addEventListener("messageerror",l1),Yn}function DD(e){let t=PD();return t?new Promise((r,n)=>{let o=++BD;Ol.set(o,{resolve:r,reject:n});try{t.postMessage({id:o,bytes:e})}catch{Ol.delete(o),l1(),r(_m)}}):Promise.resolve(_m)}async function zD(){await FD();let e=TD();return e?{kind:"native",format:e}:{kind:"fallback"}}function qE(){return xm||(xm=zD(),xm)}async function YE(e,t=()=>!0){let r=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};r();let n=await qE();if(r(),n.kind==="native")return LD(n.format,e);let o=await DD(e);return r(),o!==_m?o:(await OD()).brotliDecompress(e)}var xm,$m,KE,_m,Yn,a1,BD,Ol,c1=k(()=>{"use strict";xm=null,$m=null;KE="./brotli-fallback.js",_m=Symbol("brotli worker unavailable"),Yn=null,a1=!1,BD=0,Ol=new Map;qE().catch(()=>{})});function jD(e){let t=typeof e=="string"?e.slice(e.lastIndexOf("/")+1):"",r=t.lastIndexOf("."),n=r>0?t.slice(r+1).trim().toLowerCase():"",o=Rr(e)??HD[n];return o?{key:o,label:UD[o]??o}:n?{key:`extension:${n}`,label:`.${n}`}:{key:"other",label:"Other"}}function Su(e,t){let r=new Map,n=0,o=0;for(let[i,s]of e){let a=jD(i),c=r.get(a.key)??{...a,files:0,lines:0,bytes:0};c.files++,c.lines+=s,c.bytes+=t.get(i)??0,r.set(a.key,c),o+=s,n+=t.get(i)??0}return{files:e.size,lines:o,bytes:n,languages:[...r.values()].toSorted((i,s)=>s.lines-i.lines||i.label.localeCompare(s.label))}}var UD,HD,d1=k(()=>{"use strict";mm();UD=Object.freeze({javascript:"JavaScript",jsx:"JSX",typescript:"TypeScript",tsx:"TSX",json:"JSON",css:"CSS",markup:"HTML",yaml:"YAML",bash:"Shell",markdown:"Markdown",solidity:"Solidity",php:"PHP",rust:"Rust",ruby:"Ruby",java:"Java",cpp:"C++",c:"C",objectivec:"Objective-C",python:"Python",go:"Go",kotlin:"Kotlin",swift:"Swift",dart:"Dart",sql:"SQL",lua:"Lua",csharp:"C#",scala:"Scala",vue:"Vue",svelte:"Svelte"}),HD=Object.freeze({py:"python",pyw:"python",go:"go",kt:"kotlin",kts:"kotlin",swift:"swift",dart:"dart",sql:"sql",lua:"lua",cs:"csharp",scala:"scala",sc:"scala",vue:"vue",svelte:"svelte"})});function dt(e){if(e?.metadataOnly)return new Map;let t=e?.bundle??e?.json;if(t&&u1.has(t))return u1.get(t);let r=new Map;if(!e)return r;if(e.kind==="stasis"){if(!e.bundle)return r;let n=e.bundle.formats;for(let[o,i]of e.bundle.sources)typeof i=="string"&&(Vr.isResourceFormat(n?.get(o))||r.set(o,i))}else if(e.kind==="sourcemap"){if(!e.json)return r;let n=e.json.sources??[],o=e.json.sourcesContent??[];for(let i=0;i<n.length;i++)typeof o[i]=="string"&&r.set(n[i],o[i])}return t&&u1.set(t,r),r}function hn(e){let t=e?.bundle??e?.json;if(t&&p1.has(t))return p1.get(t);let r=new Map(dt(e));if(e?.kind==="stasis"&&e.bundle){let n=e.bundle.formats;for(let[o,i]of e.bundle.sources){if(typeof i!="string")continue;let s=n?.get(o);s==="resource"?r.set(o,i):s==="resource:base64"&&r.set(o,{format:"base64",data:i})}}return t&&p1.set(t,r),r}function WD(e){let t=e.endsWith("=");if(t?e.length%4!==0||e.at(-3)==="=":e.length%4===1)return null;let r=t?e.slice(0,e.endsWith("==")?-2:-1):e;if(/[^A-Za-z0-9+/]/u.test(r))return null;let n=r.length%4;return n>1&&VD.indexOf(r.at(-1))&(n===2?15:3)?null:Math.floor(r.length*3/4)}function Cu(e){return typeof e=="string"?cs(e):e?.format==="base64"?WD(e.data):null}function Xt(e){if(e?.fileSizes)return e.fileSizes;let t=e?.bundle??e?.json;if(t&&f1.has(t))return f1.get(t);let r=new Map,n=hn(e),o=e?.kind==="stasis"?e.bundle?.sources.keys():e?.json?.sources;for(let i of o??[])r.set(i,Cu(n.get(i)));return t&&f1.set(t,r),r}function b1(e){if(e?.metadataOnly)return e.unsizedFiles??new Set;let t=Xt(e);if(g1.has(t))return g1.get(t);let r=new Set;for(let n of hn(e).keys())t.get(n)===null&&r.add(n);return g1.set(t,r),r}function Nl(e){let t=Xt(e);if(m1.has(t))return m1.get(t);let r=b1(e),n=e?.kind==="stasis"?e.bundle?.formats:null,o=new Map;for(let[i,s]of t)s===null&&!r.has(i)||o.set(i,Vr.isResourceFormat(n?.get(i))?"resource":"source");return m1.set(t,o),o}function XE(e){let t=Xt(e),r=e?.kind==="stasis"?e.bundle?.formats:null;if(!r||r.size===0)return t;if(h1.has(t))return h1.get(t);let n=new Map;for(let[o,i]of t)n.set(o,Vr.isResourceFormat(r.get(o))?null:i);return h1.set(t,n),n}function Wr(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return null;let t=new Map;for(let[r,n]of e.bundle.modules)for(let o of Object.keys(n.files))t.set(r==="."?o:`${r}/${o}`,r);return t}function Eu(e,t=null){let r=new Map;if(e?.kind!=="stasis"||!e.bundle?.modules)return r;let n=t===null?null:Wr(e),o=t===null?null:new Set([...t].map(i=>n?.get(i)));for(let[i,s]of e.bundle.modules){if(o&&!o.has(i)||!i.includes("node_modules")||!s?.name||typeof s.version!="string"||!s.version)continue;let a=r.get(s.name);a||(a=new Set,r.set(s.name,a)),a.add(s.version)}return r}var u1,p1,f1,h1,m1,g1,VD,Mu=k(()=>{"use strict";km();Dt();u1=new WeakMap,p1=new WeakMap,f1=new WeakMap,h1=new WeakMap,m1=new WeakMap,g1=new WeakMap;VD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"});function Ti(e,t=null){return!!t||KD.has(e)}function Ru(e){if(e.fileHashes)return Promise.resolve(e.fileHashes);if(Sm.has(e))return Sm.get(e);let t=(async()=>{let r=[...dt(e)],n=new Map;for(let o=0;o<r.length;o+=32){let i=await Promise.all(r.slice(o,o+32).map(async([s,a])=>[s,await uv(a)]));for(let[s,a]of i)n.set(s,a)}return e.fileHashes=n,n})();return Sm.set(e,t),t.catch(()=>Sm.delete(e)),t}function Au(e){return typeof e!="string"||e.length===0?0:(e.match(/\r\n|\r|\n/gu)?.length??0)+(/[\r\n]$/u.test(e)?0:1)}function y1(e){return e instanceof Map?Object.fromEntries([...e].map(([t,r])=>[t,y1(r)])):e}async function JE(e){let t=await Ru(e),r=Xt(e),n=e.lineCounts??=new Map([...dt(e)].map(([s,a])=>[s,Au(a)])),o={version:v1,integrity:e.integrity,kind:e.kind,size:e.size,codeStats:Su(n,r),files:[...r].map(([s,a])=>[s,a,t.get(s)??null,n.get(s)??null])},i=b1(e);if(i.size>0&&(o.unsized=[...i]),e.kind==="sourcemap"){let{version:s,file:a,sourceRoot:c,names:u,sources:p=[],sourcesContent:f=[]}=e.json;o.json={version:s,file:a,sourceRoot:c,sources:p},o.sourceSizes=p.map((h,g)=>typeof f[g]=="string"?cs(f[g]):null),o.namesCount=u?.length??null}else{let s=e.bundle,a={version:s.version,config:s.config,repo:s.repo,package:s.package,formats:y1(s.formats),imports:y1(s.imports),reason:s.reason,executable:[...s.executable]};if(s.version===0)a.sources=Object.fromEntries([...r.keys()].map(c=>[c,null]));else{let c={},u={};for(let[p,f]of s.modules){let h=p.split("/").includes("node_modules")?c:u;Object.defineProperty(h,p,{enumerable:!0,value:{name:f.name,version:f.version,ecosystem:f.ecosystem,files:Object.fromEntries(Object.keys(f.files).map(g=>[g,null]))}})}a.modules=c,s.config.scope==="full"&&(a.sources=u,a.entries=[...s.entries])}o.bundle=a}return o}function Iu(e,t){if(![1,2,v1].includes(e?.version)||e.integrity!==t||!["stasis","sourcemap"].includes(e.kind)||!Number.isSafeInteger(e.size)||e.size<0||!Array.isArray(e.files))throw new Error("Invalid bundle metadata");let r=e.version!==v1,n=e.version===1,o=new Map,i=new Map,s=new Map;for(let u of e.files){if(!Array.isArray(u)||u.length!==4&&!(n&&u.length===3))throw new Error("Invalid bundle metadata file");let[p,f,h,g]=u;if(typeof p!="string"||i.has(p)||f!==null&&(!Number.isSafeInteger(f)||f<0)||h!==null&&(typeof h!="string"||!/^sha512-[A-Za-z0-9+/]{86}==$/u.test(h))||f===null&&h!==null||n&&f!==null&&h===null||g!=null&&(!Number.isSafeInteger(g)||g<0))throw new Error("Invalid bundle metadata file");i.set(p,f),h!==null&&o.set(p,h),g!=null&&s.set(p,g)}let a=new Set(e.unsized??[]);if(e.unsized!==void 0&&(n||!Array.isArray(e.unsized)||a.size!==e.unsized.length)||[...a].some(u=>typeof u!="string"||!i.has(u)||i.get(u)!==null))throw new Error("Invalid bundle metadata");let c={integrity:t,kind:e.kind,size:e.size,metadataOnly:!0,fileSizes:i,fileHashes:o,lineCounts:s,unsizedFiles:a,stale:r};if(e.kind==="stasis"){c.bundle=Vr.parse(JSON.stringify(e.bundle));let u=c.bundle.sources;if(u.size!==i.size||[...u.keys()].some(f=>!i.has(f)))throw new Error("Invalid bundle metadata inventory");let p=c.bundle.formats;if(!n&&[...i].some(([f,h])=>o.has(f)!==(h!==null&&!Vr.isResourceFormat(p.get(f)))))throw new Error("Invalid bundle metadata inventory");if([...a].some(f=>p.get(f)!=="resource:base64"))throw new Error("Invalid bundle metadata inventory")}else{if(!e.json||typeof e.json!="object"||![null,void 0].includes(e.namesCount)&&(!Number.isSafeInteger(e.namesCount)||e.namesCount<0))throw new Error("Invalid sourcemap metadata");if(!Array.isArray(e.json.sources)||e.json.sources.some(u=>!i.has(u))||!Array.isArray(e.sourceSizes)||e.sourceSizes.length!==e.json.sources.length||e.sourceSizes.some(u=>u!==null&&(!Number.isSafeInteger(u)||u<0))||[...i].some(([u,p])=>o.has(u)!==(p!==null))||a.size>0)throw new Error("Invalid sourcemap inventory");c.json=e.json,c.sourceSizes=e.sourceSizes,c.namesCount=e.namesCount}if(e.codeStats===void 0)c.codeStats=Su(s,i);else{let u=e.codeStats,p=f=>Number.isSafeInteger(f)&&f>=0;if(!u||![u.files,u.lines,u.bytes].every(p)||!Array.isArray(u.languages)||u.languages.some(f=>!f||typeof f.key!="string"||typeof f.label!="string"||![f.files,f.lines,f.bytes].every(p)))throw new Error("Invalid bundle code stats");c.codeStats=u}return c}function ZE(e,{integrity:t,kind:r,size:n}){if(r==="stasis")return{integrity:t,kind:r,size:n,bundle:Vr.parse(e)};if(r!=="sourcemap")throw new Error("Unsupported bundle format");let o=JSON.parse(e);if(!Array.isArray(o?.sources)||o.sources.some(i=>typeof i!="string")||o.sourcesContent!==void 0&&(!Array.isArray(o.sourcesContent)||o.sourcesContent.some(i=>i!==null&&typeof i!="string")))throw new Error("Invalid sourcemap");return{integrity:t,kind:r,size:n,json:o}}var GD,v1,Sm,KD,QE=k(()=>{"use strict";d1();zh();km();ge();Dt();Mu();GD=3,v1=GD,Sm=new WeakMap,KD=new Set(["terminal","code","search","compare"])});var Pl=k(()=>{"use strict";QE()});async function w1(e){try{let t=await Xv(e);return t?Iu(t,e):null}catch{return null}}function Mo(e,t,{sources:r=!0}={}){if(!t.managedId&&C())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let n=r?qD:YD,o=t.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis",i=l.bundleDetails;if(i?.integrity===e&&i.kind===o&&i.managedId===t.managedId&&!i.error&&(!r||!i.metadataOnly))return Promise.resolve(i);let s=`${t.managedId??"local"}:${e}:${o}`,a=t.managedId&&r?Ws():void 0,c=n.get(s);if(c&&c.signal===a)return c.job;let u=(async()=>{if(t.managedId)try{let h=r?ZE(await q6(t.managedId,{signal:a}),{integrity:e,kind:o,size:t.size}):Iu(await Sh(t.managedId),e);return h.managedId=t.managedId,h}catch(h){if(h.name==="AbortError")throw h;return{integrity:e,kind:o,size:t.size,managedId:t.managedId,error:h.message}}if(!r){let h=await w1(e);return h?.kind===o&&!h.stale?h:Mo(e,t)}let[p,f]=await Promise.all([XD(e,t),w1(e)]);if(!p.error){let h=f?.kind===p.kind&&!f.stale;h&&(p.fileHashes=f.fileHashes,p.fileSizes=f.fileSizes,p.lineCounts=f.lineCounts),h||JE(p).then(g=>Jv(e,g)).catch(()=>{})}return p})();return n.set(s,{job:u,signal:a}),u.finally(()=>{n.get(s)?.job===u&&n.delete(s)}).catch(()=>{}),u}function Ro(e,t=l.currentView==="bundles"?l.bundleDetailsTab:"overview",{workspaceId:r=null}={}){Ft(),l.currentView="bundles",l.selectedBundle=e,l.selectedBundleWorkspace=r,l.bundleDetails=null,l.bundleSourceFile=null,l.bundleCodeHistory=null,l.bundleSourceFindingIdx=null,l.bundleCodeSearchQuery="",l.bundleCodeSearchMode="files",l.bundleSearchQuery="",l.bundleSearchRegex=!1,l.bundleSearchCase=!1,l.bundleSearchContext=!0,l.bundleDetailsTab=t??"overview",B.showAll=!0,l.shownTriage=null}function Dl(e,{preserveSource:t=!1}={}){Ti(l.bundleDetailsTab,l.bundleSourceFile)&&!Ti(e,t?l.bundleSourceFile:null)&&Ft(),l.bundleDetailsTab=e,t||(l.bundleSourceFile=null,l.bundleCodeHistory=null),l.bundleSourceFindingIdx=null}async function XD(e,t){try{let r=await an(e);if(C())throw new DOMException("Local bundle closed","AbortError");let n=t.name.toLowerCase().endsWith(".map"),o=n?"sourcemap":"stasis";try{if(n){let a=JSON.parse(at(r));return{integrity:e,kind:o,size:r.byteLength,json:a}}let i=at(await YE(r,()=>!C())),s=Vr.parse(i);return{integrity:e,kind:o,size:r.byteLength,bundle:s}}catch(i){if(i.name==="AbortError")throw i;return{integrity:e,kind:o,size:r.byteLength,error:i.message}}}catch(r){if(r.name==="AbortError")throw r;return{integrity:e,error:r.message,size:0}}}function JD(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Sd(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Ru(e);if(Sd(e.integrity,t),l.bundleDetails!==e)return;e.fileHashes=t,E()}catch{}})()}}function k1(e){if(gy(e))return Promise.resolve();if(Tu.has(e))return Tu.get(e);let t=(l.bundles??[]).find(n=>n.integrity===e);if(!t||t.managedId)return Promise.resolve();let r=(async()=>{let n=await w1(e);if(!(!n?.json&&!n?.bundle))try{let o=await Ru(n);Sd(e,o)}catch{}})();return Tu.set(e,r),r.finally(()=>{Tu.get(e)===r&&Tu.delete(e)}).catch(()=>{}),r}async function x1(e,t=()=>!0){let r=new Set(e);if(r.size!==0){await new Promise(n=>{let o=()=>setTimeout(n,0);typeof requestAnimationFrame=="function"?requestAnimationFrame(o):o()});for(let n of r){if(!t())return;await k1(n)}}}async function Ao(e){let t=(l.bundles??[]).find(n=>n.integrity===e);if(!t)return;let r;try{r=await Mo(e,t,{sources:Ti(l.bundleDetailsTab,l.bundleSourceFile)})}catch(n){if(n.name==="AbortError")return;throw n}l.selectedBundle!==e||t.managedId&&!l.bundles.includes(t)||(l.bundleDetails=r,E(),JD(r),t.managedId||Nr().catch(()=>{}))}function ra(e=l.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Ws():void 0,r=Cm.get(e);if(r&&r.signal===t)return r.job;let n=(l.bundles??[]).find(i=>i.integrity===e.integrity);if(!n)return Promise.resolve(null);let o=Mo(e.integrity,n).then(i=>(t?.throwIfAborted(),l.bundleDetails!==e?i:i.error&&e.managedId?(e.sourceError=i.error,E(),null):(i.error||(i.fileHashes=e.fileHashes,i.fileSizes=e.fileSizes,i.lineCounts=e.lineCounts,i.codeStats=e.codeStats),l.bundleDetails=i,E(),i))).catch(i=>{if(i.name==="AbortError")return null;throw i});return Cm.set(e,{job:o,signal:t}),o.finally(()=>{Cm.get(e)?.job===o&&Cm.delete(e)}).catch(()=>{}),o}var qD,YD,Tu,Cm,Io=k(()=>{"use strict";km();U();Kt();Dt();c1();ko();Yt();$l();Pl();qD=new Map,YD=new Map,Tu=new Map,Cm=new WeakMap});var Gr=k(()=>{"use strict";Mu()});function rM(e){let t=/^([a-z][a-z\d+.-]*:\/\/[^/]*)(.*)$/iu.exec(e),r=t?.[1]??"",n=t?.[2]??e,o=n.startsWith("/"),i=[];for(let s of n.split("/"))if(!(!s||s==="."))if(s===".."&&i.length>0&&i.at(-1)!=="..")i.pop();else{if(s===".."&&o&&i.length===0)return null;i.push(s)}return r+(o?"/":"")+i.join("/")}function ZD(e){let t=new Map;for(let r of e.keys()){let n=rM(r);n!==null&&t.set(n,t.has(n)?null:r)}return t}function $1(e,t=dt(e)){let r=new Map;if(e?.kind==="stasis")for(let n of e.bundle?.imports?.values()??[])for(let[o,i]of n){if(!t.has(o))continue;r.has(o)||r.set(o,new Map);let s=r.get(o);for(let[a,c]of i){let u=typeof c=="string"&&t.has(c)?c:null;s.set(a,s.has(a)&&s.get(a)!==u?null:u)}}return r}function Em(e,t,r=null){let n=eM.get(e);n||(n=ZD(e),eM.set(e,n));let o=r?.get(t),i=t.slice(0,t.lastIndexOf("/")+1);return s=>{if(typeof s!="string"||/\p{Cc}/u.test(s))return null;if(o?.has(s)){let u=o.get(s);return typeof u=="string"&&e.has(u)?u:null}if(!s.startsWith("./")&&!s.startsWith("../"))return null;let a=s.slice(s.lastIndexOf("/")+1),c=a.lastIndexOf(".");return c<=0||c===a.length-1?null:n.get(rM(i+s))??null}}function _1(e,t){let r=dt(e),n=tM.get(r);return n||(n=$1(e,r),tM.set(r,n)),Em(r,t,n)}var eM,tM,S1=k(()=>{"use strict";Mu();eM=new WeakMap;tM=new WeakMap});function Mm(e,t){return!!e&&!!t&&e.integrity===t.integrity&&e.file===t.file&&(e.range?.start??null)===(t.range?.start??null)&&(e.range?.end??null)===(t.range?.end??null)}function C1(e,t,r){if(!r)return null;if(!Array.isArray(e)||e.length===0||!Mm(e[0],r))return{stack:QD,at:0,pos:r};let n=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:n,pos:e[n]}}function nM({stack:e,at:t,base:r},n){let o=e.length>0?e[t]:r;if(Mm(o,n))return null;let i=e.length>0?e.slice(0,t+1):[r];return{stack:[...i,n],at:i.length}}function oM(e,t,r){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+r,0),e.length-1)}var QD,Rm=k(()=>{"use strict";QD=[]});function zl(e,t){if(!e||!t||t.length===0)return;let r=e.getBoundingClientRect().top,n=t[0].getBoundingClientRect(),o=t.item(t.length-1).getBoundingClientRect(),i=n.top-r+e.scrollTop,s=o.bottom-r+e.scrollTop,a=i+(s-i)/2-e.clientHeight/2;e.scrollTo({top:Math.max(0,Math.min(a,i-n.height)),behavior:"instant"})}var Am=k(()=>{"use strict"});function sM(e,t,r,n,o,i=M1,s=ez){let a=`${e}\0${t}`;if(i.has(a)||s.has(a))return;let c=Rr(t,n);if(!c){i.set(a,null);return}s.add(a),(async()=>{let u=await jr(r,c,o);i.set(a,u??null),s.delete(a),l.focusCodeTick++,queueMicrotask(E)})()}async function tz(e){let t=Lu.get(e);if(t&&(t.loading||t.sources))return;let r=(l.bundles??[]).find(n=>n.integrity===e);if(r){Lu.set(e,{sources:null,loading:!0,error:null});try{let n=await Mo(e,r),o=dt(n);Lu.set(e,{sources:o,imports:$1(n,o),formats:n.kind==="stasis"?n.bundle?.formats:null,loading:!1,error:n.error??null})}catch(n){Lu.set(e,{sources:null,loading:!1,error:n.message})}l.focusCodeTick++,queueMicrotask(E),queueMicrotask(To)}}function To(){let e=N.querySelectorAll(".focus-code-line-active");e.length!==0&&zl(e[0].closest(".focus-code-body"),e)}function Fu(e){if(C()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;l.focusCodeTick;let r=wl(e._managedReportId);if(r?.data===null||r?.error)return null;let n={integrity:r?.data?.integrity??null,reportId:e._managedReportId},o=[e,...Array.isArray(e.evidence)?e.evidence:[]];for(let i of o){let s=Bu(n,i?.file);if(s)return{...n,file:s,line:i.line}}return null}let t=e?._bundleHashes;return!e?.fileHash||!Array.isArray(t)||t.length===0?null:Fs(e.fileHash).find(({integrity:r})=>t.includes(r))??null}function Bu(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return my(e.integrity,t);let r=wl(e.reportId);if(!r||r.data===void 0&&!r.error)return t;let n=r.data;return n?.paths.get(t)??(n?.sources.has(t)?t:null)}function aM(e,t,r){if(!C())return null;let n=wl(e);if(!n||n.data===void 0&&!n.error)return r&&!E1.has(e)&&(E1.add(e),_h(e).catch(()=>{}).finally(()=>{E1.delete(e),l.focusCodeTick++,queueMicrotask(E),queueMicrotask(To)})),r?{loading:!0}:null;let o=n.data;if(!o)return null;t=o.paths.get(t)??t;let i=o.sources.get(t);if(typeof i!="string")return null;let s=iM.get(o);return s||(s={cache:new Map,pending:new Set},iM.set(o,s)),sM(o.integrity,t,i,o.formats?.get(t),Em(o.sources,t,o.imports),s.cache,s.pending),{content:i,highlighted:s.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function na(e,t,{kick:r=!0,reportId:n=null}={}){if(n)return aM(n,t,r);if(C())return null;let o=Lu.get(e);if(!o)return r?(tz(e),{loading:!0}):null;if(o.loading&&!r)return null;if(o.loading)return{loading:!0};if(!o.sources)return null;let i=o.sources.get(t);if(typeof i!="string")return null;sM(e,t,i,o.formats?.get(t),Em(o.sources,t,o.imports));let s=`${e}\0${t}`;return{content:i,highlighted:M1.has(s)?M1.get(s):void 0,loading:!1}}function lM(e){let t=Fu(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:Bt(t.reportId?t.line:e.line)}:null}function rz(e){return e?lM(Oe(e)):null}function Ul(e){let t=rz(e);return t?{base:t,...C1(l.focusCodeStack,l.focusCodeAt,t)}:null}function cM(e){let t=lM(e);return t?C1(l.focusCodeStack,l.focusCodeAt,t).pos:null}function dM(e,t,r,n){let o=Ul(e);if(!o||o.pos.integrity!==t||o.pos.file!==r)return null;let i=Oe(e),s=na(t,n,{kick:!1,reportId:i?._managedReportId});return s&&!s.loading?{integrity:t,file:n,range:null}:null}function uM(e){let t=e&&Oe(e),r=Fu(t);if(r?.reportId&&!r.integrity)return aM(r.reportId,r.file,!0);let n=Ul(e);if(!n)return null;let{pos:o}=n,i=na(o.integrity,o.file,{reportId:t?._managedReportId});return!i||i.loading?i:{...i,file:o.file,integrity:o.integrity,range:o.range}}var Lu,M1,ez,iM,E1,Im=k(()=>{"use strict";U();Kt();ct();Io();Gr();S1();Rm();he();ea();Yt();mr();Am();Lu=new Map,M1=new Map,ez=new Set,iM=new WeakMap,E1=new Set});function Hl(e,{teamOnly:t=!1,reportId:r}={}){if(!e)return null;let n=q(e);if(!Ht(n))return null;if(C()){let s=t?null:r??(l.currentView==="links"?e._managedReportId:l.currentManagedReport),a=vr(wt({view:"findings",teamId:l.currentManagedTeam,reportId:s,finding:{id:n}},l.managedTeams));return a?`${typeof location>"u"?"":location.origin}${a}`:null}let o=e._reportName||l.currentFile||"",i=l.currentWorkspace||Li(o);return av({id:n,report:l.currentWorkspace?null:hf("report",o),workspace:hf("workspace",i??"")})}function Li(e,t=l.currentReportWorkspace||l.currentWorkspace){let r=Pd(e);return r.some(n=>n.id===t)?t:r.length===1?r[0].id:null}function Fi(e){for(let t of[Mr(),J4()])for(let r of t)for(let n of r)if(q(n)===e)return{group:r,finding:n};return null}function R1(e,t){l.currentView="findings",l.viewMode==="graph"&&(l.viewMode="table",Ze());let r=Ke(e).commonTriage;if(l.viewMode==="kanban"){let s=r??"untriaged";l.kanbanExpandedColumn!==null&&l.kanbanExpandedColumn!==s&&(l.kanbanExpandedColumn=null)}else r!==l.shownTriage&&(l.shownTriage=r);l.upstreamOnly&&!e.every(s=>s.isUpstream)&&(l.upstreamOnly=!1),xi(l.showRevalidation,l.upstreamOnly);let n=e.find(s=>q(s)===t);if(qs(n)||im(qn())&&!M4(e)||!Kn(e).some(s=>q(s)===t))if(l.currentWorkspace){n?.isUpstream?l.upstreamOnly=!0:l.showRevalidation=!1,xi(l.showRevalidation,l.upstreamOnly);let s=Mr().find(a=>a.some(c=>q(c)===t));if(s)return R1(s,t)}else l.revalidationDetailed=!0;if(Mi([e]).length===0){let s=l.sortBy;Tl(),l.sortBy=s}let i=de(e);return e.length>1&&l.activeTabByGroup.set(i,t),l.viewMode==="table"?l.tableSelectedGid=i:l.viewMode==="focus"?l.focusGid=i:l.viewMode==="kanban"&&(l.kanbanPopoverGid=i),i}var Bi=k(()=>{"use strict";U();po();pn();ct();he();ko()});function pM(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function fM(e,t){if(e.createdAt==null&&t.createdAt!=null)return-1;if(e.createdAt!=null&&t.createdAt==null)return 1;let r=(e.createdAt??0)-(t.createdAt??0);return r!==0?r:e.id===t.id?0:e.id<t.id?-1:1}var A1=k(()=>{"use strict"});function Tm(e,t){Ou.has(e)||Ou.set(e,new Set);let r=Ou.get(e);return r.add(t),()=>{r.delete(t),r.size===0&&Ou.delete(e)}}function I1(e,t){l.managedComments.set(e,t);for(let r of Ou.get(e)??[])r()}function Xn(e){return C()?l.managedComments?.get(e?.id)??[]:[]}function Lm(){return C()&&l.managedSession!=null&&yl(l.managedSession.role,"triage")}function Fm(e){return Lm()&&pM(e,l.managedSession)}function Nu(e){let t=l.reports,r=l.managedSession?.id;return()=>C()&&r!=null&&l.managedSession?.id===r&&l.reports===t&&l.managedReports.some(n=>n.id===e)}async function jl(e,{signal:t,readAnnotations:r}={}){let n=Nu(e);if(!n())return!1;let o=new Set(l.reports.filter(c=>c._managedReportId===e).flatMap(c=>c.groups.flatMap(u=>u.map(p=>p.id)))),i=new Map([...o].map(c=>[c,l.managedComments.get(c)])),s=r?(await r(e))?.comments:await H6(e,l.currentManagedTeam,{signal:t});if(!n()||s==null||t?.aborted)return!1;let a=new Map([...o].map(c=>[c,[]]));for(let c of s)a.has(c.findingId)&&a.get(c.findingId).push(c);for(let[c,u]of a)l.managedComments.get(c)===i.get(c)&&I1(c,u);return!0}async function hM(e,t,r=null){let n=e?._managedReportId,o=Nu(n);if(!o()||!Lm())return{status:403};if(r&&r.authorId!==l.managedSession.id)return{status:403};let i=await j6(n,{findingId:e.id,body:t,commentId:r?.id,version:r?.version},l.managedSession.csrfToken);if(!o())return{status:0};if(i.comment){let a=(l.managedComments.get(e.id)??[]).filter(c=>c.id!==i.comment.id);a.push(i.comment),a.sort(fM),I1(e.id,a)}return i}async function mM(e,t){let r=e?._managedReportId,n=Nu(r);if(!n()||!Fm(t))return 403;let o=await V6(r,t.id,t.version,l.managedSession.csrfToken);if(!n())return 0;if(o===204){let i=l.managedComments.get(e.id)??[];I1(e.id,i.filter(s=>s.id!==t.id))}return o}var Ou,Vl=k(()=>{"use strict";U();Zd();A1();Kt();Ou=new Map});var gM,bM=k(()=>{Jr();as();Op();gM=Ar(class extends er{constructor(){super(...arguments),this.key=m}render(e,t){return this.key=e,t}update(e,[t,r]){return t!==this.key&&(Aa(e),this.key=t),r}})});var vM=k(()=>{bM()});function T1(e,t){return e?gM(e,d`<span class="managed-comment-avatar" aria-hidden="true"><span>${(t?.[0]??"?").toUpperCase()}</span> ${Un()?m:d`<img alt="" src="${`/api/avatar/${encodeURIComponent(e)}`}" loading="lazy" @error="${r=>{r.currentTarget.hidden=!0}}">`}</span>`):m}function nz(e){let t=e.version>1&&e.updatedAt!=null,r=e.createdAt??(t?e.updatedAt:null);if(r==null)return m;let n=new Date(r),o=[e.createdAt==null?"":`Posted ${new Date(e.createdAt).toLocaleString()}`,t?`Edited ${new Date(e.updatedAt).toLocaleString()}`:""].filter(Boolean).join(`
|
|
112
|
+
`);return d`<time class="managed-comment-time" datetime="${n.toISOString()}" data-tooltip="${o}">${e.createdAt==null?"edited ":""}${n.toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"})}${t&&e.createdAt!=null?" (edited)":""}</time>`}function Wl(e,t,r=m){let n=nz(e);return d`<div class="managed-comment"><div class="managed-comment-row">${e.authorId||e.authorLogin?d`<span class="managed-comment-author">${T1(e.authorId,e.authorLogin)} ${e.authorLogin?d`<strong data-tooltip="${e.authorLogin}">${e.authorLogin}</strong>`:m}</span>`:m}<div class="managed-comment-body">${t}</div>${n===m&&r===m?m:d`<div class="managed-comment-meta">${r===m?m:d`<div class="managed-comment-actions">${r}</div>`} ${n}</div>`}</div></div>`}var Bm=k(()=>{"use strict";js();T();vM()});function Lo(e){return f4(e,{managed:C()}).map(t=>typeof t=="string"?t:t.self?d`<a class="comment-self-ref" href="${t.url}" data-tooltip="Show this finding">${t.label}</a>`:d`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Om=k(()=>{"use strict";T();U();he()});function Jt(e){return e==="informational"?"info":e.replaceAll("_"," ")}function L1(e,{variant:t="full"}={}){let r=l.severityMode,n=ue(e,r),o=d`<span class="${`badge ${n}`}">${Jt(n)}</span>`,i=wr(e),s=t==="tab"?null:Wa(e);if(!i&&!s)return o;let a=s?`Corrected severity varies across reports \u2014 ${Object.entries(s).map(([$,_])=>`${$||"(this report)"}: ${Jt(_.severity)}`).join("; ")}`:null,c=s?d`<span class="badge-varies" title="${a}" aria-label="${a}">varies</span>`:m;if(!i)return d`<span class="${`badge-pair badge-pair-${t}`}">${o}${c}</span>`;let u=ue(e,"original"),p=Fr(e),f=e.correctedSeverityReason,h=(We[p]??0)>(We[u]??0),g=h?"up":"down",b=h?"\u25B2":"\u25BC",v=r!=="original",x=(v?`Corrected ${g} from ${Jt(u)}`:`Original severity \u2014 corrected ${g} to ${Jt(p)}`)+(f?` \u2014 ${f}`:""),w=`Severity ${Jt(n)}; ${v?`corrected ${g} from ${Jt(u)}`:`original, corrected to ${Jt(p)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return d`<span class="badge-pair badge-pair-tab" title="${x}" aria-label="${w}">${o}<span class="${`badge-corr-mark ${g}`}" aria-hidden="true">${b}</span></span>`;let y=v?u:p;return d`<span class="${`badge-pair badge-pair-${t}`}" title="${x}" aria-label="${w}">${o}<span class="badge-orig-wrap"><span class="${`badge-arrow ${g}`}" aria-hidden="true">${b}</span>${v?d`<span class="badge-pre" aria-hidden="true">was</span>`:m}<span class="${`badge-orig ${y}${v?" struck":""}`}">${Jt(y)}</span></span>${c}</span>`}function Du(e){yM.lastIndex=0;let t=[],r=0,n;for(;(n=yM.exec(e))!==null;){n.index>r&&t.push(e.slice(r,n.index));let o=n[0].codePointAt(0);if(o===91){let i=c4(n[0]);t.push(i?d`<a href="${i.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${i.url}">${i.label}</a>`:n[0])}else o===42?t.push(d`<strong>${n[0].slice(2,-2)}</strong>`):o===96?t.push(d`<span class="inline-code">${n[0].slice(1,-1)}</span>`):t.push(d`<span class="inline-quote">${n[0]}</span>`);r=n.index+n[0].length}return r===0?e:(r<e.length&&t.push(e.slice(r)),t)}function oz({lang:e,code:t}){l.codeBlockTick;let r=Qw(t,e);return d`<div class="code-block" data-lang="${e||m}">${e?d`<div class="code-block-lang">${e}</div>`:m}<pre><code>${r?V(r):t}</code></pre></div>`}function iz(e,{wrap:t=!1}={}){let r=e.split(/\n{2,}/u).filter(n=>n.trim());return r.length<2?t?d`<div class="para">${Du(e)}</div>`:Du(e):r.map(n=>d`<div class="para">${Du(n)}</div>`)}function sz({ordered:e,start:t,items:r}){let n=r.map(o=>d`<li>${lr(o)}</li>`);return e?d`<ol class="md-list" start="${t>1?t:m}">${n}</ol>`:d`<ul class="md-list">${n}</ul>`}function lr(e,{paragraphs:t=!0}={}){if(!e)return e;let r=t?s4(e):[e],n=r.length>1,o=s=>t?iz(s,{wrap:n}):Du(s),i=s=>{let a=i4(s);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(c=>typeof c=="string"?o(c):oz(c))};return r.length===1&&typeof r[0]=="string"?i(r[0]):r.map(s=>typeof s=="string"?i(s):sz(s))}function az(e){let t=new Set;for(let r of e)t.add(ot(r));return[...t]}function lz(e){let t=ot(e);return Gs[t]??t}function cz(e,t){l.linksTick,l.findingIndexTick;let r=q(e),n=Ht(r)?$r(r).filter(o=>!t.has(o)):[];return n.length===0?m:d`<div class="duplicates-block"><span class="duplicates-label">Duplicates:</span>${n.map(o=>{let i=mu(o),s=Ls(o),a=s.length===0?"":` \u2014 in ${s.map(c=>`${Ae(c)} (${lz(c)})`).join(", ")}`;return d`<a class="duplicate-ref" href="${C()?Hl({id:o},{teamOnly:!0}):`#${Rn({id:o})}`}" data-tooltip="${`${i}${a}`}">${az(s).map(c=>V(Se[c]??Se.default))}<span class="duplicate-ref-id">${Xs(o)??i}</span></a>`})}</div>`}function dz(e){let t=gw(e);return t?d`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:m}function uz(e){let t=du()?jt(e.revalidateVerdict,e):"";return t?d`<div class="revalidate-verdict">${lr(Rl(t))}</div>`:m}function Pu(e,t,r="section",{collapsible:n=!1}={}){let o=t?d`<div class="section-body">${lr(Rl(t))}</div>`:m;return!n||!t?d`<div class="${r}"><div class="section-label">${e}</div>${o}</div>`:d`<details class="${r}"><summary class="section-label">${e}</summary>${o}</details>`}function pz(e,t,r){let n=e?.integrity&&t?.file?Bu(e,t.file):null;return n?d`<span class="evidence-ref" role="link" tabindex="0" data-code-nav-integrity="${e.integrity}" data-code-nav-file="${n}" data-code-nav-line="${t?.line??""}">${r}</span>`:d`<span class="evidence-ref">${r}</span>`}function fz(e,t){let r=Array.isArray(e.evidence)?e.evidence:[];if(r.length===0)return m;let n=sr(e),o=Fu(e),i=t==="focus"&&o!==null,s=i?cM(e):null;return d`<details class="evidence"><summary class="section-label">Evidence<span class="evidence-count">(${r.length})</span></summary><ol class="evidence-list">${r.map((a,c)=>{let u=xt(a),p=Jh(a,e,n,c),f=ks(a),h=xM(e,`ev${c}`,o,a?.file,a?.line),g=F1(p),b=i&&Mm(s,{integrity:o.integrity,file:Bu(o,a?.file),range:Bt(a?.line)});return d`<li class="${z({current:b})}">${i?pz(o,a,u):p?d`<a class="evidence-ref" href="${p}" target="_blank" rel="noopener">${u}</a>`:d`<span class="evidence-ref">${u}</span>`} ${h?.mark??m} ${g} ${h?.tip??m} ${f?d`<div class="evidence-note">${lr(Rl(f))}</div>`:m} ${h?.body??m}</li>`})}</ol></details>`}function kM(e,t){let r=xt(e);return t?d`<a href="${t}" target="_blank" rel="noopener">${r}</a>`:r}function hz(e,t){if(!t)return m;let r=t.slice(0,7),n=Zh(e,t);return n?d`<a href="${n}" target="_blank" rel="noopener" data-tooltip="${t}">${r}</a>`:d`<span title="${t}">${r}</span>`}function F1(e){let t=r4(e);return t?d`<a class="gh-ref-btn" href="${e}" target="_blank" rel="noopener noreferrer" data-tooltip="${t}" aria-label="${`Open ${t} on GitHub`}">${vz}</a>`:m}function yz(e,t,r,n){return`${q(e)}\0${t}\0${r}\0${n?`${n.start}-${n.end}`:""}`}function Nm(e,t){if(Gl.key===e)return;let r=Gl.host,n=e===null?null:t?.getRootNode?.()?.host??null;Gl={key:e,host:n},r?.requestUpdate?.(),n!==r&&n?.requestUpdate?.()}function wM(e,t,r){l.codeBlockTick;let{text:n,lines:o,startLine:i}=a4(e,t);if(o.length===0)return m;let s=r.lastIndexOf("."),a=Qw(n,s<0?"":r.slice(s+1)),c=i+o.length-1;return d`<div class="code-preview" style="${Me({"--lineno-width":`${String(c).length}ch`})}"><aside class="code-preview-gutter" aria-hidden="true">${o.map((u,p)=>{let f=i+p,h=!!t&&f>=t.start&&f<=t.end;return d`<div class="${z({"code-preview-lineno":!0,cited:h})}">${f}</div>`})}</aside><pre class="code-preview-source"><code>${a?V(a):n}</code></pre></div>`}function xM(e,t,r,n,o){if(l.bundleHashTick,!r||!n)return null;let i=Bu(r,n);if(!i)return null;let s=Bt(o),a=yz(e,t,n,s),c=l.codePreviews.has(a);l.focusCodeTick;let u=d`<button type="button" class="${z({"code-preview-btn":!0,open:c})}" data-code-preview="${a}" aria-expanded="${String(c)}" aria-label="${c?`Hide the source at ${n}`:`Show the source at ${n}`}" @mouseenter="${h=>{Nm(a,h.currentTarget),na(r.integrity,i,{reportId:r.reportId})}}" @mouseleave="${h=>{Gl.key===a&&Nm(null,h.currentTarget)}}" @focus="${h=>{Nm(a,h.currentTarget),na(r.integrity,i,{reportId:r.reportId})}}" @blur="${h=>{Gl.key===a&&Nm(null,h.currentTarget)}}">${bz}</button>`;if(c){let h=na(r.integrity,i,{reportId:r.reportId}),g=!h||h.loading?d`<div class="code-preview code-preview-pending">${h?"Loading source\u2026":"Source unavailable"}</div>`:wM(h.content,s,i);return{mark:u,tip:m,body:g}}if(Gl.key!==a)return{mark:u,tip:m,body:m};let p=na(r.integrity,i,{kick:!1,reportId:r.reportId}),f=p&&!p.loading?d`<div class="code-preview-tip" role="tooltip">${wM(p.content,s,i)}</div>`:m;return{mark:u,tip:f,body:m}}function xz(e,t=!1){let r=Ce(e)?.flagged===!0,n=r?"Remove flag":"Flag this finding";return d`<button type="button" class="${z({"mark-flag":!0,flagged:r})}" data-flag-toggle="${q(e)}" ?disabled="${!Ue(e)}" aria-label="${n}" aria-pressed="${String(r)}">${Dm}${t?d`<span class="mark-btn-label">${r?"Flagged":"Flag"}</span>`:m}</button>`}function $z(e){let t=Ge(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function _z(e){let t=zr(e,sr(e)),r=xt(e),n=[];e.file&&n.push(`File: ${t?`[${r}](${t})`:r}`),e.description&&n.push(e.description);let o=hu(e);return o&&n.push(o),e.confidence!==void 0&&e.confidence!==null&&n.push(`Confidence: ${e.confidence}/10`),n.join(`
|
|
113
|
+
|
|
114
|
+
`)}function Sz(e){if(!l.currentWorkspace)return m;let t=e._reportName;if(!t)return m;if(C()&&!e._managedReportId)return m;let r=nt[ot(t)]??nt.default,n=d`${V(r)}<span class="report-chip-label report-button-label">${Ae(t)}</span>`;if(C()){let o=Hl(e,{reportId:e._managedReportId});if(o)return d`<a class="report-chip report-button comment-self-ref" href="${Hs(o)}">${n}</a>`}return d`<button type="button" class="report-chip report-button" data-links-report="${t}" data-links-finding="${q(e)}" data-managed-report="${C()?e._managedReportId:m}">${n}</button>`}function $M(e,t,r,n,o=null){let i=o==="table"?m:Sz(n),s=Ce(n),a=!Ue(n),c=s?.color??null,u=s?.comment??"",p=s?.fix??"",f=C()?"View comments":u?`Edit comment: ${u}`:"Add comment",h=p?`Edit fix link: ${p}`:"Add fix link (PR URL, etc.)",g=o==="focus"&&i===m,b=C()?"Comments":u?"Edit comment":"Comment",v=p?"Edit fix link":"Fix link",x=d`<button type="button" ?disabled="${a}" class="${z({"mark-comment":!0,"has-comment":u})}" data-tooltip="${g&&!u?m:f}" aria-label="${f}">${Pm}${g?d`<span class="mark-btn-label">${b}</span>`:m}</button>`,w=d`<button type="button" ?disabled="${a}" class="${z({"mark-fix":!0,"has-fix":p})}" data-tooltip="${g&&!p?m:h}" aria-label="${h}">${zu}${g?d`<span class="mark-btn-label">${v}</span>`:m}</button>`,y=xz(n,g),$=d`<button type="button" class="mark-copy" data-tooltip="${g?m:"Copy file, line, description, confidence to clipboard"}" aria-label="Copy finding details to clipboard">${mz}${g?d`<span class="mark-btn-label">Copy</span>`:m}</button>`,_=Hl(n)?d`<button type="button" class="mark-link" data-tooltip="${g?m:"Copy a link to this finding"}" aria-label="Copy a link to this finding">${gz}${g?d`<span class="mark-btn-label">Link</span>`:m}</button>`:m,S=C()?$t({repo:{github:n.repo?.github||n._repoFallback}}):um(n),M=p4(S,{title:$z(n),body:_z(n),labels:sE(n.isSecurity===!0,l.githubNewIssueLabels)}),R=C()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam,P=d`${kz}${g?d`<span class="mark-btn-label">Issue</span>`:m}`,L=M?R?d`<button type="button" class="mark-issue" data-issue-form="${M}" data-tooltip="${g?m:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${P}</button>`:d`<a class="mark-issue" href="${M}" target="_blank" rel="noopener" data-tooltip="${g?m:"Create a GitHub issue for this finding"}" aria-label="Create a GitHub issue for this finding">${P}</a>`:m,A=d`<button type="button" class="mark-claude" data-tooltip="${g?m:"Open in Claude Code (claude://) with a confirm-and-fix prompt"}" aria-label="Open finding in Claude Code">${wz}${g?d`<span class="mark-btn-label">Claude</span>`:m}</button>`,W=d`<color-marker .selected="${c}" .disabled="${a}"></color-marker>`,ce=Ll(e)!==e,Ct=e.linkedTabs?"change triage state for linked findings":ce?"change triage state for App and own-source findings":r.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return d`<div class="finding-actions">${i}<div class="finding-action-controls"><span class="mark-action-group">${x}${w}${y}</span><span class="mark-action-group">${$}${_}${L}${A}</span>${W}${Ez(e,Ct,o,r,n)}</div></div>`}function Cz(e){if(e.newState!=="open")return;let t=e.currentTarget,n=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!n)return;let o=n.getBoundingClientRect(),i=t.offsetWidth||110,s=t.offsetHeight||100,a=4,c=o.right-i;c<4&&(c=4),c+i>window.innerWidth-4&&(c=window.innerWidth-i-4);let u=o.bottom+a;u+s>window.innerHeight-4&&o.top>s+a&&(u=o.top-s-a),t.style.top=`${u}px`,t.style.left=`${c}px`}function Ez(e,t,r,n,o){let i=de(e),s=!Ue(o)||Ri(e,n).length===0,a=s?null:Vw(e,n,o),c={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},u={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},p=!!l.shownTriage,f=p?c[l.shownTriage]:null,h=["inprogress","fixed","invalid","deleted","ignored"],b=p&&!(r==="focus")?[{key:"restore",label:"Restore"},...h.filter(w=>w!==l.shownTriage).map(w=>({key:w,label:u[w]}))]:h.map(w=>({key:w,label:u[w]})),v=["mark-triage-menu"];p&&v.push("with-label",`triage-state-${l.shownTriage}`);let x=`triage-menu-${i.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return d`<div class="triage-menu-wrap"><button type="button" class="${v.join(" ")}" popovertarget="${x}" popovertargetaction="toggle" data-tooltip="${t}" aria-label="${t}" ?disabled="${s}">${f?d`<span class="mark-triage-label">${f}</span>`:m} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${x}" class="triage-menu" data-gid="${i}" role="menu" @beforetoggle="${Cz}">${b.map(w=>d`<button type="button" class="${z({"triage-menu-item":!0,[`triage-menu-${w.key}`]:!0,active:a===w.key})}" data-triage-action="${w.key}" ?disabled="${s}" role="menuitem">${w.label}</button>`)}</div></div>`}function Mz(e){let t=!!e?.comment,r=!!e?.fix,n=e?.flagged===!0;return!t&&!r&&!n?m:d`<span class="tab-marks">${t?d`<span class="has-comment" title="Has a comment">${Pm}</span>`:m}${r?d`<span class="has-fix" title="Has a fix link">${zu}</span>`:m}${n?d`<span class="flagged" title="Flagged">${Dm}</span>`:m}</span>`}function _M(e,t,r){let{app:n,source:o}=K4(e),i=s=>Rz(s,q(s)===t,r);return d`<div class="tabs">${n.map(i)} ${n.length>0&&o.length>0?d`<span class="tab-level-separator" aria-hidden="true">•</span>`:m} ${o.map(i)}</div>`}function Rz(e,t,r){let n=q(e),o=Ce(e),i=o?.color,s=$u(e,o),a=["tab",`tab-severity-${ue(e,l.severityMode)}`];t&&a.push("active"),i&&a.push(`tab-mark-${i}`),s==="ignored"&&!r.allIgnored?a.push("tab-ignored"):s&&s!=="ignored"&&r.commonTriage===null&&a.push(`tab-${s}`);let c=ou(e),u=c?nt[c]:null,p=!u&&e.confidence!=null;u?a.push("tab-with-analyzer"):p&&a.push("tab-with-confidence");let f=u?d`<span class="tab-analyzer" role="img" aria-label="${Gs[c]}">${V(u)}</span>`:p?d`<span class="tab-conf" aria-label="${`Confidence ${e.confidence} out of 10`}">${e.confidence}<span class="tab-conf-max">/10</span></span>`:m;return d`<button type="button" class="${a.join(" ")}" data-tid="${n}" aria-pressed="${t}" aria-description="${i?`${i} color label`:m}"><span class="tab-label"><span class="tab-severity">${L1(e,{variant:"tab"})}</span><span class="tab-indicators">${Mz(o)}</span></span>${f}</button>`}function Az(e){if(l.viewMode==="table"||l.viewMode==="focus"){let t=e.confidence*10;return d`<div class="${`conf-ring ${ue(e,l.severityMode)}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="stroke-dasharray: ${t} 100"/></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return d`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}function Tz(e){if(ni(e))return m;let t=e?.name;if(typeof t!="string"||!Iz.test(t))return m;let r=e?.version,n=typeof r=="string"&&r.length>0,o=n?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(r)}`:`https://www.npmjs.com/package/${t}`,i=n?`${t}@${r}`:t;return d`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer">npm: ${i}</a></span>`}function Lz(e,t,r,n,o,i){let s=q(e),a=Ce(e),c=a?.comment??"",u=a?.fix??"",p=zr(e,sr(e)),f=kM(e,p),h=ho(e),g=Fu(e),b=xM(e,"loc",g,e.file,e.line),v=F1(p),x=d`<span class="line-num">${h?d`${f}, ${h}`:f}${b?.mark??m}${v}</span>`,w=Ys(e),y=String(e.discoveredIn??"").trim(),$=y===String(e.file??"").trim()?"":y,_=o==="focus"?Tz(e.package?.npm):m,S=m;if(o!=="focus"&&C()&&b)S=d`<button type="button" class="finding-code-btn" data-finding-code-report="${g.reportId}" data-finding-code-file="${e.file}" data-finding-code-line="${e.line??""}" aria-label="${`Open full source for ${e.file}`}">Code</button>`;else if(o!=="focus"&&!C()&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){l.bundleHashTick;let ce=new Set(e._bundleHashes),Ct=Fs(e.fileHash).find(({integrity:be})=>ce.has(be));Ct&&(S=d`<button type="button" class="finding-code-btn" data-finding-code-bundle="${Ct.integrity}" data-finding-code-file="${Ct.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${Ct.file} in bundle source viewer`}">Code</button>`)}let{title:M,body:R}=ti(e),P=Ka(R),L=P.findIndex(ce=>ce.label!==null),A=L===-1?P:P.slice(0,L),W=L===-1?[]:P.slice(L);return d`<div class="${z({"tab-body":!0,active:t})}" data-tid="${s}">${n>1?d`<div class="print-case-label">${r+1} of ${n}</div>`:m}<div class="finding-left">${a?.color||a?.flagged===!0?d`<div class="${a?.color?`finding-top-marks color-${a.color}`:"finding-top-marks"}">${a?.color?d`<span class="finding-color-mark" role="img" aria-label="${`Color label: ${a.color}`}"></span>`:m} ${a?.flagged===!0?d`<span class="finding-bookmark-mark" role="img" aria-label="Bookmarked"></span>`:m}</div>`:m} ${L1(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?m:Az(e)} ${dz(e)} ${S}</div><div class="finding-body"><div class="line-row">${x} ${b?.tip??m} ${_} ${$?d`<span class="line-num discovered-in">(found analyzing ${$})</span>`:m} ${w?d`<span class="run-meta">${w}</span>`:m}</div>${b?.body??m} ${M?d`<div class="desc-title">${Du(M)}</div>`:m} ${A.map(ce=>d`<div class="desc">${lr(Rl(ce.body))}</div>`)} ${fz(e,o)} ${W.map(ce=>ce.label===null?d`<div class="desc">${lr(Rl(ce.body))}</div>`:Pu(ce.label,ce.body))} ${e.impact?Pu("Impact",jt(e.impact,e)):m} ${e.reproduction?Pu("Reproduction",jt(e.reproduction,e),"section",{collapsible:!0}):m} ${e.recommendation?Pu("Recommendation",jt(e.recommendation,e),"recommendation",{collapsible:!0}):m} ${e.confidenceReason?d`<div class="conf-reason">${lr(jt(e.confidenceReason,e))}</div>`:m} ${uz(e)} ${e.revalidateRecommendation&&du()?Pu("Revalidation recommendation",jt(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):m} ${wr(e)&&e.correctedSeverityReason?d`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${lr(e.correctedSeverityReason)}</div>`:m} ${cz(e,i)} ${C()?Xn(e).map(ce=>d`<div class="comment-block">${Wl(ce,Lo(ce.body))}</div>`):c?d`<div class="comment-block"><span class="comment-label">Comment:</span> ${Lo(c)}</div>`:m} ${u?d`<div class="fix-block"><span class="fix-label">Fix:</span> ${Pe(u)?d`<managed-fix-link .url="${u}"></managed-fix-link>`:u}</div>`:m}</div></div>`}function SM(e){let t=["finding",...B1(e)];return Kn(e).length>1&&t.push("multi-case"),t}function CM(e,t={}){let{context:r=null}=t,n=Ke(e),o=Kn(e),i=new Set(o.map(q)),s=Oe(e),a=q(s),c=s.commitHash?d`<div class="commit-ref">introduced in ${hz(s.repo?.github,s.commitHash)}</div>`:m,u=l.currentWorkspace&&c!==m;return d`${o.map((p,f)=>Lz(p,q(p)===a,f,o.length,r,i))} ${u?d`<div class="marks-commit-row">${c}</div>`:m}<div class="marks"><div class="marks-left">${u?m:c} ${o.length>1?_M(o,a,n):m}</div>${$M(e,o,n,s,r)}</div>`}function B1(e){let t=Ke(e),r=e.some(o=>o.critical||ue(o,l.severityMode)==="critical"),n=[];return r&&n.push("is-critical"),t.hasConflict?n.push("has-conflict"):t.commonColor&&n.push(`mark-${t.commonColor}`),l.shownTriage&&n.push(`triage-${l.shownTriage}`),n}function EM(e){let t=Ke(e),r=Kn(e),n=Oe(e),o=q(n),i=n,s=Ge(i),a=Ys(i),c=ho(i),u=c?`, ${c}`:"",p=zr(i,sr(i));return d`<div class="row-score">${L1(i,{variant:"compact"})} ${i.confidence===void 0?m:d`<span class="row-conf"><strong>${i.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${s}</span> ${a?d`<span class="row-type">${a}</span>`:m}</div><div class="meta-row"><span class="row-loc">${kM(i,p)}${u}</span> ${F1(p)}<div class="marks">${$M(e,r,t,n,"table")}</div></div>${r.length>1?d`<div class="tabs-row">${_M(r,o,t)}</div>`:m}</div>`}var yM,Pm,zu,mz,gz,bz,vz,Gl,wz,kz,Dm,Iz,oa=k(()=>{"use strict";T();He();ao();Je();U();js();ge();aE();he();ct();uE();Im();Rm();un();gt();Bi();Vl();Bm();Om();Om();yM=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;Pm=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,zu=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,mz=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,gz=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"><path d="M6.2 11.2H4.8a3.2 3.2 0 0 1 0-6.4h1.4"/><path d="M9.8 4.8h1.4a3.2 3.2 0 0 1 0 6.4H9.8"/><path d="M5.6 8h4.8"/></g></svg>`,bz=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.4 4.6 1.3 8l3.1 3.4"/><path d="m11.6 4.6 3.1 3.4-3.1 3.4"/><path d="M9.8 2.6 6.2 13.4"/></g></svg>`,vz=V(Wn);Gl={key:null,host:null};wz=d`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${Fh}"/></svg>`,kz=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="8" cy="8" r="1.7" fill="currentColor"/></svg>`,Dm=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`;Iz=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function Uu(e){return"tree-"+e.replaceAll(/[^\w-]+/gu,"_")}function O1(e,t){let r=new Map;for(let n of e)for(let o of n){r.has(o.file)||r.set(o.file,RM());let i=r.get(o.file),s=ue(o,t);i[s]!==void 0&&i[s]++}return r}function N1(e){let t=null;for(let r of e)if(r?.tree){t||(t={});for(let n of Object.keys(r.tree)){let o=r.tree[n];if(!t[n]){t[n]={...o,imports:[...o.imports??[]]};continue}let i=new Set(t[n].imports);for(let s of o.imports??[])i.has(s)||(i.add(s),t[n].imports.push(s));t[n].size==null&&o.size!=null&&(t[n].size=o.size)}}return t}function zm(e,t){let r=Object.keys(e),n=new Map(r.map((c,u)=>[c,u])),o=r.map(()=>RM()),i=r.map(()=>[]);for(let[c,u]of r.entries())for(let p of e[u].imports??[]){let f=n.get(p);f!==void 0&&i[f].push(c)}let s=new Uint32Array(r.length),a=0;for(let[c,u]of t){let p=n.get(c);if(p===void 0||!u)continue;let f=Ne.map(v=>[v,u[v]??0]).filter(([,v])=>v!==0);if(f.length===0)continue;let h=++a,g=[],b=v=>{s[v]!==h&&(s[v]=h,g.push(v))};for(let v of i[p])b(v);for(;g.length>0;){let v=g.pop();for(let[x,w]of f)o[v][x]+=w;for(let x of i[v])b(x)}}return new Map(r.map((c,u)=>[c,o[u]]))}function P1(e,t,r){let n=t.get(e),o=r.get(e);return MM(n)>0||MM(o)>0}function MM(e){if(!e)return 0;let t=0;for(let r of Ne)t+=e[r]??0;return t}var RM,Hu=k(()=>{"use strict";he();RM=()=>Object.fromEntries(Ne.map(e=>[e,0]))});function AM(e){if(!e)return m;let t=Fs(e)[0];return t?d`<button type="button" class="tree-code-btn" data-finding-code-bundle="${t.integrity}" data-finding-code-file="${t.file}" data-tooltip="${`Open ${t.file} in bundle source viewer`}">Code</button>`:m}function IM(e,t){let r=Object.keys(e).toSorted(),n=new Map;for(let p of r)for(let f of e[p].imports??[]){let h=n.get(f)??[];h.push(p),n.set(f,h)}let o=l.filesSearch.trim().toLowerCase(),i=o?r.filter(p=>p.toLowerCase().includes(o)):r,s=p=>e[p]?d`<a href="${`#${Uu(p)}`}"><span class="name">${p}</span></a>`:d`<span class="name">${p}</span>`,a=p=>{let f=t.get(p);if(!f)return null;let h=Ne.filter(g=>(f[g]??0)>0);return h.length===0?null:d`<span class="tree-count-chips">${h.map(g=>d`<span class="${`tree-count-chip ${g}`}">${f[g]} ${g.replaceAll("_"," ")}</span>`)}</span>`},c=p=>{let f=t.get(p);return f?Ne.reduce((h,g)=>h+(f[g]??0),0):0},u=d`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${i.length} of ${r.length}</span></div></div>`;if(l.filesViewMode==="table"){let p=l.filesSelectedFile&&e[l.filesSelectedFile]&&i.includes(l.filesSelectedFile)?l.filesSelectedFile:null;return d`<div class="${p?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${u}<div class="${p?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${i.length===0?d`<div class="tree-table-empty">No files match the search.</div>`:m} ${i.map(g=>{let b=c(g),v=g===p,x=we(e[g].size);return d`<div class="${`tree-table-row${v?" selected":""}${b===0?" clean":""}`}" data-tree-select="${g}"><span class="tree-table-name">${g}</span> ${a(g)??d`<span class="tree-table-clean-marker">—</span>`} ${x?d`<span class="tree-table-size">${x}</span>`:m}</div>`})}</div>${p?d`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect aria-label="Close details">×</button></header><div class="tree-table-details-body">${Fz(e[p],p,n.get(p)??[],s)}</div></aside>`:m}</div></div>`}return d`<div class="tree-view">${u} ${i.length===0?d`<div class="tree-table-empty">No files match the search.</div>`:m} ${i.map(p=>{let f=e[p],h=n.get(p)??[],g=we(f.size);return d`<section class="tree-file" id="${Uu(p)}"><div class="tree-file-header"><span class="name">${p}</span> ${a(p)} ${g?d`<span class="tree-file-size">${g}</span>`:m} ${AM(f.fileHash)}</div>${TM(f,h,s)}</section>`})}</div>`}function TM(e,t,r){return d`${e.fileHash||e.treeHash?d`<div class="tree-hashes hashes">${e.fileHash?d`<div class="tree-hash">file: ${e.fileHash}</div>`:m} ${e.treeHash?d`<div class="tree-hash">tree: ${e.treeHash}</div>`:m}</div>`:m} ${e.imports?.length>0?d`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(n=>d`<li>${r(n)}</li>`)}</ul></div>`:m} ${t.length>0?d`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${t.map(n=>d`<li>${r(n)}</li>`)}</ul></div>`:m} ${e.exports?.length>0?d`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(n=>d`<li><span class="name">${n}</span></li>`)}</ul></div>`:m}`}function Fz(e,t,r,n){let o=we(e.size);return d`<div class="tree-detail-name"><span class="name">${t}</span> ${o?d`<span class="tree-detail-size">${o}</span>`:m} ${AM(e.fileHash)}</div>${TM(e,r,n)}`}var LM=k(()=>{"use strict";T();U();he();Hu()});function Kl(){return FM}function Bz(){return ju||(ju=(async()=>{let e="./graph.js";try{let t=await import(e);return t._swapGraph2Impl(u3()),FM=t,t}catch(t){throw ju=null,t}})(),ju)}async function D1(e,t,r,n,o){try{let i=await Bz(),s=i.buildGraphFromPrep(t);ae(d`<graph-layout .graph="${s}" .options="${r}"></graph-layout>`,e);let a=e.querySelector("graph-layout");return await a.updateComplete,n(),o(),i.attachGraph2Interaction(e,s,n,o),a}catch(i){let s=i instanceof Error?i.message:String(i);return e.textContent=`Graph failed to load: ${s}`,null}}var ju,FM,z1=k(()=>{"use strict";T();ko();ju=null,FM=null});function BM(){Oi=null}function Oz(){return Vu||(Vu=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw Vu=null,t}})(),Vu)}function Nz(e){let t=hn(e);if(t.size===0)return t;let r=[...t.keys()],{stripped:n}=Sr(r),o=new Map;for(let i=0;i<r.length;i++)o.set(n[i],t.get(r[i]));return o}async function OM(e,t){let r=t?.integrity??"";(!Oi||Oi.integrity!==r||(t?.managedId||Oi.managedId)&&Oi.details!==t)&&(Oi={integrity:r,managedId:t?.managedId,details:t?.managedId?t:null,promise:Pz(t,r)});try{let n=await Oi.promise;return!e.isConnected||e.contains(n)||e.replaceChildren(n),n}catch(n){Oi=null;let o=n instanceof Error?n.message:String(n);return e.textContent=`Terminal failed to load: ${o}`,null}}async function Pz(e,t){return(await Oz()).createTerminalElement(Nz(e),t)}var Vu,Oi,U1=k(()=>{"use strict";Gr();he();Vu=null,Oi=null});function NM(e){if(!e)return null;let t=Q3(),r=new RegExp(`^(?:.*/)?${t}/(@[^/]+/[^/]+|[^/]+)`,"u"),n=e.match(r);if(n)return n[1];let o=e.indexOf("/");return o>0?e.slice(0,o):"/"}function Uz(){if(typeof document>"u")return!1;let e=document.body?.classList;return!!e&&(e.contains("theme-light")||e.contains("theme-pink")||e.contains("theme-paper"))}function cr(e){let t=Uz(),r=t?zz:Dz,n=e??"__own__",o=`${t?"l":"d"}:${n}`;if(H1.has(o))return H1.get(o);let i=0;for(let u of n)i=i*37+u.codePointAt(0)|0;let a=((i%r.length+r.length)%r.length*7+3)%r.length,c=r[a];return H1.set(o,c),c}var Dz,zz,H1,ia=k(()=>{"use strict";he();Dz=["#4e9af1","#f28e2b","#59a14f","#e15759","#76b7b2","#edc948","#b07aa1","#ff9da7","#9c755f","#5cd1e5","#f1ce63","#d37295","#a0cbe8","#86bcb6","#8cd17d","#b6992d","#499894","#e15759","#e879c7","#d4a6c8"],zz=["#2f8aef","#d2691e","#2ea043","#e63946","#2e9a92","#b88817","#9560e8","#d24a9c","#8a5d40","#0891b2","#a07a14","#c14e8e","#1f7ad0","#549b94","#3fb95f","#a07a14","#2a8278","#cb2c40","#c026d3","#965f93"];H1=new Map});var j1,PM=k(()=>{j1=(e,t,r)=>{for(let n of t)if(n[0]===e)return(0,n[1])();return r?.()}});var DM=k(()=>{PM()});var ke,zM=k(()=>{Jr();as();Op();ke=Ar(class extends er{constructor(e){if(super(e),e.type!==Nt.PROPERTY&&e.type!==Nt.ATTRIBUTE&&e.type!==Nt.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!OS(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===et||t===m)return t;let r=e.element,n=e.name;if(e.type===Nt.PROPERTY){if(t===r[n])return et}else if(e.type===Nt.BOOLEAN_ATTRIBUTE){if(!!t===r.hasAttribute(n))return et}else if(e.type===Nt.ATTRIBUTE&&r.getAttribute(n)===t+"")return et;return Aa(e),t}})});var dr=k(()=>{zM()});function Wz(e,t){let r=Rr(e,t);return["javascript","jsx"].includes(r)?"js":["typescript","tsx"].includes(r)?"ts":["solidity","rust","php","python","json"].includes(r)?r:"generic"}function V1(e,t){let r=Wz(e,t),n=r==="js"||r==="ts"?Mt`<rect x="1" y="1" width="14" height="14" rx="2" fill=${r==="js"?"#e6c84f":"#3178c6"}/><text x="8" y="11.5" text-anchor="middle" fill=${r==="js"?"#202020":"#fff"} font-family="sans-serif" font-size="8" font-weight="700">${r.toUpperCase()}</text>`:r==="solidity"?Mt`<path d="m8 1 4 6-4 2-4-2Z" fill="currentColor"/><path d="m4 8 4 2 4-2-4 7Z" fill="currentColor" opacity=".65"/>`:r==="rust"?jz:r==="php"?Vz:r==="python"?Hz:r==="json"?Mt`<path d="M3 1h6l5 5v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1Z" fill="#e6c84f"/><path d="M9 1v4a1 1 0 0 0 1 1h4Z" fill="#202020" opacity=".2"/><path d="M6.5 6.5h-.75a.75.75 0 0 0-.75.75v1.5L4 9.5l1 .75v1.5a.75.75 0 0 0 .75.75h.75m3-6h.75a.75.75 0 0 1 .75.75v1.5l1 .75-1 .75v1.5a.75.75 0 0 1-.75.75H9.5" fill="none" stroke="#202020" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/>`:Mt`<path d="M4 1.5h5l3 3v10H4Zm5 0v3h3M6 8h4M6 10.5h4" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>`;return d`<svg class="source-file-icon" data-file-type="${r}" width="16" height="16" viewBox="0 0 16 16" style="flex: none" aria-hidden="true">${n}</svg>`}var Hz,jz,Vz,tie,UM,HM,jM,VM,WM=k(()=>{"use strict";T();mm();Hz=Mt`<path d="M8 1C4.5 1 4 1.5 4 3v1h4v1H3C1.5 5 1 6 1 8s.5 3 2 3h1V9c0-1.5 1-2 2.5-2H10c1.5 0 2-.5 2-2V3c0-1.5-.5-2-4-2Z" fill="#3776ab"/><path d="M8 1C4.5 1 4 1.5 4 3v1h4v1H3C1.5 5 1 6 1 8s.5 3 2 3h1V9c0-1.5 1-2 2.5-2H10c1.5 0 2-.5 2-2V3c0-1.5-.5-2-4-2Z" fill="#ffd43b" transform="rotate(180 8 8)"/><circle cx="6" cy="2.8" r=".65" fill="#fff"/><circle cx="10" cy="13.2" r=".65" fill="#fff"/>`,jz=Mt`<path d="m7 0 2 0 .4 1.6 1.3.5 1.4-.9 1.4 1.4-.9 1.4.5 1.3 1.6.4v2l-1.6.4-.5 1.3.9 1.4-1.4 1.4-1.4-.9-1.3.5-.4 1.6H7l-.4-1.6-1.3-.5-1.4.9-1.4-1.4.9-1.4-.5-1.3L1.3 9V7l1.6-.4.5-1.3-.9-1.4 1.4-1.4 1.4.9 1.3-.5Z" fill="#c97d5d"/><circle cx="8" cy="8" r="4.4" fill="var(--surface, #fff)"/><text x="8" y="10.8" text-anchor="middle" fill="currentColor" font-family="serif" font-size="8" font-weight="700">R</text>`;Vz=Mt`<g fill="#8892bf" transform="translate(0 .5) scale(.5)"><path d="M28 10a4 4 0 0 0-4-4h-6v6a6 6 0 0 1-6 6h-2v2h2v6h4v-6h8v6h4V16h2v-4a2 2 0 0 0-2-2"/><path d="M12 4H8v2a6 6 0 0 0-6 6v6a2 2 0 0 0 2 2v2H2.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5H6a2 2 0 0 0 2-2v-8h4a4 4 0 0 0 4-4V8a4 4 0 0 0-4-4M6 14H4v-2h2Z"/></g>`;tie=d`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" style="flex: none" aria-hidden="true"><path d="M1.5 4V2.5h5L8 4h6.5v9h-13Z" stroke-linejoin="round"/></svg>`,UM=d`<svg class="bundle-code-tree-npm" width="12" height="12" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M1 1h14v14H1Zm3 3v8h4V6h2v6h2V4Z"/></svg>`,HM=d`<svg class="bundle-code-tree-soldeer" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="m8 1 6 3.5v7L8 15l-6-3.5v-7Z" fill="none" stroke="currentColor" stroke-width="1"/><path d="m8 3 2.5 4L8 8.5 5.5 7Zm-2.5 5L8 9.5 10.5 8 8 13Z" fill="currentColor"/></svg>`,jM=d`<svg class="bundle-code-tree-composer" width="12" height="12" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 1 15 4.5v7L8 15l-7-3.5v-7Z" fill="#8892bf"/><path d="m1 4.5 7 3.5 7-3.5M8 8v7M4.5 2.75l7 3.5" fill="none" stroke="var(--surface, #fff)" stroke-width=".9"/></svg>`,VM=d`<svg class="bundle-code-tree-cargo" width="12" height="12" viewBox="9.25 6.14 14 14" aria-hidden="true"><path d="m16.264 11.547 6.2-2.446v8.16l-6.2 2.485Zm0-.019-6.2-2.481v8.123l6.2 2.522Z" fill="#e5ac3d" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m16.277 11.508 6.169-2.435-6.2-2.531-6.2 2.467Z" fill="#e3b04e" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m12.82 10.149 6.196-2.467" fill="none" stroke="#73561f" stroke-miterlimit="10" stroke-width=".05430921534373718px"/><path d="m18.301 7.395-6.24 2.484 1.482.593 6.196-2.466z" fill="#fff" stroke="#73561f" stroke-miterlimit="10" stroke-width=".04741218643894885px" opacity=".3"/><path d="m13.562 10.47-1.453-.565v1.645l.201-.136.18.285.104.04.138-.121.137.228.129.05.189-.166.238.332.137.053zm-1.423 7.576 1.461.545-.023-1.645-.2.139-.184-.282-.104-.039-.136.123-.14-.226-.131-.049-.186.169-.243-.329-.137-.051z" fill="#fff" stroke="#73561f" stroke-miterlimit="10" stroke-width=".06661495224335688px" opacity=".3"/><path d="m21.426 13.49-.172-.039V13.4l.148-.208a.1.1 0 0 0 .018-.065.035.035 0 0 0-.037-.03l-.189.006-.015-.045.118-.222a.07.07 0 0 0 .007-.063.04.04 0 0 0-.045-.018l-.2.051-.024-.037.084-.229a.06.06 0 0 0 0-.058.04.04 0 0 0-.051-.006l-.2.094-.032-.027.047-.227a.05.05 0 0 0-.016-.052.05.05 0 0 0-.056.007l-.2.133-.039-.017.007-.215a.04.04 0 0 0-.026-.043.07.07 0 0 0-.058.02l-.184.166-.045-.006-.033-.2a.036.036 0 0 0-.036-.032.08.08 0 0 0-.057.031l-.164.194-.049.005-.071-.168a.036.036 0 0 0-.044-.021.1.1 0 0 0-.055.042l-.138.214-.05.016-.107-.135a.04.04 0 0 0-.05-.008.1.1 0 0 0-.05.051l-.107.226-.05.026-.138-.1a.05.05 0 0 0-.055 0 .1.1 0 0 0-.044.058l-.071.228-.049.036-.164-.054a.06.06 0 0 0-.057.017.1.1 0 0 0-.036.063l-.033.223-.045.044-.184-.01a.08.08 0 0 0-.058.029.1.1 0 0 0-.026.065l.007.209-.039.05-.2.035a.1.1 0 0 0-.056.04.1.1 0 0 0-.016.065l.046.187-.032.054-.2.079a.1.1 0 0 0-.051.049.07.07 0 0 0 0 .062l.084.157-.024.057-.2.119a.1.1 0 0 0-.045.057.06.06 0 0 0 .007.057l.118.122-.015.058-.189.155a.1.1 0 0 0-.037.062.045.045 0 0 0 .018.05l.148.082v.055l-.172.185a.1.1 0 0 0-.028.065.04.04 0 0 0 .028.041l.172.039v.051l-.148.208a.1.1 0 0 0-.018.065.035.035 0 0 0 .037.03l.189-.006.015.045-.118.222a.07.07 0 0 0-.007.063.04.04 0 0 0 .045.018l.2-.051.024.037-.084.229a.06.06 0 0 0 0 .058.04.04 0 0 0 .051.006l.2-.094.032.027-.046.227a.05.05 0 0 0 .016.051.05.05 0 0 0 .056-.007l.2-.133.039.017-.007.215a.04.04 0 0 0 .026.043.07.07 0 0 0 .058-.02l.184-.166.045.006.033.2a.035.035 0 0 0 .036.032.08.08 0 0 0 .057-.031l.164-.194.049-.005.071.168a.036.036 0 0 0 .044.02.1.1 0 0 0 .055-.042l.138-.214.05-.016.107.135a.04.04 0 0 0 .05.008.1.1 0 0 0 .05-.051l.107-.226.05-.027.138.1a.05.05 0 0 0 .055 0 .1.1 0 0 0 .044-.058l.071-.228.049-.036.164.054a.06.06 0 0 0 .057-.017.1.1 0 0 0 .036-.063l.033-.223.045-.044.184.01a.08.08 0 0 0 .058-.029.1.1 0 0 0 .026-.065l-.007-.209.039-.05.2-.035a.1.1 0 0 0 .056-.04.1.1 0 0 0 .016-.065l-.046-.187.017-.053.2-.079a.1.1 0 0 0 .051-.049.07.07 0 0 0 0-.062l-.084-.157.024-.057.2-.119a.1.1 0 0 0 .045-.057.06.06 0 0 0-.007-.057l-.118-.122.015-.058.189-.155a.1.1 0 0 0 .037-.062.045.045 0 0 0-.018-.05l-.148-.082v-.055l.172-.185a.1.1 0 0 0 .028-.065.04.04 0 0 0-.014-.039m-1.153 1.988c-.066.013-.108-.037-.094-.112a.21.21 0 0 1 .145-.16c.066-.013.108.037.094.112a.21.21 0 0 1-.145.16m-.059-.39a.19.19 0 0 0-.132.146l-.061.325a2.3 2.3 0 0 1-.619.4 1.4 1.4 0 0 1-.632.123l-.061-.273c-.013-.057-.072-.072-.132-.033l-.252.164a1 1 0 0 1-.13-.106l1.226-.521q.022-.007.023-.026v-.455c0-.013-.009-.012-.023-.006l-.359.152v-.288l.388-.165a.16.16 0 0 1 .239.115c.015.057.049.249.072.3s.117.172.217.13l.611-.26.022-.012a3 3 0 0 1-.139.23Zm-1.7 1.13c-.066.043-.131.026-.145-.037a.2.2 0 0 1 .094-.192c.066-.043.131-.026.145.037a.2.2 0 0 1-.09.192Zm-.465-1.779a.18.18 0 0 1-.062.2c-.062.055-.134.056-.161 0a.18.18 0 0 1 .062-.2c.066-.051.138-.053.165 0Zm-.143.416.263-.234a.16.16 0 0 0 .057-.178l-.054-.105.213-.09v1l-.429.182a1.4 1.4 0 0 1-.057-.407c.001-.052.001-.11.011-.168Zm1.152-.587v-.3l.506-.215c.026-.011.185-.047.185.077 0 .1-.122.192-.222.234l-.47.2Zm1.84-.516v.118l-.154.065a.04.04 0 0 0-.022.036v.074a.31.31 0 0 1-.176.3c-.078.043-.165.036-.176-.01-.046-.253-.123-.278-.245-.327a1 1 0 0 0 .308-.578.3.3 0 0 0-.235-.315.57.57 0 0 0-.322.026l-1.592.677a2.7 2.7 0 0 1 .84-.853l.188.127c.042.029.113 0 .157-.063l.21-.3a.94.94 0 0 1 1.027.33l-.144.4c-.025.069 0 .128.057.13l.277.011q.004.073.004.152Zm-1.591-1.044c.049-.069.126-.1.172-.069s.045.113 0 .183-.126.1-.172.069-.044-.114.005-.184Zm1.427.6a.19.19 0 0 1 .161-.133c.062 0 .089.066.062.142a.19.19 0 0 1-.161.133c-.057-.006-.085-.07-.058-.15Z" opacity=".55"/><path d="M0 16.309h22.926v9.971L45.72 13.139 22.926 0v9.97H0z" fill="#231f20" transform="matrix(0 -.029 .022 .013 10.451 11.138)"/><path d="M0 16.309h22.926v9.971L45.72 13.139 22.926 0v9.97H0z" fill="#231f20" transform="matrix(0 -.029 .022 .013 15.013 12.984)"/></svg>`});function Qe(e){let t=GM(e,64);return t===e?W1(e):`${W1(t)}...`}var Gz,GM,G1,W1,Um,ql=k(()=>{Gz=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,GM=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,G1=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,W1=e=>JSON.stringify(e).replaceAll(Gz,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);Um=class extends Error{constructor(t,r){super(r===void 0?t:`${t} at line ${r+1}`),this.name=new.target.name,this.line=r}}});function ve(e,t,r){if(!e)throw new mn(typeof r=="function"?r():r,t.line)}var mn,Yl=k(()=>{ql();ql();mn=class extends Um{}});var qM=k(()=>{ql()});function Ni(e,t){t.lastIndex=e.pos;let r=t.exec(e.text);return r!==null&&(e.pos=t.lastIndex),r}var fie,YM=k(()=>{qM();ql();fie=2**20});function K1(e){let t=Kz.exec(e);if(t===null)return;let[r,n,o,i,s,a]=[Number(t[1]),Number(t[2]),Number(t[3]),Number(t[5]),Number(t[6]),Number(t[7])],c=r%4===0&&r%100!==0||r%400===0;if(n<1||n>12||o<1||o>(n===2&&c?29:Xz[n-1])||i>23||s>59||a>60||t[10]!==void 0&&(Number(t[11])>23||Number(t[12])>59))return;let u=[];(t[4]==="t"||t[9]==="z")&&u.push('a date-time with a lower-case "t" or "z" is not supported'),r===0&&u.push("the year 0000 is not supported"),a===60&&u.push("a leap second is not supported");let p=t[10]===void 0?0:(t[10]==="-"?-1:1)*(Number(t[11])*60+Number(t[12]));return{year:r,month:n,day:o,hour:i,minute:s,second:a,fraction:t[8]?.slice(1)??"",offset:p,unsupported:u}}function XM(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let r=K1(e);if(r?.unsupported.length===0)return new Hm(e);let n=/^\d{4}-\d\d-\d\d$/u.test(e)&&/^ \d\d:/u.test(t.text.slice(t.pos,t.pos+4));throw ve(!n,t,'a date-time with a space in place of "T" is not supported'),ve(!qz.test(e),t,()=>`local dates and times are not supported: ${Qe(e)}`),ve(!Yz.test(e),t,()=>`a date-time or a time without seconds is not supported: ${Qe(e)}`),ve(r?.unsupported.length!==1,t,()=>`${r.unsupported[0]}: ${Qe(e)}`),new mn(`${Qe(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var Kz,qz,Yz,Xz,Hm,q1=k(()=>{Yl();Kz=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,qz=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,Yz=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,Xz=[31,28,31,30,31,30,31,31,30,31,30,31];Hm=class{constructor(t){if(typeof t!="string"||K1(t)?.unsupported.length!==0)throw new TypeError("expected an RFC 3339 offset date-time");this.text=t,Object.freeze(this)}toString(){return this.text}toJSON(){return this.text}toDate(){let{year:t,month:r,day:n,hour:o,minute:i,second:s,fraction:a,offset:c}=K1(this.text),u=new Date(0);return u.setUTCFullYear(t,r-1,n),u.setUTCHours(o,i-c,s,Number(a.padEnd(3,"0").slice(0,3))),u}}});function eR(e,t){let r=Jz.test(e);if(!r&&!Zz.test(e))return;let n=e.replaceAll("_",""),o=r?n.replace(/^[+-]/u,""):n.slice(2).replace(/^0+/u,""),s=o.length<=(r?19:eU[n[1]])?BigInt(r?n:`${n.slice(0,2)}${o||"0"}`):void 0;return ve(s!==void 0&&s>=-JM&&s<JM,t,()=>`integer out of range ${Qe(e)}`),s>=-ZM&&s<=ZM?Number(s):s}function tR(e){if(typeof e!="string"||!Qz.test(e))return;if(e in QM)return QM[e];let t=Number(e.replaceAll("_","")),r=!/[1-9]/u.test(e.split(/[Ee]/u)[0]);return Number.isFinite(t)&&(t!==0||r)?t:null}function rR(e,t){let r=tR(e);if(r!==void 0)return ve(r!==null,t,()=>`float out of range ${Qe(e)}`),new jm(e)}var Jz,Zz,Qz,JM,ZM,eU,QM,jm,Y1=k(()=>{Yl();Jz=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,Zz=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,Qz=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,JM=2n**63n,ZM=BigInt(Number.MAX_SAFE_INTEGER),eU={__proto__:null,x:16,o:21,b:63};QM={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};jm=class{constructor(t){let r=tR(t);if(r==null)throw new TypeError("expected a TOML float that a double can hold");this.text=t,this.value=r,Object.freeze(this)}valueOf(){return this.value}toString(){return this.text}toJSON(){return this.value}}});function Pi(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function sa(e){if(e.pos>=e.text.length)return"the end of the text";let t=/^[^\n]*/u.exec(e.text.slice(e.pos,e.pos+64+1))[0].replace(/\r$/u,"");return t===""?"the end of the line":Qe(t)}function aR(e,t,r){throw new mn(t==="\r"?sR:`${G1(t)} is not allowed in ${r}`,e.line)}function lR(e){e.text[e.pos]==="#"&&(Ni(e,tU),Wm(e)||aR(e,e.text[e.pos],"a comment"))}function Vm(e){if(e.text[e.pos]===`
|
|
115
|
+
`)e.pos+=1;else if(e.text.startsWith(`\r
|
|
116
|
+
`,e.pos))e.pos+=2;else return!1;return e.line++,!0}function X1(e){do Pi(e),lR(e);while(Vm(e))}function cR(e){let t=e.text[e.pos];if(t in nR)return nR[e.text[e.pos++]];let r=Ni(e,nU);ve(r!==null,e,()=>`unsupported escape ${Qe(`\\${t??""}`)}`);let n=Number.parseInt(r[1]??r[2],16);return ve(n<=1114111&&(n<55296||n>57343),e,()=>`\\${r[0]} is not a Unicode scalar value`),String.fromCodePoint(n)}function iU(e){let t=Ni(e,oU);return t===null?cR(e):(e.line+=t[0].split(`
|
|
117
|
+
`).length-1,"")}function uR(e,t){let r=dR(e,t),n=sU[r?t.repeat(3):t];e.pos+=r?3:1,r&&Vm(e);let o="";for(;;){if(o+=Ni(e,rU[t])[0],r&&Vm(e)){o+=`
|
|
118
|
+
`;continue}ve(!Wm(e),e,"unterminated string");let i=Ni(e,n);if(i!==null)return o+i[0].slice(3);let s=e.text[e.pos++];s===t?o+=s:s==="\\"?o+=r?iU(e):cR(e):aR(e,s,"a string")}}function oR(e){let t=e.text[e.pos];if(t==='"'||t==="'")return ve(!dR(e,t),e,"a multi-line string cannot be a key"),uR(e,t);let r=Ni(e,aU);return ve(r!==null,e,()=>`expected a key, found ${sa(e)}`),r[0]}function pR(e){let t=[oR(e)];for(;;){if(Pi(e),e.text[e.pos]!==".")return t;e.pos++,Pi(e),t.push(oR(e)),ve(t.length<=iR,e,"a key with too many parts")}}function cU(e){let t=Ni(e,lU);ve(t!==null,e,()=>`expected a value, found ${sa(e)}`);let r=t[0];if(r==="true")return!0;if(r==="false")return!1;let n=eR(r,e)??rR(r,e)??XM(r,e);return ve(n!==void 0,e,()=>`expected a value, found ${Qe(r)}`),n}function dU(e,t,r,n){ve(t[r]===void 0,e,()=>`duplicate key ${Qe(r)}`),t[r]=n}function fR(e,t){let r=pR(e);return ve(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${sa(e)}`),e.pos++,Pi(e),{header:!1,keys:r,value:hR(e,t)}}function uU(e,t){e.pos++;let r=[];for(X1(e);e.text[e.pos]!=="]"&&(r.push(hR(e,t+1)),X1(e),e.text[e.pos]!=="]");X1(e))ve(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${sa(e)}`),e.pos++;return e.pos++,r}function Z1(e,t,r,n,o,i){let s=t;for(let a of n.slice(0,-1)){a in s||r.add(s[a]=Object.create(null));let c=s[a];ve(r.has(c),e,()=>i(a,c)),s=c}dU(e,s,n.at(-1),o)}function J1(e){Pi(e),ve(!Wm(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function mU(e,t){e.pos++;let r=Object.create(null);pU.add(r);let n=new Set;if(J1(e),e.text[e.pos]==="}")e.pos++;else do{J1(e),ve(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:i}=fR(e,t+1);Z1(e,r,n,o,i,hU),J1(e);let s=e.text[e.pos];ve(s===","||s==="}",e,()=>`expected "," or "}" on the inline table's line, found ${sa(e)}`)}while(e.text[e.pos++]===",");return r}function hR(e,t){ve(t<=iR,e,"nested too deep");let r=e.text[e.pos];return r==='"'||r==="'"?uR(e,r):r==="["?uU(e,t):r==="{"?mU(e,t):cU(e)}function gU(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,Pi(e);let r=pR(e),n=t?"]]":"]";return ve(e.text.startsWith(n,e.pos),e,()=>`expected "${n}", found ${sa(e)}`),e.pos+=n.length,{header:!0,keys:r,array:t}}function mR(e){Pi(e);let t=e.text[e.pos];if(t==="[")return gU(e);if(!(t==="#"||t==="\r"||Wm(e)))return fR(e,0)}function gR(e){if(Pi(e),lR(e),!(Vm(e)||e.pos===e.text.length))throw ve(e.text[e.pos]!=="\r",e,sR),new mn(`expected the end of the line, found ${sa(e)}`,e.line)}var iR,sR,Wm,tU,nR,rU,nU,oU,dR,sU,aU,lU,Xl,pU,fU,hU,Q1=k(()=>{ql();YM();q1();Yl();Y1();iR=64;sR="a carriage return must be followed by a line feed";Wm=e=>e.pos>=e.text.length||e.text[e.pos]===`
|
|
119
|
+
`||e.text.startsWith(`\r
|
|
120
|
+
`,e.pos),tU=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;nR={__proto__:null,b:"\b",t:" ",n:`
|
|
121
|
+
`,f:"\f",r:"\r",'"':'"',"\\":"\\"},rU={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},nU=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;oU=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;dR=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,sU={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};aU=/[\w-]+/uy;lU=/[\w+.:-]+/uy;Xl=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,pU=new WeakSet;fU=e=>Array.isArray(e)?"an array":Xl(e)?"an inline table":"a value",hU=(e,t)=>`${Qe(e)} is ${fU(t)}, which a dotted key cannot add to`});function Gm(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Xl(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}function bU(e,t,r){let n=e.root;for(let o of r){o in n||e.implicit.add(n[o]=Object.create(null));let i=e.arrays.has(n[o])?n[o].at(-1):n[o];ve(Xl(i)&&!e.fixed.has(i),t,()=>`${Qe(o)} is ${Gm(e,i)}, which a header cannot add to`),n=i}return n}function vU(e,t,r,n){e.pending.clear();let o=bU(e,t,r.slice(0,-1)),i=r.at(-1);if(n){i in o||e.arrays.add(o[i]=[]),ve(e.arrays.has(o[i]),t,()=>`${bR(r)} is ${Gm(e,o[i])}, not an array of tables`),o[i].push(e.current=Object.create(null));return}i in o?ve(e.implicit.delete(o[i]),t,()=>`${bR(r)} is ${Gm(e,o[i])} already`):o[i]=Object.create(null),e.current=o[i]}function yU(e,t,r){return!Xl(r)||e.fixed.has(r)?`${Qe(t)} is ${Gm(e,r)}, which a dotted key cannot add to`:e.implicit.has(r)?`a dotted key through ${Qe(t)}, a table a header made on its way, is not supported`:`${Qe(t)} is a table declared elsewhere, which a dotted key cannot add to`}function wU(e,t,r,n){Z1(t,e.current,e.pending,r,n,(o,i)=>yU(e,o,i)),Xl(n)&&e.fixed.add(n)}function xU(e){if(typeof e!="string")throw new TypeError("expected a string");let t=/\p{Cs}|^\uFEFF|\uFFFD/u.exec(e);if(t===null)return;let r=e.slice(0,t.index).split(`
|
|
122
|
+
`).length-1;throw new mn(kU[t[0]]??"a lone surrogate is not well-formed Unicode",r)}function ek(e){xU(e);let t=Object.create(null),r={text:e,pos:0,line:0},n={root:t,current:t,implicit:new Set,pending:new Set,arrays:new Set,fixed:new Set};for(;r.pos<e.length;){let o=mR(r);o?.header===!0?vU(n,r,o.keys,o.array):o!==void 0&&wU(n,r,o.keys,o.value),gR(r)}return t}var bR,kU,vR=k(()=>{Yl();Q1();bR=e=>Qe(e.join("."));kU={__proto__:null,"\uFEFF":"a byte order mark is not read","\uFFFD":"U+FFFD is not supported: a decoder puts it where bytes are not UTF-8"}});var yR=k(()=>{vR();Q1();q1();Y1();Yl()});function tk(e,t){let r=e?.[t];if(typeof r!="string")return null;try{return t.endsWith(".toml")?ek(r):JSON.parse(r)}catch{return null}}function wR(e,t=!1){let r=typeof e=="string"?e:e?.url;if(typeof r!="string")return null;let n=r.trim().replace(/#.*$/su,"").replace(/^github:/iu,"").replace(/^git\+/iu,"").replace(/^(?:ssh|git):\/\/(?:git@)?github\.com\//iu,"https://github.com/").replace(/^git@github\.com:/iu,"https://github.com/");return!/^(?:https?:\/\/)?(?:www\.)?github\.com\//iu.test(n)&&!(t&&/^[\w-]+\/[\w.-]+$/u.test(n))?null:$t({repo:{github:n}})}function kR(e,t,r){let n=t?.ecosystem??e.ecosystem??"npm",o=n==="composer"?tk(t?.files,"composer.json"):n==="cargo"?tk(t?.files,"Cargo.toml")?.package:tk(t?.files,"package.json"),i=t?.name??e.name,s=t?.version??e.version??o?.version,a=wR(o?.repository,n==="npm"||n==="soldeer")??[o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(c=>wR(c)).find(Boolean)??null;return{ecosystem:n,name:i,version:typeof s=="string"?s:void 0,github:a,fileCount:r}}var xR=k(()=>{"use strict";yR();ge()});function $R(e,t,r){if(t?.ecosystem!==void 0)return t.ecosystem;if(!t?.name||/(?:^|\/)vendor\/([^/]+\/[^/]+)$/u.exec(e)?.[1]!==t.name)return;let n=Object.entries(t.files??{}).filter(([o,i])=>typeof i=="string"&&(!r||r.has(`${e}/${o}`)));return n.length>0&&n.every(([o])=>/\.(?:php|phtml)$/iu.test(o))?"composer":void 0}function _R(e,t=e,r=null){let n={path:"",files:new Map,dirs:new Map};for(let i=0;i<e.length;i++){let s=e[i].split("/"),a=n,c=t[i].split("/");for(let[u,p]of s.slice(0,-1).entries())a.dirs.has(p)||a.dirs.set(p,{path:s.slice(0,u+1).join("/"),sourcePath:c.slice(0,-(s.length-u-1)).join("/"),files:new Map,dirs:new Map}),a=a.dirs.get(p);a.files.set(s.at(-1),t[i])}CR(n,r,r?new Set(t):null);let o=i=>{i.package&&(i.packageInfo=kR(i.package,r?.get(i.sourcePath),i.fileCount));for(let s of i.dirs.values())o(s)};return o(n),n}function SR(e,t=null,r=null){let n=/(?:^|\/)node_modules\//u.exec(e),o=n?n.index+(n[0].startsWith("/")?1:0):e.length,i=r?new Set(r):null;for(let[s,a]of t??[]){let c=$R(s,a,i);if(!Km.has(c)||!a.name||s==="."||!e.startsWith(`${s}/`)&&!s.startsWith(e))continue;let u=(c==="soldeer"?/(?:^|\/)dependencies\//u:/(?:^|\/)vendor\//u).exec(`${s}/`),p=u?u.index+(u[0].startsWith("/")?1:0):s.lastIndexOf("/")+1;o=Math.min(o,p)}return e.slice(0,o)}function CR(e,t,r){for(let i of e.dirs.values())CR(i,t,r);e.fileCount=e.files.size+[...e.dirs.values()].reduce((i,s)=>i+s.fileCount,0);let n=t?.get(e.sourcePath),o=$R(e.sourcePath,n,r);if(Km.has(o)&&n.name&&(e.boundary=!0,e.package={name:n.name,version:n.version,ecosystem:o},e.hideSrc=e.dirs.size===1&&e.dirs.has("src"),e.hideSrc&&(e.srcNameConflicts=new Set([...e.dirs.get("src").files.keys()].filter(i=>e.files.has(i))))),/(?:^|\/)dependencies$/u.test(e.path)&&[...e.dirs.values()].some(i=>i.package?.ecosystem==="soldeer")&&(e.boundary=!0),/(?:^|\/)vendor$/u.test(e.path)){let i=new Map;for(let[s,a]of e.dirs)if(!a.package&&a.files.size===0&&a.dirs.size>0&&[...a.dirs.values()].every(c=>c.package?.ecosystem==="composer")){e.boundary=!0;for(let[c,u]of a.dirs)i.set(`${s}/${c}`,u)}else Km.has(a.package?.ecosystem)&&(e.boundary=!0),i.set(s,a);e.dirs=i}if(/(?:^|\/)node_modules$/u.test(e.path)){e.boundary=!0;let i=new Map;for(let[s,a]of e.dirs)if(a.boundary=!0,s.startsWith("@")&&a.files.size===0&&[...a.dirs.keys()].every(c=>!c.startsWith(".")&&!c.startsWith("@")))for(let[c,u]of a.dirs)u.boundary=!0,u.package??={name:`${s}/${c}`},i.set(`${s}/${c}`,u);else!s.startsWith(".")&&!s.startsWith("@")&&(a.package??={name:s}),i.set(s,a);e.dirs=i}if(/(?:^|\/)node_modules\/\.pnpm$/u.test(e.path)){e.boundary=!0;let i=new Map;for(let[s,a]of e.dirs){if(a.boundary=!0,a.files.size>0||a.dirs.size!==1)continue;let c=a.dirs.get("node_modules");if(!c||c.files.size>0||c.dirs.size!==1)continue;let u=c.dirs.values().next().value;if(!u.package)continue;let p=`${u.package.name.replace("/","+")}@`;if(!s.startsWith(p))continue;let f=/^(\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?)([_(].*)?$/iu.exec(s.slice(p.length));if(!f)continue;u.package={...u.package,version:f[1]},e.dirs.set(s,u);let h=Wu(s,u);i.has(h)||i.set(h,[]),i.get(h).push(u)}for(let s of i.values())if(!(s.length<2)){s.sort((a,c)=>a.path.localeCompare(c.path));for(let[a,c]of s.entries())c.package.variant=a+1}}return e}function Wu(e,t){let r=t.package;return r?`${r.name}${r.version?`${Km.has(r.ecosystem)?" - ":"@"}${r.version}`:""}`:e}function ER(e,t,r=""){let n=t.toLowerCase(),o=(i,s,a=null)=>{let c=new Map([...i.files].filter(([p,f])=>{let h=r&&f.startsWith(r)?f.slice(r.length):f,g=a?.srcNameConflicts.has(p)?`src/${p}`:p;return h.toLowerCase().includes(n)||`${s}/${g}`.toLowerCase().includes(n)})),u=new Map;for(let[p,f]of i.dirs){let h=i.hideSrc&&p==="src",g=o(f,h?s:`${s}/${Wu(p,f)}`,h?i:null);g&&u.set(p,g)}return c.size>0||u.size>0?{...i,files:c,dirs:u}:null};return n?o(e,""):e}function MR(e,t,r){let n=[e];if(t.hideSrc&&t.dirs.has("src")){let i=t.dirs.get("src"),s=new Map(t.files);for(let[a,c]of i.files)s.set(t.srcNameConflicts.has(a)?`src/${a}`:a,c);return{names:n,node:{...t,sourcePath:i.sourcePath,files:s,dirs:i.dirs}}}if(e==="node_modules"&&t.files.size===0&&t.dirs.size===1&&t.dirs.has(".pnpm"))return{names:["node_modules",".pnpm"],node:t.dirs.get(".pnpm")};let o=Math.max(12,24-Math.max(0,r-1)*2);for(;!t.boundary&&t.files.size===0&&t.dirs.size===1&&n.length<3;){let[i,s]=t.dirs.entries().next().value;if(s.boundary||[...n,i].join("/").length>o)break;n.push(i),t=s}return{names:n,node:t}}function RR(e){if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.currentTarget,r=e.target.closest("summary, .bundle-code-tree-link");if(!r||!t.contains(r)||!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Home","End"].includes(e.key))return;e.preventDefault(),e.stopPropagation();let o=[...t.querySelectorAll("summary, .bundle-code-tree-link")].filter(c=>{let u=c.parentElement;return c.tagName==="SUMMARY"&&(u=u.parentElement),!u.closest("details:not([open])")}),i=o.indexOf(r),s=r.tagName==="SUMMARY"?r.parentElement:null,a=r;e.key==="ArrowDown"&&(a=o[Math.min(i+1,o.length-1)]),e.key==="ArrowUp"&&(a=o[Math.max(i-1,0)]),e.key==="Home"&&(a=o[0]),e.key==="End"&&(a=o.at(-1)),e.key==="ArrowRight"&&s&&(s.open?a=o[i+1]??r:r.click()),e.key==="ArrowLeft"&&(s?.open?r.click():a=(s??r).parentElement.closest("details")?.querySelector("summary")??r),a?.focus()}var Km,AR=k(()=>{"use strict";xR();Km=new Set(["cargo","composer","soldeer"])});var IR=k(()=>{"use strict";S1()});function Jl(e,t,r){return e?.bundle===t&&e.files[e.at]===r?e:{bundle:t,files:r?[r]:[],at:0}}function TR(e,t){if(e.files[e.at]===t)return e;let r=[...e.files.slice(0,e.at+1),t];return{...e,files:r,at:r.length-1}}function LR(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}var rk=k(()=>{"use strict"});function FR({name:e,workspaceNames:t,existingNames:r}={}){let n=r instanceof Set?r:new Set(r??[]);return new Promise(o=>{let i=document.createElement("import-conflict-dialog");Object.assign(i,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:n,_newName:$U(e??"",n)}),i.addEventListener("resolve",s=>{i.remove(),o(s.detail)}),i.addEventListener("modal-conflict",()=>{i.remove(),o({action:"cancel"})}),document.body.append(i)})}function $U(e,t){if(typeof e!="string"||e.length===0)return"";let r=e.lastIndexOf("."),n=r>0?e.slice(0,r):e,o=r>0?e.slice(r):"",i=n.replace(/-\d+$/u,"");for(let s=2;s<1e3;s++){let a=`${i}-${s}${o}`;if(!t.has(a))return a}return""}var nk,BR=k(()=>{"use strict";T();pe();_o();nk=class extends D{static styles=[...D.styles,F(Ot)];static properties={reportName:{type:String},workspaceNames:{type:Array},existingNames:{type:Object},_choice:{state:!0},_newName:{state:!0}};constructor(){super(),this.reportName="",this.workspaceNames=[],this.existingNames=new Set,this._choice="replace",this._newName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_onClose=()=>this._finish({action:"cancel"});_onCancel=()=>this._finish({action:"cancel"});_onChoiceChange=t=>{this._choice=t.target.value};_onNewNameInput=t=>{this._newName=t.target.value};_onNewNameKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onConfirm())};_onConfirm=()=>{if(this._choice==="rename"){let t=(this._newName??"").trim();if(this._renameError(t)!==null)return;this._finish({action:"rename",newName:t});return}this._finish({action:"replace"})};_replaceHint(){let t=this.workspaceNames.length;if(t===0)return d`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let r=t===1?d`workspace <strong>"${this.workspaceNames[0]}"</strong>`:d`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return d`<span class="lwd-option-hint">The local file will be overwritten. When sync is online, the new bytes are also uploaded to ${r} so the cloud copy matches.</span>`}_renameError(t){return t?t===this.reportName?"Pick a name different from the original.":t.includes("\0")?"The new name cannot contain a NUL byte.":t.includes("/")||t.includes("\\")?'The new name cannot contain "/" or "\\".':this.existingNames.has(t)?`A file named "${t}" already exists \u2014 pick something else.`:null:"Enter a new name."}render(){let t=this._choice==="rename",r=(this._newName??"").trim(),n=t?this._renameError(r):null,o=n!==null,i=t?"Rename":"Replace",s=t?"primary":"danger",a=this.workspaceNames.length>0?d`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:m;return d`<dialog @close="${this._onClose}"><header><h3>Import conflict</h3></header><p class="lwd-body"><strong>"${this.reportName}"</strong> already exists with different content.</p><fieldset class="lwd-choice"><legend>What should happen?</legend><label class="lwd-option"><input type="radio" name="icd-choice" value="replace" ?checked="${this._choice==="replace"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Replace</span> ${this._replaceHint()}</span></label> <label class="lwd-option"><input type="radio" name="icd-choice" value="rename" ?checked="${this._choice==="rename"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Rename to</span> <input type="text" class="nwd-input lwd-rename-input" maxlength="200" .value="${this._newName}" ?disabled="${!t}" @input="${this._onNewNameInput}" @keydown="${this._onNewNameKeydown}" @focus="${()=>{this._choice="rename"}}"> ${a} ${n===null?m:d`<p class="lwd-rename-error">${n}</p>`}</span></label></fieldset><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="${s}" ?disabled="${o}" @click="${this._onConfirm}">${i}</button></footer></dialog>`}};customElements.define("import-conflict-dialog",nk)});function ok(e,t){let r=e.trimStart().startsWith("[")?Ir(e):null;if(r)return{data:{source:"links",findings:[],links:r.groups},format:"links",reason:null};let n=sn(e);if(n.data!=null||If(e,t)!=="codex")return n;try{return{data:{type:"security",source:"codex-security",findings:pd(e).flatMap(i=>i.data.findings)},format:"codex",reason:null}}catch(o){return{data:null,format:null,reason:o instanceof Error?o.message:"Invalid Codex CSV"}}}function OR(e,t){let r=ok(e,t);return r.data==null?Promise.resolve(null):nr(JSON.stringify(r.data))}var ik=k(()=>{"use strict";hs();ge()});async function NR(e){let t=await dh(e),r=await S0(t);if(r.kind==="reports")return{kind:"reports",reports:r.reports};let n;if(r.kind==="encrypted"){if(n=await Hh({tryPassword:i=>uh(t,i)}),!n)return null}else n=hl(r.text);let o=await $0(n,{conflictResolver:async(i,s)=>{try{return await Al(i,s,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let a=i.length;return alert(`Imported ${e.name}. Kept your local triage on ${a} conflicting entr${a===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(l.currentFile||l.currentWorkspace)&&E(),{kind:"workspace",workspace:o}}var PR=k(()=>{"use strict";U();Yt();bu();dw()});function qm(){return le("passkey-setup-dialog")}var sk,ak=k(()=>{"use strict";T();U();pe();Ks();sk=class extends D{static styles=[...D.styles,F(Dr)];static properties={_userName:{state:!0},_busy:{state:!0},_error:{state:!0},_phase:{state:!0},_success:{state:!0},_orphan:{state:!0},_orphanAck:{state:!0},_canCancel:{state:!0}};constructor(){super(),this._userName="",this._busy=!1,this._error="",this._phase="",this._success=!1,this._orphan=!1,this._orphanAck=!1,this._canCancel=!0,this._abortController=null}updated(t){if(t.has("_success")&&this._success){let r=this.renderRoot.querySelector("footer button.primary");r&&r.focus()}}beforeOpen(){typeof location<"u"&&(this._userName=location.hostname||"DeepView"),this._orphan=Uc(),this._vaultStateUnsub=tt(()=>{if(this._settled)return;let t=Uc();this._orphan&&!t&&me()?(this._error="Encryption was just enabled in another tab. Close this dialog and reload to unlock.",this._busy=!1,this._canCancel=!0):this._orphan!==t&&(this._orphan=t)})}async focusInitial(){await this.updateComplete;let t=this._orphan?'input[data-role="orphan-ack"]':'input[data-role="name"]';this.renderRoot.querySelector(t)?.focus()}disconnectedCallback(){if(super.disconnectedCallback(),this._vaultStateUnsub){try{this._vaultStateUnsub()}catch{}this._vaultStateUnsub=null}}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onClose=()=>this._finish(this._success);_onCancel=()=>{this._busy&&!this._canCancel||this._finish(!1)};_onDialogCancel=t=>{if(this._busy&&!this._canCancel){t.preventDefault();return}this._finish(!1)};_onNameInput=t=>{this._userName=t.target.value};_onOrphanAckInput=t=>{this._orphanAck=t.target.checked};_onWipeOrphan=async()=>{if(!this._busy&&this._orphanAck){if(me()){this._error="Encryption was just enabled in another tab. Reload this page to unlock.";return}this._busy=!0,this._canCancel=!1,this._error="",this._phase="Clearing previous vault state\u2026";try{await jc({refuseIfEnabled:!0}),location.reload()}catch(t){this._error=`Could not clear previous vault state: ${t?.message??t}`,this._phase=""}finally{this._busy=!1,this._canCancel=!0}}};_onEnable=async()=>{if(!this._busy){if(!_n()){this._error="Passkeys are not supported in this browser.";return}this._busy=!0,this._canCancel=!0,this._error="",this._phase="Registering passkey\u2026",this._abortController=new AbortController;try{await Ub({userName:this._userName.trim()||"DeepView user",rpName:"DeepView",signal:this._abortController.signal,migrate:async({seal:r})=>{this._canCancel=!1,this._phase="Encrypting workspaces and metadata\u2026",await Wb({seal:r}),this._phase="Encrypting triage data\u2026",await r0({seal:r}),this._phase="Encrypting report files\u2026",await Zv({seal:r}),this._phase="Encrypting bundles\u2026",await ey({seal:r})}})&&(this._success=!0,this._phase="")}catch(t){t?.name==="AbortError"?this._error="":this._error=t?.message??String(t),this._phase=""}finally{this._busy=!1,this._canCancel=!0,this._abortController=null}}};_body(){if(this._orphan)return d`<p class="wsl-error">DeepView found an abandoned passkey setup on this device. The original passkey can no longer be accessed, so any local data still encrypted under it is <strong>unreadable</strong> and cannot be recovered.</p><p class="nwd-note ui-hint">To enable encryption, DeepView will <strong>permanently delete ALL local DeepView data on this device</strong> — including any plaintext workspaces or reports you may have added after the previous passkey was lost — and then register a fresh passkey. This is irreversible. There is no backup.</p><label class="wsl-ack"><input type="checkbox" data-role="orphan-ack" .checked="${this._orphanAck}" ?disabled="${this._busy}" @change="${this._onOrphanAckInput}"> <span>I understand all local DeepView data on this device will be deleted.</span></label> ${this._phase?d`<p class="nwd-note">${this._phase}</p>`:m} ${this._error?d`<p class="wsl-error">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${this._busy||!this._orphanAck}" @click="${this._onWipeOrphan}">${this._busy?"Working\u2026":"Wipe and continue"}</button></footer>`;if(this._success)return d`<p class="nwd-note ui-hint"><strong>Encryption is on.</strong> Your triage data and report files are now sealed under your passkey. You'll be asked to unlock with the passkey on every fresh load.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${()=>this._finish(!0)}">Close</button></footer>`;let t=_n();return d`<p class="nwd-note ui-hint">Passkey encryption protects your local triage and report data with a hardware-backed key (TouchID, Windows Hello, security key). Without the passkey, the data on disk is unreadable — even to scripts running on this origin.</p><p class="wsl-error"><strong>If you lose access to this passkey, your data CANNOT be recovered.</strong> DeepView has no backup key, no recovery code, and no escrow. Make sure your passkey is backed up (iCloud Keychain / Google Password Manager sync, or a second registered device) before relying on encryption for important data.</p><p class="nwd-note ui-hint"><strong>Opt-in.</strong> You can disable encryption later from the lock icon in the sidebar header — the data is rewritten as plaintext and DeepView signals your authenticator to remove the passkey (where supported).</p>${t?m:d`<p class="wsl-error">Your browser doesn't expose the WebAuthn passkey API. Try Chrome, Safari, Edge, or Firefox in a recent version on a device with a platform authenticator.</p>`} <label class="wsl-field"><span>Passkey label</span> <input type="text" class="nwd-input" data-role="name" placeholder="DeepView" maxlength="200" .value="${this._userName}" @input="${this._onNameInput}"></label> ${this._phase?d`<p class="nwd-note">${this._phase}</p>`:m} ${this._error?d`<p class="wsl-error">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" ?disabled="${this._busy&&!this._canCancel}" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t||this._busy}" @click="${this._onEnable}">${this._busy?"Working\u2026":"Enable encryption"}</button></footer>`}render(){return d`<dialog @close="${this._onClose}" @cancel="${this._onDialogCancel}"><header><h3>${this._success?"Encryption enabled":this._orphan?"Previous passkey setup detected":"Enable passkey encryption"}</h3></header>${this._body()}</dialog>`}};customElements.define("passkey-setup-dialog",sk)});function _U(){try{return localStorage.getItem(zR)==="1"}catch{return!1}}function DR(){try{localStorage.setItem(zR,"1")}catch{}}async function Ym(){if(me()||!_n()||_U())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
123
|
+
|
|
124
|
+
Your triage notes, workspaces, and report files are stored on this device. Encryption locks them under a passkey (TouchID, Windows Hello, security key) so scripts running here can't read them without the passkey.
|
|
125
|
+
|
|
126
|
+
You can change this anytime from the lock icon in the sidebar header.`)){DR();return}await qm(),me()&&DR()}var zR,lk=k(()=>{"use strict";U();ak();zR="deepview.passkey.firstImportPrompted"});function Xm(){return le("passkey-unlock-dialog")}var ck,dk=k(()=>{"use strict";T();U();pe();Ks();ck=class extends D{static styles=[...D.styles,F(Dr)];static properties={_busy:{state:!0},_error:{state:!0}};constructor(){super(),this._busy=!1,this._error="",this._abortController=null}_finish(t){if(!this._settled){if(this._abortController)try{this._abortController.abort()}catch{}super._finish(!!t)}}_onCancel=()=>this._finish(!1);_onUnlock=async()=>{if(!this._busy){this._busy=!0,this._error="",this._abortController=new AbortController;try{if(await ps({signal:this._abortController.signal})){this._finish(!0);return}this._error=""}catch(t){this._error=t?.message??String(t)}finally{this._busy=!1,this._abortController=null}}};render(){return d`<dialog @close="${this._onClose}"><header><h3>Unlock your data</h3></header><p class="nwd-note ui-hint">Your triage data and report files are encrypted with a passkey on this device. Unlock to load them.</p>${this._error?d`<p class="wsl-error">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">${this._busy?"Cancel":"Later"}</button> <button type="button" class="primary" ?disabled="${this._busy}" @click="${this._onUnlock}">${this._busy?"Waiting\u2026":"Unlock with passkey"}</button></footer></dialog>`}};customElements.define("passkey-unlock-dialog",ck)});function Jm({workspaceId:e,items:t}={}){return le("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var uk,pk=k(()=>{"use strict";T();U();dn();Di();pe();_o();$o();uk=class extends D{static styles=[...D.styles,F(Ot)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_fail(t,r,n,o){t.push({kind:n,identifier:r.identifier,reason:o}),this._errors=[...this._errors,{label:Si(r),reason:o}]}_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],r=[];for(let n of this.items)try{if(n.kind==="bundle"){let i=await k6(this.workspaceId,n.identifier);if(!i.ok){this._fail(r,n,"bundle",i.reason??"unknown");continue}await Os(n.identifier,this.workspaceId),t.push({kind:"bundle",identifier:n.identifier});continue}let o=await w6(this.workspaceId,n.identifier);if(!o||!o.ok){this._fail(r,n,"report",o?.reason??"sync is not available");continue}t.push({kind:"report",identifier:n.identifier})}catch(o){this._fail(r,n,n.kind,o?.message??String(o))}if(this._running=!1,this._done=!0,t.some(n=>n.kind==="report"))try{l.currentWorkspace===this.workspaceId&&await Kr(this.workspaceId)}catch{}r.length===0&&this._finish({downloaded:t,failed:r})};render(){let{count:t,singular:r,kindLabel:n}=em(this.items),o=r?d`Download <strong>"${Si(this.items[0])}"</strong> from the workspace's remote inventory?`:d`Download <strong>${t}</strong> remote ${n} into this workspace?`,i=r?m:tm(this.items),s=this._running?r?"Downloading\u2026":`Downloading ${t} ${n}\u2026`:r?"Download":`Download ${t}`;return d`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${o}</p>${i} ${rm(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?m:d`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${s}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",uk)});function HR(e){UR=e}function aa(){Fo?.controller.abort(),Fo=null}function SU(e,t,r){let{promise:n,resolve:o}=Promise.withResolvers(),i=!1,s=p=>{clearTimeout(u),t.removeEventListener("abort",a),o(p)},a=()=>s(!1),c=()=>(!i&&!t.aborted&&(i=!0,clearTimeout(u),Promise.resolve().then(()=>r()&&e(t)).then(p=>s(!!p&&r()),()=>s(!1))),n),u=setTimeout(c,1e3);return t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),{promise:n,start:c}}function jR(e,t){return t.aborted?Promise.resolve(!1):new Promise(r=>{let n=i=>{t.removeEventListener("abort",o),r(i)},o=()=>n(!1);t.addEventListener("abort",o,{once:!0}),e.then(n,()=>n(!1))})}function zi({catalogOnly:e=!1,hydrate:t}={}){let r=l.managedSession,n=Ws(),i=["findings","files","links"].includes(l.currentView)&&(!e||Fo?.teamId===l.currentManagedTeam&&!Fo.signal.aborted)?l.currentManagedTeam:null;if(!C()||!r||r.role==="none"||r.publicShare&&!i)return aa(),t?Promise.resolve(!1):void 0;let s=JSON.stringify([i,r.id,r.role,r.csrfToken,!!r.publicShare]);if(Fo?.key!==s||Fo.signal.aborted){aa();let g=new AbortController,b={key:s,controller:g,signal:g.signal,teamId:i,version:0,target:null};b.current=(v=b.signal)=>!v.aborted&&!b.signal.aborted&&Fo===b&&C()&&l.managedSession?.id===r.id&&l.managedSession?.role===r.role&&l.managedSession?.csrfToken===r.csrfToken&&!!l.managedSession?.publicShare==!!r.publicShare,Fo=b,CU(b)}let a=Fo;if(e||!i)return a.target?.ready;let c=ls(l.reports),u=a.target;if(u?.view===n&&u.reports===c&&!u.signal.aborted)return u.ready;u?.controller.abort();let p=new AbortController,f=AbortSignal.any([p.signal,a.signal,n]),h={controller:p,signal:f,view:n,reports:c,version:u?.reports===c?u.version:0};return a.target=h,h.current=()=>a.current()&&!f.aborted&&a.target===h&&l.currentManagedTeam===i&&ls(l.reports)===c,h.hydration=t?SU(async g=>{let b=a.version,v=await t(g);return v&&h.current()&&(h.version=b),v},f,h.current):null,h.ready=h.hydration?.promise,(a.version||a.finished)&&(h.hydration?h.hydration.start():h.version<a.version&&fk(a,h,a.signal).then(g=>(!g&&h.current()&&(aa(),zi()),g))),h.ready}function CU(e){let{signal:t,controller:r,current:n}=e;Y6(e.teamId,{signal:t,onTeams:async(o,i)=>{let s=()=>n(o);return s()?await UR(s,o,i)&&s():!1},onUpdate:o=>n(o)?(e.version++,fk(e,e.target,o)):!1,onClose:()=>{n()&&document.dispatchEvent(new Event("managed-feed-closed")),r.abort()}}).catch(o=>{n()&&console.warn("managed: team feed failed",o)}).finally(()=>{e.finished=!0,n()&&e.target?.hydration?.start()})}async function fk(e,t,r){if(!e.current(r))return!1;if(!t?.current())return!0;if(!t.refresh||t.refresh.controller.signal.aborted){let a=new AbortController,c={controller:a,promise:null},u=AbortSignal.any([a.signal,t.signal]);t.refresh=c,c.promise=EU(e,t,u).catch(()=>!1).finally(()=>{t.refresh===c&&(t.refresh=null)})}let n=t.refresh,o=AbortSignal.any([r,t.signal,n.controller.signal]),i=()=>n.controller.abort();r.addEventListener("abort",i,{once:!0});let s;try{s=await jR(n.promise,o)}finally{r.removeEventListener("abort",i)}return e.current(r)?t.current()?s?t.version<e.version?fk(e,t,r):!0:!1:!0:!1}async function EU(e,t,r){if(t.hydration&&!await jR(t.hydration.start(),r))return!1;for(;t.current()&&!r.aborted&&t.version<e.version;){let n=e.version,o=gk(e.teamId,r),i=l.managedReports.filter(a=>t.reports.some(c=>c._managedReportId===a.id));if(!(await Promise.all(i.flatMap(a=>[mk(a.id,{signal:r,readAnnotations:o}),jl(a.id,{signal:r,readAnnotations:o})]))).every(Boolean)||!t.current()||r.aborted)return!1;t.version=n}return!r.aborted&&t.current()}var Fo,UR,hk=k(()=>{"use strict";U();Oc();Kt();Vl();Zm();$l();Fo=null,UR=()=>Promise.resolve(!0)});function bk(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(r=>$e(r)==="revalidation");return t.length>0?t:e}function vk(e,t=()=>[]){let{groups:r,conflicts:n}=am(e,{hideRuledOut:!0});if(n.size>0)return{appMode:!1};let o=dm(r,t,bk);return Mw(o,{tabs:bk,kindOf:$e,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(i=>bk(i).some(s=>s.isApp)).length}:{appMode:!1}}var VR=k(()=>{"use strict";ge();pn();Nw();Dw()});function WR(e,t,r,{complete:n,isCurrent:o}){qr={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:r,complete:n,isCurrent:o}}function GR(e){return!qr||qr.id!==e.id||!qr.isCurrent()||qr.membership!==JSON.stringify(e.reports.toSorted())||!N0(e,qr.token)?null:(qr.linksRevision!==yk&&(qr.metadata=qr.complete?vk(qr.reports,$r):{appMode:!1},qr.linksRevision=yk),qr.metadata)}async function KR(e,t,r,{complete:n,isCurrent:o,onReady:i}){if(!o()||(await Hd(),!o()))return;let s=await Kd(e,r);if(!s||!o())return;let a=n?vk(t,$r):{appMode:!1};await D0(e,a,s)&&o()&&await i(a)}var qr,yk,wk=k(()=>{"use strict";U();VR();qr=null,yk=0;Ns(()=>{yk++})});function Bo(e,t="overview"){if(C()){let n=l.bundles.find(o=>o.integrity===e);Fe.replaceRoute(xl(l.managedTeams,n,l.currentManagedTeam,t));return}let r=t&&t!=="overview"&&Mn.has(t)?` ${t}`:"";lt(Ui,`b:${e}${r}`).catch(()=>{})}function MU(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Gu(e){return await MU(),e!==null&&ye(e)?!1:(E(),x1(l.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ye(e)).catch(()=>{}),!0)}function eg(){B.selected=null,B.focusedPkg=null,B.layoutCache=null,B.solo=null,B.hidden.clear(),B.pathFilter="",Ze()}function qu(e){for(let t of te.openSessions)t&&!e.has(t.workspaceId)&&(te.closeSession(t.workspaceId),V0(t.workspaceId))}function Qm(){N.classList.remove("active"),N.replaceChildren(),Ye.classList.remove("hidden"),document.title="DeepView"}function qR(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function xk(e){let t=YR(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function YR(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function kk({name:e,content:t,existingNames:r}){if(!r.has(e))return await Or(e,t),r.add(e),{name:e,content:t};let n;try{n=await De(e)}catch(c){if(!qR(c))throw c;return await Or(e,t),r.add(e),{name:e,content:t}}if(n===t)return{name:e,content:t};let i=Q().filter(c=>Array.isArray(c.reports)&&c.reports.includes(e)).filter(c=>bl(c.id,e)),s=await FR({name:e,workspaceNames:i.map(c=>c.name),existingNames:r});if(s.action==="cancel")return null;if(s.action==="rename"){let c=s.newName;return await Or(c,t),r.add(c),{name:c,content:t}}let a;if(i.length>0)try{a=await x6(e)}catch(c){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,c)}try{await Or(e,t),i.length>0&&await AU(e,i)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function RU(e,t){let r=typeof t?.github=="string"?t.github:"";if(r)try{await nv(e,r)}catch(n){console.warn(`Import: failed to adopt the repository "${r}" for "${e}":`,n)}}async function AU(e,t){let r;try{r=await ai(e)}catch(n){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,n);return}for(let n of t)try{await Xd(n.id);let o=await yh(n.id,e,r);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${n.name}" (${n.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${n.name}" (${n.id}):`,o)}}async function $k(e){if(e=[...e],e.length===0||(await bt(),C())||(await Ym(),C()))return;let t=null,r=null,n=new Set,o=new Set(await fe()),i=[];for(let s of e)try{let a=YR(s.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let p=await NR(s);if(p?.kind==="reports")for(let f of p.reports){if(typeof f?.name!="string"||!f.name||typeof f?.content!="string")continue;let h=Gt(f.content);if(!h.recognized){i.push(f.name);continue}let g=await kk({name:f.name,content:f.content,existingNames:o});g&&(Wt(g.name,h.count,h.source),await RU(g.name,f.repo),t={name:g.name,content:g.content})}try{let f=await fe();o.clear();for(let h of f)o.add(h)}catch(f){console.warn("Import: failed to refresh existingNames after workspace import:",f)}continue}if(xk(s.name)){let p=new Uint8Array(await s.arrayBuffer()),{integrity:f}=await Rs(s.name,p);r=f,n.add(f);continue}let u=await s.text();if(If(u,a)==="codex"){let p=pd(u);for(let{displayName:f,data:h}of p){let g=f.replaceAll("/","__")+".codex",b=JSON.stringify(h),{count:v,source:x}=Gt(b),w=await kk({name:g,content:b,existingNames:o});w&&(Wt(w.name,v,x),t={name:w.name,content:w.content})}}else{let p=Gt(u);if(!p.recognized)throw new Error("not a recognized DeepView, DeepSec, Piolium, Claude Security, or Codex report, and not a links file");let f=await kk({name:s.name,content:u,existingNames:o});if(!f)continue;Wt(f.name,p.count,p.source),t={name:f.name,content:f.content}}}catch(a){alert(`Failed to load ${s.name}: ${a.message}`)}if(i.length>0){let s=i.length;alert(`Skipped ${s} report${s===1?"":"s"} no parser recognised: ${i.join(", ")}`)}await Y(),t?await ur(t.name,t.content):r&&(Ro(r),Bo(r,l.bundleDetailsTab),E(),await Y(),Ao(r)),x1(n).catch(()=>{})}async function ur(e,t,{workspaceId:r}={}){if(C())return;let n=Ft();l.currentManagedTeam=null,l.currentManagedReport=null,l.currentReportWorkspace=Li(e,r);let o=new Set(Q().filter(s=>Array.isArray(s.reports)&&s.reports.includes(e)).map(s=>s.id));if(qu(o),l.reports=[],Ai(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=e,l.currentWorkspace=null,l.currentLinks=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear(),l.currentView!=="findings"&&l.currentView!=="files"&&(l.currentView="findings"),l.repoUrl=Ut(e),l.repoEditing=!1,eg(),lt(Ui,th(e,l.currentReportWorkspace)).catch(()=>{}),t===void 0){try{t=await De(e)}catch(s){if(ye(n))return;if(s&&s.message?.includes("vault locked")){if(await Xm()&&!ye(n)){await ur(e);return}ye(n)||(l.currentFile=null,await Y());return}if(qR(s)){let a=Q().find(c=>Array.isArray(c.reports)&&c.reports.includes(e)&&bl(c.id,e));if(a)try{if(await Xd(a.id),ye(n))return;let c=await Jm({workspaceId:a.id,items:[{kind:"report",identifier:e}]});if(ye(n))return;if(c?.downloaded?.some(u=>u.kind==="report"&&u.identifier===e)){await ur(e);return}}catch(c){if(console.warn(`Re-download prompt for missing "${e}" failed:`,c),ye(n))return}ye(n)||(l.currentFile=null,await Y());return}alert(`Failed to read ${e}: ${s.message}`),l.currentFile=null,await Y();return}if(ye(n))return}let i=Ir(t);if(i?(l.currentLinks={name:e,...i},l.currentView="links",E()):await rg(e,t,n),!ye(n)){for(let s of o)te.openSession(s),te.refreshSession(s),Xd(s);return await Y(),!0}}async function Oo(e,t=null,{history:r=!0}={}){if(!C()||!e||!Array.isArray(e.reports))return!1;if(r&&Fe.active)return Fe.navigate(wt({view:"findings",teamId:e.id,reportId:t},l.managedTeams));if(t!==null&&!e.reports.some(u=>u.id===t))return!1;let n=Ft(),o=await Ch(e.id);if(ye(n))return!1;if(L6(),o===null||t!==null&&!o.some(u=>u.id===t))return St("Could not load all team reports. Please try again."),!1;let i=o.find(u=>u.id===t&&u.data.source==="links"&&Array.isArray(u.data.links)),s=o.filter(u=>t===null||i||u.id===t),a=s.filter(u=>u.data.source!=="links"||!Array.isArray(u.data.links));qu(new Set);let c=document.createElement("p");c.setAttribute("role","status"),c.textContent="Loading report triage\u2026",N.replaceChildren(c),N.classList.add("active"),Ye.classList.add("hidden"),l.currentView="findings",l.reports=[],Ai(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=t===null?null:o.find(u=>u.id===t).filename,l.currentWorkspace=t===null?`managed-team:${e.id}`:null,l.currentManagedTeam=e.id,l.currentManagedReport=t,T5(e.id,o),l.managedReports=s.map(u=>({id:u.id,filename:u.filename})),l.managedComments.clear(),l.managedReport=t===null?null:l.managedReports[0]??null,l.currentReportWorkspace=null,l.currentLinks=null,l.selectedBundle=null,l.selectedBundleWorkspace=null,l.scanSelection=null,l.repoUrl="",l.repoEditing=!1,eg();for(let u of a)if(await rg(u.filename,u.data,n,{renderView:!1,managedReportId:u.id,managedRepo:u.repo}),ye(n))return!1;if(a.length>0){let{createManagedAnnotationRead:u,hydrateManagedReportTriage:p}=await Promise.resolve().then(()=>(Zm(),eA));if(ye(n))return!1;let f=await zi({hydrate:async h=>{let g=u(l.currentManagedTeam,h);return(await Promise.all(a.flatMap(v=>[p(v.id,{renderView:!1,signal:h,readAnnotations:g}),jl(v.id,{signal:h,readAnnotations:g})]))).every(Boolean)&&!h.aborted&&!ye(n)}});if(ye(n))return!1;if(!f)return await Zn({history:!1}),St("Could not load report annotations. Open the team or report again to retry."),!1}if(i){if(l.currentView="links",l.currentLinks={name:i.filename,groups:i.data.links,skipped:0},!await Gu(n))return!1}else if(s.length===0)Qm();else if(Zs(qn()),!await Gu(n))return!1;return zi(),await Y(),!0}async function Kr(e){if(C())return;l.currentManagedTeam=null,l.currentManagedReport=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear();let t=Q().find(f=>f.id===e);if(!t)return;let r=Ft();qu(new Set([e])),l.currentView!=="findings"&&l.currentView!=="files"&&(l.currentView="findings"),It("workspace",e),l.reports=[],Ai(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=null,l.currentWorkspace=e,l.currentReportWorkspace=null,l.currentLinks=null,l.repoUrl="",l.repoEditing=!1,eg(),lt(Ui,`ws:${e}`).catch(()=>{}),t.reports.length===0&&Qm();let n=await Kd(t);if(ye(r))return;let o=!0,i=t.reports.map(f=>De(f).catch(()=>null)),s=0;for(let f=0;f<t.reports.length;f++){let h=await i[f];if(ye(r))return;if(h===null){o=!1;continue}if(!Ir(h)&&(await rg(t.reports[f],h,r,{renderView:!1})?s++:o=!1,ye(r)))return}s===0&&t.reports.length>0&&Qm(),o&&Ds(t)?.appMode&&(l.showRevalidation=!0,l.upstreamOnly=!1,l.revalidationDetailed=!1,Ku());let a=l.reports.slice();WR(t,a,n,{complete:o,isCurrent:()=>!ye(r)&&l.currentWorkspace===e&&["findings","files"].includes(l.currentView)});let c=Y().catch(f=>console.warn("workspace sidebar:",f));if(s>0&&(Zs(qn()),!await Gu(r)))return;let u=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],p=u.map(f=>l[f]);KR(t,a,n,{complete:o,isCurrent:()=>!ye(r),onReady:async f=>{!f.appMode||l.currentWorkspace!==e||!["findings","files"].includes(l.currentView)||u.some((h,g)=>l[h]!==p[g])||(l.showRevalidation=!0,l.upstreamOnly=!1,l.revalidationDetailed=!1,Ku(),Zs(qn()),await Gu(r))}}).catch(f=>console.warn("workspace App metadata:",f)),te.openSession(e),te.refreshSession(e),Xd(e),await c}async function XR({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!l.currentFile)return;let r=Ft(),n=l.currentFile;sl(n),rn(n,"");for(let o of t)try{let i=await wh(o,n);if(ye(r))return;i&&i.ok===!1&&i.reason!=="not-found"&&console.warn(`Failed to delete '${n}' from workspace ${o} remote: ${i.reason}`)}catch(i){console.warn(`Failed to delete '${n}' from workspace ${o} remote:`,i)}if(await tl(n),!ye(r)&&(await Od(n,null),!ye(r))){if(e==="wipe"){try{await sh()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ye(r))return}ye(r)||(tg(),await Y())}}function tg({forgetLastView:e=!0}={}){BM(),l.currentManagedTeam=null,l.currentManagedReport=null,l.currentFile=null,l.currentWorkspace=null,l.currentReportWorkspace=null,l.currentLinks=null,l.managedReport=null,l.managedReports=[],l.managedComments.clear(),l.selectedBundle=null,l.selectedBundleWorkspace=null,l.scanSelection=null,l.bundleDetails=null,l.bundleDetailsTab="overview",l.bundleSourceFile=null,l.bundleSourceFindingIdx=null,l.selectedPackage=null,l.selectedPackageVersion=null,l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient=!1,l.expandedPackages.clear(),l.selectedRepository=null,l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient=!1,l.filesSelectedFile=null,l.tableSelectedGid=null,l.kanbanPopoverGid=null,l.kanbanExpandedColumn=null,l.focusGid=null,l.activeTabByGroup.clear(),l.reports=[],Ai(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.repoUrl="",l.repoEditing=!1,l.shownTriage=null,l.currentView="findings",eg(),e&&Zo(Ui),Qm()}function JR(e){Ft(),qu(new Set),tg(e)}async function Zn({history:e=!0}={}){return e&&C()&&Fe.active?Fe.navigate({view:"home"}):(Ft(),qu(new Set),tg({forgetLastView:!C()}),await Y(),!0)}async function ZR({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!l.selectedBundle)return;let t=Ft(),r=l.selectedBundle;for(let o of e)try{let i=await kh(o,r);if(ye(t))return;i&&i.ok===!1&&i.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${i.reason}`)}catch(i){console.warn(`Failed to delete bundle from workspace ${o} remote:`,i)}if(await Yv(r),ye(t)||(await By(r,null),ye(t)))return;l.selectedBundle=null,l.selectedBundleWorkspace=null,l.bundleDetails=null,l.bundleSourceFile=null,l.bundleSourceFindingIdx=null;let n=Le(Ui);typeof n=="string"&&(n===`b:${r}`||n.startsWith(`b:${r} `))&&Zo(Ui),hy(r),l.bundles=await Vt(),!ye(t)&&(E(),await Y())}async function QR(e,t="detach",{triage:r="keep"}={}){let n=Q().find(a=>a.id===e);if(!n)return;Ft();let o=Array.isArray(n.reports)?[...n.reports]:[];if(te.closeSession(e),V0(e),t==="delete"){for(let a of o){try{await tl(a)}catch{}sl(a),rn(a,"")}if(r==="wipe")try{await sh()}catch(a){console.warn("Skipped orphan-triage GC:",a)}}let i=l.currentWorkspace===e,s=t==="delete"&&l.currentFile!=null&&o.includes(l.currentFile);(i||s)&&tg(),await Ay(e),await Y()}async function rg(e,t,r=null,{renderView:n=!0,managedReportId:o=null,managedRepo:i=null}={}){let s=()=>r!==null&&ye(r);try{if(await Promise.all([It("report",e),It("workspace",l.currentWorkspace||l.currentReportWorkspace)]),s()||(await Ps(),s()))return;let{data:a,reason:c}=o===null?C()?ok(t,e):sn(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(c);let u=l.reports.length===0,p=mt(a)??[],f=p.flatMap(zw);if(await Fv(f),s())return;let h=new Set(f.filter(mw).map(y=>y.source??a.source??null)),g=i??a?.repo,b=$t({repo:g}),v=b??(o==null?Ut(e):""),x=Bn(g),w=[];for(let y of p){let $=zw(y);if($.length===0)continue;let _=[];for(let S of $){let M={...S,_id:l.nextFindingId++,_repoFallback:v,_repoDirectory:x,_reportName:e,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};mo(M,a),M._source=M.source??a.source??null,"isApp"in M||(M.isApp=nn(M,M._source)),M._sourcePass=h.has(M._source),M._analyzer=M._source??M.type??null,_.push(M)}w.push(_)}return go(w),l.reports.push({type:a.type||"analysis",source:a.source??null,fileName:e,_managedReportId:o,groups:w,repo:b,tree:a.tree??null,bundleHashes:a.bundleHashes??[]}),qh(l.reports),Yh(l.reports)&&Ai(),l.revalidateConflicts=Z4(),Ku(),u&&(Tl(),Zs(qn())),n&&await Gu(r),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}function IU(){C()||(Jn||(Jn=document.createElement("input"),Jn.type="file",Jn.multiple=!0,Jn.hidden=!0,Jn.addEventListener("change",()=>{let e=[...Jn.files];e.length>0&&$k(e),Jn.value=""}),document.body.append(Jn)),Jn.click())}var Ui,ye,Jn,Di=k(()=>{"use strict";uf();Lh();hd();po();U();dn();BR();mr();ct();he();pn();Bi();ik();nh();Yt();Qn();U1();ko();Io();ge();PR();lk();dk();pk();Kt();kl();vl();Vl();hk();wk();$l();$l();uf();Ui="deepview.lastFile";ye=e=>e!==rt();window.__loadFile=(e,t)=>rg(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(l.filterSeverities=new Set(e)),t!==void 0&&(l.filterConfMin=t),E()};document.addEventListener("keydown",e=>{e.key==="Escape"&&document.body.classList.contains("report-fullscreen")&&document.body.classList.remove("report-fullscreen")});document.addEventListener("dragover",e=>e.preventDefault());document.addEventListener("drop",e=>{e.preventDefault(),!e.target.closest("#drop-zone")&&$k(e.dataTransfer.files)});Ye.addEventListener("dragover",e=>{e.preventDefault(),C()||Ye.classList.add("hover")});Ye.addEventListener("dragleave",()=>Ye.classList.remove("hover"));Ye.addEventListener("drop",e=>{e.preventDefault(),Ye.classList.remove("hover"),$k(e.dataTransfer.files)});Jn=null;Ye.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){la(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){G6(l.managed?.loginPath);return}let r=e.target.closest("[data-managed-team]");if(r){let o=l.managedTeams.find(i=>i.id===r.dataset.managedTeam);o&&Oo(o);return}let n=e.target.closest("[data-landing-workspace]");if(n){Kr(n.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&IU()})});function tA(e){let t=e.replace(/:free$/u,"").replaceAll("_","-").split("-").filter(Boolean),r=[];for(let o=0;o<t.length;o++){let i=t[o],s=t[o+1];if(/^\d+$/u.test(i)&&/^\d+$/u.test(s??"")){r.push(`${i}.${s}`),o++;continue}let a=FU.get(i.toLowerCase());r.push(a??(/^(?:[a-z]+\d+|\d+[a-z]+)$/iu.test(i)?i.toUpperCase():i[0]?.toUpperCase()+i.slice(1)))}return r.join(" ").replace(/^GPT (\d)/u,"GPT-$1")}function ca(e){return TU.get(e)??tA(e.includes("/")?e.slice(e.indexOf("/")+1):e)}function Yu(e){let t=e.includes("/")?e.split("/")[0]:"other";return{key:t,name:LU.get(t)??(t==="other"?"Other":tA(t))}}function da(e){return e==="xhigh"?"Extra high":e?e[0].toUpperCase()+e.slice(1):"Unavailable"}function Zl(e){return e.efforts.includes("max")?"max":e.efforts.at(-1)??null}async function ng(e,t=fetch){let r=await t("/api/admin/scan/models",{credentials:"same-origin",headers:{accept:"application/json"},signal:e});if(!r.ok)throw new Error(`HTTP ${r.status}`);let n=await r.json();return _k(n)}function _k(e){if(!Array.isArray(e?.models))throw new Error("No model catalogue returned");let t=e.models.filter(r=>typeof r?.id=="string"&&r.id.length>0).map(r=>({id:r.id,efforts:Array.isArray(r.efforts)?[...new Set(r.efforts.filter(n=>typeof n=="string"&&n.length>0))]:[]}));if(t.length===0)throw new Error("No models available");return{models:t,defaultModel:t.find(r=>r.id===e.defaultModel)?.id??t[0].id}}var TU,LU,FU,Hi=k(()=>{"use strict";TU=new Map([["openai/gpt-6-astra","GPT-6 Astra"],["openai/gpt-6-astra-pro","GPT-6 Astra Pro"],["openai/gpt-5.6-sol","GPT-5.6 Sol"],["openai/gpt-5.6-terra","GPT-5.6 Terra"],["openai/gpt-5.6-luna","GPT-5.6 Luna"],["anthropic/claude-fable-5.1","Claude Fable 5.1"],["anthropic/claude-opus-5","Claude Opus 5"],["anthropic/claude-sonnet-5","Claude Sonnet 5"],["moonshotai/kimi-k3","Kimi K3"],["z-ai/glm-5.3","GLM 5.3"],["qwen/qwen3.8-max","Qwen3.8 Max"],["deepseek/deepseek-v4.1-flash","DeepSeek V4.1 Flash"],["deepseek/deepseek-v4-pro","DeepSeek V4 Pro"]]),LU=new Map([["openai","OpenAI"],["anthropic","Anthropic"],["moonshotai","Moonshot AI"],["google","Google"],["nvidia","NVIDIA"],["qwen","Qwen"],["deepseek","DeepSeek"],["x-ai","xAI"],["z-ai","Z.ai"]]),FU=new Map([["gpt","GPT"],["gptoss","GPT OSS"],["oss","OSS"],["o","O"],["ai","AI"],["api","API"],["4o","4o"],["k3","K3"],["k4","K4"],["qwen","Qwen"],["kimi","Kimi"],["mimo","MiMo"],["gemini","Gemini"],["claude","Claude"],["fable","Fable"],["opus","Opus"],["sonnet","Sonnet"],["astra","Astra"],["terra","Terra"],["luna","Luna"],["codex","Codex"],["deepseek","DeepSeek"],["nemotron","Nemotron"],["gemma","Gemma"]])});function Sk(e=null){let t=["anthropic/claude-opus-5.5","anthropic/claude-fable-5.1","anthropic/claude-sonnet-5.5","anthropic/claude-haiku-4.5","openai/gpt-6-astra","openai/gpt-6-astra-pro","openai/gpt-6.1-sol","openai/gpt-6.1-sol-pro","openai/gpt-6-luna","openai/gpt-6-luna-pro","moonshotai/kimi-k3","google/gemini-3.8-flash","google/gemma-4-31b-it","x-ai/grok-4.7","z-ai/glm-5.3","qwen/qwen3.8-max","deepseek/deepseek-v4.1-flash","deepseek/deepseek-v4-pro"],r=e==="moonshot"?"moonshotai":e,n=t.filter(o=>!["anthropic","openai","moonshot"].includes(e??"")||o.startsWith(`${r}/`)).map(o=>({id:o,efforts:["low","medium","high","xhigh","max"]}));return{models:n,defaultModel:n[0].id}}var rA=k(()=>{"use strict"});var nA=k(()=>{"use strict";rA()});function oA(e,t=fetch,r=""){let n=new URL(e);return(o,i={})=>{let s=new URL(o.replace(/^\/+/u,""),n);if(s.origin!==n.origin)throw new Error("Scan requests must use the configured server");let a=new Headers(i.headers);return r&&a.set("authorization",`Bearer ${r}`),t(s,{...i,headers:a,credentials:"omit",redirect:"error"})}}var iA=k(()=>{"use strict"});var og,sA=k(()=>{"use strict";Hi();nA();iA();og=class{constructor(t,r=()=>{},n=fetch){this.onChange=r,this.request=n,this.reset(t)}reset(t=this.server){this.server=t,this.apiKey="",this.provider=null,this._remoteModels=!1,this._disconnect()}_previewModels(){let t=Sk(this.provider);this.loadModels=()=>Promise.resolve(t)}_disconnect(){this._controller?.abort(),this.connected=!1,this.managed=!1,this.loading=!1,this.error=null,this.catalogue=null,this._remoteModels||this._previewModels(),this.onChange()}get ready(){return this.connected&&!this.loading&&this.catalogue!=null}setKey(t){this.apiKey!==t&&(this.apiKey=t,this._disconnect())}setProvider(t){if(!(this.provider===t||this.managed)){if(this.provider=t,this.connected&&t)return this._load(t);this.connected&&(this._controller?.abort(),this.loading=!1,this.error=null,this.catalogue=null),this._remoteModels||this._previewModels(),this.onChange()}}connect(){if(this._disconnect(),!(!this.server||!this.apiKey.trim()))return this._load(null)}async _fetch(t,r){let n=oA(this.server,this.request,this.apiKey.trim()),o=t?`?${new URLSearchParams({provider:t})}`:"",i=await n(`api/models${o}`,{headers:{accept:"application/json"},cache:"no-store",signal:r});if(i.status===401)throw Object.assign(new Error("DeepView API key not recognized."),{status:401});if(!i.ok)throw new Error(`Scan server returned HTTP ${i.status}.`);let s=await i.json();if(s?.valid!==!0||typeof s.managed!="boolean")throw new Error("Invalid response from scan server.");return{managed:s.managed,catalogue:s.managed||t?_k(s):null}}async _load(t){this._controller?.abort();let r=this._controller=new AbortController;this.loading=!0,this.error=null,this.catalogue=null;let n=this._fetch(t,r.signal);this.onChange();try{let o=await n;if(r.signal.aborted)return;if(this.connected=!0,this.managed=o.managed,this.catalogue=o.catalogue,!o.managed&&!t&&this.provider)return this._load(this.provider);if(o.catalogue){let i=o.catalogue;this._remoteModels=!0,this.loadModels=()=>Promise.resolve(i)}else this._remoteModels||this._previewModels();this.loading=!1,this.onChange()}catch(o){if(r.signal.aborted)return;(!t||o.status===401)&&this._disconnect(),this.loading=!1,this.error=o instanceof TypeError?"Couldn\u2019t reach the scan server. Check your connection and try again.":String(o?.message??o),this.onChange()}}}});function aA(e){let t=e.trim();return/^sk-ant-[A-Za-z0-9_-]*$/u.test(t)?"anthropic":/^sk-or-v1-[A-Za-z0-9_-]*$/u.test(t)?"openrouter":/^sk-kimi-[A-Za-z0-9_-]*$/u.test(t)?"moonshot":/^sk-(?:proj|svcacct)-[A-Za-z0-9_-]*$/u.test(t)?"openai":null}var lA=k(()=>{"use strict"});var cA,dA=k(()=>{T();cA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"></path></svg>`});var uA,pA=k(()=>{T();uA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"></path></svg>`});var fA,hA=k(()=>{T();fA=d`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
127
|
+
<path fill="#4285F4" d="M21.35 12.27c0-.79-.07-1.55-.2-2.27H12v4.3h5.24a4.48 4.48 0 0 1-1.94 2.94v2.45h3.15c1.85-1.7 2.9-4.2 2.9-7.42Z"/>
|
|
128
|
+
<path fill="#34A853" d="M12 21.8c2.64 0 4.86-.87 6.48-2.35l-3.15-2.45c-.87.58-1.98.92-3.33.92-2.56 0-4.73-1.73-5.51-4.06H3.24v2.52A9.8 9.8 0 0 0 12 21.8Z"/>
|
|
129
|
+
<path fill="#FBBC05" d="M6.49 13.86a5.9 5.9 0 0 1 0-3.72V7.62H3.24a9.8 9.8 0 0 0 0 8.76l3.25-2.52Z"/>
|
|
130
|
+
<path fill="#EA4335" d="M12 6.08c1.43 0 2.72.49 3.74 1.45l2.8-2.8C16.85 3.14 14.63 2.2 12 2.2a9.8 9.8 0 0 0-8.76 5.42l3.25 2.52C7.27 7.81 9.44 6.08 12 6.08Z"/>
|
|
131
|
+
</svg>
|
|
132
|
+
`});var mA,gA=k(()=>{T();mA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg>`});var Ck,bA=k(()=>{T();Ck=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z"></path></svg>`});var vA,yA=k(()=>{T();vA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M10.212 8.976V7.62c.127-.01.256-.017.388-.021 3.596-.117 5.957 3.184 5.957 3.184s-2.548 3.647-5.282 3.647a3.227 3.227 0 01-1.063-.175v-4.109c1.4.174 1.681.812 2.523 2.258l1.873-1.627a4.905 4.905 0 00-3.67-1.846 6.594 6.594 0 00-.729.044m0-4.476v2.025c.13-.01.259-.019.388-.024 5.002-.174 8.261 4.226 8.261 4.226s-3.743 4.69-7.643 4.69c-.338 0-.675-.031-1.007-.092v1.25c.278.038.558.057.838.057 3.629 0 6.253-1.91 8.794-4.169.421.347 2.146 1.193 2.501 1.564-2.416 2.083-8.048 3.763-11.24 3.763-.308 0-.603-.02-.894-.048V19.5H24v-15H10.21zm0 9.756v1.068c-3.356-.616-4.287-4.21-4.287-4.21a7.173 7.173 0 014.287-2.138v1.172h-.005a3.182 3.182 0 00-2.502 1.178s.615 2.276 2.507 2.931m-5.961-3.3c1.436-1.935 3.604-3.148 5.961-3.336V6.523C5.81 6.887 2 10.723 2 10.723s2.158 6.427 8.21 7.015v-1.166C5.77 16 4.25 10.958 4.25 10.958h-.002z"></path></svg>`});var wA,kA=k(()=>{T();wA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>`});var xA,$A=k(()=>{T();xA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"></path></svg>`});var _A,SA=k(()=>{T();_A=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"></path></svg>`});var CA,EA=k(()=>{T();CA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12 0C8.016 0 4.756.255 2.493 2.516.23 4.776 0 8.033 0 12.012c0 3.98.23 7.235 2.494 9.497C4.757 23.77 8.017 24 12 24c3.983 0 7.243-.23 9.506-2.491C23.77 19.247 24 15.99 24 12.012c0-3.984-.233-7.243-2.502-9.504C19.234.252 15.978 0 12 0zM4.906 7.405h5.624c1.47 0 3.007.068 3.764.827.746.746.827 2.233.83 3.676v4.54a.15.15 0 0 1-.152.147h-1.947a.15.15 0 0 1-.152-.148V11.83c-.002-.806-.048-1.634-.464-2.051-.358-.36-1.026-.441-1.72-.458H7.158a.15.15 0 0 0-.151.147v6.98a.15.15 0 0 1-.152.148H4.906a.15.15 0 0 1-.15-.148V7.554a.15.15 0 0 1 .15-.149zm12.131 0h1.949a.15.15 0 0 1 .15.15v8.892a.15.15 0 0 1-.15.148h-1.949a.15.15 0 0 1-.151-.148V7.554a.15.15 0 0 1 .151-.149zM8.92 10.948h2.046c.083 0 .15.066.15.147v5.352a.15.15 0 0 1-.15.148H8.92a.15.15 0 0 1-.152-.148v-5.352a.15.15 0 0 1 .152-.147Z"/></svg>
|
|
133
|
+
`});var MA,RA=k(()=>{T();MA=d`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z"></path></svg>`});function Xu(e){return Object.hasOwn(AA,e)?AA[e]:BU}var AA,BU,Ek=k(()=>{"use strict";T();dA();pA();hA();gA();bA();yA();kA();$A();SA();EA();RA();AA={anthropic:cA,deepseek:uA,google:fA,moonshot:Ck,moonshotai:Ck,nvidia:vA,openai:wA,openrouter:xA,qwen:_A,xiaomi:CA,"x-ai":mA,"z-ai":MA},BU=d`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="12" height="12" rx="3"/><path d="M8 1v3m4-3v3M8 16v3m4-3v3M1 8h3m-3 4h3m12-4h3m-3 4h3"/></svg>`});function Mk(e){let t=new Map(e.map(n=>[n.id,n])),r=new Set;return e.flatMap(n=>{if(r.has(n.id))return[];let o=n.id.endsWith("-pro")?n.id.slice(0,-4):n.id,i=t.get(o),s=t.get(`${o}-pro`);return!/(?:^|\/)gpt-.+$/u.test(o)||o.endsWith("-pro")||!i||!s?[n]:(r.add(i.id),r.add(s.id),[{...i,pro:s}])})}function Rk(e){return[...Map.groupBy(Mk(e),r=>Yu(r.id).key)].map(([r,n])=>({key:r,models:n}))}function IA(e,t){if(e.length===0)return[];let r=Math.min(e.length,Math.max(1,t)),n=e.map(u=>u.models.length*2+3),o=n.reduce((u,p)=>u+p,0),i=Math.max(...n);for(;i<o;){let u=Math.floor((i+o)/2),p=0,f=1;for(let h of n)p+h>u&&(f++,p=0),p+=h;f>r?i=u+1:o=u}let s=[],a=[],c=0;for(let[u,p]of e.entries())a.length>0&&(c+n[u]>i||e.length-u===r-s.length-1)&&(s.push(a),a=[],c=0),a.push(p),c+=n[u];return s.push(a),s}var TA=k(()=>{"use strict";Hi()});var OU,Ak,Ik=k(()=>{"use strict";T();Hi();TA();Ek();OU=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg>`,Ak=class extends J{static properties={loadModels:{attribute:!1},pending:{type:Boolean},value:{attribute:!1},effort:{attribute:!1},hasExtra:{type:Boolean,attribute:"has-extra"},_models:{state:!0},_error:{state:!0},_menuColumns:{state:!0}};static styles=Te`:host{display:block;min-width:0;container:scan-controls / inline-size}*{box-sizing:border-box}.layout{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr);gap:1.25rem;align-items:start}.layout.with-extra{grid-template-columns:minmax(16rem,.9fr) minmax(14rem,1.2fr) minmax(14rem,auto)}.field{min-width:0;min-height:4.9rem}.model-placeholder{height:3.25rem;display:flex;align-items:center;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--muted);background:var(--bg);font-size:.75rem}.effort-placeholder{height:.3rem;margin:1rem .6rem;border-radius:999px;background:var(--surface-active)}.label{display:flex;justify-content:space-between;align-items:center;margin-bottom:.4rem;color:var(--muted);font-size:.72rem}output{color:var(--text);font-size:.72rem;font-weight:500}details{position:relative}.model-control{position:relative}summary{display:flex;align-items:center;gap:.55rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg);color:var(--text);list-style:none;transition:border-color .12s,background .12s}summary:hover,details[open] summary{border-color:var(--muted);background:var(--surface-active)}summary::-webkit-details-marker{display:none}summary,.menu{user-select:none}summary>svg{width:.9rem;height:.9rem;margin-left:auto;color:var(--muted)}.selected-copy{display:grid;gap:.1rem;flex:1;min-width:0}.selected-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;font-weight:500}.selected-copy small{color:var(--muted);font-size:.63rem}.pro-space{width:3.65rem;flex:0 0 3.65rem}.pro-toggle,.pro-checkbox{position:absolute;right:2.05rem;top:50%;transform:translateY(-50%);align-items:center;justify-content:center;gap:.3rem;width:3.65rem;height:1.65rem;padding:.2rem .3rem;color:var(--muted);font:inherit;font-size:.65rem;font-weight:600;cursor:default;user-select:none}.pro-toggle{display:var(--switch-button-display, inline-flex);border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg)}.pro-checkbox{display:var(--switch-checkbox-display, none)}.pro-checkbox input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}.pro-toggle:hover{border-color:var(--muted);color:var(--text)}.pro-track{position:relative;flex:0 0 1.3rem;height:.8rem;border-radius:var(--ui-radius, 999px);background:var(--border)}.pro-track:after{content:"";position:absolute;top:.15rem;left:.15rem;width:.5rem;height:.5rem;border-radius:50%;background:var(--muted);transition:transform .12s,background .12s}.pro-toggle[aria-checked=true]{color:var(--accent);border-color:rgb(from var(--accent) r g b / .45);background:rgb(from var(--accent) r g b / .08)}.pro-toggle[aria-checked=true] .pro-track{background:rgb(from var(--accent) r g b / .25)}.pro-toggle[aria-checked=true] .pro-track:after{transform:translate(.5rem);background:var(--accent)}.icon{display:inline-grid;place-items:center;width:1.7rem;height:1.5rem;flex:0 0 1.7rem;color:var(--text)}.icon svg{display:block;width:1.12rem;height:1.12rem}.icon.openai{color:#10a37f}.icon.anthropic{color:#d97757}.icon.moonshotai{color:#8068d9}.icon.google{color:#4285f4}.icon.nvidia{color:#76b900}.icon.qwen{color:#f97316}.icon.deepseek{color:#4d8dff}.icon.xiaomi{color:#ff6900}.icon.moonshotai svg{transform:scale(.78)}.icon.qwen svg{transform:scale(.82)}.icon.nvidia svg{transform:scale(.86)}.icon.deepseek svg{transform:scale(.9)}.extra{display:flex;min-width:0;min-height:4.9rem;align-items:flex-end;align-self:end;padding-bottom:.05rem}.menu{visibility:hidden;position:fixed;z-index:1000;width:min(46rem,calc(100vw - 1rem));max-height:calc(100dvh - 1rem);overflow:auto;overscroll-behavior:contain;padding:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface-active);color:var(--text);box-shadow:0 .65rem 1.8rem #0000008c}details[open] .menu[data-positioned]{visibility:visible}.groups{display:grid;grid-template-columns:repeat(var(--model-columns, 1),minmax(0,1fr));gap:1rem;align-items:start}.provider-column{min-width:0}fieldset{min-width:0;margin:0 0 .6rem;padding:0;border:0}fieldset:last-child{margin-bottom:0}legend{display:flex;align-items:center;gap:.45rem;width:100%;min-height:1.9rem;padding:.35rem .5rem .25rem;border-bottom:1px solid rgb(from var(--border) r g b / .7);color:var(--muted);font-size:.64rem;font-weight:700;letter-spacing:.055em;text-transform:uppercase}legend .icon{width:.88rem;height:1.25rem;flex-basis:.88rem}legend .icon svg{width:.88rem;height:.88rem}.choice{display:flex;align-items:center;gap:.5rem;padding:.35rem .5rem;border-radius:var(--ui-radius, 4px);font-size:.76rem}.choice:hover{background:rgb(from var(--text) r g b / .05)}.choice:has(:checked){color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.choice input{margin:0;accent-color:var(--accent)}.choice span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slider{--thumb-size: 1rem;padding:.15rem .6rem 0}input[type=range]{appearance:none;display:block;width:100%;height:var(--thumb-size);margin:.4rem 0 .5rem;padding:0;border:0;background:transparent}input[type=range]::-webkit-slider-runnable-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-moz-range-track{height:.3rem;border-radius:var(--ui-radius, 999px);background:linear-gradient(to right,var(--accent) var(--effort-fill),var(--surface-active) var(--effort-fill))}input[type=range]::-webkit-slider-thumb{appearance:none;width:var(--thumb-size);height:var(--thumb-size);margin-top:calc((.3rem - var(--thumb-size)) / 2);border:0;border-radius:50%;background:var(--accent)}input[type=range]::-moz-range-thumb{width:var(--thumb-size);height:var(--thumb-size);border:0;border-radius:50%;background:var(--accent)}input[type=range]:disabled{opacity:.5}.steps{position:relative;height:1.3rem;margin:0 calc(var(--thumb-size) / 2)}.step{position:absolute;top:0;left:var(--step-position);transform:translate(-50%);padding:.35rem 0 0;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.62rem;white-space:nowrap;cursor:default}.step:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:1px;height:.2rem;background:var(--muted)}.step.active{color:var(--accent)}:is(summary,input,button):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.message{margin:0;color:var(--muted);font-size:.75rem}.error{color:var(--critical, #e5534b)}.retry{margin-left:.5rem;padding:.2rem .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--bg);color:var(--text);font:inherit}@container scan-controls (max-width: 50rem){.layout.with-extra{grid-template-columns:minmax(16rem,1fr) minmax(14rem,1fr)}.layout.with-extra .extra{grid-column:1 / -1;align-self:start;min-height:0}}@container scan-controls (max-width: 33rem){.layout,.layout.with-extra{grid-template-columns:minmax(0,1fr);gap:1rem}.layout.with-extra .extra{grid-column:auto}}`;constructor(){super(),this.loadModels=ng,this.pending=!1,this.value=null,this.effort=null,this.hasExtra=!1,this._models=[],this._error=null,this._menuColumns=1,this._positionRequest=0,this._onOutside=t=>{t.composedPath().includes(this)||this._close()},this._onViewportChange=()=>this._positionMenu()}connectedCallback(){super.connectedCallback(),document.addEventListener("pointerdown",this._onOutside),window.addEventListener("resize",this._onViewportChange),window.addEventListener("scroll",this._onViewportChange,!0),this.hasUpdated&&this._load()}updated(t){(t.has("loadModels")||t.has("pending"))&&this.isConnected&&this._load(),t.has("_models")&&this.renderRoot.querySelector("details")?.open&&(this._resetMenuPosition(),this._positionMenu())}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort(),document.removeEventListener("pointerdown",this._onOutside),window.removeEventListener("resize",this._onViewportChange),window.removeEventListener("scroll",this._onViewportChange,!0)}async _load(){if(this._controller?.abort(),this.pending)return;let t=new AbortController;this._controller=t,this._error=null;let r=!1,n=o=>{if(t.signal.aborted)return;r=!0,this._models=o.models;let i=o.models.find(s=>s.id===this.value);i?i.efforts.includes(this.effort)||this._setEffort(Zl(i)):this._select(o.defaultModel)};try{n(await this.loadModels(t.signal,n))}catch(o){!t.signal.aborted&&!r&&(this._error=String(o?.message??o))}}_close(){this._resetMenuPosition();let t=this.renderRoot.querySelector("details");t&&(t.open=!1)}_resetMenuPosition(){this._positionRequest++;let t=this.renderRoot.querySelector(".menu");t&&delete t.dataset.positioned}_toggleMenu(t){this._resetMenuPosition(),t.currentTarget.open&&this._positionMenu()}get _selectedRow(){return Mk(this._models).find(t=>t.id===this.value||t.pro?.id===this.value)}async _positionMenu(){let t=++this._positionRequest,r=this.renderRoot.querySelector("details"),n=this.renderRoot.querySelector("summary"),o=this.renderRoot.querySelector(".menu");if(!r?.open||!n||!o)return;let i=n.getBoundingClientRect(),s=6,a=8,c=Rk(this._models),u=c.reduce((M,R)=>M+R.models.length,0),p=Math.min(3,c.length,Math.ceil((u+c.length*1.5)/9)),f=parseFloat(getComputedStyle(o).fontSize),h=0;for(let M of o.querySelectorAll(".choice span, legend")){let R=document.createRange();R.selectNodeContents(M),h=Math.max(h,R.getBoundingClientRect().width)}let g=Math.max(11*f,Math.min(18*f,h+2.5*f)),b=1.3*f+2,v=Math.max(1,Math.min(p,Math.floor((window.innerWidth-a*2-b+f)/(g+f)))),x=Math.min(v*g+(v-1)*f+b,window.innerWidth-a*2),w=Math.max(a,Math.min(i.left,window.innerWidth-x-a));if(this._menuColumns=v,await this.updateComplete,t!==this._positionRequest||!this.isConnected||!r.open)return;o.style.left=`${w}px`,o.style.width=`${x}px`,o.style.setProperty("--model-columns",v),o.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let y=o.getBoundingClientRect().height,$=window.innerHeight-i.bottom-s-a,_=i.top-s-a,S=$<y&&_>$?i.top-s-y:i.bottom+s;o.style.bottom="auto",o.style.top=`${Math.max(a,Math.min(S,window.innerHeight-y-a))}px`,o.dataset.positioned=""}_select(t,{preserveEffort:r=!1,close:n=!0}={}){let o=this._models.find(i=>i.id===t);o&&(this.value=t,this._setEffort(r&&o.efforts.includes(this.effort)?this.effort:Zl(o)),n&&this._close())}_selectRow(t){let r=this._selectedRow?.pro?.id===this.value;this._select(r&&t.pro?t.pro.id:t.id)}_togglePro(){let t=this._selectedRow;t?.pro&&this._select(this.value===t.pro.id?t.id:t.pro.id,{preserveEffort:!0,close:!1})}_setEffort(t){this.effort=t,this.dispatchEvent(new CustomEvent("model-change",{detail:{model:this.value,effort:t},bubbles:!0,composed:!0}))}render(){let t=this._models.find(i=>i.id===this.value);if(this.pending||!t)return d`<div class="${`layout ${this.hasExtra?"with-extra":""}`}" aria-busy="true"><div class="field"><span class="label">Model</span><div class="model-placeholder" role="${this._error?"alert":"status"}">${this._error?d`Couldn’t load models. <button type="button" class="retry" @click="${()=>{this._load()}}">Retry</button>`:"Loading models\u2026"}</div></div><div class="field" aria-hidden="true"><span class="label">Effort</span><div class="effort-placeholder"></div></div>${this.hasExtra?d`<div class="extra"><slot name="effort-extra"></slot></div>`:m}</div>`;let r=this._selectedRow,n=Yu(t.id),o=IA(Rk(this._models),this._menuColumns);return d`${this._error?d`<p class="message error" role="alert">Couldn’t refresh models: ${this._error}<button class="retry" @click="${()=>{this._load()}}">Retry</button></p>`:m}<div class="${`layout ${this.hasExtra?"with-extra":""}`}"><div class="field"><span class="label" id="model-label">Model</span><div class="model-control"><details @toggle="${this._toggleMenu}" @keydown="${i=>{i.key==="Escape"&&(this._close(),this.renderRoot.querySelector("summary")?.focus())}}"><summary aria-labelledby="model-label selected-model" @click="${this._resetMenuPosition}"><span class="${`icon ${n.key}`}" aria-hidden="true">${Xu(n.key)}</span><span class="selected-copy"><strong id="selected-model">${ca(r.id)}</strong><small>${n.name}</small></span>${r.pro?d`<span class="pro-space" aria-hidden="true"></span>`:m}${OU}</summary><div class="menu"><div class="groups">${o.map(i=>d`<div class="provider-column">${i.map(s=>this._modelSection(s))}</div>`)}</div></div></details>${r.pro?d`<button type="button" class="pro-toggle" role="switch" aria-label="Pro model" aria-checked="${t.id===r.pro.id}" @click="${this._togglePro}"><span>Pro</span><span class="pro-track" aria-hidden="true"></span></button><label class="pro-checkbox"><input type="checkbox" aria-label="Pro model" .checked="${t.id===r.pro.id}" @change="${this._togglePro}"><span>Pro</span></label>`:m}</div></div>${t.efforts.length>0?this._effortSlider(t.efforts):d`<div class="field" aria-hidden="true"></div>`} ${this.hasExtra?d`<div class="extra"><slot name="effort-extra"></slot></div>`:m}</div>`}_modelSection({key:t,models:r}){return d`<fieldset><legend><span class="${`icon ${t}`}" aria-hidden="true">${Xu(t)}</span>${Yu(r[0].id).name}</legend>${r.map(n=>d`<label class="choice"><input type="radio" name="scan-model" value="${n.id}" .checked="${n.id===this.value||n.pro?.id===this.value}" @change="${()=>{this._selectRow(n),this.renderRoot.querySelector("summary")?.focus()}}"><span>${ca(n.id)}</span></label>`)}</fieldset>`}_effortSlider(t){let r=Math.max(0,t.indexOf(this.effort)),n=Math.max(1,t.length-1);return d`<div class="field"><div class="label"><label for="effort">Effort</label><output for="effort">${da(t[r])}</output></div><div class="slider" style="${`--effort-fill: calc(var(--thumb-size) / 2 + (100% - var(--thumb-size)) * ${r/n})`}"><input id="effort" type="range" min="0" max="${n}" step="1" .value="${String(r)}" ?disabled="${t.length===1}" aria-valuetext="${da(t[r])}" @input="${o=>this._setEffort(t[Number(o.target.value)])}"><div class="steps">${t.map((o,i)=>d`<button type="button" class="${`step ${o===this.effort?"active":""}`}" style="${`--step-position: ${i/n*100}%`}" aria-label="${`Set effort to ${da(o)}`}" aria-pressed="${o===this.effort}" @click="${()=>this._setEffort(o)}">${da(o)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",Ak)});var No,ig=k(()=>{"use strict";T();dr();No=class extends J{static properties={options:{attribute:!1},value:{attribute:!1},label:{type:String},placeholder:{type:String},disabled:{type:Boolean},_query:{state:!0},_facet:{state:!0},_open:{state:!0}};static styles=Te`:host{display:block;min-width:0}*{box-sizing:border-box}button,input{font:inherit;color:var(--text)}button{cursor:default;user-select:none}.trigger{display:flex;align-items:center;gap:.6rem;width:100%;height:2rem;padding:.28rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);text-align:left;font-size:.76rem}.trigger:hover:not(:disabled){border-color:var(--muted)}.trigger:disabled{opacity:.5}:host([variant=filter]){display:inline-block;max-width:min(20rem,100%)}:host([variant=filter]) .trigger{height:30px;min-width:8.5rem;background:transparent;font-size:.8rem;font-weight:500;border-radius:var(--ui-radius, 4px)}.name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.option-copy{flex:1;min-width:0;display:grid;gap:.08rem}.secondary{color:var(--muted);font-size:.64rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{display:grid;place-items:center;flex:0 0 1.5rem;width:1.5rem;height:1.5rem;border-radius:50%;color:var(--accent);background:rgb(from var(--accent) r g b / .13);font-family:sans-serif;font-size:.62rem;font-weight:600}.detail,.count{flex:0 0 auto;color:var(--muted);font-size:.66rem;font-variant-numeric:tabular-nums;white-space:nowrap}svg{flex:0 0 auto;width:.9rem;height:.9rem;color:var(--muted)}.menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg);color:var(--text);box-shadow:0 .6rem 1.6rem #0006;user-select:none}.menu:popover-open{display:flex;flex-direction:column}.menu[data-positioned]{visibility:visible}.search{display:flex;align-items:center;gap:.5rem;flex:0 0 auto;padding:.55rem .65rem;border-bottom:1px solid var(--border)}input{flex:1;min-width:0;width:0;padding:.15rem 0;border:0;background:transparent;font-size:.78rem;outline:none}input::placeholder{color:var(--muted)}.search:focus-within{box-shadow:inset 0 -2px var(--accent)}.body{display:flex;min-height:0;flex:1}.facets{width:10.5rem;flex:0 0 auto;padding:.35rem;overflow:auto;overscroll-behavior:none;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.org{display:flex;align-items:center;gap:.4rem;width:100%;padding:.4rem .45rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.7rem}.org[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.results{flex:1;min-width:0;overflow:auto;overscroll-behavior:none;padding:.3rem}.group+.group{margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--border)}.heading{position:sticky;top:-.3rem;z-index:1;display:flex;align-items:center;gap:.4rem;margin:0;padding:.4rem .5rem;color:var(--muted);background:var(--bg);font-size:.68rem;font-weight:600}.heading svg{width:.8rem;height:.8rem}.option{display:flex;align-items:center;gap:.65rem;width:100%;padding:.35rem .5rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.76rem}.option svg{width:.8rem;height:.8rem;opacity:0;color:var(--accent)}.option[aria-selected=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.option[aria-selected=true] svg{opacity:1}.option:disabled{opacity:.45}.option:hover:not(:disabled),.org:hover{background:rgb(from var(--text) r g b / .05)}.pinned{padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid var(--border)}.empty{margin:0;padding:1.3rem .7rem;color:var(--muted);font-size:.76rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(max-width:40rem){.facets{width:8.5rem}}@media(max-width:28rem){.facets{width:7rem}.option{gap:.35rem}}`;constructor(){super(),this.options=[],this.value=null,this.label="Choose",this.placeholder="Choose",this.disabled=!1,this._query="",this._facet=null,this._open=!1,this._menuHeight=null,this._onViewport=()=>this._position()}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._onViewport),window.addEventListener("scroll",this._onViewport,!0)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onViewport),window.removeEventListener("scroll",this._onViewport,!0)}render(){let t=this.options.find(s=>s.value===this.value),r=this.choices(),o=[...r.pinned,...r.sections.flatMap(s=>s.options)].filter(s=>!s.disabled),i=o.find(s=>s.value===this.value)?.value??o[0]?.value;return d`<button type="button" class="trigger" popovertarget="selector-menu" aria-label="${this.label}" aria-haspopup="dialog" aria-expanded="${this._open}" ?disabled="${this.disabled}">${t?this.optionIcon(t):m}<span class="name">${t?.label??this.placeholder}</span>${t?.detail?d`<span class="detail">${t.detail}</span>`:m} <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg></button><div class="menu" id="selector-menu" popover="auto" role="dialog" aria-label="${this.label}" @beforetoggle="${this._beforeToggle}" @toggle="${this._toggle}" @keydown="${this._keyDown}"><div class="search"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3.5 3.5"/></svg> <input type="search" placeholder="${`${this.searchLabel}\u2026`}" aria-label="${this.searchLabel}" aria-controls="selector-options" .value="${ke(this._query)}" @input="${s=>{this._query=s.target.value}}"> <span class="count" role="status">${r.count}${r.count===r.total?"":` / ${r.total}`}</span></div><div class="body">${r.showFacets?d`<div class="facets" role="group" aria-label="${this.facetLabel}"><button type="button" class="org" aria-pressed="${r.activeFacet==null}" @click="${()=>this._filterFacet(null)}"><span class="name">${this.allFacetsLabel}</span><span class="count">${r.total}</span></button> ${r.facets.map(s=>d`<button type="button" class="org" title="${s.name}" aria-pressed="${r.activeFacet===s.value}" @click="${()=>this._filterFacet(s.value)}"><span class="name">${s.name}</span><span class="count">${s.count}</span></button>`)}</div>`:m}<div class="results" id="selector-options" role="listbox" aria-label="${this.optionsLabel}">${r.pinned.length>0?d`<div class="pinned">${r.pinned.map(s=>this._option(s,!1,i))}</div>`:m} ${r.sections.map((s,a)=>d`<div class="group" role="group" aria-labelledby="${s.label?`selector-group-${a}`:m}">${s.label?d`<h3 class="heading" id="${`selector-group-${a}`}">${s.organization?d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" aria-hidden="true"><path d="M3 14V3h6v11M9 7h4v7M1 14h14M5 6h2M5 9h2M5 12h2"/></svg>`:m}${s.label}</h3>`:m} ${s.options.map(c=>this._option(c,s.organization,i))}</div>`)} ${r.count?m:d`<p class="empty">${this.options.length>0?this.noMatchesLabel:this.emptyLabel}</p>`}</div></div></div>`}optionIcon(t){return t.initials?d`<span class="avatar" aria-hidden="true">${t.initials}</span>`:m}optionTitle(t){return t.label}_option(t,r,n){return d`<button type="button" class="option" role="option" ?data-reset="${t.reset}" ?disabled="${t.disabled}" aria-label="${t.label}" title="${this.optionTitle(t)}" aria-selected="${t.value===this.value}" tabindex="${t.value===n?0:-1}" @click="${()=>this._pick(t.value)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m3 8 3 3 7-7"/></svg>${this.optionIcon(t)}<span class="option-copy"><span class="name">${t.displayLabel??(r?t.name:t.label)}</span>${t.secondary?d`<span class="secondary">${t.secondary}</span>`:m}</span>${t.detail?d`<span class="detail">${t.detail}</span>`:m}</button>`}updated(t){this.disabled&&this._open&&this._close(!1),t.has("options")&&(this._menuHeight=null),this._position(),(t.has("_query")||t.has("_facet"))&&(this.renderRoot.querySelector(".results").scrollTop=0)}_beforeToggle(t){this._open=t.newState==="open",delete t.target.dataset.positioned,this._open&&(this._query="",this._facet=null,this._menuHeight=null)}async _toggle(t){t.newState==="open"&&(await this.updateComplete,!(!this._open||!this.isConnected)&&(this._position(),this.renderRoot.querySelector("input").focus({preventScroll:!0})))}_position(){let t=this.renderRoot.querySelector(".menu");if(!t?.matches(":popover-open"))return;let r=this.renderRoot.querySelector(".trigger").getBoundingClientRect(),n=8,o=t.querySelector(".facets")!=null,i=Math.min(Math.max(r.width,o?560:360),window.innerWidth-n*2),s=window.innerHeight-r.bottom-n-4,a=r.top-n-4;t.style.width=`${i}px`,this._menuHeight??=Math.min(480,t.querySelector(".search").offsetHeight+Math.max(t.querySelector(".results").scrollHeight,t.querySelector(".facets")?.scrollHeight??0)+2);let c=this._menuHeight,u=s<c&&a>s;t.style.maxHeight=`${Math.max(0,Math.min(c,u?a:s))}px`,t.style.left=`${Math.max(n,Math.min(r.left,window.innerWidth-i-n))}px`,t.style.top=`${Math.max(n,u?r.top-t.offsetHeight-4:r.bottom+4)}px`,t.dataset.positioned=""}_filterFacet(t){this._facet=t,this.renderRoot.querySelector("input").focus({preventScroll:!0})}_keyDown(t){if(t.stopPropagation(),t.key==="Escape"){t.preventDefault(),this._close();return}let r=this.renderRoot.querySelector("input"),n=this.renderRoot.activeElement,o=[...this.renderRoot.querySelectorAll(".option:not(:disabled)")],i=o.indexOf(n);if(n!==r&&i<0)return;if(t.key==="Enter"&&n===r){t.preventDefault(),(this.renderRoot.querySelector(".option:not([data-reset]):not(:disabled)")??o[0])?.click();return}let s;if(t.key==="ArrowDown")s=Math.min(i+1,o.length-1);else if(t.key==="ArrowUp")s=i-1;else if(n!==r&&t.key==="Home")s=0;else if(n!==r&&t.key==="End")s=o.length-1;else if(n!==r&&t.key.length===1&&t.key!==" "&&!t.ctrlKey&&!t.metaKey&&!t.altKey){t.preventDefault(),this._query+=t.key,r.focus();return}else return;t.preventDefault();for(let[a,c]of o.entries())c.tabIndex=a===s?0:-1;s<0?r.focus():o[s]?.focus()}_pick(t){this.disabled||!this.options.some(r=>r.value===t&&!r.disabled)||(this._close(),this.dispatchEvent(new CustomEvent(this.changeEvent,{detail:{value:t},bubbles:!0,composed:!0})))}_close(t=!0){this.renderRoot.querySelector(".menu").hidePopover(),this._open=!1,t&&this.renderRoot.querySelector(".trigger").focus({preventScroll:!0})}}});function NU(e){if(/^https?:\/\//iu.test(e)){try{let r=new URL(e),n=r.pathname.split("/").filter(Boolean);if(n.length>=2)return{owner:`${r.host}/${n[0]}`,name:n.slice(1).join("/")}}catch{}return{owner:null,name:e}}let t=/^([^\s/:]+)\/(.+)$/u.exec(e);return t?{owner:t[1],name:t[2]}:{owner:null,name:e}}function FA(e,t="",r=null,{includeSingletonOrganizations:n=!1}={}){let o=e.map(w=>({...w,...w.special?{owner:null,name:w.label}:NU(w.label)})),i=new Map;for(let w of o)w.owner!=null&&i.set(w.owner,(i.get(w.owner)??0)+1);let s=n?1:2,a=[...i].filter(([,w])=>w>=s).toSorted(([w],[y])=>Tk(w,y)).map(([w,y])=>({value:w,name:w,count:y})),c=w=>(i.get(w.owner)??0)<s,u=o.filter(w=>!w.special&&!w.reset&&c(w)).length;u>0&&a.push({value:Lk,name:"Other",count:u});let p=a.some(w=>w.value===r)?r:null,f=LA(t.trim()).split(/\s+/u).filter(Boolean),h=w=>f.every(y=>LA(w.label).includes(y)),g=o.filter(w=>w.reset||w.special&&h(w)),b=o.filter(w=>!w.reset&&!w.special&&h(w)&&(p==null||(p===Lk?c(w):w.owner===p))),v=new Map;for(let w of b){let y=(i.get(w.owner)??0)>=s?w.owner:null;v.has(y)||v.set(y,[]),v.get(y).push(w)}let x=[...v].toSorted(([w],[y])=>w==null?1:y==null?-1:Tk(w,y)).map(([w,y])=>({label:w??(a.some($=>$.value!==Lk)?"Other":null),organization:w!=null,options:y.toSorted(($,_)=>Tk($.label,_.label))}));return{facets:a,activeFacet:p,pinned:g,sections:x,count:b.length+g.filter(w=>!w.reset).length,total:o.filter(w=>!w.reset).length,showFacets:a.length>1}}var LA,Tk,Lk,BA=k(()=>{"use strict";LA=e=>e.normalize("NFKC").toLocaleLowerCase(),Tk=(e,t)=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}),Lk=Symbol("other repositories")});var Fk,sg=k(()=>{"use strict";ig();BA();Fk=class extends No{constructor(){super(),this.label="Choose repository",this.placeholder="Choose repository"}get searchLabel(){return"Search repositories"}get optionsLabel(){return"Repositories"}get facetLabel(){return"Filter by organization"}get allFacetsLabel(){return"All organizations"}get noMatchesLabel(){return"No matching repositories"}get emptyLabel(){return"No repositories available"}get changeEvent(){return"repository-change"}choices(){return FA(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",Fk)});var Bk,Ok=k(()=>{"use strict";ig();Bk=class extends No{constructor(){super(),this.label="Choose workspace",this.placeholder="Choose workspace"}get searchLabel(){return"Search workspaces"}get optionsLabel(){return"Workspaces"}get noMatchesLabel(){return"No matching workspaces"}get emptyLabel(){return"No workspaces available"}get changeEvent(){return"workspace-change"}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),r=this.options.filter(n=>t.every(o=>n.label.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((n,o)=>n.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:r}],facets:[],showFacets:!1,count:r.length,total:this.options.length}}};customElements.get("workspace-selector")||customElements.define("workspace-selector",Bk)});function PU(e){return e.map(t=>{let r=["sourcemap","sourcemaps"].includes(t.kind)||t.filename.toLowerCase().endsWith(".map")?"sourcemap":"stasis",n=r==="sourcemap"?"Sourcemap":"Stasis",o=[];if(typeof t.size=="string"&&!["","\u2014"].includes(t.size)&&o.push(t.size),t.files){o.push(`${t.files.length.toLocaleString()} files`);let{lines:i}=ru(t.files);i!=null&&o.push(`${i.toLocaleString()} LoC`)}else t.summary&&(Number.isSafeInteger(t.summary.files)&&t.summary.files>=0&&o.push(`${t.summary.files.toLocaleString()} files`),Number.isSafeInteger(t.summary.lines)&&t.summary.lines>=0&&o.push(`${t.summary.lines.toLocaleString()} LoC`));return{value:t.id,label:t.filename,detail:n,format:r,secondary:o.join(" \xB7 ")}})}var Nk,ag=k(()=>{"use strict";T();Je();ig();gt();_l();Nk=class extends No{static properties={bundles:{attribute:!1}};static styles=[No.styles,Te`.bundle-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 1.05rem;width:1.05rem;height:1.05rem;color:var(--muted)}.bundle-icon img,.bundle-icon svg{display:block;width:100%;height:100%;opacity:1}.option{gap:.5rem;padding-block:.25rem}.option-copy{gap:0}.option .name{line-height:1.3}.option .bundle-icon{flex-basis:1.35rem;width:1.35rem;height:1.35rem;margin-right:.15rem}.secondary{line-height:1.25;font-variant-numeric:tabular-nums}`];constructor(){super(),this.bundles=[],this.label="Choose bundle",this.placeholder="Choose bundle"}get searchLabel(){return"Search bundles"}get optionsLabel(){return"Bundles"}get noMatchesLabel(){return"No matching bundles"}get emptyLabel(){return"No stored bundles"}get changeEvent(){return"bundle-change"}willUpdate(t){t.has("bundles")&&(this.options=PU(this.bundles))}optionIcon(t){return d`<span class="bundle-icon" aria-hidden="true">${t.format==="sourcemap"?V(or):d`<img src="./stasis.svg" alt="">`}</span>`}optionTitle(t){return m}choices(){let t=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),r=this.options.filter(n=>t.every(o=>`${n.label} ${n.detail}`.normalize("NFKC").toLocaleLowerCase().includes(o))).toSorted((n,o)=>n.label.localeCompare(o.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:r}],facets:[],showFacets:!1,count:r.length,total:this.options.length}}};customElements.get("bundle-selector")||customElements.define("bundle-selector",Nk)});var Ju,Pk,OA=k(()=>{"use strict";T();Je();Ph();Hi();ag();sg();Ok();Ju=e=>({kind:e,sourceId:null,ids:new Set}),Pk=class extends J{static properties={mode:{type:String},loadSources:{attribute:!1},restore:{attribute:!1},_sources:{state:!0},_loading:{state:!0},_error:{state:!0},_merge:{state:!0},_link:{state:!0}};constructor(){super(),this.mode="link",this._sources=null,this._loading=!1,this._error=null,this._merge=Ju("bundle"),this._link=Ju("repository")}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadSources")){this._load();return}t.has("mode")&&this._selectOnlySource(),t.has("restore")&&this._restore(),["_sources","_merge","_link","mode","restore"].some(r=>t.has(r))&&this._notify()}get _current(){return this.mode==="merge"?this._merge:this._link}get _parents(){if(this.mode==="merge")return this._sources?.merge?.bundles??[];let t=this._sources?.link?.reports??[];return this._current.kind==="workspace"?(this._sources?.link?.workspaces??[]).filter(r=>t.some(n=>r.reports.includes(n.id))):(this._sources?.link?.repositories??[]).filter(r=>t.some(n=>n.repoIds.includes(r.id)))}get _parent(){return this._parents.find(t=>t.id===this._current.sourceId)}get _scopeOptions(){let t=this._sources?.link?.reports??[];return this._parents.map(r=>{let n=t.filter(o=>this._current.kind==="workspace"?r.reports.includes(o.id):o.repoIds.includes(r.id)).length;return{value:r.id,label:r.label,detail:`${n} ${n===1?"report":"reports"}`}})}get _inputs(){return this._parent?this.mode==="merge"?(this._sources?.merge?.results??[]).filter(t=>t.bundleId===this._parent.id):(this._sources?.link?.reports??[]).filter(t=>this._current.kind==="workspace"?this._parent.reports.includes(t.id):t.repoIds.includes(this._parent.id)):[]}get selection(){let t=this._parent;return{mode:this.mode,source:t?{kind:this._current.kind,id:t.id,label:t.label??t.filename}:null,inputs:this._loading||this._error?[]:this._inputs.filter(r=>this._current.ids.has(r.id))}}_notify(){this.dispatchEvent(new CustomEvent("report-inputs-change",{detail:this.selection,bubbles:!0,composed:!0}))}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let r=!1,n=o=>{if(t.signal.aborted)return;let i=!r;r=!0,this._sources=o,i&&(this._merge=Ju("bundle"),this._link=Ju(Array.isArray(o.link?.workspaces)?"workspace":"repository")),this._selectOnlySource(),i&&this._restore(),this._loading=!1,this._notify()};try{n(this.loadSources?await this.loadSources(t.signal,n):{merge:{bundles:[],results:[]},link:{repositories:[],reports:[]}})}catch(o){!t.signal.aborted&&!r&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_setCurrent(t){this.mode==="merge"?this._merge=t:this._link=t}_selectSource(t){t===this._current.sourceId||!this._parents.some(r=>r.id===t)||(this._setCurrent({...this._current,sourceId:t,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.map(r=>r.id))}),this._notify())}_changeKind(t){["workspace","repository"].includes(t)&&(t==="workspace"&&!Array.isArray(this._sources?.link?.workspaces)||(t!==this._link.kind&&(this._link=Ju(t)),this._selectOnlySource(),this._notify()))}_selectOnlySource(){this.mode==="link"&&this._current.sourceId==null&&this._parents.length===1&&this._selectSource(this._parents[0].id)}_toggle(t,r){if(!this._inputs.some(o=>o.id===t))return;let n=new Set(this._current.ids);r?n.add(t):n.delete(t),this._setCurrent({...this._current,ids:n}),this._notify()}_selectAll(t){this._setCurrent({...this._current,ids:new Set(t?this._inputs.map(r=>r.id):[])}),this._notify()}_restore(){let t=this.restore;if(!this._sources||t?.mode!==this.mode||!t.source)return;let r=this.mode==="merge"?"bundle":t.source.kind;this.mode==="link"&&(r==="workspace"?!Array.isArray(this._sources.link?.workspaces):r!=="repository")||(this._setCurrent({kind:r,sourceId:t.source.id,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(n=>t.inputIds.includes(n.id)).map(n=>n.id))}))}render(){let t=this.mode==="merge",r=this._inputs,n=r.filter(s=>this._current.ids.has(s.id)).length,o=Array.isArray(this._sources?.link?.workspaces),i=this._parent?t?"No scan results for this bundle.":`No saved reports in this ${this._current.kind}.`:t?"Choose a bundle to see its scan results.":this._parents.length===0?"No saved reports with app findings.":`Choose a ${this._current.kind} to see its saved reports.`;return d`<section class="panel" aria-label="${t?"Merge scan results":"Link saved reports"}" aria-busy="${this._loading}"><div class="source">${!t&&o?d`<div class="kinds" role="radiogroup" aria-label="Report source">${[["workspace","Workspace"],["repository","Repository"]].map(([s,a])=>d`<button type="button" role="radio" aria-checked="${s===this._link.kind}" @click="${()=>this._changeKind(s)}">${a}</button>`)}</div>`:m}<div class="field">${t?d`<span>Bundle with scan results</span>`:m} ${t?d`<bundle-selector .bundles="${this._parents}" .value="${this._current.sourceId}" ?disabled="${this._loading||this._parents.length===0}" @bundle-change="${s=>this._selectSource(s.detail.value)}"></bundle-selector>`:this._current.kind==="workspace"?d`<workspace-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @workspace-change="${s=>this._selectSource(s.detail.value)}"></workspace-selector>`:d`<repository-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @repository-change="${s=>this._selectSource(s.detail.value)}"></repository-selector>`}</div></div><div class="input-results">${this._error?d`<p class="empty" role="alert">Couldn’t load report inputs: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:this._loading&&this._sources==null?d`<p class="empty" role="status">Loading report inputs…</p>`:r.length>0?d`<div class="list-head"><label><input type="checkbox" aria-label="Select all" ?disabled="${this._loading}" .checked="${n===r.length}" .indeterminate="${n>0&&n<r.length}" @change="${s=>this._selectAll(s.target.checked)}"><strong>All</strong></label><span>${n} of ${r.length} selected</span></div><div class="list">${r.map(s=>this._row(s))}</div>`:d`<p class="empty">${t&&this._parents.length===0?"No scan results available.":i}</p>`}</div></section>`}_row(t){let r=this.mode==="link"?t.appFindings:t.findings,n=[t.model?ca(t.model):null,r==null?null:`${r} ${this.mode==="link"?"app ":""}${r===1?"finding":"findings"}`,t.createdAt,t.repo?`${t.repo}${t.directory?`/${t.directory}`:""}`:null].filter(Boolean);return d`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(t.id)}" @change="${o=>this._toggle(t.id,o.target.checked)}">${V(nu[t.analyzer]??nu.default)}<span class="copy"><strong>${t.title??t.filename}</strong><span>${n.join(" \xB7 ")}</span></span></label>`}static styles=Te`:host{display:block;min-width:0}*{box-sizing:border-box}button,.field>span,.list-head,.empty:not([role=alert]){cursor:default;user-select:none;-webkit-user-select:none}.panel{border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);overflow:hidden}.source{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;padding:.85rem .9rem;border-bottom:1px solid var(--border)}.field{display:grid;flex:1 1 14rem;gap:.3rem;max-width:32rem;min-width:0}.field>span{color:var(--muted);font-size:.72rem}button{padding:.3rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit;font-size:.74rem;cursor:default}.kinds{display:flex;width:fit-content;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);overflow:hidden}.kinds button{padding-block:.5rem;border:0;border-radius:0;color:var(--muted)}.kinds button+button{border-left:1px solid var(--border)}.kinds button[aria-checked=true]{color:var(--text);background:var(--surface-active)}.list-head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.55rem .9rem;border-bottom:1px solid var(--border)}.list-head label{display:flex;align-items:center;gap:.55rem;user-select:none}.list-head strong{color:var(--text);font-size:.74rem;font-weight:600}.list-head>span{color:var(--muted);font-size:.68rem}.input-results{height:16rem;display:flex;flex-direction:column;overflow:auto}.list{min-height:0;overflow:auto;overscroll-behavior:none}.option{display:flex;align-items:center;gap:.55rem;min-width:0;padding:.35rem .9rem;user-select:none}.option+.option{border-top:1px solid var(--border)}.option:hover{background:var(--surface-active)}input{width:.85rem;height:.85rem;margin:0;flex:0 0 auto;accent-color:var(--accent)}.file-icon{width:1.4rem;height:1.4rem;flex:0 0 auto}.copy{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex:1;min-width:0}.copy strong,.copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy strong{flex:1;color:var(--text);font-size:.74rem;font-weight:500}.copy span{max-width:55%;color:var(--muted);font-size:.66rem}.empty{margin:0;padding:1rem .9rem;color:var(--muted);font-size:.76rem}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}`};customElements.get("scan-report-inputs")||customElements.define("scan-report-inputs",Pk)});var DU,zU,Dk,zk=k(()=>{"use strict";T();DU=d`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,zU=d`<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="m10.5 10.5 3 3M7 5v4M5 7h4"/></svg>`,Dk=class extends J{static properties={isolate:{type:Boolean},vertical:{type:Boolean,reflect:!0}};constructor(){super(),this.isolate=!1,this.vertical=!1}_select(t){this.isolate!==t&&(this.isolate=t,this.dispatchEvent(new CustomEvent("depth-change",{detail:{isolate:t},bubbles:!0,composed:!0})))}render(){return d`<div class="scan-depth"><div class="depth-options" role="radiogroup" aria-label="Scan depth" aria-orientation="${this.vertical?"vertical":"horizontal"}" aria-describedby="${this.vertical?m:"scan-depth-description"}">${[[!1,"List",DU],[!0,"Isolate",zU]].map(([t,r,n])=>d`<label class="depth-choice"><input type="radio" name="scan-depth" value="${t?"isolate":"list"}" .checked="${this.isolate===t}" @change="${()=>this._select(t)}"><span>${n}${r}</span></label>`)}</div>${this.vertical?m:d`<div class="depth-description" id="scan-depth-description" aria-live="polite"><span class="${this.isolate?"inactive":""}" aria-hidden="${this.isolate}">Regular scan depth</span><span class="${this.isolate?"":"inactive"}" aria-hidden="${!this.isolate}">Deeper search at ~10x the tokens spent</span></div>`}</div>`}static styles=Te`:host{display:block;width:19rem;max-width:100%;min-width:0}*{box-sizing:border-box}.scan-depth{display:grid;gap:.4rem;width:100%;min-width:0;user-select:none}.depth-options{display:flex;position:relative;padding:.2rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg)}.depth-options:before{content:"";position:absolute;inset:.2rem auto .2rem .2rem;width:calc((100% - .4rem)/2);border-radius:var(--ui-radius, 5px);background:var(--surface-active);box-shadow:0 1px 3px #0000001f,inset 0 0 0 1px rgb(from var(--accent) r g b / .18);transition:transform .16s ease-out}.depth-options:has(input[value=isolate]:checked):before{transform:translate(100%)}.depth-choice{position:relative;flex:1;min-width:0}.depth-choice input{position:absolute;width:1px;height:1px;opacity:0}.depth-choice span{display:flex;align-items:center;justify-content:center;gap:.4rem;height:1.9rem;padding:.3rem .65rem;border-radius:var(--ui-radius, 5px);color:var(--muted);font-size:.76rem;font-weight:500;transition:color .12s}.depth-choice svg{width:.95rem;height:.95rem;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.depth-choice:hover span{color:var(--text)}.depth-choice input:checked+span{color:var(--accent)}.depth-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.depth-description{display:grid;color:var(--muted);font-size:.68rem;line-height:1.4}.depth-description span{grid-area:1 / 1}.depth-description .inactive{visibility:hidden}@media(prefers-reduced-motion:reduce){.depth-options:before,.depth-choice span{transition:none}}:host([vertical]){width:5.8rem}:host([vertical]) .depth-options{flex-direction:column}:host([vertical]) .depth-options:before{inset:.2rem .2rem auto;width:auto;height:calc((100% - .4rem)/2)}:host([vertical]) .depth-options:has(input[value=isolate]:checked):before{transform:translateY(100%)}:host([vertical]) .depth-choice span{justify-content:flex-start;height:1.7rem;padding:.25rem .5rem;font-size:.72rem}`};customElements.get("scan-depth-toggle")||customElements.define("scan-depth-toggle",Dk)});function NA(e){let t=e[0];return t?.model&&e.every(r=>r.model===t.model&&r.effort===t.effort)?{model:t.model,effort:t.effort}:null}function PA(e,t){let r=t.models.find(n=>n.id===e?.model)??t.models.find(n=>n.id===t.defaultModel)??t.models[0];return r?{model:r.id,effort:r.efforts.includes(e?.effort)?e.effort:Zl(r)}:null}function Hk(e,t){let r=t.models.find(n=>n.id===t.defaultModel)??t.models[0];return r?(e.length>0?e:[{mode:"generic",isolate:!1}]).map(n=>{let o=t.models.find(i=>i.id===n.model)??r;return{...n,mode:Uk.includes(n.mode)?n.mode:"generic",model:o.id,effort:o.efforts.includes(n.effort)?n.effort:Zl(o),isolate:!!n.isolate}}):[]}function jk(e){let t=new Set;return e.map(r=>{let n=UU(r),o=t.has(n);return t.add(n),o})}var Uk,UU,DA=k(()=>{"use strict";Hi();Uk=["security","generic","correctness"],UU=e=>JSON.stringify([e.mode,e.model,e.effort,e.isolate])});var Vk,zA=k(()=>{"use strict";T();dr();Pt();Ik();zk();Hi();DA();Vk=class extends J{static properties={value:{attribute:!1},loadModels:{attribute:!1},appModel:{attribute:!1},appModelAutomatic:{attribute:!1},_rows:{state:!0},_loading:{state:!0},_error:{state:!0},_resolvedAppModel:{state:!0},_appModelOpen:{state:!0}};constructor(){super(),this.value=[],this.appModel=null,this.appModelAutomatic=!0,this._resolvedAppModel=null,this._appModelOpen=!1,this._appModelsAgree=!0,this._rows=[],this._catalogue={models:[]},this._nextId=0,this._loading=!0,this._error=null}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(t){if(t.has("loadModels")){this._load();return}t.has("value")&&this.value!==this._lastEmitted&&!this._loading?(this._setRows(this.value),this._notify()):(t.has("appModel")||t.has("appModelAutomatic"))&&!this._loading&&this._notify()}_setRows(t){this._rows=Hk(t,this._catalogue).map(r=>({...r,id:r.id??++this._nextId}))}_notify(){let t=this._loading&&this._rows.length===0?this.value:this._rows.map(({id:n,...o})=>o);this._loading||this._syncAppModel();let r=!this._loading&&!this._error&&this._resolvedAppModel!=null&&t.length>0&&!jk(t).includes(!0);this._lastEmitted=t,this.dispatchEvent(new CustomEvent("regimes-change",{detail:{value:t,ready:r,appModel:this._resolvedAppModel??this.appModel,appModelAutomatic:this.appModelAutomatic},bubbles:!0,composed:!0}))}_syncAppModel(){let t=NA(this._rows),r=PA((this.appModelAutomatic?t:null)??this.appModel??this._rows[0],this._catalogue);(this.appModel?.model!==r?.model||this.appModel?.effort!==r?.effort)&&(this.appModel=r),this._resolvedAppModel=this.appModel;let n=!!t&&t.model===r?.model&&t.effort===r?.effort;n!==this._appModelsAgree&&(this._appModelOpen=!n),this._appModelsAgree=n}_changeAppModel(t){t.model===this._resolvedAppModel?.model&&t.effort===this._resolvedAppModel?.effort||(this.appModelAutomatic=!1,this.appModel={model:t.model,effort:t.effort},this._notify())}async _load(){this._controller?.abort();let t=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let r=!1,n=o=>{t.signal.aborted||(r=!0,this._catalogue=o,this._sharedModels=()=>Promise.resolve(o),this._setRows(this._rows.length>0?this._rows:this.value),this._loading=!1,this._notify())};try{n(await this.loadModels(t.signal,n))}catch(o){!t.signal.aborted&&!r&&(this._error=String(o?.message??o))}finally{t.signal.aborted||(this._loading=!1,this._notify())}}_change(t,r){let n=this._rows.find(i=>i.id===t);if(!n)return;let o=Hk([{...n,...r}],this._catalogue)[0];o&&(this._rows=this._rows.map(i=>i.id===t?o:i),this._notify())}_add(){let t=this._rows.at(-1);t&&(this._rows=[...this._rows,{...t,id:++this._nextId}],this._notify())}_remove(t){this._rows.length<=1||(this._rows=this._rows.filter(r=>r.id!==t),this._notify())}render(){let t=this._loading&&this._rows.length===0,r=t?(this.value.length>0?this.value:[{mode:"generic",isolate:!1}]).map((o,i)=>({...o,id:`pending-${i}`})):this._rows,n=jk(this._rows);return d`<section aria-label="Scan regimes" aria-busy="${this._loading}"><div class="heading"><h2>Scan regimes</h2><span>${r.length} ${r.length===1?"regime":"regimes"}</span></div>${this._error?d`<p class="message" role="alert">Couldn’t load models: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:m} ${oe(r,o=>o.id,(o,i)=>this._row(o,i,n[i],t))}<div class="footer"><button type="button" class="add" ?disabled="${this._loading||this._rows.length===0}" @click="${this._add}"><span aria-hidden="true">+</span> Add regime</button><span class="message" role="status">${n.includes(!0)?"Change or remove duplicate regimes to run the scan":"Results from these regimes will be merged"}</span></div>${t?d`<div class="app-model"><div class="app-model-placeholder">App model: Loading…</div></div>`:this._appModelRow()}</section>`}_appModelRow(){let t=this._resolvedAppModel;return t?d`<details class="app-model" .open="${ke(this._appModelOpen)}" @toggle="${r=>{this._appModelOpen=r.currentTarget.open}}"><summary><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><span class="app-model-name">App model: <strong>${ca(t.model)}</strong></span><span class="app-model-effort">Effort: <strong>${da(t.effort)}</strong></span></summary><div class="app-model-controls"><scan-model-picker .loadModels="${this._sharedModels}" .value="${ke(t.model)}" .effort="${ke(t.effort)}" @model-change="${r=>{r.stopPropagation(),this._changeAppModel(r.detail)}}"></scan-model-picker></div></details>`:m}_row(t,r,n,o=!1){return d`<div class="${`row${n?" duplicate":""}`}" ?inert="${o}" role="group" aria-label="${`Regime ${r+1}`}" aria-describedby="${n?`duplicate-${t.id}`:m}"><div class="mode" role="radiogroup" aria-label="Scan mode">${Uk.map(i=>d`<label class="mode-choice"><input type="radio" name="${`regime-mode-${t.id}`}" .checked="${t.mode===i}" @change="${()=>this._change(t.id,{mode:i})}"><span>${i[0].toUpperCase()+i.slice(1)}</span></label>`)}</div><scan-model-picker .pending="${o}" .loadModels="${this._sharedModels}" .value="${ke(t.model)}" .effort="${ke(t.effort)}" @model-change="${i=>{i.stopPropagation(),this._change(t.id,i.detail)}}"></scan-model-picker><div class="row-actions"><scan-depth-toggle vertical .isolate="${t.isolate}" @depth-change="${i=>{i.stopPropagation(),this._change(t.id,{isolate:i.detail.isolate})}}"></scan-depth-toggle>${n?d`<span class="duplicate-label" id="${`duplicate-${t.id}`}">Duplicate regime</span>`:m}</div><button type="button" class="remove" aria-label="${`Remove regime ${r+1}`}" ?disabled="${this._rows.length===1}" @click="${()=>this._remove(t.id)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button></div>`}static styles=Te`:host{display:block;min-width:0;container:regime-editor / inline-size}*{box-sizing:border-box}.heading{display:flex;align-items:baseline;gap:.65rem;margin-bottom:.75rem}h2{margin:0;color:var(--text);font-size:.85rem;font-weight:600}.heading>span{color:var(--muted);font-size:.7rem}.row{position:relative;display:grid;grid-template-columns:7.75rem minmax(0,1fr) 5.8rem;align-items:start;gap:1rem;padding:.85rem 0;border-top:1px solid var(--border)}.mode{display:grid;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;background:var(--bg)}.mode-choice{position:relative;user-select:none}.mode-choice+.mode-choice{border-top:1px solid var(--border)}.mode-choice input{position:absolute;width:1px;height:1px;opacity:0}.mode-choice span{display:block;padding:.2rem .6rem;color:var(--muted);font-size:.72rem;line-height:1.15rem}.mode-choice:hover span{background:var(--surface-active)}.mode-choice input:checked+span{color:var(--accent);background:rgb(from var(--accent) r g b / .1);box-shadow:inset 2px 0 var(--accent);font-weight:600}.mode-choice input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}button{border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit;font-size:.74rem;cursor:default}button{padding:.4rem .55rem;user-select:none}button:hover:not(:disabled){background:var(--surface-active)}button:disabled{opacity:.35}.row-actions{position:relative;display:flex;align-items:center;align-self:stretch;min-height:4.65rem;padding:.8rem 0 .25rem}.remove{position:absolute;top:.15rem;right:0;display:grid;place-items:center;width:1.5rem;height:1.5rem;padding:.25rem;border:0;background:transparent;color:var(--muted)}.duplicate-label{position:absolute;right:.15rem;bottom:-.05rem;transform:rotate(-7deg);padding:.1rem .3rem;border:1px solid rgb(from var(--critical, #e5534b) r g b / .45);border-radius:3px;color:var(--critical, #e5534b);background:var(--surface);font-size:.6rem;line-height:1rem;white-space:nowrap;pointer-events:none;user-select:none}svg{width:1rem;height:1rem}.footer{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;padding-top:.6rem;border-top:1px solid var(--border)}.add{display:flex;align-items:center;gap:.3rem}.app-model{margin-top:.7rem;border-top:1px solid var(--border)}.app-model-placeholder{padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem}.app-model>summary{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .8rem;padding:.65rem 0 .1rem;color:var(--muted);font-size:.74rem;list-style:none;cursor:default;user-select:none}.app-model>summary::-webkit-details-marker{display:none}.app-model>summary:hover{color:var(--text)}.app-model>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 3px)}.app-model>summary svg{width:.8rem;height:.8rem;flex:0 0 .8rem}.app-model[open]>summary svg{transform:rotate(90deg)}.app-model strong{color:var(--text);font-weight:500}.app-model-name{min-width:0;overflow-wrap:anywhere}.app-model-effort{white-space:nowrap}.app-model-controls{padding:.85rem 0 .15rem}.message{margin:0;color:var(--muted);font-size:.7rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container regime-editor (max-width: 54rem){.row{grid-template-columns:minmax(0,1fr) 5.8rem}scan-model-picker{grid-row:2;grid-column:1 / -1}.mode{grid-column:1;max-width:9rem}.row-actions{grid-column:2}}`};customElements.get("scan-regime-editor")||customElements.define("scan-regime-editor",Vk)});var HA,UA=k(()=>{HA=`:host{display:block;min-width:0;color:var(--text);container:mode-selector / inline-size}*{box-sizing:border-box}section{overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface)}header{display:flex;align-items:baseline;gap:.8rem;padding:.85rem 1rem .7rem}h2{margin:0;font-size:.86rem;font-weight:600}header>span{color:var(--muted);font-size:.73rem}fieldset{min-width:0;margin:0;padding:0;border:0}.modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;padding:0 1rem .9rem}.mode{position:relative;display:flex;align-items:flex-start;gap:.55rem;padding:.7rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);background:var(--bg);cursor:default;text-align:left}.mode:hover{background:var(--surface-active)}.mode:has(:checked){border-color:rgb(from var(--accent) r g b / .6);background:rgb(from var(--accent) r g b / .07)}input{position:absolute;width:1px;height:1px;opacity:0;margin:0}.mode:has(:focus-visible),.subtype-option:has(:focus-visible){outline:2px solid var(--accent);outline-offset:3px}.mode-icon{display:flex;flex-shrink:0;color:var(--muted);padding-top:.1rem}.mode-icon svg{width:1rem;height:1rem}.mode-copy{display:grid;min-width:0;gap:.35rem;padding-right:.55rem}.mode-copy strong{font-size:.78rem;font-weight:500;line-height:1.3}.mode-copy>span{color:var(--muted);font-size:.69rem;line-height:1.4}.mode:has(:checked) .mode-copy strong,.mode:has(:checked) .mode-icon{color:var(--accent)}.indicator{position:absolute;right:.55rem;top:.75rem;width:.55rem;height:.55rem;border:1px solid var(--muted);border-radius:50%;opacity:.5}.mode:has(:checked) .indicator{border-color:var(--accent);background:var(--accent);box-shadow:inset 0 0 0 2px var(--bg);opacity:1}.subtype-wrap{border-top:1px solid var(--border);background:rgb(from var(--accent) r g b / .025)}.subtype-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem;padding:.7rem .9rem .45rem}.report-subtypes{grid-template-columns:repeat(2,minmax(0,1fr));padding-bottom:.7rem}.subtype-option{position:relative;display:grid;gap:.12rem;padding:.42rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--muted);background:var(--bg);text-align:left}.subtype-option strong{color:var(--text);font-size:.72rem;font-weight:500}.subtype-option span{font-size:.62rem}.subtype-option:has(:checked){border-color:rgb(from var(--accent) r g b / .55);background:rgb(from var(--accent) r g b / .1)}.subtype-option:has(:checked) strong{color:var(--accent)}.subtype-help{margin:0;padding:.15rem .9rem .72rem;color:var(--muted);font-size:.68rem;line-height:1.4}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@container mode-selector (max-width: 48rem){.modes,.subtype-options{grid-template-columns:repeat(2,minmax(0,1fr))}}@container mode-selector (max-width: 30rem){.mode-icon{display:none}header>span{display:none}}
|
|
134
|
+
`});var jU,VU,WU,Wk,jA=k(()=>{"use strict";T();Je();gt();UA();jU=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Oh},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:h3},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:m3},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:El}],VU=[{id:"generic",label:"Generic",detail:"Free-form code scan: wide-scoped, most results"},{id:"security",label:"Security",detail:"Security findings only"},{id:"correctness",label:"Correctness",detail:"Guided correctness scan"},{id:"advanced",label:"Advanced",detail:"Merge multiple regimes"}],WU=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],Wk=class extends J{static properties={mode:{},analyzer:{},reportMode:{}};static styles=F(HA);constructor(){super(),this.mode="code",this.analyzer="generic",this.reportMode="link"}_choose(t,r){this.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0}))}render(){let t=this.mode==="code",r=this.mode==="report",n=t?VU:WU,o=t?this.analyzer:this.reportMode;return d`<section aria-labelledby="mode-heading"><header><h2 id="mode-heading">Scan mode</h2><span>Choose what the server should analyze</span></header><fieldset class="modes"><legend class="sr-only">Scan mode</legend>${jU.map(i=>d`<label class="mode"><input type="radio" name="scan-mode" .checked="${this.mode===i.id}" aria-label="${i.label}" @change="${()=>this._choose("scan-mode-change",{mode:i.id})}"> <span class="mode-icon" aria-hidden="true">${V(i.icon)}</span> <span class="mode-copy"><strong>${i.label}</strong><span>${i.detail}</span></span> <span class="indicator" aria-hidden="true"></span></label>`)}</fieldset>${t||r?d`<div class="subtype-wrap"><fieldset class="${`subtype-options ${r?"report-subtypes":""}`}"><legend class="sr-only">${t?"Code subtype":"Reports submode"}</legend>${n.map(i=>d`<label class="subtype-option"><input type="radio" name="scan-focus" .checked="${o===i.id}" aria-label="${i.label}" @change="${()=>t?this._choose("scan-analyzer-change",{analyzer:i.id}):this._choose("scan-report-mode-change",{mode:i.id})}"> <strong>${i.label}</strong><span>${i.detail}</span></label>`)}</fieldset>${t?d`<p class="subtype-help">Focusing controls how effort is spent: while Generic can also find security issues, a focused Security scan is likely to find more.</p>`:m}</div>`:m}</section>`}};customElements.get("scan-mode-selector")||customElements.define("scan-mode-selector",Wk)});var VA,WA=k(()=>{"use strict";T();VA=Te`:host{display:block;box-sizing:border-box;color:var(--text)}*{box-sizing:border-box}.wrap{max-width:76rem;margin:0 auto;container:scan-page / inline-size}.head{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;min-height:2.1rem;margin-bottom:.45rem}.head-title{display:flex;align-items:center;gap:.65rem}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}h1{margin:0;font-size:1.65rem;font-weight:600;letter-spacing:-.035em}.head-tabs{display:inline-flex;flex-shrink:0;margin-left:auto;margin-block:calc(-.25rem - 1px);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden}.head-tabs button{border:0;border-right:1px solid var(--border);padding:.25rem .6rem;color:var(--muted);background:transparent;font:inherit;font-size:.75rem;line-height:1.5}.head-tabs button:last-child{border-right:0}.head-tabs button.active{color:var(--text);background:var(--surface-active)}.head-tabs button:hover{color:var(--text)}.source-choice.single-repository{grid-template-columns:1fr}.head-actions{margin-left:auto;display:flex;gap:.45rem}button,select,input{font:inherit}button,summary,select,h1,.intro,.panel-head,.pane-head,.field>span,.field label,.bundle-label,.bundle-stats,.check,.switch,.offline-help,.empty,.choice-empty{cursor:default;user-select:none;-webkit-user-select:none}input:not([type=checkbox],[type=radio]),textarea{cursor:text;user-select:text;-webkit-user-select:text}a{cursor:default;text-decoration:none}button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.intro-row{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem 1rem;margin-bottom:1.15rem}.intro{margin:0;max-width:52rem;color:var(--muted);font-size:.82rem;line-height:1.5}:host([hide-heading]) .intro-row{gap:.5rem 1rem;margin-bottom:1.25rem}:host([hide-heading]) .intro{max-width:46rem;font-size:.875rem;line-height:1.65}.intro span{display:block}.notice{margin:0 0 1rem;padding:.55rem .7rem;border:1px solid rgb(from var(--accent) r g b / .35);border-radius:var(--ui-radius, 7px);color:var(--text);background:rgb(from var(--accent) r g b / .08);font-size:.78rem}.setup{display:grid;gap:.85rem}.panel{border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);overflow:hidden}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:.7rem;padding:.72rem .9rem;border-bottom:1px solid var(--border)}.panel-head h2{margin:0;font-size:.86rem;font-weight:600}.panel-head p{margin:0;color:var(--muted);font-size:.72rem}.bundle-choice{display:grid;grid-template-columns:minmax(16rem,1.2fr) minmax(0,1fr);gap:1rem;align-items:end;padding:.85rem .9rem}.field{display:grid;gap:.3rem;min-width:0}.source-choice>.field>span,.bundle-label{height:1.25rem}.bundle-label{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-width:0}.create-bundle-button{display:inline-flex;align-items:center;flex:none;height:1.25rem;padding:0 calc(.4rem + 1px);border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent;font-size:.65rem;white-space:nowrap}.create-bundle-button:hover{color:var(--text);background:var(--surface-active)}.create-bundle-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.field label,.scope-field>span{color:var(--muted);font-size:.68rem}select{min-width:0;height:2rem;padding:.28rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font-size:.76rem}.bundle-stats{display:grid;grid-template-columns:repeat(4,max-content);align-items:center;gap:.45rem 1.1rem;min-width:0}.metric{display:inline-flex;align-items:center;gap:.3rem;min-width:0;white-space:nowrap}.metric svg{flex:0 0 auto;width:.85rem;height:.85rem;margin-right:.1rem;color:var(--muted)}.metric strong{min-width:0;overflow:hidden;text-overflow:ellipsis;font-size:.72rem;font-weight:600;font-variant-numeric:tabular-nums}.metric span{color:var(--muted);font-size:.7rem}.source-choice{display:grid;grid-template-columns:minmax(12rem,.8fr) minmax(16rem,1.2fr);gap:.7rem;align-items:end;padding:.85rem .9rem}.source-footer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.7rem 1rem;grid-column:1 / -1;min-width:0}.scope-slot{justify-self:end;width:min(34rem,100%);min-height:2rem}.source-footer .bundle-stats{min-height:2rem}.choice-empty{display:flex;align-items:center;height:2rem;padding:.28rem .5rem;border:1px dashed var(--border);border-radius:var(--ui-radius, 5px);color:var(--muted);background:var(--bg);font-size:.72rem}.choice-empty a{margin-left:.4rem;color:var(--accent);white-space:nowrap}.choice-empty a:hover{color:var(--text)}.choice-empty a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--ui-radius, 2px)}.scope-head{display:flex;align-items:center;gap:.55rem;padding:.72rem .9rem;list-style:none;cursor:default;user-select:none}.scope-head::-webkit-details-marker{display:none}.scope-head:hover{background:var(--surface-active)}.scope-head:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;border-radius:var(--ui-radius, 8px)}.scope-chevron{width:.85rem;height:.85rem;flex:0 0 auto;transition:transform .15s}.scope-panel[open] .scope-chevron{transform:rotate(90deg)}.scope-panel[open] .scope-head{border-bottom:1px solid var(--border)}.scope-head h2{margin:0;font-size:.86rem;font-weight:600}.scope-head p{display:flex;flex-wrap:wrap;justify-content:end;gap:.15rem .65rem;margin:0 0 0 auto;color:var(--muted);font-size:.7rem;font-variant-numeric:tabular-nums;text-align:right}.scope-head p span{white-space:nowrap}.scope-head p span+span{padding-left:.65rem;border-left:1px solid var(--border)}.scope-grid{display:grid;grid-template-columns:minmax(13rem,.75fr) minmax(0,1.25fr);min-height:0}.scope-pane{min-width:0}.scope-pane+.scope-pane{border-left:1px solid var(--border)}.pane-head{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;padding:.55rem .75rem;border-bottom:1px solid var(--border)}.pane-head strong{font-size:.72rem;font-weight:600}.pane-head span{color:var(--muted);font-size:.65rem;font-variant-numeric:tabular-nums}.package-list{max-height:22rem;overflow:auto;overscroll-behavior:none}.package-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.45rem;width:100%;padding:.42rem .7rem;border:0;border-bottom:1px solid var(--border);color:var(--text);background:transparent;text-align:left}.package-row:hover{background:var(--surface-active)}.package-row input,.file input{width:.85rem;height:.85rem;accent-color:var(--accent)}.package-name,.package-size{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.package-name{font-size:.7rem}.package-size{color:var(--muted);font-size:.64rem;font-variant-numeric:tabular-nums}.package-row.excluded .package-name{color:var(--muted);text-decoration:line-through}.file-panel{min-width:0}.file-list{display:grid;grid-template-columns:minmax(0,1fr);max-height:22rem;overflow:auto;overscroll-behavior:none}.file{display:flex;align-items:center;gap:.45rem;min-width:0;padding:.35rem .75rem;border-bottom:1px solid var(--border)}.file input{flex:0 0 auto}.file-copy{display:flex;align-items:center;gap:.75rem;flex:1;min-width:0}.file-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem}.file-meta{flex:0 1 auto;min-width:0;max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.66rem;font-variant-numeric:tabular-nums}.excluded .file-path{color:var(--muted);text-decoration:line-through}.file-foot{display:flex;justify-content:space-between;gap:.6rem;padding:.6rem .8rem;color:var(--muted);font-size:.7rem}.options{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:1rem;position:relative;z-index:2;overflow:visible;padding:.85rem .9rem 1rem}.options-grid{display:grid;grid-column:1 / -1;gap:.7rem;min-width:0}.checks{position:relative;display:grid;grid-column:2;grid-row:3;align-content:center;justify-items:end;margin-top:1rem}.offline-help{position:absolute;top:calc(50% + .75rem);right:0;color:var(--muted);font-size:.66rem;line-height:1.4;white-space:nowrap}.check{display:inline-flex;align-items:center;gap:.4rem;color:var(--text);font-size:.75rem}.check input{width:.85rem;height:.85rem;accent-color:var(--accent)}.switch{display:inline-flex;align-items:center;gap:.45rem;color:var(--text);font-size:.74rem;cursor:default}.switch input{position:var(--switch-input-position, absolute);width:var(--switch-input-size, 1px);height:var(--switch-input-size, 1px);opacity:var(--switch-input-opacity, 0);margin:0;accent-color:var(--accent)}.switch-track{display:var(--switch-track-display, block);position:relative;width:2rem;height:1.1rem;border-radius:var(--ui-radius, 999px);background:var(--surface-active);transition:background .12s}.switch-track:after{content:"";position:absolute;top:.15rem;left:.15rem;width:.8rem;height:.8rem;border-radius:50%;background:var(--muted);transition:transform .12s,background .12s}.switch input:checked+.switch-track{background:rgb(from var(--accent) r g b / .4)}.switch input:checked+.switch-track:after{transform:translate(.9rem);background:var(--accent)}.checks .switch input:checked+.switch-track{background:rgb(from var(--critical, #e5534b) r g b / .3)}.checks .switch input:checked+.switch-track:after{background:var(--critical, #e5534b)}.switch input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:2px}.options-footer{display:flex;flex-wrap:wrap;grid-column:1;grid-row:3;align-items:end;gap:.7rem;min-width:0;margin-top:1rem}.options-footer slot[name=before-run]{display:contents}.agentic-fields{display:grid;gap:.65rem;padding:.85rem .9rem 1rem}.agentic-panel .panel-head{align-items:center}.prompt-row{display:flex;align-items:start;gap:.4rem;min-width:0}.prompt-row textarea{flex:1;width:0}.prompt-action{display:grid;place-items:center;flex:0 0 auto;width:1.5rem;height:1.5rem;padding:.25rem;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.prompt-action:hover{color:var(--text);background:var(--surface-active)}.prompt-action svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:1.4}textarea{min-width:0;resize:vertical;padding:.4rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit;font-size:.76rem}.run{padding:.48rem .8rem;border:0;border-radius:var(--ui-radius, 6px);color:var(--bg);background:var(--accent);font-size:.8rem;font-weight:600}.run:disabled{opacity:.45}.summary{align-self:end;padding-block:.48rem;color:var(--muted);font-size:.74rem}.history{display:grid;gap:.6rem}.scan-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:1rem;padding:.85rem .9rem}.scan-row+.scan-row{border-top:1px solid var(--border)}.scan-main{min-width:0}.scan-title{display:flex;align-items:center;gap:.45rem;min-width:0}.scan-title strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem}.scan-meta{display:block;margin-top:.25rem;color:var(--muted);font-size:.7rem}.status{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .4rem;border-radius:999px;font-size:.66rem;font-weight:600;text-transform:capitalize}.status:before{content:"";width:.4rem;height:.4rem;border-radius:50%;background:currentColor}.status.running{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.status.completed{color:#48b878;background:#48b8781a}.status.stopped{color:var(--muted);background:var(--surface-active)}.scan-actions{display:flex;align-items:center;gap:.45rem}.action{padding:.35rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font-size:.72rem;white-space:nowrap}.action:hover{border-color:var(--muted);background:var(--surface-active)}.empty{margin:0;padding:1.2rem;color:var(--muted);font-size:.8rem}@container scan-page (max-width: 48rem){.bundle-choice,.source-choice,.source-footer{grid-template-columns:1fr;gap:.7rem}.scope-grid{grid-template-columns:1fr}.scope-pane+.scope-pane{border-top:1px solid var(--border);border-left:0}}@container scan-page (max-width: 42rem){.options{display:block;padding-bottom:3rem}.checks{margin-top:.8rem}.offline-help{max-width:100%;white-space:normal}.options-footer{margin-top:.8rem}}@container scan-page (max-width: 34rem){.bundle-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem .65rem}.scope-head{flex-wrap:wrap}.scope-head p{flex-basis:100%;justify-content:start;margin-left:1.4rem;text-align:left}.scope-head p span{white-space:normal}.scope-head p span+span{padding-left:0;border-left:0}.scan-row{grid-template-columns:1fr;gap:.55rem}.scan-actions{justify-content:flex-start}.head-tabs{margin-left:0}}`});function KA(e){let t=e.filter(n=>n.id!=="all");if(t.length===0)return null;let r=new Map(t.map(n=>[String(n.id).replace(/^reason:/u,""),n]));return r.size!==t.length||[...r.keys()].some(n=>!GA.some(o=>o.key===n))?null:[{id:"",label:"All files",subtitle:"Everything"},...GA.filter(n=>r.has(n.key)).map(({key:n,...o})=>({...o,id:r.get(n).id,subtitle:n==="run"&&r.has("metro")?"Bundler and Node.js CLI":o.subtitle}))]}var GA,qA=k(()=>{"use strict";GA=[{key:"metro",label:"metro",subtitle:"Metro bundle contents"},{key:"run",label:"run",subtitle:"Node.js CLI"},{key:"add",label:"add",subtitle:"Manually added files"}]});var Gk,Zu=k(()=>{"use strict";T();dr();qA();Gk=class extends J{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value="",this.label="Choose scope"}_select(t){this.dispatchEvent(new CustomEvent("scope-change",{detail:{value:t},bubbles:!0,composed:!0}))}render(){let t=this.reasons.filter(o=>o.id!=="all");if(t.length===0)return m;let r=KA(t);if(!r)return d`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${ke(this.value==="all"?"":this.value)}" @change="${o=>this._select(o.target.value)}"><option value="">All files</option>${t.map(o=>d`<option value="${o.id}">${o.label??o.id}</option>`)}</select></label>`;let n=r.find(o=>o.id===this.value)??r[0];return d`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${r.map(o=>d`<label class="scope-option"><input type="radio" name="scope" value="${o.id}" .checked="${n.id===o.id}" @change="${()=>this._select(o.id)}"><span>${o.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${n.subtitle}</span></div>`}static styles=Te`:host{display:block;min-width:0}*{box-sizing:border-box}.scope-toggle,.scope-field{cursor:default;user-select:none;-webkit-user-select:none}.scope-toggle{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.4rem .7rem;min-width:0;min-height:2rem}.scope-options{display:flex;flex-shrink:0;min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);overflow:hidden;background:var(--bg)}.scope-option{position:relative;flex:1 0 auto}.scope-option+.scope-option{border-left:1px solid var(--border)}.scope-option input{position:absolute;width:1px;height:1px;opacity:0}.scope-option span{display:grid;place-items:center;height:calc(2rem - 2px);padding:.3rem .55rem;color:var(--muted);font-size:.74rem;white-space:nowrap}.scope-option:hover span{color:var(--text);background:var(--surface-active)}.scope-option input:checked+span{color:var(--text);background:var(--surface-active);font-weight:500}.scope-option input:focus-visible+span{outline:2px solid var(--accent);outline-offset:-2px}.scope-description{order:-1;min-width:0;color:var(--muted);font-size:.66rem;line-height:1rem;text-align:right}.scope-field{display:flex;align-items:center;justify-content:end;gap:.5rem;min-width:0;max-width:100%;margin-left:auto;color:var(--muted);font-size:.7rem}select{width:13rem;min-width:0;max-width:100%;padding:.35rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.76rem}:host([compact]) .scope-toggle{min-height:0;gap:.3rem .5rem}:host([compact]) .scope-option span{height:auto;padding:2px 8px;font-size:.68rem;line-height:1.2}:host([compact]) .scope-field{font-size:.68rem}:host([compact]) .scope-description{display:none}:host([compact]) select{width:auto;max-width:22ch;padding:2px 6px;font-size:.68rem;line-height:1.2}`};customElements.get("bundle-scope-selector")||customElements.define("bundle-scope-selector",Gk)});var YA,Kk,XA=k(()=>{"use strict";T();Je();dr();Pt();gt();Hi();Ik();sg();Ok();ag();OA();zA();zk();jA();WA();_l();Zu();YA={code:V(Oh),report:V(El)},Kk=class extends J{static properties={hideHeading:{type:Boolean,attribute:"hide-heading"},sourceLoading:{type:Boolean,attribute:!1},selection:{attribute:!1},scopeLabel:{type:String,attribute:"scope-label"},createBundleHref:{attribute:!1},source:{attribute:!1},loadBundle:{attribute:!1},loadModels:{attribute:!1},loadReportSources:{attribute:!1},canRun:{attribute:!1},_loadingBundle:{state:!0},_bundleError:{state:!0},_tab:{state:!0},_mode:{state:!0},_bundles:{state:!0},_repositories:{state:!0},_reportMode:{state:!0},_reportInput:{state:!0},_reportRestore:{state:!0},_scans:{state:!0},_selectedRepoId:{state:!0},_selectedBundleId:{state:!0},_reason:{state:!0},_excluded:{state:!0},_excludedModules:{state:!0},_prompts:{state:!0},_options:{state:!0},_regimes:{state:!0},_regimesReady:{state:!0},_appModel:{state:!0},_appModelAutomatic:{state:!0},_notice:{state:!0}};static styles=VA;constructor(){super(),this.loadModels=ng,this.canRun=!0,this.hideHeading=!1,this._tab="new",this._mode="code",this.source=null,this.selection=null,this.scopeLabel="Repository",this._pendingSelection=null,this.sourceLoading=!1,this.loadBundle=null,this._loadingBundle=!1,this._bundleError=null,this._bundles=[],this._repositories=[],this._reportMode="link",this._reportInput=null,this._reportRestore=null,this._scans=[],this._selectedRepoId=null,this._selectedBundleId=this._bundles[0]?.id??null,this._reason=this._bundles[0]?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._nextPromptId=1,this._prompts=[{id:1,text:""}],this._options={analyzer:"generic",model:null,effort:null,cached:!1,isolate:!1},this._regimes=[],this._appModel=null,this._appModelAutomatic=!0,this._regimesReady=!1,this._notice=null,this._timers=new Set}willUpdate(t){if(t.has("selection")&&(this._pendingSelection=this.selection),t.has("source")&&(this._bundles=this.source?.bundles??[],this._repositories=this.source?.repositories??[],this._scans=this.source?.scans??[]),t.has("source")||t.has("selection")){this._excluded=new Set,this._excludedModules=new Set;let r=this._repositories.find(i=>i.id===this._selectedRepoId),n=this._pendingSelection,o=n?this._bundles.find(i=>i.id===n.bundleId&&(n.repoId==null||i.repoId===n.repoId)):this._bundles.find(i=>i.id===this._selectedBundleId&&i.repoId===this._selectedRepoId)??(this.scopeLabel==="Workspace"?null:this._bundles.find(i=>i.id===this._selectedBundleId))??(r?this._bundles.find(i=>i.repoId===r.id):this._bundles[0]);this._selectedRepoId=o?.repoId??n?.repoId??r?.id??this._repositories[0]?.id??"unattached",this._selectedBundleId=o?.id??null,this._reason=o?.reasons?.[0]?.id??"",n&&(this._tab="new",this._mode="code",this._notice=o||this.source==null?null:"The selected bundle is no longer available in this source. Choose another bundle.",o&&(this._pendingSelection=null))}}updated(t){(t.has("source")||t.has("selection")||t.has("loadBundle"))&&this._loadSelectedBundle()}async _loadSelectedBundle(){this._bundleController?.abort(),this._loadingBundle=!1,this._bundleError=null;let t=this._bundle;if(!this.loadBundle||!t||Array.isArray(t.files))return;let r=this._bundleController=new AbortController;this._loadingBundle=!0;try{let n=await this.loadBundle(t,r.signal);if(r.signal.aborted)return;this._bundles=this._bundles.map(o=>o.id===t.id?{...n,repoId:o.repoId,repo:o.repo}:o),this._reason=n.reasons?.[0]?.id??""}catch(n){r.signal.aborted||(this._bundleError=String(n?.message??n))}finally{r.signal.aborted||(this._loadingBundle=!1)}}disconnectedCallback(){super.disconnectedCallback(),this._bundleController?.abort();for(let t of this._timers)clearTimeout(t);this._timers.clear()}get _repoBundles(){return this._bundles.filter(t=>t.repoId===this._selectedRepoId)}get _bundle(){return this._repoBundles.find(t=>t.id===this._selectedBundleId)}get _reasonData(){return this._bundle?.reasons.find(t=>t.id===this._reason)??this._bundle?.reasons[0]}_packageLabel(t){return t==="__own__"?"Own code":t}get _scopeFiles(){let t=this._reasonData,r=t?.fileModules,n=t?.filePaths?new Set(t.filePaths):null;return(this._bundle?.files??[]).filter(o=>(r==null||r.includes(o.module))&&(n==null||n.has(o.path))).toSorted((o,i)=>i.bytes-o.bytes)}get _files(){return ow(this._scopeFiles)}render(){return d`<div class="wrap">${this.hideHeading?d`<h1 class="sr-only">Scans</h1>`:d`<div class="head"><div class="head-title"><slot name="navigation"></slot><h1>Scans</h1></div></div>`}<div class="intro-row"><p class="intro">${this._tab==="history"?"Review past scans and save completed results as reports.":this._mode==="report"?"Choose inputs and start a scan. Save the report when it finishes.":"Choose a bundle and start a scan. Save the report when it finishes."}</p><div class="head-tabs" role="tablist" aria-label="Scan views"><button class="${this._tab==="new"?"active":""}" role="tab" aria-selected="${this._tab==="new"}" @click="${()=>{this._tab="new"}}">New scan</button> <button class="${this._tab==="history"?"active":""}" role="tab" aria-selected="${this._tab==="history"}" @click="${()=>{this._tab="history"}}">Scan history</button></div></div>${this._notice?d`<p class="notice" role="status">${this._notice}</p>`:m} ${this._bundleError?d`<p class="notice" role="alert">Couldn’t load bundle: ${this._bundleError}<button @click="${()=>{this._loadSelectedBundle()}}">Retry</button></p>`:m} ${this._tab==="new"?this._newScan():this._history()}</div>`}_newScan(){let t=this._mode,r=this._bundle,n=t==="code"?this._files:t==="dependencies"?this._scopeFiles:r?.files??[],o=this._excluded,i=this._excludedModules,s=n.filter(g=>!o.has(g.path)&&!i.has(g.module)),a=ru(r?.files?s:null),c=new Map;for(let g of n){let b=c.get(g.module)??{bytes:0,count:0,included:0};b.bytes+=g.bytes,b.count++,o.has(g.path)||b.included++,c.set(g.module,b)}let u=[...c.keys()].toSorted((g,b)=>c.get(b).bytes-c.get(g).bytes||this._packageLabel(g).localeCompare(this._packageLabel(b))),p=n.slice(0,80),f=u.filter(g=>!i.has(g)).length,h=this._reportInput?.mode===this._reportMode?this._reportInput.inputs:[];return d`<div class="setup"><scan-mode-selector .mode="${t}" .analyzer="${this._options.analyzer}" .reportMode="${this._reportMode}" @scan-mode-change="${g=>this._changeMode(g.detail.mode)}" @scan-analyzer-change="${g=>this._setOption("analyzer",g.detail.analyzer)}" @scan-report-mode-change="${g=>{this._reportMode=g.detail.mode,this._reportRestore=null}}"></scan-mode-selector>${t==="report"?d`<scan-report-inputs .mode="${this._reportMode}" .loadSources="${this.loadReportSources}" .restore="${this._reportRestore}" @report-inputs-change="${g=>{this._reportInput=g.detail}}"></scan-report-inputs>`:this._sourcePanel(r,n)} ${t==="code"?d`<details class="panel scope-panel"><summary class="scope-head"><svg class="scope-chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg><h2>Source filter</h2><p><span>${s.length} of ${n.length} files · ${f} of ${u.length} packages</span> <span>${wo(a.bytes)} · ${a.lines==null?"\u2014":a.lines.toLocaleString()} LoC</span></p></summary><div class="scope-grid"><section class="scope-pane package-pane" aria-label="Packages in bundle"><div class="pane-head"><strong>Packages</strong><span>${u.length} total · sorted by size</span></div><div class="package-list">${u.map(g=>{let{bytes:b,count:v,included:x}=c.get(g),w=!i.has(g);return d`<label class="${`package-row ${w?"":"excluded"}`}"><input type="checkbox" .checked="${w}" @change="${y=>this._toggleModule(g)}"><span class="package-name">${this._packageLabel(g)}</span><span class="package-size">${wo(b)} · ${x}/${v}</span></label>`})}</div></section><section class="scope-pane file-panel" aria-label="Largest files in bundle"><div class="pane-head"><strong>Largest files</strong><span>showing ${p.length} of ${n.length}</span></div>${n.length===0?d`<p class="empty">No files in this selection.</p>`:d`<div class="file-list">${p.map(g=>{let b=!o.has(g.path)&&!i.has(g.module);return d`<label class="${`file ${b?"":"excluded"}`}"><input type="checkbox" .checked="${b}" @change="${v=>this._toggleFile(g,v.target.checked)}"><span class="file-copy"><span class="file-path" data-tooltip-truncated data-tooltip="${g.path}">${g.path}</span><span class="file-meta">${g.size} · ${this._packageLabel(g.module)}</span></span></label>`})}</div>`}</section></div></details>`:m} ${t==="agentic"?this._agenticPanel():m}<slot name="access"></slot>${this._optionsPanel(t,r,t==="report"?h.length:s.length)}</div>`}_sourcePanel(t,r){if(this.sourceLoading)return d`<section class="panel source-panel" aria-busy="true"><div class="panel-head"><h2>Source</h2></div><p class="empty" role="status">Loading scan sources…</p></section>`;let n=this._mode==="code"?this._repoBundles.map(u=>u.files?{...u,files:ow(u.files)}:u.summary?{...u,summary:{...u.summary,files:u.summary.codeFiles}}:u):this._repoBundles,{lines:o}=ru(t?.files?r:null),i=new Map;for(let u of this._bundles)i.set(u.repoId,(i.get(u.repoId)??0)+1);let s=this._repositories.length>1,a=["code","agentic","dependencies"].includes(this._mode)&&t!=null&&(!t.filename.toLowerCase().endsWith(".map")||t.reasons?.some(u=>u.id!=="all")),c=this._repositories.map(u=>{let p=i.get(u.id)??0;return{value:u.id,label:u.label,detail:`${p} ${p===1?"bundle":"bundles"}`,special:u.id==="unattached"}});return d`<section class="panel source-panel" aria-busy="${this._loadingBundle}"><div class="panel-head"><h2>Source</h2></div><div class="${`source-choice ${s?"":"single-repository"}`}">${s?d`<div class="field"><span>${this.scopeLabel}</span>${this.scopeLabel==="Workspace"?d`<workspace-selector .options="${c}" .value="${this._selectedRepoId}" @workspace-change="${u=>this._selectRepoById(u.detail.value)}"></workspace-selector>`:d`<repository-selector .options="${c}" .value="${this._selectedRepoId}" @repository-change="${u=>this._selectRepoById(u.detail.value)}"></repository-selector>`}</div>`:m}<div class="field">${s||this.createBundleHref?this._bundleLabel():m}${n.length>0?d`<bundle-selector .bundles="${n}" .value="${t?.id??null}" @bundle-change="${u=>this._selectBundleById(u.detail.value)}"></bundle-selector>`:this._emptyBundles()}</div><div class="source-footer"><div class="bundle-stats" aria-label="Bundle statistics"><div class="metric"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="8" cy="4" rx="5" ry="2"/><path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/></svg><strong>${t?.size??"\u2014"}</strong><span>bundle size</span></div><div class="metric">${YA.report}<strong>${r.length}</strong><span>files</span></div><div class="metric">${YA.code}<strong>${o==null?"\u2014":o.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${V(or)}<strong>${new Set(r.map(u=>u.module)).size}</strong><span>packages</span></div></div>${a?d`<div class="scope-slot">${this._scopeField(t)}</div>`:m}</div></div></section>`}_bundleLabel(){let t=this.createBundleHref?.(this._selectedRepoId);return d`<div class="bundle-label"><span>Bundle</span>${t?d`<a class="create-bundle-button" href="${t}">Create a bundle</a>`:m}</div>`}_emptyBundles(){let t=this.createBundleHref?.(this._selectedRepoId);return d`<div class="choice-empty"><span>${this._bundles.length===0?"No stored bundles.":`No stored bundles for this ${this.scopeLabel.toLowerCase()}.`}</span>${t?d`<a href="${t}">Create?</a>`:m}</div>`}_scopeField(t){if(!["code","agentic","dependencies"].includes(this._mode))return m;let r=(t?.reasons??[]).filter(n=>n.id!=="all");return r.length===0?m:d`<bundle-scope-selector .reasons="${r}" .value="${this._reason}" label="${this._mode==="agentic"?"Choose agentic scope":"Choose scan scope"}" @scope-change="${n=>this._changeReason(n.detail.value)}"></bundle-scope-selector>`}_optionsPanel(t,r,n){let o=t==="report"?`${n} ${this._reportMode==="merge"?"scan results":"reports"} selected`:`${r?.filename??"No bundle selected"} \xB7 ${n} files will be analyzed`,i=t==="code"&&this._options.analyzer==="advanced",s=!this.canRun||(t==="report"?n===0:r==null||n===0||i&&(!this._regimesReady||this._regimes.length===0));return d`<section class="panel options"><div class="options-grid">${i?d`<scan-regime-editor .loadModels="${this.loadModels}" .value="${this._regimes}" .appModel="${this._appModel}" .appModelAutomatic="${this._appModelAutomatic}" @regimes-change="${a=>{this._regimesReady=a.detail.ready,this._regimes=a.detail.value,this._appModel=a.detail.appModel,this._appModelAutomatic=a.detail.appModelAutomatic}}"></scan-regime-editor>`:d`<scan-model-picker .loadModels="${this.loadModels}" ?has-extra="${t==="code"}" .value="${this._options.model}" .effort="${this._options.effort}" @model-change="${a=>{this._options={...this._options,model:a.detail.model,effort:a.detail.effort}}}">${t==="code"?d`<scan-depth-toggle slot="effort-extra" .isolate="${this._options.isolate}" @depth-change="${a=>this._setOption("isolate",a.detail.isolate)}"></scan-depth-toggle>`:m}</scan-model-picker>`}</div><div class="options-footer"><slot name="before-run"></slot><button type="button" class="run" ?disabled="${s}" @click="${()=>this._runScan()}">${t==="report"?this._reportMode==="merge"?"Merge results":"Link reports":"Run scan"}</button><span class="summary">${o}</span></div><div class="checks"><label class="switch"><input type="checkbox" aria-describedby="${this._options.cached?"offline-help":m}" .checked="${this._options.cached}" @change="${a=>this._setOption("cached",a.target.checked)}"><span class="switch-track" aria-hidden="true"></span><span>Offline</span></label>${this._options.cached?d`<small class="offline-help" id="offline-help">Cache only, no new model requests</small>`:m}</div></section>`}_history(){return d`<section class="panel history"><div class="panel-head"><h2>Scan history</h2><p>${this._scans.length} scans</p></div>${this._scans.length===0?d`<p class="empty">No scans yet.</p>`:this._scans.map(t=>this._scanRow(t))}</section>`}_scanRow(t){let r=t.status==="completed"?t.reportSaved?d`<button type="button" class="action" @click="${()=>this._deleteSavedReport(t)}">Delete saved report</button>`:d`<button type="button" class="action" @click="${()=>this._saveReport(t)}">Save report</button>`:m;return d`<div class="scan-row"><div class="scan-main"><div class="scan-title"><strong>${t.bundleName}</strong><span class="${`status ${t.status}`}">${t.status}</span></div><span class="scan-meta">${t.reason} · ${t.files} ${t.mode==="report"?t.reportMode==="merge"?"results":"reports":"files"} · ${t.createdAt}${t.duration?` \xB7 ${t.duration}`:""}${t.reportSaved?" \xB7 Report saved":t.status==="completed"?" \xB7 Report available":""}</span></div><span class="scan-actions">${r}${t.status==="running"?d`<button type="button" class="action" @click="${()=>this._stopScan(t)}">Stop</button>`:m}${t.status==="stopped"?d`<button type="button" class="action" @click="${()=>this._restartScan(t)}">Restart as new scan</button>`:m}</span><span aria-hidden="true"></span></div>`}_selectBundle(t){this._pendingSelection=null,this._selectedRepoId=t.repoId,this._selectedBundleId=t.id,this._reason=t.reasons?.[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_selectBundleById(t){let r=this._repoBundles.find(n=>n.id===t);r!=null&&this._selectBundle(r)}_selectRepoById(t){if(t===this._selectedRepoId||!this._repositories.some(n=>n.id===t))return;this._selectedRepoId=t,this._pendingSelection=null;let r=this._bundles.find(n=>n.repoId===t);this._selectedBundleId=r?.id??null,this._reason=r?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_changeMode(t){!["dependencies","code","agentic","report"].includes(t)||t===this._mode||(this._mode=t,this._reportInput=null,this._reportRestore=null,this._excluded=new Set,this._excludedModules=new Set,this._notice=null)}_changeReason(t){this._reason=t,this._excluded=new Set,this._excludedModules=new Set}_toggleFile(t,r){let n=new Set(this._excluded);r?n.delete(t.path):n.add(t.path),this._excluded=n}_toggleModule(t){let r=new Set(this._excludedModules);r.has(t)?r.delete(t):r.add(t),this._excludedModules=r}_setOption(t,r){this._options[t]!==r&&(t==="analyzer"&&r==="advanced"&&(this._regimesReady=!1,this._regimes.length===0&&(this._regimes=[{mode:this._options.analyzer,model:this._options.model,effort:this._options.effort,isolate:this._options.isolate}])),this._options={...this._options,[t]:r})}_agenticPanel(){return d`<section class="panel agentic-panel"><div class="panel-head"><h2>Agentic instructions</h2><button type="button" class="prompt-action" aria-label="Add prompt" @click="${()=>this._addPrompt()}"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg></button></div><div class="agentic-fields">${oe(this._prompts,t=>t.id,(t,r)=>d`<div class="prompt-row"><textarea aria-label="${`Prompt ${r+1}`}" rows="3" placeholder="${this._promptPlaceholder(r)}" .value="${ke(t.text)}" @input="${n=>{this._prompts=this._prompts.map(o=>o.id===t.id?{...o,text:n.target.value}:o)}}"></textarea>${this._prompts.length>1?d`<button type="button" class="prompt-action" aria-label="${`Remove prompt ${r+1}`}" @click="${()=>this._removePrompt(t.id)}"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button>`:m}</div>`)}</div></section>`}_promptPlaceholder(t){let r=["","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"][t];return r!=null?`What should the ${r?`${r} `:""}agent focus on?`:`What should agent ${t+1} focus on?`}async _addPrompt(){this._prompts=[...this._prompts,{id:++this._nextPromptId,text:""}],await this.updateComplete,this.renderRoot?.querySelector(".prompt-row:last-child textarea")?.focus()}_removePrompt(t){this._prompts.length>1&&(this._prompts=this._prompts.filter(r=>r.id!==t))}_runScan(){if(!this.canRun)return;let t=this._mode,r=t==="code"&&this._options.analyzer==="advanced";if(r&&(!this._regimesReady||this._regimes.length===0))return;let n=this._bundle,o=this._reportInput?.mode===this._reportMode?this._reportInput:null,i=o?.inputs??[],s=t==="code"?this._files.filter(u=>!this._excluded.has(u.path)&&!this._excludedModules.has(u.module)):t==="dependencies"?this._scopeFiles:n?.files??[];if(t==="report"&&(!o?.source||i.length===0)||t!=="report"&&(!n||s.length===0))return;let a={id:`scan-${Date.now()}`,mode:t,bundleId:t==="report"?this._reportMode==="merge"?o.source.id:null:n?.id??null,bundleName:t==="report"?o.source.label:n.filename,reason:t==="report"?this._reportMode==="merge"?"Merge scan results":"Link saved reports":this._reasonData?.label??"All files",status:"running",createdAt:"Just now",duration:"",files:t==="report"?i.length:s.length,reportSaved:!1,cached:this._options.cached,isolate:t==="code"&&this._options.isolate,model:this._options.model,effort:this._options.effort};t!=="report"&&(a.repoId=this._selectedRepoId,a.scopeId=this._reason),t==="code"&&(a.analyzer=this._options.analyzer),r&&(a.regimes=this._regimes.map(u=>({...u})),a.appModel=this._appModel?{...this._appModel}:null,a.appModelAutomatic=this._appModelAutomatic,a.reason=`Advanced \xB7 ${a.regimes.length} regimes \xB7 ${a.reason}`,a.model=null,a.effort=null,a.isolate=!1),t==="agentic"&&(a.prompts=this._prompts.map(u=>u.text)),t==="report"&&(a.reportMode=this._reportMode,a.reportSource={...o.source},a.inputIds=i.map(u=>u.id)),this._scans=[a,...this._scans],this._tab="history",this._notice="Scan started. The server will update its status as work progresses.";let c=setTimeout(()=>{this._timers.delete(c),a.status==="running"&&(a.status="completed",a.duration="2m 14s",this._notice="Scan completed. Its report is ready to save.",this.requestUpdate())},2200);this._timers.add(c)}_stopScan(t){t.status==="running"&&(t.status="stopped",t.duration=t.duration||"stopped by user",this._notice="Scan stopped. It cannot continue, but you can restart it as a new scan.",this.requestUpdate())}_restartScan(t){if(this._options={...this._options,model:t.model??this._options.model,effort:t.effort??this._options.effort,cached:t.cached??!1,isolate:t.isolate??!1,analyzer:t.analyzer??"generic"},t.mode==="report"){this._mode="report",this._reportMode=t.reportMode==="link"?"link":"merge",this._reportInput=null,this._reportRestore={mode:this._reportMode,source:t.reportSource,inputIds:t.inputIds??[]},this._tab="new",this._notice="New report scan settings restored from the stopped run.";return}let r=this._bundles.find(n=>n.id===t.bundleId&&(t.repoId==null||n.repoId===t.repoId));r&&(this._selectBundle(r),this._mode=t.mode??"dependencies",t.mode==="agentic"&&(this._prompts=(t.prompts?.length>0?t.prompts:[""]).map(n=>({id:++this._nextPromptId,text:n}))),t.regimes?.length>0&&(this._options={...this._options,analyzer:"advanced"},this._regimes=t.regimes.map(n=>({...n})),this._appModel=t.appModel?{...t.appModel}:null,this._appModelAutomatic=t.appModelAutomatic!==!1,this._regimesReady=!1),this._reason=r.reasons.find(n=>n.label===t.reason)?.id??r.reasons[0]?.id??"",this._reason=t.scopeId??this._reason,this._tab="new",this._notice="New scan settings restored from the stopped run.")}_saveReport(t){t.reportSaved=!0,this._notice="Report saved. You can delete it from Reports and save this completed scan again.",this.requestUpdate()}_deleteSavedReport(t){t.reportSaved=!1,this._notice="Saved report deleted. The completed scan can be saved again.",this.requestUpdate()}};customElements.get("deepview-scan-page")||customElements.define("deepview-scan-page",Kk)});function vt(e,{splitOwnDirs:t=!0,packageDir:r=null}={}){if(r){if(r!=="."){let n=r.match(/(?:^|\/)node_modules\/(@[^/]+\/[^/]+|[^/]+)$/u);return n&&n[1]!==".pnpm"?n[1]:r}}else{let n=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,o;for(;(o=n.exec(e))!==null;)if(o[1]!==".pnpm")return o[1]}if(t){let n=e.indexOf("/");if(n>0)return e.slice(0,n)}return"__own__"}function JA(e,t=null){let r=new Set;for(let n of e){let o=t?.(n)??null;if(vt(n,{splitOwnDirs:!1,packageDir:o})==="__own__"&&(r.add(vt(n,{splitOwnDirs:!0,packageDir:o})),r.size>1))return!0}return!1}function eo(e){return e==="__own__"?"own source":typeof e!="string"?e:e.match(/^(?:.*\/)?vendor\/(.+)$/u)?.[1]??e}var Ql=k(()=>{"use strict"});function Po(e,t){let r=new Map,n=e?.kind==="stasis"?e.bundle?.reason:null;if(!n||typeof n!="object"||Array.isArray(n))return r;let o=new Set(t??[...Xt(e)].filter(([,i])=>i!=null).map(([i])=>i));for(let[i,s]of Object.entries(n).toSorted(([a],[c])=>a.localeCompare(c))){if(!i||!Array.isArray(s))continue;let a=new Set(s.filter(c=>typeof c=="string"&&o.has(c)));a.size>0&&r.set(i,a)}return[...r.values()].some(i=>i.size<o.size)||r.clear(),r}var qk=k(()=>{"use strict";Mu()});function ZA(e,t,r,n){let o=r.has(n)?n:null;if(o===null)return{tree:e,origToStripped:t,selected:o};let i=new Map([...t].filter(([c])=>r.get(o).has(c))),s=new Set(i.values());return{tree:Object.fromEntries([...s].map(c=>[c,{...e[c],imports:(e[c].imports??[]).filter(u=>s.has(u))}])),origToStripped:i,selected:o}}function Yk(e,t,{splitOwnDirs:r=!1,packageDir:n}={}){let o=vt(t,{splitOwnDirs:!1,packageDir:n});return o==="__own__"?vt(e,{splitOwnDirs:r,packageDir:n}):o}function Xk(e){let t=new Map;if(e?.kind!=="stasis"||!e.bundle)return t;for(let r of e.bundle.imports.values())for(let[n,o]of r){t.has(n)||t.set(n,new Set);for(let i of o.values()){let s=typeof i=="string"?[i]:i instanceof Map?i.values():[];for(let a of s)typeof a=="string"&&t.get(n).add(a)}}return t}function QA(e,t,r,n,o=t){let i=Xk(e),s=new Set;for(let[c,u]of t)vt(c,{splitOwnDirs:!1,packageDir:n?.get(c)})==="__own__"&&s.add(r(u));for(let c of e?.bundle?.entries??[]){let u=t.get(c);u!==void 0&&s.add(r(u))}if(s.size===0){let c=new Set;for(let[p,f]of t){let h=n?.get(p);h&&h!=="."&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(h)&&c.add(r(f))}let u=new Set;for(let[p,f]of i){let h=t.get(p);if(!(h===void 0||!c.has(r(h))))for(let g of f){let b=t.get(g);b!==void 0&&r(h)!==r(b)&&u.add(r(b))}}for(let p of c)u.has(p)||s.add(p)}let a=new Set;for(let[c,u]of i)if(!o.has(c)&&vt(c,{splitOwnDirs:!1,packageDir:n?.get(c)})==="__own__")for(let p of u){let f=t.get(p);f!==void 0&&a.add(r(f))}return a.size>0&&s.add("__own__"),{roots:[...s],appImports:[...a]}}var lg=k(()=>{"use strict";Ql();qk()});function eI(e,t=[]){let r=new Map,n=e.flatMap(o=>{let i=t.filter(a=>a.bundles?.includes(o.integrity));return(i.length>0?i.map(a=>({id:a.id,label:a.name})):[{id:"unattached",label:"Unattached"}]).map(a=>(r.set(a.id,a),{id:o.integrity,integrity:o.integrity,filename:o.name,repoId:a.id,repo:a.label,files:null,reasons:[],size:"\u2014"}))});return{repositories:[...r.values()],bundles:n,reports:[],scans:[]}}function tI(e,t){if(t.error)throw new Error(t.error);let r=Wr(t),n=t.kind==="stasis"?t.bundle?.formats:null,o=t.lineCounts??new Map([...dt(t)].map(([a,c])=>[a,Au(c)])),i=[...Xt(t)].filter(([,a])=>a!=null).map(([a,c])=>({path:a,format:n?.get(a)??null,bytes:c,lines:o.get(a)??0,size:wo(c),module:vt(a,{splitOwnDirs:!1,packageDir:r?.get(a)})})),s=[{id:"all",label:"All",filePaths:null},...[...Po(t,i.map(a=>a.path))].map(([a,c])=>({id:`reason:${a}`,label:a,filePaths:[...c]}))];return{...e,files:i,reasons:s,size:wo(t.size)}}var rI=k(()=>{"use strict";Gr();Pl();Ql();lg();_l()});function GU(e){let{data:t}=sn(e);return t&&nI(t)>0?t:null}function nI(e){return(mt(e)??[]).filter(t=>(Array.isArray(t)?t:[t]).some(r=>r&&typeof r=="object"&&nn(r,r.source??e.source))).length}function oI(e,t){let r=[],n=new Map;for(let{name:i,content:s,fallbackRepo:a}of e){if(typeof s!="string")continue;let c=GU(s);if(!c)continue;let u=mt(c),p=$t(c)??$t({repo:{github:a}}),f=new Set(p?[p]:[]);if(!p)for(let h of u.flat()){if(/(?:^|\/)(?:node_modules|dependencies)\//u.test(h?.file??""))continue;let g=$t(h);g&&f.add(g)}for(let h of f)n.set(h,{id:h,label:h});r.push({id:i,filename:i,repoIds:[...f],analyzer:c.source,appFindings:nI(c)})}let o=new Set(r.map(i=>i.id));return{merge:{bundles:[],results:[]},link:{reports:r,repositories:[...n.values()],workspaces:t.map(i=>({id:i.id,label:i.name,reports:i.reports.filter(s=>o.has(s))})).filter(i=>i.reports.length>0)}}}var iI=k(()=>{"use strict";ge();_l()});function ji(e){if(e?.throwIfAborted(),C())throw new DOMException("Local scan closed","AbortError")}async function sI(e){ji(e);let t=await Vt();return ji(e),eI(t,Q())}async function aI(e,t){ji(t);let r=await Mo(e.integrity,{name:e.filename},{sources:!1});return ji(t),tI(e,r)}async function lI(e){ji(e);let t=await fe(),r=[];for(let n of t){ji(e);let o=await De(n);ji(e),r.push({name:n,content:o,fallbackRepo:Ut(n)})}return ji(e),oI(r,Q())}var cI=k(()=>{"use strict";U();Io();rI();iI()});function dI({hostname:e,devServer:t,serverMode:r,localMode:n,deepviewScanServer:o}){return r==="managed"&&!n?null:r==="e2e"?Vc(o):Vc(t)??(e==="127.0.0.1"?m2:null)}var uI=k(()=>{"use strict";qb()});async function pI(e,t,r){let n=St(e,{duration:0});t.addEventListener("abort",n,{once:!0});try{return await r()}finally{t.removeEventListener("abort",n),n()}}function Qu(){return dI({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:l.serverMode,localMode:l.localMode,deepviewScanServer:l.deepviewScanServer})}function cg(e){return C()?!!e.managedId&&["admin","manage"].includes(l.managedSession?.role):!e.managedId&&!!Qu()}async function Zk(e=null){let t=l.selectedBundleWorkspace,r=rt();if(await bt(),r!==rt()||e&&!cg(e))return;if(C()){e&&await la("manage-scans",{bundleId:e.managedId});return}if(!Qu())return;let n=Zn(),o=rt();await n,!(!Qu()||o!==rt())&&(l.scanSelection=e?{bundleId:e.integrity,...t?{repoId:t}:{}}:null,l.currentView="scan",E(),Y())}function dg(){let e=document.querySelector("#drop-zone");if(!e)return;let t=e.querySelector(".local-scan-button");t||(t=document.createElement("button"),t.type="button",t.className="local-scan-button",t.innerHTML=`${Cl}<span>Scan</span>`,t.addEventListener("click",()=>{Zk()}),e.append(t));let r=Qu();t.hidden=!r,document.querySelector("local-scan-page")?.setScanServer(r);let n=document.querySelector(".bundles-scan-button"),o=l.bundles?.find(i=>i.integrity===l.selectedBundle);n&&(n.hidden=!o||!cg(o))}var Jk,ug=k(()=>{"use strict";T();U();Di();Qn();Yt();sA();lA();Ek();gt();XA();cI();uI();kl();Jk=class extends J{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0},_providerToken:{state:!0},_savedAccess:{state:!0},_savingAccess:{state:!0}};constructor(){super(),this._server=Qu(),this._access=new og(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,r)=>pI("Loading bundle\u2026",r,()=>aI(t,r))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=p0(()=>{this._savedAccess=pl()}),this._loadSource()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeSavedAccess?.(),this._controller?.abort(),this._resetAccess()}async _loadSource(){this._controller?.abort();let t=this._controller=new AbortController;this._error=null;try{this._source=await pI("Loading bundles\u2026",t.signal,()=>sI(t.signal))}catch(r){t.signal.aborted||(this._error=String(r?.message??r))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=pl();let t=c0(this._server);t&&(this._access.setKey(t.deepview),this._access.setProvider(t.provider),this._providerToken=t.token,this._access.connect())}async _saveOrForgetAccess(){if(this._savingAccess)return;let t=pl();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await u0(),this._resetAccess()):await d0({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=pl()}catch{St(t?"Couldn\u2019t forget scan credentials. Try again.":"Couldn\u2019t save scan credentials. Try again.",{kind:"warning"})}finally{this._savingAccess=!1}}}_connect(t){t.preventDefault(),this._access.connect()}_setProvider(t){this._access.provider!==t&&(this._access.setProvider(t),this._providerToken="")}_setProviderToken(t){this._providerToken=t;let r=aA(t);r&&this._access.setProvider(r)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=Te`:host{display:block}*{box-sizing:border-box}button{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .5rem;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);font:inherit;font-size:.8rem;cursor:default}button:hover:not(:disabled){color:var(--text);background:var(--surface)}button:disabled{opacity:.5}.access{min-width:0;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--surface);container:scan-access / inline-size}.access-heading{display:flex;align-items:center;justify-content:space-between;min-height:2.5rem;padding:.45rem .9rem;border-bottom:1px solid var(--border)}.access h2{margin:0;color:var(--text);font-size:.86rem;font-weight:600}.save-access{min-height:1.6rem;margin-left:auto;flex-shrink:0}.access-fields{display:grid;gap:.8rem;padding:.85rem .9rem}.connection-row,.provider-row{display:grid;align-items:end;gap:.65rem;margin:0}.connection-row{grid-template-columns:minmax(0,1fr) auto;width:min(42rem,100%)}.provider-row{grid-template-columns:max-content minmax(0,1fr);width:100%}.access label{display:grid;gap:.3rem;min-width:0;color:var(--muted);font-size:.72rem}input{min-width:0;width:100%;height:2rem;padding:.35rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.8rem}.provider-field{min-width:0;margin:0;padding:0;border:0}.provider-field legend{margin-bottom:.3rem;padding:0;color:var(--muted);font-size:.72rem}.provider-options{display:flex;width:fit-content;max-width:100%;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);overflow:hidden}.access .provider-choice{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;height:calc(2rem - 2px);padding:.3rem .6rem;color:var(--muted);font-size:.74rem;white-space:nowrap;user-select:none}.provider-choice+.provider-choice{border-left:1px solid var(--border)}.provider-choice:hover{color:var(--text);background:var(--surface)}.provider-choice:has(:checked){color:var(--text);background:var(--surface-active)}.provider-choice:has(:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.provider-choice input{position:absolute;inset:0;margin:0;width:100%;height:100%;opacity:0;cursor:default}.provider-icon{display:block;width:1rem;height:1rem;flex:0 0 1rem}.provider-icon svg{display:block;width:100%;height:100%}.provider-icon.anthropic{color:#d97757}.provider-icon.openai{color:#10a37f}.provider-icon.moonshot{color:#8068d9}.provider-icon.moonshot svg{transform:scale(.8)}.provider-icon.openrouter{color:var(--text)}.connect{justify-content:center;height:2rem;padding:.35rem .8rem;color:var(--text);background:var(--surface-active)}.connection-status{flex:1;min-width:0;margin:0 .7rem;line-height:1rem;color:var(--muted);font-size:.7rem}.connection-status.error{color:var(--critical, #e5534b)}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@container scan-access (max-width: 38rem){.provider-row{grid-template-columns:minmax(0,1fr)}}@container scan-access (max-width: 28rem){.provider-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.provider-choice:nth-child(odd){border-left:0}.provider-choice:nth-child(n+3){border-top:1px solid var(--border)}}@container scan-access (max-width: 23rem){.access .provider-choice{gap:.25rem;padding-inline:.4rem;font-size:.7rem}}`;_accessPanel(){let t=this._access,r=t.catalogue?.models.length??0,n=t.error??(t.loading?t.connected?"Loading provider models\u2026":"Connecting\u2026":t.connected?t.catalogue?`Connected \xB7 ${r} ${r===1?"model":"models"}`:"Connected. Choose a provider.":"");return d`<section slot="access" class="access" aria-labelledby="scan-access-heading"><div class="access-heading"><h2 id="scan-access-heading">Access</h2><p class="${`connection-status ${t.error?"error":""}`}" role="${t.error?"alert":"status"}">${n}</p>${this._savedAccess||t.connected?d`<button class="save-access" type="button" ?disabled="${this._savingAccess}" @click="${this._saveOrForgetAccess}">${this._savedAccess?"Forget":"Save"}</button>`:m}</div><div class="access-fields"><form class="connection-row" @submit="${this._connect}"><label>DeepView API Key<input type="password" name="deepview-api-key" placeholder="Enter API key" autocomplete="off" spellcheck="false" .value="${t.apiKey}" @input="${o=>t.setKey(o.target.value)}"></label> <button type="submit" class="connect" ?disabled="${!t.apiKey.trim()||t.loading||t.connected&&!t.error}">${t.connected&&!t.error?"Connected":"Connect"}</button></form>${t.managed?m:d`<div class="provider-row"><fieldset class="provider-field"><legend>Provider</legend><div class="provider-options">${[["anthropic","Anthropic"],["openai","OpenAI"],["moonshot","Moonshot"],["openrouter","OpenRouter"]].map(([o,i])=>d`<label class="provider-choice"><input type="radio" name="scan-provider" value="${o}" .checked="${t.provider===o}" @change="${()=>this._setProvider(o)}"><span class="${`provider-icon ${o}`}" aria-hidden="true">${Xu(o)}</span><span>${i}</span></label>`)}</div></fieldset><label>Token<input type="password" name="provider-token" placeholder="Enter provider token" autocomplete="off" spellcheck="false" .value="${this._providerToken}" @input="${o=>this._setProviderToken(o.target.value)}"></label></div>`}</div></section>`}render(){return d`${this._error?d`<p role="alert">Couldn’t load saved bundles: ${this._error} <button @click="${()=>{this._loadSource()}}">Retry</button></p>`:m}<deepview-scan-page .selection="${this.selection}" scope-label="Workspace" .source="${this._source}" .sourceLoading="${this._source==null&&!this._error}" .loadBundle="${this._loadBundle}" .loadModels="${this._access.loadModels}" .canRun="${this._access.ready}" .loadReportSources="${lI}"><button slot="navigation" type="button" @click="${()=>{Zn()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",Jk)});function ec(e,t){let r=e.find(n=>n.integrity===t);return e.filter(n=>n.integrity!==t&&(r?.managedId?n.managedId&&r.repoId!=null&&n.repoId===r.repoId:!n.managedId))}var Qk=k(()=>{"use strict"});function fI(e,t=""){let r=[],n=$t(e);if(n){let i=[Bn(e.repo),Bn({directory:t})].filter(Boolean).join("/"),s=su(e.repo?.commit),a=i.split("/").map(encodeURIComponent).join("/"),c=`https://github.com/${n}`;r.push({label:"GitHub",text:n+(i?`/${i}`:""),href:s||i?`${c}/tree/${s??"HEAD"}${a?`/${a}`:""}`:c,...s?{commit:{hash:s,text:s.slice(0,7),href:`${c}/commit/${s}`}}:{}})}let o=e?.package?.npm;if(typeof o?.name=="string"&&KU.test(o.name)){let i=typeof o.version=="string"?o.version.trim():"";r.push({label:"npm",text:o.name+(i?`@${i}`:""),href:`https://www.npmjs.com/package/${o.name}${i?`/v/${encodeURIComponent(i)}`:""}`})}return r}var KU,hI=k(()=>{"use strict";ge();zh();KU=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function ex(e,t){let r=e.toLowerCase(),n="",o=r;if(r.startsWith("@")){let s=r.indexOf("/");s>0&&(n=r.slice(0,s),o=r.slice(s+1))}return`pkg:npm/${n?`${encodeURIComponent(n)}/`:""}${encodeURIComponent(o)}@${encodeURIComponent(t)}`}function pg(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function gI(e){let t=[];if(e?.kind!=="stasis"||!e.bundle?.modules)return t;let r=new Map;for(let[n,o]of e.bundle.modules){if(!o?.name||typeof o.version!="string"||!o.version)continue;let i=`${o.name}@${o.version}`,s=r.get(i);if(s!==void 0){n==="."&&(t[s].dir=".");continue}r.set(i,t.length),t.push({name:o.name,version:o.version,dir:n})}return t}function bI(e){if(e?.kind!=="stasis"||!e.bundle?.modules)return!1;for(let[,t]of e.bundle.modules)if(t?.name&&typeof t.version=="string"&&t.version)return!0;return!1}function vI(e,t){let r=e.find(i=>i.dir===".")??null,n=r?e.filter(i=>i!==r):e;return{root:r?{name:r.name,version:r.version,purl:ex(r.name,r.version)}:{name:pg(t?.name??"bundle"),version:null,purl:null},rest:n}}function yI(e){return e??globalThis.crypto.randomUUID()}function wI(e,t,{now:r=new Date,uuid:n}={}){let o=gI(e),{root:i,rest:s}=vI(o,t),a={type:"application","bom-ref":i.purl??`application:${i.name}`,name:i.name};i.version&&(a.version=i.version),i.purl&&(a.purl=i.purl);let c={bomFormat:"CycloneDX",specVersion:"1.5",serialNumber:`urn:uuid:${yI(n)}`,version:1,metadata:{timestamp:r.toISOString(),tools:{components:[{type:"application",name:mI}]},component:a},components:s.map(u=>{let p=ex(u.name,u.version);return{type:"library","bom-ref":p,name:u.name,version:u.version,purl:p}})};return`${JSON.stringify(c,null,2)}
|
|
135
|
+
`}function qU(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function kI(e,t,{now:r=new Date,uuid:n}={}){let o=gI(e),{root:i,rest:s}=vI(o,t),a=pg(t?.name??"bundle"),c=r.toISOString().replace(/\.\d{3}Z$/u,"Z"),u=(b,v,x,w)=>{let y={SPDXID:b,name:v,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return x&&(y.versionInfo=x),w&&(y.externalRefs=[qU(w)]),y},p="SPDXRef-Package-root",f=[u(p,i.name,i.version,i.purl)],h=[{spdxElementId:"SPDXRef-DOCUMENT",relationshipType:"DESCRIBES",relatedSpdxElement:p}];s.forEach((b,v)=>{let x=`SPDXRef-Package-${v+1}`;f.push(u(x,b.name,b.version,ex(b.name,b.version))),h.push({spdxElementId:p,relationshipType:"DEPENDS_ON",relatedSpdxElement:x})});let g={spdxVersion:"SPDX-2.3",dataLicense:"CC0-1.0",SPDXID:"SPDXRef-DOCUMENT",name:a,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(a)}-${yI(n)}`,creationInfo:{created:c,creators:[`Tool: ${mI}`]},packages:f,relationships:h};return`${JSON.stringify(g,null,2)}
|
|
136
|
+
`}var mI,tx=k(()=>{"use strict";mI="@preventive/triage"});function YU(e,t){let r=t?"gu":"giu",n=t?"g":"gi";try{return{re:new RegExp(e,r)}}catch{try{return{re:new RegExp(e,n)}}catch(o){return{error:o.message}}}}function rx(e,t,r){if(t){let i=YU(e,r);if(i.error)return{error:i.error};let{re:s}=i;return{ranges(a){s.lastIndex=0;let c=[],u;for(;(u=s.exec(a))!==null;){if(u[0].length===0){s.lastIndex++;continue}if(c.push([u.index,u.index+u[0].length]),c.length>=50)break}return c}}}let n=r?e:e.toLowerCase(),o=n.length;return{ranges(i){let s=r?i:i.toLowerCase(),a=[],c=0,u;for(;(u=s.indexOf(n,c))!==-1&&(a.push([u,u+o]),c=u+o,!(a.length>=50)););return a}}}function XU(e,t){let r=[...e.keys()].toSorted(),n=[],o=0,i=!1;for(let s of r){let a=e.get(s);if(typeof a!="string")continue;let c=a.split(`
|
|
137
|
+
`),u=[];for(let p=0;p<c.length;p++){let f=t.ranges(c[p]);if(f.length!==0&&(u.push({ln:p+1,ranges:f}),o++,o>=5e3)){i=!0;break}}if(u.length>0&&n.push({path:s,lines:c,hits:u}),i)break;if(n.length>=500){i=!0;break}}return{fileResults:n,totalHits:o,truncated:i}}function JU(e,t){let r=[],n=0;for(let{path:o,lines:i,hits:s}of e.fileResults){let a=[];for(let{ln:c}of s){let u=t.ranges(i[c-1]);u.length!==0&&(a.push({ln:c,ranges:u}),n++)}a.length>0&&r.push({path:o,lines:i,hits:a})}return{fileResults:r,totalHits:n,truncated:!1}}function xI(e,t,r,n,o){if(!r)return{fileResults:[],totalHits:0,truncated:!1};let i=rx(r,n,o);if(i.error)return{error:i.error};(pr.tag!==e||pr.useRegex!==n||pr.caseSensitive!==o)&&(pr.tag=e,pr.useRegex=n,pr.caseSensitive=o,pr.entries.length=0);let s=n||o?f=>f:f=>f.toLowerCase(),a=s(r),c=null,u=-1;for(let f=0;f<pr.entries.length;f++){let h=pr.entries[f],g=s(h.query);if(g===a)return pr.entries.splice(f,1),pr.entries.unshift(h),h.result;n||h.result.truncated||g.length<=u||!a.includes(g)||(c=h.result,u=g.length)}let p=c?JU(c,i):XU(t,i);return pr.entries.unshift({query:r,result:p}),pr.entries.length>8&&pr.entries.pop(),p}var pr,$I=k(()=>{"use strict";pr={tag:null,useRegex:!1,caseSensitive:!1,entries:[]}});function ep(e){if(!e?.managedId)return ZU;let t=l.managedSession,r=[t?.id,t?.role,t?.csrfToken,l.currentManagedTeam,l.managedTeams];return r.some((n,o)=>n!==SI[o])&&(SI=r,_I=new Map),_I}function hg(e){return nx.has(e)||nx.set(e,{reasons:Po(e),selected:""}),nx.get(e)}function tp(e){return JSON.stringify([e.managedId??e.integrity,hg(e).selected])}function ox(){try{return localStorage.getItem(CI)==="1"}catch{return!1}}function EI(){try{localStorage.setItem(CI,"1")}catch{}}function QU(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,r]of e.bundle.modules)if(t.includes("node_modules")&&r?.name&&typeof r.version=="string"&&r.version)return!0;return!1}function MI(e,t){return!e||xk(e.name)!=="stasis"?!1:e.managedId||!t||t.integrity!==e.integrity?!0:QU(t)}function eH(e){return Object.fromEntries([...e].map(([t,r])=>[t,[...r].toSorted()]))}function tH(e){return{...e,title:e.title||e.id,severity:e.severity??"unknown",url:e.ghsa?`https://github.com/advisories/${e.ghsa}`:e.source==="osv"?`https://osv.dev/vulnerability/${encodeURIComponent(e.id)}`:null,cvss:{score:e.cvss,vectorString:e.cvssVector},vulnerable_versions:e.range}}function rH(e){let t=Array.isArray(e)?Map.groupBy(e.map(tH),ix):new Map(Object.entries(e??{}));for(let[r,n]of t){let o=Array.isArray(n)?n.filter(i=>i&&typeof i.title=="string"&&typeof i.severity=="string"):[];o.length>0?t.set(r,o):t.delete(r)}return t}function RI(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function nH(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(eH(e))});if(!t.ok){let r=`HTTP ${t.status}`;try{let n=await t.json();typeof n?.error=="string"&&n.error&&(r=`${n.error} (HTTP ${t.status})`)}catch{}throw new Error(r)}return t.json()}function mg(e,t){return AI(e,t)}function oH(e,t){return AI(e,t,!0)}async function AI(e,t,r=!1){if(!e?.integrity||!e.managedId&&!ox())return;let n=ep(e),o=tp(e),i=n.get(o);if(r){if(!RI(e,i))return;n.set(o,{...i,recheckingRepositories:!0,repositoryError:null}),t()}else if(i)return;let{reasons:s,selected:a}=hg(e),c=e.managedId?new Map:Eu(e,s.get(a)??null);r||n.set(o,{state:"loading",query:c});try{let u,p=[];if(e.managedId){let f=await X6(e.managedId,void 0,a,r);c=Array.isArray(f.packages)?new Map(f.packages.map(h=>[ix(h),new Set(h.versions)])):new Map(Object.entries(f.packages).map(([h,g])=>[h,new Set(g)])),u=f.advisories,p=Array.isArray(f.skipped)?f.skipped:[]}else u=c.size>0?await nH(c):{};n.set(o,{state:"ok",byPackage:rH(u),query:c,skipped:p})}catch(u){let p=u?.message??"fetch-failed";n.set(o,r&&![401,403,404].includes(u?.status)?{...i,recheckingRepositories:!1,repositoryError:p}:{state:"error",reason:p,query:c})}t()}async function II(e,t){if(!e?.integrity)return;let r=ep(e),n=tp(e);r.get(n)?.state==="error"&&(r.delete(n),await mg(e,t))}function fg(e){return iH[e]??999}function sH(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function aH(){let e=typeof window>"u"?"":window.location.host;return d`<div class="bundle-advisories-consent"><div class="bundle-advisories-consent-card"><p class="bundle-advisories-consent-text">This bundle's dependency names and versions will be sent to the npm registry through a same-origin proxy (<span class="mono">${e}</span> → <span class="mono">registry.npmjs.org</span>) to look up published security advisories.</p><button type="button" class="bundle-advisories-consent-btn" data-advisories-consent>Confirm</button><p class="bundle-advisories-consent-note">This preference will be saved and reused for other bundles.</p></div></div>`}function TI(e,t=()=>{}){let r=e?hg(e):null,n=[...r?.reasons.keys()??[]].map(i=>({id:`reason:${i}`,label:i})),o=cH(e);return d`<div class="bundle-advisories-panel">${o!==m||n.length>0||e?.managedId?d`<div class="bundle-advisories-toolbar">${o} ${n.length>0||e?.managedId?d`<div class="bundle-advisories-scopes">${lH(e,t)} ${n.length>0?d`<bundle-scope-selector .reasons="${n}" .value="${r.selected?`reason:${r.selected}`:""}" label="Choose advisory scope" @scope-change="${i=>{let s=i.detail.value.replace(/^reason:/u,"");r.selected=r.reasons.has(s)?s:"";let a=mg(e,t);return t(),a}}"></bundle-scope-selector>`:m}</div>`:m}</div>`:m} ${uH(e)}</div>`}function lH(e,t){if(!e?.managedId)return m;let r=ep(e).get(tp(e)),n=!!r?.recheckingRepositories;return d`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!RI(e,r)}" aria-busy="${String(n)}" @click="${()=>oH(e,t)}">${n?"Rechecking\u2026":"Recheck against repositories"}</button>`}function cH(e){if(!e||!e.managedId&&!ox())return m;let t=ep(e).get(tp(e));if(t?.state!=="ok")return m;let r=t.query.size,n=t.byPackage.size;if(n===0)return m;let o=[...t.byPackage.values()].reduce((i,s)=>i+s.length,0);return d`<div class="bundle-advisories-summary">${o} ${o===1?"advisory":"advisories"} across ${n} of ${r} ${r===1?"package":"packages"}</div>`}function dH(e,t){let r=t.query.size;return r===0&&t.skipped.length>0?d`No packages could be audited.`:d`No advisories for the ${r} ${t.skipped.length>0?"audited ":""}${r===1?"package":"packages"} in ${hg(e).selected?"this scope":"this bundle"}.`}function uH(e){if(!e)return d`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.managedId&&!e.bundle)return d`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!e.managedId&&!ox())return aH();let t=ep(e).get(tp(e));if(!t||t.state==="loading")return d`<div class="bundle-advisories-empty">Loading advisories…</div>`;if(t.state==="error")return d`<div class="bundle-advisories-empty is-error"><span>Failed to fetch advisories: ${t.reason}</span> <button type="button" class="bundle-advisories-retry" data-advisories-retry>Retry</button></div>`;let r=t.byPackage.size===0?d`<div class="bundle-advisories-empty"><span>${dH(e,t)}</span></div>`:m;if(t.byPackage.size===0&&t.skipped.length===0&&!t.repositoryError)return r;let n=[...t.byPackage.entries()].toSorted(([o,i],[s,a])=>{let c=Math.min(...i.map(p=>fg(p.severity))),u=Math.min(...a.map(p=>fg(p.severity)));return c!==u?c-u:o.localeCompare(s)});return d`${r}<div class="bundle-advisories">${t.repositoryError?d`<div class="bundle-advisories-empty is-error" role="alert">Repository recheck failed: ${t.repositoryError}. Previous results are shown.</div>`:m} ${t.skipped.length>0?d`<section class="bundle-advisories-skipped" aria-label="Dependencies not audited"><h3>Not audited</h3><ul>${t.skipped.map(o=>d`<li><span class="mono">${ix(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:m}<ul class="bundle-advisories-list">${n.map(([o,i])=>pH(o,i,t.query.get(o)))}</ul></div>`}function pH(e,t,r){let n=[...t].toSorted((i,s)=>{let a=fg(i.severity)-fg(s.severity);return a!==0?a:(i.title??"").localeCompare(s.title??"")}),o=r?[...r].toSorted():[];return d`<li class="bundle-advisories-section"><div class="bundle-advisories-package"><span class="bundle-advisories-section-name">${e}</span> ${o.length>0?d`<span class="bundle-advisories-section-versions">${o.join(", ")}</span>`:m}</div><ul class="bundle-advisories-rows">${n.map(i=>gH(i))}</ul></li>`}function fH(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}function mH(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return d`<span>${e}</span>`;let r=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return d`<a class="bundle-advisory-cwe" href="${r}" target="_blank" rel="noopener noreferrer">${e}</a>`}function gH(e){let t=e.severity,r=e.title,n=typeof e.cvss?.score=="number"?e.cvss.score.toFixed(1):"",o=typeof e.cvss?.vectorString=="string"&&e.cvss.vectorString?e.cvss.vectorString:"",i=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,s=Array.isArray(e.versions)?e.versions.filter(f=>typeof f=="string"):[],a=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,c=e.ghsa??fH(a)??(typeof e.id=="string"?e.id:null),u=Array.isArray(e.cwe)?e.cwe.filter(f=>typeof f=="string"):[],p=c&&a?d`<a class="bundle-advisory-ghsa" href="${a}" target="_blank" rel="noopener noreferrer">${c}${hH}</a>`:m;return d`<li class="bundle-advisory-row"><div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${t}`}">${sH(t)}</span> ${n?d`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${n}</span></span>`:m}</div><div class="bundle-advisory-body"><div class="bundle-advisory-header"><span class="bundle-advisory-title">${r}</span> ${p}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${e.informational?d`<span>${e.informational}</span>`:m} ${i?d`<span>Affected <span class="mono">${i}</span></span>`:m} ${s.length>0?d`<span>Matches <span class="mono">${s.join(", ")}</span></span>`:m} ${u.length>0?d`<span class="bundle-advisory-cwes">${u.map((f,h)=>d`${h===0?"":", "}${mH(f)}`)}</span>`:m}</div>${o?d`<div class="bundle-advisory-cvss-vector mono">${o}</div>`:m}</div></div></li>`}var ZU,_I,SI,nx,CI,ix,iH,hH,sx=k(()=>{"use strict";T();U();Kt();Di();Gr();qk();Zu();ZU=new Map,_I=new Map,SI=[];nx=new WeakMap;CI="deepview.advisories.proxyConsent";ix=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;iH={critical:0,high:1,moderate:2,low:3,info:4};hH=d`<svg class="bundle-advisory-ghsa-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`});function vH(e){if(ax.has(e))return ax.get(e);let t=XE(e),r=Xk(e),n=[...t.keys()].filter(c=>t.get(c)!==null),{stripped:o}=Sr(n),i=new Map(n.map((c,u)=>[c,o[u]])),s={};for(let c of n){let u=i.get(c),p=r.get(c);s[u]={imports:p?[...p].map(f=>i.get(f)).filter(Boolean):[],size:t.get(c)}}let a={tree:s,origToStripped:i};return ax.set(e,a),a}function PI(e,t=null){let r={inprogress:0,fixed:0,invalid:0,deleted:0};if(!e?.fileHashes)return r;let n=new Set;for(let[o,i]of e.fileHashes)if(!(t&&!t.has(o))&&!n.has(i)){n.add(i);for(let s of hx(i)){let a=l.triage.get(q(s))?.triage;a&&r[a]!==void 0&&r[a]++}}return r}function nc(e,t="graph"){if(!e||e.size===0)return new Map;let r=new Map;for(let[n,o]of e){let i=hx(o);if(i.length===0)continue;let s=i.filter(a=>{let c=l.triage.get(q(a))?.triage??null;return t==="issues"?c!=="invalid"&&c!=="deleted":c===l.shownTriage});s.length!==0&&r.set(n,s)}return r}function DI(e){let t=vH(e),r=Po(e,t.origToStripped.keys());B.bundleReasonFor!==e.integrity&&(B.bundleReasonFor=e.integrity,B.dependencyPackagesView=!1,B.bundleReason=null);let{tree:n,origToStripped:o,selected:i}=ZA(t.tree,t.origToStripped,r,B.bundleReason);B.bundleReason=i;let s=Object.keys(n);if(s.length===0)return null;let a=null;if(e.fileHashes&&e.fileHashes.size>0){a=new Map;for(let[A,W]of e.fileHashes){let ce=o.get(A);ce!==void 0&&a.set(ce,W)}}let c=nc(a),u=new Map,p=new Map,f=new Map,h=new Map;for(let[A,W]of c){let ce={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},Ct=new Set,be=new Set,wn=[];for(let qe of W){ce[qe.severity]=(ce[qe.severity]||0)+1,Ct.add(qe.severity);let fr=l.triage.get(q(qe))?.color??"none";be.add(fr),wn.push({severity:qe.severity,color:fr})}u.set(A,ce),p.set(A,Ct),f.set(A,be),h.set(A,wn)}let g=B.bundleLayout==="matrix"||u.size===0?null:zm(n,u),b=new Map;for(let[A,W]of o)b.set(W,A);let v=Wr(e),x=v?new Map([...o].map(([A,W])=>[W,v.get(A)])):null,w=x?A=>x.get(A):null,y=s.filter(A=>Yk(A,b.get(A)??A,{packageDir:w?.(A)})==="__own__"),$=JA(y,w),_=B.splitOwnDirs&&$,S=A=>Yk(A,b.get(A)??A,{splitOwnDirs:_,packageDir:w?.(A)}),M=QA(e,o,S,v,t.origToStripped),R=new Set;for(let A of s)if(R.add(S(A)),R.size>=3)break;let P=R.size>=3,L=s;if(B.focusedPkg){let A=s.filter(W=>S(W)===B.focusedPkg);A.length>0?L=A:B.focusedPkg=null}return B.selected&&!Object.hasOwn(n,B.selected)&&(B.selected=null),{treeData:n,files:L,ownCounts:u,transitiveCounts:g,severitySets:p,colorSets:f,fileFindings:h,options:{pkgOf:S},strippedToOrig:b,canSplitOwnDirs:$,canPackagesView:P,supportsLayers:!0,layerRoots:M,ownSourcePackages:y.length>0?new Set(y.map(S)):void 0,reasons:[...r.keys()]}}function gg(){if(!rp)return;let e=Kl();e&&e.refreshSidebar(rp,{isBundleContext:!0})}function bg(){if(!rp)return;let e=Kl();e&&e.refreshTopPkgs(rp)}function zI(e){rp=e}function yH(e,t){let r=new Map,n=0;for(let{path:i,size:s,pkgDir:a}of e){if(typeof s!="number"||s<=0)continue;let c=vt(i,{packageDir:a});r.set(c,(r.get(c)??0)+s),n+=s}if(n===0)return m;let o=[...r.entries()].toSorted((i,s)=>(t==="size"?s[1]-i[1]:0)||eo(i[0]).localeCompare(eo(s[0]))||i[0].localeCompare(s[0]));return d`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${oe(o,([i])=>i,([i,s])=>d`<span class="bundles-dist-seg" style="${Me({flexGrow:s,background:cr(i)})}" data-tooltip="${i==="__own__"?m:`${i}: ${we(s)}`}"></span>`)}</div><ul class="bundles-dist-list">${oe(o,([i])=>i,([i,s])=>{let a=(s/n*100).toFixed(1),c=eo(i),u=cr(i);return d`<li><span class="bundles-dist-dot" style="${Me({background:u})}"></span> <span class="bundles-dist-pkg" data-tooltip="${i==="__own__"?m:i}">${c}</span> <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${Me({width:`${a}%`,background:u})}"></span> </span><span class="bundles-dist-size">${we(s)}</span> <span class="bundles-dist-percent">${a}%</span></li>`})}</ul></div>`}function LI(e,t,r,n,o,i,{bundleSize:s=null,resources:a=null}={}){let{prefix:c,stripped:u}=Sr(r),p=L=>o?.get(r[L]),f=new Set;for(let L=0;L<u.length;L++)f.add(vt(u[L],{packageDir:p(L)}));let h=l.bundleOverviewFilesSort,g=u.map((L,A)=>A).toSorted((L,A)=>(h==="size"?(n[A]??-1)-(n[L]??-1):0)||u[L].localeCompare(u[A])),b=u.map((L,A)=>({path:L,size:n[A],pkgDir:p(A)})),v=l.bundleOverviewPackagesSort,x=yH(b,v),w=x===m?d`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:x,y={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},$=0,_=new Map;if(l.bundleDetails?.fileHashes){let L=nc(l.bundleDetails.fileHashes,"issues");for(let A of L.values())for(let W of A){y[W.severity]!==void 0&&y[W.severity]++,$++;for(let ce of $d(W.fileHash,W))_.set(ce,(_.get(ce)??0)+1)}}let S=[..._.keys()].toSorted(),M=Ne.filter(L=>y[L]>0).map(L=>d`<span class="${`tree-count-chip ${L}`}">${y[L]} ${L.replaceAll("_"," ")}</span>`),R=r.length>0?d`<ul class="bundles-sources-list">${g.map(L=>{let A=r[L],W=n[L],ce=d`<span class="bundles-source-path">${u[L]}</span> ${W==null?m:d`<span class="bundles-source-size">${we(W)}</span>`}`;return d`<li>${a?.has(A)?d`<div class="bundles-source-row is-resource" data-tooltip="${A}">${ce}</div>`:d`<button type="button" class="bundles-source-row" data-bundle-view-source="${A}" data-tooltip="${A}">${ce}</button>`}</li>`})}</ul>`:d`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,P=S.length>0?d`<ul class="bundles-reports-list">${S.map(L=>{let A=Se[ot(L)]??Se.default,W=_.get(L)??0;return d`<li><button type="button" class="report-chip bundles-report-chip" data-tooltip="${L}" data-bundle-issue-report="${L}">${V(A)}<span class="report-chip-label">${Ae(L)}</span> <span class="bundles-report-count">${W} ${W===1?"issue":"issues"}</span></button></li>`})}</ul>`:d`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`;return d`<div class="bundles-overview"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e(c)}<dl class="bundles-detail-meta">${t}<dt>Sources</dt><dd>${r.length-(a?.size??0)}</dd>${s==null?m:d`<dt>Size</dt><dd>${we(s)}</dd>`} ${a?.size?d`<dt>Resources</dt><dd>${a.size}</dd>`:m}</dl>${i??m}</div>${$>0?d`<div class="bundles-issue-summary tree-count-chips">${M}</div>`:m}</div><div class="bundles-overview-columns"><section class="bundles-overview-col"><header class="bundles-overview-col-head"><span class="bundles-overview-col-title">Packages <span class="bundles-overview-col-count">${f.size}</span></span> <span class="bundles-overview-sort" role="group" aria-label="Package order">${[["name","Name"],["size","Size"]].map(([L,A])=>d`<button type="button" aria-pressed="${String(v===L)}" @click="${()=>{l.bundleOverviewPackagesSort=L,E()}}">${A}</button>`)}</span></header><div class="bundles-overview-col-body">${w}</div></section><section class="bundles-overview-col"><header class="bundles-overview-col-head"><span class="bundles-overview-col-title">Files <span class="bundles-overview-col-count">${r.length}</span></span> <span class="bundles-overview-sort" role="group" aria-label="File order">${[["name","Name"],["size","Size"]].map(([L,A])=>d`<button type="button" aria-pressed="${String(h===L)}" @click="${()=>{l.bundleOverviewFilesSort=L,E()}}">${A}</button>`)}</span></header><div class="bundles-overview-col-body bundles-overview-col-body--list">${R}</div></section>${S.length>0?d`<section class="bundles-overview-col"><header class="bundles-overview-col-head">Reports <span class="bundles-overview-col-count">${S.length}</span></header><div class="bundles-overview-col-body bundles-overview-col-body--list">${P}</div></section>`:m}</div></div>`}function Vi(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function ua(e){for(let t of Ne)for(let r of e)if(r.severity===t)return t;return e[0]?.severity??null}function kH(e,t,r,n,o=null){let i=e.split(`
|
|
138
|
+
`).length,s=String(i).length,a=Rr(t,r?.kind==="stasis"?r.bundle?.formats?.get(t):void 0),c=`${r?.integrity??""}\0${t}`;a&&!lx.has(c)&&!cx.has(c)&&(cx.add(c),(async()=>{let p=await jr(e,a,_1(r,t));lx.set(c,p??null),cx.delete(c),l.bundleSourceFile===t&&E()})());let u=lx.get(c);return d`<div class="bundle-source-lines" style="${Me({"--lineno-width":`${s}ch`})}"><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:i},(p,f)=>{let h=f+1,g=n.get(h),b=g?ua(g.map(x=>x.f)):null,v=g&&l.bundleSourceFindingIdx!=null&&g.some(x=>x.idx===l.bundleSourceFindingIdx);return d`<div class="${z({"bundle-source-lineno-row":!0,"is-match":o?.has(h)??!1})}" data-line="${h}">${g?d`<button type="button" class="${z({"bundle-source-dot":!0,[`sev-${b}`]:!0,active:v})}" data-bundle-source-finding="${g[0].idx}" data-tooltip="${`${g.length} ${g.length===1?"issue":"issues"} on line ${h}`}" aria-label="${`${g.length} issues on line ${h}`}"></button>`:d`<span class="bundle-source-dot-placeholder"></span>`} <span class="bundle-source-lineno-num">${h}</span></div>`})}</aside><pre class="bundle-source-code" tabindex="-1" aria-label="${t}"><code class="${a?`language-${a}`:""}">${typeof u=="string"?V(u):e}</code></pre></div>`}function xH(e){let t=l.bundleSourceFindingIdx;if(t==null)return m;let r=e[t];if(!r)return m;let n=r.fileHash?$d(r.fileHash,r):[],o=l.triage.get(q(r))?.triage,i=o==="fixed"?"Fixed":o==="inprogress"?"In progress":null,s=Ys(r),a=WI(r.line);return d`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${r.severity}`}">${r.severity.replaceAll("_"," ")}</span> ${i?d`<span class="${`bundle-source-panel-triage triage-${o}`}">${i}</span>`:m} <button type="button" class="bundle-source-panel-close" data-action="bundle-source-panel-close" aria-label="Close finding details">×</button></header><div class="bundle-source-panel-body">${a||s?d`<div class="bundle-source-panel-line-row">${a?d`<span class="bundle-source-panel-line">${a}</span>`:m} ${s?d`<span class="bundle-source-panel-meta" title="${s}">${s}</span>`:m}</div>`:m}<div class="bundle-source-panel-desc">${lr(Ga(r),{paragraphs:!1})}</div>${n.length>0?d`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${n.map(c=>{let u=nt[ot(c)]??nt.default;return d`<button type="button" class="report-chip bundle-source-panel-report" data-tooltip="${c}" data-bundle-issue-report="${c}">${V(u)}<span class="report-chip-label">${Ae(c)}</span></button>`})}</div>`:m}</div></aside>`}function mx(e,t,r){let n=[],o=new Map;if(typeof r=="string"&&e?.fileHashes){let s=nc(e.fileHashes,"issues").get(t)??[];for(let a=0;a<s.length;a++){let c=s[a];n.push(c);let u=parseInt(c.line,10);Number.isFinite(u)&&u>0&&(o.has(u)||o.set(u,[]),o.get(u).push({f:c,idx:a}))}}return{fileFindings:n,lineFindings:o}}function UI(e,t=null){return d`<header class="bundle-source-bar"><div class="bundle-source-title mono" title="${e}">${e}</div>${t?.files.length>1?VI(t):m} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function gx(e,t,r,n,o,i=null){return d`<div class="bundle-source-code-wrap">${typeof t=="string"?kH(t,e,r,o,i):d`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${xH(n)}`}function HI(){let e=l.bundleSourceFile;if(!e)return m;if(l.bundleDetailsTab==="code"||l.bundleDetailsTab==="search")return m;let t=l.bundleDetails,r=t?.sourceError||t?.error,n=!r&&(!t||t.metadataOnly===!0),i=dt(t).get(e),{fileFindings:s,lineFindings:a}=mx(t,e,i);return d`<div class="bundle-source-overlay"><div class="${z({"bundle-source-modal":!0,"with-panel":l.bundleSourceFindingIdx!=null})}">${UI(e,Jl(l.bundleCodeHistory,t?.integrity??null,e))}<div class="bundle-source-body" aria-busy="${String(n)}">${r?d`<div class="bundles-slide-placeholder is-error" role="status">Failed to load source: ${r}</div>`:n?d`<div class="bundles-slide-placeholder" role="status">Loading source…</div>`:gx(e,i,t,s,a)}</div></div></div>`}function jI(e,t){let r=oc(e??"",t).split("/");for(let n=1;n<r.length;n++)rc.set(r.slice(0,n).join("/"),!0)}function $H(e,t){l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery="",jI(e,t),E(),Vi()}function _H(e){let t=r=>{for(let n of r.dirs.values())rc.set(n.path,!1),t(n)};t(e),E()}function SH(e,t){let r=0,n=null;if(!t||t.size===0)return{count:r,worst:n};let o=i=>{for(let s of i.files.values()){let a=t.get(s);if(!a||a.length===0)continue;r+=a.length;let c=ua(a);(n===null||(We[c]??0)>(We[n]??0))&&(n=c)}for(let s of i.dirs.values())o(s)};return o(e),{count:r,worst:n}}function fx(e,t,r=0,n=null,o=!1,i=null){let s=[...e.dirs.entries()].toSorted(([f,h],[g,b])=>Wu(f,h).localeCompare(Wu(g,b))||h.path.localeCompare(b.path)),a=[...e.files.entries()].toSorted(([f],[h])=>f.localeCompare(h)),c=f=>{if(!t)return!1;for(let h of f.files.values())if(h===t)return!0;for(let h of f.dirs.values())if(c(h))return!0;return!1},u=(f,h)=>o?!0:rc.has(f)?rc.get(f):r===0||c(h),p=f=>h=>{rc.set(f,!h.currentTarget.parentElement.open)};return d`<ul class="${z({"bundle-code-tree":!0,root:r===0})}" aria-label="${r===0?"Source files":m}" @keydown="${r===0?RR:m}">${oe(s,([,f])=>f.path,([f,h])=>{let g=h.path,b=MR(f,h,r),v=h.package,x=v?.ecosystem==="cargo"||v?.ecosystem==="composer"||v?.ecosystem==="soldeer",w=v?.ecosystem==="composer"?jM:v?.ecosystem==="cargo"?VM:v?.ecosystem==="soldeer"?HM:UM,y=v?.variant?`${b.node.sourcePath}
|
|
139
|
+
Variant ${v.variant}`:b.node.sourcePath,$=h.packageInfo,_=SH(h,n);return d`<li class="bundle-code-tree-dir"><details .open="${ke(u(g,h))}"><summary @click="${p(g)}" data-tooltip-package="${$?.name??m}" data-tooltip-ecosystem="${$?.ecosystem??m}" data-tooltip-version="${$?.version??m}" data-tooltip-files="${$?.fileCount??m}" data-tooltip-repo="${$?.github??m}" data-tooltip="${y}"><span class="bundle-code-tree-chevron" aria-hidden="true"></span> ${v?w:m} <span class="${z({"bundle-code-tree-dirname":!0,"bundle-code-tree-package":!!v,"bundle-code-tree-package-vendored":x})}">${v?d`<span class="bundle-code-tree-package-name">${v.name}</span>${v.version?d`<span class="bundle-code-tree-package-version">${x?"- ":"@"}${v.version}</span>`:m}`:b.names.map((S,M)=>d`${M>0?d`<span class="bundle-code-tree-separator">/</span>`:m}${S}`)} </span>${v?.variant?d`<span class="bundle-code-tree-variant">variant ${v.variant}</span>`:m} ${_.count>0?d`<span class="${`bundle-code-tree-count sev-${_.worst}`}" title="${`${_.count} ${_.count===1?"issue":"issues"} inside`}">${_.count}</span>`:m}</summary>${fx(b.node,t,r+1,n,o,i)}</details></li>`})} ${oe(a,([,f])=>f,([f,h])=>{let g=n?.get(h),b=g&&g.length>0?ua(g):null,v=g?.length??0;return d`<li class="bundle-code-tree-file"><button type="button" class="${z({"bundle-code-tree-link":!0,current:h===t})}" data-bundle-view-source="${h}" aria-current="${h===t?"true":m}" data-tooltip="${h}">${V1(h,i?.get(h))}<span class="bundle-code-tree-name">${f}</span> ${v>0?d`<span class="${`bundle-code-tree-count sev-${b}`}" title="${`${v} ${v===1?"issue":"issues"}`}">${v}</span>`:m}</button></li>`})}</ul>`}function oc(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function CH(e,t,r,n,o="",i=null){if(!r)return fx(e,t,0,n,!1,i);let s=ER(e,r,o);return s?fx(s,t,0,n,!0,i):d`<div class="bundle-code-search-empty">No files match.</div>`}function EH(e,t,r,n=""){if(!t)return d`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let o=t.toLowerCase(),i=20,s=100,a=[],c=0;for(let[u,p]of e){if(typeof p!="string")continue;let f=[],h=p.split(`
|
|
140
|
+
`);for(let g=0;g<h.length;g++){let b=h[g];if(b.toLowerCase().includes(o)&&(f.push({ln:g+1,text:b}),c++,f.length>=i))break}if(f.length>0&&a.push({path:u,hits:f}),a.length>=s)break}return a.length===0?d`<div class="bundle-code-search-empty">No matches.</div>`:d`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${c} ${c===1?"hit":"hits"} in ${a.length} ${a.length===1?"file":"files"}</div>${a.map(({path:u,hits:p})=>{let f=oc(u,n);return d`<div class="${z({"bundle-code-search-file":!0,current:u===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${u}" data-tooltip="${u}">${f}</button><ul class="bundle-code-search-hits">${p.map(h=>d`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${u}" data-bundle-view-line="${h.ln}" data-bundle-view-scroll-block="start" data-tooltip="${`${u}:${h.ln}`}"><span class="bundle-code-search-hit-ln">${h.ln}</span> <span class="bundle-code-search-hit-text mono">${h.text.slice(0,200)}</span></button></li>`)}</ul></div>`})}</div>`}function MH(e,t,r,n=""){if(!e.fileHashes)return d`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=nc(e.fileHashes,"issues");if(o.size===0)return d`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let i=t.toLowerCase(),s=[];for(let[a,c]of o)for(let u=0;u<c.length;u++){let p=c[u],f=p.description??"";i&&!a.toLowerCase().includes(i)&&!p.severity.includes(i)&&!p.severity.replaceAll("_"," ").includes(i)&&!f.toLowerCase().includes(i)||s.push({file:a,finding:p,fileIdx:u})}return s.sort((a,c)=>{let u=We[a.finding.severity]??0,p=We[c.finding.severity]??0;return p!==u?p-u:a.file.localeCompare(c.file)}),s.length===0?d`<div class="bundle-code-search-empty">No matches.</div>`:d`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${s.length} ${s.length===1?"issue":"issues"}</div><ul class="bundle-code-search-issues">${s.map(({file:a,finding:c,fileIdx:u})=>{let p=c.severity,f=oc(a,n),h=a===r&&l.bundleSourceFindingIdx===u;return d`<li class="${z({"bundle-code-search-issue":!0,current:h})}"><button type="button" class="bundle-code-search-issue-link" data-bundle-view-source="${a}" data-bundle-view-finding-idx="${u}" data-bundle-view-line="${c.line??""}" data-tooltip="${a}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${p}`}">${p.replaceAll("_"," ")}</span> <span class="bundle-code-search-issue-path mono">${f}${c.line?`:${c.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${lr(Ga(c),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function RH(e,t){if(e.kind!=="stasis")return t;let r=Wr(e),n=new Map([...t].filter(([o])=>!/(?:^|\/)node_modules(?:\/|$)/u.test(o)&&!/(?:^|\/)(?:node_modules|dependencies|vendor)(?:\/|$)/u.test(r?.get(o)??o)));return n.size>0?n:t}function BI(e,t,r){let n=null,o=-1,i=0;for(let[c,u]of r){if(typeof t.get(c)!="string")continue;let p=We[ua(u)]??0;(p>o||p===o&&u.length>i||p===o&&u.length===i&&(n===null||c.localeCompare(n)<0))&&(n=c,o=p,i=u.length)}if(n)return n;if(e.kind==="stasis"&&e.bundle){for(let c of e.bundle.entries)if(typeof t.get(c)=="string")return c}let s=null,a=-1;for(let[c,u]of t)typeof u=="string"&&u.length>a&&(s=c,a=u.length);return s}function AH(e){let t=dt(e);if(t.size===0)return d`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;FI!==l.selectedBundle&&(rc.clear(),FI=l.selectedBundle,dx=null);let r=[...t.keys()].toSorted(),n=e.kind==="stasis"?e.bundle.modules:null,o=SR(Sr(r).prefix,n,r),i=r.map(y=>oc(y,o)),s=_R(i,r,n),a=e.fileHashes?nc(e.fileHashes,"issues"):new Map,c=RH(e,t),u=e.kind==="stasis"?new Map([...a].filter(([y])=>c.has(y))):a,p=l.bundleSourceFile;if(Do&&(Do.bundle!==l.selectedBundle||p&&p!==Do.path)&&(Do=null),!p)p=BI(e,c,u),p&&(l.bundleSourceFile=p,Do={bundle:l.selectedBundle,path:p,hadIssues:u.size>0},Vi());else if(Do&&!Do.hadIssues&&u.size>0){Do.hadIssues=!0;let y=BI(e,c,u);y&&y!==p&&(p=y,l.bundleSourceFile=y,l.bundleSourceFindingIdx=null,Do.path=y,Vi())}p!==dx&&(jI(p,o),dx=p);let f=p?t.get(p):null,{fileFindings:h,lineFindings:g}=mx(e,p,f),v=a.size>0?["files","code","issues"]:["files","code"],x=v.includes(l.bundleCodeSearchMode)?l.bundleCodeSearchMode:"files",w=l.bundleCodeSearchQuery;return d`<div class="bundle-code-view"><aside class="bundle-code-rail"><div class="bundle-code-rail-head"><span class="bundle-code-rail-label">Files</span> <span class="bundle-code-rail-count">${r.length}</span> <span class="bundle-code-rail-actions"><button type="button" class="bundle-code-rail-action" aria-label="Reveal current file" data-tooltip="Reveal current file" ?disabled="${!p}" @click="${()=>$H(p,o)}"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="4.5"/><circle cx="8" cy="8" r="1.5"/><path d="M8 0v3m0 10v3M0 8h3m10 0h3"/></svg></button> <button type="button" class="bundle-code-rail-action" aria-label="Collapse directories" data-tooltip="Collapse directories" ?disabled="${x!=="files"||!!w||s.dirs.size===0}" @click="${()=>_H(s)}"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><path d="M5 2h8a1 1 0 0 1 1 1v8M3 5h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1ZM4.5 9.5h4"/></svg></button></span></div>${o?d`<div class="bundle-code-rail-prefix mono" title="${o}">${o}</div>`:m}<bundle-code-search .modes="${v}"></bundle-code-search><div class="bundle-code-rail-body">${j1(x,[["files",()=>CH(s,p,w,a,o,e.kind==="stasis"?e.bundle.formats:null)],["code",()=>EH(t,w,p,o)],["issues",()=>MH(e,w,p,o)]])}</div></aside><bundle-code-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize file tree" data-tooltip="Drag to resize · double-click to reset"></bundle-code-splitter><div class="${z({"bundle-code-main":!0,"with-panel":l.bundleSourceFindingIdx!=null})}">${p?IH(e,p,f,h,g):d`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`}</div></div>`}function VI(e){return d`<span class="bundle-code-file-nav"><button type="button" class="focus-code-nav-btn" data-bundle-code-history="back" aria-label="Back to the previously shown file" ?disabled="${e.at===0}"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m10 3-5 5 5 5"/></svg></button> <button type="button" class="focus-code-nav-btn" data-bundle-code-history="forward" aria-label="Forward to the next shown file" ?disabled="${e.at>=e.files.length-1}"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg></button></span>`}function IH(e,t,r,n,o){let i=Jl(l.bundleCodeHistory,e.integrity,t),s=typeof r=="string"?r.split(`
|
|
141
|
+
`).length:0,a=typeof r=="string"?cs(r):0,c=n.map((u,p)=>({idx:p,line:parseInt(u.line,10)||0})).toSorted((u,p)=>u.line-p.line||u.idx-p.idx);return d`<header class="bundle-code-main-bar">${VI(i)} ${V1(t,e.kind==="stasis"?e.bundle.formats?.get(t):void 0)} <span class="bundle-code-main-path mono" title="${t}">${t}</span> <button type="button" class="bundle-code-copy-path" data-copy-path="${t}" aria-label="Copy file path">${wH}</button> <span class="bundle-code-main-spacer"></span> ${typeof r=="string"?d`<span class="bundle-code-main-stats">${s.toLocaleString()} ${s===1?"line":"lines"} · ${we(a)}</span>`:m} ${n.length>0?d`<span class="bundle-code-main-issues" data-bundle-code-issue-order="${JSON.stringify(c)}"><span class="${`bundle-code-tree-count sev-${ua(n)}`}" title="${`${n.length} ${n.length===1?"issue":"issues"} in this file`}">${n.length}</span> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="-1" aria-label="Previous issue">‹</button> <button type="button" class="bundle-code-issue-step" data-bundle-code-issue-step="1" aria-label="Next issue">›</button></span>`:m}</header><div class="bundle-code-main-body">${gx(t,r,e,n,o)}</div>`}function LH(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function FH(e,t,r){let n=[];for(let o of e){let i=Math.max(1,o.ln-r),s=Math.min(t,o.ln+r),a=n.at(-1);a&&i<=a.end+1?a.end=Math.max(a.end,s):n.push({start:i,end:s})}return n}function BH(e,t,r){if(e.length<=r)return{text:e,ranges:t,clipped:!1};let n=t.length>0?t[0][0]:0,o=n>r-60?Math.max(0,n-60):0,i=e.slice(o,o+r);if(o===0)return{text:i,ranges:t,clipped:!1};let s=[];for(let[a,c]of t){let u=a-o,p=c-o;p<=0||u>=i.length||s.push([Math.max(0,u),Math.min(i.length,p)])}return{text:i,ranges:s,clipped:!0}}function OH(e,t){if(t.length===0)return e;let r=[],n=0;for(let[o,i]of t){let s=Math.max(n,Math.min(o,e.length)),a=Math.max(s,Math.min(i,e.length));a<=s||(s>n&&r.push(e.slice(n,s)),r.push(d`<mark class="bundle-search-mark">${e.slice(s,a)}</mark>`),n=a)}return n<e.length&&r.push(e.slice(n)),r}function NH(e,t,r){let n=BH(e,r??[],TH);return d`<div class="${z({"bundle-search-line":!0,"is-match":r!=null})}"><span class="bundle-search-lineno">${t}</span> <span class="bundle-search-code">${n.clipped?d`<span class="bundle-search-clip">…</span>`:m}${OH(n.text,n.ranges)}</span></div>`}function PH(e,t,r,n,o){let{start:i,end:s}=r,a=i;for(let p=i;p<=s;p++)if(n.has(p)){a=p;break}let c=String(s).length,u=[];for(let p=i;p<=s;p++)u.push(NH(t[p-1]??"",p,n.get(p)??null));return d`${o?d`<div class="bundle-search-gap" aria-hidden="true"></div>`:m} <button type="button" class="bundle-search-snippet" style="${Me({"--bundle-search-lineno-w":`${c}ch`})}" data-bundle-view-source="${e}" data-bundle-view-line="${a}" data-bundle-view-scroll-block="center" data-tooltip="${`${e}:${a}`}">${u}</button>`}function DH(e,t,r){let{path:n,lines:o,hits:i}=e,s=oc(n,t),a=FH(i,o.length,r),c=new Map(i.map(f=>[f.ln,f.ranges])),u=i[0].ln,p=n===l.bundleSourceFile;return d`<section class="${z({"bundle-search-file":!0,current:p})}"><header class="bundle-search-file-head"><button type="button" class="bundle-search-file-name mono" data-bundle-view-source="${n}" data-bundle-view-line="${u}" data-bundle-view-scroll-block="center" data-tooltip="${n}">${s}</button> <span class="bundle-search-file-count">${i.length} ${i.length===1?"match":"matches"}</span></header><div class="bundle-search-snippets">${a.map((f,h)=>PH(n,o,f,c,h>0))}</div></section>`}function zH(e,t,r,n,o,i){if(!r)return d`<div class="bundle-search-results"><div class="bundle-search-hint">Search across every source in this bundle. Each match shows the surrounding lines for context — fewer matches get more context. Toggle <span class="bundle-search-hint-kbd">Aa</span> for case-sensitive and <span class="bundle-search-hint-kbd">.*</span> for regular-expression matching.</div></div>`;let s=xI(e.integrity??"",t,r,n,o);if(s.error)return d`<div class="bundle-search-results"><div class="bundle-search-error"><span class="bundle-search-error-label">Invalid regular expression</span> <span class="bundle-search-error-msg mono">${s.error}</span></div></div>`;let{fileResults:a,totalHits:c,truncated:u}=s,p=[...t.keys()].toSorted(),{prefix:f}=Sr(p);if(a.length===0)return d`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let h=i?LH(c):0,g=a.length;return d`<div class="bundle-search-results"><div class="bundle-search-summary"><span>${c}${u?"+":""} ${c===1?"match":"matches"} in ${g}${u?"+":""} ${g===1?"file":"files"}</span> ${f?d`<span class="bundle-search-summary-prefix mono" title="${f}">${f}</span>`:m} ${u?d`<span class="bundle-search-summary-more">results capped — refine to narrow</span>`:m}</div>${oe(a,b=>b.path,b=>DH(b,f,h))}</div>`}function UH(e,t,r,n){if(!t||typeof e!="string")return null;let o=rx(t,r,n);if(o.error)return null;let i=new Set,s=e.split(`
|
|
142
|
+
`);for(let a=0;a<s.length;a++)o.ranges(s[a]).length>0&&i.add(a+1);return i}function HH(e,t,r){let n=l.bundleSourceFile;if(!n)return m;let o=t.get(n),{fileFindings:i,lineFindings:s}=mx(e,n,o);return d`<aside class="bundle-search-side">${UI(n)}<div class="bundle-source-body">${gx(n,o,e,i,s,r)}</div></aside>`}function jH(e){let t=dt(e);if(t.size===0)return d`<div class="bundle-search-view"><div class="bundle-code-empty">This bundle doesn't carry any source content.</div></div>`;let r=l.bundleSearchQuery,n=l.bundleSearchRegex,o=l.bundleSearchCase,i=null;if(l.bundleSourceFile){let a=UH(t.get(l.bundleSourceFile),r,n,o);a&&a.size===0?(l.bundleSourceFile=null,l.bundleSourceFindingIdx=null):i=a}let s=l.bundleSearchContext;return d`<div class="bundle-search-view"><div class="bundle-search-bar-row"><bundle-search></bundle-search><mode-switch data-bundle-search-context label="Context" .checked="${s}" accessible-label="Toggle context lines"></mode-switch></div><div class="bundle-search-main">${zH(e,t,r,n,o,s)} ${HH(e,t,i)}</div></div>`}function VH(e){let t=MI(e,l.bundleDetails);l.bundleDetailsTab==="advisories"&&!t&&(l.bundleDetailsTab="overview");let r=ec(l.bundles??[],l.selectedBundle).length>0;l.bundleDetailsTab==="compare"&&!r&&(l.bundleDetailsTab="overview");let n=l.bundleDetailsTab,o=n==="overview",i=l.bundleDetails,s=!!(i&&i.integrity===e.integrity),a=s&&!i.error&&!!(i.json||i.bundle)&&!(i.metadataOnly&&Ti(n));return n==="advisories"&&t&&a&&mg(i,E).catch(()=>{}),d`<div class="bundles-view bundles-slide-view"><header class="bundles-slide-bar">${C()&&e.managedId&&e.repoId==null?d`<span class="bundles-slide-breadcrumb"><button type="button" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}))}">Bundles</button> <span aria-hidden="true">></span></span>`:m} <span class="bundles-slide-icon" aria-hidden="true">${V(or)}</span><div class="bundles-slide-title"><div class="bundles-slide-name">${e.name}</div></div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!cg(e)}" @click="${()=>{Zk(e)}}">${V(Cl)}<span>Scan</span></button><div class="bundles-slide-tabs" role="tablist">${t?d`<button type="button" class="${z({"bundles-tab":!0,active:n==="advisories"})}" data-bundle-tab="advisories" aria-selected="${String(n==="advisories")}" role="tab">Advisories</button>`:m} <button type="button" class="${z({"bundles-tab":!0,active:n==="issues"})}" data-bundle-tab="issues" aria-selected="${String(n==="issues")}" role="tab">Issues</button> <button type="button" class="${z({"bundles-tab":!0,active:n==="terminal"})}" data-bundle-tab="terminal" aria-selected="${String(n==="terminal")}" role="tab">Terminal</button> <button type="button" class="${z({"bundles-tab":!0,active:n==="treemap"})}" data-bundle-tab="treemap" aria-selected="${String(n==="treemap")}" role="tab">Treemap</button> <button type="button" class="${z({"bundles-tab":!0,active:n==="graph"})}" data-bundle-tab="graph" aria-selected="${String(n==="graph")}" role="tab">Graph</button> <button type="button" class="${z({"bundles-tab":!0,active:n==="code"})}" data-bundle-tab="code" aria-selected="${String(n==="code")}" role="tab">Code</button> <button type="button" class="${z({"bundles-tab":!0,active:n==="search"})}" data-bundle-tab="search" aria-selected="${String(n==="search")}" role="tab">Search</button> ${r?d`<button type="button" class="${z({"bundles-tab":!0,active:n==="compare"})}" data-bundle-tab="compare" aria-selected="${String(n==="compare")}" role="tab">Compare</button>`:m} <button type="button" class="${z({"bundles-tab":!0,active:o})}" data-bundle-tab="overview" aria-selected="${String(o)}" role="tab">Overview</button></div></header><div class="${z({"bundles-slide-body":!0,"bundles-slide-body-overview":o})}">${o?ej(e,i):a?j1(n,[["terminal",()=>d`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>d`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>d`<bundle-treemap .details="${i}"></bundle-treemap>`],["code",()=>AH(i)],["search",()=>jH(i)],["compare",()=>d`<bundle-compare .details="${i}" .integrity="${e.integrity}"></bundle-compare>`],["issues",()=>GH(i)],["advisories",()=>TI(i,E)]]):s&&i.sourceError?d`<div class="bundles-slide-placeholder is-error">${i.sourceError} <button type="button" data-bundle-retry-sources>Retry</button></div>`:s&&!i.metadataOnly?d`<div class="${z({"bundles-slide-placeholder":!0,"is-error":!!i.error})}">${i.error?`Failed to parse: ${i.error}`:"Bundle contents not parsed."}</div>`:d`<div class="bundles-slide-placeholder">Loading bundle…</div>`}</div></div>`}function WH(e,t={}){if(!e)return m;let r=[];if(e.fileHash&&(r=$d(e.fileHash,e)),r.length===0&&t.bucketKey&&(t.kind==="package"?r=ly(t.bucketKey,e):t.kind==="repository"&&(r=cy(t.bucketKey,e))),r.length===0)return m;let n=r.slice(0,2),o=r.length-n.length;return d`<div class="bundle-issue-reports">${n.map(i=>{let s=nt[ot(i)]??nt.default;return d`<button type="button" class="report-chip" data-tooltip="${i}" data-bundle-issue-report="${i}">${V(s)}<span class="report-chip-label">${Ae(i)}</span></button>`})} ${o>0?d`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:m}</div>`}function WI(e){if(e==null||e==="")return"";let t=String(e),r=t.indexOf("-");if(r>0){let o=parseInt(t.slice(0,r),10),i=parseInt(t.slice(r+1),10);return Number.isFinite(o)&&Number.isFinite(i)&&i>o?`Lines ${o}-${i}`:Number.isFinite(o)?`Line ${o}`:""}let n=parseInt(t,10);return Number.isFinite(n)?`Line ${n}`:""}function tc(e,t){return d`<div class="bundle-issues-empty"><p class="bundle-issues-empty-primary">${e}</p>${t?d`<p class="bundle-issues-empty-hint">${t}</p>`:m}</div>`}function GH(e){if(e.managedId)return tc("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return tc("Computing file hashes\u2026","Hashing this bundle's sources so findings from your reports can be matched against them.");if(e.fileHashes.size===0)return tc("This bundle doesn't carry any source content.","Issues are matched by source-file hash, so a bundle without inline sources has nothing to match findings against.");let t=nc(e.fileHashes,"issues");if(t.size===0){let r=bH();if(r===0)return tc("No issues match this bundle's files.","Issues are analyzer findings matched to this bundle by source-file hash. No hash-carrying findings are indexed yet \u2014 hash matching needs the analyzer's native JSON reports; drop one and any matches will appear here automatically.");let n=0;for(let o of e.fileHashes.values())n+=hx(o).length;return n>0?tc("All matching issues are dismissed.",`${n} ${n===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):tc("No issues match this bundle's files.",`None of the ${r.toLocaleString()} indexed ${r===1?"finding":"findings"} reference a source file in this bundle \u2014 matching compares exact file hashes, so findings from a different build of the same project won't line up.`)}return np(t,{kind:"bundle"})}function np(e,{kind:t,bucketKey:r}={}){let n=[...e.keys()],{prefix:o,stripped:i}=Sr(n),s=new Map(n.map((u,p)=>[u,i[p]])),a=[...e.entries()].toSorted(([u,p],[f,h])=>{let g=We[ua(p)]??0,b=We[ua(h)]??0;return b!==g?b-g:(s.get(u)??u).localeCompare(s.get(f)??f)}),c=[...e.values()].reduce((u,p)=>u+p.length,0);return d`<div class="bundle-issues"><div class="bundle-issues-summary">${c} ${c===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?d`<span class="mono">${o}</span>`:m}</div><ul class="bundle-issues-list">${oe(a,([u])=>u,([u,p])=>{let f=s.get(u)??u,h=[...p].toSorted((b,v)=>{let x=We[b.severity]??0,w=We[v.severity]??0;if(w!==x)return w-x;let y=parseInt(b.line,10)||0,$=parseInt(v.line,10)||0;return y-$}),g=t==="repository"&&r?`${/^https?:/iu.test(r)?r.replace(/\/$/u,""):`https://github.com/${r}`}/blob/HEAD/${u}`:null;return d`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?d`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${u}" data-tooltip="${u}">${f}</button>`:g?d`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${g}" target="_blank" rel="noopener" data-tooltip="${u}">${f}</a>`:d`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" title="${u}">${f}</span>`} <span class="bundle-issues-file-count">${p.length} ${p.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${oe(h,b=>b.id??`${u}\0${b.line??""}\0${b.severity??""}\0${b.description??""}`,b=>{let v=p.indexOf(b),x=b.severity,w=WI(b.line),y=l.triage.get(q(b))?.triage,$=y==="fixed"||y==="invalid"||y==="deleted"?y.toUpperCase():y==="inprogress"?"In progress":null,_=d`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${x}`}">${x.replaceAll("_"," ")}</span> ${w?d`<span class="bundle-issues-finding-line">${w}</span>`:m} ${$?d`<span class="${`bundle-issues-finding-triage triage-${y}`}">${$}</span>`:m} <span class="bundle-issues-finding-spacer"></span> ${WH(b,{kind:t,bucketKey:r})}</div><div class="bundle-issues-finding-desc">${lr(Ga(b),{paragraphs:!1})}</div>`;return d`<li class="bundle-issues-finding">${t==="bundle"?d`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${u}" data-bundle-view-finding-idx="${v}" data-bundle-view-line="${b.line??""}" data-tooltip="${u}">${_}</button>`:d`<div class="bundle-issues-finding-link bundle-issues-finding-static" title="${u}">${_}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function GI(e){let t=l.selectedBundle,r=t?e.find(n=>n.integrity===t):null;return r?VH(r):d`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">${e.length===0?d`No bundles yet. Drop a <code>.map</code> sourcemap or a <code>.stasis.code.br</code> bundle to start.`:"Pick a bundle from the sidebar to open it."}</p></div>`}function qH(e){if(OI[e])return OI[e];let t=0;for(let r of e)t=Math.imul(t,31)+r.codePointAt(0)|0;return NI[(t>>>0)%NI.length]}function YH(e){let t=e.currentTarget,r=e.target.closest?.(".bundles-languages-segment");!r||!t.contains(r)||(t.dataset.tooltip=r.dataset.languageTooltip??"",lw(t))}function XH(e){delete e.currentTarget.dataset.tooltip,wi()}function JH(e){if(e?.kind!=="stasis"||!e.bundle)return m;let t=e.lineCounts?.size>0?e.lineCounts:new Map([...dt(e)].map(([i,s])=>[i,Au(s)])),r=e.codeStats??Su(t,Xt(e)),n=r.lines,o=r.languages.filter(i=>i.lines>0);return n<=0||o.length===0?m:d`<div class="bundles-languages-bar" data-tooltip-managed aria-label="Languages in this bundle" @pointerover="${YH}" @pointerleave="${XH}">${o.map(({key:i,label:s,lines:a})=>{let c=a/n*100;return d`<span class="bundles-languages-segment" style="${Me({flexGrow:a,background:qH(i)})}" data-language-tooltip="${`${s} \xB7 ${c<1?c.toFixed(1):c.toFixed(0)}% \xB7 ${a} ${a===1?"line":"lines"}`}"></span>`})}</div>`}async function ZH(e){try{await(await Be()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function QH(e,t){let r=bI(t),n=JH(t);return d`<div class="bundles-overview-exports">${n}<div class="bundles-overview-exports-row">${e.managedId?Un()?d`<button type="button" class="bundles-download-btn" @click="${()=>{ZH(e)}}">${ux}<span>Download bundle</span></button>`:d`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${ux}<span>Download bundle</span></a>`:d`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${ux}<span>Download bundle</span></button>`} ${r?d`<div class="bundles-export-pair"><button type="button" class="bundles-download-btn" data-bundle-export-sbom="cyclonedx" data-tooltip="Export a CycloneDX SBOM (.cdx.json)">CycloneDX</button> <button type="button" class="bundles-download-btn" data-bundle-export-sbom="spdx" data-tooltip="Export an SPDX SBOM (.spdx.json)">${KH}<span>SPDX</span></button></div>`:m}</div></div>`}function px(e,t,r=m){return d`<div class="bundles-overview"><div class="bundles-overview-summary"><div class="bundles-detail-meta-row">${e}${t}</div></div>${r}</div>`}function ej(e,t){let r=t?.integrity===e.integrity&&!t.error&&t.kind==="stasis"?t.bundle:null,n=(i="",s=!1)=>d`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd>${e.managedId?d`<dt>Repository</dt><dd>${e.repoFullName||"Unattached"}</dd>${e.repoId==null?m:d`<dt>Directory</dt><dd class="mono">/${e.repoDirectory??""}</dd>`}`:m} ${fI(r,i).map(a=>d`<dt>${a.label}</dt><dd class="bundle-origin-row"><a class="bundle-origin-link" href="${a.href}" target="_blank" rel="noopener noreferrer">${a.label==="GitHub"?V(Wn):m}<span>${a.text}</span></a> ${a.commit?d`<a class="bundle-origin-link bundle-commit-link" href="${a.commit.href}" title="${a.commit.hash}" target="_blank" rel="noopener noreferrer">${V(Nh)}<span>${a.commit.text}</span></a>`:m}</dd>`)}<dt>Integrity</dt><dd class="mono bundle-integrity">${e.integrity}</dd>${i?d`<dt>Prefix</dt><dd class="mono">${i}</dd>`:m} ${r?.entries.size>0?d`<dt>Entry points</dt><dd class="mono"><ul class="bundles-entry-points">${[...r.entries].map(a=>d`<li><button type="button" class="bundle-entry-point" data-bundle-view-source="${a}">${oc(a,i)}</button></li>`)}</ul></dd>`:m} ${s&&t&&t.integrity===e.integrity?d`<dt>Size</dt><dd>${we(t.size)}</dd>`:m}</dl>`,o=QH(e,t);if(!t||t.integrity!==e.integrity)return px(n("",!0),o);if(t.error)return px(n("",!0),o,d`<div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div>`);if(t.kind==="sourcemap"&&t.json){let i=t.json,s=i.sources??[],a=Xt(t),c=t.sourceSizes??(a.size===s.length?s.map(p=>a.get(p)??null):s.map((p,f)=>typeof i.sourcesContent?.[f]=="string"?cs(i.sourcesContent[f]):null)),u=d`<dt>Version</dt><dd>${String(i.version??"?")}</dd>${i.file?d`<dt>Output</dt><dd class="mono">${i.file}</dd>`:m} ${i.sourceRoot?d`<dt>Source root</dt><dd class="mono">${i.sourceRoot}</dd>`:m} ${i.names||t.namesCount!=null?d`<dt>Names</dt><dd>${i.names?.length??t.namesCount}</dd>`:m}`;return LI(n,u,s,c,null,o,{bundleSize:t.size})}if(t.kind==="stasis"&&t.bundle){let i=t.bundle,s=Xt(t),a=Nl(t),c=[...a.keys()],u=new Set(c.filter(b=>a.get(b)==="resource")),p=new Set;for(let b of i.imports.keys()){let v=b.replace(/\s*\(with: .*\)\s*$/u,"");for(let x of v.split(", "))p.add(x)}let f=[...p].toSorted(),h=c.map(b=>s.get(b)),g=d`<dt>Version</dt><dd>${String(i.version)}</dd>${f.length>0?d`<dt>Resolution kinds</dt><dd>${f.join(", ")}</dd>`:m}`;return LI(n,g,c,h,Wr(t),o,{bundleSize:t.size,resources:u})}return px(n("",!0),o,d`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`)}var hx,bH,rp,ax,lx,cx,wH,Do,rc,FI,dx,TH,ux,KH,OI,NI,op=k(()=>{"use strict";T();js();Kt();DM();He();dr();Pt();ao();Je();un();WM();AR();IR();rk();gt();ug();Qk();U();he();Dt();Gr();d1();hI();Pl();tx();$I();Ql();lg();ct();ea();Hu();ia();ko();z1();xo();sx();oa();Yt();hx=e=>C()?[]:sy(e),bH=()=>C()?0:ay(),rp=null,ax=new WeakMap;lx=new Map,cx=new Set,wH=d`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Do=null;rc=new Map,FI=null,dx=null;TH=400;ux=d`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8"/><path d="m4.5 7 3.5 3.5L11.5 7"/><path d="M2.5 13h11"/></svg>`,KH=d`<svg viewBox="0 0 24 24" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M0 0v24H8.222l2.089-2.373 2.09-2.374V13.2H18.978l2.51-2.488L24 8.223V0H12zm5.2 5.2h13.791L12.2 12c-3.735 3.74-6.838 6.8-6.896 6.8-.057 0-.104-3.06-.104-6.8zm8.4 8.8v10H24V14h-5.2z"/></svg>`,OI=Object.freeze({javascript:"#f1e05a",jsx:"#f1e05a",typescript:"#3178c6",tsx:"#3178c6",json:"#f1e05a",css:"#663399",markup:"#e34c26",yaml:"#cb171e",bash:"#89e051",markdown:"#083fa1",solidity:"#AA6746",php:"#4F5D95",rust:"#dea584",ruby:"#701516",java:"#b07219",cpp:"#f34b7d",c:"#555555",objectivec:"#438eff",python:"#3572A5",go:"#00ADD8",kotlin:"#A97BFF",swift:"#F05138",dart:"#00B4AB",sql:"#e38c00",lua:"#000080",csharp:"#178600",scala:"#DC322F",vue:"#41B883",svelte:"#FF3E00"}),NI=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"])});function KI(){Nr().catch(()=>{});let e=Nn(),t={inprogress:0,fixed:0,invalid:0,deleted:0},r=[];for(let[h,g]of e){let b=[],v=[],x=new Map,w=new Set;for(let[y,$]of g.byVersion){let _=[],S=new Map;for(let M of $.findings){let R=l.triage.get(q(M))?.triage??null;R==="inprogress"?t.inprogress++:R==="fixed"?t.fixed++:R==="invalid"?t.invalid++:R==="deleted"&&t.deleted++,R===l.shownTriage&&(_.push(M),S.has(M.file)||S.set(M.file,[]),S.get(M.file).push(M))}if(_.length!==0){b.push([y,{findings:_,files:S,reports:$.reports}]);for(let M of _)v.push(M),x.has(M.file)||x.set(M.file,[]),x.get(M.file).push(M);for(let M of $.reports)w.add(M)}}b.length!==0&&(b.sort(([y],[$])=>Bv(y,$)),r.push([h,{findings:v,files:x,reports:w,versions:b}]))}let n=l.selectedPackage,o=n?r.find(([h])=>h===n)??null:null,i=null;if(o){let h=o[1].versions,g=l.selectedPackageVersion;i=h.find(([b])=>b===g)??null,!i&&h.length===1&&(i=h[0])}let s=i?i[1]:o?o[1]:null;if(o&&l.packageDetailsTab==="issues")return aj(o[0],s,i?i[0]:void 0);let a=l.packagesSearchQuery.trim().toLowerCase(),c=a?r.filter(([h])=>h.toLowerCase().includes(a)):r.slice();ij(c,l.packagesSortBy);let u=r.reduce((h,[,g])=>h+g.findings.length,0),p=new Set;for(let[,h]of r)for(let g of h.reports)p.add(g);let f=o?"packages-layout open":"packages-layout";return d`<div class="${z({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${c.length===r.length?d`${r.length} ${r.length===1?"package":"packages"}`:d`${c.length} of ${r.length} ${r.length===1?"package":"packages"}`}</span> ${u>0?d`<span>${u} ${u===1?"finding":"findings"} across ${p.size} ${p.size===1?"report":"reports"}</span>`:m}</div></div>${nj(t)}</header>${r.length===0?d`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":l.shownTriage?`No ${l.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:c.length===0?d`<p style="color:var(--muted)">No packages match "${l.packagesSearchQuery}".</p>`:d`<div class="${f}"><ul class="packages-list">${oe(tj(c),rj,h=>lj(h,n,l.selectedPackageVersion))}</ul>${o?d`<aside class="packages-details" id="packages-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-package aria-label="Close details">×</button></header><div class="packages-details-body">${uj(o[0],s,i?i[0]:void 0)}</div></aside>`:m}</div>`}</div>`}function tj(e){let t=[];for(let[r,n]of e){let o=n.versions;if(o.length<=1){let[c,u]=o[0];t.push({kind:"single",pkg:r,version:c,bucket:u,totalVersions:1});continue}let[i,s]=o[0],a=l.expandedPackages.has(r);if(t.push({kind:"latest",pkg:r,version:i,bucket:s,totalVersions:o.length,expanded:a}),a)for(let c=1;c<o.length;c++){let[u,p]=o[c];t.push({kind:"other",pkg:r,version:u,bucket:p,totalVersions:o.length})}}return t}function rj(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function nj(e){return d`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${oj}"></triage-selector></div>`}function ij(e,t){let r=t==="name-asc"?(n,o)=>n[0].localeCompare(o[0]):t==="files-desc"?(n,o)=>o[1].files.size-n[1].files.size||n[0].localeCompare(o[0]):t==="reports-desc"?(n,o)=>o[1].reports.size-n[1].reports.size||n[0].localeCompare(o[0]):(n,o)=>o[1].findings.length-n[1].findings.length||n[0].localeCompare(o[0]);e.sort(r)}function sj(e,t){let r={live:0,invalid:0,deleted:0};if(!e)return r;let n=t===void 0?e.files.values():e.byVersion.get(t)?.files.values()??[].values();for(let o of n)for(let i of o){let s=l.triage.get(q(i))?.triage??null;s==="invalid"?r.invalid++:s==="deleted"?r.deleted++:r.live++}return r}function aj(e,t,r){let n=Nn().get(e),o=sj(n,r),i=l.packageSlideTriage??"live",s=n?qI(n,e,i,r):new Map,a=[...s.values()].reduce((f,h)=>f+h.length,0),c=i==="live"?a===1?"issue":"issues":a===1?`${i} issue`:`${i} issues`,u=i==="live"?"No live issues for this package.":`No ${i} issues for this package.`,p=typeof r=="string"?` @ ${r}`:"";return d`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name">${e}${p}</div><div class="bundles-slide-integrity">${a} ${c} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?d`<div class="bundle-issues-empty">${u}</div>`:np(s,{kind:"package",bucketKey:e})}</div></div>`}function lj(e,t,r){let{kind:n,pkg:o,version:i,bucket:s}=e,a={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let b of s.findings){let v=ue(b,l.severityMode);a[v]!==void 0&&a[v]++}let c=Ne.filter(b=>a[b]>0),u=cr(o),f={selected:o===t&&cj(e,r),"packages-row-latest":n==="latest","packages-row-other":n==="other"},h=i===null?"":i,g=i===null?`Open issues for ${o}`:`Open issues for ${o}@${i}`;return d`<li class="${z(f)}" data-select-package="${o}" data-select-package-version="${h}"><span class="packages-dot" style="${Me({background:u})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name">${o}${i===null?m:d`<span class="packages-version">@${i}</span>`} </span>${n==="latest"?dj(o,e.expanded,e.totalVersions-1):m}</div><span class="packages-row-meta">${s.findings.length} ${s.findings.length===1?"finding":"findings"} · ${s.files.size} ${s.files.size===1?"file":"files"} · ${s.reports.size} ${s.reports.size===1?"report":"reports"}</span></div>${c.length>0?d`<div class="packages-row-chips">${c.map(b=>d`<span class="${`tree-count-chip ${b}`}" title="${b.replaceAll("_"," ")}">${a[b]}</span>`)}</div>`:m} <button type="button" class="packages-row-issues" data-package-row-issues="${o}" data-package-row-issues-version="${h}" aria-label="${g}">Issues →</button></li>`}function cj(e,t){return e.kind==="single"?!0:e.version===t}function dj(e,t,r){let n=t?"Hide":`+${r} ${r===1?"version":"versions"}`;return d`<button type="button" class="${z({"packages-row-expand":!0,expanded:t})}" data-package-expand="${e}" aria-expanded="${String(t)}" aria-label="${t?`Hide older versions of ${e}`:`Show older versions of ${e}`}" data-tooltip="${t?"Hide older versions":`Show older versions (${r})`}"><span class="packages-row-expand-chevron" aria-hidden="true"></span> <span class="packages-row-expand-label">${n}</span></button>`}function uj(e,t,r){let n=Nn().get(e),i=[...(n?qI(n,e,"live",r):new Map).values()].reduce((s,a)=>s+a.length,0);return d`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-package-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${i>0?d`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${i}) →</button>`:m}</div>${pj(e,t,r)}`}function qI(e,t,r="live",n){let o=new Map,i=n===void 0?e.files:e.byVersion.get(n)?.files??new Map;for(let[s,a]of i){let c=a.filter(f=>{let h=l.triage.get(q(f))?.triage??null;return r==="invalid"?h==="invalid":r==="deleted"?h==="deleted":h!=="invalid"&&h!=="deleted"});if(c.length===0)continue;let u=YI(t,s);o.has(u)||o.set(u,[]);let p=o.get(u);for(let f of c)p.push(f)}return o}function pj(e,t,r){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let f of t.findings){let h=ue(f,l.severityMode);n[h]!==void 0&&n[h]++}let o=Ne.filter(f=>n[f]>0),i=[...t.files.entries()].toSorted(([f,h],[g,b])=>b.length!==h.length?b.length-h.length:f.localeCompare(g)),s=[...t.reports].toSorted((f,h)=>f.localeCompare(h)),c=Nn().get(e)?.repos,u=c&&c.size===1?[...c][0]:null,p=u?/^https?:/iu.test(u)?u:`https://github.com/${u}`:null;return d`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${r?d`<dt>Version</dt><dd class="mono">${r}</dd>`:m} ${p?d`<dt>Repository</dt><dd class="mono"><a href="${p}" target="_blank" rel="noopener">${u}</a></dd>`:m}<dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${o.length>0?d`<div class="packages-detail-chips">${o.map(f=>d`<span class="${`tree-count-chip ${f}`}">${n[f]} ${f.replaceAll("_"," ")}</span>`)}</div>`:m}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${s.map(f=>{let h=Se[ot(f)]??Se.default;return d`<li><button type="button" class="packages-detail-report" data-tooltip="${f}" data-package-report="${f}">${V(h)}<span class="packages-detail-report-label">${Ae(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${i.map(([f,h])=>{let g=YI(e,f);return d`<li class="packages-detail-file"><span class="packages-detail-file-path mono" title="${f}">${g}</span> <span class="packages-detail-file-count">${h.length}</span></li>`})}</ul>`}function YI(e,t){for(let r of["node_modules","dependencies"]){let n=`${r}/${e}/`,o=t.indexOf(n);if(o>=0)return t.slice(o+n.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}var oj,XI=k(()=>{"use strict";T();He();Pt();ao();Je();U();ct();he();un();ia();op();oj=["inprogress","fixed","invalid","deleted"]});function JI(){Nr().catch(()=>{});let e=Ts(),t={inprogress:0,fixed:0,invalid:0,deleted:0},r=[];for(let[p,f]of e){let h=[],g=new Map;for(let b of f.findings){let v=l.triage.get(q(b))?.triage??null;v==="inprogress"?t.inprogress++:v==="fixed"?t.fixed++:v==="invalid"?t.invalid++:v==="deleted"&&t.deleted++,v===l.shownTriage&&(h.push(b),g.has(b.file)||g.set(b.file,[]),g.get(b.file).push(b))}h.length>0&&r.push([p,{findings:h,files:g,reports:f.reports}])}let n=l.selectedRepository,o=n?r.find(([p])=>p===n)??null:null;if(o&&l.repositoryDetailsTab==="issues")return bj(o[0],o[1]);let i=l.repositoriesSearchQuery.trim().toLowerCase(),s=i?r.filter(([p])=>p.toLowerCase().includes(i)||it(p).toLowerCase().includes(i)):r.slice();mj(s,l.repositoriesSortBy);let a=r.reduce((p,[,f])=>p+f.findings.length,0),c=new Set;for(let[,p]of r)for(let f of p.reports)c.add(f);let u=o?"packages-layout open":"packages-layout";return d`<div class="${z({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${s.length===r.length?d`${r.length} ${r.length===1?"repository":"repositories"}`:d`${s.length} of ${r.length} ${r.length===1?"repository":"repositories"}`}</span> ${a>0?d`<span>${a} ${a===1?"finding":"findings"} across ${c.size} ${c.size===1?"report":"reports"}</span>`:m}</div></div>${fj(t)}</header>${r.length===0?d`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":l.shownTriage?`No ${l.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:s.length===0?d`<p style="color:var(--muted)">No repositories match "${l.repositoriesSearchQuery}".</p>`:d`<div class="${u}"><ul class="packages-list">${oe(s,([p])=>p,([p,f])=>vj(p,f,p===n))}</ul>${o?d`<aside class="packages-details" id="repositories-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-repository aria-label="Close details">×</button></header><div class="packages-details-body">${yj(o[0],o[1])}</div></aside>`:m}</div>`}</div>`}function fj(e){return d`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${hj}"></triage-selector></div>`}function mj(e,t){let r=t==="name-asc"?(n,o)=>it(n[0]).localeCompare(it(o[0])):t==="files-desc"?(n,o)=>o[1].files.size-n[1].files.size||it(n[0]).localeCompare(it(o[0])):t==="reports-desc"?(n,o)=>o[1].reports.size-n[1].reports.size||it(n[0]).localeCompare(it(o[0])):(n,o)=>o[1].findings.length-n[1].findings.length||it(n[0]).localeCompare(it(o[0]));e.sort(r)}function gj(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let r of e.files.values())for(let n of r){let o=l.triage.get(q(n))?.triage??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function bj(e,t){let r=Ts().get(e),n=gj(r),o=l.repositorySlideTriage??"live",i=r?ZI(r,o):new Map,s=[...i.values()].reduce((u,p)=>u+p.length,0),a=o==="live"?s===1?"issue":"issues":s===1?`${o} issue`:`${o} issues`,c=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return d`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name">${it(e)}</div><div class="bundles-slide-integrity">${s} ${a} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${n}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?d`<div class="bundle-issues-empty">${c}</div>`:np(i,{kind:"repository",bucketKey:e})}</div></div>`}function vj(e,t,r){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let c=ue(a,l.severityMode);n[c]!==void 0&&n[c]++}let o=Ne.filter(a=>n[a]>0),i=cr(e),s=it(e);return d`<li class="${r?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${Me({background:i})}"></span><div class="packages-row-text"><span class="packages-name">${s}</span> <span class="packages-row-meta">${t.findings.length} ${t.findings.length===1?"finding":"findings"} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</span></div>${o.length>0?d`<div class="packages-row-chips">${o.map(a=>d`<span class="${`tree-count-chip ${a}`}" title="${a.replaceAll("_"," ")}">${n[a]}</span>`)}</div>`:m} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${s}`}">Issues →</button></li>`}function yj(e,t){let r=Ts().get(e),o=[...(r?ZI(r):new Map).values()].reduce((i,s)=>i+s.length,0);return d`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-repository-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${o>0?d`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:m}</div>${wj(e,t)}`}function ZI(e,t="live"){let r=new Map;for(let[n,o]of e.files){let i=o.filter(s=>{let a=l.triage.get(q(s))?.triage??null;return t==="invalid"?a==="invalid":t==="deleted"?a==="deleted":a!=="invalid"&&a!=="deleted"});i.length>0&&r.set(n,i)}return r}function wj(e,t){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let a of t.findings){let c=ue(a,l.severityMode);r[c]!==void 0&&r[c]++}let n=Ne.filter(a=>r[a]>0),o=[...t.files.entries()].toSorted(([a,c],[u,p])=>p.length!==c.length?p.length-c.length:a.localeCompare(u)),i=[...t.reports].toSorted((a,c)=>a.localeCompare(c)),s=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return d`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${s}" target="_blank" rel="noopener">${it(e)}</a></dd><dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${n.length>0?d`<div class="packages-detail-chips">${n.map(a=>d`<span class="${`tree-count-chip ${a}`}">${r[a]} ${a.replaceAll("_"," ")}</span>`)}</div>`:m}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${i.map(a=>{let c=Se[ot(a)]??Se.default;return d`<li><button type="button" class="packages-detail-report" data-tooltip="${a}" data-package-report="${a}">${V(c)}<span class="packages-detail-report-label">${Ae(a)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([a,c])=>d`<li class="packages-detail-file"><span class="packages-detail-file-path mono" title="${a}">${a}</span> <span class="packages-detail-file-count">${c.length}</span></li>`)}</ul>`}var hj,QI=k(()=>{"use strict";T();He();Pt();ao();Je();U();ct();he();un();ia();op();hj=["inprogress","fixed","invalid","deleted"]});function e8(e,t){let r=new Set(e),n=new Set,o=new Map,i=new Map(e.map((s,a)=>[s,a]));for(let s of t){let a=[...new Map(s.members.map(h=>[h.id,h])).values()],c=a.filter(h=>r.has(h.id));if(c.length===0)continue;for(let h of c)n.add(h.id);let u=a.filter(h=>r.has(h.id)||h.isApp),p=JSON.stringify([a.map(h=>h.id).toSorted(),u.map(h=>[h.id,h.title??"",h.source??null,h.revalidate??""]).toSorted(([h],[g])=>h.localeCompare(g))]),f=o.get(p);f||(f={key:p,members:u,reports:[],first:Math.min(...c.map(h=>i.get(h.id)))},o.set(p,f)),f.reports.some(h=>h.name===s.report&&h.managedReportId===s.managedReportId)||f.reports.push({name:s.report,...s.managedReportId?{managedReportId:s.managedReportId}:{},findingId:c[0].id,rowIndex:s.index})}return{rows:[...o.values()].toSorted((s,a)=>s.first-a.first),missing:e.filter(s=>!n.has(s))}}var t8=k(()=>{"use strict"});function pa(e,t,r){return`${e} ${e===1?t:r}`}function kj(e,t){let r=Ve(l.triage.get(e)),n=t.filter(({name:a})=>bo(l.triage,e,a)),o=r??(n.length>0?"ignored":null);if(!o)return m;let i=o==="ignored"&&n.length<t.length,s=i?`Ignored in ${n.length}/${t.length} reports`:ei[o];return d`<span class="${`links-finding-status triage-${o}`}" data-tooltip="${i?n.map(({name:a})=>Ae(a)).join(", "):m}">${s}</span>`}function bx({id:e,title:t},r=[],n=!0,o=m){let i=r[0]?.name,s=mu(e),a=Xs(e)??s;return d`<li class="${n?"links-finding":"links-finding links-finding-context"}">${i?d`<button type="button" class="links-finding-id mono" data-links-preview="${e}" data-preview-report="${i}" data-preview-row="${r[0].rowIndex??m}" data-preview-managed-report="${r[0].managedReportId??m}" data-tooltip="${s}" aria-haspopup="dialog">${a}</button>`:Ht(e)?d`<a class="links-finding-id mono" href="${`#${Rn({id:e})}`}" data-tooltip="${s}">${a}</a>`:d`<span class="links-finding-id mono">${a}</span>`} ${t?d`<span class="links-finding-title">${t}</span>`:m} ${kj(e,r)} ${n?m:d`<span class="links-member-context">not in this link</span>`} ${o}</li>`}function r8(e){return d`<div class="links-finding-reports">${e.map(({name:t,findingId:r,managedReportId:n})=>d`<button type="button" class="links-finding-report report-button" data-tooltip="${Ae(t)}" data-links-report="${t}" data-links-finding="${r}" data-managed-report="${n??m}">${V(nt[ot(t)]??nt.default)}<span class="links-finding-report-label report-button-label">${Ae(t)}</span></button>`)}</div>`}function xj(e,t){let r=e.reports.toSorted((n,o)=>Ae(n.name).localeCompare(Ae(o.name)));if(e.members.length===1){let n=e.members[0];return d`<li class="links-report-row links-report-row-single"><ul class="links-row-members">${bx(n,r,t.has(n.id),r8(r))}</ul></li>`}return d`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${pa(e.members.length,"finding","findings")} in row</span> ${r8(r)}</div><ul class="links-row-members">${e.members.map(n=>bx(n,r,t.has(n.id)))}</ul></li>`}function $j(e,t){let{rows:r,missing:n}=e8(e,ci(e)),o=new Set(e);return d`<li class="links-group"><div class="links-group-head"><span class="links-group-index">Link ${t+1}</span> <span class="links-group-count">${pa(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${oe(r,i=>i.key,i=>xj(i,o))}</ul>${n.length>0?d`<div class="links-unlocated"><div class="links-finding-missing">Not in your reports</div><ul class="links-row-members">${n.map(i=>bx({id:i,title:dy(i)}))}</ul></div>`:m}</li>`}function n8(e=m){let t=l.currentLinks;if(!t)return m;Nr().catch(()=>{});let{name:r,groups:n,skipped:o}=t,i=new Set,s=new Set,a=0;for(let c of n)for(let u of c){if(i.has(u))continue;i.add(u);let p=Ls(u);if(p.length!==0){a++;for(let f of p)s.add(f)}}return d`<div class="links-view"><header class="page-head"><div class="page-title"><h1>Links${e}</h1><div class="meta-row"><span class="links-file-name" data-tooltip="${r}">${V(Se[ot(r)]??Se.default)}${Ae(r)}</span> <span>${pa(n.length,"link","links")}</span> <span>${pa(i.size,"finding","findings")}</span> ${s.size>0?d`<span>found in ${pa(s.size,"report","reports")}</span>`:m}</div></div></header>${a<i.size?d`<p class="links-note">${pa(i.size-a,"linked finding is","linked findings are")} not in any report you hold. Import the reports they came from and this page fills in.</p>`:m} ${o>0?d`<p class="links-note">${pa(o,"entry","entries")} in this file could not be linked — an id the app can't follow (a session-local number, or something that isn't an id at all).</p>`:m} ${n.length===0?d`<p class="links-empty">This file declares no links: every entry in it named fewer than two findings this app can reach.</p>`:d`<ol class="links-list">${oe(n,(c,u)=>`${u}:${c.join(" ")}`,(c,u)=>$j(c,u))}</ol>`}</div>`}var o8=k(()=>{"use strict";T();Pt();Je();U();un();he();t8();ge()});function vx(e,t,r){let n=new Set(t);for(let o of r)n.add(o);return e.filter(o=>n.has(o))}function i8(){if(l.currentWorkspace){let e=Q().find(r=>r.id===l.currentWorkspace),t=l.reports.map(r=>r.fileName).filter(r=>typeof r=="string");return{mode:"workspace",workspaceId:l.currentWorkspace,fileNames:e?vx(e.reports??[],l.storedFiles??[],t):t}}if(l.currentFile){let e=Q().find(t=>Array.isArray(t.reports)&&t.reports.includes(l.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[l.currentFile]}:null}return null}var s8=k(()=>{"use strict";U()});function a8({workspaceId:e,items:t}={}){return le("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var yx,l8=k(()=>{"use strict";T();U();dn();pe();_o();$o();yx=class extends D{static styles=[...D.styles,F(Ot)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],r=[];for(let n of this.items)try{let o;if(n.kind==="bundle")o=await $6(this.workspaceId,n.identifier);else{let i=await ai(n.identifier);o=await yh(this.workspaceId,n.identifier,i)}if(o.ok)t.push({kind:n.kind,identifier:n.identifier});else{let i=o.reason??"unknown";r.push({kind:n.kind,identifier:n.identifier,reason:i}),this._errors=[...this._errors,{label:Si(n),reason:i}]}}catch(o){let i=o?.message??String(o);r.push({kind:n.kind,identifier:n.identifier,reason:i}),this._errors=[...this._errors,{label:Si(n),reason:i}]}this._uploading=!1,this._done=!0,r.length===0&&this._finish({uploaded:t,failed:r})};render(){let{count:t,singular:r,kindLabel:n}=em(this.items),o=r?d`Upload <strong>"${Si(this.items[0])}"</strong> to the workspace's remote inventory?`:d`Upload <strong>${t}</strong> local ${n} to the workspace's remote inventory?`,i=r?m:tm(this.items),s=this._uploading?r?"Uploading\u2026":`Uploading ${t} ${n}\u2026`:r?"Upload":`Upload ${t}`;return d`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${o}</p>${i}<p class="nwd-note ui-hint">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${rm(this._errors)}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?m:d`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${s}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",yx)});var vg,wx=k(()=>{vg=`.detail-action{width:22px;height:22px;display:grid;place-items:center;padding:0;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);font:500 16px/1 ui-monospace,monospace;cursor:default;&:hover{color:var(--accent);background:var(--surface-active)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}
|
|
143
|
+
`});var d8,c8=k(()=>{d8=`.rec-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-uploaded,.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-updated{color:var(--high, #d57422)}.rec-status-differs{color:var(--warning, #d97706)}.rec-choice{flex:0 0 auto;display:flex;gap:.3rem;& button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 4px);padding:.1rem .45rem;font:inherit;font-size:.72rem;cursor:default;&:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}&:disabled{opacity:.5;cursor:default}}}.rec-status-failed,.rec-status-check-failed{color:var(--warning, #d97706)}.rec-status-differs,.rec-status-failed,.rec-status-check-failed{background:rgb(from var(--warning, #d97706) r g b / .14)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
|
|
144
|
+
`});function Cj(e){let t={good:0,updated:0,uploaded:0,differs:0,reuploaded:0,failed:0,"check-failed":0,missing:0};for(let r of e)r.status in t&&(t[r.status]+=1);return t}function xx({workspaceId:e,cloudCount:t,localFileNames:r,localBundles:n,autoRun:o}={}){return le("objstore-recovery-dialog",{workspaceId:e??"",cloudCount:typeof t=="number"?t:0,localFileNames:Array.isArray(r)?[...r]:[],localBundles:Array.isArray(n)?[...n]:[],autoRun:o===!0})}var u8,p8,kx,f8=k(()=>{"use strict";T();dn();pe();pk();wx();_o();c8();u8={checking:{label:"checking\u2026",hint:"Checking the cloud copy\u2026"},good:{label:"available",hint:"The cloud copy is intact."},updated:{label:"local updated",hint:"Your copy was out of date. It was replaced with the cloud copy."},uploaded:{label:"cloud updated",hint:"Your copy was newer. It was uploaded to the cloud."},differs:{label:"differs",hint:"Your copy differs from the cloud copy, and nothing shows which one is newer. Choose which to keep."},reuploaded:{label:"re-uploaded",hint:"The cloud copy's data was missing. It was restored from your copy."},failed:{label:"failed",hint:"Couldn't bring this back in line. Re-check again to retry."},"check-failed":{label:"check failed",hint:"Couldn't download the cloud copy to check it, so its state is unknown. Re-check again to retry."},missing:{label:"missing",hint:"The cloud copy's data is gone, and there's no matching copy here to restore it from."}};p8=e=>e===1?"copy":"copies",kx=class extends D{static styles=[...D.styles,F(vg),F(Ot),F(d8)];static properties={workspaceId:{type:String},cloudCount:{type:Number},localFileNames:{type:Array},localBundles:{type:Array},autoRun:{type:Boolean},_rows:{state:!0},_running:{state:!0},_ran:{state:!0},_error:{state:!0},_settled:{state:!0},_resolving:{state:!0},_bulk:{state:!0}};constructor(){super(),this.workspaceId="",this.cloudCount=0,this.localFileNames=[],this.localBundles=[],this.autoRun=!1,this._rows=[],this._running=!1,this._ran=!1,this._error=null,this._settled=!1,this._resolving=new Set,this._bulk=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="recheck"]')?.focus(),this.autoRun&&this._onRecheck()}_result(){return{items:this._rows,counts:this._counts()}}_onClose=()=>this._finish(this._ran?this._result():null);_onCancel=()=>this._finish(this._ran?this._result():null);_counts(){return Cj(this._rows)}_onResolve=async(t,r)=>{if(this._resolving.has(t.resourceTag))return;this._resolving=new Set([...this._resolving,t.resourceTag]);let n;try{let i=await S6(this.workspaceId,t.identifier,r,t.compared);n=i?{status:i.status,detail:i.detail}:{status:"failed",detail:"sync is not available"}}catch(i){n={status:"failed",detail:i?.message??String(i)}}this._rows=this._rows.map(i=>i.resourceTag===t.resourceTag?{...i,...n}:i);let o=new Set(this._resolving);o.delete(t.resourceTag),this._resolving=o};_onUseCloudForAll=async()=>{if(!(this._bulk||this._running)){this._bulk=!0;try{for(let t of this._differingRows())await this._onResolve(t,"cloud")}finally{this._bulk=!1}}};_differingRows(){return this._rows.filter(t=>t.status==="differs")}_onRecheck=async()=>{if(!(this._running||this._bulk||this._resolving.size>0)){this._running=!0,this._error=null,this._rows=[];try{let{items:t}=await _6(this.workspaceId,{onList:r=>{this._rows=r},onItem:r=>{this._rows=this._rows.map(n=>n.resourceTag===r.resourceTag?r:n)}});this._rows=t}catch(t){this._error=t?.message??String(t)}finally{this._running=!1,this._ran=!0}}};_downloadableItems(){let t=new Set(this.localFileNames),r=new Set(this.localBundles),n=[];for(let o of this._rows)o.status!=="good"||!o.identifier||(o.kind==="report"&&!t.has(o.identifier)?n.push({kind:"report",identifier:o.identifier}):o.kind==="bundle"&&!r.has(o.identifier)&&n.push({kind:"bundle",identifier:o.identifier,label:o.label}));return n}_onDownload=async()=>{let t=this._downloadableItems();t.length!==0&&await Jm({workspaceId:this.workspaceId,items:t})};_statusHint(t){let r=u8[t.status]?.hint??"";return t.status==="good"&&this._heldLocally(t)&&(r="The cloud copy is intact and matches your copy."),t.detail?`${r}
|
|
145
|
+
${t.detail}`:r}_heldLocally(t){return t.identifier?t.kind==="bundle"?this.localBundles.includes(t.identifier):this.localFileNames.includes(t.identifier):!1}_choice(t){if(t.status!=="differs")return m;let r=this._running||this._bulk||this._resolving.has(t.resourceTag);return d`<span class="rec-choice"><button type="button" data-role="keep-cloud" data-tooltip="Replace your copy with the cloud copy" @click="${()=>this._onResolve(t,"cloud")}" ?disabled="${r}">Use cloud copy</button> <button type="button" data-role="keep-local" data-tooltip="Upload your copy, replacing the cloud copy" @click="${()=>this._onResolve(t,"local")}" ?disabled="${r}">Upload mine</button></span>`}_rowsSection(){return this._rows.length===0?this._running?d`<p class="lwd-body">Fetching remote listing…</p>`:m:d`<ul class="rec-list">${this._rows.map(t=>d`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?d`<span class="lwd-kind-tag">bundle</span>`:m}</span> ${this._choice(t)} <span class="${`rec-status rec-status-${t.status}`}" data-tooltip="${this._statusHint(t)}">${u8[t.status]?.label??t.status}</span></li>`)}</ul>`}_summarySection(){if(!this._ran||this._rows.length===0)return m;let t=this._counts(),r=[];return t.good&&r.push(`${t.good} available`),t.updated&&r.push(`${t.updated} local ${p8(t.updated)} updated from the cloud`),t.uploaded&&r.push(`${t.uploaded} cloud ${p8(t.uploaded)} updated from yours`),t.differs&&r.push(`${t.differs} ${t.differs===1?"differs":"differ"} \u2014 choose which copy to keep`),t.reuploaded&&r.push(`${t.reuploaded} re-uploaded`),t.failed&&r.push(`${t.failed} failed`),t["check-failed"]&&r.push(`${t["check-failed"]} check failed`),t.missing&&r.push(`${t.missing} missing`),r.length>0?d`<p class="rec-summary" role="status" aria-live="polite">${r.join(" \xB7 ")}</p>`:m}render(){let t=this.cloudCount===1?"":"s",r=this.cloudCount>0?d`the <strong>${this.cloudCount}</strong> remote`:"remote",n=this._ran?m:d`<p class="lwd-body">Re-check ${r} object${t} for this workspace. Each is re-fetched from the relay and compared with your copy. When one copy is provably newer, the other is updated to match; when it isn't clear, you choose which to keep. Any whose bytes are missing are re-uploaded from a matching local copy.</p>`,o=this._ran&&this._rows.length===0&&!this._error?d`<p class="lwd-empty">No remote objects to check.</p>`:m,i=this._ran?this._downloadableItems().length:0,s=this._differingRows().length>1||this._bulk;return d`<dialog @close="${this._onClose}"><button type="button" class="detail-action rec-close" data-role="close" aria-label="Close" @click="${this._onCancel}">×</button><header><h3>Re-check cloud storage</h3></header>${n} ${this._rowsSection()} ${o} ${this._summarySection()} ${this._error?d`<p class="rec-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${s?d`<button type="button" data-role="use-cloud-all" data-tooltip="Replace your copy of every report that differs with its cloud copy" @click="${this._onUseCloudForAll}" ?disabled="${this._running||this._bulk}">${this._bulk?"Using cloud copies\u2026":`Use cloud for all ${this._differingRows().length} conflicts`}</button>`:m} ${!s&&i>0?d`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${i} not stored locally</button>`:m} ${s?m:d`<button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._ran?"Close":"Cancel"}</button>`} <button type="button" data-role="recheck" @click="${this._onRecheck}" ?disabled="${this._running||this._bulk||this._resolving.size>0}">${this._running?"Re-checking\u2026":this._ran?"Re-check again":"Re-check"}</button></footer></dialog>`}};customElements.define("objstore-recovery-dialog",kx)});var m8,h8=k(()=>{m8=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
|
|
146
|
+
`});function g8({names:e}={}){return new Promise(t=>{let r=document.createElement("sync-suggest-dialog");r.exclusive=!0,r.names=Array.isArray(e)?[...e]:[];let n=(o,i)=>{r.remove(),t({shown:o,sync:i})};r.addEventListener("resolve",o=>n(!0,o.detail===!0)),r.addEventListener("modal-conflict",()=>n(!1,!1)),document.body.append(r)})}var Mj,$x,b8=k(()=>{"use strict";T();pe();wx();_o();h8();Mj=10,$x=class extends D{static styles=[...D.styles,F(vg),F(Ot),F(m8)];static properties={names:{type:Array}};constructor(){super(),this.names=[]}focusInitial(){this.renderRoot.querySelector('button[data-role="sync"]')?.focus()}_onSync=()=>this._finish(!0);_onDismiss=()=>this._finish(!1);_onClose=()=>this._finish(!1);_list(){if(this.names.length<2)return m;let t=this.names.slice(0,Mj),r=this.names.length-t.length;return d`<ul class="lwd-list">${t.map(n=>d`<li><strong>${n}</strong></li>`)} ${r>0?d`<li>and ${r} more</li>`:m}</ul>`}render(){let t=this.names.length===1,r=t?d`Your copy of <strong>"${this.names[0]}"</strong> no longer matches its cloud copy, so other members may be seeing a different version.`:d`<strong>${this.names.length}</strong> reports no longer match their cloud copies, so other members may be seeing different versions.`;return d`<dialog @close="${this._onClose}"><button type="button" class="detail-action ssd-close" data-role="close" aria-label="Close" @click="${this._onDismiss}">×</button><header><h3>Reports out of sync</h3></header><p class="lwd-body">${r}</p>${this._list()}<p class="nwd-note ui-hint">Sync compares ${t?"it":"each one"} with the cloud. Where it's clear which copy is newer, the other is updated; otherwise you choose which to keep.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="dismiss" @click="${this._onDismiss}">Not now</button> <button type="button" class="primary" data-role="sync" @click="${this._onSync}">Sync</button></footer></dialog>`}};customElements.define("sync-suggest-dialog",$x)});function v8({open:e,later:t=(n,o)=>setTimeout(n,o),modalOpen:r=()=>iu()}){let n=new Set,o=!1;function i(s,a,{onSync:c,retry:u}={}){!s||!Array.isArray(a)||a.length===0||o||n.has(s)||(o=!0,t(async()=>{let p;if(r())p={shown:!1,sync:!1};else try{p=await e([...a])}catch{p={shown:!1,sync:!1}}if(o=!1,!p.shown){typeof u=="function"&&t(u,Rj);return}n.add(s),p.sync&&typeof c=="function"&&c()},0))}return{suggestSync:i,isClosedFor:s=>n.has(s)}}var Rj,y8=k(()=>{"use strict";aw();Rj=1500});function w8(e,t,r=0){let{viewMode:n,focusGid:o,tableSelectedGid:i,kanbanPopoverGid:s}=t,a=n==="focus"?o:n==="table"?i:n==="kanban"?s:null,c=a?e.find(u=>de(u)===a):null;return c||(n==="focus"?e[Math.min(r,e.length-1)]??null:null)}function k8(e,t){if(t.currentView!=="findings")return null;let r=wt({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!r||!e)return r;let n={...r,finding:{id:q(Oe(e))}};return vr(n)?n:r}var x8=k(()=>{"use strict";po();ct()});function Ex(){let e=N1(l.reports);if(!e)return null;let t=Object.keys(e),n=Mr().filter(p=>Ke(p).commonTriage===l.shownTriage),o=O1(n,l.severityMode),i=zm(e,o),s=new Map,a=new Map,c=new Map;for(let p of n)for(let f of p){let h=ue(f,l.severityMode);s.has(f.file)||s.set(f.file,new Set),s.get(f.file).add(h);let g=Ce(f)?.color??"none";a.has(f.file)||a.set(f.file,new Set),a.get(f.file).add(g),c.has(f.file)||c.set(f.file,[]),c.get(f.file).push({severity:h,color:g})}let u;return B.focusedPkg?(u=t.filter(p=>(NM(p)??"__own__")===B.focusedPkg),B.showAll||(u=u.filter(p=>P1(p,o,i)))):u=B.showAll?t:t.filter(p=>P1(p,o,i)),{treeData:e,files:u,ownCounts:o,transitiveCounts:i,severitySets:s,colorSets:a,fileFindings:c}}function Mx(){let e=Kl();if(!e)return;let t=Ex();t&&e.refreshSidebar(t,{isBundleContext:l.currentView==="bundles"})}function Rx(){let e=Kl();if(!e)return;let t=Ex();t&&e.refreshTopPkgs(t)}function Aj(e){return`${kt[e]??e} findings`}function Ij(e,t,r){return r?d`<repo-chip url="${r}"></repo-chip>`:C()?m:l.currentWorkspace?t?d`<repo-chip url="${t}"></repo-chip>`:m:e?d`<repo-chip url="${l.repoUrl}" editable ?editing="${l.repoEditing}" ?empty="${!l.repoUrl}"></repo-chip>`:t?d`<repo-chip url="${t}"></repo-chip>`:m}function Tj(e,t,r,n,o){let i=e.length,s=new Set(l.reports.map(be=>be.source)),a=s.size===1?[...s][0]:null,c=l.currentWorkspace?Q().find(be=>be.id===l.currentWorkspace):null,u=l.currentWorkspace&&l.currentManagedTeam?l.managedTeams.find(be=>be.id===l.currentManagedTeam):null,p=u?`Team: ${u.name}`:c?`Workspace: ${c.name}`:a?Aj(a):"Findings",f=a&&Se[a]?a:"default",h=V(Se[f]),g=d`<svg class="file-icon" 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"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><path d="M14 3v6h6"/></svg>`,b=m;t.length===1?b=d`<span class="file-chip" data-copy-report="${t[0]}" title="Copy report name">${h}<span>${t[0]}</span></span>`:t.length>1&&(b=d`<span class="file-chip" data-copy-report="${t.join(`
|
|
147
|
+
`)}" title="Copy report names">${g}<span>${t.length} reports</span></span>`);let v=l.reports.flatMap(be=>be.groups.flat()),w=`${i} ${`finding${i===1?"":"s"}`}`,$=a||l.currentWorkspace?hm.filter(be=>be!=="type"):hm,_=oE(v,$),S=l.currentWorkspace?w3(l.reports).map(be=>Gs[be]??be):[],M=[..._,...S],R=m;if(i>0){let be={};for(let qe of e){let fr=ue(So(qe),l.severityMode);fr&&(be[fr]=(be[fr]||0)+1)}let wn=Ne.filter(qe=>be[qe]>0);wn.length>0&&(R=d`<span class="status-bar" aria-hidden="true">${wn.map(qe=>{let fr=`${be[qe]} ${qe.replaceAll("_"," ")}`;return d`<span class="${`status-seg sev-${qe}`}" style="${Me({flexGrow:be[qe]})}" title="${fr}"></span>`})}</span>`)}let P=new Set(l.reports.map(be=>be.repo??null)),L=P.size===1?[...P][0]:null,A=Ij(r,n,L),W=d`<span class="sep" aria-hidden="true"></span>`,ce=l.currentView==="files",Ct=(o??0)>1?d`<button type="button" class="${z({"files-toggle-btn":!0,active:ce})}" data-action="toggle-files" aria-pressed="${String(ce)}">${`Files: ${o}`}</button>`:m;return d`<header class="page-head"><div class="page-title"><h1>${p}${b}${A}${Ct}${R8()}</h1><div class="meta-row"><span>${w}</span> ${R} ${M.length>0?d`${W}${M.map(be=>d`<span class="tag">${be}</span>`)}`:m}</div></div></header>`}function R8(){if(te.status!=="online")return m;if(!Fj.has(l.currentView))return m;let e=i8();if(!e)return m;let{workspaceId:t,fileNames:r,mode:n}=e,o=f6(t);if(o.length>0&&Lj(t,o,{onSync:()=>_x(t,n,r),retry:E}),n==="single"){let y=r[0];if(o.includes(y))return $8({status:"differ",label:"differs",title:`Your copy of "${y}" doesn't match its cloud copy. Click to re-check and bring them in line.`,onClick:()=>_x(t,n,r)});let $=U0(t,y)?"cloud":"local";return $8({status:$,label:$,title:$==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:$==="local"?()=>_8({workspaceId:t,items:[{kind:"report",identifier:y}]}):null})}let i=Q().find(y=>y.id===t),s=i&&Array.isArray(i.bundles)?i.bundles:[],a=j0(t),c=r.filter(y=>!U0(t,y)),u=s.filter(y=>!u6(t,y)),p=[...c.map(y=>({kind:"report",identifier:y})),...u.map(y=>({kind:"bundle",identifier:y}))];if(a===0&&p.length===0)return m;let f=[a>0?`${a} in cloud`:null,p.length>0?`${p.length} local-only`:null,o.length>0?`${o.length} differ from the cloud`:null,a>0?'click "cloud" to re-check storage':null,p.length>0?`click "local" to upload ${p.length}`:null].filter(Boolean).join(" \u2014 "),h=o.length===1?`Your copy of "${o[0]}" doesn't match its cloud copy. Click to re-check and bring them in line.`:`${o.length} reports don't match their cloud copies. Click to re-check and bring them in line.`,g=o.length===0?m:d`<button type="button" class="sync-badge-chunk differ" data-tooltip="${h}" aria-label="${`${o.length} report${o.length===1?"":"s"} differ from the cloud \u2014 re-check`}" @click="${y=>{y.stopPropagation(),_x(t,n,r)}}">${I8()}<span>${o.length} differ</span></button>`,b=a===0?m:d`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${a} cloud object${a===1?"":"s"}`}" @click="${y=>{y.stopPropagation(),xx({workspaceId:t,cloudCount:a,localFileNames:r,localBundles:s})}}">${T8()}<span>${a} cloud</span></button>`,v=p.length===0?m:d`<button type="button" class="sync-badge-chunk local" aria-label="${`${p.length} items not yet uploaded \u2014 open upload dialog`}" @click="${y=>{y.stopPropagation(),_8({workspaceId:t,items:p})}}">${A8()}<span>${p.length} local</span></button>`,x=d`<span class="sync-badge-divider" aria-hidden="true"></span>`,w=[b,g,v].filter(y=>y!==m);return d`<div class="report-sync-badge report-sync-badge-clickable" data-status="mixed" data-tooltip="${f}">${w.map((y,$)=>$===0?y:d`${x}${y}`)}</div>`}function _x(e,t,r){let n=Q().find(s=>s.id===e),o=t==="single"?vx(n?.reports??[],l.storedFiles??[],r):r,i=n&&Array.isArray(n.bundles)?n.bundles:[];return xx({workspaceId:e,cloudCount:j0(e),localFileNames:o,localBundles:i,autoRun:!0})}function $8({status:e,label:t,title:r,onClick:n}){let o=e==="cloud"?T8():e==="differ"?I8():A8(),i=d`<span class="sync-badge-label">${t}</span>`;return typeof n!="function"?d`<span class="report-sync-badge" data-status="${e}" title="${r}" aria-label="${`report sync status: ${t}`}">${o}${i}</span>`:d`<button type="button" class="report-sync-badge report-sync-badge-clickable" data-status="${e}" data-tooltip="${r}" aria-label="${`report sync status: ${t}`}" @click="${n}">${o}${i}</button>`}function A8(){return d`<svg class="sync-badge-icon" 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"><rect x="2" y="14" width="20" height="8" rx="2" ry="2"/><line x1="6" y1="18" x2="6.01" y2="18"/><line x1="10" y1="18" x2="10.01" y2="18"/><path d="M6 14V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v10"/></svg>`}function I8(){return d`<svg class="sync-badge-icon" 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"><path d="M7 4v14"/><path d="M3 14l4 4 4-4"/><path d="M17 20V6"/><path d="M13 10l4-4 4 4"/></svg>`}function T8(){return d`<svg class="sync-badge-icon" 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"><path d="M17.5 19a4.5 4.5 0 1 0-1-8.9A6 6 0 0 0 5.07 13.5 4 4 0 0 0 6 21h11.5z"/></svg>`}async function _8({workspaceId:e,items:t}){let r=t.filter(n=>n.kind==="bundle");if(r.length>0){let n=await Vt(),o=new Map(n.map(i=>[i.integrity,i.name]));for(let i of r){let s=o.get(i.identifier);s&&(i.label=s)}}await a8({workspaceId:e,items:t})}function Bj(e){return Object.values(e).some(r=>r>0)||l.filterSeverities.size>0?d`<severity-chips .counts="${e}"></severity-chips>`:m}function Oj(e){return Object.values(e).some(r=>r>0)||l.filterColors.size>0?d`<triage-filter .counts="${e}"></triage-filter>`:m}function Nj(e,t,r,n,o,i,s,a){let{showSource:c,showConfidence:u,showPriority:p,showGraphMode:f,showFileSort:h,kanbanMode:g,showRepo:b,hasComment:v,hasFix:x,hasFlagged:w,hasDuplicates:y,hasCrossContext:$,hasAppStacked:_,showSecurity:S,showSeverityMode:M,revalidateOptions:R,showPartial:P,canDropLayer:L,canDetailLayer:A,canUpstreamLens:W,confirmedLocked:ce}=i;return d`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${f?"kanban,focus,table,list,grouped,graph":"kanban,focus,table,list,grouped"}"></view-mode-buttons><findings-sort ?show-file="${h}" ?show-confidence="${u}" ?show-priority="${p}"></findings-sort>${c?d`<source-filter></source-filter>`:m} ${!ce&&(u||R.length>0)?d`<conf-filter ?range-disabled="${!u}" .revalidateOptions="${R}" ?has-partial="${P}"></conf-filter>`:m} ${v||x||w||l.filterComment||l.filterFix||l.filterFlagged?d`<annotation-filter .hasComment="${v}" .hasFix="${x}" .hasFlagged="${w}"></annotation-filter>`:m} ${g?m:d`<triage-selector .counts="${r}"></triage-selector>`}<div class="toolbar-end"><download-button></download-button>${!l.currentWorkspace&&(y||l.filterDuplicates)||$||_||S||l.filterCrossContext||l.filterAppStacked?d`<annotation-filter group="context" .hasDuplicates="${y}" .hasCrossContext="${$}" .hasAppStacked="${_}" .hasSecurityContrast="${S}"></annotation-filter>`:m} ${L||l.revalidateConflicts.size>0?d`<revalidation-switch ?can-drop="${L}" ?can-detail="${A}" ?can-upstream="${W&&L}" .upstreamDisabled="${l.showRevalidation===!1&&L}"></revalidation-switch>`:m}</div></div><div class="toolbar-row sev-row">${M?d`<severity-mode-switch></severity-mode-switch>`:m} ${Bj(n)} ${s.analyzers.length>1||s.models.length>1?d`<analyzer-select .analyzers="${s.analyzers}" .models="${s.models}" .groups="${s.groups}"></analyzer-select>`:m} ${b&&a.length>1?d`<repo-filter .options="${a}"></repo-filter>`:m} ${Oj(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Sx(e,t){return e.map(r=>({p:So(r),g:r})).toSorted((r,n)=>t(r.p,n.p)).map(r=>r.g)}function ip(e,t=!1,r=null,n=!1,o=!1){return d`<finding-card data-gid="${de(e)}" .group="${e}" ?in-group="${t}" context="${r??m}" ?lazy="${n}" ?popup="${o}"></finding-card>`}function Cx(e,t={}){let{variant:r="kanban",active:n=!1,expandedTrackLast:o=!1}=t,i=Ke(e),s=Oe(e),a=Ge(s)||"(untitled finding)",c=r==="kanban",u=r==="kanban-side",p=c&&l.currentWorkspace?ou(s):null,f={"kanban-card":!0,"has-conflict":i.hasConflict,"focus-side-card":!c,"kanban-expanded-track-last":o,active:n};!i.hasConflict&&i.commonColor&&(f[`mark-${i.commonColor}`]=!0);let h=parseInt(s.line,10),g=Number.isFinite(h)?`:${h}`:"",b=ue(s,l.severityMode),v=Pj[b]??"?",x=wr(s)&&l.severityMode!=="original",w=Ce(s),y=w?.flagged===!0,$=w?.fix??"",_=w?.comment??"",S=m;c&&$?S=Pe($)?d`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${$}">${zu}</managed-fix-link>`:d`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${$}`}" aria-label="${`Edit fix link: ${$}`}">${zu}</button>`:c&&(_||C()&&Ue(s))&&(S=d`<comment-preview class="kanban-action" .finding="${s}" .comment="${_}">${Pm}</comment-preview>`);let M=d`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" title="${x?`${Jt(b)} \u2014 corrected from ${Jt(s.severity)}`:Jt(b)}" aria-label="${x?`Severity ${Jt(b)}, corrected from ${Jt(s.severity)}`:`Severity ${Jt(b)}`}">${v}${x?"*":""}</span> ${y?d`<span class="kanban-flag" title="Flagged" aria-label="Flagged">${Dm}</span>`:m} ${S}</div><span class="kanban-title">${a}</span><div class="kanban-meta"><span class="kanban-loc">${s.file}${g}</span> ${s.confidence===void 0||s.confidence===null?m:d`<span class="kanban-conf" title="${`Confidence ${s.confidence}/10`}">${s.confidence}</span>`} ${p?d`<span class="kanban-analyzer" role="img" title="${Gs[p]}" aria-label="${Gs[p]}">${V(nt[p])}</span>`:m}</div>`;return c?d`<div class="${z(f)}" data-gid="${de(e)}" data-kanban-source draggable="${Ri(e,i).length>0?"true":"false"}" role="button" tabindex="0" aria-current="${n?"true":"false"}" aria-label="${`Open details for ${a}`}">${M}</div>`:u?d`<div class="${z(f)}" data-gid="${de(e)}" data-kanban-select role="button" tabindex="0" aria-current="${n?"true":"false"}" aria-label="${`Show details for ${a}`}">${M}</div>`:d`<div class="${z(f)}" data-gid="${de(e)}" data-focus-select role="button" tabindex="0" aria-current="${n?"true":"false"}" aria-label="${`Focus on ${a}`}">${M}</div>`}function Dj(e){let{content:t,range:r,highlighted:n}=e,o=t.split(`
|
|
148
|
+
`).length,i=String(o).length;return d`<div class="focus-code-lines" style="${Me({"--lineno-width":`${i}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(s,a)=>{let c=a+1,p={"focus-code-lineno":!0,"focus-code-line-active":!!r&&c>=r.start&&c<=r.end};return d`<div class="${z(p)}" data-focus-code-line="${c}">${c}</div>`})}</aside><pre class="focus-code-source" tabindex="-1" aria-label="${e.file}"><code>${typeof n=="string"?V(n):t}</code></pre></div>`}function O8(e){return!e||!Vs(Oe(e))?m:d`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${de(e)}" aria-label="View issue history" data-tooltip="Issue history"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5"/></svg></button>`}function N8(e,t=m,r=!1){l.focusCodeTick;let n=uM(e),o=Ul(e),i=n?"focus-main with-code":"focus-main",s=Me({"--focus-split":String(l.focusSplit)});return d`<div class="${i}" style="${s}" data-gid="${de(e)}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${r?m:O8(e)} ${ip(e,!1,"focus",!1,r)}</div></div>${t} ${n?d`<div class="focus-splitter" data-focus-splitter role="separator" tabindex="0" aria-orientation="vertical" aria-label="Resize the finding and code panes" aria-valuemin="${of}" aria-valuemax="${sf}" aria-valuenow="${Math.round(l.focusSplit)}" data-tooltip="Drag to resize · double-click to reset"></div><div class="focus-pane focus-pane-code" data-focus-code-file="${n.file??m}" data-focus-code-integrity="${n.integrity??m}">${n.loading?d`<div class="focus-code-empty">Loading source…</div>`:d`<header class="focus-code-bar" title="${n.file}"><span class="focus-code-file">${n.file}</span> ${n.range?d`<span class="focus-code-line">:${Xh(n.range)}</span>`:m} ${(o?.stack.length??0)>1?d`<div class="focus-code-nav"><button type="button" class="focus-code-nav-btn" data-code-history="back" ?disabled="${o.at===0}" aria-label="Back to the previously shown file">${Ax}</button> <button type="button" class="focus-code-nav-btn" data-code-history="forward" ?disabled="${o.at===o.stack.length-1}" aria-label="Forward to the next shown file">${Ix}</button></div>`:m}</header><div class="focus-code-body">${Dj(n)}</div>`}</div>`:m}</div>`}function P8(e,t,r=[],n=null){if(!e&&!n)return m;let o=e?Ke(e):{},i=l.kanbanDetailFullscreen,s={"kanban-detail-modal":!0,fullscreen:i,"has-conflict":o.hasConflict},a=e?de(e):null,c=t?.items??[],u=c.findIndex(f=>de(f)===a),p=d`<div class="kanban-detail-actions">${O8(e)} <button type="button" class="kanban-detail-expand detail-action" data-kanban-detail-fullscreen aria-pressed="${i?"true":"false"}" aria-label="${i?"Back to the readable width":"Fill the available space"}">${i?B8:F8}</button> <button type="button" class="kanban-detail-close detail-action" aria-label="Close details">×</button></div>`;return d`<div class="${z({"kanban-detail-backdrop":!0,"links-preview-backdrop":!!n})}"><div class="kanban-detail-dim"></div><div class="${z(s)}" role="dialog" aria-modal="true" aria-label="${n?"Finding preview":"Finding details"}">${i&&e?m:p}<div class="kanban-detail-body">${e?i?N8(e,p,!0):ip(e,!1,"kanban-detail",!1,!0):d`<div class="links-preview-message" role="status">${n.error||"Loading finding\u2026"}</div>`}</div></div>${c.length===0?m:d`<aside class="kanban-detail-side" aria-label="${`${t.label} findings`}"><div class="kanban-detail-side-header"><span class="kanban-detail-side-pick"><select class="kanban-detail-side-select" data-kanban-column aria-label="Column to show">${r.map(f=>{let h=f.key===t.key,g=h?f.label:`${f.label} (${f.count})`;return d`<option value="${f.key}" data-gid="${f.firstGid}" .selected="${h}" ?disabled="${f.count===0}">${g}</option>`})}</select></span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-kanban-nav="prev" ?disabled="${u===0}" aria-label="Previous finding">${Ax}</button> <span class="count">${u<0?c.length:`${u+1} / ${c.length}`}</span> <button type="button" class="focus-nav-btn" data-kanban-nav="next" ?disabled="${u===c.length-1}" aria-label="Next finding">${Ix}</button></div></div><div class="kanban-detail-side-body">${oe(c,f=>de(f),f=>Cx(f,{variant:"kanban-side",active:de(f)===a}))}</div></aside>`}</div>`}function zj(e,t){if(l.viewMode==="table"){let n=l.sortBy==="file"?Sx(e,S8):e;return n.length===0?m:(wg=n,d`<div class="${t?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${t?d`<aside class="findings-table-details" id="findings-table-details" aria-label="Finding details"><button type="button" class="findings-table-details-close" data-table-deselect aria-label="Close details">×</button><div class="findings-table-details-body">${ip(t)}</div></aside>`:m}</div>`)}if(l.viewMode==="focus"){if(e.length===0)return m;let n=e.indexOf(t);L8=n;let o=t,i=n===0,s=n===e.length-1;return d`<div class="focus-view">${N8(o)}<aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${i}" aria-label="Previous finding">${Ax}</button> <span class="count">${n+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${s}" aria-label="Next finding">${Ix}</button></div></div><div class="focus-sidebar-body">${oe(e,a=>de(a),a=>Cx(a,{variant:"focus",active:de(a)===de(o)}))}</div></aside></div>`}if(l.viewMode==="kanban"){let n=[{key:"untriaged",label:"Untriaged"},{key:"inprogress",label:"In progress"},{key:"fixed",label:"Fixed"},{key:"invalid",label:"Invalid"},{key:"deleted",label:"Deleted"},{key:"ignored",label:"Ignored"}],o=new Map(n.map(p=>[p.key,[]]));for(let p of e){let h=Ke(p).commonTriage??"untriaged",g=o.get(h);g&&g.push(p)}let i=n.some(p=>p.key===l.kanbanExpandedColumn)?l.kanbanExpandedColumn:null,s=i?n.filter(p=>p.key===i):n,a={"--kanban-cols":String(n.length)},c=t,u=c?n.find(p=>p.key===(Ke(c).commonTriage??"untriaged")):null;return d`<div class="kanban-board" style="${Me(a)}">${oe(s,p=>p.key,p=>{let f=o.get(p.key),h=p.key===i;return d`<div class="${`kanban-column kanban-column-${p.key}${h?" expanded":""}`}" data-kanban-target="${p.key}"><div class="kanban-column-header"><span class="label">${p.label}</span> <span class="count">${f.length}</span> <button type="button" class="kanban-expand" data-kanban-expand="${p.key}" aria-pressed="${h}" aria-label="${h?"Show all columns":`Show only ${p.label}`}">${h?B8:F8}</button></div><div class="kanban-column-body">${f.length===0?d`<div class="kanban-empty">No ${p.label.toLowerCase()} findings.</div>`:oe(f,g=>de(g),(g,b)=>Cx(g,{active:de(g)===l.kanbanPopoverGid,expandedTrackLast:(b+1)%n.length===0}))}</div></div>`})}</div>${P8(c,u&&{key:u.key,label:u.label,items:o.get(u.key)},n.map(p=>{let f=o.get(p.key);return{key:p.key,label:p.label,count:f.length,firstGid:f.length>0?de(f[0]):""}}))}`}if(l.viewMode==="grouped"){let n=new Map;for(let i of e){let s=So(i).file;n.has(s)||n.set(s,[]),n.get(s).push(i)}let o=l.sortBy==="file"?[...n.keys()].toSorted():[...n.keys()];return d`${oe(o,i=>i,i=>{let s=l.sortBy==="file"?Sx(n.get(i),(c,u)=>parseInt(c.line,10)-parseInt(u.line,10)):n.get(i),a=So(s[0]);return d`<div class="file-group"><div class="file-header"><span>${vw(a,sr(a))}</span> <span class="count">${s.length}</span></div><div class="file-body">${oe(s,c=>de(c),c=>ip(c,!1,null,!0))}</div></div>`})}`}let r=l.sortBy==="file"?Sx(e,S8):e;return d`${oe(r,n=>de(n),n=>{let o=Oe(n),i=d4(o,sr(o)),s=Ys(o),a=ho(o),c=n.length>1;return d`<div class="${z({"flat-group":!0,"multi-case":c})}"><div class="flat-group-loc"><span class="file">${vw(o,sr(o))}</span> ${i===m?m:d`<span class="line-num">${i}</span>`} ${a?d`<span class="meta">${a}</span>`:m} ${s?d`<span class="run-meta">${s}</span>`:m}</div>${ip(n,!0,null,!0)}</div>`})}`}function Uj(){l.bundleSourceFile&&ra().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&ae(HI(),e)}function E({animate:e=!0}={}){let t=C8;C8=l.currentView;let r=t!==null&&t!==l.currentView;if(e&&r&&typeof document.startViewTransition=="function"&&!matchMedia("(prefers-reduced-motion: reduce)").matches){document.startViewTransition(()=>M8()).ready.catch(()=>{});return}M8()}function sc(e){let t=document.querySelector(`#${e}`);return(!t||!N.contains(t)||N.firstElementChild!==t)&&(N.innerHTML=`<div id="${e}"></div>`,t=document.querySelector(`#${e}`)),t}function Ku(){let e=l.revalidateConflicts.size>0,t=!e&&jh(l.reports);return e?l.showRevalidation!==!1&&(yg=l.showRevalidation,l.showRevalidation=!1):(yg!==null&&(l.showRevalidation=yg,yg=null),!t&&l.showRevalidation===!1&&(l.showRevalidation=!0)),l.upstreamOnly&&(!t||l.showRevalidation===!1||!l.reports.some(r=>(r.groups??[]).some(n=>n.some(o=>o.isUpstream))))&&(l.upstreamOnly=!1),xi(l.showRevalidation,l.upstreamOnly),t}function M8(){Cr()||lm(),Uj(),qh(l.reports),Yh(l.reports)&&Ai();let e=Ku(),t=l.reports.some(O=>(O.groups??[]).some(j=>j.some(ne=>ne.isUpstream)));if(l.currentView==="bundles")if((l.bundles??[]).length===0)l.currentView="findings";else{Ti(l.bundleDetailsTab,l.bundleSourceFile)&&ra().catch(()=>{});let O=sc("bundles-slot");O&&ae(GI(l.bundles),O);let j=l.bundleDetails,ne=l.selectedBundle&&j&&(j.json||j.bundle);if(ne&&l.bundleDetailsTab==="graph"){let Ie=document.querySelector("#bundle-graph-slot");if(Ie){let Et=DI(l.bundleDetails);if(Et){zI(Et);let RF={hideAllFiles:!0,triageCounts:PI(l.bundleDetails,new Set(Et.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted"],showSplitOwnDirs:Et.canSplitOwnDirs,showPackagesView:Et.canPackagesView,showBundleLayouts:!0};D1(Ie,Et,RF,gg,bg)}}}if(ne&&!j.metadataOnly&&l.bundleDetailsTab==="terminal"){let Ie=document.querySelector("#bundle-terminal-slot");Ie&&OM(Ie,l.bundleDetails)}N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 bundles";return}if(l.currentView==="packages"){let O=sc("packages-slot");O&&ae(KI(),O),N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 packages";return}if(l.currentView==="repositories"){let O=sc("repositories-slot");O&&ae(JI(),O),N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 repositories";return}if(l.currentView==="links"){if(l.currentLinks){let O=sc("links-slot"),j=Cr();O&&ae(d`${n8(R8())}${j?P8(j.group,null,[],j):m}`,O),N.classList.add("active"),Ye.classList.add("hidden"),document.title=`DeepView \u2014 ${l.currentLinks.name}`;return}l.currentView="findings"}if(l.currentView==="scan"&&customElements.get("local-scan-page")){let O=sc("scan-slot");if(O&&!O.firstElementChild){let j=document.createElement("local-scan-page");j.selection=l.scanSelection,O.append(j),j.updateComplete.then(()=>qt(j.renderRoot,{gate:ne=>!Object.hasOwn(ne.dataset,"tooltipTruncated")||ne.scrollWidth>ne.clientWidth}))}N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 scans";return}let r=Hj[l.currentView];if(r){let O=sc(r.slot),j=O?.firstElementChild?.session;if((j?.id!==l.managedSession?.id||j?.role!==l.managedSession?.role)&&O?.replaceChildren(),O&&!O.firstElementChild){let ne=document.createElement(r.tag),Ie=Et=>qt(Et,{gate:_p=>!Object.hasOwn(_p.dataset,"tooltipTruncated")||_p.scrollWidth>_p.clientWidth});ne.localImportSource=s0(),l.currentView==="manage-import"&&(ne.localDeps=i0(),ne.promptPassword=Hh,ne.resolveConflicts=Al,ne.confirmTriageImport=w4),ne.session=l.managedSession,ne.allowShare=l.managed?.allowShare===!0,l.currentView==="manage-scans"&&(ne.selection=l.scanSelection),l.currentView==="manage-bundles"&&(ne.createRepoId=l.bundleCreationRepoId,ne.installTooltips=Ie),O.append(ne),(async()=>{await customElements.whenDefined(r.tag),await ne.updateComplete,Ie(ne.renderRoot)})().catch(()=>{})}O?.firstElementChild&&(O.firstElementChild.session=l.managedSession,O.firstElementChild.allowShare=l.managed?.allowShare===!0),l.currentView==="manage-scans"&&O?.firstElementChild&&(O.firstElementChild.selection=l.scanSelection),l.currentView==="manage-bundles"&&O?.firstElementChild&&(O.firstElementChild.createRepoId=l.bundleCreationRepoId),N.classList.add("active"),Ye.classList.add("hidden"),document.title=r.title;return}if(l.reports.length===0)return;let n=Mr(),o=l.viewMode==="kanban",i={inprogress:0,fixed:0,invalid:0,deleted:0,ignored:0},s=[];for(let O of n){let j=Ke(O).commonTriage;j&&i[j]++,(o||j===l.shownTriage)&&s.push(O)}Object.defineProperty(s,"ruledOutIds",{value:n.ruledOutIds});let a=!1,c=!1,u=!1,p=!1;for(let O of n)for(let j of O){wr(j)&&(p=!0);let ne=Ce(j);ne&&(ne.comment&&(a=!0),ne.fix&&(c=!0),ne.flagged===!0&&(u=!0))}let f=nm(),h=n.some(O=>O.some(j=>f.has(j.id)));h||(l.filterDuplicates="");let g=s.some(Aw),b=s.some(Iw);g||(l.filterCrossContext=""),b||(l.filterAppStacked="");let v=B4(s);v||(l.filterSecurity="");let x=new Set,w=!1,y=!1,$=!1;for(let O of s)for(let j of O){let ne=_r(j);ne&&x.add(ne)}for(let O of Ww()){let j=!1,ne=!1;for(let Ie of O){let Et=$e(Ie);Et==="partial"&&(y=!0),!((Et==="unreachable"||Et==="refuted")&&($=!0,l.currentWorkspace))&&(Et==="revalidation"?j=!0:ne=!0)}j&&ne&&(w=!0)}let S=[...new Set(l.reports.map(O=>O.type))].join(", "),M=l.reports.map(O=>O.fileName),R=s.map(Hr).filter(O=>O.length>0),P=R.length>0&&Cw(R),L=Rw(n),A=n.some(O=>O.some(j=>ir(j.file))),W=n.some(O=>O.some(j=>!ir(j.file))),ce=!1,Ct=!1,be;e:for(let O of n)for(let j of O)if(!Ct)Ct=!0,be=j.file;else if(j.file!==be){ce=!0;break e}let wn=n.some(O=>O.some(j=>!j.repo?.github&&!ir(j.file))),qe=new Set;for(let O of n)for(let j of O)!ir(j.file)&&j.repo?.github&&qe.add(j.repo.github);let fr=qe.size===1?[...qe][0]:null,Qi=new Set,Ko=new Set;for(let O of n)for(let j of O)Qi.add(j._analyzer??null),Ko.add(yu(j));let hb=Object.keys(Kw),$c=O=>{if(O==null)return 1/0;let j=hb.indexOf(O);return j===-1?hb.length:j},kp=[...Qi].toSorted((O,j)=>{let ne=$c(O),Ie=$c(j);return ne!==Ie?ne-Ie:String(O??"").localeCompare(String(j??""))}),_c=[...Ko].toSorted(E8);if(l.filterAnalyzer){let O=l.filterAnalyzer===Ci?null:l.filterAnalyzer;(!Qi.has(O)||Qi.size<2)&&(l.filterAnalyzer="")}if(l.filterModel){let O=l.filterModel===Ei?null:l.filterModel;(!Ko.has(O)||Ko.size<2)&&(l.filterModel="")}let _a=q3(x);l.filterRevalidate&&!_a.some(O=>O.value===l.filterRevalidate)&&(l.filterRevalidate="");let Sc=im(s);Sc&&(l.filterRevalidate="confirmed");let Cc=x.has("partial")&&Co();Cc||(l.filterPartial="");let aS=e&&(w||y||!l.currentWorkspace&&$),Sa=!(e&&l.showRevalidation!==!1)&&!l.upstreamOnly&&A&&W;!Sa&&l.filterSources.size>0&&l.filterSources.clear(),P||(l.filterConfMin=0,l.filterConfMax=10,(l.sortBy==="confidence-desc"||l.sortBy==="confidence-asc")&&(l.sortBy="severity")),!L&&(l.sortBy==="priority-desc"||l.sortBy==="priority-asc")&&(l.sortBy="severity"),!ce&&l.sortBy==="file"&&(l.sortBy="severity");let Ca=O4(s),I={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},H={red:0,blue:0,green:0,gray:0,none:0};for(let O of Ca){if(O.length===1){let Ie=ue(O[0],l.severityMode);I[Ie]=(I[Ie]||0)+1;let Et=Ce(O[0])?.color??"none";H[Et]=(H[Et]||0)+1;continue}let j=new Set(O.map(Ie=>ue(Ie,l.severityMode)));for(let Ie of j)I[Ie]=(I[Ie]||0)+1;let ne=new Set(O.map(Ie=>Ce(Ie)?.color??"none"));for(let Ie of ne)H[Ie]=(H[Ie]||0)+1}let G=_4(Ca),K=[...G].toSorted(E8);if(l.filterRepo){let O=l.filterRepo===Js?null:l.filterRepo;G.has(O)||(l.filterRepo="")}let Ee=sm(Mi(s)),ut=N1(l.reports),hr=ut?Object.keys(ut).length:0,Ea=hr>1;!Ea&&l.currentView==="files"&&(l.currentView="findings"),!Ea&&l.viewMode==="graph"&&(l.viewMode="kanban");let Ec=Tj(n,M,wn,fr,hr);if(l.currentView==="files"){let O=O1(n,l.severityMode),j=document.querySelector("#header-slot"),ne=document.querySelector("#tree-view-slot");(!j||!ne||!N.contains(j)||!N.contains(ne))&&(N.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',j=document.querySelector("#header-slot"),ne=document.querySelector("#tree-view-slot")),j&&ae(Ec,j),ne&&ae(IM(ut,O),ne),N.classList.add("active"),Ye.classList.add("hidden"),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let es=l.viewMode==="table"&&l.tableSelectedGid&&Ee.some(O=>de(O)===l.tableSelectedGid),Mc=null;l.viewMode==="graph"&&ut&&(Mc=Ex(),Mc||(l.viewMode="kanban"));let xp=!!Mc,ts="findings-content";es&&(ts+=" with-details"),xp&&(ts+=" with-graph"),o&&(ts+=" with-kanban"),l.viewMode==="focus"&&(ts+=" with-focus");let lS=m,$p=m,cS=m,dS=w8(Ee,l,L8);wg=null,xp||(lS=Nj(Ee.length,s.length,i,I,H,{showSource:Sa,showConfidence:P,showPriority:L,showGraphMode:Ea,showFileSort:ce,kanbanMode:o,showRepo:!!l.currentWorkspace,hasComment:a,revalidateOptions:_a,showPartial:Cc,canDropLayer:e,canDetailLayer:aS,canUpstreamLens:t,confirmedLocked:Sc,hasFix:c,hasFlagged:u,hasDuplicates:h,hasCrossContext:g,hasAppStacked:b,showSecurity:v,showSeverityMode:p||l.severityMode==="original"},{analyzers:kp,models:_c,groups:Ca},K),l.shownTriage&&s.length===0?$p=d`<p style="color:var(--muted); margin: 1rem 0;">No ${l.shownTriage} findings.</p>`:Ee.length===0&&s.length>0&&!o?$p=d`<p style="color:var(--muted); margin: 1rem 0;">No findings match the current filters.</p>`:s.length===0&&($p=n.length>0?d`<p style="color:var(--green)">All ${S} issues triaged.</p>`:d`<p style="color:var(--green)">No ${S} issues found.</p>`),cS=zj(Ee,dS));let Rc=document.querySelector("#header-slot"),kn=N.querySelector(":scope > .findings-content"),CF=kn&&kn.querySelector(":scope > #findings-graph-slot"),EF=kn&&kn.querySelector(":scope > #findings-body-slot"),MF=kn&&(CF?"graph":EF?"body":null)===(xp?"graph":"body");if(!Rc||!kn||!N.contains(Rc)||!N.contains(kn)||!MF){let O=xp?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';N.innerHTML=`<div id="header-slot"></div><div class="${ts}">${O}</div>`,Rc=document.querySelector("#header-slot"),kn=N.querySelector(":scope > .findings-content")}else kn.className!==ts&&(kn.className=ts);Rc&&ae(Ec,Rc);let uS=document.querySelector("#toolbar-slot");uS&&ae(lS,uS);let pS=document.querySelector("#empty-state-slot");pS&&ae($p,pS);let fS=document.querySelector("#findings-body-slot");if(fS&&ae(cS,fS),Mc){let O=document.querySelector("#findings-graph-slot");if(O){let ne={extraTopRow:d`<view-mode-buttons modes="kanban,focus,table,list,grouped,graph"></view-mode-buttons>`,triageCounts:i,triageStates:["inprogress","fixed","invalid","deleted","ignored"]};D1(O,Mc,ne,Mx,Rx)}}if(wg){let O=N.querySelector(".finding-table-slot");O&&(ic||(ic=document.createElement("finding-table")),ic.items=wg,ic.selectedGid=l.tableSelectedGid,ic.parentNode!==O&&O.append(ic))}N.classList.add("active"),Ye.classList.add("hidden"),document.title=`DeepView \u2014 ${S||"no analyzer"}`,C()&&Fe?.replaceFindingRoute(k8(dS,l))}var Lj,Fj,S8,wg,L8,ic,F8,B8,Ax,Ix,Pj,C8,Hj,E8,yg,Yt=k(()=>{"use strict";T();He();Pt();ao();Je();un();U();dw();bu();k4();dn();xo();mr();he();ct();pn();qw();kw();ge();iE();oa();Hu();LM();ko();z1();U1();Io();Pl();ia();XI();QI();o8();cm();s8();op();Im();l8();f8();b8();y8();x8();vl();$h();({suggestSync:Lj}=v8({open:e=>g8({names:e})})),Fj=new Set(["findings","files","links"]);S8=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),wg=null,L8=0,ic=null;F8=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2H2v4M10 2h4v4M14 10v4h-4M6 14H2v-4"/></svg>`,B8=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2v4H2M10 2v4h4M10 14v-4h4M6 14v-4H2"/></svg>`,Ax=d`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg>`,Ix=d`<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg>`,Pj={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};C8=null;Hj={manage:{slot:"manage-slot",tag:"managed-admin-home",title:"DeepView \u2014 manage"},"admin-users":{slot:"admin-users-slot",tag:"managed-admin-users",title:"DeepView \u2014 users"},"manage-repos":{slot:"manage-repos-slot",tag:"managed-admin-repos",title:"DeepView \u2014 repositories"},"manage-reports":{slot:"manage-reports-slot",tag:"managed-admin-reports",title:"DeepView \u2014 reports"},"manage-bundles":{slot:"manage-bundles-slot",tag:"managed-admin-bundles",title:"DeepView \u2014 bundles"},"manage-history":{slot:"manage-history-slot",tag:"managed-admin-history",title:"DeepView \u2014 history"},"manage-teams":{slot:"manage-teams-slot",tag:"managed-admin-teams",title:"DeepView \u2014 teams"},"manage-import":{slot:"manage-import-slot",tag:"managed-admin-import",title:"DeepView \u2014 import"},"manage-links":{slot:"manage-links-slot",tag:"managed-admin-links",title:"DeepView \u2014 links"},"manage-scans":{slot:"manage-scans-slot",tag:"managed-admin-scans",title:"DeepView \u2014 scans"}},E8=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),yg=null});var eA={};gb(eA,{createManagedAnnotationRead:()=>gk,hydrateManagedReportTriage:()=>rV,initManagedTriagePush:()=>Fx,refreshManagedReportTriage:()=>mk,resetManagedTriage:()=>lp});function kg(e){if(!e)return null;let t={};e.color&&(t.color=e.color);let r=Ve(e);return r&&(t.triage=r),typeof e.fix=="string"&&e.fix&&(t.fix=e.fix),typeof e.flagged=="boolean"&&(t.flagged=e.flagged),Object.keys(t).length>0?t:null}function sp(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function Xj(e,t){return e.length>100?!1:t==null?!0:(t.color?.length??0)<=50&&(t.fix?.length??0)<=1e4}function z8(){let e=new Set;for(let t of l.reports)for(let r of t.groups)for(let n of r)typeof n.id=="string"&&n.id&&e.add(n.id);return e}function Tx(){return Array.isArray(l.managedReports)&&l.managedReports.length>0?l.managedReports:l.managedReport==null?[]:[l.managedReport]}function U8(e){let t=new Set,r=!1;for(let n of l.reports)if(n._managedReportId===e){r=!0;for(let o of n.groups??[])for(let i of o)typeof i.id=="string"&&i.id&&t.add(i.id)}return r||l.reports.length===0?t:new Set(z8())}function Zj(e){let t=Tx();for(let r of l.reports)if(r._managedReportId!=null&&(r.groups??[]).some(n=>n.some(o=>o.id===e))){let n=t.find(o=>o.id===r._managedReportId);if(n)return n}return t[0]??null}function Lx(){let e=l.managedSession;return l.serverMode==="managed"&&l.localMode!==!0&&e!=null&&yl(e.role,"triage")}function Qj(e){return e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function eV(e,t){let r=Wi.get(e.key);r==null&&(r={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Wi.set(e.key,r));for(let n of t)r.changes.has(n)||r.changes.set(n,e.changes.get(n))}async function tV(e,t){if(!Lx())return;let r=[...e.changes.keys()],n=0;for(;n<r.length;){let o=n,i={},s=0,a=Yj;for(;n<r.length&&s<200;){let p=r[n],f=Jj(`${JSON.stringify(p)}:${JSON.stringify(e.changes.get(p))},`);if(s>0&&a+f>262144)break;i[p]=e.changes.get(p),a+=f,s++,n++}let c=await W6(e.report.id,i,l.managedSession?.csrfToken,e.teamId),u=c>=200&&c<300;if(!u&&!Qj(c)){eV(e,r.slice(o));return}u||console.warn("managed: the server refused a triage batch",e.report.id,c,Object.keys(i));for(let[p,f]of Object.entries(i)){let h=gn.get(p)?.fix??"",g=u?f?.fix??"":h;g!==h&&t.add(e.teamId),gn.set(p,{key:sp(f),fix:g})}}}function xg(){zo!=null&&(clearTimeout(zo),zo=null);let e=[...Wi.values()];if(Wi.clear(),e.length===0)return;let t=new Set;for(let r of e)ac=ac.then(()=>tV(r,t)).catch(n=>{console.warn("managed: triage push failed",n)});ac=ac.finally(()=>{for(let r of t)tw(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function H8(){if(!(Tx().length===0||!Lx()||lc.size===0)){for(let t of z8()){let r=kg(l.triage.get(t)),n=sp(r);if((gn.get(t)?.key??"")===n)continue;if(!Xj(t,r)){console.warn("managed: triage entry exceeds the server caps, kept local only",t),gn.set(t,{key:n,fix:gn.get(t)?.fix??""});continue}let o=Zj(t);if(o==null||!lc.has(ap(o.id)))continue;let i=l.currentManagedTeam,s=ap(o.id,i),a=Wi.get(s);a==null&&(a={report:o,key:s,teamId:i,changes:new Map},Wi.set(s,a)),a.changes.set(t,r)}Wi.size!==0&&(zo!=null&&clearTimeout(zo),zo=setTimeout(xg,qj))}}function Fx(){D8||!Lx()||(D8=!0,Qy(H8))}function lp(){I5(),l.managedComments?.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),zo!=null&&(clearTimeout(zo),zo=null),Wi.clear(),lc.clear(),gn.clear()}async function rV(e,{renderView:t=!0,signal:r,readAnnotations:n}={}){let o=l.reports,i=l.currentManagedTeam,s=l.managedSession?.role,a=l.managedSession?.id,c=()=>!r?.aborted&&l.serverMode==="managed"&&l.localMode!==!0&&l.managedSession!=null&&l.managedSession.id===a&&l.managedSession.role===s&&l.reports===o&&l.currentManagedTeam===i&&Tx().some(h=>h.id===e);if(!c()||(lc.delete(ap(e)),xg(),!await Bx(r)||!c()))return!1;let u=n?(await n(e))?.entries:await q0(e,i,{signal:r});if(u==null||!c())return!1;let p=!1,f=U8(e);for(let h of f){if(!Object.hasOwn(u,h)){gn.delete(h);continue}let g=kg(u[h]);gn.set(h,{key:sp(g),fix:g?.fix??""});let b=g?.triage==null?l.triage.get(h)?.ignoredReports:void 0;Qf(l.triage,h,{...g,ignoredReports:b})&&(p=!0)}if(lc.add(ap(e)),p){if(await _e(),!c())return!1;t&&E()}return H8(),!0}function Bx(e){return e?e.aborted?Promise.resolve(!1):new Promise(t=>{let r=o=>{e.removeEventListener("abort",n),t(o)},n=()=>r(!1);e.addEventListener("abort",n,{once:!0}),ac.then(()=>r(!0),()=>r(!1))}):ac.then(()=>!0)}async function mk(e,{signal:t,readAnnotations:r}={}){let n=l.reports,o=l.currentManagedTeam,i=l.managedSession?.role,s=l.managedSession?.id,a=()=>!t?.aborted&&l.serverMode==="managed"&&!l.localMode&&l.reports===n&&l.currentManagedTeam===o&&l.managedSession?.id===s&&l.managedSession?.role===i&&lc.has(ap(e,o));if(!a()||(xg(),!await Bx(t)||!a()))return!1;let c=U8(e),u=new Map([...c].map(g=>[g,gn.get(g)])),p=r?(await r(e))?.entries:await q0(e,o,{signal:t});if(p==null||!a())return!1;let f=!1,h=!1;for(let g of c){let b=u.get(g),v=kg(l.triage.get(g));if(gn.get(g)!==b||sp(v)!==(b?.key??""))continue;let x=kg(p[g]);(b?.fix??"")!==(x?.fix??"")&&(h=!0),gn.set(g,{key:sp(x),fix:x?.fix??""});let w=x?.triage==null?l.triage.get(g)?.ignoredReports:void 0;Qf(l.triage,g,{...x,ignoredReports:w})&&(f=!0)}if(h&&tw(o),f){if(await _e(),!a())return!1;E()}return!0}function gk(e,t){if(!e)return;let r=l.currentManagedReport;if(r!=null&&(l.managedReports.length!==1||l.managedReports[0].id!==r))return;let n;return async o=>(n??=(async()=>(xg(),!await Bx(t)||t?.aborted?null:z6(e,{signal:t,reportId:r})))(),(await n)?.(o)??null)}var qj,Yj,Jj,gn,lc,ap,Wi,zo,ac,D8,Zm=k(()=>{"use strict";U();hd();Zd();p3();Kt();Ah();Yt();qj=500,Yj=14;Jj=e=>new TextEncoder().encode(e).length,gn=new Map,lc=new Set,ap=(e,t=l.currentManagedTeam)=>JSON.stringify([t,e]),Wi=new Map,zo=null,ac=Promise.resolve();D8=!1});var V8,j8=k(()=>{V8=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{width:260px;flex-shrink:0;height:100%;background:var(--surface);backdrop-filter:var(--glass-blur);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .15s ease-out;overflow:hidden}:host(.collapsed){width:32px}:host([inert]) .brand-tag,:host([inert]) .sidebar-search,:host([inert]) .sidebar-actions,:host([inert]) #file-list,:host([inert]) #sidebar-toggle,:host([inert]) #encryption-toggle,:host([inert]) #storage-status{visibility:hidden}:host(.collapsed) .brand,:host(.collapsed) .sidebar-search,:host(.collapsed) #encryption-toggle,:host(.collapsed) #file-list{display:none}:host(.collapsed) .sidebar-header{padding:.5rem 0;justify-content:center}:host(.collapsed) .sidebar-actions{padding:.35rem 0;justify-content:center}:host(.collapsed) sidebar-delete-current,:host(.collapsed) #storage-status,:host(.collapsed) #sync-status .sync-label{display:none}:host(.collapsed) #sync-status{padding:.25rem;border:0}:host([data-mode="managed"]) #sidebar-toggle{display:none}:host([data-mode="managed"]:not([data-workspace-access])) .sidebar-search,:host([data-mode="managed"]:not([data-authenticated])) .sidebar-actions{display:none}.sidebar-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem .4rem;.brand{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;user-select:none}.brand-button{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:0;padding:0;margin:0;font:inherit;color:inherit;border-radius:var(--ui-radius, 4px);&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}.brand-tag{padding:.08rem .25rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;font:inherit;font-size:.65rem;font-weight:500;color:var(--muted);text-transform:lowercase;letter-spacing:.02em;&[role=button]{cursor:default}&[role=button]:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&:focus-visible{outline:2px solid var(--accent);outline-offset:2px}}}@media(display-mode:window-controls-overlay){.sidebar-header{min-height:env(titlebar-area-height,0px);padding-left:max(.75rem,env(titlebar-area-x,0px));-webkit-app-region:drag;app-region:drag;.brand-button,.brand-tag,#encryption-toggle{-webkit-app-region:no-drag;app-region:no-drag}#sidebar-toggle{display:none}}}#sidebar-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}}#encryption-toggle{flex-shrink:0;width:22px;height:22px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}&.encrypted{color:var(--accent)}&.locked-pending{color:light-dark(#b25b00,#f0a060);outline:1px dashed currentcolor;outline-offset:-2px}}#encryption-toggle[hidden]{display:none!important}.sidebar-search{display:flex;align-items:center;margin:0 .55rem .25rem;padding:0 .25rem 0 .55rem;background:rgb(from var(--bg) r g b / .45);border:1px solid var(--border);border-radius:var(--ui-radius, 7px);transition:background .12s,border-color .12s;-webkit-app-region:no-drag;app-region:no-drag;&:has(input:focus){border-color:var(--accent);background:rgb(from var(--text) r g b / .06)}.sidebar-search-icon{flex-shrink:0;color:var(--muted);pointer-events:none;margin-right:.4rem}& input{flex:1;min-width:0;padding:.3rem 0;background:transparent;color:var(--text);border:0;outline:none;font:inherit;font-size:.78rem;&::placeholder{color:var(--muted)}&:focus::placeholder{color:transparent}&::-webkit-search-cancel-button{display:none}}}sidebar-view-button{display:contents}sidebar-view-button[hidden]{display:none!important}.sidebar-view-btn{position:relative;flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;background:transparent;color:var(--muted);border:0;border-radius:var(--ui-radius, 3px);padding:0;margin-left:2px;transition:background .12s,color .12s;sidebar-view-button+sidebar-view-button>&{margin-left:.4rem}sidebar-view-button:last-of-type>&{margin-right:.1rem}& svg{width:14px;height:14px}&:hover{color:var(--text);background:rgb(from var(--text) r g b / .08)}&.active{color:var(--accent);background:rgb(from var(--text) r g b / .1)}.view-btn-count{position:absolute;top:-4px;right:-4px;background:var(--bg);color:color-mix(in srgb,var(--muted),var(--text) 15%);font-size:8.5px;font-weight:600;border-radius:999px;padding:0 3px;min-width:11px;text-align:center;line-height:11px;font-variant-numeric:tabular-nums;pointer-events:none}&.active .view-btn-count{color:var(--accent)}}#file-list{list-style:none;flex:1;overflow-y:auto;overscroll-behavior:none;scrollbar-gutter:stable;-webkit-app-region:no-drag;app-region:no-drag;padding:0 .35rem .25rem 0;margin:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:5px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.file-group-header{display:flex;align-items:center;justify-content:space-between;padding:.45rem .35rem .2rem .55rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);user-select:none;&:first-child{padding-top:.25rem}}.file-group-header.workspace-header .workspace-header-actions{display:flex;align-items:center;gap:.35rem}.workspace-add{width:18px;height:18px;display:grid;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover{color:var(--text);border-color:var(--accent)}}.file-item.workspace-item{display:block;border-radius:var(--ui-radius, 0 5px 5px 0)}.workspace-heading{display:flex;align-items:stretch;gap:.15rem}.file-item.workspace-item button.file-name{flex:1;min-width:0}.workspace-meta{display:flex;align-items:center;justify-content:space-between;gap:.35rem;padding:0 .3rem .2rem calc(2rem - 3px);color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;user-select:none}.workspace-findings{min-width:0;overflow:hidden;text-overflow:ellipsis}.workspace-sections{display:inline-flex;flex-shrink:0;margin-left:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden}.workspace-sections button{padding:.06rem .25rem;border:0;background:transparent;color:var(--muted);font:inherit;font-size:.64rem;line-height:1.4;font-variant-numeric:tabular-nums;+button{border-left:1px solid var(--border)}&:hover:not(:disabled){background:var(--surface-active);color:var(--text)}&[aria-expanded=true]{background:rgb(from var(--accent) r g b / .1);color:var(--accent)}&:disabled{background:var(--surface-active);color:var(--muted)}}.workspace-share,.workspace-export,.workspace-leave{flex-shrink:0;width:22px;align-self:center;height:22px;display:none;place-items:center;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding:0;&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .06);border-color:var(--accent)}}.file-item.team-item{display:flex}.file-item.team-item button.file-name{flex:1;min-width:0}.file-item.team-item:focus-within .workspace-share{display:grid}@media(hover:none){.file-item.team-item .workspace-share{display:grid}}.workspace-leave:hover:not(:disabled){color:var(--critical, #f87171);border-color:var(--critical, #f87171)}@media(hover:hover){.file-item.team-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-share,.file-item.workspace-item:hover .workspace-export,.file-item.workspace-item:hover .workspace-leave{display:grid}}.workspace-rename-input{width:100%;box-sizing:border-box;background:var(--surface);color:var(--text);border:1px solid var(--accent);border-radius:var(--ui-radius, 3px);padding:0 .25rem;margin:-1px 0;font:inherit;font-size:.76rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;outline:none}.file-item.team-item .team-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item>.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;background:none;border:0;padding:.2rem .3rem .2rem 1.3rem;font-family:inherit;font-size:.78rem;text-align:left}.file-item.team-bundle-item .file-icon{flex-shrink:0;color:var(--muted)}.file-item.team-bundle-item .file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}.file-item{list-style:none;position:relative}.file-item.current:after{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:var(--ui-radius, 0 2px 2px 0);pointer-events:none}.file-item button.file-name{display:flex;align-items:center;gap:.5rem;width:100%;box-sizing:border-box;padding:.2rem .3rem .2rem .55rem;background:transparent;color:var(--text);border:1px solid transparent;border-radius:var(--ui-radius, 0 5px 5px 0);font-family:inherit;font-size:.78rem;text-align:left;&:hover{background:rgb(from var(--text) r g b / .04)}.file-icon{flex-shrink:0;color:var(--muted)}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}.file-item:is(.workspace-item,.team-item) button.file-name{padding-left:calc(.55rem - 3px)}.file-item .file-count{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);opacity:.65;font-size:.68rem;font-weight:500;font-variant-numeric:tabular-nums}.file-item.current button.file-name{background:rgb(from var(--accent) r g b / .09);border-color:rgb(from var(--accent) r g b / .16);.file-icon,.file-count{color:var(--text)}}.file-item.workspace-item:hover{background:rgb(from var(--text) r g b / .04)}.file-item.workspace-item button.file-name:hover{background:transparent}.file-item.workspace-item.current{background:rgb(from var(--accent) r g b / .09);border-radius:var(--ui-radius, 0 5px 5px 0);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .16)}.file-item.workspace-item.current button.file-name{background:transparent;border-color:transparent}:host-context(body.theme-paper) .file-item.current{background:transparent;box-shadow:none;& button.file-name{background:transparent;border-color:transparent}.file-name:after{content:"";position:absolute;inset:0;border:1px dashed var(--border);border-left:0;pointer-events:none}}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(prefers-reduced-motion:reduce){:host,*,*:before,*:after{transition:none!important}}.file-item.indented button.file-name{padding-left:1.3rem}.file-item.indented:before{content:"";position:absolute;left:.85rem;top:0;bottom:0;width:1px;background:var(--border)}.file-item.bundle-missing>.file-name,.file-item.report-missing>.file-name{display:flex;align-items:center;gap:.5rem;padding:.2rem .3rem .2rem 1.4rem;color:var(--muted);font-size:.78rem;font-style:italic;cursor:help;.file-icon{flex-shrink:0;color:var(--muted);font-style:normal}.file-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;line-height:14.5px}}:host-context(body.theme-pink) .workspace-rename-input,:host-context(body.theme-pink) .file-item button.file-name .file-label,:host-context(body.theme-pink) .file-item.bundle-missing .file-label,:host-context(body.theme-pink) .file-item.report-missing .file-label{font-family:inherit}.file-item.dragging button.file-name{opacity:.4}.file-item.workspace-item.drag-over button.file-name,.file-item.indented.drag-over button.file-name{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent)}.file-group-header.drag-over{background:rgb(from var(--accent) r g b / .12);border-radius:var(--ui-radius, 4px)}.sidebar-actions{padding:.35rem .55rem .45rem;border-top:1px solid var(--border);display:flex;gap:.35rem;align-items:center;justify-content:space-between;& button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 4px);padding:.2rem .5rem;font-size:.72rem;font-family:inherit;-webkit-app-region:no-drag;app-region:no-drag;&:hover{color:var(--text);border-color:var(--accent)}&.danger:hover{color:var(--critical);border-color:var(--critical)}&[disabled]{opacity:.4;border-color:var(--border)!important;color:var(--muted)!important}}}sidebar-delete-current{display:contents}sidebar-delete-current[hidden]{display:none!important}sidebar-delete-current button{display:inline-flex;align-items:center;gap:.35rem;.trash-icon{flex-shrink:0}}#sync-status{display:inline-flex;align-items:center;gap:.35rem;border-color:transparent;&:hover{border-color:var(--accent)}.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .15)}&[data-status=online] .sync-dot{background:var(--green)}&[data-status=connecting] .sync-dot{background:var(--medium)}&[data-status=offline] .sync-dot{background:var(--critical)}}#sync-status[data-proxy-auth] .sync-dot{box-shadow:0 0 0 2px var(--accent)}#sync-status[data-degraded] .sync-dot{box-shadow:0 0 0 2px var(--medium)}#sync-status[hidden]{display:none}#storage-status{display:flex;align-items:center;gap:.4rem;margin:.3rem .55rem .45rem;padding:.3rem .55rem;background:rgb(from var(--medium) r g b / .12);border:1px solid rgb(from var(--medium) r g b / .3);border-radius:var(--ui-radius, 5px);color:light-dark(#b25b00,#f0a060);font-size:.72rem;font-family:inherit;cursor:default;text-align:left;-webkit-app-region:no-drag;app-region:no-drag;&:hover{background:rgb(from var(--medium) r g b / .18);border-color:rgb(from var(--medium) r g b / .5)}.storage-dot{width:7px;height:7px;border-radius:50%;background:var(--medium);flex-shrink:0}}#storage-status[hidden]{display:none}#auth-status[hidden],#manage-status[hidden]{display:none!important}#auth-status{display:inline-flex;align-items:center}#auth-status[data-authed="1"]{display:inline-flex;align-items:center;gap:.4rem;max-width:12rem;padding:.2rem .35rem;border-color:transparent;border-radius:var(--ui-radius, 5px)}#auth-status[data-authed="1"]:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}#manage-status[hidden]{display:none}#manage-status{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;padding:.25rem;border-color:transparent;color:var(--muted)}#manage-status:hover{border-color:transparent;background:rgb(from var(--text) r g b / .07)}.auth-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font:inherit;font-size:.72rem;font-weight:400}.user-avatar{position:relative;flex-shrink:0;width:22px;height:22px;border-radius:50%;overflow:hidden;background:var(--accent);display:inline-grid;place-items:center;user-select:none}.user-avatar-lg{width:38px;height:38px}.user-avatar-fallback{font-size:.72rem;font-weight:600;line-height:1;color:var(--bg);text-transform:uppercase}.user-avatar-lg .user-avatar-fallback{font-size:1.05rem}.user-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.user-avatar img.broken{display:none}.user-menu[popover]{position:fixed;inset:auto;margin:0;min-width:11rem;flex-direction:column;gap:.1rem;background:var(--surface, var(--bg));border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.3rem;box-shadow:0 4px 14px #00000047}.user-menu[popover]:not(:popover-open){display:none}.user-menu[popover]:popover-open{display:flex}.user-card{display:flex;align-items:center;gap:.5rem;padding:.3rem .35rem .45rem;border-bottom:1px solid var(--border);margin-bottom:.2rem}.user-id{display:flex;flex-direction:column;min-width:0}.user-login{font-weight:600;font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-name{font-size:.74rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-row{display:block;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--ui-radius, 4px);padding:.4rem .5rem;font:inherit;font-size:.82rem;color:var(--text)}.user-menu-row.logout-row{display:inline-flex;align-items:center;gap:.4rem;font-size:.76rem}.logout-row svg{flex:0 0 auto}.user-menu-row:hover{background:rgb(from var(--text) r g b / .08)}.user-menu-group{display:flex;flex-direction:column;gap:.1rem;padding-bottom:.2rem;margin-bottom:.2rem;border-bottom:1px solid var(--border)}.user-menu-group-label{padding:.25rem .5rem .15rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);user-select:none}
|
|
149
|
+
`});var Gi,cp=k(()=>{Gi=`:is(.file-icon,.report-logo){&.brand-deepview{--brand-bg: #2563eb;--brand-fg: #fff}&.brand-claude{--brand-bg: #d97757;--brand-fg: #fff}&.brand-codex{--brand-bg: #fff;--brand-fg: #000}&.brand-vercel{--brand-bg: #000;--brand-fg: #fff}&.brand-piolium{--brand-bg: #fbb829;--brand-fg: #1c1b19}.bg{fill:var(--brand-bg)}.fg{fill:var(--brand-fg)}}.file-icon:is(.brand-codex,.brand-vercel) .bg{stroke:var(--brand-fg);stroke-width:.5}.report-logo{display:grid;place-items:center;align-self:stretch;flex:0 0 20px;background:var(--brand-bg);border-right:1px solid var(--border)}
|
|
150
|
+
`});async function Ox(){if(!yt)return;if(await bt(),C()){yt.hidden=!0;return}if(!_n()){yt.hidden=!0;return}let e=me();yt.hidden=!1;let t=tr();yt.classList.toggle("encrypted",e&&t),yt.classList.toggle("locked-pending",e&&!t),e&&t?(yt.dataset.tooltip="Encryption on \u2014 click to disable",yt.setAttribute("aria-label","Disable encryption"),ae(W8,yt)):e?(yt.dataset.tooltip="Encryption on, locked \u2014 click to unlock",yt.setAttribute("aria-label","Unlock encrypted data"),ae(W8,yt)):(yt.dataset.tooltip="Encryption off \u2014 click to enable",yt.setAttribute("aria-label","Enable encryption"),ae(iV,yt))}async function sV(){if(confirm(`Disable encryption?
|
|
21
151
|
|
|
22
152
|
Your local triage and report data will be rewritten as plaintext.
|
|
23
153
|
|
|
24
|
-
IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await
|
|
154
|
+
IMPORTANT: DeepView cannot directly delete your passkey. Most browsers / password managers require you to remove the entry manually after disabling. You can re-enable encryption later.`))try{(await Hb({migrate:async({open:t})=>{await Gb({open:t}),await n0({open:t}),await Qv({open:t}),await ty({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
|
|
25
155
|
|
|
26
156
|
To complete cleanup, remove the DeepView passkey from your password manager / OS settings:
|
|
27
157
|
\u2022 macOS / iOS: Settings \u2192 Passwords
|
|
28
158
|
\u2022 Windows: Settings \u2192 Accounts \u2192 Sign-in options \u2192 Passkeys
|
|
29
159
|
\u2022 Chrome: chrome://settings/passkeys
|
|
30
|
-
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}async function Ob(){await Ts()}function mp(e){if(!e||e===xe)return;xe=e;let t=!1;xe.addEventListener("click",async()=>{if(!t){t=!0;try{if(!X()){await Ob();return}if(!it()){await Is();return}await Pb()}finally{t=!1}}}),ge(gp),gp()}var Rs='<path class="bg" d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/>',Y={default:`<svg class="file-icon brand-deepview" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">${Rs}<path class="fg" d="M7.843 6.719c-1.605 0-2.926 1.292-3.477 1.947.466.58 1.872 2.024 3.496 2.024s2.907-1.292 3.486-2.005c-.627-.703-1.88-1.966-3.505-1.966m.019 3.857c-1.51 0-2.802-1.263-3.353-1.9.55-.617 1.814-1.852 3.334-1.852 1.51 0 2.698 1.12 3.335 1.852-.533.618-1.787 1.9-3.316 1.9m-.019-3.42c-.826 0-1.577.694-1.577 1.596 0 .789.599 1.577 1.577 1.577.893 0 1.587-.684 1.587-1.577-.01-.779-.627-1.596-1.587-1.596m0 3.069a1.476 1.476 0 0 1-1.482-1.473c0-.722.599-1.491 1.482-1.491.846 0 1.482.693 1.492 1.491 0 .808-.618 1.473-1.492 1.473m.01-2.727c-.637 0-1.264.532-1.264 1.244 0 .627.475 1.235 1.245 1.245.684 0 1.254-.522 1.254-1.244 0-.58-.475-1.236-1.235-1.245m-.02 2.403a1.167 1.167 0 0 1-1.149-1.159c0-.532.456-1.14 1.169-1.149.56 0 1.149.427 1.159 1.15 0 .636-.485 1.158-1.179 1.158m-.769-1.833c-.19.238-.275.494-.237.864l.74.057zm1.026-.294c-.295-.057-.665 0-.912.228l.323.607zm.133.047-.38.56.988.114c-.057-.275-.323-.579-.608-.674m-.124.741.456.912c.21-.209.352-.484.314-.836zm-1.225.504a.97.97 0 0 0 .57.617l.399-.551zm.713.664c.313.076.636.01.845-.161l-.295-.618zm-.637 1.55c0 .028-.028.066-.066.066h-.59c-.028 0-.066-.028-.066-.066s.029-.066.067-.066h.579c.048 0 .076.028.076.066m.712 0c0 .028-.028.066-.066.066h-.437c-.028 0-.066-.028-.066-.066s.028-.066.066-.066h.437c.038 0 .066.028.066.066m.666 0c0 .028-.029.066-.067.066h-.37c-.029 0-.067-.028-.067-.066s.029-.066.067-.066h.37c.038 0 .067.028.067.066m-1.672.351c0 .029-.029.067-.067.067h-.295c-.028 0-.066-.028-.066-.066 0-.029.029-.067.067-.067h.294c.038 0 .066.028.066.066m.694 0c0 .029-.028.067-.066.067h-.409c-.028 0-.066-.028-.066-.066 0-.029.028-.067.066-.067h.399c.038 0 .076.028.076.066m.732 0c0 .029-.029.067-.067.067h-.465c-.029 0-.067-.028-.067-.066 0-.029.029-.067.067-.067h.465c.038 0 .067.028.067.066m-1.093.371a.065.065 0 0 1-.067.066h-.627c-.028 0-.075-.028-.066-.066 0-.028.029-.066.067-.066h.627c.038 0 .066.028.066.066m.684 0a.065.065 0 0 1-.066.066h-.39c-.028 0-.076-.028-.066-.066 0-.028.028-.066.066-.066h.39c.038 0 .066.028.066.066M5.088 6.263c-.019-.105-.114-.19-.237-.19s-.257.104-.257.237.105.238.247.238c.105 0 .218-.076.238-.18h.864v.826l.095-.048V6.31c0-.028-.019-.057-.048-.057h-.902zm-.237.19c-.076 0-.143-.066-.143-.143s.066-.142.143-.142.142.066.142.143c.01.076-.066.142-.143.142m2.89-.323H6.38l.418-.475v-.332a.255.255 0 0 0 .218-.248c0-.123-.114-.256-.256-.256s-.266.114-.266.257c0 .123.095.228.209.247v.284l-.456.523v.893l.095-.047v-.742h1.396c.029 0 .067-.009.067-.057 0-.028-.019-.047-.067-.047m-1.13-1.054c0-.076.066-.152.152-.152s.152.066.152.151c0 .076-.066.152-.152.152s-.152-.066-.152-.152m-.836 5.264h-.874c-.019-.105-.114-.219-.247-.219s-.256.105-.256.257c0 .132.114.275.266.275.104 0 .218-.076.237-.19h.827v.608l-.257.285a.3.3 0 0 0-.095-.019c-.133 0-.256.105-.256.228 0 .133.104.238.237.238.124 0 .247-.105.247-.238a.23.23 0 0 0-.057-.152l.285-.304v-.712c0-.029-.019-.058-.057-.058m-1.121.219a.16.16 0 0 1-.152-.161c0-.077.066-.162.152-.162s.152.066.152.152-.066.171-.152.171m.713 1.14c-.076 0-.143-.066-.143-.143s.066-.133.143-.133.142.067.142.143c0 .066-.066.133-.143.133m5.472-1.377a.24.24 0 0 0-.237.208h-1.13c-.029 0-.038.02-.038.048v.712l-.323.39h-.029a.245.245 0 0 0-.247.247c0 .133.114.256.247.256s.247-.113.247-.256a.26.26 0 0 0-.123-.219l.313-.38v-.674h1.083c.019.105.114.2.238.2.133 0 .266-.105.266-.257 0-.133-.105-.276-.266-.276m-1.758 1.767a.15.15 0 0 1-.143-.152c0-.075.067-.142.143-.142s.152.066.152.143a.15.15 0 0 1-.152.151m1.758-1.33a.15.15 0 0 1-.143-.152.147.147 0 0 1 .294.001.15.15 0 0 1-.152.151M8.917 5.55h-.399a.075.075 0 0 1-.076-.076c0-.028.029-.066.067-.066h.418c.028 0 .066.028.066.066s-.038.076-.076.076m.742 0H9.22c-.038 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.437c.038 0 .066.028.066.066s-.028.076-.066.076m.883 0h-.598c-.029 0-.067-.028-.067-.076 0-.028.029-.066.067-.066h.598c.028 0 .066.028.066.066s-.028.076-.066.076m-1.282.4h-.741c-.038 0-.076-.029-.076-.067s.028-.076.066-.076h.75c.039 0 .067.038.067.076 0 .029-.028.067-.066.067m.797 0h-.503c-.038 0-.076-.029-.076-.067s.028-.066.066-.066h.513c.038 0 .067.028.067.066 0 .029-.029.067-.067.067m.476 0h-.19c-.039 0-.067-.029-.067-.067s.028-.066.066-.066h.2c.028 0 .066.028.066.066 0 .029-.028.067-.075.067m-1.682.398h-.332c-.039 0-.077-.028-.077-.066s.029-.066.067-.066h.342c.038 0 .076.028.076.066s-.028.066-.076.066m.789 0h-.494c-.038 0-.067-.028-.067-.066s.029-.066.067-.066h.494c.038 0 .066.028.066.066s-.028.066-.066.066m.893 0h-.599c-.038 0-.076-.028-.076-.066s.028-.066.066-.066h.618c.028 0 .066.028.066.066s-.028.066-.076.066m.418.305a.69.69 0 0 0-.674.712c0 .086.019.18.048.257l.085.066c-.028-.085-.057-.171-.057-.304 0-.285.228-.646.598-.646.295 0 .599.228.599.636a.58.58 0 0 1-.599.59.8.8 0 0 1-.237-.048l.123.114a.4.4 0 0 0 .114.01c.39 0 .684-.276.684-.666 0-.313-.266-.712-.684-.722m.353.552-.019-.01-.161.19-.143-.01-.057-.047-.019-.133.19-.2a.28.28 0 0 0-.361.077c-.076.095-.076.209-.038.351l-.247.304.171.152.266-.266c.142.038.285.019.38-.095a.31.31 0 0 0 .038-.313"/></svg>`,"claude-security":`<svg class="file-icon brand-claude" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">${Rs}<path class="fg" d="m5.875 10.154 1.376-.772.023-.067-.023-.037h-.067l-.23-.015-.787-.02-.681-.03-.661-.035-.166-.035-.156-.205.016-.103.14-.094.2.018.442.03.665.046.481.028.714.075h.113l.016-.047-.039-.028-.03-.028-.687-.466-.744-.492-.39-.284-.21-.143-.106-.135-.046-.294.19-.21.258.017.065.018.26.2.557.43.726.535.106.089.042-.03.006-.022-.048-.08-.395-.713-.422-.726-.187-.301-.05-.18a1 1 0 0 1-.03-.213l.218-.296.12-.039.29.039.123.106.18.413.293.65.453.884.133.262.07.242.027.075h.046v-.043l.038-.497.069-.611.067-.787.023-.221.11-.266.218-.143.17.081.14.2-.02.13-.083.54-.163.846-.106.567h.062l.07-.07.287-.382.482-.602.213-.239.248-.264.159-.125h.301l.221.329-.099.34-.31.393-.256.333-.369.496-.23.397.021.032.055-.006.832-.177.45-.081.537-.092.243.113.026.115-.096.236-.573.141-.673.135-1.003.237-.012.01.014.017.452.042.193.01h.473l.88.066.23.153.138.186-.023.141-.354.181-.478-.113-1.116-.266-.383-.096h-.053v.032l.32.312.584.528.731.68.037.168-.094.133-.099-.014-.643-.484-.248-.218-.561-.472H9.08v.05l.129.189.684 1.027.035.315-.05.103-.177.062-.194-.036-.4-.561-.413-.632-.333-.567-.041.023-.197 2.116-.092.108-.212.082-.177-.135-.094-.218.094-.43.113-.561.092-.447.083-.554.05-.184-.004-.013-.04.006-.418.574-.636.858-.503.539-.12.048-.21-.108.02-.193.117-.172.696-.886.42-.549.27-.317-.001-.046h-.016l-1.85 1.201-.328.042-.142-.132.018-.218.067-.071.556-.383Z"/></svg>`,"codex-security":`<svg class="file-icon brand-codex" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">${Rs}<path class="fg" d="M11.04 8.364a1.72 1.72 0 0 0-.152-1.432 1.8 1.8 0 0 0-1.925-.846 1.8 1.8 0 0 0-.778-.498 1.8 1.8 0 0 0-.927-.05 1.8 1.8 0 0 0-.827.414 1.77 1.77 0 0 0-.507.767 1.8 1.8 0 0 0-.683.297 1.75 1.75 0 0 0-.499.549 1.75 1.75 0 0 0 .22 2.07 1.72 1.72 0 0 0 .151 1.432 1.8 1.8 0 0 0 1.926.846 1.77 1.77 0 0 0 1.333.587c.78 0 1.47-.496 1.707-1.227a1.8 1.8 0 0 0 .684-.298 1.75 1.75 0 0 0 .499-.548 1.75 1.75 0 0 0-.222-2.063m-2.667 3.678a1.33 1.33 0 0 1-.851-.304l.042-.024 1.413-.804a.23.23 0 0 0 .116-.199V8.747l.597.34q.01.005.011.015v1.629a1.323 1.323 0 0 1-1.328 1.31m-2.857-1.203a1.3 1.3 0 0 1-.158-.879l.042.025 1.414.805a.23.23 0 0 0 .23 0l1.729-.982v.68a.02.02 0 0 1-.01.018l-1.431.814a1.34 1.34 0 0 1-1.816-.48m-.372-3.037a1.32 1.32 0 0 1 .7-.574v1.656a.22.22 0 0 0 .114.197l1.72.979-.598.34a.02.02 0 0 1-.021 0L5.63 9.587a1.304 1.304 0 0 1-.487-1.791zm4.907 1.125L8.327 7.94l.596-.34a.02.02 0 0 1 .02 0l1.43.814a1.3 1.3 0 0 1 .512.528 1.3 1.3 0 0 1-.118 1.4 1.33 1.33 0 0 1-.595.436V9.122a.23.23 0 0 0-.12-.195m.594-.881-.042-.025-1.411-.812a.23.23 0 0 0-.232 0l-1.727.983v-.68a.02.02 0 0 1 .008-.018l1.429-.813a1.34 1.34 0 0 1 1.425.061 1.3 1.3 0 0 1 .55 1.298zM6.908 9.252l-.597-.34a.02.02 0 0 1-.012-.016V7.271c0-.249.073-.493.209-.703s.329-.378.557-.483a1.35 1.35 0 0 1 1.415.18l-.042.023-1.413.804a.23.23 0 0 0-.116.2zm.324-.69.77-.438.77.438v.875l-.768.437-.77-.437z"/></svg>`,deepsec:`<svg class="file-icon brand-vercel" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">${Rs}<path class="fg" d="m8 5.97 3.5 6.062h-7Z"/></svg>`};function Ke(e){let t=Dn(e);if(t==="deepsec")return"deepsec";if(t==="claude-security")return"claude-security";let r=e.toLowerCase();return r.endsWith(".codex")?"codex-security":r.endsWith(".md")?"claude-security":"default"}function Ne(e){return e.toLowerCase().endsWith(".codex")?e.slice(0,-6).replaceAll("__","/"):e}var bp=globalThis[Symbol.for("@rray/frontend")];if(!bp)throw new Error("@rray/frontend global not installed; view.js must run before lazy bundles import this wrapper");var{LitElement:L1,html:hl,nothing:yp,unsafeCSS:P1,render:O1,StateElement:N1,classMap:D1,repeat:U1,styleMap:z1}=bp;var qe={critical:6,high:5,medium:4,low:3,high_bug:2,bug:1,informational:0},me=["critical","high","medium","low","high_bug","bug","informational"],Bs="node_modules";function wp(e){let t=n=>/(^|\/)node_modules\//u.test(n),r=!1;e:for(let n of e){for(let o of n.groups??[])for(let s of o)if(t(s.file)){r=!0;break e}if(n.tree){for(let o of Object.keys(n.tree))if(t(o)){r=!0;break e}}}Bs=r?"node_modules":"dependencies"}function vp(){return Bs}function Jt(e){return Bs==="node_modules"?/(^|\/)node_modules\//u.test(e):/(^|\/)dependencies\//u.test(e)}function De(e){return typeof e!="number"||!Number.isFinite(e)?null:`${e.toLocaleString()} B`}function Ft(e){if(e.length<=1)return{prefix:"",stripped:[...e]};let t=e.map(i=>i.split("/")),r=Math.min(...t.map(i=>i.length)),n=0;for(let i=0;i<r-1&&t.every(l=>l[i]===t[0][i]);i++)n=i+1;if(n>0&&t[0][n-1].startsWith("@")&&n--,n>0&&t[0][n-1]==="node_modules"&&n--,n===0)return{prefix:"",stripped:[...e]};let o=`${t[0].slice(0,n).join("/")}/`,s=t.map(i=>i.slice(n).join("/"));return{prefix:o,stripped:s}}function Nb(e){let t=Bs==="node_modules"?/^(?:.*\/)?node_modules\/(?:@[^/]+\/[^/]+|[^/]+)\/(.*)$/u:/^(?:.*\/)?dependencies\/(?:@[^/]+\/[^/]+|[^/]+)\/(.*)$/u;return e.match(t)?.[1]??e}function et(e,t){if(!e)return e;let r=e;t?.exportsMode==="isolate"&&(r=r.replace(/^\((?:[^()]|\([^()]*\))*\): \[export:\s*\w+\] /u,""),r=r.replace(/^\[export:\s*\w+\] /u,""));let n=[t?.exportName,t?.methodName].filter(Boolean);for(let o of n){let s=o.replaceAll(/[.*+?^${}()|[\]\\]/gu,"\\$&");r=r.replaceAll(new RegExp(`\\[export:\\s*${s}\\]\\s*`,"gu"),"")}for(let o of n){let s=o.replaceAll(/[.*+?^${}()|[\]\\]/gu,"\\$&");r=r.replace(new RegExp(`^\\(\`?${s}\`?\\): `,"u"),"")}return r}function yr(e){let t=e?.exportName,r=e?.methodName;return t&&r&&t!==r?`${t}.${r}`:t||r||""}function kp(e){return[e.file,e.description,e.recommendation,e.confidenceReason,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
|
|
31
|
-
`).toLowerCase()}function gl(e){return e&&e.replace(/^[^/]+\//u,"").replace(/^claude-/u,"").replaceAll("-"," ")}function wr(e){return[e.type,gl(e.model),e.effort,e.exportsMode].filter(Boolean).join(" \xB7 ")}function Fs(e){if(e.length===0)return"";let t=e[0];for(let r=1;r<e.length;r++){for(;t&&!e[r].startsWith(t);)t=t.slice(0,-1);if(!t)return""}return t}function Db(e){if(!e)return null;let t=e.trim().replace(/\/$/u,"");return t?/^https?:\/\//iu.test(t)?t:/^github\.com\//iu.test(t)?`https://${t}`:`https://github.com/${t}`:null}function ro(e,t,r){if(t)return`https://github.com/${t}/blob/HEAD/${Nb(e)}`;if(Jt(e))return null;let n=Db(r);return n?`${n}/blob/HEAD/${e}`:null}function ml(e,t,r){let n=ro(e,t,r);return n?hl`<a href="${n}" target="_blank" rel="noopener">${e}</a>`:e}function Xr(e){if(typeof e!="string"||e.length===0)return!1;try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function $p(e,t,r,n){let o=parseInt(t,10);if(!Number.isFinite(o))return yp;let s=ro(e,r,n),i=`line ${o}`;return s?hl`<a href="${`${s}#L${o}`}" target="_blank" rel="noopener">${i}</a>`:i}function xp(e,t){return!e||!t?null:`${/^https?:/iu.test(e)?e.replace(/\/$/u,""):`https://github.com/${e}`}/commit/${t}`}function P(e){return e.id??String(e._id)}function Ae(e){return P(e[0])}function bl(e){return Array.isArray(e)?e:[e]}function Ms(e){return e?._reportName??""}function Qr(e){return It(a.triage,P(e),Ms(e))}function no(e){return[...e].toSorted((t,r)=>{let n=a.triage.get(P(t))?.color?1:0,o=a.triage.get(P(r))?.color?1:0;if(n!==o)return o-n;let s=qe[t.severity]||0,i=qe[r.severity]||0;if(s!==i)return i-s;let l=t.confidence??-1;return(r.confidence??-1)-l})}function Ue(e){return no(e)[0]}function Te(e){let t=a.activeTabByGroup.get(Ae(e));if(t){let r=e.find(n=>P(n)===t);if(r)return r}return Ue(e)}function be(e){let t=e.map(f=>{let h=P(f),b=a.triage.get(h),m=b?.triage??(Qr(f)?"ignored":void 0);return{color:b?.color,bucket:m}}).filter(f=>f.color!==void 0||f.bucket!==void 0),r=new Set(t.map(f=>f.color).filter(f=>f!==void 0)),n=Symbol("none"),o=new Set(t.map(f=>f.bucket??n)),s=r.size>1||o.size>1,i=!s&&r.size===1?[...r][0]:null,l=t.map(f=>f.bucket).filter(Boolean),d=l.some(f=>f!=="ignored"),u=t.length>0&&t.every(f=>!!f.bucket&&f.bucket!=="ignored"),p=!s&&l.length>0?l[0]:null;return{hasConflict:s,commonColor:i,anyTriage:d,allTriaged:u,commonTriage:p,isFixed:p==="fixed",isInvalid:p==="invalid",isDeleted:p==="deleted",isIgnored:p==="ignored"}}function Mt(){let e=a.reports.flatMap(d=>d.groups),t=a.workspaceMerges;if(!t||t.length===0)return e;let r=e.map((d,u)=>u),n=d=>{let u=d;for(;r[u]!==u;)u=r[u];for(;r[d]!==u;){let p=r[d];r[d]=u,d=p}return u},o=(d,u)=>{let p=n(d),f=n(u);p!==f&&(r[p]=f)},s=new Map;for(let d=0;d<e.length;d++)for(let u of e[d])u.id&&s.set(u.id,d);for(let d of t){let u=-1;for(let p of d){let f=s.get(p);f!==void 0&&(u===-1?u=f:o(u,f))}}let i=new Set,l=[];for(let d=0;d<e.length;d++){let u=n(d);if(i.has(u))continue;i.add(u);let p=[];for(let w=d;w<e.length;w++)n(w)===u&&p.push(...e[w]);let f=new Set(p.map(w=>w.id).filter(Boolean)),h=[],b=new Set;for(let w of t)for(let v of w)b.has(v)||f.has(v)&&(h.push(v),b.add(v));if(h.length===0){l.push(p);continue}let m=new Map;for(let w of p)w.id&&!m.has(w.id)&&m.set(w.id,w);let y=new Set,k=[];for(let w of h){let v=m.get(w);v&&(k.push(v),y.add(v))}for(let w of p)y.has(w)||k.push(w);l.push(k)}return l}function vr(e){for(let t of Mt())if(Ae(t)===e)return t;return null}var oo="\0",so="";function yl(e){return typeof e.repo?.github=="string"&&e.repo.github?e.repo.github:typeof e._repoFallback=="string"&&e._repoFallback?e._repoFallback:null}function Ls(){a.filterSeverities=new Set,a.filterColors=new Set,a.filterSources=new Set,a.filterAnalyzer="",a.filterRepo="",a.filterConfMin=0,a.filterConfMax=10,a.filterInclude="";let e=a.reports.some(t=>t.groups.some(r=>r.some(n=>n.priority!==void 0)));a.sortBy=e?"priority-desc":"severity"}function Ub(e){let t=a.filterInclude.toLowerCase();if(a.filterSeverities.size>0&&!a.filterSeverities.has(e.severity))return!1;if(a.filterColors.size>0){let r=a.triage.get(P(e))?.color??"none";if(!a.filterColors.has(r))return!1}if(a.filterSources.size===1){let r=a.filterSources.has("own");if(r&&Jt(e.file)||!r&&!Jt(e.file))return!1}if(a.filterAnalyzer){let r=e._analyzer??null,n=a.filterAnalyzer===oo?null:a.filterAnalyzer;if(r!==n)return!1}if(a.filterRepo){let r=yl(e),n=a.filterRepo===so?null:a.filterRepo;if(r!==n)return!1}if(e.confidence===void 0){if(e.critical===!0){if(a.filterConfMax<10)return!1}else if(a.filterConfMin>0)return!1}else if(e.confidence<a.filterConfMin||a.filterConfMax<10&&e.confidence>a.filterConfMax)return!1;return t?!!(kp(e).includes(t)||t.startsWith("https://")&&t.length>8&&(a.triage.get(P(e))?.fix??"").toLowerCase().includes(t)):!0}function Cp(e){return e.filter(t=>t.some(Ub))}function _p(e,t,r){return(n,o)=>{let s=n[e]??r,i=o[e]??r;return(t==="desc"?i-s:s-i)||n.file.localeCompare(o.file)}}function Ep(e){let t=e==="desc"?-1:11;return(r,n)=>{let o=r.confidence===void 0&&r.critical===!0,s=n.confidence===void 0&&n.critical===!0,i=r.confidence??(o?10:t),l=n.confidence??(s?10:t);return(e==="desc"?l-i:i-l)||(o===s?0:o?-1:1)||r.file.localeCompare(n.file)}}var Sp=Ep("desc"),zb={severity:(e,t)=>(qe[t.severity]||0)-(qe[e.severity]||0)||Sp(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":Sp,"confidence-asc":Ep("asc"),"priority-desc":_p("priority","desc",-1),"priority-asc":_p("priority","asc",11)};function Ap(e){let t=zb[a.sortBy];return t?[...e].toSorted((r,n)=>t(Ue(r),Ue(n))):[...e]}var Ie=ft(class extends Je{constructor(e){if(super(e),e.type!==Be.PROPERTY&&e.type!==Be.ATTRIBUTE&&e.type!==Be.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!_d(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===ae||t===g)return t;let r=e.element,n=e.name;if(e.type===Be.PROPERTY){if(t===r[n])return ae}else if(e.type===Be.BOOLEAN_ATTRIBUTE){if(!!t===r.hasAttribute(n))return ae}else if(e.type===Be.ATTRIBUTE&&r.getAttribute(n)===t+"")return ae;return Do(e),t}});var vl={"claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec"};function Wb(e){return e==null?"(none)":vl[e]??e}var wl=class extends L{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){return c`<select class="sort-select" aria-label="Filter by analyzer" .value="${Ie(a.filterAnalyzer)}" @change="${this._onChange}"><option value="">All analyzers</option>${this.options.map(t=>c`<option value="${t??oo}">${Wb(t)}</option>`)}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("analyzer-change",{detail:{value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("analyzer-select",wl);function Zr(e){return e==="informational"?"info":e.replaceAll("_"," ")}function $l(e){if(!e)return"";for(let t of e.split(`
|
|
32
|
-
`))if(t.trim())return t.trim();return""}function Hb(e){if(!e)return{title:"",body:""};let t=e.indexOf(`
|
|
33
|
-
`);if(t<0)return{title:"",body:e};let r=e.slice(t+1).replace(/^\s+/u,"");return r?{title:e.slice(0,t).trim(),body:r}:{title:"",body:e}}var Tp=/"[^"\n]+"|`[^`\n]+`/gu;function kl(e){if(!e)return e;Tp.lastIndex=0;let t=[],r=0,n;for(;(n=Tp.exec(e))!==null;){n.index>r&&t.push(e.slice(r,n.index));let o=n[0].codePointAt(0)===96?"inline-code":"inline-quote";t.push(c`<span class="${o}">${n[0]}</span>`),r=n.index+n[0].length}return r===0?e:(r<e.length&&t.push(e.slice(r)),t)}function jb(e){let t=ro(e.file,e.repo?.github,e._repoFallback??a.repoUrl),r=parseInt(e.line,10),n=Number.isFinite(r)?`${e.file}:${e.line}`:e.file;if(!t)return n;let o=Number.isFinite(r)?`${t}#L${r}`:t;return c`<a href="${o}" target="_blank" rel="noopener">${n}</a>`}function Vb(e,t){if(!t)return g;let r=t.slice(0,7),n=xp(e,t);return n?c`<a href="${n}" target="_blank" rel="noopener" title="${t}">${r}</a>`:c`<span title="${t}">${r}</span>`}var Kb=c`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,qb=c`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Gb=c`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,Yb=c`<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><g stroke="currentColor" stroke-width="1.2" stroke-linecap="round" fill="none"><line x1="8" y1="1.8" x2="8" y2="14.2"/><line x1="1.8" y1="8" x2="14.2" y2="8"/><line x1="3.6" y1="3.6" x2="12.4" y2="12.4"/><line x1="12.4" y1="3.6" x2="3.6" y2="12.4"/></g></svg>`;function Jb(e){if(!a.currentWorkspace)return g;let t=e[0]?._reportName;if(!t)return g;let r=Y[Ke(t)]??Y.default;return c`<span class="report-chip" title="${t}">${ue(r)}<span class="report-chip-label">${Ne(t)}</span></span>`}function Ip(e,t,r,n,o=null){let s=Jb(e),i=a.triage.get(n),l=i?.color??null,d=i?.comment??"",u=i?.fix??"",p=d?`Edit comment: ${d}`:"Add comment",f=u?`Edit fix link: ${u}`:"Add fix link (PR URL, etc.)",h=o==="focus",b=d?"Edit comment":"Comment",m=u?"Edit fix link":"Fix link",y=c`<button type="button" class="${F({"mark-comment":!0,"has-comment":d})}" title="${p}" aria-label="${p}">${Kb}${h?c`<span class="mark-btn-label">${b}</span>`:g}</button>`,k=c`<button type="button" class="${F({"mark-fix":!0,"has-fix":u})}" title="${f}" aria-label="${f}">${qb}${h?c`<span class="mark-btn-label">${m}</span>`:g}</button>`,w=c`<button type="button" class="mark-copy" title="Copy file, line, description, confidence to clipboard" aria-label="Copy finding details to clipboard">${Gb}${h?c`<span class="mark-btn-label">Copy</span>`:g}</button>`,v=c`<button type="button" class="mark-claude" title="Open in Claude Code (claude://) with a confirm-and-fix prompt" aria-label="Open finding in Claude Code">${Yb}${h?c`<span class="mark-btn-label">Claude</span>`:g}</button>`,S=c`<color-marker .selected="${l}"></color-marker>`,I=r.hasConflict?"change triage state (colors mismatch \u2014 acts per-tab)":t.length>1?"change triage state for the whole group":"change triage state";return c`${s}<span class="mark-action-group">${y}${k}</span><span class="mark-action-group">${w}${v}</span>${S}${Qb(e,I,o)}`}function Xb(e){if(e.newState!=="open")return;let t=e.currentTarget,n=t.getRootNode().querySelector?.(`[popovertarget="${t.id}"]`);if(!n)return;let o=n.getBoundingClientRect(),s=t.offsetWidth||110,i=t.offsetHeight||100,l=4,d=o.right-s;d<4&&(d=4),d+s>window.innerWidth-4&&(d=window.innerWidth-s-4);let u=o.bottom+l;u+i>window.innerHeight-4&&o.top>i+l&&(u=o.top-i-l),t.style.top=`${u}px`,t.style.left=`${d}px`}function Qb(e,t,r=null){let n=P(e[0]),o=be(e),s=Te(e),i=P(s),l=o.hasConflict?a.triage.get(i)?.triage??(Qr(s)?"ignored":null):o.commonTriage,d={fixed:"Fixed",invalid:"Invalid",deleted:"Deleted",ignored:"Ignored"},u={fixed:"Fixed",invalid:"Invalid",deleted:"Delete",ignored:"Ignore"},p=!!a.shownTriage,f=p?d[a.shownTriage]:null,h=["fixed","invalid","deleted","ignored"],b=r==="focus",m;b?m=h.map(w=>({key:w,label:u[w]})):p?m=[{key:"restore",label:"Restore"},...h.filter(w=>w!==a.shownTriage).map(w=>({key:w,label:u[w]}))]:m=h.map(w=>({key:w,label:u[w]}));let y=["mark-triage-menu"];p&&y.push("with-label",`triage-state-${a.shownTriage}`);let k=`triage-menu-${n.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return c`<div class="triage-menu-wrap"><button type="button" class="${y.join(" ")}" popovertarget="${k}" popovertargetaction="toggle" title="${t}" aria-label="${t}">${f?c`<span class="mark-triage-label">${f}</span>`:g} <svg viewBox="0 0 12 12" width="11" height="11" aria-hidden="true"><path d="M2 4l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div popover="auto" id="${k}" class="triage-menu" data-gid="${n}" role="menu" @beforetoggle="${Xb}">${m.map(w=>c`<button type="button" class="${F({"triage-menu-item":!0,[`triage-menu-${w.key}`]:!0,active:l===w.key})}" data-triage-action="${w.key}" role="menuitem">${w.label}</button>`)}</div></div>`}function Rp(e,t){let r=P(e),n=a.triage.get(r),o=n?.color,s=n?.triage,i=Qr(e),l=["tab"];return t&&l.push("active"),o&&l.push(`tab-mark-${o}`),s?l.push(`tab-${s}`):i&&l.push("tab-ignored"),c`<button type="button" class="${l.join(" ")}" data-tid="${r}"><span class="tab-label"><span class="${`badge ${e.severity}`}">${Zr(e.severity)}</span> ${e.confidence===void 0?g:c`<span class="tab-conf">${e.confidence}/10</span>`}</span></button>`}function Zb(e){if(a.viewMode==="table"||a.viewMode==="focus"){let t=e.confidence*10;return c`<div class="${`conf-ring ${e.severity}`}"><svg viewBox="0 0 36 36" aria-hidden="true"><circle class="conf-ring-track" cx="18" cy="18" r="15.9155"/><circle class="conf-ring-arc" cx="18" cy="18" r="15.9155" style="${`stroke-dasharray: ${t} 100`}"></circle></svg> <span>${e.confidence}<small>/10</small></span></div><div class="value-label">Confidence</div>`}return c`<div class="conf-score"><strong>${e.confidence}</strong>/10</div><div class="value-label">Confidence</div>`}var ey=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu;function ty(e){let t=e?.name;if(typeof t!="string"||!ey.test(t))return g;let r=e?.version,n=typeof r=="string"&&r.length>0,o=n?`https://www.npmjs.com/package/${t}/v/${encodeURIComponent(r)}`:`https://www.npmjs.com/package/${t}`,s=n?`${t}@${r}`:t;return c`<span class="line-num"><a class="npm-link" href="${o}" target="_blank" rel="noopener noreferrer" title="${`Open ${s} on npmjs.com`}">npm: ${s}</a></span>`}function ry(e,t,r=0,n=1,o=null){let s=P(e),i=a.triage.get(s),l=i?.comment??"",d=i?.fix??"",u=ro(e.file,e.repo?.github,e._repoFallback??a.repoUrl),p=parseInt(e.line,10),f=Number.isFinite(p),h=f?`${e.file}:${e.line}`:e.file,b=u?c`<a href="${f?`${u}#L${p}`:u}" target="_blank" rel="noopener">${h}</a>`:h,m=yr(e),y=m?c`<span class="line-num">${b}, ${m}</span>`:c`<span class="line-num">${b}</span>`,k=wr(e),w=o==="focus"?ty(e.package?.npm):g,v=g;if(o!=="focus"&&e.fileHash&&Array.isArray(e._bundleHashes)&&e._bundleHashes.length>0){let R=new Set(e._bundleHashes),O=mr(e.fileHash).find(({integrity:we})=>R.has(we));O&&(v=c`<button type="button" class="finding-code-btn" data-finding-code-bundle="${O.integrity}" data-finding-code-file="${O.file}" data-finding-code-line="${e.line??""}" title="${`Open ${O.file} in bundle source viewer`}">Code</button>`)}let{title:S,body:I}=Hb(et(e.description,e));return c`<div class="${F({"tab-body":!0,active:t})}" data-tid="${s}">${n>1?c`<div class="print-case-label">${r+1} of ${n}</div>`:g}<div class="finding-left"><span class="${`badge ${e.severity}`}">${Zr(e.severity)}</span><div class="value-label">Severity</div>${e.confidence===void 0?g:Zb(e)} ${v}</div><div><div class="line-row">${y} ${w} ${e.discoveredIn?c`<span class="line-num discovered-in">(found analyzing ${e.discoveredIn})</span>`:g} ${k?c`<span class="run-meta">${k}</span>`:g}</div>${S?c`<div class="desc-title">${S}</div>`:g} ${I?c`<div class="desc">${kl(I)}</div>`:g} ${e.recommendation?c`<div class="recommendation">Recommendation: ${kl(et(e.recommendation,e))}</div>`:g} ${e.confidenceReason?c`<div class="conf-reason">${kl(et(e.confidenceReason,e))}</div>`:g} ${l?c`<div class="comment-block"><span class="comment-label">Comment:</span> ${l}</div>`:g} ${d?c`<div class="fix-block"><span class="fix-label">Fix:</span> ${Xr(d)?c`<a href="${d}" target="_blank" rel="noopener noreferrer">${d}</a>`:d}</div>`:g}</div></div>`}function en(e){return Ae(e)}function Bp(e){let t=be(e),r=no(e),n=e.some(s=>s.critical||s.severity==="critical"),o=["finding"];return n&&o.push("is-critical"),t.hasConflict?o.push("has-conflict"):t.commonColor&&o.push(`mark-${t.commonColor}`),a.shownTriage&&o.push(`triage-${a.shownTriage}`),r.length>1&&o.push("multi-case"),o}function Fp(e,t={}){let{context:r=null}=t,n=be(e),o=no(e),s=Te(e),i=P(s),l=s.commitHash?c`<div class="commit-ref">introduced in ${Vb(s.repo?.github,s.commitHash)}</div>`:g,d=a.currentWorkspace&&l!==g;return c`${o.map((u,p)=>ry(u,P(u)===i,p,o.length,r))} ${d?c`<div class="marks-commit-row">${l}</div>`:g}<div class="marks"><div class="marks-left">${d?g:l} ${o.length>1?c`<div class="tabs">${o.map(u=>Rp(u,P(u)===i))}</div>`:g}</div>${Ip(e,o,n,i,r)}</div>`}function io(e){return Ae(e)}function Mp(e){let t=be(e),r=e.some(o=>o.critical||o.severity==="critical"),n=[];return r&&n.push("is-critical"),t.hasConflict?n.push("has-conflict"):t.commonColor&&n.push(`mark-${t.commonColor}`),a.shownTriage&&n.push(`triage-${a.shownTriage}`),n}function Lp(e){let t=be(e),r=no(e),n=Te(e),o=P(n),s=n,i=$l(et(s.description,s)),l=wr(s),d=yr(s),u=d?`, ${d}`:"";return c`<div class="row-score"><span class="${`badge ${s.severity}`}">${Zr(s.severity)}</span> ${s.confidence===void 0?g:c`<span class="row-conf"><strong>${s.confidence}</strong>/10</span>`}</div><div class="row-body"><div class="title-row"><span class="title">${i}</span> ${l?c`<span class="row-type">${l}</span>`:g}</div><div class="meta-row"><span class="row-loc">${jb(s)}${u}</span><div class="marks">${Ip(e,r,t,o)}</div></div>${r.length>1?c`<div class="tabs-row"><div class="tabs">${r.map(p=>Rp(p,P(p)===o))}</div></div>`:g}</div>`}function ao(e){return"tree-"+e.replaceAll(/[^\w-]+/gu,"_")}var Op=()=>Object.fromEntries(me.map(e=>[e,0]));function xl(e){let t=new Map;for(let r of e)for(let n of r){t.has(n.file)||t.set(n.file,Op());let o=t.get(n.file);o[n.severity]!==void 0&&o[n.severity]++}return t}function _l(e){let t=null;for(let r of e)if(r?.tree){t||(t={});for(let n of Object.keys(r.tree)){let o=r.tree[n];if(!t[n]){t[n]={...o,imports:[...o.imports??[]]};continue}let s=new Set(t[n].imports);for(let i of o.imports??[])s.has(i)||(s.add(i),t[n].imports.push(i));t[n].size==null&&o.size!=null&&(t[n].size=o.size)}}return t}function Ps(e,t){let r=new Map;for(let n of Object.keys(e)){let o=new Set,s=[...(e[n].imports??[]).filter(l=>e[l])];for(;s.length>0;){let l=s.pop();if(!o.has(l)){o.add(l);for(let d of e[l]?.imports??[])e[d]&&s.push(d)}}let i=Op();for(let l of o){let d=t.get(l);if(d)for(let u of me)i[u]+=d[u]??0}r.set(n,i)}return r}function Sl(e,t,r){let n=t.get(e),o=r.get(e);return Pp(n)>0||Pp(o)>0}function Pp(e){if(!e)return 0;let t=0;for(let r of me)t+=e[r]??0;return t}function Np(e){if(!e)return g;let t=mr(e)[0];return t?c`<button type="button" class="tree-code-btn" data-finding-code-bundle="${t.integrity}" data-finding-code-file="${t.file}" title="${`Open ${t.file} in bundle source viewer`}">Code</button>`:g}function Dp(e,t){let r=Object.keys(e).toSorted(),n=new Map;for(let p of r)for(let f of e[p].imports??[]){let h=n.get(f)??[];h.push(p),n.set(f,h)}let o=a.filesSearch.trim().toLowerCase(),s=o?r.filter(p=>p.toLowerCase().includes(o)):r,i=p=>e[p]?c`<a href="${`#${ao(p)}`}"><span class="name">${p}</span></a>`:c`<span class="name">${p}</span>`,l=p=>{let f=t.get(p);if(!f)return null;let h=me.filter(b=>(f[b]??0)>0);return h.length===0?null:c`<span class="tree-count-chips">${h.map(b=>c`<span class="${`tree-count-chip ${b}`}">${f[b]} ${b.replaceAll("_"," ")}</span>`)}</span>`},d=p=>{let f=t.get(p);return f?me.reduce((h,b)=>h+(f[b]??0),0):0},u=c`<div class="tree-toolbar"><view-mode-buttons modes="table,list" kind="files"></view-mode-buttons><div class="search-row"><toolbar-search kind="files"></toolbar-search><span class="result-count">${s.length} of ${r.length}</span></div></div>`;if(a.filesViewMode==="table"){let p=a.filesSelectedFile&&e[a.filesSelectedFile]&&s.includes(a.filesSelectedFile)?a.filesSelectedFile:null;return c`<div class="${p?"tree-view tree-view-table with-details":"tree-view tree-view-table"}">${u}<div class="${p?"tree-table-layout open":"tree-table-layout"}"><div class="tree-table-list">${s.length===0?c`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(b=>{let m=d(b),y=b===p,k=De(e[b]?.size);return c`<div class="${`tree-table-row${y?" selected":""}${m===0?" clean":""}`}" data-tree-select="${b}"><span class="tree-table-name">${b}</span> ${l(b)??c`<span class="tree-table-clean-marker">—</span>`} ${k?c`<span class="tree-table-size">${k}</span>`:g}</div>`})}</div>${p?c`<aside class="tree-table-details" id="tree-table-details"><header class="tree-table-details-bar"><span class="tree-table-details-label">Details</span> <button type="button" class="tree-table-details-close" data-tree-deselect title="Close details" aria-label="Close details">×</button></header><div class="tree-table-details-body">${ny(e[p],p,n.get(p)??[],i)}</div></aside>`:g}</div></div>`}return c`<div class="tree-view">${u} ${s.length===0?c`<div class="tree-table-empty">No files match the search.</div>`:g} ${s.map(p=>{let f=e[p],h=n.get(p)??[],b=De(f?.size);return c`<section class="tree-file" id="${ao(p)}"><div class="tree-file-header"><span class="name">${p}</span> ${l(p)} ${b?c`<span class="tree-file-size">${b}</span>`:g} ${Np(f.fileHash)}</div>${f.fileHash||f.treeHash?c`<div class="tree-hashes hashes">${f.fileHash?c`<div class="tree-hash">file: ${f.fileHash}</div>`:g} ${f.treeHash?c`<div class="tree-hash">tree: ${f.treeHash}</div>`:g}</div>`:g} ${f.imports?.length>0?c`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${f.imports.map(m=>c`<li>${i(m)}</li>`)}</ul></div>`:g} ${h.length>0?c`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${h.map(m=>c`<li>${i(m)}</li>`)}</ul></div>`:g} ${f.exports?.length>0?c`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${f.exports.map(m=>c`<li><span class="name">${m}</span></li>`)}</ul></div>`:g}</section>`})}</div>`}function ny(e,t,r,n){let o=De(e?.size);return c`<div class="tree-detail-name"><span class="name">${t}</span> ${o?c`<span class="tree-detail-size">${o}</span>`:g} ${Np(e.fileHash)}</div>${e.fileHash||e.treeHash?c`<div class="tree-hashes hashes">${e.fileHash?c`<div class="tree-hash">file: ${e.fileHash}</div>`:g} ${e.treeHash?c`<div class="tree-hash">tree: ${e.treeHash}</div>`:g}</div>`:g} ${e.imports?.length>0?c`<div class="tree-section"><span class="tree-section-label">imports</span><ul>${e.imports.map(s=>c`<li>${n(s)}</li>`)}</ul></div>`:g} ${r.length>0?c`<div class="tree-section"><span class="tree-section-label">imported by</span><ul>${r.map(s=>c`<li>${n(s)}</li>`)}</ul></div>`:g} ${e.exports?.length>0?c`<div class="tree-section"><span class="tree-section-label">exports</span><ul>${e.exports.map(s=>c`<li><span class="name">${s}</span></li>`)}</ul></div>`:g}`}function oy(){return{showAll:!1,selected:null,focusedPkg:null,topPkgsTab:"issues",edgeOpacity:.22,nodeSize:1,showLabels:!1,selectedSeverities:new Set,selectedColors:new Set,pathFilter:"",hidden:new Set,solo:null,graphState:null,layoutCache:null}}var Xt=oy(),E=new Proxy(Xt,{get(e,t){return Xt[t]},set(e,t,r){return Xt[t]=r,!0},has(e,t){return t in Xt},deleteProperty(e,t){return delete Xt[t]},ownKeys(){return Reflect.ownKeys(Xt)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(Xt,t)}});function ze(){E.graphState?._cleanup&&E.graphState._cleanup(),E.graphState=null}function Up(){return Xt}var lo=null,zp=null;function tn(){return zp}function sy(){return lo||(lo=(async()=>{let e="./graph.js";try{let t=await import(e);return t._swapGraph2Impl(Up()),zp=t,t}catch(t){throw lo=null,t}})(),lo)}async function Cl(e,t,r,n,o){try{let s=await sy(),i=s.buildGraphFromPrep(t);W(c`<graph-layout .graph="${i}" .options="${r}"></graph-layout>`,e);let l=e.querySelector("graph-layout");return await l.updateComplete,n(),o(),s.attachGraph2Interaction(e,i,n),l}catch(s){let i=s instanceof Error?s.message:String(s);return e.textContent=`Graph failed to load: ${i}`,null}}function ut(e){let t=new Map;if(!e)return t;if(e.kind==="stasis"){if(!e.bundle)return t;for(let[r,n]of e.bundle.sources)typeof n=="string"&&t.set(r,n)}else if(e.kind==="sourcemap"){if(!e.json)return t;let r=e.json.sources??[],n=e.json.sourcesContent??[];for(let o=0;o<r.length;o++)typeof n[o]=="string"&&t.set(r[o],n[o])}return t}var co=null,uo=null;function iy(){return co||(co=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw co=null,t}})(),co)}function ay(e){let t=ut(e);if(t.size===0)return t;let r=[...t.keys()],{stripped:n}=Ft(r),o=new Map;for(let s=0;s<r.length;s++)o.set(n[s],t.get(r[s]));return o}async function Wp(e,t){let r=t?.integrity??"";(!uo||uo.integrity!==r)&&(uo={integrity:r,promise:ly(t,r)});try{let n=await uo.promise;return!e.isConnected||e.contains(n)||e.replaceChildren(n),n}catch(n){uo=null;let o=n instanceof Error?n.message:String(n);return e.textContent=`Terminal failed to load: ${o}`,null}}async function ly(e,t){return(await iy()).createTerminalElement(ay(e),t)}function jp(e){if(!e)return null;let t=vp()==="node_modules"?/^(?:.*\/)?node_modules\/(@[^/]+\/[^/]+|[^/]+)/u:/^(?:.*\/)?dependencies\/(@[^/]+\/[^/]+|[^/]+)/u,r=e.match(t);if(r)return r[1];let n=e.indexOf("/");return n>0?e.slice(0,n):"/"}var cy=["#4e9af1","#f28e2b","#59a14f","#e15759","#76b7b2","#edc948","#b07aa1","#ff9da7","#9c755f","#5cd1e5","#f1ce63","#d37295","#a0cbe8","#86bcb6","#8cd17d","#b6992d","#499894","#e15759","#e879c7","#d4a6c8"],Hp=["#2f8aef","#d2691e","#2ea043","#e63946","#2e9a92","#b88817","#9560e8","#d24a9c","#8a5d40","#0891b2","#a07a14","#c14e8e","#1f7ad0","#549b94","#3fb95f","#a07a14","#2a8278","#cb2c40","#c026d3","#965f93"];function dy(){if(typeof document>"u")return!1;let e=document.body?.classList;return!!e&&(e.contains("theme-light")||e.contains("theme-pink"))}var El=new Map;function Lt(e){let t=dy()?Hp:cy,n=`${t===Hp?"l":"d"}:${e??"__own__"}`;if(El.has(n))return El.get(n);let o=e??"__own__",s=0;for(let u of o)s=s*37+u.codePointAt(0)|0;let l=((s%t.length+t.length)%t.length*7+3)%t.length,d=t[l];return El.set(n,d),d}var Al=(e,t,r)=>{for(let n of t)if(n[0]===e)return(0,n[1])();return r?.()};var rn='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2 2 5v6l6 3 6-3V5L8 2Z"/><path d="M2 5l6 3 6-3"/><path d="M8 8v6"/></svg>',Os='<svg class="file-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="11" height="9" rx="1.2"/><path d="M6 4V3h4v1"/></svg>';var Ns=null;function uy(){return Ns||(Ns=(async()=>await import("./prism.js"))(),Ns)}var py={js:"javascript",mjs:"javascript",cjs:"javascript",jsx:"jsx",ts:"typescript",mts:"typescript",cts:"typescript",tsx:"tsx",json:"json",css:"css",html:"markup",htm:"markup",xml:"markup",svg:"markup",yml:"yaml",yaml:"yaml",sh:"bash",bash:"bash",md:"markdown",markdown:"markdown",sol:"solidity"};function Ds(e){if(typeof e!="string")return null;let t=e.lastIndexOf(".");return t<0?null:py[e.slice(t+1).toLowerCase()]??null}async function Us(e,t){if(!t)return null;try{return(await uy()).highlight(e,t)}catch{return null}}var ye=`.lwd-body{margin:.2rem 0 .55rem;color:var(--text);font-size:.86rem;line-height:1.5}.lwd-empty{margin:.2rem 0 .55rem;color:var(--muted);font-size:.78rem}.lwd-note{margin:.2rem 0 .65rem;padding:.55rem .7rem;border:1px solid var(--border);border-radius:6px;background:rgb(from var(--text) r g b / .03);color:var(--muted);font-size:.78rem;line-height:1.45}.lwd-choice{margin:.2rem 0 .65rem;padding:.55rem .7rem .6rem;border:1px solid var(--border);border-radius:6px;background:rgb(from var(--text) r g b / .03);& legend{padding:0 .35rem;color:var(--text);font-size:.78rem;font-weight:500;& strong{font-weight:600}}}.lwd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.3rem .15rem;& input[type=radio]{margin:.15rem 0 0;accent-color:var(--accent)}.lwd-option-text{display:flex;flex-direction:column;gap:.1rem;min-width:0}.lwd-option-title{color:var(--text);font-size:.82rem;line-height:1.35}.lwd-option-hint{color:var(--muted);font-size:.72rem;line-height:1.4}}.lwd-list{margin:0;padding-left:1.1rem;color:var(--muted);font-size:.76rem;line-height:1.5;& li+li{margin-top:.2rem}& strong{color:var(--text);font-weight:600}}.lwd-kind-tag{display:inline-block;vertical-align:middle;margin-left:.3rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:rgb(from var(--text) r g b / .04);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.lwd-rename-input{margin-top:.2rem}.lwd-rename-error{margin:.25rem 0 0;color:var(--critical, #f87171);font-size:.72rem;line-height:1.35}
|
|
34
|
-
`;var Tl=class extends T{static styles=[...T.styles,A(ye)];static properties={reportName:{type:String},workspaceNames:{type:Array},existingNames:{type:Object},_choice:{state:!0},_newName:{state:!0}};constructor(){super(),this.reportName="",this.workspaceNames=[],this.existingNames=new Set,this._choice="replace",this._newName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_onClose=()=>this._finish({action:"cancel"});_onCancel=()=>this._finish({action:"cancel"});_onChoiceChange=t=>{this._choice=t.target.value};_onNewNameInput=t=>{this._newName=t.target.value};_onNewNameKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onConfirm())};_onConfirm=()=>{if(this._choice==="rename"){let t=(this._newName??"").trim();if(!this._isRenameValid(t))return;this._finish({action:"rename",newName:t});return}this._finish({action:"replace"})};_replaceHint(){let t=this.workspaceNames.length;if(t===0)return c`<span class="lwd-option-hint">The local file will be overwritten.</span>`;let r=t===1?c`workspace <strong>"${this.workspaceNames[0]}"</strong>`:c`<strong>${t}</strong> workspaces (${this.workspaceNames.join(", ")})`;return c`<span class="lwd-option-hint">The local file will be overwritten. When sync is online, the new bytes are also uploaded to ${r} so the cloud copy matches.</span>`}_renameValidationTpl(t){return t?t===this.reportName?c`<p class="lwd-rename-error">Pick a name different from the original.</p>`:t.includes("\0")?c`<p class="lwd-rename-error">The new name cannot contain a NUL byte.</p>`:t.includes("/")||t.includes("\\")?c`<p class="lwd-rename-error">The new name cannot contain "/" or "\\".</p>`:this.existingNames.has(t)?c`<p class="lwd-rename-error">A file named "${t}" already exists — pick something else.</p>`:g:c`<p class="lwd-rename-error">Enter a new name.</p>`}_isRenameValid(t){return t.length>0&&t!==this.reportName&&!t.includes("\0")&&!t.includes("/")&&!t.includes("\\")&&!this.existingNames.has(t)}render(){let t=this._choice==="rename",r=(this._newName??"").trim(),n=t&&!this._isRenameValid(r),o=t?"Rename":"Replace",s=t?"primary":"danger",i=this.workspaceNames.length>0?c`<span class="lwd-option-hint">Saved as an unfiled report — the renamed copy isn't added to any workspace.</span>`:g;return c`<dialog @close="${this._onClose}"><header><h3>Import conflict</h3></header><p class="lwd-body"><strong>"${this.reportName}"</strong> already exists with different content.</p><fieldset class="lwd-choice"><legend>What should happen?</legend><label class="lwd-option"><input type="radio" name="icd-choice" value="replace" ?checked="${this._choice==="replace"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Replace</span> ${this._replaceHint()}</span></label> <label class="lwd-option"><input type="radio" name="icd-choice" value="rename" ?checked="${this._choice==="rename"}" @change="${this._onChoiceChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Rename to</span> <input type="text" class="nwd-input lwd-rename-input" maxlength="200" .value="${this._newName}" ?disabled="${!t}" @input="${this._onNewNameInput}" @keydown="${this._onNewNameKeydown}" @focus="${()=>{this._choice="rename"}}"> ${i} ${t?this._renameValidationTpl(r):g}</span></label></fieldset><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="${s}" ?disabled="${n}" @click="${this._onConfirm}">${o}</button></footer></dialog>`}};customElements.define("import-conflict-dialog",Tl);function Vp({name:e,workspaceNames:t,existingNames:r}={}){let n=r instanceof Set?r:new Set(r??[]);return new Promise(o=>{let s=document.createElement("import-conflict-dialog");Object.assign(s,{reportName:e??"",workspaceNames:Array.isArray(t)?t:[],existingNames:n,_newName:hy(e??"",n)}),s.addEventListener("resolve",i=>{s.remove(),o(i.detail)}),s.addEventListener("modal-conflict",()=>{s.remove(),o({action:"cancel"})}),document.body.append(s)})}function hy(e,t){if(typeof e!="string"||e.length===0)return"";let r=e.lastIndexOf("."),n=r>0?e.slice(0,r):e,o=r>0?e.slice(r):"",s=n.replace(/-\d+$/u,"");for(let i=2;i<1e3;i++){let l=`${s}-${i}${o}`;if(!t.has(l))return l}return""}function D(e,t){if(!e)throw new Error(t)}function nn(e,t){let[r,n]=[e.split("/"),t.split("/")];for(;r.length>0&&r[0]===n[0];)r.shift(),n.shift();if(r.length===0&&n.length===0)return 0;if(r.length<2)return n.length<2&&r>n?1:-1;if(n.length<2)return 1;if(r[0]==="*")return-1;if(n[0]==="*"||r[0]==="node_modules")return 1;if(n[0]==="node_modules")return-1;let[o,s]=[r,n].map(i=>i.join(String.fromCodePoint(0)));if(o<s)return-1;if(o>s)return 1;throw new Error("Unreachable")}var gy=e=>e&&[null,Object.prototype].includes(Object.getPrototypeOf(e)),on=e=>Object.setPrototypeOf(Object.fromEntries(e),null),Kp=e=>[...e].toSorted((t,r)=>nn(t,r)),zs=e=>on([...e].toSorted((t,r)=>nn(t[0],r[0])).map(([t,r])=>[t,r instanceof Map?zs(r):r])),Il=e=>new Map(Object.entries(e).map(([t,r])=>[t,gy(r)?Il(r):r]));function qp(e){let t="node_modules/",r=e.lastIndexOf(t);if(r===-1)return null;let n=r+t.length,o=e.slice(n).split("/"),s=o[0].startsWith("@")?2:1;if(o.length<=s||o.slice(0,s).some(l=>!l))return null;let i=o.slice(0,s).join("/");return{dir:e.slice(0,n)+i,rel:o.slice(s).join("/"),name:i}}var $t=1,Rl=0,Ws=({name:e,version:t,files:r})=>({name:e,version:t,files:on(Object.entries(r))}),Gp=e=>qp(e)??{dir:".",rel:e,name:null},Hs=class e{static VERSION=$t;version=$t;config;entries;modules;formats;imports;constructor({config:t={scope:"full"},entries:r,modules:n,formats:o,imports:s,version:i=$t}={}){D([Rl,$t].includes(i)),D(["node_modules","full"].includes(t.scope)),this.version=i,this.config=t,this.entries=r??new Set,this.modules=n??new Map,this.formats=o??new Map,this.imports=s??new Map}get sources(){let t=new Map;for(let[r,{files:n}]of this.modules)for(let[o,s]of Object.entries(n))t.set(r==="."?o:`${r}/${o}`,s);return t}static parseCode(t){let r=JSON.parse(t);D(r.version===$t||r.version===Rl),D(["node_modules","full"].includes(r.config?.scope)),D(r.formats),D(r.imports);let n=new Map,o=new Set;if(r.version===$t){let s=r.config.scope==="full";if(r.modules!==void 0){D(typeof r.modules=="object"&&r.modules!==null);for(let[i,l]of Object.entries(r.modules))D(i.includes("node_modules")),D(!i.startsWith("..")),D(l?.name&&l.version&&l.files),n.set(i,Ws(l))}if(s){D(Array.isArray(r.entries)),D(r.entries.length>0,"v1 bundle with scope=full must have at least one entry"),D(r.sources&&typeof r.sources=="object"),o=new Set(r.entries);for(let[i,l]of Object.entries(r.sources))D(!i.includes("node_modules")),D(!i.startsWith("..")),D(l?.name&&l.version&&l.files),n.set(i,Ws(l))}else D(r.entries===void 0),D(r.sources===void 0);for(let[,{files:i}]of n)for(let l of Object.keys(i))D(!l.startsWith(".."))}else{D(r.sources);for(let[s,i]of Object.entries(r.sources)){D(!s.startsWith(".."));let{dir:l,rel:d,name:u}=Gp(s);D(!l.startsWith("..")&&!d.startsWith("..")),n.has(l)||n.set(l,{name:u,version:null,files:Object.create(null)}),n.get(l).files[d]=i}}return new e({version:r.version,config:r.config,entries:o,modules:n,formats:new Map(Object.entries(r.formats)),imports:Il(r.imports)})}static parseResources(t){let r=JSON.parse(t);D(r.version===$t||r.version===Rl);let n=new Map,o={scope:"full"};if(r.version===$t){D(["node_modules","full"].includes(r.config?.scope)),o=r.config;let s=o.scope==="full";if(r.modules!==void 0){D(typeof r.modules=="object"&&r.modules!==null);for(let[i,l]of Object.entries(r.modules))D(i.includes("node_modules")),D(!i.startsWith("..")),D(l?.name&&l.version&&l.files),n.set(i,Ws(l))}if(s&&r.sources!==void 0){D(typeof r.sources=="object"&&r.sources!==null);for(let[i,l]of Object.entries(r.sources))D(!i.includes("node_modules")),D(!i.startsWith("..")),D(l?.name&&l.version&&l.files),n.set(i,Ws(l))}else s||D(r.sources===void 0);for(let[,{files:i}]of n)for(let l of Object.keys(i))D(!l.startsWith(".."))}else{D(r.resources);for(let[s,i]of Object.entries(r.resources)){D(!s.startsWith(".."));let{dir:l,rel:d,name:u}=Gp(s);D(!l.startsWith("..")&&!d.startsWith("..")),n.has(l)||n.set(l,{name:u,version:null,files:Object.create(null)}),n.get(l).files[d]=i}}return new e({version:r.version,config:o,modules:n})}#e(){let t=[],r=[];for(let[n,{name:o,version:s,files:i}]of this.modules){if(Object.keys(i).length===0)continue;let l=n.includes("node_modules");l&&D(o&&s&&i);let d=on(Object.entries(i).toSorted((p,f)=>nn(p[0],f[0])));(l?t:r).push([n,{name:o,version:s,files:d}])}return t.sort((n,o)=>nn(n[0],o[0])),r.sort((n,o)=>nn(n[0],o[0])),{modules:on(t),sources:on(r)}}serializeCode(){let t=Kp(this.entries),{modules:r,sources:n}=this.#e(),o=zs(this.formats),s=zs(this.imports),i={version:$t,config:this.config};return this.config.scope==="full"&&Object.assign(i,{entries:t,sources:n}),Object.assign(i,{modules:r,formats:o,imports:s}),JSON.stringify(i,void 0,2)}serializeResources(){let{modules:t,sources:r}=this.#e(),n={version:$t,config:this.config};return this.config.scope==="full"&&Object.assign(n,{sources:r}),Object.assign(n,{modules:t}),JSON.stringify(n,void 0,2)}};var js=null,Vs=null,Ks=null;function my(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function by(e,t){let r=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(r).arrayBuffer())}async function yy(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.getRegistrations();for(let t of e){let r=t.active?.scriptURL??t.installing?.scriptURL??t.waiting?.scriptURL;r&&r.endsWith("/brotli-sw.js")&&await t.unregister()}}catch{}}function wy(){return Ks||(Ks=(async()=>await import("./brotli-fallback.js"))(),Ks)}async function vy(){await yy();let e=my();return e?(js={kind:"native",format:e},js):(js={kind:"fallback"},js)}function Yp(){return Vs||(Vs=vy(),Vs)}async function Jp(e){let t=await Yp();return t.kind==="native"?by(t.format,e):(await wy()).brotliDecompress(e)}Yp().catch(()=>{});async function qs(e,t){try{let r=await hr(e),n=t.name.toLowerCase().endsWith(".map"),o=n?"sourcemap":"stasis";try{if(n){let l=JSON.parse(ce(r));return{integrity:e,kind:o,size:r.byteLength,json:l}}let s=ce(await Jp(r)),i=Hs.parseCode(s);return{integrity:e,kind:o,size:r.byteLength,bundle:i}}catch(s){return{integrity:e,kind:o,size:r.byteLength,error:s.message}}}catch(r){return{integrity:e,error:r.message,size:0}}}function ky(e){!e?.json&&!e?.bundle||(async()=>{try{let t=await Fl(e);if(us(e.integrity,t),a.selectedBundle!==e.integrity)return;e.fileHashes=t,$()}catch{}})()}async function Bl(e){if($a(e))return;let t=(a.bundles??[]).find(n=>n.integrity===e);if(!t)return;let r=await qs(e,t);if(!(!r?.json&&!r?.bundle))try{let n=await Fl(r);us(e,n)}catch{}}async function Qt(e){let t=(a.bundles??[]).find(n=>n.integrity===e);if(!t)return;let r=await qs(e,t);a.selectedBundle===e&&(a.bundleDetails=r,$(),ky(r),wt().catch(()=>{}))}var $y=["finding_url","repository","title","description","severity","configured_scan_id","relevant_paths"];function xy(e){let t=[],r=[],n="",o=!1,s=e.length;for(let i=0;i<s;i++){let l=e[i];o?l==='"'?e[i+1]==='"'?(n+='"',i++):o=!1:n+=l:l==='"'?o=!0:l===","?(r.push(n),n=""):l===`
|
|
35
|
-
|
|
36
|
-
`&&i++):n+=l}for((n!==""||r.length>0)&&(r.push(n),t.push(r));t.length>0&&t.at(-1).length===1&&t.at(-1)[0]==="";)t.pop();return t}function Xp(e){let t=xy(e);if(t.length<2)throw new Error("Codex CSV: empty or missing header row");let r=t[0],n=l=>r.indexOf(l);for(let l of $y)if(n(l)===-1)throw new Error(`Codex CSV: missing required column "${l}"`);let o={finding_url:n("finding_url"),repository:n("repository"),title:n("title"),description:n("description"),severity:n("severity"),detected_at:n("detected_at"),committed_at:n("committed_at"),configured_scan_id:n("configured_scan_id"),commit_hash:n("commit_hash"),relevant_paths:n("relevant_paths")},s=new Map;for(let l=1;l<t.length;l++){let d=t[l];if(d.length===1&&d[0]==="")continue;let u=d[o.configured_scan_id];u&&(s.has(u)||s.set(u,[]),s.get(u).push(d))}if(s.size===0)throw new Error("Codex CSV: no rows with a configured_scan_id");let i=[];for(let[l,d]of s){let u=new Set(d.map(m=>m[o.repository]).filter(Boolean));if(u.size>1)throw new Error(`Codex CSV: scan ${l} contains multiple repositories: ${[...u].join(", ")}`);let p=[...u][0]||"unknown-repo",f=l.replace(/^[^:]+:/u,""),h=`${p}:${f}`,b=d.map(m=>_y(m,o));i.push({displayName:h,data:{type:"security",source:"codex-security",findings:b}})}return i}function _y(e,t){let r=(e[t.relevant_paths]||"").split(" | ").map(d=>d.trim()).find(Boolean)||"unknown",n="?",o=e[t.title]||"",s=e[t.description]||"",i=o&&s?`${o}
|
|
37
|
-
|
|
38
|
-
${s}`:o||s,l={id:e[t.finding_url],file:r,line:n,severity:(e[t.severity]||"medium").toLowerCase(),description:i,repo:{github:e[t.repository]}};return t.commit_hash!==-1&&e[t.commit_hash]&&(l.commitHash=e[t.commit_hash]),t.detected_at!==-1&&e[t.detected_at]&&(l.detectedAt=e[t.detected_at]),t.committed_at!==-1&&e[t.committed_at]&&(l.committedAt=e[t.committed_at]),l}var sn=`.conflict-sev{display:inline-block;padding:1px .4rem;border-radius:3px;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;flex-shrink:0;&.sev-critical{background:var(--critical)}&.sev-high{background:var(--high)}&.sev-medium{background:var(--medium)}&.sev-low{background:var(--low)}&.sev-high_bug{background:var(--high-bug)}&.sev-bug{background:var(--bug)}&.sev-informational{background:var(--info)}}
|
|
39
|
-
`;var Qp=`dialog{max-width:720px;width:min(94vw,720px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .75rem;color:var(--muted);font-size:.82rem}.bulk{display:flex;gap:.4rem;margin-bottom:.7rem;padding-bottom:.7rem;border-bottom:1px solid var(--border)}.bulk button,.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:5px;padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}}.list{list-style:none;margin:0;padding:0;max-height:60vh;overflow-y:auto;overscroll-behavior:none;-webkit-app-region:no-drag;app-region:no-drag;display:flex;flex-direction:column;gap:.5rem}.card{border:1px solid var(--border);border-radius:6px;padding:.55rem .7rem .6rem;background:rgb(from var(--text) r g b / .02)}.card-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;color:var(--muted);padding:1px .3rem;background:rgb(from var(--text) r g b / .05);border-radius:3px}.desc{font-size:.78rem;color:var(--muted);margin-bottom:.55rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rows{display:flex;flex-direction:column;gap:.35rem}.row{display:grid;grid-template-columns:5rem 1fr 1fr;align-items:stretch;gap:.4rem}.row-label{color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;align-self:center}.choice{display:flex;flex-direction:column;gap:.15rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:5px;min-width:0;&:has(input:checked){border-color:var(--accent);background:rgb(from var(--accent) r g b / .07)}}.choice input[type=radio]{position:absolute;opacity:0;pointer-events:none}.choice-label{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.choice:has(input:checked) .choice-label{color:var(--accent)}.choice-value{font-size:.82rem;min-width:0}.color{display:inline-flex;align-items:center;gap:.35rem}.color-dot{width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 1px rgb(from var(--text) r g b / .2);flex-shrink:0;&.marker-red{background:var(--marker-red)}&.marker-blue{background:var(--marker-blue)}&.marker-green{background:var(--marker-green)}&.marker-gray{background:var(--marker-gray)}}.color-name{text-transform:capitalize}.comment-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;& em{color:var(--muted);font-style:italic}}.fix-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}
|
|
40
|
-
`;function an(e){if(!e)return g;let t=e.replaceAll("_"," ");return c`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function Ey(e){return`bundle-${e.slice(7,19)}\u2026`}function Ge(e){return e.kind==="bundle"?e.label??Ey(e.identifier):e.identifier}function Ay(e){return e?c`<span class="color"><span class="${`color-dot marker-${e}`}"></span> <span class="color-name">${e}</span></span>`:c`<em>none</em>`}function Ty(e){return c`<span class="comment-text">${e||c`<em>empty</em>`}</span>`}function Iy(e){return e?Xr(e)?c`<span class="fix-text"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></span>`:c`<span class="fix-text">${e}</span>`:c`<span class="comment-text"><em>empty</em></span>`}function Ry(e){return e?c`<span class="${`triage triage-${e}`}">${e}</span>`:c`<em>none</em>`}function Zp(e,t){return e==="color"?Ay(t):e==="comment"?Ty(t):e==="fix"?Iy(t):e==="triage"?Ry(t):c`${String(t)}`}function By(e,t){let r=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return c`<div class="card-head">${an(e?.severity)} ${r?c`<span class="loc" title="${r}">${r}</span>`:g} <code class="id" title="${t}">${t.slice(0,8)}…</code></div>${e?.description?c`<div class="desc" title="${e.description}">${e.description}</div>`:g}`}var tf={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},ef={color:0,comment:1,fix:2,triage:3},Fy={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state"},Ml=class extends T{static styles=[...T.styles,A(sn),A(Qp)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...tf},this._settled=!1}focusInitial(){}_onClick=t=>{let r=t.target.closest("[data-bulk]");if(r){let n=r.dataset.bulk;for(let o of this.renderRoot.querySelectorAll(`input[type="radio"][value="${n}"]`))o.checked=!0;return}if(t.target.closest('[data-action="apply"]')){let n={};for(let o of this.conflicts){let s=`${o.id}:${o.property}`,i=this.renderRoot.querySelector(`input[name="conflict-${CSS.escape(s)}"]:checked`);n[s]=i?.value??"local"}this._finish(n);return}t.target.closest('[data-action="cancel"]')&&this._finish(null)};render(){let t=this.labels,r=new Map;for(let u of this.conflicts)r.has(u.id)||r.set(u.id,[]),r.get(u.id).push(u);for(let u of r.values())u.sort((p,f)=>(ef[p.property]??99)-(ef[f.property]??99));let n=this.conflicts.filter(u=>u.property==="color").length,o=this.conflicts.filter(u=>u.property==="comment").length,s=this.conflicts.filter(u=>u.property==="fix").length,i=this.conflicts.filter(u=>u.property==="triage").length,l=[n?`${n} color${n===1?"":"s"}`:"",o?`${o} comment${o===1?"":"s"}`:"",s?`${s} fix${s===1?"":"es"}`:"",i?`${i} triage state${i===1?"":"s"}`:""].filter(Boolean).join(", "),d=`${r.size} finding${r.size===1?"":"s"}`;return c`<dialog @click="${this._onClick}" @close="${this._onClose}"><header><h3>${t.title}</h3><p>${d} ${t.intro} ${l}.${t.trailingNote?` ${t.trailingNote}`:""}</p><div class="bulk"><button type="button" data-bulk="local">Keep all current</button> <button type="button" data-bulk="imported">${t.importedSideLabel} (all)</button></div></header><ul class="list">${[...r.entries()].map(([u,p])=>c`<li class="card" data-id="${u}">${By(this.findingLookup.get(u),u)}<div class="rows">${p.map(f=>{let h=`${f.id}:${f.property}`,b=`conflict-${h}`;return c`<div class="row" data-key="${h}"><span class="row-label">${Fy[f.property]??f.property}</span> <label class="choice"><input type="radio" name="${b}" value="local" checked="checked"> <span class="choice-label">Keep current</span> <span class="choice-value">${Zp(f.property,f.local)}</span></label> <label class="choice"><input type="radio" name="${b}" value="imported"> <span class="choice-label">${t.importedSideLabel}</span> <span class="choice-value">${Zp(f.property,f.imported)}</span></label></div>`})}</div></li>`)}</ul><footer class="actions"><button type="button" data-action="cancel">Cancel</button> <button type="button" data-action="apply" class="primary">${t.applyButton}</button></footer></dialog>`}};customElements.define("triage-conflict-dialog",Ml);function Gs(e,t,r={}){return new Promise((n,o)=>{let s=document.createElement("triage-conflict-dialog");s.conflicts=e,s.findingLookup=t,s.labels={...tf,...r},s.addEventListener("resolve",i=>{s.remove(),n(i.detail)}),s.addEventListener("modal-conflict",i=>{s.remove(),o(ht(i.detail?.cause))}),document.body.append(s)})}var Ll=class extends T{static styles=[...T.styles,A(Ze)];static properties={_password:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this._password="",this._busy=!1,this._error="",this._settled=!1,this._tryPassword=null}_finish(t){this._settled||(this._password="",this._tryPassword=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await this._tryPassword(this._password);if(this._settled)return;this._finish(t)}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onUnlock())};render(){return c`<dialog @close="${this._onClose}"><header><h3>Unlock encrypted workspace</h3></header><p class="nwd-note">This workspace bundle is password-protected. Enter the password the sender shared with you separately to decrypt and import it.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-bundle-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?c`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer></dialog>`}};customElements.define("workspace-unlock-bundle-dialog",Ll);function rf({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return new Promise((t,r)=>{let n=document.createElement("workspace-unlock-bundle-dialog");n._tryPassword=e,n.addEventListener("resolve",o=>{n.remove(),t(o.detail)}),n.addEventListener("modal-conflict",o=>{n._tryPassword=null,n.remove(),r(ht(o.detail?.cause))}),document.body.append(n)})}async function nf(e){let t=await nl(e),r;if(Yn(t)){if(r=await rf({tryPassword:o=>xs(t,o)}),!r)return null}else r=await xs(t);let n=await ol(r,{conflictResolver:async(o,s)=>{try{return await Gs(o,s,{title:"Triage conflicts on import",intro:"disagree with your local triage on",trailingNote:"Reports and non-conflicting triage were already merged; pick which side to keep for these disagreements.",importedSideLabel:"Apply imported"})}catch{let i=o.length;return alert(`Imported ${e.name}. Kept your local triage on ${i} conflicting entr${i===1?"y":"ies"} because another dialog is open \u2014 re-drop the file to pick again.`),null}}});return(a.currentFile||a.currentWorkspace)&&$(),n}var sf="deepview.passkey.firstImportPrompted";function My(){try{return localStorage.getItem(sf)==="1"}catch{return!1}}function of(){try{localStorage.setItem(sf,"1")}catch{}}async function Pl(){if(X()||!bt()||My())return;if(!confirm(`Encrypt your DeepView data with a passkey?
|
|
41
|
-
|
|
42
|
-
Your triage notes, workspaces, and report files are stored on this device. Encryption locks them under a passkey (TouchID, Windows Hello, security key) so scripts running here can't read them without the passkey.
|
|
43
|
-
|
|
44
|
-
You can change this anytime from the lock icon in the sidebar header.`)){of();return}await Ts(),X()&&of()}var af=Pl;var lf=["type","model","think","effort","exportsMode"],Zt="deepview.lastFile",po=new Set(["overview","graph","treemap","advisories","issues","code","terminal"]);function ln(e,t="overview"){let r=t&&t!=="overview"&&po.has(t)?` ${t}`:"";ke(Zt,`b:${e}${r}`).catch(()=>{})}var kr=0,_e=e=>e!==kr;function Ol(e){let t=df(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function df(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function cf({name:e,content:t,existingNames:r}){if(!r.has(e))return await lt(e,t),r.add(e),{name:e,content:t};let n;try{n=await Me(e)}catch(l){if(!(l instanceof DOMException&&l.name==="NotFoundError"||typeof l?.message=="string"&&l.message.startsWith("File not found:")))throw l;return await lt(e,t),r.add(e),{name:e,content:t}}if(n===t)return{name:e,content:t};let s=z().filter(l=>Array.isArray(l.reports)&&l.reports.includes(e)).filter(l=>Zn(l.id,e)),i=await Vp({name:e,workspaceNames:s.map(l=>l.name),existingNames:r});if(i.action==="cancel")return null;if(i.action==="rename"){let l=i.newName;return await lt(l,t),r.add(l),{name:l,content:t}}return await lt(e,t),s.length>0&&await Ly(e,s),{name:e,content:t}}async function Ly(e,t){let r;try{r=await pr(e)}catch(n){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,n);return}for(let n of t)try{await As(n.id);let o=await Ss(n.id,e,r);o&&o.ok===!1&&console.warn(`Import: failed to upload "${e}" to workspace "${n.name}" (${n.id}): ${o.reason??"unknown"}`)}catch(o){console.warn(`Import: failed to upload "${e}" to workspace "${n.name}" (${n.id}):`,o)}}async function Nl(e){await af();let t=null,r=null,n=new Set,o=new Set(await le());for(let s of e)try{let i=df(s.name.toLowerCase());if(i.endsWith(".gz")||i.endsWith(".deepview-workspace.enc")){await nf(s);try{let u=await le();o.clear();for(let p of u)o.add(p)}catch(u){console.warn("Import: failed to refresh existingNames after workspace import:",u)}continue}if(Ol(s.name)){let u=new Uint8Array(await s.arrayBuffer()),{integrity:p}=await fr(s.name,u);r=p,n.add(p);continue}let d=await s.text();if(i.endsWith(".csv")){let u=Xp(d);for(let{displayName:p,data:f}of u){let h=p.replaceAll("/","__")+".codex",b=JSON.stringify(f),{count:m,source:y}=Oe(b),k=await cf({name:h,content:b,existingNames:o});k&&(Ve(k.name,m,y),t={name:k.name,content:k.content})}}else{let u=Oe(d);if(!u.recognized)throw new Error("not a recognized DeepView, DeepSec, Claude Security, or Codex report");let p=await cf({name:s.name,content:d,existingNames:o});if(!p)continue;Ve(p.name,u.count,u.source),t={name:p.name,content:p.content}}}catch(i){alert(`Failed to load ${s.name}: ${i.message}`)}await j();for(let s of n)Bl(s).catch(()=>{});t?await _t(t.name,t.content):r&&(a.currentView="bundles",a.selectedBundle=r,a.bundleDetails=null,a.bundleDetailsTab="overview",a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.bundleCodeSearchQuery="",a.bundleCodeSearchMode="files",a.shownTriage=null,E.showAll=!0,ln(r),$(),await j(),Qt(r))}async function _t(e,t){let r=++kr,n=new Set(z().filter(o=>Array.isArray(o.reports)&&o.reports.includes(e)).map(o=>o.id));for(let o of N.openSessions)o&&!n.has(o.workspaceId)&&(N.closeSession(o.workspaceId),eo(o.workspaceId));if(a.reports=[],a.workspaceMerges=[],a.currentFile=e,a.currentWorkspace=null,(a.currentView==="bundles"||a.currentView==="packages"||a.currentView==="repositories")&&(a.currentView="findings"),a.repoUrl=He(e),a.repoEditing=!1,E.selected=null,E.focusedPkg=null,E.layoutCache=null,E.solo=null,E.hidden.clear(),E.pathFilter="",ze(),ke(Zt,e).catch(()=>{}),t===void 0){try{t=await Me(e)}catch(o){if(_e(r))return;if(o&&o.message?.includes("vault locked")){if(await Is()&&!_e(r)){await _t(e);return}_e(r)||(a.currentFile=null,await j());return}alert(`Failed to read ${e}: ${o.message}`),a.currentFile=null,await j();return}if(_e(r))return}if(await Ul(e,t,r),!_e(r)){for(let o of n)N.openSession(o),N.refreshSession(o),As(o);await j()}}async function er(e){let t=z().find(o=>o.id===e);if(!t)return;let r=++kr;for(let o of N.openSessions)o&&o.workspaceId!==e&&(N.closeSession(o.workspaceId),eo(o.workspaceId));(a.currentView==="bundles"||a.currentView==="packages"||a.currentView==="repositories")&&(a.currentView="findings"),a.reports=[],a.workspaceMerges=[],a.currentFile=null,a.currentWorkspace=e,a.repoUrl="",a.repoEditing=!1,E.selected=null,E.focusedPkg=null,E.layoutCache=null,E.solo=null,E.hidden.clear(),E.pathFilter="",ze(),ke(Zt,`ws:${e}`).catch(()=>{}),t.reports.length===0&&(C.classList.remove("active"),W(g,C),Ee.classList.remove("hidden"));let n=t.reports.map(o=>Me(o).catch(()=>null));for(let o=0;o<t.reports.length;o++){let s=await n[o];if(_e(r))return;if(s!==null&&(await Ul(t.reports[o],s,r),_e(r)))return}N.openSession(e),N.refreshSession(e),As(e),await j()}async function uf({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!a.currentFile)return;let r=++kr,n=a.currentFile;Yr(n),je(n,"");for(let o of t)try{let s=await Cs(o,n);if(_e(r))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete '${n}' from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete '${n}' from workspace ${o} remote:`,s)}if(await Ur(n),!_e(r)&&(await jn(n,null),!_e(r))){if(e==="wipe"){try{await ws()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(_e(r))return}_e(r)||(Dl(),await j())}}function Dl(){a.currentFile=null,a.currentWorkspace=null,a.selectedBundle=null,a.bundleDetails=null,a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.reports=[],a.workspaceMerges=[],a.repoUrl="",a.repoEditing=!1,a.shownTriage=null,a.currentView="findings",E.selected=null,E.focusedPkg=null,E.layoutCache=null,E.solo=null,E.hidden.clear(),E.pathFilter="",ze(),Pr(Zt),C.classList.remove("active"),W(g,C),Ee.classList.remove("hidden"),document.title="DeepView"}async function pf(){++kr;for(let e of N.openSessions)e&&(N.closeSession(e.workspaceId),eo(e.workspaceId));Dl(),await j()}async function ff({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!a.selectedBundle)return;let t=++kr,r=a.selectedBundle;for(let o of e)try{let s=await Es(o,r);if(_e(t))return;s&&s.ok===!1&&s.reason!=="not-found"&&console.warn(`Failed to delete bundle from workspace ${o} remote: ${s.reason}`)}catch(s){console.warn(`Failed to delete bundle from workspace ${o} remote:`,s)}if(await ia(r),_e(t)||(await Ha(r,null),_e(t)))return;a.selectedBundle=null,a.bundleDetails=null,a.bundleSourceFile=null,a.bundleSourceFindingIdx=null;let n=he(Zt);typeof n=="string"&&(n===`b:${r}`||n.startsWith(`b:${r} `))&&Pr(Zt),ka(r),a.bundles=await ct(),!_e(t)&&($(),await j())}async function hf(e,t="detach",{triage:r="keep"}={}){let n=z().find(l=>l.id===e);if(!n)return;++kr;let o=Array.isArray(n.reports)?[...n.reports]:[];if(N.closeSession(e),eo(e),t==="delete"){for(let l of o){try{await Ur(l)}catch{}Yr(l),je(l,"")}if(r==="wipe")try{await ws()}catch(l){console.warn("Skipped orphan-triage GC:",l)}}let s=a.currentWorkspace===e,i=t==="delete"&&a.currentFile!=null&&o.includes(a.currentFile);(s||i)&&Dl(),await Na(e),await j()}async function Ul(e,t,r=null){let n=()=>r!==null&&_e(r);try{if(await qn,n())return;let o;try{o=JSON.parse(t)}catch(b){if(o=zr(t)??Wr(t),!o)throw new Error(`Not JSON, and not a recognized markdown format. (JSON error: ${b.message})`,{cause:b})}let s=a.reports.length===0,i=new Set,l=new Map;for(let b=0;b<a.reports.length;b++){let m=a.reports[b];for(let y=0;y<m.groups.length;y++){let k=m.groups[y],w=`${b}:${y}`;for(let v of k)v.id&&(i.add(v.id),l.set(v.id,w))}}let d=o.findings||[],u=d.flatMap(bl).filter(b=>!b.id);if(u.length>0){let b=await Promise.all(u.map(ls));if(n())return;u.forEach((m,y)=>{b[y]&&(m.id=b[y])})}let p=He(e),f=[],h=0;for(let b of d){let m=bl(b);if(m.length===0)continue;let y=m.filter(R=>R.id&&i.has(R.id)),k=m.filter(R=>!R.id||!i.has(R.id)),w=new Set;for(let R of y){let O=l.get(R.id);O!==void 0&&w.add(O)}let v=m.filter(R=>R.id).map(R=>R.id);if(k.length===0){w.size>1&&a.workspaceMerges.push(new Set(v)),h+=y.length;continue}let S=[];for(let R of k){R.id&&i.add(R.id);let O={...R,_id:a.nextFindingId++,_repoFallback:p,_reportName:e,_bundleHashes:o.bundleHashes??[]};if(!o.source&&!lf.some(q=>O[q]!==void 0))for(let q of lf)o[q]!==void 0&&(O[q]=o[q]);O._analyzer=o.source??O.type??null,S.push(O)}y.length>0&&(h+=y.length,a.workspaceMerges.push(new Set(v)));let I=`${a.reports.length}:${f.length}`;for(let R of k)R.id&&l.set(R.id,I);f.push(S)}if(h>0&&console.log(`${e}: skipped ${h} duplicate finding${h===1?"":"s"}`),a.reports.push({type:o.type||"analysis",source:o.source??null,fileName:e,groups:f,tree:o.tree??null,bundleHashes:o.bundleHashes??[]}),Array.isArray(o.bundleHashes)&&o.bundleHashes.length>0){let b=new Set((a.bundles??[]).map(m=>m.integrity));for(let m of o.bundleHashes)b.has(m)&&Bl(m).catch(()=>{})}if(s)if(Ls(),f.some(m=>m.some(y=>y.confidence!==void 0))){let m=k=>f.reduce((w,v)=>w+(v.some(S=>S.confidence!==void 0&&S.confidence>=k)?1:0),0),y;for(m(6)<=25?y=6:m(7)<=25?y=7:y=8;y>0&&m(y-1)===m(y);)y--;a.filterConfMin=y}else a.filterConfMin=0;$()}catch(o){alert(`Failed to parse ${e}: ${o.message}`)}}window.__loadFile=(e,t)=>Ul(e,t);window.__setFilters=({severities:e,confMin:t}={})=>{e!=null&&(a.filterSeverities=new Set(e)),t!==void 0&&(a.filterConfMin=t),$()};document.addEventListener("keydown",e=>{e.key==="Escape"&&document.body.classList.contains("report-fullscreen")&&document.body.classList.remove("report-fullscreen")});document.addEventListener("dragover",e=>e.preventDefault());document.addEventListener("drop",e=>{e.preventDefault(),!e.target.closest("#drop-zone")&&Nl(e.dataTransfer.files)});Ee.addEventListener("dragover",e=>{e.preventDefault(),Ee.classList.add("hover")});Ee.addEventListener("dragleave",()=>Ee.classList.remove("hover"));Ee.addEventListener("drop",e=>{e.preventDefault(),Ee.classList.remove("hover"),Nl(e.dataTransfer.files)});var xt=null;function Py(){xt||(xt=document.createElement("input"),xt.type="file",xt.multiple=!0,xt.hidden=!0,xt.addEventListener("change",()=>{let e=xt.files;e&&e.length>0&&Nl(e),xt.value=""}),document.body.append(xt)),xt.click()}Ee.addEventListener("click",e=>{e.target.closest(".drop-prompt-action")&&Py()});var $r=new Map,gf="deepview.advisories.proxyConsent";function mf(){try{return localStorage.getItem(gf)==="1"}catch{return!1}}function bf(){try{localStorage.setItem(gf,"1")}catch{}}function Oy(e){let t=new Map;if(!e||e.kind!=="stasis"||!e.bundle)return t;for(let[r,n]of e.bundle.modules){if(!r.includes("node_modules")||!n?.name||typeof n.version!="string"||!n.version)continue;let o=t.get(n.name);o||(o=new Set,t.set(n.name,o)),o.add(n.version)}return t}function Ny(e){if(!e||e.kind!=="stasis"||!e.bundle)return!1;for(let[t,r]of e.bundle.modules)if(t.includes("node_modules")&&r?.name&&typeof r.version=="string"&&r.version)return!0;return!1}function yf(e,t){return!e||Ol(e.name)!=="stasis"?!1:!t||t.integrity!==e.integrity?!0:Ny(t)}function Dy(e){let t=Object.create(null);for(let[r,n]of e)t[r]=[...n].toSorted();return t}async function wf(e,t){if(!e?.integrity||$r.has(e.integrity)||!mf())return;let r=Oy(e);if(r.size===0){$r.set(e.integrity,{state:"ok",byPackage:new Map,query:r});return}$r.set(e.integrity,{state:"loading",query:r});let n=e.integrity;try{let o=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(Dy(r))});if(!o.ok){let l=`HTTP ${o.status}`;try{let d=await o.json();d&&typeof d.error=="string"&&d.error&&(l=`${d.error} (HTTP ${o.status})`)}catch{}$r.set(n,{state:"error",reason:l,query:r}),t();return}let s=await o.json(),i=new Map;if(s&&typeof s=="object")for(let[l,d]of Object.entries(s)){if(!Array.isArray(d))continue;let u=d.filter(p=>p&&typeof p=="object"&&typeof p.title=="string"&&typeof p.severity=="string");u.length>0&&i.set(l,u)}$r.set(n,{state:"ok",byPackage:i,query:r})}catch(o){$r.set(n,{state:"error",reason:o?.message??"fetch-failed",query:r})}t()}var Uy={critical:0,high:1,moderate:2,low:3,info:4};function Ys(e){return Uy[e]??999}function zy(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Wy(){let e=typeof window>"u"?"":window.location.host;return c`<div class="bundle-advisories-consent"><div class="bundle-advisories-consent-card"><p class="bundle-advisories-consent-text">This bundle's dependency names and versions will be sent to the npm registry through a same-origin proxy (<span class="mono">${e}</span> → <span class="mono">registry.npmjs.org</span>) to look up published security advisories.</p><button type="button" class="bundle-advisories-consent-btn" data-advisories-consent>Confirm</button><p class="bundle-advisories-consent-note">This preference will be saved and reused for other bundles.</p></div></div>`}function vf(e){if(!e)return c`<div class="bundle-advisories-empty">Bundle not loaded yet.</div>`;if(e.kind!=="stasis"||!e.bundle)return c`<div class="bundle-advisories-empty">Advisories are only available for stasis bundles.</div>`;if(!mf())return Wy();let t=$r.get(e.integrity);if(!t||t.state==="loading")return c`<div class="bundle-advisories-empty">Loading advisories from npm registry…</div>`;if(t.state==="error")return c`<div class="bundle-advisories-empty is-error">Failed to fetch advisories: ${t.reason}</div>`;let r=t.query.size,n=t.byPackage.size;if(n===0)return c`<div class="bundle-advisories"><div class="bundle-advisories-summary">No advisories for the ${r} ${r===1?"package":"packages"} in this bundle.</div></div>`;let o=[...t.byPackage.entries()].toSorted(([i,l],[d,u])=>{let p=Math.min(...l.map(h=>Ys(h.severity))),f=Math.min(...u.map(h=>Ys(h.severity)));return p!==f?p-f:i.localeCompare(d)}),s=[...t.byPackage.values()].reduce((i,l)=>i+l.length,0);return c`<div class="bundle-advisories"><div class="bundle-advisories-summary">${s} ${s===1?"advisory":"advisories"} across ${n} of ${r} ${r===1?"package":"packages"}</div><ul class="bundle-advisories-list">${o.map(([i,l])=>Hy(i,l,t.query.get(i)))}</ul></div>`}function Hy(e,t,r){let n=[...t].toSorted((s,i)=>{let l=Ys(s.severity)-Ys(i.severity);return l!==0?l:(s.title??"").localeCompare(i.title??"")}),o=r?[...r].toSorted():[];return c`<li class="bundle-advisories-section"><div class="bundle-advisories-section-header"><span class="bundle-advisories-section-name">${e}</span> ${o.length>0?c`<span class="bundle-advisories-section-versions">${o.map(s=>c`<span class="bundle-advisories-version-chip">${s}</span>`)}</span>`:g} <span class="bundle-advisories-section-count">${n.length} ${n.length===1?"advisory":"advisories"}</span></div><ul class="bundle-advisories-rows">${n.map(s=>qy(s))}</ul></li>`}function jy(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}var Vy=c`<svg class="bundle-advisory-ghsa-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 13L13 3"/><path d="M5 3h8v8"/></svg>`;function Ky(e){let t=/^CWE-(\d+)$/u.exec(e);if(!t)return c`<span>${e}</span>`;let r=`https://cwe.mitre.org/data/definitions/${t[1]}.html`;return c`<a class="bundle-advisory-cwe" href="${r}" target="_blank" rel="noopener noreferrer">${e}</a>`}function qy(e){let t=e.severity,r=e.title,n=typeof e?.cvss?.score=="number"?e.cvss.score.toFixed(1):"",o=typeof e?.cvss?.vectorString=="string"&&e.cvss.vectorString?e.cvss.vectorString:"",s=typeof e.vulnerable_versions=="string"?e.vulnerable_versions:null,i=typeof e.url=="string"&&/^https?:\/\//iu.test(e.url)?e.url:null,l=jy(i),d=Array.isArray(e.cwe)?e.cwe.filter(p=>typeof p=="string"):[],u=l&&i?c`<a class="bundle-advisory-ghsa" href="${i}" target="_blank" rel="noopener noreferrer">${l}${Vy}</a>`:l?c`<span class="bundle-advisory-ghsa">${l}</span>`:g;return c`<li class="bundle-advisory-row"><div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${t}`}">${zy(t)}</span> ${n?c`<span class="bundle-advisory-cvss-score">CVSS <span class="mono">${n}</span></span>`:g}</div><div class="bundle-advisory-body"><div class="bundle-advisory-header"><span class="bundle-advisory-title">${r}</span> ${u}</div><div class="bundle-advisory-subrow"><div class="bundle-advisory-meta">${s?c`<span>Affected <span class="mono">${s}</span></span>`:g} ${d.length>0?c`<span class="bundle-advisory-cwes">${d.map((p,f)=>c`${f===0?"":", "}${Ky(p)}`)}</span>`:g}</div>${o?c`<div class="bundle-advisory-cvss-vector mono">${o}</div>`:g}</div></div></li>`}var fo=null;function Gy(e){let t=new Map;if(!e||e.kind!=="stasis"||!e.bundle)return t;for(let r of e.bundle.imports.values())for(let[n,o]of r){t.has(n)||t.set(n,new Set);for(let s of o.values())typeof s=="string"&&t.get(n).add(s)}return t}function Yy(e){let t=ut(e),r=Gy(e),n=[...t.keys()],{stripped:o}=Ft(n),s=new Map(n.map((l,d)=>[l,o[d]])),i={};for(let[l,d]of t){let u=s.get(l),p=r.get(l);i[u]={imports:p?[...p].map(f=>s.get(f)).filter(Boolean):[],size:new TextEncoder().encode(d).byteLength}}return{tree:i,origToStripped:s}}async function Fl(e){let t=ut(e),r=new Map;for(let[n,o]of t)r.set(n,await fu(o));return r}function xf(e){let t={fixed:0,invalid:0,deleted:0};if(!e?.fileHashes)return t;let r=new Set;for(let n of e.fileHashes.values())if(!r.has(n)){r.add(n);for(let o of ds(n)){let s=a.triage.get(P(o))?.triage;s&&t[s]!==void 0&&t[s]++}}return t}function xr(e,t="graph"){if(!e||e.size===0)return new Map;let r=new Map;for(let[n,o]of e){let s=ds(o);if(s.length===0)continue;let i=s.filter(d=>{let u=a.triage.get(P(d))?.triage??null;return t==="issues"?u!=="invalid"&&u!=="deleted":u===a.shownTriage});if(i.length===0)continue;r.has(n)||r.set(n,[]);let l=r.get(n);for(let d of i)l.push(d)}return r}function Jy(e,t){let r=new Set;for(let[o,s]of t)if(s){for(let i of Object.values(s))if(i>0){r.add(o);break}}let n=[...r];for(;n.length>0;){let o=n.shift(),s=e[o]?.imports??[];for(let i of s)!r.has(i)&&e[i]&&(r.add(i),n.push(i))}return r}function _f(e){let{tree:t,origToStripped:r}=Yy(e),n=Object.keys(t);if(n.length===0)return null;let o=null;if(e.fileHashes&&e.fileHashes.size>0){o=new Map;for(let[m,y]of e.fileHashes){let k=r.get(m);k!==void 0&&o.set(k,y)}}let s=xr(o),i=new Map,l=new Map,d=new Map,u=new Map;for(let[m,y]of s){let k={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},w=new Set,v=new Set,S=[];for(let I of y){k[I.severity]=(k[I.severity]||0)+1,w.add(I.severity);let R=a.triage.get(P(I))?.color??"none";v.add(R),S.push({severity:I.severity,color:R})}i.set(m,k),l.set(m,w),d.set(m,v),u.set(m,S)}let p=Ps(t,i),f=E.showAll?n:[...Jy(t,i)],h=new Map;for(let[m,y]of r)h.set(y,m);let b=!1;for(let m of Object.values(t))if(m?.imports&&m.imports.length>0){b=!0;break}return{treeData:t,files:f,ownCounts:i,transitiveCounts:p,severitySets:l,colorSets:d,fileFindings:u,options:{pkgOf:ho},strippedToOrig:h,hasEdges:b}}function Qs(){if(!fo)return;let e=tn();e&&e.refreshSidebar(fo,{isBundleContext:!0})}function Zs(){if(!fo)return;let e=tn();e&&e.refreshTopPkgs(fo)}function Sf(e){fo=e}function ho(e){let t=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=t.exec(e))!==null;)if(r[1]!==".pnpm")return r[1];let n=e.indexOf("/");return n>0?e.slice(0,n):"__own__"}function Xy(e){let t=new Map,r=0;for(let{path:o,size:s}of e){if(typeof s!="number"||s<=0)continue;let i=ho(o);t.set(i,(t.get(i)??0)+s),r+=s}if(r===0)return g;let n=[...t.entries()].toSorted((o,s)=>s[1]-o[1]);return c`<div class="bundles-dist"><div class="bundles-dist-bar" aria-hidden="true">${J(n,([o])=>o,([o,s])=>c`<span class="bundles-dist-seg" style="${ve({flexGrow:s,background:Lt(o)})}" data-tooltip="${o==="__own__"?g:`${o}: ${De(s)}`}"></span>`)}</div><ul class="bundles-dist-list">${J(n,([o])=>o,([o,s])=>{let i=(s/r*100).toFixed(1),l=o==="__own__"?"own source":o,d=Lt(o);return c`<li><span class="bundles-dist-dot" style="${ve({background:d})}"></span> <span class="bundles-dist-pkg" data-tooltip="${o==="__own__"?g:o}">${l}</span> <span class="bundles-dist-bar-row" aria-hidden="true"><span class="bundles-dist-bar-fill" style="${ve({width:`${i}%`,background:d})}"></span> </span><span class="bundles-dist-size">${De(s)}</span> <span class="bundles-dist-percent">${i}%</span></li>`})}</ul></div>`}function kf(e,t,r,n){let{prefix:o,stripped:s}=Ft(r),i=new Set;for(let v of s)i.add(ho(v));let l=s.map((v,S)=>S).toSorted((v,S)=>s[v].localeCompare(s[S])),d=s.map((v,S)=>({path:v,size:n[S]})),u=Xy(d),p=u===g?c`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:u,f={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},h=0,b=new Map;if(a.bundleDetails?.fileHashes){let v=xr(a.bundleDetails.fileHashes,"issues");for(let S of v.values())for(let I of S){f[I.severity]!==void 0&&f[I.severity]++,h++;for(let R of Mn(I.fileHash,I))b.set(R,(b.get(R)??0)+1)}}let m=[...b.keys()].toSorted(),y=me.filter(v=>f[v]>0).map(v=>c`<span class="${`tree-count-chip ${v}`}">${f[v]} ${v.replaceAll("_"," ")}</span>`),k=r.length>0?c`<ul class="bundles-sources-list">${l.map(v=>{let S=r[v],I=s[v],R=n[v];return c`<li><button type="button" class="bundles-source-row" data-bundle-view-source="${S}" data-tooltip="${S}"><span class="bundles-source-path">${I}</span> ${R==null?g:c`<span class="bundles-source-size">${De(R)}</span>`}</button></li>`})}</ul>`:c`<p class="bundles-overview-col-empty">No source files in this bundle.</p>`,w=m.length>0?c`<ul class="bundles-reports-list">${m.map(v=>{let S=Y[Ke(v)]??Y.default,I=b.get(v)??0;return c`<li><button type="button" class="report-chip bundles-report-chip" data-tooltip="${v}" data-bundle-issue-report="${v}">${ue(S)}<span class="report-chip-label">${Ne(v)}</span> <span class="bundles-report-count">${I} ${I===1?"issue":"issues"}</span></button></li>`})}</ul>`:c`<p class="bundles-overview-col-empty">No matching reports indexed yet.</p>`;return c`<div class="bundles-overview"><div class="bundles-overview-summary">${e}<dl class="bundles-detail-meta">${t}<dt>Sources</dt><dd>${r.length}</dd>${o?c`<dt>Prefix</dt><dd class="mono">${o}</dd>`:g}</dl>${h>0?c`<div class="bundles-issue-summary tree-count-chips">${y}</div>`:g}</div><div class="bundles-overview-columns"><section class="bundles-overview-col"><header class="bundles-overview-col-head">Packages <span class="bundles-overview-col-count">${i.size}</span></header><div class="bundles-overview-col-body">${p}</div></section><section class="bundles-overview-col"><header class="bundles-overview-col-head">Files <span class="bundles-overview-col-count">${r.length}</span></header><div class="bundles-overview-col-body bundles-overview-col-body--list">${k}</div></section>${m.length>0?c`<section class="bundles-overview-col"><header class="bundles-overview-col-head">Reports <span class="bundles-overview-col-count">${m.length}</span></header><div class="bundles-overview-col-body bundles-overview-col-body--list">${w}</div></section>`:g}</div></div>`}var zl=new Map,Wl=new Set;function Xs(e){for(let t of me)for(let r of e)if(r.severity===t)return t;return e[0]?.severity??null}function Cf(e,t,r,n){let o=e.split(`
|
|
45
|
-
`).length,s=String(o).length,i=Ds(t),l=`${r??""}\0${t}`;i&&!zl.has(l)&&!Wl.has(l)&&(Wl.add(l),(async()=>{let u=await Us(e,i);zl.set(l,u??null),Wl.delete(l),a.bundleSourceFile===t&&$()})());let d=zl.get(l);return c`<div class="bundle-source-lines" style="${ve({"--lineno-width":`${s}ch`})}"><aside class="bundle-source-lineno-col" aria-hidden="true">${Array.from({length:o},(u,p)=>{let f=p+1,h=n.get(f),b=h?Xs(h.map(y=>y.f)):null,m=h&&a.bundleSourceFindingIdx!=null&&h.some(y=>y.idx===a.bundleSourceFindingIdx);return c`<div class="bundle-source-lineno-row" data-line="${f}">${h?c`<button type="button" class="${F({"bundle-source-dot":!0,[`sev-${b}`]:!0,active:m})}" data-bundle-source-finding="${h[0].idx}" title="${`${h.length} ${h.length===1?"issue":"issues"} on line ${f}`}" aria-label="${`${h.length} issues on line ${f}`}"></button>`:c`<span class="bundle-source-dot-placeholder"></span>`} <span class="bundle-source-lineno-num">${f}</span></div>`})}</aside><pre class="bundle-source-code"><code class="${i?`language-${i}`:""}">${typeof d=="string"?ue(d):e}</code></pre></div>`}function Ef(e){let t=a.bundleSourceFindingIdx;if(t==null)return g;let r=e[t];if(!r)return g;let n=r.fileHash?Mn(r.fileHash,r):[],o=a.triage.get(P(r))?.triage,s=o==="fixed"?"Fixed":null,i=wr(r),l=If(r.line);return c`<aside class="bundle-source-panel"><header class="bundle-source-panel-bar"><span class="${`bundle-source-panel-sev sev-${r.severity}`}">${r.severity.replaceAll("_"," ")}</span> ${s?c`<span class="${`bundle-source-panel-triage triage-${o}`}">${s}</span>`:g} <button type="button" class="bundle-source-panel-close" data-action="bundle-source-panel-close" title="Close (Esc)" aria-label="Close finding details">×</button></header><div class="bundle-source-panel-body">${l||i?c`<div class="bundle-source-panel-line-row">${l?c`<span class="bundle-source-panel-line">${l}</span>`:g} ${i?c`<span class="bundle-source-panel-meta" title="${i}">${i}</span>`:g}</div>`:g}<div class="bundle-source-panel-desc">${r.description??""}</div>${n.length>0?c`<div class="bundle-source-panel-reports"><div class="bundle-source-panel-reports-label">Reported by</div>${n.map(d=>{let u=Y[Ke(d)]??Y.default;return c`<button type="button" class="report-chip bundle-source-panel-report" title="${d}" data-bundle-issue-report="${d}">${ue(u)}<span class="report-chip-label">${Ne(d)}</span></button>`})}</div>`:g}</div></aside>`}function Af(){let e=a.bundleSourceFile;if(!e)return g;if(a.bundleDetailsTab==="code")return g;let r=ut(a.bundleDetails).get(e),n=[],o=new Map;if(typeof r=="string"&&a.bundleDetails?.fileHashes){let i=xr(a.bundleDetails.fileHashes,"issues").get(e)??[];for(let l=0;l<i.length;l++){let d=i[l];n.push(d);let u=parseInt(d.line,10);Number.isFinite(u)&&u>0&&(o.has(u)||o.set(u,[]),o.get(u).push({f:d,idx:l}))}}return c`<div class="bundle-source-overlay"><div class="${F({"bundle-source-modal":!0,"with-panel":a.bundleSourceFindingIdx!=null})}"><header class="bundle-source-bar"><div class="bundle-source-title" title="${e}">${e}</div><button type="button" class="bundle-source-close" data-action="bundle-source-close" title="Close source viewer (Esc)" aria-label="Close source viewer">×</button></header><div class="bundle-source-body"><div class="bundle-source-code-wrap">${typeof r=="string"?Cf(r,e,a.bundleDetails?.integrity,o):c`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${Ef(n)}</div></div></div>`}function Tf(e){let t={name:"",files:new Map,dirs:new Map};for(let r of e){let n=r.split("/"),o=t;for(let s=0;s<n.length-1;s++){let i=n[s],l=o.dirs.get(i);l||(l={name:i,files:new Map,dirs:new Map},o.dirs.set(i,l)),o=l}o.files.set(n.at(-1),r)}return t}var Js=new Map,$f=null;function Hl(e,t,r=0,n=null,o="",s=!1){let i=[...e.dirs.entries()].toSorted(([f],[h])=>f.localeCompare(h)),l=[...e.files.entries()].toSorted(([f],[h])=>f.localeCompare(h)),d=f=>{if(!t)return!1;for(let h of f.files.values())if(h===t)return!0;for(let h of f.dirs.values())if(d(h))return!0;return!1},u=(f,h)=>s?!0:Js.has(f)?Js.get(f):r===0||d(h),p=f=>h=>{Js.set(f,!h.currentTarget.parentElement.open)};return c`<ul class="${F({"bundle-code-tree":!0,root:r===0})}">${J(i,([f])=>`${o}/${f}`,([f,h])=>{let b=o?`${o}/${f}`:f;return c`<li class="bundle-code-tree-dir"><details ?open="${u(b,h)}"><summary @click="${p(b)}">${f}</summary>${Hl(h,t,r+1,n,b,s)}</details></li>`})} ${J(l,([,f])=>f,([f,h])=>{let b=n?.get(h),m=b&&b.length>0?Xs(b):null,y=b?.length??0;return c`<li class="bundle-code-tree-file"><button type="button" class="${F({"bundle-code-tree-link":!0,current:h===t})}" data-bundle-view-source="${h}" title="${h}"><span class="bundle-code-tree-name">${f}</span> ${y>0?c`<span class="${`bundle-code-tree-count sev-${m}`}" title="${`${y} ${y===1?"issue":"issues"}`}">${y}</span>`:g}</button></li>`})}</ul>`}function Qy(e,t,r,n,o=""){if(!r)return Hl(e,t,0,n);let s=r.toLowerCase(),i=[],l=h=>{for(let[,b]of h.dirs)l(b);for(let[,b]of h.files)(o&&b.startsWith(o)?b.slice(o.length):b).toLowerCase().includes(s)&&i.push(b)};if(l(e),i.length===0)return c`<div class="bundle-code-search-empty">No files match.</div>`;let d=o?i.map(h=>h.startsWith(o)?h.slice(o.length):h):i,u=new Map;for(let h=0;h<i.length;h++)u.set(d[h],i[h]);let p=Tf(d),f=h=>{let b=new Map;for(let[m,y]of h.files)b.set(m,u.get(y)??y);h.files=b;for(let m of h.dirs.values())f(m)};return f(p),Hl(p,t,0,n,"",!0)}function Zy(e,t,r,n=""){if(!t)return c`<div class="bundle-code-search-hint">Type to search across every source in this bundle.</div>`;let o=t.toLowerCase(),s=20,i=100,l=[],d=0;for(let[u,p]of e){if(typeof p!="string")continue;let f=[],h=p.split(`
|
|
46
|
-
`);for(let b=0;b<h.length;b++){let m=h[b];if(m.toLowerCase().includes(o)&&(f.push({ln:b+1,text:m}),d++,f.length>=s))break}if(f.length>0&&l.push({path:u,hits:f}),l.length>=i)break}return l.length===0?c`<div class="bundle-code-search-empty">No matches.</div>`:c`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${d} ${d===1?"hit":"hits"} in ${l.length} ${l.length===1?"file":"files"}</div>${l.map(({path:u,hits:p})=>{let f=n&&u.startsWith(n)?u.slice(n.length):u;return c`<div class="${F({"bundle-code-search-file":!0,current:u===r})}"><button type="button" class="bundle-code-search-file-name" data-bundle-view-source="${u}" title="${u}">${f}</button><ul class="bundle-code-search-hits">${p.map(h=>c`<li class="bundle-code-search-hit"><button type="button" class="bundle-code-search-hit-link" data-bundle-view-source="${u}" data-bundle-view-line="${h.ln}" data-bundle-view-scroll-block="start" title="${`${u}:${h.ln}`}"><span class="bundle-code-search-hit-ln">${h.ln}</span> <span class="bundle-code-search-hit-text mono">${h.text.slice(0,200)}</span></button></li>`)}</ul></div>`})}</div>`}function ew(e,t,r,n=""){if(!e.fileHashes)return c`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=xr(e.fileHashes,"issues");if(o.size===0)return c`<div class="bundle-code-search-empty">No issues match this bundle's files.</div>`;let s=t.toLowerCase(),i=[];for(let[l,d]of o)for(let u=0;u<d.length;u++){let p=d[u],f=p.description??"";s&&!l.toLowerCase().includes(s)&&!p.severity.includes(s)&&!f.toLowerCase().includes(s)||i.push({file:l,finding:p,fileIdx:u})}return i.sort((l,d)=>{let u=qe[l.finding.severity]??0,p=qe[d.finding.severity]??0;return p!==u?p-u:l.file.localeCompare(d.file)}),i.length===0?c`<div class="bundle-code-search-empty">No matches.</div>`:c`<div class="bundle-code-search-results"><div class="bundle-code-search-summary">${i.length} ${i.length===1?"issue":"issues"}</div><ul class="bundle-code-search-issues">${i.map(({file:l,finding:d,fileIdx:u})=>{let p=d.severity,f=n&&l.startsWith(n)?l.slice(n.length):l,h=l===r&&a.bundleSourceFindingIdx===u;return c`<li class="${F({"bundle-code-search-issue":!0,current:h})}"><button type="button" class="bundle-code-search-issue-link" data-bundle-view-source="${l}" data-bundle-view-finding-idx="${u}" data-bundle-view-line="${d.line??""}" title="${l}"><div class="bundle-code-search-issue-row"><span class="${`bundle-code-search-issue-sev sev-${p}`}">${p.replaceAll("_"," ")}</span> <span class="bundle-code-search-issue-path mono">${f}${d.line?`:${d.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${d.description??""}</div></button></li>`})}</ul></div>`}function tw(e){if(!e||!e.json&&!e.bundle)return g;let t=ut(e);if(t.size===0)return c`<div class="bundle-code-empty">This bundle doesn't carry any source content.</div>`;$f!==a.selectedBundle&&(Js.clear(),$f=a.selectedBundle);let r=[...t.keys()].toSorted(),{prefix:n,stripped:o}=Ft(r),s=new Map;for(let w=0;w<r.length;w++)s.set(o[w],r[w]);let i=Tf(o),l=w=>{let v=new Map;for(let[S,I]of w.files)v.set(S,s.get(I)??I);w.files=v;for(let S of w.dirs.values())l(S)};l(i);let d=a.bundleSourceFile,u=d?t.get(d):null,p=[],f=new Map;if(typeof u=="string"&&e.fileHashes){let v=xr(e.fileHashes,"issues").get(d)??[];for(let S=0;S<v.length;S++){let I=v[S];p.push(I);let R=parseInt(I.line,10);Number.isFinite(R)&&R>0&&(f.has(R)||f.set(R,[]),f.get(R).push({f:I,idx:S}))}}let h=e.fileHashes?xr(e.fileHashes,"issues"):new Map,m=h.size>0?["files","code","issues"]:["files","code"],y=m.includes(a.bundleCodeSearchMode)?a.bundleCodeSearchMode:"files",k=a.bundleCodeSearchQuery;return c`<div class="bundle-code-view"><aside class="bundle-code-rail"><div class="bundle-code-rail-head"><span class="bundle-code-rail-label">Files</span> <span class="bundle-code-rail-count">${r.length}</span></div>${n?c`<div class="bundle-code-rail-prefix mono" title="${n}">${n}</div>`:g}<bundle-code-search .modes="${m}"></bundle-code-search><div class="bundle-code-rail-body">${Al(y,[["files",()=>Qy(i,d,k,h,n)],["code",()=>Zy(t,k,d,n)],["issues",()=>ew(e,k,d,n)]])}</div></aside><div class="${F({"bundle-code-main":!0,"with-panel":a.bundleSourceFindingIdx!=null})}">${d?c`<header class="bundle-code-main-bar"><span class="bundle-code-main-path mono" title="${d}">${d}</span></header><div class="bundle-code-main-body"><div class="bundle-source-code-wrap">${typeof u=="string"?Cf(u,d,e.integrity,f):c`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${Ef(p)}</div>`:c`<div class="bundle-code-placeholder">Pick a file from the tree to view its source.</div>`}</div></div>`}function rw(e){let t=yf(e,a.bundleDetails);a.bundleDetailsTab==="advisories"&&!t&&(a.bundleDetailsTab="overview");let r=a.bundleDetailsTab,n=r==="overview";return r==="advisories"&&t&&wf(a.bundleDetails,$).catch(()=>{}),c`<div class="bundles-view bundles-slide-view"><header class="bundles-slide-bar"><span class="bundles-slide-icon" aria-hidden="true">${ue(rn)}</span><div class="bundles-slide-title"><div class="bundles-slide-name">${e.name}</div></div><div class="bundles-slide-tabs" role="tablist">${t?c`<button type="button" class="${F({"bundles-tab":!0,active:r==="advisories"})}" data-bundle-tab="advisories" aria-selected="${String(r==="advisories")}" role="tab">Advisories</button>`:g} <button type="button" class="${F({"bundles-tab":!0,active:r==="issues"})}" data-bundle-tab="issues" aria-selected="${String(r==="issues")}" role="tab">Issues</button> <button type="button" class="${F({"bundles-tab":!0,active:r==="terminal"})}" data-bundle-tab="terminal" aria-selected="${String(r==="terminal")}" role="tab">Terminal</button> <button type="button" class="${F({"bundles-tab":!0,active:r==="treemap"})}" data-bundle-tab="treemap" aria-selected="${String(r==="treemap")}" role="tab">Treemap</button> <button type="button" class="${F({"bundles-tab":!0,active:r==="graph"})}" data-bundle-tab="graph" aria-selected="${String(r==="graph")}" role="tab">Graph</button> <button type="button" class="${F({"bundles-tab":!0,active:r==="code"})}" data-bundle-tab="code" aria-selected="${String(r==="code")}" role="tab">Code</button> <button type="button" class="${F({"bundles-tab":!0,active:n})}" data-bundle-tab="overview" aria-selected="${String(n)}" role="tab">Overview</button></div></header><div class="${F({"bundles-slide-body":!0,"bundles-slide-body-overview":n})}">${n?sw(e,a.bundleDetails):Al(r,[["terminal",()=>c`<div id="bundle-terminal-slot" class="bundle-terminal-slot"></div>`],["graph",()=>c`<div id="bundle-graph-slot" class="bundle-graph-slot"></div>`],["treemap",()=>c`<bundle-treemap .details="${a.bundleDetails}"></bundle-treemap>`],["code",()=>tw(a.bundleDetails)],["issues",()=>ow(a.bundleDetails)],["advisories",()=>vf(a.bundleDetails)]])}</div></div>`}function nw(e,t={}){if(!e)return g;let r=[];if(e.fileHash&&(r=Mn(e.fileHash,e)),r.length===0&&t.bucketKey&&(t.kind==="package"?r=ba(t.bucketKey,e):t.kind==="repository"&&(r=ya(t.bucketKey,e))),r.length===0)return g;let n=r.slice(0,2),o=r.length-n.length;return c`<div class="bundle-issue-reports">${n.map(s=>{let i=Y[Ke(s)]??Y.default;return c`<button type="button" class="report-chip" title="${s}" data-bundle-issue-report="${s}">${ue(i)}<span class="report-chip-label">${Ne(s)}</span></button>`})} ${o>0?c`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:g}</div>`}function If(e){if(e==null||e==="")return"";let t=String(e),r=t.indexOf("-");if(r>0){let o=parseInt(t.slice(0,r),10),s=parseInt(t.slice(r+1),10);return Number.isFinite(o)&&Number.isFinite(s)&&s>o?`Lines ${o}-${s}`:Number.isFinite(o)?`Line ${o}`:""}let n=parseInt(t,10);return Number.isFinite(n)?`Line ${n}`:""}function ow(e){if(!e||!e.json&&!e.bundle)return g;if(!e.fileHashes)return c`<div class="bundle-issues-empty">Computing file hashes…</div>`;let t=xr(e.fileHashes,"issues");return t.size===0?c`<div class="bundle-issues-empty">No issues match this bundle's files.</div>`:go(t,{kind:"bundle"})}function go(e,{kind:t,bucketKey:r}={}){let n=[...e.keys()],{prefix:o,stripped:s}=Ft(n),i=new Map(n.map((u,p)=>[u,s[p]])),l=[...e.entries()].toSorted(([u,p],[f,h])=>{let b=qe[Xs(p)]??0,m=qe[Xs(h)]??0;return m!==b?m-b:(i.get(u)??u).localeCompare(i.get(f)??f)}),d=[...e.values()].reduce((u,p)=>u+p.length,0);return c`<div class="bundle-issues"><div class="bundle-issues-summary">${d} ${d===1?"issue":"issues"} across ${e.size} ${e.size===1?"file":"files"} ${o?c`<span class="mono">${o}</span>`:g}</div><ul class="bundle-issues-list">${J(l,([u])=>u,([u,p])=>{let f=i.get(u)??u,h=[...p].toSorted((m,y)=>{let k=qe[m.severity]??0,w=qe[y.severity]??0;if(w!==k)return w-k;let v=parseInt(m.line,10)||0,S=parseInt(y.line,10)||0;return v-S}),b=t==="repository"&&r?`${/^https?:/iu.test(r)?r.replace(/\/$/u,""):`https://github.com/${r}`}/blob/HEAD/${u}`:null;return c`<li class="bundle-issues-file-group"><header class="bundle-issues-file-header">${t==="bundle"?c`<button type="button" class="bundle-issues-file-name mono" data-bundle-view-source="${u}" title="${u}">${f}</button>`:b?c`<a class="bundle-issues-file-name bundle-issues-file-name-link mono" href="${b}" target="_blank" rel="noopener" title="${u}">${f}</a>`:c`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" title="${u}">${f}</span>`} <span class="bundle-issues-file-count">${p.length} ${p.length===1?"issue":"issues"}</span></header><ul class="bundle-issues-findings">${J(h,m=>m.id??`${u}\0${m.line??""}\0${m.severity??""}\0${m.description??""}`,m=>{let y=p.indexOf(m),k=m.severity,w=a.triage.get(P(m))?.triage,v=w==="fixed"||w==="invalid"||w==="deleted"?w.toUpperCase():null,S=c`<div class="bundle-issues-finding-head"><span class="${`bundle-issue-sev sev-${k}`}">${k.replaceAll("_"," ")}</span> ${(()=>{let I=If(m.line);return I?c`<span class="bundle-issues-finding-line">${I}</span>`:g})()} ${v?c`<span class="${`bundle-issues-finding-triage triage-${w}`}">${v}</span>`:g} <span class="bundle-issues-finding-spacer"></span> ${nw(m,{kind:t,bucketKey:r})}</div><div class="bundle-issues-finding-desc">${m.description??""}</div>`;return c`<li class="bundle-issues-finding">${t==="bundle"?c`<button type="button" class="bundle-issues-finding-link" data-bundle-view-source="${u}" data-bundle-view-finding-idx="${y}" data-bundle-view-line="${m.line??""}" title="${u}">${S}</button>`:c`<div class="bundle-issues-finding-link bundle-issues-finding-static" title="${u}">${S}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function Rf(e){let t=a.selectedBundle,r=t?e.find(n=>n.integrity===t):null;return r?rw(r):c`<div class="bundles-view bundles-view-empty"><p class="bundles-empty-hint">${e.length===0?"No bundles yet. Drop a `.map` sourcemap or a `.stasis.code.br` bundle to start.":"Pick a bundle from the sidebar to open it."}</p></div>`}function sw(e,t){let r=c`<dl class="bundles-detail-meta"><dt>Name</dt><dd>${e.name}</dd><dt>Integrity</dt><dd class="mono">${e.integrity}</dd>${t&&t.integrity===e.integrity?c`<dt>Size</dt><dd>${De(t.size)}</dd>`:g}</dl>`;if(!t||t.integrity!==e.integrity)return c`<div class="bundles-overview"><div class="bundles-overview-summary">${r}</div></div>`;if(t.error)return c`<div class="bundles-overview"><div class="bundles-overview-summary">${r}</div><div class="bundles-overview-placeholder is-error">Failed to parse: ${t.error}</div></div>`;if(t.kind==="sourcemap"&&t.json){let n=t.json,o=n.sources??[],s=n.sourcesContent??[],i=o.map((d,u)=>typeof s[u]=="string"?new TextEncoder().encode(s[u]).byteLength:null),l=c`<dt>Version</dt><dd>${String(n.version??"?")}</dd>${n.file?c`<dt>Output</dt><dd class="mono">${n.file}</dd>`:g} ${n.sourceRoot?c`<dt>Source root</dt><dd class="mono">${n.sourceRoot}</dd>`:g} ${n.names?c`<dt>Names</dt><dd>${n.names.length}</dd>`:g}`;return kf(r,l,o,i)}if(t.kind==="stasis"&&t.bundle){let n=t.bundle,o=n.sources,s=[...o.keys()],i=new Set;for(let p of n.imports.keys()){let f=p.replace(/\s*\(with: .*\)\s*$/u,"");for(let h of f.split(", "))i.add(h)}let l=[...i].toSorted(),d=s.map(p=>{let f=o.get(p);return typeof f=="string"?new TextEncoder().encode(f).byteLength:null}),u=c`<dt>Version</dt><dd>${String(n.version)}</dd>${l.length>0?c`<dt>Resolution kinds</dt><dd>${l.join(", ")}</dd>`:g}`;return kf(r,u,s,d)}return c`<div class="bundles-overview"><div class="bundles-overview-summary">${r}</div><div class="bundles-overview-placeholder">Bundle contents not parsed.</div></div>`}function Bf(){wt().catch(()=>{});let e=yt(),t={fixed:0,invalid:0,deleted:0},r=[];for(let[h,b]of e){let m=[],y=[],k=new Map,w=new Set;for(let[v,S]of b.byVersion){let I=[],R=new Map;for(let O of S.findings){let we=a.triage.get(P(O))?.triage??null;we==="fixed"?t.fixed++:we==="invalid"?t.invalid++:we==="deleted"&&t.deleted++,we===a.shownTriage&&(I.push(O),R.has(O.file)||R.set(O.file,[]),R.get(O.file).push(O))}if(I.length!==0){m.push([v,{findings:I,files:R,reports:S.reports}]);for(let O of I)y.push(O),k.has(O.file)||k.set(O.file,[]),k.get(O.file).push(O);for(let O of S.reports)w.add(O)}}m.length!==0&&(m.sort(([v],[S])=>Mi(v,S)),r.push([h,{findings:y,files:k,reports:w,versions:m}]))}let n=a.selectedPackage,o=n?r.find(([h])=>h===n)??null:null,s=null;if(o){let h=o[1].versions,b=a.selectedPackageVersion;s=h.find(([m])=>m===b)??null,!s&&h.length===1&&(s=h[0])}let i=s?s[1]:o?o[1]:null;if(o&&a.packageDetailsTab==="issues")return pw(o[0],i,s?s[0]:void 0);let l=a.packagesSearchQuery.trim().toLowerCase(),d=l?r.filter(([h])=>h.toLowerCase().includes(l)):r.slice();dw(d,a.packagesSortBy);let u=r.reduce((h,[,b])=>h+b.findings.length,0),p=new Set;for(let[,h]of r)for(let b of h.reports)p.add(b);let f=o?"packages-layout open":"packages-layout";return c`<div class="${F({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Packages</h1><div class="meta-row"><span>${d.length===r.length?c`${r.length} ${r.length===1?"package":"packages"}`:c`${d.length} of ${r.length} ${r.length===1?"package":"packages"}`}</span> ${u>0?c`<span>${u} ${u===1?"finding":"findings"} across ${p.size} ${p.size===1?"report":"reports"}</span>`:g}</div></div>${lw(t)}</header>${r.length===0?c`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":a.shownTriage?`No ${a.shownTriage} findings in any package.`:"No untriaged findings in any package."}</p>`:d.length===0?c`<p style="color:var(--muted)">No packages match "${a.packagesSearchQuery}".</p>`:c`<div class="${f}"><ul class="packages-list">${J(iw(d),aw,h=>fw(h,n,a.selectedPackageVersion))}</ul>${o?c`<aside class="packages-details" id="packages-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-package title="Close details" aria-label="Close details">×</button></header><div class="packages-details-body">${mw(o[0],i,s?s[0]:void 0)}</div></aside>`:g}</div>`}</div>`}function iw(e){let t=[];for(let[r,n]of e){let o=n.versions;if(o.length<=1){let[d,u]=o[0];t.push({kind:"single",pkg:r,version:d,bucket:u,totalVersions:1});continue}let[s,i]=o[0],l=a.expandedPackages.has(r);if(t.push({kind:"latest",pkg:r,version:s,bucket:i,totalVersions:o.length,expanded:l}),l)for(let d=1;d<o.length;d++){let[u,p]=o[d];t.push({kind:"other",pkg:r,version:u,bucket:p,totalVersions:o.length})}}return t}function aw(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function lw(e){return c`<div class="packages-toolbar"><entity-search kind="packages"></entity-search><entity-sort kind="packages"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${cw}"></triage-selector></div>`}var cw=["fixed","invalid","deleted"];function dw(e,t){let r=t==="name-asc"?(n,o)=>n[0].localeCompare(o[0]):t==="files-desc"?(n,o)=>o[1].files.size-n[1].files.size||n[0].localeCompare(o[0]):t==="reports-desc"?(n,o)=>o[1].reports.size-n[1].reports.size||n[0].localeCompare(o[0]):(n,o)=>o[1].findings.length-n[1].findings.length||n[0].localeCompare(o[0]);e.sort(r)}function uw(e,t){let r={live:0,invalid:0,deleted:0};if(!e)return r;let n=t===void 0?e.files.values():e.byVersion.get(t)?.files.values()??[].values();for(let o of n)for(let s of o){let i=a.triage.get(P(s))?.triage??null;i==="invalid"?r.invalid++:i==="deleted"?r.deleted++:r.live++}return r}function pw(e,t,r){let n=yt().get(e),o=uw(n,r),s=a.packageSlideTriage??"live",i=n?Ff(n,e,s,r):new Map,l=[...i.values()].reduce((f,h)=>f+h.length,0),d=s==="live"?l===1?"issue":"issues":l===1?`${s} issue`:`${s} issues`,u=s==="live"?"No live issues for this package.":`No ${s} issues for this package.`,p=typeof r=="string"?` @ ${r}`:"";return c`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="package-slide-back" title="Back to packages" aria-label="Back to packages">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name">${e}${p}</div><div class="bundles-slide-integrity">${l} ${d} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="package" .counts="${o}"></slide-triage-tabs></header><div class="bundles-slide-body">${i.size===0?c`<div class="bundle-issues-empty">${u}</div>`:go(i,{kind:"package",bucketKey:e})}</div></div>`}function fw(e,t,r){let{kind:n,pkg:o,version:s,bucket:i}=e,l={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let m of i.findings)l[m.severity]!==void 0&&l[m.severity]++;let d=me.filter(m=>l[m]>0),u=Lt(o),f={selected:o===t&&hw(e,r),"packages-row-latest":n==="latest","packages-row-other":n==="other"},h=s===null?"":s,b=s===null?`Open issues for ${o}`:`Open issues for ${o}@${s}`;return c`<li class="${F(f)}" data-select-package="${o}" data-select-package-version="${h}"><span class="packages-dot" style="${ve({background:u})}"></span><div class="packages-row-text"><div class="packages-name-line"><span class="packages-name">${o}${s===null?g:c`<span class="packages-version">@${s}</span>`} </span>${n==="latest"?gw(o,e.expanded,e.totalVersions-1):g}</div><span class="packages-row-meta">${i.findings.length} ${i.findings.length===1?"finding":"findings"} · ${i.files.size} ${i.files.size===1?"file":"files"} · ${i.reports.size} ${i.reports.size===1?"report":"reports"}</span></div>${d.length>0?c`<div class="packages-row-chips">${d.map(m=>c`<span class="${`tree-count-chip ${m}`}" title="${m.replaceAll("_"," ")}">${l[m]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-package-row-issues="${o}" data-package-row-issues-version="${h}" aria-label="${b}">Issues →</button></li>`}function hw(e,t){return e.kind==="single"?!0:e.version===t}function gw(e,t,r){let n=t?"Hide":`+${r} ${r===1?"version":"versions"}`;return c`<button type="button" class="${F({"packages-row-expand":!0,expanded:t})}" data-package-expand="${e}" aria-expanded="${String(t)}" aria-label="${t?`Hide older versions of ${e}`:`Show older versions of ${e}`}" title="${t?"Hide older versions":`Show older versions (${r})`}"><span class="packages-row-expand-chevron" aria-hidden="true"></span> <span class="packages-row-expand-label">${n}</span></button>`}function mw(e,t,r){let n=yt().get(e),s=[...(n?Ff(n,e,"live",r):new Map).values()].reduce((i,l)=>i+l.length,0);return c`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-package-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${s>0?c`<button type="button" class="bundles-tab bundles-tab-action" data-package-tab="issues">Issues (${s}) →</button>`:g}</div>${bw(e,t,r)}`}function Ff(e,t,r="live",n){let o=new Map,s=n===void 0?e.files:e.byVersion.get(n)?.files??new Map;for(let[i,l]of s){let d=l.filter(f=>{let h=a.triage.get(P(f))?.triage??null;return r==="invalid"?h==="invalid":r==="deleted"?h==="deleted":h!=="invalid"&&h!=="deleted"});if(d.length===0)continue;let u=Mf(t,i);o.has(u)||o.set(u,[]);let p=o.get(u);for(let f of d)p.push(f)}return o}function bw(e,t,r){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let f of t.findings)n[f.severity]!==void 0&&n[f.severity]++;let o=me.filter(f=>n[f]>0),s=[...t.files.entries()].toSorted(([f,h],[b,m])=>m.length!==h.length?m.length-h.length:f.localeCompare(b)),i=[...t.reports].toSorted((f,h)=>f.localeCompare(h)),d=yt().get(e)?.repos,u=d&&d.size===1?[...d][0]:null,p=u?/^https?:/iu.test(u)?u:`https://github.com/${u}`:null;return c`<dl class="packages-detail-meta"><dt>Package</dt><dd class="mono">${e}</dd>${r?c`<dt>Version</dt><dd class="mono">${r}</dd>`:g} ${p?c`<dt>Repository</dt><dd class="mono"><a href="${p}" target="_blank" rel="noopener">${u}</a></dd>`:g}<dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${o.length>0?c`<div class="packages-detail-chips">${o.map(f=>c`<span class="${`tree-count-chip ${f}`}">${n[f]} ${f.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${i.map(f=>{let h=Y[Ke(f)]??Y.default;return c`<li><button type="button" class="packages-detail-report" title="${f}" data-package-report="${f}">${ue(h)}<span class="packages-detail-report-label">${Ne(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${s.map(([f,h])=>{let b=Mf(e,f);return c`<li class="packages-detail-file"><span class="packages-detail-file-path mono" title="${f}">${b}</span> <span class="packages-detail-file-count">${h.length}</span></li>`})}</ul>`}function Mf(e,t){for(let r of["node_modules","dependencies"]){let n=`${r}/${e}/`,o=t.indexOf(n);if(o>=0)return t.slice(o+n.length)}return t.startsWith(`${e}/`)?t.slice(e.length+1):t}function tt(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}function Lf(){wt().catch(()=>{});let e=gr(),t={fixed:0,invalid:0,deleted:0},r=[];for(let[p,f]of e){let h=[],b=new Map;for(let m of f.findings){let y=a.triage.get(P(m))?.triage??null;y==="fixed"?t.fixed++:y==="invalid"?t.invalid++:y==="deleted"&&t.deleted++,y===a.shownTriage&&(h.push(m),b.has(m.file)||b.set(m.file,[]),b.get(m.file).push(m))}h.length>0&&r.push([p,{findings:h,files:b,reports:f.reports}])}let n=a.selectedRepository,o=n?r.find(([p])=>p===n)??null:null;if(o&&a.repositoryDetailsTab==="issues")return $w(o[0],o[1]);let s=a.repositoriesSearchQuery.trim().toLowerCase(),i=s?r.filter(([p])=>p.toLowerCase().includes(s)||tt(p).toLowerCase().includes(s)):r.slice();vw(i,a.repositoriesSortBy);let l=r.reduce((p,[,f])=>p+f.findings.length,0),d=new Set;for(let[,p]of r)for(let f of p.reports)d.add(f);let u=o?"packages-layout open":"packages-layout";return c`<div class="${F({"packages-view":!0,"with-details":!!o})}"><header class="page-head"><div class="page-title"><h1>Repositories</h1><div class="meta-row"><span>${i.length===r.length?c`${r.length} ${r.length===1?"repository":"repositories"}`:c`${i.length} of ${r.length} ${r.length===1?"repository":"repositories"}`}</span> ${l>0?c`<span>${l} ${l===1?"finding":"findings"} across ${d.size} ${d.size===1?"report":"reports"}</span>`:g}</div></div>${yw(t)}</header>${r.length===0?c`<p style="color:var(--muted)">${e.size===0?"Indexing reports\u2026 this view populates as the OPFS scan finishes.":a.shownTriage?`No ${a.shownTriage} findings in any repository.`:"No untriaged findings in any repository."}</p>`:i.length===0?c`<p style="color:var(--muted)">No repositories match "${a.repositoriesSearchQuery}".</p>`:c`<div class="${u}"><ul class="packages-list">${J(i,([p])=>p,([p,f])=>xw(p,f,p===n))}</ul>${o?c`<aside class="packages-details" id="repositories-details"><header class="packages-details-bar"><span class="packages-details-label">Details</span> <button type="button" class="packages-details-close" data-deselect-repository title="Close details" aria-label="Close details">×</button></header><div class="packages-details-body">${_w(o[0],o[1])}</div></aside>`:g}</div>`}</div>`}function yw(e){return c`<div class="packages-toolbar"><entity-search kind="repositories"></entity-search><entity-sort kind="repositories"></entity-sort><triage-selector variant="packages" .counts="${e}" .states="${ww}"></triage-selector></div>`}var ww=["fixed","invalid","deleted"];function vw(e,t){let r=t==="name-asc"?(n,o)=>tt(n[0]).localeCompare(tt(o[0])):t==="files-desc"?(n,o)=>o[1].files.size-n[1].files.size||tt(n[0]).localeCompare(tt(o[0])):t==="reports-desc"?(n,o)=>o[1].reports.size-n[1].reports.size||tt(n[0]).localeCompare(tt(o[0])):(n,o)=>o[1].findings.length-n[1].findings.length||tt(n[0]).localeCompare(tt(o[0]));e.sort(r)}function kw(e){let t={live:0,invalid:0,deleted:0};if(!e)return t;for(let r of e.files.values())for(let n of r){let o=a.triage.get(P(n))?.triage??null;o==="invalid"?t.invalid++:o==="deleted"?t.deleted++:t.live++}return t}function $w(e,t){let r=gr().get(e),n=kw(r),o=a.repositorySlideTriage??"live",s=r?Pf(r,o):new Map,i=[...s.values()].reduce((u,p)=>u+p.length,0),l=o==="live"?i===1?"issue":"issues":i===1?`${o} issue`:`${o} issues`,d=o==="live"?"No live issues for this repository.":`No ${o} issues for this repository.`;return c`<div class="packages-view packages-slide-view"><header class="bundles-slide-bar"><button type="button" class="bundles-slide-back" data-action="repository-slide-back" title="Back to repositories" aria-label="Back to repositories">← Back</button><div class="bundles-slide-title"><div class="bundles-slide-name">${tt(e)}</div><div class="bundles-slide-integrity">${i} ${l} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</div></div><slide-triage-tabs kind="repository" .counts="${n}"></slide-triage-tabs></header><div class="bundles-slide-body">${s.size===0?c`<div class="bundle-issues-empty">${d}</div>`:go(s,{kind:"repository",bucketKey:e})}</div></div>`}function xw(e,t,r){let n={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let l of t.findings)n[l.severity]!==void 0&&n[l.severity]++;let o=me.filter(l=>n[l]>0),s=Lt(e),i=tt(e);return c`<li class="${r?"selected":""}" data-select-repository="${e}"><span class="packages-dot" style="${ve({background:s})}"></span><div class="packages-row-text"><span class="packages-name">${i}</span> <span class="packages-row-meta">${t.findings.length} ${t.findings.length===1?"finding":"findings"} · ${t.files.size} ${t.files.size===1?"file":"files"} · ${t.reports.size} ${t.reports.size===1?"report":"reports"}</span></div>${o.length>0?c`<div class="packages-row-chips">${o.map(l=>c`<span class="${`tree-count-chip ${l}`}" title="${l.replaceAll("_"," ")}">${n[l]}</span>`)}</div>`:g} <button type="button" class="packages-row-issues" data-repository-row-issues="${e}" aria-label="${`Open issues for ${i}`}">Issues →</button></li>`}function _w(e,t){let r=gr().get(e),o=[...(r?Pf(r):new Map).values()].reduce((s,i)=>s+i.length,0);return c`<div class="bundles-tabs" role="tablist"><button type="button" class="bundles-tab active" data-repository-tab="overview" aria-selected="true" role="tab">Overview</button> <span class="bundles-tabs-spacer"></span> ${o>0?c`<button type="button" class="bundles-tab bundles-tab-action" data-repository-tab="issues">Issues (${o}) →</button>`:g}</div>${Sw(e,t)}`}function Pf(e,t="live"){let r=new Map;for(let[n,o]of e.files){let s=o.filter(i=>{let l=a.triage.get(P(i))?.triage??null;return t==="invalid"?l==="invalid":t==="deleted"?l==="deleted":l!=="invalid"&&l!=="deleted"});s.length>0&&r.set(n,s)}return r}function Sw(e,t){let r={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0};for(let l of t.findings)r[l.severity]!==void 0&&r[l.severity]++;let n=me.filter(l=>r[l]>0),o=[...t.files.entries()].toSorted(([l,d],[u,p])=>p.length!==d.length?p.length-d.length:l.localeCompare(u)),s=[...t.reports].toSorted((l,d)=>l.localeCompare(d)),i=/^https?:/iu.test(e)?e:`https://github.com/${e}`;return c`<dl class="packages-detail-meta"><dt>Repository</dt><dd class="mono"><a href="${i}" target="_blank" rel="noopener">${tt(e)}</a></dd><dt>Findings</dt><dd>${t.findings.length}</dd><dt>Files</dt><dd>${t.files.size}</dd><dt>Reports</dt><dd>${t.reports.size}</dd></dl>${n.length>0?c`<div class="packages-detail-chips">${n.map(l=>c`<span class="${`tree-count-chip ${l}`}">${r[l]} ${l.replaceAll("_"," ")}</span>`)}</div>`:g}<h3 class="packages-detail-section">Reports</h3><ul class="packages-detail-reports">${s.map(l=>{let d=Y[Ke(l)]??Y.default;return c`<li><button type="button" class="packages-detail-report" title="${l}" data-package-report="${l}">${ue(d)}<span class="packages-detail-report-label">${Ne(l)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${o.map(([l,d])=>c`<li class="packages-detail-file"><span class="packages-detail-file-path mono" title="${l}">${l}</span> <span class="packages-detail-file-count">${d.length}</span></li>`)}</ul>`}var mo=new Map,bo=new Map,jl=new Set;function Cw(e,t,r){let n=`${e}\0${t}`;if(bo.has(n)||jl.has(n))return;let o=Ds(t);if(!o){bo.set(n,null);return}jl.add(n),(async()=>{let s=await Us(r,o);bo.set(n,s??null),jl.delete(n),a.focusCodeTick++,queueMicrotask($)})()}async function Ew(e){let t=mo.get(e);if(t&&(t.loading||t.sources))return;let r=(a.bundles??[]).find(n=>n.integrity===e);if(r){mo.set(e,{sources:null,loading:!0,error:null});try{let n=await qs(e,r),o=ut(n);mo.set(e,{sources:o,loading:!1,error:n.error??null})}catch(n){mo.set(e,{sources:null,loading:!1,error:n.message})}a.focusCodeTick++,queueMicrotask($),queueMicrotask(()=>{let n=C.querySelector(".focus-code-line-active");n&&n.scrollIntoView({block:"center",behavior:"instant"})})}}function Of(e){if(!e)return null;let t=Te(e);if(!t.fileHash||!Array.isArray(t._bundleHashes)||t._bundleHashes.length===0)return null;let r=new Set(t._bundleHashes),n=mr(t.fileHash).find(({integrity:u})=>r.has(u));if(!n)return null;let o=mo.get(n.integrity);if(!o)return Ew(n.integrity),{loading:!0};if(o.loading)return{loading:!0};if(!o.sources)return null;let s=o.sources.get(n.file);if(typeof s!="string")return null;Cw(n.integrity,n.file,s);let i=`${n.integrity}\0${n.file}`,l=bo.has(i)?bo.get(i):void 0,d=parseInt(t.line,10);return{content:s,file:n.file,integrity:n.integrity,line:Number.isFinite(d)?d:null,highlighted:l,loading:!1}}var Vl=class extends T{static styles=[...T.styles,A(ye)];static properties={workspaceId:{type:String},items:{type:Array},_uploading:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._uploading=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="upload"]')?.focus()}_onClose=()=>this._finish({uploaded:[],failed:[]});_onCancel=()=>this._finish({uploaded:[],failed:[]});_onUpload=async()=>{if(this._uploading)return;this._uploading=!0,this._errors=[];let t=[],r=[];for(let n of this.items)try{let o;if(n.kind==="bundle")o=await cp(this.workspaceId,n.identifier);else{let s=await pr(n.identifier);o=await Ss(this.workspaceId,n.identifier,s)}if(o.ok)t.push({kind:n.kind,identifier:n.identifier});else{let s=o.reason??"unknown";r.push({kind:n.kind,identifier:n.identifier,reason:s}),this._errors=[...this._errors,{label:Ge(n),reason:s}]}}catch(o){let s=o?.message??String(o);r.push({kind:n.kind,identifier:n.identifier,reason:s}),this._errors=[...this._errors,{label:Ge(n),reason:s}]}this._uploading=!1,this._done=!0,r.length===0&&this._finish({uploaded:t,failed:r})};_errorsSection(){return this._errors.length===0?g:c`<ul class="lwd-list" role="alert">${this._errors.map(t=>c`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}render(){let t=this.items.length,r=t===1,n=this.items.filter(u=>u.kind==="report").length,o=t-n,s="items";o===0?s=r?"report":"reports":n===0&&(s=r?"bundle":"bundles");let i=r?c`Upload <strong>"${Ge(this.items[0])}"</strong> to the workspace's remote inventory?`:c`Upload <strong>${t}</strong> local ${s} to the workspace's remote inventory?`,l=r?g:c`<ul class="lwd-list">${this.items.map(u=>c`<li>${Ge(u)}${u.kind==="bundle"?c`<span class="lwd-kind-tag">bundle</span>`:g}</li>`)}</ul>`,d=this._uploading?r?"Uploading\u2026":`Uploading ${t} ${s}\u2026`:r?"Upload":`Upload ${t}`;return c`<dialog @close="${this._onClose}"><header><h3>Upload to remote</h3></header><p class="lwd-body">${i}</p>${l}<p class="nwd-note">End-to-end encrypted with the workspace key — only workspace members can decrypt the uploaded content.</p>${this._errorsSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._uploading}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:c`<button type="button" data-role="upload" @click="${this._onUpload}" ?disabled="${this._uploading||t===0}">${d}</button>`}</footer></dialog>`}};customElements.define("sync-upload-dialog",Vl);function Nf({workspaceId:e,items:t}={}){return V("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var Kl=class extends T{static styles=[...T.styles,A(ye)];static properties={workspaceId:{type:String},items:{type:Array},_running:{state:!0},_errors:{state:!0},_done:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.items=[],this._running=!1,this._errors=[],this._done=!1,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="download"]')?.focus()}_onClose=()=>this._finish({downloaded:[],failed:[]});_onCancel=()=>this._finish({downloaded:[],failed:[]});_onDownload=async()=>{if(this._running)return;this._running=!0,this._errors=[];let t=[],r=[];for(let n of this.items)try{if(n.kind==="bundle"){let l=await lp(this.workspaceId,n.identifier);if(!l.ok){let d=l.reason??"unknown";r.push({kind:"bundle",identifier:n.identifier,reason:d}),this._errors=[...this._errors,{label:Ge(n),reason:d}];continue}await br(n.identifier,this.workspaceId),t.push({kind:"bundle",identifier:n.identifier});continue}let o=await ap(this.workspaceId,n.identifier);if(!o){r.push({kind:"report",identifier:n.identifier,reason:"not found in remote"}),this._errors=[...this._errors,{label:Ge(n),reason:"not found in remote"}];continue}let s;try{s=ce(await gt(o.content))}catch{let l="remote payload is not gzipped UTF-8";r.push({kind:"report",identifier:n.identifier,reason:l}),this._errors=[...this._errors,{label:Ge(n),reason:l}];continue}let i=Oe(s);if(!i.recognized){let l="remote payload is not a recognized report format";r.push({kind:"report",identifier:n.identifier,reason:l}),this._errors=[...this._errors,{label:Ge(n),reason:l}];continue}await In(n.identifier,o.content),Ve(n.identifier,i.count,i.source),await Tt(n.identifier,this.workspaceId),t.push({kind:"report",identifier:n.identifier})}catch(o){let s=o?.message??String(o);r.push({kind:n.kind,identifier:n.identifier,reason:s}),this._errors=[...this._errors,{label:Ge(n),reason:s}]}if(this._running=!1,this._done=!0,t.some(n=>n.kind==="report"))try{a.currentWorkspace===this.workspaceId&&await er(this.workspaceId)}catch{}r.length===0&&this._finish({downloaded:t,failed:r})};_errorsSection(){return this._errors.length===0?g:c`<ul class="lwd-list" role="alert">${this._errors.map(t=>c`<li><strong>${t.label}</strong> — ${t.reason}</li>`)}</ul>`}render(){let t=this.items.length,r=t===1,n=this.items.filter(u=>u.kind==="report").length,o=t-n,s="items";o===0?s=r?"report":"reports":n===0&&(s=r?"bundle":"bundles");let i=r?c`Download <strong>"${Ge(this.items[0])}"</strong> from the workspace's remote inventory?`:c`Download <strong>${t}</strong> remote ${s} into this workspace?`,l=r?g:c`<ul class="lwd-list">${this.items.map(u=>c`<li>${Ge(u)}${u.kind==="bundle"?c`<span class="lwd-kind-tag">bundle</span>`:g}</li>`)}</ul>`,d=this._running?r?"Downloading\u2026":`Downloading ${t} ${s}\u2026`:r?"Download":`Download ${t}`;return c`<dialog @close="${this._onClose}"><header><h3>Download from remote</h3></header><p class="lwd-body">${i}</p>${l} ${this._errorsSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._done&&this._errors.length>0?"Close":"Cancel"}</button> ${this._done&&this._errors.length>0?g:c`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running||t===0}">${d}</button>`}</footer></dialog>`}};customElements.define("sync-download-dialog",Kl);function Df({workspaceId:e,items:t}={}){return V("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var Uf=`.rec-list{margin:.2rem 0 .55rem;padding:0;list-style:none;max-height:320px;overflow-y:auto}.rec-row{display:flex;align-items:center;gap:.5rem;padding:.28rem .15rem;font-size:.8rem;line-height:1.4;border-bottom:1px solid rgb(from var(--text) r g b / .06)}.rec-row:last-child{border-bottom:none}.rec-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rec-status{flex:0 0 auto;padding:0 .4rem;border-radius:4px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.rec-status-checking{color:var(--muted)}.rec-status-good{color:var(--ok, #16a34a)}.rec-status-reuploaded{color:var(--accent, #2563eb)}.rec-status-missing{color:var(--critical, #dc2626)}.rec-summary{margin:.1rem 0 .2rem;color:var(--muted);font-size:.76rem;line-height:1.45}.rec-error{margin:.3rem 0 .2rem;color:var(--critical, #f87171);font-size:.76rem;line-height:1.4}
|
|
47
|
-
`;var Tw={checking:"checking\u2026",good:"available",reuploaded:"re-uploaded",missing:"missing"},ql=class extends T{static styles=[...T.styles,A(ye),A(Uf)];static properties={workspaceId:{type:String},cloudCount:{type:Number},localFileNames:{type:Array},localBundles:{type:Array},_rows:{state:!0},_running:{state:!0},_ran:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.cloudCount=0,this.localFileNames=[],this.localBundles=[],this._rows=[],this._running=!1,this._ran=!1,this._error=null,this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="recheck"]')?.focus()}_result(){return{items:this._rows,counts:this._counts()}}_onClose=()=>this._finish(this._ran?this._result():null);_onCancel=()=>this._finish(this._ran?this._result():null);_counts(){let t={good:0,reuploaded:0,missing:0};for(let r of this._rows)r.status in t&&(t[r.status]+=1);return t}_onRecheck=async()=>{if(!this._running){this._running=!0,this._error=null,this._rows=[];try{let{items:t}=await dp(this.workspaceId,{onList:r=>{this._rows=r},onItem:r=>{this._rows=this._rows.map(n=>n.resourceTag===r.resourceTag?r:n)}});this._rows=t}catch(t){this._error=t?.message??String(t)}finally{this._running=!1,this._ran=!0}}};_downloadableItems(){let t=new Set(this.localFileNames),r=new Set(this.localBundles),n=[];for(let o of this._rows)o.status!=="good"||!o.identifier||(o.kind==="report"&&!t.has(o.identifier)?n.push({kind:"report",identifier:o.identifier}):o.kind==="bundle"&&!r.has(o.identifier)&&n.push({kind:"bundle",identifier:o.identifier,label:o.label}));return n}_onDownload=async()=>{let t=this._downloadableItems();t.length!==0&&await Df({workspaceId:this.workspaceId,items:t})};_rowsSection(){return this._rows.length===0?this._running?c`<p class="lwd-body">Fetching remote listing…</p>`:g:c`<ul class="rec-list">${this._rows.map(t=>c`<li class="rec-row"><span class="rec-label">${t.label}${t.kind==="bundle"?c`<span class="lwd-kind-tag">bundle</span>`:g}</span> <span class="${`rec-status rec-status-${t.status}`}">${Tw[t.status]??t.status}</span></li>`)}</ul>`}_summarySection(){if(!this._ran||this._rows.length===0)return g;let t=this._counts(),r=[];return t.good&&r.push(`${t.good} available`),t.reuploaded&&r.push(`${t.reuploaded} re-uploaded`),t.missing&&r.push(`${t.missing} missing`),r.length>0?c`<p class="rec-summary" role="status" aria-live="polite">${r.join(" \xB7 ")}</p>`:g}render(){let t=this.cloudCount===1?"":"s",r=this._ran?g:c`<p class="lwd-body">Re-check ${this.cloudCount>0?c`the <strong>${this.cloudCount}</strong>`:g}remote object${t} for this workspace. Each is re-fetched from the relay; any whose bytes are missing are re-uploaded from a matching local copy.</p>`,n=this._ran&&this._rows.length===0&&!this._error?c`<p class="lwd-empty">No remote objects to check.</p>`:g,o=this._ran?this._downloadableItems().length:0;return c`<dialog @close="${this._onClose}"><header><h3>Re-check cloud storage</h3></header>${r} ${this._rowsSection()} ${n} ${this._summarySection()} ${this._error?c`<p class="rec-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> ${o>0?c`<button type="button" data-role="download" @click="${this._onDownload}" ?disabled="${this._running}">Download ${o} not stored locally</button>`:g} <button type="button" data-role="cancel" @click="${this._onCancel}" ?disabled="${this._running}">${this._ran?"Close":"Cancel"}</button> <button type="button" data-role="recheck" @click="${this._onRecheck}" ?disabled="${this._running}">${this._running?"Re-checking\u2026":this._ran?"Re-check again":"Re-check"}</button></footer></dialog>`}};customElements.define("objstore-recovery-dialog",ql);function zf({workspaceId:e,cloudCount:t,localFileNames:r,localBundles:n}={}){return V("objstore-recovery-dialog",{workspaceId:e??"",cloudCount:typeof t=="number"?t:0,localFileNames:Array.isArray(r)?[...r]:[],localBundles:Array.isArray(n)?[...n]:[]})}function Yl(){let e=_l(a.reports);if(!e)return null;let t=Object.keys(e),n=Mt().filter(p=>be(p).commonTriage===a.shownTriage),o=xl(n),s=Ps(e,o),i=new Map,l=new Map,d=new Map;for(let p of n)for(let f of p){i.has(f.file)||i.set(f.file,new Set),i.get(f.file).add(f.severity);let h=a.triage.get(P(f))?.color??"none";l.has(f.file)||l.set(f.file,new Set),l.get(f.file).add(h),d.has(f.file)||d.set(f.file,[]),d.get(f.file).push({severity:f.severity,color:h})}let u;return E.focusedPkg?(u=t.filter(p=>(jp(p)??"__own__")===E.focusedPkg),E.showAll||(u=u.filter(p=>Sl(p,o,s)))):u=E.showAll?t:t.filter(p=>Sl(p,o,s)),{prep:{treeData:e,files:u,ownCounts:o,transitiveCounts:s,severitySets:i,colorSets:l,fileFindings:d},findingCounts:o}}function Jl(){let e=tn();if(!e)return;let t=Yl();t&&e.refreshSidebar(t.prep,{isBundleContext:a.currentView==="bundles"})}function Xl(){let e=tn();if(!e)return;let t=Yl();t&&e.refreshTopPkgs(t.prep)}var Iw={"claude-security":"Claude Security findings","codex-security":"Codex Security findings",deepsec:"DeepSec findings"};function Rw(e,t){return a.currentWorkspace?t?c`<repo-chip url="${t}"></repo-chip>`:g:e?c`<repo-chip url="${a.repoUrl}" editable ?editing="${a.repoEditing}" ?empty="${!a.repoUrl}"></repo-chip>`:t?c`<repo-chip url="${t}"></repo-chip>`:g}var Gl=["type","model","effort","exportsMode"];function Wf(e,t){return e==="type"?`analyzer: ${t??"null"}`:t??null}function Bw(e,t=Gl){let r=new Map;for(let p of e){let f={};for(let b of t)f[b]=b==="model"?gl(p.model)??null:p[b]??null;let h=t.map(b=>f[b]??"").join("|");r.has(h)||r.set(h,f)}let n=[...r.values()];if(n.length===0)return[];let o={};for(let p of t)o[p]=new Set(n.map(f=>f[p])).size===1;let s=t.filter(p=>!o[p]),i=["model","effort"].filter(p=>t.includes(p)&&o[p]),l=[...i,...t.filter(p=>!i.includes(p))],d=[],u=!1;for(let p of l)if(o[p]){let f=Wf(p,n[0][p]);f!=null&&d.push(f)}else if(!u){for(let f of n){let h=s.map(b=>Wf(b,f[b])).filter(b=>b!=null);h.length>0&&d.push(h.join(" \xB7 "))}u=!0}return d}function Fw(e,t,r,n,o){let s=new Set(a.reports.map(q=>q.source)),i=s.size===1?[...s][0]:null,l=a.currentWorkspace?z().find(q=>q.id===a.currentWorkspace):null,d=l?`Workspace: ${l.name}`:i?Iw[i]:"Findings",u=i&&Y[i]?i:"default",p=ue(Y[u]),f=c`<svg class="file-icon" 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"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><path d="M14 3v6h6"/></svg>`,h=g;t.length===1?h=c`<span class="file-chip">${p}<span>${t[0]}</span></span>`:t.length>1&&(h=c`<span class="file-chip">${f}<span>${t.length} reports</span></span>`);let b=a.reports.flatMap(q=>q.groups.flat()),y=`${e} ${`finding${e===1?"":"s"}`}`,w=i||a.currentWorkspace?Gl.filter(q=>q!=="type"):Gl,v=Bw(b,w),S=g;if(e>0){let q={};for(let Re of Mt()){let nt=Ue(Re).severity;nt&&(q[nt]=(q[nt]||0)+1)}let nr=me.filter(Re=>q[Re]>0);nr.length>0&&(S=c`<span class="status-bar" aria-hidden="true">${nr.map(Re=>{let nt=`${q[Re]} ${Re.replaceAll("_"," ")}`;return c`<span class="${`status-seg sev-${Re}`}" style="${ve({flexGrow:q[Re]})}" title="${nt}"></span>`})}</span>`)}let I=Rw(r,n),R=c`<span class="sep" aria-hidden="true"></span>`,O=a.currentView==="files",we=(o??0)>1?c`<button type="button" class="${F({"files-toggle-btn":!0,active:O})}" data-action="toggle-files" title="${O?"exit files view":"show files"}" aria-pressed="${String(O)}">${`Files: ${o}`}</button>`:g;return c`<header class="page-head"><div class="page-title"><h1>${d}${h}${I}${we}${Mw()}</h1><div class="meta-row"><span>${y}</span> ${S} ${v.length>0?c`${R}${v.map(q=>c`<span class="tag">${q}</span>`)}`:g}</div></div></header>`}function Mw(){if(N.status!=="online")return g;if(a.currentView!=="findings"&&a.currentView!=="files")return g;let e=Pw();if(!e)return g;let{workspaceId:t,fileNames:r,mode:n}=e;if(n==="single"){let k=r[0],w=dl(t,k)?"cloud":"local";return Lw({status:w,label:w,title:w==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:w==="local"?()=>Hf({workspaceId:t,items:[{kind:"report",identifier:k}]}):null})}let o=z().find(k=>k.id===t),s=o&&Array.isArray(o.bundles)?o.bundles:[],i=ep(t),l=r.filter(k=>!dl(t,k)),d=s.filter(k=>!Qu(t,k)),u=[...l.map(k=>({kind:"report",identifier:k})),...d.map(k=>({kind:"bundle",identifier:k}))];if(i===0&&u.length===0)return g;let p=i>0,f=u.length>0,h=[i>0?`${i} in cloud`:null,u.length>0?`${u.length} local-only`:null,i>0?'click "cloud" to re-check storage':null,u.length>0?`click "local" to upload ${u.length}`:null].filter(Boolean).join(" \u2014 "),b=i===0?g:c`<button type="button" class="sync-badge-chunk cloud" aria-label="${`re-check ${i} cloud object${i===1?"":"s"}`}" @click="${k=>{k.stopPropagation(),zf({workspaceId:t,cloudCount:i,localFileNames:r,localBundles:s})}}">${Yf()}<span>${i} cloud</span></button>`,m=u.length===0?g:c`<button type="button" class="sync-badge-chunk local" aria-label="${`${u.length} items not yet uploaded \u2014 open upload dialog`}" @click="${k=>{k.stopPropagation(),Hf({workspaceId:t,items:u})}}">${Gf()}<span>${u.length} local</span></button>`,y=i>0&&u.length>0?c`<span class="sync-badge-divider" aria-hidden="true"></span>`:g;return c`<div class="${`report-sync-badge${p||f?" report-sync-badge-clickable":""}`}" data-status="mixed" title="${h}">${b}${y}${m}</div>`}function Lw({status:e,label:t,title:r,onClick:n}){let o=e==="cloud"?Yf():Gf(),s=c`<span class="sync-badge-label">${t}</span>`;return typeof n!="function"?c`<span class="report-sync-badge" data-status="${e}" title="${r}" aria-label="${`report sync status: ${t}`}">${o}${s}</span>`:c`<button type="button" class="report-sync-badge report-sync-badge-clickable" data-status="${e}" title="${r}" aria-label="${`report sync status: ${t}`}" @click="${n}">${o}${s}</button>`}function Gf(){return c`<svg class="sync-badge-icon" 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"><rect x="2" y="14" width="20" height="8" rx="2" ry="2"/><line x1="6" y1="18" x2="6.01" y2="18"/><line x1="10" y1="18" x2="10.01" y2="18"/><path d="M6 14V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v10"/></svg>`}function Yf(){return c`<svg class="sync-badge-icon" 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"><path d="M17.5 19a4.5 4.5 0 1 0-1-8.9A6 6 0 0 0 5.07 13.5 4 4 0 0 0 6 21h11.5z"/></svg>`}async function Hf({workspaceId:e,items:t}){let r=t.filter(n=>n.kind==="bundle");if(r.length>0){let n=await ct(),o=new Map(n.map(s=>[s.integrity,s.name]));for(let s of r){let i=o.get(s.identifier);i&&(s.label=i)}}await Nf({workspaceId:e,items:t})}function Pw(){if(a.currentWorkspace)return{mode:"workspace",workspaceId:a.currentWorkspace,fileNames:a.reports.map(e=>e.fileName).filter(e=>typeof e=="string")};if(a.currentFile){let e=z().find(t=>Array.isArray(t.reports)&&t.reports.includes(a.currentFile));return e?{mode:"single",workspaceId:e.id,fileNames:[a.currentFile]}:null}return null}function Ow(e){return Object.values(e).some(r=>r>0)||a.filterSeverities.size>0?c`<severity-chips .counts="${e}"></severity-chips>`:g}function Nw(e){return Object.values(e).some(r=>r>0)||a.filterColors.size>0?c`<triage-filter .counts="${e}"></triage-filter>`:g}function Dw(e,t,r,n,o,s,i,l){let{showSource:d,showConfidence:u,showPriority:p,showGraphMode:f,showFileSort:h,kanbanMode:b,showRepo:m}=s;return c`<div class="toolbar"><div class="toolbar-row"><view-mode-buttons modes="${f?"table,list,grouped,focus,kanban,graph":"table,list,grouped,focus,kanban"}"></view-mode-buttons><findings-sort ?show-file="${h}" ?show-confidence="${u}" ?show-priority="${p}"></findings-sort>${d?c`<div class="sep"></div><source-filter></source-filter>`:g} ${u?c`<div class="sep"></div><conf-filter></conf-filter>`:g} ${b?g:c`<triage-selector .counts="${r}"></triage-selector>`}</div><div class="toolbar-row sev-row">${Ow(n)} ${i.length>1?c`<analyzer-select .options="${i}"></analyzer-select>`:g} ${m&&l.length>1?c`<repo-filter .options="${l}"></repo-filter>`:g} ${Nw(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}var yo=null,jf=0,tr=null,ei=new Map;function wo(e,t=!1,r=null){let n=en(e);return ei.set(n,{group:e,inGroup:t}),t?r?c`<finding-card data-gid="${n}" in-group context="${r}"></finding-card>`:c`<finding-card data-gid="${n}" in-group></finding-card>`:r?c`<finding-card data-gid="${n}" context="${r}"></finding-card>`:c`<finding-card data-gid="${n}"></finding-card>`}var Uw={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};function Vf(e,t={}){let{variant:r="kanban",active:n=!1}=t,o=be(e),s=Te(e),i=$l(et(s.description,s))||"(untitled finding)",l=r==="kanban",d={"kanban-card":!0,"has-conflict":o.hasConflict,"focus-side-card":!l,active:!l&&n};!o.hasConflict&&o.commonColor&&(d[`mark-${o.commonColor}`]=!0);let u=parseInt(s.line,10),p=Number.isFinite(u)?`:${u}`:"",f=Uw[s.severity]??"?",h=c`<span class="${`kanban-badge sev-${s.severity}`}" title="${Zr(s.severity)}" aria-label="${Zr(s.severity)}">${f}</span> <span class="kanban-title">${i}</span><div class="kanban-meta"><span class="kanban-loc">${s.file}${p}</span> ${s.confidence===void 0||s.confidence===null?g:c`<span class="kanban-conf" title="${`Confidence ${s.confidence}/10`}">${s.confidence}</span>`}</div>`;return l?c`<div class="${F(d)}" data-gid="${Ae(e)}" data-kanban-source draggable="true" role="button" tabindex="0" aria-label="${`Open details for ${i}`}">${h}</div>`:c`<div class="${F(d)}" data-gid="${Ae(e)}" data-focus-select role="button" tabindex="0" aria-current="${n?"true":"false"}" aria-label="${`Focus on ${i}`}">${h}</div>`}function zw(e){let{content:t,line:r,highlighted:n}=e,o=t.split(`
|
|
48
|
-
`).length,s=String(o).length;return c`<div class="focus-code-lines" style="${ve({"--lineno-width":`${s}ch`})}"><aside class="focus-code-gutter" aria-hidden="true">${Array.from({length:o},(i,l)=>{let d=l+1;return c`<div class="${F({"focus-code-lineno":!0,"focus-code-line-active":d===r})}" data-focus-code-line="${d}">${d}</div>`})}</aside><pre class="focus-code-source"><code>${typeof n=="string"?ue(n):t}</code></pre></div>`}function Ww(e){if(!e)return g;let t=be(e),r={"kanban-detail-modal":!0,"has-conflict":t.hasConflict};return!t.hasConflict&&t.commonColor&&(r[`mark-${t.commonColor}`]=!0),c`<div class="kanban-detail-backdrop"><div class="kanban-detail-dim"></div><div class="${F(r)}" role="dialog" aria-modal="true"><button type="button" class="kanban-detail-close" title="Close details" aria-label="Close details">×</button><div class="kanban-detail-body">${wo(e)}</div></div></div>`}function Hw(e){if(a.viewMode==="table"){let r=a.sortBy==="file"?[...e].toSorted((s,i)=>{let l=Ue(s),d=Ue(i);return l.file.localeCompare(d.file)||parseInt(l.line,10)-parseInt(d.line,10)}):e;if(r.length===0)return g;let n=a.tableSelectedGid?r.find(s=>Ae(s)===a.tableSelectedGid):null;return yo=r,c`<div class="${n?"findings-table-layout open":"findings-table-layout"}"><div class="findings-table-list"><div class="finding-table-slot"></div></div>${n?c`<aside class="findings-table-details" id="findings-table-details"><header class="findings-table-details-bar"><span class="findings-table-details-label">Details</span> <button type="button" class="findings-table-details-close" data-table-deselect title="Close details" aria-label="Close details">×</button></header><div class="findings-table-details-body">${wo(n)}</div></aside>`:g}</div>`}if(a.viewMode==="focus"){if(e.length===0)return g;let r=a.focusGid?e.findIndex(d=>Ae(d)===a.focusGid):-1;r<0&&(r=Math.min(jf,e.length-1),r<0&&(r=0)),jf=r;let n=e[r];a.focusCodeTick;let o=Of(n),s=o?"focus-main with-code":"focus-main",i=r===0,l=r===e.length-1;return c`<div class="focus-view"><div class="${s}"><div class="focus-pane focus-pane-card"><div class="focus-card-wrapper">${wo(n,!1,"focus")}</div></div>${o?c`<div class="focus-pane focus-pane-code">${o.loading?c`<div class="focus-code-empty">Loading source…</div>`:c`<header class="focus-code-bar" title="${o.file}"><span class="focus-code-file">${o.file}</span> ${o.line?c`<span class="focus-code-line">:${o.line}</span>`:g}</header><div class="focus-code-body">${zw(o)}</div>`}</div>`:g}</div><aside class="focus-sidebar" aria-label="Up next"><div class="focus-sidebar-header"><span class="label">Up next</span><div class="focus-nav"><button type="button" class="focus-nav-btn" data-focus-nav="prev" ?disabled="${i}" title="Previous finding (←)" aria-label="Previous finding"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg></button> <span class="count">${r+1} / ${e.length}</span> <button type="button" class="focus-nav-btn" data-focus-nav="next" ?disabled="${l}" title="Next finding (→)" aria-label="Next finding"><svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3 11 8l-5 5"/></svg></button></div></div><div class="focus-sidebar-body">${J(e,d=>Ae(d),d=>Vf(d,{variant:"focus",active:Ae(d)===Ae(n)}))}</div></aside></div>`}if(a.viewMode==="kanban"){let r=[{key:"untriaged",label:"Untriaged",target:"untriaged"},{key:"fixed",label:"Fixed",target:"fixed"},{key:"invalid",label:"Invalid",target:"invalid"},{key:"deleted",label:"Deleted",target:"deleted"},{key:"ignored",label:"Ignored",target:"ignored"}],n=new Map(r.map(s=>[s.key,[]]));for(let s of e){let l=be(s).commonTriage??"untriaged",d=n.get(l);d&&d.push(s)}let o=a.kanbanPopoverGid?e.find(s=>Ae(s)===a.kanbanPopoverGid):null;return c`<div class="kanban-board">${J(r,s=>s.key,s=>{let i=n.get(s.key);return c`<div class="${`kanban-column kanban-column-${s.key}`}" data-kanban-target="${s.target}"><div class="kanban-column-header"><span class="label">${s.label}</span> <span class="count">${i.length}</span></div><div class="kanban-column-body">${i.length===0?c`<div class="kanban-empty">No ${s.label.toLowerCase()} findings.</div>`:J(i,l=>Ae(l),l=>Vf(l))}</div></div>`})}</div>${Ww(o)}`}if(a.viewMode==="grouped"){let r=new Map;for(let o of e){let s=Ue(o).file;r.has(s)||r.set(s,[]),r.get(s).push(o)}let n=a.sortBy==="file"?[...r.keys()].toSorted():[...r.keys()];return c`${J(n,o=>o,o=>{let s=a.sortBy==="file"?r.get(o).toSorted((l,d)=>parseInt(Ue(l).line,10)-parseInt(Ue(d).line,10)):r.get(o),i=Ue(s[0]);return c`<div class="file-group"><div class="file-header"><span>${ml(o,i?.repo?.github,i?._repoFallback??a.repoUrl)}</span> <span class="count">${s.length}</span></div><div class="file-body">${J(s,l=>en(l),l=>wo(l))}</div></div>`})}`}let t=a.sortBy==="file"?[...e].toSorted((r,n)=>{let o=Ue(r),s=Ue(n);return o.file.localeCompare(s.file)||parseInt(o.line,10)-parseInt(s.line,10)}):e;return c`${J(t,r=>en(r),r=>{let n=Te(r),o=$p(n.file,n.line,n.repo?.github,n._repoFallback??a.repoUrl),s=wr(n),i=yr(n),l=r.length>1;return c`<div class="${F({"flat-group":!0,"multi-case":l})}"><div class="flat-group-loc"><span class="file">${ml(n.file,n.repo?.github,n._repoFallback??a.repoUrl)}</span> ${o===g?g:c`<span class="line-num">${o}</span>`} ${i?c`<span class="meta">${i}</span>`:g} ${s?c`<span class="run-meta">${s}</span>`:g}</div>${wo(r,!0)}</div>`})}`}function jw(){let e=document.querySelector("#bundle-source-overlay-slot");e&&W(Af(),e)}var Kf=null;function $(){let e=Kf;if(Kf=a.currentView,e!==null&&e!==a.currentView&&typeof document.startViewTransition=="function"&&!matchMedia("(prefers-reduced-motion: reduce)").matches){document.startViewTransition(()=>qf());return}qf()}function qf(){if(jw(),wp(a.reports),a.currentView==="bundles")if((a.bundles??[]).length===0)a.currentView="findings";else{let x=document.querySelector("#bundles-slot");if((!x||!C.contains(x)||C.firstElementChild!==x)&&(C.innerHTML='<div id="bundles-slot"></div>',x=document.querySelector("#bundles-slot")),x&&W(Rf(a.bundles),x),a.selectedBundle&&a.bundleDetailsTab==="graph"&&a.bundleDetails&&(a.bundleDetails.json||a.bundleDetails.bundle)){let B=document.querySelector("#bundle-graph-slot");if(B){let fe=_f(a.bundleDetails);if(fe){Sf(fe);let Se=!fe.hasEdges,bi=xf(a.bundleDetails);Cl(B,fe,{hideAllFiles:Se,triageCounts:bi,triageStates:["fixed","invalid","deleted"]},Qs,Zs)}}}if(a.selectedBundle&&a.bundleDetailsTab==="terminal"&&a.bundleDetails&&(a.bundleDetails.json||a.bundleDetails.bundle)){let B=document.querySelector("#bundle-terminal-slot");B&&Wp(B,a.bundleDetails)}C.classList.add("active"),Ee.classList.add("hidden"),document.title="DeepView \u2014 bundles";return}if(a.currentView==="packages"){let x=document.querySelector("#packages-slot");(!x||!C.contains(x)||C.firstElementChild!==x)&&(C.innerHTML='<div id="packages-slot"></div>',x=document.querySelector("#packages-slot")),x&&W(Bf(),x),C.classList.add("active"),Ee.classList.add("hidden"),document.title="DeepView \u2014 packages";return}if(a.currentView==="repositories"){let x=document.querySelector("#repositories-slot");(!x||!C.contains(x)||C.firstElementChild!==x)&&(C.innerHTML='<div id="repositories-slot"></div>',x=document.querySelector("#repositories-slot")),x&&W(Lf(),x),C.classList.add("active"),Ee.classList.add("hidden"),document.title="DeepView \u2014 repositories";return}if(a.reports.length===0)return;let e=Mt(),t={fixed:0,invalid:0,deleted:0,ignored:0};for(let x of e){let B=be(x).commonTriage;B&&t[B]++}let r=a.viewMode==="kanban",n=r?e:e.filter(x=>be(x).commonTriage===a.shownTriage),s=[...new Set(a.reports.map(x=>x.type))].join(", "),i=a.reports.map(x=>x.fileName),l={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},d={red:0,blue:0,green:0,gray:0,none:0};for(let x of n){let B=new Set(x.map(Se=>Se.severity));for(let Se of B)l[Se]=(l[Se]||0)+1;let fe=new Set(x.map(Se=>a.triage.get(P(Se))?.color??"none"));for(let Se of fe)d[Se]=(d[Se]||0)+1}let u=n.length>0&&n.every(x=>x.every(B=>B.confidence!==void 0||B.critical===!0)),p=e.some(x=>x.some(B=>B.priority!==void 0)),f=e.some(x=>x.some(B=>Jt(B.file))),h=new Set;for(let x of e)for(let B of x)h.add(B.file);let b=h.size>1,m=e.some(x=>x.some(B=>!B.repo?.github&&!Jt(B.file))),y=new Set;for(let x of e)for(let B of x)!Jt(B.file)&&B.repo?.github&&y.add(B.repo.github);let k=y.size===1?[...y][0]:null,w=new Set;for(let x of e)for(let B of x)w.add(B._analyzer??null);let v=Object.keys(vl),S=[...w].toSorted((x,B)=>{let fe=x==null?1/0:v.indexOf(x)===-1?v.length:v.indexOf(x),Se=B==null?1/0:v.indexOf(B)===-1?v.length:v.indexOf(B);return fe!==Se?fe-Se:String(x??"").localeCompare(String(B??""))});if(a.filterAnalyzer){let x=a.filterAnalyzer===oo?null:a.filterAnalyzer;w.has(x)||(a.filterAnalyzer="")}let I=new Set;for(let x of e)for(let B of x)I.add(yl(B));let R=[...I].toSorted((x,B)=>x==null&&B==null?0:x==null?1:B==null?-1:x.localeCompare(B));if(a.filterRepo){let x=a.filterRepo===so?null:a.filterRepo;I.has(x)||(a.filterRepo="")}!f&&a.filterSources.size>0&&a.filterSources.clear(),u||(a.filterConfMin=0,a.filterConfMax=10,(a.sortBy==="confidence-desc"||a.sortBy==="confidence-asc")&&(a.sortBy="severity")),!p&&(a.sortBy==="priority-desc"||a.sortBy==="priority-asc")&&(a.sortBy="severity"),!b&&a.sortBy==="file"&&(a.sortBy="severity");let O=Ap(Cp(n)),we=_l(a.reports),q=we?Object.keys(we).length:0,nr=q>1;!nr&&a.currentView==="files"&&(a.currentView="findings"),!nr&&a.viewMode==="graph"&&(a.viewMode="table");let Re=Fw(e.length,i,m,k,q);if(a.currentView==="files"){let x=xl(e),B=document.querySelector("#header-slot"),fe=document.querySelector("#tree-view-slot");(!B||!fe||!C.contains(B)||!C.contains(fe))&&(C.innerHTML='<div id="header-slot"></div><div id="tree-view-slot"></div>',B=document.querySelector("#header-slot"),fe=document.querySelector("#tree-view-slot")),B&&W(Re,B),fe&&W(Dp(we,x),fe),C.classList.add("active"),Ee.classList.add("hidden"),document.title=`DeepView \u2014 ${s||"no analyzer"}`;return}let nt=a.viewMode==="table"&&a.tableSelectedGid&&O.some(x=>Ae(x)===a.tableSelectedGid),Ar=null;a.viewMode==="graph"&&we&&(Ar=Yl(),Ar||(a.viewMode="table"));let Pt=!!Ar,pt="findings-content";nt&&(pt+=" with-details"),Pt&&(pt+=" with-graph"),r&&(pt+=" with-kanban"),a.viewMode==="focus"&&(pt+=" with-focus");let _=g,K=g,Z=g;Pt||(_=Dw(O.length,n.length,t,l,d,{showSource:f,showConfidence:u,showPriority:p,showGraphMode:nr,showFileSort:b,kanbanMode:r,showRepo:!!a.currentWorkspace},S,R),a.shownTriage&&n.length===0?K=c`<p style="color:var(--muted);margin:1rem 0">No ${a.shownTriage} findings.</p>`:O.length===0&&n.length>0?K=c`<p style="color:var(--muted);margin:1rem 0">No findings match the current filters.</p>`:n.length===0&&(K=e.length>0?c`<p style="color:var(--green)">All ${s} issues triaged.</p>`:c`<p style="color:var(--green)">No ${s} issues found.</p>`),yo=null,ei.clear(),Z=Hw(O));let ie=!!(tr&&tr.isConnected);ie&&tr.remove();let pe=document.querySelector("#header-slot"),te=C.querySelector(":scope > .findings-content"),We=te&&te.querySelector(":scope > #findings-graph-slot"),Ye=te&&te.querySelector(":scope > #findings-body-slot"),mg=te&&(We?"graph":Ye?"body":null)===(Pt?"graph":"body");if(!pe||!te||!C.contains(pe)||!C.contains(te)||!mg){let x=Pt?'<div id="findings-graph-slot"></div>':'<div id="toolbar-slot"></div><div id="empty-state-slot"></div><div id="findings-body-slot"></div>';C.innerHTML=`<div id="header-slot"></div><div class="${pt}">${x}</div>`,pe=document.querySelector("#header-slot"),te=C.querySelector(":scope > .findings-content")}else te.className!==pt&&(te.className=pt);pe&&W(Re,pe);let rd=document.querySelector("#toolbar-slot");rd&&W(_,rd);let nd=document.querySelector("#empty-state-slot");nd&&W(K,nd);let un=document.querySelector("#findings-body-slot");if(un&&(yo||ie)){let x=document.createElement("div");x.id="findings-body-slot",un.replaceWith(x),un=x}if(un&&W(Z,un),Ar){let x=document.querySelector("#findings-graph-slot");if(x){let B=c`<view-mode-buttons modes="table,list,grouped,focus,kanban,graph"></view-mode-buttons>`,fe={fixed:0,invalid:0,deleted:0,ignored:0};for(let bi of Mt()){let yi=be(bi).commonTriage;yi&&fe[yi]++}let Se={extraTopRow:B,triageCounts:fe,triageStates:["fixed","invalid","deleted","ignored"]};Cl(x,Ar.prep,Se,Jl,Xl)}}if(yo){let x=C.querySelector(".finding-table-slot");x&&(tr||(tr=document.createElement("finding-table")),tr.items=yo,tr.selectedGid=a.tableSelectedGid,x.replaceWith(tr))}if(ei.size>0)for(let x of C.querySelectorAll("finding-card")){let B=ei.get(x.dataset.gid);B&&(x.group=B.group)}C.classList.add("active"),Ee.classList.add("hidden"),document.title=`DeepView \u2014 ${s||"no analyzer"}`}var Ql=class extends T{static styles=[...T.styles,A(Ze)];static properties={workspace:{attribute:!1},_password:{state:!0},_confirm:{state:!0},_noPassword:{state:!0},_includeBundleBytes:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspace=null,this._password="",this._confirm="",this._noPassword=!1,this._includeBundleBytes=!1,this._busy=!1,this._error="",this._settled=!1}_finish(t){this._settled||(this._password="",this._confirm="",this.workspace=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_onNoPasswordToggle=t=>{this._noPassword=t.target.checked,this._error="",this._noPassword&&(this._password="",this._confirm="")};_onIncludeBundleBytesToggle=t=>{this._includeBundleBytes=t.target.checked,this._error=""};_canExport(){return this._busy?!1:this._noPassword?!0:(this._password??"").length>0&&this._password===this._confirm}_onExport=async()=>{if(this._canExport()){if(!this.workspace){this._error="No workspace selected.";return}this._busy=!0,this._error="";try{let{blob:t,filename:r}=await rl(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;Fr(t,r),this._finish({ok:!0})}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onExport())};_body(){let t=!this._password||!this._confirm||this._password===this._confirm,r=Array.isArray(this.workspace?.bundles)?this.workspace.bundles.length:0;return c`<p class="nwd-note">The export file carries this workspace's reports, triage state, comments, fixes, references to attached bundles (integrities only by default), and its private key. Encrypting the file with a password ensures only those with the password can attach the workspace after download.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw-confirm" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-optout"><input type="checkbox" .checked="${this._noPassword}" @change="${this._onNoPasswordToggle}"> <span>Export without password (not recommended)</span></label> ${r>0?c`<label class="wsl-optout"><input type="checkbox" .checked="${this._includeBundleBytes}" @change="${this._onIncludeBundleBytesToggle}"> <span>Include bundle bytes (${r} bundle${r===1?"":"s"}; significantly larger file)</span></label>`:g} ${this._noPassword?c`<p class="wsl-error wsl-warning">Anyone who obtains this file can attach the workspace and read every report, triage decision, comment, and fix. Only opt out when you control where the file goes.</p>`:g} ${this._error?c`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${!this._noPassword&&!t?c`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canExport()}" @click="${this._onExport}">${this._busy?"Exporting\u2026":this._noPassword?"Export without password":"Export"}</button></footer>`}render(){return c`<dialog @close="${this._onClose}"><header><h3>Export workspace</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",Ql);function Jf({workspace:e}={}){return new Promise((t,r)=>{let n=document.createElement("workspace-export-dialog");n.workspace=e??null,n.addEventListener("resolve",o=>{n.remove(),t(o.detail)}),n.addEventListener("modal-conflict",o=>{n.workspace=null,n.remove(),r(ht(o.detail?.cause))}),document.body.append(n)})}async function Xf(e){await Jf({workspace:e})}var Zl=class extends T{static properties={_value:{state:!0}};constructor(){super(),this._value=""}_onInput=t=>{this._value=t.target.value};_onCreate=()=>{let t=(this._value??"").trim();t&&this._finish(t)};_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onCreate())};render(){let t=(this._value??"").trim().length>0;return c`<dialog @close="${this._onClose}"><header><h3>New workspace</h3></header><input type="text" class="nwd-input" placeholder="Workspace name" maxlength="200" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><p class="nwd-note">Workspace triage is synchronized by default over an end-to-end encrypted channel. Triage on unattached reports stays local to this browser.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onCreate}">Create</button></footer></dialog>`}};customElements.define("new-workspace-dialog",Zl);function Qf(){return V("new-workspace-dialog")}var ec=class extends T{static styles=[...T.styles,A(ye)];static properties={workspaceName:{type:String},reportCount:{type:Number},bundleCount:{type:Number},orphanedTriage:{type:Number},sharedTriage:{type:Number},_mode:{state:!0},_triage:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceName="",this.reportCount=0,this.bundleCount=0,this.orphanedTriage=0,this.sharedTriage=0,this._mode="detach",this._triage="keep",this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let r=this.reportCount>0?this._mode:"detach",n=r==="delete"&&this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,mode:r,triage:n})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onModeChange=t=>{this._mode=t.target.value};_onTriageChange=t=>{this._triage=t.target.value};_triageSection(){if(this._mode!=="delete"||this.reportCount===0)return"";let t=this.orphanedTriage,r=this.sharedTriage;return t===0&&r===0?c`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?c`<p class="lwd-note">Local triage on ${this.reportCount===1?"this report":"these reports"} is also attached to ${r===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:c`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="lwd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){let t=this.reportCount,r=this.bundleCount,n=t>0,o=t===1?"report":"reports",s=t===1?"it":"them",i=t===1?"stays":"stay",l=t===1?"is removed":"are removed",d=r>0?c`<p class="lwd-note">${r===1?"One bundle is":`${r} bundles are`} also attached. ${r===1?"It":"They"} will become unfiled — the bundle bytes stay on this device either way (delete bundles manually from the Bundles list if you want them gone).</p>`:"",u=n?c`<fieldset class="lwd-choice"><legend>What should happen to the <strong>${t}</strong> attached ${o}?</legend><label class="lwd-option"><input type="radio" name="lwd-mode" value="detach" ?checked="${this._mode==="detach"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Move ${s} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${i} in this browser as unattached ${o}.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-mode" value="delete" ?checked="${this._mode==="delete"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Delete ${s} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${l} from this browser.</span></span></label></fieldset>`:r>0?c`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:c`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return c`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${u} ${d} ${this._triageSection()}<ul class="lwd-list"><li>Workspace synchronization data stays on the sync server — peers (and your other devices) keep their copy.</li></ul><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Leave</button></footer></dialog>`}};customElements.define("leave-workspace-dialog",ec);function Zf({name:e,reportCount:t,bundleCount:r,triageImpact:n}={}){return V("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:r??0,orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0})}var tc=class extends T{static styles=[...T.styles,A(Ze)];static properties={workspaceId:{type:String},initialName:{type:String},privateKeyBase64:{type:String},_name:{state:!0},_password:{state:!0},_confirm:{state:!0},_url:{state:!0},_busy:{state:!0},_error:{state:!0},_copied:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.initialName="",this.privateKeyBase64="",this._name="",this._password="",this._confirm="",this._url="",this._busy=!1,this._error="",this._copied=!1,this._settled=!1}beforeOpen(){this._name=this.initialName}focusInitial(){this.renderRoot.querySelector('input[data-role="name"]')?.focus()}_finish(){this._settled||(this._copiedTimer&&(clearTimeout(this._copiedTimer),this._copiedTimer=null),this._password="",this._confirm="",this._url="",this.privateKeyBase64="",super._finish(null))}_onClose=()=>this._finish();_onCancel=()=>this._finish();_onNameInput=t=>{this._name=t.target.value};_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_canGenerate(){return(this._name??"").trim().length>0&&(this._password??"").length>0&&this._password===this._confirm&&!this._busy}_onGenerate=async()=>{if(this._canGenerate()){this._busy=!0,this._error="";try{let t=await sl({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=al(t),this._password="",this._confirm=""}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onCopy=async()=>{if(this._url){this._error="";try{if(await navigator.clipboard.writeText(this._url),this._settled)return;this._copied=!0,this._copiedTimer&&clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied=!1,this._copiedTimer=null},1500)}catch{if(this._settled)return;this._error="Copy failed \u2014 select the link and copy it manually."}}};_onKeydown=t=>{t.key==="Enter"&&!this._url&&(t.preventDefault(),this._onGenerate())};_body(){return this._url?c`<p class="nwd-note">Anyone with the link <strong>and</strong> the password can attach this workspace. Share them through separate channels.</p><label class="wsl-field"><span>Share link</span> <textarea class="wsl-link" readonly="readonly" rows="3" @focus="${t=>t.target.select()}">${this._url}</textarea></label> ${this._error?c`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Close</button> <button type="button" class="primary" @click="${this._onCopy}">${this._copied?"Copied":"Copy link"}</button></footer>`:c`<label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw-confirm" maxlength="1024" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label><p class="nwd-note">The link carries the workspace's identity (id, name, and private key) so the recipient joins the same sync chain. Triage, reports, and comments are not included. The link decrypts with the password above; without it the link is useless.</p>${this._error?c`<p class="wsl-error" role="alert">${this._error}</p>`:g} ${this._password&&this._confirm&&this._password!==this._confirm?c`<p class="wsl-error" role="alert">Passwords don't match.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canGenerate()}" @click="${this._onGenerate}">${this._busy?"Generating\u2026":"Generate link"}</button></footer>`}render(){return c`<dialog @close="${this._onClose}"><header><h3>${this._url?"Workspace share link":"Share workspace by link"}</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-share-link-dialog",tc);function eh({id:e,name:t,privateKeyBase64:r}={}){return new Promise((n,o)=>{let s=document.createElement("workspace-share-link-dialog");s.workspaceId=e??"",s.initialName=t??"",s.privateKeyBase64=r??"",s.addEventListener("resolve",()=>{s.remove(),n()}),s.addEventListener("modal-conflict",i=>{s.privateKeyBase64="",s.remove(),o(ht(i.detail?.cause))}),document.body.append(s)})}var rc=class extends T{static styles=[...T.styles,A(ye)];static properties={reportName:{type:String},orphanedTriage:{type:Number},sharedTriage:{type:Number},inRemote:{type:Boolean},_triage:{state:!0}};constructor(){super(),this.reportName="",this.orphanedTriage=0,this.sharedTriage=0,this.inRemote=!1,this._triage="keep"}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let r=this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,triage:r})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onTriageChange=t=>{this._triage=t.target.value};_remoteNotice(){return this.inRemote?c`<p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}_triageSection(){let t=this.orphanedTriage,r=this.sharedTriage;return t===0&&r===0?c`<p class="lwd-note">No local triage is attached to this report.</p>`:t===0?c`<p class="lwd-note">Local triage on this report is also attached to ${r===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:c`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="drd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="drd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){return c`<dialog @close="${this._onClose}"><header><h3>Delete report</h3></header><p class="lwd-body">Delete <strong>"${this.reportName}"</strong>?</p>${this._remoteNotice()} ${this._triageSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-report-dialog",rc);function th({name:e,triageImpact:t,inRemote:r}={}){return V("delete-report-dialog",{reportName:e??"",orphanedTriage:t?.orphanedCount??0,sharedTriage:t?.sharedCount??0,inRemote:!!r})}var nc=class extends T{static styles=[...T.styles,A(ye)];static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){this._settled||super._finish({confirmed:!!t})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_remoteNotice(){return this.inRemote?c`<p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:g}render(){return c`<dialog @close="${this._onClose}"><header><h3>Delete bundle</h3></header><p class="lwd-body">Delete <strong>"${this.bundleName}"</strong>?</p>${this._remoteNotice()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-bundle-dialog",nc);function rh({name:e,inRemote:t}={}){return V("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var oc=class extends T{static styles=[...T.styles,A(ye)];static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){this._settled||super._finish({confirmed:!!t})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);render(){return c`<dialog @close="${this._onClose}"><header><h3>Detach bundle</h3></header><p class="lwd-body">Detach <strong>"${this.bundleName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The bundle bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-bundle-dialog",oc);function nh({name:e,workspaceName:t}={}){return V("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var sc=class extends T{static styles=[...T.styles,A(ye)];static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){this._settled||super._finish({confirmed:!!t})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);render(){return c`<dialog @close="${this._onClose}"><header><h3>Detach report</h3></header><p class="lwd-body">Detach <strong>"${this.reportName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The report bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-report-dialog",sc);function oh({name:e,workspaceName:t}={}){return V("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var ic=class extends T{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onConfirm=()=>this._finish(!0);render(){return c`<dialog @close="${this._onClose}"><header><h3>Changes might not be saved</h3></header><p class="nwd-intro">Triage works in this tab, but this browser <strong>can't save its sync state right now</strong> — so changes that haven't reached the server could be lost if you reload the page.</p><p class="nwd-intro">This usually means the browser's storage is full, or another tab is running a newer version of the app (to avoid overwriting that newer version's data, this tab has paused saving).</p><p class="nwd-note">Free up space if storage is full, and close or reload other tabs of this app to the same version. This notice clears on its own once saving works again.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("persistence-degraded-dialog",ic);function sh(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog"),r=n=>{t.remove(),e({shown:n})};t.addEventListener("resolve",()=>r(!0)),t.addEventListener("modal-conflict",()=>r(!1)),document.body.append(t)})}var rr;function Vw(){return rr||(rr=document.createElement("div"),rr.id="styled-tooltip",document.body.append(rr),rr)}var _r=null,vo=null,ch=0,dh=0,ih=!1;function Kw(){ih||(ih=!0,document.addEventListener("mousemove",e=>{ch=e.clientX,dh=e.clientY},{passive:!0}))}Kw();var qw=100,Gw=14,Yw=8,ah=8;function Jw(e,{placement:t="cursor"}={}){let r=Vw();if(_r===e)return;let n=e.dataset.tooltip??"";if(n){if(r.textContent=n,t==="right"){let o=e.getBoundingClientRect();r.style.top=`${Math.round(o.top+o.height/2)}px`,r.style.left=`${Math.round(o.right+Yw)}px`,r.style.transform="translateY(-50%)"}else{r.style.transform="none",r.style.top=`${dh+Gw}px`,r.style.left="0px",r.classList.add("visible");let o=r.offsetWidth,s=window.innerWidth-o-ah,i=Math.max(ah,Math.min(ch,s));r.style.left=`${Math.round(i)}px`}r.classList.add("visible"),_r=e}}function ko(){clearTimeout(vo),vo=null,rr&&rr.classList.remove("visible"),_r=null}function ac(e,{gate:t,placement:r}={}){t&&!t(e)||(clearTimeout(vo),vo=setTimeout(()=>{Jw(e,{placement:r})},qw))}var lh=!1;function uh(){lh||(lh=!0,document.body.addEventListener("mouseover",e=>{let t=e.target.closest("[data-tooltip]");!t||t===_r||(ko(),ac(t))}),document.body.addEventListener("mouseout",e=>{!_r&&!vo||_r&&_r.contains(e.relatedTarget)||ko()}))}var ri=null,se=null,ti=null;uh();function Xw(){return yt().size}function Qw(){return gr().size}var $o=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,pc="application/x-deepview-report",cc="application/x-deepview-source-ws",xo="application/x-deepview-bundle",ni=!1,oi=!1,Zw={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec"},ph=["default","claude-security","codex-security","deepsec"],Sr="";function fh(e,t={}){let n=`file-item${e===a.currentFile&&(a.currentView==="findings"||a.currentView==="files")?" current":""}${t.indented?" indented":""}`,o=Ne(e),s=Nn(e),i=Y[Ke(e)]??Y.default;return c`<li class="${n}" data-file="${e}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${ue(i)}<span class="file-label">${o}</span>${s===void 0?g:c`<span class="file-count">${s}</span>`}</button></li>`}function ev(e,t={}){let r=`file-group-header${t.dropTarget?" default-reports":""}`;return c`<li class="${r}" data-default-reports="${t.dropTarget?"true":g}"><span class="group-label">${e}</span></li>`}var tv=c`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8h9"/></svg>`;function rv(){return c`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span><span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" title="Create a new workspace" aria-label="Create a new workspace">${tv}</button></span></li>`}function nv(){return c`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}var ov=c`${ue(rn)}`;function hh(e,t={}){let{integrity:r,name:n}=e,o=a.selectedBundle===r&&a.currentView==="bundles",i=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return c`<li class="${i}" data-bundle-integrity="${r}" data-workspace-id="${t.workspaceId??g}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${n}
|
|
49
|
-
${r}`}">${ov}<span class="file-label">${n}</span></button></li>`}function sv(e,t){let r=e.slice(0,15);return c`<li class="file-item indented bundle-item bundle-missing" data-bundle-integrity="${e}" data-workspace-id="${t}" data-tooltip="Bundle bytes not on this device — drop the matching bundle to attach."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${r}…</em></span></span></li>`}function iv(e,t){return c`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${Ne(e)}</em></span></span></li>`}var av=c`${ue(Os)}`,lv=c`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8M5 7l3 3 3-3M3 13h10"/></svg>`,cv=c`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,dv=c`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;function uv(e){let r=`file-item workspace-item${a.currentWorkspace===e.id&&(a.currentView==="findings"||a.currentView==="files")?" current":""}`;return c`<li class="${r}" data-workspace-id="${e.id}"><button type="button" class="file-name">${av}<span class="file-label" .textContent="${e.name}"></span></button><button type="button" class="workspace-share" data-action="share-workspace" title="Share by link" aria-label="Share workspace by link">${dv}</button><button type="button" class="workspace-export" data-action="export-workspace" title="Export workspace" aria-label="Export workspace">${lv}</button><button type="button" class="workspace-leave" data-action="leave-workspace" title="Leave workspace" aria-label="Leave workspace">${cv}</button></li>`}function cn(e){return Sr?Ne(e).toLowerCase().includes(Sr):!0}async function j(){await Ya(),wt().catch(()=>{});let e=await le(),t=z(),r=await ct();if(a.bundles=r,!se)return;ri.classList.remove("empty");let n=new Set(e),o=new Set;for(let h of t)for(let b of h.reports)n.has(b)&&o.add(b);let s=new Map(r.map(h=>[h.integrity,h])),i=new Set;for(let h of t)for(let b of h.bundles)s.has(b)&&i.add(b);let l=new Map;for(let h of ph)l.set(h,[]);for(let h of e){if(o.has(h)||!cn(h))continue;let b=Ke(h);l.has(b)||l.set(b,[]),l.get(b).push(h)}let d=t.filter(h=>!Sr||h.name.toLowerCase().includes(Sr)||h.reports.some(b=>cn(b))?!0:h.bundles.some(b=>{let m=s.get(b);return m&&cn(m.name)})),u=r.filter(h=>!i.has(h.integrity)&&cn(h.name));W(c`${rv()} ${J(d,h=>h.id,h=>{let b=[],m=[];for(let w of h.reports)cn(w)&&(n.has(w)?b.push(w):m.push(w));let y=[],k=[];for(let w of h.bundles){let v=s.get(w);v?(!Sr||cn(v.name))&&y.push(v):Sr||k.push(w)}return c`${uv(h)} ${b.map(w=>fh(w,{indented:!0,workspaceId:h.id}))} ${m.map(w=>iv(w,h.id))} ${y.map(w=>hh(w,{workspaceId:h.id}))} ${k.map(w=>sv(w,h.id))}`})} ${ph.map(h=>{let b=l.get(h)??[],m=h==="default";return b.length===0&&!(m&&ni)?null:c`${ev(Zw[h]??h,{dropTarget:m})} ${b.map(y=>fh(y))}`})} ${u.length>0||oi?nv():null} ${J(u,h=>h.integrity,h=>hh(h))}`,ti);let p=se.querySelector('sidebar-view-button[kind="packages"]');p&&(p.count=Xw());let f=se.querySelector('sidebar-view-button[kind="repositories"]');f&&(f.count=Qw()),si(),_a(e,()=>{j()})}ge(()=>{j()});async function pv(e){if(e.target.closest('[data-action="go-home"]')){await pf();return}let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing"))return;let d=t.dataset.bundleIntegrity;if(a.selectedBundle===d&&a.currentView==="bundles")return;a.currentView="bundles",a.selectedBundle=d,a.bundleDetails=null,a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.bundleCodeSearchQuery="",a.bundleCodeSearchMode="files",a.bundleDetailsTab="overview",E.showAll=!0,a.shownTriage=null,ln(d),$(),j(),Qt(d);return}let r=e.target.closest("sidebar-view-button");if(r){let d=r.getAttribute("kind");(d==="packages"||d==="repositories")&&(a.currentView=d,$(),j());return}if(e.target.closest('[data-action="new-workspace"]')){let d=await Qf();d&&(await Pl(),await Oa(d),j());return}let n=e.target.closest('[data-action="share-workspace"]');if(n){let d=n.closest("[data-workspace-id]"),u=d?z().find(p=>p.id===d.dataset.workspaceId):null;u&&eh({id:u.id,name:u.name,privateKeyBase64:u.privateKey}).catch(p=>alert(`Failed to open share dialog: ${p.message}`));return}let o=e.target.closest('[data-action="export-workspace"]');if(o){let d=o.closest("[data-workspace-id]"),u=d?z().find(p=>p.id===d.dataset.workspaceId):null;u&&Xf(u).catch(p=>alert(`Failed to open export dialog: ${p.message}`));return}let s=e.target.closest('[data-action="leave-workspace"]');if(s){let d=s.closest("[data-workspace-id]"),u=d?z().find(y=>y.id===d.dataset.workspaceId):null;if(!u)return;let p=Array.isArray(u.reports)?u.reports:[],f;try{f=await ys(p)}catch(y){alert(`Couldn't read reports to analyze triage impact: ${y.message}`);return}let{confirmed:h,mode:b,triage:m}=await Zf({name:u.name,reportCount:p.length,bundleCount:u.bundles.length,triageImpact:f});if(!h)return;if(!z().some(y=>y.id===u.id)){alert(`Workspace "${u.name}" was removed elsewhere; nothing to leave.`);return}try{await hf(u.id,b,{triage:m})}catch(y){alert(`Failed to leave workspace: ${y.message}`)}return}let i=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(i){let d=i.dataset.workspaceId,u=a.currentView==="findings"||a.currentView==="files";d&&(d!==a.currentWorkspace||!u)&&er(d);return}let l=e.target.closest(".file-item[data-file]");if(l){let d=l.dataset.file;d&&(d!==a.currentFile||a.currentView!=="findings")&&_t(d);return}if(e.target.closest("sidebar-delete-current")){if(a.currentView==="bundles"&&a.selectedBundle){let m=a.selectedBundle,y=(a.bundles??[]).find(v=>v.integrity===m)?.name??m,k=z().filter(v=>Array.isArray(v.bundles)&&v.bundles.includes(m)).filter(v=>ul(v.id,m)).map(v=>v.id),{confirmed:w}=await rh({name:y,inRemote:k.length>0});if(!w)return;if(a.selectedBundle!==m){alert(`Active bundle changed during confirmation; aborting delete of "${y}".`);return}try{await ff({deleteFromRemoteWorkspaceIds:k})}catch(v){alert(`Failed to delete bundle: ${v.message}`)}return}if(!a.currentFile)return;let d=a.currentFile,u;try{u=await ys([d])}catch(m){alert(`Couldn't read reports to analyze triage impact: ${m.message}`);return}let p=z().filter(m=>Array.isArray(m.reports)&&m.reports.includes(d)).filter(m=>Zn(m.id,d)).map(m=>m.id),f=p.length>0,{confirmed:h,triage:b}=await th({name:d,triageImpact:u,inRemote:f});if(!h)return;if(a.currentFile!==d){alert(`Active report changed during confirmation; aborting delete of "${d}".`);return}try{await uf({triage:b,deleteFromRemoteWorkspaceIds:p})}catch(m){alert(`Failed to delete report: ${m.message}`)}return}if(e.target.closest("#sync-status")){N.status==="error"?N.dismissError():N.status==="off"?(!N.getServerUrl()&&$o&&N.setServerUrl($o),N.setEnabled(!0)):N.setEnabled(!1);return}if(e.target.closest("#sidebar-toggle")){ri.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",ri.classList.contains("collapsed")?"1":"0")}catch{}}}function fv(e){let t=e.target.closest("[data-tooltip]");if(!t){ko();return}ac(t,{placement:"right",gate:r=>{let n=r.querySelector(".file-label");return!n||(r.dataset.tooltip??"")!==n.textContent?!0:n.scrollWidth>n.clientWidth}})}function hv(e){let t=e.target.closest("[data-tooltip]"),r=e.relatedTarget?.closest?.("[data-tooltip]")??null;t&&t===r||ko()}function gv(e){Sr=e.target.value.trim().toLowerCase(),j()}var mv={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};function bv(){return N.getServerUrl()||$o?z().length>0:!1}function si(e){let t=se?.querySelector("#sync-status");if(!t)return;let r=bv();if(r&&N.isEnabled()&&Ju().catch(i=>{console.warn("sync: load failed",i)}),r&&!N.getServerUrl()&&$o&&N.isEnabled()&&N.setServerUrl($o),N.setForcedOff(!r),!r){t.hidden=!0;return}t.hidden=!1;let n=e??N.status;t.dataset.status=n;let o=N.persistenceDegraded;t.toggleAttribute("data-degraded",o),t.title=o?"Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven\u2019t synced could be lost on reload.":"";let s=t.querySelector(".sync-label");s&&(s.textContent=mv[n]??"")}N.onStatusChange(si);var lc=!1,dc=!1;async function gh(){if(!N.persistenceDegraded||dc||lc)return;lc=!0;let{shown:e}=await sh();if(lc=!1,e){dc=!0;return}N.persistenceDegraded&&setTimeout(gh,1500)}N.onPersistenceDegraded(e=>{si(),e?gh():dc=!1});function yv(e){let t=e.target.closest(".file-item.workspace-item");if(!t)return;let r=t.querySelector(".file-label");if(!r||r.querySelector("input"))return;let n=t.dataset.workspaceId,o=z().find(d=>d.id===n);if(!o)return;e.preventDefault();let s=document.createElement("input");s.type="text",s.value=o.name,s.className="workspace-rename-input",r.textContent="",r.append(s),s.focus(),s.select();let i=!1,l=async d=>{i||(i=!0,d&&await Da(n,s.value),j())};s.addEventListener("keydown",d=>{d.key==="Enter"?(d.preventDefault(),l(!0)):d.key==="Escape"&&(d.preventDefault(),l(!1))}),s.addEventListener("blur",()=>l(!0)),s.addEventListener("click",d=>d.stopPropagation()),s.addEventListener("dblclick",d=>d.stopPropagation())}function ii(){for(let e of se.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function mh(e){return e.dataTransfer.types.includes(pc)||e.dataTransfer.types.includes(xo)}function wv(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let n=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(xo,n),e.dataTransfer.setData(cc,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n),t.classList.add("dragging"),oi=!0,j();return}let r=e.target.closest(".file-item[data-file]");r&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(pc,r.dataset.file),e.dataTransfer.setData(cc,r.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r.dataset.file),r.classList.add("dragging"),ni=!0,j())}function vv(){for(let e of se.querySelectorAll(".dragging"))e.classList.remove("dragging");ii(),(ni||oi)&&(ni=!1,oi=!1,j())}function kv(e){if(!mh(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),r=se.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,s=t&&r&&t.dataset.workspaceId===r||!t&&!r;if(e.dataTransfer.dropEffect=s?"none":"move",ii(),!s)if(t){let i=t.dataset.workspaceId;for(let l of se.querySelectorAll(`[data-workspace-id="${CSS.escape(i)}"]`))l.classList.contains("dragging")||l.classList.add("drag-over")}else{let l=e.dataTransfer.types.includes(xo)?"[data-default-bundles]":"[data-default-reports]",d=se.querySelector(l);d&&d.classList.add("drag-over")}}function $v(e){se.contains(e.relatedTarget)||ii()}async function xv(e){if(!mh(e))return;e.preventDefault(),e.stopPropagation(),ii();let t=e.target.closest("[data-workspace-id]"),r=t?t.dataset.workspaceId:null,n=e.dataTransfer.getData(cc)||null;if(e.dataTransfer.types.includes(xo)){let s=e.dataTransfer.getData(xo);if(!s)return;if(n&&n!==r&&ul(n,s)){let i=(a.bundles??[]).find(u=>u.integrity===s)?.name??s,l=z().find(u=>u.id===n),{confirmed:d}=await nh({name:i,workspaceName:l?.name??""});if(!d)return;try{await Es(n,s)}catch(u){console.warn(`Failed to remove '${i}' from source workspace ${n} remote:`,u)}}r&&await br(s,r),n&&n!==r&&await ja(s,n),j();return}let o=e.dataTransfer.getData(pc);if(o){if(n&&n!==r&&Zn(n,o)){let s=z().find(l=>l.id===n),{confirmed:i}=await oh({name:o,workspaceName:s?.name??""});if(!i)return;try{await Cs(n,o)}catch(l){console.warn(`Failed to remove '${o}' from source workspace ${n} remote:`,l)}}r&&await Tt(o,r),n&&n!==r&&await Vn(o,n),j()}}function _v(e){ri=e,se=e.renderRoot,ti=se.querySelector("#file-list"),mp(se.querySelector("#encryption-toggle")),se.addEventListener("click",pv),se.addEventListener("dblclick",yv),se.addEventListener("dragstart",wv),se.addEventListener("dragend",vv),se.addEventListener("dragover",kv),se.addEventListener("dragleave",$v),se.addEventListener("drop",xv),ti.addEventListener("mouseover",fv),ti.addEventListener("mouseout",hv),se.querySelector("#sidebar-search-input")?.addEventListener("input",gv),si(N.status),j()}var uc=class extends H{static styles=[A(pp),A(up)];render(){return c`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">DeepView</span></button> <span class="brand-tag">dev</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" title="toggle sidebar" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports..." autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button></div>`}firstUpdated(){_v(this)}};customElements.define("app-sidebar",uc);var bh={attach:{title:"Synced triage on report attach",intro:"have triage from your workspace that disagrees with your local view on",trailingNote:"Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.",importedSideLabel:"Apply from chain",applyButton:"Apply"},chain:{title:"Triage conflict from peer update",intro:"were changed by a peer (or by another tab) in a way that disagrees with your local triage on",trailingNote:"Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep \u2014 cancelling keeps your local value (which will then propagate back to the chain on your next save).",importedSideLabel:"Apply from chain",applyButton:"Apply"}};function yh(){ip(async(e,t,r)=>{let n=Ca(e);try{return await Gs(e,n,bh[r]??bh.attach)}catch{let o=e.length;return alert(`${r==="attach"?"A report attach":"A workspace sync"} had ${o} triage disagreement${o===1?"":"s"} with your local view. Kept your local values because another dialog is open. ${r==="attach"?"Detach and re-attach the report to pick again.":"Your local values will re-publish to the chain on the next change."}`),null}})}var fc=class extends T{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=""}_finish(t){this._value="",super._finish(t)}_onCancel=()=>this._finish(null);_onInput=t=>{this._value=t.target.value};_onSubmit=()=>{let t=this._value??"";t&&this._finish(t)};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onSubmit())};render(){let t=(this._value??"").length>0,r=this.retry?"That password didn't match. Try again, or cancel to leave the workspace unsynced for now.":"This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.";return c`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${r}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onSubmit}">${this.retry?"Retry":"Authenticate"}</button></footer></dialog>`}};customElements.define("sync-auth-dialog",fc);function wh({retry:e=!1}={}){return V("sync-auth-dialog",{retry:!!e})}function vh(){sp(async({retry:e})=>{try{return await wh({retry:e})}catch(t){return console.warn("Sync auth dialog failed to open:",t),null}})}var ai="https://triage.space/",Sv=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function Cv(){for(let e of Sv)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var Ev=["deepview.triage","deepview.triage.pending"],Av="deepview.repoUrls";function Tv(){try{for(let e of Ev)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(Av);if(e){let t=JSON.parse(e);if(t&&typeof t=="object"&&Object.keys(t).length>0)return!0}}catch{return!0}return!1}async function Iv(){if(Tv())return!0;let e=[];try{e=await le()}catch{return!0}if(e.length>0)return!0;try{if(z().length>0)return!0}catch{return!0}try{return await sa()}catch{return!0}}var hc=class extends H{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let t=this.querySelector("dialog");t&&t.showModal();let r=this.querySelector("button.om-stay");r&&r.focus()}_finish(t){if(this._settled)return;this._settled=!0;let r=this.querySelector("dialog");r&&r.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let t=()=>c`<a class="om-link" href="${ai}" target="_blank" rel="noopener noreferrer">${ai}</a>`;return c`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${t()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${t()}.</p>${this.supportsSync?c`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:c`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define("origin-migration-dialog",hc);function Rv(e){return new Promise(t=>{let r=document.createElement("origin-migration-dialog");r.supportsSync=e.supportsSync,r.addEventListener("resolve",n=>{r.remove(),t(!!n.detail)}),document.body.append(r)})}async function kh(){let e=Cv();return e?await Iv()?await Rv(e)?(location.assign(ai),!0):!1:(location.replace(ai),!0):!1}var gc=class extends T{static styles=[...T.styles,A(Ze)];static properties={encoded:{type:String},_stage:{state:!0},_password:{state:!0},_name:{state:!0},_decoded:{state:!0},_existingById:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.encoded="",this._stage="password",this._password="",this._name="",this._decoded=null,this._existingById=null,this._busy=!1,this._error="",this._settled=!1}focusInitial(){this._focusActiveInput()}updated(t){t.has("_stage")&&this._focusActiveInput()}_focusActiveInput(){if(this._stage==="password")this.renderRoot.querySelector('input[type="password"]')?.focus();else if(this._stage==="name"){let t=this.renderRoot.querySelector('input[data-role="name"]');t&&(t.focus(),t.select())}}_finish(t){this._settled||(this._decoded=null,this._password="",this.encoded="",super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onNameInput=t=>{this._name=t.target.value};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await il({encoded:this.encoded,password:this._password});if(this._settled)return;let r=z().find(n=>n.id===t.id)??null;this._decoded=t,this._existingById=r,this._name=t.name,this._password="",this._stage="name"}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onAttach=()=>{if(!this._decoded)return;let t=vt(this._name);if(!t)return;let r=z().find(n=>n.id===this._decoded.id)??null;if(r){this._existingById=r;return}this._nameCollision(t)||this._finish({id:this._decoded.id,name:t,privateKeyBase64:this._decoded.privateKeyBase64})};_nameCollision(t){if(!t||!this._decoded)return null;for(let r of z())if(r.id!==this._decoded.id&&vt(r.name)===t)return r;return null}_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._stage==="password"?this._onUnlock():this._stage==="name"&&this._onAttach())};_passwordStage(){return c`<p class="nwd-note">Someone shared a workspace with you. Enter the password they sent separately to attach it to this browser.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?c`<p class="wsl-error" role="alert">${this._error}</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer>`}_alreadyAttachedStage(){let t=this._existingById;return c`<p class="nwd-note">This workspace is already attached as <strong>"${t?.name??""}"</strong>. Open it from the sidebar.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onCancel}">Close</button></footer>`}_nameStage(){if(this._existingById)return this._alreadyAttachedStage();let t=vt(this._name),r=this._nameCollision(t),n=!!t&&!r;return c`<p class="nwd-note">Pick a name for the workspace on this device. The shared identity is preserved either way — only the visible label changes.</p><label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> ${r?c`<p class="wsl-error" role="alert">A workspace named "${t}" already exists on this device. Pick a different name.</p>`:g}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!n}" @click="${this._onAttach}">Attach</button></footer>`}render(){let t=this._stage==="password"?"Attach shared workspace":this._existingById?"Workspace already attached":"Name the workspace";return c`<dialog @close="${this._onClose}"><header><h3>${t}</h3></header>${this._stage==="password"?this._passwordStage():this._nameStage()}</dialog>`}};customElements.define("workspace-unlock-link-dialog",gc);function $h({encoded:e}={}){return new Promise((t,r)=>{let n=document.createElement("workspace-unlock-link-dialog");n.encoded=e??"",n.addEventListener("resolve",o=>{n.remove(),t(o.detail)}),n.addEventListener("modal-conflict",o=>{n.encoded="",n.remove(),r(ht(o.detail?.cause))}),document.body.append(n)})}var Le=null,li=!1,_o=null;function Bv(e){if(!e)return"Could not unlock. Try again.";switch(e.name??""){case"NotAllowedError":case"AbortError":return"";case"SecurityError":return"The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.";case"InvalidStateError":return"The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.";case"NotSupportedError":return"This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.";case"NetworkError":return"A network error prevented the passkey from completing. Check your connection and try again.";case"UnknownError":return"The authenticator returned an unknown error. Try again, or use a different passkey.";default:{let r=e.message??String(e);return r.length>200?r.slice(0,197)+"\u2026":r}}}function Fv(){if(Le)return Le;Le=document.createElement("div"),Le.id="lock-overlay",Le.setAttribute("role","dialog"),Le.setAttribute("aria-modal","true"),Le.setAttribute("aria-label","Unlock DeepView"),Le.innerHTML=`
|
|
160
|
+
\u2022 Hardware security key: use the vendor's management tool`)}catch(e){alert(`Could not disable encryption: ${e?.message??e}`)}}function G8(){Ox()}function K8(e){if(!e||e===yt)return;yt=e;let t=!1;yt.addEventListener("click",async()=>{if(await bt(),!C()&&!t){t=!0;try{if(!me()){await qm();return}if(!tr()){await Xm();return}await sV()}finally{t=!1}}}),tt(Ox),Ox()}var W8,iV,yt,Nx=k(()=>{"use strict";T();U();ak();dk();Qn();W8=d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5.5a3 3 0 0 1 6 0V8"/></svg>`,iV=d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="10" height="6" rx="1"/><path d="M5 8V5a3 3 0 0 1 6 -0.5"/></svg>`,yt=null});var Y8,q8=k(()=>{Y8=`.spd-list{margin:0 0 .8rem 1.15rem;color:var(--muted);font-size:.82rem;line-height:1.5;& li{margin:.3rem 0}& strong{color:var(--text);font-weight:600}}.spd-denied{color:light-dark(#b25b00,#f0a060);font-size:.78rem}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}
|
|
161
|
+
`});function Dx(){let e=navigator.userAgent;return/AppleWebKit/u.test(e)&&!/Chrome\/|Chromium|Edg\/|OPR\/|Android/u.test(e)?"webkit":/Firefox\//u.test(e)?"firefox":"chromium"}function X8(){return new Promise(e=>{let t=document.createElement("storage-persist-dialog"),r=n=>{t.remove(),e(n)};t.addEventListener("resolve",n=>r(n.detail)),t.addEventListener("modal-conflict",()=>r(null)),document.body.append(t)})}var Px,J8=k(()=>{"use strict";T();pe();U();q8();Px=class extends D{static styles=[...D.styles,F(Y8)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await ul()){this._finish("granted");return}this._retryDenied=!0};_chromiumBody(){let t=location.hostname==="localhost"?d`Plain <code>localhost</code> can never qualify — for local testing open the app via <code>127.0.0.1</code> instead.`:m;return d`<p class="nwd-intro">Chromium-based browsers (Chrome, Edge, Brave, …) never show a prompt — persistence is granted silently, and only to sites the browser considers important. Any of these qualifies it:</p><ul class="spd-list"><li><strong>Install the app</strong> — the install icon at the right end of the address bar, or the browser menu's Install entry.</li><li><strong>Bookmark</strong> this page.</li><li>Keep using the site — regular visits raise its engagement score.</li></ul><p class="nwd-note ui-hint">The browser re-evaluates on every request, so after any of the above press <strong>Try again</strong>.${t}</p>`}_firefoxBody(){return d`<p class="nwd-intro">Firefox asks with a permission prompt. A dismissed or blocked prompt is remembered, and the site can't re-ask until the old answer is cleared:</p><ol class="spd-list"><li>Click the permissions icon next to the address bar.</li><li>Clear the <strong>Store Data in Persistent Storage</strong> entry if it's blocked.</li><li>Press <strong>Try again</strong> below and choose <strong>Allow</strong>.</li></ol>`}_webkitBody(){return d`<p class="nwd-intro">Safari — and every iOS browser — additionally deletes a site's storage after <strong>7 days</strong> of browser use without interacting with the site, and no permission exempts a normal tab. Installing the app is what does:</p><ul class="spd-list"><li>On iPhone / iPad: open the <strong>Share</strong> menu, choose <strong>Add to Home Screen</strong>, and use the app from that icon.</li><li>In Safari on macOS: choose <strong>File → Add to Dock…</strong> and use the app from the Dock.</li><li>Installed web apps are exempt from the 7-day cleanup. Otherwise, use the site at least once a week.</li></ul>`}render(){let t=Dx(),r=t==="webkit"?this._webkitBody():t==="firefox"?this._firefoxBody():this._chromiumBody();return d`<dialog @close="${this._onClose}"><header><h3>Protect stored data</h3></header><p class="nwd-intro">Reports, bundles and triage live in the browser's <strong>best-effort storage</strong> — the browser is allowed to delete all of it at once under disk pressure or after long inactivity, without asking. The persistent-storage request that would prevent this was just declined.</p>${r}<footer class="nwd-actions">${this._retryDenied?d`<span class="spd-denied" role="status">Still not granted.</span>`:m} <span class="nwd-spacer"></span> ${t==="webkit"?m:d`<button type="button" @click="${this._onRetry}">Try again</button>`} <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("storage-persist-dialog",Px)});function Ux(){return Dx()==="webkit"}function Z8(e){return e>=1e9?`${(e/1e9).toFixed(1)} GB`:e>=1e6?`${(e/1e6).toFixed(1)} MB`:e>=1e3?`${(e/1e3).toFixed(1)} kB`:`${e} B`}function Q8(){if(!ro)return;if(C()||!to||to.persisted!==!1||!Hx){ro.hidden=!0;return}ro.hidden=!1;let e=to.usage===null||to.quota===null?"":` Using ${Z8(to.usage)} of ${Z8(to.quota)}.`;ro.querySelector(".storage-label").textContent="Storage at risk",ro.dataset.tooltip="Reports, bundles and triage are in best-effort storage \u2014 the browser may delete them all under disk pressure or after long inactivity. "+(Ux()?"Click for how to protect them (on Safari and iOS browsers this needs the app installed to the Home Screen or Dock).":"Click to request persistent storage \u2014 if the browser declines, instructions for enabling it follow.")+e}function tT(e,t){let r=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${r}`);return}let n=!Ux()&&location.hostname==="localhost"?" Note: plain localhost can NEVER pass \u2014 Chromium keys site importance by registerable domain (IP literals excepted) and localhost has none; for local testing use 127.0.0.1 instead.":"";console.info(`storage: persistent-storage request not granted${r} \u2014 `+(Ux()?"Safari ties persistence to install state; add the app to the Home Screen / Dock.":"Chromium-based browsers never prompt and silently deny origins they don't consider important; installing the app, bookmarking it, allowing notifications, or regular use flips the heuristic (re-evaluated on every request). Firefox shows a prompt instead.")+n)}async function _g(){if(await bt(),!ro||C()){Q8();return}let[e,t]=await Promise.all([a0(),(async()=>{try{return(await fe()).length>0||await wd()}catch{return!1}})()]);to=e,Hx=t,Q8()}function jx(){!ro||zx||(zx=setTimeout(()=>{zx=0,_g()},1e3))}async function eT(){if($g||(await _g(),C()||to?.persisted!==!1||!Hx||$g))return;$g=!0;let e=await ul();tT(e,!1),await _g()}async function lV(){if(to&&to.persisted===!1){$g=!0;let e=await ul();tT(e,!0),e||await X8()}await _g()}function rT(e){ro=e,ro&&(ro.addEventListener("click",()=>{lV()}),kr((t,r)=>{jx(),r==="save"&&eT()}),eT())}var ro,to,Hx,$g,zx,nT=k(()=>{"use strict";U();Qn();J8();ro=null,to=null,Hx=!1,$g=!1,zx=0});function Vx(e){let t=document.querySelector("#landing-workspaces");if(!t)return;let r=e.filter(n=>n.reports.length>0||n.bundles?.length>0).toSorted((n,o)=>o.reports.length-n.reports.length||n.name.localeCompare(o.name)).slice(0,5);ae(r.length>0?d`<nav class="landing-workspaces" aria-label="Workspaces"><div class="landing-workspace-row">${oe(r,n=>n.id,n=>{let o=Ds(n),i=n.reports.filter(s=>Lt(s)!==Xe).length;return d`<button type="button" class="landing-workspace" data-landing-workspace="${n.id}">${V(vi)} <span class="landing-workspace-text"><span class="landing-workspace-name">${n.name}</span> <span class="landing-workspace-count">${o?.appMode?`${o.appFindings.toLocaleString()} finding${o.appFindings===1?"":"s"} \xB7 `:""}${i.toLocaleString()} report${i===1?"":"s"}</span></span></button>`})}</div></nav>`:m,t)}var oT=k(()=>{"use strict";T();Pt();Je();U();gt()});function Wx(e){let{serverMode:t,session:r,sessionPending:n=!1,teamsPending:o=!1,teams:i=[],alternateMode:s="local",onSwitchMode:a}=e,c=document.querySelector("#drop-zone"),u=c?.querySelector(".managed-landing");if(!u)return;let p=t==="managed",f=t==="local",h=p&&(r?r.role!=="none"&&o:n);h?Ki?Ki.options=e:Ki={options:e,elapsed:!1,timer:setTimeout(()=>{Ki.elapsed=!0,Wx(Ki.options)},1e3)}:(clearTimeout(Ki?.timer),Ki=null);let g=h&&!Ki.elapsed;c.dataset.serverMode=p?"managed":"local",c.setAttribute("aria-label",p?g?r?"Loading teams":"Loading session":r?.role==="none"?"No workspace access":r?"Team findings":"Log in":"Drop reports here");let b=c.querySelector(".drop-local-copy");if(b&&(b.textContent=f?"Review locally in your browser.":"Review locally in your browser. Sync across devices when you need it."),!p||g){ae(m,u);return}let v=r?.role==="admin"||r?.role==="manage",x=i.filter(w=>w.reports.length>0||w.bundles?.length>0);if(Un()&&!r){ae(d`<section class="managed-login"><h1>Public link unavailable</h1><p>This link is invalid, has been revoked, or public sharing is disabled.</p></section>`,u);return}ae(r==null?d`<section class="managed-login" aria-labelledby="managed-login-title"><h1 id="managed-login-title">Log in to DeepView</h1><p>Access your team's security reports and findings.</p><button type="button" class="managed-login-button" data-managed-login><svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> <span>Continue with GitHub</span></button><div class="managed-login-alternative"><span>or continue to</span> <button type="button" @click="${a}">${s} mode</button></div></section>`:r.role==="none"?d`<section class="managed-login" aria-labelledby="managed-no-access-title"><h1 id="managed-no-access-title">No workspace access</h1><p>Ask an administrator to grant access to this workspace.</p></section>`:d`<div class="managed-landing-hero"><p class="drop-eyebrow">Your security workspace</p><h1>Your team's findings, in focus.</h1><p class="drop-prompt-intro">${x.length>0?"Review the security findings shared with your account and turn them into clear next steps.":"Reports shared with your teams will appear here."}</p></div>${x.length>0?d`<nav class="managed-team-list" aria-label="Teams">${oe(x,w=>w.id,w=>d`<button type="button" class="managed-team-button" data-managed-team="${w.id}"><span class="managed-team-icon" aria-hidden="true">${V(vi)}</span> <span class="managed-team-copy"><strong>${w.name}</strong> <span>${w.reports.length} ${w.reports.length===1?"report":"reports"} · Open findings</span> </span><svg class="managed-team-arrow" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button>`)}</nav>`:d`<p class="managed-landing-empty">No team reports are available yet.</p>`} ${v?d`<nav class="managed-content-links" aria-label="Content and activity">${[["manage-bundles","Bundles",or],["manage-scans","Scans",Cl],["manage-reports","Reports",El]].map(([w,y,$])=>d`<button type="button" class="managed-content-card" data-managed-page="${w}"><span class="managed-content-icon" aria-hidden="true">${V($)}</span> <span>${y}</span></button>`)}</nav><div class="managed-landing-actions"><button type="button" class="managed-manage-button" data-managed-page="manage"><span aria-hidden="true">${V(Bh)}</span><span>Manage</span></button></div>`:m}`,u)}var Ki,iT=k(()=>{"use strict";T();Pt();Je();gt();js();Ki=null});var Sg,Gx=k(()=>{Sg=`.dlg-tabs{display:flex;gap:.1rem;margin:0 0 .55rem;border-bottom:1px solid var(--border)}.dlg-tab{display:inline-flex;align-items:center;gap:.35rem;background:transparent;border:none;color:var(--muted);padding:.1rem .6rem .4rem;font:inherit;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .12s,border-color .12s;&:first-child{padding-left:0}&:hover:not(:disabled){color:var(--text)}&[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}&:disabled{opacity:.5}& svg{display:block}}
|
|
162
|
+
`});function sT({workspace:e}={}){return ki("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}var dV,Kx,aT=k(()=>{"use strict";T();U();mr();pe();$o();Ks();Gx();dV=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],Kx=class extends D{static styles=[...D.styles,F(Dr),F(Sg)];static properties={workspace:{attribute:!1},_tab:{state:!0},_password:{state:!0},_confirm:{state:!0},_noPassword:{state:!0},_includeBundleBytes:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspace=null,this._tab="workspace",this._password="",this._confirm="",this._noPassword=!1,this._includeBundleBytes=!1,this._busy=!1,this._error="",this._settled=!1}_finish(t){this._settled||(this._password="",this._confirm="",this.workspace=null,super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_reportCount(){return Array.isArray(this.workspace?.reports)?this.workspace.reports.length:0}_bundleCount(){return Array.isArray(this.workspace?.bundles)?this.workspace.bundles.length:0}_selectTab(t){this._busy||this._tab===t||(this._tab=t,this._error="",t!=="workspace"&&(this._password="",this._confirm=""))}_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_onNoPasswordToggle=t=>{this._noPassword=t.target.checked,this._error="",this._noPassword&&(this._password="",this._confirm="")};_onIncludeBundleBytesToggle=t=>{this._includeBundleBytes=t.target.checked,this._error=""};_canExport(){return this._busy?!1:this._tab==="raw"?this._reportCount()>0:this._noPassword?!0:(this._password??"").length>0&&this._password===this._confirm}_onExport=async()=>{if(!this._canExport())return;if(!this.workspace){this._error="No workspace selected.";return}let t=this._tab;this._busy=!0,this._error="";try{let{blob:r,filename:n}=t==="raw"?await x0(this.workspace):await k0(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;lo(r,n),this._finish({ok:!0,tab:t})}catch(r){if(this._settled)return;this._error=r?.message??String(r)}finally{this._busy=!1}};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onExport())};_tabsTemplate(){return Qh({tabs:dV,current:this._tab,prefix:"wsl",disabled:this._busy,select:t=>this._selectTab(t)})}_workspacePanel(){let t=!this._password||!this._confirm||this._password===this._confirm,r=this._bundleCount();return d`<p class="nwd-note ui-hint">The export file carries this workspace's reports, triage state, comments, fixes, references to attached bundles (integrities only by default), and its private key. Encrypting the file with a password ensures only those with the password can attach the workspace after download.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-export-pw-confirm" maxlength="1024" ?disabled="${this._noPassword}" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-optout"><input type="checkbox" .checked="${this._noPassword}" @change="${this._onNoPasswordToggle}"> <span>Export without password (not recommended)</span></label> ${r>0?d`<label class="wsl-optout"><input type="checkbox" .checked="${this._includeBundleBytes}" @change="${this._onIncludeBundleBytesToggle}"> <span>Include bundle bytes (${r} bundle${r===1?"":"s"}; significantly larger file)</span></label>`:m} ${this._noPassword?d`<p class="wsl-error wsl-warning">Anyone who obtains this file can attach the workspace and read every report, triage decision, comment, and fix. Only opt out when you control where the file goes.</p>`:m} ${!this._noPassword&&!t?d`<p class="wsl-error" role="alert">Passwords don't match.</p>`:m}`}_rawPanel(){let t=this._reportCount(),r=this._bundleCount();return d`<div class="wsl-error wsl-warning"><p>This is the raw form of the reports.</p><p>It carries no triage data — no markers, triage states, comments, fixes, or per-report ignores${r>0?d`— and none of this workspace's ${r} attached bundle${r===1?"":"s"}`:m}.</p><p>This file is written unencrypted: anyone who obtains it can read every report in it.</p></div>${t===0?d`<p class="wsl-error" role="alert">This workspace has no reports to export.</p>`:m}`}_primaryLabel(){return this._busy?"Exporting\u2026":this._tab==="raw"?"Download reports":this._noPassword?"Export without password":"Export"}_primaryDanger(){return this._tab==="raw"||this._noPassword}_body(){return d`<div role="tabpanel" id="${`wsl-panel-${this._tab}`}" aria-labelledby="${`wsl-tab-${this._tab}`}">${this._tab==="raw"?this._rawPanel():this._workspacePanel()}</div>${this._error?d`<p class="wsl-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="${this._primaryDanger()?"primary danger":"primary"}" ?disabled="${!this._canExport()}" @click="${this._onExport}">${this._primaryLabel()}</button></footer>`}render(){return d`<dialog @close="${this._onClose}"><header>${this._tabsTemplate()}</header>${this._body()}</dialog>`}};customElements.define("workspace-export-dialog",Kx)});async function lT(e){await sT({workspace:e})}var cT=k(()=>{"use strict";aT()});function dT(){return le("new-workspace-dialog")}var qx,uT=k(()=>{"use strict";T();pe();qx=class extends D{static properties={_value:{state:!0}};constructor(){super(),this._value=""}_onInput=t=>{this._value=t.target.value};_onCreate=()=>{let t=(this._value??"").trim();t&&this._finish(t)};_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onCreate())};render(){let t=(this._value??"").trim().length>0;return d`<dialog @close="${this._onClose}"><header><h3>New workspace</h3></header><input type="text" class="nwd-input" placeholder="Workspace name" maxlength="200" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><p class="nwd-note ui-hint">Workspace triage is synchronized by default over an end-to-end encrypted channel. Triage on unattached reports stays local to this browser.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onCreate}">Create</button></footer></dialog>`}};customElements.define("new-workspace-dialog",qx)});function pT({name:e,reportCount:t,bundleCount:r,triageImpact:n}={}){return le("leave-workspace-dialog",{workspaceName:e??"",reportCount:t??0,bundleCount:r??0,orphanedTriage:n?.orphanedCount??0,sharedTriage:n?.sharedCount??0})}var Yx,fT=k(()=>{"use strict";T();pe();_o();Yx=class extends D{static styles=[...D.styles,F(Ot)];static properties={workspaceName:{type:String},reportCount:{type:Number},bundleCount:{type:Number},orphanedTriage:{type:Number},sharedTriage:{type:Number},_mode:{state:!0},_triage:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceName="",this.reportCount=0,this.bundleCount=0,this.orphanedTriage=0,this.sharedTriage=0,this._mode="detach",this._triage="keep",this._settled=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){if(this._settled)return;let r=this.reportCount>0?this._mode:"detach",n=r==="delete"&&this.orphanedTriage>0?this._triage:"keep";super._finish({confirmed:!!t,mode:r,triage:n})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_onModeChange=t=>{this._mode=t.target.value};_onTriageChange=t=>{this._triage=t.target.value};_triageSection(){if(this._mode!=="delete"||this.reportCount===0)return"";let t=this.orphanedTriage,r=this.sharedTriage;return t===0&&r===0?d`<p class="lwd-note">No local triage is attached to ${this.reportCount===1?"this report":"these reports"}.</p>`:t===0?d`<p class="lwd-note">Local triage on ${this.reportCount===1?"this report":"these reports"} is also attached to ${r===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:d`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="lwd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){let t=this.reportCount,r=this.bundleCount,n=t>0,o=t===1?"report":"reports",i=t===1?"it":"them",s=t===1?"stays":"stay",a=t===1?"is removed":"are removed",c=r>0?d`<p class="lwd-note">${r===1?"One bundle is":`${r} bundles are`} also attached. ${r===1?"It":"They"} will become unfiled — the bundle bytes stay on this device either way (delete bundles manually from the Bundles list if you want them gone).</p>`:"",u=n?d`<fieldset class="lwd-choice"><legend>What should happen to the <strong>${t}</strong> attached ${o}?</legend><label class="lwd-option"><input type="radio" name="lwd-mode" value="detach" ?checked="${this._mode==="detach"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Move ${i} out of the workspace</span> <span class="lwd-option-hint">The ${o} ${s} in this browser as unattached ${o}.</span></span></label> <label class="lwd-option"><input type="radio" name="lwd-mode" value="delete" ?checked="${this._mode==="delete"}" @change="${this._onModeChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Delete ${i} along with the workspace</span> <span class="lwd-option-hint">The ${o} ${a} from this browser.</span></span></label></fieldset>`:r>0?d`<p class="lwd-empty">No reports are attached to this workspace (only bundles, see below).</p>`:d`<p class="lwd-empty">No reports are attached to this workspace.</p>`;return d`<dialog @close="${this._onClose}"><header><h3>Leave workspace</h3></header><p class="lwd-body">Leave workspace <strong>"${this.workspaceName}"</strong> on this device?</p>${u} ${c} ${this._triageSection()}<ul class="lwd-list"><li>Workspace synchronization data stays on the sync server — peers (and your other devices) keep their copy.</li></ul><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Leave</button></footer></dialog>`}};customElements.define("leave-workspace-dialog",Yx)});function hT({id:e,name:t,privateKeyBase64:r}={}){return new Promise((n,o)=>{let i=document.createElement("workspace-share-link-dialog");i.workspaceId=e??"",i.initialName=t??"",i.privateKeyBase64=r??"",i.addEventListener("resolve",()=>{i.remove(),n()}),i.addEventListener("modal-conflict",s=>{i.privateKeyBase64="",i.remove(),o(Ta(s.detail?.cause))}),document.body.append(i)})}var Xx,mT=k(()=>{"use strict";T();U();mr();pe();Ks();Xx=class extends D{static styles=[...D.styles,F(Dr)];static properties={workspaceId:{type:String},initialName:{type:String},privateKeyBase64:{type:String},_name:{state:!0},_password:{state:!0},_confirm:{state:!0},_url:{state:!0},_busy:{state:!0},_error:{state:!0},_copied:{state:!0},_settled:{state:!0}};constructor(){super(),this.workspaceId="",this.initialName="",this.privateKeyBase64="",this._name="",this._password="",this._confirm="",this._url="",this._busy=!1,this._error="",this._copied=!1,this._settled=!1}beforeOpen(){this._name=this.initialName}focusInitial(){this.renderRoot.querySelector('input[data-role="name"]')?.focus()}_finish(){this._settled||(this._copiedTimer&&(clearTimeout(this._copiedTimer),this._copiedTimer=null),this._password="",this._confirm="",this._url="",this.privateKeyBase64="",super._finish(null))}_onClose=()=>this._finish();_onCancel=()=>this._finish();_onNameInput=t=>{this._name=t.target.value};_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onConfirmInput=t=>{this._confirm=t.target.value,this._error=""};_canGenerate(){return(this._name??"").trim().length>0&&(this._password??"").length>0&&this._password===this._confirm&&!this._busy}_onGenerate=async()=>{if(this._canGenerate()){this._busy=!0,this._error="";try{let t=await C0({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=M0(t),this._password="",this._confirm=""}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onCopy=async()=>{if(this._url){this._error="";try{if(await navigator.clipboard.writeText(this._url),this._settled)return;this._copied=!0,this._copiedTimer&&clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied=!1,this._copiedTimer=null},1500)}catch{if(this._settled)return;this._error="Copy failed \u2014 select the link and copy it manually."}}};_onKeydown=t=>{t.key==="Enter"&&!this._url&&(t.preventDefault(),this._onGenerate())};_body(){return this._url?d`<p class="nwd-note ui-hint">Anyone with the link <strong>and</strong> the password can attach this workspace. Share them through separate channels.</p><label class="wsl-field"><span>Share link</span> <textarea class="wsl-link" readonly="readonly" rows="3" @focus="${t=>t.target.select()}">${this._url}</textarea></label> ${this._error?d`<p class="wsl-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Close</button> <button type="button" class="primary" @click="${this._onCopy}">${this._copied?"Copied":"Copy link"}</button></footer>`:d`<label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> <label class="wsl-field"><span>Confirm password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-pw-confirm" maxlength="1024" .value="${this._confirm}" @input="${this._onConfirmInput}" @keydown="${this._onKeydown}"></label><p class="nwd-note ui-hint">The link carries the workspace's identity (id, name, and private key) so the recipient joins the same sync chain. Triage, reports, and comments aren't in the link itself — they sync over once the recipient joins. The link decrypts with the password above; without it the link is useless.</p>${this._error?d`<p class="wsl-error" role="alert">${this._error}</p>`:m} ${this._password&&this._confirm&&this._password!==this._confirm?d`<p class="wsl-error" role="alert">Passwords don't match.</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._canGenerate()}" @click="${this._onGenerate}">${this._busy?"Generating\u2026":"Generate link"}</button></footer>`}render(){return d`<dialog @close="${this._onClose}"><header><h3>${this._url?"Workspace share link":"Share workspace by link"}</h3></header>${this._body()}</dialog>`}};customElements.define("workspace-share-link-dialog",Xx)});function gT({name:e,kindLabel:t,triageImpact:r,inRemote:n}={}){return le("delete-report-dialog",{reportName:e??"",kindLabel:t||"report",orphanedTriage:r?.orphanedCount??0,sharedTriage:r?.sharedCount??0,inRemote:!!n})}var Jx,bT=k(()=>{"use strict";T();pe();Il();Jx=class extends Ur{static properties={reportName:{type:String},kindLabel:{type:String},orphanedTriage:{type:Number},sharedTriage:{type:Number},inRemote:{type:Boolean},_triage:{state:!0}};constructor(){super(),this.reportName="",this.kindLabel="report",this.orphanedTriage=0,this.sharedTriage=0,this.inRemote=!1,this._triage="keep"}confirmationResult(t){let r=this.orphanedTriage>0?this._triage:"keep";return{confirmed:t,triage:r}}_onTriageChange=t=>{this._triage=t.target.value};_remoteNotice(){return this.inRemote?d`<p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:m}_triageSection(){let t=this.orphanedTriage,r=this.sharedTriage;return t===0&&r===0?d`<p class="lwd-note">No local triage is attached to this ${this.kindLabel}.</p>`:t===0?d`<p class="lwd-note">Local triage on this report is also attached to ${r===1?"a report":"reports"} you're keeping. Nothing will be orphaned.</p>`:d`<fieldset class="lwd-choice"><legend><strong>${t}</strong> ${t===1?"triage entry won't":"triage entries won't"} be reachable from any remaining report. What should happen ${t===1?"to it":"to them"}?</legend><label class="lwd-option"><input type="radio" name="drd-triage" value="keep" ?checked="${this._triage==="keep"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Keep</span> <span class="lwd-option-hint">Reapplied automatically if a matching report is imported later.</span></span></label> <label class="lwd-option"><input type="radio" name="drd-triage" value="wipe" ?checked="${this._triage==="wipe"}" @change="${this._onTriageChange}"> <span class="lwd-option-text"><span class="lwd-option-title">Wipe</span> <span class="lwd-option-hint">Drop the orphaned triage from this browser.</span></span></label></fieldset>`}render(){return d`<dialog @close="${this._onClose}"><header><h3>Delete ${this.kindLabel}</h3></header><p class="lwd-body">Delete <strong>"${this.reportName}"</strong>?</p>${this._remoteNotice()} ${this._triageSection()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-report-dialog",Jx)});function vT({name:e,inRemote:t}={}){return le("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var Zx,yT=k(()=>{"use strict";T();pe();Il();Zx=class extends Ur{static properties={bundleName:{type:String},inRemote:{type:Boolean}};constructor(){super(),this.bundleName="",this.inRemote=!1}_remoteNotice(){return this.inRemote?d`<p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload).</p>`:m}render(){return d`<dialog @close="${this._onClose}"><header><h3>Delete bundle</h3></header><p class="lwd-body">Delete <strong>"${this.bundleName}"</strong>?</p>${this._remoteNotice()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Delete</button></footer></dialog>`}};customElements.define("delete-bundle-dialog",Zx)});function wT({name:e,workspaceName:t}={}){return le("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var Qx,kT=k(()=>{"use strict";T();pe();Il();Qx=class extends Ur{static properties={bundleName:{type:String},workspaceName:{type:String}};constructor(){super(),this.bundleName="",this.workspaceName=""}render(){return d`<dialog @close="${this._onClose}"><header><h3>Detach bundle</h3></header><p class="lwd-body">Detach <strong>"${this.bundleName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This bundle is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The bundle bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-bundle-dialog",Qx)});function xT({name:e,workspaceName:t}={}){return le("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var e$,$T=k(()=>{"use strict";T();pe();Il();e$=class extends Ur{static properties={reportName:{type:String},workspaceName:{type:String}};constructor(){super(),this.reportName="",this.workspaceName=""}render(){return d`<dialog @close="${this._onClose}"><header><h3>Detach report</h3></header><p class="lwd-body">Detach <strong>"${this.reportName}"</strong> from workspace <strong>"${this.workspaceName}"</strong>?</p><p class="lwd-note">This report is also stored in the workspace's <strong>remote</strong> inventory and will be removed from there too. Newly synced workspace members won't see it; members who already downloaded it keep their local copy (and could re-upload). The report bytes stay on this device — drop it onto another workspace to attach it there.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="danger" @click="${this._onConfirm}">Detach</button></footer></dialog>`}};customElements.define("detach-report-dialog",e$)});function _T(){return new Promise(e=>{let t=document.createElement("persistence-degraded-dialog");t.exclusive=!0;let r=n=>{t.remove(),e({shown:n})};t.addEventListener("resolve",()=>r(!0)),t.addEventListener("modal-conflict",()=>r(!1)),document.body.append(t)})}var t$,ST=k(()=>{"use strict";T();pe();t$=class extends D{_onConfirm=()=>this._finish(!0);render(){return d`<dialog @close="${this._onClose}"><header><h3>Changes might not be saved</h3></header><p class="nwd-intro">Triage works in this tab, but this browser <strong>can't save its sync state right now</strong> — so changes that haven't reached the server could be lost if you reload the page.</p><p class="nwd-intro">This usually means the browser's storage is full, or another tab is running a newer version of the app (to avoid overwriting that newer version's data, this tab has paused saving).</p><p class="nwd-note ui-hint">Free up space if storage is full, and close or reload other tabs of this app to the same version. This notice clears on its own once saving works again.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onConfirm}">Got it</button></footer></dialog>`}};customElements.define("persistence-degraded-dialog",t$)});function CT(){return new Promise(e=>{let t=document.createElement("proxy-auth-dialog");t.exclusive=!0;let r=(n,o)=>{t.remove(),e({shown:n,reload:o})};t.addEventListener("resolve",n=>r(!0,n.detail==="reload")),t.addEventListener("modal-conflict",()=>r(!1,!1)),document.body.append(t)})}var r$,ET=k(()=>{"use strict";T();pe();r$=class extends D{focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}_onReload=()=>this._finish("reload");render(){return d`<dialog @close="${this._onClose}"><header><h3>Sign in to keep syncing</h3></header><p class="nwd-intro ui-hint">Triage can't reach the sync server — the connection is being redirected to an <strong>authentication proxy</strong> (for example Cloudflare Access). This usually means your access session has expired.</p><p class="nwd-note ui-hint">Reload the page to sign in again. Your triage is saved on this device, so reloading won't lose anything — or keep working offline and reload later.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onClose}">Not now</button> <button type="button" class="primary" @click="${this._onReload}">Reload page</button></footer></dialog>`}};customElements.define("proxy-auth-dialog",r$)});async function MT(e,{openManagedReport:t,readTeam:r=Ch,isCurrent:n=()=>!0}){let o=l.managedSession,i=()=>n()&&C()&&l.managedSession?.id===o?.id&&l.managedSession?.role===o?.role,s=l.managedTeams;if(!i())return null;async function a(g,b){return!i()||(l.currentManagedTeam!==g.id||l.currentManagedReport!==b)&&!await t(g,b)||!i()||l.currentManagedTeam!==g.id||l.currentManagedReport!==b?null:Fi(e.id)}if(e.teamId){let g=s.find(b=>b.id===e.teamId);return!g||e.reportId&&!g.reports.some(b=>b.id===e.reportId)?null:a(g,e.reportId??null)}let c=s.flatMap(g=>g.reports.map(b=>({team:g,report:b}))),u=new Set,p=new Map;async function f(g){for(let{team:b,report:v}of g){if(!i())return null;if(u.has(`${b.id}:${v.id}`))continue;u.add(`${b.id}:${v.id}`),p.has(b.id)||p.set(b.id,await r(b.id));let x=p.get(b.id)?.find(y=>y.id===v.id);if(!i())return null;if(x==null)continue;let w=await OR(JSON.stringify(x.data),v.filename);if(!i())return null;if(w?.findings.some(y=>y.id===e.id))return a(b,v.id)}return null}if(e.report){let g=await Promise.all(c.map(({report:v})=>It("report",v.filename))),b=await f(c.filter((v,x)=>g[x]===e.report));if(b||!i())return b}if(e.workspace){let g=await Promise.all(s.map(v=>It("workspace",`managed-team:${v.id}`))),b=s[g.indexOf(e.workspace)];if(b){let v=await a(b,null);if(v||!i())return v}}if(!i())return null;let h=s.find(g=>g.id===l.currentManagedTeam);if(h&&(l.currentManagedReport==null||h.reports.some(g=>g.id===l.currentManagedReport))){let g=Fi(e.id);if(g)return g}return f(c)}var RT=k(()=>{"use strict";U();ik();Kt();Bi()});async function AT(e,t,r,{openReport:n,openManagedReport:o}){if(C()){let i=l.managedTeams.find(s=>s.id===l.currentManagedTeam);if(!r||!i?.reports.some(s=>s.id===r)||(l.currentManagedReport!==r||l.currentWorkspace)&&!await o(i,r)||!C()||l.currentManagedTeam!==i.id||l.currentManagedReport!==r||l.currentWorkspace)return null}else if(r||((l.currentFile!==t||l.currentWorkspace)&&await n(t),C()||l.currentFile!==t||l.currentWorkspace))return null;return Fi(e)}async function IT(e,t){if(C())return MT(e,t);let{openReport:r,openWorkspace:n}=t,[o,i]=await Promise.all([Py(e.report),Ny(e.workspace)]);async function s(p){let f=Li(p,i?.id);return(l.currentFile!==p||l.currentWorkspace||l.currentReportWorkspace!==f)&&await r(p,void 0,{workspaceId:f}),Fi(e.id)}if(o){let p=await s(o);if(p)return p}if(i){l.currentWorkspace!==i.id&&await n(i.id);let p=Fi(e.id);if(p)return p}let a=Fi(e.id);if(a)return a;let c=l.reports.map(p=>p.fileName).filter(Boolean),u=await Dy(e.id,{skip:c});return u?await s(u):null}var TT=k(()=>{"use strict";U();Bi();RT()});function pV(e){let t=FT.get(e);if(t===void 0){let r=getComputedStyle(e).overflowY;t=r==="auto"||r==="scroll"||r==="overlay",FT.set(e,t)}return t}function i$(e){let t=e.parentNode;for(;t;){if(t.nodeType===Node.DOCUMENT_FRAGMENT_NODE){t=t.host??null;continue}if(t.nodeType!==Node.ELEMENT_NODE||t===document.documentElement)return null;if(pV(t))return t;t=t.parentNode}return null}function fV(e){for(let t of e)cc.get(t.target)?.cb(t.isIntersecting)}function hV(e){let t=e??document,r=LT.get(t);return r||(r=new IntersectionObserver(fV,{root:e,rootMargin:uV,threshold:0}),LT.set(t,r)),r}function dc(e,t){let r=cc.get(e);r?.io&&r.io.unobserve(e),cc.set(e,{cb:t,io:null}),n$.push(e),o$||(o$=!0,queueMicrotask(mV))}function mV(){o$=!1;let e=n$;n$=[];for(let t of e){let r=cc.get(t);!r||r.io||(r.io=hV(i$(t)),r.io.observe(t))}}function Uo(e){let t=cc.get(e);t&&(t.io?.unobserve(e),cc.delete(e))}var uV,LT,cc,n$,o$,FT,dp=k(()=>{"use strict";uV="100% 0px",LT=new WeakMap,cc=new WeakMap,n$=[],o$=!1,FT=new WeakMap});var OT={};gb(OT,{revealFinding:()=>s$,revealFindingInReport:()=>Mg});function kV(e){Eg!==null&&clearTimeout(Eg);for(let t of document.querySelectorAll(`.${Cg}`))t.classList.remove(Cg);e.classList.add(Cg),Eg=setTimeout(()=>{e.classList.remove(Cg),Eg=null},gV)}function xV(e){return new Promise(t=>{let r=null,n=0,o=0,i=()=>{let s=Math.round(e.getBoundingClientRect().top);n=s===r?n+1:0,r=s,n>=vV||++o>=yV?t():requestAnimationFrame(i)};requestAnimationFrame(i)})}function $V(e){let t=0,r=window.innerHeight,n=i$(e);if(n){let o=n.getBoundingClientRect();t=Math.max(t,o.top),r=Math.min(r,o.bottom)}return{top:t,bottom:r}}function _V(e){let t=e.getBoundingClientRect();if(t.height===0)return!1;let{top:r,bottom:n}=$V(e);if(n<=r)return!1;let o=(r+n)/2;return t.top>=r&&t.bottom<=n||t.top<=o&&t.bottom>=o}async function SV(e){e.scrollIntoView({block:"center",behavior:"smooth"});for(let t=0;t<wV;t++){if(await xV(e),!e.isConnected||_V(e))return;e.scrollIntoView({block:"center",behavior:"instant"})}}async function CV(e){let t=CSS.escape(e);if(l.viewMode==="table"){let r=N.querySelector("finding-table");if(r){try{await r.updateComplete}catch{}for(let n of r.shadowRoot?.querySelectorAll("finding-row")??[])if(n.group&&de(n.group)===e)return n}}if(l.viewMode==="kanban"){let r=N.querySelector(`.kanban-card[data-gid="${t}"]`);if(r)return r}return N.querySelector(`finding-card[data-gid="${t}"]`)??N.querySelector(`[data-gid="${t}"]`)}async function BT(e,t,r=()=>!0){let n=R1(e.group,t),o=ar(n);if(o&&pm(o)&&queueMicrotask(_e),E(),await Y({revealSelection:!0}),!r())return{ok:!1};let i=await CV(n);return r()?i?(typeof i.ensureRendered=="function"&&await i.ensureRendered(),await SV(i),r()?(kV(i),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function s$(e,{openManagedReport:t=Oo,isCurrent:r=()=>!0}={}){if(!e?.id)return{ok:!1,reason:"This link is missing a finding id."};let n=await IT(e,{openReport:ur,openWorkspace:Kr,openManagedReport:t,isCurrent:r});return r()?n?await BT(n,e.id,r):{ok:!1,reason:C()?"Couldn't find that finding in the team reports you can access.":bV}:{ok:!1}}async function Mg(e,t,r=null){if(!e||!t)return{ok:!1,reason:"Missing finding id or report name."};let n=await AT(e,t,r,{openReport:ur,openManagedReport:Oo});return n?await BT(n,e):{ok:!1,reason:r?`Could not open that finding in "${t}". Open the team and try again.`:`Couldn't find that finding in "${t}". It may have been re-imported since this links file was written.`}}var gV,Cg,bV,Eg,vV,yV,wV,Rg=k(()=>{"use strict";U();mr();Bi();TT();ct();Di();dp();Yt();Qn();gV=1600,Cg="link-target",bV="Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.",Eg=null,vV=3,yV=150,wV=5});function Ag(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}function EV(){return Nn().size}function MV(){return Ts().size}function AV(e,t){let r=l.currentView==="bundles"?l.selectedBundle:null,n=["findings","files","links"].includes(l.currentView)?l.currentFile:null,o=r?"bundles":"reports",i=n?Li(n):null,s=e.filter(c=>r?c.bundles.includes(r):c.id===i),a=JSON.stringify([o,r||n,s.map(c=>c.id)]);if(!(!t&&a===PT)){PT=a;for(let c of s){let u=hp.get(c.id)??new Set;u.add(o),hp.set(c.id,u)}}}function DT(e,t={}){let n=`file-item${e===l.currentFile&&(t.workspaceId??null)===Li(e)&&(l.currentView==="findings"||l.currentView==="files"||l.currentView==="links")?" current":""}${t.indented?" indented":""}`,o=Ae(e),i=Md(e),s=Se[ot(e)]??Se.default;return d`<li class="${n}" data-file="${e}" data-workspace-id="${t.workspaceId??m}" draggable="true"><button type="button" class="file-name" data-tooltip="${o}">${V(s)}<span class="file-label">${o}</span>${i===void 0?m:d`<span class="file-count">${i}</span>`}</button></li>`}function WT(e,t={}){let r=`file-group-header${t.dropTarget?" default-reports":""}`;return d`<li class="${r}" data-default-reports="${t.dropTarget?"true":m}"><span class="group-label">${e}</span></li>`}function LV(){let e=C()?m:d`<span class="workspace-header-actions"><button type="button" class="workspace-add" data-action="new-workspace" aria-label="Create a new workspace">${IV}</button></span>`;return d`<li class="file-group-header workspace-header"><span class="group-label">Workspaces</span>${e}</li>`}function zT(){if(!C())return m;let e=c3(l.managedTeams,qi);return e.length===0?m:d`${WT("Teams")} ${oe(e,({team:t})=>t.id,({team:t,reports:r,bundles:n})=>d`<li class="${`file-item team-item${l.currentManagedTeam===t.id&&l.currentWorkspace&&l.currentView==="findings"?" current":""}`}"><button type="button" class="file-name" @click="${()=>{Oo(t)}}">${UV}<span class="file-label">${t.name}</span></button> ${l.managed?.allowShare&&["admin","manage"].includes(l.managedSession?.role)?d`<button type="button" class="workspace-share" aria-label="${`Share ${t.name} publicly`}" data-tooltip="Share public link" @click="${()=>{N6(t)}}">${KT}</button>`:m}</li>${oe(r,o=>o.id,o=>FV(t,o))} ${oe(n,o=>o.id,o=>OV(t,o))}`)}`}function FV(e,t){let r=l.currentManagedTeam===e.id&&l.currentManagedReport===t.id&&["findings","links"].includes(l.currentView);return d`<li class="${`file-item indented team-report-item${r?" current":""}`}"><button type="button" class="file-name" data-tooltip="${t.filename}" data-tooltip-repo="${iw(t)||m}" data-tooltip-placement="right-start" @click="${()=>{BV(e,t)}}">${V(Se[sw(t.filename,t.analyzer)])}<span class="file-label">${t.filename}</span></button></li>`}function BV(e,t){return Oo(e,t.id)}function OV(e,t){let r=l.currentView==="bundles"&&l.currentManagedTeam===e.id&&l.bundleDetails?.managedId===t.id;return d`<li class="${`file-item indented team-bundle-item${r?" current":""}`}"><button type="button" class="file-name" data-managed-bundle="${t.id}" data-managed-team="${e.id}" data-tooltip="${t.filename}" data-tooltip-repo="${iw(t)||m}" data-tooltip-bundle="${t.kind||m}" data-tooltip-stats="${l3(t)||m}" data-tooltip-commit="${t.summary?.commit||m}" data-tooltip-placement="right-start">${GT}<span class="file-label">${t.filename}</span></button></li>`}function NV(){return d`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}function UT(e,t={}){let{integrity:r,name:n}=e,o=l.selectedBundle===r&&l.currentView==="bundles"&&(t.workspaceId??null)===l.selectedBundleWorkspace,s=`file-item bundle-item${t.workspaceId!=null?" indented":""}${o?" current":""}`;return d`<li class="${s}" data-bundle-integrity="${r}" data-workspace-id="${t.workspaceId??m}" draggable="true"><button type="button" class="file-name" data-tooltip="${`${n}
|
|
163
|
+
${r}`}">${GT}<span class="file-label">${n}</span></button></li>`}function PV(e,t){let r=e.slice(0,15);return d`<li class="file-item indented bundle-item bundle-missing" data-bundle-integrity="${e}" data-workspace-id="${t}" data-tooltip="Bundle bytes not on this device — drop the matching bundle to attach."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${r}…</em></span></span></li>`}function DV(e,t){return d`<li class="file-item indented report-missing" data-workspace-id="${t}" data-tooltip="Report not on this device — it re-downloads automatically if a workspace member has uploaded it."><span class="file-name"><span class="file-icon" aria-hidden="true">?</span><span class="file-label"><em>missing · ${Ae(e)}</em></span></span></li>`}function VV(e,{app:t,compact:r,reports:n,bundles:o,showReports:i,showBundles:s}){let c=`file-item workspace-item${l.currentWorkspace===e.id&&(l.currentView==="findings"||l.currentView==="files")?" current":""}`;return d`<li class="${c}" data-workspace-id="${e.id}"><div class="workspace-heading"><button type="button" class="file-name">${zV}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" data-tooltip="Share by link" aria-label="Share workspace by link">${KT}</button> <button type="button" class="workspace-export" data-action="export-workspace" data-tooltip="Export workspace" aria-label="Export workspace">${HV}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" data-tooltip="Leave workspace" aria-label="Leave workspace">${jV}</button></div>${r?d`<div class="workspace-meta">${t?.appMode?d`<span class="workspace-findings">${t.appFindings.toLocaleString()} finding${t.appFindings===1?"":"s"}</span>`:m} <span class="workspace-sections" role="group" aria-label="Workspace files"><button type="button" data-workspace-section="reports" aria-expanded="${String(i)}" ?disabled="${hc}">${n.toLocaleString()} report${n===1?"":"s"}</button> ${o>0?d`<button type="button" data-workspace-section="bundles" aria-expanded="${String(s)}" ?disabled="${hc}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:m}</span></div>`:m}</li>`}function uc(e){return qi?Ae(e).toLowerCase().includes(qi):!0}async function Y({revealSelection:e=!1}={}){await bt();let t=En();if(Wx({serverMode:t,session:l.managedSession,teams:l.managedTeams,sessionPending:ha,teamsPending:ma,alternateMode:tn(l.serverModeConfig)?"e2e":"local",onSwitchMode:YT}),dg(),C()){if(!ha&&!ma&&!pc&&!Lg&&zi({catalogOnly:!0}),l.bundles=(l.bundles??[]).filter(b=>b.managedId),l.storedFiles=[],Vx([]),!re)return;ae(d`${zT()}`,u$),re.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),re.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),re.querySelector("#storage-status")?.setAttribute("hidden",""),no();return}if(re?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),re?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await o0(),t!==En()){await Y();return}Nr().catch(()=>{}),Hd().catch(()=>{});let r=await fe();if(t!==En()){await Y();return}let n=Q();AV(n,e),Vx(n);let[o]=await Promise.all([Vt(),...n.map(b=>It("workspace",b.id))]);if(t!==En()){await Y();return}if(l.bundles=o,l.storedFiles=r,jx(),!re)return;let i=new Set(r),s=new Set;for(let b of n)for(let v of b.reports)i.has(v)&&s.add(v);let a=new Map(o.map(b=>[b.integrity,b])),c=new Set;for(let b of n)for(let v of b.bundles)a.has(v)&&c.add(v);let u=new Map;for(let b of NT)u.set(b,[]);for(let b of r){if(s.has(b)||!uc(b))continue;let v=ot(b);u.has(v)||u.set(v,[]),u.get(v).push(b)}let p=n.filter(b=>!qi||b.name.toLowerCase().includes(qi)||b.reports.some(v=>uc(v))?!0:b.bundles.some(v=>{let x=a.get(v);return x&&uc(x.name)})),f=o.filter(b=>!c.has(b.integrity)&&uc(b.name));ae(d`${zT()} ${C()&&n.length===0?m:LV()} ${oe(p,b=>b.id,b=>{let v=[],x=[];for(let A of b.reports)uc(A)&&(i.has(A)?v.push(A):x.push(A));v.sort(a$),x.sort(a$);let w=[],y=[];for(let A of b.bundles){let W=a.get(A);W?(!qi||uc(W.name))&&w.push(W):qi||y.push(A)}let $=GR(b)??Ds(b),_=$?.appMode??P0(b)===!0,S=hp.get(b.id),M=!_||hc||S?.has("reports")===!0,R=!_||hc||S?.has("bundles")===!0,P=[...v,...x].filter(A=>Lt(A)!==Xe).length,L=w.length+y.length;return d`${VV(b,{app:$,compact:_,reports:P,bundles:L,showReports:M,showBundles:R})} ${M?d`${v.map(A=>DT(A,{indented:!0,workspaceId:b.id}))}${x.map(A=>DV(A,b.id))}`:m} ${R?d`${w.map(A=>UT(A,{workspaceId:b.id}))}${y.map(A=>PV(A,b.id))}`:m}`})} ${NT.map(b=>{let v=(u.get(b)??[]).toSorted(a$),x=b==="default";return v.length===0&&!(x&&Ig)?null:d`${WT(RV[b]??b,{dropTarget:x})} ${v.map(w=>DT(w))}`})} ${f.length>0||Tg?NV():null} ${oe(f,b=>b.integrity,b=>UT(b))}`,u$);let h=re.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=EV());let g=re.querySelector('sidebar-view-button[kind="repositories"]');g&&(g.count=MV()),no(),yy(r,qT)}function qT(){l$||(l$=!0,requestAnimationFrame(()=>{l$=!1,Y().catch(e=>console.warn("counts repaint:",e))}))}async function YT(){re?.querySelector("#user-menu")?.hidePopover?.(),Yr?await rW():ov()&&await Og()}async function HT(e){let t=e.target.closest("[data-workspace-section]");if(t){if(hc||t.disabled)return;let p=t.closest("[data-workspace-id]")?.dataset.workspaceId;if(!p)return;let f=t.dataset.workspaceSection,h=hp.get(p)??new Set;h.has(f)?h.delete(f):h.add(f),hp.set(p,h),await Y();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await YT();return}if(e.target.closest('[data-action="go-home"]')){await Zn();return}let r=e.target.closest("[data-managed-bundle]");if(r){Fe.navigate(wt({view:"bundles",teamId:r.dataset.managedTeam,bundleId:r.dataset.managedBundle,bundleTab:l.currentView==="bundles"?l.bundleDetailsTab:"overview"},l.managedTeams));return}let n=e.target.closest(".file-item[data-bundle-integrity]");if(n){if(n.classList.contains("bundle-missing"))return;let p=n.dataset.bundleIntegrity,f=n.dataset.workspaceId??null;if(l.selectedBundle===p&&l.currentView==="bundles"&&l.selectedBundleWorkspace===f)return;Ro(p,void 0,{workspaceId:f}),Bo(p,l.bundleDetailsTab),E(),Y(),Ao(p);return}let o=e.target.closest("sidebar-view-button");if(o){let p=o.getAttribute("kind");(p==="packages"||p==="repositories")&&(l.currentView=p,E(),Y());return}if(e.target.closest('[data-action="new-workspace"]')){if(C())return;let p=await dT();p&&(await Ym(),await Ry(p),Y());return}let i=e.target.closest('[data-action="share-workspace"]');if(i){let p=i.closest("[data-workspace-id]"),f=p?Q().find(h=>h.id===p.dataset.workspaceId):null;f&&hT({id:f.id,name:f.name,privateKeyBase64:f.privateKey}).catch(h=>alert(`Failed to open share dialog: ${h.message}`));return}let s=e.target.closest('[data-action="export-workspace"]');if(s){let p=s.closest("[data-workspace-id]"),f=p?Q().find(h=>h.id===p.dataset.workspaceId):null;f&&lT(f).catch(h=>alert(`Failed to open export dialog: ${h.message}`));return}let a=e.target.closest('[data-action="leave-workspace"]');if(a){let p=a.closest("[data-workspace-id]"),f=p?Q().find(w=>w.id===p.dataset.workspaceId):null;if(!f)return;let h=Array.isArray(f.reports)?f.reports:[],g;try{g=await ih(h)}catch(w){alert(`Couldn't read reports to analyze triage impact: ${w.message}`);return}let{confirmed:b,mode:v,triage:x}=await pT({name:f.name,reportCount:h.length,bundleCount:f.bundles.length,triageImpact:g});if(!b)return;if(!Q().some(w=>w.id===f.id)){alert(`Workspace "${f.name}" was removed elsewhere; nothing to leave.`);return}try{await QR(f.id,v,{triage:x})}catch(w){alert(`Failed to leave workspace: ${w.message}`)}return}let c=e.target.closest(".file-item.workspace-item[data-workspace-id]");if(c){let p=c.dataset.workspaceId,f=l.currentView==="findings"||l.currentView==="files";p&&(p!==l.currentWorkspace||!f)&&Kr(p);return}let u=e.target.closest(".file-item[data-file]");if(u){let p=u.dataset.file,f=l.currentView==="findings"||l.currentView==="links",h=u.dataset.workspaceId??null;p&&(p!==l.currentFile||h!==l.currentReportWorkspace||!f)&&ur(p,void 0,{workspaceId:h});return}if(e.target.closest("sidebar-delete-current")){if(l.currentView==="bundles"&&l.selectedBundle){let w=l.selectedBundle,y=(l.bundles??[]).find(S=>S.integrity===w)?.name??w,$=Q().filter(S=>Array.isArray(S.bundles)&&S.bundles.includes(w)).filter(S=>H0(S.id,w)).map(S=>S.id),{confirmed:_}=await vT({name:y,inRemote:$.length>0});if(!_)return;if(l.selectedBundle!==w){alert(`Active bundle changed during confirmation; aborting delete of "${y}".`);return}try{await ZR({deleteFromRemoteWorkspaceIds:$})}catch(S){alert(`Failed to delete bundle: ${S.message}`)}return}if(!l.currentFile)return;let p=l.currentFile,f;try{f=await ih([p])}catch(w){alert(`Couldn't read reports to analyze triage impact: ${w.message}`);return}let h=Q().filter(w=>Array.isArray(w.reports)&&w.reports.includes(p)).filter(w=>bl(w.id,p)).map(w=>w.id),g=h.length>0,b=Dh(p)?"links file":"report",{confirmed:v,triage:x}=await gT({name:p,kindLabel:b,triageImpact:f,inRemote:g});if(!v)return;if(l.currentFile!==p){alert(`Active file changed during confirmation; aborting delete of "${p}".`);return}try{await XR({triage:x,deleteFromRemoteWorkspaceIds:h})}catch(w){alert(`Failed to delete ${b}: ${w.message}`)}return}if(e.target.closest("#sync-status")){te.status==="error"?te.dismissError():te.status==="off"?(!te.getServerUrl()&&pp&&te.setServerUrl(pp),te.setEnabled(!0)):te.setEnabled(!1);return}for(let p of Object.keys(Fg))if(e.target.closest(`[data-action="${p}"]`)){re?.querySelector("#user-menu")?.hidePopover?.(),la(p);return}if(e.target.closest('[data-action="managed-logout"]')){K6(l.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){if(C())return;Yi.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Yi.classList.contains("collapsed")?"1":"0")}catch{}}}function GV(e){hc=e.target.value.length>0,qi=e.target.value.trim().toLowerCase(),Y()}function XT(){return te.getServerUrl()||pp?Q().length>0:!1}function JT(){let e=re?.querySelector("#auth-status");if(!e)return;let t=re?.querySelector("#manage-status"),r=re?.querySelector("#user-menu"),n=l.managedSession;if(Yi?.toggleAttribute("data-authenticated",n!=null),Yi?.toggleAttribute("data-workspace-access",n!=null&&n.role!=="none"),e.hidden=n==null,n==null){t&&(t.hidden=!0),e.dataset.authed="0",e.removeAttribute("popovertarget"),e.removeAttribute("aria-label"),ae(m,e),r&&ae(m,r);return}if(n.publicShare){t&&(t.hidden=!0),e.removeAttribute("popovertarget"),ae(d`<span class="auth-login">Public workspace · Read only</span>`,e),r&&ae(m,r);return}let o=(n.login[0]??"?").toUpperCase(),i=typeof n.name=="string"&&/\s/u.test(n.name.trim())?n.name.trim():`@${n.login}`;if(e.dataset.authed="1",e.setAttribute("popovertarget","user-menu"),e.setAttribute("aria-label",`Account: ${n.login}`),ae(d`${jT(o,n.id)}<span class="auth-login">${i}</span>`,e),t){let s=C()&&(n.role==="admin"||n.role==="manage");t.hidden=!s}r&&ae(d`<div class="user-card">${jT(o,n.id,!0)} <span class="user-id"><span class="user-login">${n.login}</span> ${n.name?d`<span class="user-name">${n.name}</span>`:m}</span></div><button type="button" class="user-menu-row" data-action="toggle-client-mode">${tn(l.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${TV}<span>Log out</span></button>`,r)}function jT(e,t,r=!1){let n=`/api/avatar/${encodeURIComponent(t)}`;return d`<span class="${r?"user-avatar user-avatar-lg":"user-avatar"}"><span class="user-avatar-fallback">${e}</span> ${K0()||l.managedSession?.role==="none"?m:d`<img alt="" src="${n}" @error="${qV}">`}</span>`}function qV(e){e.currentTarget.classList.add("broken")}function ZT(){let e=re?.querySelector(".brand-tag");if(e){let t=l.serverMode==="managed"||tn(l.serverModeConfig);e.textContent=En(),t?(e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Switch from ${En()} mode`)):(e.removeAttribute("role"),e.removeAttribute("tabindex"),e.removeAttribute("aria-label"))}}function YV(){Yi&&(Yi.dataset.mode=En()),C()?(Yi?.classList.remove("collapsed"),re?.querySelector("sidebar-delete-current")?.setAttribute("hidden",""),re?.querySelector("#encryption-toggle")?.setAttribute("hidden",""),re?.querySelector("#auth-status")?.removeAttribute("hidden")):(re?.querySelector("sidebar-delete-current")?.removeAttribute("hidden"),re?.querySelector("#encryption-toggle")?.removeAttribute("hidden"),re?.querySelector("#manage-status")?.setAttribute("hidden",""),re?.querySelector("#auth-status")?.setAttribute("hidden","")),G8()}function no(e){let t=re?.querySelector("#sync-status");if(!t)return;if(ZT(),YV(),l.serverMode==="managed"&&l.localMode){t.hidden=!0,te.setForcedOff(!0);let p=re?.querySelector("#auth-status");p&&(p.hidden=!0);return}if(C()){t.hidden=!0,te.setForcedOff(!0),JT();return}if(l.serverMode==="standalone"){t.hidden=!0;let p=re?.querySelector("#auth-status");p&&(p.hidden=!0);return}let r=re?.querySelector("#auth-status");r&&(r.hidden=!0);let n=XT(),o=br()!=null;if(n&&o&&te.isEnabled()&&qd().catch(p=>{console.warn("sync: load failed",p)}),n&&o&&!te.getServerUrl()&&pp&&te.isEnabled()&&te.setServerUrl(pp),te.setForcedOff(!n),!n){t.hidden=!0;return}t.hidden=!1;let i=e??te.status;t.dataset.status=i;let s=te.persistenceDegraded;t.toggleAttribute("data-degraded",s);let a=te.proxyAuthRequired;t.toggleAttribute("data-proxy-auth",a);let c=s?"Not saving to this browser right now (storage may be full, or another tab is on a newer version). Changes that haven\u2019t synced could be lost on reload.":a?"Can\u2019t reach the sync server \u2014 the connection is being redirected to a sign-in proxy (e.g. Cloudflare Access). Reload the page to sign in again.":"";c?t.dataset.tooltip=c:delete t.dataset.tooltip;let u=t.querySelector(".sync-label");u&&(u.textContent=KV[i]??"")}async function QT(){if(!te.persistenceDegraded||f$||c$)return;c$=!0;let{shown:e}=await _T();if(c$=!1,e){f$=!0;return}te.persistenceDegraded&&setTimeout(QT,1500)}async function e7(){if(!te.proxyAuthRequired||h$||d$)return;d$=!0;let{shown:e,reload:t}=await CT();if(d$=!1,!e){te.proxyAuthRequired&&setTimeout(e7,1500);return}h$=!0,t&&location.reload()}function XV(e){if(e.target.closest("[data-workspace-section], [data-action]"))return;let t=e.target.closest(".file-item.workspace-item");if(!t)return;let r=t.querySelector(".file-label");if(!r||r.querySelector("input"))return;let n=t.dataset.workspaceId,o=Q().find(c=>c.id===n);if(!o)return;e.preventDefault();let i=document.createElement("input");i.type="text",i.value=o.name,i.className="workspace-rename-input",r.textContent="",r.append(i),i.focus(),i.select();let s=!1,a=async c=>{if(!s){s=!0;try{c&&await Iy(n,i.value)}catch(u){alert(`Failed to rename workspace: ${u.message}`)}finally{r.contains(i)&&(r.textContent=Q().find(u=>u.id===n)?.name??o.name),Y()}}};i.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),a(!0)):c.key==="Escape"&&(c.preventDefault(),a(!1))}),i.addEventListener("blur",()=>a(!0)),i.addEventListener("click",c=>c.stopPropagation()),i.addEventListener("dblclick",c=>c.stopPropagation())}function Bg(){for(let e of re.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function t7(e){return e.dataTransfer.types.includes(b$)||e.dataTransfer.types.includes(fp)}function JV(e){let t=e.target.closest(".file-item[data-bundle-integrity]");if(t){if(t.classList.contains("bundle-missing")){e.preventDefault();return}let n=t.dataset.bundleIntegrity;e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(fp,n),e.dataTransfer.setData(p$,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n),t.classList.add("dragging"),Tg=!0,Y();return}let r=e.target.closest(".file-item[data-file]");r&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(b$,r.dataset.file),e.dataTransfer.setData(p$,r.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r.dataset.file),r.classList.add("dragging"),Ig=!0,Y())}function ZV(){for(let e of re.querySelectorAll(".dragging"))e.classList.remove("dragging");Bg(),(Ig||Tg)&&(Ig=!1,Tg=!1,Y())}function QV(e){if(!t7(e))return;e.preventDefault();let t=e.target.closest("[data-workspace-id]"),r=re.querySelector(".dragging")?.closest("[data-workspace-id]")?.dataset.workspaceId??null,i=t&&r&&t.dataset.workspaceId===r||!t&&!r;if(e.dataTransfer.dropEffect=i?"none":"move",Bg(),!i)if(t){let s=t.dataset.workspaceId;for(let a of re.querySelectorAll(`[data-workspace-id="${CSS.escape(s)}"]`))a.classList.contains("dragging")||a.classList.add("drag-over")}else{let a=e.dataTransfer.types.includes(fp)?"[data-default-bundles]":"[data-default-reports]",c=re.querySelector(a);c&&c.classList.add("drag-over")}}function eW(e){re.contains(e.relatedTarget)||Bg()}async function tW(e){if(!t7(e))return;e.preventDefault(),e.stopPropagation(),Bg();let t=e.target.closest("[data-workspace-id]"),r=t?t.dataset.workspaceId:null,n=e.dataTransfer.getData(p$)||null;if(e.dataTransfer.types.includes(fp)){let s=e.dataTransfer.getData(fp);if(!s)return;if(n&&n!==r&&H0(n,s)){let a=(l.bundles??[]).find(p=>p.integrity===s)?.name??s,c=Q().find(p=>p.id===n),{confirmed:u}=await wT({name:a,workspaceName:c?.name??""});if(!u)return;try{await kh(n,s)}catch(p){console.warn(`Failed to remove '${a}' from source workspace ${n} remote:`,p)}}r&&await Os(s,r),n&&n!==r&&await Oy(s,n),Y();return}let o=e.dataTransfer.getData(b$);if(!o)return;if(n&&n!==r&&bl(n,o)){let s=Q().find(c=>c.id===n),{confirmed:a}=await xT({name:o,workspaceName:s?.name??""});if(!a)return;try{await wh(n,o)}catch(c){console.warn(`Failed to remove '${o}' from source workspace ${n} remote:`,c)}}r&&await Bs(o,r),n&&n!==r&&await Nd(o,n),l.currentWorkspace&&(l.currentWorkspace===r||l.currentWorkspace===n)?await Kr(l.currentWorkspace):Y()}async function Og({forgetLastView:e=!0,resetNavigation:t=!0}={}){Fe.reset({force:t}),up?.remove(),up=null;let r=++Zt;if(ma=!0,Lg=!1,A6(),ew(),aa(),lp(),vh(l.serverMode!=="e2e"),te.setForcedOff(!0),te.setProtocolLocked(l.serverMode!=="e2e"||!!Yr),JR({forgetLastView:e}),l.triage.clear(),C()){let n=ba();if(K0()&&(await n,r!==Zt))return}else{if(l.managedSession=null,l.managedTeams=[],await Cn(),r!==Zt||(await jd(),r!==Zt))return;Bd()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),dg(),ZT(),no(te.status),E(),await Y()}async function r7(e){if(e!==void 0&&!M6(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Jd.join(", ")}.`);if(await bt(),e===void 0&&(Yr||C()))return;let t=Zt,r=e===void 0?null:await Be();t===Zt&&(Yr??={serverMode:l.serverMode,serverModeConfig:l.serverModeConfig,serverModeSelection:l.serverModeSelection,localMode:l.localMode,managed:l.managed},r&&r.setPreviewRole(e),l.serverMode="managed",uo(!1),l.managedSession=null,l.managedTeams=[],await Og({forgetLastView:!1}))}async function rW(){let e=Yr,t=m$;Yr=null,m$=null,R6(),Object.assign(l,e),await Og({forgetLastView:!1}),t&&fa(t)}function fa(e,{runtime:t=!0}={}){if(Yr){m$=e;return}Ag(!1);let r=br()!=null,n=C(),o=l.serverMode;Un()&&e.managed&&(l.serverModeSelection="managed"),df(e.mode),Un()&&e.managed&&uo(!1);let i=o!==l.serverMode;l.managed=e.managed;let s=t&&l.githubNewIssueLabels!==(e.githubNewIssueLabels??"");if(t&&(l.githubNewIssueLabels=e.githubNewIssueLabels??""),t&&(l.deepviewScanServer=e.mode==="managed"?null:e.deepviewScanServer??null),dg(),vh(l.serverMode!=="e2e"),te.setProtocolLocked(l.serverMode!=="e2e"),ev(e),n!==C()){Og({forgetLastView:!1,resetNavigation:r&&!Un()&&!Da(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}no(te.status),i&&l.serverMode==="e2e"&&XT()&&te.isEnabled()&&qd().then(a=>{if(!(!a||l.serverMode!=="e2e"))for(let c of a.triageSync.openSessions)a.openWorkspace(c.workspaceId)}).catch(a=>console.warn("sync: resume failed",a)),i&&Y(),s&&E({animate:!1}),C()&&ba()}function ba(){if(pc?.generation===Zt)return pc.promise;ha=!0;let e={generation:Zt,promise:null};return pc=e,e.promise=nW().finally(()=>{pc===e&&(pc=null,Y())}),e.promise}async function nW(){let e=Zt,t=++VT,r=()=>e===Zt&&t===VT&&C();try{let n=l.managedSession,o=await F6({fallback:n});if(!r()||(l.managedSession=o,ha=!1,(!n||n.id!==o?.id||n.role!==o?.role)&&(ma=!0),Y(),I6(o),n&&(n.id!==o?.id||n.role!==o?.role)?(l.managedTeams=[],l.bundles=[],aa(),lp(),Fe.reset(),Zn({history:!1})):l.currentView in Fg&&ga(l.currentView)&&E({animate:!1}),JT(),Fx(),!await v$(r)))return;document.querySelector("base")||(up=document.createElement("base"),up.href="/",document.head.prepend(up)),Fe.active&&Object.hasOwn(fs,l.currentView)&&!ga(l.currentView)?await Fe.navigate({view:ga("manage")?"manage":"home"},{replace:!0}):o&&await Fe.start(sW)}catch(n){console.warn("managed: session probe failed:",n)}finally{r()&&(ha||ma)&&(ha=!1,ma=!1,Y())}}async function v$(e,{strict:t=!1,signal:r=Ws(),reuse:n=!1,revision:o=null}={}){let i=Zt,s=l.managedSession,c=await oW({generation:i,session:s,signal:r,reuse:n,revision:o})??(t?null:l.managedTeams);if(r.aborted||c===null||!e()||i!==Zt||!C())return!1;let u=l.managedTeams.find(h=>h.id===l.currentManagedTeam)?.name,p=T6(c);l.managedTeams=c,ma=!1;let f=l.currentView==="bundles"?l.bundleDetails?.managedId:null;if(n3(l,c,p)||f&&p.has(`bundle:${f}`)){let h=c.find(w=>w.id===l.currentManagedTeam),g=h&&(l.currentManagedReport===null||h.reports.some(w=>w.id===l.currentManagedReport)),b=f?wt({view:"bundles",teamId:l.currentManagedTeam,bundleId:f,bundleTab:l.bundleDetailsTab},c):g?wt({view:l.currentView==="links"?"findings":l.currentView,teamId:h.id,reportId:l.currentManagedReport},c):null;fc=null;let v=Zn({history:!1}),x=rt();if(await v,t)return x===rt()&&i===Zt&&l.managedSession?.id===s?.id&&l.managedSession?.role===s?.role&&C()&&await Fe.navigate(b??{view:"home"},{replace:!0}),e();if(!e())return!1}return u!==c.find(h=>h.id===l.currentManagedTeam)?.name&&E({animate:!1}),Y(),!0}function ga(e){let t=l.managedSession?.role;return e==="manage-links"&&!l.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!iW.has(e)||t==="admin")}async function sW(e,t){Lg=!0;try{return await aW(e,t)}finally{t()&&(Lg=!1,Y())}}async function aW(e,t){let r=fc===rt()?fc:null;if(Ft(),(["findings","files","bundles"].includes(e?.view)||e?.finding)&&!await v$(t,{reuse:!0}))return!1;let n=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!ga("manage-bundles")||(n=await O6(),!t()||!C()))||(e=ff(e,l.managedTeams,n),!e))return!1;let o=r!==null&&fc===r&&l.currentManagedTeam===e.teamId&&l.currentManagedReport===e.reportId;if(!t()||!C()||e.view!=="home"&&(!l.managedSession||l.managedSession.role==="none"))return!1;if(e.finding){let{revealFinding:s}=await Promise.resolve().then(()=>(Rg(),OT));if(!t())return!1;let a=await s({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(c,u)=>Oo(c,u,{history:!1}),isCurrent:t});return t()?a.ok?(fc=rt(),zi(),wt({view:"findings",teamId:l.currentManagedTeam,reportId:l.currentManagedReport,finding:{id:e.finding.id}},l.managedTeams)):(a.reason&&St(a.reason),!1):!1}if(e.view==="bundles"){let s=e.teamId==null?n.map(Th):r3(l.managedTeams);return await lW(e,s,t)?wt({...e,bundleTab:l.bundleDetailsTab},l.managedTeams,n):!1}if(e.view==="home")return Zn({history:!1});if(Object.hasOwn(fs,e.view))return la(e.view,{...e,history:!1});let i=l.managedTeams.find(s=>s.id===e.teamId);return!i||!o&&!await Oo(i,e.reportId,{history:!1})||!t()?!1:(l.currentView!==e.view&&Ze(),l.currentView=l.currentLinks?"links":e.view,document.body.classList.remove("report-fullscreen"),E({animate:!1}),fc=rt(),zi(),Y(),document.querySelector("#main-content")?.scrollTo({top:0}),wt({...e,view:l.currentView==="links"?"findings":l.currentView},l.managedTeams))}async function lW({bundleId:e,teamId:t,bundleTab:r},n,o){let i=rt(),s;try{s=await Sh(e)}catch{return!1}try{if(!o()||i!==rt()||!C())return!1;let a=Iu(s,s.integrity);a.managedId=e;let c=n.find(u=>u.managedId===e);return!c||c.integrity!==s.integrity?!1:(l.bundles=n,Ze(),Ro(c.integrity,r),l.bundleDetails=a,l.currentManagedTeam=t,l.currentManagedReport=null,l.reports=[],document.body.classList.remove("report-fullscreen"),E({animate:!1}),Y(),document.querySelector("#main-content")?.scrollTo({top:0}),!0)}catch(a){return o()&&a.name!=="AbortError"&&St(`Couldn't open bundle: ${a.message}`,{kind:"error"}),!1}}async function la(e,t={}){if(t.history!==!1&&C()&&(Fe.active||await ba(),Fe.active))return Fe.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{}});if(!(e in Fg)||!C()||!ga(e))return!1;let r=Ft(),n=Zt;try{let o=await Be();e==="manage-import"&&ga(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(Fg[e],o),!1}return n!==Zt||r!==rt()||!C()||!ga(e)?!1:(l.currentView=e,l.scanSelection=e==="manage-scans"&&t.bundleId?{bundleId:t.bundleId}:null,l.bundleCreationRepoId=e==="manage-bundles"?t.createRepoId??null:null,E({animate:!1}),Y(),ba(),document.querySelector("#main-content")?.scrollTo({top:0}),e==="manage-history"&&document.dispatchEvent(new CustomEvent("managed-history-filter",{detail:{actor:t.actor??""},bubbles:!0,composed:!0})),!0)}function bt(){return cW??=dW().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function dW(){let e=br();if(e){df(e.mode),l.managed=e.managed,ef().then(o=>{if(o&&o!=="standalone")return fa(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Ag(!Wc());let t=ef(),r=await Qb(t,Wc()?0:3e3),n=br();if(n)return r&&r!=="standalone"?fa(r):fa(n,{runtime:!1});if(r&&r!=="standalone")return fa(r);r==="standalone"&&Qp(),l.serverMode="standalone",l.serverModeConfig=null,l.serverModeSelection=null,uo(r===null),vh(!0),Ag(!1),no(te.status),Y(),r===null&&t.then(o=>{let i=br(),s=o&&o!=="standalone"?o:i??o;if(s==="standalone"){if(Qp(),Yr){Yr.serverMode="standalone",Yr.serverModeConfig=null,Yr.serverModeSelection=null,Yr.localMode=!1;return}return uo(!1),no(te.status),Y()}if(s)return fa(s,{runtime:s!==i})}).catch(o=>console.warn("server mode probe:",o))}function uW(){let e=re?.querySelector("#user-menu"),t=re?.querySelector("#auth-status");!e||!t||e.addEventListener("beforetoggle",r=>{if(r.newState!=="open")return;let n=t.getBoundingClientRect();e.style.left=`${Math.round(n.left)}px`,e.style.bottom=`${Math.round(window.innerHeight-n.top+6)}px`,e.style.top="auto",e.style.right="auto"})}function pW(e){Yi=e,re=e.renderRoot,u$=re.querySelector("#file-list"),K8(re.querySelector("#encryption-toggle")),rT(re.querySelector("#storage-status")),re.addEventListener("click",HT),re.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),HT(t))}),re.addEventListener("dblclick",XV),re.addEventListener("dragstart",JV),re.addEventListener("dragend",ZV),re.addEventListener("dragover",QV),re.addEventListener("dragleave",eW),re.addEventListener("drop",tW),qt(re,WV),re.querySelector("#sidebar-search-input")?.addEventListener("input",GV),uW(),no(te.status),br()||Ag(!Wc()),Y(),te.onServerInfo(t=>{if(l.serverMode!=="e2e")return;let r=br(),n=r&&{...r,...l.deepviewScanServer?{deepviewScanServer:l.deepviewScanServer}:{}};return fa(Jb(n,t))}),bt(),l.serverMode==="managed"&&ba()}var Yi,re,u$,pp,b$,p$,fp,Ig,Tg,RV,NT,qi,hc,hp,PT,IV,TV,GT,zV,UV,HV,jV,KT,a$,l$,WV,KV,c$,f$,d$,h$,Yr,m$,Zt,VT,pc,ha,ma,Lg,up,oW,Fg,iW,fc,cW,g$,Qn=k(()=>{"use strict";js();Kt();T();Pt();Je();U();dn();Kt();Ah();kl();vl();Lh();o3();s3();$l();d3();ko();po();Zd();Zm();hk();j8();cp();Nx();nT();Yt();oT();wk();iT();ug();Di();Bi();cT();lk();uT();fT();mT();bT();yT();kT();$T();ST();ET();un();gt();Pl();Io();xo();Yi=null,re=null,u$=null;M3();pp=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,b$="application/x-deepview-report",p$="application/x-deepview-source-ws",fp="application/x-deepview-bundle",Ig=!1,Tg=!1,RV={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium",[Xe]:"Links"},NT=["default","claude-security","codex-security","deepsec","piolium",Xe],qi="",hc=!1,hp=new Map,PT="";IV=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8h9"/></svg>`,TV=d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2.5H3.5v11H8M10 5l3 3-3 3M13 8H6"/></svg>`;GT=d`${V(or)}`;zV=d`${V(vi)}`,UV=d`<svg class="team-icon" viewBox="0 0 16 16" width="13" height="13" fill="currentColor" aria-hidden="true"><path d="M5.5 8a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Zm0 1C3.2 9 1.75 10.2 1.75 11.6V13h7.5v-1.4C9.25 10.2 7.8 9 5.5 9Zm5.25-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.25 1c-.43 0-.83.05-1.2.15.86.62 1.45 1.5 1.45 2.45V13h3.25v-1.3C14.5 10.1 13.15 9 11 9Z"/></svg>`,HV=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v8M5 7l3 3 3-3M3 13h10"/></svg>`,jV=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 3H4v10h5"/><path d="M7 8h7M11 5l3 3-3 3"/></svg>`,KT=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 9.5L9 7.5"/><path d="M9.5 5.5L10.5 4.5a2.1 2.1 0 1 1 3 3l-1 1"/><path d="M6.5 11.5L5.5 12.5a2.1 2.1 0 1 1-3-3l1-1"/></svg>`;a$=(e,t)=>Ae(e).localeCompare(Ae(t));l$=!1;tt(()=>{Y()});z0(qT);WV={placement:"right",gate:e=>{if(e.dataset.tooltipRepo||e.dataset.tooltipBundle)return!0;let t=e.querySelector(".file-label");return!t||(e.dataset.tooltip??"")!==t.textContent?!0:t.scrollWidth>t.clientWidth}};KV={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};te.onStatusChange(no);c$=!1,f$=!1;te.onPersistenceDegraded(e=>{no(),e?QT():f$=!1});d$=!1,h$=!1;te.onProxyAuthRequired(e=>{no(),e?e7():h$=!1});Yr=null,m$=null,Zt=0,VT=0,pc=null,ha=!0,ma=!0,Lg=!1,up=null;HR((e,t,r)=>v$(e,{strict:!0,signal:t,revision:r}));oW=i3(B6);Fg={manage:"admin: bundle load failed:","admin-users":"admin: bundle load failed:","manage-repos":"admin: repos bundle load failed:","manage-reports":"admin: reports bundle load failed:","manage-bundles":"admin: bundles bundle load failed:","manage-history":"admin: history bundle load failed:","manage-teams":"admin: teams bundle load failed:","manage-import":"admin: import bundle load failed:","manage-links":"admin: links bundle load failed:","manage-scans":"admin: scans bundle load failed:"},iW=new Set(["admin-users","manage-repos","manage-teams","manage-import"]),fc=null;document.addEventListener("managed-bundle-open",e=>{if(C()&&typeof e.detail?.id=="string"){let t=Th(e.detail),r=l.managedTeams,n=r.find(o=>o.id===l.currentManagedTeam&&o.bundles?.some(i=>i.id===t.managedId))??r.find(o=>o.bundles?.some(i=>i.id===t.managedId));Fe.navigate(xl(r,t,n?.id,l.currentView==="bundles"?l.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{ba()});document.addEventListener("managed-feed-closed",()=>{ha=!0,aa(),lp(),Zn({history:!1}).then(()=>ba()),St("Workspace access changed. Refreshing your session.")});document.addEventListener("managed-notice",e=>St(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,r=e.detail?.actor;typeof t=="string"&&la(t,{actor:r})});g$=class extends J{static styles=[F(Gi),F(V8)];render(){return d`<div class="sidebar-header"><h2 class="brand"><button class="brand-button" type="button" data-action="go-home"><span class="brand-name">Triage</span></button> <span class="brand-tag" data-action="toggle-client-mode">${En()}</span></h2><button id="encryption-toggle" type="button" hidden></button> <button id="sidebar-toggle" type="button" aria-label="toggle sidebar"><svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M2 4h12v1.5H2zM2 7.25h12v1.5H2zM2 10.5h12V12H2z"/></svg></button></div><div class="sidebar-search"><svg class="sidebar-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg> <input id="sidebar-search-input" type="search" placeholder="Search reports…" aria-label="Search reports" autocomplete="off"><sidebar-view-button kind="packages"></sidebar-view-button><sidebar-view-button kind="repositories"></sidebar-view-button></div><ul id="file-list"></ul><button id="storage-status" type="button" hidden><span class="storage-dot" aria-hidden="true"></span> <span class="storage-label"></span></button><div class="sidebar-actions"><sidebar-delete-current></sidebar-delete-current><button id="sync-status" type="button" data-status="off"><span class="sync-dot" aria-hidden="true"></span> <span class="sync-label">Sync off</span></button> <button id="auth-status" type="button" hidden></button> <button id="manage-status" type="button" hidden data-action="manage" aria-label="Manage">${V(Bh)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){pW(this)}};customElements.define("app-sidebar",g$)});var Dg,_$=k(()=>{Dg=`dialog{max-width:640px;width:min(94vw,640px)}header h3{margin:0 0 .4rem}.finding{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}textarea{display:block;width:100%;box-sizing:border-box;min-height:9rem;max-height:50vh;resize:vertical;padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;line-height:1.4;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted)}}
|
|
164
|
+
`});var mc,Hg=k(()=>{mc=`.managed-comment{container:managed-comment / inline-size;white-space:normal}.managed-comment-row{display:grid;grid-template-columns:minmax(0,max-content) minmax(0,1fr) auto;align-items:start;gap:.35rem .65rem;line-height:1.5}.managed-comment-author{grid-column:1;grid-row:1;display:flex;align-items:center;gap:.45rem;min-width:0;max-width:14rem;& strong{overflow:hidden;text-overflow:ellipsis;font-weight:600}}.managed-comment-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:1.3rem;height:1.3rem;overflow:hidden;border-radius:50%;background:rgb(from var(--muted) r g b / .15);color:var(--muted);font-size:.65rem;font-weight:600;& img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}& img[hidden]{display:none}}.managed-comment-body{grid-column:2;grid-row:1;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.managed-comment-time{color:var(--muted);font-size:.7rem;font-weight:400;white-space:nowrap;text-align:right}.managed-comment-meta{grid-column:3;grid-row:1;justify-self:end;display:flex;align-items:center;gap:.5rem;min-height:1.3rem}.managed-comment-actions{display:flex;align-items:center;gap:.15rem}.managed-comment-row:not(:has(.managed-comment-author)){grid-template-columns:minmax(0,1fr) auto;.managed-comment-body{grid-column:1}.managed-comment-meta{grid-column:2}}@container managed-comment (max-width: 28rem){.managed-comment-row:has(.managed-comment-meta){grid-template-columns:minmax(0,max-content) minmax(0,1fr);.managed-comment-meta{grid-column:1 / -1;grid-row:1}.managed-comment-author,.managed-comment-body{grid-row:2}}.managed-comment-row:not(:has(.managed-comment-author)){grid-template-columns:minmax(0,1fr)}.managed-comment-author{max-width:9rem}}
|
|
165
|
+
`});var P7,N7=k(()=>{P7=`dialog{width:min(94vw,800px);max-width:800px;max-height:calc(100dvh - 4rem);margin-block:2rem;padding:0}dialog[open]{display:flex;flex-direction:column}.discussion-header{display:flex;align-items:start;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.discussion-heading{flex:1;min-width:0}header h3{display:flex;align-items:center;gap:.5rem;margin:0;line-height:1.5}.comment-count{padding:.05rem .4rem;border-radius:1rem;background:rgb(from var(--muted) r g b / .12);color:var(--muted);font-size:.72rem;font-weight:400}.discussion-finding{margin-top:.4rem;font-size:.85rem;overflow-wrap:anywhere}.loc{margin-top:.25rem;color:var(--muted)}.header-actions{display:flex;flex:none;align-items:center;gap:.7rem}.header-actions button{display:inline-flex;flex:none;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:0;background:transparent;color:var(--muted);line-height:0;& svg{display:block;width:1rem;height:1rem}&:hover:not(:disabled){color:var(--text)}&:disabled{opacity:.5}}.comment-action{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:.2rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);cursor:default;& svg{width:.9rem;height:.9rem}&:hover:not(:disabled),&[aria-pressed=true]{border-color:var(--border);background:rgb(from var(--muted) r g b / .08);color:var(--text)}&.danger:hover:not(:disabled),&[aria-expanded=true]{color:var(--critical, #f87171)}&:disabled{opacity:.5}}button:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 3px)}.discussion-log{min-height:0;max-height:50dvh;overflow-y:auto;overscroll-behavior:contain;padding:.5rem;scrollbar-gutter:stable}.comments{display:flex;flex-direction:column;gap:.15rem;list-style:none}.comment{padding:.6rem .75rem;border-radius:var(--ui-radius, 6px);font-size:.84rem}.comment:hover{background:rgb(from var(--muted) r g b / .035)}.comment.editing{background:rgb(from var(--accent) r g b / .08);box-shadow:inset 0 0 0 1px rgb(from var(--accent) r g b / .2)}.delete-confirm{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.5rem;margin-top:.6rem;color:var(--muted);font-size:.75rem;& button{padding:.25rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:transparent;color:var(--text);font:inherit;&:hover:not(:disabled){background:rgb(from var(--muted) r g b / .08)}&.danger{color:var(--critical, #f87171)}&:disabled{opacity:.5}}}.empty-discussion{padding:2.5rem 0;color:var(--muted);text-align:center;font-size:.85rem}.composer{padding:1rem 1.25rem;border-top:1px solid var(--border)}.composer-label{display:flex;align-items:center;gap:.45rem;margin-bottom:.6rem;font-size:.78rem}.composer-label strong{font-weight:600}textarea{min-height:4.5rem;max-height:25dvh;font-size:.84rem}.nwd-actions{border:0;padding-top:0;margin-top:.65rem}.shortcut{color:var(--muted);font-size:.7rem}.error{padding:.65rem 1.25rem;color:var(--danger, #c44);font-size:.8rem}.read-only{padding:1rem 1.25rem;border-top:1px solid var(--border);color:var(--muted);font-size:.8rem}@media(width<=480px){.discussion-header,.composer{padding:.8rem}.discussion-log{padding-inline:.3rem}.comment{padding-inline:.5rem}.shortcut{max-width:8rem}}
|
|
166
|
+
`});var z7={};gb(z7,{openManagedCommentsDialog:()=>GW});function GW(e,t){return le("managed-comments-dialog",{finding:e,changed:t})}var N$,U7=k(()=>{"use strict";T();Je();U();A1();Vl();oa();Bm();gt();pe();_$();Hg();N7();N$=class extends D{static styles=[...D.styles,F(Dg),F(mc),F(P7)];static properties={finding:{attribute:!1},changed:{attribute:!1},_comments:{state:!0},_value:{state:!0},_editing:{state:!0},_busy:{state:!0},_error:{state:!0},_deleting:{state:!0}};constructor(){super(),this.finding=null,this.changed=null,this._comments=[],this._value="",this._editing=null,this._busy=!1,this._error="",this._deleting=null}connectedCallback(){super.connectedCallback(),document.addEventListener("managed-comments-reset",this._close)}disconnectedCallback(){this._unsubscribeComments?.(),this._unsubscribeComments=null,document.removeEventListener("managed-comments-reset",this._close),super.disconnectedCallback()}beforeOpen(){this._current=Nu(this.finding?._managedReportId),this._comments=Xn(this.finding),this._unsubscribeComments?.(),this._unsubscribeComments=Tm(this.finding.id,this._commentsChanged),this._refresh({scroll:!0})}_commentsChanged=()=>{if(!this.isConnected)return;if(!this._current()){this._close();return}let t=this.renderRoot.querySelector(".discussion-log"),r=t&&t.scrollHeight-t.scrollTop-t.clientHeight<32;this._comments=Xn(this.finding),r&&this._scrollToLatest()};_close=()=>this._finish(null);_scrollToLatest=async()=>{await this.updateComplete;let t=this.renderRoot.querySelector(".discussion-log");t&&(t.scrollTop=t.scrollHeight)};_refresh=async({scroll:t=!1}={})=>{if(!this._current()){this._close();return}let r=this.renderRoot.querySelector(".discussion-log"),n=r&&r.scrollHeight-r.scrollTop-r.clientHeight<32;this._busy=!0,this._error="";let o=await jl(this.finding._managedReportId);if(this.isConnected){if(!this._current()){this._close();return}if(this._busy=!1,!o){this._error="Could not load comments. Please retry.";return}this._comments=Xn(this.finding),this.changed?.(),(t||n)&&this._scrollToLatest()}};_edit(t){this._deleting=null,this._editing=t,this._value=t.body,this._error="",this.updateComplete.then(()=>this.renderRoot.querySelector("textarea")?.focus())}_cancelEdit=()=>{this._editing=null,this._value="",this._error=""};_delete=async t=>{if(this._busy||!this._current())return;this._busy=!0,this._error="";let r=await mM(this.finding,t);if(!this.isConnected){r===204&&this._current()&&this.changed?.();return}if(!this._current()){this._close();return}if(this._busy=!1,this._deleting=null,r===409){await this._refresh(),this.isConnected&&(this._error="This comment changed elsewhere. Review the latest version before deleting it.");return}if(r!==204){this._error=r===403||r===404?"This comment is unavailable or you no longer have permission to delete it.":"Could not delete the comment. Please retry.";return}this._comments=Xn(this.finding),this._editing?.id===t.id&&this._cancelEdit(),this.changed?.()};_save=async()=>{let t=this._value.trim();if(this._busy||!t||t.length>1e4||!this._current())return;this._busy=!0,this._error="";let r=await hM(this.finding,t,this._editing);if(!this.isConnected)return;if(!this._current()){this._close();return}if(this._busy=!1,r.status===409){if(await this._refresh(),!this.isConnected)return;this._editing=this._comments.find(o=>o.id===this._editing?.id)??this._editing,this._error="This comment changed elsewhere. Your draft is kept. Review the latest version above before saving again.";return}if(!r.comment){this._error=r.status===403||r.status===404?"You no longer have permission to save this comment.":"Could not save the comment. Your draft is kept; please retry.";return}let n=this._editing!=null;this._comments=Xn(this.finding),this._cancelEdit(),this.changed?.(),n||await this._scrollToLatest(),await this.updateComplete,this.renderRoot.querySelector("textarea")?.focus()};_keydown=t=>{t.key==="Enter"&&(t.ctrlKey||t.metaKey)&&(t.preventDefault(),this._save())};_commentActions(t,r){let n=r&&t.authorId===l.managedSession?.id,o=Fm(t);return!n&&!o?m:d`${n?d`<button type="button" class="comment-action" aria-label="Edit comment" aria-pressed="${this._editing?.id===t.id}" ?disabled="${this._busy}" @click="${()=>this._edit(t)}">${V(g3)}</button>`:m} ${o?d`<button type="button" class="comment-action danger" aria-label="Delete comment" aria-expanded="${this._deleting===t.id}" ?disabled="${this._busy}" @click="${()=>{this._deleting=this._deleting===t.id?null:t.id}}">${V(b3)}</button>`:m}`}_deleteConfirmation(t){return this._deleting!==t.id||!Fm(t)?m:d`<div class="delete-confirm" role="group" aria-label="Confirm comment deletion"><span>Delete this comment?</span> <button type="button" ?disabled="${this._busy}" @click="${()=>{this._deleting=null}}">Cancel</button> <button type="button" class="danger" ?disabled="${this._busy}" @click="${()=>this._delete(t)}">Delete</button></div>`}render(){let t=Lm();return d`<dialog aria-labelledby="comments-title" @close="${this._onClose}"><header class="discussion-header"><div class="discussion-heading"><h3 id="comments-title">Discussion <span class="comment-count">${this._comments.length}</span></h3>${this.finding?.title?d`<p class="discussion-finding">${this.finding.title}</p>`:m}<p class="loc">${this.finding?.file??""}</p></div><div class="header-actions"><button type="button" class="refresh" aria-label="Refresh discussion" ?disabled="${this._busy}" @click="${()=>this._refresh()}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8M21 3v5h-5"/></svg></button> <button type="button" class="close" aria-label="Close discussion" @click="${this._close}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="m6 6 12 12M6 18 18 6"/></svg></button></div></header><section class="discussion-log" role="log" aria-label="Discussion" aria-relevant="additions text" aria-busy="${this._busy}"><ol class="comments">${this._comments.map(r=>d`<li class="${`comment${this._editing?.id===r.id?" editing":""}`}">${Wl(r,Lo(r.body),this._commentActions(r,t))} ${this._deleteConfirmation(r)}</li>`)}</ol>${this._comments.length===0?d`<p class="empty-discussion">${this._busy?"Loading discussion\u2026":t?"No comments yet. Start the discussion below.":"No comments yet."}</p>`:m}</section>${this._error?d`<p class="error" role="alert">${this._error}</p>`:m} ${t?d`<form class="composer" @submit="${r=>{r.preventDefault(),this._save()}}"><label class="composer-label" for="comment-body">${T1(l.managedSession.id,l.managedSession.login)} ${this._editing?"Edit your comment":d`Reply as <strong>${l.managedSession.login}</strong>`}</label> <textarea id="comment-body" rows="3" maxlength="${1e4}" .value="${this._value}" placeholder="Write a comment…" aria-describedby="comment-shortcut" ?disabled="${this._busy}" @input="${r=>{this._value=r.target.value}}" @keydown="${this._keydown}"></textarea><footer class="nwd-actions"><span id="comment-shortcut" class="shortcut">Ctrl / ⌘ + Enter to send</span><span class="nwd-spacer"></span> ${this._editing?d`<button type="button" class="quiet" ?disabled="${this._busy}" @click="${this._cancelEdit}">Cancel edit</button>`:m} <button type="submit" class="primary" ?disabled="${this._busy||!this._value.trim()}">${this._editing?"Save changes":"Comment"}</button></footer></form>`:d`<p class="read-only">You have read-only access to this discussion.</p>`}</dialog>`}};customElements.define("managed-comments-dialog",N$)});T();He();Pt();ao();Re();globalThis[Symbol.for("@rray/frontend")]={LitElement:J,html:d,nothing:m,render:ae,unsafeCSS:F,StateElement:X,classMap:z,repeat:oe,styleMap:Me};mr();U();dn();Qn();Di();Io();Rg();nh();U();dn();bu();var n7={attach:{title:"Synced triage on report attach",intro:"have triage from your workspace that disagrees with your local view on",trailingNote:"Other findings in this report whose chain value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep.",importedSideLabel:"Apply from chain",applyButton:"Apply"},chain:{title:"Triage conflict from peer update",intro:"were changed by a peer (or by another tab) in a way that disagrees with your local triage on",trailingNote:`Other findings whose remote value didn't conflict were applied automatically; this list only covers disagreements. Pick which side to keep for each \u2014 a "keep current" pick re-publishes your local value to the chain on your next save.`,importedSideLabel:"Apply from chain",applyButton:"Apply"}};function o7(){y6(async(e,t,r)=>{let n=Uy(e);try{return await Al(e,n,n7[r]??n7.attach)}catch{let o=e.length;return alert(`${r==="attach"?"A report attach":"A workspace sync"} had ${o} triage disagreement${o===1?"":"s"} with your local view. Kept your local values because another dialog is open. ${r==="attach"?"Detach and re-attach the report to pick again.":"Your local values will re-publish to the chain on the next change."}`),null}})}dn();T();pe();var y$=class extends D{static properties={retry:{type:Boolean},_value:{state:!0}};constructor(){super(),this.retry=!1,this._value=""}_finish(t){this._value="",super._finish(t)}_onCancel=()=>this._finish(null);_onInput=t=>{this._value=t.target.value};_onSubmit=()=>{let t=this._value??"";t&&this._finish(t)};_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onSubmit())};render(){let t=(this._value??"").length>0,r=this.retry?"That password didn't match. Try again, or cancel to leave the workspace unsynced for now.":"This sync server requires a password before it accepts a new workspace. Enter it to create the workspace on the server.";return d`<dialog @close="${this._onClose}"><header><h3>Sync server password</h3></header><p class="nwd-intro">${r}</p><input type="password" class="nwd-input" placeholder="Password" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-sync-auth" maxlength="4096" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!t}" @click="${this._onSubmit}">${this.retry?"Retry":"Authenticate"}</button></footer></dialog>`}};customElements.define("sync-auth-dialog",y$);function i7({retry:e=!1}={}){return le("sync-auth-dialog",{retry:!!e})}function s7(){v6(async({retry:e})=>{try{return await i7({retry:e})}catch(t){return console.warn("Sync auth dialog failed to open:",t),null}})}T();U();var Ng="https://triage.space/",fW=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function hW(){for(let e of fW)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var mW=["deepview.triage","deepview.triage.pending"],gW="deepview.repoUrls";function bW(){try{for(let e of mW)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(gW);if(e){let t=JSON.parse(e);if(t&&typeof t=="object"&&Object.keys(t).length>0)return!0}}catch{return!0}return!1}async function vW(){if(bW())return!0;let e=[];try{e=await fe()}catch{return!0}if(e.length>0)return!0;try{if(Q().length>0)return!0}catch{return!0}try{return await wd()}catch{return!0}}var w$=class extends J{static properties={supportsSync:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.supportsSync=!1}firstUpdated(){let t=this.querySelector("dialog");t&&t.showModal();let r=this.querySelector("button.om-stay");r&&r.focus()}_finish(t){if(this._settled)return;this._settled=!0;let r=this.querySelector("dialog");r&&r.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:t}))}_onClose=()=>this._finish(!1);_onStay=()=>this._finish(!1);_onMigrate=()=>this._finish(!0);render(){let t=()=>d`<a class="om-link" href="${Ng}" target="_blank" rel="noopener noreferrer">${Ng}</a>`;return d`<dialog class="origin-migration-dialog" @close="${this._onClose}"><header class="om-head"><h3>This deepview build has moved</h3><p><code>${location.host}${location.pathname}</code> has moved to ${t()}.</p></header><section class="om-body"><p>Workspaces and reports don't migrate automatically — they live in this origin's browser storage (OPFS where available, localStorage as a fallback) and have to be re-imported on ${t()}.</p>${this.supportsSync?d`<p>For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}. Workspaces that had sync configured will pick their triage state back up from the sync server once you re-import them with the same key.</p><p>For triage attached to loose reports (or as a top-up after re-importing workspaces), call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces.</p>`:d`<p>This build has no sync layer. For each workspace, use the <strong>Export workspace</strong> button in the sidebar to download a <code>.gz</code> bundle (workspace + its reports + its triage), then drop that file on ${t()}.</p><p>For triage attached to loose reports, call <code>DeepView.export()</code> in the browser console — that downloads just the triage entries plus saved repo URLs, no reports or workspaces. Reports themselves need to be re-dropped from their original JSON on the new origin.</p>`}</section><footer class="om-actions"><button type="button" class="om-stay" @click="${this._onStay}">Keep editing on ${location.host}</button> <button type="button" class="primary om-go" @click="${this._onMigrate}">Switch to triage.space</button></footer></dialog>`}};customElements.define("origin-migration-dialog",w$);function yW(e){return new Promise(t=>{let r=document.createElement("origin-migration-dialog");r.supportsSync=e.supportsSync,r.addEventListener("resolve",n=>{r.remove(),t(!!n.detail)}),document.body.append(r)})}async function a7(){let e=hW();return e?await vW()?await yW(e)?(location.assign(Ng),!0):!1:(location.replace(Ng),!0):!1}Yt();T();U();pe();Ks();var k$=class extends D{static styles=[...D.styles,F(Dr)];static properties={encoded:{type:String},_stage:{state:!0},_password:{state:!0},_name:{state:!0},_decoded:{state:!0},_existingById:{state:!0},_busy:{state:!0},_error:{state:!0},_settled:{state:!0}};constructor(){super(),this.encoded="",this._stage="password",this._password="",this._name="",this._decoded=null,this._existingById=null,this._busy=!1,this._error="",this._settled=!1}focusInitial(){this._focusActiveInput()}updated(t){t.has("_stage")&&this._focusActiveInput()}_focusActiveInput(){if(this._stage==="password")this.renderRoot.querySelector('input[type="password"]')?.focus();else if(this._stage==="name"){let t=this.renderRoot.querySelector('input[data-role="name"]');t&&(t.focus(),t.select())}}_finish(t){this._settled||(this._decoded=null,this._password="",this.encoded="",super._finish(t))}_onClose=()=>this._finish(null);_onCancel=()=>this._finish(null);_onPasswordInput=t=>{this._password=t.target.value,this._error=""};_onNameInput=t=>{this._name=t.target.value};_onUnlock=async()=>{if(!(!this._password||this._busy)){this._busy=!0,this._error="";try{let t=await E0({encoded:this.encoded,password:this._password});if(this._settled)return;let r=Q().find(n=>n.id===t.id)??null;this._decoded=t,this._existingById=r,this._name=t.name,this._password="",this._stage="name"}catch(t){if(this._settled)return;this._error=t?.message??String(t)}finally{this._busy=!1}}};_onAttach=()=>{if(!this._decoded)return;let t=Pn(this._name);if(!t)return;let r=Q().find(n=>n.id===this._decoded.id)??null;if(r){this._existingById=r;return}this._nameCollision(t)||this._finish({id:this._decoded.id,name:t,privateKeyBase64:this._decoded.privateKeyBase64})};_nameCollision(t){if(!t||!this._decoded)return null;for(let r of Q())if(r.id!==this._decoded.id&&Pn(r.name)===t)return r;return null}_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._stage==="password"?this._onUnlock():this._stage==="name"&&this._onAttach())};_passwordStage(){return d`<p class="nwd-note ui-hint">Someone shared a workspace with you. Enter the password they sent separately to attach it to this browser.</p><label class="wsl-field"><span>Password</span> <input type="password" class="nwd-input" autocomplete="off" data-1p-ignore="true" data-lpignore="true" data-bwignore="true" data-form-type="other" name="dv-share-link-unlock" maxlength="1024" .value="${this._password}" @input="${this._onPasswordInput}" @keydown="${this._onKeydown}"></label> ${this._error?d`<p class="wsl-error" role="alert">${this._error}</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!this._password||this._busy}" @click="${this._onUnlock}">${this._busy?"Unlocking\u2026":"Unlock"}</button></footer>`}_alreadyAttachedStage(){let t=this._existingById;return d`<p class="nwd-note">This workspace is already attached as <strong>"${t?.name??""}"</strong>. Open it from the sidebar.</p><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" class="primary" @click="${this._onCancel}">Close</button></footer>`}_nameStage(){if(this._existingById)return this._alreadyAttachedStage();let t=Pn(this._name),r=this._nameCollision(t),n=!!t&&!r;return d`<p class="nwd-note ui-hint">Pick a name for the workspace on this device. The shared identity is preserved either way — only the visible label changes.</p><label class="wsl-field"><span>Workspace name</span> <input type="text" class="nwd-input" data-role="name" placeholder="Workspace name" maxlength="200" .value="${this._name}" @input="${this._onNameInput}" @keydown="${this._onKeydown}"></label> ${r?d`<p class="wsl-error" role="alert">A workspace named "${t}" already exists on this device. Pick a different name.</p>`:m}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" ?disabled="${!n}" @click="${this._onAttach}">Attach</button></footer>`}render(){let t=this._stage==="password"?"Attach shared workspace":this._existingById?"Workspace already attached":"Name the workspace";return d`<dialog @close="${this._onClose}"><header><h3>${t}</h3></header>${this._stage==="password"?this._passwordStage():this._nameStage()}</dialog>`}};customElements.define("workspace-unlock-link-dialog",k$);function l7({encoded:e}={}){return ki("workspace-unlock-link-dialog",{encoded:e??""},t=>{t.encoded=""})}Nx();U();Qn();var Qt=null,Pg=!1,mp=null;function wW(e){if(!e)return"Could not unlock. Try again.";switch(e.name??""){case"NotAllowedError":case"AbortError":return"";case"SecurityError":return"The site identity does not match the one this passkey was registered for. If you opened DeepView through a different URL (different subdomain, different port), reload via the original URL.";case"InvalidStateError":return"The passkey state on this device is inconsistent. Try reloading the page or removing and re-creating the passkey.";case"NotSupportedError":return"This browser does not support the WebAuthn PRF extension this site needs. Try a recent Chrome, Safari, or Edge with a platform authenticator.";case"NetworkError":return"A network error prevented the passkey from completing. Check your connection and try again.";case"UnknownError":return"The authenticator returned an unknown error. Try again, or use a different passkey.";default:{let r=e.message??String(e);return r.length>200?r.slice(0,197)+"\u2026":r}}}function kW(){if(Qt)return Qt;Qt=document.createElement("div"),Qt.id="lock-overlay",Qt.setAttribute("role","dialog"),Qt.setAttribute("aria-modal","true"),Qt.setAttribute("aria-label","Unlock DeepView"),Qt.innerHTML=`
|
|
50
167
|
<div class="lock-overlay-card">
|
|
51
168
|
<div class="lock-overlay-icon" aria-hidden="true">
|
|
52
169
|
<svg viewBox="0 0 32 32" width="40" height="40" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="15" width="18" height="12" rx="1.5"/><path d="M11 15v-4a5 5 0 0 1 10 0v4"/></svg>
|
|
@@ -63,31 +180,109 @@ ${r}`}">${ov}<span class="file-label">${n}</span></button></li>`}function sv(e,t
|
|
|
63
180
|
<a href="#" class="lock-overlay-wipe">Wipe local data and start over</a>
|
|
64
181
|
</p>
|
|
65
182
|
</div>
|
|
66
|
-
`;let e=
|
|
183
|
+
`;let e=Qt.querySelector("button"),t=Qt.querySelector(".lock-overlay-error");return e.addEventListener("click",async()=>{if(!(Pg||!x$())){Pg=!0,t.hidden=!0,t.textContent="",e.disabled=!0,e.textContent="Waiting\u2026",mp=new AbortController;try{await ps({signal:mp.signal})}catch(n){let o=wW(n);t.textContent=o,t.hidden=!o}finally{Pg=!1,mp=null,e.disabled=!1,e.textContent="Unlock with passkey"}}}),Qt.querySelector(".lock-overlay-wipe").addEventListener("click",async n=>{if(n.preventDefault(),!(Pg||!x$())&&confirm(`Wipe ALL local DeepView data and start over?
|
|
67
184
|
|
|
68
185
|
This deletes your encrypted triage, all reports, and the passkey registration on this device. The data CANNOT be recovered after this \u2014 there is no backup.
|
|
69
186
|
|
|
70
|
-
Use this only if you have lost access to your passkey and have no other way to unlock.`)&&confirm("Really wipe everything? This cannot be undone.")){try{await
|
|
71
|
-
`;var
|
|
72
|
-
`;var
|
|
73
|
-
`)}function
|
|
74
|
-
|
|
75
|
-
`).
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
`)}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
${_}`)}`;try{window.location.href=K,nt.classList.add("copied"),setTimeout(()=>nt.classList.remove("copied"),1e3)}catch{}return}if(Q(e,".mark-fix")){let K=Q(e,"[data-gid]").dataset.gid,Z=vr(K);if(!Z)return;let ie=Te(Z),pe=P(ie),te=a.triage.get(pe)?.fix??"";Eh({initial:te,finding:ie}).then(We=>(We===null||(M(a.triage,pe,{fix:We||void 0}),oe(),Cr()),null)).catch(()=>{});return}let Pt=e.target.closest("[data-triage-show]");if(Pt&&!Pt.closest(".graph2-triage-selector")){let _=Pt.dataset.triageShow;a.shownTriage=a.shownTriage===_?null:_,$();return}if(e.target.closest("[data-table-deselect]")){a.tableSelectedGid=null,Cr();return}let pt=e.target.closest("[data-tree-select]");if(pt){let _=pt.dataset.treeSelect;a.filesSelectedFile=a.filesSelectedFile===_?null:_,$();return}e.target.closest("[data-tree-deselect]")&&(a.filesSelectedFile=null,$())});var Fh=document.querySelector("#bundle-source-overlay-slot");Fh&&Fh.addEventListener("click",e=>{if(e.target.classList?.contains("bundle-source-overlay")||e.target.closest('[data-action="bundle-source-close"]')){a.bundleSourceFile&&(a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,$());return}if(e.target.closest('[data-action="bundle-source-panel-close"]')){a.bundleSourceFindingIdx!=null&&(a.bundleSourceFindingIdx=null,So());return}let t=e.target.closest("[data-bundle-source-finding]");if(t){let r=parseInt(t.dataset.bundleSourceFinding,10);Number.isFinite(r)&&(a.bundleSourceFindingIdx=a.bundleSourceFindingIdx===r?null:r,So())}});C.addEventListener("row-select",e=>{let t=e.detail?.gid;t&&(a.tableSelectedGid=a.tableSelectedGid===t?null:t,Cr())});var fi="application/x-deepview-kanban-gid";function jv(e,t){let n=be(e).hasConflict?[Te(e)]:e;for(let o of n){let s=P(o),i=Ms(o);t==="untriaged"?(M(a.triage,s,{triage:void 0}),ne(a.triage,s,i,!1)):t==="ignored"?(M(a.triage,s,{triage:void 0}),ne(a.triage,s,i,!0)):(M(a.triage,s,{triage:t}),ne(a.triage,s,i,!1))}}function vc(){for(let e of C.querySelectorAll(".kanban-card.dragging"))e.classList.remove("dragging");for(let e of C.querySelectorAll(".kanban-column.drag-over"))e.classList.remove("drag-over")}C.addEventListener("dragstart",e=>{let t=e.target.closest?.(".kanban-card[data-kanban-source]");if(!t||!e.dataTransfer)return;let r=t.dataset.gid;r&&(e.dataTransfer.setData(fi,r),e.dataTransfer.setData("text/plain",r),e.dataTransfer.effectAllowed="move",t.classList.add("dragging"))});C.addEventListener("dragend",()=>{vc()});C.addEventListener("dragover",e=>{if(!e.dataTransfer?.types.includes(fi))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(t&&(e.preventDefault(),e.dataTransfer.dropEffect="move",!t.classList.contains("drag-over"))){for(let r of C.querySelectorAll(".kanban-column.drag-over"))r!==t&&r.classList.remove("drag-over");t.classList.add("drag-over")}});C.addEventListener("dragleave",e=>{let t=e.target.closest?.(".kanban-column[data-kanban-target]");t&&(t.contains(e.relatedTarget)||t.classList.remove("drag-over"))});C.addEventListener("drop",e=>{if(!e.dataTransfer?.types.includes(fi))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(!t){vc();return}e.preventDefault();let r=e.dataTransfer.getData(fi),n=t.dataset.kanbanTarget;if(vc(),!r||!n)return;let o=vr(r);!o||(be(o).commonTriage??"untriaged")===n||(jv(o,n),$(),queueMicrotask(oe))});var yc=!1;function ci(e){return e?C.querySelector(`.kanban-card[data-gid="${CSS.escape(e)}"]`):null}function di(e){let t=e??C.querySelector(".kanban-card");if(!t)return;let r=t.getBoundingClientRect();r.width<=0||r.height<=0||(document.documentElement.style.setProperty("--kanban-clip-card-w",`${Math.floor(r.width)}px`),document.documentElement.style.setProperty("--kanban-clip-card-h",`${Math.floor(r.height)}px`))}function ui(e){let t=a.kanbanPopoverGid;if(t===e)return;let r=t===null&&e!==null,n=t!==null&&e===null;if(!document.startViewTransition||!r&&!n){a.kanbanPopoverGid=e,$();return}if(yc)return;yc=!0;let o=r?"kanban-opening":"kanban-closing";document.documentElement.classList.add(o);let s=u=>{u&&(u.style.viewTransitionName=""),document.documentElement.classList.remove(o),yc=!1};if(r){let u=ci(e);u?(di(u),u.style.viewTransitionName="kanban-detail-modal",u.getBoundingClientRect()):di(),a.kanbanPopoverGid=e;let p=document.startViewTransition(()=>{$(),u&&(u.style.viewTransitionName="")}),f=setTimeout(()=>s(u),600);(async()=>{try{await p.finished}catch{}clearTimeout(f),s(u)})();return}di(),a.kanbanPopoverGid=e;let i=null,l=document.startViewTransition(()=>{$(),i=ci(t),i&&(di(i),i.style.viewTransitionName="kanban-detail-modal")}),d=setTimeout(()=>s(i??ci(t)),600);(async()=>{try{await l.finished}catch{}clearTimeout(d),s(i??ci(t))})()}C.addEventListener("click",e=>{if(e.target.closest?.(".kanban-detail-close")){ui(null);return}let t=e.target.closest?.(".kanban-card[data-kanban-source]");if(t){if(window.getSelection?.()?.toString())return;let r=t.dataset.gid;if(!r)return;ui(a.kanbanPopoverGid===r?null:r);return}e.target.closest?.(".kanban-detail-modal")||a.kanbanPopoverGid&&ui(null)});document.addEventListener("keydown",e=>{e.key==="Escape"&&a.kanbanPopoverGid&&ui(null)});function Mh(e){if(!e||a.focusGid===e)return;a.focusGid=e,$();let t=C.querySelector(".focus-side-card.active");t&&t.scrollIntoView({block:"nearest",behavior:"instant"});let r=C.querySelector(".focus-code-line-active");r&&r.scrollIntoView({block:"center",behavior:"instant"})}function Lh(e){let t=C.querySelectorAll(".focus-side-card[data-focus-select]");if(t.length===0)return;let r=-1;for(let s=0;s<t.length;s++)if(t[s].classList.contains("active")){r=s;break}let n=r<0?e>0?0:t.length-1:Math.min(Math.max(r+e,0),t.length-1);if(n===r)return;let o=t[n].dataset.gid;o&&Mh(o)}C.addEventListener("click",e=>{let t=e.target.closest?.("[data-focus-nav]");if(t){Lh(t.dataset.focusNav==="next"?1:-1);return}let r=e.target.closest?.(".focus-side-card[data-focus-select]");if(!r||window.getSelection?.()?.toString())return;let n=r.dataset.gid;n&&Mh(n)});function Vv(e){if(document.querySelector("dialog[open]"))return!0;for(let t of e.composedPath()){if(!t||t.nodeType!==1)continue;let r=t.tagName;if(r==="INPUT"||r==="TEXTAREA"||r==="SELECT"||t.isContentEditable)return!0}return!1}document.addEventListener("keydown",e=>{if(a.viewMode!=="focus"||a.currentView!=="findings"||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||Vv(e))return;let t=0;if(e.key==="ArrowRight")t=1;else if(e.key==="ArrowLeft")t=-1;else return;e.preventDefault(),Lh(t)});C.addEventListener("mark-color",e=>{let t=Q(e,"[data-gid]");if(!t)return;let r=t.dataset.gid,n=vr(r);if(!n)return;let o=P(Te(n)),s=e.detail?.color;if(!s)return;a.triage.get(o)?.color===s?M(a.triage,o,{color:void 0}):M(a.triage,o,{color:s}),oe(),Cr()});var Er=null,kc=null;function Ph(){if(Er!==null||a.reports.length===0)return;Er=a.viewMode,kc=document.title,a.viewMode==="table"&&(a.viewMode="list",$());let e=a.reports.map(r=>r.fileName),t="";e.length===1?t=e[0]:e.length>1&&(t=Fs(e)),t=t.replace(/\.json$/u,""),t&&(document.title=t)}function Oh(){Er!==null&&(a.viewMode!==Er&&(a.viewMode=Er,$()),document.title=kc,Er=null,kc=null)}window.addEventListener("beforeprint",Ph);window.addEventListener("afterprint",Oh);document.addEventListener("print-requested",async()=>{if(a.reports.length!==0&&Er===null){Ph();try{await Promise.all([...C.querySelectorAll("finding-card")].map(e=>e.updateComplete)),window.print()}catch(e){throw Oh(),e}}});document.addEventListener("download-requested",()=>{a.reports.length!==0&&Ih(a.reports)});C.addEventListener("analyzer-change",e=>{a.filterAnalyzer=e.detail.value,$()});C.addEventListener("repo-change",e=>{a.filterRepo=e.detail.value,$()});C.addEventListener("bundle-search-mode-change",e=>{let t=e.detail?.mode;t!=="files"&&t!=="code"&&t!=="issues"||(a.bundleCodeSearchMode=t,$())});C.addEventListener("sort-change",e=>{let{kind:t,value:r}=e.detail;if(t==="findings")a.sortBy=r;else if(t==="packages")a.packagesSortBy=r;else if(t==="repositories")a.repositoriesSortBy=r;else return;$()});C.addEventListener("range-change",e=>{e.target.id==="conf-range"&&(a.filterConfMin=e.detail.low,a.filterConfMax=e.detail.high,$())});C.addEventListener("input",e=>{let t=e.composedPath()[0],r=t?.id,n=t?.value;r==="g2-path-filter"&&(E.pathFilter=n,E.graphState?.requestDraw?.())});C.addEventListener("search-input",e=>{if(!e.detail)return;let{kind:t,value:r}=e.detail;if(t==="findings")a.filterInclude=r;else if(t==="files")a.filesSearch=r;else if(t==="packages")a.packagesSearchQuery=r;else if(t==="repositories")a.repositoriesSearchQuery=r;else if(t==="bundle-code")a.bundleCodeSearchQuery=r;else return;$()});C.addEventListener("severity-toggle",e=>{let t=e.detail.severity;if(e.detail.kind==="graph"){E.selectedSeverities.has(t)?E.selectedSeverities.delete(t):E.selectedSeverities.add(t),e.composedPath()[0].selected=[...E.selectedSeverities],E.graphState?.requestDraw?.(),pi();return}a.filterSeverities.has(t)?a.filterSeverities.delete(t):a.filterSeverities.add(t),$()});C.addEventListener("color-toggle",e=>{let t=e.detail.color;if(e.detail.kind==="graph"){E.selectedColors.has(t)?E.selectedColors.delete(t):E.selectedColors.add(t),e.composedPath()[0].selected=[...E.selectedColors],E.graphState?.requestDraw?.(),pi();return}a.filterColors.has(t)?a.filterColors.delete(t):a.filterColors.add(t),$()});C.addEventListener("source-toggle",e=>{let t=e.detail.source,r=a.filterSources.has(t);a.filterSources.clear(),r||a.filterSources.add(t),$()});C.addEventListener("slide-triage-toggle",e=>{let{kind:t,value:r}=e.detail;if(t==="package")a.packageSlideTriage=a.packageSlideTriage===r?null:r;else if(t==="repository")a.repositorySlideTriage=a.repositorySlideTriage===r?null:r;else return;$()});C.addEventListener("view-mode-change",e=>{if(e.detail.kind==="files"){a.filesViewMode=e.detail.mode,$();return}a.viewMode=e.detail.mode;try{localStorage.setItem(is,a.viewMode)}catch{}a.viewMode!=="kanban"&&(a.kanbanPopoverGid=null),a.viewMode!=="focus"&&(a.focusGid=null),$()});C.addEventListener("repo-edit-start",()=>{a.repoEditing=!0,$()});C.addEventListener("repo-input",e=>{a.repoUrl=e.detail.url,je(a.currentFile,a.repoUrl)});C.addEventListener("repo-commit",e=>{a.repoUrl=e.detail.url,je(a.currentFile,a.repoUrl),a.repoEditing=!1,$()});C.addEventListener("repo-cancel",e=>{a.repoUrl=e.detail.url,je(a.currentFile,a.repoUrl),a.repoEditing=!1,$()});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(a.bundleSourceFindingIdx!=null){a.bundleSourceFindingIdx=null,So();return}a.bundleSourceFile&&(a.bundleSourceFile=null,$())}});var Nh=`:host{position:absolute;top:.5rem;right:.5rem;z-index:1000;width:30px;height:30px;background:transparent;color:var(--muted);border:0;border-radius:6px;font-size:1rem;line-height:1;font-family:inherit;display:flex;align-items:center;justify-content:center;transition:color .12s,background .12s;cursor:default;user-select:none}:host(:hover){color:var(--text);background:rgb(from var(--text) r g b / .06)}:host(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media print{:host{display:none!important}}
|
|
83
|
-
`;var $c="deepview.theme",dn=Object.freeze(["dark","light","green","pink"]),qv={dark:{base:"#1a1a1b",dim:"#0a0a0a"},light:{base:"#f6f6fa",dim:"#646464"},green:{base:"#0a140a",dim:"#050a05"},pink:{base:"#ffe4ee",dim:"#a3727f"}},Gv="\u2600",Yv="\u263E",xc="deepview-theme-changed",hi="dark",Sc=!1;function Jv(){try{let e=localStorage.getItem($c);return dn.includes(e)?e:"dark"}catch{return"dark"}}function Co(e){dn.includes(e)||(e="dark"),hi=e;for(let r of dn)r!=="dark"&&document.body.classList.remove(`theme-${r}`);e!=="dark"&&document.body.classList.add(`theme-${e}`);try{e==="dark"?localStorage.removeItem($c):localStorage.setItem($c,e)}catch{}let t=document.querySelector('meta[name="theme-color"]');if(t){let{base:r,dim:n}=qv[e];t.setAttribute("content",Sc?n:r)}window.dispatchEvent(new CustomEvent(xc,{detail:{theme:e}}))}Co(Jv());window.addEventListener("beforeprint",()=>{Sc=!0,Co(hi)});window.addEventListener("afterprint",()=>{Sc=!1,Co(hi)});function Dh(e){if(!dn.includes(e))throw new TypeError(`DeepView.setTheme: unknown theme ${JSON.stringify(e)} (expected one of ${dn.map(t=>JSON.stringify(t)).join(", ")})`);Co(e)}function Uh(){return hi}var zh=dn,_c=class extends H{static properties={_light:{state:!0}};static styles=A(Nh);constructor(){super(),this._light=document.body.classList.contains("theme-light")}connectedCallback(){super.connectedCallback(),this.hasAttribute("role")||this.setAttribute("role","button"),this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("aria-label")||this.setAttribute("aria-label","toggle theme"),this.hasAttribute("title")||this.setAttribute("title","toggle light/dark theme"),this.addEventListener("click",this._toggle),this.addEventListener("keydown",this._onKeydown),window.addEventListener(xc,this._onThemeChanged)}disconnectedCallback(){window.removeEventListener(xc,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._light=document.body.classList.contains("theme-light")};_toggle=()=>{let t=document.body.classList.contains("theme-light");Co(t?"dark":"light")};_onKeydown=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this._toggle())};render(){return c`${this._light?Yv:Gv}`}};customElements.define("theme-toggle",_c);var Wh=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(:first-of-type) .row{border-top-left-radius:6px;border-top-right-radius:6px}:host(:last-of-type) .row{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;flex-shrink:0;user-select:none}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.tab{background:transparent;color:var(--text);border:1px solid var(--border);border-radius:4px;padding:.2rem .5rem;font-size:.75rem;line-height:1.3;display:inline-flex;align-items:center;gap:.35rem;font-family:inherit;&:hover{border-color:var(--accent)}&.active{border-color:var(--accent);background:var(--surface-active)}&.tab-mark-red{background:var(--mark-red-bg);border-color:var(--mark-red-tab-border)}&.tab-mark-blue{background:var(--mark-blue-bg);border-color:var(--mark-blue-tab-border)}&.tab-mark-green{background:var(--mark-green-bg);border-color:var(--mark-green-tab-border)}&.tab-mark-gray{background:var(--mark-gray-bg);border-color:var(--mark-gray-tab-border)}&.tab-mark-red.active,&.tab-mark-blue.active,&.tab-mark-green.active,&.tab-mark-gray.active{border-color:var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-conf{color:var(--muted);font-size:.7rem}&.tab-mark-red .tab-conf,&.tab-mark-blue .tab-conf,&.tab-mark-green .tab-conf,&.tab-mark-gray .tab-conf{color:var(--text)}}.report-chip{display:inline-flex;align-items:center;gap:.3rem;padding:0 .35rem;height:1.4rem;border:1px solid var(--border);border-radius:3px;color:var(--muted);font-size:.72rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-right:.65rem;max-width:12rem;.report-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.file-icon{flex-shrink:0}.brand-deepview{.bg{fill:#2563eb}.fg{fill:#fff}}.brand-claude{.bg{fill:#d97757}.fg{fill:#fff}}.brand-codex{.bg{fill:#fff;stroke:#000;stroke-width:.5}.fg{fill:#000}}.brand-vercel{.bg{fill:#000;stroke:#fff;stroke-width:.5}.fg{fill:#fff}}}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:3px;overflow:hidden;margin-right:.25rem}.mark-comment,.mark-fix,.mark-copy,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--accent);background:var(--surface-active)}}.mark-comment.has-comment,.mark-fix.has-fix{color:var(--accent)}.mark-copy.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench{fill:var(--accent);fill-opacity:.15}.mark-x{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .35rem;font-size:.85rem;line-height:1.1;margin-left:.25rem;&:hover{color:var(--critical);border-color:var(--critical)}}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem}.mark-triage-menu{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:hover{color:var(--text);border-color:var(--accent)}.mark-triage-menu.open{border-color:var(--accent);color:var(--text)}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:3px;font-family:inherit}.triage-menu-item:hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-fixed:hover{color:var(--green, #4ade80)}.triage-menu-invalid:hover{color:var(--muted)}.triage-menu-deleted:hover{color:var(--critical)}.mark-restore{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .45rem;font-size:.75rem;line-height:1.3;margin-left:.25rem;&:hover{color:var(--green);border-color:var(--green)}}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}.line-num a:hover{color:var(--accent)}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}.row{break-inside:avoid}.marks,.mark-x,.mark-restore{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}a,.line-num,.line-num a{color:inherit}}
|
|
84
|
-
|
|
85
|
-
`;var Ec=class extends H{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=A(Hh);constructor(){super(),this.items=[],this.selectedGid=null}render(){return c`${J(this.items??[],t=>io(t),t=>c`<finding-row .group="${t}" ?selected="${io(t)===this.selectedGid}"></finding-row>`)}`}};customElements.define("finding-table",Ec);var jh=`:host{display:block}:host(.hidden){display:none}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.card{padding:.5rem .75rem;border-bottom:1px solid var(--border);font-size:.875rem}:host(:last-child) .card{border-bottom:none}:host(.mark-red) .card{background:var(--mark-red-bg)}:host(.mark-blue) .card{background:var(--mark-blue-bg)}:host(.mark-green) .card{background:var(--mark-green-bg)}:host(.mark-gray) .card{background:var(--mark-gray-bg)}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host([in-group]) .line-row{display:none}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-line;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.recommendation{grid-column:2;white-space:pre-line;font-size:.92em;line-height:1.55;color:var(--green);margin-top:.4rem}.conf-reason{grid-column:2;white-space:pre-line;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:999px;color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;.value-label:last-child{margin-bottom:0}}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.tab{background:transparent;color:var(--text);border:1px solid var(--border);border-radius:4px;padding:.2rem .5rem;font-size:.75rem;line-height:1.3;display:inline-flex;align-items:center;gap:.35rem;font-family:inherit;&:hover{border-color:var(--accent)}&.active{border-color:var(--accent);background:var(--surface-active)}&.tab-mark-red{background:var(--mark-red-bg);border-color:var(--mark-red-tab-border)}&.tab-mark-blue{background:var(--mark-blue-bg);border-color:var(--mark-blue-tab-border)}&.tab-mark-green{background:var(--mark-green-bg);border-color:var(--mark-green-tab-border)}&.tab-mark-gray{background:var(--mark-gray-bg);border-color:var(--mark-gray-tab-border)}&.tab-mark-red.active,&.tab-mark-blue.active,&.tab-mark-green.active,&.tab-mark-gray.active{border-color:var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-conf{color:var(--muted);font-size:.7rem}&.tab-mark-red .tab-conf,&.tab-mark-blue .tab-conf,&.tab-mark-green .tab-conf,&.tab-mark-gray .tab-conf{color:var(--text)}}.report-chip{display:inline-flex;align-items:center;gap:.3rem;padding:0 .35rem;height:1.4rem;border:1px solid var(--border);border-radius:3px;color:var(--muted);font-size:.72rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-right:.65rem;max-width:16rem;.report-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.file-icon{flex-shrink:0}.brand-deepview{.bg{fill:#2563eb}.fg{fill:#fff}}.brand-claude{.bg{fill:#d97757}.fg{fill:#fff}}.brand-codex{.bg{fill:#fff;stroke:#000;stroke-width:.5}.fg{fill:#000}}.brand-vercel{.bg{fill:#000;stroke:#fff;stroke-width:.5}.fg{fill:#fff}}}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:3px;overflow:hidden;margin-right:.25rem}.mark-comment,.mark-fix,.mark-copy,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:hover{color:var(--accent);background:var(--surface-active)}}.mark-comment.has-comment,.mark-fix.has-fix{color:var(--accent)}.mark-copy.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench{fill:var(--accent);fill-opacity:.15}.mark-x{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .35rem;font-size:.85rem;line-height:1.1;margin-left:.25rem;&:hover{color:var(--critical);border-color:var(--critical)}}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem}.mark-triage-menu{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:hover{color:var(--text);border-color:var(--accent)}.mark-triage-menu.open{border-color:var(--accent);color:var(--text)}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:3px;font-family:inherit}.triage-menu-item:hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-fixed:hover{color:var(--green, #4ade80)}.triage-menu-invalid:hover{color:var(--muted)}.triage-menu-deleted:hover{color:var(--critical)}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:3px;font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:.65rem;padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}:host([context="focus"].mark-red) .card{background:color-mix(in srgb,var(--mark-red-bg) 15%,var(--bg))}:host([context="focus"].mark-blue) .card{background:color-mix(in srgb,var(--mark-blue-bg) 15%,var(--bg))}:host([context="focus"].mark-green) .card{background:color-mix(in srgb,var(--mark-green-bg) 15%,var(--bg))}:host([context="focus"].mark-gray) .card{background:color-mix(in srgb,var(--mark-gray-bg) 15%,var(--bg))}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:0 4px 4px 0;font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.mark-restore{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:3px;padding:0 .45rem;font-size:.75rem;line-height:1.3;margin-left:.25rem;&:hover{color:var(--green);border-color:var(--green)}}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit}.line-num a:hover{color:var(--accent)}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:3px;font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:avoid;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([in-group].multi-case) .tab-body .line-row{display:flex}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}a,.line-num,.line-num a{color:inherit}.inline-code{border:0;background:transparent;padding:0}}
|
|
86
|
-
`;var
|
|
87
|
-
`;var n0=["red","blue","green","gray"],Tc=class extends H{static properties={selected:{type:String}};static styles=A(Vh);constructor(){super(),this.selected=null}render(){return c`${n0.map(t=>c`<button type="button" class="${`color-${t}${this.selected===t?" active":""}`}" data-color="${t}" title="${`mark ${t}`}" @click="${this._onClick}"></button>`)}`}_onClick=t=>{let r=t.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent("mark-color",{detail:{color:r},bubbles:!0,composed:!0}))}};customElements.define("color-marker",Tc);var Ic=class extends L{createRenderRoot(){return this}render(){let t=a.filterConfMin,r=a.filterConfMax;return c`<span class="conf-range-label">Confidence</span><range-slider id="conf-range" min="0" max="10" step="1" low="${t}" high="${r}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${t}" .high="${r}"></conf-range-mirror>`}};customElements.define("conf-filter",Ic);var Kh={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026"},qh={files:"Filter files",code:"Search code",issues:"Search issues"},o0=c`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,s0={files:c`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5Z"/></svg>`,code:c`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 4.5L2 8l3.5 3.5"/><path d="M10.5 4.5L14 8l-3.5 3.5"/></svg>`,issues:c`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`},Rc=class extends L{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let t=a.bundleCodeSearchQuery,r=a.bundleCodeSearchMode,n=this.modes.includes(r)?r:"files",o=Kh[n]??Kh.files;return c`${o0} <input type="text" class="bundle-code-search-input" placeholder="${o}" aria-label="${o}" .value="${Ie(t)}" @input="${this._onInput}"> ${t?c`<button type="button" class="bundle-code-search-clear" title="Clear search" aria-label="Clear search" @click="${this._onClear}">×</button>`:g} ${this.modes.length>0?c`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(s=>c`<button type="button" class="${F({"bundle-code-search-mode":!0,active:n===s})}" role="tab" aria-selected="${String(n===s)}" title="${qh[s]??s}" aria-label="${qh[s]??s}" @click="${()=>this._selectMode(s)}">${s0[s]??g}</button>`)}</span>`:g}`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-code",value:t},bubbles:!0,composed:!0}))}_selectMode(t){this.dispatchEvent(new CustomEvent("bundle-search-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("bundle-code-search",Rc);var Gh={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},Bc=class extends L{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=Gh[this.kind];return t?c`<input type="search" class="packages-search" placeholder="${`${t.label}\u2026`}" aria-label="${t.label}" .value="${Ie(a[t.stateKey])}" @input="${this._onInput}">`:(console.warn(`<entity-search>: unknown kind ${JSON.stringify(this.kind)}; expected one of ${Object.keys(Gh).map(r=>JSON.stringify(r)).join(", ")}.`),g)}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-search",Bc);var i0=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],Yh={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},Fc=class extends L{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=Yh[this.kind];return t?c`<select class="packages-sort" aria-label="${t.aria}" .value="${Ie(a[t.stateKey])}" @change="${this._onChange}">${i0.map(([r,n])=>c`<option value="${r}">${n}</option>`)}</select>`:(console.warn(`<entity-sort>: unknown kind ${JSON.stringify(this.kind)}; expected one of ${Object.keys(Yh).map(r=>JSON.stringify(r)).join(", ")}.`),g)}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-sort",Fc);var Mc=class extends L{static properties={showFile:{type:Boolean,attribute:"show-file"},showConfidence:{type:Boolean,attribute:"show-confidence"},showPriority:{type:Boolean,attribute:"show-priority"}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let t=(r,n)=>c`<option value="${r}">${n}</option>`;return c`<select class="sort-select" aria-label="Sort findings" .value="${Ie(a.sortBy)}" @change="${this._onChange}">${t("severity","Severity \u2193")} ${this.showFile?t("file","File \u2191"):g} ${this.showConfidence?c`${t("confidence-desc","Confidence \u2193")}${t("confidence-asc","Confidence \u2191")}`:g} ${this.showPriority?c`${t("priority-desc","Priority \u2193")}${t("priority-asc","Priority \u2191")}`:g}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:"findings",value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("findings-sort",Mc);var Jh=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:99px;background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}
|
|
88
|
-
`;var
|
|
89
|
-
`;
|
|
90
|
-
`;function Nc(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}var Dc=c`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,eg=c`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,Uc=class extends H{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0}};static styles=A(Zh);constructor(){super(),this.url="",this.editable=!1,this.editing=!1,this._opener=""}render(){if(this.editable&&this.editing){let t=!!this.url,r=t?Nc(this.url):"Set repo";return c`<span class="${t?"chip":"chip empty"}" aria-hidden="true" inert>${Dc} <span class="label">${r}</span> <button type="button" class="edit-btn">${eg}</button> </span><input type="text" .value="${Ie(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let t=!!this.url,r=t?Nc(this.url):"Set repo";return c`<span class="${t?"chip":"chip empty"}" @click="${t?null:this._onEdit}">${Dc} <span class="label">${r}</span> <button type="button" class="edit-btn" title="Edit repo URL" aria-label="Edit repo URL" @click="${this._onEdit}">${eg}</button></span>`}return this.url?c`<span class="chip readonly" title="Repo from findings (read-only)">${Dc} <span class="label">${Nc(this.url)}</span></span>`:g}updated(t){if(t.has("editing")&&this.editing){let r=this.renderRoot.querySelector("input");r&&(r.focus(),r.select())}}_onEdit=t=>{t&&t.stopPropagation(),this._emit("repo-edit-start")};_onFocus=t=>{this._opener=t.target.value};_onInput=t=>{this.url=t.target.value,this._emit("repo-input",{url:this.url})};_onKeydown=t=>{t.key==="Enter"?(t.preventDefault(),this._emit("repo-commit",{url:this.url})):t.key==="Escape"&&(t.preventDefault(),this.url=this._opener,this._emit("repo-cancel",{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit("repo-commit",{url:this.url})};_emit(t,r){this.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0}))}};customElements.define("repo-chip",Uc);function rt(e,t){for(let[r,n]of Object.entries(t))e.hasAttribute(r)||e.setAttribute(r,n)}var d0=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],zc=class extends L{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"Filter by severity"})}render(){let t=this.kind==="graph"?new Set(this.selected):a.filterSeverities,r=d0.filter(([n])=>(this.counts[n]??0)||t.has(n));return r.length===0?g:c`${r.map(([n,o])=>{let s=this.counts[n]??0,i=t.has(n);return c`<button type="button" class="${F({"sev-chip":!0,[n]:!0,active:i})}" aria-pressed="${String(i)}" @click="${()=>this._toggle(n)}"><span class="sd"></span><span class="name">${o}</span><span class="n">${s}</span></button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("severity-toggle",{detail:{severity:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("severity-chips",zc);var u0=c`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,Wc=class extends L{createRenderRoot(){return this}render(){let t=a.currentView==="bundles"&&a.selectedBundle,r=!a.currentFile&&!t;return c`<button type="button" class="danger" ?disabled="${r}">${u0}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",Wc);var p0=c`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,f0=c`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,tg={packages:{title:"Show packages",icon:p0,view:"packages"},repositories:{title:"Show repositories",icon:f0,view:"repositories"}},Hc=class extends L{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind="",this.count=0}render(){if(this.count===0)return g;let t=tg[this.kind];if(!t)return console.warn(`<sidebar-view-button>: unknown kind ${JSON.stringify(this.kind)}; expected one of ${Object.keys(tg).map(n=>JSON.stringify(n)).join(", ")}.`),g;let r=a.currentView===t.view;return c`<button type="button" class="${F({"sidebar-view-btn":!0,active:r})}" title="${t.title}" aria-label="${t.title}">${t.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",Hc);var h0=["invalid","deleted"],rg={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},jc=class extends L{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=""}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"Triage view"})}render(){let t=rg[this.kind];if(!t)return console.warn(`<slide-triage-tabs>: unknown kind ${JSON.stringify(this.kind)}; expected one of ${Object.keys(rg).map(o=>JSON.stringify(o)).join(", ")}.`),g;let r=a[t.stateKey],n=h0.filter(o=>(this.counts[o]??0)>0||r===o);return n.length===0?g:c`${n.map(o=>{let s=r===o,i=this.counts[o]??0;return c`<button type="button" class="${F({"triage-state-btn":!0,[`triage-state-${o}`]:!0,active:s})}" title="${s?`Exit ${o} view`:`Show ${o} (${i})`}" aria-pressed="${String(s)}" @click="${()=>this._toggle(o)}">${o.charAt(0).toUpperCase()+o.slice(1)} (${i})</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("slide-triage-toggle",{detail:{kind:this.kind,value:t},bubbles:!0,composed:!0}))}};customElements.define("slide-triage-tabs",jc);var g0=[["own","Sources"],["modules","Dependencies"]],Vc=class extends L{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"Source filter"})}render(){return c`${g0.map(([t,r])=>{let n=a.filterSources.has(t);return c`<button type="button" class="${F({"source-chip":!0,active:n})}" aria-pressed="${String(n)}" @click="${()=>this._toggle(t)}">${r}</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("source-toggle",{detail:{source:t},bubbles:!0,composed:!0}))}};customElements.define("source-filter",Vc);var m0=c`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,ng={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},Kc=class extends L{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=ng[this.kind];return t?c`${m0} <input type="text" aria-label="${t.placeholder}" placeholder="${t.placeholder}" .value="${Ie(a[t.stateKey])}" @input="${this._onInput}">`:(console.warn(`<toolbar-search>: unknown kind ${JSON.stringify(this.kind)}; expected one of ${Object.keys(ng).map(r=>JSON.stringify(r)).join(", ")}.`),g)}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("toolbar-search",Kc);function b0(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}var qc=class extends L{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){return c`<select class="sort-select" aria-label="Filter by repository" .value="${Ie(a.filterRepo)}" @change="${this._onChange}"><option value="">All repositories</option>${this.options.map(t=>{let r=t??so,n=t==null?"(no repo)":b0(t);return c`<option value="${r}">${n}</option>`})}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("repo-change",{detail:{value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("repo-filter",qc);var og=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],Gc=class extends L{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"Filter by mark color"})}render(){let t=this.kind==="graph"?new Set(this.selected):a.filterColors;return og.some(([n])=>(this.counts[n]??0)||t.has(n))?c`${og.map(([n,o,s])=>{let i=this.counts[n]??0,l=t.has(n);return c`<button type="button" class="${l?"active":""}" title="${`${s} (${i})`}" aria-pressed="${String(l)}" @click="${()=>this._toggle(n)}"><span class="${`td ${o}`}"></span><span class="count">${i}</span></button>`})}`:g}_toggle(t){this.dispatchEvent(new CustomEvent("color-toggle",{detail:{color:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("triage-filter",Gc);var y0=["fixed","invalid","deleted","ignored"],Yc={graph:"graph2-triage-selector",packages:"packages-triage-selector"},Jc=class extends L{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=""}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"Triage view"})}render(){let t=this.states??y0,r=t.reduce((o,s)=>o+(this.counts[s]??0),0),n=this.variant?Yc[this.variant]:null;this.variant&&n===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(Yc).map(o=>JSON.stringify(o)).join(", ")} or "".`);for(let o of Object.values(Yc))this.classList.toggle(o,o===n);return r===0&&!a.shownTriage?g:c`${t.map(o=>{let s=this.counts[o]??0,i=a.shownTriage===o;return s===0&&!i?g:c`<button type="button" class="${F({"triage-state-btn":!0,[`triage-state-${o}`]:!0,active:i})}" data-triage-show="${o}" title="${i?`Exit ${o} view`:`Show ${o} (${s})`}" aria-pressed="${String(i)}">${o.charAt(0).toUpperCase()+o.slice(1)} (${s})</button>`})}`}};customElements.define("triage-selector",Jc);var w0={table:c`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:c`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:c`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:c`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:c`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:c`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><line x1="4.5" y1="4.5" x2="11.5" y2="6.5"/><line x1="4.5" y1="4.5" x2="6.5" y2="11.5"/><line x1="11.5" y1="6.5" x2="6.5" y2="11.5"/><circle cx="4.5" cy="4.5" r="2" fill="currentColor"/><circle cx="11.5" cy="6.5" r="2" fill="currentColor"/><circle cx="6.5" cy="11.5" r="2" fill="currentColor"/></svg>`},sg={table:"Table view (compact rows, click a row to expand)",list:"List view (flat, one card per finding)",grouped:"List view, grouped by file",focus:"Focus view (one finding centered + a queue of next findings)",kanban:"Kanban board, columns grouped by triage status",graph:"Graph view (canvas with imports / exports)"},Xc=["table","list","grouped","focus","kanban","graph"],Qc=class extends L{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=Xc.join(","),this.kind="findings"}connectedCallback(){super.connectedCallback(),rt(this,{role:"group","aria-label":"View mode"})}render(){let t=this.kind==="files"?a.filesViewMode:a.viewMode,r=this.modes.split(",").map(o=>o.trim()).filter(o=>Xc.includes(o)),n=r.length>0?r:Xc;return c`${n.map(o=>c`<button type="button" class="${F({"view-mode-btn":!0,active:t===o})}" title="${sg[o]}" aria-label="${sg[o]}" aria-pressed="${String(t===o)}" @click="${()=>this._select(o,t)}">${w0[o]}</button>`)}`}_select(t,r){t!==r&&this.dispatchEvent(new CustomEvent("view-mode-change",{detail:{mode:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("view-mode-buttons",Qc);var v0=6,ig=14,gi=2,ag=24,Eo=4;function k0(e){let t=/^#?([0-9a-f]{6})$/iu.exec(e);if(!t)return"#fff";let r=parseInt(t[1],16),n=r>>16&255,o=r>>8&255,s=r&255;return(.2126*n+.7152*o+.0722*s)/255>.6?"#1a1a1a":"#fff"}function $0(e,t,r,n){let o=r*r,s=n*n;return Math.max(s*e/o,o/(s*t))}function lg(e,t){let r=[],n=e.filter(f=>f.value>0),{x:o,y:s,w:i,h:l}=t;if(n.length===0||i<=0||l<=0)return r;let d=0;for(let f of n)d+=f.value;let u=i*l/d,p=0;for(;p<n.length&&i>.5&&l>.5;){let f=Math.min(i,l),h=p,b=0,m=0,y=1/0,k=1/0;for(;h<n.length;){let v=n[h].value*u,S=v>m?v:m,I=v<y?v:y,R=$0(S,I,b+v,f);if(h===p||R<=k)k=R,b+=v,m=S,y=I,h++;else break}let w=b/f;if(i>=l){let v=s;for(let S=p;S<h;S++){let I=S===h-1?s+l-v:n[S].value*u/w;r.push({node:n[S],x:o,y:v,w,h:I}),v+=I}o+=w,i-=w}else{let v=o;for(let S=p;S<h;S++){let I=S===h-1?o+i-v:n[S].value*u/w;r.push({node:n[S],x:v,y:s,w:I,h:w}),v+=I}s+=w,l-=w}p=h}return r}function cg(e){for(;e.children&&e.children.size===1;){let t=e.children.values().next().value;if(t.isFile)break;e.name=`${e.name}/${t.name}`,e.children=t.children}if(e.children)for(let t of e.children.values())cg(t)}function dg(e,t){if(e.path=e.name?t?`${t}/${e.name}`:e.name:t,e.isFile)return e.count=1,e.value;let r=0,n=0;for(let o of e.children.values())r+=dg(o,e.path),n+=o.count;return e.value=r,e.count=n,r}function ug(e,t,r,n,o,s,i){if(n<Eo||o<Eo)return;if(e.isFile){i.push({kind:"file",node:e,x:t,y:r,w:n,h:o});return}if(!(s<v0&&n>=ag&&o>=ag&&e.children.size>0)){i.push({kind:"agg",node:e,x:t,y:r,w:n,h:o});return}i.push({kind:"dir",node:e,x:t,y:r,w:n,h:o});let d=o>=ig+Eo+gi?ig:0,u=t+gi,p=r+d,f=n-gi*2,h=o-d-gi;if(f<Eo||h<Eo)return;let b=[...e.children.values()].toSorted((m,y)=>y.value-m.value);for(let m of lg(b,{x:u,y:p,w:f,h}))ug(m.node,m.x,m.y,m.w,m.h,s+1,i)}var Zc=class extends H{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._status="loading",this._meta={files:0,total:0,prefix:""},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null,this._onPointerMove=this._onPointerMove.bind(this),this._onPointerLeave=this._onPointerLeave.bind(this)}willUpdate(t){t.has("details")&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(".bundle-treemap-plot"),this._tooltip=this.querySelector(".bundle-treemap-tooltip"),!(!this._plot||typeof ResizeObserver>"u")&&(this._ro=new ResizeObserver(t=>{let r=t[0]?.contentRect;if(!r)return;let n=Math.floor(r.width),o=Math.floor(r.height);(n!==this._w||o!==this._h)&&(this._w=n,this._h=o)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&(this._ro.disconnect(),this._ro=null)}_onPointerMove(t){let r=t.target.closest(".bundle-treemap-node");if(!r||!this._tooltip){this._hideTooltip();return}if(r!==this._ttCell){this._ttCell=r;let n=r.dataset;W(c`<div class="bundle-treemap-tt-path">${n.ttPath}</div>${n.ttPkg?c`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${`background:${n.ttColor}`}"></span> <span class="bundle-treemap-tt-pkg">${n.ttPkg}</span></div>`:""}<div class="bundle-treemap-tt-meta">${n.ttMeta}</div>`,this._tooltip)}this._positionTooltip(t.clientX,t.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(t,r){let n=this._tooltip;if(!n||!this._plot)return;n.classList.add("show");let o=this._plot.getBoundingClientRect(),s=t-o.left,i=r-o.top,l=12,d=s+l;d+n.offsetWidth>o.width-4&&(d=s-n.offsetWidth-l),d<4&&(d=4);let u=i+l;u+n.offsetHeight>o.height-4&&(u=i-n.offsetHeight-l),u<4&&(u=4),n.style.left=`${d}px`,n.style.top=`${u}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove("show")}_rebuild(){if(this._root=null,this._meta={files:0,total:0,prefix:""},!this.details){this._status="loading";return}let t=ut(this.details);if(!t||t.size===0){this._status="empty";return}let r=[...t.keys()],{prefix:n,stripped:o}=Ft(r),s=new TextEncoder,i={name:"",children:new Map,value:0,isFile:!1},l=0,d=0;for(let u=0;u<r.length;u++){let p=t.get(r[u]),f=typeof p=="string"?s.encode(p).byteLength:0;if(f<=0)continue;let h=o[u].split("/"),b=i,m=!1;for(let w=0;w<h.length-1;w++){let v=b.children.get(h[w]);if(v&&v.isFile){m=!0;break}v||(v={name:h[w],children:new Map,value:0,isFile:!1},b.children.set(h[w],v)),b=v}if(m)continue;let y=h.at(-1),k=b.children.get(y);k&&!k.isFile||(k||(k={name:y,isFile:!0,value:0,origPath:r[u]},b.children.set(y,k)),k.value+=f,l+=f,d++)}if(l===0){this._status="empty";return}for(let u of i.children.values())cg(u);dg(i,""),this._root=i,this._meta={files:d,total:l,prefix:n},this._status="ok"}_cell(t){let r=this._meta.total||1,n=t.node.value/r*100,o=n>=10?n.toFixed(0):n.toFixed(n>=1?1:2),s={left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`},i=`${t.node.count} ${t.node.count===1?"file":"files"}`;if(t.kind==="dir")return c`<div class="bundle-treemap-node bundle-treemap-dir" style="${ve(s)}" data-tt-path="${`${t.node.path}/`}" data-tt-meta="${`${De(t.node.value)} \xB7 ${i} \xB7 ${o}%`}"><span class="bundle-treemap-dirname">${t.node.name}</span></div>`;let l=ho(t.node.path),d=Lt(l),u=ve({...s,background:d,color:k0(d)}),p=l==="__own__"?"own source":l;return t.kind==="agg"?c`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${u}" data-tt-path="${`${t.node.path}/`}" data-tt-pkg="${p}" data-tt-color="${d}" data-tt-meta="${`${De(t.node.value)} \xB7 ${i} \xB7 ${o}%`}"><span class="bundle-treemap-label">${t.node.name}/</span></div>`:c`<button type="button" class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${u}" data-bundle-view-source="${t.node.origPath}" data-tt-path="${t.node.path}" data-tt-pkg="${p}" data-tt-color="${d}" data-tt-meta="${`${De(t.node.value)} \xB7 ${o}% of bundle`}"><span class="bundle-treemap-label">${t.node.name}</span></button>`}render(){let t=[];if(this._status==="ok"&&this._root&&this._w>0&&this._h>0){let s=[...this._root.children.values()].toSorted((i,l)=>l.value-i.value);for(let i of lg(s,{x:0,y:0,w:this._w,h:this._h}))ug(i.node,i.x,i.y,i.w,i.h,1,t)}let{files:r,total:n,prefix:o}=this._meta;return c`<header class="bundle-treemap-head"><span class="bundle-treemap-title">Source treemap</span> <span class="bundle-treemap-sub">${r} ${r===1?"file":"files"} · ${De(n)}${o?c`· <span class="mono">${o}</span>`:""}</span></header><div class="bundle-treemap-plot" @pointermove="${this._onPointerMove}" @pointerleave="${this._onPointerLeave}">${this._status==="loading"?c`<div class="bundle-treemap-empty">Loading…</div>`:this._status==="empty"?c`<div class="bundle-treemap-empty">This bundle doesn't carry any source content.</div>`:t.map(s=>this._cell(s))}<div class="bundle-treemap-tooltip"></div></div>`}};customElements.define("bundle-treemap",Zc);var x0=c`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M6 9V2h12v7"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>`,ed=class extends L{createRenderRoot(){return this}render(){return a.reports.length>0&&a.currentView==="findings"&&a.viewMode!=="graph"&&a.viewMode!=="kanban"?c`<button type="button" title="print this report" aria-label="print" @click="${this._onClick}">${x0}</button>`:g}_onClick=()=>{this.dispatchEvent(new CustomEvent("print-requested",{bubbles:!0,composed:!0}))}};customElements.define("print-button",ed);var _0=c`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>`,td=class extends L{createRenderRoot(){return this}render(){return a.reports.length>0&&a.currentView==="findings"&&a.viewMode!=="graph"&&a.viewMode!=="kanban"?c`<button type="button" title="download this report" aria-label="download" @click="${this._onClick}">${_0}</button>`:g}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",td);function mi(e){let t=new Map;for(let[r,n]of a.triage)n[e]&&t.set(r,n[e]);return t}var S0={get markers(){return mi("color")},get triageState(){return mi("triage")},get comments(){return mi("comment")},get fixes(){return mi("fix")},get(e){let t=a.triage.get(e),r={};return t?.color&&(r.color=t.color),t?.triage&&(r.triage=t.triage),t?.comment&&(r.comment=t.comment),t?.fix&&(r.fix=t.fix),r},async set(e,{color:t,triage:r,comment:n,fix:o}={}){let s=!1;if(t!==void 0&&(t===null||t===""?M(a.triage,e,{color:void 0})&&(s=!0):a.triage.get(e)?.color!==t&&(M(a.triage,e,{color:t}),s=!0)),r!==void 0)if(r===null||r===""||r===!1)M(a.triage,e,{triage:void 0})&&(s=!0);else if(r==="fixed"||r==="invalid"||r==="deleted")a.triage.get(e)?.triage!==r&&(M(a.triage,e,{triage:r}),s=!0);else throw new TypeError(`DeepView.triage.set: unknown triage value ${JSON.stringify(r)} (expected 'fixed' | 'invalid' | 'deleted' | null)`);if(n!==void 0){let i=n?String(n):"";i?a.triage.get(e)?.comment!==i&&(M(a.triage,e,{comment:i}),s=!0):M(a.triage,e,{comment:void 0})&&(s=!0)}if(o!==void 0){let i=o?String(o):"";i?a.triage.get(e)?.fix!==i&&(M(a.triage,e,{fix:i}),s=!0):M(a.triage,e,{fix:void 0})&&(s=!0)}return s&&(await oe(),$()),s}};window.DeepView={get reports(){return a.reports.slice()},get groups(){return Mt()},get findings(){return Mt().flat()},get currentFile(){return a.currentFile},get currentWorkspace(){return a.currentWorkspace},triage:S0,themes:zh,setTheme:Dh,get theme(){return Uh()},triageSync:N,refresh(){$()},export(){return Qh()}};var C0={default:Y.default,"claude-security":Y["claude-security"],"codex-security":Y["codex-security"],deepsec:Y.deepsec,bundle:rn,workspace:Os};for(let e of document.querySelectorAll(".drop-supported-icon[data-icon]")){let t=C0[e.dataset.icon];t&&(e.innerHTML=t)}op($);np($);N.onStatusChange($);tp(async(e,t)=>{a.currentWorkspace===e?await er(e):a.currentFile&&a.currentFile===t?await _t(t):await j()});rp(async()=>{await j(),a.currentView==="bundles"&&$()});yh();vh();async function E0(){let e=ll();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t;try{t=await $h({encoded:e})}catch(n){return alert(`Couldn't open the share-link unlock prompt: ${n.message}`),!1}if(!t)return!1;let r=await Ua({id:t.id,name:t.name,privateKey:t.privateKeyBase64});if(r.status==="already-attached")return alert(`This workspace is already attached as "${r.workspace.name}".`),!1;if(r.status==="name-collision"){let n=r.existing?.name;return alert(n?`A workspace named "${n}" already exists. Open the share link again and pick a different name.`:"The shared workspace name is empty or invalid. Ask the sender to re-share with a real name."),!1}return r.workspace?.id?await er(r.workspace.id):await j(),!0}var Ao=!1;async function gg(){if(Ao||(Ao=!0,await Ut(),La(),await j(),await E0()))return;let t=he(Zt);if(t)if(t.startsWith("ws:")){let r=t.slice(3);z().some(n=>n.id===r)&&await er(r)}else if(t.startsWith("b:")){let r=t.slice(2),n=r.indexOf(" "),o=n>=0?r.slice(0,n):r,s=n>=0?r.slice(n+1):"",i=po.has(s)?s:"overview";(a.bundles??[]).some(l=>l.integrity===o)&&(a.currentView="bundles",a.selectedBundle=o,a.bundleDetails=null,a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.bundleCodeSearchQuery="",a.bundleCodeSearchMode="files",a.bundleDetailsTab=i,a.shownTriage=null,E.showAll=!0,$(),Qt(o))}else(await le()).includes(t)&&await _t(t)}var pg=X(),fg=!1;function hg(e){fg||(fg=!0,queueMicrotask(()=>{alert(e+" This tab will reload to refresh its state. Any unsaved edits in this tab will be lost."),location.reload()}))}ge(()=>{let e=pg,t=X();if(pg=t,$(),!Ao&&it()){gg().catch(r=>console.warn("continueBoot:",r));return}if(Ao&&t&&!it()){hg("Encryption was just enabled in another tab.");return}Ao&&e&&!t&&!Ki()&&hg("Encryption was disabled in another tab.")});(async()=>{if(!await kh()){try{let e=window.matchMedia?.("(display-mode: window-controls-overlay)").matches;if(!e&&localStorage.getItem("deepview.sidebarCollapsed")==="1"&&Dd.classList.add("collapsed"),window.matchMedia?.("(display-mode: standalone)").matches||e){let r=document.querySelector('meta[name="viewport"]');r&&r.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"),window.addEventListener("wheel",n=>{(n.ctrlKey||n.metaKey)&&n.preventDefault()},{passive:!1}),window.addEventListener("keydown",n=>{(n.ctrlKey||n.metaKey)&&(n.key==="="||n.key==="+"||n.key==="-"||n.key==="0")&&n.preventDefault()})}}catch{}X()&&!it()||await gg()}})();
|
|
187
|
+
Use this only if you have lost access to your passkey and have no other way to unlock.`)&&confirm("Really wipe everything? This cannot be undone.")){try{await jc()}catch(o){alert(`Wipe failed: ${o?.message??o}. Try again or clear localStorage manually via DevTools.`);return}location.reload()}}),document.body.append(Qt),Qt}function x$(){return C()||!_n()?!1:me()&&!tr()}async function $$(){if(await bt(),x$()){let e=kW();e.hidden=!1;let t=e.querySelector("button");t&&t.focus()}else if(Qt&&(Qt.hidden=!0,mp))try{mp.abort()}catch{}}tt($$);document.addEventListener("managed-client-mode-change",$$);$$();po();Lh();vl();Kt();$h();oa();U();mr();he();ct();pn();Im();Rm();rk();Yt();op();sx();T();U();he();pe();gu();_$();$o();var S$=class extends D{static styles=[...D.styles,F($i),F(Dg)];static properties={initial:{attribute:!1},finding:{attribute:!1},_value:{state:!0}};constructor(){super(),this.initial="",this.finding=null,this._value=""}beforeOpen(){this._value=this.initial??""}focusInitial(){let t=this.renderRoot.querySelector("textarea");if(!t)return;t.focus();let r=t.value.length;try{t.setSelectionRange(r,r)}catch{}}_onInput=t=>{this._value=t.target.value};_onSave=()=>{let t=(this._value??"").trim(),r=(this.initial??"").trim();if(t===r){this._finish(null);return}this._finish(t)};_onClear=()=>this._finish("");_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.ctrlKey||t.metaKey)&&(t.preventDefault(),this._onSave())};render(){let t=this.finding??{},r=t.file?t.line?`${t.file}:${t.line}`:t.file:"",n=(this.initial??"").length>0;return d`<dialog @close="${this._onClose}"><header><h3>${n?"Edit comment":"Add comment"}</h3><div class="finding">${_i(ue(t,l.severityMode))} ${r?d`<span class="loc" title="${r}">${r}</span>`:m}</div>${t.description?d`<div class="desc" title="${t.description}">${t.description}</div>`:m}</header><textarea rows="6" placeholder="Write your notes here. Markdown is not rendered. Ctrl/⌘+Enter to save, Esc to cancel." .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"></textarea><footer class="nwd-actions">${n?d`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:m} <span class="nwd-spacer"></span> <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onSave}">Save</button></footer></dialog>`}};customElements.define("comment-dialog",S$);function c7({initial:e="",finding:t=null}={}){return le("comment-dialog",{initial:e,finding:t})}T();Je();pe();Kt();he();ea();Am();var d7=`dialog{width:min(96vw,1400px);max-width:1400px;height:min(88dvh,1000px);max-height:92dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;gap:1rem;padding:.7rem 1rem;border-bottom:1px solid var(--border);flex:0 0 auto;& h3{margin:0;min-width:0;flex:1;overflow-wrap:anywhere;font:.85rem ui-monospace,monospace}& button{border:0;background:transparent;color:var(--muted);font-size:1.4rem;padding:0 .3rem;&:hover{color:var(--text)}}}.source-scroll{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.source-status{padding:1rem;color:var(--muted)}.source-lines{display:flex;min-width:100%;width:max-content;font:.8rem/1.6 ui-monospace,monospace;& aside{position:sticky;left:0;align-self:stretch;flex:0 0 auto;padding:.75rem 0;background:var(--surface);color:var(--muted);border-right:1px solid var(--border);text-align:right;user-select:none;& div{padding:0 .75rem}.cited{background:rgb(from var(--accent) r g b / .18);color:var(--accent);font-weight:700}}& pre{padding:.75rem 1rem;margin:0;tab-size:4}& pre,code{font:inherit;white-space:pre}}
|
|
188
|
+
`;var Xi=`.token.comment,.token.prolog,.token.cdata{color:var(--code-comment);font-style:italic}.token.punctuation{color:var(--muted)}.token.string,.token.attr-value,.token.char,.token.regex{color:var(--code-string)}.token.number,.token.boolean,.token.constant,.token.symbol{color:var(--code-number)}.token.keyword,.token.builtin,.token.important,.token.atrule{color:var(--code-keyword)}.token.function,.token.class-name,.token.tag{color:var(--code-function)}.token.operator,.token.entity,.token.url,.token.attr-name,.token.selector{color:var(--code-operator)}.token.variable,.token.property,.token.parameter{color:var(--code-variable)}.token.annotation{color:var(--code-function)}.token.deleted{color:var(--code-deleted)}.token.inserted{color:var(--code-inserted)}.token.italic{font-style:italic}.token.bold{font-weight:700}
|
|
189
|
+
`;var C$=class extends D{static styles=[...D.styles,F(d7),F(Xi)];static properties={reportId:{attribute:!1},file:{attribute:!1},line:{attribute:!1},_path:{state:!0},_content:{state:!0},_highlighted:{state:!0},_loading:{state:!0}};constructor(){super(),this.reportId="",this.file="",this.line="",this._path="",this._content=null,this._highlighted=null,this._loading=!0}beforeOpen(){this._load()}async _load(){try{let{data:t,error:r}=await _h(this.reportId).then(s=>({data:s}),s=>({error:s}));if(this._settled||!this.isConnected)return;let n=wl(this.reportId),o=r?n?.error===r:n?.data===t||t===null&&!!n?.error;if(!n||!o||r?.name==="AbortError"||n.controller?.signal.aborted){this._finish(null);return}if(this._sourceSignal=n.controller?.signal,this._sourceSignal?.addEventListener("abort",this._onClose,{once:!0}),this._path=t?.paths.get(this.file)??this.file,this._content=t?.sources.get(this._path)??null,this._loading=!1,await this.updateComplete,this._settled||!this.isConnected)return;zl(this.renderRoot.querySelector(".source-scroll"),this.renderRoot.querySelectorAll(".cited"));let i=Rr(this._path,t?.formats?.get(this._path));if(i&&this._content!==null){let s=await jr(this._content,i);!this._settled&&this.isConnected&&(this._highlighted=s)}}catch(t){t.name==="AbortError"?this._finish(null):this._loading=!1}}disconnectedCallback(){this._sourceSignal?.removeEventListener("abort",this._onClose),this._content=null,this._highlighted=null,super.disconnectedCallback()}_onKeydown=t=>{t.key==="Escape"&&t.stopPropagation()};_onBackdrop=t=>{if(t.target!==t.currentTarget)return;let{left:r,right:n,top:o,bottom:i}=t.currentTarget.getBoundingClientRect();(t.clientX<r||t.clientX>n||t.clientY<o||t.clientY>i)&&this._finish(null)};render(){let t=Bt(this.line);return d`<dialog aria-labelledby="source-title" @close="${this._onClose}" @keydown="${this._onKeydown}" @click="${this._onBackdrop}"><header><h3 id="source-title" class="mono">${this._path||this.file}</h3><button type="button" aria-label="Close source viewer" @click="${this._onClose}">×</button></header><div class="source-scroll" tabindex="0" aria-label="Full source code" aria-busy="${String(this._loading)}">${this._content===null?d`<p class="source-status" role="status">${this._loading?"Loading source\u2026":"Source unavailable"}</p>`:d`<div class="source-lines"><aside aria-hidden="true">${this._content.split(`
|
|
190
|
+
`).map((r,n)=>d`<div class="${t&&n+1>=t.start&&n+1<=t.end?"cited":""}">${n+1}</div>`)}</aside><pre><code>${typeof this._highlighted=="string"?V(this._highlighted):this._content}</code></pre></div>`}</div></dialog>`}};customElements.define("finding-source-dialog",C$);function u7({reportId:e,file:t,line:r}){return le("finding-source-dialog",{reportId:e,file:t,line:r})}T();pe();_o();var E$=class extends D{static styles=[...D.styles,F(Ot)];static properties={bundleName:{type:String},encrypted:{type:Boolean}};constructor(){super(),this.bundleName="",this.encrypted=!1}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}_finish(t){this._settled||super._finish({confirmed:!!t})}_onClose=()=>this._finish(!1);_onCancel=()=>this._finish(!1);_onConfirm=()=>this._finish(!0);_securityNote(){return this.encrypted?d`<p class="lwd-note">The bundle is saved <strong>unencrypted</strong> — even though your vault keeps its stored copy encrypted — and the file contains <strong>all of the bundle's related sources</strong>. Anyone with access to the downloaded file can read every bundled source, so store or share it with care.</p>`:d`<p class="lwd-note">The downloaded file is <strong>unencrypted</strong> and contains <strong>all of the bundle's related sources</strong>. Anyone with access to it can read every bundled source, so store or share it with care.</p>`}render(){return d`<dialog @close="${this._onClose}"><header><h3>Download bundle</h3></header><p class="lwd-body">Download <strong>"${this.bundleName}"</strong> to disk?</p>${this._securityNote()}<footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onConfirm}">Download</button></footer></dialog>`}};customElements.define("download-bundle-dialog",E$);function p7({name:e,encrypted:t}={}){return le("download-bundle-dialog",{bundleName:e??"",encrypted:!!t})}T();pe();$o();T();var f7=d`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>`,h7=d`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="1.8" y="5" width="20.4" height="14" rx="2"/><path d="M5.6 15.6V8.4l3.1 3.6 3.1-3.6v7.2"/><path d="M16.9 8.4v7.2m-2.6-2.9 2.6 2.9 2.6-2.9"/></svg>`,m7=d`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M6 9V2h12v7"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>`;U();pn();he();ct();ge();function SW(e,t){let r=Vh.find(n=>n.value===e)?.label??e;return Wh(e)?.includes("partial")?t==="exclude"?`${r} (full only)`:t==="only"?`${r} (partial only)`:r:r}function CW(e){return Ne.filter(t=>e.has(t)).map(t=>ja[t]??t).join(", ")}function M$(e=l){let t=[];if(e.filterSeverities.size>0&&t.push({key:"severity",label:"Severity",value:CW(e.filterSeverities),clear:{filterSeverities:new Set}}),e.filterColors.size>0&&t.push({key:"marks",label:"Marks",value:[...e.filterColors].map(r=>od[r]??r).join(", "),clear:{filterColors:new Set}}),e.filterSources.size===1&&t.push({key:"source",label:"Source",value:e.filterSources.has("own")?"Sources only":"Dependencies only",clear:{filterSources:new Set}}),e.filterAnalyzer&&t.push({key:"analyzer",label:"Analyzer",value:e.filterAnalyzer===Ci?"(none)":e.filterAnalyzer,clear:{filterAnalyzer:""}}),e.filterModel&&t.push({key:"model",label:"Model",value:e.filterModel===Ei?"(none)":e.filterModel,clear:{filterModel:""}}),e.filterRepo&&t.push({key:"repo",label:"Repository",value:e.filterRepo===Js?"(no repo)":e.filterRepo,clear:{filterRepo:""}}),Wh(e.filterRevalidate)&&t.push({key:"revalidate",label:"Revalidation",value:SW(e.filterRevalidate,e.filterPartial),clear:{filterRevalidate:"",filterPartial:""}}),!e.filterRevalidate&&(e.filterConfMin>0||e.filterConfMax<10)){let r;e.filterConfMin>0&&e.filterConfMax<10?r=`${e.filterConfMin}\u2013${e.filterConfMax}`:e.filterConfMin>0?r=`\u2265 ${e.filterConfMin}`:r=`\u2264 ${e.filterConfMax}`,t.push({key:"confidence",label:"Confidence",value:r,clear:{filterConfMin:0,filterConfMax:10}})}e.filterInclude&&t.push({key:"search",label:e.filterIncludeNegate?"Excluding":"Search",value:`"${e.filterInclude}"`,clear:{filterInclude:"",filterIncludeNegate:!1}});for(let[r,n]of[["filterComment","comment"],["filterFix","fix"],["filterFlagged","flag"]]){let o=e[r];o&&t.push({key:`annotation:${n}`,label:"Annotation",value:`${o==="with"?"With":"Without"} ${n}`,clear:{[r]:""}})}return!l.currentWorkspace&&e.filterDuplicates&&t.push({key:"duplicates",label:"Duplicates",value:e.filterDuplicates==="with"?"Only rows linked to other reports":"Exclude rows linked to other reports",clear:{filterDuplicates:""}}),e.filterCrossContext&&t.push({key:"cross-context",label:"Context",value:e.filterCrossContext==="with"?"Only rows across multiple repos or packages":"Exclude rows across multiple repos or packages",clear:{filterCrossContext:""}}),e.filterAppStacked&&t.push({key:"app-stacked",label:"App stack",value:e.filterAppStacked==="with"?"Only rows with multiple App findings":"Exclude rows with multiple App findings",clear:{filterAppStacked:""}}),e.filterSecurity&&t.push({key:"security",label:"Security",value:e.filterSecurity==="with"?"Only security-related rows":"Exclude security-related rows",clear:{filterSecurity:""}}),t}function R$(){return Mr().filter(e=>Ke(e).commonTriage===l.shownTriage)}function A$(){return l.shownTriage?ei[l.shownTriage]??l.shownTriage:null}function zg(e,t=S4()){let r=R$(),n=r.length;wu(t);let o;try{o=Mi(r).length}finally{ku()}return{included:o,total:n,excluded:n-o,fields:t,filters:M$(t),bucketLabel:A$(),focusedOnly:e==="print"&&l.viewMode==="focus"}}var g7=`dialog{max-width:515px;width:min(94vw,515px)}.ecd-count{margin:0;font-size:1.02rem;color:var(--text);& strong{color:var(--accent);font-weight:700}}.ecd-excluded{margin:.25rem 0 0;color:var(--muted);font-size:.82rem}.ecd-filters{margin:.9rem 0 0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.3rem .7rem;font-size:.82rem}.ecd-filters dt{color:var(--muted);font-weight:600;white-space:nowrap}.ecd-filters dd{display:flex;align-items:baseline;gap:.5rem;color:var(--text);overflow-wrap:anywhere}.ecd-filter-value{min-width:0}.ecd-filter-drop{margin-left:auto;flex:none;padding:0 .2rem;border:0;border-radius:var(--ui-radius, 4px);background:none;color:var(--muted);font:inherit;font-size:1rem;line-height:1;&:hover{color:var(--critical, #f87171)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.ecd-filters-label{margin:.9rem 0 0;font-size:.76rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.ecd-filters-label+.ecd-filters{margin-top:.35rem}.ecd-samples{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;font-size:.82rem;color:var(--text)}.ecd-samples input{margin-top:.15rem;accent-color:var(--accent)}.ecd-samples-hint{display:block;margin-top:.2rem;color:var(--muted);font-size:.76rem}
|
|
191
|
+
`;Gx();var MW=[{id:"download",label:"Markdown",icon:h7},{id:"print",label:"Print",icon:m7}],I$=class extends D{static styles=[...D.styles,F(g7),F(Sg)];static properties={mode:{type:String},included:{type:Number},excluded:{type:Number},total:{type:Number},filters:{attribute:!1},fields:{attribute:!1},bucketLabel:{type:String},focusedOnly:{type:Boolean},oneSamplePerGroup:{type:Boolean}};constructor(){super(),this.mode="download",this.included=0,this.excluded=0,this.total=0,this.filters=[],this.fields=null,this._relaxed=!1,this.bucketLabel=null,this.focusedOnly=!1,this.oneSamplePerGroup=!1}get _focusedOnly(){return this.mode==="print"&&this.focusedOnly}_selectTab(t){this.mode!==t&&(this.mode=t)}focusInitial(){let t=this.included===0?'button[data-role="cancel"]':"button.primary";this.renderRoot.querySelector(t)?.focus()}_finish(t){this._settled||super._finish({confirmed:t==="confirm",view:t==="view",fields:this._relaxed?this.fields:null,mode:this.mode,oneSamplePerGroup:this.oneSamplePerGroup})}_onClose=()=>this._finish("cancel");_onCancel=()=>this._finish("cancel");_onView=()=>this._finish("view");_onConfirm=()=>this._finish("confirm");async _onDropFilter(t){let r=this.filters.findIndex(s=>s.key===t);if(r===-1)return;let n=zg(this.mode,{...this.fields,...this.filters[r].clear});this._relaxed=!0,this.fields=n.fields,this.filters=n.filters,this.included=n.included,this.excluded=n.excluded,this.total=n.total,await this.updateComplete;let o=[...this.renderRoot.querySelectorAll("button[data-drop]")];(o[Math.min(r,o.length-1)]??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector('button[data-role="cancel"]'))?.focus()}_countSection(){if(this.total===0)return d`<p class="ecd-count">No findings to ${this.mode==="print"?"print":"download"}.</p>`;if(this._focusedOnly&&this.included>0)return d`<p class="ecd-count">Only the <strong>focused</strong> finding will be printed.</p><p class="ecd-excluded">Focus mode prints just the finding you're viewing. Switch to the list or grouped view to print all ${this.included} matching ${this.included===1?"finding":"findings"}.</p>`;let r=this.excluded===0&&this.filters.length===0?d`All <strong>${this.included}</strong> ${this.included===1?"finding":"findings"} included.`:d`<strong>${this.included}</strong> of ${this.total} ${this.total===1?"finding":"findings"} included.`;return d`<p class="ecd-count">${r}</p>${this.excluded>0?d`<p class="ecd-excluded">${this.excluded} filtered out and ${this.mode==="print"?"won't be printed":"won't be downloaded"}.</p>`:m}`}_filtersSection(){return this.filters.length===0?d`<p class="ecd-filters-label">No filters active — the full ${this.bucketLabel?`${this.bucketLabel.toLowerCase()} `:""}set is included.</p>`:d`<p class="ecd-filters-label">Active filters</p><dl class="ecd-filters">${this.filters.map(t=>d`<dt>${t.label}</dt><dd><span class="ecd-filter-value">${t.value}</span> <button type="button" class="ecd-filter-drop" data-drop="${t.key}" aria-label="${`Drop the ${t.label.toLowerCase()} filter (${t.value}) from this export`}" @click="${()=>this._onDropFilter(t.key)}">×</button></dd>`)}</dl>`}render(){let t=this.mode==="print",r=this._focusedOnly?"You're in focus mode \u2014 printing outputs just the finding you're focused on.":t?"Prints only the findings matching your current filters \u2014 the same set shown on screen. Use the toolbar to change the selection first.":"Downloads a Markdown file of the findings matching your current filters \u2014 the same set shown on screen. Use the toolbar to change the selection first.";return d`<dialog @close="${this._onClose}"><header>${Qh({tabs:MW,current:this.mode,prefix:"ecd",select:n=>this._selectTab(n)})}</header><div role="tabpanel" id="${`ecd-panel-${this.mode}`}" aria-labelledby="${`ecd-tab-${this.mode}`}"><p class="nwd-intro">${r}</p>${this._countSection()} ${this.bucketLabel?d`<p class="nwd-note">Scoped to the <strong>${this.bucketLabel}</strong> list — live findings are not included.</p>`:m} ${this._filtersSection()} <label class="ecd-samples"><input type="checkbox" .checked="${this.oneSamplePerGroup}" @change="${n=>{this.oneSamplePerGroup=n.target.checked}}"> <span>One sample per group<span class="ecd-samples-hint">Include only the currently selected sample from each group.</span></span></label></div><footer class="nwd-actions"><span class="nwd-spacer"></span> <button type="button" data-role="cancel" @click="${this._onCancel}">Cancel</button> ${t?m:d`<button type="button" data-role="view" ?disabled="${this.included===0}" @click="${this._onView}">View</button>`} <button type="button" class="primary" ?disabled="${this.included===0}" @click="${this._onConfirm}">${t?"Print":"Download"}</button></footer></dialog>`}};customElements.define("export-confirm-dialog",I$);function b7(e="download"){let t=zg(e),r=e==="print"?t.focusedOnly:zg("print").focusedOnly;return new Promise(n=>{let o=document.createElement("export-confirm-dialog");Object.assign(o,{mode:e,included:t.included,excluded:t.excluded,total:t.total,filters:t.filters,fields:t.fields,bucketLabel:t.bucketLabel,focusedOnly:r});let i=s=>{o.remove(),n(s)};o.addEventListener("resolve",s=>i({confirmed:!!s.detail?.confirmed,view:!!s.detail?.view,fields:s.detail?.fields??null,mode:s.detail?.mode??e,oneSamplePerGroup:!!s.detail?.oneSamplePerGroup})),o.addEventListener("modal-conflict",()=>i({confirmed:!1,view:!1,fields:null,mode:e})),document.body.append(o)})}T();pe();ea();dp();ge();var RW=160,AW=320,IW=/^ {0,3}#{1,6}(?: |$)/u,TW=/^ {0,3}(?:=+|-+) *$/u,Ug=/^\|?[^|\n]+(?:\|[^|\n]+)+\|?$/u,v7=/^\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?$/u;function y7(e,t=e.join(`
|
|
192
|
+
`),{target:r=RW,max:n=AW}={}){let o=e.length;if(o===0)return[];let i=ft(t),s=0,a=0,c=()=>{for(;s<i.length&&i[s][1]<=a-1;)s++;return s<i.length&&a-1>=i[s][0]},u=v=>e[v].trim()==="",p=v=>Ug.test(e[v]),f=v=>!c()&&!(v7.test(e[v])&&p(v-1))&&!(TW.test(e[v])&&!u(v-1)),h=v=>u(v-1)||IW.test(e[v]),g=[],b=0;for(let v=1;v<o;v++){a+=e[v-1].length+1;let x=v-b;x<r||!f(v)||(x>=n||h(v))&&(g.push([b,v]),b=v)}return g.push([b,o]),g}function w7(e,t){if(t<2||!Ug.test(e[t])||!Ug.test(e[t-1]))return null;let r=t-1;for(;r>0&&Ug.test(e[r-1]);)r--;for(let n=r+1;n<t;n++)if(v7.test(e[n]))return[n-1,n+1];return null}function k7(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}var x7=`dialog{max-width:none;max-height:none;width:calc(100vw - 4rem);height:calc(100vh - 4rem);margin:2rem auto;position:relative;padding:12px}dialog[open]{display:flex;flex-direction:column}dialog::backdrop{backdrop-filter:none}header{display:flex;align-items:center;gap:.45rem;margin-bottom:.6rem;padding-right:3rem;user-select:none}header h3{margin:0}.evd-close{position:absolute;top:6px;right:6px;z-index:1;width:22px;height:22px;display:grid;place-items:center;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);font:500 16px/1 ui-monospace,monospace;cursor:default;&:hover{color:var(--accent);background:var(--surface-active)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.evd-code{flex:1 1 auto;min-height:0;margin:0;overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;line-height:1.55;scrollbar-width:thin;scrollbar-color:var(--border) transparent;&::-webkit-scrollbar{width:6px;height:6px}&::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}}.evd-lines{--evd-gutter: calc(var(--evd-lineno-width, 3ch) + 1.4rem);padding:.5rem 0;background-image:linear-gradient(to right,rgb(from var(--text) r g b / .03) 0 calc(var(--evd-gutter) - 1px),var(--border) calc(var(--evd-gutter) - 1px) var(--evd-gutter),transparent var(--evd-gutter))}.evd-chunk{display:grid;grid-template-columns:var(--evd-gutter) minmax(0,1fr);align-items:start;content-visibility:auto;contain-intrinsic-size:auto calc(var(--evd-chunk-lines, 1) * 1.55em)}.evd-chunk.evd-pending{display:block;padding:0 .75rem 0 calc(var(--evd-gutter) + .6rem);white-space:pre-wrap;overflow-wrap:anywhere}.evd-lineno{padding:0 .55rem 0 .4rem;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;user-select:none}.evd-line{padding:0 .75rem 0 .6rem;font:inherit;background:none;white-space:pre-wrap;overflow-wrap:anywhere}.evd-meta{color:var(--muted);font-size:.74rem;font-variant-numeric:tabular-nums}.evd-copy{margin-left:auto;flex-shrink:0;height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font:inherit;font-size:.72rem;font-weight:500;letter-spacing:.02em;cursor:default;&:hover{color:var(--accent);background:var(--surface-active)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}&.evd-done{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}&.evd-failed{color:var(--critical, #f87171);background:color-mix(in srgb,var(--critical, #f87171) 14%,transparent)}}
|
|
193
|
+
`;var FW=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><rect x="3" y="2.5" width="8" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><rect x="5.5" y="5" width="8" height="9" rx="1" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`;function BW(e,t,r,n=null){let o="";for(let i=t;i<r;i++){let s=n===null?k7(e[i]):n[i-t];o+=`<span class="evd-lineno" aria-hidden="true">${i+1}</span><code class="evd-line">${s}
|
|
194
|
+
</code>`}return o}var T$=class extends D{static styles=[...D.styles,F(Xi),F(x7)];static properties={markdown:{attribute:!1},_copied:{state:!0}};_lines=[];_kb="0.0";_chunks=[];_copiedTimer=null;constructor(){super(),this.markdown="",this._copied=""}focusInitial(){this.renderRoot.querySelector('button[data-role="cancel"]')?.focus()}willUpdate(t){if(!t.has("markdown"))return;let r=this.markdown.split(`
|
|
195
|
+
`),n=r.length>1&&r.at(-1)===""?r.length-1:r.length;this._lines=r.slice(0,n),this._kb=(new TextEncoder().encode(this.markdown).length/1024).toFixed(1),this._chunks=y7(this._lines,this.markdown).map(([o,i])=>({start:o,end:i,asked:!1}))}render(){let t=this._lines.length,r=this._copied==="done"?"Copied":this._copied==="failed"?"Copy failed":"Copy",n=this._copied==="failed"?"Select the text and copy it by hand":m;return d`<dialog @close="${this._onClose}"><button type="button" class="evd-close" data-role="cancel" aria-label="Close" @click="${this._onClose}">×</button><header><h3>Report markdown</h3><span class="evd-meta">· ${t} ${t===1?"line":"lines"} · ${this._kb} KB</span> <button type="button" class="evd-copy ${this._copied==="done"?"evd-done":this._copied==="failed"?"evd-failed":""}" data-role="copy" data-tooltip="${n}" @click="${this._onCopy}">${FW}${r}</button></header><div class="evd-code" tabindex="0"><div class="evd-lines" style="--evd-lineno-width: ${String(t).length}ch">${this._chunks.map((o,i)=>d`<div class="evd-chunk evd-pending" data-chunk="${i}" style="--evd-chunk-lines: ${o.end-o.start}"></div>`)}</div></div></dialog>`}updated(){if(this.isConnected)for(let t of this.renderRoot.querySelectorAll(".evd-chunk:not([data-watched])")){t.dataset.watched="";let r=Number(t.dataset.chunk),n=this._chunks[r];t.textContent=`${this._lines.slice(n.start,n.end).join(`
|
|
196
|
+
`)}
|
|
197
|
+
`,dc(t,o=>{o&&(Uo(t),this._paint(t,r))})}}disconnectedCallback(){for(let t of this.renderRoot.querySelectorAll(".evd-chunk[data-watched]"))Uo(t);clearTimeout(this._copiedTimer),super.disconnectedCallback()}_onCopy=async()=>{let t="done";try{await navigator.clipboard.writeText(this.markdown)}catch{t="failed"}this.isConnected&&(this._copied=t,clearTimeout(this._copiedTimer),this._copiedTimer=setTimeout(()=>{this._copied="",this._copiedTimer=null},1500))};async _paint(t,r){let n=this._chunks[r];if(!n||n.asked)return;n.asked=!0;let o=w7(this._lines,n.start),i=[...o?this._lines.slice(o[0],o[1]):[],...this._lines.slice(n.start,n.end)].join(`
|
|
198
|
+
`),s=await jr(i,"markdown");if(!this.isConnected)return;let a=s===null?null:dE(s).slice(o?o[1]-o[0]:0);t.innerHTML=BW(this._lines,n.start,n.end,a?.length===n.end-n.start?a:null),t.classList.remove("evd-pending")}};customElements.define("export-view-dialog",T$);function $7(e){return new Promise(t=>{let r=document.createElement("export-view-dialog");r.markdown=e;let n=()=>{r.remove(),t()};r.addEventListener("resolve",n),r.addEventListener("modal-conflict",n),document.body.append(r)})}T();U();he();pe();gu();var _7=`dialog{max-width:560px;width:min(94vw,560px)}header h3{margin:0 0 .4rem}.finding{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.35rem}.loc{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.76rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.desc{font-size:.78rem;color:var(--muted);margin:0 0 .7rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.input-row{display:flex;align-items:stretch;gap:.4rem}input{flex:1;min-width:0;padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg, var(--surface));color:var(--text);font:inherit;font-size:.88rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;&:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(from var(--accent) r g b / .18)}&::placeholder{color:var(--muted);font-family:inherit}}.open{display:inline-flex;align-items:center;padding:0 .7rem;border:1px solid var(--accent);border-radius:var(--ui-radius, 6px);color:var(--accent);text-decoration:none;font-size:.8rem;font-weight:600;white-space:nowrap;&:hover{background:rgb(from var(--accent) r g b / .1)}}.hint{margin:.45rem 0 0;color:var(--muted);font-size:.74rem}
|
|
199
|
+
`;$o();var L$=class extends D{static styles=[...D.styles,F($i),F(_7)];static properties={initial:{attribute:!1},finding:{attribute:!1},canApplyToGroup:{attribute:!1},_value:{state:!0}};constructor(){super(),this.initial="",this.finding=null,this.canApplyToGroup=!1,this._value=""}beforeOpen(){this._value=this.initial??""}focusInitial(){let t=this.renderRoot.querySelector('input[type="url"]');if(t){t.focus();try{t.select()}catch{}}}_onInput=t=>{this._value=t.target.value};get _trimmed(){return(this._value??"").trim()}_onSave=()=>{let t=(this.initial??"").trim();if(this._trimmed===t){this._finish(null);return}this._finish({value:this._trimmed,scope:"finding"})};_onApplyToGroup=()=>{this._trimmed&&this._finish({value:this._trimmed,scope:"group"})};_onClear=()=>this._finish({value:"",scope:"finding"});_onCancel=()=>this._finish(null);_onKeydown=t=>{t.key==="Enter"&&(t.preventDefault(),this._onSave())};render(){let t=this.finding??{},r=t.file?t.line?`${t.file}:${t.line}`:t.file:"",n=(this.initial??"").length>0,o=this._trimmed,i=Pe(o);return d`<dialog @close="${this._onClose}"><header><h3>${n?"Edit fix link":"Add fix link"}</h3><div class="finding">${_i(ue(t,l.severityMode))} ${r?d`<span class="loc" title="${r}">${r}</span>`:m}</div>${t.description?d`<div class="desc" title="${t.description}">${t.description}</div>`:m}</header><div class="input-row"><input type="url" inputmode="url" autocomplete="off" spellcheck="false" placeholder="https://github.com/owner/repo/pull/123" .value="${this._value}" @input="${this._onInput}" @keydown="${this._onKeydown}"> ${i?d`<a class="open" href="${o}" target="_blank" rel="noopener noreferrer">Open ↗</a>`:m}</div><p class="hint">PR URL, issue link, commit, or any free-form reference. Enter to save, Esc to cancel.</p><footer class="nwd-actions">${n?d`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:m} <span class="nwd-spacer"></span> ${this.canApplyToGroup?d`<button type="button" class="quiet" ?disabled="${!o}" @click="${this._onApplyToGroup}">Apply to whole group</button> <span class="nwd-spacer"></span>`:m} <button type="button" @click="${this._onCancel}">Cancel</button> <button type="button" class="primary" @click="${this._onSave}">Save</button></footer></dialog>`}};customElements.define("fix-link-dialog",L$);function S7({initial:e="",finding:t=null,canApplyToGroup:r=!1}={}){return le("fix-link-dialog",{initial:e,finding:t,canApplyToGroup:r})}T();Je();pe();$o();un();he();Tw();gu();cp();var C7=`dialog{width:min(94vw,880px);max-width:880px}.conflicts-list{list-style:none;display:flex;flex-direction:column;gap:.6rem;max-height:65vh;overflow-y:auto;overscroll-behavior:contain}.conflict-card{padding:.6rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px)}.finding-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;color:var(--muted);font-size:.72rem}.location,code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow-wrap:anywhere}.location{flex:1}h4{margin:.4rem 0 .55rem;font-size:.88rem;font-weight:600;overflow-wrap:anywhere}dt{margin-top:.5rem;color:var(--muted);font-size:.72rem}.variant{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,15rem);gap:.65rem;padding:.4rem 0;font-size:.8rem;+&{border-top:1px solid var(--border)}}.value{white-space:pre-wrap;overflow-wrap:anywhere}.reports{display:flex;flex-wrap:wrap;place-content:start flex-end;gap:.3rem}.report-button{display:inline-flex;align-items:center;gap:.4rem;max-width:100%;min-height:22px;padding:0 .4rem 0 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);overflow:hidden;background:var(--bg);color:var(--text);font:inherit;font-size:.72rem;cursor:default;text-align:left;>span:last-child{min-width:0;overflow-wrap:anywhere}&:hover{border-color:var(--accent)}}
|
|
200
|
+
`;var PW={revalidate:"Outcome",revalidateVerdict:"Explanation",revalidateRecommendation:"Recommendation"},F$=class extends D{static styles=[...D.styles,F($i),F(Gi),F(C7)];static properties={conflicts:{attribute:!1}};constructor(){super(),this.conflicts=[]}render(){return d`<dialog aria-labelledby="revalidation-conflicts-title" @close="${this._onClose}"><header><h3 id="revalidation-conflicts-title">Revalidation conflicts</h3><p class="nwd-intro">Reports disagree about ${this.conflicts.length} finding${this.conflicts.length===1?"":"s"}. App view is unavailable until the conflicting reports are separated or updated.</p></header><ul class="conflicts-list">${this.conflicts.map(({finding:t,copies:r})=>d`<li class="conflict-card"><div class="finding-meta">${_i(t.severity)} ${t.file?d`<span class="location">${t.file}${Bt(t.line)?`:${Xh(Bt(t.line))}`:""}</span>`:m} <code>${Xs(t.id)??t.id}</code></div><h4>${Ge(t)}</h4><dl>${z4(r).map(({field:n,variants:o})=>d`<dt>${PW[n]??n}</dt>${o.map(({value:i,reports:s})=>d`<dd class="variant"><div class="value">${i||d`<em>Empty</em>`}</div><div class="reports">${s.map(a=>a?d`<button type="button" class="report-button" aria-label="${`Open ${Ae(a)} at this finding`}" @click="${()=>this._finish({id:t.id,reportName:a})}">${V(nt[ot(a)]??nt.default)}<span>${Ae(a)}</span></button>`:d`<span>Loaded report</span>`)}</div></dd>`)}`)}</dl></li>`)}</ul><footer class="nwd-actions"><span class="nwd-spacer"></span><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}};customElements.define("revalidation-conflicts-dialog",F$);function E7(e){return le("revalidation-conflicts-dialog",{conflicts:[...e.values()]})}Bi();Rg();cm();U();var M7=2;function R7(e,t){l.focusSplit=t,e.closest(".focus-main")?.style.setProperty("--focus-split",String(t)),e.setAttribute("aria-valuenow",String(Math.round(t)))}function A7(){try{localStorage.setItem(rf,String(l.focusSplit))}catch{}}function I7(e,t){R7(e,Yc(t)),A7()}function T7(e,t){I7(e,l.focusSplit+t)}function L7(e){I7(e,qc)}function F7(e,t){let r=e.closest(".focus-main");if(!r)return;t.preventDefault(),e.classList.add("dragging");try{e.setPointerCapture(t.pointerId)}catch{}let n=i=>{let s=r.getBoundingClientRect();s.width!==0&&R7(e,Yc((i.clientX-s.left)/s.width*100))},o=()=>{e.removeEventListener("pointermove",n),e.removeEventListener("pointerup",o),e.removeEventListener("pointercancel",o),e.classList.remove("dragging"),A7()};e.addEventListener("pointermove",n),e.addEventListener("pointerup",o),e.addEventListener("pointercancel",o)}U();mr();pn();he();ct();ge();function DW(e,t){return sm(Mi(e)).map(r=>t?[Oe(r)]:Kn(r))}var zW={annotation(e){let t=Ce(e),r=Hw(e);return!t&&!r?null:{triage:t?.triage,color:t?.color,comment:t?.comment,fix:t?.fix,flagged:t?.flagged===!0,ignored:r}},location:e=>zr(e,sr(e)),evidence:(e,t,r)=>Jh(e,t,sr(t),r),commit:e=>Zh(e.repo?.github,e.commitHash),report:e=>e._reportName??null};function UW(e,t){let r=new Set(e.map(i=>i.repo??null)),n=r.size===1?[...r][0]:null;if(n)return n;let o=new Set;for(let i of t)for(let s of i)s.repo?.github&&!ir(s.file)&&o.add(s.repo.github);return o.size===1?[...o][0]:o.size===0&&!l.currentWorkspace&&l.repoUrl?l.repoUrl:null}function B$(e){return e.replace(/\.(?:json|md|codex)$/iu,"")}function B7(){return l.currentWorkspace?Q().find(e=>e.id===l.currentWorkspace)??null:null}function HW(e,t){if(t)return t.name;let r=e.map(o=>o.fileName);return r.length===1?B$(r[0]):fu(r).replace(/[-_. ]+$/u,"")||`${r.length} reports`}function O$({oneSamplePerGroup:e=!1}={}){let t=l.reports,r=Gn(),n=R$(),o=DW(n,e),i=B7(),s=t.flatMap(u=>u.groups??[]),a=s.some(u=>u.some(wr)),c=s.some(u=>u.some(W3));return Lv({title:HW(t,i),workspace:i?.name??null,reports:t.map(u=>({name:u.fileName,source:u.source})),repo:UW(t,o),generatedAt:new Date,view:{bucket:A$(),severityMode:a?l.severityMode:null,revalidation:c?l.showRevalidation:null,revalidationDetail:c&&l.showRevalidation!==!1?Co():null},filters:M$(r),counts:{included:o.length,total:n.length},groups:o},zW)}function jW(){let e=B7(),t=l.reports.map(n=>n.fileName),r="";return e?r=e.name:t.length===1?r=B$(t[0]):t.length>1&&(r=B$(fu(t))),r=r.replaceAll(/[\\/:*?"<>|\p{Cc}]/gu,"-").trim(),`${r||"deepview-report"}.md`}function O7(e){if(l.reports.length===0)return;let t=new Blob([O$(e)],{type:"text/markdown;charset=utf-8"});lo(t,jW())}tx();Gr();Io();Qn();Di();Hu();ko();kl();function P$(e){return!C()||!Fe.active||!l.currentManagedTeam?null:Fe.navigate(wt({view:e,teamId:l.currentManagedTeam,reportId:l.currentManagedReport},l.managedTeams))}var V$=!1;oy(()=>{if(V$)return;V$=!0;let e=2;function t(){--e===0&&KW()}requestAnimationFrame(t),setTimeout(t,350)});function KW(){V$=!1,l.findingIndexTick++,l.currentView==="bundles"&&l.selectedBundle?E():l.currentView==="packages"?E():l.currentView==="repositories"?E():l.currentView==="links"?E():(l.currentView==="findings"||l.currentView==="files")&&(Y().catch(()=>{}),E())}var D$=!1;fy(()=>{l.currentView!=="findings"&&l.currentView!=="files"&&!Cr()||D$||(D$=!0,queueMicrotask(()=>{D$=!1,!(l.currentView!=="findings"&&l.currentView!=="files"&&!Cr())&&(l.bundleHashTick++,E())}))});Ns(()=>{l.linksTick++,E()});function H7(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?gg():Mx()}function Gg(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?bg():Rx()}function Kg(){let e=document.querySelector(".bundle-source-code-wrap"),t=e?.scrollTop??0,r=e?.scrollLeft??0;E();let n=document.querySelector(".bundle-source-code-wrap");n&&(n.scrollTop=t,n.scrollLeft=r)}function va(e){let r=document.querySelector(e)?.scrollTop??0;E();let n=document.querySelector(e);n&&(n.scrollTop=r)}function Ho(){l.viewMode==="table"?va(".findings-table-list"):E()}var z$=0;function j7(){z$||(z$=requestAnimationFrame(()=>{z$=0,E()}))}function ie(e,t){for(let r of e.composedPath())if(r?.matches?.(t))return r;return null}function U$(e,t){queueMicrotask(()=>{let r=document.querySelector(`.bundle-source-lineno-row[data-line="${e}"]`);r&&r.scrollIntoView(t)})}function Y7(e){e.classList.add("copied"),setTimeout(()=>e.classList.remove("copied"),1e3)}function jg(e,t){try{navigator.clipboard.writeText(t).then(()=>(Y7(e),null)).catch(()=>{})}catch{}}function X7(e){let t=Jl(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile);l.bundleCodeHistory=TR(t,e),l.bundleSourceFile=e}function V7(e=!1){queueMicrotask(()=>{let t=document.querySelector(".bundle-source-code-wrap");t&&(t.scrollTop=0,t.scrollLeft=0),e&&t?.querySelector(".bundle-source-code")?.focus({preventScroll:!0})})}function J7(e){let t=e.target.closest("[data-bundle-code-history]");if(t){let o=Jl(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile),i=LR(o,t.dataset.bundleCodeHistory==="back"?-1:1),s=i.files[i.at];return i.at===o.at||!dt(l.bundleDetails).has(s)||(l.bundleCodeHistory=i,l.bundleSourceFile=s,l.bundleSourceFindingIdx=null,l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery="",va(".bundle-code-rail-body"),Vi(),V7()),!0}let r=e.target.closest("[data-bundle-source-link]");if(r){let o=r.dataset.bundleSourceLink,i=r.closest(".focus-pane-code");if(i){let s=gp(e),a=dM(s,i.dataset.focusCodeIntegrity,i.dataset.focusCodeFile,o);return a&&(q$(s,a),queueMicrotask(()=>i.querySelector(".focus-code-source")?.focus({preventScroll:!0}))),!0}return dt(l.bundleDetails).has(o)&&(l.currentView==="bundles"&&l.bundleDetailsTab==="search"&&(Dl("code",{preserveSource:!0}),l.selectedBundle&&Bo(l.selectedBundle,"code")),X7(o),l.bundleSourceFindingIdx=null,l.bundleDetailsTab==="code"&&(l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery=""),va(".bundle-code-rail-body"),Vi(),V7(!0)),!0}if(e.target.classList?.contains("bundle-source-overlay")||e.target.closest('[data-action="bundle-source-close"]'))return l.bundleSourceFile&&(Dl(l.bundleDetailsTab),E()),!0;if(e.target.closest('[data-action="bundle-source-panel-close"]'))return l.bundleSourceFindingIdx!=null&&(l.bundleSourceFindingIdx=null,Kg()),!0;let n=e.target.closest("[data-bundle-source-finding]");if(n){let o=parseInt(n.dataset.bundleSourceFinding,10);return Number.isFinite(o)&&(l.bundleSourceFindingIdx=l.bundleSourceFindingIdx===o?null:o,Kg()),!0}return!1}function W7(e){let t=gp(e);if(!t)return null;let r=Oe(t);return u4(r,um(r))}N.addEventListener("click",e=>{if(ie(e,"[data-finding-history]")){let I=gp(e),H=I&&Oe(I);Vs(H)&&D6(H);return}let t=ie(e,"[data-code-nav-file]");if(t){q$(gp(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Bt(t.dataset.codeNavLine)});return}let r=ie(e,"[data-code-history]");if(r){YW(r.dataset.codeHistory==="forward"?1:-1);return}let n=ie(e,"[data-code-preview]");if(n){let I=n.dataset.codePreview,H=new Set(l.codePreviews);H.delete(I)||H.add(I),l.codePreviews=H,E();return}let o=ie(e,"[data-finding-code-report]");if(o&&C()){u7({reportId:o.dataset.findingCodeReport,file:o.dataset.findingCodeFile,line:o.dataset.findingCodeLine});return}let i=ie(e,"[data-finding-code-bundle]");if(i){let I=i.dataset.findingCodeBundle,H=i.dataset.findingCodeFile,G=i.dataset.findingCodeLine,K=G?parseInt(G,10):null;l.bundleSourceFile=H||null,l.bundleCodeHistory=null,l.bundleSourceFindingIdx=null,(l.bundleDetailsTab==="code"||l.bundleDetailsTab==="search")&&(l.bundleDetailsTab="overview");let Ee=()=>{Number.isFinite(K)&&U$(K,{block:"start",behavior:"instant"})};if(l.selectedBundle===I&&l.bundleDetails?.integrity===I){E(),ra().then(()=>(l.selectedBundle===I&&l.bundleSourceFile===H&&Ee(),null));return}l.selectedBundle=I,l.selectedBundleWorkspace=null,l.bundleDetails=null,E(),(async()=>(await Ao(I),Ee()))();return}let s=e.target.closest("[data-package-expand]");if(s){let I=s.dataset.packageExpand;l.expandedPackages.has(I)?l.expandedPackages.delete(I):l.expandedPackages.add(I),E();return}let a=e.target.closest("[data-package-row-issues]");if(a){let I=a.dataset.packageRowIssues,H=a.dataset.packageRowIssuesVersion;l.selectedPackage=I,l.selectedPackageVersion=H||null,l.packageDetailsTab="issues",l.packageSlideTriage=null,l.packageSlideTransient=!0,E();return}let c=e.target.closest("[data-repository-row-issues]");if(c){let I=c.dataset.repositoryRowIssues;l.selectedRepository=I,l.repositoryDetailsTab="issues",l.repositorySlideTriage=null,l.repositorySlideTransient=!0,E();return}let u=e.target.closest("[data-select-package]");if(u){let I=u.dataset.selectPackage,H=u.dataset.selectPackageVersion??"",G=H===""?null:H;if(l.selectedPackage===I&&l.selectedPackageVersion===G)return;l.selectedPackage=I,l.selectedPackageVersion=G,l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient=!1,E();return}if(e.target.closest("[data-deselect-package]")){l.selectedPackage=null,l.selectedPackageVersion=null,E();return}let p=e.target.closest("[data-package-tab]");if(p){let I=p.dataset.packageTab;(I==="overview"||I==="issues")&&l.packageDetailsTab!==I&&(l.packageDetailsTab=I,E());return}if(e.target.closest('[data-action="package-slide-back"]')){l.packageDetailsTab="overview",l.packageSlideTriage=null,l.packageSlideTransient&&(l.selectedPackage=null,l.selectedPackageVersion=null,l.packageSlideTransient=!1),E();return}let f=ie(e,"[data-links-report][data-links-finding]");if(f){e.preventDefault();let{linksReport:I,linksFinding:H,managedReport:G}=f.dataset;I&&H&&(async()=>{let K=await Mg(H,I,G);K.ok||alert(K.reason)})().catch(K=>console.warn("links: reveal in report failed:",K));return}let h=e.target.closest("[data-package-report]");if(h){let I=h.dataset.packageReport;I&&ur(I);return}let g=e.target.closest("[data-select-repository]");if(g){let I=g.dataset.selectRepository;if(l.selectedRepository===I)return;l.selectedRepository=I,l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient=!1,E();return}if(e.target.closest("[data-deselect-repository]")){l.selectedRepository=null,E();return}let b=e.target.closest("[data-repository-tab]");if(b){let I=b.dataset.repositoryTab;(I==="overview"||I==="issues")&&l.repositoryDetailsTab!==I&&(l.repositoryDetailsTab=I,E());return}if(e.target.closest('[data-action="repository-slide-back"]')){l.repositoryDetailsTab="overview",l.repositorySlideTriage=null,l.repositorySlideTransient&&(l.selectedRepository=null,l.repositorySlideTransient=!1),E();return}let v=e.target.closest("[data-bundle-tab]");if(v){let I=v.dataset.bundleTab;if(Mn.has(I)){if(I===l.bundleDetailsTab){l.selectedBundle&&Bo(l.selectedBundle,I);return}l.bundleDetailsTab==="graph"&&I!=="graph"&&(Ze(),document.body.classList.remove("report-fullscreen")),Dl(I),l.selectedBundle&&Bo(l.selectedBundle,I),E(),I==="code"&&ra().then(()=>(l.bundleDetailsTab==="code"&&Vi(),null))}return}if(e.target.closest("[data-bundle-retry-sources]")){l.bundleDetails&&delete l.bundleDetails.sourceError,E();return}let x=e.target.closest("[data-bundle-download]");if(x){let I=x.dataset.bundleDownload,H=(l.bundles??[]).find(G=>G.integrity===I);if(!H)return;(async()=>{let{confirmed:G}=await p7({name:H.name,encrypted:me()});if(G)try{let K=await an(I);lo(new Blob([K],{type:"application/octet-stream"}),H.name)}catch(K){alert(`Failed to download bundle: ${K.message}`)}})();return}let w=e.target.closest("[data-bundle-export-sbom]");if(w){let I=w.dataset.bundleExportSbom,H=l.bundleDetails,G=(l.bundles??[]).find(K=>K.integrity===l.selectedBundle);if(!G||!H||H.integrity!==G.integrity)return;try{let K=I==="cyclonedx",Ee=K?wI(H,G):kI(H,G),ut=`${pg(G.name)}.${K?"cdx":"spdx"}.json`;lo(new Blob([Ee],{type:"application/json"}),ut)}catch(K){alert(`Failed to export ${I==="cyclonedx"?"CycloneDX":"SPDX"}: ${K.message}`)}return}if(ie(e,"[data-bundle-search-context]")){l.bundleSearchContext=!l.bundleSearchContext,va(".bundle-search-results");return}if(e.target.closest("[data-advisories-consent]")){EI(),E();return}if(e.target.closest("[data-advisories-retry]")){II(l.bundleDetails,E).catch(()=>{}),E();return}let $=e.target.closest("[data-bundle-issue-report]");if($){let I=$.dataset.bundleIssueReport;I&&ur(I);return}if(J7(e))return;let _=e.target.closest("[data-bundle-code-issue-step]");if(_){let I=_.closest("[data-bundle-code-issue-order]"),H=null;try{H=JSON.parse(I?.dataset.bundleCodeIssueOrder??"null")}catch{}if(Array.isArray(H)&&H.length>0){let G=_.dataset.bundleCodeIssueStep==="-1"?-1:1,K=H.findIndex(ut=>ut.idx===l.bundleSourceFindingIdx),Ee=K===-1?G>0?H[0]:H.at(-1):H[(K+G+H.length)%H.length];l.bundleSourceFindingIdx=Ee.idx,Kg(),Ee.line>0&&U$(Ee.line,{block:"center",behavior:"smooth"})}return}let S=ie(e,"[data-bundle-view-source]");if(S){let I=S.dataset.bundleViewSource;if(!I)return;let H=S.dataset.bundleViewFindingIdx,G=H===void 0?null:parseInt(H,10),K=S.dataset.bundleViewLine,Ee=K?parseInt(K,10):null,ut=l.bundleSourceFile!==I;if(X7(I),Number.isFinite(G)?l.bundleSourceFindingIdx=G:ut&&(l.bundleSourceFindingIdx=null),S.closest(".bundle-code-rail")?va(".bundle-code-rail-body"):S.closest(".bundle-search-results")?va(".bundle-search-results"):S.closest(".bundles-slide-body")?va(".bundles-slide-body"):E(),Number.isFinite(Ee)){let hr=S.dataset.bundleViewScrollBlock||"center";ra().then(()=>(l.bundleSourceFile===I&&U$(Ee,{block:hr,behavior:"smooth"}),null))}return}if(e.target.closest('[data-action="toggle-files"]')){if(P$(l.currentView==="files"?"findings":"files"))return;l.currentView==="files"?l.currentView="findings":(l.viewMode==="graph"&&Ze(),l.currentView="files"),document.body.classList.remove("report-fullscreen"),E();return}let R=ie(e,"[data-g2-pkg]");if(R){let I=R.dataset.g2Pkg;B.solo=B.solo===I?null:I,B.solo&&(B.selected=null),H7(),Gg(),B.graphState?.requestDraw?.();return}let P=ie(e,"[data-g2-select]");if(P){B.selected=P.dataset.g2Select,H7(),B.graphState?.requestDraw?.();return}let L=ie(e,"[data-g2-top-pkgs]");if(L){B.topPkgsTab=L.dataset.g2TopPkgs,Gg();return}let A=ie(e,"[data-g2-jump-findings]");if(A){if(l.currentView==="bundles"){l.bundleDetailsTab==="graph"&&Ze(),Dl("issues"),l.selectedBundle&&Bo(l.selectedBundle,"issues"),E();return}if(Tl(),l.filterConfMin=0,l.filterInclude=A.dataset.g2JumpFindings,l.currentView="findings",l.viewMode==="graph"&&(l.viewMode="table"),Ze(),P$("findings"))return;E();return}let W=ie(e,"[data-g2-jump-file]");if(W){let I=W.dataset.g2JumpFile;Ze();let H=()=>requestAnimationFrame(()=>{let K=document.querySelector(`#${Uu(I)}`);K&&K.scrollIntoView({behavior:"smooth",block:"start"})}),G=P$("files");if(G){G.then(K=>K?H():void 0);return}l.currentView="files",E(),H();return}if(ie(e,"#g2-path-filter-clear")){B.pathFilter="";let I=document.querySelector("graph-layout")?.shadowRoot?.querySelector("#g2-path-filter");I&&(I.value=""),B.graphState?.requestDraw?.();return}if(ie(e,"#g2-fullscreen")){document.body.classList.toggle("report-fullscreen");return}if(ie(e,"[data-g2-show-all]")){B.showAll=!B.showAll,B.layoutCache=null,B.selected=null,Ze(),E();return}if(ie(e,"[data-g2-split-own]")){B.splitOwnDirs=!B.splitOwnDirs,B.layoutCache=null,B.solo=null,B.focusedPkg=null,(B.packagesView||B.bundleLayout==="layers")&&(B.selected=null),Ze(),E();return}if(ie(e,"[data-g2-packages-view]")){B.bundleLayout==="dependencies"?(B.dependencyPackagesView=!B.dependencyPackagesView,B.solo=null):B.packagesView=!B.packagesView,B.layoutCache=null,B.selected=null,B.focusedPkg=null,Ze(),E();return}let wn=ie(e,"[data-g2-layout]");if(wn){let I=wn.dataset.g2Layout;if(I!=="graph"&&I!=="layers"&&I!=="matrix"&&I!=="dependencies"||B.bundleLayout===I&&!B.focusedPkg)return;B.bundleLayout=I,I==="dependencies"&&(B.dependencyPackagesView=!1),B.layoutCache=null,B.selected=null,B.solo=null,B.focusedPkg=null,Ze(),E();return}let qe=ie(e,".graph2-triage-selector [data-triage-show]");if(qe){let I=qe.dataset.triageShow;l.shownTriage=l.shownTriage===I?null:I,B.layoutCache=null,B.selected=null,Ze(),E();return}let fr=ie(e,"[data-g2-focus-pkg]");if(fr){B.focusedPkg=fr.dataset.g2FocusPkg,B.layoutCache=null,Ze(),E();return}if(ie(e,"#g2-back-to-full")){B.focusedPkg=null,B.layoutCache=null,(B.packagesView||B.bundleLayout==="layers")&&(B.selected=null),Ze(),E();return}let Qi=ie(e,".tab");if(Qi&&ie(e,".tabs")){let H=ie(e,"[data-gid]").dataset.gid,G=Qi.dataset.tid;l.activeTabByGroup.set(H,G),Ho();return}let Ko=ie(e,"[data-triage-action]");if(Ko){let I=Ko.closest(".triage-menu"),H=I?.dataset.gid;if(!H)return;let G=ar(H);if(!G)return;let K=Ko.dataset.triageAction;if(!["inprogress","fixed","invalid","deleted","ignored","restore"].includes(K))return;let{targets:Ee,clearing:ut}=X4(G,K);if(Ee.length===0)return;Z7(Ee,ut?"untriaged":K);try{I.hidePopover()}catch{}_e(),Ho();return}if(ie(e,".mark-comment")){let H=ie(e,"[data-gid]").dataset.gid,G=ar(H);if(!G)return;let K=Oe(G);if(!Ue(K))return;if(C()){Promise.resolve().then(()=>(U7(),z7)).then(({openManagedCommentsDialog:hr})=>hr(K,Ho)).catch(()=>St("Could not open comments. Please retry."));return}let Ee=q(K),ut=Ce(K)?.comment??"";c7({initial:ut,finding:K}).then(hr=>(hr===null||!Ue(K)||(ee(l.triage,Ee,{comment:hr||void 0}),_e(),Ho()),null)).catch(()=>{});return}let $c=ie(e,".mark-copy");if($c){let I=W7(e);if(I===null)return;jg($c,I);return}let kp=ie(e,".mark-link");if(kp){let I=ie(e,"[data-gid]"),H=I?ar(I.dataset.gid):null;if(!H)return;let G=Hl(Oe(H));if(!G)return;jg(kp,G);return}let _c=ie(e,"[data-copy-report]");if(_c){jg(_c,_c.dataset.copyReport);return}let _a=ie(e,"[data-copy-path]");if(_a){jg(_a,_a.dataset.copyPath);return}let Sc=ie(e,".mark-issue");if(Sc&&C()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam){let I=ie(e,"[data-gid]"),H=I?ar(I.dataset.gid):null,G=H?Oe(H):null;if(G?._managedReportId&&G.id){e.preventDefault();let K=new URL(Sc.dataset.issueForm);P6({teamId:l.currentManagedTeam,session:{...l.managedSession},context:{reportId:G._managedReportId,findingId:G.id,repository:K.pathname.split("/").slice(1,3).join("/")},formUrl:K.href,title:K.searchParams.get("title")??"",body:K.searchParams.get("body")??"",finding:G,draftOptions:{sourceUrl:zr(G,sr(G)),evidence:hu(G),showRevalidation:du()},renderBody:lr}).catch(()=>St("Could not open issue creation. Please retry."));return}}let Cc=ie(e,".mark-claude");if(Cc){let I=W7(e);if(I===null)return;let H=`claude://code/new?q=${encodeURIComponent(`Confirm and fix:
|
|
201
|
+
|
|
202
|
+
${I}`)}`;try{window.location.href=H,Y7(Cc)}catch{}return}if(ie(e,".mark-fix")){let H=ie(e,"[data-gid]")?.dataset.gid,G=H?ar(H):null;if(!G)return;let K=Oe(G);if(!Ue(K))return;let Ee=Q4(G),ut=Ce(K)?.fix??"";S7({initial:ut,finding:K,canApplyToGroup:Y4(Ee,ut)}).then(hr=>{if(hr===null||!Ue(K))return null;let Ea=hr.scope==="group"?Ee.filter(es=>Ue(es)&&(es===K||jw(es,ut))):[K],Ec=!1;for(let es of Ea)ee(l.triage,q(es),{fix:hr.value||void 0})&&(Ec=!0);return Ec&&(Ea.length>1&&l.activeTabByGroup.set(H,q(K)),Ho(),queueMicrotask(_e)),null}).catch(()=>{});return}let mb=ie(e,"[data-flag-toggle]");if(mb){let I=mb.dataset.flagToggle,H=ie(e,"[data-gid]")?.dataset.gid,G=(H?ar(H):null)?.find(Ee=>q(Ee)===I);if(!G||!Ue(G))return;let K=Ce(G)?.flagged;ee(l.triage,I,{flagged:K!==!0}),_e(),Ho();return}let Sa=e.target.closest("[data-triage-show]");if(Sa&&!Sa.closest(".graph2-triage-selector")){let I=Sa.dataset.triageShow;l.shownTriage=l.shownTriage===I?null:I,E();return}if(e.target.closest("[data-table-deselect]")){l.tableSelectedGid=null,Ho();return}let Ca=e.target.closest("[data-tree-select]");if(Ca){let I=Ca.dataset.treeSelect;l.filesSelectedFile=l.filesSelectedFile===I?null:I,E();return}e.target.closest("[data-tree-deselect]")&&(l.filesSelectedFile=null,E())});var G7=document.querySelector("#bundle-source-overlay-slot");G7&&G7.addEventListener("click",J7);function qg(e){let t=e?ar(e):null;t&&pm(t)&&queueMicrotask(_e)}N.addEventListener("row-select",e=>{let t=e.detail?.gid;if(!t)return;let r=l.tableSelectedGid!==t;l.tableSelectedGid=r?t:null,r&&qg(t),Ho()});var Yg="application/x-deepview-kanban-gid";function Z7(e,t){for(let r of e){if(!Ue(r))continue;let n=q(r),o=Uw(r);t==="untriaged"?(ee(l.triage,n,{triage:void 0}),_t(l.triage,n,o,!1)):t==="ignored"?(ee(l.triage,n,{triage:void 0}),_t(l.triage,n,o,!0)):(ee(l.triage,n,{triage:t}),_t(l.triage,n,o,!1))}}function W$(){for(let e of N.querySelectorAll(".kanban-card.dragging"))e.classList.remove("dragging");for(let e of N.querySelectorAll(".kanban-column.drag-over"))e.classList.remove("drag-over")}N.addEventListener("dragstart",e=>{let t=e.target.closest?.(".kanban-card[data-kanban-source]");if(!t||!e.dataTransfer)return;let r=t.dataset.gid;if(!r)return;let n=ar(r);if(!n||Ri(n).length===0){e.preventDefault();return}e.dataTransfer.setData(Yg,r),e.dataTransfer.setData("text/plain",r),e.dataTransfer.effectAllowed="move",t.classList.add("dragging")});N.addEventListener("dragend",W$);N.addEventListener("dragover",e=>{if(!e.dataTransfer?.types.includes(Yg))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(t&&(e.preventDefault(),e.dataTransfer.dropEffect="move",!t.classList.contains("drag-over"))){for(let r of N.querySelectorAll(".kanban-column.drag-over"))r!==t&&r.classList.remove("drag-over");t.classList.add("drag-over")}});N.addEventListener("dragleave",e=>{let t=e.target.closest?.(".kanban-column[data-kanban-target]");t&&(t.contains(e.relatedTarget)||t.classList.remove("drag-over"))});N.addEventListener("drop",e=>{if(!e.dataTransfer?.types.includes(Yg))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(!t){W$();return}e.preventDefault();let r=e.dataTransfer.getData(Yg),n=t.dataset.kanbanTarget;if(W$(),!r||!n)return;let o=ar(r);if(!o||(Ke(o).commonTriage??"untriaged")===n)return;let s=Ri(o);s.length!==0&&(Z7(s,n),E(),queueMicrotask(_e))});var H$=!1;function ya(e){return e?N.querySelector(`.kanban-card[data-gid="${CSS.escape(e)}"]`):null}function Vg(e){let t=e??N.querySelector(".kanban-card");if(!t)return;let r=t.getBoundingClientRect();r.width<=0||r.height<=0||(document.documentElement.style.setProperty("--kanban-clip-card-w",`${Math.floor(r.width)}px`),document.documentElement.style.setProperty("--kanban-clip-card-h",`${Math.floor(r.height)}px`),document.documentElement.style.setProperty("--kanban-return-card-bg",getComputedStyle(t).backgroundColor))}function qW(){let e=N.querySelector(".kanban-detail-side [data-kanban-select].active");e&&e.scrollIntoView({block:"nearest",behavior:"instant"})}function j$(e){l.kanbanPopoverGid=e,l.focusCodeStack=[],l.focusCodeAt=0}function K7(){qW(),To()}function wa(e){let t=l.kanbanPopoverGid;if(t===e)return;let r=t===null&&e!==null,n=t!==null&&e===null;if(!document.startViewTransition||!r&&!n){qg(e),j$(e),E(),K7();return}if(H$)return;qg(e),H$=!0;let o=r?"kanban-opening":"kanban-closing";document.documentElement.classList.add(o);let i=u=>{u&&(u.style.viewTransitionName=""),document.documentElement.classList.remove(o),H$=!1};if(r){let u=ya(e);u?(Vg(u),u.style.viewTransitionName="kanban-detail-modal",u.getBoundingClientRect()):Vg(),j$(e);let p=document.startViewTransition(()=>{E(),K7(),u&&(u.style.viewTransitionName="")}),f=setTimeout(()=>i(u),600);(async()=>{try{await p.finished}catch{}clearTimeout(f),i(u)})();return}Vg(),j$(e);let s=null,a=document.startViewTransition(()=>{E(),s=ya(t),s&&(Vg(s),s.style.viewTransitionName="kanban-detail-modal")}),c=setTimeout(()=>i(s??ya(t)),600);(async()=>{try{await a.finished}catch{}clearTimeout(c),i(s??ya(t))})()}function Q7(e){let t=ya(l.kanbanPopoverGid),r=t?.closest(".kanban-column");if(!r)return;let n=[...r.querySelectorAll(".kanban-card[data-kanban-source]")],o=n.indexOf(t);if(o<0)return;let i=Math.min(Math.max(o+e,0),n.length-1);if(i===o)return;let s=n[i].dataset.gid;if(!s)return;wa(s);let a=ya(s);a&&(a.focus({preventScroll:!0}),a.scrollIntoView({block:"nearest",behavior:"instant"}))}var Wg=null;function G$(){lm(),l.focusCodeStack=[],l.focusCodeAt=0,E(),Wg?.isConnected&&Wg.focus({preventScroll:!0}),Wg=null}N.addEventListener("click",e=>{let t=e.target.closest?.("[data-links-preview]");if(t){e.preventDefault(),Wg=t;let s=t.dataset.previewRow,a=j4(t.dataset.linksPreview,t.dataset.previewReport,s===void 0?void 0:Number(s),t.dataset.previewManagedReport);E(),N.querySelector(".kanban-detail-close")?.focus({preventScroll:!0}),a.then(()=>{E(),To();let c=Cr()?.group?.[0]._bundleHashes;if(Array.isArray(c))for(let u of c)k1(u).catch(()=>{});return null});return}if(e.target.closest?.(".kanban-detail-close")){if(Cr()){G$();return}wa(null);return}if(e.target.closest?.("[data-kanban-detail-fullscreen]")){l.kanbanDetailFullscreen=!l.kanbanDetailFullscreen;try{localStorage.setItem(nf,String(l.kanbanDetailFullscreen))}catch{}E(),To();return}let r=e.target.closest?.("[data-kanban-expand]");if(r){let s=r.dataset.kanbanExpand,a=l.kanbanExpandedColumn===s?null:s;l.kanbanExpandedColumn=a,a&&l.kanbanPopoverGid&&ya(l.kanbanPopoverGid)?.closest(".kanban-column")?.dataset.kanbanTarget!==a&&(l.kanbanPopoverGid=null),E();return}let n=e.target.closest?.("[data-kanban-nav]");if(n){Q7(n.dataset.kanbanNav==="next"?1:-1);return}let o=e.target.closest?.("[data-kanban-select]");if(o){if(window.getSelection?.()?.toString())return;let s=o.dataset.gid;s&&wa(s);return}if(e.target.closest?.(".kanban-action"))return;let i=e.target.closest?.(".kanban-card[data-kanban-source]");if(i){if(window.getSelection?.()?.toString())return;let s=i.dataset.gid;if(!s)return;wa(l.kanbanPopoverGid===s?null:s);return}if(!ie(e,".kanban-detail-modal, .kanban-detail-side")){if(Cr()){G$();return}l.kanbanPopoverGid&&wa(null)}});N.addEventListener("change",e=>{let t=e.target.closest?.("[data-kanban-column]");if(!t)return;let r=t.selectedOptions[0]?.dataset.gid;r&&wa(r)});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(Cr()){!e.defaultPrevented&&!nL(e)&&!document.querySelector(":popover-open:not(#styled-tooltip)")&&G$();return}if(l.kanbanPopoverGid){wa(null);return}l.viewMode!=="kanban"||l.kanbanExpandedColumn===null||(l.kanbanExpandedColumn=null,E())}});function gp(e){let r=ie(e,"[data-gid]")?.dataset?.gid;return r?ar(r):null}function q$(e,t){if(!t.integrity||!t.file)return;let r=Ul(e);if(!r)return;let n=nM(r,t);n&&(l.focusCodeStack=n.stack,l.focusCodeAt=n.at,E()),t.range||eL(),To()}function eL(){for(let e of N.querySelectorAll(".focus-code-body"))e.scrollTop=0,e.scrollLeft=0}N.addEventListener("keydown",e=>{if(e.key!=="Enter"&&e.key!==" ")return;let t=ie(e,"[data-code-nav-file]");t&&(e.preventDefault(),q$(gp(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Bt(t.dataset.codeNavLine)}))});function YW(e){let t=oM(l.focusCodeStack,l.focusCodeAt,e);t!==l.focusCodeAt&&(l.focusCodeAt=t,E(),l.focusCodeStack[t]?.range||eL(),To())}function tL(e){if(!e||l.focusGid===e)return;qg(e),l.focusGid=e,l.focusCodeStack=[],l.focusCodeAt=0,E();let t=N.querySelector(".focus-side-card.active");t&&t.scrollIntoView({block:"nearest",behavior:"instant"}),To()}function rL(e){let t=[...N.querySelectorAll(".focus-side-card[data-focus-select]")];if(t.length===0)return;let r=t.findIndex(i=>i.classList.contains("active")),n=r<0?e>0?0:t.length-1:Math.min(Math.max(r+e,0),t.length-1);if(n===r)return;let o=t[n].dataset.gid;o&&tL(o)}N.addEventListener("click",e=>{let t=e.target.closest?.("[data-focus-nav]");if(t){rL(t.dataset.focusNav==="next"?1:-1);return}let r=e.target.closest?.(".focus-side-card[data-focus-select]");if(!r||window.getSelection?.()?.toString())return;let n=r.dataset.gid;n&&tL(n)});N.addEventListener("pointerdown",e=>{if(e.button!==0)return;let t=e.target.closest?.("[data-focus-splitter]");t&&F7(t,e)});N.addEventListener("dblclick",e=>{let t=e.target.closest?.("[data-focus-splitter]");t&&L7(t)});function nL(e){if(document.querySelector("dialog[open]"))return!0;for(let t of e.composedPath()){if(!t||t.nodeType!==1)continue;let r=t.tagName;if(r==="INPUT"||r==="TEXTAREA"||r==="SELECT"||r==="DIALOG"&&t.open||t.isContentEditable)return!0}return!1}document.addEventListener("keydown",e=>{if(l.currentView!=="findings")return;let t=l.viewMode==="focus",r=l.viewMode==="kanban"&&l.kanbanPopoverGid!==null;if(!t&&!r||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||nL(e))return;let n=0;if(e.key==="ArrowRight")n=1;else if(e.key==="ArrowLeft")n=-1;else return;e.preventDefault();let o=e.target?.closest?.("[data-focus-splitter]");if(o){T7(o,n*M7);return}t?rL(n):Q7(n)});N.addEventListener("mark-color",e=>{let t=ie(e,"[data-gid]");if(!t)return;let r=t.dataset.gid,n=ar(r);if(!n)return;let o=Oe(n);if(!Ue(o))return;let i=q(o),s=e.detail?.color;if(!s)return;Ce(o)?.color===s?ee(l.triage,i,{color:void 0}):ee(l.triage,i,{color:s}),_e(),Ho()});var ka=null,K$=null,gc=null,Xg=!1;function oL(){if(ka!==null)return;if(l.reports.length===0){gc=null,Xg=!1;return}ka=l.viewMode,K$=document.title;let e=!1;l.viewMode==="table"&&(l.viewMode="list",e=!0),gc&&(wu(gc),e=!0),e&&E();for(let n of N.querySelectorAll("finding-card"))n.toggleAttribute("print-one-sample",Xg),n.ensureRendered({sync:!0});let t=l.reports.map(n=>n.fileName),r="";t.length===1?r=t[0]:t.length>1&&(r=fu(t)),r=r.replace(/\.json$/u,""),r&&(document.title=r)}function iL(){if(ka===null)return;for(let t of N.querySelectorAll("finding-card"))t.removeAttribute("print-one-sample");Xg=!1;let e=!1;l.viewMode!==ka&&(l.viewMode=ka,e=!0),gc&&(ku(),gc=null,e=!0),e&&E(),document.title=K$,ka=null,K$=null}window.addEventListener("beforeprint",oL);window.addEventListener("afterprint",iL);async function XW(e,{oneSamplePerGroup:t=!1}={}){if(ka===null){gc=e,Xg=t;try{oL(),await Promise.all([...N.querySelectorAll("finding-card")].map(r=>r.ensureRendered())),window.print()}catch(r){throw iL(),r}}}function q7(e,t){if(!e)return t();wu(e);try{return t()}finally{ku()}}document.addEventListener("download-requested",async()=>{if(l.reports.length===0)return;let{confirmed:e,view:t,fields:r,mode:n,oneSamplePerGroup:o}=await b7("download");if(t){await $7(q7(r,()=>O$({oneSamplePerGroup:o})));return}if(e){if(n==="print"){await XW(r,{oneSamplePerGroup:o});return}q7(r,()=>O7({oneSamplePerGroup:o}))}});N.addEventListener("analyzer-change",e=>{l.filterAnalyzer=e.detail.analyzer,l.filterModel=e.detail.model,E()});N.addEventListener("repo-change",e=>{l.filterRepo=e.detail.value,E()});N.addEventListener("revalidate-change",e=>{l.filterRevalidate=e.detail.value,E()});N.addEventListener("partial-change",e=>{l.filterPartial=e.detail.value,E()});N.addEventListener("revalidation-change",e=>{l.showRevalidation=e.detail.on,!e.detail.on&&l.reports.some(r=>(r.groups??[]).some(n=>n.some(o=>!o.isApp&&(o.isUpstream||ir(o.file)))))?St("App mode off is not recommended; it can conflate triage for issues in dependencies.",{kind:"warning"}):e.detail.on&&rw(),xi(l.showRevalidation,l.upstreamOnly),Zs(qn(),{resetSort:!1}),E()});N.addEventListener("revalidation-conflicts-open",()=>{(async()=>{let e=await E7(l.revalidateConflicts);if(!e)return;let t=await Mg(e.id,e.reportName);t.ok||alert(t.reason)})().catch(e=>console.warn("revalidation: open conflicting finding failed:",e))});N.addEventListener("revalidation-detail-change",e=>{l.revalidationDetailed=e.detail.on===!0,E()});N.addEventListener("upstream-only-change",e=>{if(l.upstreamOnly=e.detail.on===!0,xi(l.showRevalidation,l.upstreamOnly),!l.upstreamOnly){let t=qn();Ew(t,om(t))==="confirmed"&&(l.filterRevalidate="confirmed",l.filterPartial="")}E()});N.addEventListener("bundle-search-mode-change",e=>{let t=e.detail?.mode;t!=="files"&&t!=="code"&&t!=="issues"||(l.bundleCodeSearchMode=t,E(),t==="files"&&Vi())});N.addEventListener("bundle-graph-reason-change",e=>{let t=e.detail?.reason;t!==null&&typeof t!="string"||(B.bundleReason=t,B.layoutCache=null,B.selected=null,B.solo=null,B.focusedPkg=null,Ze(),E())});N.addEventListener("bundle-search-regex-toggle",()=>{l.bundleSearchRegex=!l.bundleSearchRegex,E()});N.addEventListener("bundle-search-case-toggle",()=>{l.bundleSearchCase=!l.bundleSearchCase,E()});N.addEventListener("bundle-swap",e=>{let t=e.detail?.integrity;if(!t||!(l.bundles??[]).some(n=>n.integrity===t))return;let r=l.bundles.find(n=>n.integrity===t);if(r.managedId){Fe.navigate(xl(l.managedTeams,r,l.currentManagedTeam,"compare"));return}Ro(t,"compare"),Bo(t,"compare"),E(),Y(),Ao(t)});N.addEventListener("sort-change",e=>{let{kind:t,value:r}=e.detail;if(t==="findings")l.sortBy=r;else if(t==="packages")l.packagesSortBy=r;else if(t==="repositories")l.repositoriesSortBy=r;else return;E()});N.addEventListener("range-change",e=>{e.target.id==="conf-range"&&(l.filterConfMin=e.detail.low,l.filterConfMax=e.detail.high,E())});N.addEventListener("input",e=>{let t=e.composedPath()[0],r=t?.id,n=t?.value;r==="g2-path-filter"&&(B.pathFilter=n,B.graphState?.requestDraw?.())});N.addEventListener("search-input",e=>{if(!e.detail)return;let{kind:t,value:r}=e.detail;if(t==="findings"){l.filterInclude=r,r||(l.filterIncludeNegate=!1),j7();return}else if(t==="files")l.filesSearch=r;else if(t==="packages")l.packagesSearchQuery=r;else if(t==="repositories")l.repositoriesSearchQuery=r;else if(t==="bundle-code")l.bundleCodeSearchQuery=r;else if(t==="bundle-search"){l.bundleSearchQuery=r,j7();return}else return;E()});N.addEventListener("search-negate-toggle",()=>{l.filterIncludeNegate=!l.filterIncludeNegate,E()});N.addEventListener("severity-toggle",e=>{let t=e.detail.severity;if(e.detail.kind==="graph"){B.selectedSeverities.has(t)?B.selectedSeverities.delete(t):B.selectedSeverities.add(t),e.composedPath()[0].selected=[...B.selectedSeverities],B.graphState?.requestDraw?.(),Gg();return}l.filterSeverities.has(t)?l.filterSeverities.delete(t):l.filterSeverities.add(t),E()});N.addEventListener("color-toggle",e=>{let t=e.detail.color;if(e.detail.kind==="graph"){B.selectedColors.has(t)?B.selectedColors.delete(t):B.selectedColors.add(t),e.composedPath()[0].selected=[...B.selectedColors],B.graphState?.requestDraw?.(),Gg();return}l.filterColors.has(t)?l.filterColors.delete(t):l.filterColors.add(t),E()});N.addEventListener("source-toggle",e=>{let t=e.detail.source,r=l.filterSources.has(t);l.filterSources.clear(),r||l.filterSources.add(t),E()});N.addEventListener("annotation-filter-toggle",e=>{let t=e.detail?.key,r=n=>n===""?"with":n==="with"?"without":"";if(t==="comment")l.filterComment=r(l.filterComment);else if(t==="fix")l.filterFix=r(l.filterFix);else if(t==="flag")l.filterFlagged=r(l.filterFlagged);else if(t==="duplicates"&&!l.currentWorkspace)l.filterDuplicates=r(l.filterDuplicates);else if(t==="cross-context")l.filterCrossContext=r(l.filterCrossContext);else if(t==="app-stacked")l.filterAppStacked=r(l.filterAppStacked);else if(t==="security")l.filterSecurity=r(l.filterSecurity);else return;E()});N.addEventListener("slide-triage-toggle",e=>{let{kind:t,value:r}=e.detail;if(t==="package")l.packageSlideTriage=l.packageSlideTriage===r?null:r;else if(t==="repository")l.repositorySlideTriage=l.repositorySlideTriage===r?null:r;else return;E()});N.addEventListener("view-mode-change",e=>{if(e.detail.kind==="files"){l.filesViewMode=e.detail.mode,E();return}l.viewMode=e.detail.mode,l.viewMode!=="kanban"&&(l.kanbanPopoverGid=null),l.viewMode!=="focus"&&(l.focusGid=null),E()});N.addEventListener("severity-mode-change",e=>{let t=e.detail?.mode;if(!(t!=="corrected"&&t!=="original")){l.severityMode=t;try{localStorage.setItem(tf,t)}catch{}E()}});N.addEventListener("repo-edit-start",()=>{C()||(l.repoEditing=!0,E())});N.addEventListener("repo-input",e=>{C()||(l.repoUrl=e.detail.url,rn(l.currentFile,l.repoUrl))});N.addEventListener("repo-commit",e=>{C()||(l.repoUrl=e.detail.url,rn(l.currentFile,l.repoUrl),l.repoEditing=!1,E())});N.addEventListener("repo-cancel",e=>{C()||(l.repoUrl=e.detail.url,rn(l.currentFile,l.repoUrl),l.repoEditing=!1,E())});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(l.bundleSourceFindingIdx!=null){l.bundleSourceFindingIdx=null,Kg();return}if(l.bundleSourceFile){if(l.currentView==="bundles"&&l.bundleDetailsTab==="code")return;Dl(l.bundleDetailsTab),E()}}});T();function st(e,t){for(let[r,n]of Object.entries(t))e.hasAttribute(r)||e.setAttribute(r,n)}var jo=Math.PI*2;function JW(e){return()=>{e=e+1831565813|0;let t=e;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function sL(e,t,r,n){let o=Math.cos(t),i=Math.sin(t);return Math.min(o>0?(r-e.x)/o:o<0?-e.x/o:1/0,i>0?(n-e.y)/i:i<0?-e.y/i:1/0)}function ZW(e){return Math.abs(e.reduce((t,r,n)=>{let o=e[(n+1)%e.length];return t+r.x*o.y-o.x*r.y},0))/2}function Y$(e){return e.slice(1).reduce((t,r,n)=>t+Math.hypot(r.x-e[n].x,r.y-e[n].y),0)}function QW(e,t,r,n){let o=e.map(u=>u.x),i=e.map(u=>u.y),s={x:(Math.min(...o)+Math.max(...o))/2,y:(Math.min(...i)+Math.max(...i))/2},a=Math.max(...e.map(u=>Math.hypot(u.x-s.x,u.y-s.y))),c=Math.atan2(s.y-t.y,s.x-t.x);return{center:s,distance:Math.hypot(s.x-t.x,s.y-t.y),dx:Math.cos(c)*(80+n()*200)+(n()-.5)*90,dy:r-s.y+a+40,rotation:(n()-.5)*160,delay:n()*120}}function aL(e,t,r=7){let n=JW(r),o={x:e*1820/1920,y:t*90/1080},i=Math.hypot(e,t),s=(y,$)=>y<1e-8?0:y>$-1e-8?$:y,a=y=>({x:s(y.x,e),y:s(y.y,t)}),c=Array.from({length:20},(y,$)=>(($+(n()-.5)*.35)*jo/20+jo)%jo);for(let[y,$]of[[0,0],[e,0],[e,t],[0,t]])c.push((Math.atan2($-o.y,y-o.x)+jo)%jo);c.sort((y,$)=>y-$);let p=[.045,.29,.58].map(y=>y*Math.min(e,t)).map(y=>c.map($=>{let _=Math.min(y*(.92+n()*.16),sL(o,$,e,t));return a({x:o.x+Math.cos($)*_,y:o.y+Math.sin($)*_})}));p.push(c.map(y=>{let $=sL(o,y,e,t);return a({x:o.x+Math.cos(y)*$,y:o.y+Math.sin(y)*$})}));let f=p.map((y,$)=>y.map((_,S)=>{let M=y[(S+1)%y.length],R={x:(_.x+M.x)/2,y:(_.y+M.y)/2},P=Math.hypot(M.x-_.x,M.y-_.y),L=_.x===M.x&&(_.x===0||_.x===e)||_.y===M.y&&(_.y===0||_.y===t),A=$===p.length-1||L?0:(n()-.5)*P*.08,W=Math.atan2(R.y-o.y,R.x-o.x);return[_,a({x:R.x+Math.cos(W)*A,y:R.y+Math.sin(W)*A}),M]})),h=p.slice(1).map((y,$)=>y.map((_,S)=>{let M=p[$][S],R=Math.hypot(_.x-M.x,_.y-M.y),P={x:(M.x+_.x)/2,y:(M.y+_.y)/2},L=(c[S]-c[(S+c.length-1)%c.length]+jo)%jo,A=(c[(S+1)%c.length]-c[S]+jo)%jo,W=Math.min(L,A)*Math.hypot(P.x-o.x,P.y-o.y),ce=(n()-.5)*Math.min(R*.12,W*.14);return[M,a({x:P.x-Math.sin(c[S])*ce,y:P.y+Math.cos(c[S])*ce}),_]})),g=[],b=y=>{ZW(y)>.01&&g.push({points:y,...QW(y,o,t,n)})};b(f[0].flatMap(y=>y.slice(0,-1)));for(let y=0;y<p.length-1;y++)for(let $=0;$<c.length;$++){let _=($+1)%c.length;b([...h[y][$],...f[y+1][$].slice(1),...h[y][_].toReversed().slice(1),...f[y][$].toReversed().slice(1)])}let v=Math.max(...g.map(y=>y.distance));for(let y of g)y.delay+=y.distance/v*400;let x=[],w=(y,$,_,S)=>{let M=Y$(y);M>.1&&x.push({points:y,length:M,delay:$,duration:_,width:S})};for(let y=0;y<c.length;y++){let $=[o,p[0][y],...h.flatMap(_=>_[y].slice(1))];w($,0,200+Y$($)/i*1e3,1.1)}for(let y of f.slice(0,-1))for(let $ of y){let _=Math.hypot($[0].x-o.x,$[0].y-o.y);w($,_/i*1e3,220+Y$($)/i*400,.7)}for(let y of p[1]){let $=Math.atan2(y.y-o.y,y.x-o.x)+(n()-.5)*1.4,_=Math.min(e,t)*(.07+n()*.12),S=[y];for(let M=1;M<=3;M++)S.push(a({x:y.x+Math.cos($+(n()-.5)*.3)*_*M/3,y:y.y+Math.sin($+(n()-.5)*.3)*_*M/3}));w(S,Math.hypot(y.x-o.x,y.y-o.y)/i*1e3+80,220,.5)}return{width:e,height:t,impact:o,pieces:g,cracks:x}}var lL=`.screen-crack{position:fixed;inset:0;z-index:2147483646;overflow:hidden;pointer-events:none;user-select:none}.screen-crack-svg{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.screen-crack-glass{position:absolute;inset:0;backdrop-filter:blur(9px) brightness(1.06) saturate(.85);background:linear-gradient(135deg,#dcebff0f,#dcebff00 55%);mask-mode:luminance;opacity:0}.screen-crack-shard{transform-box:fill-box;transform-origin:center}.screen-crack-outline{opacity:0}.screen-crack-flash{position:absolute;width:18vmin;height:18vmin;border-radius:50%;background:radial-gradient(circle,rgb(255 255 255 / .85),rgb(200 230 255 / .15) 55%,transparent 75%);transform:translate(-50%,-50%);opacity:0}@media print{.screen-crack{display:none}}
|
|
203
|
+
`;var tG="http://www.w3.org/2000/svg",X$=1.5,rG=0;function bn(e,t={}){let r=document.createElementNS(tG,e);for(let[n,o]of Object.entries(t))r.setAttribute(n,String(o));return r}function nG(e){let t=document.createElement("div");t.className="screen-crack",t.setAttribute("aria-hidden","true");let r=document.createElement("style");r.textContent=lL;let n=bn("svg",{viewBox:`0 0 ${e.width} ${e.height}`,preserveAspectRatio:"none"});n.classList.add("screen-crack-svg");let o=bn("defs"),i=`screen-crack-mask-${++rG}`,s=bn("mask",{id:i,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse",x:0,y:0,width:e.width,height:e.height});s.append(bn("rect",{width:e.width,height:e.height,fill:"black"})),o.append(s);let a=bn("g"),c=bn("g"),u=e.pieces.map(g=>{let b=g.points.map(y=>`${y.x},${y.y}`).join(" "),v=bn("g"),x=bn("g");v.classList.add("screen-crack-shard"),x.classList.add("screen-crack-shard"),v.append(bn("polygon",{points:b,fill:"white"}));let w=bn("polygon",{points:b,fill:"none",stroke:"rgb(240 248 255 / .8)","stroke-width":1.1,"stroke-linejoin":"round"});return w.classList.add("screen-crack-outline"),x.append(w),s.append(v),c.append(x),{masked:v,outlined:x,outline:w,piece:g}});n.append(o,a,c);let p=document.createElement("div");p.className="screen-crack-glass";let f=`${document.URL.split("#")[0]}#${i}`;p.style.maskImage=`url("${f}")`,p.style.webkitMaskImage=`url("${f}")`;let h=document.createElement("div");return h.className="screen-crack-flash",h.style.left=`${e.impact.x}px`,h.style.top=`${e.impact.y}px`,t.append(r,p,n,h),{overlay:t,glass:p,cracks:a,shards:u,flash:h}}function oG(e,t,r){for(let n of t.cracks){let o=n.points.map((i,s)=>`${s===0?"M":"L"}${i.x} ${i.y}`).join(" ");for(let i of[!0,!1]){let s=bn("path",{d:o,fill:"none",stroke:i?"rgb(0 0 0 / .55)":"rgb(232 244 255 / .95)","stroke-width":n.width+(i?.8:0),"stroke-linecap":"round","stroke-linejoin":"round"});i&&s.setAttribute("transform","translate(.5 .7)"),s.style.strokeDasharray=`${n.length} ${n.length}`,s.style.strokeDashoffset=String(n.length),e.append(s),r(s,[{strokeDashoffset:String(n.length)},{strokeDashoffset:"0"}],{duration:n.duration*X$,delay:n.delay*X$,easing:"cubic-bezier(.2,.7,.2,1)"})}}}function cL(e){let t=window.innerHeight,r=window.innerWidth;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||!r||!t||!Element.prototype.animate)return e(),Promise.resolve();let n=aL(r,t),{overlay:o,glass:i,cracks:s,shards:a,flash:c}=nG(n);document.body.append(o);let u=document.timeline.currentTime,p=[],f=(S,M,R)=>{let P=S.animate(M,{fill:"both",...R});return P.playbackRate=2,P.startTime=u,p.push(P),P},h=!1,g=!1,b=()=>{g||(g=!0,e())},v=()=>{if(!h){h=!0,window.removeEventListener("resize",v),window.removeEventListener("beforeprint",v),document.removeEventListener("visibilitychange",x),o.remove();for(let S of p)S.cancel();b()}},x=()=>{document.hidden&&v()};window.addEventListener("resize",v,{once:!0}),window.addEventListener("beforeprint",v,{once:!0}),document.addEventListener("visibilitychange",x),oG(s,n,f),f(c,[{opacity:0,transform:"translate(-50%, -50%) scale(0)"},{opacity:.85,transform:"translate(-50%, -50%) scale(.8)",offset:.08},{opacity:0,transform:"translate(-50%, -50%) scale(2.4)"}],{duration:600,easing:"ease-out"}),f(s,[{transform:"translate(0, 0)"},{transform:"translate(-3px, 2px)"},{transform:"translate(3px, -2px)"},{transform:"translate(-2px, -2px)"},{transform:"translate(2px, 2px)"},{transform:"translate(0, 0)"}],{duration:450});let w=Math.max(...n.cracks.map(S=>S.delay+S.duration))*X$,y=500,$=Math.max(y,w*.8);f(i,[{opacity:0},{opacity:1}],{duration:y,easing:"ease-out"}),f(c,[{visibility:"visible"},{visibility:"visible"}],{duration:1,delay:$-1}).finished.then(b,()=>{}),f(s,[{opacity:1},{opacity:0}],{duration:450,delay:$,easing:"ease-out"});for(let{masked:S,outlined:M,outline:R,piece:P}of a){let L=$+P.delay,A=[{transform:"translate(0, 0) rotate(0deg)"},{transform:`translate(${P.dx}px, ${P.dy}px) rotate(${P.rotation}deg)`}];for(let W of[S,M])f(W,A,{duration:1700,delay:L,easing:"cubic-bezier(.32,0,.82,.94)"});f(R,[{opacity:0},{opacity:1}],{duration:250,delay:L})}return Promise.all(p.map(S=>S.finished)).then(v,v)}var dL=`:host{position:absolute;top:.5rem;right:.5rem;z-index:1000;width:30px;height:30px;background:var(--theme-toggle-bg, transparent);color:var(--muted);border:var(--theme-toggle-border, 0);border-radius:var(--ui-radius, 6px);font-size:1rem;line-height:1;font-family:inherit;display:flex;align-items:center;justify-content:center;transition:color .12s,background .12s;cursor:default;user-select:none}:host(:hover){color:var(--text);background:var(--theme-toggle-hover-bg, rgb(from var(--text) r g b / .06))}:host(:focus-visible){outline:2px solid var(--accent);outline-offset:2px}@media print{:host{display:none!important}}@media(display-mode:window-controls-overlay){:host{-webkit-app-region:no-drag;app-region:no-drag}}
|
|
204
|
+
`;var Z$="deepview.theme",Zg=Object.freeze(["dark","light","green","pink","paper"]),J$=Object.freeze(["dark","green","pink","paper","light"]),sG={dark:{base:"#1a1a1b",dim:"#0a0a0a"},light:{base:"#f6f6fa",dim:"#646464"},green:{base:"#0a140a",dim:"#050a05",sidebar:"#0f1e0f"},pink:{base:"#ffe4ee",dim:"#a3727f",sidebar:"#ffe0f0"},paper:{base:"#ffffff",dim:"#666666"}},Q$=window.matchMedia?.("(display-mode: window-controls-overlay)"),uL=window.matchMedia?.("(display-mode: standalone)"),pL=window.navigator?.windowControlsOverlay,aG={light:"\u2600",dark:"\u263E",green:"\u{1F576}\uFE0F",pink:"\u273F",paper:"\u{1F4C4}"},e_="deepview-theme-changed",vn="dark",i_=!1,lG=0,t_=!1,Jg=!1,r_=0;function cG(){return t_?J$[(J$.indexOf(vn)+1)%J$.length]:vn==="light"?"dark":"light"}function n_(){window.dispatchEvent(new CustomEvent(e_,{detail:{theme:vn}}))}function dG(){try{let e=localStorage.getItem(Z$);return Zg.includes(e)?e:"dark"}catch{return"dark"}}function Qg(){let e=document.querySelector('meta[name="theme-color"]');if(!e)return;let{base:t,dim:r,sidebar:n}=sG[vn],o=pL?.visible??Q$?.matches??!1,i=(uL?.matches||Q$?.matches)&&!o;e.setAttribute("content",i_?r:i&&n?n:t)}function bc(e){Zg.includes(e)||(e="dark"),vn=e;for(let t of Zg)t!=="dark"&&document.body.classList.remove(`theme-${t}`);e!=="dark"&&document.body.classList.add(`theme-${e}`);try{e==="dark"?localStorage.removeItem(Z$):localStorage.setItem(Z$,e)}catch{}Qg(),n_()}bc(dG());Q$?.addEventListener("change",Qg);uL?.addEventListener("change",Qg);pL?.addEventListener("geometrychange",Qg);window.addEventListener("beforeprint",()=>{i_=!0,bc(vn)});window.addEventListener("afterprint",()=>{i_=!1,bc(vn)});function fL(e){if(!Zg.includes(e))throw new TypeError("unknown theme");r_++,bc(e)}function hL(){return vn}var o_=class extends J{static properties={_theme:{state:!0}};static styles=F(dL);constructor(){super(),this._theme=vn}connectedCallback(){super.connectedCallback(),st(this,{role:"button",tabindex:"0","aria-label":"toggle theme"}),this.addEventListener("click",this._toggle),this.addEventListener("keydown",this._onKeydown),window.addEventListener(e_,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(e_,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=vn,this.setAttribute("aria-disabled",String(Jg))};_toggle=()=>{if(!Jg){if(!t_&&++lG>=8&&vn==="dark"){t_=!0,Jg=!0,n_();let t=r_,r=()=>{r_===t&&bc("green")},n=()=>{Jg=!1,n_()};try{cL(r).catch(r).finally(n)}catch{r(),n()}return}bc(cG())}};_onKeydown=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.repeat||this._toggle())};render(){return d`${aG[this._theme]}`}};customElements.define("theme-toggle",o_);T();Pt();ct();T();Re();xo();dp();ct();oa();var mL=`:host{display:block}.row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:.2rem .85rem;padding:.25rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);transition:background .12s}:host(:last-child) .row{border-bottom:none}.row.row-pending{min-height:3rem}:host(:hover) .row{background:rgb(from var(--text) r g b / .04)}:host(.mark-red) .row{background:var(--mark-red-bg)}:host(.mark-blue) .row{background:var(--mark-blue-bg)}:host(.mark-green) .row{background:var(--mark-green-bg)}:host(.mark-gray) .row{background:var(--mark-gray-bg)}:host(.has-conflict) .row{outline:2px dashed var(--accent);outline-offset:-2px}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}:host(.selected) .row{outline:2px solid var(--accent);outline-offset:-2px}:host(.link-target) .row{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .row{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host(:first-of-type) .row{border-top-left-radius:var(--ui-radius, 6px);border-top-right-radius:var(--ui-radius, 6px)}:host(:last-of-type) .row{border-bottom-left-radius:var(--ui-radius, 6px);border-bottom-right-radius:var(--ui-radius, 6px)}.row-score{grid-column:1;grid-row:1 / 3;align-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;font-variant-numeric:tabular-nums;.badge{min-width:4.4rem;text-align:center}.row-conf{color:var(--muted);font-size:.72rem;user-select:none;& strong{color:var(--text);font-size:.8rem}}}.row-body{display:contents}.title-row{grid-column:2;grid-row:1;min-width:0;display:flex;align-items:baseline;gap:.5rem;.title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;user-select:none}.row-type{color:var(--muted);font-size:.68rem;flex-shrink:0}}.meta-row{grid-column:2;grid-row:2;min-width:0;display:flex;align-items:center;gap:.55rem;.row-loc{color:var(--muted);font-size:.72rem;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;& a{color:inherit;text-decoration:none;cursor:default}& a:hover{color:var(--accent)}}.marks{display:flex;gap:.35rem;align-items:center;min-width:0;margin-left:auto;user-select:none}}.gh-ref-btn{display:inline-flex;align-items:center;position:relative;flex-shrink:0;padding:0 .15rem;color:var(--muted);cursor:default;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.tabs-row{grid-column:2;grid-row:3;min-width:0;.tabs{display:flex;gap:.25rem;flex-wrap:wrap}}.badge,.tabs,.tab,.row-type{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}.line-num{color:var(--muted);font-size:.75rem}.line-num a{color:inherit}.line-num a:hover{color:var(--accent)}@media print{:host(:hover) .row,:host(.mark-red) .row,:host(.mark-blue) .row,:host(.mark-green) .row,:host(.mark-gray) .row{background:transparent!important}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.selected) .row,:host(.has-conflict) .row{outline:none!important}:host(.link-target) .row{animation:none;box-shadow:none!important}.row{break-inside:avoid}.marks{display:none!important}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre{color:#555!important}a,.line-num,.line-num a{color:inherit}}
|
|
205
|
+
`;var eb=`.tab-level-separator{align-self:center;padding-inline:.125rem;color:var(--muted);font-size:.75rem;line-height:1}.tab{--tab-severity: var(--bg);position:relative;display:inline-flex;align-items:center;gap:.35rem;border:1px solid transparent;border-radius:var(--ui-radius, 4px);padding-block:calc(.35rem - .1em);padding-inline:.5rem;min-width:0;font-family:inherit;font-size:.75rem;line-height:1.3;color:var(--text);background:var(--tab-severity);background-image:linear-gradient(135deg,var(--tab-marker, transparent) 50%,var(--tab-marker-shadow, transparent) 50%,transparent 60%);background-size:12px 12px;background-repeat:no-repeat;background-origin:border-box;&.tab-with-confidence{padding-right:1rem;min-width:3.25rem}&.tab-with-analyzer{padding-right:calc(.5rem + 20px)}&.tab-severity-critical{--tab-severity: var(--critical);color:#fff}&.tab-severity-high{--tab-severity: var(--high);color:#fff}&.tab-severity-medium{--tab-severity: var(--medium);color:#000}&.tab-severity-low{--tab-severity: var(--low);color:var(--badge-low-text)}&.tab-severity-high_bug{--tab-severity: var(--high-bug);color:#fff}&.tab-severity-bug{--tab-severity: var(--bug);color:#fff}&.tab-severity-informational{--tab-severity: var(--info);color:#fff}&.tab-mark-red{--tab-marker: var(--marker-red)}&.tab-mark-blue{--tab-marker: var(--marker-blue)}&.tab-mark-green{--tab-marker: var(--marker-green)}&.tab-mark-gray{--tab-marker: var(--marker-gray)}&:is(.tab-mark-red,.tab-mark-blue,.tab-mark-green,.tab-mark-gray){--tab-marker-shadow: rgb(0 0 0 / .3)}&:hover{border-color:var(--muted)}&.active{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.active:before{content:"";position:absolute;z-index:1;top:-1px;left:-1px;width:12px;height:12px;border-top-left-radius:inherit;background:var(--tab-marker, transparent);clip-path:polygon(0 0,100% 0,0 100%);pointer-events:none}&.tab-with-analyzer:is(:hover,.active):after{content:"";position:absolute;inset:-1px;border:1px solid var(--muted);border-radius:inherit;pointer-events:none}&.tab-with-analyzer.active:after{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text)}&.tab-deleted .tab-label{text-decoration:line-through;opacity:.6}&.tab-inprogress .tab-label:after{content:" \\25d0";opacity:.6}&.tab-fixed .tab-label{opacity:.65}&.tab-fixed .tab-label:after{content:" \\2713";opacity:.6}&.tab-invalid .tab-label{opacity:.65}&.tab-invalid .tab-label:after{content:" \\2298";opacity:.6}&.tab-ignored .tab-label{opacity:.55}&.tab-ignored .tab-label:after{content:" \\1f441";opacity:.6;font-size:.7em}.tab-label{display:flex;align-items:center;gap:.35rem;text-align:left}.tab-conf{position:absolute;right:.25rem;bottom:.15rem;font-size:.6rem;line-height:1;color:inherit}.tab-analyzer{position:absolute;inset:-1px -1px -1px auto;width:20px;display:flex;overflow:hidden;border-radius:var(--ui-radius, 0 4px 4px 0);box-shadow:0 0 2px #0003}.tab-analyzer .report-logo{flex:1;border:0}.tab-analyzer svg{display:block}.tab-conf-max{display:none}.tab-severity{display:inline-flex}.badge{padding:0;background:none;color:inherit}.tab-indicators{display:inline-flex;align-items:center;gap:.25rem}.tab-indicators:empty{display:none}.tab-marks{display:inline-flex;align-items:center;gap:.15rem;color:inherit}.tab-marks svg{display:block}.tab-marks :is(.bubble,.wrench,.flag-cloth){fill:currentcolor;fill-opacity:.15}.badge-corr-mark{color:inherit}}
|
|
206
|
+
`;cp();var tb=`.report-button{display:inline-flex;align-items:center;max-width:16rem;padding:0;overflow:hidden;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);color:var(--muted);font:inherit;font-size:.7rem;text-decoration:none;cursor:default;transition:border-color .12s,color .12s;&:hover{border-color:var(--accent);color:var(--accent)}&:focus-visible{outline:2px solid var(--accent);outline-offset:1px}}.report-button-label{min-width:0;padding:.1rem .4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
207
|
+
`;var rb=`a{cursor:default}.finding-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.25rem 1rem;min-width:0;max-width:100%}.finding-action-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem;max-width:100%}.finding-actions .report-chip{flex:0 1 auto;width:max-content;min-width:0;max-width:100%;min-height:1.4rem}.finding-actions .report-chip-label{white-space:normal;overflow-wrap:anywhere;text-align:left}
|
|
208
|
+
`;var mG=["is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","selected"],s_=class extends X{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=[F(Gi),F(tb),F(mL),F(rb),F(eb)];_near=!1;_watching=!1;constructor(){super(),this.group=null,this.selected=!1}render(){if(!this.group)return d``;if(this.dataset.gid=de(this.group),!this._near)return this.classList.toggle("selected",this.selected),d`<div class="row row-pending" aria-busy="true"></div>`;let t=new Set(B1(this.group));this.selected&&t.add("selected");for(let r of mG)this.classList.toggle(r,t.has(r));return d`<div class="row">${EM(this.group)}</div>`}connectedCallback(){super.connectedCallback(),qt(this.renderRoot),this.addEventListener("click",this._onClick),this._watching=!0,dc(this,t=>this._onNear(t))}disconnectedCallback(){this.removeEventListener("click",this._onClick),this._watching&&(Uo(this),this._watching=!1),super.disconnectedCallback()}_onNear(t){t?(this._watching&&(Uo(this),this._watching=!1),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:t=!1}={}){return this._near||this._onNear(!0),t&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}_onClick=t=>{t.composedPath().some(n=>n?.matches?.("a, button, label"))||this.dataset.gid&&this.dispatchEvent(new CustomEvent("row-select",{detail:{gid:this.dataset.gid},bubbles:!0,composed:!0}))}};customElements.define("finding-row",s_);var gL=`:host{display:block;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);overflow:hidden;box-shadow:var(--shadow-glass);margin-bottom:1rem;max-width:1200px}@media not print{finding-row{content-visibility:auto;contain-intrinsic-size:auto 3.2rem}}
|
|
209
|
+
`;var a_=class extends J{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=F(gL);constructor(){super(),this.items=[],this.selectedGid=null}render(){return d`${oe(this.items??[],t=>de(t),t=>d`<finding-row .group="${t}" ?selected="${de(t)===this.selectedGid}"></finding-row>`)}`}};customElements.define("finding-table",a_);T();Re();xo();dp();ct();oa();Am();var bL=`:host{display:block}:host(.hidden){display:none}:host([lazy]:not(.content-ready)){visibility:hidden}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:.75}.card{padding:.5rem .75rem;padding-bottom:var(--finding-card-pad-bottom, .5rem);border-bottom:1px solid var(--border);font-size:.875rem;display:var(--finding-card-display, block);flex-direction:column;flex:1}:host(:last-child) .card{border-bottom:none}.card.card-pending{min-height:8rem}:host(.has-conflict) .card{outline:2px dashed var(--accent);outline-offset:-2px}:host(.has-conflict[popup][context="kanban-detail"]) .card{outline:none}:host(.link-target) .card{animation:link-target-flash 1.6s ease-out}@keyframes link-target-flash{0%,30%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px rgb(from var(--accent) r g b / 0)}}@media(prefers-reduced-motion:reduce){:host(.link-target) .card{animation:none;box-shadow:inset 0 0 0 2px var(--accent)}}:host([in-group]) .line-row{display:none}@media not print{:host([in-group]) .line-row+*{margin-top:0}:host([in-group]) .line-row+:is(.conf-reason,.revalidate-verdict,.severity-reason){padding-top:0;border-top:0}}.tabs{display:flex;gap:.25rem;flex-wrap:wrap}.marks-left{display:flex;align-items:center;gap:.5rem;margin-right:auto;flex-wrap:wrap}.commit-ref{color:var(--muted);font-size:.8rem;& a{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}& a:hover{text-decoration:underline}& span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}}.marks-commit-row{margin-top:.4rem;padding-left:4.75rem}.tab-body{display:none;grid-template-columns:auto 1fr;gap:.25rem .75rem;&.active{display:grid}}.tab-body>:not(.finding-left){min-width:0;overflow-wrap:break-word}.desc-title{grid-column:2;font-size:1.08em;font-weight:600;letter-spacing:-.005em;line-height:1.35;color:var(--text)}.desc{grid-column:2;white-space:pre-wrap;font-size:.96em;line-height:1.6;color:rgb(from var(--text) r g b / .82);margin-top:.4rem}.section,.evidence,.recommendation{grid-column:2;margin-top:.55rem;font-size:.92em}.section-label{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-weight:600;font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;&:before{content:"";flex:none;width:2px;height:.58rem;margin-left:calc((2px + .3rem)*-1);border-radius:1px;background:currentcolor;opacity:.75;-webkit-print-color-adjust:exact;print-color-adjust:exact}}.code-preview-btn{display:inline-flex;align-items:center;margin-left:.35rem;padding:0 .15rem;border:0;background:transparent;color:var(--muted);vertical-align:-2px;&.open{color:var(--accent)}}.gh-ref-btn{display:inline-flex;align-items:center;margin-left:.25rem;padding:0 .15rem;color:var(--muted);vertical-align:-2px}:is(.code-preview-btn,.gh-ref-btn){position:relative;&:before{content:"";position:absolute;inset:-.25rem -2px}&:hover{color:var(--accent)}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}.code-preview-tip{position:absolute;z-index:20;top:100%;left:0;margin-top:.3rem;width:max-content;max-width:min(100%,46rem);visibility:hidden;filter:drop-shadow(0 2px 6px rgb(0 0 0 / .35));background:var(--bg);border-radius:var(--ui-radius, 4px);.code-preview{margin:0}}:is(.line-row,.evidence-list li):has(.code-preview-btn:is(:hover,:focus-visible))>.code-preview-tip{visibility:visible}.code-preview{margin:.3rem 0 .1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);backdrop-filter:var(--glass-blur);max-height:calc(10lh + .7rem);overflow:auto;display:flex;align-items:flex-start;white-space:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;line-height:1.5}.code-preview-pending{display:block;padding:.35rem .5rem;color:var(--muted);font-style:italic}.code-preview-gutter{flex:none;padding:.35rem .45rem .35rem .5rem;border-right:1px solid var(--border);color:var(--muted);text-align:right;user-select:none;position:sticky;left:0;z-index:1;background-color:var(--bg);background-image:linear-gradient(rgb(from var(--text) r g b / .03),rgb(from var(--text) r g b / .03)),linear-gradient(var(--surface),var(--surface));.code-preview-lineno{width:var(--lineno-width, 3ch);opacity:.7}.cited{opacity:1;color:var(--accent);font-weight:600}}.code-preview-source{margin:0;padding:.35rem .6rem;white-space:pre;color:var(--text);font:inherit;& code{font:inherit}}summary.section-label{cursor:default;list-style:none;&::-webkit-details-marker{display:none}&:after{content:"";flex:none;width:.3rem;height:.3rem;margin-left:.05rem;border-right:1.5px solid currentcolor;border-bottom:1.5px solid currentcolor;transform:translateY(-1px) rotate(-45deg);transition:transform .12s;opacity:.8}}details[open]>summary.section-label:after{transform:translateY(-2px) rotate(45deg)}.evidence-count{font-weight:500;opacity:.8}.section-body{white-space:pre-wrap;line-height:1.55;color:rgb(from var(--text) r g b / .82);margin-top:.1rem}.para+.para{margin-top:.5lh}.md-list{margin:0;padding-inline-start:1.2em}.md-list li+li{margin-top:.25lh}.para+.md-list,.md-list+.para,.md-list+.md-list{margin-top:.5lh}.md-list li::marker{color:rgb(from currentcolor r g b / .45)}.recommendation .section-label,.recommendation .section-body{color:var(--green)}.conf-reason,.revalidate-verdict{grid-column:2;white-space:pre-wrap;font-size:.92em;font-style:italic;color:var(--muted);margin-top:.6rem;padding-top:.55rem;border-top:1px dashed var(--border)}.revalidate-stamp{display:inline-block;margin-top:.1rem;font-size:.55rem;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:.03em;padding:.14rem .3rem;border-radius:3px;background:transparent;color:var(--muted);border:1px solid var(--border);white-space:nowrap;&.confirmed{color:var(--critical);border-color:rgb(from var(--critical) r g b / .55)}&.partial{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .55)}&.unknown{color:var(--warning);border-color:rgb(from var(--warning) r g b / .55)}}.evidence-list{margin:.25rem 0 0;padding-left:1.6rem;display:flex;flex-direction:column;gap:.15rem;>li{position:relative}& li::marker{color:var(--muted);font-size:.9em}>li.current:before{content:"";position:absolute;left:-1.5rem;top:.58em;width:.35rem;height:.35rem;border-radius:50%;background:var(--accent)}>li.current::marker{color:var(--accent)}& li:has(.evidence-note):not(:last-child){margin-bottom:.3rem}}.evidence-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;overflow-wrap:anywhere;color:var(--accent);text-decoration:none;&:is(a,[role=link]):hover{text-decoration:underline}&:focus-visible{outline:1px solid var(--accent);outline-offset:1px;border-radius:var(--ui-radius, 2px)}}:is(.line-num a,.evidence-ref,.gh-ref-btn){cursor:default}span.evidence-ref:not([role]){color:var(--muted)}.evidence-note{white-space:pre-wrap;line-height:1.5;color:rgb(from var(--text) r g b / .78);margin-top:.1rem}.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a{color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}.inline-quote{background:rgb(from var(--accent) r g b / .1);padding:1px;border-radius:3px;color:var(--text)}.inline-code{background:var(--surface-active);border-radius:3px;border:1px solid var(--border);padding:0 .25em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;color:var(--text)}.code-block{white-space:normal;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:rgb(from var(--text) r g b / .05);overflow:hidden;width:fit-content;max-width:100%;.code-block-lang{padding:.15rem .5rem;border-bottom:1px solid var(--border);color:var(--muted);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}& pre{margin:0;padding:.45rem .6rem;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;line-height:1.5;color:var(--text)}& code{font:inherit}}.line-row{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;padding-right:var(--finding-line-end-inset, 0);position:relative}.run-meta{color:var(--muted);font-size:.65rem}.finding-code-btn{display:inline-block;margin-top:.35rem;padding:.1rem .45rem;background:transparent;border:1px solid var(--border);border-radius:var(--ui-radius, 999px);color:var(--muted);font:inherit;font-size:.65rem;font-weight:500;white-space:nowrap}.finding-code-btn:hover{border-color:var(--accent);color:var(--accent)}.marks{display:flex;gap:.35rem;justify-content:flex-end;margin-top:.4rem;align-items:center;position:var(--finding-marks-position, static);bottom:0;background:var(--finding-marks-bg, transparent);padding-bottom:var(--finding-marks-pad-bottom, 0);padding-left:4.75rem;user-select:none}.finding-left{align-self:start;text-align:center;min-width:4rem;padding-top:var(--finding-left-inset, 0);position:var(--finding-left-position, relative);top:var(--finding-mark-sticky-top, 0);.value-label:last-child{margin-bottom:0}}:host(:not([popup])) .finding-left{padding-top:calc(var(--finding-left-inset, 0px) + 2px)}.conf-score{font-size:.75rem;color:var(--muted);margin-top:.3rem;& strong{color:var(--text);font-size:.85rem}}.conf-ring{--col: var(--muted);position:relative;width:3rem;height:3rem;margin:.7rem auto .15rem;display:flex;align-items:center;justify-content:center;& svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}& circle{fill:none;stroke-width:4}.conf-ring-track{stroke:var(--border)}.conf-ring-arc{stroke:var(--col);stroke-linecap:round}& span{position:relative;z-index:1;font-size:.8rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}& small{font-size:.55rem;color:var(--muted);font-weight:500}&.critical{--col: var(--critical)}&.high{--col: var(--high)}&.medium{--col: var(--medium)}&.low{--col: var(--low)}&.high_bug{--col: var(--high-bug)}&.bug{--col: var(--bug)}&.informational{--col: var(--info)}}.value-label{display:block;font-size:.45rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:.1rem;margin-bottom:.3rem;font-weight:500}.print-case-label{display:none}.badge,.tabs,.tab,.value-label,.run-meta,.conf-ring{cursor:default;user-select:none}.badge{display:inline-block;font-size:.7rem;font-weight:600;text-transform:uppercase;padding:.15rem .45rem;border-radius:3px;letter-spacing:.03em;line-height:1;&.critical{background:var(--critical);color:#fff}&.high{background:var(--high);color:#fff}&.medium{background:var(--medium);color:#000}&.low{background:var(--low);color:var(--badge-low-text)}&.high_bug{background:var(--high-bug);color:#fff}&.bug{background:var(--bug);color:#fff}&.informational{background:var(--info);color:#fff}}.badge-pair{display:inline-flex;align-items:center;gap:.25rem}.badge-pair-full,.badge-pair-compact{flex-direction:column;gap:.15rem}.badge-orig-wrap{display:inline-flex;align-items:center;gap:.15rem;line-height:1}.badge-arrow,.badge-corr-mark{font-size:.6rem;line-height:1;color:var(--muted)}.badge-arrow.up,.badge-corr-mark.up{color:var(--high)}.badge-pre{font-size:.55rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.badge-orig{display:inline-block;font-size:.58rem;font-weight:600;text-transform:uppercase;padding:.08rem .3rem;border-radius:3px;letter-spacing:.03em;line-height:1;background:transparent;color:var(--muted);border:1px solid var(--border);&.struck{text-decoration:line-through;text-decoration-thickness:1px}&.critical{border-color:rgb(from var(--critical) r g b / .55)}&.high{border-color:rgb(from var(--high) r g b / .55)}&.medium{border-color:rgb(from var(--medium) r g b / .55)}&.low{border-color:rgb(from var(--low) r g b / .55)}&.high_bug{border-color:rgb(from var(--high-bug) r g b / .55)}&.bug{border-color:rgb(from var(--bug) r g b / .55)}&.informational{border-color:rgb(from var(--info) r g b / .55)}}.badge-varies{font-size:.55rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.08rem .3rem;border-radius:3px;line-height:1;background:transparent;color:var(--muted);border:1px dashed var(--border)}.severity-reason{margin-top:.4rem;padding-top:.35rem;border-top:1px dashed var(--border);font-size:.82em;font-style:italic;color:var(--muted)}.severity-reason-label{font-style:normal;font-weight:600;text-transform:uppercase;font-size:.85em;letter-spacing:.04em;margin-right:.35rem}.duplicates-block .file-icon{flex-shrink:0}.mark-action-group{display:inline-flex;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);background:linear-gradient(var(--surface),var(--surface)),var(--bg);overflow:hidden;margin-right:.25rem;flex-shrink:0}.mark-comment,.mark-fix,.mark-flag,.mark-copy,.mark-link,.mark-issue,.mark-claude{background:transparent;border:0;color:var(--muted);padding:0 .25rem;height:1.4rem;cursor:default;display:inline-flex;align-items:center;justify-content:center;&:not(:last-child){border-right:1px solid var(--border)}&:not(:disabled):hover{color:var(--accent);background:var(--surface-active)}}.mark-issue{text-decoration:none}.mark-comment.has-comment,.mark-fix.has-fix,.mark-flag.flagged{color:var(--accent)}.mark-flag svg{display:block}.mark-copy.copied,.mark-link.copied,.mark-claude.copied{color:var(--green, #4ade80);background:color-mix(in srgb,var(--green, #4ade80) 14%,transparent)}.mark-comment.has-comment .bubble,.mark-fix.has-fix .wrench,.mark-flag.flagged .flag-cloth{fill:var(--accent);fill-opacity:.15}.triage-menu-wrap{position:relative;display:inline-flex;margin-left:.25rem;flex-shrink:0}.mark-triage-menu{cursor:default;background:linear-gradient(var(--surface),var(--surface)),var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:var(--ui-radius, 3px);padding:0 .3rem;height:1.5rem;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font:inherit}.mark-triage-menu:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.mark-comment:disabled,.mark-fix:disabled,.mark-flag:disabled,.mark-triage-menu:disabled,.triage-menu-item:disabled{opacity:.4}.mark-triage-menu.with-label{padding:0 .35rem 0 .5rem;font-size:.72rem;height:1.5rem}.mark-triage-menu .mark-triage-label{text-transform:uppercase;letter-spacing:.05em;font-weight:600}.mark-triage-menu.triage-state-deleted{border-color:var(--critical);color:var(--critical)}.mark-triage-menu.triage-state-fixed{border-color:var(--green, #4ade80);color:var(--green, #4ade80)}.mark-triage-menu.triage-state-inprogress{border-color:var(--warning, #d97706);color:var(--warning, #d97706)}.mark-triage-menu.triage-state-invalid{border-color:var(--muted);color:var(--text)}.mark-triage-menu.triage-state-ignored{border-color:var(--accent, #2563eb);color:var(--accent, #2563eb)}.triage-menu[popover]{position:fixed;inset:auto;margin:0;min-width:7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 4px);padding:.25rem;box-shadow:0 4px 12px #00000040;display:flex;flex-direction:column;gap:1px;-webkit-app-region:no-drag;app-region:no-drag}.triage-menu[popover]:not(:popover-open){display:none}.triage-menu[popover]:popover-open{display:flex}.triage-menu-item{cursor:default;background:transparent;border:0;padding:.35rem .5rem;font-size:.78rem;color:var(--text);text-align:left;border-radius:var(--ui-radius, 3px);font-family:inherit}.triage-menu-item:not(:disabled):hover{background:var(--surface)}.triage-menu-item.active:before{content:"\\2713 ";color:var(--accent)}.triage-menu-inprogress:not(:disabled):hover{color:var(--warning, #d97706)}.triage-menu-fixed:not(:disabled):hover{color:var(--green, #4ade80)}.triage-menu-invalid:not(:disabled):hover{color:var(--muted)}.triage-menu-deleted:not(:disabled):hover{color:var(--critical)}:host([context="focus"]) .triage-menu-wrap>.mark-triage-menu{display:none}:host([context="focus"]) .triage-menu-wrap{display:inline-flex}:host([context="focus"]) .triage-menu[popover]{position:static;inset:auto;display:inline-flex!important;flex-flow:row wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;min-width:0;gap:.25rem}:host([context="focus"]) .triage-menu-item{background:transparent;border:1px solid var(--border);padding:.2rem .5rem;border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;text-transform:uppercase;letter-spacing:.04em}:host([context="focus"]) .triage-menu-item.active{background:rgb(from var(--accent) r g b / .12);border-color:var(--accent);color:var(--accent)}:host([context="focus"]) .triage-menu-item:not(:disabled):hover{background:var(--surface-active)}:host([context="focus"]) .triage-menu-inprogress.active{background:rgb(from var(--warning, #d97706) r g b / .12);border-color:var(--warning, #d97706);color:var(--warning, #d97706)}:host([context="focus"]) .triage-menu-fixed.active{background:rgb(from var(--green, #4ade80) r g b / .12);border-color:var(--green, #4ade80);color:var(--green, #4ade80)}:host([context="focus"]) .triage-menu-deleted.active{background:rgb(from var(--critical) r g b / .12);border-color:var(--critical);color:var(--critical)}:host([context="focus"]) .triage-menu-item.active:before{content:"";margin:0}:host([context="focus"]) .marks{gap:.5rem;margin-top:var(--finding-marks-margin-top, .65rem);padding-left:0;padding-top:.55rem;border-top:1px solid var(--border);flex-wrap:wrap}:host([context="focus"]) .marks-commit-row{padding-left:0}:host([context="focus"]) .mark-comment,:host([context="focus"]) .mark-fix,:host([context="focus"]) .mark-flag,:host([context="focus"]) .mark-copy,:host([context="focus"]) .mark-link,:host([context="focus"]) .mark-issue,:host([context="focus"]) .mark-claude{height:1.75rem;padding:0 .55rem;gap:.35rem;display:inline-flex;align-items:center;font-size:.72rem}:host([context="focus"]) .mark-btn-label{color:inherit;font-weight:500;letter-spacing:.02em}.finding-top-marks{position:absolute;top:calc(var(--finding-left-inset, 0px) - var(--finding-mark-inset, .5rem));left:calc(.75rem - var(--finding-mark-inset, .5rem));display:grid;grid-template-columns:24px 12px;column-gap:31px;&.color-red{color:var(--marker-red)}&.color-blue{color:var(--marker-blue)}&.color-green{color:var(--marker-green)}&.color-gray{color:var(--marker-gray)}}.finding-color-mark{grid-column:1;display:block;width:24px;height:12px;border-radius:var(--ui-radius, 0 0 6px 6px);background:currentcolor;box-shadow:inset 0 0 0 1px rgb(from var(--text) r g b / .15)}.finding-bookmark-mark{grid-column:2;display:block;width:12px;height:12px;background:var(--bookmark-color);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%)}:host(:not([popup])) :is(.finding-color-mark,.finding-bookmark-mark){height:10px}.comment-block,.fix-block{margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--accent);background:rgb(from var(--accent) r g b / .08);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text)}.comment-block{white-space:pre-wrap;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}& a.comment-self-ref{text-decoration:underline dotted;text-underline-offset:2px}& a.comment-self-ref:hover{text-decoration:underline solid}}.comment-block:has(.managed-comment){white-space:normal}.fix-block{word-break:break-all;& a{color:var(--accent);text-decoration:none}& a:hover{text-decoration:underline}}.fix-block:has(managed-fix-link){display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:rgb(from var(--muted) r g b / .04);word-break:normal;.fix-label{flex:none;font-size:.75rem;font-weight:500}& managed-fix-link{flex:1;min-width:0}}.duplicates-block{display:flex;align-items:baseline;flex-wrap:wrap;gap:.1rem .4rem;margin-top:.5rem;padding:.35rem .55rem;border-left:3px solid var(--muted);background:rgb(from var(--muted) r g b / .1);border-radius:var(--ui-radius, 0 4px 4px 0);font-size:.82rem;color:var(--text);.duplicates-label{color:var(--muted);font-weight:600}& a.duplicate-ref{display:inline-flex;align-items:center;gap:.25rem;color:var(--accent);text-decoration:none}& a.duplicate-ref .duplicate-ref-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;text-decoration:underline dotted;text-underline-offset:2px}& a.duplicate-ref:hover .duplicate-ref-id{text-decoration:underline solid}}.comment-label,.fix-label{color:var(--muted);font-weight:600;margin-right:.35rem}.line-num{color:var(--muted);font-size:.8rem}.line-num a{color:inherit;text-decoration:none}.line-num a:hover{color:var(--accent)}.npm-link{display:inline-block;padding:0 .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 3px);font-size:.72rem;font-weight:500;color:var(--muted);text-decoration:none}.npm-link:hover{border-color:var(--accent);color:var(--accent)}@media print{.card{break-inside:var(--finding-print-break, avoid);box-decoration-break:clone;padding:.45rem .25rem}.finding-code-btn,.mark-copy,.mark-link,.mark-issue,.mark-claude{display:none!important}.npm-link{border:0;padding:0}:host(.triage-fixed),:host(.triage-invalid),:host(.triage-deleted),:host(.triage-ignored){opacity:1}:host(.link-target) .card{animation:none;box-shadow:none!important}:host(.multi-case) .card:before{content:"Multiple reports of one finding";display:block;font-size:.7rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #bbb;padding-bottom:.2rem;margin-bottom:.35rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.marks,.tabs{display:none!important}.tab-body{display:grid!important;break-inside:var(--finding-print-break, avoid)}:host(.multi-case) .tab-body{break-inside:auto}:host(.multi-case) .tab-body+.tab-body{break-inside:avoid}.tab-body+.tab-body{margin-top:.5rem;padding-top:.5rem;border-top:1px dashed #999}:host([print-one-sample]) .tab-body:not(.active),:host([print-one-sample]) .print-case-label,:host([print-one-sample]) .card:before{display:none!important}:host([print-one-sample]) .tab-body.active{margin-top:0;padding-top:0;border-top:0;break-inside:var(--finding-print-break, avoid)}.finding-body{display:flex;flex-direction:column;>*{flex-shrink:0}}.line-row,.desc-title,.conf-reason,.severity-reason{break-inside:avoid}.section-label{break-after:avoid}.desc,.section-body{orphans:2;widows:2}.section,.recommendation,.evidence{break-inside:avoid}.evidence{order:99}.evidence>summary{break-after:avoid}.evidence-list>li{break-inside:avoid}:host([in-group].multi-case:not([print-one-sample])) .tab-body .line-row{display:flex}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+*{margin-top:0}:host([in-group]:is(:not(.multi-case),[print-one-sample])) .line-row+.conf-reason{padding-top:0;border-top:0}.line-row .discovered-in{flex-basis:100%;order:99}.print-case-label{display:block;grid-column:1 / -1;break-after:avoid;font-size:.65rem;font-weight:600;color:#555;background:#eee;padding:.1rem .35rem;border-radius:3px;margin-bottom:.25rem;letter-spacing:.04em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.value-label{color:#777}.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact;&.critical{background:#a30b0f!important;color:#fff!important}&.high{background:#b8400a!important;color:#fff!important}&.medium{background:#855107!important;color:#fff!important}&.low{background:#374151!important;color:#fff!important}&.high_bug{background:#7a3e0c!important;color:#fff!important}&.bug{background:#4d4538!important;color:#fff!important}&.informational{background:#0550ae!important;color:#fff!important}}.badge-orig{background:transparent!important;color:#555!important;border-color:#999!important}.badge-varies,.revalidate-stamp{color:#555!important;border-color:#999!important}.badge-arrow,.badge-corr-mark,.badge-pre,.severity-reason{color:#555!important}a,.line-num,.line-num a,.desc-title a,.desc a,.section-body a,.conf-reason a,.revalidate-verdict a,.evidence-ref{color:inherit}details:not([open])>:not(summary){display:block}details::details-content{content-visibility:visible}summary.section-label{cursor:auto;&:after{display:none}}.code-preview-btn,.gh-ref-btn{display:none}.inline-code{border:0;background:transparent}.code-block{background:transparent;border-color:#bbb;.code-block-lang{color:#555;border-bottom-color:#bbb}& pre{white-space:pre-wrap;overflow:visible}.token{color:#333!important}.token.comment,.token.prolog,.token.cdata{color:#666!important}}}
|
|
210
|
+
`;cp();Hg();var vG=["finding","is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","multi-case"],l_=class extends X{static properties={group:{attribute:!1},inGroup:{type:Boolean,attribute:"in-group",reflect:!0},context:{type:String,reflect:!0},lazy:{type:Boolean}};static styles=[F(Gi),F(tb),F(bL),F(rb),F(eb),F(Xi),F(mc)];_near=!1;_watched=null;constructor(){super(),this.group=null,this.inGroup=!1,this.context=null,this.lazy=!1}render(){if(!this.group)return d``;if(this.dataset.gid=de(this.group),this.lazy&&!this._near)return this.classList.add("finding"),d`<div class="card card-pending" aria-busy="true"></div>`;let t=new Set(SM(this.group));for(let r of vG)this.classList.toggle(r,t.has(r));return d`<div class="card">${CM(this.group,{context:this.context})}</div>`}updated(){this.classList.toggle("content-ready",!!this.group&&(!this.lazy||this._near));for(let t of this.renderRoot.querySelectorAll(".code-preview")){let r=t.dataset.revealedTo;if(r!==void 0&&Math.round(t.scrollTop)!==Number(r))continue;let n=t.querySelectorAll(".code-preview-lineno.cited");n.length!==0&&(zl(t,n),t.dataset.revealedTo=String(Math.round(t.scrollTop)))}}connectedCallback(){if(super.connectedCallback(),qt(this.renderRoot),this.lazy){this._watched=this.closest(".flat-group")??this,dc(this._watched,t=>this._onNear(t));return}this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this._watched&&(Uo(this._watched),this._watched=null),super.disconnectedCallback()}_onNear(t){t?(this._watched&&(Uo(this._watched),this._watched=null),this._near=!0,this.requestUpdate()):this._near&&(this._near=!1,this.requestUpdate())}ensureRendered({sync:t=!1}={}){return this.lazy&&!this._near&&this._onNear(!0),t&&this.isConnected&&this.isUpdatePending&&this.performUpdate(),this.updateComplete}};customElements.define("finding-card",l_);T();var vL=`:host{display:inline-flex;gap:4px;align-items:center;flex-shrink:0}button{width:14px;height:14px;user-select:none;padding:0;background:transparent;border:1.5px solid currentcolor;border-radius:var(--ui-radius, 50%);opacity:.55;transition:opacity .12s,transform .12s}button:not(:disabled):hover{opacity:1;transform:scale(1.12)}button:disabled{opacity:.25}button.active{background:currentcolor;opacity:1;box-shadow:0 0 0 2px var(--surface),0 0 0 3px currentcolor}.color-red{color:var(--marker-red)}.color-blue{color:var(--marker-blue)}.color-green{color:var(--marker-green)}.color-gray{color:var(--marker-gray)}
|
|
211
|
+
`;xo();var wG=["red","blue","green","gray"],c_=class extends J{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=F(vL);constructor(){super(),this.selected=null,this.disabled=!1}connectedCallback(){super.connectedCallback(),qt(this.renderRoot)}render(){return d`${wG.map(t=>d`<button type="button" class="${`color-${t}${this.selected===t?" active":""}`}" data-color="${t}" aria-label="${`mark ${t}`}" data-tooltip="${`mark ${t}`}" ?disabled="${this.disabled}" @click="${this._onClick}"></button>`)}`}_onClick=t=>{if(this.disabled)return;let r=t.currentTarget.dataset.color;this.dispatchEvent(new CustomEvent("mark-color",{detail:{color:r},bubbles:!0,composed:!0}))}};customElements.define("color-marker",c_);qw();T();He();Re();U();var d_=class extends X{static properties={rangeDisabled:{type:Boolean,attribute:"range-disabled"},revalidateOptions:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.rangeDisabled=!1,this.revalidateOptions=[],this.hasPartial=!1}render(){let t=l.filterConfMin,r=l.filterConfMax,n=this.revalidateOptions??[],o=this.rangeDisabled,i=n.length>0&&!!l.filterRevalidate,s=o?"No confidence range: some findings on screen carry no confidence score":m;return d`<span class="${z({"conf-range-label":!0,replaced:i,disabled:o})}">Confidence</span> <span class="${z({"conf-range":!0,replaced:i,disabled:o})}" title="${s}" ?inert="${o||i}"><range-slider id="conf-range" min="0" max="10" step="1" low="${t}" high="${r}" aria-label="Confidence range"></range-slider><conf-range-mirror id="conf-range-vals" class="conf-vals" for="conf-range" .low="${t}" .high="${r}"></conf-range-mirror></span>${n.length>0?d`<revalidate-filter class="${z({replaces:i})}" .options="${n}" ?has-partial="${this.hasPartial}"></revalidate-filter>`:m}`}};customElements.define("conf-filter",d_);T();He();dr();Re();U();var yL={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026"},wL={files:"Filter files",code:"Search code",issues:"Search issues"},kG=d`<svg class="bundle-code-search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,xG={files:d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5Z"/></svg>`,code:d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 4.5L2 8l3.5 3.5"/><path d="M10.5 4.5L14 8l-3.5 3.5"/></svg>`,issues:d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M8 4.8v3.6" stroke-linecap="round"/><circle cx="8" cy="11" r=".7" fill="currentColor" stroke="none"/></svg>`},u_=class extends X{static properties={modes:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.modes=[]}render(){let t=l.bundleCodeSearchQuery,r=l.bundleCodeSearchMode,n=this.modes.includes(r)?r:"files",o=yL[n]??yL.files;return d`${kG} <input type="text" class="bundle-code-search-input" placeholder="${o}" aria-label="${o}" .value="${ke(t)}" @input="${this._onInput}"> ${t?d`<button type="button" class="bundle-code-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:m} ${this.modes.length>0?d`<span class="bundle-code-search-modes" role="tablist">${this.modes.map(i=>d`<button type="button" class="${z({"bundle-code-search-mode":!0,active:n===i})}" role="tab" aria-selected="${String(n===i)}" data-tooltip="${wL[i]??i}" aria-label="${wL[i]??i}" @click="${()=>this._selectMode(i)}">${xG[i]??m}</button>`)}</span>`:m}`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-code",value:t},bubbles:!0,composed:!0}))}_selectMode(t){this.dispatchEvent(new CustomEvent("bundle-search-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("bundle-code-search",u_);var vc=320,p_=class extends HTMLElement{constructor(){super(),this._drag=null,this.addEventListener("pointerdown",t=>this._startDrag(t)),this.addEventListener("pointermove",t=>{this._drag?.id===t.pointerId&&(vc=this._apply(this._drag.width+t.clientX-this._drag.x))});for(let t of["pointerup","pointercancel","lostpointercapture"])this.addEventListener(t,r=>{this._drag?.id===r.pointerId&&this._endDrag()});this.addEventListener("keydown",t=>this._onKeyDown(t)),this.addEventListener("dblclick",()=>{vc=320,this._apply(vc)})}connectedCallback(){this._view=this.closest(".bundle-code-view"),this._view&&(this._observer=new ResizeObserver(()=>this._apply(vc)),this._observer.observe(this._view),this._apply(vc))}disconnectedCallback(){this._observer?.disconnect(),this._endDrag(),this._view=null}_bounds(){let t=this._view.getBoundingClientRect().width;return{min:Math.min(180,t*.4),max:t*.6}}_apply(t){if(!this._view)return t;let{min:r,max:n}=this._bounds();if(n===0)return t;let o=Math.max(r,Math.min(n,t));return this._view.style.setProperty("--bundle-code-rail-width",`${o}px`),this.setAttribute("aria-valuemin",String(Math.round(r))),this.setAttribute("aria-valuemax",String(Math.round(n))),this.setAttribute("aria-valuenow",String(Math.round(o))),this.setAttribute("aria-valuetext",`${Math.round(o)} pixels`),o}_startDrag(t){if(t.button!==0||!t.isPrimary||this._drag||!this._view)return;t.preventDefault();let r=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width;this._drag={id:t.pointerId,x:t.clientX,width:r},this.setPointerCapture(t.pointerId),this.classList.add("dragging")}_endDrag(){if(!this._drag)return;let{id:t}=this._drag;this._drag=null,this.classList.remove("dragging"),this.hasPointerCapture(t)&&this.releasePointerCapture(t)}_onKeyDown(t){if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||!this._view)return;let r=this._view.querySelector(".bundle-code-rail").getBoundingClientRect().width,{min:n,max:o}=this._bounds(),i={ArrowLeft:r-16,ArrowRight:r+16,Home:n,End:o}[t.key];i!==void 0&&(t.preventDefault(),t.stopPropagation(),vc=this._apply(i))}};customElements.define("bundle-code-splitter",p_);T();He();dr();Re();U();var $G=d`<svg class="bundle-search-icon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M9.7 9.7L13 13" stroke-linecap="round"/></svg>`,f_=class extends X{createRenderRoot(){return this}render(){let t=l.bundleSearchQuery,r=l.bundleSearchRegex,n=l.bundleSearchCase,o=r?"Search by regular expression\u2026":"Search all source\u2026";return d`${$G} <input type="text" class="bundle-search-input" placeholder="${o}" aria-label="${o}" spellcheck="false" autocapitalize="off" autocomplete="off" .value="${ke(t)}" @input="${this._onInput}"> ${t?d`<button type="button" class="bundle-search-clear" aria-label="Clear search" @click="${this._onClear}">×</button>`:m} <span class="bundle-search-mods"><button type="button" class="${z({"bundle-search-mod":!0,active:n})}" data-tooltip="${n?"Case-sensitive on \u2014 click to ignore case":"Match case"}" aria-label="Match case" aria-pressed="${String(n)}" @click="${this._onToggleCase}">Aa</button> <button type="button" class="${z({"bundle-search-mod":!0,active:r})}" data-tooltip="${r?"Regular expression on \u2014 click for plain text":"Match by regular expression"}" aria-label="Match by regular expression" aria-pressed="${String(r)}" @click="${this._onToggleRegex}">.*</button></span>`}_onInput=t=>{this._dispatchInput(t.target.value)};_onClear=()=>{this._dispatchInput("")};_dispatchInput(t){this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:"bundle-search",value:t},bubbles:!0,composed:!0}))}_onToggleRegex=()=>{this.dispatchEvent(new CustomEvent("bundle-search-regex-toggle",{bubbles:!0,composed:!0}))};_onToggleCase=()=>{this.dispatchEvent(new CustomEvent("bundle-search-case-toggle",{bubbles:!0,composed:!0}))}};customElements.define("bundle-search",f_);T();dr();Re();U();function oo(e,t,r){let n=t[r];return n||console.warn(`<${e}>: unknown kind ${JSON.stringify(r)}; expected one of ${Object.keys(t).map(o=>JSON.stringify(o)).join(", ")}.`),n}var _G={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},h_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=oo("entity-search",_G,this.kind);return t?d`<input type="search" class="packages-search" placeholder="${`${t.label}\u2026`}" aria-label="${t.label}" .value="${ke(l[t.stateKey])}" @input="${this._onInput}">`:m}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-search",h_);T();dr();Re();U();var SG=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],CG={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},m_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=oo("entity-sort",CG,this.kind);return t?d`<select class="packages-sort" aria-label="${t.aria}" .value="${ke(l[t.stateKey])}" @change="${this._onChange}">${SG.map(([r,n])=>d`<option value="${r}" ?selected="${l[t.stateKey]===r}">${n}</option>`)}</select>`:m}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("entity-sort",m_);T();dr();Re();U();var g_=class extends X{static properties={showFile:{type:Boolean,attribute:"show-file"},showConfidence:{type:Boolean,attribute:"show-confidence"},showPriority:{type:Boolean,attribute:"show-priority"}};createRenderRoot(){return this}constructor(){super(),this.showFile=!1,this.showConfidence=!1,this.showPriority=!1}render(){let t=(r,n)=>d`<option value="${r}" ?selected="${l.sortBy===r}">${n}</option>`;return d`<select class="sort-select" aria-label="Sort findings" .value="${ke(l.sortBy)}" @change="${this._onChange}">${t("severity","Severity \u2193")} ${this.showFile?t("file","File \u2191"):m} ${this.showConfidence?d`${t("confidence-desc","Confidence \u2193")}${t("confidence-asc","Confidence \u2191")}`:m} ${this.showPriority?d`${t("priority-desc","Priority \u2193")}${t("priority-asc","Priority \u2191")}`:m}</select>`}_onChange=t=>{this.dispatchEvent(new CustomEvent("sort-change",{detail:{kind:"findings",value:t.target.value},bubbles:!0,composed:!0}))}};customElements.define("findings-sort",g_);T();var kL=`:host{display:inline-flex;align-items:center;width:8.5rem;height:16px;--rs-thumb-size: 14px;--rs-track-height: 3px;--rs-rail: rgb(from currentcolor r g b / .25);--rs-fill: var(--accent, currentColor)}.track-wrap{position:relative;flex:1;height:var(--rs-thumb-size)}.track{position:absolute;left:0;right:0;top:50%;height:var(--rs-track-height);transform:translateY(-50%);border-radius:var(--ui-radius, 99px);background:linear-gradient(to right,var(--rs-rail) 0,var(--rs-rail) var(--low, 0%),var(--rs-fill) var(--low, 0%),var(--rs-fill) var(--high, 100%),var(--rs-rail) var(--high, 100%))}input[type=range]{appearance:none;-webkit-appearance:none;position:absolute;left:0;right:0;top:0;width:100%;height:var(--rs-thumb-size);background:transparent;pointer-events:none;margin:0;padding:0;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-moz-range-thumb{pointer-events:auto;width:var(--rs-thumb-size);height:var(--rs-thumb-size);border-radius:50%;background:var(--rs-fill);border:0;box-shadow:0 1px 3px #00000080}input[type=range]::-webkit-slider-runnable-track{background:transparent;height:var(--rs-thumb-size)}
|
|
212
|
+
`;var b_=class extends J{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=F(kL);constructor(){super(),this.min=0,this.max=100,this.step=1,this.low=0,this.high=100}willUpdate(){this.low<this.min&&(this.low=this.min),this.high>this.max&&(this.high=this.max),this.low>this.high&&(this.low=this.high)}render(){let t=this.max-this.min||1,r=(this.low-this.min)/t*100,n=(this.high-this.min)/t*100;return d`<div class="track-wrap" style="${`--low:${r}%;--high:${n}%`}"><div class="track"></div><input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"> <input type="range" min="${this.min}" max="${this.max}" step="${this.step}" @input="${this._onInput}" @change="${this._onChange}"></div>`}firstUpdated(){this._inputs=[...this.renderRoot.querySelectorAll('input[type="range"]')],this._inputs[0].value=this.low,this._inputs[1].value=this.high}updated(t){if(!this._inputs||!(t.has("low")||t.has("high")))return;let r=this._inputs.map(s=>Number(s.value)),n=r[0]>r[1],o=n?1:0,i=n?0:1;this.low!==r[o]&&(this._inputs[o].value=this.low),this.high!==r[i]&&(this._inputs[i].value=this.high)}_onInput=()=>{let t=Number(this._inputs[0].value),r=Number(this._inputs[1].value);this.low=Math.min(t,r),this.high=Math.max(t,r),this._emit("range-input")};_onChange=()=>{this._emit("range-change")};_emit(t){this.dispatchEvent(new CustomEvent(t,{detail:{low:this.low,high:this.high},bubbles:!0,composed:!0}))}};customElements.define("range-slider",b_);T();var v_=class extends J{static properties={low:{type:Number},high:{type:Number},for:{type:String}};createRenderRoot(){return this}constructor(){super(),this.low=0,this.high=10,this.for="conf-range",this._dragging=!1,this._liveLow=0,this._liveHigh=10}connectedCallback(){super.connectedCallback(),document.addEventListener("range-input",this._onRangeInput),document.addEventListener("range-change",this._onRangeChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("range-input",this._onRangeInput),document.removeEventListener("range-change",this._onRangeChange)}willUpdate(t){this._dragging&&(t.has("low")&&this.low!==this._liveLow&&(this.low=this._liveLow),t.has("high")&&this.high!==this._liveHigh&&(this.high=this._liveHigh))}_onRangeInput=t=>{t.target?.id===this.for&&(this._dragging=!0,this._liveLow=t.detail.low,this._liveHigh=t.detail.high,this.low=t.detail.low,this.high=t.detail.high)};_onRangeChange=t=>{t.target?.id===this.for&&(this._dragging=!1)};render(){return d`<span>${this.low}</span><span class="dash">–</span><span>${this.high}</span>`}};customElements.define("conf-range-mirror",v_);bu();T();U();mr();Yt();pe();var xL=`dialog{max-width:560px;width:min(94vw,560px)}header h3{margin:0 0 .25rem}header p{margin:0 0 .9rem;color:var(--muted);font-size:.82rem}hr{border:0;border-top:1px solid var(--border);margin:.9rem 0}.section h4{margin:0 0 .25rem;font-size:.82rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.section p{margin:0 0 .55rem;color:var(--muted);font-size:.78rem}.section button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.35rem .9rem;font:inherit;font-size:.8rem;&:hover{border-color:var(--accent);color:var(--accent)}&.primary{background:var(--accent);color:var(--surface);border-color:var(--accent)}&.primary:hover{filter:brightness(1.08)}&:disabled{opacity:.5}}input[type=file]{display:block;color:var(--text);font:inherit;font-size:.78rem;margin-bottom:.5rem}.error{margin:.5rem 0;padding:.4rem .6rem;border:1px solid var(--critical, #f87171);border-radius:var(--ui-radius, 5px);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text);font-size:.78rem}.summary{margin:.5rem 0;font-size:.82rem;& strong{color:var(--text)}.meta{margin-left:.4rem;color:var(--muted);font-size:.74rem}}.mode{border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.55rem .7rem;margin:.55rem 0 .7rem;display:flex;flex-direction:column;gap:.35rem}.mode legend{padding:0 .35rem;font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.mode label{display:flex;align-items:flex-start;gap:.5rem;font-size:.82rem;& em{color:var(--muted);font-style:normal;font-size:.74rem}}.status{margin:.8rem 0 0;padding:.4rem .6rem;border-radius:5px;font-size:.78rem;&.status-ok{border:1px solid var(--accent);background:rgb(from var(--accent) r g b / .08);color:var(--text)}&.status-err{border:1px solid var(--critical, #f87171);background:rgb(from var(--critical, #f87171) r g b / .07);color:var(--text)}}.actions{display:flex;justify-content:flex-end;gap:.4rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--border)}.actions button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:var(--ui-radius, 5px);padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}}
|
|
213
|
+
`;var y_=class extends D{static styles=[...D.styles,F(xL)];static properties={parsed:{state:!0},parseError:{state:!0},mode:{state:!0},busy:{state:!0},status:{state:!0}};constructor(){super(),this.parsed=null,this.parseError=null,this.mode="prefer-current",this.busy=!1,this.status=null}focusInitial(){this.renderRoot.querySelector("button.primary")?.focus()}async _onDownload(){this.busy=!0,this.status=null;try{let{blob:t,filename:r}=await h0();lo(t,r),this.status={kind:"ok",text:`Downloaded ${r}`}}catch(t){this.status={kind:"err",text:`Export failed: ${t.message}`}}finally{this.busy=!1}}async _onFile(t){let r=t.target.files?.[0];if(this.parsed=null,this.parseError=null,this.status=null,!!r)try{this.parsed=await m0(r)}catch(n){this.parseError=n.message}}_onMode(t){this.mode=t.target.value}async _onApply(){if(!(!this.parsed||this.busy)){this.busy=!0,this.status=null;try{let t=await g0(this.parsed,this.mode);E(),this.status=t.repoUrlError?{kind:"err",text:`Applied ${t.triageEntries} triage entries (${this.mode}), but saving repo URLs failed: ${t.repoUrlError.message}`}:{kind:"ok",text:`Applied ${t.triageEntries} triage entries and ${t.repoUrls} repo URLs (${this.mode}).`},this.parsed=null;let r=this.renderRoot.querySelector('input[type="file"]');r&&(r.value="")}catch(t){this.status={kind:"err",text:`Import failed: ${t.message}`}}finally{this.busy=!1}}}render(){let t=this.parsed;return d`<dialog @close="${this._onClose}"><header><h3>Triage backup</h3><p>Bundles every triage entry (markers, triage states, comments, fixes, per-report ignores) and all saved repo URLs into a single gzipped JSON file.</p></header><section class="section"><h4>Export</h4><p>Download the current triage + repo-URL set as a portable backup.</p><button type="button" class="primary" @click="${this._onDownload}" ?disabled="${this.busy}">${this.busy?"Working\u2026":"Download backup"}</button></section><hr><section class="section"><h4>Import</h4><p>Pick a previously-exported backup. Nothing is applied until you click Apply.</p><input type="file" accept=".gz,application/gzip" @change="${this._onFile}" ?disabled="${this.busy}"> ${this.parseError?d`<div class="error">Failed to parse: ${this.parseError}</div>`:m} ${t?d`<div class="summary">Found <strong>${Object.keys(t.triage).length}</strong> triage entries and <strong>${Object.keys(t.repoUrls).length}</strong> repo URLs. ${t.exportedAt?d`<span class="meta">Exported ${t.exportedAt}.</span>`:m}</div><fieldset class="mode"><legend>Merge mode</legend><label><input type="radio" name="te-mode" value="prefer-current" .checked="${this.mode==="prefer-current"}" @change="${this._onMode}"> <span>Merge — keep current on conflict <em>(safest, only fills gaps)</em></span></label> <label><input type="radio" name="te-mode" value="prefer-imported" .checked="${this.mode==="prefer-imported"}" @change="${this._onMode}"> <span>Merge — prefer imported on conflict <em>(overwrites where both have a value)</em></span></label> <label><input type="radio" name="te-mode" value="replace" .checked="${this.mode==="replace"}" @change="${this._onMode}"> <span>Replace all <em>(drops every current persisted entry first — destructive)</em></span></label></fieldset><button type="button" class="primary" @click="${this._onApply}" ?disabled="${this.busy}">${this.busy?"Applying\u2026":"Apply import"}</button>`:m}</section>${this.status?d`<div class="${`status status-${this.status.kind}`}">${this.status.text}</div>`:m}<footer class="actions"><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}};customElements.define("triage-export-dialog",y_);function $L(){return le("triage-export-dialog")}T();dr();var _L=`:host{display:inline-flex;vertical-align:middle;position:relative}.chip{display:inline-flex;align-items:center;gap:.375rem;cursor:default;user-select:none;position:relative;min-height:24px;box-sizing:border-box;padding:.125rem .375rem .125rem .5rem;background:var(--surface);border:var(--header-tag-border, 1px solid var(--border));border-radius:var(--ui-radius, 999px);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:500}.chip svg{color:var(--muted);flex-shrink:0}.chip.empty:hover{border-color:var(--accent)}.chip.empty .label{color:var(--muted);font-style:italic}.chip.readonly{padding-right:.5rem}.chip.copied:after{content:"Copied";position:absolute;inset:0;display:grid;place-items:center;background:var(--surface);backdrop-filter:var(--glass-blur);border-radius:var(--ui-radius, 999px);color:var(--text);font-weight:400;white-space:nowrap;pointer-events:none}.edit-btn{width:18px;height:18px;display:grid;place-items:center;padding:0;margin-left:.125rem;background:transparent;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted)}.edit-btn:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}@media(display-mode:window-controls-overlay){.edit-btn,.url-input,input{-webkit-app-region:no-drag;app-region:no-drag}}.chip[inert]{visibility:hidden;min-width:19rem}input{position:absolute;inset:0;box-sizing:border-box;padding:0 .55rem;background:var(--surface);border:1px solid var(--accent);border-radius:var(--ui-radius, 999px);color:var(--text);font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:400;outline:none}@media print{.chip{color:#000!important;border:0!important}.chip svg{color:#000!important}.edit-btn,input{display:none!important}}
|
|
214
|
+
`;he();var w_=d`<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>`,SL=d`<svg viewBox="0 0 16 16" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.082-.286.235-.547.445-.758l8.61-8.61z"/></svg>`,k_=class extends J{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=F(_L);constructor(){super(),this.url="",this.editable=!1,this.editing=!1,this._copied=!1,this._opener=""}render(){if(this.editable&&this.editing){let t=!!this.url,r=t?it(this.url):"Set repo";return d`<span class="${t?"chip":"chip empty"}" aria-hidden="true" inert>${w_} <span class="label">${r}</span> <button type="button" class="edit-btn">${SL}</button> </span><input type="text" .value="${ke(this.url)}" placeholder="user/repo or https://github.com/user/repo" @input="${this._onInput}" @focus="${this._onFocus}" @keydown="${this._onKeydown}" @blur="${this._onBlur}">`}if(this.editable){let t=!!this.url,r=t?it(this.url):"Set repo",n=t?this._copied?"chip copied":"chip":"chip empty";return d`<span class="${n}" @click="${t?null:this._onEdit}">${w_} ${t?this._slugLabel(r):d`<span class="label">${r}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${SL}</button></span>`}if(this.url){let t=this._copied?"chip readonly copied":"chip readonly";return d`<span class="${t}">${w_} ${this._slugLabel(it(this.url))}</span>`}return m}_slugLabel(t){return d`<span class="label" title="Copy repo name" @click="${this._onCopyLabel}">${t}</span>`}updated(t){if(t.has("editing")&&this.editing){let r=this.renderRoot.querySelector("input");r&&(r.focus(),r.select())}}_onEdit=t=>{t&&t.stopPropagation(),this._emit("repo-edit-start")};_onCopyLabel=t=>{t&&t.stopPropagation();let r=it(this.url);if(r)try{navigator.clipboard.writeText(r).then(()=>(this._copied=!0,setTimeout(()=>{this._copied=!1},1e3),null)).catch(()=>{})}catch{}};_onFocus=t=>{this._opener=t.target.value};_onInput=t=>{this.url=t.target.value,this._emit("repo-input",{url:this.url})};_onKeydown=t=>{t.key==="Enter"?(t.preventDefault(),this._emit("repo-commit",{url:this.url})):t.key==="Escape"&&(t.preventDefault(),this.url=this._opener,this._emit("repo-cancel",{url:this._opener}))};_onBlur=()=>{this.editing&&this._emit("repo-commit",{url:this.url})};_emit(t,r){this.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0}))}};customElements.define("repo-chip",k_);T();He();Je();Re();U();gt();var AG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="bubble" d="M2.5 3h11a.5.5 0 0 1 .5.5v6.5a.5.5 0 0 1-.5.5H8.4l-3 2.6V10.5H2.5a.5.5 0 0 1-.5-.5V3.5a.5.5 0 0 1 .5-.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,IG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="wrench" d="M10.4 2.6a3 3 0 0 0-3.6 4.5L2 12l2 2 4.9-4.8a3 3 0 0 0 4.5-3.6l-1.8 1.8-1.5-.4-.4-1.5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,TG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path class="flag-cloth" d="M5 1.5h6v13l-3-2.7-3 2.7z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg>`,LG=V(Sl.replace('width="14" height="14"','width="12" height="12"')),FG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round"><path d="M5 1.2 1.3 3.1v5.7L5 10.7l3.7-1.9V3.1Z M1.3 3.1 5 5l3.7-1.9 M5 5v5.7"/><path d="M11 5.2 7.3 7.1v5.7l3.7 1.9 3.7-1.9V7.1Z M7.3 7.1 11 9l3.7-1.9 M11 9v5.7"/></g></svg>`,BG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"><rect x="3.4" y="1.5" width="10" height="3.6" rx=".8"/><rect x="2.2" y="5.3" width="10" height="3.6" rx=".8"/><rect x="1" y="9.1" width="10" height="3.6" rx=".8"/></g></svg>`,OG=d`<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M8 1.5 13 3.5v4c0 3-2.1 5.5-5 7-2.9-1.5-5-4-5-7v-4Z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/></svg>`,NG=[{key:"comment",glyph:AG,label:"commented",stateKey:"filterComment",hasKey:"hasComment"},{key:"fix",glyph:IG,label:"fixed",stateKey:"filterFix",hasKey:"hasFix"},{key:"flag",glyph:TG,label:"flagged",stateKey:"filterFlagged",hasKey:"hasFlagged"},{key:"duplicates",glyph:LG,label:"rows with duplicates in other reports",stateKey:"filterDuplicates",hasKey:"hasDuplicates"},{key:"cross-context",glyph:FG,label:"rows across multiple repos or packages",stateKey:"filterCrossContext",hasKey:"hasCrossContext"},{key:"app-stacked",glyph:BG,label:"stacked App rows",stateKey:"filterAppStacked",hasKey:"hasAppStacked"},{key:"security",glyph:OG,label:"security-related rows",stateKey:"filterSecurity",hasKey:"hasSecurityContrast"}],CL=new Set(["duplicates","cross-context","app-stacked","security"]),x_=class extends X{static properties={group:{type:String},hasComment:{attribute:!1},hasFix:{attribute:!1},hasFlagged:{attribute:!1},hasDuplicates:{attribute:!1},hasCrossContext:{attribute:!1},hasAppStacked:{attribute:!1},hasSecurityContrast:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.group="marks",this.hasComment=!1,this.hasFix=!1,this.hasFlagged=!1,this.hasDuplicates=!1,this.hasCrossContext=!1,this.hasAppStacked=!1,this.hasSecurityContrast=!1}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":this.group==="context"?"Finding row filters":"Annotation filter"})}render(){let t=NG.filter(n=>this.group==="context"===CL.has(n.key)).filter(n=>n.key==="security"?this.hasSecurityContrast:n.key==="duplicates"?!l.currentWorkspace&&(this.hasDuplicates||l[n.stateKey]):this[n.hasKey]||l[n.stateKey]);if(t.length===0)return m;let r=n=>{let o=l[n.stateKey],i=CL.has(n.key)?n.label:`${n.label} findings`,s=o==="with"?`Showing only ${i} \u2014 click to exclude them`:o==="without"?`Excluding ${i} \u2014 click to clear`:`Show only ${i}`;return d`<button type="button" class="${z({"annotation-chip":!0,"sel-with":o==="with","sel-without":o==="without"})}" aria-label="${s}" aria-pressed="${String(o!=="")}" @click="${()=>this._toggle(n.key)}">${n.glyph}</button>`};return d`${t.map(r)}`}_toggle(t){this.dispatchEvent(new CustomEvent("annotation-filter-toggle",{detail:{key:t},bubbles:!0,composed:!0}))}};customElements.define("annotation-filter",x_);T();He();Re();U();var PG=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],$_=class extends X{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Filter by severity"})}render(){let t=this.kind==="graph"?new Set(this.selected):l.filterSeverities,r=PG.filter(([n])=>(this.counts[n]??0)||t.has(n));return r.length===0?m:d`${r.map(([n,o])=>{let i=this.counts[n]??0,s=t.has(n);return d`<button type="button" class="${z({"sev-chip":!0,[n]:!0,active:s})}" aria-pressed="${String(s)}" @click="${()=>this._toggle(n)}"><span class="sd"></span><span class="name">${o}</span><span class="n">${i}</span></button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("severity-toggle",{detail:{severity:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("severity-chips",$_);T();He();Re();U();var DG=[["corrected","Corrected","Show corrected severities (application-specific re-ratings)"],["original","Original",m]],__=class extends X{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Severity display mode"})}render(){let t=l.severityMode;return d`<span class="severity-mode-label">Severity</span><span class="severity-mode-chips">${DG.map(([r,n,o])=>{let i=t===r;return d`<button type="button" class="${z({"severity-mode-chip":!0,active:i})}" aria-pressed="${String(i)}" data-tooltip="${o}" @click="${()=>this._select(r)}">${n}</button>`})}</span>`}_select(t){t!==l.severityMode&&this.dispatchEvent(new CustomEvent("severity-mode-change",{detail:{mode:t},bubbles:!0,composed:!0}))}};customElements.define("severity-mode-switch",__);T();He();Re();U();var zG=d`<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.8 14.4 5 8 8.2 1.6 5z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/><path d="M2.6 8 8 10.7 13.4 8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.6 11 8 13.7 13.4 11" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>`,EL="Show underlying code findings",UG=d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5.5v2h10v-2M8 7.5v3"/><rect x="1" y="1.5" width="4" height="4" rx=".6"/><rect x="11" y="1.5" width="4" height="4" rx=".6"/><rect x="6" y="10.5" width="4" height="4" rx=".6"/></svg>`,ML="Show only upstream dependency findings",S_=class extends X{static properties={canDrop:{type:Boolean,attribute:"can-drop"},canDetail:{type:Boolean,attribute:"can-detail"},canUpstream:{type:Boolean,attribute:"can-upstream"},upstreamDisabled:{type:Boolean,attribute:"upstream-disabled"}};createRenderRoot(){return this}constructor(){super(),this.canDrop=!1,this.canDetail=!1,this.canUpstream=!1,this.upstreamDisabled=!1}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Revalidation layer"})}render(){let t=l.revalidateConflicts.size,r=t>0?d`<button type="button" class="revalidation-toggle revalidation-conflicts" aria-haspopup="dialog" aria-label="${`View ${t} revalidation conflict${t===1?"":"s"}`}" @click="${this._openConflicts}">${t} ${t===1?"conflict":"conflicts"}</button>`:m,n=l.showRevalidation!==!1,o=n&&l.revalidationDetailed===!0,i=l.upstreamOnly===!0,s=i&&!this.upstreamDisabled;return d`${r}${t===0&&this.canDrop?d`<mode-switch class="revalidation-toggle" label="App" borderless .checked="${n}" accessible-label="App view — hide the issues the revalidation pass ruled out" .disabled="${i}" @click="${this._toggle}"></mode-switch>`:m}${t===0&&this.canDrop&&this.canDetail?d`<button type="button" class="${z({"revalidation-detail":!0,on:o})}" aria-pressed="${String(o)}" aria-label="${EL}" data-tooltip="${EL}" ?disabled="${!n||i}" @click="${this._toggleDetail}">${zG}</button>`:m}${this.canUpstream?d`<button type="button" class="${z({"revalidation-upstream":!0,on:s})}" aria-pressed="${String(s)}" aria-label="${ML}" data-tooltip="${ML}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${UG}</button>`:m}`}_toggle=()=>{this.dispatchEvent(new CustomEvent("revalidation-change",{detail:{on:l.showRevalidation===!1},bubbles:!0,composed:!0}))};_openConflicts=()=>{this.dispatchEvent(new CustomEvent("revalidation-conflicts-open",{bubbles:!0,composed:!0}))};_toggleDetail=()=>{this.dispatchEvent(new CustomEvent("revalidation-detail-change",{detail:{on:l.revalidationDetailed!==!0},bubbles:!0,composed:!0}))};_toggleUpstream=()=>{this.upstreamDisabled||this.dispatchEvent(new CustomEvent("upstream-only-change",{detail:{on:l.upstreamOnly!==!0},bubbles:!0,composed:!0}))}};customElements.define("revalidation-switch",S_);uw();var RL=`:host{display:inline-flex;flex-shrink:0;vertical-align:middle;--switch-track-width: 26px;--switch-track-height: 14px}button,.checkbox-mode{align-items:center;gap:8px;box-sizing:border-box;height:30px;margin:0;padding:0 .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:transparent;color:var(--muted);font:inherit;font-size:.78rem;font-weight:500;line-height:1;white-space:nowrap;cursor:default}button{display:var(--switch-button-display, inline-flex);&:hover:not(:disabled){color:var(--text);background:rgb(from var(--text) r g b / .04)}&[aria-pressed=true]{color:var(--text)}&:disabled{opacity:.4}&:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}}.checkbox-mode{display:var(--switch-checkbox-display, none);border:0;color:var(--text);&:has(:disabled){opacity:.4}& input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}}.track{position:relative;flex-shrink:0;width:var(--switch-track-width);height:var(--switch-track-height);background:var(--border);border-radius:var(--ui-radius, 8px);transition:background .15s;&:after{content:"";position:absolute;top:2px;left:2px;width:calc(var(--switch-track-height) - 4px);height:calc(var(--switch-track-height) - 4px);border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}}button[aria-pressed=true] .track{background:color-mix(in oklch,var(--accent) 22%,transparent);&:after{transform:translate(calc(var(--switch-track-width) - var(--switch-track-height)));background:var(--accent)}}:host([borderless]) :is(button,.checkbox-mode){height:100%;border:0;border-radius:0}:host([compact]){--switch-track-width: 22px;--switch-track-height: 12px}:host([compact]) :is(button,.checkbox-mode){height:auto;gap:7px;padding:2px 8px;border-radius:var(--ui-radius, 6px);font-size:.68rem;line-height:1.2}
|
|
215
|
+
`;var C_=class extends T3{static properties={checked:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},label:{type:String},accessibleLabel:{type:String,attribute:"accessible-label"}};static styles=F3(RL);constructor(){super(),this.checked=!1,this.disabled=!1,this.label="",this.accessibleLabel=""}_checkboxClick(t){(this.disabled||t.target.tagName!=="INPUT")&&t.stopPropagation()}render(){return lu`<button type="button" part="button" aria-pressed="${String(this.checked)}" aria-label="${this.accessibleLabel||this.label}" ?disabled="${this.disabled}"><span>${this.label}</span><span class="track" part="track" aria-hidden="true"></span></button> <label class="checkbox-mode" @click="${this._checkboxClick}"><input type="checkbox" part="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" aria-label="${this.accessibleLabel||this.label}"> <span>${this.label}</span></label>`}};customElements.get("mode-switch")||customElements.define("mode-switch",C_);Re();U();var jG=d`<svg class="trash-icon" viewBox="0 0 16 16" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h10M6.5 4V2.5h3V4M5 4l.7 9h4.6L11 4"/></svg>`,E_=class extends X{createRenderRoot(){return this}render(){let t=l.currentView==="bundles"&&l.selectedBundle,r=!l.currentFile&&!t;return d`<button type="button" class="danger" ?disabled="${r}">${jG}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",E_);T();He();Re();U();var VG=d`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 6h12v7a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6Z"/><path d="M2 6l1.6-3.3A1.3 1.3 0 0 1 4.8 2h6.4a1.3 1.3 0 0 1 1.2.7L14 6"/><path d="M8 2v4"/></svg>`,WG=d`<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="4" y1="2.5" y2="10"/><circle cx="12" cy="4" r="2"/><circle cx="4" cy="12" r="2"/><path d="M12 6a6 6 0 0 1-6 6"/></svg>`,GG={packages:{title:"Show packages",icon:VG,view:"packages"},repositories:{title:"Show repositories",icon:WG,view:"repositories"}},M_=class extends X{static properties={kind:{type:String},count:{type:Number}};createRenderRoot(){return this}constructor(){super(),this.kind="",this.count=0}render(){if(this.count===0)return m;let t=oo("sidebar-view-button",GG,this.kind);if(!t)return m;let r=l.currentView===t.view;return d`<button type="button" class="${z({"sidebar-view-btn":!0,active:r})}" data-tooltip="${t.title}" aria-label="${t.title}">${t.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",M_);T();He();Re();U();var KG=["invalid","deleted"],qG={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},R_=class extends X{static properties={counts:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.kind=""}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Triage view"})}render(){let t=oo("slide-triage-tabs",qG,this.kind);if(!t)return m;let r=l[t.stateKey],n=KG.filter(o=>(this.counts[o]??0)>0||r===o);return n.length===0?m:d`${n.map(o=>{let i=r===o,s=this.counts[o]??0;return d`<button type="button" class="${z({"triage-state-btn":!0,[`triage-state-${o}`]:!0,active:i})}" aria-pressed="${String(i)}" @click="${()=>this._toggle(o)}">${o.charAt(0).toUpperCase()+o.slice(1)} (${s})</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("slide-triage-toggle",{detail:{kind:this.kind,value:t},bubbles:!0,composed:!0}))}};customElements.define("slide-triage-tabs",R_);He();Re();U();var YG=[["own","Sources"],["modules","Deps"]],A_=class extends X{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Source filter"})}render(){return d`${YG.map(([t,r])=>{let n=l.filterSources.has(t);return d`<button type="button" class="${z({"source-chip":!0,active:n})}" aria-pressed="${String(n)}" @click="${()=>this._toggle(t)}">${r}</button>`})}`}_toggle(t){this.dispatchEvent(new CustomEvent("source-toggle",{detail:{source:t},bubbles:!0,composed:!0}))}};customElements.define("source-filter",A_);T();He();dr();Re();U();var XG=d`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>`,JG=d`<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h10v4"/></svg>`,ZG={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},I_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=oo("toolbar-search",ZG,this.kind);if(!t)return m;let r=l[t.stateKey];return d`${XG} <input type="text" aria-label="${t.placeholder}" placeholder="${t.placeholder}" .value="${ke(r)}" @input="${this._onInput}"> ${this.kind==="findings"&&r?this._negateToggle():m}`}_negateToggle(){let t=l.filterIncludeNegate;return d`<button type="button" class="${z({"search-negate-btn":!0,active:t})}" data-tooltip="${t?"Negation on \u2014 click to undo":"Negate: show non-matching findings"}" aria-label="Negate search" aria-pressed="${String(t)}" @click="${this._onToggleNegate}">${JG}</button>`}_onInput=t=>{this.dispatchEvent(new CustomEvent("search-input",{detail:{kind:this.kind,value:t.target.value},bubbles:!0,composed:!0}))};_onToggleNegate=()=>{this.dispatchEvent(new CustomEvent("search-negate-toggle",{bubbles:!0,composed:!0}))}};customElements.define("toolbar-search",I_);Re();U();pn();he();sg();var T_=class extends X{static properties={options:{attribute:!1}};createRenderRoot(){return this}constructor(){super(),this.options=[]}render(){let t=[{value:"",label:"All repositories",special:!0,reset:!0},...this.options.map(r=>({value:r??Js,label:r==null?"(no repo)":it(r),special:r==null}))];return d`<repository-selector variant="filter" label="Filter by repository" .options="${t}" .value="${l.filterRepo}" @repository-change="${r=>this.dispatchEvent(new CustomEvent("repo-change",{detail:{value:r.detail.value},bubbles:!0,composed:!0}))}"></repository-selector>`}};customElements.define("repo-filter",T_);T();dr();He();Re();he();U();var AL={"":{cls:"included",label:"+ Partial",title:"Confirmed, partial and revalidation rows \u2014 click for full confirmations only"},exclude:{cls:"excluded",label:"\u2212 Partial",title:"Full confirmations only \u2014 click to show the partial ones only"},only:{cls:"only",label:"only Partial",title:"Partial confirmations only \u2014 click to show all of them again"}},L_=class extends X{static properties={options:{attribute:!1},hasPartial:{type:Boolean,attribute:"has-partial"}};createRenderRoot(){return this}constructor(){super(),this.options=[],this.hasPartial=!1}render(){return d`<select class="sort-select" aria-label="Filter by revalidation outcome" .value="${ke(l.filterRevalidate)}" @change="${this._onChange}"><option value="" hidden ?selected="${l.filterRevalidate===""}"></option><option value="">Confidence</option>${this.options.map(t=>d`<option value="${t.value}" ?selected="${l.filterRevalidate===t.value}">${t.label}</option>`)}</select> ${this.hasPartial&&l.filterRevalidate==="confirmed"?this._partialChip():m}`}_partialChip(){let t=AL[l.filterPartial]??AL[""];return d`<button type="button" class="${z({"partial-cycle":!0,[t.cls]:!0})}" data-tooltip="${t.title}" @click="${this._onPartial}">${t.label}</button>`}_onPartial=()=>{let t=Gh.indexOf(l.filterPartial),r=Gh[(t+1)%Gh.length];this.dispatchEvent(new CustomEvent("partial-change",{detail:{value:r},bubbles:!0,composed:!0}))};_onChange=t=>{let{value:r}=t.target;r||(t.target.selectedIndex=0),this.dispatchEvent(new CustomEvent("revalidate-change",{detail:{value:r},bubbles:!0,composed:!0}))}};customElements.define("revalidate-filter",L_);T();Re();U();var IL=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],F_=class extends X{static properties={counts:{attribute:!1},selected:{attribute:!1},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.selected=[],this.kind="findings"}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Filter by mark color"})}render(){let t=this.kind==="graph"?new Set(this.selected):l.filterColors;return IL.some(([n])=>(this.counts[n]??0)||t.has(n))?d`${IL.map(([n,o,i])=>{let s=this.counts[n]??0,a=t.has(n);return d`<button type="button" class="${a?"active":""}" aria-label="${`${i} (${s})`}" data-tooltip="${`${i} (${s})`}" aria-pressed="${String(a)}" @click="${()=>this._toggle(n)}"><span class="${`td ${o}`}"></span><span class="count">${s}</span></button>`})}`:m}_toggle(t){this.dispatchEvent(new CustomEvent("color-toggle",{detail:{color:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("triage-filter",F_);T();He();Re();U();var QG=["inprogress","fixed","invalid","deleted","ignored"],B_={graph:"graph2-triage-selector",packages:"packages-triage-selector"},eK={inprogress:"In progress"},tK=e=>eK[e]??e.charAt(0).toUpperCase()+e.slice(1),O_=class extends X{static properties={counts:{attribute:!1},states:{attribute:!1},variant:{type:String}};createRenderRoot(){return this}constructor(){super(),this.counts={},this.states=null,this.variant=""}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Triage view"})}render(){let t=this.states??QG,r=t.reduce((i,s)=>i+(this.counts[s]??0),0),n=this.variant?B_[this.variant]:null;this.variant&&n===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(B_).map(i=>JSON.stringify(i)).join(", ")} or "".`);for(let i of Object.values(B_))this.classList.toggle(i,i===n);let o=r===0&&!l.shownTriage;return this.classList.toggle("is-empty",o),o?m:d`${t.map(i=>{let s=this.counts[i]??0,a=l.shownTriage===i;if(s===0&&!a)return m;let c=tK(i);return d`<button type="button" class="${z({"triage-state-btn":!0,[`triage-state-${i}`]:!0,active:a})}" data-triage-show="${i}" aria-pressed="${String(a)}"><span>${c}</span><span class="n">${s}</span></button>`})}`}};customElements.define("triage-selector",O_);He();Re();U();Je();gt();var rK={table:d`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" x2="21" y1="9" y2="9"/><line x1="3" x2="21" y1="15" y2="15"/><line x1="9" x2="9" y1="3" y2="21"/></svg>`,list:d`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="3" x2="21" y1="6" y2="6"/><line x1="3" x2="21" y1="12" y2="12"/><line x1="3" x2="21" y1="18" y2="18"/></svg>`,grouped:d`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="2" y="1.5" width="12" height="2" rx=".4"/><rect x="5" y="4.4" width="9" height="1.3"/><rect x="5" y="6.2" width="9" height="1.3"/><rect x="2" y="8.5" width="12" height="2" rx=".4"/><rect x="5" y="11.4" width="9" height="1.3"/><rect x="5" y="13.2" width="9" height="1.3"/></svg>`,kanban:d`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="6.1" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="10.7" y="2" width="3.8" height="12" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="2.4" y="3.6" width="2" height="1.4" rx=".2"/><rect x="2.4" y="5.6" width="2" height="1.4" rx=".2"/><rect x="7" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="3.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="5.6" width="2" height="1.4" rx=".2"/><rect x="11.6" y="7.6" width="2" height="1.4" rx=".2"/></svg>`,focus:d`<svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><rect x="1.5" y="2.5" width="8.5" height="11" rx=".6" fill="none" stroke="currentColor" stroke-width="1"/><rect x="3" y="4.4" width="5.5" height="1"/><rect x="3" y="6.4" width="5.5" height="1"/><rect x="3" y="8.4" width="3.5" height="1"/><rect x="11.2" y="2.5" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".55"/><rect x="11.2" y="5.7" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".35"/><rect x="11.2" y="8.9" width="3.3" height="2.5" rx=".4" fill="currentColor" opacity=".22"/></svg>`,graph:d`${V(f3)}`},nK={table:"Table view (compact rows, click a row to expand)",list:"List view (flat, one card per finding)",grouped:"List view, grouped by file",focus:"Focus view (one finding centered + a queue of next findings)",kanban:"Kanban board, columns grouped by triage status",graph:"Graph view (canvas with imports / exports)"},N_=["kanban","focus","table","list","grouped","graph"],P_=class extends X{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=N_.join(","),this.kind="findings"}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"View mode"})}render(){let t=this.kind==="files"?l.filesViewMode:l.viewMode,r=this.modes.split(",").map(o=>o.trim()).filter(o=>N_.includes(o)),n=r.length>0?r:N_;return d`${n.map(o=>d`<button type="button" class="${z({"view-mode-btn":!0,active:t===o})}" aria-label="${nK[o]}" aria-pressed="${String(t===o)}" @click="${()=>this._select(o,t)}">${rK[o]}</button>`)}`}_select(t,r){t!==r&&this.dispatchEvent(new CustomEvent("view-mode-change",{detail:{mode:t,kind:this.kind},bubbles:!0,composed:!0}))}};customElements.define("view-mode-buttons",P_);T();ao();He();Gr();lg();he();ia();Ql();Zu();var BL=6,TL=14,nb=2,LL=24,bp=4,oK=1.5,ob=new Map,ib=new Map,FL="treemap";function iK(e){let t=/^#?([0-9a-f]{6})$/iu.exec(e);if(!t)return"#fff";let r=parseInt(t[1],16),n=r>>16&255,o=r>>8&255,i=r&255;return(.2126*n+.7152*o+.0722*i)/255>.6?"#1a1a1a":"#fff"}function sK(e,t,r,n){let o=r*r,i=n*n;return Math.max(i*e/o,o/(i*t))}function OL(e,t){let r=[],n=e.filter(f=>f.value>0),{x:o,y:i,w:s,h:a}=t;if(n.length===0||s<=0||a<=0)return r;let c=0;for(let f of n)c+=f.value;let u=s*a/c,p=0;for(;p<n.length&&s>.5&&a>.5;){let f=Math.min(s,a),h=p,g=0,b=0,v=1/0,x=1/0;for(;h<n.length;){let y=n[h].value*u,$=y>b?y:b,_=y<v?y:v,S=sK($,_,g+y,f);if(h===p||S<=x)x=S,g+=y,b=$,v=_,h++;else break}let w=g/f;if(s>=a){let y=i;for(let $=p;$<h;$++){let _=$===h-1?i+a-y:n[$].value*u/w;r.push({node:n[$],x:o,y,w,h:_}),y+=_}o+=w,s-=w}else{let y=o;for(let $=p;$<h;$++){let _=$===h-1?o+s-y:n[$].value*u/w;r.push({node:n[$],x:y,y:i,w:_,h:w}),y+=_}i+=w,a-=w}p=h}return r}function NL(e){for(;e.children&&e.children.size===1;){let t=e.children.values().next().value;if(t.isFile)break;e.name=`${e.name}/${t.name}`,e.children=t.children}if(e.children)for(let t of e.children.values())NL(t)}function PL(e,t,r,n){if(e.path=e.name?t?`${t}/${e.name}`:e.name:t,e.parent=r,e.isFile)return e.count=1,e.value;n.set(e.path,e);let o=0,i=0,s;for(let a of e.children.values())o+=PL(a,e.path,e,n),i+=a.count,s===void 0?s=a.pkg:s!==a.pkg&&(s=null);return e.value=o,e.count=i,e.pkg=s??null,o}function DL(e,t,r,n,o,i,s){if(n<bp||o<bp)return;if(e.isFile){s.push({kind:"file",node:e,x:t,y:r,w:n,h:o});return}if(!(i<BL&&n>=LL&&o>=LL&&e.children.size>0)){s.push({kind:"agg",node:e,x:t,y:r,w:n,h:o});return}s.push({kind:"dir",node:e,x:t,y:r,w:n,h:o});let c=o>=TL+bp+nb?TL:0,u=t+nb,p=r+c,f=n-nb*2,h=o-c-nb;if(f<bp||h<bp)return;let g=[...e.children.values()].toSorted((b,v)=>v.value-b.value);for(let b of OL(g,{x:u,y:p,w:f,h}))DL(b.node,b.x,b.y,b.w,b.h,i+1,s)}function D_(e,t){let r=e/(t||1)*100;return r>=10?r.toFixed(0):r.toFixed(r>=1?1:2)}function zL(e,t){if(t<=0||e.isFile||!e.children||e.children.size===0)return 0;let r=1;for(let n of e.children.values()){if(r>=t)break;let o=1+zL(n,t-1);o>r&&(r=o)}return r}function aK(e,t,r,n,o,i){let s=Math.min(i-o,Math.PI*2-1e-4),a=o+s,c=s>Math.PI?1:0,u=Math.cos(o),p=Math.sin(o),f=Math.cos(a),h=Math.sin(a),g=b=>b.toFixed(2);return`M${g(e+n*u)} ${g(t+n*p)}A${g(n)} ${g(n)} 0 ${c} 1 ${g(e+n*f)} ${g(t+n*h)}L${g(e+r*f)} ${g(t+r*h)}A${g(r)} ${g(r)} 0 ${c} 0 ${g(e+r*u)} ${g(t+r*p)}Z`}function lK(e,t){let r=Math.max(4,Math.floor(t/6.4));return e.length>r?`${e.slice(0,r-1)}\u2026`:e}var z_=class extends J{static properties={details:{attribute:!1},_w:{state:!0},_h:{state:!0},_focus:{state:!0},_mode:{state:!0},_reason:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this._w=0,this._h=0,this._root=null,this._focus=[],this._mode=FL,this._reason="",this._reasons=new Map,this._dirByPath=new Map,this._status="loading",this._meta={total:0,prefix:""},this._ro=null,this._plot=null,this._tooltip=null,this._ttCell=null}willUpdate(t){t.has("details")&&(this._reason=ib.get(this.details?.integrity)??""),(t.has("details")||t.has("_reason"))&&this._rebuild()}firstUpdated(){this._plot=this.querySelector(".bundle-treemap-plot"),this._tooltip=this.querySelector(".bundle-treemap-tooltip"),!(!this._plot||typeof ResizeObserver>"u")&&(this._ro=new ResizeObserver(t=>{let r=t[0]?.contentRect;if(!r)return;let n=Math.floor(r.width),o=Math.floor(r.height);(n!==this._w||o!==this._h)&&(this._w=n,this._h=o)}),this._ro.observe(this._plot))}disconnectedCallback(){super.disconnectedCallback(),this._ro&&(this._ro.disconnect(),this._ro=null)}_onPointerMove(t){let r=t.target.closest(".bundle-treemap-node");if(!r||!this._tooltip){this._hideTooltip();return}if(r!==this._ttCell){this._ttCell=r;let n=r.dataset;ae(d`<div class="bundle-treemap-tt-path">${n.ttPath}</div>${n.ttPkg?d`<div class="bundle-treemap-tt-head"><span class="bundle-treemap-tt-dot" style="${`background:${n.ttColor}`}"></span> <span class="bundle-treemap-tt-pkg">${n.ttPkg}</span></div>`:""}<div class="bundle-treemap-tt-meta">${n.ttMeta}</div>`,this._tooltip)}this._positionTooltip(t.clientX,t.clientY)}_onPointerLeave(){this._hideTooltip()}_positionTooltip(t,r){let n=this._tooltip;if(!n||!this._plot)return;n.classList.add("show");let o=this._plot.getBoundingClientRect(),i=t-o.left,s=r-o.top,a=12,c=i+a;c+n.offsetWidth>o.width-4&&(c=i-n.offsetWidth-a),c<4&&(c=4);let u=s+a;u+n.offsetHeight>o.height-4&&(u=s-n.offsetHeight-a),u<4&&(u=4),n.style.left=`${c}px`,n.style.top=`${u}px`}_hideTooltip(){this._ttCell=null,this._tooltip&&this._tooltip.classList.remove("show")}_rebuild(){if(this._root=null,this._focus=[],this._dirByPath=new Map,this._reasons=new Map,this._meta={total:0,prefix:""},this._hideTooltip(),!this.details){this._status="loading";return}let t=Xt(this.details),r=[...t.keys()].filter(h=>t.get(h)!==null);if(r.length===0){this._status="empty";return}this._reasons=Po(this.details,r),this._reasons.has(this._reason)||(this._reason="",ib.delete(this.details.integrity));let n=this._reasons.get(this._reason),o=Wr(this.details),i=Nl(this.details),{prefix:s,stripped:a}=Sr(r),c={name:"",children:new Map,value:0,isFile:!1},u=0;for(let h=0;h<r.length;h++){if(n&&!n.has(r[h]))continue;let g=t.get(r[h]);if(g<=0)continue;let b=a[h].split("/"),v=c,x=!1;for(let $=0;$<b.length-1;$++){let _=v.children.get(b[$]);if(_&&_.isFile){x=!0;break}_||(_={name:b[$],children:new Map,value:0,isFile:!1},v.children.set(b[$],_)),v=_}if(x)continue;let w=b.at(-1),y=v.children.get(w);if(!(y&&!y.isFile)){if(!y){let $=vt(a[h],{packageDir:o?.get(r[h])});y={name:w,isFile:!0,value:0,origPath:r[h],pkg:$,resource:i.get(r[h])==="resource"},v.children.set(w,y)}y.value+=g,u+=g}}if(u===0){this._status="empty";return}for(let h of c.children.values())NL(h);let p=new Map;PL(c,"",null,p),this._root=c,this._dirByPath=p,this._meta={total:u,prefix:s},this._status="ok";let f=this.details?.integrity?ob.get(this.details.integrity):null;if(f){let h=p.get(f);h?this._focus=this._chainTo(h):ob.delete(this.details.integrity)}}get _focusNode(){return this._focus.length>0?this._focus.at(-1):this._root}_chainTo(t){let r=[];for(let n=t;n&&n!==this._root;n=n.parent)r.push(n);return r.reverse(),r}_rememberFocus(){let t=this.details?.integrity;if(!t)return;let r=this._focus.at(-1)?.path;r?ob.set(t,r):ob.delete(t)}_drillInto(t){!t||t.isFile||!t.children||t.children.size===0||(this._focus=this._chainTo(t),this._rememberFocus(),this._hideTooltip())}_focusTo(t){let r=t<0?[]:this._focus.slice(0,t+1);r.length!==this._focus.length&&(this._focus=r,this._rememberFocus(),this._hideTooltip())}_toggleMode(){this._mode=this._mode==="sunburst"?"treemap":"sunburst",FL=this._mode,this._hideTooltip()}_changeReason(t){this._reason=t.detail.value.replace(/^reason:/u,"");let r=this.details?.integrity;r&&(this._reason?ib.set(r,this._reason):ib.delete(r))}_onPlotClick(t){let r=t.target.closest("[data-treemap-into]");if(!r)return;let n=this._dirByPath.get(r.dataset.treemapInto);n&&this._drillInto(n)}_renderCrumbs(){let t=this._focus,r=t.length===0,n=t.slice(0,-1),o=r?null:t.at(-1);return d`<nav class="bundle-treemap-crumbs" aria-label="Treemap location"><span class="bundle-treemap-crumbs-lead"><button type="button" class="${z({"bundle-treemap-crumb-home":!0,"at-root":r})}" @click="${()=>this._focusTo(-1)}">Source ${this._mode==="sunburst"?"sunburst":"treemap"}</button> ${n.map((i,s)=>d`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><button type="button" class="bundle-treemap-crumb" @click="${()=>this._focusTo(s)}" data-tooltip="${i.path}">${i.name}</button>`)} </span>${o?d`<span class="bundle-treemap-crumb-sep" aria-hidden="true">›</span><span class="bundle-treemap-crumb-current" aria-current="location" title="${o.path}">${o.name}</span>`:""}</nav>`}_cell(t){let r=D_(t.node.value,this._meta.total),n={left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`},o=`${t.node.count} ${t.node.count===1?"file":"files"}`;if(t.kind==="dir")return d`<div class="bundle-treemap-node bundle-treemap-dir" style="${Me(n)}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-meta="${`${we(t.node.value)} \xB7 ${o} \xB7 ${r}%`}"><span class="bundle-treemap-dirname">${t.node.name}</span></div>`;let i=t.node.pkg??vt(t.node.path),s=cr(i),a=Me({...n,background:s,color:iK(s)}),c=eo(i);return t.kind==="agg"?d`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-agg" style="${a}" data-treemap-into="${t.node.path}" data-tt-path="${`${t.node.path}/`}" data-tt-pkg="${c}" data-tt-color="${s}" data-tt-meta="${`${we(t.node.value)} \xB7 ${o} \xB7 ${r}%`}"><span class="bundle-treemap-label">${t.node.name}/</span></div>`:d`<div class="bundle-treemap-node bundle-treemap-leaf bundle-treemap-file" style="${a}" data-bundle-view-source="${t.node.resource?m:t.node.origPath}" data-tt-path="${t.node.path}" data-tt-pkg="${c}" data-tt-color="${s}" data-tt-meta="${`${we(t.node.value)} \xB7 ${r}% of bundle`}"><span class="bundle-treemap-label">${t.node.name}</span></div>`}_arc(t,r,n){let o=D_(t.value,n),i=t.pkg??vt(t.path),s=cr(i),a=eo(i);if(t.isFile)return Mt`<path
|
|
216
|
+
class="bundle-treemap-node bundle-treemap-arc"
|
|
217
|
+
d=${r}
|
|
218
|
+
fill=${s}
|
|
219
|
+
data-bundle-view-source=${t.resource?m:t.origPath}
|
|
220
|
+
data-tt-path=${t.path}
|
|
221
|
+
data-tt-pkg=${a}
|
|
222
|
+
data-tt-color=${s}
|
|
223
|
+
data-tt-meta=${`${we(t.value)} \xB7 ${o}% of bundle`}
|
|
224
|
+
></path>`;let c=`${t.count} ${t.count===1?"file":"files"}`;return Mt`<path
|
|
225
|
+
class="bundle-treemap-node bundle-treemap-arc"
|
|
226
|
+
d=${r}
|
|
227
|
+
fill=${s}
|
|
228
|
+
data-treemap-into=${t.path}
|
|
229
|
+
data-tt-path=${`${t.path}/`}
|
|
230
|
+
data-tt-pkg=${t.pkg?a:m}
|
|
231
|
+
data-tt-color=${t.pkg?s:m}
|
|
232
|
+
data-tt-meta=${`${we(t.value)} \xB7 ${c} \xB7 ${o}%`}
|
|
233
|
+
></path>`}_renderSunburst(t){let r=this._w,n=this._h,o=r/2,i=n/2,s=Math.min(r,n)/2-6;if(s<30)return m;let a=zL(t,BL),c=Math.min(Math.max(s*.18,26),s*.45),u=(s-c)/a,p=this._meta.total||1,f=[],h=(w,y,$,_)=>{let S=[...w.children.values()].toSorted((P,L)=>L.value-P.value),M=$-y,R=y;for(let P of S){let L=M*(P.value/w.value),A=c+(_-1)*u,W=A+u;L*W>=oK&&(f.push(this._arc(P,aK(o,i,A,W,R,R+L),p)),!P.isFile&&_<a&&P.children.size>0&&h(P,R,R+L,_+1)),R+=L}};h(t,-Math.PI/2,Math.PI*1.5,1);let g=this._focus.length>0,b=Math.max(c-4,10),v=g?Mt`<circle
|
|
234
|
+
class="bundle-treemap-node bundle-treemap-center"
|
|
235
|
+
cx=${o} cy=${i} r=${b}
|
|
236
|
+
data-treemap-into=${t.parent.path}
|
|
237
|
+
data-tt-path=${`${t.path}/`}
|
|
238
|
+
data-tt-meta=${`${we(t.value)} \xB7 ${t.count} ${t.count===1?"file":"files"} \xB7 ${D_(t.value,p)}%`}
|
|
239
|
+
></circle>`:Mt`<circle class="bundle-treemap-center" cx=${o} cy=${i} r=${b}></circle>`,x=Mt`<text class="bundle-treemap-center-label" x=${o} y=${i} text-anchor="middle">
|
|
240
|
+
${g?Mt`<tspan x=${o} dy="-0.3em">${lK(t.name,b*2-12)}</tspan><tspan class="bundle-treemap-center-sub" x=${o} dy="1.5em">${we(t.value)}</tspan>`:Mt`<tspan x=${o} dy="0.35em">${we(t.value)}</tspan>`}
|
|
241
|
+
</text>`;return d`<svg class="bundle-treemap-sunburst" width="${r}" height="${n}" viewBox="${`0 0 ${r} ${n}`}">${f}${v}${x}</svg>`}render(){let t=this._focusNode,r=this._mode==="sunburst",n=this._status==="ok"&&t&&t.children&&this._w>0&&this._h>0,o=[];if(n&&!r){let c=[...t.children.values()].toSorted((u,p)=>p.value-u.value);for(let u of OL(c,{x:0,y:0,w:this._w,h:this._h}))DL(u.node,u.x,u.y,u.w,u.h,1,o)}let{prefix:i}=this._meta,s=t?t.count:0,a=t?t.value:0;return d`<header class="bundle-treemap-head">${this._renderCrumbs()} <span class="bundle-treemap-head-right"><span class="bundle-treemap-sub">${s} ${s===1?"file":"files"} · ${we(a)}${i?d`· <span class="mono">${i}</span>`:""}</span> ${this._reasons.size>0?d`<bundle-scope-selector compact="compact" .reasons="${[...this._reasons.keys()].map(c=>({id:`reason:${c}`,label:c}))}" .value="${this._reason?`reason:${this._reason}`:""}" label="Filter files" @scope-change="${this._changeReason}"></bundle-scope-selector>`:m}<mode-switch compact="compact" label="Sunburst" .checked="${r}" accessible-label="Toggle sunburst view" @click="${this._toggleMode}"></mode-switch></span></header><div class="bundle-treemap-plot" @click="${this._onPlotClick}" @pointermove="${this._onPointerMove}" @pointerleave="${this._onPointerLeave}">${this._status==="loading"?d`<div class="bundle-treemap-empty">Loading…</div>`:this._status==="empty"?d`<div class="bundle-treemap-empty">This bundle doesn't carry any source content.</div>`:r?n?this._renderSunburst(t):m:o.map(c=>this._cell(c))}<div class="bundle-treemap-tooltip"></div></div>`}};customElements.define("bundle-treemap",z_);T();Pt();ao();U();he();ia();Ql();Gr();Io();Qk();Gr();function jL(e,t){let r=[];for(let[n,o]of e){let i=t.get(n);if(i&&o.target!==i.target){let{target:s,...a}=o;r.push({...a,baseTarget:s,otherTarget:i.target})}}return r.sort((n,o)=>n.key.localeCompare(o.key)),{changed:r,totalChanges:r.length}}function sb(e){return Cu(e)??0}function cK(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data}function UL(e){return(t,r)=>Math.abs(r.delta)-Math.abs(t.delta)||t[e].localeCompare(r[e])}function ab(e){return(t,r)=>r.bytes-t.bytes||t[e].localeCompare(r[e])}function dK(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function VL(e,t,r){let n=[],o=[],i=[],s=0,a=0,c=0,u=0,p=0,f=0,h=new Map,g=y=>{let $=r(y),_=h.get($);return _||(_=dK(),h.set($,_)),_},b=new Set([...e.keys(),...t.keys()]);for(let y of b){let $=e.has(y),_=t.has(y),S=g(y);if($&&_){let M=e.get(y),R=t.get(y),P=cK(M,R),L=sb(M),A=P?L:sb(R);if(s+=L,a+=A,S.baseBytes+=L,S.otherBytes+=A,P)f++;else{let W=A-L;i.push({path:y,baseBytes:L,otherBytes:A,delta:W}),p+=W,S.changedFiles++}}else if($){let M=sb(e.get(y));s+=M,c+=M,S.baseBytes+=M,S.onlyBaseFiles++,n.push({path:y,bytes:M})}else{let M=sb(t.get(y));a+=M,u+=M,S.otherBytes+=M,S.onlyOtherFiles++,o.push({path:y,bytes:M})}}let v=[],x=[],w=[];for(let[y,$]of h){let _=$.baseBytes>0||$.onlyBaseFiles>0||$.changedFiles>0,S=$.otherBytes>0||$.onlyOtherFiles>0||$.changedFiles>0,M=$.onlyBaseFiles+$.onlyOtherFiles+$.changedFiles;_&&!S?v.push({pkg:y,bytes:$.baseBytes}):S&&!_?x.push({pkg:y,bytes:$.otherBytes}):(M>0||$.baseBytes!==$.otherBytes)&&w.push({pkg:y,baseBytes:$.baseBytes,otherBytes:$.otherBytes,delta:$.otherBytes-$.baseBytes})}return n.sort(ab("path")),o.sort(ab("path")),i.sort(UL("path")),v.sort(ab("pkg")),x.sort(ab("pkg")),w.sort(UL("pkg")),{totals:{baseFiles:e.size,baseBytes:s,otherFiles:t.size,otherBytes:a,onlyBaseFiles:n.length,onlyBaseBytes:c,onlyOtherFiles:o.length,onlyOtherBytes:u,changedFiles:i.length,changedDelta:p,unchangedFiles:f,fileDelta:t.size-e.size,byteDelta:a-s,identical:n.length===0&&o.length===0&&i.length===0},files:{onlyBase:n,onlyOther:o,changed:i},packages:{onlyBase:v,onlyOther:x,changed:w}}}function HL(e){let r=String(e).trim().split("+",1)[0],n=r.indexOf("-");return n===-1?{core:r,pre:""}:{core:r.slice(0,n),pre:r.slice(n+1)}}function vp(e,t){if(e===t)return 0;let r=HL(e),n=HL(t),o=r.core.split("."),i=n.core.split(".");for(let c=0;c<Math.max(o.length,i.length);c++){let u=Number(o[c]??0),p=Number(i[c]??0);if(Number.isNaN(u)||Number.isNaN(p))return e<t?-1:1;if(u!==p)return u<p?-1:1}if(r.pre===n.pre)return 0;if(!r.pre)return 1;if(!n.pre)return-1;let s=r.pre.split("."),a=n.pre.split(".");for(let c=0;c<Math.max(s.length,a.length);c++){let u=s[c],p=a[c];if(u===void 0)return-1;if(p===void 0)return 1;if(u===p)continue;let f=/^\d+$/u.test(u),h=/^\d+$/u.test(p);return f&&h?Number(u)<Number(p)?-1:1:f!==h?f?-1:1:u<p?-1:1}return 0}function uK(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function pK(e,t){let r=vp(t.at(-1),e.at(-1));return r>0?"up":r<0?"down":"changed"}function WL(e,t){let r=[],n=[],o=[],i=new Set([...e.keys(),...t.keys()]);for(let a of i){let c=e.get(a),u=t.get(a);if(c&&u){let p=[...c].toSorted(vp),f=[...u].toSorted(vp);if(uK(p,f))continue;r.push({pkg:a,baseVersions:p,otherVersions:f,direction:pK(p,f)})}else c?o.push({pkg:a,versions:[...c].toSorted(vp)}):n.push({pkg:a,versions:[...u].toSorted(vp)})}let s=(a,c)=>a.pkg.localeCompare(c.pkg);return r.sort(s),n.sort(s),o.sort(s),{updated:r,added:n,removed:o,totals:{baseDeps:e.size,otherDeps:t.size}}}Gr();function U_(...e){let t=new Set;for(let r of e){let n=hn(r);for(let[o,i]of Object.entries(r?.bundle?.reason??{}))Array.isArray(i)&&i.some(s=>n.has(s))&&t.add(o)}return[...t].toSorted().map(r=>({id:`reason:${r}`,label:r}))}function lb(e,t=""){let r=hn(e);if(!t)return r;let n=e?.bundle?.reason?.[t.replace(/^reason:/u,"")],o=new Set(Array.isArray(n)?n:[]);return new Map([...r].filter(([i])=>o.has(i)))}function H_(e,t=""){let r=new Map;if(e?.kind!=="stasis"||!e.bundle)return r;let n=t?hn(e):null,o=t?lb(e,t):null;for(let[i,s]of e.bundle.imports)for(let[a,c]of s)for(let[u,p]of c){let f=typeof p=="string"?[[null,p]]:p;for(let[h,g]of f){if(o&&!o.has(a)&&(n.has(a)||!o.has(g)))continue;let b=JSON.stringify([a,u,i,h]);r.set(b,{key:b,parent:a,specifier:u,conditions:i,platform:h,target:g})}}return r}T();Je();pe();var fK=/[ \t\n\v\f\r]/gu,hK=/[ \t\n\v\f\r]+/gu,GL=/[ \t\n\v\f\r]+$/u,KL=e=>e.replace(/[A-Z]/gu,t=>t.toLowerCase());function cb({ignoreCase:e=!1,whitespace:t="none"}={}){let r=null;return t==="all"?r=n=>n.replace(fK,""):t==="change"?r=n=>n.replace(GL,"").replace(hK," "):t==="trailing"&&(r=n=>n.replace(GL,"")),e?r?n=>KL(r(n)):KL:r}function Ji(e){let t=[];for(let r=0;r<e.length;){let n=e.indexOf(`
|
|
242
|
+
`,r),o=n<0?e.length:n+1;t.push(e.slice(r,o)),r=o}return t}var yc=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(?: ?(.*?))?\n?$/u,xa=/^\*{15,}(?: (.*?))?\n?$/u,db=/^\*{3} (\d+)(?:,(\d+))? \*{4}\n?$/u,yp=/^--- (\d+)(?:,(\d+))? ----\n?$/u,wc=/^(\d+)(?:,(\d+))?([acd])(\d+)(?:,(\d+))?[ \t]*\r?\n?$/u;var Xr=class extends Error{constructor(t,r){super(r===void 0?t:`${t} at line ${r+1}`),this.name="PatchError",this.line=r}},qL=(e,t)=>t===0?Number(e):Number(e)-1,j_=e=>e!==void 0&&e.startsWith("\\"),V_=e=>e.replace(/\n$/u,"");function W_(e){let t=Ji(e),r=[],n={old:null,new:null},o=!1;for(let i=0;i<t.length;){let s=t[i],a=YL(s,o);if(o=s.startsWith("***************")?!1:s.startsWith("*** "),a){n=a.names??{...n,[a.slot]:a.name},i++;continue}let c=yc.test(s)?"unified":xa.test(s)?"context":wc.test(s)?"normal":null;if(c===null){i++;continue}let u=[],p=wK[c];for(let f=p(t,i);f!==null&&(u.push(f.hunk),i=f.next,!(i>=t.length||YL(t[i],!1)));f=p(t,i));r.push({old:n.old,new:n.new,format:c,hunks:u,blocks:mK(u)}),n={old:null,new:null}}return r}function YL(e,t){let r=/^diff --git (\S+) (\S+)\n?$/u.exec(e);if(r)return{names:{old:r[1],new:r[2]}};if(db.test(e)||yp.test(e))return null;let n=/^(\*\*\* |--- |\+\+\+ )(.*?)(?:\t.*)?\n?$/u.exec(e);return n?n[1]==="--- "?{slot:t?"new":"old",name:n[2]}:{slot:n[1]==="*** "?"old":"new",name:n[2]}:null}function mK(e){let t=[];for(let r of e){let n=r.oldStart,o=r.newStart,i=null,s=()=>{i&&(t.push(i),n=i.a1,o=i.b1,i=null)};for(let{tag:a,text:c}of r.lines){if(a===" "){s(),n++,o++;continue}a==="-"&&i?.insert.length&&s(),i??={a0:n,a1:n,b0:o,b1:o,remove:[],insert:[]},a==="-"?(i.a1++,i.remove.push(c)):(i.b1++,i.insert.push(c))}s()}return t}function gK(e,t){let r=yc.exec(e[t]??"");if(!r)return null;let n=r[2]===void 0?1:Number(r[2]),o=r[4]===void 0?1:Number(r[4]),i={oldStart:qL(r[1],n),newStart:qL(r[3],o),label:r[5]||null,lines:[]},s=0,a=t+1,c=0;for(;c<n||s<o;a++){let u=e[a];if(u===void 0)throw new Xr("the patch ends inside a hunk",a);let p=u===`
|
|
243
|
+
`?" ":u[0];if(p!==" "&&p!=="-"&&p!=="+")throw new Xr(`a hunk line begins with ${JSON.stringify(p)}`,a);let f=u===`
|
|
244
|
+
`?u:u.slice(1);if(j_(e[a+1])&&(f=V_(f),a++),p!=="+"&&c++,p!=="-"&&s++,c>n||s>o)throw new Xr("a hunk has more lines than its header says",a);i.lines.push({tag:p,text:f})}return{hunk:i,next:a}}function bK(e,t){let r=wc.exec(e[t]??"");if(!r)return null;let[,n,o,i,s,a]=r,c=i==="a"?0:Number(o??n)-Number(n)+1,u=i==="d"?0:Number(a??s)-Number(s)+1;if(c<0||u<0)throw new Xr("a change command counts backwards",t);let p={oldStart:i==="a"?Number(n):Number(n)-1,newStart:i==="d"?Number(s):Number(s)-1,label:null,lines:[]},f=t+1,h=(g,b,v)=>{for(let x=0;x<g;x++,f++){let w=e[f];if(w===void 0)throw new Xr("the patch ends inside a hunk",f);if(w[0]!==b)throw new Xr(`${JSON.stringify(b)} expected`,f);let y=w.slice(2);j_(e[f+1])&&(y=V_(y),f++),p.lines.push({tag:v,text:y})}};if(h(c,"<","-"),i==="c"){if(e[f]!==`---
|
|
245
|
+
`)throw new Xr("'---' expected",f);f++}return h(u,">","+"),{hunk:p,next:f}}function vK(e,t){let r=xa.exec(e[t]??"");if(!r)return null;let n=db.exec(e[t+1]??"");if(!n)throw new Xr("'*** ' range expected",t+1);let o=t+2,i=JL(e,o,yp,"-");o=i.next;let s=yp.exec(e[o]??"");if(!s)throw new Xr("'--- ' range expected",o);let a=JL(e,o+1,null,"+"),c=i.lines.length===0?a.lines.filter(h=>h.tag===" "):i.lines,u=a.lines.length===0?i.lines.filter(h=>h.tag===" "):a.lines,p=XL(n,c.length),f=XL(s,u.length);return{hunk:{oldStart:p,newStart:f,label:r[1]||null,lines:yK(c,u)},next:a.next}}var XL=(e,t)=>t===0?Number(e[1]):Number(e[1])-1;function JL(e,t,r,n){let o=[],i=t;for(;i<e.length;i++){let s=e[i];if(r&&r.test(s)||xa.test(s)||db.test(s)||!r&&yp.test(s))break;if(j_(s)){o[o.length-1].text=V_(o.at(-1).text);continue}let a=s===`
|
|
246
|
+
`?" ":s[0];if(a!==" "&&a!=="!"&&a!=="-"&&a!=="+")break;o.push({tag:a===" "?" ":n,text:s===`
|
|
247
|
+
`?s:s.slice(2)})}return{lines:o,next:i}}function yK(e,t){let r=[],n=0,o=0;for(;n<e.length||o<t.length;){if(e[n]?.tag===" "&&t[o]?.tag===" "){r.push(e[n]),n++,o++;continue}for(;n<e.length&&e[n].tag!==" ";)r.push(e[n]),n++;for(;o<t.length&&t[o].tag!==" ";)r.push(t[o]),o++;e[n]?.tag===" "&&t[o]===void 0?(r.push(e[n]),n++):t[o]?.tag===" "&&e[n]===void 0&&(r.push(t[o]),o++)}return r}var wK={unified:gK,context:vK,normal:bK};var Vo=class extends Error{constructor(t){super(`the rendered diff does not say what the change set says (${t})`),this.name="FormatError"}};function G_(e,t,r,n){if(r.length===0){if(n!=="")throw new Vo("there was nothing to print, and something was printed");return}let o;try{o=W_(n)}catch(s){throw new Vo(`it does not read back (${s.message})`)}if(o.length!==1)throw new Vo(`${o.length} files read back, not one`);let i=o[0].blocks;if(i.length!==r.length)throw new Vo(`${i.length} blocks read back, not ${r.length}`);for(let[s,a]of i.entries()){let c=r[s];if(a.a0!==c.a0||a.a1!==c.a1||a.b0!==c.b0||a.b1!==c.b1)throw new Vo(`block ${s+1} reads back somewhere else`)}for(let s of o[0].hunks){let a=s.oldStart,c=s.newStart;for(let{tag:u,text:p}of s.lines){let f=u==="+"?t[c]:e[a];if(p!==f)throw new Vo(`a ${u==="+"?"added":u==="-"?"removed":"kept"} line is not the line it stands for`);u!=="+"&&a++,u!=="-"&&c++}}}function rF(e,t,r,n){let o=[],i=0;for(;i<e.length;){let s=i;for(;s+1<e.length&&e[s+1].a0-e[s].a1<=2*t;)s++;let a=e[i],c=e[s];o.push({blocks:e.slice(i,s+1),a0:Math.max(0,a.a0-t),a1:Math.min(r,c.a1+t),b0:Math.max(0,a.b0-t),b1:Math.min(n,c.b1+t)}),i=s+1}return o}var kK=`
|
|
248
|
+
\
|
|
249
|
+
`,Wo=(e,t)=>e+t+(t.endsWith(`
|
|
250
|
+
`)?"":kK);function ZL(e,t){return t>e+1?`${e+1},${t}`:`${t>e?e+1:e}`}function nF(e,t,r){let n="";for(let{a0:o,a1:i,b0:s,b1:a}of r){let c=o===i?"a":s===a?"d":"c";n+=ZL(o,i)+c+ZL(s,a)+`
|
|
251
|
+
`;for(let u=o;u<i;u++)n+=Wo("< ",e[u]);c==="c"&&(n+=`---
|
|
252
|
+
`);for(let u=s;u<a;u++)n+=Wo("> ",t[u])}return G_(e,t,r,n),n}function QL(e,t){return t<=e?`${e},0`:t===e+1?`${e+1}`:`${e+1},${t-e}`}function oF(e,t,r,{context:n,label:o=null}){let i="";for(let s of rF(r,n,e.length,t.length)){let a=o?o(s.a0):null;i+=`@@ -${QL(s.a0,s.a1)} +${QL(s.b0,s.b1)} @@${a===null?"":" "+a}
|
|
253
|
+
`;let c=s.a0,u=s.b0;for(let{a0:p,a1:f,b1:h}of s.blocks){for(;c<p;c++,u++)i+=Wo(" ",e[c]);for(;c<f;c++)i+=Wo("-",e[c]);for(;u<h;u++)i+=Wo("+",t[u])}for(;c<s.a1;c++,u++)i+=Wo(" ",e[c])}return G_(e,t,r,i),i}function eF(e,t){return t<=e?`${e}`:t===e+1?`${e+1}`:`${e+1},${t}`}function iF(e,t,r,{context:n,label:o=null}){let i="";for(let s of rF(r,n,e.length,t.length)){let a=o?o(s.a0):null;i+=`***************${a===null?"":" "+a}
|
|
254
|
+
`,i+=`*** ${eF(s.a0,s.a1)} ****
|
|
255
|
+
`,s.blocks.some(c=>c.a0<c.a1)&&(i+=tF(e,s.a0,s.a1,s.blocks,"a")),i+=`--- ${eF(s.b0,s.b1)} ----
|
|
256
|
+
`,s.blocks.some(c=>c.b0<c.b1)&&(i+=tF(t,s.b0,s.b1,s.blocks,"b"))}return G_(e,t,r,i),i}function tF(e,t,r,n,o){let i=o+"1",s=o+"0",a=o==="a"?"b":"a",c="",u=t;for(let p of n){for(;u<p[s];u++)c+=Wo(" ",e[u]);let f=p[a+"0"]<p[a+"1"]?"! ":o==="a"?"- ":"+ ";for(;u<p[i];u++)c+=Wo(f,e[u])}for(;u<r;u++)c+=Wo(" ",e[u]);return c}function xK(e){let t=[];for(let r=0;;){let n=r;for(;r<e.length&&e[r];)r++;if(t.push(r>n),r===e.length)return t;r++}}function K_(e,t,r){let n=t.length,o=xK(r),i=0,s=0,a=0,c=()=>{if(i===n||e[a]!==e[i])return!1;for(t[a++]=0,t[i++]=1,s++;i<n&&t[i];)i++;return!0},u=()=>{if(a===0||e[a-1]!==e[i-1])return!1;for(t[--a]=1,t[--i]=0,s--;a>0&&t[a-1];)a--;return!0};for(let p=0;p<n;p++){if(!t[p]){s++;continue}for(a=p,i=p;i<n&&t[i];i++);let f=-1;for(let h=-1;h!==i-a;){for(h=i-a;u(););for(f=o[s]?i:-1;c();)o[s]&&(f=i)}if(f!==-1)for(let h=i-f;h>0;h--)u();p=i-1}}function $K(e){let t=1;for(let r=e;r!==0;r>>=2)t<<=1;return Math.max(256,t)}function sF(e,t,{ignoreCase:r=!1,whitespace:n="none",minimal:o=!1,slide:i=!0}={}){let s=cb({ignoreCase:r,whitespace:n});if(s===null&&q_(e,t,null))return[];let{A:a,B:c}=_K(e,t,s),u=new Uint8Array(a.length),p=new Uint8Array(c.length);SK(a,c,u,p,o),i&&(K_(a,u,p),K_(c,p,u));let f=MK(u,p);return RK(e,t,f,s),f}function q_(e,t,r=null){if(e.length!==t.length)return!1;let n=r?(o,i)=>r(o)===r(i):(o,i)=>o===i;for(let o=0;o<e.length;o++)if(!n(e[o],t[o]))return!1;return!0}function _K(e,t,r){let n=new Map,o=a=>{let c=r?r(a):a,u=n.get(c);return u===void 0&&(u=n.size,n.set(c,u)),u},i=new Int32Array(e.length),s=new Int32Array(t.length);for(let a=0;a<e.length;a++)i[a]=o(e[a]);for(let a=0;a<t.length;a++)s[a]=o(t[a]);return{A:i,B:s}}function SK(e,t,r,n,o){let i=e.length+t.length+3,s={A:e,B:t,fd:new Int32Array(i),bd:new Int32Array(i),base:t.length+1,limit:$K(e.length+t.length)},a=[{xoff:0,xlim:e.length,yoff:0,ylim:t.length,minimal:o}],c={xmid:0,ymid:0,loMinimal:!1,hiMinimal:!1};for(;a.length;){let{xoff:u,xlim:p,yoff:f,ylim:h,minimal:g}=a.pop();for(;u<p&&f<h&&e[u]===t[f];)u++,f++;for(;u<p&&f<h&&e[p-1]===t[h-1];)p--,h--;if(u===p){for(;f<h;f++)n[f]=1;continue}if(f===h){for(;u<p;u++)r[u]=1;continue}CK(s,u,p,f,h,g,c),a.push({xoff:c.xmid,xlim:p,yoff:c.ymid,ylim:h,minimal:c.hiMinimal}),a.push({xoff:u,xlim:c.xmid,yoff:f,ylim:c.ymid,minimal:c.loMinimal})}}function CK(e,t,r,n,o,i,s){let{A:a,B:c,fd:u,bd:p,base:f,limit:h}=e,g=r-n,b=t-o,v=r-o,x=t-n,w=v,y=v,$=x,_=x,S=(x-v&1)!==0;u[f+x]=t,p[f+v]=r;for(let M=1;;M++){_>b?u[f+--_-1]=-1:++_,$<g?u[f+ ++$+1]=-1:--$;for(let R=$;R>=_;R-=2){let P=u[f+R+1],L=u[f+R-1],A=L<P?P:L+1,W=A-R;for(;A<r&&W<o&&a[A]===c[W];)A++,W++;if(u[f+R]=A,S&&y<=R&&R<=w&&p[f+R]<=A){s.xmid=A,s.ymid=W,s.loMinimal=s.hiMinimal=!0;return}}y>b?p[f+--y-1]=2147483647:++y,w<g?p[f+ ++w+1]=2147483647:--w;for(let R=w;R>=y;R-=2){let P=p[f+R+1],L=p[f+R-1],A=L<P?L:P-1,W=A-R;for(;t<A&&n<W&&a[A-1]===c[W-1];)A--,W--;if(p[f+R]=A,!S&&_<=R&&R<=$&&A<=u[f+R]){s.xmid=A,s.ymid=W,s.loMinimal=s.hiMinimal=!0;return}}if(!(i||M<h)){EK(e,{xoff:t,xlim:r,yoff:n,ylim:o,fmin:_,fmax:$,bmin:y,bmax:w},s);return}}}function EK(e,t,r){let{fd:n,bd:o,base:i}=e,{xoff:s,xlim:a,yoff:c,ylim:u,fmin:p,fmax:f,bmin:h,bmax:g}=t,b=0,v=-1;for(let y=f;y>=p;y-=2){let $=Math.min(n[i+y],a),_=$-y;u<_&&($=u+y,_=u),v<$+_&&(v=$+_,b=$)}let x=0,w=2147483647;for(let y=g;y>=h;y-=2){let $=Math.max(s,o[i+y]),_=$-y;_<c&&($=c+y,_=c),$+_<w&&(w=$+_,x=$)}a+u-w<v-(s+c)?(r.xmid=b,r.ymid=v-b,r.loMinimal=!0,r.hiMinimal=!1):(r.xmid=x,r.ymid=w-x,r.loMinimal=!1,r.hiMinimal=!0)}function MK(e,t){let r=[],n=t.length,o=e.length,i=0,s=0;for(;i<o||s<n;){if(i<o&&s<n&&!e[i]&&!t[s]){i++,s++;continue}let a=i,c=s;for(;i<o&&e[i];)i++;for(;s<n&&t[s];)s++;if(a===i&&c===s)throw new yn("a kept line has no counterpart");r.push({a0:a,a1:i,b0:c,b1:s})}return r}function RK(e,t,r,n=null){let o=n?(a,c)=>n(a)===n(c):(a,c)=>a===c,i=0,s=0;for(let{a0:a,a1:c,b0:u,b1:p}of r){if(a<i||u<s||c<a||p<u||c>e.length||p>t.length)throw new yn("a block is out of order or out of range");if(a===c&&u===p)throw new yn("a block changes nothing");if(a-i!==u-s)throw new yn("the kept lines before a block differ in count");for(;i<a;i++,s++)if(!o(e[i],t[s]))throw new yn(`kept line ${i+1} does not match`);i=c,s=p}if(e.length-i!==t.length-s)throw new yn("the kept lines after the last block differ in count");for(;i<e.length;i++,s++)if(!o(e[i],t[s]))throw new yn(`kept line ${i+1} does not match`)}var yn=class extends Error{constructor(t){super(`the computed change set does not reconstruct the second file (${t})`),this.name="DiffError"}};var AK={unified:oF,context:iF},aF=`Files differ
|
|
257
|
+
`;function IK(e,t,r){if(e===t)return"";let n=cb(r);return n===null?aF:q_(Ji(e),Ji(t),n)?"":aF}function Y_(e,t,{format:r="unified",context:n=3,label:o=null,...i}={}){if(r==="brief")return IK(e,t,i);let s=Ji(e),a=Ji(t),{slide:c=r!=="normal"&&n>0,...u}=i,p=sF(s,a,{...u,slide:c});return p.length===0?"":r==="normal"?nF(s,a,p):AK[r](s,a,p,{context:n,label:o})}var TK={unified:[[/^--- /u,"bold"],[/^\+\+\+ /u,"bold"],[yc,"cyan"],[/^\+/u,"green"],[/^-/u,"red"],[/^\\ /u,"gray"]],context:[[xa,"cyan"],[/^\*{3} \d/u,"cyan"],[/^--- \d/u,"cyan"],[/^\*{3} /u,"bold"],[/^--- /u,"bold"],[/^! /u,"yellow"],[/^\+ /u,"green"],[/^- /u,"red"]],normal:[[wc,"cyan"],[/^< /u,"red"],[/^> /u,"green"],[/^---$/u,"gray"]]};function LK(e){return e.some(t=>xa.test(t))?"context":e.some(t=>yc.test(t))?"unified":e.some(t=>wc.test(t))?"normal":null}function lF(e){let t=e.split(`
|
|
258
|
+
`),r=TK[LK(t)];return r===void 0?null:t.map(n=>r.find(([o])=>o.test(n))?.[1]??null)}var FK={bold:"head",cyan:"hunk",green:"add",red:"del",yellow:"chg",gray:"meta"};function cF(e){let t=lF(e);return t===null?null:e.split(`
|
|
259
|
+
`).map((r,n)=>({text:r,kind:t[n]===null?"":FK[t[n]]??""}))}function dF(e,t){if(typeof e!="string"||typeof t!="string")return null;let r=Y_(e,t,{format:"unified",context:3});return cF(r)??r.split(`
|
|
260
|
+
`).map(n=>({text:n,kind:""}))}Gr();he();ea();var uF=`dialog{width:min(96vw,90rem);max-width:none;max-height:90dvh;margin:auto;padding:0;overflow:hidden}dialog[open]{display:flex;flex-direction:column}header{padding:.8rem 1rem;border-bottom:1px solid var(--border);flex-shrink:0}.file-heading{display:flex;align-items:center;gap:1rem}.file-heading h3{margin:0;flex:1;min-width:0;overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem}.file-heading button{display:grid;place-items:center;flex-shrink:0;width:1.8rem;height:1.8rem;padding:0;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.file-heading button svg{display:block}.file-heading button:hover{color:var(--text);background:var(--surface-active)}.file-details{display:flex;flex-wrap:wrap;align-items:baseline;gap:.35rem 1.2rem;margin-top:.35rem}.file-context,.file-legend{margin:0;color:var(--muted);font-size:.72rem;overflow-wrap:anywhere}.file-context{flex:1;min-width:min(100%,16rem)}.file-legend{display:flex;flex-wrap:wrap;gap:.8rem;margin-left:auto;font-variant-numeric:tabular-nums}.file-legend span{white-space:nowrap}.removed{color:var(--critical)}.added{color:var(--green)}.file-code{min-height:0;overflow:auto;overscroll-behavior:contain;margin:0;padding:.8rem 0;background:var(--bg);tab-size:2;font:.76rem/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}.file-code code{display:block;min-width:100%;width:max-content;padding-inline:1rem;font:inherit}.diff-line{display:block;min-height:1.55em}.diff-line.add{color:var(--green);background:rgb(from var(--green) r g b / .08)}.diff-line.del{color:var(--critical);background:rgb(from var(--critical) r g b / .08)}.diff-line.hunk{color:var(--accent);background:rgb(from var(--accent) r g b / .06)}.diff-line.meta{color:var(--muted)}.file-message{padding:2rem 1rem;color:var(--muted);font-size:.8rem}button:focus-visible,pre:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
261
|
+
`;var X_=class extends D{static properties={path:{},format:{},before:{attribute:!1},after:{attribute:!1},baseName:{},otherName:{},kind:{},_lines:{state:!0},_error:{state:!0},_highlighted:{state:!0}};static styles=[...D.styles,F(Xi),F(uF)];constructor(){super(),this._lines=null,this._error=null,this._highlighted=null}beforeOpen(){if(this.kind==="changed")try{this._lines=dF(this.before,this.after)}catch{this._error="Could not calculate this diff."}else{let t=this.kind==="removed"?this.before:this.after;typeof t=="string"&&this._highlight(t)}}async _highlight(t){let r=await jr(t,Rr(this.path,this.format));this.isConnected&&(this._highlighted=r)}render(){let t=this.kind==="changed",r=this.kind==="removed"?this.before:this.after,n=t?this._lines===null:typeof r!="string",o=i=>we(Cu(i)??0);return d`<dialog aria-labelledby="file-title" @close="${this._onClose}"><header><div class="file-heading"><h3 id="file-title" class="mono">${this.path}</h3><button type="button" aria-label="Close file" @click="${this._onClose}"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></div><div class="file-details"><p class="file-context">${t?`${this.baseName} \u2192 ${this.otherName}`:this.kind==="removed"?this.baseName:this.otherName}</p>${t?d`<p class="file-legend"><span class="removed">− Before</span><span class="added">+ After</span><span>${o(this.before)} → ${o(this.after)}</span></p>`:m}</div></header>${this._error?d`<p class="file-message" role="alert">${this._error}</p>`:n?d`<p class="file-message">${t?"Binary file changed. A text diff is not available.":`Binary file \xB7 ${o(r)}`}</p>`:t?d`<pre class="file-code" tabindex="0" aria-label="File diff"><code>${this._lines.map(i=>d`<span class="${`diff-line ${i.kind}`}">${i.text}</span>`)}</code></pre>`:d`<pre class="file-code" tabindex="0" aria-label="File contents"><code>${this._highlighted?V(this._highlighted):r||"Empty file"}</code></pre>`}</dialog>`}};customElements.define("bundle-file-dialog",X_);function pF(e){return ki("bundle-file-dialog",e,t=>{t.before=null,t.after=null})}kl();ag();Zu();var fF=400,kc=null;function Z_(e){return e===0?"\xB10":`${e>0?"+":"\u2212"}${Math.abs(e).toLocaleString()}`}function hF(e){return`${Z_(e)} B`}function ub(e){return e>0?"up":e<0?"down":""}function OK(e,t){if(!t)return"";let r=e/t*100;return`${r>0?"+":r<0?"\u2212":"\xB1"}${Math.abs(r).toFixed(1)}%`}function J_(e){return e.join(", ")}var Q_=class extends J{static properties={details:{attribute:!1},integrity:{attribute:!1},_targetIntegrity:{state:!0},_otherDetails:{state:!0},_status:{state:!0},_scope:{state:!0}};createRenderRoot(){return this}constructor(){super(),this.details=null,this.integrity=null,this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._diff=null,this._diffKey=null}willUpdate(t){if((t.has("_otherDetails")||t.has("details"))&&this._status==="ready"&&!U_(this.details,this._otherDetails).some(r=>r.id===this._scope)&&(this._scope=""),!!t.has("integrity")){if(kc&&this.integrity===kc.base){let r=kc.target;this._scope=kc.scope,kc=null,this._targetIntegrity=r,this._otherDetails=null,this._status="loading",this._diff=null,this._diffKey=null,this._loadOther(r);return}this._targetIntegrity=null,this._otherDetails=null,this._status="idle",this._scope="",this._diff=null,this._diffKey=null}}_swap(){let t=this._targetIntegrity;!t||t===this.integrity||ec(l.bundles??[],this.integrity).some(r=>r.integrity===t)&&(kc={base:t,target:this.integrity,scope:this._scope},this.dispatchEvent(new CustomEvent("bundle-swap",{bubbles:!0,composed:!0,detail:{integrity:t}})))}_nameFor(t){return(l.bundles??[]).find(n=>n.integrity===t)?.name??`${t.slice(0,15)}\u2026`}_pick(t){let r=t||null;if(this._targetIntegrity=r,this._otherDetails=null,this._diff=null,this._diffKey=null,!r){this._status="idle",this._scope="";return}this._status="loading",this._loadOther(r)}async _loadOther(t){let r=ec(l.bundles??[],this.integrity).find(o=>o.integrity===t);if(!r){this._status="idle",this._targetIntegrity=null;return}let n;try{n=await Mo(t,r)}catch(o){if(o.name==="AbortError")return;throw o}this._targetIntegrity===t&&(this._otherDetails=n,this._status="ready")}get _baseReady(){return!!(this.details&&this.details.integrity===this.integrity&&(this.details.json||this.details.bundle))}_openFile(t,r){let n=r==="removed"?this.details:this._otherDetails;pF({path:t,kind:r,baseName:this._nameFor(this.integrity),otherName:this._nameFor(this._targetIntegrity),format:n?.kind==="stasis"?n.bundle.formats?.get(t):void 0,before:hn(this.details).get(t),after:hn(this._otherDetails).get(t)}).catch(o=>St(o.message,{kind:"error"}))}_fileRow(t,r,n,o){let i=d`<span class="bundle-compare-row-path mono">${r}</span>${o}`;return n==="removed"&&Nl(this.details).get(t)!=="resource"?d`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" data-bundle-view-source="${t}" data-tooltip="${t}">${i}</button></li>`:d`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" data-tooltip="${t}" @click="${()=>this._openFile(t,n)}">${i}</button></li>`}_group(t,r,n,o,i){if(r.length===0)return m;let s=r.slice(0,fF),a=r.length-s.length;return d`<section class="${`bundle-compare-group bundle-compare-${n}`}"><header class="bundle-compare-group-head"><span class="bundle-compare-dot" aria-hidden="true"></span> <span class="bundle-compare-group-title">${t}</span> <span class="bundle-compare-group-count">${r.length}</span></header><ul class="bundle-compare-rows">${oe(s,o,i)}</ul>${a>0?d`<div class="bundle-compare-more">and ${a.toLocaleString()} more…</div>`:m}</section>`}_sizeCells(t){return t.delta===void 0?d`<span class="bundle-compare-row-size">${we(t.bytes)}</span>`:d`<span class="bundle-compare-row-size">${we(t.baseBytes)} → ${we(t.otherBytes)}</span> <span class="${`bundle-compare-row-delta ${ub(t.delta)}`}">${hF(t.delta)}</span>`}_fileGroup(t,r,n,o){return this._group(t,r,n,i=>i.path,i=>this._fileRow(i.path,o(i.path),n,this._sizeCells(i)))}_pkgGroup(t,r,n){return this._group(t,r,n,o=>o.pkg,o=>d`<li><div class="bundle-compare-row" title="${eo(o.pkg)}"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(o.pkg)})}"></span> <span class="bundle-compare-row-path">${eo(o.pkg)}</span> ${this._sizeCells(o)}</div></li>`)}_versionRow(t){let r=t.direction==="up"?"\u2191":t.direction==="down"?"\u2193":"\xB1",n=t.direction==="up"?"Upgraded":t.direction==="down"?"Downgraded":"Changed";return d`<li><div class="bundle-compare-row" title="${`${t.pkg} \xB7 ${n}`}"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(t.pkg)})}"></span> <span class="bundle-compare-row-path">${t.pkg}</span> <span class="bundle-compare-ver"><span class="bundle-compare-ver-from">${J_(t.baseVersions)}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="${`bundle-compare-ver-to ${t.direction}`}">${J_(t.otherVersions)}</span> <span class="${`bundle-compare-ver-dir ${t.direction}`}" aria-hidden="true">${r}</span></span></div></li>`}_depGroup(t,r,n){return this._group(t,r,n,o=>o.pkg,o=>d`<li><div class="bundle-compare-row" title="${o.pkg}"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(o.pkg)})}"></span> <span class="bundle-compare-row-path">${o.pkg}</span> <span class="bundle-compare-dep-ver">${J_(o.versions)}</span></div></li>`)}_renderVersionUpdates(t,r,n){let{updated:o,added:i,removed:s}=t;if(o.length===0&&i.length===0&&s.length===0)return m;let a=o.slice(0,fF),c=o.length-a.length;return d`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Dependency updates</h3>${o.length>0?d`<div class="bundle-compare-ver-changes"><header class="bundle-compare-group-head"><span class="bundle-compare-group-title">Updated</span> <span class="bundle-compare-group-count">${o.length}</span></header><ul class="bundle-compare-rows">${oe(a,u=>u.pkg,u=>this._versionRow(u))}</ul>${c>0?d`<div class="bundle-compare-more">and ${c.toLocaleString()} more…</div>`:m}</div>`:m} ${i.length>0||s.length>0?d`<div class="bundle-compare-cols">${this._depGroup(`Removed \xB7 only in ${r}`,s,"removed")} ${this._depGroup(`Added \xB7 only in ${n}`,i,"added")}</div>`:m}</section>`}_resolutionGroup(t){return this._group("Repointed",t,"changed",r=>r.key,r=>d`<li class="bundle-compare-resolution"><div class="bundle-compare-resolution-source"><code>${r.parent}</code> → <code>${r.specifier}</code></div><div class="bundle-compare-resolution-context">${r.conditions}${r.platform===null?m:d`· Platform: ${r.platform}`}</div><div class="bundle-compare-resolution-targets"><div class="bundle-compare-resolution-before"><span>Before</span><code>${r.baseTarget||"(empty target)"}</code></div><div class="bundle-compare-resolution-after"><span>After</span><code>${r.otherTarget||"(empty target)"}</code></div></div></li>`)}_renderResolutions(t){return t.totalChanges===0?m:d`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Import resolutions</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._resolutionGroup(t.changed)}</div></section>`}_diffFor(){let t=`${this.integrity}|${this._targetIntegrity}|${this._scope}`;if(this._diffKey!==t||!this._diff){let r=lb(this.details,this._scope),n=lb(this._otherDetails,this._scope),{prefix:o}=Sr([...r.keys(),...n.keys()]),i=Wr(this.details),s=Wr(this._otherDetails),a=i||s?new Map([...i??[],...s??[]]):null,c=u=>vt(o&&u.startsWith(o)?u.slice(o.length):u,{packageDir:a?.get(u)});this._diff=VL(r,n,c),this._diff.resolutions=jL(H_(this.details,this._scope),H_(this._otherDetails,this._scope)),this._diff.versionUpdates=WL(Eu(this.details,this._scope?r.keys():null),Eu(this._otherDetails,this._scope?n.keys():null)),this._diffKey=t}return this._diff}_renderSummary(t){let r=t.totals,n=t.versionUpdates.totals,o=n.baseDeps>0||n.otherDeps>0,i=n.otherDeps-n.baseDeps,s=OK(r.byteDelta,r.baseBytes);return d`<div class="bundle-compare-summary"><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Files</span> <span class="bundle-compare-metric-value">${r.baseFiles.toLocaleString()} → ${r.otherFiles.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${ub(r.fileDelta)}`}">${Z_(r.fileDelta)}</span></div><div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Size</span> <span class="bundle-compare-metric-value">${we(r.baseBytes)} → ${we(r.otherBytes)}</span> <span class="${`bundle-compare-metric-delta ${ub(r.byteDelta)}`}">${hF(r.byteDelta)}${s?d`${" "}<span class="bundle-compare-pct">(${s})</span>`:m}</span></div>${o?d`<div class="bundle-compare-metric"><span class="bundle-compare-metric-label">Deps</span> <span class="bundle-compare-metric-value">${n.baseDeps.toLocaleString()} → ${n.otherDeps.toLocaleString()}</span> <span class="${`bundle-compare-metric-delta ${ub(i)}`}">${Z_(i)}</span></div>`:m}<div class="bundle-compare-chips"><span class="bundle-compare-chip removed">−${r.onlyBaseFiles.toLocaleString()} removed</span> <span class="bundle-compare-chip added">+${r.onlyOtherFiles.toLocaleString()} added</span> <span class="bundle-compare-chip changed">${r.changedFiles.toLocaleString()} changed</span> <span class="bundle-compare-chip unchanged">${r.unchangedFiles.toLocaleString()} unchanged</span> ${t.resolutions.totalChanges>0?d`<span class="bundle-compare-chip changed">${t.resolutions.totalChanges.toLocaleString()} repointed ${t.resolutions.totalChanges===1?"resolution":"resolutions"}</span>`:m}</div></div>`}_renderPicker(t,r){let n=this._nameFor(this.integrity);return d`<div class="bundle-compare-picker"><span class="bundle-compare-base" title="${n}">${n}</span> <span class="bundle-compare-arrow" aria-hidden="true">→</span><div class="bundle-compare-select-wrap"><span class="bundle-compare-select-hint">Compare with</span><bundle-selector .bundles="${t}" .value="${this._targetIntegrity}" label="Bundle to compare with" placeholder="Choose a bundle…" @bundle-change="${o=>this._pick(o.detail.value)}"></bundle-selector>${r?d`<button type="button" class="bundle-compare-clear" aria-label="Clear comparison" @click="${()=>this._pick(null)}">×</button>`:m}</div>${r?d`<button type="button" class="bundle-compare-swap" @click="${()=>this._swap()}" aria-label="Swap the two bundles"><span class="bundle-compare-swap-icon" aria-hidden="true">↔</span>Swap</button>`:m}</div>`}_otherOptions(){let t=ec(l.bundles??[],this.integrity),r=new Map;for(let n of t)r.set(n.name,(r.get(n.name)??0)+1);return t.map(n=>({id:n.integrity,integrity:n.integrity,kind:n.kind??(n.name.toLowerCase().endsWith(".map")?"sourcemap":"stasis"),summary:n.summary,size:typeof n.size=="number"?we(n.size):"\u2014",filename:r.get(n.name)>1?`${n.name} \xB7 ${n.integrity.slice(7,13)}\u2026`:n.name}))}render(){let t=this._otherOptions(),r=!!this._targetIntegrity&&t.some(a=>a.integrity===this._targetIntegrity),n=t.length>0?this._renderPicker(t,r):m,o=this._baseReady?U_(this.details,r?this._otherDetails:null):[],i=r&&this._status==="ready"&&this._otherDetails&&(this._otherDetails.json||this._otherDetails.bundle)&&!this._otherDetails.error,s;return this._baseReady?t.length===0?s=d`<div class="bundle-compare-empty">No other bundles to compare with. Drop a second <code>.map</code> or <code>.stasis.code.br</code> bundle to diff against this one.</div>`:r?this._status==="loading"||!this._otherDetails?s=d`<div class="bundle-compare-empty">Comparing…</div>`:this._otherDetails.error?s=d`<div class="bundle-compare-empty is-error">Couldn't read the selected bundle: ${this._otherDetails.error}</div>`:!this._otherDetails.json&&!this._otherDetails.bundle?s=d`<div class="bundle-compare-empty is-error">The selected bundle couldn't be parsed.</div>`:s=this._renderDiff():s=d`<div class="bundle-compare-empty">Pick a bundle above to compare against <strong>${this._nameFor(this.integrity)}</strong>.</div>`:s=d`<div class="bundle-compare-empty">Loading bundle…</div>`,d`<div class="bundle-compare"><header class="bundle-compare-head">${n} ${o.length>0?d`<bundle-scope-selector .reasons="${o}" .value="${this._scope}" label="Compare scope" @scope-change="${a=>{this._scope=a.detail.value}}"></bundle-scope-selector>`:m} ${this._baseReady&&i?this._renderSummary(this._diffFor()):m}</header><div class="bundle-compare-body">${s}</div></div>`}_renderDiff(){let t=this._diffFor(),r=this._nameFor(this._targetIntegrity),n=this._nameFor(this.integrity),o=[...t.files.onlyBase.map(p=>p.path),...t.files.onlyOther.map(p=>p.path),...t.files.changed.map(p=>p.path)],{prefix:i,stripped:s}=Sr(o),a=new Map;for(let p=0;p<o.length;p++)a.set(o[p],s[p]);let c=p=>a.get(p)??p,u=t.packages.onlyOther.length>0||t.packages.onlyBase.length>0||t.packages.changed.length>0;return d`<div class="bundle-compare-caption">Changes from <strong>${n}</strong> to <strong>${r}</strong> ${i?d`· <span class="mono">${i}</span>`:m}</div>${this._renderVersionUpdates(t.versionUpdates,n,r)} ${this._renderResolutions(t.resolutions)} ${t.totals.identical?t.resolutions.totalChanges>0?d`<div class="bundle-compare-caption">File contents are unchanged; import resolutions differ.</div>`:d`<div class="bundle-compare-identical">These two bundles carry identical files (${t.totals.unchangedFiles.toLocaleString()} ${t.totals.unchangedFiles===1?"file":"files"}).</div>`:d`${u?d`<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Packages</h3><div class="bundle-compare-cols">${this._pkgGroup(`Removed \xB7 only in ${n}`,t.packages.onlyBase,"removed")} ${this._pkgGroup(`Added \xB7 only in ${r}`,t.packages.onlyOther,"added")} ${this._pkgGroup("Changed size",t.packages.changed,"changed")}</div></section>`:m}<section class="bundle-compare-section"><h3 class="bundle-compare-section-head">Files</h3><div class="bundle-compare-cols bundle-compare-cols--files">${this._fileGroup(`Removed \xB7 only in ${n}`,t.files.onlyBase,"removed",c)} ${this._fileGroup(`Added \xB7 only in ${r}`,t.files.onlyOther,"added",c)} ${this._fileGroup("Changed",t.files.changed,"changed",c)}</div></section>`}`}};customElements.define("bundle-compare",Q_);T();Re();U();var eS=class extends X{createRenderRoot(){return this}render(){return l.reports.length>0&&l.currentView==="findings"&&l.viewMode!=="graph"&&l.viewMode!=="kanban"?d`<button type="button" class="toolbar-export-btn" aria-label="Download or print report" @click="${this._onClick}">${f7}</button>`:m}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",eS);T();Je();T();Re();xo();var Zi=class extends X{static styles=Te`.preview{position:fixed;inset:auto;margin:0;padding:14px;box-sizing:border-box;width:min(24rem,calc(100vw - 24px));max-height:calc(100vh - 24px);overflow:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--bg);color:var(--text);box-shadow:0 8px 28px #00000040;font:13px/1.45 system-ui,sans-serif;text-align:left;white-space:normal;overflow-wrap:anywhere;letter-spacing:normal;cursor:default}.preview.wide{width:min(36rem,calc(100vw - 24px))}@media print{.preview{display:none}}`;constructor(){super(),this.showTimer=null,this.hideTimer=null}connectedCallback(){super.connectedCallback(),qt(this.renderRoot)}disconnectedCallback(){this._hidePreview(),super.disconnectedCallback()}updated(){let t=this.renderRoot.querySelector(".preview");t?t.matches(":popover-open")&&this._positionPreview():this._hidePreview()}_schedulePreview(){clearTimeout(this.hideTimer),clearTimeout(this.showTimer),this.renderRoot.querySelector(".preview")&&(this.showTimer=setTimeout(()=>{if(!this.isConnected)return;let t=this.renderRoot.querySelector(".preview");t&&(wi(),t.showPopover(),this._positionPreview(),document.addEventListener("keydown",this._previewKeyDown,!0),window.addEventListener("scroll",this._previewScroll,!0),window.addEventListener("resize",this._hidePreview))},150))}_keepPreview(){clearTimeout(this.hideTimer)}_leavePreview(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>{this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)||this._hidePreview()},150)}_hidePreview=()=>{clearTimeout(this.showTimer),clearTimeout(this.hideTimer);let t=this.renderRoot?.querySelector(".preview");t?.matches(":popover-open")&&t.hidePopover(),document.removeEventListener("keydown",this._previewKeyDown,!0),window.removeEventListener("scroll",this._previewScroll,!0),window.removeEventListener("resize",this._hidePreview)};_previewKeyDown=t=>{t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),this.renderRoot.querySelector(".preview")?.contains(this.renderRoot.activeElement)&&this.renderRoot.querySelector("[aria-details]").focus({preventScroll:!0}),this._hidePreview())};_previewScroll=t=>{t.composedPath().includes(this.renderRoot.querySelector(".preview"))||this._hidePreview()};_positionPreview(){let t=this.renderRoot.querySelector(".preview"),r=this.renderRoot.querySelector("[aria-details]").getBoundingClientRect(),{width:n,height:o}=t.getBoundingClientRect(),i=8,s=12,a=Math.max(s,Math.min(r.left,window.innerWidth-n-s)),c=r.bottom+i+o<=window.innerHeight-s?r.bottom+i:Math.max(s,r.top-i-o);t.style.left=`${a}px`,t.style.top=`${c}px`}};ge();Z0();Ah();gt();var tS={open:"Open",draft:"Draft",closed:"Closed",merged:"Merged",completed:"Completed",not_planned:"Not planned",duplicate:"Duplicate",unknown:"Closed"},NK=d`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="4" cy="3" r="1.75"/><circle cx="4" cy="13" r="1.75"/><circle cx="12" cy="13" r="1.75"/><path d="M4 4.75v6.5M12 11.25V5a2 2 0 0 0-2-2H8m2-2L8 3l2 2"/></svg>`,PK=d`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,DK=d`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m5 8 2 2 4-4"/></svg>`,zK=d`<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="8" cy="8" r="6.25"/><path d="m3.5 12.5 9-9"/></svg>`,UK={completed:DK,not_planned:zK},rS=class extends Zi{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[Zi.styles,Te`:host{display:inline;word-break:normal}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere;cursor:default}.status{display:inline-flex;align-items:center;gap:.3em;vertical-align:text-bottom;margin-right:.35em;font-weight:600;white-space:nowrap}svg{flex:none}.open{color:light-dark(#1a7f37,#3fb950)}.draft,.not_planned,.duplicate,.unknown,.unavailable{color:var(--muted)}.closed{color:light-dark(#d1242f,#f85149)}.merged,.completed{color:light-dark(#8250df,#a371f7)}:host(:not([compact])){display:block}:host(:not([compact])) .fix-link{display:flex;align-items:center;gap:.55rem;min-width:0}.link-icon{flex:none;line-height:1}.link-icon svg{display:block}.link-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500;line-height:1.5}.link-icon.unavailable+.link-title{color:var(--accent)}.ref{min-width:0;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.74rem}.link-status{flex:none;padding:.15rem .4rem;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:.7rem;font-weight:500;line-height:1.3}:host([compact]){display:inline-flex}:host([compact]) .fix-link{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host([compact]) .fix-link svg{width:14px;height:14px}:host([compact]) .status{margin:0;font-size:1rem;line-height:1}.preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.preview-ref{display:inline-flex;align-items:center;gap:.4rem;min-width:0;color:var(--muted);font-size:12px;line-height:1.4}.preview-ref span{min-width:0}.preview-description{margin-top:8px;white-space:pre-wrap}.preview-title{margin-top:8px;font-size:15px;font-weight:600;line-height:1.4}.preview .preview-header .status{flex:none;margin:0;font-size:12px;line-height:1.4}@media print{:host(:not([compact])) .fix-link{display:block}.link-title,.ref{white-space:normal;overflow:visible;text-overflow:clip;max-width:none}.link-icon{display:inline-block;vertical-align:middle;margin-right:.55rem}.ref,.link-status{margin-left:.55rem}.preview{display:none}}`];constructor(){super(),this.url="",this.compact=!1,this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this.unsubscribe=t3(()=>this.requestUpdate()),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,super.disconnectedCallback()}updated(t){t.has("url")||t.has("compact")?this._hidePreview():super.updated(t)}render(){if(!Pe(this.url))return d`${this.url}`;let t=Y0(this.url),r=!t&&X0(this.url),n=t||r,o=Q0.read(this.url);if(!o&&!n){let p=`Open fix link: ${this.url}`;return d`<a class="${this.compact?"fix-link":""}" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" data-tooltip="${this.compact?p:m}" aria-label="${p}">${this.compact?d`<slot></slot>`:this.url}</a>`}let i=o?r&&o.status==="closed"?o.stateReason??"unknown":o.status:"unavailable",s=t?NK:r?UK[i]??PK:null,a=n?`${n.repo}#${n.number}`:"",c=(o?.title.length??0)>40||(o?.description??"").split(/[\r\n]/u).some(p=>p.length>100),u=o?`${tS[i]} ${t?"pull request":"issue"}: ${o.title} (${a})`:n?`Open ${t?"pull request":"issue"}: ${a}`:`Open fix link: ${this.url}`;return d`<a class="fix-link" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${u}" aria-details="${this.compact&&n?"fix-preview":m}" data-tooltip="${this.compact&&!n?u:m}" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}">${this.compact?s?d`<span class="${`status ${i}`}">${s}</span>`:d`<slot></slot>`:d`${s?d`<span class="${`link-icon ${i}`}">${s}</span>`:m} <span class="link-title">${o?.title??(a||this.url)}</span> ${o?d`<span class="ref">${a}</span><span class="${`link-status ${i}`}">${tS[i]}</span>`:m}`} </a>${this.compact&&n?d`<a class="${c?"preview wide":"preview"}" id="fix-preview" popover="manual" href="${this.url}" target="_blank" rel="noopener noreferrer" draggable="false" aria-label="${`Open ${t?"pull request":"issue"} ${a} on GitHub`}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${p=>{p.stopPropagation(),this._hidePreview()}}"><div class="preview-header"><span class="preview-ref">${V(Wn)}<span>${a}</span></span> <span class="${`status ${i}`}">${s}${o?tS[i]:t?"Pull request":"Issue"}</span></div>${o?d`<div class="preview-title">${o.title}</div>`:m} ${o?.description?d`<div class="preview-description">${o.description}</div>`:m}</a>`:m}`}};customElements.define("managed-fix-link",rS);T();U();Vl();Bm();Om();Hg();var nS=class extends Zi{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[Zi.styles,F(mc),Te`:host{display:inline-flex}:host([hidden]){display:none!important}button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:default}.preview-trigger{display:inline-flex;align-items:center;justify-content:center;line-height:0}.preview-trigger:hover{color:var(--accent)}.managed-comment+.managed-comment{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.comment-body{white-space:pre-wrap}.comment-body a{color:var(--accent);text-decoration:none}.comment-body a:hover{text-decoration:underline}.preview-footer{display:flex;justify-content:flex-end;margin-top:8px}.edit-hint{color:var(--muted);font-size:12px}.edit-hint:hover{color:var(--accent)}`];constructor(){super(),this.finding=null,this.comment="",this.unsubscribe=null}connectedCallback(){super.connectedCallback(),this._subscribe(),document.addEventListener("managed-comments-reset",this._resetComments),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.unsubscribe?.(),this.unsubscribe=null,document.removeEventListener("managed-comments-reset",this._resetComments),super.disconnectedCallback()}updated(t){this.hidden=!this.renderRoot.querySelector(".preview"),t.has("finding")&&(this._hidePreview(),this._subscribe()),super.updated(t)}_subscribe(){this.unsubscribe?.(),this.unsubscribe=this.finding?.id?Tm(this.finding.id,()=>this.requestUpdate()):null}_resetComments=()=>{this._hidePreview(),this.requestUpdate()};_previewClick(t){if(t.target.closest("a, button")){this._hidePreview();return}window.getSelection?.()?.toString()||(t.stopPropagation(),this.renderRoot.querySelector(".preview-trigger").click())}render(){let t=C(),r=t?Xn(this.finding):[];if(!(t?r.length>0:!!this.comment))return m;let i=(t?r.map(s=>s.body):[this.comment]).some(s=>s.split(/[\r\n]/u).some(a=>a.length>100));return d`<button type="button" class="preview-trigger mark-comment" aria-label="${t?"View comments":"Edit comment"}" aria-details="comment-preview" @mouseenter="${this._schedulePreview}" @mouseleave="${this._leavePreview}" @focus="${this._schedulePreview}" @blur="${this._leavePreview}" @click="${this._hidePreview}"><slot></slot></button><div class="${i?"preview wide":"preview"}" id="comment-preview" popover="manual" role="region" aria-label="${t?"Comments":"Comment"}" @mouseenter="${this._keepPreview}" @mouseleave="${this._leavePreview}" @focusin="${this._keepPreview}" @focusout="${this._leavePreview}" @click="${this._previewClick}">${t?r.map(s=>Wl(s,Lo(s.body))):d`<div class="comment-body">${Lo(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define("comment-preview",nS);U();dn();Yt();Qn();T();U();ge();ge();hs();function bF(e){if(Ir(e))throw new Error("This is a links file, not a report. Wrap report rows in a groups or findings object to compare them.");let t=e;try{let a=JSON.parse(e);Array.isArray(a)&&(t=JSON.stringify({groups:a}))}catch{}let{data:r,reason:n}=sn(t);if(!r)throw new Error(n);let o=[],i=new Map,s=0;for(let a of mt(r)){let c=new Set;for(let u of Array.isArray(a)?a:[a])if(!(!u||typeof u!="object"||Array.isArray(u))){if(typeof u.id!="string"||!u.id){s++;continue}c.add(u.id),i.has(u.id)||i.set(u.id,[]),i.get(u.id).push(u)}o.push([...c].toSorted())}return{rows:o,byId:i,missingIds:s}}function HK(e){let t=new Set;for(let r of e){let n=[...new Set(r)].toSorted();for(let o=0;o<n.length;o++)for(let i=o+1;i<n.length;i++)t.add(JSON.stringify([n[o],n[i]]))}return t}function mF(e){let t=new Map,r=o=>{let i=o;for(;t.get(i)!==i;)t.set(i,t.get(t.get(i))),i=t.get(i);return i};for(let o of e){let[i,s]=JSON.parse(o);for(let a of[i,s])t.has(a)||t.set(a,a);t.set(r(i),r(s))}let n=new Map;for(let o of[...t.keys()].toSorted()){let i=r(o);n.has(i)||n.set(i,[]),n.get(i).push(o)}return[...n.values()].toSorted((o,i)=>o[0].localeCompare(i[0]))}function Go(e,t,r){let n=(e.byId.get(t)??[]).map(o=>r==="verdict"?$e(o)||null:r==="severity"?Fr(o)??null:r==="originalSeverity"?o.severity??null:r==="confidence"&&Number.isFinite(o.confidence)?o.confidence:null);return[...new Set(n)].toSorted((o,i)=>String(o).localeCompare(String(i),void 0,{numeric:!0}))}var gF=(e,t)=>e.length===t.length&&e.every((r,n)=>r===t[n]),pb=(e,t)=>[...e].filter(r=>!t.has(r)).toSorted();function vF(e,t){let r=new Set(e.byId.keys()),n=new Set(t.byId.keys()),o=[...r].filter(b=>n.has(b)).toSorted(),i=new Set(o),s=b=>HK(b.rows.map(v=>v.filter(x=>i.has(x)))),a=s(e),c=s(t),u={confirmed:[],refuted:[],otherVerdicts:[],confidence:[],severity:[]};for(let b of o)for(let v of["verdict","confidence","severity"]){let x=Go(e,b,v),w=Go(t,b,v),y={id:b,before:x,after:w};if(v==="severity"&&(y.originalBefore=Go(e,b,"originalSeverity"),y.originalAfter=Go(t,b,"originalSeverity")),gF(x,w)&&(v!=="severity"||gF(y.originalBefore,y.originalAfter)))continue;if(v!=="verdict"){u[v].push(y);continue}let $=w.length===1&&w[0]==="confirmed"?"confirmed":w.length===1&&w[0]==="refuted"?"refuted":"otherVerdicts";u[$].push(y)}let p=mF(pb(c,a)),f=mF(pb(a,c)),h=pb(n,r),g=pb(r,n);return{before:e,after:t,added:h,removed:g,shared:o,joined:p,split:f,...u,unchanged:h.length===0&&g.length===0&&p.length===0&&f.length===0&&Object.values(u).every(b=>b.length===0)}}pe();var yF=`dialog{width:min(94vw,1180px);max-width:1180px;height:min(88dvh,960px);max-height:92dvh;margin-block:auto;padding:0;overflow:hidden;background:var(--theme-bar)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.3rem}header h3{margin-bottom:.25rem;font-size:1.1rem}header p,.muted,.note,.empty{color:var(--muted);font-size:.78rem;line-height:1.5}button,select,input{font:inherit;font-size:.8rem}button,select,.file-button,.search{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 6px);padding:.45rem .65rem}button:not(:disabled):hover,.file-button:hover{background:var(--surface-active)}button:disabled{opacity:.45}button:focus-visible,select:focus-visible,.search:focus-visible,.file-button:focus-within{outline:2px solid var(--accent);outline-offset:2px}.pickers{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:start;gap:1rem;padding:0 1.3rem 1rem;border-bottom:1px solid var(--border)}.picker{min-width:0}.picker>label{display:block;font-size:.72rem;font-weight:600;margin-bottom:.4rem;color:var(--muted)}.picker select{width:100%;text-overflow:ellipsis}.file-picker{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-top:.55rem}.file-button{position:relative;display:inline-block;font-size:.74rem;padding:.3rem .5rem;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;width:100%}.swap{align-self:start;margin-top:1.5rem;font-size:1rem}.results{overflow:auto;min-height:0;padding:1.1rem 1.3rem 1.4rem}.summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem}.summary>div{display:flex;flex-direction:column;gap:.35rem;padding:.8rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--ui-radius, 7px)}.summary span{font-size:.72rem;color:var(--muted)}.summary strong{font-size:1.15rem;font-variant-numeric:tabular-nums}.positive h4{color:var(--green)}.negative h4,.verdict-confirmed h4,.summary .verdict-confirmed strong{color:var(--critical)}.verdict-refuted h4,.summary .verdict-refuted strong{color:var(--muted)}.change-counts{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.7rem}.change-counts span{font-size:.7rem;padding:.3rem .5rem;border-radius:5px;background:var(--bg);color:var(--muted)}.results-head{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-block:1rem}.results-head p{flex:1;font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}.search{width:min(100%,17rem)}.section-title{margin:1.2rem 0 .5rem;font-size:.87rem}.note{margin:-.15rem 0 .6rem}.columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.change-section{border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden;margin-bottom:.6rem}.change-section h4{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.78rem;font-weight:600;padding:.65rem .8rem;background:var(--bg)}.count{font-variant-numeric:tabular-nums;font-size:.7rem}ul{list-style:none}li{border-top:1px solid var(--border);padding:.7rem .8rem}.change-row{display:flex;justify-content:space-between;align-items:start;gap:.8rem}.finding{display:flex;flex-direction:column;gap:.2rem;min-width:0;overflow-wrap:anywhere}.finding strong{font-size:.77rem;font-weight:500;line-height:1.4}.finding code,.finding small{color:var(--muted);font-size:.66rem;line-height:1.4}.change-value{display:flex;align-items:center;justify-content:end;flex-wrap:wrap;gap:.3rem;max-width:48%;flex-shrink:0;font-size:.73rem;text-align:end;overflow-wrap:anywhere}.from{color:var(--muted)}.change-value small{width:100%;color:var(--muted);font-size:.67rem}.group-members{display:flex;flex-direction:column;gap:.55rem}.group-shape{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.7rem;font:.66rem/1.5 monospace;overflow-wrap:anywhere}.group-shape>span{min-width:0}.empty{padding:.7rem .8rem}.more{margin:.5rem .8rem .7rem;font-size:.72rem}.placeholder{padding:4rem 1rem;text-align:center;color:var(--muted);font-size:.85rem}.identical{color:var(--green);font-size:.82rem;padding-block:.5rem}.error,.warning{font-size:.75rem;line-height:1.5;margin-top:.5rem;overflow-wrap:anywhere}.error{color:var(--critical)}.warning{color:var(--medium)}dialog>.error{padding:0 1.3rem .6rem}@media(width<=650px){.pickers{gap:.5rem;padding-inline:.8rem}.columns{grid-template-columns:minmax(0,1fr);gap:0}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.summary>div{padding:.6rem}.results-head p{flex-basis:100%}.search{width:100%}header,.results{padding-inline:.8rem}.change-row{flex-wrap:wrap}.change-value{max-width:100%}}
|
|
262
|
+
`;var oS=()=>({key:"",name:"",report:null,error:"",loading:!1}),$a=(e,t)=>e.map(r=>r===null?"Not supplied":t==="confidence"?`${r}/10`:String(r).replaceAll("_"," ")).join(" / "),iS=50,sS=class extends D{static styles=[...D.styles,F(yF)];static properties={_names:{state:!0},_sides:{state:!0},_catalogError:{state:!0},_catalogLoading:{state:!0},_diff:{state:!0},_query:{state:!0},_limits:{state:!0}};constructor(){super(),this._names=[],this._sides=[oS(),oS()],this._tokens=[0,0],this._catalogError="",this._catalogLoading=!0,this._diff=null,this._query="",this._limits={}}beforeOpen(){this._loadCatalog()}focusInitial(){this.renderRoot.querySelector("select")?.focus()}async _loadCatalog(){try{let t=await fe();if(this._settled)return;this._names=t.filter(o=>Lt(o)!==Xe);let r=this._names.includes(l.currentFile)?l.currentFile:this._names[0];r&&!this._tokens[0]&&this._select(0,r);let n=this._names.find(o=>o!==r);n&&!this._tokens[1]&&this._select(1,n)}catch(t){this._settled||(this._catalogError=`Couldn't list saved reports: ${t.message}`)}finally{this._settled||(this._catalogLoading=!1)}}_setSide(t,r){this._sides=this._sides.map((i,s)=>s===t?r:i),this._limits={};let[n,o]=this._sides.map(i=>i.report);this._diff=n&&o?vF(n,o):null}async _select(t,r,n){let o=++this._tokens[t],i={...oS(),key:n?"":r,name:r,loading:!!r};if(this._setSide(t,i),!!r)try{let s=n?await n.text():await De(r);if(this._settled||this._tokens[t]!==o)return;this._setSide(t,{...i,loading:!1,report:bF(s)})}catch(s){!this._settled&&this._tokens[t]===o&&this._setSide(t,{...i,loading:!1,error:`Couldn't read ${r}: ${s.message}`})}}_file(t,r){let n=r.target.files?.[0];r.target.value="",n&&this._select(t,n.name,n)}_swap(){this._sides.some(t=>t.loading)||(this._tokens=this._tokens.map(t=>t+1),this._sides=this._sides.toReversed(),this._setSide(0,this._sides[0]))}_picker(t){let r=this._sides[t],n=t===0?"Before":"After";return d`<section class="picker"><label for="${`report-${t}`}">${n}</label> <select id="${`report-${t}`}" @change="${o=>this._select(t,o.target.value)}"><option value="" .selected="${!r.key}">${r.name&&!r.key?r.name:"Choose a saved report\u2026"}</option>${this._names.map(o=>d`<option value="${o}" .selected="${r.key===o}">${o}</option>`)}</select><div class="file-picker"><label class="file-button">Open file…<input type="file" accept=".json,.md,.markdown" aria-label="${`Open ${n.toLowerCase()} report file`}" @change="${o=>this._file(t,o)}"></label> <span class="muted">${r.loading?"Reading report\u2026":r.report?`${r.report.byId.size.toLocaleString()} unique findings`:"JSON or Markdown"}</span></div>${r.error?d`<p class="error" role="alert">${r.error}</p>`:m} ${r.report?.missingIds?d`<p class="warning">${r.report.missingIds} findings without an id excluded.</p>`:m}</section>`}_finding(t){let r=this._diff.after.byId.get(t)?.[0]??this._diff.before.byId.get(t)?.[0];return d`<span class="finding"><strong>${Ge(r)||t}</strong><code>${t}</code>${r.file?d`<small>${r.file}</small>`:m}</span>`}_matches(t){let r=this._query.trim().toLowerCase();if(!r)return!0;let n=[...this._diff.before.byId.get(t)??[],...this._diff.after.byId.get(t)??[]];return[t,...n.flatMap(o=>[Ge(o),o.file])].filter(Boolean).some(o=>o.toLowerCase().includes(r))}_section(t,r,n,o,i=""){let s=n.filter(c=>(Array.isArray(c)?c:[c.id??c]).some(u=>this._matches(u))),a=this._limits[t]??iS;return d`<section class="${`change-section ${i}`}" aria-label="${r}"><h4>${r}<span class="count">${this._query.trim()?`${s.length} / `:""}${n.length}</span></h4>${s.length>0?d`<ul>${s.slice(0,a).map(o)}</ul>`:d`<p class="empty">${n.length>0?"No matching findings.":"No changes."}</p>`} ${s.length>a?d`<button class="more" @click="${()=>{this._limits={...this._limits,[t]:a+iS}}}">Show ${Math.min(iS,s.length-a)} more (${s.length-a} remaining)</button>`:m}</section>`}_changeRow(t,r){let n=r==="severity"&&JSON.stringify(t.originalBefore)!==JSON.stringify(t.originalAfter);return d`<li class="change-row">${this._finding(t.id)}<span class="change-value"> <span class="from">${$a(t.before,r)}</span><span aria-label="to">→</span><span>${$a(t.after,r)}</span> ${n?d`<small>Original: ${$a(t.originalBefore)} → ${$a(t.originalAfter)}</small>`:m}</span></li>`}_presenceRow(t,r){let n=$a(Go(r,t,"verdict"));return d`<li class="change-row">${this._finding(t)}<span class="change-value"> <span>${$a(Go(r,t,"severity"))}</span><span>${$a(Go(r,t,"confidence"),"confidence")}</span> ${n==="Not supplied"?m:d`<small>${n}</small>`}</span></li>`}_groupRow(t){let r=new Set(t),n=o=>o.rows.map(i=>i.filter(s=>r.has(s))).filter(i=>i.length).map(i=>i.join(", ")).filter((i,s,a)=>a.indexOf(i)===s).join(" | ");return d`<li class="group-row"><div class="group-members">${t.map(o=>this._finding(o))}</div><div class="group-shape"><span class="from">${n(this._diff.before)}</span><span aria-label="to">→</span><span>${n(this._diff.after)}</span></div></li>`}_verdictCount(t,r){return[...t.byId.keys()].filter(n=>Go(t,n,"verdict").includes(r)).length}_results(){let t=this._diff;return t?d`<div class="summary" aria-label="Comparison summary"><div><span>Unique findings</span><strong>${t.before.byId.size} → ${t.after.byId.size}</strong></div><div><span>In common</span><strong>${t.shared.length}</strong></div><div class="verdict-confirmed"><span>Confirmed</span><strong>${this._verdictCount(t.before,"confirmed")} → ${this._verdictCount(t.after,"confirmed")}</strong></div><div class="verdict-refuted"><span>Refuted</span><strong>${this._verdictCount(t.before,"refuted")} → ${this._verdictCount(t.after,"refuted")}</strong></div></div><div class="change-counts" aria-label="Change counts"><span>${t.added.length} added</span><span>${t.removed.length} removed</span> <span>${t.joined.length} joined</span><span>${t.split.length} split</span> <span>${t.confidence.length} confidence</span><span>${t.severity.length} severity</span></div><div class="results-head"><p>Changes from <strong>${this._sides[0].name}</strong> to <strong>${this._sides[1].name}</strong>.</p><input class="search" type="search" aria-label="Filter comparison findings" placeholder="Filter by id, title or file…" .value="${this._query}" @input="${r=>{this._query=r.target.value,this._limits={}}}"></div>${t.shared.length===0&&(t.before.missingIds||t.after.missingIds)?d`<p class="warning" role="status">No shared ids to compare. Findings without ids cannot be matched.</p>`:t.unchanged?d`<p class="identical" role="status">No differences in finding ids, grouping, verdicts, confidence or severity.</p>`:m}<h3 class="section-title">Findings</h3><div class="columns">${this._section("added","Added",t.added,r=>this._presenceRow(r,t.after),"positive")} ${this._section("removed","Removed",t.removed,r=>this._presenceRow(r,t.before),"negative")}</div><h3 class="section-title">Revalidation</h3><p class="note">Changed verdicts for shared ids, grouped by the after report’s verdict.</p><div class="columns">${this._section("confirmed","Confirmed",t.confirmed,r=>this._changeRow(r,"verdict"),"verdict-confirmed")} ${this._section("refuted","Refuted",t.refuted,r=>this._changeRow(r,"verdict"),"verdict-refuted")}</div>${t.otherVerdicts.length>0?this._section("other","Other verdict changes",t.otherVerdicts,r=>this._changeRow(r,"verdict")):m}<h3 class="section-title">Grouping</h3><p class="note">Only shared ids. Each cluster connects changed pairs; added or removed findings do not count as regrouping.</p><div class="columns">${this._section("joined","Joined",t.joined,r=>this._groupRow(r),"positive")} ${this._section("split","Split",t.split,r=>this._groupRow(r),"negative")}</div><h3 class="section-title">Ratings</h3><p class="note">Shared ids only. Severity includes report corrections; changes to original severity are also shown.</p><div class="columns">${this._section("confidence","Confidence changes",t.confidence,r=>this._changeRow(r,"confidence"))} ${this._section("severity","Severity changes",t.severity,r=>this._changeRow(r,"severity"))}</div>`:d`<p class="placeholder" role="status">${this._sides.some(r=>r.loading)||this._catalogLoading?"Loading reports\u2026":"Choose two saved reports or open two files to compare."}</p>`}render(){return d`<dialog aria-labelledby="compare-title" @close="${this._onClose}"><header><div><h3 id="compare-title">Compare reports</h3><p>Compare findings, grouping and ratings between two reports.</p></div><button aria-label="Close report comparison" @click="${this._onClose}">Close</button></header><div class="pickers">${this._picker(0)}<button class="swap" aria-label="Swap before and after reports" ?disabled="${this._sides.some(t=>t.loading)}" @click="${this._swap}">⇄</button>${this._picker(1)}</div>${this._catalogError?d`<p class="error" role="alert">${this._catalogError} You can still open files directly.</p>`:m}<div class="results">${this._results()}</div></dialog>`}};customElements.define("report-compare-dialog",sS);function wF(){if(C())throw new Error("Report comparison is available in local/E2E mode.");return le("report-compare-dialog")}ct();function wp(e){let t=new Map;for(let[r,n]of l.triage)n[e]&&t.set(r,n[e]);return t}var VK={get markers(){return wp("color")},get triageState(){return wp("triage")},get comments(){return wp("comment")},get fixes(){return wp("fix")},get flags(){return wp("flagged")},get(e){let t=l.triage.get(e),r={};return t?.color&&(r.color=t.color),t?.triage&&(r.triage=t.triage),t?.comment&&(r.comment=t.comment),t?.fix&&(r.fix=t.fix),t?.flagged!==void 0&&(r.flagged=t.flagged),r},async set(e,{color:t,triage:r,comment:n,fix:o,flagged:i}={}){let s=!1;if(t!==void 0&&(t===null||t===""?ee(l.triage,e,{color:void 0})&&(s=!0):l.triage.get(e)?.color!==t&&(ee(l.triage,e,{color:t}),s=!0)),r!==void 0)if(r===null||r===""||r===!1)ee(l.triage,e,{triage:void 0})&&(s=!0);else if(r==="inprogress"||r==="fixed"||r==="invalid"||r==="deleted")l.triage.get(e)?.triage!==r&&(ee(l.triage,e,{triage:r}),s=!0);else throw new TypeError(`DeepView.triage.set: unknown triage value ${JSON.stringify(r)} (expected 'inprogress' | 'fixed' | 'invalid' | 'deleted' | null)`);if(n!==void 0){let a=n?String(n):"";a?l.triage.get(e)?.comment!==a&&(ee(l.triage,e,{comment:a}),s=!0):ee(l.triage,e,{comment:void 0})&&(s=!0)}if(o!==void 0){let a=o?String(o):"";a?l.triage.get(e)?.fix!==a&&(ee(l.triage,e,{fix:a}),s=!0):ee(l.triage,e,{fix:void 0})&&(s=!0)}if(i!==void 0){let a=i===null||i===""?void 0:!!i;l.triage.get(e)?.flagged!==a&&(ee(l.triage,e,{flagged:a}),s=!0)}return s&&(await _e(),E()),s}};window.DeepView={get reports(){return l.reports.slice()},get groups(){return Mr()},get findings(){return Mr().flat()},get currentFile(){return l.currentFile},get currentWorkspace(){return l.currentWorkspace},triage:VK,forceManagedMode:r7,setTheme:fL,get theme(){return hL()},triageSync:te,refresh(){E()},export(){return $L()},compareReports(){return wF()}};c1();un();gt();var WK={default:Se.default,"claude-security":Se["claude-security"],"codex-security":Se["codex-security"],deepsec:Se.deepsec,piolium:Se.piolium,bundle:or,workspace:vi,links:Sl,github:Wn};for(let e of document.querySelectorAll(".drop-supported-icon[data-icon]")){let t=WK[e.dataset.icon];t&&(e.innerHTML=t)}ug();b6(E);e0(E);g6(E);te.onStatusChange(E);h6(async(e,t)=>{l.currentWorkspace===e?await Kr(e):l.currentFile&&l.currentFile===t?await ur(t):await Y()});m6(async()=>{await Y(),l.currentView==="bundles"&&E()});o7();s7();async function $F(){let e=R0();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t;try{t=await l7({encoded:e})}catch(n){return alert(`Couldn't open the share-link unlock prompt: ${n.message}`),!1}if(!t)return!1;let r=await Ty({id:t.id,name:t.name,privateKey:t.privateKeyBase64});if(r.status==="already-attached")return alert(`This workspace is already attached as "${r.workspace.name}".`),!1;if(r.status==="name-collision"){let n=r.existing?.name;return alert(n?`A workspace named "${n}" already exists. Open the share link again and pick a different name.`:"The shared workspace name is empty or invalid. Ask the sender to re-share with a real name."),!1}return r.workspace?.id?await Kr(r.workspace.id):await Y(),!0}async function _F(){let e=Qo();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t=await s$(e);return t.ok?!0:(alert(t.reason),!1)}var xc=!1;async function SF(){if(await bt(),!xc&&!(!C()&&me()&&!tr())){xc=!0;try{await GK()}finally{Ye.hidden=!1}}}async function GK(){let e=rt(),t=()=>e===rt()&&!C();if(C()){await Y();return}if(await Cn(),!t()||(Bd(),await Promise.all([Y(),Zf().catch(i=>console.warn("initial linked findings:",i))]),!t())||await $F()||!t()||await _F()||!t())return;let o=Le(Ui);if(o)if(o.startsWith("ws:")){let i=o.slice(3);Q().some(s=>s.id===i)&&await Kr(i)}else if(o.startsWith("b:")){let i=o.slice(2),s=i.indexOf(" "),a=s>=0?i.slice(0,s):i,c=s>=0?i.slice(s+1):"",u=Mn.has(c)?c:"overview";(l.bundles??[]).some(p=>p.integrity===a)&&(Ro(a,u),E(),Ao(a),await Y())}else{let i=await fe();if(!t())return;let s=rh(o);s&&i.includes(s.name)&&await ur(s.name,void 0,{workspaceId:s.workspaceId})}}var fb=!1,kF=!1;document.addEventListener("managed-client-mode-change",()=>{fb=!C()&&me()});function xF(e){kF||(kF=!0,queueMicrotask(()=>{alert(e+" This tab will reload to refresh its state. Any unsaved edits in this tab will be lost."),location.reload()}))}tt(async()=>{if(await bt(),C()){E();return}let e=fb,t=me();if(fb=t,E(),!xc&&tr()){SF().catch(r=>console.warn("continueBoot:",r));return}if(xc&&t&&!tr()){xF("Encryption was just enabled in another tab.");return}xc&&e&&!t&&!zb()&&xF("Encryption was disabled in another tab.")});window.addEventListener("hashchange",()=>{!xc||C()||(async()=>{await $F()||await _F()})().catch(e=>console.warn("deep-link hashchange:",e))});(async()=>{if(!await a7()){await bt(),fb=!C()&&me();try{let e=window.matchMedia?.("(display-mode: window-controls-overlay)").matches;if(!e&&!C()&&localStorage.getItem("deepview.sidebarCollapsed")==="1"&&t2.classList.add("collapsed"),window.matchMedia?.("(display-mode: standalone)").matches||e){let r=document.querySelector('meta[name="viewport"]');r&&r.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"),window.addEventListener("wheel",n=>{(n.ctrlKey||n.metaKey)&&n.preventDefault()},{passive:!1}),window.addEventListener("keydown",n=>{(n.ctrlKey||n.metaKey)&&(n.key==="="||n.key==="+"||n.key==="-"||n.key==="0")&&n.preventDefault()})}}catch{}!C()&&me()&&!tr()||await SF()}})();
|
|
263
|
+
/*!
|
|
264
|
+
* PHP elephant adapted from Material Icon Theme:
|
|
265
|
+
* https://github.com/material-extensions/vscode-material-icon-theme/blob/main/icons/php_elephant.svg
|
|
266
|
+
* Copyright (c) 2025 Material Extensions
|
|
267
|
+
*
|
|
268
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
269
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
270
|
+
* in the Software without restriction, including without limitation the rights
|
|
271
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
272
|
+
* of the Software, and to permit persons to whom the Software is furnished to do
|
|
273
|
+
* so, subject to the following conditions:
|
|
274
|
+
*
|
|
275
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
276
|
+
* copies or substantial portions of the Software.
|
|
277
|
+
*
|
|
278
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
279
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
280
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
281
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
282
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
283
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
284
|
+
* SOFTWARE.
|
|
285
|
+
*/
|
|
91
286
|
/*! Bundled license information:
|
|
92
287
|
|
|
93
288
|
@lit/reactive-element/css-tag.js:
|
|
@@ -133,6 +328,7 @@ lit-html/directives/live.js:
|
|
|
133
328
|
*)
|
|
134
329
|
|
|
135
330
|
lit-html/directives/map.js:
|
|
331
|
+
lit-html/directives/keyed.js:
|
|
136
332
|
lit-html/directives/choose.js:
|
|
137
333
|
(**
|
|
138
334
|
* @license
|