@preventive/triage 1.0.0-alpha.3 → 1.0.0-alpha.31

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.
Files changed (183) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/api/reap.ts +17 -0
  3. package/cli.js +6 -0
  4. package/client/finding-link.js +305 -0
  5. package/client/linked-findings.d.ts +1 -0
  6. package/client/linked-findings.js +111 -0
  7. package/common/bundle-commit.d.ts +1 -0
  8. package/common/bundle-commit.js +4 -0
  9. package/common/bundle-metadata.d.ts +10 -0
  10. package/common/bundle-metadata.js +182 -0
  11. package/common/bundle-reasons.d.ts +2 -0
  12. package/common/bundle-reasons.js +21 -0
  13. package/common/bundle-source-links.d.ts +5 -0
  14. package/common/bundle-source-links.js +82 -0
  15. package/common/bundle-sources.d.ts +3 -0
  16. package/common/bundle-sources.js +284 -0
  17. package/common/bundle-stats.js +41 -0
  18. package/common/bundle-tabs.js +1 -0
  19. package/common/code-language.js +51 -0
  20. package/common/default-scan-models.ts +30 -0
  21. package/common/finding-id.js +47 -0
  22. package/common/github-issue-labels.d.ts +1 -0
  23. package/common/github-issue-labels.js +11 -0
  24. package/common/github-pr.ts +56 -0
  25. package/common/managed/comments.ts +34 -0
  26. package/common/managed/permissions.ts +35 -0
  27. package/common/managed/report-content.ts +42 -0
  28. package/common/managed/report-filter.ts +108 -0
  29. package/common/managed/roles.ts +28 -0
  30. package/common/managed/routes.d.ts +2 -0
  31. package/common/managed/routes.js +124 -0
  32. package/common/managed/scan-models.ts +6 -0
  33. package/common/managed/triage.ts +83 -0
  34. package/common/save-error-reason.ts +20 -7
  35. package/common/scan-server.ts +13 -0
  36. package/common/server-info.ts +35 -0
  37. package/common/utf8.d.ts +3 -0
  38. package/common/utf8.js +45 -0
  39. package/out/brotli-fallback.js +3 -3
  40. package/out/client-managed-import.js +83 -0
  41. package/out/client-managed.js +169 -0
  42. package/out/client-sync.js +16 -13
  43. package/out/github-issue-authorized.html +3 -0
  44. package/out/github-issue-authorized.js +1 -0
  45. package/out/graph.js +30 -4
  46. package/out/index.html +55 -8
  47. package/out/prism.js +2 -2
  48. package/out/stasis.svg +20 -0
  49. package/out/terminal.js +273 -39
  50. package/out/view.css +1 -1
  51. package/out/view.js +259 -63
  52. package/package.json +205 -57
  53. package/server-common/database-config.ts +16 -0
  54. package/server-common/initialize.ts +18 -0
  55. package/server-common/npm-advisories.ts +101 -0
  56. package/{server → server-common}/origin.ts +5 -5
  57. package/server-common/reap.ts +48 -0
  58. package/server-common/scan-config.ts +19 -0
  59. package/server-common/standalone.ts +29 -0
  60. package/server-common/storage-crypto.ts +182 -0
  61. package/server-common/storage-log.ts +38 -0
  62. package/server-common/vercel-blob.ts +103 -0
  63. package/server-e2e/app.ts +486 -0
  64. package/{server → server-e2e}/auth.ts +5 -1
  65. package/{server → server-e2e}/bus-receiver.ts +2 -1
  66. package/{server → server-e2e}/cli.js +9 -4
  67. package/{server → server-e2e}/config.ts +56 -35
  68. package/{server → server-e2e}/db-neon.ts +2 -2
  69. package/{server → server-e2e}/db-revision-sql.ts +1 -1
  70. package/{server → server-e2e}/db-stmt.ts +2 -2
  71. package/{server → server-e2e}/db.ts +7 -7
  72. package/{server → server-e2e}/http.ts +110 -12
  73. package/{server → server-e2e}/hub.ts +40 -9
  74. package/server-e2e/index.ts +17 -0
  75. package/server-e2e/lifecycle.ts +95 -0
  76. package/{server → server-e2e}/neon-driver.ts +2 -2
  77. package/{server → server-e2e}/npm-proxy.ts +11 -144
  78. package/{server → server-e2e}/objstore/blob-fs.ts +2 -2
  79. package/{server → server-e2e}/objstore/blob-vercel.ts +13 -117
  80. package/{server → server-e2e}/objstore/blob.ts +9 -2
  81. package/server-e2e/objstore/fetch-mint-guard.ts +74 -0
  82. package/{server → server-e2e}/objstore/handlers.ts +9 -8
  83. package/{server → server-e2e}/objstore/init.ts +35 -18
  84. package/{server → server-e2e}/objstore/reaper.ts +31 -11
  85. package/server-e2e/objstore/rest-deny.ts +28 -0
  86. package/server-e2e/objstore/rest-mint.ts +224 -0
  87. package/{server → server-e2e}/objstore/rest.ts +58 -33
  88. package/{server → server-e2e}/objstore/sign.ts +105 -0
  89. package/{server → server-e2e}/objstore/store-neon.ts +6 -10
  90. package/{server → server-e2e}/objstore/store.ts +7 -7
  91. package/{server → server-e2e}/objstore/tokens.ts +1 -1
  92. package/{server → server-e2e}/pubsub.ts +12 -9
  93. package/{server → server-e2e}/sign.ts +4 -4
  94. package/{server → server-e2e}/sse-server.ts +102 -68
  95. package/{server → server-e2e}/sse-session.ts +28 -8
  96. package/{server → server-e2e}/static.ts +31 -21
  97. package/server-e2e/sync-handlers.ts +408 -0
  98. package/{server → server-e2e}/util.ts +9 -0
  99. package/{server → server-e2e}/ws-server.ts +20 -9
  100. package/server-managed/activity.ts +231 -0
  101. package/server-managed/avatar-store.ts +12 -0
  102. package/server-managed/blob-store.ts +17 -0
  103. package/server-managed/brotli.ts +10 -0
  104. package/server-managed/bundle-advisories.ts +53 -0
  105. package/server-managed/bundle-advisory-inventory.ts +75 -0
  106. package/server-managed/bundle-build-diagnostics.d.ts +10 -0
  107. package/server-managed/bundle-build-diagnostics.js +23 -0
  108. package/server-managed/bundle-build-leases.ts +41 -0
  109. package/server-managed/bundle-build-worker.js +54 -0
  110. package/server-managed/bundle-build.ts +168 -0
  111. package/server-managed/bundle-cache.ts +166 -0
  112. package/server-managed/bundle-catalog.ts +29 -0
  113. package/server-managed/bundle-store.ts +24 -0
  114. package/server-managed/bundle-summary-cache.ts +116 -0
  115. package/server-managed/bundle.ts +104 -0
  116. package/server-managed/cache-storage.ts +19 -0
  117. package/server-managed/cli.js +21 -0
  118. package/server-managed/combined.ts +46 -0
  119. package/server-managed/comments.ts +151 -0
  120. package/server-managed/config.ts +149 -0
  121. package/server-managed/content-access.ts +15 -0
  122. package/server-managed/crypto.ts +25 -0
  123. package/server-managed/db-methods.ts +1517 -0
  124. package/server-managed/db-neon.ts +277 -0
  125. package/server-managed/db-schema.ts +206 -0
  126. package/server-managed/db-table-names.ts +22 -0
  127. package/server-managed/db.ts +120 -0
  128. package/server-managed/github-app.ts +385 -0
  129. package/server-managed/github-errors.ts +49 -0
  130. package/server-managed/github-issue-oauth.ts +48 -0
  131. package/server-managed/github-issues.ts +152 -0
  132. package/server-managed/github-metadata.ts +98 -0
  133. package/server-managed/github-oauth.ts +199 -0
  134. package/server-managed/github-pulls.ts +227 -0
  135. package/server-managed/http-response.ts +18 -0
  136. package/server-managed/http.ts +2350 -0
  137. package/server-managed/import-triage.ts +51 -0
  138. package/server-managed/index.ts +175 -0
  139. package/server-managed/managed-issues.ts +47 -0
  140. package/server-managed/management-catalog.ts +45 -0
  141. package/server-managed/management.ts +86 -0
  142. package/server-managed/object-storage-disk.ts +144 -0
  143. package/server-managed/object-storage-vercel.ts +63 -0
  144. package/server-managed/object-storage.ts +71 -0
  145. package/server-managed/package-entry-points.ts +51 -0
  146. package/server-managed/public-workspace.ts +146 -0
  147. package/server-managed/repo-path.ts +21 -0
  148. package/server-managed/report-migration.ts +35 -0
  149. package/server-managed/report-query.ts +10 -0
  150. package/server-managed/report-response.ts +16 -0
  151. package/server-managed/report-sources.ts +166 -0
  152. package/server-managed/repository-browser.ts +139 -0
  153. package/server-managed/repository-discovery.ts +82 -0
  154. package/server-managed/repository-policy.ts +27 -0
  155. package/server-managed/revisions.ts +35 -0
  156. package/server-managed/session.ts +78 -0
  157. package/server-managed/slugs.ts +38 -0
  158. package/server-managed/solidity-entry-points.ts +69 -0
  159. package/server-managed/sql-postgres.ts +31 -0
  160. package/server-managed/sql.ts +72 -0
  161. package/server-managed/static.ts +28 -0
  162. package/server-managed/storage-command.ts +16 -0
  163. package/server-managed/storage-db.ts +175 -0
  164. package/server-managed/storage-encryption.ts +211 -0
  165. package/server-managed/storage-maintenance.ts +223 -0
  166. package/server-managed/storage-payload.ts +72 -0
  167. package/server-managed/storage-stores.ts +81 -0
  168. package/server-managed/storage.ts +58 -0
  169. package/server-managed/team-catalog.ts +7 -0
  170. package/server-managed/team-feed.ts +173 -0
  171. package/server-managed/team-reports.ts +219 -0
  172. package/server-managed/triage-response.ts +16 -0
  173. package/server-managed/uploads.ts +65 -0
  174. package/server-managed/workspace-shares.ts +162 -0
  175. package/server.ts +50 -0
  176. package/server/index.ts +0 -477
  177. package/server/lifecycle.ts +0 -204
  178. package/server/sync-handlers.ts +0 -320
  179. /package/{LICENSE → LICENSE-MIT} +0 -0
  180. /package/{server → server-e2e}/config.example.json +0 -0
  181. /package/{server → server-e2e}/objstore/fs.ts +0 -0
  182. /package/{server → server-e2e}/peer.ts +0 -0
  183. /package/{server → server-e2e}/validation.ts +0 -0
package/out/view.js CHANGED
@@ -1,52 +1,169 @@
1
- var To=globalThis,Ro=To.ShadowRoot&&(To.ShadyCSS===void 0||To.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,sd=Symbol(),od=new WeakMap,Io=class{constructor(t,r,n){if(this._$cssResult$=!0,n!==sd)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(Ro&&t===void 0){let n=r!==void 0&&r.length===1;n&&(t=od.get(r)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&od.set(r,t))}return t}toString(){return this.cssText}},A=e=>new Io(typeof e=="string"?e:e+"",void 0,sd);var id=(e,t)=>{if(Ro)e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet);else for(let r of t){let n=document.createElement("style"),o=To.litNonce;o!==void 0&&n.setAttribute("nonce",o),n.textContent=r.cssText,e.appendChild(n)}},wi=Ro?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return A(r)})(e):e;var{is:yg,defineProperty:wg,getOwnPropertyDescriptor:vg,getOwnPropertyNames:kg,getOwnPropertySymbols:$g,getPrototypeOf:xg}=Object,Bo=globalThis,ad=Bo.trustedTypes,_g=ad?ad.emptyScript:"",Sg=Bo.reactiveElementPolyfillSupport,pn=(e,t)=>e,vi={toAttribute(e,t){switch(t){case Boolean:e=e?_g: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}},cd=(e,t)=>!yg(e,t),ld={attribute:!0,type:String,converter:vi,reflect:!1,useDefault:!1,hasChanged:cd};Symbol.metadata??=Symbol("metadata"),Bo.litPropertyMetadata??=new WeakMap;var St=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=ld){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&&wg(this.prototype,t,o)}}static getPropertyDescriptor(t,r,n){let{get:o,set:s}=vg(this.prototype,t)??{get(){return this[r]},set(i){this[r]=i}};return{get:o,set(i){let l=o?.call(this);s?.call(this,i),this.requestUpdate(t,l,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??ld}static _$Ei(){if(this.hasOwnProperty(pn("elementProperties")))return;let t=xg(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(pn("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(pn("properties"))){let r=this.properties,n=[...kg(r),...$g(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(wi(o))}else t!==void 0&&r.push(wi(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 id(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 s=(n.converter?.toAttribute!==void 0?n.converter:vi).toAttribute(r,n.type);this._$Em=t,s==null?this.removeAttribute(o):this.setAttribute(o,s),this._$Em=null}}_$AK(t,r){let n=this.constructor,o=n._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let s=n.getPropertyOptions(o),i=typeof s.converter=="function"?{fromAttribute:s.converter}:s.converter?.fromAttribute!==void 0?s.converter:vi;this._$Em=o;let l=i.fromAttribute(r,s.type);this[o]=l??this._$Ej?.get(o)??l,this._$Em=null}}requestUpdate(t,r,n,o=!1,s){if(t!==void 0){let i=this.constructor;if(o===!1&&(s=this[t]),n??=i.getPropertyOptions(t),!((n.hasChanged??cd)(s,r)||n.useDefault&&n.reflect&&s===this._$Ej?.get(t)&&!this.hasAttribute(i._$Eu(t,n))))return;this.C(t,r,n)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,r,{useDefault:n,reflect:o,wrapped:s},i){n&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,i??r??this[t]),s!==!0||i!==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,s]of this._$Ep)this[o]=s;this._$Ep=void 0}let n=this.constructor.elementProperties;if(n.size>0)for(let[o,s]of n){let{wrapped:i}=s,l=this[o];i!==!0||this._$AL.has(o)||l===void 0||this.C(o,void 0,s,l)}}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){}};St.elementStyles=[],St.shadowRootOptions={mode:"open"},St[pn("elementProperties")]=new Map,St[pn("finalized")]=new Map,Sg?.({ReactiveElement:St}),(Bo.reactiveElementVersions??=[]).push("2.1.2");var $i=globalThis,dd=e=>e,Fo=$i.trustedTypes,ud=Fo?Fo.createPolicy("lit-html",{createHTML:e=>e}):void 0,xi="$lit$",Ct=`lit$${Math.random().toFixed(9).slice(2)}$`,_i="?"+Ct,Cg=`<${_i}>`,ir=document,hn=()=>ir.createComment(""),gn=e=>e===null||typeof e!="object"&&typeof e!="function",Si=Array.isArray,bd=e=>Si(e)||typeof e?.[Symbol.iterator]=="function",ki=`[
2
- \f\r]`,fn=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,pd=/-->/g,fd=/>/g,or=RegExp(`>|${ki}(?:([^\\s"'>=/]+)(${ki}*=${ki}*(?:[^
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
- `).trim();if(!wm.test(t))return null;let r=t.split(/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*\n/mu),n=[];for(let o=1;o<r.length;o+=2){let s=vm(r[o]),l=(r[o+1]||"").split(/^### /mu).slice(1);for(let d of l){let u=xm(d,s);u&&n.push(u)}}return n.length===0?null:{type:"security",source:"deepsec",findings:n}}function xm(e,t){let r=e.indexOf(`
5
- `),n=(r===-1?e:e.slice(0,r)).trim();if(!n)return null;let o=r===-1?"":e.slice(r+1);o=o.replace(/\n---\s*$/u,"").trim();let s={};for(let y of o.matchAll(/^- \*\*([^:*]+):\*\*\s*(.+)$/gmu))s[y[1].trim().toLowerCase()]=y[2].trim();let i=/^\*\*Recommendation:\*\*\s*/mu.exec(o),l=o,d="";i&&(l=o.slice(0,i.index),d=o.slice(i.index+i[0].length).trim());let u=l.split(`
6
- `).filter(y=>!/^\s*- \*\*/u.test(y)).join(`
7
- `).replaceAll("**","").trim(),p=n+(u?`
8
-
9
- `+u:""),f=$m(s.file||"unknown"),h=(s.lines||"").split(",").map(y=>y.trim()).find(Boolean)||"?",b={file:f,line:h,severity:t,description:p};d&&(b.recommendation=d.replaceAll("**",""));let m=km(s.confidence);return m!==void 0&&(b.confidence=m),s.slug&&(b.slug=s.slug),b}var _m=new Set(["critical","high","medium","low","high_bug","bug","informational"]);function Wr(e){let t=e.replaceAll(/\r\n?/gu,`
10
- `).trim();if(!t.startsWith("# "))return null;let r=t.split(/^# /mu).filter(s=>s.trim().length>0),n=[];for(let s of r){let i=Sm(s);i&&n.push(i)}return n.length===0?null:{type:n.find(s=>s.type)?.type||"analysis",source:"claude-security",findings:n}}function Sm(e){let t=e.indexOf(`
11
- `),r=(t===-1?e:e.slice(0,t)).trim();if(!r)return null;let n=t===-1?"":e.slice(t+1),{sectionsText:o,metaText:s}=Cm(n),i=Em(o),l=Am(s),{file:d,line:u,locationLink:p}=Tm(i.location||""),f=(l.severity||"").toLowerCase(),h=_m.has(f)?f:"medium",b=Im(r,i),m=i["recommended fix"]?pu(i["recommended fix"]):void 0,y={file:d||"unknown",line:u,severity:h,description:b};return p&&(y.location=p),m&&(y.recommendation=m),l.repository&&(y.repo={github:l.repository}),l.branch&&(y.branch=l.branch),l["date created"]&&(y.dateCreated=l["date created"]),l.status&&(y.status=l.status),l.category&&(y.type=l.category.toLowerCase()),y}function Cm(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,""),s=t.exec(o),i=s?o.slice(0,s.index):o;return{sectionsText:n,metaText:i}}function Em(e){let t={},r=e.split(/^## /mu);for(let n=1;n<r.length;n++){let o=r[n],s=o.indexOf(`
12
- `),i=(s===-1?o:o.slice(0,s)).trim().toLowerCase(),l=(s===-1?"":o.slice(s+1)).trim();i&&(t[i]=l)}return t}function Am(e){let t={};for(let r of e.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))t[r[1].trim().toLowerCase()]=r[2].trim();return t}function Tm(e){let t="",r="?",n="",o=e.match(/\[([^\]]+)\]\(([^)]+)\)/u);if(o){t=o[1].trim(),n=o[2];let i=o[2].match(/#L(\d+)/u);i&&(r=i[1])}else t=e.trim(),n=e.trim();let s=t.match(/^(.+):(\d+)$/u);return s&&(t=s[1],r==="?"&&(r=s[2])),{file:t,line:r,locationLink:n}}function Im(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"]}`),pu(r.join(`
13
-
14
- `))}function pu(e){return e.replaceAll("**","")}function Rm(e){return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}function Bm(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCodePoint(e[r]);return btoa(t)}async function fu(e){let t=typeof e=="string"?G(e):e,r=await crypto.subtle.digest("SHA-512",t);return`sha512-${Bm(new Uint8Array(r))}`}async function Fm(e){let t=G(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=Rm(n);return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function ls(e){if(typeof crypto?.subtle?.digest!="function")return null;let t;e.fileHash?t={severity:e.severity,description:e.description,fileHash:e.fileHash}:e.location?t={severity:e.severity,description:e.description,location:e.location}:t={severity:e.severity,description:e.description,file:e.file,line:e.line};try{return await Fm(t)}catch{return null}}function Ht(e){try{return JSON.parse(e)}catch{return zr(e)??Wr(e)}}function jt(e){let t=[];for(let r of e){let n=Array.isArray(r)?r:[r];for(let o of n)o&&t.push(o)}return t}async function Hr(e){let t=e.filter(n=>n&&!n.id);if(t.length===0)return;let r=await Promise.all(t.map(ls));t.forEach((n,o)=>{r[o]&&(n.id=r[o])})}var jr=new Map,Vr=new Map,Kr=new Map,cs=new Map;function Mm(e){if(typeof e?.package?.npm?.name=="string"&&e.package.npm.name)return e.package.npm.name;if(!e?.file)return null;let t=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,r;for(;(r=t.exec(e.file))!==null;)if(r[1]!==".pnpm")return r[1];return null}function Lm(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function Pm(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}var Fn=new Set,fa=new Set,Bn=null,ha=!1;function ga(e){return fa.add(e),()=>fa.delete(e)}function ma(){for(let e of fa)try{e()}catch{}}function ds(e){return jr.get(e)?.list??[]}function yt(){return Vr}function gr(){return Kr}function Mn(e,t){let r=jr.get(e);if(!r)return[];let n=r.reports.get(Vt(t));return n?[...n]:[]}function ba(e,t){let r=Vr.get(e);if(!r)return[];let n=r._keyReports.get(Vt(t));return n?[...n]:[]}function ya(e,t){let r=Kr.get(e);if(!r)return[];let n=r._keyReports.get(Vt(t));return n?[...n]:[]}var hu=["type","model","think","effort","exportsMode"];function Om(e,t){if(!hu.some(r=>e[r]!==void 0))for(let r of hu)t[r]!==void 0&&(e[r]=t[r])}function Nm(e){let t=Array.isArray(e?.findings)?e.findings:Array.isArray(e?.groups)?e.groups:null;if(!t)return[];let r=!e?.source,n=[];for(let o of jt(t))r&&Om(o,e),n.push(o);return n}function Vt(e){return e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`}function wa(e,t,r){let n=cs.get(e);n||(n={hash:[],pkg:[],repo:[]},cs.set(e,n)),n[t].push(r)}function Dm(e,t,r){let n=jr.get(e.fileHash);n||(n={keys:new Set,list:[],reports:new Map},jr.set(e.fileHash,n));let o=n.reports.get(t);o||(o=new Set,n.reports.set(t,o));let s=!o.has(r);return o.add(r),s&&wa(r,"hash",{hash:e.fileHash,key:t}),n.keys.has(t)?s:(n.keys.add(t),n.list.push(e),!0)}function Um(e,t,r){let n=Mm(e);if(!n)return!1;let o=zd(e),s=Vr.get(n);if(s||(s={...Vo(),repos:new Set,byVersion:new Map,_repoReports:new Map},Vr.set(n,s)),typeof e.repo?.github=="string"&&e.repo.github){s.repos.add(e.repo.github);let l=s._repoReports.get(e.repo.github);l||s._repoReports.set(e.repo.github,l=new Set),l.add(r)}Wd(s,o,e,t,r);let i=Ko(s,t,r,e);return wa(r,"pkg",{pkg:n,key:t,file:e.file,version:o}),i}function zm(e,t,r,n){if(Lm(e))return!1;let o=Pm(e,n);if(!o)return!1;let s=Kr.get(o);s||(s=Vo(),Kr.set(o,s));let i=Ko(s,t,r,e);return i&&wa(r,"repo",{repo:o,key:t,file:e.file}),i}function va(e){let t=cs.get(e);if(cs.delete(e),Fn.delete(e),!t)return!1;let r=!1;for(let{hash:o,key:s}of t.hash){let i=jr.get(o);if(!i)continue;let l=i.reports.get(s);if(l){if(l.delete(e)&&(r=!0),l.size===0){i.reports.delete(s),i.keys.delete(s);let d=i.list.findIndex(u=>Vt(u)===s);d>=0&&i.list.splice(d,1)}i.keys.size===0&&jr.delete(o)}}let n=new Set;for(let{pkg:o,key:s,file:i,version:l}of t.pkg){let d=Vr.get(o);if(!d)continue;let u=d._keyReports.get(s);if(u){if(u.delete(e)&&(r=!0),u.size===0&&qo(d,s,i,Vt),Hd(d,l,s,i,e,Vt),!n.has(o)){n.add(o);for(let p of[...d._repoReports.keys()]){let f=d._repoReports.get(p);f?.delete(e)&&f.size===0&&(d._repoReports.delete(p),d.repos.delete(p),r=!0)}}d._keyReports.size===0?Vr.delete(o):Go(d)}}for(let{repo:o,key:s,file:i}of t.repo){let l=Kr.get(o);if(!l)continue;let d=l._keyReports.get(s);d&&(d.delete(e)&&(r=!0),d.size===0&&qo(l,s,i,Vt),l._keyReports.size===0?Kr.delete(o):Go(l))}return r}async function Wm(e){if(Fn.has(e))return!1;Fn.add(e);try{let t=await Me(e),r=Ht(t);if(!r)return!1;let n=Nm(r);if(n.length===0)return!1;let o="";try{o=He(e)}catch{}let s=!1;for(let i of n){let l=Vt(i);i.fileHash&&Dm(i,l,e)&&(s=!0),i.file&&Um(i,l,e)&&(s=!0),i.file&&zm(i,l,e,o)&&(s=!0)}return Fn.has(e)?s:(va(e),ha=!0,!1)}catch{return Fn.delete(e),!1}}function wt(){return Bn||(Bn=(async()=>{try{do{ha=!1;let e=await le();for(let t of e)await Wm(t)&&ma()}while(ha)}finally{Bn=null}})(),Bn)}nu(e=>{va(e)&&ma()});cu(e=>{va(e)&&ma(),wt().catch(()=>{})});var Ln=new Map,Pn=new Map;function us(e,t){if(!e||!t)return!1;let r=!Pn.has(e);Pn.set(e,t);for(let[n,o]of t){if(!o)continue;let s=Ln.get(o);s||(s=new Map,Ln.set(o,s)),s.set(e,n)}return r}function ka(e){let t=Pn.get(e);if(Pn.delete(e),!!t)for(let r of t.values()){let n=Ln.get(r);n&&(n.delete(e),n.size===0&&Ln.delete(r))}}function mr(e){if(!e)return[];let t=Ln.get(e);if(!t)return[];let r=[];for(let[n,o]of t)r.push({integrity:n,file:o});return r}function $a(e){return Pn.has(e)}var gu="deepview.fileCounts",Gr=null;function fs(){if(Gr)return Gr;try{Gr=JSON.parse(he(gu)||"{}")}catch{Gr={}}return Gr}function xa(){ke(gu,JSON.stringify(Gr)).catch(e=>console.warn("counts persist:",e))}function mu(e){let t=fs()[e];if(t!==void 0)return typeof t=="number"?{count:t}:t}function Nn(e){return mu(e)?.count}function Dn(e){return mu(e)?.source}function Ve(e,t,r){let n=fs();n[e]=r?{count:t,source:r}:{count:t},xa()}function Yr(e){let t=fs();delete t[e],xa()}function Oe(e){try{let n=JSON.parse(e);if(n&&Array.isArray(n.findings))return{count:n.findings.length,source:n.source,recognized:!0}}catch{}let t=zr(e);if(t)return{count:t.findings.length,source:t.source,recognized:!0};let r=Wr(e);return r?{count:r.findings.length,source:r.source,recognized:!0}:{count:0,recognized:!1}}var On=null,qr=null,ps=null;function Hm(e,t){for(let{names:r,onUpdate:n}of ps)if(r.has(e))try{n(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function _a(e,t){if(On){t&&ps.push({names:new Set(e),onUpdate:t});for(let r of e)qr.add(r);return On}return qr=new Set(e),ps=t?[{names:new Set(e),onUpdate:t}]:[],On=(async()=>{await Promise.resolve();try{let r=fs();for(;qr.size>0;){let n=qr.values().next().value;if(qr.delete(n),r[n]===void 0)try{let o=await Me(n);if(r[n]!==void 0)continue;let{count:s,source:i}=Oe(o);r[n]=i?{count:s,source:i}:{count:s},xa(),Hm(n,s)}catch{}}}finally{On=null,qr=null,ps=null}})(),On}function Sa(e){if(!e)return"";for(let t of e.split(`
15
- `))if(t.trim())return t.trim();return""}function Ca(e){let t=new Set(e.map(n=>n.id)),r=new Map;for(let n of a.reports)for(let o of n.groups)for(let s of o){let i=s.id??String(s._id);if(!(!t.has(i)||r.has(i))&&(r.set(i,{severity:s.severity,file:s.file,line:s.line,description:Sa(s.description)}),r.size===t.size))return r}return r}var jm=`deepview/workspace-id/v1
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
- `;var pp=`.file-icon.brand-deepview{.bg{fill:#2563eb}.fg{fill:#fff}}.file-icon.brand-claude{.bg{fill:#d97757}.fg{fill:#fff}}.file-icon.brand-codex{.bg{fill:#fff;stroke:#000;stroke-width:.5}.fg{fill:#000}}.file-icon.brand-vercel{.bg{fill:#000;stroke:#fff;stroke-width:.5}.fg{fill:#fff}}
18
- `;var fp=`*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}dialog{margin-top:5rem;margin-inline:auto;border:1px solid var(--border);border-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: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: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)}}&.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}}
19
- `;var T=class extends H{static styles=[A(fp)];firstUpdated(){this.beforeOpen();let t=this.renderRoot.querySelector("dialog");if(t){try{t.showModal()}catch(r){this._settled=!0,this.dispatchEvent(new CustomEvent("modal-conflict",{detail:{cause:r}}));return}this.focusInitial()}}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)};function V(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)})}var Ze=`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: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:6px;background:rgb(from var(--critical, #f87171) r g b / .08)}.wsl-optout{display:flex;align-items:center;gap:.5rem;margin-top:.7rem;color:var(--text);font-size:.78rem}.nwd-input:disabled{opacity:.5}
20
- `;var pl=class extends T{static styles=[...T.styles,A(Ze)];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=_n(),this._vaultStateUnsub=ge(()=>{if(this._settled)return;let t=_n();this._orphan&&!t&&X()?(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(X()){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 En({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(!bt()){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 qi({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 zi({seal:r}),this._phase="Encrypting triage data\u2026",await qa({seal:r}),this._phase="Encrypting report files\u2026",await aa({seal:r}),this._phase="Encrypting bundles\u2026",await ca({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 c`<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">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?c`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?c`<p class="wsl-error">${this._error}</p>`:g}<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 c`<p class="nwd-note"><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=bt();return c`<p class="nwd-note">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"><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?g:c`<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?c`<p class="nwd-note">${this._phase}</p>`:g} ${this._error?c`<p class="wsl-error">${this._error}</p>`:g}<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 c`<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",pl);function Ts(){return V("passkey-setup-dialog")}var fl=class extends T{static styles=[...T.styles,A(Ze)];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 Cn({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 c`<dialog @close="${this._onClose}"><header><h3>Unlock your data</h3></header><p class="nwd-note">Your triage data and report files are encrypted with a passkey on this device. Unlock to load them.</p>${this._error?c`<p class="wsl-error">${this._error}</p>`:g}<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",fl);function Is(){return V("passkey-unlock-dialog")}var hp=c`<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>`,Lb=c`<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>`,xe=null;function gp(){if(!xe)return;if(!bt()){xe.hidden=!0;return}xe.hidden=!1;let e=X(),t=it();xe.classList.toggle("encrypted",e&&t),xe.classList.toggle("locked-pending",e&&!t),e&&t?(xe.title="Encryption on \u2014 click to disable",xe.setAttribute("aria-label","Disable encryption"),W(hp,xe)):e?(xe.title="Encryption on, locked \u2014 click to unlock",xe.setAttribute("aria-label","Unlock encrypted data"),W(hp,xe)):(xe.title="Encryption off \u2014 click to enable",xe.setAttribute("aria-label","Enable encryption"),W(Lb,xe))}async function Pb(){if(confirm(`Disable encryption?
1
+ var HF=Object.defineProperty;var $=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var yb=(e,t)=>{for(var r in t)HF(e,r,{get:t[r],enumerable:!0})};var Cp,Ep,wb,wS,Tc,F,Le,kS,kb,xb=$(()=>{Cp=globalThis,Ep=Cp.ShadowRoot&&(Cp.ShadyCSS===void 0||Cp.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wb=Symbol(),wS=new WeakMap,Tc=class{constructor(t,r,n){if(this._$cssResult$=!0,n!==wb)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(Ep&&t===void 0){let n=r!==void 0&&r.length===1;n&&(t=wS.get(r)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&wS.set(r,t))}return t}toString(){return this.cssText}},F=e=>new Tc(typeof e=="string"?e:e+"",void 0,wb),Le=(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 Tc(r,e,wb)},kS=(e,t)=>{if(Ep)e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet);else for(let r of t){let n=document.createElement("style"),o=Cp.litNonce;o!==void 0&&n.setAttribute("nonce",o),n.textContent=r.cssText,e.appendChild(n)}},kb=Ep?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return F(r)})(e):e});var jF,VF,WF,GF,KF,qF,Mp,xS,YF,XF,Lc,$b,_S,$S,oo,Rp=$(()=>{xb();xb();({is:jF,defineProperty:VF,getOwnPropertyDescriptor:WF,getOwnPropertyNames:GF,getOwnPropertySymbols:KF,getPrototypeOf:qF}=Object),Mp=globalThis,xS=Mp.trustedTypes,YF=xS?xS.emptyScript:"",XF=Mp.reactiveElementPolyfillSupport,Lc=(e,t)=>e,$b={toAttribute(e,t){switch(t){case Boolean:e=e?YF: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}},_S=(e,t)=>!jF(e,t),$S={attribute:!0,type:String,converter:$b,reflect:!1,useDefault:!1,hasChanged:_S};Symbol.metadata??=Symbol("metadata"),Mp.litPropertyMetadata??=new WeakMap;oo=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=$S){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&&VF(this.prototype,t,o)}}static getPropertyDescriptor(t,r,n){let{get:o,set:i}=WF(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)??$S}static _$Ei(){if(this.hasOwnProperty(Lc("elementProperties")))return;let t=qF(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(Lc("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Lc("properties"))){let r=this.properties,n=[...GF(r),...KF(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(kb(o))}else t!==void 0&&r.push(kb(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 kS(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:$b).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:$b;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??_S)(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){}};oo.elementStyles=[],oo.shadowRootOptions={mode:"open"},oo[Lc("elementProperties")]=new Map,oo[Lc("finalized")]=new Map,XF?.({ReactiveElement:oo}),(Mp.reactiveElementVersions??=[]).push("2.1.2")});function FS(e,t){if(!Mb(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return CS!==void 0?CS.createHTML(t):t}function as(e,t,r=e,n){if(t===tt)return t;let o=n!==void 0?r._$Co?.[n]:r._$Cl,i=Oc(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=as(e,o._$AS(e,t.values),o,n)),t}var Sb,SS,Ap,CS,Cb,io,Eb,JF,ss,Bc,Oc,Mb,TS,_b,Fc,ES,MS,os,RS,AS,LS,Rb,d,Et,rq,tt,m,IS,is,BS,Nc,Ip,Aa,ls,Tp,Lp,Fp,Bp,OS,ZF,ae,Xr=$(()=>{Sb=globalThis,SS=e=>e,Ap=Sb.trustedTypes,CS=Ap?Ap.createPolicy("lit-html",{createHTML:e=>e}):void 0,Cb="$lit$",io=`lit$${Math.random().toFixed(9).slice(2)}$`,Eb="?"+io,JF=`<${Eb}>`,ss=document,Bc=()=>ss.createComment(""),Oc=e=>e===null||typeof e!="object"&&typeof e!="function",Mb=Array.isArray,TS=e=>Mb(e)||typeof e?.[Symbol.iterator]=="function",_b=`[
2
+ \f\r]`,Fc=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,ES=/-->/g,MS=/>/g,os=RegExp(`>|${_b}(?:([^\\s"'>=/]+)(${_b}*=${_b}*(?:[^
3
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),RS=/'/g,AS=/"/g,LS=/^(?:script|style|textarea|title)$/i,Rb=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),d=Rb(1),Et=Rb(2),rq=Rb(3),tt=Symbol.for("lit-noChange"),m=Symbol.for("lit-nothing"),IS=new WeakMap,is=ss.createTreeWalker(ss,129);BS=(e,t)=>{let r=e.length-1,n=[],o,i=t===2?"<svg>":t===3?"<math>":"",s=Fc;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===Fc?p[1]==="!--"?s=ES:p[1]!==void 0?s=MS:p[2]!==void 0?(LS.test(p[2])&&(o=RegExp("</"+p[2],"g")),s=os):p[3]!==void 0&&(s=os):s===os?p[0]===">"?(s=o??Fc,f=-1):p[1]===void 0?f=-2:(f=s.lastIndex-p[2].length,u=p[1],s=p[3]===void 0?os:p[3]==='"'?AS:RS):s===AS||s===RS?s=os:s===ES||s===MS?s=Fc:(s=os,o=void 0);let g=s===os&&e[a+1].startsWith("/>")?" ":"";i+=s===Fc?c+JF:f>=0?(n.push(u),c.slice(0,f)+Cb+c.slice(f)+io+g):c+io+(f===-2?a:g)}return[FS(e,i+(e[r]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),n]},Nc=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]=BS(t,r);if(this.el=e.createElement(u,n),is.currentNode=this.el.content,r===2||r===3){let f=this.el.content.firstChild;f.replaceWith(...f.childNodes)}for(;(o=is.nextNode())!==null&&c.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let f of o.getAttributeNames())if(f.endsWith(Cb)){let h=p[s++],g=o.getAttribute(f).split(io),b=/([.?@])?(.*)/.exec(h);c.push({type:1,index:i,name:b[2],strings:g,ctor:b[1]==="."?Tp:b[1]==="?"?Lp:b[1]==="@"?Fp:ls}),o.removeAttribute(f)}else f.startsWith(io)&&(c.push({type:6,index:i}),o.removeAttribute(f));if(LS.test(o.tagName)){let f=o.textContent.split(io),h=f.length-1;if(h>0){o.textContent=Ap?Ap.emptyScript:"";for(let g=0;g<h;g++)o.append(f[g],Bc()),is.nextNode(),c.push({type:2,index:++i});o.append(f[h],Bc())}}}else if(o.nodeType===8)if(o.data===Eb)c.push({type:2,index:i});else{let f=-1;for(;(f=o.data.indexOf(io,f+1))!==-1;)c.push({type:7,index:i}),f+=io.length-1}i++}}static createElement(t,r){let n=ss.createElement("template");return n.innerHTML=t,n}};Ip=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??ss).importNode(r,!0);is.currentNode=o;let i=is.nextNode(),s=0,a=0,c=n[0];for(;c!==void 0;){if(s===c.index){let u;c.type===2?u=new Aa(i,i.nextSibling,this,t):c.type===1?u=new c.ctor(i,c.name,c.strings,this,t):c.type===6&&(u=new Bp(i,this,t)),this._$AV.push(u),c=n[++a]}s!==c?.index&&(i=is.nextNode(),s++)}return is.currentNode=ss,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++}},Aa=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=as(this,t,r),Oc(t)?t===m||t==null||t===""?(this._$AH!==m&&this._$AR(),this._$AH=m):t!==this._$AH&&t!==tt&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):TS(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&&Oc(this._$AH)?this._$AA.nextSibling.data=t:this.T(ss.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=Nc.createElement(FS(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===o)this._$AH.p(r);else{let i=new Ip(o,this),s=i.u(this.options);i.p(r),this.T(s),this._$AH=i}}_$AC(t){let r=IS.get(t.strings);return r===void 0&&IS.set(t.strings,r=new Nc(t)),r}k(t){Mb(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(Bc()),this.O(Bc()),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=SS(t).nextSibling;SS(t).remove(),t=n}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},ls=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=as(this,t,r,0),s=!Oc(t)||t!==this._$AH&&t!==tt,s&&(this._$AH=t);else{let a=t,c,u;for(t=i[0],c=0;c<i.length-1;c++)u=as(this,a[n+c],r,c),u===tt&&(u=this._$AH[c]),s||=!Oc(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??"")}},Tp=class extends ls{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===m?void 0:t}},Lp=class extends ls{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==m)}},Fp=class extends ls{constructor(t,r,n,o,i){super(t,r,n,o,i),this.type=5}_$AI(t,r=this){if((t=as(this,t,r,0)??m)===tt)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)}},Bp=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){as(this,t)}},OS={M:Cb,P:io,A:Eb,C:1,L:BS,R:Ip,D:TS,V:as,I:Aa,H:ls,N:Lp,U:Fp,B:Tp,F:Bp},ZF=Sb.litHtmlPolyfillSupport;ZF?.(Nc,Aa),(Sb.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 Aa(t.insertBefore(Bc(),i),i,void 0,r??{})}return o._$AI(e),o}});var Ab,J,QF,NS=$(()=>{Rp();Rp();Xr();Xr();Ab=globalThis,J=class extends oo{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 tt}};J._$litElement$=!0,J.finalized=!0,Ab.litElementHydrateSupport?.({LitElement:J});QF=Ab.litElementPolyfillSupport;QF?.({LitElement:J});(Ab.litElementVersions??=[]).push("4.2.2")});var PS=$(()=>{});var T=$(()=>{Rp();Xr();NS();PS()});var Nt,Rr,Zt,cs=$(()=>{Nt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Rr=e=>(...t)=>({_$litDirective$:e,values:t}),Zt=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,DS=$(()=>{Xr();cs();z=Rr(class extends Zt{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 tt}})});var He=$(()=>{DS()});var eB,zS,HS,US,Ia,Wo,tB,Ta,jS,Op,Np=$(()=>{Xr();({I:eB}=OS),zS=e=>e,HS=e=>e.strings===void 0,US=()=>document.createComment(""),Ia=(e,t,r)=>{let n=e._$AA.parentNode,o=t===void 0?e._$AB:t._$AA;if(r===void 0){let i=n.insertBefore(US(),o),s=n.insertBefore(US(),o);r=new eB(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=zS(c).nextSibling;zS(n).insertBefore(c,o),c=u}}}return r},Wo=(e,t,r=e)=>(e._$AI(t,r),e),tB={},Ta=(e,t=tB)=>e._$AH=t,jS=e=>e._$AH,Op=e=>{e._$AR(),e._$AA.remove()}});var VS,oe,WS=$(()=>{Xr();cs();Np();VS=(e,t,r)=>{let n=new Map;for(let o=t;o<=r;o++)n.set(e[o],o);return n},oe=Rr(class extends Zt{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=jS(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]=Wo(o[f],i[g]),f++,g++;else if(a[h]===s[b])c[b]=Wo(o[h],i[b]),h--,b--;else if(a[f]===s[b])c[b]=Wo(o[f],i[b]),Ia(e,c[b+1],o[f]),f++,b--;else if(a[h]===s[g])c[g]=Wo(o[h],i[g]),Ia(e,o[f],o[h]),h--,g++;else if(u===void 0&&(u=VS(s,g,b),p=VS(a,f,h)),u.has(a[f]))if(u.has(a[h])){let v=p.get(s[g]),k=v!==void 0?o[v]:null;if(k===null){let w=Ia(e,o[f]);Wo(w,i[g]),c[g]=w}else c[g]=Wo(k,i[g]),Ia(e,o[f],k),o[v]=null;g++}else Op(o[h]),h--;else Op(o[f]),f++;for(;g<=b;){let v=Ia(e,c[b+1]);Wo(v,i[g]),c[g++]=v}for(;f<=h;){let v=o[f++];v!==null&&Op(v)}return this.ut=s,Ta(e,c),tt}})});var Pt=$(()=>{WS()});var GS,rB,Me,KS=$(()=>{Xr();cs();GS="important",rB=" !"+GS,Me=Rr(class extends Zt{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(rB);n.includes("-")||i?r.setProperty(n,i?o.slice(0,-11):o,i?GS:""):r[n]=o}}return tt}})});var so=$(()=>{KS()});function nB(e){Fb.set(e,new Map)}function oB(e,{target:t,key:r,type:n}){n==="iterate"&&(r=JS);let o=Fb.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 iB({target:e,key:t,type:r}){let n=Fb.get(e),o=new Set;if(r==="clear"?n.forEach((i,s)=>{Ib(o,n,s)}):Ib(o,n,t),r==="add"||r==="delete"||r==="clear"){let i=Array.isArray(e)?"length":JS;Ib(o,n,i)}return o}function Ib(e,t,r){let n=t.get(r);n&&n.forEach(e.add,e)}function ZS(e){e.cleaners&&e.cleaners.forEach(sB,e),e.cleaners=[]}function sB(e){e.delete(this)}function aB(e,t,r,n){if(e.unobserved)return Reflect.apply(t,r,n);if(La.indexOf(e)===-1){ZS(e);try{return La.push(e),Reflect.apply(t,r,n)}finally{La.pop()}}}function Jr(e){let t=La[La.length-1];t&&(QS(t,e),oB(t,e))}function Go(e){iB(e).forEach(lB,e)}function lB(e){QS(e,this),typeof e.scheduler=="function"?e.scheduler(e):typeof e.scheduler=="object"?e.scheduler.add(e):e()}function QS(e,t){if(e.debugger&&!Tb)try{Tb=!0,e.debugger(t)}finally{Tb=!1}}function e2(){return La.length>0}function t2(e,t={}){let r=e[qS]?e:function n(){return aB(n,e,this,arguments)};return r.scheduler=t.scheduler,r.debugger=t.debugger,r[qS]=!0,t.lazy||r(),r}function Bb(e){e.unobserved||(e.unobserved=!0,ZS(e)),typeof e.scheduler=="object"&&e.scheduler.delete(e)}function Dp(e){let t=zp.get(e);return e2()&&typeof e=="object"&&e!==null?t||Up(e):t||e}function Lb(e,t){let r=e.next;return e.next=()=>{let{done:n,value:o}=r.call(e);return n||(t?o[1]=Dp(o[1]):o=Dp(o)),{done:n,value:o}},e}function dB({constructor:e}){return!(typeof e=="function"&&e.name in XS&&XS[e.name]===e)||r2.has(e)}function uB(e){return r2.get(e.constructor)}function fB(e,t,r){let n=Reflect.get(e,t,r);if(typeof t=="symbol"&&pB.has(t))return n;Jr({target:e,key:t,receiver:r,type:"get"});let o=zp.get(n);if(e2()&&typeof n=="object"&&n!==null){if(o)return o;let i=Reflect.getOwnPropertyDescriptor(e,t);if(!i||!(i.writable===!1&&i.configurable===!1))return Up(n)}return o||n}function hB(e,t){let r=Reflect.has(e,t);return Jr({target:e,key:t,type:"has"}),r}function mB(e){return Jr({target:e,type:"iterate"}),Reflect.ownKeys(e)}function gB(e,t,r,n){typeof r=="object"&&r!==null&&(r=Mt.get(r)||r);let o=n2.call(e,t),i=e[t],s=Reflect.set(e,t,r,n);return e!==Mt.get(n)||(o?r!==i&&Go({target:e,key:t,value:r,oldValue:i,receiver:n,type:"set"}):Go({target:e,key:t,value:r,receiver:n,type:"add"})),s}function bB(e,t){let r=n2.call(e,t),n=e[t],o=Reflect.deleteProperty(e,t);return r&&Go({target:e,key:t,oldValue:n,type:"delete"}),o}function Up(e={}){return Mt.has(e)||!dB(e)?e:zp.get(e)||yB(e)}function yB(e){let t=uB(e)||vB,r=new Proxy(e,t);return zp.set(e,r),Mt.set(r,e),nB(e),r}var Fb,JS,La,Tb,qS,Mt,zp,cB,YS,Pp,XS,r2,n2,pB,vB,o2=$(()=>{Fb=new WeakMap,JS=Symbol("iteration key");La=[],Tb=!1;qS=Symbol("is reaction");Mt=new WeakMap,zp=new WeakMap,cB=Object.prototype.hasOwnProperty;YS={has(e){let t=Mt.get(this),r=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"has"}),r.has.apply(t,arguments)},get(e){let t=Mt.get(this),r=Reflect.getPrototypeOf(this);return Jr({target:t,key:e,type:"get"}),Dp(r.get.apply(t,arguments))},add(e){let t=Mt.get(this),r=Reflect.getPrototypeOf(this),n=r.has.call(t,e),o=r.add.apply(t,arguments);return n||Go({target:t,key:e,value:e,type:"add"}),o},set(e,t){let r=Mt.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&&Go({target:r,key:e,value:t,oldValue:i,type:"set"}):Go({target:r,key:e,value:t,type:"add"}),s},delete(e){let t=Mt.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&&Go({target:t,key:e,oldValue:o,type:"delete"}),i},clear(){let e=Mt.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&&Go({target:e,oldTarget:n,type:"clear"}),o},forEach(e,...t){let r=Mt.get(this),n=Reflect.getPrototypeOf(this);Jr({target:r,type:"iterate"});let o=(i,...s)=>e(Dp(i),...s);return n.forEach.call(r,o,...t)},keys(){let e=Mt.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),t.keys.apply(e,arguments)},values(){let e=Mt.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let r=t.values.apply(e,arguments);return Lb(r,!1)},entries(){let e=Mt.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let r=t.entries.apply(e,arguments);return Lb(r,!0)},[Symbol.iterator](){let e=Mt.get(this),t=Reflect.getPrototypeOf(this);Jr({target:e,type:"iterate"});let r=t[Symbol.iterator].apply(e,arguments);return Lb(r,e instanceof Map)},get size(){let e=Mt.get(this),t=Reflect.getPrototypeOf(this);return Jr({target:e,type:"iterate"}),Reflect.get(t,"size",e)}},Pp={get(e,t,r){return e=cB.call(YS,t)?YS:e,Reflect.get(e,t,r)}},XS=typeof window=="object"?window:Function("return this")(),r2=new Map([[Map,Pp],[Set,Pp],[WeakMap,Pp],[WeakSet,Pp],[Object,!1],[Array,!1],[Int8Array,!1],[Uint8Array,!1],[Uint8ClampedArray,!1],[Int16Array,!1],[Uint16Array,!1],[Int32Array,!1],[Uint32Array,!1],[Float32Array,!1],[Float64Array,!1]]);n2=Object.prototype.hasOwnProperty,pB=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(e=>typeof e=="symbol"));vB={get:fB,has:hB,ownKeys:mB,set:gB,deleteProperty:bB}});function Ob(e){let t=!0,r=t2(()=>{try{e(t)}finally{t=!1}},{lazy:!0});try{r()}catch(n){throw Bb(r),n}return()=>Bb(r)}var ds,Pc=$(()=>{o2();ds=Up});var i2=$(()=>{});var s2=$(()=>{i2()});var X,Re=$(()=>{T();Pc();T();Pt();s2();X=class extends J{_disposers=[];observes=null;connectedCallback(){super.connectedCallback(),this.bindState()}bindState(){if(this.observes){this._disposers.push(Ob(t=>{this.observes(),t||this.requestUpdate()}));return}this._render||(this._render=this.render,this.render=()=>{let t,r=Ob(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 ao(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 Fa(e){return new Error("Another dialog is already open. Close it and try again.",{cause:e})}var Ye,N,a2,mr=$(()=>{"use strict";T();Ye=document.querySelector("#drop-zone"),N=document.querySelector("#report"),a2=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 l2.encode(e)}function us(e){if(typeof e!="string")throw new TypeError(`utf8ByteLength expects a string, got ${typeof e}`);if(/[\u0100-\uFFFF]/.test(e))return l2.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<kB;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 wB.decode(e)}var l2,wB,kB,Dt=$(()=>{"use strict";l2=new TextEncoder,wB=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});kB=2});function Dc(){return!(typeof window>"u"||typeof PublicKeyCredential>"u"||typeof navigator>"u"||!navigator.credentials)}async function c2(){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 Hp(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}async function Nb(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($B)},t,xB*8);return new Uint8Array(r)}function Pb(e){return crypto.subtle.importKey("raw",e,{name:"AES-GCM"},!1,["encrypt","decrypt"])}async function Ko(e,t,r){let n=Hp(Ba),o=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:n,additionalData:r},e,t)),i=new Uint8Array(Zr.length+Ba+o.length);return i.set(Zr,0),i.set(n,Zr.length),i.set(o,Zr.length+Ba),i}async function ps(e,t,r){if(!zt(t))throw new Error("passkey: missing envelope magic");if(t.length<Zr.length+Ba+16)throw new Error("passkey: envelope too short");let n=t.subarray(Zr.length,Zr.length+Ba),o=t.subarray(Zr.length+Ba);return new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:r},e,o))}function zt(e){if(e.length<Zr.length)return!1;for(let t=0;t<Zr.length;t++)if(e[t]!==Zr[t])return!1;return!0}async function d2(e){if(!Dc())throw new Error("passkey: not supported in this environment");let t=Hp(32),r=Hp(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 Db(e){if(!Dc())throw new Error("passkey: not supported in this environment");let t=Hp(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 Zr,Ba,xB,$B,zb=$(()=>{"use strict";Dt();Zr=new Uint8Array([68,86,69,49]),Ba=12,xB=32,$B="deepview-passkey.v1.content-key"});function jb(){return Uc>0}function u2(){return Ub>0}function fs(){try{let e=localStorage.getItem(Hc);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 p2(e){localStorage.setItem(Hc,JSON.stringify(e))}function EB(){localStorage.removeItem(Hc)}function MB(){try{let t=localStorage.getItem(Oa);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(Oa,e.toBase64({alphabet:"base64url",omitPadding:!0}))}catch{}return e}function Wp(){return typeof location>"u"?"":location.hostname}function me(){return fs()!==null}function Qt(){return ze!==null}function _n(){return!(!Dc()||typeof navigator>"u"||!navigator.locks?.request||!Wp())}function f2(){return xn}function jc(){if(fs()!==null)return!1;try{return localStorage.getItem(Vp)==="1"?!1:localStorage.getItem(Oa)!==null}catch{return!1}}function pt(){return ze}function Vc(){return xe(_B+(xn??""))}function Gp(e){if(typeof e!="string")throw new TypeError("passkey vault: OPFS AAD requires a filename string");return xe(SB+(xn??"")+"|"+e)}function Kp(e){if(typeof e!="string")throw new TypeError("passkey vault: bundle AAD requires a slot string");return xe(CB+(xn??"")+"|"+e)}function rt(e){return Hb.add(e),()=>Hb.delete(e)}function Na(){for(let e of Hb)try{e()}catch(t){console.warn("passkey vault listener:",t)}}async function hs({signal:e}={}){let t=fs();if(!t)return!1;let r;try{r=await Db({credentialId:t.credentialId,prfSalt:t.prfSalt,rpId:t.rpId??Wp(),...e?{signal:e}:{}})}catch(o){if(o&&o.name==="NotAllowedError"||o&&o.name==="AbortError")return!1;throw o&&o.message?.includes("PRF")?zc(o):o}if(!r||r.length<32)throw zc();let n=await Nb(r);return r.fill(0),navigator.locks.request($n,async()=>{let o=fs();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 Pb(n),n.fill(0),xn=o.userId,qo=o.credentialId,Na(),!0})}function zc(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 Vb({migrate:e,userName:t,rpName:r,signal:n,acknowledgeOrphan:o}){if(!Dc())throw new Error("passkey: WebAuthn unavailable in this environment");if(jc()&&!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=Wp();return navigator.locks.request($n,async()=>{if(me())throw new Error("passkey: encryption is already enabled");if(await c2()===!1)throw zc();let a=MB(),c=await d2({userName:t||"DeepView user",userId:a,rpName:r||"DeepView",rpId:i,...n?{signal:n}:{}}),u=c.prfOutput;if(!u)try{u=await Db({credentialId:c.credentialId,prfSalt:c.prfSalt,rpId:i,...n?{signal:n}:{}})}catch(b){let v=a.toBase64({alphabet:"base64url",omitPadding:!0});await jp({credentialId:c.credentialId,rpId:i,userId:v}).catch(()=>{});try{localStorage.removeItem(Oa)}catch{}throw b&&b.message?.includes("PRF")?zc(b):b}if(!u||u.length<32){let b=a.toBase64({alphabet:"base64url",omitPadding:!0});await jp({credentialId:c.credentialId,rpId:i,userId:b}).catch(()=>{});try{localStorage.removeItem(Oa)}catch{}throw zc()}let p=await Nb(u);u.fill(0);let f=await Pb(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,qo=c.credentialId,p2(g),typeof e=="function"&&await e({seal:(v,k)=>Ko(f,v,k)});try{localStorage.removeItem(Vp)}catch{}return Na(),!0})}async function Wb({migrate:e}){if(!me())return{disabled:!1,signalAttempted:!1};if(!Qt())throw new Error("passkey: must unlock before disabling encryption");Uc+=1;try{return await navigator.locks.request($n,async()=>{let t=fs();if(!t)return{disabled:!1,signalAttempted:!1};let r=ze;if(!r)return{disabled:!1,signalAttempted:!1};if(EB(),ze=null,qo=null,typeof e=="function"){let o=(i,s)=>ps(r,i,s);try{await e({open:o})}catch(i){throw p2(t),ze=r,qo=t.credentialId,Na(),i}}xn=null;try{localStorage.setItem(Vp,"1")}catch{}let n=await jp(t).catch(()=>!1);return Na(),{disabled:!0,signalAttempted:n}})}finally{Uc-=1}}async function jp({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 RB(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 AB(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 RB(r,n);o&&t.push(o)}return t}async function Wc({refuseIfEnabled:e=!1}={}){Uc+=1,Ub+=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 b2();let t=fs();if(t)try{await jp({credentialId:t.credentialId,rpId:t.rpId??Wp(),userId:t.userId})}catch{}try{localStorage.removeItem(Hc)}catch{}try{localStorage.removeItem(Oa)}catch{}try{localStorage.removeItem(Vp)}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,qo=null,Na();let r=await AB(["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{Uc-=1,Ub-=1}}function h2(e){return ze?Ko(ze,e,Vc()):Promise.reject(new Error("passkey: vault locked, cannot seal triage"))}function m2(e){return ze?ps(ze,e,Vc()):Promise.reject(new Error("passkey: vault locked, cannot open triage"))}function qp(e,t){return ze?Ko(ze,e,Gp(t)):Promise.reject(new Error("passkey: vault locked, cannot seal OPFS file"))}function g2(e,t){return ze?ps(ze,e,Gp(t)):Promise.reject(new Error("passkey: vault locked, cannot open OPFS file"))}function Yp(e,t){return ze?Ko(ze,e,Kp(t)):Promise.reject(new Error("passkey: vault locked, cannot seal bundle"))}function Xp(e,t){return ze?ps(ze,e,Kp(t)):Promise.reject(new Error("passkey: vault locked, cannot open bundle"))}var Hc,Oa,Vp,$n,_B,SB,CB,ze,xn,qo,Uc,Ub,Hb,Pa=$(()=>{"use strict";zb();Dt();Qr();Hc="deepview.passkey.v1",Oa="deepview.passkey.userId",Vp="deepview.passkey.cleanDisable",$n="deepview.passkey.v1.write",_B="deepview.triage.v1|",SB="deepview.opfs.v1|",CB="deepview.bundle.v1|",ze=null,xn=null,qo=null,Uc=0;Ub=0;Hb=new Set;typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key!==Hc)return;let t=fs();(!t&&ze||t&&ze&&t.credentialId!==qo)&&(ze=null,xn=null,qo=null),Na()})});function Sn(e){let t=()=>e();return Jp.add(t),Zp&&queueMicrotask(()=>{if(Jp.has(t))try{t()}catch(r){console.warn("secure-storage after-hydrate listener:",r)}}),()=>Jp.delete(t)}function IB(){for(let e of Jp)try{e()}catch(t){console.warn("secure-storage after-hydrate listener:",t)}}function Qp(e){let t=f2()??"";return xe(`deepview.secure.v1|${t}|${e}`)}function Gb(e){try{let t=Uint8Array.fromBase64(e);if(zt(t))return t}catch{}return null}function Fe(e){return Rt.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(u2())throw new Error(`secure-storage: wipe in progress, cannot save "${e}"`);let r=Rt.has(e),n=Rt.get(e);Rt.set(e,t),gr.set(e,t);let o=lo.get(e)??Promise.resolve(),i=()=>{gr.get(e)===t&&gr.delete(e)},s=o.catch(()=>{}).then(()=>TB(e,t)).then(()=>i(),a=>{throw i(),Rt.get(e)===t&&(r?Rt.set(e,n):Rt.delete(e)),a});lo.set(e,s.catch(()=>{})),await s}async function Yo(e){let t=Symbol("secure-storage:removed");Rt.delete(e),gr.set(e,t);let r=lo.get(e)??Promise.resolve(),n=()=>{try{localStorage.removeItem(e)}catch{}gr.get(e)===t&&(gr.delete(e),Rt.delete(e))},o=r.catch(()=>{}).then(()=>n());lo.set(e,o.catch(()=>{})),await o}async function TB(e,t){let r=pt();if(r){let n=await Ko(r,xe(t),Qp(e));localStorage.setItem(e,n.toBase64())}else localStorage.setItem(e,t)}async function Cn(){Zp||rt(()=>{Cn().catch(e=>console.warn("secure-storage rehydrate:",e))}),Zp=!0;for(let e of[...Rt.keys()])gr.has(e)||Rt.delete(e);await v2(Da,!0)}async function Kb(e){if(!Da.includes(e))throw new Error(`secure-storage: unknown secure key "${e}"`);return gr.has(e)||Rt.delete(e),(await v2([e],!1)).get(e)??null}async function v2(e,t){let r=pt(),n=[],o=new Map;for(let i of e){if(gr.has(i)){o.set(i,Fe(i));continue}let s=localStorage.getItem(i);if(s===null)continue;let a=Gb(s);if(a){if(!r)continue;try{let c=await ps(r,a,Qp(i));if(gr.has(i)){o.set(i,Fe(i));continue}let u=at(c);Rt.set(i,u),o.set(i,u)}catch(c){console.warn(`secure-storage: decrypt failed for "${i}":`,c)}}else Rt.set(i,s),o.set(i,s),r&&me()&&n.push([i,s])}return t&&IB(),n.length>0&&queueMicrotask(()=>{for(let[i,s]of n)Rt.get(i)===s&&lt(i,s).catch(a=>{console.warn(`secure-storage: self-heal failed for "${i}":`,a)})}),o}async function y2(e,t){let r=lo.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),Rt.set(e,s.cacheValue)))},o=r.catch(()=>{}).then(n);lo.set(e,o.catch(()=>{})),await o}async function qb({seal:e}){for(let t of Da)await y2(t,async r=>{if(Gb(r))return null;let n=pt();return n?{storageValue:(await Ko(n,xe(r),Qp(t))).toBase64(),cacheValue:r}:null})}async function Yb({open:e}){for(let t of Da)await y2(t,async r=>{let n=Gb(r);if(!n)return null;let o=await e(n,Qp(t)),i=at(o);return{storageValue:i,cacheValue:i}})}function za(e,t){return Da.includes(e)?navigator.locks.request(LB+e,async()=>{let r=lo.get(e);r&&await r.catch(()=>{}),await Cn();let n=Fe(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 b2(){await Promise.allSettled([...lo.values()]),gr.clear(),lo.clear()}var Da,Rt,Zp,lo,gr,Jp,LB,Qr=$(()=>{"use strict";Dt();zb();Pa();Da=Object.freeze(["deepview.workspaces","deepview.sync.sessions","deepview.sync.userEnabled","deepview.sync.password","deepview.repoUrls","deepview.fileCounts","deepview.workspaceApp","deepview.lastFile","deepview.scan.access"]),Rt=new Map,Zp=!1,lo=new Map,gr=new Map,Jp=new Set;LB="deepview.secure.v1.mutate:";typeof window<"u"&&window.addEventListener("storage",e=>{!Zp||!e.key||!Da.includes(e.key)||Cn().catch(()=>{})})});var Xb,w2=$(()=>{"use strict";Xb="/api/config"});function Gc(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 k2,Jb=$(()=>{"use strict";k2="http://127.0.0.1:3123/"});function Kc(){try{return localStorage.getItem(Zb)==="1"}catch{return!1}}function ef(){try{localStorage.setItem(Zb,"1")}catch{}}function en(e){return e==="managed+e2e"||e==="e2e+managed"}function Ua(e,t){return(e==="managed"||en(e))&&/^\/(?:team|manage)(?:\/|$)/u.test(t)}function Qb(e,t=null){return t&&(en(e)||e===t)?t:e==="managed"||e==="managed+e2e"?"managed":"e2e"}function ev(e,t){return e&&en(e.mode)&&t.mode==="e2e"?{...e,githubNewIssueLabels:t.githubNewIssueLabels??"",...t.deepviewScanServer?{deepviewScanServer:t.deepviewScanServer}:{}}:t}function tv(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:Gc(e.deepviewScanServer),i=e.githubNewIssueLabels;return{mode:t,managed:r,...o?{deepviewScanServer:o}:{},...typeof i=="string"&&i.length<=4096?{githubNewIssueLabels:i}:{}}}async function tf(){try{let e=await fetch(Xb,{credentials:"same-origin",cache:"no-store",headers:{accept:"application/json"}});return e.status===404?"standalone":e.ok?tv(await e.json()):null}catch{return null}}async function rv(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(x2);if(e==null)return null;let t=tv(JSON.parse(e));return t?{mode:t.mode,managed:t.managed}:null}catch{return null}}function nv(e){try{localStorage.setItem(x2,JSON.stringify({mode:e.mode,managed:e.managed})),localStorage.removeItem(Zb)}catch{}}var x2,Zb,ov=$(()=>{"use strict";w2();Jb();x2="deepview.sync.serverInfo",Zb="deepview.sync.standaloneProbe"});function OB(){try{let e=localStorage.getItem(rf);return e!==null&&BB.has(e)?e:null}catch{return null}}function NB(){try{let e=localStorage.getItem(of);return e==="true"?!0:e==="false"?!1:null}catch{return null}}function Jc(e){if(!Number.isFinite(e))return Xc;let t=Math.round(e*10)/10;return Math.min(Math.max(t,sf),af)}function PB(){try{let e=localStorage.getItem(nf);if(e===null||e.trim()==="")return null;let t=Number(e);return Number.isFinite(t)?Jc(t):null}catch{return null}}function lf(e){try{let t=JSON.parse(e||"{}");return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function cf(){return lf(Fe(Yc))}function Ut(e){return e?cf()[e]??"":""}function S2(e){return iv.add(e),()=>{iv.delete(e)}}function C2(e){for(let t of iv)try{t(e)}catch(r){console.warn("repo-url listener:",r)}}function tn(e,t){if(C()||!e)return;let r=cf();t?r[e]=t:delete r[e],lt(Yc,JSON.stringify(r)).catch(n=>console.warn("saveRepoUrlFor:",n)),za(Yc,n=>{let o=lf(n);return t?o[e]=t:delete o[e],JSON.stringify(o)}).catch(n=>console.warn("saveRepoUrlFor cross-tab merge:",n)),C2(e)}async function E2(e,t){await za(Yc,r=>{let n=lf(r),o=t==="replace"?{...e}:t==="prefer-imported"?{...n,...e}:{...e,...n};return JSON.stringify(o)}),lv()}async function df(e){if(!e||typeof e!="object")return[];let t=[];if(await za(Yc,r=>{let n=lf(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;lv();for(let r of t)C2(r);return t}async function sv(e,t){return!e||!t?!1:(await df({[e]:t})).length>0}function C(){return l.serverMode==="managed"&&!l.localMode}function co(e){l.localMode=!!e}function uf(e,t=globalThis.location?.pathname??""){let r=Ua(e,t);r&&(l.serverModeSelection="managed"),l.serverModeConfig=e,l.serverMode=Qb(e,l.serverModeSelection),l.serverModeSelection!==l.serverMode&&(l.serverModeSelection=null),(r||l.serverMode==="e2e"||en(e))&&co(!1)}function av(){return en(l.serverModeConfig)?(l.serverModeSelection=l.serverMode==="managed"?"e2e":"managed",l.serverMode=l.serverModeSelection,co(!1),!0):l.serverMode!=="managed"?!1:(co(!l.localMode),!0)}function En(){return l.serverMode==="standalone"&&l.localMode?"local":l.serverMode!=="managed"?l.serverMode:l.localMode?"local":"managed"}function lv(){C()||l.repoEditing||l.currentFile&&(l.repoUrl=Ut(l.currentFile))}var _2,rf,Yc,nf,of,BB,Xc,sf,af,iv,qc,$2,l,er=$(()=>{"use strict";Pc();Qr();ov();_2="deepview.viewMode",rf="deepview.severityMode",Yc="deepview.repoUrls",nf="deepview.focusSplit",of="deepview.kanbanDetailFullscreen",BB=new Set(["corrected","original"]),Xc=50,sf=20,af=80;try{localStorage.removeItem(_2)}catch{}iv=new Set;qc=br(),$2=Ua(qc?.mode??"e2e",globalThis.location?.pathname??"")?"managed":null,l=ds({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:OB()??"corrected",triage:new Map,shownTriage:null,nextFindingId:0,activeTabByGroup:new Map,tableSelectedGid:null,filesViewMode:"table",filesSearch:"",filesSelectedFile:null,kanbanPopoverGid:null,kanbanDetailFullscreen:NB()??!1,kanbanExpandedColumn:null,focusGid:null,focusCodeTick:0,focusCodeStack:[],focusCodeAt:0,focusSplit:PB()??Xc,codeBlockTick:0,bundleHashTick:0,linksTick:0,findingIndexTick:0,serverMode:Qb(qc?.mode??"e2e",$2),serverModeConfig:qc?.mode??null,serverModeSelection:$2,deepviewScanServer:null,githubNewIssueLabels:qc?.githubNewIssueLabels??"",localMode:!1,managed:qc?.managed??null,managedSession:null,managedTeams:[],managedReport:null,managedReports:[],managedComments:new Map});Sn(()=>{lv()})});var Mn,pf=$(()=>{"use strict";Mn=new Set(["overview","graph","treemap","compare","advisories","issues","code","search","terminal"])});function zB(e){for(let t=0;t<e.length;t++){let r=e.codePointAt(t);if(r<32||r===127)return!0}return!1}function UB(e){return typeof e=="string"&&e.length>0&&e.length<=Zc&&!zB(e)}function Ht(e){return UB(e)&&!DB.test(e)}var DB,Zc,ff=$(()=>{"use strict";DB=/^\d+$/u;Zc=512});function M2(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(ms,e.view)){let n=ms[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=M2(e.finding.id);return e.view==="findings"&&n?`${t}${r}${n}`:null}return`${t}${r}${e.view==="files"?"/files":""}`}function Qc(e){let t=e.pathname.replace(/\/$/u,"")||"/";if(t==="/"||t==="/index.html")return{view:"home"};let r=Object.keys(ms).find(i=>ms[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>Zc*9)return null;let a=o[4]?decodeURIComponent(o[4]):null;return a!=null&&!M2(a)?null:{view:o[3]?"files":"findings",teamSlug:i,reportSlug:s,...a==null?{}:{finding:{id:a}}}}catch{return null}}function hf(e,t,r=[]){if(e.view==="bundles"){let{teamSlug:f,bundleSlug:h,...g}=e,b=f==null?[]:t.filter(x=>x.slug===f);if(f!=null&&b.length!==1)return null;let v=b[0],k=f==null?r:t.flatMap(x=>x.bundles??[]),w=new Set(k.filter(x=>x.slug===h).map(x=>x.id)),y=(v?.bundles??r).find(x=>x.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 vt(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 hf(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 hf(c,t)?c:null}var ms,uo=$(()=>{"use strict";pf();ff();ms=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 A2(e,t){return`${e}\0${t}`}function I2(e){return typeof e=="string"&&jB.test(e)}async function At(e,t){let r=WB[e];if(!r||typeof t!="string"||!t)return null;let n=A2(e,t),o=cv.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,HB).toBase64({alphabet:"base64url",omitPadding:!0})}catch{return null}return cv.set(n,i),i}function mf(e,t){return typeof t!="string"||!t?null:cv.get(A2(e,t))??null}function GB(e,t){let r=[];for(let[n,o]of[["report",e],["workspace",t]]){if(o==null||o===""){r.push(ed);continue}if(!I2(o))throw new TypeError(`encodeFindingRef: ${n} must be a link hint token, not a name`);r.push(o)}return r.every(n=>n===ed)?null:r[0]===ed?`w${r[1]}`:r.join("")}function KB(e){let t=[e.slice(0,R2),e.slice(R2)].map(r=>r===ed?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=GB(t,r);return o&&n.push(`v=${o}`),n.join("&")}function dv(e,t){let r=Rn(e);return typeof location>"u"?`${t??""}#${r}`:`${location.origin}${t??location.pathname}#${r}`}function Xo(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"&&I2(a.slice(1))){let u=a.slice(1);Object.assign(n,{report:null,workspace:u===ed?null:u});continue}if(!VB.test(a))continue;Object.assign(n,KB(a));continue}if(s!=="finding"||a.length>Zc*3)continue;let c;try{c=decodeURIComponent(a)}catch{continue}Ht(c)&&(n.id=c)}return n.id?n:null}function T2(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=Qc(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=Xo(r.hash);if(!o)return null;let i=Rn(o);return{id:o.id,fragment:i,path:`/#${i}`}}var HB,R2,jB,VB,ed,WB,cv,Ha=$(()=>{"use strict";Dt();uo();ff();ff();HB=3,R2=4,jB=/^[\w-]{4}$/u,VB=/^[\w-]{8}$/u,ed="AAAA",WB={report:`deepview/finding-link/report/v1
4
+ `,workspace:`deepview/finding-link/workspace/v1
5
+ `},cv=new Map});function qB(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 Ar(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=qB(s);if(a===null)return null;Ht(a)?i.add(a):n++}i.size>1&&r.push([...i])}return{groups:r,skipped:n}}function gf(e){let t=new Set;for(let r of e)for(let n of r)t.add(n);return t.size}function bf(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,gs=$(()=>{"use strict";Ha();Xe="links"});function uv(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 YB.encode(e)}var YB,L2=$(()=>{YB=new TextEncoder});async function pv(e){let t=typeof e=="string"?uv(e):e,r=new Uint8Array(await crypto.subtle.digest("SHA-512",t));return`sha512-${btoa(String.fromCodePoint(...r))}`}async function XB(e){let t=uv(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=Array.from(n,i=>i.toString(16).padStart(2,"0")).join("");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function fv(e){if(typeof crypto?.subtle?.digest!="function")return null;let t=td(e);try{return await XB(t)}catch{return null}}function td(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 rd=$(()=>{L2()});function vf(e,t,r=t){let n=/^ */u.exec(e)[0].length;if(n>3)return null;if(t&&r&&ZB.test(e))return!0;let o=B2.exec(e);if(o&&!(o[2][0]==="`"&&o[3].includes("`")))return{fence:o[2]};let i=e.slice(n);for(let[c,u,p]of eO){let f=c.exec(i);if(f)return{html:u,close:typeof p=="function"?p(f):p}}if(!t&&tO.test(i))return{html:O2,close:null};let s=F2.test(e)?null:bs.exec(e);if(s&&!(t&&r&&/^ *(?:\d*[02-9]|\d+\d)[.)]/u.test(s[0]))){let c=/ +$/u.exec(s[0])[0].length;return{item:c>4?s[0].length-c+1:s[0].length}}let a=F2.test(e)||t&&r?null:QB.exec(e);return a?{item:a[0].trimEnd().length+1}:JB.test(e)||null}function It(e){return yf(e).ranges}function rO(e,t){let r=e.replace(/^(?: {0,3}> ?)+/u,""),n=vf(r,t);for(;n?.item;)r=r.slice(n.item),n=vf(r,!1);return r.trim()!==""&&!n&&/^ */u.exec(r)[0].length<4}function yf(e){let t=[],r=-1,n="",o=null,i=0,s=[],a=!1,c=!1,u=!1,p=0;for(let h of e.split(`
6
+ `)){let g=p;p+=h.length+1;let b=/^ */u.exec(h)[0].length;if(r!==-1||o){let _=i>0&&h.trim()!==""&&b<i,S=!_&&(o?o.ends.test(h):b<=i+3&&N2(n,h));if((_||S)&&(r!==-1&&t.push([r,_?g-1:g+h.length]),r=-1,o=null),!_)continue}if(!h.trim()){u&&s.pop(),u=!1,a=!1;continue}let v=s.length;for(;v>0&&b<s[v-1];)v--;let k=v>0?s[v-1]:0,w=h.slice(k),y=vf(w,a,v===s.length&&!c);if(a&&!y)continue;for(s.length=v;y?.item;)k+=y.item,w=w.slice(y.item),s.push(k),y=vf(w,!1);u=w.trim()==="",y?.fence?[r,n,i]=[g,y.fence,k]:y?.html&&([o,i]=[y.html.test(w)?null:{ends:y.html,close:y.close},k]);let x=a&&c;c=/^ {0,3}>/u.test(w),a=c?rO(w,x):!y&&!u&&/^ */u.exec(w)[0].length<4}r!==-1&&t.push([r,e.length]);let f=r===-1?o?.close:n;return{ranges:t,closer:f?" ".repeat(i)+f:null}}function N2(e,t){let r=B2.exec(t);return r!==null&&r[2][0]===e[0]&&r[2].length>=e.length&&!r[3].trim()}function rn(e,t){let r=0,n=e.length;for(;r<n;){let o=r+n>>>1;e[o][1]<=t?r=o+1:n=o}return r<e.length&&t>=e[r][0]}var B2,JB,F2,ZB,bs,QB,O2,eO,tO,hv=$(()=>{B2=/^( *)(`{3,}|~{3,})(.*)$/u,JB=/^ {0,3}(?:#{1,6}(?:[ \t]|$)|>|([-*_])(?:[ \t]*\1){2,}[ \t]*$)/u,F2=/^ {0,3}([-*_])(?:[ \t]*\1){2,}[ \t]*$/u,ZB=/^ {0,3}(?:=+|-+)[ \t]*$/u,bs=/^( *)(?:[-*+]|\d{1,9}[.)]) +(?=\S)/u,QB=/^ *(?:[-*+]|\d{1,9}[.)])[ \t]*$/u,O2=/^\s*$/u,eO=[[/^<(script|pre|textarea|style)(?:\s|>|$)/iu,/<\/(?:script|pre|textarea|style)>/iu,e=>`</${e[1].toLowerCase()}>`],[/^<!--/u,/-->/u,"-->"],[/^<\?/u,/\?>/u,"?>"],[/^<![A-Za-z]/u,/>/u,"<!-- -->"],[/^<!\[CDATA\[/u,/\]\]>/u,"]]>"],[/^<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|search|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/iu,O2,null]],tO=/^(?:<[A-Za-z][\dA-Za-z-]*(?:\s+[:A-Z_a-z][\w.:-]*(?:\s*=\s*(?:[^\s"'<=>`]+|'[^']*'|"[^"]*"))?)*\s*\/?>|<\/[A-Za-z][\dA-Za-z-]*\s*>)\s*$/u});function Ir(e){return String(e??"").replaceAll(/\r\n?/gu,`
7
+ `)}function kf(e){return/^[0-9a-f]{7,64}$/iu.test(e)}function D2(e,t){let r=It(e);return[...e.matchAll(t)].filter(n=>!rn(r,n.index))}function ja(e,t){let r=D2(e,t);return[e.slice(0,r[0]?.index),...r.map((n,o)=>e.slice(n.index+n[0].length,r[o+1]?.index))]}function Zo(e,t){let r=D2(e,t);return{head:e.slice(0,r[0]?.index),subs:r.map((n,o)=>({heading:n[1],body:e.slice(n.index+n[0].length+1,r[o+1]?.index)}))}}function Qo(e,t){return Zo(e,t).subs}function vs(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 od(e){let t=e.split(`
9
+ `).map(n=>n.trim()).filter(n=>n.startsWith("|")&&!(/^[\s:|-]+$/u.test(n)&&n.includes("-"))).map(n=>n.replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(o=>o.trim()));if(t.length<2)return[];let r=t[0].map(n=>n.toLowerCase());return t.slice(1).filter(n=>n.length!==r.length||n.some((o,i)=>o.toLowerCase()!==r[i])).map(n=>Object.fromEntries(r.flatMap((o,i)=>o?[[o,n[i]??""]]:[])))}function z2(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(),k=b[2],w;for(;(w=/\s+[·•]\s+\*\*([^:*]+):\*\*\s*/u.exec(k))!==null;)c(v.toLowerCase(),v,k.slice(0,w.index)),v=w[1].trim(),k=k.slice(w.index+w[0].length);o=v.toLowerCase(),i=v,s=[k];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 U2(e){let t=(e||"").trim(),r="",n=Va(t);n&&(t=n.label.trim(),r=n.url.trim());let o=/#L(\d+)/u.exec(r)?.[1]??"",a=[...t.matchAll(/`([^`]+)`/gu)].map(p=>p[1].trim()).find(p=>!p.includes("(")&&(p.includes("/")||/\.\w/u.test(p)))??(t.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),c=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(a);c&&(a=c[1],o||(o=c[2]));let u=mv.exec(a);return u?(o||(o=u[2]),{file:u[1],line:o,locationLink:r}):{file:a,line:o||"?",locationLink:r}}function gv(e){return e.replaceAll("**","")}function Va(e){let t=String(e??""),r=nO(t,oO(t)),n=iO(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=sO(t,s+1,n);if(a!==null)return{label:t.slice(i+1,s),url:a,index:i}}}return null}function nO(e,t){let r=new Map,n=[];for(let o=0;o<e.length;o++){let i=e[o];H2(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 oO(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 iO(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];H2(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 sO(e,t,r){let n=aO(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 aO(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 H2(e,t){return e[t]==="\\"&&cO.test(e[t+1]??"")}function id(e){return typeof e=="string"?e.replace(lO,"$1"):e}function j2(e){let t=/^\[(.+)\]$/u.exec(e.trim());return t?t[1].trim():e.trim()}function ys(e){let t=(e||"").trim();return/^[-–—]+$/u.test(t)?"":t}var wf,nd,Jo,P2,mv,lO,cO,Tr=$(()=>{hv();hv();wf=/^## +(.*)$/gmu,nd=/^### +(.*)$/gmu,Jo=/^#### +(.*)$/gmu,P2=/^##### +(.*)$/gmu,mv=/^(.+):(\d+(?:-\d+)?)$/u;lO=/\\([!-/:-@[-`{-~])/gu,cO=/[!-/:-@[-`{-~]/u});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=td({...e,severity:t})),e.severity=r),e.correctedSeverity!==void 0&&(e.correctedSeverity=An(e.correctedSeverity)),e}var xf,nn=$(()=>{rd();xf=new Map([["CRITICAL","critical"],["HIGH","high"],["MEDIUM","medium"],["LOW","low"],["INFO","informational"],["INFORMATIONAL","informational"],["INFORMATIVE","informative"]])});function pO(e){if(e!==void 0)return V2.get(G2(e))??V2.get("medium")}function K2(e){let r=Ir(e).trim().split(dO);if(r.length===1)return null;let n=[];for(let o=1;o<r.length;o+=2){let i=uO.get(r[o].toUpperCase())??"medium";for(let s of ja(r[o+1],/^### /gmu).slice(1)){let a=W2(s,i);if(!a)continue;let c=s.indexOf(`
14
+ ### `);c!==-1&&(a._idBasis=td(W2(s.slice(0,c+1),i))),n.push(a)}}return n.length===0?null:{type:"security",source:"deepsec",findings:n}}function W2(e,t){let{title:r,body:n}=vs(e);if(!r)return null;let o=n.replace(/\n---\s*$/u,"").trim(),i=Object.fromEntries([...o.matchAll(/^- \*\*([^:*]+):\*\*\s*(.+)$/gmu)].map(k=>[k[1].trim().toLowerCase(),k[2].trim()])),s=/^\*\*Recommendation:\*\*\s*/mu.exec(o),a=s?o.slice(0,s.index):o,c=s?o.slice(s.index+s[0].length).trim():"",u=a.split(`
15
+ `).filter(k=>!/^\s*- \*\*/u.test(k)).join(`
16
+ `).replaceAll("**","").trim(),p=[r,u].filter(Boolean).join(`
17
+
18
+ `),f=(i.file||"unknown").replace(/^`(.*)`$/u,"$1"),h=(i.lines||"").split(",").map(k=>k.trim()).find(Boolean)||"?",g={file:f,line:h,severity:t,description:p};c&&(g.recommendation=c.replaceAll("**",""));let b=pO(i.confidence);b!==void 0&&(g.confidence=b);let v=fO.get(G2(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 dO,uO,G2,V2,fO,q2=$(()=>{rd();Tr();nn();dO=/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*\n/mu,uO=new Map([...xf,["HIGH_BUG","high_bug"],["BUG","bug"]]),G2=e=>String(e??"").toLowerCase().replaceAll(/[^a-z]+/gu,""),V2=new Map([["high",8],["medium",6],["low",4]]);fO=new Map([["confirmed","confirmed"],["falsepositive","refuted"],["uncertain","unknown"]])});function In(e){return Wa[An(e)]??String(e??"")}var Wa,ei,sd,yt,Ga=$(()=>{nn();Wa={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"},sd={red:"Red",blue:"Blue",green:"Green",gray:"Gray",none:"Unmarked"},yt={"claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium"}});function Y2(e){return e=An(e),e!=null&&e in We?e:null}function Lr(e){return Y2(e?.correctedSeverity)??An(e?.severity)}function yr(e){let t=Y2(e?.correctedSeverity);return t!=null&&t!==An(e?.severity)}function ue(e,t){return t==="original"?An(e?.severity):Lr(e)}function Ka(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 hO.has(e?.revalidate)?e.revalidate:""}function on(e,t=e?.source){return Object.hasOwn(yt,t)||$e(e)==="revalidation"}function bv(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 ks(e){return e&&e.replace(/^[^/]+\//u,"").replace(/^claude-/u,"").replaceAll("-"," ")}function ad(e,t=!0){let r=t&&$e(e)==="revalidation"?"revalidate":"";return[e?.type,r,ks(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 po(e){let t=e?.exportName,r=e?.methodName;return t&&r&&t!==r?`${t}.${r}`:t||r||""}function xs(e){return e?e.split(`
19
+ `).find(t=>t.trim())?.trim()??"":""}function vv(e){return typeof e?.title=="string"?e.title.trim():""}function Ge(e){return vv(e)||xs(jt(e?.description,e))}function ti(e){let t=jt(e?.description,e)||"",r=vv(e);if(r){let i=t.trim(),s=vs(i);return{title:r,body:s.title===r?s.body.replace(/^\s+/u,""):i}}let n=t.indexOf(`
20
+ `);if(n<0)return{title:"",body:t};if(It(t.slice(0,n))[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 qa(e){let t=vv(e);if(!t)return jt(e?.description,e)||"";let{body:r}=ti(e);return r?`${t}
21
+
22
+ ${r}`:t}function Ya(e){let t=[];for(let r of ja(e||"",/\n{2,}/gu)){if(!r.trim())continue;let n=mO.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 wt(e){return Number.isFinite(parseInt(e?.line,10))?`${e.file}:${e.line}`:e?.file??""}function $s(e){let t=r=>typeof r=="string"?r:"";return`${t(e?.observation)}
25
+ ${t(e?.text)}`.trim()}var We,Ae,ws,hO,mO,ri=$(()=>{Tr();Ga();nn();We={critical:6,high:5,medium:4,low:3,high_bug:2,bug:1,informational:0},Ae=["critical","high","medium","low","high_bug","bug","informational"];ws=["revalidation","refuted","unreachable","confirmed","partial","unknown"],hO=new Set(ws);mO=/^\*\*([^*\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 yv(e){return String(e??"").replaceAll(/\s*\n\s*/gu," ").replaceAll("|","\\|").trim()}function kt(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 X2(e){return String(e??"").replaceAll(/[[\]]/gu,"\\$&")}function _s(e,t){let r=/[\s()<>]/u.test(t)?`<${t.replaceAll(">","%3E")}>`:t;return`[${e}](${r})`}function $f(e){return Pe(e)?`<${e}>`:String(e??"")}function J2(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 Tn(e,t){return`${"#".repeat(Math.min(6,Math.max(1,e)))} ${t}`}function wv(e,t,r=[]){let n=e.map((o,i)=>r[i]==="right"?"---:":"---");return[e,n,...t].map(o=>`| ${o.join(" | ")} |`).join(`
26
+ `)}function Z2(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 Xa(e,t,r=`${t}s`){return`${e} ${e===1?t:r}`}function ld(e){return e.filter(t=>typeof t=="string"&&t.trim()).map(t=>t.replace(/\s+$/u,"")).join(`
27
+
28
+ `)}function Ja(e){let t=Ir(e).trim();if(!t)return"";let r=Q2(t,o=>o.replace(gO,"$1\\$2")),{closer:n}=yf(r);return n===null?r:`${r}
29
+ ${n}`}function Q2(e,t){let r=It(e),n=0;return e.split(`
30
+ `).map(o=>{let i=n;return n+=o.length+1,rn(r,i)?o:t(o)}).join(`
31
+ `)}function Ss(e){return Q2(String(e??""),t=>t.replace(/^( {0,3})\\(\\*#)/u,"$1$2"))}function e5(e,t){let r=" ".repeat(e.length);return t.split(`
32
+ `).map(n=>n?r+n:"").join(`
33
+ `)}var gO,Za=$(()=>{Tr();gO=/^( {0,3})(\\*#)/u});function fo(e,t){if(!t.source)for(let r of t5)e[r]==null&&t[r]!=null&&(e[r]=t[r])}function cd(e){return vO.test(e)}function xt(e){let t=e?.repo?.github;if(typeof t!="string")return null;let r=t.trim().replace(/\/+$/u,"");if(!r)return null;let n=bO.exec(r),o=(n?`${n[1]}/${n[2]}`:r).replace(/\.git$/u,"");return cd(o)?o:null}function Ln(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 t5,bO,vO,_f=$(()=>{t5=["type","model","think","effort","exportsMode"];bO=/^(?:https?:\/\/)?(?:www\.)?github\.com\/([^/?#]+)\/([^/?#]+?)(?:\.git)?(?:[/?#].*)?$/iu,vO=/^[\w.-]+\/[\w.-]+$/u});function o5(e){let t=Ge(e)||wt(e)||"Untitled finding";return t.length>kv?`${t.slice(0,kv-1).trimEnd()}\u2026`:t}function xv(e){let t=String(e??"").trim();return Pe(t)?$f(t):cd(t)?_s(t,`https://github.com/${t}`):t}function i5(e,t,r){return t?yt[t]??String(t):ad(e,r)}function Fn(e){return typeof e=="number"?Number.isFinite(e)?String(e):"":typeof e=="string"?e.replaceAll(/\s*\n\s*/gu," ").trim():""}function r5(e){return typeof e=="string"?e.trim():""}function yO(e,t){let r=t.severityMode==="original",n=In(ue(e,t.severityMode));yr(e)&&(n+=r?` \u2014 corrected to ${In(Lr(e))}`:` \u2014 corrected from ${In(e.severity)}`);let o=Ka(e);if(o){let i=Object.entries(o).map(([s,a])=>`${s||"this report"}: ${In(a?.severity)}`);n+=` (varies across reports \u2014 ${i.join("; ")})`}return e.critical===!0&&(n+=" \xB7 flagged critical by the analyzer"),n}function wO(e,t){let r=wt(e);if(!r)return"";let n=t.hooks.location(e),o=Pe(n)?_s(kt(r),n):kt(r),i=po(e);return i?`${o} \xB7 ${kt(i)}`:o}function kO(e){if(!e)return"";let t=[],r=ei[e.triage]??(e.ignored?ei.ignored:"");return r&&t.push(r),e.color&&t.push(`${sd[e.color]??e.color} mark`),e.flagged===!0&&t.push("Flagged"),t.join(" \xB7 ")}function xO(e,t){let r=Fn(e.commitHash);if(!r)return"";let n=t.hooks.commit(e);return Pe(n)?_s(kt(r.slice(0,7)),n):kt(r)}function $O(e,t,r){let n=[],o=(f,h)=>{h&&n.push(`- **${f}:** ${h}`)};o("Location",wO(e,t)),o("Severity",yO(e,t)),e.confidence!==void 0&&e.confidence!==null&&o("Confidence",`${e.confidence}/10`),t.showAnalyzer&&o("Analyzer",t.analyzerOf(e)),o("Category",Fn(e.category));let i=t.revalidation?$e(e):"";i&&o("Revalidation",i==="revalidation"?"the revalidation pass itself":i);let s=Fn(e.revalidateSource);i&&o("Revalidated by",yt[s]??s),o("Triage",kO(r)),r?.fix&&o("Fix",$f(String(r.fix).trim())),t.showReport&&o("Report",kt(t.hooks.report(e)??""));let a=Fn(e.repo?.github);a&&a!==t.repo&&o("Repository",xv(a)),o("Introduced in",xO(e,t));let c=Fn(e.discoveredIn);c&&c!==String(e.file??"").trim()&&o("Found while analyzing",kt(c));let u=e.package?.npm,p=Fn(u?.name);p&&o("Package",kt(Fn(u.version)?`${p}@${Fn(u.version)}`:p));for(let[f,h]of _v)o(f,Fn(e[h]));for(let[f,h]of Sv)o(f,kt(Fn(e[h])));return n.join(`
34
+ `)}function Sf(e,t,r){let n=Ja(r);return n?`${Tn(e,t)}
35
+
36
+ ${n}`:Tn(e,t)}function _O(e,t){return(Array.isArray(e.evidence)?e.evidence:[]).map((n,o)=>{let i=`${o+1}. `,s=wt(n),a=t.hooks.evidence(n,e,o),c="";s?c=Pe(a)?_s(kt(s),a):kt(s):Pe(a)&&(c=$f(a));let u=Ja($s(n)),p=i+(c||"(no reference)");return u?`${p}
37
+
38
+ ${e5(i,u)}`:p}).join(`
39
+
40
+ `)}function SO(e,t,r){let n=ti(e),o=Ir(n.body),i=Ge(e),s=i.length>kv,a=!s&&!n.title&&o.trim()===i,c=s&&xs(o)!==i?`${i}
41
+
42
+ ${o}`:o,u=Ya(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=>Ja(v.body)),b=_O(e,t);b&&g.push(`${Tn(r,"Evidence")}
43
+
44
+ ${b}`);for(let v of h)g.push(v.label===null?Ja(v.body):Sf(r,v.label,v.body));return g}function n5(e,t,r){let n=t.hooks.annotation(e),o=[$O(e,t,n),...SO(e,t,r)];for(let[s,a,c]of $v){if(c&&!t.revalidation)continue;let u=e[a],p=typeof u=="string"?jt(u,e):"";p.trim()&&o.push(Sf(r,s,p))}yr(e)&&r5(e.correctedSeverityReason)&&o.push(Sf(r,"Severity correction",e.correctedSeverityReason));let i=r5(n?.comment);return i&&o.push(Sf(r,"Comment",i)),o}function s5(e,t,{headingText:r,depth:n}){let o=[Tn(n,r)];if(e.length===1)return ld([...o,...n5(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=>kt(c)).join(", ")}`:"";o.push(`${Xa(e.length,"case")} of this finding${s}.`);let a=Ge(e[0]);return e.forEach((c,u)=>{let p=wt(c);o.push(Tn(n+1,`Case ${u+1} of ${e.length}${p?` \u2014 ${kt(p)}`:""}`));let f=Ge(c);f&&f!==a&&o.push(Ja(f)),o.push(...n5(c,t,n+2))}),ld(o)}var kv,$v,_v,Sv,Cv=$(()=>{ri();Ga();Za();_f();Tr();kv=120;$v=[["Impact","impact",!1],["Reproduction","reproduction",!1],["Recommendation","recommendation",!1],["Confidence reasoning","confidenceReason",!1],["Revalidation verdict","revalidateVerdict",!0],["Revalidation recommendation","revalidateRecommendation",!0]],_v=[["Status","status"],["Branch","branch"],["Date created","dateCreated"],["Detected at","detectedAt"],["Committed at","committedAt"],["PoC status","pocStatus"],["Variant of","parent"],["Slug","slug"],["Priority","priority"]],Sv=[["Detailed report","reportPath"],["Commit audited","auditedCommit"],["ID","id"]]});function Cs(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 Ef(e){let t=Va(String(e??""));return t?.index===0?{label:t.label,url:t.url}:null}function c5(e){let t=/^<(https?:[^>\s]*)>$/u.exec(e.trim());return t?t[1]:null}function d5(e){let t=mv.exec(e);return t?{file:t[1],line:t[2]}:{file:e,line:"?"}}function EO(e){let t=e.indexOf(".");return t>0?{exportName:e.slice(0,t),methodName:e.slice(t+1)}:{exportName:e}}function Cf(e){let t=String(e??"").trim();return CO.get(t.toLowerCase())??t}function MO(e){let t={},r=e.trim(),n=/ · (`+)(.+?)\1$/u.exec(r);n&&(Object.assign(t,EO(Cs(n[0]))),r=r.slice(0,n.index));let o=Ef(r),i=Cs(o?o.label:r);return i!==null&&Object.assign(t,d5(i)),o&&Pe(o.url)&&(t.location=o.url),t}function AO(e){let t={},r=e.trim();r.endsWith(a5)&&(t.critical=!0,r=r.slice(0,-a5.length));let n=r.indexOf(RO);n!==-1&&(r=r.slice(0,n));let o=/^(.*?) — corrected (from|to) (.*)$/u.exec(r);return o?[t.severity,t.correctedSeverity]=(o[2]==="from"?[o[3],o[1]]:[o[1],o[3]]).map(Cf):t.severity=Cf(r),t}function LO(e){return/\d/u.test(e)||/^(?:opus|sonnet|haiku|gpt|gemini|fable|mythos|llama|mistral)\b/iu.test(e)}function Mf(e){let t=e.trim(),r=l5.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":TO.has(i)&&!n.exportsMode?n.exportsMode=i:IO.has(i)&&!n.effort?n.effort=i:o.push(i);return o.length>1?[n.type,n.model]=o:o.length===1&&(n[LO(o[0])?"model":"type"]=o[0]),{run:n}}function Ev(e){let t=e.trim(),r=Ef(t);return r?r.label.trim():c5(t)??t}function FO(e){let t=Ef(e.trim());if(t){let r=t.url.split("/").at(-1)??"";return kf(r)?r:Cs(t.label)??r}return Cs(e)??e.trim()}function BO(e){let t=Cs(e)??e.trim(),r=t.lastIndexOf("@");return{npm:r>0?{name:t.slice(0,r),version:t.slice(r+1)}:{name:t}}}function OO(e){let t=e.trim().toLowerCase();return t==="the revalidation pass itself"?"revalidation":ws.includes(t)?t:void 0}function u5(e,t,r){let n=NO.get(t.trim().toLowerCase());n&&n(e,r.trim())}function p5(e){let t=e.split(`
45
+ `),r=0,n=()=>{for(;r<t.length&&!t[r].trim();)r++},o=()=>{let a=[];for(let c;(c=PO.exec(t[r]??""))!==null;r++)a.push([c[1].trim(),c[2].trim()]);return a};n();let i=o();if(i.length>0)return{title:"",facts:i,rest:t.slice(r).join(`
46
+ `)};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:Ss(s.join(`
47
+ `).trim()),facts:i,rest:t.slice(r).join(`
48
+ `)}}function f5(e){let t=[],r=It(e),n=0;for(let o of e.split(`
49
+ `)){let i=rn(r,n)?null:DO.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=>zO(o))}function zO({ref:e,indent:t,note:r}){let n={},o=Ef(e),i=c5(e),s=i===null?Cs(o?o.label:e):null;s!==null&&Object.assign(n,d5(s));let a=o?o.url:i;Pe(a)&&(n.url=a);let c=Ss(r.map(u=>u.slice(Math.min(t,/^ */u.exec(u)[0].length))).join(`
50
+ `).trim());return c&&(n.text=c),n}function m5(e){let t=e.length,r=1/0;for(let n=e.length-1;n>=0;n--){let o=UO.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=>[h5.get(n.label.toLowerCase()),n.body])}}function g5(e,t,r){let n=[],o=xs(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(`
51
+
52
+ `)}var CO,l5,a5,RO,IO,TO,NO,PO,DO,h5,UO,b5=$(()=>{ri();Ga();Tr();Za();Cv();CO=new Map(Object.entries(Wa).map(([e,t])=>[t.toLowerCase(),e])),l5=new Map(Object.entries(yt).map(([e,t])=>[t.toLowerCase(),e]));a5=" \xB7 flagged critical by the analyzer",RO=" (varies across reports \u2014 ";IO=new Set(["max","xhigh","high","medium","low","minimal"]),TO=new Set(["list","isolate"]);NO=new Map([...[["Category","category"],..._v].map(([e,t])=>[e.toLowerCase(),(r,n)=>{r[t]=n}]),...[...Sv,["Found while analyzing","discoveredIn"]].map(([e,t])=>[e.toLowerCase(),(r,n)=>{r[t]=Cs(n)??n}]),["location",(e,t)=>Object.assign(e,MO(t))],["severity",(e,t)=>Object.assign(e,AO(t))],["confidence",(e,t)=>{let r=/^(\d+(?:\.\d+)?)\/10$/u.exec(t);r&&(e.confidence=Number(r[1]))}],["revalidation",(e,t)=>{let r=OO(t);r&&(e.revalidate=r)}],["revalidated by",(e,t)=>{let r=t.trim();r&&(e.revalidateSource=l5.get(r.toLowerCase())??r)}],["repository",(e,t)=>{e.repo={github:Ev(t)}}],["introduced in",(e,t)=>{e.commitHash=FO(t)}],["package",(e,t)=>{e.package=BO(t)}],["priority",(e,t)=>{e.priority=/^-?\d+(?:\.\d+)?$/u.test(t)?Number(t):t}]]);PO=/^- \*\*([^*\n]+?):\*\* ?(.*)$/u;DO=/^(\d+)\. (.*)$/u;h5=new Map($v.map(([e,t])=>[e.toLowerCase(),t])),UO=[...h5.keys()]});function y5(e){let t=Ir(e).trim();if(!HO.test(t))return null;let{head:r,subs:n}=Zo(t,wf),o=[];for(let{heading:i,body:s}of n){if(i.trim().toLowerCase()==="summary")continue;let a=GO(i);for(let c of Qo(s,nd))o.push(qO(c,a))}return XO(KO(r),o)}function GO(e){let t=/^(.*?)\s*\(\d+\)\s*$/u.exec(e.trim());return Cf(t?t[1]:e)}function KO(e){let t=new Map;for(let r of e.matchAll(VO)){let n=r[1].trim().toLowerCase();t.has(n)||t.set(n,r[2].trim())}return{sources:(t.get("source")??"").split(",").map(r=>Mf(r).source).filter(Boolean),analyzers:(t.get("analyzer")??t.get("analyzers")??"").split(";").map(r=>r.trim()).filter(Boolean),repo:t.has("repository")?Ev(t.get("repository")):""}}function qO({heading:e,body:t},r){let n=e.trim().replace(/^\d+\.\s+/u,""),o=Qo(t,Jo).filter(i=>jO.test(i.heading.trim()));return o.length===0?[v5(t,Jo,n,r)]:o.map(i=>v5(i.body,P2,n,r))}function v5(e,t,r,n){let{title:o,facts:i,rest:s}=p5(e),{head:a,subs:c}=Zo(s,t),u=c.map(x=>({label:x.heading.trim(),body:x.body.trim()})),p={file:"unknown",line:"?"},f=null;for(let[x,_]of i)x.trim().toLowerCase()==="analyzer"?f=Mf(_):u5(p,x,_);p.severity||(p.severity=n||"medium");let h=o||r,g=h!=="Untitled finding"&&h!==wt(p),b=u.filter(x=>!WO.has(x.label.toLowerCase())).map(x=>({label:x.label,body:Ss(x.body)})),{paragraphs:v,fields:k}=m5(b);p.description=g5(g?h:"",Ss(a.trim()),v);let w=u.filter(x=>x.label.toLowerCase()==="evidence").flatMap(x=>f5(x.body));w.length>0&&(p.evidence=w);for(let[x,_]of k)p[x]=_;let y=u.find(x=>x.label.toLowerCase()==="severity correction");return y?.body&&(p.correctedSeverityReason=Ss(y.body)),{finding:Tt(p),analyzer:f}}function YO(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?Mf(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 XO(e,t){let r=t.flat(),{source:n,run:o}=YO(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 HO,jO,VO,WO,w5=$(()=>{ri();Tr();b5();Za();nn();HO=/^<!--\s*DeepView findings export\b[^>]*-->/u,jO=/^Case \d+ of \d+(?:\s|$)/u,VO=/^- \*\*([^*\n]+?):\*\* ?(.*)$/gmu,WO=new Set(["evidence","severity correction","comment"])});function k5(e){let t=ZO(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 ZO(e){let t=e.indexOf(`
53
+ `),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}=QO(n),s=eN(o),a=tN(i),{file:c,line:u,locationLink:p}=rN(s.location||""),f=(a.severity||"").toLowerCase();return{severity:JO.has(f)?f:"medium",description:nN(r,s),location:p,file:c||"unknown",line:u}}function QO(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 eN(e){let t={},r=e.split(/^## /mu);for(let n=1;n<r.length;n++){let o=r[n],i=o.indexOf(`
54
+ `),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 tN(e){let t={};for(let r of e.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))t[r[1].trim().toLowerCase()]=r[2].trim();return t}function rN(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 nN(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"]}`),oN(r.join(`
55
+
56
+ `))}function oN(e){return e.replaceAll("**","")}var JO,x5=$(()=>{JO=new Set(["critical","high","medium","low","high_bug","bug","informational"])});function S5(e){let t=Ir(e).trim();if(!t.startsWith("# "))return null;let n=ja(t,/^# /gmu).slice(1).filter(o=>o.trim().length>0).map(o=>sN(o)).filter(Boolean);return n.length===0?null:{type:"security",source:"claude-security",findings:n}}function sN(e){let{title:t,body:r}=vs(e);if(!t)return null;let{sectionsText:n,metaText:o}=aN(r),i=lN(n),s=Object.fromEntries([...o.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu)].map(w=>[w[1].trim().toLowerCase(),w[2].trim()])),a=pN(i.evidence||""),{file:c,line:u,locationLink:p}=C5(i.location||a[0]?.ref||""),f=(s.severity||"").toLowerCase(),h=iN.has(f)?f:"medium",g=hN(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(fN)),i["reproduction steps"]&&(b.reproduction=cN(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=e.indexOf(`
57
+ # `),k=k5(v===-1?e:e.slice(0,v+1));return k&&(b._idBasis=k),Tt(b)}function aN(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 lN(e){let t=e.split(/^## /mu).slice(1).map(r=>vs(r));return Object.fromEntries(t.filter(r=>r.title).map(r=>[r.title.toLowerCase(),r.body.trim()]))}function C5(e){let t="",r="?",n="",o=Va(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=id(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 cN(e){let t=e.split(`
58
+ `),r=t.findIndex(a=>a.trim());if(r===-1||!bs.test(t[r])||t.some((a,c)=>c!==r&&bs.test(a)))return e;let n=t[r].replace(/^ */u,""),o=n.replace(bs,"");if(!o.trim())return e;let i=$5(o)??$5(n);if(i===null&&(bs.test(o)||uN.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(`
59
+ `)}function $5(e){let t=[...e.matchAll(dN)];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 pN(e){let t=[];for(let r of e.split(`
60
+ `))_5.test(r)?t.push({ref:r.replace(_5,"").trim(),note:[]}):t.length>0&&r.trim()&&t.at(-1).note.push(r.trim());if(t.length===0){let r=e.split(`
61
+ `).map(i=>i.trim()).filter(Boolean),n=r.findIndex(i=>Va(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 fN({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(`
62
+ `);return a&&(s.text=a),s}function hN(e,t,r){let n=[e];return t.details&&n.push(t.details),t.evidence&&!r&&n.push(`**Evidence:**
63
+ ${t.evidence}`),t.impact&&n.push(`**Impact:** ${t.impact}`),n.join(`
64
+
65
+ `)}var iN,dN,uN,_5,E5=$(()=>{x5();nn();ri();Tr();iN=new Set([...Ae,"informative"]);dN=/(?:^|[ \t])(\d{1,9})\)(?=[ \t]|$)/gu,uN=/^\d{1,9}\)(?=[ \t]|$)/u;_5=/^[ \t]*(?:\d+[.)]|[-*+])\s+/u});function mN(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 M5({severity:e,description:t,ref:r,lineBullet:n="",id:o=""}){let i=mN(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 R5=$(()=>{});function ni(e){let t=((e||"").trim().split(/\s+/u)[0]||"").replaceAll(/[`*]+/gu,"");return xf.get(t.toUpperCase())??""}function dd(...e){return{severity:e.find(Boolean)||"medium",identitySeverity:e.find(t=>t&&t!=="informative")||"medium"}}function ud(e){let t=/^([CHML])-?\d+$/iu.exec((e||"").trim());return t?{C:"critical",H:"high",M:"medium",L:"low"}[t[1].toUpperCase()]:""}function Mv(e){return ni(/^(critical|high|medium|low|informational|informative|info)(?:[ -](?:severity|risk))?(?:[ -]findings?)?(?:\s*\(\d+\))?$/iu.exec((e||"").trim())?.[1])}function A5(e){return ni(/^(critical|high|medium|low|informational|informative|info)\b/iu.exec((e||"").trim())?.[1])}function Af(e){return/^variants?\s*(?:\(\d+\))?\s*:?$/iu.test((e||"").trim())}function If(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 Rf(e){return(e||"").replaceAll("-"," ")}function pd(e){let t=(e||"").trim(),r=/^\[([^\]]+)\]\([^)]*\)$/u.exec(t);return j2(r?r[1]:t).toUpperCase()}function Rv(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 Av(e){let t=e.search(/\s/u),r=(t===-1?e:e.slice(0,t)).replace(/[:.,—–-]+$/u,""),n=If(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 Iv(e){let{text:t,link:r}=Rv(e)??{text:e,link:""},n=/^\[([^\]]+)\] *(.*)$/u.exec(t);if(n){let i=If(n[1].trim());return i?{id:i.id,title:n[2].trim()||Rf(i.slug)||i.id,link:r}:{id:n[1].trim().toUpperCase(),title:n[2].trim(),link:r}}let o=Av(t);return o?{id:o.id,title:o.rest||Rf(o.slug)||o.id,link:r}:{id:"",title:t.trim(),link:r}}function I5(e){let t={},r=i=>{let s=i.exec(e||"")?.[1];return s===void 0?"":(/`([^`]+)`/u.exec(s)?.[1]??s.split(/\s+/u)[0]??"").trim()},n=r(/^\s*(?:[-*] +)?\*\*Target:?\*\*\s*(.*)$/imu);cd(n)&&(t.repo=n);let o=r(/^\s*(?:[-*] +)?\*\*Commit[^:*]*:?\*\*\s*(.*)$/imu);return kf(o)&&(t.commitHash=o),t}var Tv,Lv=$(()=>{Tr();_f();nn();Tv=["key code reference","key code","code reference","location","affected file","file","path"]});function Tf(e){return{id:pd(e.id||""),title:ys(e.title),severity:ys(e.severity),pocStatus:ys(e["poc status"]||e.poc),status:ys(e.status),parent:pd(ys(e.parent||"")),location:ys(e.location)}}function Lf(e,t=""){let{severity:r,identitySeverity:n}=dd(ni(e.severity),t,ud(e.id)),o=Fv({ref:e.location||"",id:e.id,severity:r,identitySeverity:n,description:gv(e.title||e.id)});for(let i of["pocStatus","status","parent"])e[i]&&(o[i]=e[i]);return Tt(o)}function Fv({ref:e,lineBullet:t="",id:r,severity:n,identitySeverity:o,description:i}){let{file:s,line:a,locationLink:c}=U2(e),u={file:s||"unknown",line:a==="?"&&t?t:a,severity:n,description:i};return c?u.location=c:u.file==="unknown"&&r&&(u.location=`piolium:${r}`),u._idBasis=M5({severity:o,description:i,ref:e,lineBullet:t,id:r}),u}function Bv(e,t,r){let n=[];for(let o of e.split(`
66
+ `)){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=Rv(s),c=a?.link??"";if(a)s=a.text;else{let k=/^\*\*([^*]+)\*\*\s*[:—–-]*\s*(.*)$/u.exec(s);k&&(s=k[2]?`${k[1].trim()} ${k[2].trim()}`:k[1].trim())}if(/^(?:none\b|no |n\/a\b)/iu.test(s))continue;let u=Av(s),p=u?.id??"",f=s;if(u){let k=Rf(u.slug);f=k&&u.rest?`${k}
67
+
68
+ ${u.rest}`:u.rest||k||u.id}let h=r.get(p),{severity:g,identitySeverity:b}=dd(ni(h?.severity),t,ud(p)),v={file:"unknown",line:"?",severity:g,description:gv(f)};p?v.location=`piolium:${p}`:c&&(v.location=c),c.endsWith("report.md")&&(v.reportPath=c);for(let k of["pocStatus","status","parent"])h?.[k]&&(v[k]=h[k]);n.push({id:p,finding:Tt(v,b)})}return n}function Ov(e,t,r,n=""){let o=[];for(let s of od(e)){let a=Tf(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:Lf(a,n)}))}if(o.length>0)return o;let i=Bv(e,n,t);for(let s of i)r&&!s.finding.parent&&(s.finding.parent=r);return i}var T5=$(()=>{Tr();R5();nn();Lv()});function L5(e){let{id:t}=Iv(e);return!!(t&&If(t))}function vN(e){let t=Qo(e,nd);return(t.length>0?t:Qo(e,Jo)).some(({heading:n})=>L5(n))}function F5(e){let t=Ir(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{head:r,subs:n}=Zo(t,wf),o=xN(n),i=new Map(od(o["summary of findings"]||"").map(Tf).filter(h=>h.id).map(h=>[h.id,h])),s=I5(r),a=[],c=new Set,u=[],p=({id:h,finding:g})=>{a.push(g),h&&c.add(h)},f=h=>{for(let g of h)p(g)};for(let[h,g]of Object.entries(o)){let b=Mv(h);b||gN.has(h)||h.startsWith("findings by severity")?f(Nv(g,b,i,u)):!bN.test(h)&&vN(g)&&f(Nv(g,A5(h),i,u))}for(let h of u)(!h.id||!c.has(h.id))&&p(h);for(let h of i.values())c.has(h.id)||p({id:h.id,finding:Lf(h)});if(a.length===0)return null;for(let h of a)s.repo&&(h.repo={github:s.repo}),s.commitHash&&!h.auditedCommit&&(h.auditedCommit=s.commitHash);return{type:"security",source:"piolium",findings:a}}function yN(e,t,r,n){let o=[],i="";for(let{heading:s,body:a}of e){let c=Mv(s);if(c)o.push(...Nv(a,c,t,r)),i="";else if(Af(s))o.push(...kN(a,t,i,r,n));else{let u=wN(s,a,t,r,n);o.push(...u),i=u[0]?.id||i}}return o}function wN(e,t,r,n,o){let{head:i,subs:s}=Zo(t,Jo),a=B5(e,i,r,o),c=a!==null&&!a.id&&s.some(p=>!Af(p.heading)&&L5(p.heading)),u=a&&!c?[a]:[];return u.push(...Pv(s,r,n,o,a?.id||"")),u}function kN(e,t,r,n,o){let{head:i,subs:s}=Zo(e,Jo);return n.push(...Ov(i,t,r,o)),Pv(s,t,n,o,"")}function Pv(e,t,r,n,o){let i=[],s="";for(let{heading:a,body:c}of e){if(Af(a)){r.push(...Ov(c,t,o??s,n));continue}let u=B5(a,c,t,n);u&&(i.push(u),s=u.id||s)}return i}function Nv(e,t,r,n){let o=Qo(e,nd);if(o.length>0)return yN(o,r,n,t);let i=Pv(Qo(e,Jo),r,n,t,null);if(i.length>0)return i;let s=od(e).map(Tf).filter(a=>a.id||a.title);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:Lf(a,t)});return s.length===0&&n.push(...Bv(e,t,r)),[]}function B5(e,t,r,n=""){let o=e.trim();if(!o)return null;let{id:i,title:s,link:a}=Iv(o),c=r.get(i);if(!i&&s){let S=s.toLowerCase();c=[...r.values()].find(M=>M.title.toLowerCase()===S),i=c?.id??""}let{fields:u,labels:p,prose:f}=z2(t),{severity:h,identitySeverity:g}=dd(ni(u.severity),ni(c?.severity),n,ud(i)),b=/\d+/u.exec(u.line||u.lines||"")?.[0]??"",v=/\*\*Variant of:?\*\*\s*\[?([^\]\s)]+)/iu.exec(t),k=f.split(`
69
+ `).filter(S=>!/^\s*<a\s[^>]*>\s*<\/a>\s*$/iu.test(S)&&!/\*\*Variant of:?\*\*/iu.test(S)).join(`
70
+ `).trim(),w=Fv({ref:Tv.map(S=>u[S]).find(Boolean)??"",lineBullet:b,id:i,severity:h,identitySeverity:g,description:_N(s||i,u,p,k)}),y=u["poc status"]||u.poc||c?.pocStatus;y&&(w.pocStatus=y);let x=u["detailed report"]||(a.endsWith("report.md")?a:"");x&&(w.reportPath=x),c?.status&&(w.status=c.status);let _=c?.parent||(v?pd(v[1]):"");return _&&(w.parent=_),{id:i,finding:Tt(w)}}function xN(e){let t=Object.create(null);for(let{heading:r,body:n}of e){let o=r.trim().toLowerCase();o&&(t[o]=o in t?`${t[o]}
71
+ ${n}`:n)}return t}function _N(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||$N.has(i)||o.push(`**${r[i]||i}:** ${s}`);return o.filter(Boolean).join(`
72
+
73
+ `)}var gN,bN,$N,O5=$(()=>{Tr();nn();T5();Lv();gN=new Set(["technical findings detail","technical findings","detailed findings","findings detail","findings"]),bN=/^(?:summary of findings\b|deferred|methodolog|executive|conclusion|attack surface|coverage|discoveries|scope\b|table of contents|contents\b|appendix|recommendation|remediation)/u;$N=new Set([...Tv,"severity","summary","files","poc","poc status","line","lines","detailed report","proof of concept","evidence","variant of","pattern","status","id","title"])});function CN(e){let t=[],r=[],n="",o=!1;for(let i=0;i<e.length;i++){let s=e[i];o?s==='"'?e[i+1]==='"'?(n+='"',i++):o=!1:n+=s:s==='"'?o=!0:s===","?(r.push(n),n=""):s===`
74
+ `||s==="\r"?(r.push(n),t.push(r),r=[],n="",s==="\r"&&e[i+1]===`
75
+ `&&i++):n+=s}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 EN(e,t){return t.map(r=>{let n=Object.create(null);return e.forEach((o,i)=>{n[o]=r[i]??""}),n})}function fd(e){let t=CN(e);if(t.length<2)throw new Error("Codex CSV: empty or missing header row");let[r,...n]=t;for(let s of SN)if(!r.includes(s))throw new Error(`Codex CSV: missing required column "${s}"`);let o=Map.groupBy(EN(r,n).filter(s=>s.configured_scan_id),s=>s.configured_scan_id);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(`
76
+
77
+ `),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 SN,N5=$(()=>{nn();SN=["finding_url","repository","title","description","severity","configured_scan_id","relevant_paths"]});function RN(){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 ho(e,{source:t,linkedIds:r=()=>[],knownRows:n=()=>[]}={}){let{nodeFor:o,root:i,join:s,ids:a}=RN(),c=[],u=(h,g=!1)=>{let b;for(let v of h){if(!v||typeof v!="object")continue;let k=o(v.id||v);i(k).security||=g?v.isSecurity===!0:bv(v,v._source??v.source??t),b?s(b,k):b=k,g||c.push([v,k])}};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 P5=$(()=>{ri()});function TN(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 LN(e,t,r){let n=e.view?.revalidation!==!1,o=(Array.isArray(e.reports)?e.reports:[]).filter(u=>u&&typeof u=="object"),i=TN(o,t),s=u=>i5(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 FN(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 BN(e){if(!e)return"";let t=Number(e.included)||0,r=Number(e.total)||0;return r===0?"no findings":t>=r?`all ${Xa(r,"finding")}`:`${t} of ${Xa(r,"finding")} (${r-t} filtered out)`}function ON(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=>yt[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=>kt(p)).join(", ")),o("Workspace",typeof e.workspace=="string"?e.workspace.trim():""),t.repo&&o("Repository",xv(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",Z2(e.generatedAt)),o("View",FN(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",BN(e.counts)),n.join(`
78
+ `)}function NN(e,t){let r=Map.groupBy(e,s=>ue(s[0],t.severityMode)??"informational"),n=[...Ae,...[...r.keys()].filter(s=>!Ae.includes(s))],o=new Set,i=[];for(let s of n)for(let a of r.get(s)??[]){let c=i.length+1,u=o5(a[0]),p=`${c}. ${u}`;i.push({group:a,number:c,severity:s,title:u,headingText:p,slug:J2(p,o)})}return i}function D5(e){let t=new Map;for(let r of e)t.set(r.severity,(t.get(r.severity)??0)+1);return t}function DN(e,t){let r=e.flatMap(({group:o})=>o.map(i=>t.hooks.annotation(i))).filter(Boolean),n=PN.map(([o,i])=>[r.filter(i).length,o]).filter(([o])=>o>0).map(([o,i])=>`${o} ${i}`);return n.length>0?`Annotations: ${n.join(", ")}.`:""}function zN(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?` (${Xa(o.group.length,"case")})`:"",a=wt(i),c=[String(o.number),In(o.severity),_s(yv(X2(o.title)),`#${o.slug}`)+s,a?yv(kt(a)):""];return t&&c.push(i.confidence===void 0||i.confidence===null?"":`${i.confidence}/10`),c});return wv(r,n,["right"])}function UN(e,t){let r=[Tn(2,"Summary")];if(e.length===0)return[...r,"No findings are included."];let n=[...D5(e)].map(([i,s])=>[In(i),String(s)]);n.push(["**Total**",`**${e.length}**`]),r.push(wv(["Severity","Findings"],n,["left","right"]));let o=DN(e,t);return o&&r.push(o),r.push(zN(e)),r}function HN(e,t){let r=D5(e),n=[],o=null;for(let i of e)i.severity!==o&&(o=i.severity,n.push(Tn(2,`${In(o)} (${r.get(o)})`))),n.push(s5(i.group,t,{headingText:i.headingText,depth:3}));return n}function Dv(e={},t={}){let r=Object.fromEntries(Object.entries(IN).map(([c,u])=>[c,typeof t?.[c]=="function"?t[c]:u])),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=LN(e,r,o),s=NN(n,i),a=[AN,Tn(1,typeof e.title=="string"&&e.title.trim()?e.title.trim():"Findings"),ON(e,i,o),...UN(s,i),...HN(s,i)];return`${ld(a)}
79
+ `}var AN,IN,PN,z5=$(()=>{ri();Ga();Cv();Za();AN="<!-- DeepView findings export -->",IN={annotation:()=>null,location:e=>typeof e?.location=="string"?e.location:null,evidence:e=>typeof e?.url=="string"?e.url:null,commit:()=>null,report:()=>null};PN=[["flagged",e=>e.flagged===!0],["colour-marked",e=>e.color],["commented",e=>e.comment],["with a fix link",e=>e.fix]]});function ft(e){return Array.isArray(e?.findings)?e.findings:Array.isArray(e?.groups)?e.groups:null}function Ff(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(ft(r)){for(let n of H5(ft(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 jN){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 U5(e){let{data:t}=sn(e);return t?{count:ft(t).length,source:t.source,recognized:!0}:{count:0,recognized:!1}}function H5(e){return e.flat().filter(t=>t&&typeof t=="object")}async function zv(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(fv));t.forEach((n,o)=>{r[o]&&(n.id=r[o])})}async function tr(e){let{data:t,format:r}=sn(e);if(!t)return null;let n=H5(ft(t));return await zv(n),{format:r,data:t,findings:n}}var jN,ge=$(()=>{q2();w5();E5();O5();rd();nn();N5();rd();_f();P5();z5();Ga();ri();Tr();Za();jN=[["deepview-md",y5],["deepsec",K2],["piolium",F5],["claude-security",S5]]});function j5(){Qa=null}function hd(){return C()&&Qa?.teamId===l.currentManagedTeam&&Qa?.userId===l.managedSession?.id&&Qa?.role===l.managedSession?.role?Qa:null}function V5(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}),bf(a.links,n);continue}for(let[c,u]of(ft(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 fo(g,a),g._analyzer=g._source??g.type??null,"isApp"in g||(g.isApp=on(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)}}Qa={teamId:e,userId:l.managedSession?.id,role:l.managedSession?.role,links:o,rows:i,byId:r,duplicates:n},l.linksTick++,l.findingIndexTick++}function Bf(e){let t=hd();return[...new Set(e.flatMap(r=>t?.byId.get(r)??[]))]}function W5(e){for(let t of Bf([e])){let r=Ge(t.members.find(n=>n.id===e));if(r)return r}return""}var Qa,md=$(()=>{"use strict";er();gs();ge();Qa=null});function oi(e){if(e?.name!==VN)return!1;let t=e.version;return!t||t===WN}function K5(e){let t=e?.package?.npm,r=t?.version;if(typeof r=="string"&&r&&!oi(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 Of(){return{keys:new Set,findings:[],files:new Map,reports:new Set,_keyReports:new Map}}function Nf(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 Pf(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 Df(e){let t=new Set;for(let r of e._keyReports.values())for(let n of r)t.add(n);e.reports=t}function q5(e,t,r,n,o){let i=e.byVersion.get(t);i||(i=Of(),e.byVersion.set(t,i)),Nf(i,n,o,r)}function Y5(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&&Pf(s,r,n,i)),s._keyReports.size===0){e.byVersion.delete(t);return}Df(s)}function Uv(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let[r,n=""]=G5(e,"-"),[o,i=""]=G5(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 G5(e,t){let r=e.indexOf(t);return r<0?[e,""]:[e.slice(0,r),e.slice(r+1)]}var VN,WN,Hv=$(()=>{"use strict";VN="solidity-bundle",WN="0.0.0"});async function el(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}async function Bn(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 gd(e){return await el(xe(e))}async function Es(e){return at(await Bn(e))}var tl=$(()=>{"use strict";Dt()});async function X5(e){let t=await crypto.subtle.digest("SHA-512",e);return`sha512-${new Uint8Array(t).toBase64()}`}var J5=$(()=>{"use strict"});function eC(e,t,r,n){return navigator.locks.request(`deepview-storage/${e}/${t}`,{mode:r},n)}function tC(e,t,r){return eC(e,t,"shared",r)}function yd(e,t,r){return eC(e,t,"exclusive",()=>navigator.locks.request($n,{mode:"shared"},r))}async function qv(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 wd(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 Yv(e,t){if(!zt(e))return e;if(!pt())throw new Error(`storage: vault locked, cannot decrypt "${t}"`);return await g2(e,t)}function jf(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 Xv(e,t){bd(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(bd(e)!==t)return;je(e),Fr.delete(e);let r=await ai();if(r)try{await r.removeEntry(e)}catch{}Vf(e),je(e),Ms(e,"delete")}))}async function Jv(e,t,r){try{(await t.getFile()).size===0&&await e.removeEntry(r)}catch{}}async function rl(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 ai(){return qv(GN,{create:!0,warnOnce:!0})}function zf(e){try{return localStorage.getItem(si+e)}catch{return null}}function Vf(e){try{localStorage.removeItem(si+e)}catch{}}function KN(){let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r&&r.startsWith(si)&&e.push(r.slice(si.length))}return e}function je(e){jv.set(e,(jv.get(e)??0)+1)}function bd(e){return jv.get(e)??0}function wr(e){return Vv.add(e),()=>Vv.delete(e)}function Ms(e,t){for(let r of Vv)try{r(e,t)}catch(n){console.warn("storage file-change listener:",n)}}async function fe(){let e=new Set(KN()),t=await ai();if(t)for await(let[r]of t.entries())e.add(r);return[...e].toSorted()}async function Br(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),yd("report",e,async()=>{let r=await ai();if(r){let i=await el(xe(t));i=await rl(i,qp,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){Fr.delete(e),je(e);try{await a.abort(c)}catch{}throw await Jv(r,s,e),c}Fr.set(e,t),je(e),Vf(e),Ms(e,"save");return}let n=xe(t);n=await el(n),n=await rl(n,qp,e,`"${e}"`,()=>je(e));let o=n.toBase64();try{localStorage.setItem(si+e,o),Fr.set(e,t),je(e),Ms(e,"save")}catch(i){throw je(e),new Error(`localStorage write failed for ${e}: ${i.message}`,{cause:i})}})}async function Q5(e,t){let r=zf(e);if(r===null)return null;let n=Uint8Array.fromBase64(r);if(n=await Yv(n,e),jf(n))throw await Xv(e,t),new Error(`File not found: ${e}`);return at(await Bn(n))}async function De(e){if(Fr.has(e))return Fr.get(e);if(ii.has(e))return ii.get(e);let t=bd(e),r=(async()=>{let n=await ai();if(n){let i;try{i=await n.getFileHandle(e)}catch(u){if(u instanceof DOMException&&u.name==="NotFoundError"){let p=await Q5(e,t);if(p!==null)return Br(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 Yv(a,e),jf(a))throw await Xv(e,t),new Error(`File not found: ${e}`);if(a.length>=2&&a[0]===31&&a[1]===139){let u=await Bn(a);return at(u)}let c=at(a);return Br(e,c).catch(u=>{console.warn(`storage: legacy-uncompressed migration of "${e}" failed:`,u)}),c}let o=await Q5(e,t);if(o===null)throw new Error(`File not found: ${e}`);return o})();ii.set(e,r);try{let n=await r;return bd(e)===t&&Fr.set(e,n),n}finally{ii.delete(e)}}async function li(e){let t=bd(e),r=await ai(),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=zf(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=zf(e);if(o===null)throw new Error(`File not found: ${e}`);n=Uint8Array.fromBase64(o)}if(n=await Yv(n,e),jf(n))throw await Xv(e,t),new Error(`File not found: ${e}`);return n}async function rC(e){let t=await li(e),r=t[0]===31&&t[1]===139?await Bn(t):t;return at(r)}async function Zv(e,t){if(typeof e!="string"||e.includes("\0"))throw new Error("Invalid report name: contains NUL byte or is not a string");if(jf(t))throw new Error(`Refusing to save empty report bytes for "${e}"`);return je(e),Fr.delete(e),yd("report",e,async()=>{let r=await rl(t,qp,e,`"${e}"`,()=>je(e)),n=await ai();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 Jv(n,o,e),s}je(e),Vf(e),Ms(e,"save");return}try{localStorage.setItem(si+e,r.toBase64()),je(e),Ms(e,"save")}catch(o){throw je(e),new Error(`localStorage write failed for ${e}: ${o.message}`,{cause:o})}})}async function nl(e){return je(e),Fr.delete(e),ii.delete(e),yd("report",e,async()=>{let t=await ai();if(t){try{await t.removeEntry(e)}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw je(e),r}Vf(e),je(e),Ms(e,"delete");return}localStorage.removeItem(si+e),je(e),Ms(e,"delete")})}function nC(e){return Wv.add(e),()=>Wv.delete(e)}function Hf(e,t){for(let r of Wv)try{r(e,t)}catch(n){console.warn("storage bundle-change listener:",n)}}function As(){return qv(Kv,{create:!0})}function Rs(e){return e.replaceAll("/","_")}async function Qv(e){let t;try{let o=await(await e.getFileHandle(vd)).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 Xp(t,Gv)}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 oC(e,t){let r=xe(JSON.stringify(t));r=await rl(r,Yp,Gv,"bundle metadata");try{await e.removeEntry(vd)}catch{}let n=await e.getFileHandle(vd,{create:!0});await wd(n,r)}function ey(e){return navigator.locks.request(iC,e)}async function Vt(){let e=await As();return e?[...await navigator.locks.request(iC,{mode:"shared"},()=>Qv(e))].toSorted((r,n)=>r.name.localeCompare(n.name)):[]}function kd(){return aC(()=>!0)}function sC(){return aC((e,t)=>t.kind==="file"&&/^sha512-[A-Za-z0-9+_]{86}==$/u.test(e))}async function aC(e){if(typeof navigator>"u"||!navigator.storage?.getDirectory)return!1;let t=await qv(Kv,{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 Is(e,t){let r=await As();if(!r)throw new Error(`Cannot save bundle ${e}: OPFS unavailable`);let n=t instanceof Uint8Array?t:xe(t),o=await X5(n),i=Rs(o),s=e.toLowerCase().endsWith(".map")?await el(n):n;return yd("bundle",o,async()=>{s=await rl(s,Yp,o,`bundle "${e}"`);try{await r.removeEntry(i)}catch{}let a=await r.getFileHandle(i,{create:!0});await wd(a,s);try{await ey(async()=>{let c=await Qv(r),u=c.findIndex(p=>p.integrity===o);u>=0?c[u]={integrity:o,name:e}:c.push({integrity:o,name:e}),await oC(r,c)})}catch(c){try{await r.removeEntry(i),Hf(o,"delete")}catch{}throw c}return Hf(o,"save"),{integrity:o,name:e}})}async function ty(e){let t=await As();if(t)return yd("bundle",e,async()=>{try{await t.removeEntry(Rs(e))}catch(r){if(!(r instanceof DOMException)||r.name!=="NotFoundError")throw r}Hf(e,"delete");try{await ey(async()=>{try{await t.removeEntry(Rs(e)+Uf)}catch(o){if(!(o instanceof DOMException)||o.name!=="NotFoundError")throw o}let r=await Qv(t),n=r.filter(o=>o.integrity!==e);n.length!==r.length&&await oC(t,n)})}finally{Hf(e,"delete")}})}async function an(e){let t=await As();if(!t)throw new Error("OPFS unavailable");let n=await(await t.getFileHandle(Rs(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 Xp(o,e)}return o.length>=2&&o[0]===31&&o[1]===139?await Bn(o):o}async function ry(e){let t=await As();if(!t||me()&&!pt())return null;try{let r=await t.getFileHandle(Rs(e)+Uf),n=new Uint8Array(await(await r.getFile()).arrayBuffer());return zt(n)&&(n=await Xp(n,e+Uf)),JSON.parse(at(await Bn(n)))}catch{return null}}async function ny(e,t){let r=await el(xe(JSON.stringify(t)));return navigator.locks.request($n,{mode:"shared"},()=>ey(async()=>{let n=await As();if(!n)return;await n.getFileHandle(Rs(e));let o=e+Uf,i=await rl(r,Yp,o,"bundle index"),s=await n.getFileHandle(Rs(o),{create:!0});await wd(s,i)}))}async function qN(e,t){let r=await ai();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;Fr.delete(e),ii.delete(e),je(e);let p=await r.getFileHandle(e,{create:!0});try{await wd(p,u)}catch(f){throw await Jv(r,p,e),f}je(e);return}}let n=zf(e);if(n===null)return;let o=Uint8Array.fromBase64(n),i=await t(o);i!==null&&(Fr.delete(e),ii.delete(e),je(e),localStorage.setItem(si+e,i.toBase64()),je(e))}function lC(e,t){return e.seal?r=>zt(r)?null:e.seal(r,t):r=>zt(r)?e.open(r,t):null}async function cC(e){let t=await fe();for(let r of t)try{await qN(r,lC(e,Gp(r)))}catch(n){if(n instanceof DOMException&&n.name==="NotFoundError")continue;throw n}}async function YN(){let e=await As();if(!e)return{dir:null,keys:[]};let t=[];for await(let[r]of e.entries())t.push(r);return{dir:e,keys:t}}function XN(e){return e===vd?Gv:e.startsWith("sha512-")?e.replaceAll("_","/"):null}async function JN(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 wd(a,s)}async function dC(e){let{dir:t,keys:r}=await YN();if(t)for(let n of r){let o=XN(n);if(o!==null)try{await JN(t,n,lC(e,Kp(o)))}catch(i){if(i instanceof DOMException&&i.name==="NotFoundError")continue;throw i}}}var Gv,GN,Kv,si,Z5,Fr,ii,jv,Vv,vd,Uf,Wv,iC,oy,iy,sy,ay,kr=$(()=>{"use strict";Dt();tl();J5();Pa();Gv="__meta__",GN="deepview-reports",Kv="deepview-bundles",si="deepview.report:";Z5=!1;Fr=new Map,ii=new Map,jv=new Map;Vv=new Set;vd="_meta.json",Uf=".index-v1",Wv=new Set;iC=`${Kv}/${vd}`;oy=({seal:e})=>cC({seal:e}),iy=({open:e})=>cC({open:e});sy=({seal:e})=>dC({seal:e}),ay=({open:e})=>dC({open:e});rt(()=>{Fr.clear(),ii.clear()})});function ZN(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!oi(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 QN(e){return typeof e?.file!="string"?!1:/(?:^|\/)(?:node_modules|dependencies)\//u.test(e.file)}function e9(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 dy(e){return ly.add(e),()=>ly.delete(e)}function uy(){for(let e of ly)try{e()}catch{}}function py(e){return Ts.get(e)?.list??[]}function fy(){let e=0;for(let t of Ts.values())e+=t.list.length;return e}function On(){return ol}function Fs(){return il}function _d(e,t){let r=Ts.get(e);if(!r)return[];let n=r.reports.get(ci(t));return n?[...n]:[]}function hy(e,t){let r=ol.get(e);if(!r)return[];let n=r._keyReports.get(ci(t));return n?[...n]:[]}function my(e,t){let r=il.get(e);if(!r)return[];let n=r._keyReports.get(ci(t));return n?[...n]:[]}function Bs(e){return C()?[...new Set(Bf([e]).map(t=>t.report))]:[...Ls.get(e)?.reports.keys()??[]]}function gy(e){if(C())return W5(e);for(let{title:t}of Ls.get(e)?.reports.values()??[])if(t)return t;return""}function di(e){if(C())return Bf(e);let t=new Set;for(let r of e)for(let n of Ls.get(r)?.reports.values()??[])for(let o of n.rows)t.add(o);return[...t]}function ci(e){return e.id?`id:${e.id}`:`c:${e.severity??""}|${e.description??""}|${e.file??""}|${e.line??""}`}function Gf(e,t,r){let n=Wf.get(e);n||(n={hash:[],pkg:[],repo:[],id:[]},Wf.set(e,n)),n[t].push(r)}function t9(e,t,r){let n=Ls.get(e.id);n||Ls.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])}),Gf(t,"id",e.id),!0)}function r9(e,t,r){let n=Ts.get(e.fileHash);n||(n={keys:new Set,list:[],reports:new Map},Ts.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&&Gf(r,"hash",{hash:e.fileHash,key:t}),n.keys.has(t)?i:(n.keys.add(t),n.list.push(e),!0)}function n9(e,t,r){let n=ZN(e);if(!n)return!1;let o=K5(e),i=ol.get(n);if(i||(i={...Of(),repos:new Set,byVersion:new Map,_repoReports:new Map},ol.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)}q5(i,o,e,t,r);let s=Nf(i,t,r,e);return Gf(r,"pkg",{pkg:n,key:t,file:e.file,version:o}),s}function o9(e,t,r,n){if(QN(e))return!1;let o=e9(e,n);if(!o)return!1;let i=il.get(o);i||(i=Of(),il.set(o,i));let s=Nf(i,t,r,e);return s&&Gf(r,"repo",{repo:o,key:t,file:e.file}),s}function by(e){let t=Wf.get(e);if(Wf.delete(e),$d.delete(e),!t)return!1;let r=!1;for(let{hash:o,key:i}of t.hash){let s=Ts.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=>ci(u)===i);c>=0&&s.list.splice(c,1)}s.keys.size===0&&Ts.delete(o)}}let n=new Set;for(let{pkg:o,key:i,file:s,version:a}of t.pkg){let c=ol.get(o);if(!c)continue;let u=c._keyReports.get(i);if(u){if(u.delete(e)&&(r=!0),u.size===0&&Pf(c,i,s,ci),Y5(c,a,i,s,e,ci),!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?ol.delete(o):Df(c)}}for(let{repo:o,key:i,file:s}of t.repo){let a=il.get(o);if(!a)continue;let c=a._keyReports.get(i);c&&(c.delete(e)&&(r=!0),c.size===0&&Pf(a,i,s,ci),a._keyReports.size===0?il.delete(o):Df(a))}for(let o of t.id){let i=Ls.get(o);i&&(i.reports.delete(e)&&(r=!0),i.reports.size===0&&Ls.delete(o))}return r}async function i9(e){if($d.has(e))return!1;$d.add(e);try{let t=await De(e),r=await tr(t);if(!r)return!1;let{data:n,findings:o}=r;if(o.length===0)return!1;for(let a of o)fo(a,n);ho(ft(n).map(a=>Array.isArray(a)?a:[a]),{source:n.source});let i=xt(n)??"";if(!i)try{i=Ut(e)}catch{}let s=!1;for(let a of o){let c=ci(a);a.fileHash&&r9(a,c,e)&&(s=!0),a.file&&n9(a,c,e)&&(s=!0),a.file&&o9(a,c,e,i)&&(s=!0)}for(let[a,c]of ft(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??on(f,h),isSecurity:f.isSecurity}})};for(let f of u)t9(f,e,p)&&(s=!0)}return $d.has(e)?s:(by(e),cy=!0,!1)}catch{return $d.delete(e),!1}}function Or(){return C()?Promise.resolve():xd||(xd=(async()=>{try{do{cy=!1;let e=await fe();for(let t of e)await i9(t)&&uy()}while(cy)}finally{xd=null}})(),xd)}var Ts,ol,il,Ls,Wf,$d,ly,xd,cy,uC=$(()=>{"use strict";er();md();Hv();kr();er();ge();Ts=new Map,ol=new Map,il=new Map,Ls=new Map,Wf=new Map;$d=new Set,ly=new Set,xd=null,cy=!1;wr(e=>{by(e)&&uy()});S2(e=>{by(e)&&uy(),Or().catch(()=>{})})});function yy(e){return vy.add(e),()=>vy.delete(e)}function pC(){for(let e of vy)try{e()}catch{}}function Cd(e,t){if(!e||!t)return!1;let r=!sl.has(e);sl.set(e,t),Kf.delete(e);for(let[n,o]of t){if(!o)continue;let i=Sd.get(o);i||(i=new Map,Sd.set(o,i)),i.set(e,n)}return r&&pC(),r}function wy(e){let t=sl.get(e);if(sl.delete(e),Kf.delete(e),!!t){for(let r of t.values()){let n=Sd.get(r);n&&(n.delete(e),n.size===0&&Sd.delete(r))}pC()}}function ky(e,t){let r=sl.get(e);if(!r||typeof t!="string"||t==="")return null;if(r.has(t))return t;let n=s9(e,r).get(fC(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 fC(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}function s9(e,t){let r=Kf.get(e);if(r)return r;r=new Map;for(let n of t.keys()){let o=fC(n),i=r.get(o);i?i.push(n):r.set(o,[n])}return Kf.set(e,r),r}function Os(e){if(!e)return[];let t=Sd.get(e);if(!t)return[];let r=[];for(let[n,o]of t)r.push({integrity:n,file:o});return r}function xy(e){return sl.has(e)}var Sd,sl,Kf,vy,hC=$(()=>{"use strict";Sd=new Map,sl=new Map,Kf=new Map,vy=new Set});function Yf(){return Md||(Md=l9(),Md)}function l9(e=Fe(mC)){let t;try{t=JSON.parse(e||"{}")}catch{t={}}return a9.has(t?.__v)?t.__v=$y:t={__v:$y},t}function _y(){lt(mC,JSON.stringify(Md)).catch(e=>console.warn("counts persist:",e))}function gC(e,t=Yf()){if(e==="__v")return;let r=t[e];if(r!==void 0)return typeof r=="number"?{count:r}:r}function Rd(e){return gC(e)?.count}function Lt(e){return gC(e)?.source}function Wt(e,t,r){let n=Yf();n[e]={count:t,source:r??null},_y()}function ll(e){let t=Yf();delete t[e],_y()}function Gt(e){let t=Ar(e);return t?{count:gf(t.groups),source:Xe,recognized:!0}:U5(e)}function c9(e,t){for(let{names:r,onUpdate:n}of qf)if(r.has(e))try{n(e,t)}catch(o){console.warn("ensureCounts onUpdate:",o)}}function Sy(e,t){if(Ed){t&&qf.push({names:new Set(e),onUpdate:t});for(let r of e)al.add(r);return Ed}return al=new Set(e),qf=t?[{names:new Set(e),onUpdate:t}]:[],Ed=(async()=>{await Promise.resolve();try{let r=Yf();for(;al.size>0;){let n=al.values().next().value;if(al.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},_y(),c9(n,i)}catch{}}}finally{Ed=null,al=null,qf=null}})(),Ed}var mC,$y,a9,Md,Ed,al,qf,cl=$(()=>{"use strict";kr();ge();gs();Qr();mC="deepview.fileCounts",$y=4,a9=new Set([3,$y]),Md=null;Ed=null,al=null,qf=null});async function Ad(e){let t=Uint8Array.fromBase64(e),r=xe(d9),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 d9,Cy=$(()=>{"use strict";Dt();d9=`deepview/workspace-id/v1
80
+ `});function Id(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 bC,vC,yC,wC,kC,u9,Td,Ey,Ld,My,Xf,Ry,Ay,Jf,Zf,Iy=$(()=>{"use strict";bC=Id("create"),vC=Id("delete"),yC=Id("privateKey"),wC=Id("report-membership"),kC=Id("bundle-membership"),u9=bC.on,Td=vC.on,Ey=yC.on,Ld=wC.on,My=kC.on,Xf=bC.fire,Ry=vC.fire,Ay=yC.fire,Jf=wC.fire,Zf=kC.fire});function Fd(){try{let e=Fe(Ly);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 f9(e){await lt(Ly,JSON.stringify({version:p9,workspaces:e}))}function dl(e){return navigator.locks.request(h9,async()=>{await Cn();let t=Fd(),r=await e(t);if(r!==!1)return await f9(t),r})}function Bd(e){return{id:e.id,privateKey:e.privateKey,reports:Array.isArray(e.reports)?[...e.reports]:[],bundles:Array.isArray(e.bundles)?[...e.bundles]:[]}}function Od(){ln=Fd().map(Bd)}function Fy(e){ln=ln.filter(t=>t.id!==e.id),ln.push(Bd(e))}function m9(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(Bd(e))}function g9(e){ln=ln.filter(t=>t.id!==e)}function Q(){let e=Fd();for(let t of e)Array.isArray(t.reports)||(t.reports=[]),Array.isArray(t.bundles)||(t.bundles=[]);return e}function Nn(e){let t=(e??"").trim();return t&&t.replaceAll(/[\u0000-\u001F\u007F]/gu,"").slice(0,b9)||null}async function By(e){let t=Nn(e);if(!t)return null;let r=new Uint8Array(32);crypto.getRandomValues(r);let n=r.toBase64(),o={id:await Ad(n),name:t,privateKey:n,reports:[],bundles:[],createdAt:Date.now()};return await dl(s=>s.some(a=>a.id===o.id)?!1:(s.push(o),o))?(Fy(o),o):null}async function Oy(e){await dl(r=>{let n=r.findIndex(o=>o.id===e);return n<0?!1:(r.splice(n,1),!0)})&&(Ry(e),g9(e))}async function Ny(e,t){let r=Nn(t);return!(!r||!await dl(o=>{let i=o.find(s=>s.id===e);return!i||i.name===r?!1:(i.name=r,i)}))}async function xC(e){let t=await dl(o=>{let i=o.findIndex(p=>p.id===e.id),s=i>=0?o[i]:null,a=Nn(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?Xf(r.id):(n.privateKey!==r.privateKey&&Ay(r.id),Qf(n.reports,r.reports)||Jf(r.id),Qf(n.bundles,r.bundles)||Zf(r.id)),Fy(r),r}async function Py({id:e,name:t,privateKey:r,createdAt:n}){let o=null;return await dl(i=>{let s=Nn(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=>Nn(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"&&(Xf(o.workspace.id),Fy(o.workspace)),o}function Qf(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 Ty({identifier:e,workspaceId:t,field:r,fire:n,additive:o=!1,from:i=void 0}){let s=await dl(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(k=>k.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&&m9(p,r)}}function $C(e,t){return{move:(r,n)=>Ty({identifier:r,workspaceId:n,field:e,fire:t}),add:(r,n)=>Ty({identifier:r,workspaceId:n,field:e,fire:t,additive:!0}),remove:(r,n)=>Ty({identifier:r,field:e,fire:t,from:n})}}function v9(){let e=Fd().map(Bd),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)||Ry(o);for(let[o,i]of n){let s=r.get(o);if(!s){Xf(o);continue}s.privateKey!==i.privateKey&&Ay(o),Qf(s.reports,i.reports)||Jf(o),Qf(s.bundles,i.bundles)||Zf(o)}ln=e}var Ly,p9,h9,ln,b9,Dy,zy,Nd,Ns,Pd,Uy,Ps,Hy,ui=$(()=>{"use strict";Cy();Qr();Iy();Ly="deepview.workspaces",p9=1;h9=Ly;ln=Fd().map(Bd);b9=200;Dy=$C("reports",Jf),zy=$C("bundles",Zf),Nd=Dy.move,Ns=Dy.add,Pd=Dy.remove,Uy=zy.move,Ps=zy.add,Hy=zy.remove;Sn(()=>{v9()})});async function jy(e){if(!e)return null;let t=Q(),n=(await Promise.all(t.map(o=>At("workspace",o.id)))).indexOf(e);return n===-1?null:t[n]}async function Vy(e){if(!e)return null;let t=await fe(),n=(await Promise.all(t.map(o=>At("report",o)))).indexOf(e);return n===-1?null:t[n]}async function y9(e,t){let r;try{r=await De(e)}catch{return!1}return r==null?!1:(await tr(r))?.findings.some(o=>o.id===t)??!1}async function Wy(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 y9(o,e))return o;return null}function Dd(e){return e?Q().filter(t=>t.reports.includes(e)):[]}var _C=$(()=>{"use strict";Ha();kr();ui();ge()});function Gy(e){if(!e)return"";for(let t of e.split(`
81
+ `))if(t.trim())return t.trim();return""}function Ky(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:Gy(i.description)}),r.size===t.size))return r}return r}var qy=$(()=>{"use strict";er()});function Zy(){return C()||cn}function Ds(e){return Yy.add(e),()=>Yy.delete(e)}function ul(){for(let e of Yy)try{e()}catch(t){console.warn("linked-findings listener:",t)}}function Qy(){let e=new Map;for(let t of pi.values())t&&bf(t.groups,e);Jy=e}function e0(){if(C())return hd()?.links??[];let e=[];for(let[t,r]of pi)r&&e.push({name:t,groups:r.groups,skipped:r.skipped});return e.toSorted((t,r)=>t.name.localeCompare(r.name))}function t0(){return C()?!!hd()?.duplicates.size:Jy.size>0}function xr(e){if(C())return[...hd()?.duplicates.get(e)??[]];let t=Jy.get(e);return t?[...t]:[]}async function SC(e){if(pi.has(e))return!1;let t=eh.get(e)??0,r;try{r=await De(e)}catch{return!1}if(r==null)return!1;if((eh.get(e)??0)!==t)return Hd=!0,!1;let n=/^\s*\[/u.test(r)?Ar(r):null;if(pi.set(e,n),n&&Lt(e)!==Xe)Wt(e,gf(n.groups),Xe);else if(!n&&Lt(e)===Xe){let{count:o,source:i}=Gt(r);Wt(e,o,i)}return n!==null}function th(){return C()?Promise.resolve():Ud||(Ud=(async()=>{try{let e,t;do{t=Xy,e=await fe(),cn&&e.some(o=>!pi.has(o))&&(cn=!1,ul());let r=e.filter(o=>Lt(o)===Xe);(await Promise.all(r.map(o=>SC(o)))).some(Boolean)&&(Qy(),ul())}while(t!==Xy);return e}catch(e){throw cn&&(cn=!1,ul()),e}finally{Ud=null}})(),Ud)}function jd(){return C()?Promise.resolve():zd||(zd=(async()=>{try{do{Hd=!1;let e=await th(),t=!1;for(let o of e)await SC(o)&&(t=!0);let r=!Hd&&e.every(o=>pi.has(o)),n=cn!==r;cn=r,t&&Qy(),(t||n)&&ul()}while(Hd)}catch(e){throw cn&&(cn=!1,ul()),e}finally{zd=null}})(),zd)}var pi,Jy,eh,Yy,zd,Ud,Xy,Hd,cn,r0=$(()=>{"use strict";er();md();gs();kr();cl();pi=new Map,Jy=new Map,eh=new Map,Yy=new Set,zd=null,Ud=null,Xy=0,Hd=!1,cn=!1;wr(e=>{let t=cn;cn=!1,Xy++,eh.set(e,(eh.get(e)??0)+1),Hd=!0;let r=pi.get(e)!=null;pi.delete(e),r&&Qy(),(r||t)&&ul()})});function CC(e){return e==="inprogress"||e==="fixed"||e==="invalid"||e==="deleted"?e:void 0}function Ve(e){if(e)return CC(e.triage)??(e.deleted?"deleted":void 0)}function w9(e){return e?!e.color&&!Ve(e)&&!e.comment&&!e.fix&&!(e.ignoredReports&&e.ignoredReports.length>0)&&e.flagged===void 0:!0}function mo(e,t,r){let n=e.get(t)?.ignoredReports;return Array.isArray(n)&&n.includes(r)}function pl(e){if(!e||typeof e!="object")return;let t=e,r={};typeof t.color=="string"&&t.color&&(r.color=t.color);let n=CC(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 w9(r)?void 0:r}function k9(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 EC(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&&k9(r.ignoredReports,n.ignoredReports)}function ee(e,t,r){let n=e.get(t),o=pl({...n,...r});return o===void 0?e.delete(t):EC(n,o)?!1:(e.set(t,o),!0)}function rh(e,t,r){let n=pl(r),o=e.get(t);return n===void 0?e.delete(t):EC(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 fi=$(()=>{"use strict"});function o0(e){n0=typeof e=="function"?e:()=>{}}function i0(e){RC=typeof e=="function"?e:()=>{}}function s0(e){AC=typeof e=="function"?e:()=>{}}async function x9(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}async function $9(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}function a0(){let e={};for(let[t,r]of l.triage){if(Pn.test(t))continue;let n=pl(r);n&&(e[t]=n)}return e}function _e(){if(C())return RC(),Promise.resolve();let e=++MC,t=a0(),r=Object.keys(t).length===0,n=r?null:JSON.stringify(t);if(n!=null)try{localStorage.setItem(go,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 x9(s);i=pt(),o=(i?await h2(a):a).toBase64()}catch(s){console.warn("Failed to save triage:",s),n0();return}await navigator.locks.request(_9,()=>{try{if(e!==MC)return;if(n!=null&&pt()!==i){queueMicrotask(()=>{_e()});return}if(r)localStorage.removeItem(hi),localStorage.removeItem(go);else{localStorage.setItem(hi,o);try{localStorage.removeItem(go)}catch{}}}catch(s){console.warn("Failed to save triage:",s)}}),n0()})}async function nh(){let e=localStorage.getItem(go);if(e)try{return JSON.parse(e)}catch{}let t=localStorage.getItem(hi);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 m2(r)}let n=await $9(r);return JSON.parse(at(n))}function IC(e,{replace:t=!1}={}){let r=l.triage;if(t){let n=null,o=localStorage.getItem(go);if(o)try{n=JSON.parse(o)}catch{}let i=s=>n!=null&&s in n;for(let s of[...r.keys()]){if(Pn.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(Pn.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 S9(){if(!C())try{let e=await nh();if(C())return;IC(e)}catch(e){console.warn("Failed to load triage:",e)}}async function Vd(){if(!C())try{let e=await nh();if(C())return;IC(e,{replace:!0}),AC()}catch(e){console.warn("Failed to reload triage:",e)}}function zs(){return C()?Promise.resolve():C9??=S9()}async function l0({seal:e}){try{localStorage.removeItem(go)}catch{}let t=localStorage.getItem(hi);if(!t)return;let r=Uint8Array.fromBase64(t);if(zt(r))return;let n=await e(r,Vc());localStorage.setItem(hi,n.toBase64())}async function c0({open:e}){try{localStorage.removeItem(go)}catch{}let t=localStorage.getItem(hi);if(!t)return;let r=Uint8Array.fromBase64(t);if(!zt(r))return;let n=await e(r,Vc());localStorage.setItem(hi,n.toBase64())}var n0,RC,AC,hi,go,Pn,_9,MC,C9,mi=$(()=>{"use strict";er();Dt();fi();Pa();n0=()=>{};RC=()=>{};AC=()=>{};hi="deepview.triage",go="deepview.triage.pending",Pn=/^\d+$/u;_9="deepview.triage.save",MC=0;typeof window<"u"&&window.addEventListener("storage",e=>{e.key!==hi&&e.key!==go||Vd()});rt(()=>{Vd()});rt(()=>{C()||pt()&&localStorage.getItem(go)&&_e()})});function oh(e,t){return t?`r:${JSON.stringify({name:e,workspaceId:t})}`:e}function ih(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 sh=$(()=>{"use strict"});function d0(){return Wd||(Wd=E9(),Wd.catch(()=>{Wd=null})),Wd}async function E9(){try{await zs()}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 Br(i,s),await nl(o)}catch(f){console.warn(`migrate: failed to rename ${o} -> ${i}`,f);continue}t.delete(o),t.add(i),n.add(o);let a=Rd(o);if(ll(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&&(tn(o,""),tn(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=ih(Fe(TC));if(p?.name===o)try{await lt(TC,oh(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 Pd(i,o.id),await Ns(s,o.id)}}var TC,Wd,LC=$(()=>{"use strict";kr();cl();ui();er();mi();Qr();fi();sh();TC="deepview.lastFile",Wd=null});function u0(){return{...FC,hydrateKey:Kb,readTriageBlob:nh}}function p0(e=FC){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 FC,BC=$(()=>{"use strict";kr();Pa();Qr();mi();FC={hasStoredBundleBytes:sC,listBundles:Vt,listFiles:fe,onBundleMutated:nC,onFileMutated:wr,readBundle:an,readFile:rC,withStoredItem:tC,isEncryptionEnabled:me,isUnlocked:Qt,onVaultStateChange:rt,unlockEncryption:hs}});function OC(){return typeof navigator<"u"&&typeof navigator.storage=="object"&&navigator.storage!==null}async function fl(){if(!OC()||typeof navigator.storage.persist!="function")return!1;try{return await navigator.storage.persist()===!0}catch{return!1}}async function f0(){let e={supported:OC(),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 NC=$(()=>{"use strict"});function PC(){for(let e of h0)e()}function hl(){return Fe(ah)!=null}function m0(e){try{let t=JSON.parse(Fe(ah)),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 g0({server:e,deepview:t,provider:r,token:n}){await lt(ah,JSON.stringify({server:e,deepview:t,provider:r,token:n})),PC()}async function b0(){await Yo(ah),PC()}function v0(e){h0.add(e);let t=Sn(e);return()=>{h0.delete(e),t()}}var ah,h0,DC=$(()=>{"use strict";Qr();ah="deepview.scan.access",h0=new Set});function M9(){let e=a0(),t=cf();return{version:y0,exportedAt:new Date().toISOString(),triage:e,repoUrls:t}}function R9(){return`deepview-triage-${new Date().toISOString().replaceAll(/[:.]/gu,"-").slice(0,19)}.json.gz`}async function w0(){let e=M9();return{blob:new Blob([await gd(JSON.stringify(e))]),filename:R9()}}async function k0(e){let t;try{t=await Es(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!==y0)throw new Error(`Unsupported backup version: ${r.version} (expected ${y0})`);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 x0(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()])Pn.test(a)||n.delete(a);let o=t==="prefer-current";for(let[a,c]of Object.entries(r)){if(Pn.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&&mo(n,a,p)||$t(n,a,p,!0))}await _e();let i=0,s=null;try{await E2(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 y0,zC=$(()=>{"use strict";tl();fi();er();mi();y0=1});function A9(e){return e?.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}async function $0(e){let t=new Set;for(let r of e){let n;try{n=await De(r)}catch(i){if(A9(i))continue;throw new Error(`Failed to read ${r}: ${i.message}`,{cause:i})}if(n==null)continue;let o=await tr(n);if(o)for(let i of o.findings)i.id&&t.add(i.id)}return t}function I9(){let e=new Set;for(let t of l.triage.keys())Pn.test(t)||e.add(t);return e}async function lh(e){let t=I9();if(t.size===0)return{orphanedCount:0,sharedCount:0};let r=await $0(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 $0(s),c=0,u=0;for(let p of n)a.has(p)?u++:c++;return{orphanedCount:c,sharedCount:u}}async function ch(){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 $0(r),i=!1;for(let s of e){if(Pn.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)Pn.test(s)||o.has(s)&&n.has(a)||mo(l.triage,s,a)&&$t(l.triage,s,a,!1)&&(i=!0);i&&await _e()}var UC=$(()=>{"use strict";er();fi();mi();kr();ge()});var HC=$(()=>{"use strict"});async function WC(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 GC(e){return!(e instanceof Uint8Array)||e.length<VC?!1:e[0]===_0}async function dh(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(gi+e.length+16);r[0]=_0,crypto.getRandomValues(r.subarray(1,1+bi)),crypto.getRandomValues(r.subarray(1+bi,gi));let n=r.subarray(1,1+bi),o=r.subarray(1+bi,gi),i=await WC(t,n),s=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:r.subarray(0,gi)},i,e));return r.set(s,gi),r}async function L9(e,t){if(typeof t!="string"||!t)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<VC)return{ok:!1,reason:"malformed"};if(e[0]!==_0)return{ok:!1,reason:"malformed"};let r=e.subarray(1,1+bi),n=e.subarray(1+bi,gi),o=e.subarray(gi),i=await WC(t,r),s;try{s=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:n,additionalData:e.subarray(0,gi)},i,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:s}}async function uh(e,t,r){if(!r||typeof r.malformedMsg!="string"||typeof r.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let n=await L9(e,t);if(n.ok)return n.plaintext;throw n.reason==="wrong-password"?new Error(r.wrongPasswordMsg):new Error(r.malformedMsg)}var _0,bi,jC,VC,gi,S0=$(()=>{"use strict";Dt();HC();_0=1,bi=16,jC=12,VC=1+bi+jC+16,gi=1+bi+jC});function qC(e,t){return uh(e,t,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var Gd,KC,Kd=$(()=>{"use strict";S0();Gd=GC,KC=dh});async function B9(e){let t=new Set,r=await tr(e);for(let n of r?.findings??[])n.id&&t.add(n.id);return t}function C0(e){return(e??"").replaceAll(/[^a-zA-Z0-9._-]+/gu,"_").replaceAll(/^_+|_+$/gu,"")||"workspace"}async function O9(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 N9(e){let t=Ut(e);return t?{github:t}:null}async function YC(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 Nd(r,null);continue}let o=N9(r);t.push(o?{name:r,content:n,repo:o}:{name:r,content:n})}return t}async function P9(e,{includeBundleBytes:t=!1}={}){let r=await YC(e),n=new Set;for(let u of r)for(let p of await B9(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=pl({...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:F9,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 O9(a);u.length>0&&(c.bundleBlobs=u)}return c}async function XC(e,{includeBundleBytes:t=!1}={}){let r=await P9(e,{includeBundleBytes:t});return{blob:new Blob([await gd(JSON.stringify(r))]),filename:`${C0(e.name)}.deepview-workspace.json.gz`}}async function D9(e,t,{includeBundleBytes:r=!1}={}){if(typeof t!="string"||!t)throw new TypeError("buildWorkspaceExportEncrypted: password required");let{blob:n}=await XC(e,{includeBundleBytes:r}),o=new Uint8Array(await n.arrayBuffer()),i=await KC(o,t);return{blob:new Blob([i],{type:"application/octet-stream"}),filename:`${C0(e.name)}.deepview-workspace.enc`}}async function E0(e,{password:t,includeBundleBytes:r=!1}={}){return typeof t=="string"&&t?await D9(e,t,{includeBundleBytes:r}):await XC(e,{includeBundleBytes:r})}async function z9(e){return{reports:await YC(e)}}async function M0(e){let t=await z9(e);return{blob:new Blob([await gd(JSON.stringify(t))]),filename:`${C0(e.name)}.deepview-reports.json.gz`}}var F9,JC=$(()=>{"use strict";er();fi();kr();ui();ge();tl();Kd();F9=1});function j9(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==U9)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>ml)return`reports count (${e.reports.length}) exceeds cap (${ml})`;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>ph)return`bundle integrity exceeds per-entry length cap (${ph})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>e6)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${e6})`;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>ph)return`bundleBlobs.integrity exceeds per-entry length cap (${ph})`;if(typeof t.name!="string"||t.name.length===0)return"bundleBlobs.name must be a non-empty string";if(t.name.length>QC)return`bundleBlobs.name exceeds per-entry length cap (${QC})`;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>H9)return`bundleBlobs.data exceeds per-blob size cap (${t6} bytes raw)`}}return null}async function fh(e){return new Uint8Array(await e.arrayBuffer())}async function hh(e,t){if(Gd(e)){if(typeof t!="string"||!t)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let n=await qC(e,t);try{return gl(await Es(n))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let r;try{r=await Es(e)}catch(n){throw new Error(`gzip decompression failed: ${n.message}`,{cause:n})}return gl(r)}function gl(e){let t;try{t=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let r=j9(t);if(r===null)return t;let n=r.includes("exceeds cap");throw new Error(n?r:`not a deepview workspace export: ${r}`)}var U9,ZC,ml,ph,t6,H9,QC,e6,r6=$(()=>{"use strict";tl();Kd();U9=1,ZC=1024,ml=1024,ph=200,t6=100*1024*1024,H9=Math.ceil(t6*4/3)+16,QC=512,e6=64});function V9(e){return Ve(e)??null}async function W9(e){let t=new Map;for(let r of e??[]){if(typeof r?.content!="string")continue;let n=await tr(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:Gy(o.description)})}return t}async function G9(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=V9(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,k=typeof s.flagged=="boolean"?s.flagged:void 0;k!==void 0&&v!==void 0&&v!==k?o.push({id:i,property:"flagged",local:v?"flagged":"not flagged",imported:k?"flagged":"not flagged"}):k!==void 0&&k!==v&&ee(n,i,{flagged:k});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&&K9(o,i)}await _e()}function K9(e,t){for(let r of e){let n=`${r.id}:${r.property}`;t[n]==="imported"&&q9(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 q9(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 Y9(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 Is(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 R0(e,{conflictResolver:t}={}){let r=[];for(let p of e.reports)if(!(typeof p?.name!="string"||typeof p?.content!="string"))try{await Br(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 Y9(e.bundleBlobs);let o=e.triage&&Object.keys(e.triage).length>0?await W9(e.reports):new Map;await G9(e.triage,t,o);let i=Array.isArray(e.bundles),s=i?e.bundles.filter(p=>typeof p=="string"&&p.length>0):[],a=await xC({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 df(u)}catch(p){console.warn("Workspace import: failed to adopt per-report repository URLs:",p)}return a}var A0=$(()=>{"use strict";er();kr();ui();mi();cl();qy();ge();fi();r6()});function X9(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>ml?`reports count (${e.reports.length}) exceeds cap (${ml})`:null:"reports field must be an array"}function n6(e){return X9(e)===null}async function I0(e){if(Gd(e))return{kind:"encrypted"};let t;try{t=await Es(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 n6(r)?{kind:"reports",reports:r.reports}:{kind:"workspace",text:t}}var o6=$(()=>{"use strict";A0();tl();Kd()});async function T0({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 Ad(r)===e?{v:1,n:t,k:r}:{v:1,i:e,n:t,k:r};return(await dh(xe(JSON.stringify(i)),n)).toBase64({alphabet:"base64url",omitPadding:!0})}async function L0({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 uh(r,t,{malformedMsg:"malformed share link",wrongPasswordMsg:"wrong password or corrupt link"});try{return await J9(n)}catch(o){throw new Error("wrong password or corrupt link",{cause:o})}}async function J9(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 Ad(t.k),name:t.n,privateKeyBase64:t.k}}function F0(e){return typeof location>"u"?`#share=${e}`:`${location.origin}${location.pathname}#share=${e}`}function B0(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 i6=$(()=>{"use strict";Dt();S0();Cy()});function vl(e=Fe(D0)){try{let t=JSON.parse(e);if(t?.version===s6&&t.entries&&typeof t.entries=="object")return t}catch{}return{version:s6,revision:"",links:"[]",entries:{}}}function bl(){for(let e of O0)e()}function l6(e){let t=bh.then(()=>za(D0,r=>e(vl(r))));return bh=t.catch(r=>console.warn("workspace App cache:",r)),t}function mh(e){return JSON.stringify(e.reports.toSorted())}function c6(){return JSON.stringify(e0().map(({name:e,groups:t})=>({name:e,groups:t})))}function H0(e){return Zy()&&e.links===c6()}function d6(e,t){return e.workspaceRevisions?.[t]??""}function u6(e,t,r){return r.workspaceId===t?.id&&r.workspaceEpoch===(gh.get(t?.id)??0)&&r.workspaceRevision===d6(e,t?.id)}function p6(e,t,r){return r.reportEpoch===U0&&r.reportRevision===(e.reportRevision??e.revision)&&u6(e,t,r)}function j0(e,t){return p6(vl(),e,t)}function f6(e,t){if(P0||N0.has(e.id))return null;let r=t.entries[e.id];return!r||r.reports!==mh(e)||typeof r.appMode!="boolean"||r.appMode&&(!Number.isSafeInteger(r.appFindings)||r.appFindings<0)?null:r}function V0(e){return f6(e,vl())?.appMode??null}function Us(e){let t=vl(),r=f6(e,t);return!r||!H0(t)?null:r}async function qd(e,t=null){let r;do r=bh,await r;while(r!==bh);let n=vl(),o=n.reportRevision??n.revision;return t&&(!p6(n,e,t)||!H0(n))?null:{epoch:z0,revision:n.revision,reportEpoch:U0,reportRevision:o,workspaceId:e?.id,workspaceEpoch:gh.get(e?.id)??0,workspaceRevision:d6(n,e?.id)}}async function W0(e,t,r){let n=!1;return await l6(o=>{if(r.epoch!==z0||r.revision!==o.revision||!u6(o,e,r)||!H0(o))return;let i=Q().find(s=>s.id===e.id);if(!(!i||mh(i)!==mh(e)))return o.entries[e.id]={...t,reports:mh(e)},n=!0,JSON.stringify(o)}),n&&bl(),n}function vh(e=null,t){if(e?.length===0)return Promise.resolve();if(e===null)z0++,t===void 0&&U0++,P0++;else for(let r of e)gh.set(r,(gh.get(r)??0)+1),N0.add(r);return bl(),l6(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)P0--;else for(let r of e)N0.delete(r);bl()})}function G0(e){return O0.add(e),()=>O0.delete(e)}var D0,s6,O0,N0,P0,z0,U0,gh,bh,a6,h6=$(()=>{"use strict";Qr();ui();Iy();kr();r0();D0="deepview.workspaceApp",s6=2,O0=new Set,N0=new Set,P0=0,z0=0,U0=0,gh=new Map,bh=Promise.resolve(),a6=null;Sn(()=>{let e=Fe(D0);e!==a6&&(a6=e,bl())});Ld(e=>{vh([e]).catch(()=>{})});Td(e=>{vh([e]).catch(()=>{})});wr(e=>{let t=Q().filter(r=>r.reports.includes(e)).map(r=>r.id);vh(t).catch(()=>{})});Ds(()=>{if(!Zy()){bl();return}let e=c6();vl().links===e?bl():vh(null,e).catch(()=>{})})});var U=$(()=>{"use strict";uC();Hv();hC();cl();Ha();_C();qy();gs();r0();LC();BC();Pa();NC();Qr();DC();er();ov();kr();zC();UC();mi();fi();Kd();JC();A0();o6();i6();ui();h6()});function m6(e){e.installSyncHost(Z9),o0(()=>e.triageSync.notify())}var Z9,g6=$(()=>{"use strict";er();cl();ui();kr();mi();Qr();Z9={get state(){return l},listWorkspaces:Q,addReportToWorkspace:Ns,addBundleToWorkspace:Ps,onReportMembershipChanged:Ld,onBundleMembershipChanged:My,onWorkspaceDeleted:Td,onWorkspacePrivateKeyChanged:Ey,analyzeContent:Gt,setCount:Wt,gunzipBytes:Bn,listBundles:Vt,listFiles:fe,readBundle:an,readFileBytes:li,saveBundle:Is,saveFileBytes:Zv,onFileMutated:wr,saveTriage:_e,getSecureItem:Fe,setSecureItem:lt,removeSecureItem:Yo,onSecureStorageHydrated:Sn}});function w6(){try{return Fe("deepview.sync.userEnabled")!=="0"}catch{return!0}}function kh(e){k6=!!e}function wh(){if(k6||l.serverMode!=="e2e")return!0;try{return br()?.mode==="managed"}catch{return!1}}function Yd(){return Hs||(wh()&&!se?Promise.resolve(null):(Hs=(async()=>{let e="./client-sync.js";try{let t=await import(e);return m6(t),se=t,Q9(),t}catch(t){throw Hs=null,t}})(),Hs))}function Xd(e){se?e(se):x6.push(e)}function Q9(){let e=x6.splice(0);for(let t of e)try{t(se)}catch(r){console.warn("client-sync: deferred apply failed:",r)}}function js(e,t){let r={cancelled:!1,unsub:null};return Xd(n=>{r.cancelled||(r.unsub=t(n,e))}),()=>{r.cancelled=!0,r.unsub&&r.unsub()}}function K0(e,t){return se?se.isInRemote(e,t):!1}function $6(e,t){return se?se.isBundleInRemote(e,t):!1}function _6(e){try{let t=localStorage.getItem(eP+e);if(!t)return null;let r=JSON.parse(t);return r&&typeof r=="object"?r:null}catch{return null}}function yl(e,t){if(se&&se.isInRemote(e,t))return!0;let r=_6(e);return!r||typeof r.names!="object"?!1:Object.values(r.names).includes(t)}function q0(e,t){if(se&&se.isBundleInRemote(e,t))return!0;let r=_6(e);return!r||typeof r.bundles!="object"?!1:Object.values(r.bundles).includes(t)}function Y0(e){return se?se.remoteCount(e):0}function S6(e){return se?se.differingReports(e):[]}function C6(e){return js(e,(t,r)=>t.onAutoDownloaded(r))}function E6(e){return js(e,(t,r)=>t.onBundleAutoDownloaded(r))}function M6(e){return js(e,(t,r)=>t.onChange(r))}function R6(e){if(se){se.setRedraw(e);return}b6=e,Xd(t=>{b6===e&&t.setRedraw(e)})}function A6(e){if(se){se.setAuthenticationResolver(e);return}v6=e,Xd(t=>{v6===e&&t.setAuthenticationResolver(e)})}function I6(e){if(se){se.setHydrationConflictResolver(e);return}y6=e,Xd(t=>{y6===e&&t.setHydrationConflictResolver(e)})}async function Dn(e,t){if(wh()||!w6()&&!se)return;let r=await Yd();if(!(!r||wh()))return r[e](...t)}function T6(...e){return Dn("downloadFileFromRemote",e)}function L6(...e){return Dn("fetchBundleFromRemote",e)}function xh(...e){return Dn("putFile",e)}function F6(...e){return Dn("holdLocalChangeChecks",e)}function B6(...e){return Dn("putBundleToRemote",e)}function $h(...e){return Dn("deleteFromRemote",e)}function _h(...e){return Dn("deleteBundleFromRemote",e)}function Jd(...e){return Dn("openWorkspace",e)}async function X0(...e){return(se??(Hs?await Hs:null))?.closeWorkspace(...e)}function O6(...e){return Dn("recheckRemoteStorage",e)}function N6(...e){return Dn("resolveReportDifference",e)}function bo(e,t){if(se)return se.triageSync[e](...t);Xd(r=>{r.triageSync[e](...t)})}var se,Hs,k6,x6,eP,b6,v6,y6,yh,te,dn=$(()=>{"use strict";U();g6();se=null,Hs=null;k6=!1;x6=[];eP="deepview.objstore-presence.";b6=null,v6=null,y6=null,yh=[];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 wh()?Promise.resolve(null):Yd().then(t=>{t.triageSync.setEnabled(!0);let r=yh;yh=[];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){yh=se.openWorkspaceIds();for(let t of yh)try{se.closeWorkspace(t)}catch(r){console.warn(`client-sync: closeWorkspace(${t}) failed during disable:`,r)}se.triageSync.setEnabled(!1);return}bo("setEnabled",[e])},isEnabled(){return se?se.triageSync.isEnabled():w6()},openSession(e){bo("openSession",[e])},closeSession(e){bo("closeSession",[e])},refreshSession(e){bo("refreshSession",[e])},dismissError(e){bo("dismissError",[e])},setForcedOff(e){bo("setForcedOff",[e])},setProtocolLocked(e){bo("setProtocolLocked",[e])},setServerUrl(e){bo("setServerUrl",[e])},getServerUrl(){return se?se.triageSync.getServerUrl():null},notify(){bo("notify",[])},onStatusChange(e){return js(e,(t,r)=>t.triageSync.onStatusChange(r))},onServerInfo(e){return js(e,(t,r)=>t.triageSync.onServerInfo(r))},onPersistenceDegraded(e){return js(e,(t,r)=>t.triageSync.onPersistenceDegraded(r))},onProxyAuthRequired(e){return js(e,(t,r)=>t.triageSync.onProxyAuthRequired(r))}}});function J0(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 zn(){return D6}function Vs(e,t=D6){return t?`${e}#public=${t.id}.${t.token}`:e}var P6,D6,Ws=$(()=>{"use strict";P6=globalThis.location?.hash,D6=J0(P6);globalThis.addEventListener?.("hashchange",()=>{let e=globalThis.location?.hash;e?.startsWith("#public=")&&e!==P6&&globalThis.location.reload()})});function Z0(e,t){return e?.view==="findings"&&t?.view==="findings"&&e.teamSlug===t.teamSlug&&(e.reportSlug??null)===(t.reportSlug??null)}function tP(e){let t=e.location.hash,r=J0(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(x){let _=Qc(x),S=_?.view==="home"?Xo(x.hash):null;return _?{..._,...S?{finding:S}:{}}:null}function g(){try{let x=e.sessionStorage?.getItem(Sh);if(e.sessionStorage?.removeItem(Sh),!x)return null;let _=new URL(x,e.location.origin),S=_.origin===e.location.origin?h(_):null;return S?.finding?S:null}catch{return null}}function b(){if(!n||!Xo(e.location.hash)||u===e.location.href||e.history.state?.[Un]&&e.history.state[Un]!==o)return;let x=u=e.location.href,_=h(new URL(x));k(_??{view:"home"},{replace:!0}).finally(()=>{u===x&&(u=null)})}function v(x){f()||(x=Vs(x,r),e.history.replaceState(n?{[Un]:o}:null,"",x),a=x)}async function k(x,{replace:_=!1,pop:S=!1}={}){if(!n||!s||f())return!1;x??={view:"home"};let M=vr(x);if(M===null)return!1;let A=++i,P=p={route:x,findingRoute:null},L=()=>n&&A===i&&!f(),R=!1;try{R=await s(x,L)}catch(W){console.warn("managed: navigation failed:",W)}return L()?R?(typeof R=="object"&&(M=vr(R)??M),Z0(P.findingRoute,typeof R=="object"?R:x)&&(M=vr(P.findingRoute)),p=null,S||_?v(M):Vs(M,r)!==a&&(M=Vs(M,r),e.history.pushState({[Un]:o},"",M),a=M),!0):(await s({view:"home"},L),L()&&(p=null,v("/")),!1):!1}function w(x){if(f())return;if(!n){x.state?.[Un]&&v("/");return}if((!x.state?.[Un]||x.state[Un]===o)&&Xo(e.location.hash)){b();return}let _=x.state?.[Un]===o?h(new URL(e.location.href)):null;k(_??{view:"home"},{pop:!0})}function y(x){if(!n||x.defaultPrevented||x.button!==0||x.metaKey||x.ctrlKey||x.shiftKey||x.altKey)return;let _=x.composedPath().find(A=>A.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 x.preventDefault(),k(M)}return{get active(){return n},rememberFinding(){let x=h(new URL(e.location.href));if(!x?.finding)return;let _=x.view==="home"?`/#${Rn(x.finding)}`:vr(x);try{e.sessionStorage?.setItem(Sh,_)}catch{}},start(x){if(n)return;n=!0,s=x,o=typeof e.history.state?.[Un]=="string"?e.history.state[Un]: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 A=new URL(M);if(A.origin!==e.location.origin)return;let P=h(A);P&&k(P)}),c=!0);let _=g(),S=h(new URL(e.location.href))??{view:"home"};return _&&S.view==="home"&&!S.finding&&(S=_),k(S,{replace:!0})},navigate:k,replaceFindingRoute(x){if(!n||x?.view!=="findings"||f())return;let _=vr(x);if(_!=null){if(p){(p.route.view==="home"&&p.route.finding||Z0(x,{...p.route,view:"findings"}))&&(p.findingRoute=x);return}Z0(x,Qc(new URL(e.location.href)))&&Vs(_,r)!==a&&v(_)}},replaceRoute(x){if(!n||!x||f())return;let _=vr(x);_!=null&&v(_)},reset({force:x=!1}={}){if(++i,p=null,n||x){try{e.sessionStorage?.removeItem(Sh)}catch{}n=!1,o=null,s=null,v("/")}}}}var Un,Sh,Be,wl=$(()=>{"use strict";uo();Ha();Ws();Un="deepviewManagedNavigation",Sh="deepviewManagedLoginFinding";Be=typeof window>"u"?null:tP(window)});function z6(e){return typeof e=="string"&&Zd.includes(e)}function kl(e,t){let r=Zd.indexOf(e);return r!==-1&&r<=Zd.indexOf(t)}var Zd,Qd=$(()=>{"use strict";Zd=["admin","manage","triage","view","none"]});function Gs(e){return C()&&!l.managedSession?.publicShare&&kl(l.managedSession?.role,"triage")&&!!(e?._managedReportId&&e.id)}var Ch=$(()=>{"use strict";U();Qd()});function Q0(){return Hn?.getPreviewRole()??null}function U6(){Hn?.setPreviewRole(null)}function H6(){Hn?.resetManagedAppState()}function j6(e){Hn?.setManagedAppSession(e)}function V6(e){return Hn?.setManagedReportCatalog(e)??new Set}function xl(e,t=l.currentManagedTeam){return Hn?.readReportSources(e,t)}function W6(){Hn?.clearReportSources(),Hn?.clearFindingHistory()}async function Eh(e,t=l.currentManagedTeam){return(await Oe()).fetchReportSources(e,t)}function Oe(){return eu||(eu=(async()=>{let e="./client-managed.js";try{return Hn=await import(e),Hn}catch(t){throw eu=null,t}})(),eu)}async function G6(e){return(await Oe()).probeSession(e)}async function K6(e){return(await Oe()).probeTeams(e)}async function q6(){return(await Oe()).fetchManagedBundleCatalog()}async function Y6(e){return(await Oe()).openManagedShareDialog(e,"",l.managedSession)}async function X6(e){let t=()=>l.managedSession?.id===e.session.id&&l.managedSession?.csrfToken===e.session.csrfToken&&l.currentManagedTeam===e.teamId,r=await Oe();return t()?r.openManagedIssueDialog({...e,isCurrent:t}):null}async function J6(e){if(!Gs(e))return null;let t=l.reports,r=l.managedSession,n=l.currentManagedTeam,o=()=>Gs(e)&&l.managedSession===r&&l.currentManagedTeam===n&&l.reports===t,i=await Oe();return o()?i.openFindingHistoryDialog({finding:e,teamId:n,isCurrent:o}):null}async function Z6(e,t){return(await Oe()).fetchTeamAnnotations(e,t)}async function ew(e,t=l.currentManagedTeam,r){return(await Oe()).fetchReportTriage(e,t,r)}async function Q6(e,t){return(await Oe()).fetchFixes(e,t)}async function e3(e,t=l.currentManagedTeam,r){return(await Oe()).fetchReportComments(e,t,r)}async function t3(e,t,r,n=l.currentManagedTeam){return(await Oe()).saveReportComment(e,t,r,n)}async function r3(e,t,r,n,o=l.currentManagedTeam){return(await Oe()).deleteReportComment(e,t,r,n,o)}async function n3(e,t,r,n=l.currentManagedTeam){return(await Oe()).pushReportTriage(e,t,r,n)}async function o3(e){return e&&Be?.rememberFinding(),(await Oe()).login(e)}async function i3(e){return(await Oe()).logout(e)}async function Mh(e){return(await Oe()).fetchBundleMetadata(e)}async function s3(e,t){return(await Oe()).fetchBundleContents(e,t)}async function Rh(e){return(await Oe()).fetchTeamReports(e)}async function a3(e,t){return(await Oe()).watchTeamFeed(e,t)}async function l3(e,t=l.currentManagedTeam,r="",n=!1){return(await Oe()).fetchBundleAdvisories(e,t,r,n)}var eu,Hn,Kt=$(()=>{"use strict";U();wl();Ch();eu=null,Hn=null});var tu,V,c3=$(()=>{Xr();cs();tu=class extends Zt{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===tt)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:[]}}};tu.directiveName="unsafeHTML",tu.resultType=1;V=Rr(tu)});var Je=$(()=>{c3()});function d3(e){return e==="completed"||e==="not_planned"||e==="duplicate"?e:"unknown"}function rP(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 u3(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!rP(o)||!Number.isSafeInteger(i)||i<=0?null:{repo:o,number:i}}function tw(e){return u3(e,/^\/([^/]+)\/([^/]+)\/pull\/(\d+)(?:\/(?:files|commits|checks))?\/?$/u)}function rw(e){return u3(e,/^\/([^/]+)\/([^/]+)\/issues\/(\d+)\/?$/u)}function nw(e){let t=tw(e);if(t)return{...t,kind:"pull"};let r=rw(e);return r?{...r,kind:"issue"}:null}function Ah(e){return`${e.repo.toLowerCase()}#${e.kind}:${e.number}`}var ow=$(()=>{"use strict"});function nP(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 Ih,p3=$(()=>{"use strict";ow();Ih=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=nP(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&&nw(t);return n?this.expires>this.now()?this.entries.get(Ah(n))??null:(!this.timer&&!this.run&&(this.timer=setTimeout(()=>{this.timer=null,this.flush()},0)),this.entries.get(Ah(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=nw(o?.url);if(i&&typeof o.title=="string"&&["open","draft","closed","merged"].includes(o.status)){let s=i.kind==="issue"&&o.status==="closed"?d3(o.stateReason):null;this.entries.set(Ah(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 f3(e){return Th.add(e),()=>Th.delete(e)}function sw(){iw.reset();for(let e of Th)e()}function aw(e){l.currentManagedTeam===e&&sw()}var Th,iw,Lh=$(()=>{"use strict";U();p3();Kt();Th=new Set,iw=new Ih({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:Q6,changed:()=>{for(let e of Th)e()}})});function oP(){return jn||(jn=document.createElement("div"),jn.id="app-toast",jn.setAttribute("role","status"),jn.setAttribute("aria-live","polite"),document.body.append(jn),jn)}function _t(e,{kind:t="info",duration:r=5200}={}){let n=oP(),o=++Fh;clearTimeout(ru),ru=null,n.className=t,n.textContent=e,requestAnimationFrame(()=>{Fh===o&&n.classList.add("visible")});let i=()=>{Fh===o&&lw()};return r>0&&(ru=setTimeout(i,r)),i}function lw(){Fh++,jn&&(clearTimeout(ru),ru=null,jn.classList.remove("visible"))}var jn,ru,Fh,$l=$(()=>{"use strict";jn=null,ru=null,Fh=0});function Bh(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 _l(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:vt({view:"bundles",teamId:o?.id??null,bundleId:t.managedId,bundleTab:n},e,[{id:t.managedId,slug:t.slug}])}function h3(e){return[...new Map(e.flatMap(t=>t.bundles??[]).map(t=>[t.id,Bh(t)])).values()]}var Oh=$(()=>{"use strict";uo()});function m3(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 g3=$(()=>{"use strict"});function iP(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 b3(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:k=>{v=k}}).then(k=>g.aborted||n!==u?null:(k!==null&&(r={teams:k,revision:v,expiresAt:iP(k)}),k)).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 v3=$(()=>{"use strict"});function nt(){return y3}function Ks(){return cw.signal}function Ft(){return cw.abort(),cw=new AbortController,++y3}var y3,cw,Sl=$(()=>{"use strict";y3=0,cw=new AbortController});function vo(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 nu(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 dw(e){return(e??[]).filter(t=>!["resource:base64","directory"].includes(t.format))}var Cl=$(()=>{"use strict"});function uw(e){return e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:""}function w3(e){let t=e.summary,r=[];return Number.isSafeInteger(e.byteSize)&&e.byteSize>=0&&r.push(vo(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 k3(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 x3=$(()=>{"use strict";Cl()});function sP(){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 $3(){return vi}var vi,B,yo=$(()=>{"use strict";vi=sP(),B=new Proxy(vi,{get(e,t){return vi[t]},set(e,t,r){return vi[t]=r,!0},has(e,t){return t in vi},deleteProperty(e,t){return delete vi[t]},ownKeys(){return Reflect.ownKeys(vi)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(vi,t)}})});var _3=$(()=>{"use strict"});var Nh,rr,yi,S3,C3,Ph,El,Ml,Rl,Dh,E3,Vn,zh,M3,R3,ht=$(()=>{"use strict";Nh="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",rr='<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>',yi='<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>',S3='<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>',C3='<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>',Ph='<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>',El='<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>',Ml='<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>',Rl='<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>',Dh='<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>',E3='<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>',Vn='<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>',zh='<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>',M3='<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>',R3='<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 A3,aP,ou,ot,Uh=$(()=>{"use strict";ht();A3={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="${Nh}"/>`},"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"/>'}},aP={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"]},ou=Object.fromEntries(Object.entries(A3).map(([e,{className:t,mark:r}])=>{let[n,o]=aP[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>`]})),ot=Object.fromEntries(Object.entries(A3).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 I3(e){return e!=="default"&&Object.hasOwn(ot,e)?e:null}function iu(e){return I3(e._source??e.source)}function T3(e){let t=new Set;for(let o of e){let i=I3(o.source);i!==null&&t.add(i);for(let s of o.groups.flat()){let a=iu(s);a!==null&&t.add(a)}}let r=Object.keys(yt),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 it(e){return pw(e,Lt(e))}function pw(e,t){if(t===Xe)return Xe;if(t!==void 0)return lP.has(t)?t:"default";let r=e.toLowerCase();return r.endsWith(".codex")?"codex-security":r.endsWith(".md")?"claude-security":"default"}function Hh(e){return Lt(e)===Xe}function Ie(e){return e.toLowerCase().endsWith(".codex")?e.slice(0,-6).replaceAll("__","/"):e}var Se,lP,qs,un=$(()=>{"use strict";U();Uh();Uh();ge();ht();Se={...ou,[Xe]:El},lP=new Set(["claude-security","codex-security","deepsec","piolium"]),qs={...yt,default:"DeepView"}});function su(e=document){if(e.querySelector(":modal"))return!0;for(let t of e.querySelectorAll("*"))if(t.shadowRoot&&su(t.shadowRoot))return!0;return!1}var fw=$(()=>{"use strict"});function au(e){return typeof e=="string"&&/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(e)?e:null}var jh=$(()=>{"use strict"});function cP(){return Nr||(Nr=document.createElement("div"),Nr.id="styled-tooltip",Nr.setAttribute("popover","manual"),document.body.append(Nr),Nr)}function dP(e){typeof e.showPopover=="function"&&(e.matches(":popover-open")&&e.hidePopover(),e.showPopover())}function hw(e,{placement:t="cursor"}={}){t=e.dataset.tooltipPlacement??t;let r=cP(),n=e.dataset.tooltip??"",o=e.dataset.tooltipRepo??"",i=au(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||wi===e&&L3===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 A=document.createElement("span");A.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,A.append(L)}S.append(A),r.append(S)}if(o||i){let S=document.createElement("div");if(S.className="tooltip-repo",o){S.innerHTML=Vn;let M=document.createElement("span");M.textContent=o,S.append(M)}if(i){let M=document.createElement("span");M.className="tooltip-commit",M.innerHTML=zh;let A=document.createElement("span");A.textContent=i.slice(0,7),M.append(A),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=rr;let M=document.createElement("span"),A=s==="stasis"?"Stasis":s==="sourcemap"?"Sourcemap":"";M.textContent=[A,a].filter(Boolean).join(" \xB7 "),S.append(M),r.append(S)}dP(r),r.style.left="0px",r.style.top="0px",r.style.transform="none",r.classList.add("visible");let g=N3,b=P3+pP;if(t==="right"||t==="right-start"){let S=e.getBoundingClientRect();g=S.right+fP,b=S.top+(t==="right"?S.height/2:0)}let v=window.innerWidth-r.offsetWidth-Vh,k=Math.max(Vh,Math.min(g,v));r.style.left=`${Math.round(k)}px`;let w=r.offsetHeight,y=t==="right"?b-w/2:b,x=window.innerHeight-w-Vh,_=Math.max(Vh,Math.min(y,x));r.style.top=`${Math.round(_)}px`,wi=e,L3=h}function ki(){clearTimeout(lu),lu=null,Nr&&(Nr.classList.remove("visible"),typeof Nr.hidePopover=="function"&&Nr.matches(":popover-open")&&Nr.hidePopover()),wi=null}function D3(e,{gate:t,placement:r}={}){Object.hasOwn(e.dataset,"tooltipTruncated")&&e.scrollWidth<=e.clientWidth&&e.scrollHeight<=e.clientHeight||t&&!t(e)||(clearTimeout(lu),lu=setTimeout(()=>{hw(e,{placement:r})},uP))}function B3(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 nr(e,t){!e||F3.has(e)||(F3.add(e),e.addEventListener("mouseover",r=>{let n=B3(r,e);if(!n){ki();return}n!==wi&&D3(n,t)}),e.addEventListener("mouseout",r=>{let n=B3(r,e),o=r.relatedTarget?.closest?.("[data-tooltip]")??null;n&&n===o||ki()}))}function z3(){O3||(O3=!0,document.addEventListener("tooltip-root-connected",e=>{nr(e.composedPath()[0]?.shadowRoot)}),document.body.addEventListener("mouseover",e=>{if(e.target.closest("[data-tooltip-managed]"))return;let t=e.target.closest("[data-tooltip]");!t||t===wi||(ki(),D3(t))}),document.body.addEventListener("mouseout",e=>{e.target.closest("[data-tooltip-managed]")||e.relatedTarget?.closest?.("[data-tooltip-managed]")||!wi&&!lu||wi&&wi.contains(e.relatedTarget)||ki()}))}var Nr,wi,L3,lu,N3,P3,uP,pP,fP,Vh,F3,O3,xi=$(()=>{"use strict";ht();jh();wi=null,L3="",lu=null,N3=0,P3=0;document.addEventListener("mousemove",e=>{N3=e.clientX,P3=e.clientY},{passive:!0});uP=100,pP=14,fP=8,Vh=8;F3=new WeakSet;O3=!1});var H3,U3=$(()=>{H3=`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 $i(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(Fa(s.detail?.cause))}),document.body.append(i)})}var D,pe=$(()=>{"use strict";T();mr();fw();xi();U3();D=class extends J{static styles=[F(H3)];exclusive=!1;firstUpdated(){nr(this.renderRoot),this.beforeOpen();let t=this.renderRoot.querySelector("dialog");if(t){if(this.exclusive&&su()){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 Pr,Ys=$(()=>{Pr=`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 Wh({tryPassword:e}={}){if(typeof e!="function")throw new TypeError("openWorkspaceUnlockBundleDialog: tryPassword required");return $i("workspace-unlock-bundle-dialog",{_tryPassword:e},t=>{t._tryPassword=null})}var mw,gw=$(()=>{"use strict";T();pe();Ys();mw=class extends D{static styles=[...D.styles,F(Pr)];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",mw)});var j3,V3,cu,W3,G3,kte,xte,$te,_te,Ste,bw=$(()=>{"use strict";j3=globalThis[Symbol.for("@rray/frontend")];if(!j3)throw new Error("@rray/frontend global not installed; view.js must run before lazy bundles import this wrapper");({LitElement:V3,html:cu,nothing:W3,unsafeCSS:G3,render:kte,StateElement:xte,classMap:$te,repeat:_te,styleMap:Ste}=j3)});function _i(e,t=!1){Al=e!==!1&&!t}function uu(){return Al}function $r(e){return Al?$e(e):""}function n4(e){return $e(e)!==""}function kw(e){let t=$e(e);return t!==""&&t!=="revalidation"}function Gh(e){return e.some(t=>(t.groups??[]).some(r=>r.some(kw)))}function xw(e){let t=$r(e);return t&&t!=="revalidation"?t:null}function pu(e){return $r(e)==="revalidation"}function Xs(e){return o4.has($r(e))}function i4(e){return o4.has($r(e))}function qh(e){return Kh.find(t=>t.value===e)?.kinds??null}function fu(e,t){let r=qh(e);return r?.includes("partial")?t==="only"?["partial"]:t==="exclude"?["confirmed"]:r:r}function s4(e){let t=new Set(e);return Kh.filter(r=>r.kinds.some(n=>t.has(n)))}function Xh(e){return new RegExp(`(^|/)${e}/`,"u")}function a4(e){return new RegExp(`^(?:.*/)?${e}/(?:@[^/]+/[^/]+|[^/]+)/(.*)$`,"u")}function gP(e){e!==du&&(du=e,$w=Xh(e),d4=a4(e))}function Jh(e){let t=!1,r=!1,n=o=>(!t&&l4.test(o)&&(t=!0),!r&&c4.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}}gP(t?"node_modules":r?"vendor":"dependencies")}function u4(){return du}function or(e){return $w.test(e)}function Zh(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=vw.has(o);"isUpstream"in o&&!i||(or(o.file)?(o.isUpstream!==!0&&(t=!0),o.isUpstream=!0,vw.add(o)):i&&(t=!0,delete o.isUpstream,vw.delete(o)))}return t}function K3(e){let t=typeof e=="string"?e:"";return l4.test(t)||c4.test(t)||$w.test(t)}function q3(e){return bP.exec(typeof e=="string"?e:"")?.[1]??null}function we(e){return typeof e!="number"||!Number.isFinite(e)?null:`${e.toLocaleString()} B`}function _r(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 vP(e){return e.match(d4)?.[1]??e}function p4(e){let t=Al?[xw(e),e.revalidateVerdict,e.revalidateRecommendation]:[];return[e.file,e.title,e.description,e.impact,e.reproduction,mu(e),e.recommendation,e.confidenceReason,...t,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
84
+ `).toLowerCase()}function Js(e){return[typeof e?.category=="string"?e.category.trim():"",ad(e,Al)].filter(Boolean).join(" \xB7 ")}function hu(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 Qe(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}function f4(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 wP(e){return yP.test(e||"")}function Y3(e){if(e==null||typeof e=="string")return{id:e??"",prefix:""};let t=Ln(e);return{id:typeof e.github=="string"?e.github:"",prefix:t?`${t}/`:""}}function kP(e,t,r){if(wP(e))return null;let n=Y3(t);if(n.id)return`https://github.com/${n.id}/blob/HEAD/${n.prefix}${vP(e)}`;if(or(e))return null;let o=Y3(r),i=f4(o.id);return i?`${i}/blob/HEAD/${o.prefix}${e}`:null}function _w(e,t){let r=e?.file??"",n=Dr(e,t);return n?cu`<a href="${xP(n)}" target="_blank" rel="noopener">${r}</a>`:r}function xP(e){return e.replace(/#L\d+(?:-L?\d+)?$/u,"")}function Dr(e,t){if(!e)return null;if(Pe(e.location))return e.location;let r=kP(e.file,e.repo,t);if(!r)return null;let n=parseInt(e.line,10);return Number.isFinite(n)?`${r}#L${n}`:r}function h4(e){let t=typeof e=="string"?$P.exec(e):null;if(!t)return"";let r=t[2],n=_P.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 m4(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=>SP.test(n))?t:r.map(n=>n.trim()).filter(Boolean).join(" ")}).join("")}function X3(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+m4(o.slice(0,o.length-i.length))+i}function Il(e){if(!e)return e;let t=It(e);if(t.length===0)return m4(e);let r=[],n=0;for(let[o,i]of t)o>n&&r.push(X3(e.slice(n,o),n>0,!0)),r.push(e.slice(o,i)),n=i;return n<e.length&&r.push(X3(e.slice(n),!0,!1)),r.join("")}function g4(e,t){let r=0;for(;r<t&&e[r]===" ";)r++;return e.slice(r)}function EP(e){let t=e.split(`
86
+ `),r=J3.exec(t[0]),n=(r?.[2]??"```").slice(0,3),o=(r?.[3]??"").trim().split(/\s+/u)[0].toLowerCase(),s=!!(t.length>1?J3.exec(t.at(-1)):null)?.[2].startsWith(n),a=r?.[1].length??0,c=t.slice(1,s?-1:void 0);return{lang:CP.test(o)?o:"",code:(a>0?c.map(u=>g4(u,a)):c).join(`
87
+ `)}}function b4(e){let t=It(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(EP(e.slice(i,s))),n=s;return n<e.length&&o(e.slice(n),!0),r}function MP(e){return/^ */u.exec(e)[0].length}function Q3(e){let t=e.length;for(;t>0&&!e[t-1].trim();)t--;return e.slice(0,t).join(`
88
+ `)}function v4(e){let t=typeof e=="string"?e:"";if(!t)return[e];let r=It(t),n=t.split(`
89
+ `),o=[],i=0;for(let f of n)o.push(i),i+=f.length+1;let s=f=>!rn(r,o[f])&&!Z3.test(n[f])&&yw.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=yw.exec(n[u]),h=!!f[2],g=[],b=null,v=!1;for(;u<n.length;){let k=n[u];if(!rn(r,o[u])){if(!k.trim()){b.lines.push(""),v=!0,u++;continue}let w=MP(k),y=Z3.test(k)?null:yw.exec(k);if(y&&(!b||w<b.column)){if(!!y[2]!==h)break;b&&g.push(Q3(b.lines)),b={column:y[0].length,lines:[k.slice(y[0].length)]},v=!1,u++;continue}if(w<b.column&&v)break}b.lines.push(g4(k,b.column)),v=!1,u++}b&&g.push(Q3(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=RP.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 Qh(e){return e?e.start===e.end?String(e.start):`${e.start}-${e.end}`:""}function AP(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 y4(e,t,r=4){let n=typeof e=="string"&&e!==""?e.split(`
91
+ `):[];if(n.length===0)return{text:"",startLine:1,lines:[]};let o=AP(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 em(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?Dr({file:o,line:e?.line,repo:t.repo},null):null;if(n===0&&o===i)return a();let c=q3(o);return c!==null&&c===q3(i)?a():K3(o)?null:s&&!K3(i)?a():Dr({file:o,line:e?.line},r)}function w4(e,{spaced:t=!1}={}){let r=Array.isArray(e?.evidence)?e.evidence:[];return r.length===0?"":r.map((n,o)=>{let i=wt(n),s=[`${o+1}. ${n.url?`[${i}](${n.url})`:i}`],a=$s(n);if(a)for(let c of a.split(`
93
+ `))s.push(` ${c}`);return s.join(`
94
+ `)}).join(t?`
95
+
96
+ `:`
97
+ `)}function mu(e){let t=w4(e);return t?`**Evidence:**
98
+ ${t}`:""}function k4(e){let t=/^\[([^\]]+)\]\(([^)\s]+)\)$/u.exec(e);return!t||!Pe(t[2])?null:{label:id(t[1].trim())||t[2],url:t[2]}}function x4(e,t){let r=parseInt(e?.line,10);if(!Number.isFinite(r))return W3;let n=Dr(e,t),o=`line ${r}`;return n?cu`<a href="${n}" target="_blank" rel="noopener">${o}</a>`:o}function tm(e,t){return!e||!t?null:`${/^https?:/iu.test(e)?e.replace(/\/$/u,""):`https://github.com/${e}`}/commit/${t}`}function $4(e,t){let r=[];t&&r.push(`Repo: ${t}`);let n=wt(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=w4(e,{spaced:!0});c&&i.push(`# Evidence
100
+
101
+ ${c}`);for(let[u,p]of IP){if(!Al&&p.startsWith("revalidate"))continue;let f=jt(e?.[p],e)?.trim();f&&i.push(`# ${u}
102
+
103
+ ${f}`)}return i.join(`
104
+
105
+ `)}function _4(e,{title:t,body:r,labels:n=[]}={}){let o=f4(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 t4(e){return e.length<=39&&TP.test(e)}function r4(e){return e.length<=100&&e!=="."&&e!==".."&&LP.test(e)}function NP(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 e4.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!t4(p)||!r4(f)||!e4.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(!t4(n)||!r4(o))return null;let a;if(i==="issues"||i==="pull"){if(!FP.test(s))return null;a=`${n}/${o}#${s}`}else if(i==="commit"){if(!BP.test(s))return null;a=`${n}/${o}@${s.slice(0,7)}`}else return null;let c=OP.test(t.hash)?t.hash:"";return{url:`https://github.com/${n}/${o}/${i}/${s}${c}`,label:a}}function Zs(e){if(typeof e!="string")return null;let t=gu(e);return t!==e||PP.test(e)?t.slice(0,8):null}function gu(e){let t=String(e),r="https://chatgpt.com/codex/cloud/security/findings/";return t.startsWith(r)?t.slice(r.length):t}function DP(e,t){let r=T2(e,{managed:t});if(!r)return null;let n=Zs(r.id);return{url:t?r.path:`#${r.fragment}`,label:n?`finding ${n}`:"finding",self:!0}}function UP(e){let t=e.length;for(;t>0&&zP.has(e[t-1]);)t--;return t===e.length?e:e.slice(0,t)}function S4(e,{managed:t=!1}={}){if(typeof e!="string"||e.length===0)return[];let r=[],n=0;ww.lastIndex=0;let o;for(;(o=ww.exec(e))!==null;){let i=UP(o[0]),s=i?NP(i)??DP(i,t):null;s&&(o.index>n&&r.push(e.slice(n,o.index)),r.push(s),n=o.index+i.length,ww.lastIndex=n)}return n<e.length&&r.push(e.slice(n)),r}var Al,o4,Kh,Yh,l4,c4,du,$w,d4,vw,bP,yP,$P,_P,SP,J3,CP,yw,Z3,RP,IP,TP,LP,FP,BP,OP,e4,PP,ww,zP,he=$(()=>{"use strict";ge();bw();Ha();Al=!0;o4=new Set(["refuted","unreachable"]);Kh=[{value:"confirmed",label:"Confirmed",kinds:["confirmed","partial","revalidation"]},{value:"unreachable",label:"Unreachable",kinds:["unreachable"]},{value:"refuted",label:"Refuted",kinds:["refuted"]}];Yh=["","exclude","only"];l4=Xh("node_modules"),c4=Xh("vendor"),du="node_modules",$w=Xh(du),d4=a4(du);vw=new WeakSet;bP=/^(.*(?:^|\/)node_modules\/(?:@[^/]+\/[^/]+|[^/]+))(?:\/|$)/u;yP=/^(?:@[\w.-]+\/)?[\w.-]+@[^/\s@]+$/u;$P=/^https?:\/\/(?:www\.)?github\.com\/([^/\s]+\/[^/\s]+)\/(?:blob|tree|blame)\/[^/\s]+\/(\S+)$/u,_P=/#L(\d+)(?:-L?(\d+))?$/u;SP=/^(?:\s+\S|[-*+] |\d+[.)] |>|#{1,6} |\||`{3}|~{3})/u;J3=/^( *)(`{3,}|~{3,})(.*)$/u,CP=/^[a-z0-9+#._-]{1,20}$/u;yw=/^( *)(?:[-*+]|(\d{1,9})[.)]) +(?=\S)/u,Z3=/^ {0,3}([-*_])(?: *\1){2,} *$/u;RP=/^(\d+)(?:\s*-\s*(\d+))?$/u;IP=[["Impact","impact"],["Reproduction","reproduction"],["Recommendation","recommendation"],["Confidence reason","confidenceReason"],["Revalidation verdict","revalidateVerdict"],["Revalidation recommendation","revalidateRecommendation"]];TP=/^[a-zA-Z\d](?:-?[a-zA-Z\d])*$/u,LP=/^[a-zA-Z\d._-]+$/u,FP=/^[1-9]\d{0,9}$/u,BP=/^[a-fA-F\d]{7,40}$/u,OP=/^#[\w-]+$/u,e4=/^GHSA(?:-[0-9a-z]{4}){3}$/u;PP=/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/u;ww=/https?:\/\/[^\s<>"'`(){}[\]|\\^]+/giu,zP=new Set([")",".",",","!","?",";",":","'",'"',"*","]","}",">"])});var Si,bu=$(()=>{Si=`.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 E4,C4=$(()=>{E4=`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 rm({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 Ci(e){if(!e)return m;let t=e.replaceAll("_"," ");return d`<span class="${`conflict-sev sev-${e}`}">${t}</span>`}function VP(e){return`bundle-${e.slice(7,19)}\u2026`}function Ei(e){return e.kind==="bundle"?e.label??VP(e.identifier):e.identifier}function M4(e){return e.kind==="bundle"?"bundle":Hh(e.identifier)?"links file":"report"}function nm(e){let t=e.length,r=t===1,n=new Set(e.map(M4)),o="items";if(n.size===1){let i=[...n][0];o=r?i:`${i}s`}return{count:t,singular:r,kindLabel:o}}function om(e){return d`<ul class="lwd-list">${e.map(t=>{let r=M4(t);return d`<li>${Ei(t)}${r==="report"?m:d`<span class="lwd-kind-tag">${r}</span>`}</li>`})}</ul>`}function im(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 wo=$(()=>{"use strict";T();un()});function WP(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 GP(e){return d`<span class="comment-text">${e||d`<em>empty</em>`}</span>`}function KP(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 qP(e){return e?d`<span class="${`triage triage-${e}`}">${e}</span>`:d`<em>none</em>`}function YP(e){return e?d`<span class="${`flag-badge${e==="flagged"?" on":""}`}">${e}</span>`:d`<em>none</em>`}function R4(e,t){return e==="color"?WP(t):e==="comment"?GP(t):e==="fix"?KP(t):e==="triage"?qP(t):e==="flagged"?YP(t):d`${String(t)}`}function XP(e,t){let r=e?.file?e.line?`${e.file}:${e.line}`:e.file:"";return d`<div class="card-head">${Ci(e?.severity)} ${r?d`<span class="loc" data-tooltip-truncated data-tooltip="${r}">${r}</span>`:m} <code class="id" data-tooltip="${t}">${t.slice(0,8)}…</code></div>${e?.description?d`<div class="desc" data-tooltip-truncated data-tooltip="${e.description}">${e.description}</div>`:m}`}function Tl(e,t,r={}){return new Promise((n,o)=>{let i=document.createElement("triage-conflict-dialog");i.conflicts=e,i.findingLookup=t,i.labels={...I4,...r},i.addEventListener("resolve",s=>{i.remove(),n(s.detail)}),i.addEventListener("modal-conflict",s=>{i.remove(),o(Fa(s.detail?.cause))}),document.body.append(i)})}var I4,A4,JP,Sw,vu=$(()=>{"use strict";T();he();mr();pe();bu();C4();wo();I4={title:"Triage conflicts",intro:"disagree with your local triage on",trailingNote:"",applyButton:"Apply",importedSideLabel:"Apply imported"},A4={color:0,comment:1,fix:2,triage:3,flagged:4},JP={color:"Color",comment:"Comment",fix:"Fix",triage:"Triage state",flagged:"Flag"},Sw=class extends D{static styles=[...D.styles,F(Si),F(E4)];static properties={conflicts:{attribute:!1},findingLookup:{attribute:!1},labels:{attribute:!1},_settled:{state:!0}};constructor(){super(),this.conflicts=[],this.findingLookup=new Map,this.labels={...I4},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)=>(A4[f.property]??99)-(A4[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}">${XP(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">${JP[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">${R4(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">${R4(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",Sw)});var Ot,ko=$(()=>{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 zr,Ll=$(()=>{"use strict";T();pe();ko();zr=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 T4(e){return le("local-triage-import-dialog",e)}var Cw,L4=$(()=>{"use strict";T();pe();Ll();Cw=class extends zr{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",Cw)});function sm(){let e=new Set;if(l.currentWorkspace||!t0())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)xr(n).some(o=>!r.has(o)&&Bs(o).some(i=>i!==t))&&e.add(n);return e}var Ew=$(()=>{"use strict";U()});function wu(e){return ks(e.model)||null}function Rw(e){let t=Wn();if(t.filterAnalyzer){let r=e._analyzer??null,n=t.filterAnalyzer===Mi?null:t.filterAnalyzer;if(r!==n)return!1}if(t.filterModel){let r=wu(e),n=t.filterModel===Ri?null:t.filterModel;if(r!==n)return!1}return!0}function Aw(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 O4(e){let t=new Set;for(let r of e)for(let n of r)t.add(Aw(n));return t}function Fl(){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 N4(){let e={};for(let t of QP){let r=l[t];e[t]=r instanceof Set?new Set(r):r}return e}function ku(e){Iw=e}function xu(){Iw=null}function Wn(){return Iw??l}function yu(e){if(e.confidence!==void 0)return e.confidence;if(e.critical===!0||e._source)return 10}function Tw(e){return e.every(t=>t.every(r=>yu(r)!==void 0))&&e.some(t=>t.some(eD))}function P4(e,t,r=$r){return e.some(n=>{let o=["refuted","unreachable"].includes(r(n))?0:yu(n);return o===void 0?t===0:o>=t})}function am(e,t=Ur){let r=e.map(t).filter(i=>i.length>0);if(!r.some(i=>i.some(s=>yu(s)!==void 0)))return 0;let n=i=>r.reduce((s,a)=>s+(a.some(c=>(yu(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 D4(e){return $r(e)||(e._source&&!e._sourcePass?"revalidation":"")}function z4(e){let t=fu("confirmed","");return e.some(r=>t.includes(D4(r)))}function U4(e,t){return Tw(e)?t:0}function H4(e,t=Ur,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=>fu("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 j4(e,t,r,n=$r){let o=U4(e,t),i=e.filter(a=>P4(a,o,n));if(i.length===0)return!1;let s=new Set(fu("confirmed",""));return e.some(a=>a.some(c=>s.has(n(c))))?i.every(a=>a.every(c=>r.has(q(c)))):!1}function Lw(e,t){let r=e.map(Ur).filter(n=>n.length>0);return j4(r,t,H4(e))?"confirmed":""}function lm(e){return l.showRevalidation===!1||l.upstreamOnly||$o()?!1:Fw(e)}function Fw(e,{tabs:t=Ur,kindOf:r=$r,severityMode:n=l.severityMode}={}){let o=e.map(t).filter(a=>a.length>0),i=H4(e,t,r);if(!j4(o,am(e,t),i,r))return!1;let s=U4(o,6);return o.every(a=>!P4(a,s,r)||!a.some(c=>ue(c,n)!=="low")||a.every(c=>i.has(q(c))))}function ea(e,{resetSort:t=!0}={}){l.filterConfMin=am(e),l.filterConfMax=10,l.filterRevalidate=Lw(e,l.filterConfMin),l.filterPartial="",t&&(l.sortBy=Bw(e)?"priority-desc":"severity")}function Bw(e){return!Array.isArray(e)||e.length===0?!1:e.every(t=>{if(V4(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&&Xs(o))})}function V4(e){let t=e.find(r=>r.priority!==void 0);return t?t.priority:e.some(Xs)?0:void 0}function W4(e){let t=Wn();if(t.filterSources.size===1){let r=t.filterSources.has("own");if(r&&or(e.file)||!r&&!or(e.file))return!1}if(t.filterRevalidate){let r=fu(t.filterRevalidate,t.filterPartial);if(r&&!r.includes(D4(e)))return!1}if(!t.filterRevalidate){let r=i4(e)?0:yu(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 tD(e){if(!W4(e))return!1;let t=Wn(),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(!Rw(e))return!1;if(t.filterRepo){let n=Aw(e),o=t.filterRepo===Qs?null:t.filterRepo;if(n!==o)return!1}if(r){let n=Ce(e),o=p4(e).includes(r)||(n?.comment??"").toLowerCase().includes(r)||(n?.fix??"").toLowerCase().includes(r);return t.filterIncludeNegate?!o:o}return!0}function rD(e){let t=Wn();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 nD(e){let t=e?.package?.npm;if(typeof t?.name=="string"&&t.name&&!oi(t))return t.name;let r=typeof e?.file=="string"?e.file:"";return/(?:^|\/)(?:node_modules|dependencies|vendor)\/(@[^/]+\/[^/]+|[^/]+)(?:\/|$)/u.exec(r)?.[1]??null}function G4(){return l.showRevalidation!==!1&&!l.upstreamOnly}function Ow(e){if(G4())return!1;let t=Ur(e);if(t.length<2)return!1;let r=new Set,n=new Set;for(let o of t){let i=Aw(o);i&&r.add(i);let s=nD(o);s&&n.add(s)}return r.size>1||n.size>1}function Nw(e){if(!G4()||Ur(e).length===0)return!1;let r=e.filter(n=>n.isApp);return r.length>0&&r.length>1}function Mw(e){return e.some(t=>t.isSecurity===!0)}function K4(e){return e.some(Mw)&&e.some(t=>!Mw(t))}function q4(e){return e.filter(t=>t.some(W4)).map(Ur)}function Ai(e){let t=!l.currentWorkspace&&Wn().filterDuplicates,r=t?sm():null,n=Wn().filterCrossContext,o=Wn().filterAppStacked,i=Wn().filterSecurity;return e.filter(s=>s.some(tD)&&rD(s)&&(!t||t==="with"===s.some(a=>r.has(q(a))))&&(!n||n==="with"===Ow(s))&&(!o||o==="with"===Nw(s))&&(!i||i==="with"===Mw(s)))}function F4(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 Y4(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 cm(e){let t=oD[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:V4(o),g:o})).toSorted((o,i)=>{let s=o.p??n,a=i.p??n;return(r==="desc"?a-s:s-a)||xo(o.g).file.localeCompare(xo(i.g).file)}).map(o=>o.g)}return e.map(r=>({p:xo(r),g:r})).toSorted((r,n)=>t(r.p,n.p)).map(r=>r.g)}var Mi,Qs,Ri,QP,Iw,eD,B4,oD,pn=$(()=>{"use strict";U();he();ct();Ew();Mi="\0",Qs="",Ri="";QP=["filterSeverities","filterColors","filterSources","filterAnalyzer","filterModel","filterRepo","filterConfMin","filterConfMax","filterInclude","filterIncludeNegate","filterComment","filterFix","filterFlagged","filterDuplicates","filterCrossContext","filterAppStacked","filterSecurity","filterRevalidate","filterPartial"];Iw=null;eD=e=>e.confidence!==void 0||e.critical===!0;B4=Y4("desc"),oD={severity:(e,t)=>(We[ue(t,l.severityMode)]||0)-(We[ue(e,l.severityMode)]||0)||B4(e,t)||parseInt(e.line,10)-parseInt(t.line,10),"confidence-desc":B4,"confidence-asc":Y4("asc"),"priority-desc":F4("priority","desc"),"priority-asc":F4("priority","asc")}});function X4(e){return Object.fromEntries(Object.entries(e).filter(([t,r])=>t.startsWith("revalidate")&&r!=null))}function J4(e,t,r){let n=X4(t);if(!e._revalidationCopies){let o=X4(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(ws);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 Pw=$(()=>{"use strict";ge()});function Q4(e,t){if(!e||!t||e===t)return!1;let r=!1;for(let[n,o]of Object.entries(t)){if(n.startsWith("_")||iD.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 Dw(e,t,r,n){if(!e||!t||e===t)return;(e.correctedSeverity||t.correctedSeverity)&&(e._correctedByReport??={[e._reportName??""]:{severity:Lr(e),reason:e.correctedSeverityReason}},e._correctedByReport[r]={severity:Lr(t),reason:t.correctedSeverityReason});let o=J4(e,t,r);(Q4(e,t)||n.has(e.id))&&n.set(e.id,{finding:e,copies:o})}var iD,zw=$(()=>{"use strict";ge();Pw();he();iD=new Set(["correctedSeverity","correctedSeverityReason","isApp","isUpstream","isSecurity","source"])});function $u(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 Uw=$(()=>{"use strict"});function dm(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 k=e[v];for(let w of k.groups){for(let _ of w)_.id&&["refuted","unreachable"].includes($e(_))&&s.add(_.id);let y=r?w.filter(_=>_.isUpstream&&$e(_)!=="revalidation").map(eE):t?n?w.filter(_=>!["refuted","unreachable"].includes($e(_))):w:w.filter(_=>$e(_)!=="revalidation").map(eE),x=y.length===w.length&&y.every((_,S)=>_===w[S])?w:y;x.length>0&&i.push({group:x,sourceGroup:w,reportIndex:v,reportName:k.fileName??"",hasApp:x.some(_=>_.isApp)})}}let a=i.map((v,k)=>k),c=i.map(v=>v.hasApp),u=v=>{let k=v;for(;a[k]!==k;)k=a[k];for(;a[v]!==k;){let w=a[v];a[v]=k,v=w}return k},p=(v,k)=>{v=u(v),k=u(k),v!==k&&(a[k]=v,c[v]||=c[k])},f=new Map;for(let v=0;v<i.length;v++)for(let k of i[v].group)k.id&&(f.has(k.id)||f.set(k.id,[]),f.get(k.id).push({index:v,app:k.isApp}));for(let v of f.values()){let k=new Map,w=v.find(y=>y.app);for(let{index:y}of v){w&&p(w.index,y);let x=i[y].reportIndex;k.has(x)?p(k.get(x),y):k.set(x,y)}}for(let v of f.values()){let k=null;for(let{index:w}of v)c[u(w)]||(k===null?k=w:p(k,w))}for(let v of o){let k=null;for(let w of v)for(let{index:y}of f.get(w)??[])k===null?k=y:p(k,y)}let h=new Map;for(let v=0;v<i.length;v++){let k=u(v);h.has(k)||h.set(k,[]),h.get(k).push(i[v])}let g=new Map,b=[];for(let v of h.values()){let k=v[0].group,w=k.map(A=>A.id).filter(Boolean);if(v.length===1&&new Set(w).size===w.length&&o.length===0){let A=e.length>1&&k.find(P=>P.isApp);if(A){let P=[...k];P.workspaceKey=A.id??String(A._id),b.push(...Hw(v,P,t,r))}else b.push(...Hw(v,k,t,r));continue}let y=new Map,x=new Map,_=[];for(let{group:A,reportName:P}of v)for(let L of A)if(L.id&&x.has(L.id))Dw(x.get(L.id),L,P,y);else{let R={...L,_reportName:L._reportName??P};L.id&&x.set(L.id,R),_.push(R)}let S=new Set;for(let A of o)for(let P of A)x.has(P)&&S.add(P);for(let{group:A}of v)if(A.length>1)for(let P of A)P.id&&S.add(P.id);let M=[...S].map(A=>x.get(A));for(let A of _)S.has(A.id)||M.push(A);if(e.length>1){let A=M.find(P=>P.isApp);A&&(M.workspaceKey=A.id??String(A._id))}b.push(...Hw(v,M,t,r));for(let[A,P]of y){let L=g.get(A);g.set(A,L?{finding:L.finding,copies:[...L.copies,...P.copies]}:P)}}return Object.defineProperty(b,"ruledOutIds",{value:s,configurable:!0}),{groups:b,conflicts:g}}function Hw(e,t,r,n){if(r)return[t];if(n){let i=e.flatMap(p=>p.sourceGroup),s=$u(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 $u(t,o)}function eE(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 jw=$(()=>{"use strict";ge();zw();Uw()});function Sr(){return l.currentView==="links"&&ta?.owner===l.currentLinks?ta:null}function um(){Vw++,ta=null}async function tE(e,t,r,n){if(l.currentView!=="links"||!l.currentLinks)return;let o=ds(l.currentLinks),i=++Vw;ta={owner:o,id:e,reportName:t,group:null,error:""},l.focusCodeStack=[],l.focusCodeAt=0;let s=()=>i===Vw&&l.currentView==="links"&&l.currentLinks===o;try{if(C()){let g=di([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.");ta={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 tr(await De(t));if(!s())return;let c=(ft(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:xt(f)??Ut(t),_repoDirectory:Ln(f?.repo),_bundleHashes:f.bundleHashes??[],_source:g.source??f.source??null};return fo(b,f),b._analyzer=b._source??b.type??null,"isApp"in b||(b.isApp=on(b,b._source)),b});await Promise.all([zs(),At("report",t),...Dd(t).map(g=>At("workspace",g.id))]),s()&&(ho([h],{linkedIds:xr,knownRows:g=>[...di(g),...l.reports.flatMap(b=>b.groups??[]).filter(b=>b.some(v=>g.includes(v.id))).map(b=>({members:b}))]}),ta.group=h,l.activeTabByGroup.set(h[0].id,e))}catch(a){s()&&(ta.error=a.message||"Unable to load this finding.")}}var ta,Vw,pm=$(()=>{"use strict";U();Pc();ge();ta=null,Vw=0});function fm(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 k=i(b),w=i(v);k!==w&&(o[w]=k)}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 k of f)for(let w of n(e[k]))h.has(u(w))||h.set(u(w),w);let g=new Map;for(let k of f)for(let w of e[k])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 Ww=$(()=>{"use strict"});function q(e){return e.id??String(e._id)}function de(e){return e.workspaceKey??q(e[0])}function Gw(e){return Array.isArray(e)?e:[e]}function $o(){return l.revalidationDetailed===!0}function Kw(e){return e?._reportName??""}function sD(){let e=l.reports;return!Array.isArray(e)||e.length===0?!0:(e!==rE&&(rE=e,nE=Gh(e)),nE)}function Ue(e){return!e.isUpstream||l.showRevalidation===!1||l.upstreamOnly===!0||!sD()}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 qw(e){return Ue(e)&&mo(l.triage,q(e),Kw(e))}function _u(e,t=Ce(e)){if(Ue(e))return t?.triage??(qw(e)?"ignored":void 0)}function Ur(e){return Sr()?.group===e?e:e.linkedTabs?e.linkedTabs:$o()?e:oE(e)}function oE(e){return e.length<=1||!e.some(pu)?e:e.filter(pu)}function Gn(e){let t=Ur(e);return t.length<=1?t:[...t].toSorted((r,n)=>{let o=pu(r)?1:0,i=pu(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 xo(e){return e.length===1?e[0]:Gn(e)[0]}function iE(e){let t=[],r=[];for(let n of e)(n.isApp?t:r).push(n);return{app:t,source:r}}function aD(e){let t=Ce(e);return!!t?.comment||!!t?.fix||t?.flagged===!0}function Ne(e){if(e.length===1)return e[0];let t=Gn(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(Rw);o.length>0&&(n=o)}return n.find(aD)??n[0]}function sE(e){return e?._repoFallback||l.repoUrl||""}function ir(e){return{github:sE(e),directory:e?._repoDirectory??""}}function hm(e){for(let t of On().values())if(t.files.has(e.file))return t.repos?.size===1?[...t.repos][0]:null;return e.repo?.github||sE(e)||null}function Bl(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=Bl(e),r=0,n=!1,o,i=!1,s=!1,a,c=!1,u=null,p=!1,f=!0;for(let k of t){let w=Ce(k),y=_u(k,w),x=w?.color;x===void 0&&y===void 0||(r++,x!==void 0&&(i?x!==o&&(n=!0):(i=!0,o=x)),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 aE(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=>Yw(o,n))}function Yw(e,t){if(!Ue(e))return!1;let r=(Ce(e)?.fix??"").trim();return r===""||r===(t??"").trim()}function lE(e,t){if(!Ue(Ne(e)))return{targets:[],clearing:!1};let r=Ke(e);return{targets:Ii(e,r),clearing:t==="restore"||Xw(e,r)===t}}function Ii(e,t=Ke(e)){let r=Bl(e),n=e.linkedTabs||r!==e&&e.some(o=>o.isApp)?r:t.hasConflict?[Ne(e)]:r;return n.every(Ue)?n:n.filter(Ue)}function Xw(e,t=Ke(e),r=null){return e.linkedTabs||e.some(n=>n.isApp)&&Bl(e)!==e||!t.hasConflict?t.commonTriage??null:_u(r??Ne(e))??null}function mm(e){let t=Bl(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 Ti(){Cr=null}function gm(e,t=!1,r=!1){let n=l.reports,o=l.workspaceMerges,i=C();(!Cr||Cr.reports.length!==n.length||Cr.reports.some((a,c)=>a!==n[c])||Cr.merges!==o||Cr.mergeCount!==o.length||Cr.securityLinksTick!==l.linksTick||Cr.findingIndexTick!==l.findingIndexTick||Cr.managed!==i)&&(ho(n.flatMap(a=>a.groups??[]),{linkedIds:xr,knownRows:di}),Cr={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 Cr[s]||(Cr[s]=dm(n,{showRevalidation:e&&!t,upstreamOnly:t,hideRuledOut:r,merges:o})),Cr[s]}function cE(){return gm(l.showRevalidation!==!1).groups}function Jw(){return gm(!0).groups}function dE(){return gm(!0,!1,!!l.currentWorkspace).conflicts}function Er(){let e=gm(l.showRevalidation!==!1,l.upstreamOnly===!0,!!l.currentWorkspace),t=e.groups;if(l.showRevalidation===!1||l.upstreamOnly)return t;if(l.currentWorkspace){let r=$o();return(!e.linkedGroups||e.linksTick!==l.linksTick||e.linkedDetailed!==r)&&(e.linkedGroups=fm(t,xr,oE,Ur),e.linksTick=l.linksTick,e.linkedDetailed=r),e.linkedGroups}return $o()?t:e.visibleGroups??=(()=>{let r=t.flatMap(n=>{let o=n.filter(i=>!Xs(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 Kn(){let e=Er();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 uE(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 Jw())for(let o of $u(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 sr(e){let t=Sr()?.group;if(t&&de(t)===e)return t;for(let r of Er())if(de(r)===e)return r;return null}var rE,nE,Cr,ct=$(()=>{"use strict";U();ge();he();pn();jw();pm();Ww();Uw();zw();rE=null,nE=!0;Cr=null});function pE(e){return e==null?"(none)":Qw[e]??e}function fE(e){return e??"(no model)"}var Qw,Zw,e1=$(()=>{"use strict";T();He();Re();U();pn();ge();Qw=yt;Zw=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===Mi?null:l.filterAnalyzer,o=l.filterModel===""?void 0:l.filterModel===Ri?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,k=wu(b);(o===void 0||k===o)&&h.add(v),(n===void 0||v===n)&&g.add(k)}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:pE(n),c=o===void 0?null:fE(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:Mi,labelOf:pE,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:Ri,labelOf:fE,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",Zw)});function t1(e,t){if(t==null)return e.length+1;let r=e.indexOf(t);return r===-1?e.length:r}function uD(e,t,r){for(let n of r){let o=dD[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 mE(e,t,{typePrefix:r=!0}={}){return e==="type"?r?`analyzer: ${t??"null"}`:`${t??"null"}`:t??null}function pD(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 gE(e,t=bm){let r=new Map;for(let h of e){let g={};for(let v of t)g[v]=v==="model"?ks(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)=>uD(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")?pD(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=mE(h,s[0][h]);g!=null&&p.push(g)}else if(!f){for(let g of s){let b=i.map(v=>mE(v,g[v],{typePrefix:!a})).filter(v=>v!=null);b.length>0&&p.push(b.join(" \xB7 "))}f=!0}return p}var bm,hE,lD,cD,dD,bE=$(()=>{"use strict";he();bm=["type","model","effort","exportsMode"],hE=["security","correctness"],lD=["max","xhigh","high","medium","low","minimal"],cD=["list","isolate"];dD={type:e=>e==="terminal"?hE.length+2:t1(hE,e),model:e=>e==null?1:0,effort:e=>t1(lD,e),exportsMode:e=>t1(cD,e)}});function vE(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 yE=$(()=>{"use strict"});function Mr(e,t){if(typeof t=="string"&&wE[t])return wE[t];if(typeof e!="string")return null;let r=e.slice(e.lastIndexOf("/")+1),n=r.lastIndexOf(".");return n<=0?null:fD[r.slice(n+1).toLowerCase()]??null}var fD,wE,vm=$(()=>{"use strict";fD={__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"},wE={__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 hD(){return ym||(ym=(async()=>await import("./prism.js"))(),ym)}function kE(e){return typeof e!="string"?null:mD[e.toLowerCase()]??null}async function Hr(e,t,r=null){if(!t)return null;try{return(await hD()).highlight(e,t,r)}catch{return null}}function xE(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 ym,mD,ra=$(()=>{"use strict";vm();ym=null;mD={__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 gD(){o1||(o1=!0,queueMicrotask(()=>{o1=!1,l.codeBlockTick++,E()}))}function i1(e,t){let r=kE(t);if(!r||!e)return null;let n=`${r}\0${e}`;return r1.has(n)?r1.get(n):(n1.has(n)||(n1.add(n),(async()=>{let o=await Hr(e,r);r1.set(n,o??null),n1.delete(n),gD()})()),null)}var r1,n1,o1,$E=$(()=>{"use strict";U();ra();qt();r1=new Map,n1=new Set,o1=!1});function xD(e,t,r){if(e===t)return e;let n=s1(e);if(n!==s1(t)&&_E(e)===_E(t))return n?t:e;throw new Error(`format conflict for '${r}' ('${t}' vs '${e}')`)}function na(e,t){return t===""?e:e==="."?t:`${e}/${t}`}function l1({name:e,version:t,ecosystem:r,files:n}){return Z(r===void 0||typeof r=="string"),a1({name:e,version:t??void 0,ecosystem:r,files:fn(Object.entries(n))})}function ME(e,{scope:t="full"}={}){let r=new Set;for(let[n,{files:o}]of e)if(!(t!=="full"&&!Nl(n)))for(let i of Object.keys(o))r.add(na(n,i));return r}function $D(e,{what:t,files:r,formats:n,scope:o}){if(e.includes("\\"))return"holds a '\\'";if(Su(e))return"escapes the root";if(o!=="full"&&!Nl(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":s1(i)?`is a payload-free '${i}' record, not a file`:null}function RE(e,{what:t,files:r,formats:n,scope:o}){for(let i of e){let s=$D(i,{what:t,files:r,formats:n,scope:o});Z(s===null,`${t}: executable entry '${i}' ${s}`)}}function AE(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 RE(s,{what:t,files:r,formats:n,scope:o}),s}function IE(e,{what:t,modules:r,formats:n,scope:o}){if(e.size!==0)return RE(e,{what:t,files:ME(r,{scope:o}),formats:n,scope:o}),km(e)}function Z(e,t){if(!e)throw new Error(t)}function TE(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 Su(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 OE(e,t){Z(Array.isArray(e),`${t}: entries must be an array of file paths`);let r=new Set;for(let n of e)BE(n,t),Z(!r.has(n),`${t}: entry '${n}' is listed twice`),r.add(n);return r}function NE(e,t){for(let r of e)BE(r,t);return km(e)}function PE(e,t){_o(e,"formats"),Z(kD.has(t),`unknown format '${t}' for ${e}`)}function DE(e){Z(Ol(e));let t=new Map;for(let[r,n]of Object.entries(e)){PE(r,n);let o=r===""?".":r;Z(!t.has(o),`duplicate format key '${o}'`),t.set(o,n)}return t}function zE(e){for(let[t,r]of e)PE(t,r);return c1(e)}function UE(e){for(let[,t]of e){Z(t instanceof Map);for(let[r,n]of t){_o(r,"imports"),Z(n instanceof Map);for(let[,o]of n){if(typeof o=="string"){_o(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"),_o(s,"imports")}}}}function HE(e){Z(Ol(e));let t=LE(e);return UE(t),t}function jE(e){return UE(e),c1(e)}function VE(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=Nl(n);i&&Z(o.name&&o.version&&o.files);let s=fn(Object.entries(o.files).toSorted(wm));r[i?"modules":"sources"].push([n,a1({...o,files:s})])}return{modules:fn(r.modules.toSorted(wm)),sources:fn(r.sources.toSorted(wm))}}function _D(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 WE(e,t,r){let n=new Map,o=i=>{for(let[s,a]of i){let c=SE(n,s);for(let[u,p]of a){let f=SE(c,u);for(let[h,g]of p)f.has(h)?Z(_D(f.get(h),g),`${r}: import '${h}' from '${u}' resolves differently ('${CE(f.get(h))}' vs '${CE(g)}')`):f.set(h,g instanceof Map?new Map(g):g)}}};return o(e),o(t),n}function GE(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,xD(a,c,s))}catch(u){throw new Error(`${r}: ${u.message}`,{cause:u})}}};return o(e),o(t),n}function KE(e,t,r,n){if(e.size===0)return new Set(t);let o=ME(r,{scope:n}),i=new Set(t);for(let s of e)o.has(s)||i.add(s);return i}function xm(e,t,r){let n=na(e,t);return(n!=="."||t!=="")&&SD.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 $m(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`),_o(o,t);for(let s of Object.keys(i)){let a=xm(o,s,t),c=n.get(a);c!==void 0&&r(a,c,o),n.set(a,o)}}return n}function YE(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,a1({...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 '${na(s,u)}'`):c.files[u]=p}};return o(e),o(t),$m(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 Nl(e){return e.split("/").includes("node_modules")}function CD(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 XE(e){let t="node_modules/",r=CD(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 bD,vD,yD,wD,EE,kD,s1,_E,a1,wm,Ol,fn,km,c1,SE,LE,FE,_o,BE,CE,SD,qE,JE=$(()=>{bD=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),vD=new Set(["solidity","php","shell","rust"]),yD=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"]),wD=new Set(["resource","resource:base64"]),EE=new Set(["stat:file","stat:directory"]),kD=new Set([...bD,...vD,...yD,...wD,"patch","directory",...EE]),s1=e=>EE.has(e),_E=e=>e==="directory"||e==="stat:directory"?"directory":"file";a1=({name:e,version:t,ecosystem:r,files:n})=>({name:e,version:t,...r===void 0?{}:{ecosystem:r},files:n});wm=(e,t)=>TE(e[0],t[0]),Ol=e=>e&&[null,Object.prototype].includes(Object.getPrototypeOf(e)),fn=e=>Object.setPrototypeOf(Object.fromEntries(e),null),km=e=>[...e].toSorted(TE),c1=(e,{sorted:t=!0}={})=>{let r=t?[...e].toSorted(wm):[...e];return fn(r.map(([n,o])=>[n,o instanceof Map?c1(o,{sorted:t}):o]))},SE=(e,t)=>e.get(t)??e.set(t,new Map).get(t),LE=e=>new Map(Object.entries(e).map(([t,r])=>[t,Ol(r)?LE(r):r]));FE=e=>e.includes("\\")||Su(e),_o=(e,t)=>Z(!FE(e),`${t}: path '${e}' escapes the root or holds a '\\'`),BE=(e,t)=>Z(typeof e=="string"&&e!==""&&!FE(e),`${t}: invalid entry ${JSON.stringify(e)}`);CE=e=>e instanceof Map?`{${[...e].map(([t,r])=>`${t}: ${r}`).join(", ")}}`:e;SD=/(?:^|\/)\.{0,2}(?:\/|$)/u;qE=(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 ED(){throw new Error("bundle: file contents are not retained by this contents-free Bundle")}var Li,ZE,QE,eM,MD,d1,RD,AD,ID,nM,TD,p1,tM,rM,u1,oM,LD,jr,_m=$(()=>{JE();Li=1,ZE=0,QE=qE("bundle","artifact (bundle=replace)"),eM=e=>XE(e)??{dir:".",rel:e==="."?"":e,name:null};MD=(e,{files:t,...r})=>{let n=Object.create(null);for(let[o,i]of Object.entries(t))typeof i!="symbol"&&Z(!1,`bundle: file '${na(e,o)}' is not a placeholder`),Object.defineProperty(n,o,{get:ED,enumerable:!0});return{...r,files:Object.freeze(n)}},d1=(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,km(r.get(n))]))},RD=/^(?=[A-Za-z0-9-]{1,39}\/)[A-Za-z0-9](?:-?[A-Za-z0-9])*\/(?!\.\.?$)[\w.-]{1,100}$/u,AD=/^(?!\.\.?(?:\/|$))[\w.~@+-]+(?:\/(?!\.\.?(?:\/|$))[\w.~@+-]+)*$/u,ID=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u,nM={github:e=>typeof e=="string"&&RD.test(e),directory:e=>typeof e=="string"&&e.length<=1024&&AD.test(e),root:e=>e===!0,commit:e=>typeof e=="string"&&ID.test(e)},TD=(e,t)=>{if(e?.github===void 0||e.github.toLowerCase()!==t?.github?.toLowerCase())return;let r=Object.keys(nM).filter(n=>e[n]!==void 0&&(n==="github"||e[n]===t[n]));return fn(r.map(n=>[n,e[n]]))},p1=(e,t,r)=>{if(e===void 0)return;Z(Ol(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,p1(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))},tM=e=>{let t=p1(e,nM,"repo");return Z(t?.directory===void 0||t.root===void 0,"bundle repo has both directory and root"),t},rM=e=>typeof e=="string"&&/^[\w.+@/~'!()*-]+$/u.test(e),u1={name:rM,version:rM},oM={npm:u1,composer:u1,cargo:u1},LD=(e,t)=>fn(Object.keys(oM).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]})),jr=class e{static VERSION=Li;version=Li;config;entries;modules;formats;imports;executable;reason;#e;get repo(){return this.#e}set repo(t){this.#e=tM(t)}#t;get package(){return this.#t}set package(t){this.#t=p1(t,oM,"package")}constructor({config:t={scope:"full"},entries:r,modules:n,formats:o,imports:i,executable:s,reason:a,repo:c,package:u,version:p=Li}={}){Z([ZE,Li].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=tM(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(na(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(na(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=eM(n);return xm(s.dir,s.rel,"bundle")}if(t.length===4&&(r==="sources"||r==="modules")&&o==="files"&&typeof i=="string")return xm(n,i,"bundle")}}static fromJSON(t,{contents:r=!0}={}){Z(t.version===Li||t.version===ZE),Z(["node_modules","full"].includes(t.config?.scope));let n=DE(t.formats),o=new Map,i=new Set;if(t.version===Li){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(Nl(u)),_o(u,"bundle"),Z(p?.name&&p.version&&p.files),o.set(u,l1(p))}if(c){Z(t.sources&&typeof t.sources=="object");for(let[u,p]of Object.entries(t.sources))Z(!Nl(u)),_o(u,"bundle"),Z(p?.name&&p.files),o.set(u,l1(p));t.entries!==void 0&&(i=OE(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)){_o(c,"bundle");let{dir:p,rel:f,name:h}=eM(c);Z(!Su(p)&&!Su(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=$m(o,"bundle",QE),a=HE(t.imports);if(!r)for(let[c,u]of o)o.set(c,MD(c,u));return new e({version:t.version,config:t.config,entries:i,modules:o,formats:n,imports:a,executable:t.version===Li?AE(t.executable,{what:"bundle",files:s,formats:n,scope:t.config.scope}):new Set,reason:Ol(t.reason)?t.reason:void 0,repo:t.repo,package:t.package})}serialize(){$m(this.modules,"bundle",QE);let{modules:t,sources:r}=VE(this.modules,{skipEmpty:!0}),n=this.config.scope==="full",o={version:Li,config:this.config};this.repo!==void 0&&(o.repo=this.repo),this.package!==void 0&&(o.package=this.package),n&&(o.entries=NE(this.entries,"bundle")),o.formats=zE(this.formats),o.imports=jE(this.imports);let i=IE(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=d1(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=d1(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:YE(this.modules,t.modules,"bundle merge"),formats:GE(this.formats,t.formats,"bundle merge"),imports:WE(this.imports,t.imports,"bundle merge"),executable:KE(this.executable,t.executable,t.modules,this.config.scope),reason:d1(this.reason,t.reason),repo:TD(this.repo,t.repo),package:LD(this.package,t.package)})}}});function FD(){for(let e of["br","brotli"])try{return new DecompressionStream(e),e}catch{}return null}async function BD(e,t){let r=new Blob([t]).stream().pipeThrough(new DecompressionStream(e));return new Uint8Array(await new Response(r).arrayBuffer())}async function OD(){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 PD(){return Cm||(Cm=(async()=>await import(iM))(),Cm)}function h1(){f1=!0,qn&&(qn.terminate(),qn=null);let e=[...Pl.values()];Pl.clear();for(let t of e)t.resolve(Em)}function DD(e){let{id:t,bytes:r,error:n}=e.data??{},o=Pl.get(t);o&&(Pl.delete(t),n?o.reject(new Error(n)):o.resolve(r))}function zD(){if(qn)return qn;if(f1||typeof Worker>"u")return null;try{qn=new Worker(new URL(iM,import.meta.url),{type:"module"})}catch{return f1=!0,null}return qn.addEventListener("message",DD),qn.addEventListener("error",h1),qn.addEventListener("messageerror",h1),qn}function UD(e){let t=zD();return t?new Promise((r,n)=>{let o=++ND;Pl.set(o,{resolve:r,reject:n});try{t.postMessage({id:o,bytes:e})}catch{Pl.delete(o),h1(),r(Em)}}):Promise.resolve(Em)}async function HD(){await OD();let e=FD();return e?{kind:"native",format:e}:{kind:"fallback"}}function sM(){return Sm||(Sm=HD(),Sm)}async function aM(e,t=()=>!0){let r=()=>{if(!t())throw new DOMException("Bundle decode cancelled","AbortError")};r();let n=await sM();if(r(),n.kind==="native")return BD(n.format,e);let o=await UD(e);return r(),o!==Em?o:(await PD()).brotliDecompress(e)}var Sm,Cm,iM,Em,qn,f1,ND,Pl,m1=$(()=>{"use strict";Sm=null,Cm=null;iM="./brotli-fallback.js",Em=Symbol("brotli worker unavailable"),qn=null,f1=!1,ND=0,Pl=new Map;sM().catch(()=>{})});function WD(e){let t=typeof e=="string"?e.slice(e.lastIndexOf("/")+1):"",r=t.lastIndexOf("."),n=r>0?t.slice(r+1).trim().toLowerCase():"",o=Mr(e)??VD[n];return o?{key:o,label:jD[o]??o}:n?{key:`extension:${n}`,label:`.${n}`}:{key:"other",label:"Other"}}function Cu(e,t){let r=new Map,n=0,o=0;for(let[i,s]of e){let a=WD(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 jD,VD,g1=$(()=>{"use strict";vm();jD=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"}),VD=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&&b1.has(t))return b1.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"&&(jr.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&&b1.set(t,r),r}function hn(e){let t=e?.bundle??e?.json;if(t&&v1.has(t))return v1.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&&v1.set(t,r),r}function KD(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&&GD.indexOf(r.at(-1))&(n===2?15:3)?null:Math.floor(r.length*3/4)}function Eu(e){return typeof e=="string"?us(e):e?.format==="base64"?KD(e.data):null}function Yt(e){if(e?.fileSizes)return e.fileSizes;let t=e?.bundle??e?.json;if(t&&y1.has(t))return y1.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,Eu(n.get(i)));return t&&y1.set(t,r),r}function $1(e){if(e?.metadataOnly)return e.unsizedFiles??new Set;let t=Yt(e);if(x1.has(t))return x1.get(t);let r=new Set;for(let n of hn(e).keys())t.get(n)===null&&r.add(n);return x1.set(t,r),r}function Dl(e){let t=Yt(e);if(k1.has(t))return k1.get(t);let r=$1(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,jr.isResourceFormat(n?.get(i))?"resource":"source");return k1.set(t,o),o}function lM(e){let t=Yt(e),r=e?.kind==="stasis"?e.bundle?.formats:null;if(!r||r.size===0)return t;if(w1.has(t))return w1.get(t);let n=new Map;for(let[o,i]of t)n.set(o,jr.isResourceFormat(r.get(o))?null:i);return w1.set(t,n),n}function Vr(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 Mu(e,t=null){let r=new Map;if(e?.kind!=="stasis"||!e.bundle?.modules)return r;let n=t===null?null:Vr(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 b1,v1,y1,w1,k1,x1,GD,Ru=$(()=>{"use strict";_m();Dt();b1=new WeakMap,v1=new WeakMap,y1=new WeakMap,w1=new WeakMap,k1=new WeakMap,x1=new WeakMap;GD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"});function Fi(e,t=null){return!!t||YD.has(e)}function Au(e){if(e.fileHashes)return Promise.resolve(e.fileHashes);if(Mm.has(e))return Mm.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 pv(a)]));for(let[s,a]of i)n.set(s,a)}return e.fileHashes=n,n})();return Mm.set(e,t),t.catch(()=>Mm.delete(e)),t}function Iu(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 S1(e){return e instanceof Map?Object.fromEntries([...e].map(([t,r])=>[t,S1(r)])):e}async function cM(e){let t=await Au(e),r=Yt(e),n=e.lineCounts??=new Map([...dt(e)].map(([s,a])=>[s,Iu(a)])),o={version:_1,integrity:e.integrity,kind:e.kind,size:e.size,codeStats:Cu(n,r),files:[...r].map(([s,a])=>[s,a,t.get(s)??null,n.get(s)??null])},i=$1(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"?us(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:S1(s.formats),imports:S1(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 Tu(e,t){if(![1,2,_1].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!==_1,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=jr.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&&!jr.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=Cu(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 dM(e,{integrity:t,kind:r,size:n}){if(r==="stasis")return{integrity:t,kind:r,size:n,bundle:jr.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 qD,_1,Mm,YD,uM=$(()=>{"use strict";g1();jh();_m();ge();Dt();Ru();qD=3,_1=qD,Mm=new WeakMap,YD=new Set(["terminal","code","search","compare"])});var zl=$(()=>{"use strict";uM()});async function C1(e){try{let t=await ry(e);return t?Tu(t,e):null}catch{return null}}function So(e,t,{sources:r=!0}={}){if(!t.managedId&&C())return Promise.reject(new DOMException("Local bundle closed","AbortError"));let n=r?XD:JD,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?Ks():void 0,c=n.get(s);if(c&&c.signal===a)return c.job;let u=(async()=>{if(t.managedId)try{let h=r?dM(await s3(t.managedId,{signal:a}),{integrity:e,kind:o,size:t.size}):Tu(await Mh(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 C1(e);return h?.kind===o&&!h.stale?h:So(e,t)}let[p,f]=await Promise.all([ZD(e,t),C1(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||cM(p).then(g=>ny(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 Co(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 Ul(e,{preserveSource:t=!1}={}){Fi(l.bundleDetailsTab,l.bundleSourceFile)&&!Fi(e,t?l.bundleSourceFile:null)&&Ft(),l.bundleDetailsTab=e,t||(l.bundleSourceFile=null,l.bundleCodeHistory=null),l.bundleSourceFindingIdx=null}async function ZD(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 aM(r,()=>!C())),s=jr.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 QD(e){if(!(e?.managedId||!e?.json&&!e?.bundle)){if(e.fileHashes){Cd(e.integrity,e.fileHashes);return}(async()=>{try{let t=await Au(e);if(Cd(e.integrity,t),l.bundleDetails!==e)return;e.fileHashes=t,E()}catch{}})()}}function E1(e){if(xy(e))return Promise.resolve();if(Lu.has(e))return Lu.get(e);let t=(l.bundles??[]).find(n=>n.integrity===e);if(!t||t.managedId)return Promise.resolve();let r=(async()=>{let n=await C1(e);if(!(!n?.json&&!n?.bundle))try{let o=await Au(n);Cd(e,o)}catch{}})();return Lu.set(e,r),r.finally(()=>{Lu.get(e)===r&&Lu.delete(e)}).catch(()=>{}),r}async function M1(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 E1(n)}}}async function Eo(e){let t=(l.bundles??[]).find(n=>n.integrity===e);if(!t)return;let r;try{r=await So(e,t,{sources:Fi(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(),QD(r),t.managedId||Or().catch(()=>{}))}function oa(e=l.bundleDetails){if(e?.sourceError)return Promise.resolve(null);if(!e?.metadataOnly)return Promise.resolve(e);let t=e.managedId?Ks():void 0,r=Rm.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=So(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 Rm.set(e,{job:o,signal:t}),o.finally(()=>{Rm.get(e)?.job===o&&Rm.delete(e)}).catch(()=>{}),o}var XD,JD,Lu,Rm,Mo=$(()=>{"use strict";_m();U();Kt();Dt();m1();yo();qt();Sl();zl();XD=new Map,JD=new Map,Lu=new Map,Rm=new WeakMap});var Wr=$(()=>{"use strict";Ru()});function hM(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 ez(e){let t=new Map;for(let r of e.keys()){let n=hM(r);n!==null&&t.set(n,t.has(n)?null:r)}return t}function R1(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 Am(e,t,r=null){let n=pM.get(e);n||(n=ez(e),pM.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(hM(i+s))??null}}function A1(e,t){let r=dt(e),n=fM.get(r);return n||(n=R1(e,r),fM.set(r,n)),Am(r,t,n)}var pM,fM,I1=$(()=>{"use strict";Ru();pM=new WeakMap;fM=new WeakMap});function Im(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 T1(e,t,r){if(!r)return null;if(!Array.isArray(e)||e.length===0||!Im(e[0],r))return{stack:tz,at:0,pos:r};let n=Math.min(Math.max(t,0),e.length-1);return{stack:e,at:n,pos:e[n]}}function mM({stack:e,at:t,base:r},n){let o=e.length>0?e[t]:r;if(Im(o,n))return null;let i=e.length>0?e.slice(0,t+1):[r];return{stack:[...i,n],at:i.length}}function gM(e,t,r){return!Array.isArray(e)||e.length===0?0:Math.min(Math.max(t+r,0),e.length-1)}var tz,Tm=$(()=>{"use strict";tz=[]});function Hl(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 Lm=$(()=>{"use strict"});function vM(e,t,r,n,o,i=F1,s=rz){let a=`${e}\0${t}`;if(i.has(a)||s.has(a))return;let c=Mr(t,n);if(!c){i.set(a,null);return}s.add(a),(async()=>{let u=await Hr(r,c,o);i.set(a,u??null),s.delete(a),l.focusCodeTick++,queueMicrotask(E)})()}async function nz(e){let t=Fu.get(e);if(t&&(t.loading||t.sources))return;let r=(l.bundles??[]).find(n=>n.integrity===e);if(r){Fu.set(e,{sources:null,loading:!0,error:null});try{let n=await So(e,r),o=dt(n);Fu.set(e,{sources:o,imports:R1(n,o),formats:n.kind==="stasis"?n.bundle?.formats:null,loading:!1,error:n.error??null})}catch(n){Fu.set(e,{sources:null,loading:!1,error:n.message})}l.focusCodeTick++,queueMicrotask(E),queueMicrotask(Ro)}}function Ro(){let e=N.querySelectorAll(".focus-code-line-active");e.length!==0&&Hl(e[0].closest(".focus-code-body"),e)}function Bu(e){if(C()){if(!e?._managedReportId||!Array.isArray(e._bundleHashes)||e._bundleHashes.length===0)return null;l.focusCodeTick;let r=xl(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=Ou(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:Os(e.fileHash).find(({integrity:r})=>t.includes(r))??null}function Ou(e,t){if(typeof t!="string"||!t)return null;if(!e.reportId)return ky(e.integrity,t);let r=xl(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 yM(e,t,r){if(!C())return null;let n=xl(e);if(!n||n.data===void 0&&!n.error)return r&&!L1.has(e)&&(L1.add(e),Eh(e).catch(()=>{}).finally(()=>{L1.delete(e),l.focusCodeTick++,queueMicrotask(E),queueMicrotask(Ro)})),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=bM.get(o);return s||(s={cache:new Map,pending:new Set},bM.set(o,s)),vM(o.integrity,t,i,o.formats?.get(t),Am(o.sources,t,o.imports),s.cache,s.pending),{content:i,highlighted:s.cache.get(`${o.integrity}\0${t}`)??null,loading:!1}}function ia(e,t,{kick:r=!0,reportId:n=null}={}){if(n)return yM(n,t,r);if(C())return null;let o=Fu.get(e);if(!o)return r?(nz(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;vM(e,t,i,o.formats?.get(t),Am(o.sources,t,o.imports));let s=`${e}\0${t}`;return{content:i,highlighted:F1.has(s)?F1.get(s):void 0,loading:!1}}function wM(e){let t=Bu(e);return t?.integrity?{integrity:t.integrity,file:t.file,range:Bt(t.reportId?t.line:e.line)}:null}function oz(e){return e?wM(Ne(e)):null}function jl(e){let t=oz(e);return t?{base:t,...T1(l.focusCodeStack,l.focusCodeAt,t)}:null}function kM(e){let t=wM(e);return t?T1(l.focusCodeStack,l.focusCodeAt,t).pos:null}function xM(e,t,r,n){let o=jl(e);if(!o||o.pos.integrity!==t||o.pos.file!==r)return null;let i=Ne(e),s=ia(t,n,{kick:!1,reportId:i?._managedReportId});return s&&!s.loading?{integrity:t,file:n,range:null}:null}function $M(e){let t=e&&Ne(e),r=Bu(t);if(r?.reportId&&!r.integrity)return yM(r.reportId,r.file,!0);let n=jl(e);if(!n)return null;let{pos:o}=n,i=ia(o.integrity,o.file,{reportId:t?._managedReportId});return!i||i.loading?i:{...i,file:o.file,integrity:o.integrity,range:o.range}}var Fu,F1,rz,bM,L1,Fm=$(()=>{"use strict";U();Kt();ct();Mo();Wr();I1();Tm();he();ra();qt();mr();Lm();Fu=new Map,F1=new Map,rz=new Set,bM=new WeakMap,L1=new Set});function Vl(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(vt({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||Bi(o);return dv({id:n,report:l.currentWorkspace?null:mf("report",o),workspace:mf("workspace",i??"")})}function Bi(e,t=l.currentReportWorkspace||l.currentWorkspace){let r=Dd(e);return r.some(n=>n.id===t)?t:r.length===1?r[0].id:null}function Oi(e){for(let t of[Er(),cE()])for(let r of t)for(let n of r)if(q(n)===e)return{group:r,finding:n};return null}function B1(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),_i(l.showRevalidation,l.upstreamOnly);let n=e.find(s=>q(s)===t);if(Xs(n)||lm(Kn())&&!z4(e)||!Gn(e).some(s=>q(s)===t))if(l.currentWorkspace){n?.isUpstream?l.upstreamOnly=!0:l.showRevalidation=!1,_i(l.showRevalidation,l.upstreamOnly);let s=Er().find(a=>a.some(c=>q(c)===t));if(s)return B1(s,t)}else l.revalidationDetailed=!0;if(Ai([e]).length===0){let s=l.sortBy;Fl(),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 Ni=$(()=>{"use strict";U();uo();pn();ct();he();yo()});function _M(e,t){return t!=null&&(e.authorId===t.id||e.authorId==null&&t.role==="admin")}function SM(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 O1=$(()=>{"use strict"});function Bm(e,t){Nu.has(e)||Nu.set(e,new Set);let r=Nu.get(e);return r.add(t),()=>{r.delete(t),r.size===0&&Nu.delete(e)}}function N1(e,t){l.managedComments.set(e,t);for(let r of Nu.get(e)??[])r()}function Yn(e){return C()?l.managedComments?.get(e?.id)??[]:[]}function Om(){return C()&&l.managedSession!=null&&kl(l.managedSession.role,"triage")}function Nm(e){return Om()&&_M(e,l.managedSession)}function Pu(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 Wl(e,{signal:t,readAnnotations:r}={}){let n=Pu(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 e3(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)&&N1(c,u);return!0}async function CM(e,t,r=null){let n=e?._managedReportId,o=Pu(n);if(!o()||!Om())return{status:403};if(r&&r.authorId!==l.managedSession.id)return{status:403};let i=await t3(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(SM),N1(e.id,a)}return i}async function EM(e,t){let r=e?._managedReportId,n=Pu(r);if(!n()||!Nm(t))return 403;let o=await r3(r,t.id,t.version,l.managedSession.csrfToken);if(!n())return 0;if(o===204){let i=l.managedComments.get(e.id)??[];N1(e.id,i.filter(s=>s.id!==t.id))}return o}var Nu,Gl=$(()=>{"use strict";U();Qd();O1();Kt();Nu=new Map});var MM,RM=$(()=>{Xr();cs();Np();MM=Rr(class extends Zt{constructor(){super(...arguments),this.key=m}render(e,t){return this.key=e,t}update(e,[t,r]){return t!==this.key&&(Ta(e),this.key=t),r}})});var AM=$(()=>{RM()});function P1(e,t){return e?MM(e,d`<span class="managed-comment-avatar" aria-hidden="true"><span>${(t?.[0]??"?").toUpperCase()}</span> ${zn()?m:d`<img alt="" src="${`/api/avatar/${encodeURIComponent(e)}`}" loading="lazy" @error="${r=>{r.currentTarget.hidden=!0}}">`}</span>`):m}function iz(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 Kl(e,t,r=m){let n=iz(e);return d`<div class="managed-comment"><div class="managed-comment-row">${e.authorId||e.authorLogin?d`<span class="managed-comment-author">${P1(e.authorId,e.authorLogin)} ${e.authorLogin?d`<strong>${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 Pm=$(()=>{"use strict";Ws();T();AM()});function Ao(e){return S4(e,{managed:C()}).map(t=>typeof t=="string"?t:t.self?d`<a class="comment-self-ref" href="${t.url}">${t.label}</a>`:d`<a href="${t.url}" target="_blank" rel="noopener noreferrer" data-tooltip="${t.url}">${t.label}</a>`)}var Dm=$(()=>{"use strict";T();U();he()});function ar(e){return e==="informational"?"info":e.replaceAll("_"," ")}function D1(e,{variant:t="full"}={}){let r=l.severityMode,n=ue(e,r),o=d`<span class="${`badge ${n}`}">${ar(n)}</span>`,i=yr(e),s=t==="tab"?null:Ka(e);if(!i&&!s)return o;let a=s?`Corrected severity varies across reports \u2014 ${Object.entries(s).map(([x,_])=>`${x||"(this report)"}: ${ar(_.severity)}`).join("; ")}`:null,c=s?d`<span class="badge-varies" data-tooltip="${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=Lr(e),f=e.correctedSeverityReason,h=(We[p]??0)>(We[u]??0),g=h?"up":"down",b=h?"\u25B2":"\u25BC",v=r!=="original",k=(v?`Corrected ${g} from ${ar(u)}`:`Original severity \u2014 corrected ${g} to ${ar(p)}`)+(f?` \u2014 ${f}`:""),w=`Severity ${ar(n)}; ${v?`corrected ${g} from ${ar(u)}`:`original, corrected to ${ar(p)}`}${f?`; reason: ${f}`:""}`;if(t==="tab")return d`<span class="badge-pair badge-pair-tab" data-tooltip="${k}" 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}`}" data-tooltip="${k}" 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":""}`}">${ar(y)}</span></span>${c}</span>`}function zu(e){IM.lastIndex=0;let t=[],r=0,n;for(;(n=IM.exec(e))!==null;){n.index>r&&t.push(e.slice(r,n.index));let o=n[0].codePointAt(0);if(o===91){let i=k4(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 sz({lang:e,code:t}){l.codeBlockTick;let r=i1(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 az(e,{wrap:t=!1}={}){let r=e.split(/\n{2,}/u).filter(n=>n.trim());return r.length<2?t?d`<div class="para">${zu(e)}</div>`:zu(e):r.map(n=>d`<div class="para">${zu(n)}</div>`)}function lz({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?v4(e):[e],n=r.length>1,o=s=>t?az(s,{wrap:n}):zu(s),i=s=>{let a=b4(s);return a.length===1&&typeof a[0]=="string"?o(a[0]):a.map(c=>typeof c=="string"?o(c):sz(c))};return r.length===1&&typeof r[0]=="string"?i(r[0]):r.map(s=>typeof s=="string"?i(s):lz(s))}function cz(e){let t=new Set;for(let r of e)t.add(it(r));return[...t]}function dz(e){let t=it(e);return qs[t]??t}function uz(e,t){l.linksTick,l.findingIndexTick;let r=q(e),n=Ht(r)?xr(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=gu(o),s=Bs(o),a=s.length===0?"":` \u2014 in ${s.map(c=>`${Ie(c)} (${dz(c)})`).join(", ")}`;return d`<a class="duplicate-ref" href="${C()?Vl({id:o},{teamOnly:!0}):`#${Rn({id:o})}`}" data-tooltip="${`${i}${a}`}">${cz(s).map(c=>V(Se[c]??Se.default))}<span class="duplicate-ref-id">${Zs(o)??i}</span></a>`})}</div>`}function pz(e){let t=xw(e);return t?d`<span class="${`revalidate-stamp ${t}`}">${t}</span><div class="value-label">Revalidation</div>`:m}function fz(e){let t=uu()?jt(e.revalidateVerdict,e):"";return t?d`<div class="revalidate-verdict">${lr(Il(t))}</div>`:m}function Du(e,t,r="section",{collapsible:n=!1}={}){let o=t?d`<div class="section-body">${lr(Il(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 hz(e,t,r){let n=e?.integrity&&t?.file?Ou(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 mz(e,t){let r=Array.isArray(e.evidence)?e.evidence:[];if(r.length===0)return m;let n=ir(e),o=Bu(e),i=t==="focus"&&o!==null,s=i?kM(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=wt(a),p=em(a,e,n,c),f=$s(a),h=FM(e,`ev${c}`,o,a?.file,a?.line),g=z1(p),b=i&&Im(s,{integrity:o.integrity,file:Ou(o,a?.file),range:Bt(a?.line)});return d`<li class="${z({current:b})}">${i?hz(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(Il(f))}</div>`:m} ${h?.body??m}</li>`})}</ol></details>`}function LM(e,t){let r=wt(e);return t?d`<a href="${t}" target="_blank" rel="noopener">${r}</a>`:r}function gz(e,t){if(!t)return m;let r=t.slice(0,7),n=tm(e,t);return n?d`<a href="${n}" target="_blank" rel="noopener" data-tooltip="${t}">${r}</a>`:d`<span data-tooltip="${t}">${r}</span>`}function z1(e){let t=h4(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`}">${wz}</a>`:m}function kz(e,t,r,n){return`${q(e)}\0${t}\0${r}\0${n?`${n.start}-${n.end}`:""}`}function zm(e,t){if(ql.key===e)return;let r=ql.host,n=e===null?null:t?.getRootNode?.()?.host??null;ql={key:e,host:n},r?.requestUpdate?.(),n!==r&&n?.requestUpdate?.()}function TM(e,t,r){l.codeBlockTick;let{text:n,lines:o,startLine:i}=y4(e,t);if(o.length===0)return m;let s=r.lastIndexOf("."),a=i1(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 FM(e,t,r,n,o){if(l.bundleHashTick,!r||!n)return null;let i=Ou(r,n);if(!i)return null;let s=Bt(o),a=kz(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=>{zm(a,h.currentTarget),ia(r.integrity,i,{reportId:r.reportId})}}" @mouseleave="${h=>{ql.key===a&&zm(null,h.currentTarget)}}" @focus="${h=>{zm(a,h.currentTarget),ia(r.integrity,i,{reportId:r.reportId})}}" @blur="${h=>{ql.key===a&&zm(null,h.currentTarget)}}">${yz}</button>`;if(c){let h=ia(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>`:TM(h.content,s,i);return{mark:u,tip:m,body:g}}if(ql.key!==a)return{mark:u,tip:m,body:m};let p=ia(r.integrity,i,{kick:!1,reportId:r.reportId}),f=p&&!p.loading?d`<div class="code-preview-tip" role="tooltip">${TM(p.content,s,i)}</div>`:m;return{mark:u,tip:f,body:m}}function _z(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)}">${Hm}${t?d`<span class="mark-btn-label">${r?"Flagged":"Flag"}</span>`:m}</button>`}function Sz(e){let t=Ge(e)||e.file||"Security finding";return t.length>120?`${t.slice(0,119)}\u2026`:t}function Cz(e){let t=Dr(e,ir(e)),r=wt(e),n=[];e.file&&n.push(`File: ${t?`[${r}](${t})`:r}`),e.description&&n.push(e.description);let o=mu(e);return o&&n.push(o),e.confidence!==void 0&&e.confidence!==null&&n.push(`Confidence: ${e.confidence}/10`),n.join(`
113
+
114
+ `)}function Ez(e){if(!l.currentWorkspace)return m;let t=e._reportName;if(!t)return m;if(C()&&!e._managedReportId)return m;let r=ot[it(t)]??ot.default,n=d`${V(r)}<span class="report-chip-label report-button-label">${Ie(t)}</span>`;if(C()){let o=Vl(e,{reportId:e._managedReportId});if(o)return d`<a class="report-chip report-button comment-self-ref" href="${Vs(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 BM(e,t,r,n,o=null){let i=o==="table"?m:Ez(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",k=d`<button type="button" ?disabled="${a}" class="${z({"mark-comment":!0,"has-comment":u})}" data-tooltip="${u&&!C()?f:m}" aria-label="${f}">${Um}${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="${p?h:m}" aria-label="${h}">${Uu}${g?d`<span class="mark-btn-label">${v}</span>`:m}</button>`,y=_z(n,g),x=d`<button type="button" class="mark-copy" aria-label="Copy finding details to clipboard">${bz}${g?d`<span class="mark-btn-label">Copy</span>`:m}</button>`,_=Vl(n)?d`<button type="button" class="mark-link" aria-label="Copy a link to this finding">${vz}${g?d`<span class="mark-btn-label">Link</span>`:m}</button>`:m,S=C()?xt({repo:{github:n.repo?.github||n._repoFallback}}):hm(n),M=_4(S,{title:Sz(n),body:Cz(n),labels:vE(n.isSecurity===!0,l.githubNewIssueLabels)}),A=C()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam,P=d`${$z}${g?d`<span class="mark-btn-label">Issue</span>`:m}`,L=M?A?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,R=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">${xz}${g?d`<span class="mark-btn-label">Claude</span>`:m}</button>`,W=d`<color-marker .selected="${c}" .disabled="${a}"></color-marker>`,ce=Bl(e)!==e,St=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">${k}${w}${y}</span><span class="mark-action-group">${x}${_}${L}${R}</span>${W}${Rz(e,St,o,r,n)}</div></div>`}function Mz(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 Rz(e,t,r,n,o){let i=de(e),s=!Ue(o)||Ii(e,n).length===0,a=s?null:Xw(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 k=`triage-menu-${i.replaceAll(/[^A-Za-z0-9_-]/gu,"_")}`;return d`<div class="triage-menu-wrap"><button type="button" class="${v.join(" ")}" popovertarget="${k}" popovertargetaction="toggle" 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="${k}" class="triage-menu" data-gid="${i}" role="menu" @beforetoggle="${Mz}">${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 Az(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" role="img" aria-label="Has a comment">${Um}</span>`:m}${r?d`<span class="has-fix" role="img" aria-label="Has a fix link">${Uu}</span>`:m}${n?d`<span class="flagged" role="img" aria-label="Flagged">${Hm}</span>`:m}</span>`}function OM(e,t,r){let{app:n,source:o}=iE(e),i=s=>Iz(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 Iz(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=iu(e),u=c?ot[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="${qs[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">${D1(e,{variant:"tab"})}</span><span class="tab-indicators">${Az(o)}</span></span>${f}</button>`}function Tz(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 Fz(e){if(oi(e))return m;let t=e?.name;if(typeof t!="string"||!Lz.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 Bz(e,t,r,n,o,i){let s=q(e),a=Ce(e),c=a?.comment??"",u=a?.fix??"",p=Dr(e,ir(e)),f=LM(e,p),h=po(e),g=Bu(e),b=FM(e,"loc",g,e.file,e.line),v=z1(p),k=d`<span class="line-num">${h?d`${f}, ${h}`:f}${b?.mark??m}${v}</span>`,w=Js(e),y=String(e.discoveredIn??"").trim(),x=y===String(e.file??"").trim()?"":y,_=o==="focus"?Fz(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),St=Os(e.fileHash).find(({integrity:be})=>ce.has(be));St&&(S=d`<button type="button" class="finding-code-btn" data-finding-code-bundle="${St.integrity}" data-finding-code-file="${St.file}" data-finding-code-line="${e.line??""}" data-tooltip="${`Open ${St.file} in bundle source viewer`}">Code</button>`)}let{title:M,body:A}=ti(e),P=Ya(A),L=P.findIndex(ce=>ce.label!==null),R=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} ${D1(e,{variant:"full"})}<div class="value-label">Severity</div>${e.confidence===void 0?m:Tz(e)} ${pz(e)} ${S}</div><div class="finding-body"><div class="line-row">${k} ${b?.tip??m} ${_} ${x?d`<span class="line-num discovered-in">(found analyzing ${x})</span>`:m} ${w?d`<span class="run-meta">${w}</span>`:m}</div>${b?.body??m} ${M?d`<div class="desc-title">${zu(M)}</div>`:m} ${R.map(ce=>d`<div class="desc">${lr(Il(ce.body))}</div>`)} ${mz(e,o)} ${W.map(ce=>ce.label===null?d`<div class="desc">${lr(Il(ce.body))}</div>`:Du(ce.label,ce.body))} ${e.impact?Du("Impact",jt(e.impact,e)):m} ${e.reproduction?Du("Reproduction",jt(e.reproduction,e),"section",{collapsible:!0}):m} ${e.recommendation?Du("Recommendation",jt(e.recommendation,e),"recommendation",{collapsible:!0}):m} ${e.confidenceReason?d`<div class="conf-reason">${lr(jt(e.confidenceReason,e))}</div>`:m} ${fz(e)} ${e.revalidateRecommendation&&uu()?Du("Revalidation recommendation",jt(e.revalidateRecommendation,e),"recommendation",{collapsible:!0}):m} ${yr(e)&&e.correctedSeverityReason?d`<div class="severity-reason"><span class="severity-reason-label">Severity correction:</span> ${lr(e.correctedSeverityReason)}</div>`:m} ${uz(e,i)} ${C()?Yn(e).map(ce=>d`<div class="comment-block">${Kl(ce,Ao(ce.body))}</div>`):c?d`<div class="comment-block"><span class="comment-label">Comment:</span> ${Ao(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 NM(e){let t=["finding",...U1(e)];return Gn(e).length>1&&t.push("multi-case"),t}function PM(e,t={}){let{context:r=null}=t,n=Ke(e),o=Gn(e),i=new Set(o.map(q)),s=Ne(e),a=q(s),c=s.commitHash?d`<div class="commit-ref">introduced in ${gz(s.repo?.github,s.commitHash)}</div>`:m,u=l.currentWorkspace&&c!==m;return d`${o.map((p,f)=>Bz(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?OM(o,a,n):m}</div>${BM(e,o,n,s,r)}</div>`}function U1(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 DM(e){let t=Ke(e),r=Gn(e),n=Ne(e),o=q(n),i=n,s=Ge(i),a=Js(i),c=po(i),u=c?`, ${c}`:"",p=Dr(i,ir(i));return d`<div class="row-score">${D1(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">${LM(i,p)}${u}</span> ${z1(p)}<div class="marks">${BM(e,r,t,n,"table")}</div></div>${r.length>1?d`<div class="tabs-row">${OM(r,o,t)}</div>`:m}</div>`}var IM,Um,Uu,bz,vz,yz,wz,ql,xz,$z,Hm,Lz,sa=$(()=>{"use strict";T();He();so();Je();U();Ws();ge();yE();he();ct();$E();Fm();Tm();un();ht();Ni();Gl();Pm();Dm();Dm();IM=/\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+\*\*|"[^"\n]+"|`[^`\n]+`/gu;Um=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>`,Uu=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>`,bz=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>`,vz=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>`,yz=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>`,wz=V(Vn);ql={key:null,host:null};xz=d`<svg viewBox="4 5 8 8" width="11" height="11" fill="currentColor" aria-hidden="true"><path d="${Nh}"/></svg>`,$z=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>`,Hm=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>`;Lz=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function Hu(e){return"tree-"+e.replaceAll(/[^\w-]+/gu,"_")}function H1(e,t){let r=new Map;for(let n of e)for(let o of n){r.has(o.file)||r.set(o.file,UM());let i=r.get(o.file),s=ue(o,t);i[s]!==void 0&&i[s]++}return r}function j1(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 jm(e,t){let r=Object.keys(e),n=new Map(r.map((c,u)=>[c,u])),o=r.map(()=>UM()),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=Ae.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[k,w]of f)o[v][k]+=w;for(let k of i[v])b(k)}}return new Map(r.map((c,u)=>[c,o[u]]))}function V1(e,t,r){let n=t.get(e),o=r.get(e);return zM(n)>0||zM(o)>0}function zM(e){if(!e)return 0;let t=0;for(let r of Ae)t+=e[r]??0;return t}var UM,ju=$(()=>{"use strict";he();UM=()=>Object.fromEntries(Ae.map(e=>[e,0]))});function HM(e){if(!e)return m;let t=Os(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 jM(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="${`#${Hu(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=Ae.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?Ae.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,k=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" data-tooltip-truncated data-tooltip="${g}">${g}</span> ${a(g)??d`<span class="tree-table-clean-marker">—</span>`} ${k?d`<span class="tree-table-size">${k}</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">${Oz(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="${Hu(p)}"><div class="tree-file-header"><span class="name">${p}</span> ${a(p)} ${g?d`<span class="tree-file-size">${g}</span>`:m} ${HM(f.fileHash)}</div>${VM(f,h,s)}</section>`})}</div>`}function VM(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 Oz(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} ${HM(e.fileHash)}</div>${VM(e,r,n)}`}var WM=$(()=>{"use strict";T();U();he();ju()});function Yl(){return GM}function Nz(){return Vu||(Vu=(async()=>{let e="./graph.js";try{let t=await import(e);return t._swapGraph2Impl($3()),GM=t,t}catch(t){throw Vu=null,t}})(),Vu)}async function W1(e,t,r,n,o){try{let i=await Nz(),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 Vu,GM,G1=$(()=>{"use strict";T();yo();Vu=null,GM=null});function KM(){Pi=null}function Pz(){return Wu||(Wu=(async()=>{let e="./terminal.js";try{return await import(e)}catch(t){throw Wu=null,t}})(),Wu)}function Dz(e){let t=hn(e);if(t.size===0)return t;let r=[...t.keys()],{stripped:n}=_r(r),o=new Map;for(let i=0;i<r.length;i++)o.set(n[i],t.get(r[i]));return o}async function qM(e,t){let r=t?.integrity??"";(!Pi||Pi.integrity!==r||(t?.managedId||Pi.managedId)&&Pi.details!==t)&&(Pi={integrity:r,managedId:t?.managedId,details:t?.managedId?t:null,promise:zz(t,r)});try{let n=await Pi.promise;return!e.isConnected||e.contains(n)||e.replaceChildren(n),n}catch(n){Pi=null;let o=n instanceof Error?n.message:String(n);return e.textContent=`Terminal failed to load: ${o}`,null}}async function zz(e,t){return(await Pz()).createTerminalElement(Dz(e),t)}var Wu,Pi,K1=$(()=>{"use strict";Wr();he();Wu=null,Pi=null});function YM(e){if(!e)return null;let t=u4(),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 jz(){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=jz(),r=t?Hz:Uz,n=e??"__own__",o=`${t?"l":"d"}:${n}`;if(q1.has(o))return q1.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 q1.set(o,c),c}var Uz,Hz,q1,aa=$(()=>{"use strict";he();Uz=["#4e9af1","#f28e2b","#59a14f","#e15759","#76b7b2","#edc948","#b07aa1","#ff9da7","#9c755f","#5cd1e5","#f1ce63","#d37295","#a0cbe8","#86bcb6","#8cd17d","#b6992d","#499894","#e15759","#e879c7","#d4a6c8"],Hz=["#2f8aef","#d2691e","#2ea043","#e63946","#2e9a92","#b88817","#9560e8","#d24a9c","#8a5d40","#0891b2","#a07a14","#c14e8e","#1f7ad0","#549b94","#3fb95f","#a07a14","#2a8278","#cb2c40","#c026d3","#965f93"];q1=new Map});var Y1,XM=$(()=>{Y1=(e,t,r)=>{for(let n of t)if(n[0]===e)return(0,n[1])();return r?.()}});var JM=$(()=>{XM()});var ke,ZM=$(()=>{Xr();cs();Np();ke=Rr(class extends Zt{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(!HS(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===tt||t===m)return t;let r=e.element,n=e.name;if(e.type===Nt.PROPERTY){if(t===r[n])return tt}else if(e.type===Nt.BOOLEAN_ATTRIBUTE){if(!!t===r.hasAttribute(n))return tt}else if(e.type===Nt.ATTRIBUTE&&r.getAttribute(n)===t+"")return tt;return Ta(e),t}})});var dr=$(()=>{ZM()});function Kz(e,t){let r=Mr(e,t);return["javascript","jsx"].includes(r)?"js":["typescript","tsx"].includes(r)?"ts":["solidity","rust","php","python","json"].includes(r)?r:"generic"}function X1(e,t){let r=Kz(e,t),n=r==="js"||r==="ts"?Et`<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"?Et`<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"?Wz:r==="php"?Gz:r==="python"?Vz:r==="json"?Et`<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"/>`:Et`<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 Vz,Wz,Gz,die,QM,eR,tR,rR,nR=$(()=>{"use strict";T();vm();Vz=Et`<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"/>`,Wz=Et`<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>`;Gz=Et`<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>`;die=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>`,QM=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>`,eR=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>`,tR=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>`,rR=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 et(e){let t=oR(e,64);return t===e?J1(e):`${J1(t)}...`}var qz,oR,Z1,J1,Vm,Xl=$(()=>{qz=/[\p{Cc}\p{Zl}\p{Zp}\p{Bidi_Control}]/gu,oR=(e,t)=>e.length>t?e.slice(0,e.codePointAt(t-1)>65535?t-1:t):e,Z1=e=>`U+${e.codePointAt(0).toString(16).toUpperCase().padStart(4,"0")}`,J1=e=>JSON.stringify(e).replaceAll(qz,t=>`\\u${t.codePointAt(0).toString(16).padStart(4,"0")}`);Vm=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,Jl=$(()=>{Xl();Xl();mn=class extends Vm{}});var sR=$(()=>{Xl()});function Di(e,t){t.lastIndex=e.pos;let r=t.exec(e.text);return r!==null&&(e.pos=t.lastIndex),r}var xie,aR=$(()=>{sR();Xl();xie=2**20});function Q1(e){let t=Yz.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:Zz[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 lR(e,t){if(!/^(?:\d{4}-\d\d-\d\d|\d\d:\d\d)/u.test(e))return;let r=Q1(e);if(r?.unsupported.length===0)return new Wm(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(!Xz.test(e),t,()=>`local dates and times are not supported: ${et(e)}`),ve(!Jz.test(e),t,()=>`a date-time or a time without seconds is not supported: ${et(e)}`),ve(r?.unsupported.length!==1,t,()=>`${r.unsupported[0]}: ${et(e)}`),new mn(`${et(e)} is not a date-time of the form YYYY-MM-DDTHH:MM:SS[.fraction](Z|\xB1HH:MM)`,t.line)}var Yz,Xz,Jz,Zz,Wm,ek=$(()=>{Jl();Yz=/^(\d{4})-(\d\d)-(\d\d)([Tt])(\d\d):(\d\d):(\d\d)(\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/u,Xz=/^(?:\d{4}-\d\d-\d\d(?:[Tt]\d\d:\d\d:\d\d(?:\.\d+)?)?|\d\d:\d\d:\d\d(?:\.\d+)?)$/u,Jz=/^(?:\d{4}-\d\d-\d\d[Tt])?\d\d:\d\d(?:[Zz]|[+-]\d\d:\d\d)?$/u,Zz=[31,28,31,30,31,30,31,31,30,31,30,31];Wm=class{constructor(t){if(typeof t!="string"||Q1(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}=Q1(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 pR(e,t){let r=Qz.test(e);if(!r&&!eU.test(e))return;let n=e.replaceAll("_",""),o=r?n.replace(/^[+-]/u,""):n.slice(2).replace(/^0+/u,""),s=o.length<=(r?19:rU[n[1]])?BigInt(r?n:`${n.slice(0,2)}${o||"0"}`):void 0;return ve(s!==void 0&&s>=-cR&&s<cR,t,()=>`integer out of range ${et(e)}`),s>=-dR&&s<=dR?Number(s):s}function fR(e){if(typeof e!="string"||!tU.test(e))return;if(e in uR)return uR[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 hR(e,t){let r=fR(e);if(r!==void 0)return ve(r!==null,t,()=>`float out of range ${et(e)}`),new Gm(e)}var Qz,eU,tU,cR,dR,rU,uR,Gm,tk=$(()=>{Jl();Qz=/^[+-]?(?:0|[1-9](?:_?\d)*)$/u,eU=/^0(?:x[\dA-Fa-f](?:_?[\dA-Fa-f])*|o[0-7](?:_?[0-7])*|b[01](?:_?[01])*)$/u,tU=/^[+-]?(?:inf|nan|(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*(?:[Ee][+-]?\d(?:_?\d)*)?|[Ee][+-]?\d(?:_?\d)*))$/u,cR=2n**63n,dR=BigInt(Number.MAX_SAFE_INTEGER),rU={__proto__:null,x:16,o:21,b:63};uR={__proto__:null,inf:1/0,"+inf":1/0,"-inf":-1/0,nan:Number.NaN,"+nan":Number.NaN,"-nan":Number.NaN};Gm=class{constructor(t){let r=fR(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 zi(e){for(;e.text[e.pos]===" "||e.text[e.pos]===" ";)e.pos++}function la(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":et(t)}function yR(e,t,r){throw new mn(t==="\r"?vR:`${Z1(t)} is not allowed in ${r}`,e.line)}function wR(e){e.text[e.pos]==="#"&&(Di(e,nU),qm(e)||yR(e,e.text[e.pos],"a comment"))}function Km(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 rk(e){do zi(e),wR(e);while(Km(e))}function kR(e){let t=e.text[e.pos];if(t in mR)return mR[e.text[e.pos++]];let r=Di(e,iU);ve(r!==null,e,()=>`unsupported escape ${et(`\\${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 aU(e){let t=Di(e,sU);return t===null?kR(e):(e.line+=t[0].split(`
117
+ `).length-1,"")}function $R(e,t){let r=xR(e,t),n=lU[r?t.repeat(3):t];e.pos+=r?3:1,r&&Km(e);let o="";for(;;){if(o+=Di(e,oU[t])[0],r&&Km(e)){o+=`
118
+ `;continue}ve(!qm(e),e,"unterminated string");let i=Di(e,n);if(i!==null)return o+i[0].slice(3);let s=e.text[e.pos++];s===t?o+=s:s==="\\"?o+=r?aU(e):kR(e):yR(e,s,"a string")}}function gR(e){let t=e.text[e.pos];if(t==='"'||t==="'")return ve(!xR(e,t),e,"a multi-line string cannot be a key"),$R(e,t);let r=Di(e,cU);return ve(r!==null,e,()=>`expected a key, found ${la(e)}`),r[0]}function _R(e){let t=[gR(e)];for(;;){if(zi(e),e.text[e.pos]!==".")return t;e.pos++,zi(e),t.push(gR(e)),ve(t.length<=bR,e,"a key with too many parts")}}function uU(e){let t=Di(e,dU);ve(t!==null,e,()=>`expected a value, found ${la(e)}`);let r=t[0];if(r==="true")return!0;if(r==="false")return!1;let n=pR(r,e)??hR(r,e)??lR(r,e);return ve(n!==void 0,e,()=>`expected a value, found ${et(r)}`),n}function pU(e,t,r,n){ve(t[r]===void 0,e,()=>`duplicate key ${et(r)}`),t[r]=n}function SR(e,t){let r=_R(e);return ve(e.text[e.pos]==="=",e,()=>`expected "=" after the key, found ${la(e)}`),e.pos++,zi(e),{header:!1,keys:r,value:CR(e,t)}}function fU(e,t){e.pos++;let r=[];for(rk(e);e.text[e.pos]!=="]"&&(r.push(CR(e,t+1)),rk(e),e.text[e.pos]!=="]");rk(e))ve(e.text[e.pos]===",",e,()=>`expected "," or "]", found ${la(e)}`),e.pos++;return e.pos++,r}function ok(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}pU(e,s,n.at(-1),o)}function nk(e){zi(e),ve(!qm(e)&&e.text[e.pos]!=="#",e,"an inline table across lines is not supported")}function bU(e,t){e.pos++;let r=Object.create(null);hU.add(r);let n=new Set;if(nk(e),e.text[e.pos]==="}")e.pos++;else do{nk(e),ve(e.text[e.pos]!=="}",e,"a trailing comma in an inline table is not supported");let{keys:o,value:i}=SR(e,t+1);ok(e,r,n,o,i,gU),nk(e);let s=e.text[e.pos];ve(s===","||s==="}",e,()=>`expected "," or "}" on the inline table's line, found ${la(e)}`)}while(e.text[e.pos++]===",");return r}function CR(e,t){ve(t<=bR,e,"nested too deep");let r=e.text[e.pos];return r==='"'||r==="'"?$R(e,r):r==="["?fU(e,t):r==="{"?bU(e,t):uU(e)}function vU(e){let t=e.text.startsWith("[[",e.pos);e.pos+=t?2:1,zi(e);let r=_R(e),n=t?"]]":"]";return ve(e.text.startsWith(n,e.pos),e,()=>`expected "${n}", found ${la(e)}`),e.pos+=n.length,{header:!0,keys:r,array:t}}function ER(e){zi(e);let t=e.text[e.pos];if(t==="[")return vU(e);if(!(t==="#"||t==="\r"||qm(e)))return SR(e,0)}function MR(e){if(zi(e),wR(e),!(Km(e)||e.pos===e.text.length))throw ve(e.text[e.pos]!=="\r",e,vR),new mn(`expected the end of the line, found ${la(e)}`,e.line)}var bR,vR,qm,nU,mR,oU,iU,sU,xR,lU,cU,dU,Zl,hU,mU,gU,ik=$(()=>{Xl();aR();ek();Jl();tk();bR=64;vR="a carriage return must be followed by a line feed";qm=e=>e.pos>=e.text.length||e.text[e.pos]===`
119
+ `||e.text.startsWith(`\r
120
+ `,e.pos),nU=/#[^[\p{Cc}--[\t\u0080-\u009F]]]*/vy;mR={__proto__:null,b:"\b",t:" ",n:`
121
+ `,f:"\f",r:"\r",'"':'"',"\\":"\\"},oU={__proto__:null,'"':/[^"\\[\p{Cc}--[\t\u0080-\u009F]]]*/vy,"'":/[^'[\p{Cc}--[\t\u0080-\u009F]]]*/vy},iU=/u([\dA-Fa-f]{4})|U([\dA-Fa-f]{8})/uy;sU=/[\t ]*\r?\n(?:[\t ]|\r?\n)*/uy;xR=(e,t)=>e.text[e.pos+1]===t&&e.text[e.pos+2]===t,lU={__proto__:null,'"':/"/uy,"'":/'/uy,'"""':/"{3,5}/uy,"'''":/'{3,5}/uy};cU=/[\w-]+/uy;dU=/[\w+.:-]+/uy;Zl=e=>typeof e=="object"&&e!==null&&Object.getPrototypeOf(e)===null,hU=new WeakSet;mU=e=>Array.isArray(e)?"an array":Zl(e)?"an inline table":"a value",gU=(e,t)=>`${et(e)} is ${mU(t)}, which a dotted key cannot add to`});function Ym(e,t){return e.arrays.has(t)?"an array of tables":Array.isArray(t)?"an array":Zl(t)?e.fixed.has(t)?"an inline table":"a table":"a value"}function yU(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(Zl(i)&&!e.fixed.has(i),t,()=>`${et(o)} is ${Ym(e,i)}, which a header cannot add to`),n=i}return n}function wU(e,t,r,n){e.pending.clear();let o=yU(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,()=>`${RR(r)} is ${Ym(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,()=>`${RR(r)} is ${Ym(e,o[i])} already`):o[i]=Object.create(null),e.current=o[i]}function kU(e,t,r){return!Zl(r)||e.fixed.has(r)?`${et(t)} is ${Ym(e,r)}, which a dotted key cannot add to`:e.implicit.has(r)?`a dotted key through ${et(t)}, a table a header made on its way, is not supported`:`${et(t)} is a table declared elsewhere, which a dotted key cannot add to`}function xU(e,t,r,n){ok(t,e.current,e.pending,r,n,(o,i)=>kU(e,o,i)),Zl(n)&&e.fixed.add(n)}function _U(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($U[t[0]]??"a lone surrogate is not well-formed Unicode",r)}function sk(e){_U(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=ER(r);o?.header===!0?wU(n,r,o.keys,o.array):o!==void 0&&xU(n,r,o.keys,o.value),MR(r)}return t}var RR,$U,AR=$(()=>{Jl();ik();RR=e=>et(e.join("."));$U={__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 IR=$(()=>{AR();ik();ek();tk();Jl()});function ak(e,t){let r=e?.[t];if(typeof r!="string")return null;try{return t.endsWith(".toml")?sk(r):JSON.parse(r)}catch{return null}}function TR(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:xt({repo:{github:n}})}function LR(e,t,r){let n=t?.ecosystem??e.ecosystem??"npm",o=n==="composer"?ak(t?.files,"composer.json"):n==="cargo"?ak(t?.files,"Cargo.toml")?.package:ak(t?.files,"package.json"),i=t?.name??e.name,s=t?.version??e.version??o?.version,a=TR(o?.repository,n==="npm"||n==="soldeer")??[o?.support?.source,o?.source?.url,o?.homepage,o?.bugs].map(c=>TR(c)).find(Boolean)??null;return{ecosystem:n,name:i,version:typeof s=="string"?s:void 0,github:a,fileCount:r}}var FR=$(()=>{"use strict";IR();ge()});function BR(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 OR(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])}PR(n,r,r?new Set(t):null);let o=i=>{i.package&&(i.packageInfo=LR(i.package,r?.get(i.sourcePath),i.fileCount));for(let s of i.dirs.values())o(s)};return o(n),n}function NR(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=BR(s,a,i);if(!Xm.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 PR(e,t,r){for(let i of e.dirs.values())PR(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=BR(e.sourcePath,n,r);if(Xm.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 Xm.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=Gu(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 Gu(e,t){let r=t.package;return r?`${r.name}${r.version?`${Xm.has(r.ecosystem)?" - ":"@"}${r.version}`:""}`:e}function DR(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}/${Gu(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 zR(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 UR(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 Xm,HR=$(()=>{"use strict";FR();Xm=new Set(["cargo","composer","soldeer"])});var jR=$(()=>{"use strict";I1()});function Ql(e,t,r){return e?.bundle===t&&e.files[e.at]===r?e:{bundle:t,files:r?[r]:[],at:0}}function VR(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 WR(e,t){return{...e,at:Math.max(0,Math.min(e.at+t,e.files.length-1))}}var lk=$(()=>{"use strict"});function GR({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:SU(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 SU(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 ck,KR=$(()=>{"use strict";T();pe();ko();ck=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",ck)});function dk(e,t){let r=e.trimStart().startsWith("[")?Ar(e):null;if(r)return{data:{source:"links",findings:[],links:r.groups},format:"links",reason:null};let n=sn(e);if(n.data!=null||Ff(e,t)!=="codex")return n;try{return{data:{type:"security",source:"codex-security",findings:fd(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 qR(e,t){let r=dk(e,t);return r.data==null?Promise.resolve(null):tr(JSON.stringify(r.data))}var uk=$(()=>{"use strict";gs();ge()});async function YR(e){let t=await fh(e),r=await I0(t);if(r.kind==="reports")return{kind:"reports",reports:r.reports};let n;if(r.kind==="encrypted"){if(n=await Wh({tryPassword:i=>hh(t,i)}),!n)return null}else n=gl(r.text);let o=await R0(n,{conflictResolver:async(i,s)=>{try{return await Tl(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 XR=$(()=>{"use strict";U();qt();vu();gw()});function Jm(){return le("passkey-setup-dialog")}var pk,fk=$(()=>{"use strict";T();U();pe();Ys();pk=class extends D{static styles=[...D.styles,F(Pr)];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=jc(),this._vaultStateUnsub=rt(()=>{if(this._settled)return;let t=jc();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 Wc({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 Vb({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 qb({seal:r}),this._phase="Encrypting triage data\u2026",await l0({seal:r}),this._phase="Encrypting report files\u2026",await oy({seal:r}),this._phase="Encrypting bundles\u2026",await sy({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",pk)});function CU(){try{return localStorage.getItem(ZR)==="1"}catch{return!1}}function JR(){try{localStorage.setItem(ZR,"1")}catch{}}async function Zm(){if(me()||!_n()||CU())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.`)){JR();return}await Jm(),me()&&JR()}var ZR,hk=$(()=>{"use strict";U();fk();ZR="deepview.passkey.firstImportPrompted"});function Qm(){return le("passkey-unlock-dialog")}var mk,gk=$(()=>{"use strict";T();U();pe();Ys();mk=class extends D{static styles=[...D.styles,F(Pr)];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 hs({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",mk)});function eg({workspaceId:e,items:t}={}){return le("sync-download-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var bk,vk=$(()=>{"use strict";T();U();dn();Ui();pe();ko();wo();bk=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:Ei(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 L6(this.workspaceId,n.identifier);if(!i.ok){this._fail(r,n,"bundle",i.reason??"unknown");continue}await Ps(n.identifier,this.workspaceId),t.push({kind:"bundle",identifier:n.identifier});continue}let o=await T6(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 Gr(this.workspaceId)}catch{}r.length===0&&this._finish({downloaded:t,failed:r})};render(){let{count:t,singular:r,kindLabel:n}=nm(this.items),o=r?d`Download <strong>"${Ei(this.items[0])}"</strong> from the workspace's remote inventory?`:d`Download <strong>${t}</strong> remote ${n} into this workspace?`,i=r?m:om(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} ${im(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",bk)});function eA(e){QR=e}function ca(){Io?.controller.abort(),Io=null}function EU(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 tA(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 Hi({catalogOnly:e=!1,hydrate:t}={}){let r=l.managedSession,n=Ks(),i=["findings","files","links"].includes(l.currentView)&&(!e||Io?.teamId===l.currentManagedTeam&&!Io.signal.aborted)?l.currentManagedTeam:null;if(!C()||!r||r.role==="none"||r.publicShare&&!i)return ca(),t?Promise.resolve(!1):void 0;let s=JSON.stringify([i,r.id,r.role,r.csrfToken,!!r.publicShare]);if(Io?.key!==s||Io.signal.aborted){ca();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&&Io===b&&C()&&l.managedSession?.id===r.id&&l.managedSession?.role===r.role&&l.managedSession?.csrfToken===r.csrfToken&&!!l.managedSession?.publicShare==!!r.publicShare,Io=b,MU(b)}let a=Io;if(e||!i)return a.target?.ready;let c=ds(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&&ds(l.reports)===c,h.hydration=t?EU(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&&yk(a,h,a.signal).then(g=>(!g&&h.current()&&(ca(),Hi()),g))),h.ready}function MU(e){let{signal:t,controller:r,current:n}=e;a3(e.teamId,{signal:t,onTeams:async(o,i)=>{let s=()=>n(o);return s()?await QR(s,o,i)&&s():!1},onUpdate:o=>n(o)?(e.version++,yk(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 yk(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=RU(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 tA(n.promise,o)}finally{r.removeEventListener("abort",i)}return e.current(r)?t.current()?s?t.version<e.version?yk(e,t,r):!0:!1:!0:!1}async function RU(e,t,r){if(t.hydration&&!await tA(t.hydration.start(),r))return!1;for(;t.current()&&!r.aborted&&t.version<e.version;){let n=e.version,o=xk(e.teamId,r),i=l.managedReports.filter(a=>t.reports.some(c=>c._managedReportId===a.id));if(!(await Promise.all(i.flatMap(a=>[kk(a.id,{signal:r,readAnnotations:o}),Wl(a.id,{signal:r,readAnnotations:o})]))).every(Boolean)||!t.current()||r.aborted)return!1;t.version=n}return!r.aborted&&t.current()}var Io,QR,wk=$(()=>{"use strict";U();Pc();Kt();Gl();tg();Sl();Io=null,QR=()=>Promise.resolve(!0)});function $k(e){if(e.linkedTabs)return e.linkedTabs;let t=e.filter(r=>$e(r)==="revalidation");return t.length>0?t:e}function _k(e,t=()=>[]){let{groups:r,conflicts:n}=dm(e,{hideRuledOut:!0});if(n.size>0)return{appMode:!1};let o=fm(r,t,$k);return Fw(o,{tabs:$k,kindOf:$e,severityMode:"corrected"})?{appMode:!0,appFindings:o.filter(i=>$k(i).some(s=>s.isApp)).length}:{appMode:!1}}var rA=$(()=>{"use strict";ge();pn();jw();Ww()});function nA(e,t,r,{complete:n,isCurrent:o}){Kr={id:e.id,membership:JSON.stringify(e.reports.toSorted()),reports:t,token:r,complete:n,isCurrent:o}}function oA(e){return!Kr||Kr.id!==e.id||!Kr.isCurrent()||Kr.membership!==JSON.stringify(e.reports.toSorted())||!j0(e,Kr.token)?null:(Kr.linksRevision!==Sk&&(Kr.metadata=Kr.complete?_k(Kr.reports,xr):{appMode:!1},Kr.linksRevision=Sk),Kr.metadata)}async function iA(e,t,r,{complete:n,isCurrent:o,onReady:i}){if(!o()||(await jd(),!o()))return;let s=await qd(e,r);if(!s||!o())return;let a=n?_k(t,xr):{appMode:!1};await W0(e,a,s)&&o()&&await i(a)}var Kr,Sk,Ck=$(()=>{"use strict";U();rA();Kr=null,Sk=0;Ds(()=>{Sk++})});function To(e,t="overview"){if(C()){let n=l.bundles.find(o=>o.integrity===e);Be.replaceRoute(_l(l.managedTeams,n,l.currentManagedTeam,t));return}let r=t&&t!=="overview"&&Mn.has(t)?` ${t}`:"";lt(ji,`b:${e}${r}`).catch(()=>{})}function AU(){return new Promise(e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,0)})}async function Ku(e){return await AU(),e!==null&&ye(e)?!1:(E(),M1(l.reports.flatMap(t=>t.bundleHashes??[]),()=>e===null||!ye(e)).catch(()=>{}),!0)}function ng(){B.selected=null,B.focusedPkg=null,B.layoutCache=null,B.solo=null,B.hidden.clear(),B.pathFilter="",Ze()}function Yu(e){for(let t of te.openSessions)t&&!e.has(t.workspaceId)&&(te.closeSession(t.workspaceId),X0(t.workspaceId))}function rg(){N.classList.remove("active"),N.replaceChildren(),Ye.classList.remove("hidden"),document.title="DeepView"}function sA(e){return e instanceof DOMException&&e.name==="NotFoundError"||typeof e?.message=="string"&&e.message.startsWith("File not found:")}function Mk(e){let t=aA(e.toLowerCase());return t.endsWith(".map")?"sourcemap":t==="stasis.code.br"||t.endsWith(".stasis.code.br")?"stasis":null}function aA(e){return e.replace(/ \(\d+\)(?=\.[^.]*$)/u,"")}async function Ek({name:e,content:t,existingNames:r}){if(!r.has(e))return await Br(e,t),r.add(e),{name:e,content:t};let n;try{n=await De(e)}catch(c){if(!sA(c))throw c;return await Br(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=>yl(c.id,e)),s=await GR({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 Br(c,t),r.add(c),{name:c,content:t}}let a;if(i.length>0)try{a=await F6(e)}catch(c){console.warn(`Import: couldn't announce the replace of "${e}" to sync:`,c)}try{await Br(e,t),i.length>0&&await TU(e,i)}finally{typeof a=="function"&&a()}return{name:e,content:t}}async function IU(e,t){let r=typeof t?.github=="string"?t.github:"";if(r)try{await sv(e,r)}catch(n){console.warn(`Import: failed to adopt the repository "${r}" for "${e}":`,n)}}async function TU(e,t){let r;try{r=await li(e)}catch(n){console.warn(`Import: failed to read freshly-saved "${e}" for cloud sync:`,n);return}for(let n of t)try{await Jd(n.id);let o=await xh(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 Rk(e){if(e=[...e],e.length===0||(await mt(),C())||(await Zm(),C()))return;let t=null,r=null,n=new Set,o=new Set(await fe()),i=[];for(let s of e)try{let a=aA(s.name.toLowerCase());if(a.endsWith(".gz")||a.endsWith(".deepview-workspace.enc")){let p=await YR(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 Ek({name:f.name,content:f.content,existingNames:o});g&&(Wt(g.name,h.count,h.source),await IU(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(Mk(s.name)){let p=new Uint8Array(await s.arrayBuffer()),{integrity:f}=await Is(s.name,p);r=f,n.add(f);continue}let u=await s.text();if(Ff(u,a)==="codex"){let p=fd(u);for(let{displayName:f,data:h}of p){let g=f.replaceAll("/","__")+".codex",b=JSON.stringify(h),{count:v,source:k}=Gt(b),w=await Ek({name:g,content:b,existingNames:o});w&&(Wt(w.name,v,k),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 Ek({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&&(Co(r),To(r,l.bundleDetailsTab),E(),await Y(),Eo(r)),M1(n).catch(()=>{})}async function ur(e,t,{workspaceId:r}={}){if(C())return;let n=Ft();l.currentManagedTeam=null,l.currentManagedReport=null,l.currentReportWorkspace=Bi(e,r);let o=new Set(Q().filter(s=>Array.isArray(s.reports)&&s.reports.includes(e)).map(s=>s.id));if(Yu(o),l.reports=[],Ti(),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,ng(),lt(ji,oh(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 Qm()&&!ye(n)){await ur(e);return}ye(n)||(l.currentFile=null,await Y());return}if(sA(s)){let a=Q().find(c=>Array.isArray(c.reports)&&c.reports.includes(e)&&yl(c.id,e));if(a)try{if(await Jd(a.id),ye(n))return;let c=await eg({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=Ar(t);if(i?(l.currentLinks={name:e,...i},l.currentView="links",E()):await ig(e,t,n),!ye(n)){for(let s of o)te.openSession(s),te.refreshSession(s),Jd(s);return await Y(),!0}}async function Lo(e,t=null,{history:r=!0}={}){if(!C()||!e||!Array.isArray(e.reports))return!1;if(r&&Be.active)return Be.navigate(vt({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 Rh(e.id);if(ye(n))return!1;if(W6(),o===null||t!==null&&!o.some(u=>u.id===t))return _t("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));Yu(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=[],Ti(),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,V5(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,ng();for(let u of a)if(await ig(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(()=>(tg(),pA));if(ye(n))return!1;let f=await Hi({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}),Wl(v.id,{signal:h,readAnnotations:g})]))).every(Boolean)&&!h.aborted&&!ye(n)}});if(ye(n))return!1;if(!f)return await Jn({history:!1}),_t("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 Ku(n))return!1}else if(s.length===0)rg();else if(ea(Kn()),!await Ku(n))return!1;return Hi(),await Y(),!0}async function Gr(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();Yu(new Set([e])),l.currentView!=="findings"&&l.currentView!=="files"&&(l.currentView="findings"),At("workspace",e),l.reports=[],Ti(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.currentFile=null,l.currentWorkspace=e,l.currentReportWorkspace=null,l.currentLinks=null,l.repoUrl="",l.repoEditing=!1,ng(),lt(ji,`ws:${e}`).catch(()=>{}),t.reports.length===0&&rg();let n=await qd(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(!Ar(h)&&(await ig(t.reports[f],h,r,{renderView:!1})?s++:o=!1,ye(r)))return}s===0&&t.reports.length>0&&rg(),o&&Us(t)?.appMode&&(l.showRevalidation=!0,l.upstreamOnly=!1,l.revalidationDetailed=!1,qu());let a=l.reports.slice();nA(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&&(ea(Kn()),!await Ku(r)))return;let u=["showRevalidation","upstreamOnly","revalidationDetailed","filterConfMin","filterConfMax","filterRevalidate","filterPartial","sortBy","severityMode"],p=u.map(f=>l[f]);iA(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,qu(),ea(Kn()),await Ku(r))}}).catch(f=>console.warn("workspace App metadata:",f)),te.openSession(e),te.refreshSession(e),Jd(e),await c}async function lA({triage:e="keep",deleteFromRemoteWorkspaceIds:t=[]}={}){if(!l.currentFile)return;let r=Ft(),n=l.currentFile;ll(n),tn(n,"");for(let o of t)try{let i=await $h(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 nl(n),!ye(r)&&(await Nd(n,null),!ye(r))){if(e==="wipe"){try{await ch()}catch(o){console.warn("Skipped orphan-triage GC:",o)}if(ye(r))return}ye(r)||(og(),await Y())}}function og({forgetLastView:e=!0}={}){KM(),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=[],Ti(),l.workspaceMerges=[],l.revalidateConflicts=new Map,l.repoUrl="",l.repoEditing=!1,l.shownTriage=null,l.currentView="findings",ng(),e&&Yo(ji),rg()}function cA(e){Ft(),Yu(new Set),og(e)}async function Jn({history:e=!0}={}){return e&&C()&&Be.active?Be.navigate({view:"home"}):(Ft(),Yu(new Set),og({forgetLastView:!C()}),await Y(),!0)}async function dA({deleteFromRemoteWorkspaceIds:e=[]}={}){if(!l.selectedBundle)return;let t=Ft(),r=l.selectedBundle;for(let o of e)try{let i=await _h(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 ty(r),ye(t)||(await Uy(r,null),ye(t)))return;l.selectedBundle=null,l.selectedBundleWorkspace=null,l.bundleDetails=null,l.bundleSourceFile=null,l.bundleSourceFindingIdx=null;let n=Fe(ji);typeof n=="string"&&(n===`b:${r}`||n.startsWith(`b:${r} `))&&Yo(ji),wy(r),l.bundles=await Vt(),!ye(t)&&(E(),await Y())}async function uA(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),X0(e),t==="delete"){for(let a of o){try{await nl(a)}catch{}ll(a),tn(a,"")}if(r==="wipe")try{await ch()}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)&&og(),await Oy(e),await Y()}async function ig(e,t,r=null,{renderView:n=!0,managedReportId:o=null,managedRepo:i=null}={}){let s=()=>r!==null&&ye(r);try{if(await Promise.all([At("report",e),At("workspace",l.currentWorkspace||l.currentReportWorkspace)]),s()||(await zs(),s()))return;let{data:a,reason:c}=o===null?C()?dk(t,e):sn(t):{data:structuredClone(t),reason:null};if(!a)throw new Error(c);let u=l.reports.length===0,p=ft(a)??[],f=p.flatMap(Gw);if(await zv(f),s())return;let h=new Set(f.filter(kw).map(y=>y.source??a.source??null)),g=i??a?.repo,b=xt({repo:g}),v=b??(o==null?Ut(e):""),k=Ln(g),w=[];for(let y of p){let x=Gw(y);if(x.length===0)continue;let _=[];for(let S of x){let M={...S,_id:l.nextFindingId++,_repoFallback:v,_repoDirectory:k,_reportName:e,_managedReportId:o,_bundleHashes:a.bundleHashes??[]};fo(M,a),M._source=M.source??a.source??null,"isApp"in M||(M.isApp=on(M,M._source)),M._sourcePass=h.has(M._source),M._analyzer=M._source??M.type??null,_.push(M)}w.push(_)}return ho(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??[]}),Jh(l.reports),Zh(l.reports)&&Ti(),l.revalidateConflicts=dE(),qu(),u&&(Fl(),ea(Kn())),n&&await Ku(r),!0}catch(a){alert(`Failed to parse ${e}: ${a.message}`)}}function LU(){C()||(Xn||(Xn=document.createElement("input"),Xn.type="file",Xn.multiple=!0,Xn.hidden=!0,Xn.addEventListener("change",()=>{let e=[...Xn.files];e.length>0&&Rk(e),Xn.value=""}),document.body.append(Xn)),Xn.click())}var ji,ye,Xn,Ui=$(()=>{"use strict";pf();Oh();md();uo();U();dn();KR();mr();ct();he();pn();Ni();uk();sh();qt();Zn();K1();yo();Mo();ge();XR();hk();gk();vk();Kt();$l();wl();Gl();wk();Ck();Sl();Sl();pf();ji="deepview.lastFile";ye=e=>e!==nt();window.__loadFile=(e,t)=>ig(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")&&Rk(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"),Rk(e.dataTransfer.files)});Xn=null;Ye.addEventListener("click",e=>{let t=e.target.closest("[data-managed-page]");if(t){da(t.dataset.managedPage);return}if(e.target.closest("[data-managed-login]")){o3(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&&Lo(o);return}let n=e.target.closest("[data-landing-workspace]");if(n){Gr(n.dataset.landingWorkspace);return}e.target.closest(".drop-prompt-action")&&LU()})});function fA(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=OU.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 ua(e){return FU.get(e)??fA(e.includes("/")?e.slice(e.indexOf("/")+1):e)}function Xu(e){let t=e.includes("/")?e.split("/")[0]:"other";return{key:t,name:BU.get(t)??(t==="other"?"Other":fA(t))}}function pa(e){return e==="xhigh"?"Extra high":e?e[0].toUpperCase()+e.slice(1):"Unavailable"}function ec(e){return e.efforts.includes("max")?"max":e.efforts.at(-1)??null}async function sg(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 Ak(n)}function Ak(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 FU,BU,OU,Vi=$(()=>{"use strict";FU=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"]]),BU=new Map([["openai","OpenAI"],["anthropic","Anthropic"],["moonshotai","Moonshot AI"],["google","Google"],["nvidia","NVIDIA"],["qwen","Qwen"],["deepseek","DeepSeek"],["x-ai","xAI"],["z-ai","Z.ai"]]),OU=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 Ik(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 hA=$(()=>{"use strict"});var mA=$(()=>{"use strict";hA()});function gA(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 bA=$(()=>{"use strict"});var ag,vA=$(()=>{"use strict";Vi();mA();bA();ag=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=Ik(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=gA(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?Ak(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 yA(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 wA=$(()=>{"use strict"});var kA,xA=$(()=>{T();kA=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 $A,_A=$(()=>{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="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 SA,CA=$(()=>{T();SA=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 EA,MA=$(()=>{T();EA=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 Tk,RA=$(()=>{T();Tk=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 AA,IA=$(()=>{T();AA=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 TA,LA=$(()=>{T();TA=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 FA,BA=$(()=>{T();FA=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 OA,NA=$(()=>{T();OA=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 PA,DA=$(()=>{T();PA=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 zA,UA=$(()=>{T();zA=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 Ju(e){return Object.hasOwn(HA,e)?HA[e]:NU}var HA,NU,Lk=$(()=>{"use strict";T();xA();_A();CA();MA();RA();IA();LA();BA();NA();DA();UA();HA={anthropic:kA,deepseek:$A,google:SA,moonshot:Tk,moonshotai:Tk,nvidia:AA,openai:TA,openrouter:FA,qwen:OA,xiaomi:PA,"x-ai":EA,"z-ai":zA},NU=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 Fk(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 Bk(e){return[...Map.groupBy(Fk(e),r=>Xu(r.id).key)].map(([r,n])=>({key:r,models:n}))}function jA(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 VA=$(()=>{"use strict";Vi()});var PU,Ok,Nk=$(()=>{"use strict";T();Vi();VA();Lk();PU=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>`,Ok=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=Le`: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=sg,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(ec(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 Fk(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=Bk(this._models),u=c.reduce((M,A)=>M+A.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 A=document.createRange();A.selectNodeContents(M),h=Math.max(h,A.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)))),k=Math.min(v*g+(v-1)*f+b,window.innerWidth-a*2),w=Math.max(a,Math.min(i.left,window.innerWidth-k-a));if(this._menuColumns=v,await this.updateComplete,t!==this._positionRequest||!this.isConnected||!r.open)return;o.style.left=`${w}px`,o.style.width=`${k}px`,o.style.setProperty("--model-columns",v),o.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let y=o.getBoundingClientRect().height,x=window.innerHeight-i.bottom-s-a,_=i.top-s-a,S=x<y&&_>x?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:ec(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=Xu(t.id),o=jA(Bk(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">${Ju(n.key)}</span><span class="selected-copy"><strong id="selected-model">${ua(r.id)}</strong><small>${n.name}</small></span>${r.pro?d`<span class="pro-space" aria-hidden="true"></span>`:m}${PU}</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">${Ju(t)}</span>${Xu(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>${ua(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">${pa(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="${pa(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 ${pa(o)}`}" aria-pressed="${o===this.effort}" @click="${()=>this._setEffort(o)}">${pa(o)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",Ok)});var Fo,lg=$(()=>{"use strict";T();dr();Fo=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=Le`: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(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0})),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" data-tooltip-truncated data-tooltip="${t?.label??m}">${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" aria-pressed="${r.activeFacet===s.value}" @click="${()=>this._filterFacet(s.value)}"><span class="name" data-tooltip-truncated data-tooltip="${s.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}optionTooltip(t){return t.label}_option(t,r,n){let o=t.displayLabel??(r?t.name:t.label),i=this.optionTooltip(t);return d`<button type="button" class="option" role="option" ?data-reset="${t.reset}" ?disabled="${t.disabled}" aria-label="${t.label}" 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" ?data-tooltip-truncated="${o===i}" data-tooltip="${i}">${o}</span>${t.secondary?d`<span class="secondary" data-tooltip-truncated data-tooltip="${t.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 DU(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 GA(e,t="",r=null,{includeSingletonOrganizations:n=!1}={}){let o=e.map(w=>({...w,...w.special?{owner:null,name:w.label}:DU(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])=>Pk(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:Dk,name:"Other",count:u});let p=a.some(w=>w.value===r)?r:null,f=WA(t.trim()).split(/\s+/u).filter(Boolean),h=w=>f.every(y=>WA(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===Dk?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 k=[...v].toSorted(([w],[y])=>w==null?1:y==null?-1:Pk(w,y)).map(([w,y])=>({label:w??(a.some(x=>x.value!==Dk)?"Other":null),organization:w!=null,options:y.toSorted((x,_)=>Pk(x.label,_.label))}));return{facets:a,activeFacet:p,pinned:g,sections:k,count:b.length+g.filter(w=>!w.reset).length,total:o.filter(w=>!w.reset).length,showFacets:a.length>1}}var WA,Pk,Dk,KA=$(()=>{"use strict";WA=e=>e.normalize("NFKC").toLocaleLowerCase(),Pk=(e,t)=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}),Dk=Symbol("other repositories")});var zk,cg=$(()=>{"use strict";lg();KA();zk=class extends Fo{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 GA(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",zk)});var Uk,Hk=$(()=>{"use strict";lg();Uk=class extends Fo{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",Uk)});function zU(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}=nu(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 jk,dg=$(()=>{"use strict";T();Je();lg();ht();Cl();jk=class extends Fo{static properties={bundles:{attribute:!1}};static styles=[Fo.styles,Le`.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=zU(this.bundles))}optionIcon(t){return d`<span class="bundle-icon" aria-hidden="true">${t.format==="sourcemap"?V(rr):d`<img src="./stasis.svg" alt="">`}</span>`}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",jk)});var Zu,Vk,qA=$(()=>{"use strict";T();Je();Uh();Vi();dg();cg();Hk();Zu=e=>({kind:e,sourceId:null,ids:new Set}),Vk=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=Zu("bundle"),this._link=Zu("repository")}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("tooltip-root-connected",{bubbles:!0,composed:!0}))}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=Zu("bundle"),this._link=Zu(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=Zu(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?ua(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),o=t.title??t.filename,i=n.join(" \xB7 ");return d`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(t.id)}" @change="${s=>this._toggle(t.id,s.target.checked)}">${V(ou[t.analyzer]??ou.default)}<span class="copy"><strong data-tooltip-truncated data-tooltip="${o}">${o}</strong><span data-tooltip-truncated data-tooltip="${i}">${i}</span></span></label>`}static styles=Le`: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",Vk)});var UU,HU,Wk,Gk=$(()=>{"use strict";T();UU=d`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,HU=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>`,Wk=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",UU],[!0,"Isolate",HU]].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=Le`: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",Wk)});function YA(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 XA(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:ec(r)}:null}function qk(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:Kk.includes(n.mode)?n.mode:"generic",model:o.id,effort:o.efforts.includes(n.effort)?n.effort:ec(o),isolate:!!n.isolate}}):[]}function Yk(e){let t=new Set;return e.map(r=>{let n=jU(r),o=t.has(n);return t.add(n),o})}var Kk,jU,JA=$(()=>{"use strict";Vi();Kk=["security","generic","correctness"],jU=e=>JSON.stringify([e.mode,e.model,e.effort,e.isolate])});var Xk,ZA=$(()=>{"use strict";T();dr();Pt();Nk();Gk();Vi();JA();Xk=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=qk(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&&!Yk(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=YA(this._rows),r=XA((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=qk([{...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=Yk(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>${ua(t.model)}</strong></span><span class="app-model-effort">Effort: <strong>${pa(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">${Kk.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=Le`: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",Xk)});var eI,QA=$(()=>{eI=`: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 WU,GU,KU,Jk,tI=$(()=>{"use strict";T();Je();ht();QA();WU=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Dh},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:C3},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:E3},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:Rl}],GU=[{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"}],KU=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],Jk=class extends J{static properties={mode:{},analyzer:{},reportMode:{}};static styles=F(eI);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?GU:KU,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>${WU.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",Jk)});var rI,nI=$(()=>{"use strict";T();rI=Le`: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 iI(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=>!oI.some(o=>o.key===n))?null:[{id:"",label:"All files",subtitle:"Everything"},...oI.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 oI,sI=$(()=>{"use strict";oI=[{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 Zk,Qu=$(()=>{"use strict";T();dr();sI();Zk=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=iI(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=Le`: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",Zk)});var aI,Qk,lI=$(()=>{"use strict";T();Je();dr();Pt();ht();Vi();Nk();cg();Hk();dg();qA();ZA();Gk();tI();nI();Cl();Qu();aI={code:V(Dh),report:V(Rl)},Qk=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=rI;constructor(){super(),this.loadModels=sg,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 dw(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=nu(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>${vo(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:k}=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" data-tooltip-truncated data-tooltip="${this._packageLabel(g)}">${this._packageLabel(g)}</span><span class="package-size">${vo(b)} · ${k}/${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:dw(u.files)}:u.summary?{...u,summary:{...u.summary,files:u.summary.codeFiles}}:u):this._repoBundles,{lines:o}=nu(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">${aI.report}<strong>${r.length}</strong><span>files</span></div><div class="metric">${aI.code}<strong>${o==null?"\u2014":o.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${V(rr)}<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 data-tooltip-truncated data-tooltip="${t.bundleName}">${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",Qk)});function gt(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 cI(e,t=null){let r=new Set;for(let n of e){let o=t?.(n)??null;if(gt(n,{splitOwnDirs:!1,packageDir:o})==="__own__"&&(r.add(gt(n,{splitOwnDirs:!0,packageDir:o})),r.size>1))return!0}return!1}function Qn(e){return e==="__own__"?"own source":typeof e!="string"?e:e.match(/^(?:.*\/)?vendor\/(.+)$/u)?.[1]??e}var tc=$(()=>{"use strict"});function Bo(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??[...Yt(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 ex=$(()=>{"use strict";Ru()});function dI(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 tx(e,t,{splitOwnDirs:r=!1,packageDir:n}={}){let o=gt(t,{splitOwnDirs:!1,packageDir:n});return o==="__own__"?gt(e,{splitOwnDirs:r,packageDir:n}):o}function rx(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 uI(e,t,r,n,o=t){let i=rx(e),s=new Set;for(let[c,u]of t)gt(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)&&gt(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 ug=$(()=>{"use strict";tc();ex()});function pI(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 fI(e,t){if(t.error)throw new Error(t.error);let r=Vr(t),n=t.kind==="stasis"?t.bundle?.formats:null,o=t.lineCounts??new Map([...dt(t)].map(([a,c])=>[a,Iu(c)])),i=[...Yt(t)].filter(([,a])=>a!=null).map(([a,c])=>({path:a,format:n?.get(a)??null,bytes:c,lines:o.get(a)??0,size:vo(c),module:gt(a,{splitOwnDirs:!1,packageDir:r?.get(a)})})),s=[{id:"all",label:"All",filePaths:null},...[...Bo(t,i.map(a=>a.path))].map(([a,c])=>({id:`reason:${a}`,label:a,filePaths:[...c]}))];return{...e,files:i,reasons:s,size:vo(t.size)}}var hI=$(()=>{"use strict";Wr();zl();tc();ug();Cl()});function qU(e){let{data:t}=sn(e);return t&&mI(t)>0?t:null}function mI(e){return(ft(e)??[]).filter(t=>(Array.isArray(t)?t:[t]).some(r=>r&&typeof r=="object"&&on(r,r.source??e.source))).length}function gI(e,t){let r=[],n=new Map;for(let{name:i,content:s,fallbackRepo:a}of e){if(typeof s!="string")continue;let c=qU(s);if(!c)continue;let u=ft(c),p=xt(c)??xt({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=xt(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:mI(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 bI=$(()=>{"use strict";ge();Cl()});function Wi(e){if(e?.throwIfAborted(),C())throw new DOMException("Local scan closed","AbortError")}async function vI(e){Wi(e);let t=await Vt();return Wi(e),pI(t,Q())}async function yI(e,t){Wi(t);let r=await So(e.integrity,{name:e.filename},{sources:!1});return Wi(t),fI(e,r)}async function wI(e){Wi(e);let t=await fe(),r=[];for(let n of t){Wi(e);let o=await De(n);Wi(e),r.push({name:n,content:o,fallbackRepo:Ut(n)})}return Wi(e),gI(r,Q())}var kI=$(()=>{"use strict";U();Mo();hI();bI()});function xI({hostname:e,devServer:t,serverMode:r,localMode:n,deepviewScanServer:o}){return r==="managed"&&!n?null:r==="e2e"?Gc(o):Gc(t)??(e==="127.0.0.1"?k2:null)}var $I=$(()=>{"use strict";Jb()});async function _I(e,t,r){let n=_t(e,{duration:0});t.addEventListener("abort",n,{once:!0});try{return await r()}finally{t.removeEventListener("abort",n),n()}}function ep(){return xI({hostname:window.location.hostname,devServer:document.querySelector('meta[name="deepview-scan-server"]')?.content,serverMode:l.serverMode,localMode:l.localMode,deepviewScanServer:l.deepviewScanServer})}function pg(e){return C()?!!e.managedId&&["admin","manage"].includes(l.managedSession?.role):!e.managedId&&!!ep()}async function ox(e=null){let t=l.selectedBundleWorkspace,r=nt();if(await mt(),r!==nt()||e&&!pg(e))return;if(C()){e&&await da("manage-scans",{bundleId:e.managedId});return}if(!ep())return;let n=Jn(),o=nt();await n,!(!ep()||o!==nt())&&(l.scanSelection=e?{bundleId:e.integrity,...t?{repoId:t}:{}}:null,l.currentView="scan",E(),Y())}function fg(){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=`${Ml}<span>Scan</span>`,t.addEventListener("click",()=>{ox()}),e.append(t));let r=ep();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||!pg(o))}var nx,hg=$(()=>{"use strict";T();U();Ui();Zn();qt();vA();wA();Lk();ht();lI();kI();$I();$l();nx=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=ep(),this._access=new ag(this._server,()=>this.requestUpdate()),this._resetAccess(),this._source=null,this._error=null,this._loadBundle=(t,r)=>_I("Loading bundle\u2026",r,()=>yI(t,r))}connectedCallback(){super.connectedCallback(),this._restoreAccess(),this._unsubscribeSavedAccess=v0(()=>{this._savedAccess=hl()}),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 _I("Loading bundles\u2026",t.signal,()=>vI(t.signal))}catch(r){t.signal.aborted||(this._error=String(r?.message??r))}}_resetAccess(){this._access.reset(this._server),this._providerToken=""}_restoreAccess(){this._savedAccess=hl();let t=m0(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=hl();if(!(!t&&!this._access.connected)){this._savingAccess=!0;try{t?(await b0(),this._resetAccess()):await g0({server:this._server,deepview:this._access.apiKey,provider:this._access.provider,token:this._providerToken}),this._savedAccess=hl()}catch{_t(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=yA(t);r&&this._access.setProvider(r)}setScanServer(t){this._server!==t&&(this._server=t,this._resetAccess(),this._restoreAccess())}static styles=Le`: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">${Ju(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="${wI}"><button slot="navigation" type="button" @click="${()=>{Jn()}}"><span aria-hidden="true">‹</span> Home</button>${this._accessPanel()}</deepview-scan-page>`}};customElements.get("local-scan-page")||customElements.define("local-scan-page",nx)});function rc(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 ix=$(()=>{"use strict"});function SI(e,t=""){let r=[],n=xt(e);if(n){let i=[Ln(e.repo),Ln({directory:t})].filter(Boolean).join("/"),s=au(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"&&YU.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 YU,CI=$(()=>{"use strict";ge();jh();YU=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/iu});function sx(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 mg(e){let t=/^(.*?)\.stasis\.(?:code|resources)\.br$/u.exec(e);return t?t[1]:e.replace(/\.[^.]+$/u,"")||e}function MI(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 RI(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 AI(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:sx(r.name,r.version)}:{name:mg(t?.name??"bundle"),version:null,purl:null},rest:n}}function II(e){return e??globalThis.crypto.randomUUID()}function TI(e,t,{now:r=new Date,uuid:n}={}){let o=MI(e),{root:i,rest:s}=AI(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:${II(n)}`,version:1,metadata:{timestamp:r.toISOString(),tools:{components:[{type:"application",name:EI}]},component:a},components:s.map(u=>{let p=sx(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 XU(e){return{referenceCategory:"PACKAGE-MANAGER",referenceType:"purl",referenceLocator:e}}function LI(e,t,{now:r=new Date,uuid:n}={}){let o=MI(e),{root:i,rest:s}=AI(o,t),a=mg(t?.name??"bundle"),c=r.toISOString().replace(/\.\d{3}Z$/u,"Z"),u=(b,v,k,w)=>{let y={SPDXID:b,name:v,downloadLocation:"NOASSERTION",filesAnalyzed:!1,licenseConcluded:"NOASSERTION",licenseDeclared:"NOASSERTION",copyrightText:"NOASSERTION"};return k&&(y.versionInfo=k),w&&(y.externalRefs=[XU(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 k=`SPDXRef-Package-${v+1}`;f.push(u(k,b.name,b.version,sx(b.name,b.version))),h.push({spdxElementId:p,relationshipType:"DEPENDS_ON",relatedSpdxElement:k})});let g={spdxVersion:"SPDX-2.3",dataLicense:"CC0-1.0",SPDXID:"SPDXRef-DOCUMENT",name:a,documentNamespace:`https://spdx.org/spdxdocs/${encodeURIComponent(a)}-${II(n)}`,creationInfo:{created:c,creators:[`Tool: ${EI}`]},packages:f,relationships:h};return`${JSON.stringify(g,null,2)}
136
+ `}var EI,ax=$(()=>{"use strict";EI="@preventive/triage"});function JU(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 lx(e,t,r){if(t){let i=JU(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 ZU(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 QU(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 FI(e,t,r,n,o){if(!r)return{fileResults:[],totalHits:0,truncated:!1};let i=lx(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?QU(c,i):ZU(t,i);return pr.entries.unshift({query:r,result:p}),pr.entries.length>8&&pr.entries.pop(),p}var pr,BI=$(()=>{"use strict";pr={tag:null,useRegex:!1,caseSensitive:!1,entries:[]}});function tp(e){if(!e?.managedId)return eH;let t=l.managedSession,r=[t?.id,t?.role,t?.csrfToken,l.currentManagedTeam,l.managedTeams];return r.some((n,o)=>n!==NI[o])&&(NI=r,OI=new Map),OI}function bg(e){return cx.has(e)||cx.set(e,{reasons:Bo(e),selected:""}),cx.get(e)}function rp(e){return JSON.stringify([e.managedId??e.integrity,bg(e).selected])}function dx(){try{return localStorage.getItem(PI)==="1"}catch{return!1}}function DI(){try{localStorage.setItem(PI,"1")}catch{}}function tH(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 zI(e,t){return!e||Mk(e.name)!=="stasis"?!1:e.managedId||!t||t.integrity!==e.integrity?!0:tH(t)}function rH(e){return Object.fromEntries([...e].map(([t,r])=>[t,[...r].toSorted()]))}function nH(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 oH(e){let t=Array.isArray(e)?Map.groupBy(e.map(nH),ux):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 UI(e,t){return!!(e?.managedId&&t?.state==="ok"&&!t.recheckingRepositories&&t.query.size>0)}async function iH(e){let t=await fetch("/api/npm-advisories",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(rH(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 vg(e,t){return HI(e,t)}function sH(e,t){return HI(e,t,!0)}async function HI(e,t,r=!1){if(!e?.integrity||!e.managedId&&!dx())return;let n=tp(e),o=rp(e),i=n.get(o);if(r){if(!UI(e,i))return;n.set(o,{...i,recheckingRepositories:!0,repositoryError:null}),t()}else if(i)return;let{reasons:s,selected:a}=bg(e),c=e.managedId?new Map:Mu(e,s.get(a)??null);r||n.set(o,{state:"loading",query:c});try{let u,p=[];if(e.managedId){let f=await l3(e.managedId,void 0,a,r);c=Array.isArray(f.packages)?new Map(f.packages.map(h=>[ux(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 iH(c):{};n.set(o,{state:"ok",byPackage:oH(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 jI(e,t){if(!e?.integrity)return;let r=tp(e),n=rp(e);r.get(n)?.state==="error"&&(r.delete(n),await vg(e,t))}function gg(e){return aH[e]??999}function lH(e){return e==="unknown"?"Unrated":e.charAt(0).toUpperCase()+e.slice(1)}function cH(){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 VI(e,t=()=>{}){let r=e?bg(e):null,n=[...r?.reasons.keys()??[]].map(i=>({id:`reason:${i}`,label:i})),o=uH(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">${dH(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=vg(e,t);return t(),a}}"></bundle-scope-selector>`:m}</div>`:m}</div>`:m} ${fH(e)}</div>`}function dH(e,t){if(!e?.managedId)return m;let r=tp(e).get(rp(e)),n=!!r?.recheckingRepositories;return d`<button type="button" class="bundle-advisories-retry bundle-advisories-recheck" ?disabled="${!UI(e,r)}" aria-busy="${String(n)}" @click="${()=>sH(e,t)}">${n?"Rechecking\u2026":"Recheck against repositories"}</button>`}function uH(e){if(!e||!e.managedId&&!dx())return m;let t=tp(e).get(rp(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 pH(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 ${bg(e).selected?"this scope":"this bundle"}.`}function fH(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&&!dx())return cH();let t=tp(e).get(rp(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>${pH(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=>gg(p.severity))),u=Math.min(...a.map(p=>gg(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">${ux(o)}@${o.version}</span>: ${o.because}</li>`)}</ul></section>`:m}<ul class="bundle-advisories-list">${n.map(([o,i])=>hH(o,i,t.query.get(o)))}</ul></div>`}function hH(e,t,r){let n=[...t].toSorted((i,s)=>{let a=gg(i.severity)-gg(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=>vH(i))}</ul></li>`}function mH(e){if(typeof e!="string")return null;let t=/\/(GHSA-[a-z0-9-]+)(?:[/?#]|$)/iu.exec(e);return t?t[1]:null}function bH(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 vH(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??mH(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}${gH}</a>`:m;return d`<li class="bundle-advisory-row"><div class="bundle-advisory-rail"><span class="${`bundle-advisory-severity sev-${t}`}">${lH(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?"":", "}${bH(f)}`)}</span>`:m}</div>${o?d`<div class="bundle-advisory-cvss-vector mono">${o}</div>`:m}</div></div></li>`}var eH,OI,NI,cx,PI,ux,aH,gH,px=$(()=>{"use strict";T();U();Kt();Ui();Wr();ex();Qu();eH=new Map,OI=new Map,NI=[];cx=new WeakMap;PI="deepview.advisories.proxyConsent";ux=e=>e.ecosystem==="npm"?e.name:`${e.ecosystem}:${e.name}`;aH={critical:0,high:1,moderate:2,low:3,info:4};gH=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 wH(e){if(fx.has(e))return fx.get(e);let t=lM(e),r=rx(e),n=[...t.keys()].filter(c=>t.get(c)!==null),{stripped:o}=_r(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 fx.set(e,a),a}function XI(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 wx(i)){let a=l.triage.get(q(s))?.triage;a&&r[a]!==void 0&&r[a]++}}return r}function ic(e,t="graph"){if(!e||e.size===0)return new Map;let r=new Map;for(let[n,o]of e){let i=wx(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 JI(e){let t=wH(e),r=Bo(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}=dI(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[R,W]of e.fileHashes){let ce=o.get(R);ce!==void 0&&a.set(ce,W)}}let c=ic(a),u=new Map,p=new Map,f=new Map,h=new Map;for(let[R,W]of c){let ce={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},St=new Set,be=new Set,wn=[];for(let qe of W){ce[qe.severity]=(ce[qe.severity]||0)+1,St.add(qe.severity);let fr=l.triage.get(q(qe))?.color??"none";be.add(fr),wn.push({severity:qe.severity,color:fr})}u.set(R,ce),p.set(R,St),f.set(R,be),h.set(R,wn)}let g=B.bundleLayout==="matrix"||u.size===0?null:jm(n,u),b=new Map;for(let[R,W]of o)b.set(W,R);let v=Vr(e),k=v?new Map([...o].map(([R,W])=>[W,v.get(R)])):null,w=k?R=>k.get(R):null,y=s.filter(R=>tx(R,b.get(R)??R,{packageDir:w?.(R)})==="__own__"),x=cI(y,w),_=B.splitOwnDirs&&x,S=R=>tx(R,b.get(R)??R,{splitOwnDirs:_,packageDir:w?.(R)}),M=uI(e,o,S,v,t.origToStripped),A=new Set;for(let R of s)if(A.add(S(R)),A.size>=3)break;let P=A.size>=3,L=s;if(B.focusedPkg){let R=s.filter(W=>S(W)===B.focusedPkg);R.length>0?L=R: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:x,canPackagesView:P,supportsLayers:!0,layerRoots:M,ownSourcePackages:y.length>0?new Set(y.map(S)):void 0,reasons:[...r.keys()]}}function yg(){if(!np)return;let e=Yl();e&&e.refreshSidebar(np,{isBundleContext:!0})}function wg(){if(!np)return;let e=Yl();e&&e.refreshTopPkgs(np)}function ZI(e){np=e}function kH(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=gt(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)||Qn(i[0]).localeCompare(Qn(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=Qn(i),u=cr(i);return d`<li><span class="bundles-dist-dot" style="${Me({background:u})}"></span> <span class="bundles-dist-pkg" data-tooltip-truncated 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 WI(e,t,r,n,o,i,{bundleSize:s=null,resources:a=null}={}){let{prefix:c,stripped:u}=_r(r),p=L=>o?.get(r[L]),f=new Set;for(let L=0;L<u.length;L++)f.add(gt(u[L],{packageDir:p(L)}));let h=l.bundleOverviewFilesSort,g=u.map((L,R)=>R).toSorted((L,R)=>(h==="size"?(n[R]??-1)-(n[L]??-1):0)||u[L].localeCompare(u[R])),b=u.map((L,R)=>({path:L,size:n[R],pkgDir:p(R)})),v=l.bundleOverviewPackagesSort,k=kH(b,v),w=k===m?d`<p class="bundles-overview-col-empty">No size information for this bundle's sources.</p>`:k,y={critical:0,high:0,medium:0,low:0,high_bug:0,bug:0,informational:0},x=0,_=new Map;if(l.bundleDetails?.fileHashes){let L=ic(l.bundleDetails.fileHashes,"issues");for(let R of L.values())for(let W of R){y[W.severity]!==void 0&&y[W.severity]++,x++;for(let ce of _d(W.fileHash,W))_.set(ce,(_.get(ce)??0)+1)}}let S=[..._.keys()].toSorted(),M=Ae.filter(L=>y[L]>0).map(L=>d`<span class="${`tree-count-chip ${L}`}">${y[L]} ${L.replaceAll("_"," ")}</span>`),A=r.length>0?d`<ul class="bundles-sources-list">${g.map(L=>{let R=r[L],W=n[L],ce=d`<span class="bundles-source-path" data-tooltip-truncated data-tooltip="${R}">${u[L]}</span> ${W==null?m:d`<span class="bundles-source-size">${we(W)}</span>`}`;return d`<li>${a?.has(R)?d`<div class="bundles-source-row is-resource">${ce}</div>`:d`<button type="button" class="bundles-source-row" data-bundle-view-source="${R}">${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 R=Se[it(L)]??Se.default,W=_.get(L)??0;return d`<li><button type="button" class="report-chip bundles-report-chip" data-bundle-issue-report="${L}">${V(R)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${L}">${Ie(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>${x>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,R])=>d`<button type="button" aria-pressed="${String(v===L)}" @click="${()=>{l.bundleOverviewPackagesSort=L,E()}}">${R}</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,R])=>d`<button type="button" aria-pressed="${String(h===L)}" @click="${()=>{l.bundleOverviewFilesSort=L,E()}}">${R}</button>`)}</span></header><div class="bundles-overview-col-body bundles-overview-col-body--list">${A}</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 Gi(){queueMicrotask(()=>{document.querySelector(".bundle-code-rail-body .bundle-code-tree-link.current")?.scrollIntoView({block:"nearest"})})}function fa(e){for(let t of Ae)for(let r of e)if(r.severity===t)return t;return e[0]?.severity??null}function $H(e,t,r,n,o=null){let i=e.split(`
138
+ `).length,s=String(i).length,a=Mr(t,r?.kind==="stasis"?r.bundle?.formats?.get(t):void 0),c=`${r?.integrity??""}\0${t}`;a&&!hx.has(c)&&!mx.has(c)&&(mx.add(c),(async()=>{let p=await Hr(e,a,A1(r,t));hx.set(c,p??null),mx.delete(c),l.bundleSourceFile===t&&E()})());let u=hx.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?fa(g.map(k=>k.f)):null,v=g&&l.bundleSourceFindingIdx!=null&&g.some(k=>k.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 _H(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=Js(r),a=n8(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" data-tooltip-truncated data-tooltip="${s}">${s}</span>`:m}</div>`:m}<div class="bundle-source-panel-desc">${lr(qa(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=ot[it(c)]??ot.default;return d`<button type="button" class="report-chip bundle-source-panel-report" data-bundle-issue-report="${c}">${V(u)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${c}">${Ie(c)}</span></button>`})}</div>`:m}</div></aside>`}function kx(e,t,r){let n=[],o=new Map;if(typeof r=="string"&&e?.fileHashes){let s=ic(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 QI(e,t=null){return d`<header class="bundle-source-bar"><div class="bundle-source-title mono" data-tooltip-truncated data-tooltip="${e}">${e}</div>${t?.files.length>1?r8(t):m} <button type="button" class="bundle-source-close" data-action="bundle-source-close" aria-label="Close source viewer">×</button></header>`}function xx(e,t,r,n,o,i=null){return d`<div class="bundle-source-code-wrap">${typeof t=="string"?$H(t,e,r,o,i):d`<div class="bundle-source-empty">Source content not bundled.</div>`}</div>${_H(n)}`}function e8(){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}=kx(t,e,i);return d`<div class="bundle-source-overlay"><div class="${z({"bundle-source-modal":!0,"with-panel":l.bundleSourceFindingIdx!=null})}">${QI(e,Ql(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>`:xx(e,i,t,s,a)}</div></div></div>`}function t8(e,t){let r=sc(e??"",t).split("/");for(let n=1;n<r.length;n++)oc.set(r.slice(0,n).join("/"),!0)}function SH(e,t){l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery="",t8(e,t),E(),Gi()}function CH(e){let t=r=>{for(let n of r.dirs.values())oc.set(n.path,!1),t(n)};t(e),E()}function EH(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=fa(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 yx(e,t,r=0,n=null,o=!1,i=null){let s=[...e.dirs.entries()].toSorted(([f,h],[g,b])=>Gu(f,h).localeCompare(Gu(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:oc.has(f)?oc.get(f):r===0||c(h),p=f=>h=>{oc.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?UR:m}">${oe(s,([,f])=>f.path,([f,h])=>{let g=h.path,b=zR(f,h,r),v=h.package,k=v?.ecosystem==="cargo"||v?.ecosystem==="composer"||v?.ecosystem==="soldeer",w=v?.ecosystem==="composer"?tR:v?.ecosystem==="cargo"?rR:v?.ecosystem==="soldeer"?eR:QM,y=v?.variant?`${b.node.sourcePath}
139
+ Variant ${v.variant}`:b.node.sourcePath,x=h.packageInfo,_=!!x||!!v?.variant,S=EH(h,n);return d`<li class="bundle-code-tree-dir"><details .open="${ke(u(g,h))}"><summary @click="${p(g)}" data-tooltip-package="${x?.name??m}" data-tooltip-ecosystem="${x?.ecosystem??m}" data-tooltip-version="${x?.version??m}" data-tooltip-files="${x?.fileCount??m}" data-tooltip-repo="${x?.github??m}" data-tooltip="${_?y:m}"><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":k})}" data-tooltip-truncated data-tooltip="${_?m:y}">${v?d`<span class="bundle-code-tree-package-name">${v.name}</span>${v.version?d`<span class="bundle-code-tree-package-version">${k?"- ":"@"}${v.version}</span>`:m}`:b.names.map((M,A)=>d`${A>0?d`<span class="bundle-code-tree-separator">/</span>`:m}${M}`)} </span>${v?.variant?d`<span class="bundle-code-tree-variant">variant ${v.variant}</span>`:m} ${S.count>0?d`<span class="${`bundle-code-tree-count sev-${S.worst}`}" data-tooltip="${`${S.count} ${S.count===1?"issue":"issues"} inside`}">${S.count}</span>`:m}</summary>${yx(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?fa(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}">${X1(h,i?.get(h))}<span class="bundle-code-tree-name" data-tooltip-truncated data-tooltip="${h}">${f}</span> ${v>0?d`<span class="${`bundle-code-tree-count sev-${b}`}" data-tooltip="${`${v} ${v===1?"issue":"issues"}`}">${v}</span>`:m}</button></li>`})}</ul>`}function sc(e,t){return t&&e.startsWith(t)?e.slice(t.length):e}function MH(e,t,r,n,o="",i=null){if(!r)return yx(e,t,0,n,!1,i);let s=DR(e,r,o);return s?yx(s,t,0,n,!0,i):d`<div class="bundle-code-search-empty">No files match.</div>`}function RH(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=sc(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-truncated 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"><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 AH(e,t,r,n=""){if(!e.fileHashes)return d`<div class="bundle-code-search-empty">Computing file hashes…</div>`;let o=ic(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=sc(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??""}"><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" data-tooltip-truncated data-tooltip="${a}">${f}${c.line?`:${c.line}`:""}</span></div><div class="bundle-code-search-issue-desc">${lr(qa(c),{paragraphs:!1})}</div></button></li>`})}</ul></div>`}function IH(e,t){if(e.kind!=="stasis")return t;let r=Vr(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 KI(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[fa(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 TH(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>`;GI!==l.selectedBundle&&(oc.clear(),GI=l.selectedBundle,gx=null);let r=[...t.keys()].toSorted(),n=e.kind==="stasis"?e.bundle.modules:null,o=NR(_r(r).prefix,n,r),i=r.map(y=>sc(y,o)),s=OR(i,r,n),a=e.fileHashes?ic(e.fileHashes,"issues"):new Map,c=IH(e,t),u=e.kind==="stasis"?new Map([...a].filter(([y])=>c.has(y))):a,p=l.bundleSourceFile;if(Oo&&(Oo.bundle!==l.selectedBundle||p&&p!==Oo.path)&&(Oo=null),!p)p=KI(e,c,u),p&&(l.bundleSourceFile=p,Oo={bundle:l.selectedBundle,path:p,hadIssues:u.size>0},Gi());else if(Oo&&!Oo.hadIssues&&u.size>0){Oo.hadIssues=!0;let y=KI(e,c,u);y&&y!==p&&(p=y,l.bundleSourceFile=y,l.bundleSourceFindingIdx=null,Oo.path=y,Gi())}p!==gx&&(t8(p,o),gx=p);let f=p?t.get(p):null,{fileFindings:h,lineFindings:g}=kx(e,p,f),v=a.size>0?["files","code","issues"]:["files","code"],k=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="${()=>SH(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="${k!=="files"||!!w||s.dirs.size===0}" @click="${()=>CH(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" data-tooltip-truncated data-tooltip="${o}">${o}</div>`:m}<bundle-code-search .modes="${v}"></bundle-code-search><div class="bundle-code-rail-body">${Y1(k,[["files",()=>MH(s,p,w,a,o,e.kind==="stasis"?e.bundle.formats:null)],["code",()=>RH(t,w,p,o)],["issues",()=>AH(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?LH(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 r8(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 LH(e,t,r,n,o){let i=Ql(l.bundleCodeHistory,e.integrity,t),s=typeof r=="string"?r.split(`
141
+ `).length:0,a=typeof r=="string"?us(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">${r8(i)} ${X1(t,e.kind==="stasis"?e.bundle.formats?.get(t):void 0)} <span class="bundle-code-main-path mono" data-tooltip-truncated data-tooltip="${t}">${t}</span> <button type="button" class="bundle-code-copy-path" data-copy-path="${t}" aria-label="Copy file path">${xH}</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-${fa(n)}`}" data-tooltip="${`${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">${xx(t,r,e,n,o)}</div>`}function BH(e){return e<=5?8:e<=15?6:e<=40?4:e<=120?3:2}function OH(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 NH(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 PH(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 DH(e,t,r){let n=NH(e,r??[],FH);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}${PH(n.text,n.ranges)}</span></div>`}function zH(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(DH(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">${u}</button>`}function UH(e,t,r){let{path:n,lines:o,hits:i}=e,s=sc(n,t),a=OH(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-truncated 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)=>zH(n,o,f,c,h>0))}</div></section>`}function HH(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=FI(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}=_r(p);if(a.length===0)return d`<div class="bundle-search-results"><div class="bundle-search-empty">No matches.</div></div>`;let h=i?BH(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" data-tooltip-truncated data-tooltip="${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=>UH(b,f,h))}</div>`}function jH(e,t,r,n){if(!t||typeof e!="string")return null;let o=lx(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 VH(e,t,r){let n=l.bundleSourceFile;if(!n)return m;let o=t.get(n),{fileFindings:i,lineFindings:s}=kx(e,n,o);return d`<aside class="bundle-search-side">${QI(n)}<div class="bundle-source-body">${xx(n,o,e,i,s,r)}</div></aside>`}function WH(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=jH(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">${HH(e,t,r,n,o,s)} ${VH(e,t,i)}</div></div>`}function GH(e){let t=zI(e,l.bundleDetails);l.bundleDetailsTab==="advisories"&&!t&&(l.bundleDetailsTab="overview");let r=rc(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&&Fi(n));return n==="advisories"&&t&&a&&vg(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(rr)}</span><div class="bundles-slide-title"><div class="bundles-slide-name" data-tooltip-truncated data-tooltip="${e.name}">${e.name}</div></div><button type="button" class="bundles-download-btn bundles-scan-button" ?hidden="${!pg(e)}" @click="${()=>{ox(e)}}">${V(Ml)}<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?rj(e,i):a?Y1(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",()=>TH(i)],["search",()=>WH(i)],["compare",()=>d`<bundle-compare .details="${i}" .integrity="${e.integrity}"></bundle-compare>`],["issues",()=>qH(i)],["advisories",()=>VI(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 KH(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=hy(t.bucketKey,e):t.kind==="repository"&&(r=my(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=ot[it(i)]??ot.default;return d`<button type="button" class="report-chip" data-bundle-issue-report="${i}">${V(s)}<span class="report-chip-label" data-tooltip-truncated data-tooltip="${i}">${Ie(i)}</span></button>`})} ${o>0?d`<span class="bundle-issue-reports-more">, and ${o} more…</span>`:m}</div>`}function n8(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 nc(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 qH(e){if(e.managedId)return nc("Open a report to review its findings.","Bundle metadata includes source hashes; reports are available through your teams.");if(!e.fileHashes)return nc("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 nc("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=ic(e.fileHashes,"issues");if(t.size===0){let r=yH();if(r===0)return nc("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+=wx(o).length;return n>0?nc("All matching issues are dismissed.",`${n} ${n===1?"finding matches":"findings match"} this bundle's files, but every one is triaged invalid or deleted.`):nc("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 op(t,{kind:"bundle"})}function op(e,{kind:t,bucketKey:r}={}){let n=[...e.keys()],{prefix:o,stripped:i}=_r(n),s=new Map(n.map((u,p)=>[u,i[p]])),a=[...e.entries()].toSorted(([u,p],[f,h])=>{let g=We[fa(p)]??0,b=We[fa(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 k=We[b.severity]??0,w=We[v.severity]??0;if(w!==k)return w-k;let y=parseInt(b.line,10)||0,x=parseInt(v.line,10)||0;return y-x}),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-truncated 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-truncated data-tooltip="${u}">${f}</a>`:d`<span class="bundle-issues-file-name bundle-issues-file-name-static mono" data-tooltip-truncated data-tooltip="${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),k=b.severity,w=n8(b.line),y=l.triage.get(q(b))?.triage,x=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-${k}`}">${k.replaceAll("_"," ")}</span> ${w?d`<span class="bundle-issues-finding-line">${w}</span>`:m} ${x?d`<span class="${`bundle-issues-finding-triage triage-${y}`}">${x}</span>`:m} <span class="bundle-issues-finding-spacer"></span> ${KH(b,{kind:t,bucketKey:r})}</div><div class="bundle-issues-finding-desc">${lr(qa(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??""}">${_}</button>`:d`<div class="bundle-issues-finding-link bundle-issues-finding-static">${_}</div>`}</li>`})}</ul></li>`})}</ul></div>`}function o8(e){let t=l.selectedBundle,r=t?e.find(n=>n.integrity===t):null;return r?GH(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 XH(e){if(qI[e])return qI[e];let t=0;for(let r of e)t=Math.imul(t,31)+r.codePointAt(0)|0;return YI[(t>>>0)%YI.length]}function JH(e){let t=e.currentTarget,r=e.target.closest?.(".bundles-languages-segment");!r||!t.contains(r)||(t.dataset.tooltip=r.dataset.languageTooltip??"",hw(t))}function ZH(e){delete e.currentTarget.dataset.tooltip,ki()}function QH(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,Iu(s)])),r=e.codeStats??Cu(t,Yt(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="${JH}" @pointerleave="${ZH}">${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:XH(i)})}" data-language-tooltip="${`${s} \xB7 ${c<1?c.toFixed(1):c.toFixed(0)}% \xB7 ${a} ${a===1?"line":"lines"}`}"></span>`})}</div>`}async function ej(e){try{await(await Oe()).downloadManagedBundle(e.managedId,e.filename??e.name??"bundle")}catch(t){alert(t.message)}}function tj(e,t){let r=RI(t),n=QH(t);return d`<div class="bundles-overview-exports">${n}<div class="bundles-overview-exports-row">${e.managedId?zn()?d`<button type="button" class="bundles-download-btn" @click="${()=>{ej(e)}}">${bx}<span>Download bundle</span></button>`:d`<a class="bundles-download-btn" href="${`/api/bundles/${encodeURIComponent(e.managedId)}/download`}">${bx}<span>Download bundle</span></a>`:d`<button type="button" class="bundles-download-btn" data-bundle-download="${e.integrity}">${bx}<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)">${YH}<span>SPDX</span></button></div>`:m}</div></div>`}function vx(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 rj(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} ${SI(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(Vn):m}<span>${a.text}</span></a> ${a.commit?d`<a class="bundle-origin-link bundle-commit-link" href="${a.commit.href}" data-tooltip="${a.commit.hash}" target="_blank" rel="noopener noreferrer">${V(zh)}<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}">${sc(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=tj(e,t);if(!t||t.integrity!==e.integrity)return vx(n("",!0),o);if(t.error)return vx(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=Yt(t),c=t.sourceSizes??(a.size===s.length?s.map(p=>a.get(p)??null):s.map((p,f)=>typeof i.sourcesContent?.[f]=="string"?us(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 WI(n,u,s,c,null,o,{bundleSize:t.size})}if(t.kind==="stasis"&&t.bundle){let i=t.bundle,s=Yt(t),a=Dl(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 k of v.split(", "))p.add(k)}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 WI(n,g,c,h,Vr(t),o,{bundleSize:t.size,resources:u})}return vx(n("",!0),o,d`<div class="bundles-overview-placeholder">Bundle contents not parsed.</div>`)}var wx,yH,np,fx,hx,mx,xH,Oo,oc,GI,gx,FH,bx,YH,qI,YI,ip=$(()=>{"use strict";T();Ws();Kt();JM();He();dr();Pt();so();Je();un();nR();HR();jR();lk();ht();hg();ix();U();he();Dt();Wr();g1();CI();zl();ax();BI();tc();ug();ct();ra();ju();aa();yo();G1();xi();px();sa();qt();wx=e=>C()?[]:py(e),yH=()=>C()?0:fy(),np=null,fx=new WeakMap;hx=new Map,mx=new Set,xH=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>`,Oo=null;oc=new Map,GI=null,gx=null;FH=400;bx=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>`,YH=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>`,qI=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"}),YI=Object.freeze(["#8b5cf6","#ec4899","#14b8a6","#f97316","#06b6d4","#84cc16","#e11d48","#a855f7"])});function i8(){Or().catch(()=>{});let e=On(),t={inprogress:0,fixed:0,invalid:0,deleted:0},r=[];for(let[h,g]of e){let b=[],v=[],k=new Map,w=new Set;for(let[y,x]of g.byVersion){let _=[],S=new Map;for(let M of x.findings){let A=l.triage.get(q(M))?.triage??null;A==="inprogress"?t.inprogress++:A==="fixed"?t.fixed++:A==="invalid"?t.invalid++:A==="deleted"&&t.deleted++,A===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:x.reports}]);for(let M of _)v.push(M),k.has(M.file)||k.set(M.file,[]),k.get(M.file).push(M);for(let M of x.reports)w.add(M)}}b.length!==0&&(b.sort(([y],[x])=>Uv(y,x)),r.push([h,{findings:v,files:k,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 cj(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();aj(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>${ij(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(nj(c),oj,h=>dj(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">${fj(o[0],s,i?i[0]:void 0)}</div></aside>`:m}</div>`}</div>`}function nj(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 oj(e){return e.version===null?`${e.kind}:${e.pkg}`:`${e.kind}:${e.pkg}@${e.version}`}function ij(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="${sj}"></triage-selector></div>`}function aj(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 lj(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 cj(e,t,r){let n=On().get(e),o=lj(n,r),i=l.packageSlideTriage??"live",s=n?s8(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" data-tooltip-truncated data-tooltip="${`${e}${p}`}">${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>`:op(s,{kind:"package",bucketKey:e})}</div></div>`}function dj(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=Ae.filter(b=>a[b]>0),u=cr(o),f={selected:o===t&&uj(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" data-tooltip-truncated data-tooltip="${i===null?o:`${o}@${i}`}">${o}${i===null?m:d`<span class="packages-version">@${i}</span>`} </span>${n==="latest"?pj(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}`}" data-tooltip="${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 uj(e,t){return e.kind==="single"?!0:e.version===t}function pj(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 fj(e,t,r){let n=On().get(e),i=[...(n?s8(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>${hj(e,t,r)}`}function s8(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=a8(t,s);o.has(u)||o.set(u,[]);let p=o.get(u);for(let f of c)p.push(f)}return o}function hj(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=Ae.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=On().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[it(f)]??Se.default;return d`<li><button type="button" class="packages-detail-report" data-package-report="${f}">${V(h)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${f}">${Ie(f)}</span></button></li>`})}</ul><h3 class="packages-detail-section">Files</h3><ul class="packages-detail-files">${i.map(([f,h])=>{let g=a8(e,f);return d`<li class="packages-detail-file"><span class="packages-detail-file-path mono" data-tooltip-truncated data-tooltip="${f}">${g}</span> <span class="packages-detail-file-count">${h.length}</span></li>`})}</ul>`}function a8(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 sj,l8=$(()=>{"use strict";T();He();Pt();so();Je();U();ct();he();un();aa();ip();sj=["inprogress","fixed","invalid","deleted"]});function c8(){Or().catch(()=>{});let e=Fs(),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 yj(o[0],o[1]);let i=l.repositoriesSearchQuery.trim().toLowerCase(),s=i?r.filter(([p])=>p.toLowerCase().includes(i)||Qe(p).toLowerCase().includes(i)):r.slice();bj(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>${mj(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])=>wj(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">${kj(o[0],o[1])}</div></aside>`:m}</div>`}</div>`}function mj(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="${gj}"></triage-selector></div>`}function bj(e,t){let r=t==="name-asc"?(n,o)=>Qe(n[0]).localeCompare(Qe(o[0])):t==="files-desc"?(n,o)=>o[1].files.size-n[1].files.size||Qe(n[0]).localeCompare(Qe(o[0])):t==="reports-desc"?(n,o)=>o[1].reports.size-n[1].reports.size||Qe(n[0]).localeCompare(Qe(o[0])):(n,o)=>o[1].findings.length-n[1].findings.length||Qe(n[0]).localeCompare(Qe(o[0]));e.sort(r)}function vj(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 yj(e,t){let r=Fs().get(e),n=vj(r),o=l.repositorySlideTriage??"live",i=r?d8(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" data-tooltip-truncated data-tooltip="${Qe(e)}">${Qe(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>`:op(i,{kind:"repository",bucketKey:e})}</div></div>`}function wj(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=Ae.filter(a=>n[a]>0),i=cr(e),s=Qe(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" data-tooltip-truncated data-tooltip="${s}">${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}`}" data-tooltip="${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 kj(e,t){let r=Fs().get(e),o=[...(r?d8(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>${xj(e,t)}`}function d8(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 xj(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=Ae.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">${Qe(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[it(a)]??Se.default;return d`<li><button type="button" class="packages-detail-report" data-package-report="${a}">${V(c)}<span class="packages-detail-report-label" data-tooltip-truncated data-tooltip="${a}">${Ie(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" data-tooltip-truncated data-tooltip="${a}">${a}</span> <span class="packages-detail-file-count">${c.length}</span></li>`)}</ul>`}var gj,u8=$(()=>{"use strict";T();He();Pt();so();Je();U();ct();he();un();aa();ip();gj=["inprogress","fixed","invalid","deleted"]});function p8(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 f8=$(()=>{"use strict"});function ha(e,t,r){return`${e} ${e===1?t:r}`}function $j(e,t){let r=Ve(l.triage.get(e)),n=t.filter(({name:a})=>mo(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})=>Ie(a)).join(", "):m}">${s}</span>`}function $x({id:e,title:t},r=[],n=!0,o=m){let i=r[0]?.name,s=gu(e),a=Zs(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} ${$j(e,r)} ${n?m:d`<span class="links-member-context">not in this link</span>`} ${o}</li>`}function h8(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-links-report="${t}" data-links-finding="${r}" data-managed-report="${n??m}">${V(ot[it(t)]??ot.default)}<span class="links-finding-report-label report-button-label" data-tooltip-truncated data-tooltip="${Ie(t)}">${Ie(t)}</span></button>`)}</div>`}function _j(e,t){let r=e.reports.toSorted((n,o)=>Ie(n.name).localeCompare(Ie(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">${$x(n,r,t.has(n.id),h8(r))}</ul></li>`}return d`<li class="links-report-row"><div class="links-report-row-head"><span class="links-row-count">${ha(e.members.length,"finding","findings")} in row</span> ${h8(r)}</div><ul class="links-row-members">${e.members.map(n=>$x(n,r,t.has(n.id)))}</ul></li>`}function Sj(e,t){let{rows:r,missing:n}=p8(e,di(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">${ha(e.length,"finding","findings")}</span></div><ul class="links-group-rows">${oe(r,i=>i.key,i=>_j(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=>$x({id:i,title:gy(i)}))}</ul></div>`:m}</li>`}function m8(e=m){let t=l.currentLinks;if(!t)return m;Or().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=Bs(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-truncated data-tooltip="${r}">${V(Se[it(r)]??Se.default)}${Ie(r)}</span> <span>${ha(n.length,"link","links")}</span> <span>${ha(i.size,"finding","findings")}</span> ${s.size>0?d`<span>found in ${ha(s.size,"report","reports")}</span>`:m}</div></div></header>${a<i.size?d`<p class="links-note">${ha(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">${ha(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)=>Sj(c,u))}</ol>`}</div>`}var g8=$(()=>{"use strict";T();Pt();Je();U();un();he();f8();ge()});function _x(e,t,r){let n=new Set(t);for(let o of r)n.add(o);return e.filter(o=>n.has(o))}function b8(){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?_x(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 v8=$(()=>{"use strict";U()});function y8({workspaceId:e,items:t}={}){return le("sync-upload-dialog",{workspaceId:e??"",items:Array.isArray(t)?[...t]:[]})}var Sx,w8=$(()=>{"use strict";T();U();dn();pe();ko();wo();Sx=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 B6(this.workspaceId,n.identifier);else{let i=await li(n.identifier);o=await xh(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:Ei(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:Ei(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}=nm(this.items),o=r?d`Upload <strong>"${Ei(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:om(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>${im(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",Sx)});var kg,Cx=$(()=>{kg=`.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 x8,k8=$(()=>{x8=`.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 Mj(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 Mx({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 $8,_8,Ex,S8=$(()=>{"use strict";T();dn();pe();vk();Cx();ko();k8();$8={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."}};_8=e=>e===1?"copy":"copies",Ex=class extends D{static styles=[...D.styles,F(kg),F(Ot),F(x8)];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 Mj(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 N6(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 O6(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 eg({workspaceId:this.workspaceId,items:t})};_statusHint(t){let r=$8[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)}">${$8[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 ${_8(t.updated)} updated from the cloud`),t.uploaded&&r.push(`${t.uploaded} cloud ${_8(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",Ex)});var E8,C8=$(()=>{E8=`.ssd-close{position:absolute;top:6px;right:6px;z-index:1}header{padding-right:1.5rem}.lwd-list{margin:.5rem 0 0}
146
+ `});function M8({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 Aj,Rx,R8=$(()=>{"use strict";T();pe();Cx();ko();C8();Aj=10,Rx=class extends D{static styles=[...D.styles,F(kg),F(Ot),F(E8)];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,Aj),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",Rx)});function A8({open:e,later:t=(n,o)=>setTimeout(n,o),modalOpen:r=()=>su()}){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,Ij);return}n.add(s),p.sync&&typeof c=="function"&&c()},0))}return{suggestSync:i,isClosedFor:s=>n.has(s)}}var Ij,I8=$(()=>{"use strict";fw();Ij=1500});function T8(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 L8(e,t){if(t.currentView!=="findings")return null;let r=vt({view:"findings",teamId:t.currentManagedTeam,reportId:t.currentManagedReport},t.managedTeams);if(!r||!e)return r;let n={...r,finding:{id:q(Ne(e))}};return vr(n)?n:r}var F8=$(()=>{"use strict";uo();ct()});function Lx(){let e=j1(l.reports);if(!e)return null;let t=Object.keys(e),n=Er().filter(p=>Ke(p).commonTriage===l.shownTriage),o=H1(n,l.severityMode),i=jm(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=>(YM(p)??"__own__")===B.focusedPkg),B.showAll||(u=u.filter(p=>V1(p,o,i)))):u=B.showAll?t:t.filter(p=>V1(p,o,i)),{treeData:e,files:u,ownCounts:o,transitiveCounts:i,severitySets:s,colorSets:a,fileFindings:c}}function Fx(){let e=Yl();if(!e)return;let t=Lx();t&&e.refreshSidebar(t,{isBundleContext:l.currentView==="bundles"})}function Bx(){let e=Yl();if(!e)return;let t=Lx();t&&e.refreshTopPkgs(t)}function Tj(e){return`${yt[e]??e} findings`}function Lj(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 Fj(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?Tj(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]}">${h}<span>${t[0]}</span></span>`:t.length>1&&(b=d`<span class="file-chip" data-copy-report="${t.join(`
147
+ `)}">${g}<span>${t.length} reports</span></span>`);let v=l.reports.flatMap(be=>be.groups.flat()),w=`${i} ${`finding${i===1?"":"s"}`}`,x=a||l.currentWorkspace?bm.filter(be=>be!=="type"):bm,_=gE(v,x),S=l.currentWorkspace?T3(l.reports).map(be=>qs[be]??be):[],M=[..._,...S],A=m;if(i>0){let be={};for(let qe of e){let fr=ue(xo(qe),l.severityMode);fr&&(be[fr]=(be[fr]||0)+1)}let wn=Ae.filter(qe=>be[qe]>0);wn.length>0&&(A=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]})}" data-tooltip="${fr}"></span>`})}</span>`)}let P=new Set(l.reports.map(be=>be.repo??null)),L=P.size===1?[...P][0]:null,R=Lj(r,n,L),W=d`<span class="sep" aria-hidden="true"></span>`,ce=l.currentView==="files",St=(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}${R}${St}${U8()}</h1><div class="meta-row"><span>${w}</span> ${A} ${M.length>0?d`${W}${M.map(be=>d`<span class="tag">${be}</span>`)}`:m}</div></div></header>`}function U8(){if(te.status!=="online")return m;if(!Oj.has(l.currentView))return m;let e=b8();if(!e)return m;let{workspaceId:t,fileNames:r,mode:n}=e,o=S6(t);if(o.length>0&&Bj(t,o,{onSync:()=>Ax(t,n,r),retry:E}),n==="single"){let y=r[0];if(o.includes(y))return B8({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:()=>Ax(t,n,r)});let x=K0(t,y)?"cloud":"local";return B8({status:x,label:x,title:x==="cloud"?"Synced to remote":"Local only \u2014 click to upload",onClick:x==="local"?()=>O8({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=Y0(t),c=r.filter(y=>!K0(t,y)),u=s.filter(y=>!$6(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(),Ax(t,n,r)}}">${j8()}<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(),Mx({workspaceId:t,cloudCount:a,localFileNames:r,localBundles:s})}}">${V8()}<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(),O8({workspaceId:t,items:p})}}">${H8()}<span>${p.length} local</span></button>`,k=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,x)=>x===0?y:d`${k}${y}`)}</div>`}function Ax(e,t,r){let n=Q().find(s=>s.id===e),o=t==="single"?_x(n?.reports??[],l.storedFiles??[],r):r,i=n&&Array.isArray(n.bundles)?n.bundles:[];return Mx({workspaceId:e,cloudCount:Y0(e),localFileNames:o,localBundles:i,autoRun:!0})}function B8({status:e,label:t,title:r,onClick:n}){let o=e==="cloud"?V8():e==="differ"?j8():H8(),i=d`<span class="sync-badge-label">${t}</span>`;return typeof n!="function"?d`<span class="report-sync-badge" data-status="${e}" data-tooltip="${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 H8(){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 j8(){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 V8(){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 O8({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 y8({workspaceId:e,items:t})}function Nj(e){return Object.values(e).some(r=>r>0)||l.filterSeverities.size>0?d`<severity-chips .counts="${e}"></severity-chips>`:m}function Pj(e){return Object.values(e).some(r=>r>0)||l.filterColors.size>0?d`<triage-filter .counts="${e}"></triage-filter>`:m}function Dj(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:k,hasFlagged:w,hasDuplicates:y,hasCrossContext:x,hasAppStacked:_,showSecurity:S,showSeverityMode:M,revalidateOptions:A,showPartial:P,canDropLayer:L,canDetailLayer:R,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||A.length>0)?d`<conf-filter ?range-disabled="${!u}" .revalidateOptions="${A}" ?has-partial="${P}"></conf-filter>`:m} ${v||k||w||l.filterComment||l.filterFix||l.filterFlagged?d`<annotation-filter .hasComment="${v}" .hasFix="${k}" .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)||x||_||S||l.filterCrossContext||l.filterAppStacked?d`<annotation-filter group="context" .hasDuplicates="${y}" .hasCrossContext="${x}" .hasAppStacked="${_}" .hasSecurityContrast="${S}"></annotation-filter>`:m} ${L||l.revalidateConflicts.size>0?d`<revalidation-switch ?can-drop="${L}" ?can-detail="${R}" ?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} ${Nj(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} ${Pj(o)}<div class="search-row"><toolbar-search kind="findings"></toolbar-search><span class="result-count">${e} of ${t}</span></div></div></div>`}function Ix(e,t){return e.map(r=>({p:xo(r),g:r})).toSorted((r,n)=>t(r.p,n.p)).map(r=>r.g)}function sp(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 Tx(e,t={}){let{variant:r="kanban",active:n=!1,expandedTrackLast:o=!1}=t,i=Ke(e),s=Ne(e),a=Ge(s)||"(untitled finding)",c=r==="kanban",u=r==="kanban-side",p=c&&l.currentWorkspace?iu(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=zj[b]??"?",k=yr(s)&&l.severityMode!=="original",w=Ce(s),y=w?.flagged===!0,x=w?.fix??"",_=w?.comment??"",S=m;c&&x?S=Pe(x)?d`<managed-fix-link class="kanban-action kanban-fix-link" compact="compact" .url="${x}">${Uu}</managed-fix-link>`:d`<button type="button" class="kanban-action mark-fix" data-tooltip="${`Edit fix link: ${x}`}" aria-label="${`Edit fix link: ${x}`}">${Uu}</button>`:c&&(_||C()&&Ue(s))&&(S=d`<comment-preview class="kanban-action" .finding="${s}" .comment="${_}">${Um}</comment-preview>`);let M=d`<div class="kanban-badge-col"><span class="${`kanban-badge sev-${b}`}" data-tooltip="${k?`${ar(b)} \u2014 corrected from ${ar(s.severity)}`:m}" aria-label="${k?`Severity ${ar(b)}, corrected from ${ar(s.severity)}`:`Severity ${ar(b)}`}">${v}${k?"*":""}</span> ${y?d`<span class="kanban-flag" aria-label="Flagged">${Hm}</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" data-tooltip="${`Confidence ${s.confidence}/10`}">${s.confidence}</span>`} ${p?d`<span class="kanban-analyzer" role="img" data-tooltip="${qs[p]}" aria-label="${qs[p]}">${V(ot[p])}</span>`:m}</div>`;return c?d`<div class="${z(f)}" data-gid="${de(e)}" data-kanban-source draggable="${Ii(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 Uj(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 q8(e){return!e||!Gs(Ne(e))?m:d`<button type="button" class="finding-history detail-action" data-finding-history data-gid="${de(e)}" aria-label="View 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 Y8(e,t=m,r=!1){l.focusCodeTick;let n=$M(e),o=jl(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:q8(e)} ${sp(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="${sf}" aria-valuemax="${af}" 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"><span class="focus-code-file" data-tooltip-truncated data-tooltip="${n.file}">${n.file}</span> ${n.range?d`<span class="focus-code-line">:${Qh(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">${Ox}</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">${Nx}</button></div>`:m}</header><div class="focus-code-body">${Uj(n)}</div>`}</div>`:m}</div>`}function X8(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">${q8(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?K8:G8}</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?Y8(e,p,!0):sp(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">${Ox}</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">${Nx}</button></div></div><div class="kanban-detail-side-body">${oe(c,f=>de(f),f=>Tx(f,{variant:"kanban-side",active:de(f)===a}))}</div></aside>`}</div>`}function Hj(e,t){if(l.viewMode==="table"){let n=l.sortBy==="file"?Ix(e,N8):e;return n.length===0?m:($g=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">${sp(t)}</div></aside>`:m}</div>`)}if(l.viewMode==="focus"){if(e.length===0)return m;let n=e.indexOf(t);W8=n;let o=t,i=n===0,s=n===e.length-1;return d`<div class="focus-view">${Y8(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">${Ox}</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">${Nx}</button></div></div><div class="focus-sidebar-body">${oe(e,a=>de(a),a=>Tx(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?K8:G8}</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)=>Tx(g,{active:de(g)===l.kanbanPopoverGid,expandedTrackLast:(b+1)%n.length===0}))}</div></div>`})}</div>${X8(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=xo(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"?Ix(n.get(i),(c,u)=>parseInt(c.line,10)-parseInt(u.line,10)):n.get(i),a=xo(s[0]);return d`<div class="file-group"><div class="file-header"><span>${_w(a,ir(a))}</span> <span class="count">${s.length}</span></div><div class="file-body">${oe(s,c=>de(c),c=>sp(c,!1,null,!0))}</div></div>`})}`}let r=l.sortBy==="file"?Ix(e,N8):e;return d`${oe(r,n=>de(n),n=>{let o=Ne(n),i=x4(o,ir(o)),s=Js(o),a=po(o),c=n.length>1;return d`<div class="${z({"flat-group":!0,"multi-case":c})}"><div class="flat-group-loc"><span class="file">${_w(o,ir(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>${sp(n,!0,null,!0)}</div>`})}`}function jj(){l.bundleSourceFile&&oa().catch(()=>{});let e=document.querySelector("#bundle-source-overlay-slot");e&&ae(e8(),e)}function E({animate:e=!0}={}){let t=P8;P8=l.currentView;let r=t!==null&&t!==l.currentView;if(e&&r&&typeof document.startViewTransition=="function"&&!matchMedia("(prefers-reduced-motion: reduce)").matches){document.startViewTransition(()=>z8()).ready.catch(()=>{});return}z8()}function lc(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 qu(){let e=l.revalidateConflicts.size>0,t=!e&&Gh(l.reports);return e?l.showRevalidation!==!1&&(xg=l.showRevalidation,l.showRevalidation=!1):(xg!==null&&(l.showRevalidation=xg,xg=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),_i(l.showRevalidation,l.upstreamOnly),t}function z8(){Sr()||um(),jj(),Jh(l.reports),Zh(l.reports)&&Ti();let e=qu(),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{Fi(l.bundleDetailsTab,l.bundleSourceFile)&&oa().catch(()=>{});let O=lc("bundles-slot");O&&ae(o8(l.bundles),O);let j=l.bundleDetails,ne=l.selectedBundle&&j&&(j.json||j.bundle);if(ne&&l.bundleDetailsTab==="graph"){let Te=document.querySelector("#bundle-graph-slot");if(Te){let Ct=JI(l.bundleDetails);if(Ct){ZI(Ct);let UF={hideAllFiles:!0,triageCounts:XI(l.bundleDetails,new Set(Ct.strippedToOrig.values())),triageStates:["inprogress","fixed","invalid","deleted"],showSplitOwnDirs:Ct.canSplitOwnDirs,showPackagesView:Ct.canPackagesView,showBundleLayouts:!0};W1(Te,Ct,UF,yg,wg)}}}if(ne&&!j.metadataOnly&&l.bundleDetailsTab==="terminal"){let Te=document.querySelector("#bundle-terminal-slot");Te&&qM(Te,l.bundleDetails)}N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 bundles";return}if(l.currentView==="packages"){let O=lc("packages-slot");O&&ae(i8(),O),N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 packages";return}if(l.currentView==="repositories"){let O=lc("repositories-slot");O&&ae(c8(),O),N.classList.add("active"),Ye.classList.add("hidden"),document.title="DeepView \u2014 repositories";return}if(l.currentView==="links"){if(l.currentLinks){let O=lc("links-slot"),j=Sr();O&&ae(d`${m8(U8())}${j?X8(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=lc("scan-slot");if(O&&!O.firstElementChild){let j=document.createElement("local-scan-page");j.selection=l.scanSelection,O.append(j),j.updateComplete.then(()=>nr(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=Vj[l.currentView];if(r){let O=lc(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),Te=Ct=>nr(Ct,{gate:Sp=>!Object.hasOwn(Sp.dataset,"tooltipTruncated")||Sp.scrollWidth>Sp.clientWidth});ne.localImportSource=p0(),l.currentView==="manage-import"&&(ne.localDeps=u0(),ne.promptPassword=Wh,ne.resolveConflicts=Tl,ne.confirmTriageImport=T4),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=Te),O.append(ne),(async()=>{await customElements.whenDefined(r.tag),await ne.updateComplete,Te(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=Er(),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){yr(j)&&(p=!0);let ne=Ce(j);ne&&(ne.comment&&(a=!0),ne.fix&&(c=!0),ne.flagged===!0&&(u=!0))}let f=sm(),h=n.some(O=>O.some(j=>f.has(j.id)));h||(l.filterDuplicates="");let g=s.some(Ow),b=s.some(Nw);g||(l.filterCrossContext=""),b||(l.filterAppStacked="");let v=K4(s);v||(l.filterSecurity="");let k=new Set,w=!1,y=!1,x=!1;for(let O of s)for(let j of O){let ne=$r(j);ne&&k.add(ne)}for(let O of Jw()){let j=!1,ne=!1;for(let Te of O){let Ct=$e(Te);Ct==="partial"&&(y=!0),!((Ct==="unreachable"||Ct==="refuted")&&(x=!0,l.currentWorkspace))&&(Ct==="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),A=s.map(Ur).filter(O=>O.length>0),P=A.length>0&&Tw(A),L=Bw(n),R=n.some(O=>O.some(j=>or(j.file))),W=n.some(O=>O.some(j=>!or(j.file))),ce=!1,St=!1,be;e:for(let O of n)for(let j of O)if(!St)St=!0,be=j.file;else if(j.file!==be){ce=!0;break e}let wn=n.some(O=>O.some(j=>!j.repo?.github&&!or(j.file))),qe=new Set;for(let O of n)for(let j of O)!or(j.file)&&j.repo?.github&&qe.add(j.repo.github);let fr=qe.size===1?[...qe][0]:null,ts=new Set,Vo=new Set;for(let O of n)for(let j of O)ts.add(j._analyzer??null),Vo.add(wu(j));let bb=Object.keys(Qw),Sc=O=>{if(O==null)return 1/0;let j=bb.indexOf(O);return j===-1?bb.length:j},xp=[...ts].toSorted((O,j)=>{let ne=Sc(O),Te=Sc(j);return ne!==Te?ne-Te:String(O??"").localeCompare(String(j??""))}),Cc=[...Vo].toSorted(D8);if(l.filterAnalyzer){let O=l.filterAnalyzer===Mi?null:l.filterAnalyzer;(!ts.has(O)||ts.size<2)&&(l.filterAnalyzer="")}if(l.filterModel){let O=l.filterModel===Ri?null:l.filterModel;(!Vo.has(O)||Vo.size<2)&&(l.filterModel="")}let Ca=s4(k);l.filterRevalidate&&!Ca.some(O=>O.value===l.filterRevalidate)&&(l.filterRevalidate="");let Ec=lm(s);Ec&&(l.filterRevalidate="confirmed");let Mc=k.has("partial")&&$o();Mc||(l.filterPartial="");let fS=e&&(w||y||!l.currentWorkspace&&x),Ea=!(e&&l.showRevalidation!==!1)&&!l.upstreamOnly&&R&&W;!Ea&&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 Ma=q4(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 Ma){if(O.length===1){let Te=ue(O[0],l.severityMode);I[Te]=(I[Te]||0)+1;let Ct=Ce(O[0])?.color??"none";H[Ct]=(H[Ct]||0)+1;continue}let j=new Set(O.map(Te=>ue(Te,l.severityMode)));for(let Te of j)I[Te]=(I[Te]||0)+1;let ne=new Set(O.map(Te=>Ce(Te)?.color??"none"));for(let Te of ne)H[Te]=(H[Te]||0)+1}let G=O4(Ma),K=[...G].toSorted(D8);if(l.filterRepo){let O=l.filterRepo===Qs?null:l.filterRepo;G.has(O)||(l.filterRepo="")}let Ee=cm(Ai(s)),ut=j1(l.reports),hr=ut?Object.keys(ut).length:0,Ra=hr>1;!Ra&&l.currentView==="files"&&(l.currentView="findings"),!Ra&&l.viewMode==="graph"&&(l.viewMode="kanban");let Rc=Fj(n,M,wn,fr,hr);if(l.currentView==="files"){let O=H1(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(Rc,j),ne&&ae(jM(ut,O),ne),N.classList.add("active"),Ye.classList.add("hidden"),document.title=`DeepView \u2014 ${S||"no analyzer"}`;return}let rs=l.viewMode==="table"&&l.tableSelectedGid&&Ee.some(O=>de(O)===l.tableSelectedGid),Ac=null;l.viewMode==="graph"&&ut&&(Ac=Lx(),Ac||(l.viewMode="kanban"));let $p=!!Ac,ns="findings-content";rs&&(ns+=" with-details"),$p&&(ns+=" with-graph"),o&&(ns+=" with-kanban"),l.viewMode==="focus"&&(ns+=" with-focus");let hS=m,_p=m,mS=m,gS=T8(Ee,l,W8);$g=null,$p||(hS=Dj(Ee.length,s.length,i,I,H,{showSource:Ea,showConfidence:P,showPriority:L,showGraphMode:Ra,showFileSort:ce,kanbanMode:o,showRepo:!!l.currentWorkspace,hasComment:a,revalidateOptions:Ca,showPartial:Mc,canDropLayer:e,canDetailLayer:fS,canUpstreamLens:t,confirmedLocked:Ec,hasFix:c,hasFlagged:u,hasDuplicates:h,hasCrossContext:g,hasAppStacked:b,showSecurity:v,showSeverityMode:p||l.severityMode==="original"},{analyzers:xp,models:Cc,groups:Ma},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>`),mS=Hj(Ee,gS));let Ic=document.querySelector("#header-slot"),kn=N.querySelector(":scope > .findings-content"),PF=kn&&kn.querySelector(":scope > #findings-graph-slot"),DF=kn&&kn.querySelector(":scope > #findings-body-slot"),zF=kn&&(PF?"graph":DF?"body":null)===($p?"graph":"body");if(!Ic||!kn||!N.contains(Ic)||!N.contains(kn)||!zF){let O=$p?'<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="${ns}">${O}</div>`,Ic=document.querySelector("#header-slot"),kn=N.querySelector(":scope > .findings-content")}else kn.className!==ns&&(kn.className=ns);Ic&&ae(Rc,Ic);let bS=document.querySelector("#toolbar-slot");bS&&ae(hS,bS);let vS=document.querySelector("#empty-state-slot");vS&&ae(_p,vS);let yS=document.querySelector("#findings-body-slot");if(yS&&ae(mS,yS),Ac){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"]};W1(O,Ac,ne,Fx,Bx)}}if($g){let O=N.querySelector(".finding-table-slot");O&&(ac||(ac=document.createElement("finding-table")),ac.items=$g,ac.selectedGid=l.tableSelectedGid,ac.parentNode!==O&&O.append(ac))}N.classList.add("active"),Ye.classList.add("hidden"),document.title=`DeepView \u2014 ${S||"no analyzer"}`,C()&&Be?.replaceFindingRoute(L8(gS,l))}var Bj,Oj,N8,$g,W8,ac,G8,K8,Ox,Nx,zj,P8,Vj,D8,xg,qt=$(()=>{"use strict";T();He();Pt();so();Je();un();U();gw();vu();L4();dn();xi();mr();he();ct();pn();e1();Ew();ge();bE();sa();ju();WM();yo();G1();K1();Mo();zl();aa();l8();u8();g8();pm();v8();ip();Fm();w8();S8();R8();I8();F8();wl();Ch();({suggestSync:Bj}=A8({open:e=>M8({names:e})})),Oj=new Set(["findings","files","links"]);N8=(e,t)=>e.file.localeCompare(t.file)||parseInt(e.line,10)-parseInt(t.line,10),$g=null,W8=0,ac=null;G8=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>`,K8=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>`,Ox=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>`,Nx=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>`,zj={critical:"C",high:"H",medium:"M",low:"L",high_bug:"H",bug:"B",informational:"i"};P8=null;Vj={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"}},D8=(e,t)=>e==null&&t==null?0:e==null?1:t==null?-1:e.localeCompare(t),xg=null});var pA={};yb(pA,{createManagedAnnotationRead:()=>xk,hydrateManagedReportTriage:()=>oV,initManagedTriagePush:()=>zx,refreshManagedReportTriage:()=>kk,resetManagedTriage:()=>cp});function _g(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 ap(e){return e==null?"":JSON.stringify([e.color??"",e.triage??"",e.fix??"",e.flagged])}function Zj(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 Px(){return Array.isArray(l.managedReports)&&l.managedReports.length>0?l.managedReports:l.managedReport==null?[]:[l.managedReport]}function Q8(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 eV(e){let t=Px();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 Dx(){let e=l.managedSession;return l.serverMode==="managed"&&l.localMode!==!0&&e!=null&&kl(e.role,"triage")}function tV(e){return e>=400&&e<500&&e!==401&&e!==403&&e!==408&&e!==429}function rV(e,t){let r=Ki.get(e.key);r==null&&(r={report:e.report,key:e.key,teamId:e.teamId,changes:new Map},Ki.set(e.key,r));for(let n of t)r.changes.has(n)||r.changes.set(n,e.changes.get(n))}async function nV(e,t){if(!Dx())return;let r=[...e.changes.keys()],n=0;for(;n<r.length;){let o=n,i={},s=0,a=Jj;for(;n<r.length&&s<200;){let p=r[n],f=Qj(`${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 n3(e.report.id,i,l.managedSession?.csrfToken,e.teamId),u=c>=200&&c<300;if(!u&&!tV(c)){rV(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:ap(f),fix:g})}}}function Sg(){No!=null&&(clearTimeout(No),No=null);let e=[...Ki.values()];if(Ki.clear(),e.length===0)return;let t=new Set;for(let r of e)cc=cc.then(()=>nV(r,t)).catch(n=>{console.warn("managed: triage push failed",n)});cc=cc.finally(()=>{for(let r of t)aw(r)}).catch(r=>{console.warn("managed: Fix cache invalidation failed",r)})}function eT(){if(!(Px().length===0||!Dx()||dc.size===0)){for(let t of Z8()){let r=_g(l.triage.get(t)),n=ap(r);if((gn.get(t)?.key??"")===n)continue;if(!Zj(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=eV(t);if(o==null||!dc.has(lp(o.id)))continue;let i=l.currentManagedTeam,s=lp(o.id,i),a=Ki.get(s);a==null&&(a={report:o,key:s,teamId:i,changes:new Map},Ki.set(s,a)),a.changes.set(t,r)}Ki.size!==0&&(No!=null&&clearTimeout(No),No=setTimeout(Sg,Xj))}}function zx(){J8||!Dx()||(J8=!0,i0(eT))}function cp(){j5(),l.managedComments?.clear(),globalThis.document?.dispatchEvent(new Event("managed-comments-reset")),No!=null&&(clearTimeout(No),No=null),Ki.clear(),dc.clear(),gn.clear()}async function oV(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&&Px().some(h=>h.id===e);if(!c()||(dc.delete(lp(e)),Sg(),!await Ux(r)||!c()))return!1;let u=n?(await n(e))?.entries:await ew(e,i,{signal:r});if(u==null||!c())return!1;let p=!1,f=Q8(e);for(let h of f){if(!Object.hasOwn(u,h)){gn.delete(h);continue}let g=_g(u[h]);gn.set(h,{key:ap(g),fix:g?.fix??""});let b=g?.triage==null?l.triage.get(h)?.ignoredReports:void 0;rh(l.triage,h,{...g,ignoredReports:b})&&(p=!0)}if(dc.add(lp(e)),p){if(await _e(),!c())return!1;t&&E()}return eT(),!0}function Ux(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}),cc.then(()=>r(!0),()=>r(!1))}):cc.then(()=>!0)}async function kk(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&&dc.has(lp(e,o));if(!a()||(Sg(),!await Ux(t)||!a()))return!1;let c=Q8(e),u=new Map([...c].map(g=>[g,gn.get(g)])),p=r?(await r(e))?.entries:await ew(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=_g(l.triage.get(g));if(gn.get(g)!==b||ap(v)!==(b?.key??""))continue;let k=_g(p[g]);(b?.fix??"")!==(k?.fix??"")&&(h=!0),gn.set(g,{key:ap(k),fix:k?.fix??""});let w=k?.triage==null?l.triage.get(g)?.ignoredReports:void 0;rh(l.triage,g,{...k,ignoredReports:w})&&(f=!0)}if(h&&aw(o),f){if(await _e(),!a())return!1;E()}return!0}function xk(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()=>(Sg(),!await Ux(t)||t?.aborted?null:Z6(e,{signal:t,reportId:r})))(),(await n)?.(o)??null)}var Xj,Jj,Qj,gn,dc,lp,Ki,No,cc,J8,tg=$(()=>{"use strict";U();md();Qd();_3();Kt();Lh();qt();Xj=500,Jj=14;Qj=e=>new TextEncoder().encode(e).length,gn=new Map,dc=new Set,lp=(e,t=l.currentManagedTeam)=>JSON.stringify([t,e]),Ki=new Map,No=null,cc=Promise.resolve();J8=!1});var rT,tT=$(()=>{rT=`*,*: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 qi,dp=$(()=>{qi=`: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 Hx(){if(!bt)return;if(await mt(),C()){bt.hidden=!0;return}if(!_n()){bt.hidden=!0;return}let e=me();bt.hidden=!1;let t=Qt();bt.classList.toggle("encrypted",e&&t),bt.classList.toggle("locked-pending",e&&!t),e&&t?(bt.dataset.tooltip="Encryption on \u2014 click to disable",bt.setAttribute("aria-label","Disable encryption"),ae(nT,bt)):e?(bt.dataset.tooltip="Encryption on, locked \u2014 click to unlock",bt.setAttribute("aria-label","Unlock encrypted data"),ae(nT,bt)):(bt.dataset.tooltip="Encryption off \u2014 click to enable",bt.setAttribute("aria-label","Enable encryption"),ae(aV,bt))}async function lV(){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 Gi({migrate:async({open:t})=>{await Wi({open:t}),await Ga({open:t}),await la({open:t}),await da({open:t})}}))?.disabled&&alert(`Encryption disabled. Your data is now plaintext.
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 Wb({migrate:async({open:t})=>{await Yb({open:t}),await c0({open:t}),await iy({open:t}),await ay({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
- `||l==="\r"?(r.push(n),t.push(r),r=[],n="",l==="\r"&&e[i+1]===`
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 oT(){Hx()}function iT(e){if(!e||e===bt)return;bt=e;let t=!1;bt.addEventListener("click",async()=>{if(await mt(),!C()&&!t){t=!0;try{if(!me()){await Jm();return}if(!Qt()){await Qm();return}await lV()}finally{t=!1}}}),rt(Hx),Hx()}var nT,aV,bt,jx=$(()=>{"use strict";T();U();fk();gk();Zn();nT=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>`,aV=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>`,bt=null});var aT,sT=$(()=>{aT=`.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 Wx(){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 lT(){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 Vx,cT=$(()=>{"use strict";T();pe();U();sT();Vx=class extends D{static styles=[...D.styles,F(aT)];static properties={_retryDenied:{state:!0}};constructor(){super(),this._retryDenied=!1}_onConfirm=()=>this._finish(null);_onRetry=async()=>{if(await fl()){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=Wx(),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",Vx)});function Kx(){return Wx()==="webkit"}function dT(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 uT(){if(!to)return;if(C()||!eo||eo.persisted!==!1||!qx){to.hidden=!0;return}to.hidden=!1;let e=eo.usage===null||eo.quota===null?"":` Using ${dT(eo.usage)} of ${dT(eo.quota)}.`;to.querySelector(".storage-label").textContent="Storage at risk",to.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. "+(Kx()?"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 fT(e,t){let r=t?" (user gesture)":"";if(e){console.info(`storage: persistent-storage request granted${r}`);return}let n=!Kx()&&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 `+(Kx()?"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 Eg(){if(await mt(),!to||C()){uT();return}let[e,t]=await Promise.all([f0(),(async()=>{try{return(await fe()).length>0||await kd()}catch{return!1}})()]);eo=e,qx=t,uT()}function Yx(){!to||Gx||(Gx=setTimeout(()=>{Gx=0,Eg()},1e3))}async function pT(){if(Cg||(await Eg(),C()||eo?.persisted!==!1||!qx||Cg))return;Cg=!0;let e=await fl();fT(e,!1),await Eg()}async function dV(){if(eo&&eo.persisted===!1){Cg=!0;let e=await fl();fT(e,!0),e||await lT()}await Eg()}function hT(e){to=e,to&&(to.addEventListener("click",()=>{dV()}),wr((t,r)=>{Yx(),r==="save"&&pT()}),pT())}var to,eo,qx,Cg,Gx,mT=$(()=>{"use strict";U();Zn();cT();to=null,eo=null,qx=!1,Cg=!1,Gx=0});function Xx(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=Us(n),i=n.reports.filter(s=>Lt(s)!==Xe).length;return d`<button type="button" class="landing-workspace" data-landing-workspace="${n.id}">${V(yi)} <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 gT=$(()=>{"use strict";T();Pt();Je();U();ht()});function Jx(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?Yi?Yi.options=e:Yi={options:e,elapsed:!1,timer:setTimeout(()=>{Yi.elapsed=!0,Jx(Yi.options)},1e3)}:(clearTimeout(Yi?.timer),Yi=null);let g=h&&!Yi.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",k=i.filter(w=>w.reports.length>0||w.bundles?.length>0);if(zn()&&!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">${k.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>${k.length>0?d`<nav class="managed-team-list" aria-label="Teams">${oe(k,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(yi)}</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",rr],["manage-scans","Scans",Ml],["manage-reports","Reports",Rl]].map(([w,y,x])=>d`<button type="button" class="managed-content-card" data-managed-page="${w}"><span class="managed-content-icon" aria-hidden="true">${V(x)}</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(Ph)}</span><span>Manage</span></button></div>`:m}`,u)}var Yi,bT=$(()=>{"use strict";T();Pt();Je();ht();Ws();Yi=null});var Mg,Zx=$(()=>{Mg=`.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 vT({workspace:e}={}){return $i("workspace-export-dialog",{workspace:e??null},t=>{t.workspace=null})}var pV,Qx,yT=$(()=>{"use strict";T();U();mr();pe();wo();Ys();Zx();pV=[{id:"workspace",label:"Export workspace"},{id:"raw",label:"Raw reports export"}],Qx=class extends D{static styles=[...D.styles,F(Pr),F(Mg)];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 M0(this.workspace):await E0(this.workspace,{password:this._noPassword?void 0:this._password,includeBundleBytes:this._includeBundleBytes});if(this._settled)return;ao(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 rm({tabs:pV,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",Qx)});async function wT(e){await vT({workspace:e})}var kT=$(()=>{"use strict";yT()});function xT(){return le("new-workspace-dialog")}var e$,$T=$(()=>{"use strict";T();pe();e$=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",e$)});function _T({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 t$,ST=$(()=>{"use strict";T();pe();ko();t$=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",t$)});function CT({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(Fa(s.detail?.cause))}),document.body.append(i)})}var r$,ET=$(()=>{"use strict";T();U();mr();pe();Ys();r$=class extends D{static styles=[...D.styles,F(Pr)];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 T0({id:this.workspaceId,name:this._name.trim(),privateKeyBase64:this.privateKeyBase64,password:this._password});if(this._settled)return;this._url=F0(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",r$)});function MT({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 n$,RT=$(()=>{"use strict";T();pe();Ll();n$=class extends zr{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",n$)});function AT({name:e,inRemote:t}={}){return le("delete-bundle-dialog",{bundleName:e??"",inRemote:!!t})}var o$,IT=$(()=>{"use strict";T();pe();Ll();o$=class extends zr{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",o$)});function TT({name:e,workspaceName:t}={}){return le("detach-bundle-dialog",{bundleName:e??"",workspaceName:t??""})}var i$,LT=$(()=>{"use strict";T();pe();Ll();i$=class extends zr{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",i$)});function FT({name:e,workspaceName:t}={}){return le("detach-report-dialog",{reportName:e??"",workspaceName:t??""})}var s$,BT=$(()=>{"use strict";T();pe();Ll();s$=class extends zr{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",s$)});function OT(){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 a$,NT=$(()=>{"use strict";T();pe();a$=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",a$)});function PT(){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 l$,DT=$(()=>{"use strict";T();pe();l$=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",l$)});async function zT(e,{openManagedReport:t,readTeam:r=Rh,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:Oi(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 k=p.get(b.id)?.find(y=>y.id===v.id);if(!i())return null;if(k==null)continue;let w=await qR(JSON.stringify(k.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})=>At("report",v.filename))),b=await f(c.filter((v,k)=>g[k]===e.report));if(b||!i())return b}if(e.workspace){let g=await Promise.all(s.map(v=>At("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=Oi(e.id);if(g)return g}return f(c)}var UT=$(()=>{"use strict";U();uk();Kt();Ni()});async function HT(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 Oi(e)}async function jT(e,t){if(C())return zT(e,t);let{openReport:r,openWorkspace:n}=t,[o,i]=await Promise.all([Vy(e.report),jy(e.workspace)]);async function s(p){let f=Bi(p,i?.id);return(l.currentFile!==p||l.currentWorkspace||l.currentReportWorkspace!==f)&&await r(p,void 0,{workspaceId:f}),Oi(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=Oi(e.id);if(p)return p}let a=Oi(e.id);if(a)return a;let c=l.reports.map(p=>p.fileName).filter(Boolean),u=await Wy(e.id,{skip:c});return u?await s(u):null}var VT=$(()=>{"use strict";U();Ni();UT()});function hV(e){let t=GT.get(e);if(t===void 0){let r=getComputedStyle(e).overflowY;t=r==="auto"||r==="scroll"||r==="overlay",GT.set(e,t)}return t}function u$(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(hV(t))return t;t=t.parentNode}return null}function mV(e){for(let t of e)uc.get(t.target)?.cb(t.isIntersecting)}function gV(e){let t=e??document,r=WT.get(t);return r||(r=new IntersectionObserver(mV,{root:e,rootMargin:fV,threshold:0}),WT.set(t,r)),r}function pc(e,t){let r=uc.get(e);r?.io&&r.io.unobserve(e),uc.set(e,{cb:t,io:null}),c$.push(e),d$||(d$=!0,queueMicrotask(bV))}function bV(){d$=!1;let e=c$;c$=[];for(let t of e){let r=uc.get(t);!r||r.io||(r.io=gV(u$(t)),r.io.observe(t))}}function Po(e){let t=uc.get(e);t&&(t.io?.unobserve(e),uc.delete(e))}var fV,WT,uc,c$,d$,GT,up=$(()=>{"use strict";fV="100% 0px",WT=new WeakMap,uc=new WeakMap,c$=[],d$=!1,GT=new WeakMap});var qT={};yb(qT,{revealFinding:()=>p$,revealFindingInReport:()=>Ig});function $V(e){Ag!==null&&clearTimeout(Ag);for(let t of document.querySelectorAll(`.${Rg}`))t.classList.remove(Rg);e.classList.add(Rg),Ag=setTimeout(()=>{e.classList.remove(Rg),Ag=null},vV)}function _V(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>=wV||++o>=kV?t():requestAnimationFrame(i)};requestAnimationFrame(i)})}function SV(e){let t=0,r=window.innerHeight,n=u$(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 CV(e){let t=e.getBoundingClientRect();if(t.height===0)return!1;let{top:r,bottom:n}=SV(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 EV(e){e.scrollIntoView({block:"center",behavior:"smooth"});for(let t=0;t<xV;t++){if(await _V(e),!e.isConnected||CV(e))return;e.scrollIntoView({block:"center",behavior:"instant"})}}async function MV(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 KT(e,t,r=()=>!0){let n=B1(e.group,t),o=sr(n);if(o&&mm(o)&&queueMicrotask(_e),E(),await Y({revealSelection:!0}),!r())return{ok:!1};let i=await MV(n);return r()?i?(typeof i.ensureRendered=="function"&&await i.ensureRendered(),await EV(i),r()?($V(i),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function p$(e,{openManagedReport:t=Lo,isCurrent:r=()=>!0}={}){if(!e?.id)return{ok:!1,reason:"This link is missing a finding id."};let n=await jT(e,{openReport:ur,openWorkspace:Gr,openManagedReport:t,isCurrent:r});return r()?n?await KT(n,e.id,r):{ok:!1,reason:C()?"Couldn't find that finding in the team reports you can access.":yV}:{ok:!1}}async function Ig(e,t,r=null){if(!e||!t)return{ok:!1,reason:"Missing finding id or report name."};let n=await HT(e,t,r,{openReport:ur,openManagedReport:Lo});return n?await KT(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 vV,Rg,yV,Ag,wV,kV,xV,Tg=$(()=>{"use strict";U();mr();Ni();VT();ct();Ui();up();qt();Zn();vV=1600,Rg="link-target",yV="Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.",Ag=null,wV=3,kV=150,xV=5});function Lg(e){let t=document.querySelector("#drop-zone");t&&(e?t.dataset.serverModePending="true":delete t.dataset.serverModePending)}function RV(){return On().size}function AV(){return Fs().size}function TV(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?Bi(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===XT)){XT=a;for(let c of s){let u=mp.get(c.id)??new Set;u.add(o),mp.set(c.id,u)}}}function JT(e,t={}){let n=`file-item${e===l.currentFile&&(t.workspaceId??null)===Bi(e)&&(l.currentView==="findings"||l.currentView==="files"||l.currentView==="links")?" current":""}${t.indented?" indented":""}`,o=Ie(e),i=Rd(e),s=Se[it(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 n7(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 BV(){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">${LV}</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=k3(l.managedTeams,Xi);return e.length===0?m:d`${n7("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="${()=>{Lo(t)}}">${jV}<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`}" @click="${()=>{Y6(t)}}">${i7}</button>`:m}</li>${oe(r,o=>o.id,o=>OV(t,o))} ${oe(n,o=>o.id,o=>PV(t,o))}`)}`}function OV(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="${uw(t)||m}" data-tooltip-placement="right-start" @click="${()=>{NV(e,t)}}">${V(Se[pw(t.filename,t.analyzer)])}<span class="file-label">${t.filename}</span></button></li>`}function NV(e,t){return Lo(e,t.id)}function PV(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="${uw(t)||m}" data-tooltip-bundle="${t.kind||m}" data-tooltip-stats="${w3(t)||m}" data-tooltip-commit="${t.summary?.commit||m}" data-tooltip-placement="right-start">${o7}<span class="file-label">${t.filename}</span></button></li>`}function DV(){return d`<li class="file-group-header bundles-header" data-default-bundles="true"><span class="group-label">Bundles</span></li>`}function QT(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}`}">${o7}<span class="file-label">${n}</span></button></li>`}function zV(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 UV(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 · ${Ie(e)}</em></span></span></li>`}function GV(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">${HV}<span class="file-label" .textContent="${e.name}"></span></button> <button type="button" class="workspace-share" data-action="share-workspace" aria-label="Share workspace by link">${i7}</button> <button type="button" class="workspace-export" data-action="export-workspace" aria-label="Export workspace">${VV}</button> <button type="button" class="workspace-leave" data-action="leave-workspace" aria-label="Leave workspace">${WV}</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="${gc}">${n.toLocaleString()} report${n===1?"":"s"}</button> ${o>0?d`<button type="button" data-workspace-section="bundles" aria-expanded="${String(s)}" ?disabled="${gc}">${o.toLocaleString()} bundle${o===1?"":"s"}</button>`:m}</span></div>`:m}</li>`}function fc(e){return Xi?Ie(e).toLowerCase().includes(Xi):!0}async function Y({revealSelection:e=!1}={}){await mt();let t=En();if(Jx({serverMode:t,session:l.managedSession,teams:l.managedTeams,sessionPending:ga,teamsPending:ba,alternateMode:en(l.serverModeConfig)?"e2e":"local",onSwitchMode:a7}),fg(),C()){if(!ga&&!ba&&!hc&&!Og&&Hi({catalogOnly:!0}),l.bundles=(l.bundles??[]).filter(b=>b.managedId),l.storedFiles=[],Xx([]),!re)return;ae(d`${ZT()}`,b$),re.querySelector('sidebar-view-button[kind="packages"]')?.setAttribute("hidden",""),re.querySelector('sidebar-view-button[kind="repositories"]')?.setAttribute("hidden",""),re.querySelector("#storage-status")?.setAttribute("hidden",""),ro();return}if(re?.querySelector('sidebar-view-button[kind="packages"]')?.removeAttribute("hidden"),re?.querySelector('sidebar-view-button[kind="repositories"]')?.removeAttribute("hidden"),await d0(),t!==En()){await Y();return}Or().catch(()=>{}),jd().catch(()=>{});let r=await fe();if(t!==En()){await Y();return}let n=Q();TV(n,e),Xx(n);let[o]=await Promise.all([Vt(),...n.map(b=>At("workspace",b.id))]);if(t!==En()){await Y();return}if(l.bundles=o,l.storedFiles=r,Yx(),!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 YT)u.set(b,[]);for(let b of r){if(s.has(b)||!fc(b))continue;let v=it(b);u.has(v)||u.set(v,[]),u.get(v).push(b)}let p=n.filter(b=>!Xi||b.name.toLowerCase().includes(Xi)||b.reports.some(v=>fc(v))?!0:b.bundles.some(v=>{let k=a.get(v);return k&&fc(k.name)})),f=o.filter(b=>!c.has(b.integrity)&&fc(b.name));ae(d`${ZT()} ${C()&&n.length===0?m:BV()} ${oe(p,b=>b.id,b=>{let v=[],k=[];for(let R of b.reports)fc(R)&&(i.has(R)?v.push(R):k.push(R));v.sort(f$),k.sort(f$);let w=[],y=[];for(let R of b.bundles){let W=a.get(R);W?(!Xi||fc(W.name))&&w.push(W):Xi||y.push(R)}let x=oA(b)??Us(b),_=x?.appMode??V0(b)===!0,S=mp.get(b.id),M=!_||gc||S?.has("reports")===!0,A=!_||gc||S?.has("bundles")===!0,P=[...v,...k].filter(R=>Lt(R)!==Xe).length,L=w.length+y.length;return d`${GV(b,{app:x,compact:_,reports:P,bundles:L,showReports:M,showBundles:A})} ${M?d`${v.map(R=>JT(R,{indented:!0,workspaceId:b.id}))}${k.map(R=>UV(R,b.id))}`:m} ${A?d`${w.map(R=>QT(R,{workspaceId:b.id}))}${y.map(R=>zV(R,b.id))}`:m}`})} ${YT.map(b=>{let v=(u.get(b)??[]).toSorted(f$),k=b==="default";return v.length===0&&!(k&&Fg)?null:d`${n7(IV[b]??b,{dropTarget:k})} ${v.map(w=>JT(w))}`})} ${f.length>0||Bg?DV():null} ${oe(f,b=>b.integrity,b=>QT(b))}`,b$);let h=re.querySelector('sidebar-view-button[kind="packages"]');h&&(h.count=RV());let g=re.querySelector('sidebar-view-button[kind="repositories"]');g&&(g.count=AV()),ro(),Sy(r,s7)}function s7(){h$||(h$=!0,requestAnimationFrame(()=>{h$=!1,Y().catch(e=>console.warn("counts repaint:",e))}))}async function a7(){re?.querySelector("#user-menu")?.hidePopover?.(),qr?await oW():av()&&await Dg()}async function e7(e){let t=e.target.closest("[data-workspace-section]");if(t){if(gc||t.disabled)return;let p=t.closest("[data-workspace-id]")?.dataset.workspaceId;if(!p)return;let f=t.dataset.workspaceSection,h=mp.get(p)??new Set;h.has(f)?h.delete(f):h.add(f),mp.set(p,h),await Y();return}if(e.target.closest('[data-action="toggle-client-mode"]')){await a7();return}if(e.target.closest('[data-action="go-home"]')){await Jn();return}let r=e.target.closest("[data-managed-bundle]");if(r){Be.navigate(vt({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;Co(p,void 0,{workspaceId:f}),To(p,l.bundleDetailsTab),E(),Y(),Eo(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 xT();p&&(await Zm(),await By(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&&CT({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&&wT(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 lh(h)}catch(w){alert(`Couldn't read reports to analyze triage impact: ${w.message}`);return}let{confirmed:b,mode:v,triage:k}=await _T({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 uA(f.id,v,{triage:k})}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)&&Gr(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,x=Q().filter(S=>Array.isArray(S.bundles)&&S.bundles.includes(w)).filter(S=>q0(S.id,w)).map(S=>S.id),{confirmed:_}=await AT({name:y,inRemote:x.length>0});if(!_)return;if(l.selectedBundle!==w){alert(`Active bundle changed during confirmation; aborting delete of "${y}".`);return}try{await dA({deleteFromRemoteWorkspaceIds:x})}catch(S){alert(`Failed to delete bundle: ${S.message}`)}return}if(!l.currentFile)return;let p=l.currentFile,f;try{f=await lh([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=>yl(w.id,p)).map(w=>w.id),g=h.length>0,b=Hh(p)?"links file":"report",{confirmed:v,triage:k}=await MT({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 lA({triage:k,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()&&fp&&te.setServerUrl(fp),te.setEnabled(!0)):te.setEnabled(!1);return}for(let p of Object.keys(Ng))if(e.target.closest(`[data-action="${p}"]`)){re?.querySelector("#user-menu")?.hidePopover?.(),da(p);return}if(e.target.closest('[data-action="managed-logout"]')){i3(l.managedSession?.csrfToken);return}if(e.target.closest("#sidebar-toggle")){if(C())return;Ji.classList.toggle("collapsed");try{localStorage.setItem("deepview.sidebarCollapsed",Ji.classList.contains("collapsed")?"1":"0")}catch{}}}function qV(e){gc=e.target.value.length>0,Xi=e.target.value.trim().toLowerCase(),Y()}function l7(){return te.getServerUrl()||fp?Q().length>0:!1}function c7(){let e=re?.querySelector("#auth-status");if(!e)return;let t=re?.querySelector("#manage-status"),r=re?.querySelector("#user-menu"),n=l.managedSession;if(Ji?.toggleAttribute("data-authenticated",n!=null),Ji?.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`${t7(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">${t7(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">${en(l.serverModeConfig)?"e2e mode":"Local mode"}</button> <button type="button" class="user-menu-row logout-row" data-action="managed-logout">${FV}<span>Log out</span></button>`,r)}function t7(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> ${Q0()||l.managedSession?.role==="none"?m:d`<img alt="" src="${n}" @error="${XV}">`}</span>`}function XV(e){e.currentTarget.classList.add("broken")}function d7(){let e=re?.querySelector(".brand-tag");if(e){let t=l.serverMode==="managed"||en(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 JV(){Ji&&(Ji.dataset.mode=En()),C()?(Ji?.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","")),oT()}function ro(e){let t=re?.querySelector("#sync-status");if(!t)return;if(d7(),JV(),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),c7();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=l7(),o=br()!=null;if(n&&o&&te.isEnabled()&&Yd().catch(p=>{console.warn("sync: load failed",p)}),n&&o&&!te.getServerUrl()&&fp&&te.isEnabled()&&te.setServerUrl(fp),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=YV[i]??"")}async function u7(){if(!te.persistenceDegraded||y$||m$)return;m$=!0;let{shown:e}=await OT();if(m$=!1,e){y$=!0;return}te.persistenceDegraded&&setTimeout(u7,1500)}async function p7(){if(!te.proxyAuthRequired||w$||g$)return;g$=!0;let{shown:e,reload:t}=await PT();if(g$=!1,!e){te.proxyAuthRequired&&setTimeout(p7,1500);return}w$=!0,t&&location.reload()}function ZV(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 Ny(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 Pg(){for(let e of re.querySelectorAll(".drag-over"))e.classList.remove("drag-over")}function f7(e){return e.dataTransfer.types.includes($$)||e.dataTransfer.types.includes(hp)}function QV(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(hp,n),e.dataTransfer.setData(v$,t.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",n),t.classList.add("dragging"),Bg=!0,Y();return}let r=e.target.closest(".file-item[data-file]");r&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData($$,r.dataset.file),e.dataTransfer.setData(v$,r.dataset.workspaceId??""),e.dataTransfer.setData("text/plain",r.dataset.file),r.classList.add("dragging"),Fg=!0,Y())}function eW(){for(let e of re.querySelectorAll(".dragging"))e.classList.remove("dragging");Pg(),(Fg||Bg)&&(Fg=!1,Bg=!1,Y())}function tW(e){if(!f7(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",Pg(),!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(hp)?"[data-default-bundles]":"[data-default-reports]",c=re.querySelector(a);c&&c.classList.add("drag-over")}}function rW(e){re.contains(e.relatedTarget)||Pg()}async function nW(e){if(!f7(e))return;e.preventDefault(),e.stopPropagation(),Pg();let t=e.target.closest("[data-workspace-id]"),r=t?t.dataset.workspaceId:null,n=e.dataTransfer.getData(v$)||null;if(e.dataTransfer.types.includes(hp)){let s=e.dataTransfer.getData(hp);if(!s)return;if(n&&n!==r&&q0(n,s)){let a=(l.bundles??[]).find(p=>p.integrity===s)?.name??s,c=Q().find(p=>p.id===n),{confirmed:u}=await TT({name:a,workspaceName:c?.name??""});if(!u)return;try{await _h(n,s)}catch(p){console.warn(`Failed to remove '${a}' from source workspace ${n} remote:`,p)}}r&&await Ps(s,r),n&&n!==r&&await Hy(s,n),Y();return}let o=e.dataTransfer.getData($$);if(!o)return;if(n&&n!==r&&yl(n,o)){let s=Q().find(c=>c.id===n),{confirmed:a}=await FT({name:o,workspaceName:s?.name??""});if(!a)return;try{await $h(n,o)}catch(c){console.warn(`Failed to remove '${o}' from source workspace ${n} remote:`,c)}}r&&await Ns(o,r),n&&n!==r&&await Pd(o,n),l.currentWorkspace&&(l.currentWorkspace===r||l.currentWorkspace===n)?await Gr(l.currentWorkspace):Y()}async function Dg({forgetLastView:e=!0,resetNavigation:t=!0}={}){Be.reset({force:t}),pp?.remove(),pp=null;let r=++Xt;if(ba=!0,Og=!1,H6(),sw(),ca(),cp(),kh(l.serverMode!=="e2e"),te.setForcedOff(!0),te.setProtocolLocked(l.serverMode!=="e2e"||!!qr),cA({forgetLastView:e}),l.triage.clear(),C()){let n=ya();if(Q0()&&(await n,r!==Xt))return}else{if(l.managedSession=null,l.managedTeams=[],await Cn(),r!==Xt||(await Vd(),r!==Xt))return;Od()}document.dispatchEvent(new CustomEvent("managed-client-mode-change")),fg(),d7(),ro(te.status),E(),await Y()}async function h7(e){if(e!==void 0&&!z6(e))throw new TypeError(`Unknown managed preview role: ${e}. Expected ${Zd.join(", ")}.`);if(await mt(),e===void 0&&(qr||C()))return;let t=Xt,r=e===void 0?null:await Oe();t===Xt&&(qr??={serverMode:l.serverMode,serverModeConfig:l.serverModeConfig,serverModeSelection:l.serverModeSelection,localMode:l.localMode,managed:l.managed},r&&r.setPreviewRole(e),l.serverMode="managed",co(!1),l.managedSession=null,l.managedTeams=[],await Dg({forgetLastView:!1}))}async function oW(){let e=qr,t=k$;qr=null,k$=null,U6(),Object.assign(l,e),await Dg({forgetLastView:!1}),t&&ma(t)}function ma(e,{runtime:t=!0}={}){if(qr){k$=e;return}Lg(!1);let r=br()!=null,n=C(),o=l.serverMode;zn()&&e.managed&&(l.serverModeSelection="managed"),uf(e.mode),zn()&&e.managed&&co(!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),fg(),kh(l.serverMode!=="e2e"),te.setProtocolLocked(l.serverMode!=="e2e"),nv(e),n!==C()){Dg({forgetLastView:!1,resetNavigation:r&&!zn()&&!Ua(e.mode,location.pathname)}).catch(a=>console.warn("client mode transition:",a));return}ro(te.status),i&&l.serverMode==="e2e"&&l7()&&te.isEnabled()&&Yd().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()&&ya()}function ya(){if(hc?.generation===Xt)return hc.promise;ga=!0;let e={generation:Xt,promise:null};return hc=e,e.promise=iW().finally(()=>{hc===e&&(hc=null,Y())}),e.promise}async function iW(){let e=Xt,t=++r7,r=()=>e===Xt&&t===r7&&C();try{let n=l.managedSession,o=await G6({fallback:n});if(!r()||(l.managedSession=o,ga=!1,(!n||n.id!==o?.id||n.role!==o?.role)&&(ba=!0),Y(),j6(o),n&&(n.id!==o?.id||n.role!==o?.role)?(l.managedTeams=[],l.bundles=[],ca(),cp(),Be.reset(),Jn({history:!1})):l.currentView in Ng&&va(l.currentView)&&E({animate:!1}),c7(),zx(),!await _$(r)))return;document.querySelector("base")||(pp=document.createElement("base"),pp.href="/",document.head.prepend(pp)),Be.active&&Object.hasOwn(ms,l.currentView)&&!va(l.currentView)?await Be.navigate({view:va("manage")?"manage":"home"},{replace:!0}):o&&await Be.start(lW)}catch(n){console.warn("managed: session probe failed:",n)}finally{r()&&(ga||ba)&&(ga=!1,ba=!1,Y())}}async function _$(e,{strict:t=!1,signal:r=Ks(),reuse:n=!1,revision:o=null}={}){let i=Xt,s=l.managedSession,c=await sW({generation:i,session:s,signal:r,reuse:n,revision:o})??(t?null:l.managedTeams);if(r.aborted||c===null||!e()||i!==Xt||!C())return!1;let u=l.managedTeams.find(h=>h.id===l.currentManagedTeam)?.name,p=V6(c);l.managedTeams=c,ba=!1;let f=l.currentView==="bundles"?l.bundleDetails?.managedId:null;if(m3(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?vt({view:"bundles",teamId:l.currentManagedTeam,bundleId:f,bundleTab:l.bundleDetailsTab},c):g?vt({view:l.currentView==="links"?"findings":l.currentView,teamId:h.id,reportId:l.currentManagedReport},c):null;mc=null;let v=Jn({history:!1}),k=nt();if(await v,t)return k===nt()&&i===Xt&&l.managedSession?.id===s?.id&&l.managedSession?.role===s?.role&&C()&&await Be.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 va(e){let t=l.managedSession?.role;return e==="manage-links"&&!l.managed?.allowShare?!1:["admin","manage"].includes(t)&&(!aW.has(e)||t==="admin")}async function lW(e,t){Og=!0;try{return await cW(e,t)}finally{t()&&(Og=!1,Y())}}async function cW(e,t){let r=mc===nt()?mc:null;if(Ft(),(["findings","files","bundles"].includes(e?.view)||e?.finding)&&!await _$(t,{reuse:!0}))return!1;let n=[];if(e?.view==="bundles"&&e.teamSlug==null&&(!va("manage-bundles")||(n=await q6(),!t()||!C()))||(e=hf(e,l.managedTeams,n),!e))return!1;let o=r!==null&&mc===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(()=>(Tg(),qT));if(!t())return!1;let a=await s({...e.finding,teamId:e.teamId,reportId:e.reportId},{openManagedReport:(c,u)=>Lo(c,u,{history:!1}),isCurrent:t});return t()?a.ok?(mc=nt(),Hi(),vt({view:"findings",teamId:l.currentManagedTeam,reportId:l.currentManagedReport,finding:{id:e.finding.id}},l.managedTeams)):(a.reason&&_t(a.reason),!1):!1}if(e.view==="bundles"){let s=e.teamId==null?n.map(Bh):h3(l.managedTeams);return await dW(e,s,t)?vt({...e,bundleTab:l.bundleDetailsTab},l.managedTeams,n):!1}if(e.view==="home")return Jn({history:!1});if(Object.hasOwn(ms,e.view))return da(e.view,{...e,history:!1});let i=l.managedTeams.find(s=>s.id===e.teamId);return!i||!o&&!await Lo(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}),mc=nt(),Hi(),Y(),document.querySelector("#main-content")?.scrollTo({top:0}),vt({...e,view:l.currentView==="links"?"findings":l.currentView},l.managedTeams))}async function dW({bundleId:e,teamId:t,bundleTab:r},n,o){let i=nt(),s;try{s=await Mh(e)}catch{return!1}try{if(!o()||i!==nt()||!C())return!1;let a=Tu(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(),Co(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"&&_t(`Couldn't open bundle: ${a.message}`,{kind:"error"}),!1}}async function da(e,t={}){if(t.history!==!1&&C()&&(Be.active||await ya(),Be.active))return Be.navigate({view:e,...t.actor?{actor:t.actor}:{},...t.bundleId?{bundleId:t.bundleId}:{}});if(!(e in Ng)||!C()||!va(e))return!1;let r=Ft(),n=Xt;try{let o=await Oe();e==="manage-import"&&va(e)&&await o.loadWorkspaceImportPage()}catch(o){return console.warn(Ng[e],o),!1}return n!==Xt||r!==nt()||!C()||!va(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(),ya(),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 mt(){return uW??=pW().then(()=>document.querySelector("app-sidebar")?.removeAttribute("inert"))}async function pW(){let e=br();if(e){uf(e.mode),l.managed=e.managed,tf().then(o=>{if(o&&o!=="standalone")return ma(o)}).catch(o=>console.warn("server mode revalidation:",o));return}Lg(!Kc());let t=tf(),r=await rv(t,Kc()?0:3e3),n=br();if(n)return r&&r!=="standalone"?ma(r):ma(n,{runtime:!1});if(r&&r!=="standalone")return ma(r);r==="standalone"&&ef(),l.serverMode="standalone",l.serverModeConfig=null,l.serverModeSelection=null,co(r===null),kh(!0),Lg(!1),ro(te.status),Y(),r===null&&t.then(o=>{let i=br(),s=o&&o!=="standalone"?o:i??o;if(s==="standalone"){if(ef(),qr){qr.serverMode="standalone",qr.serverModeConfig=null,qr.serverModeSelection=null,qr.localMode=!1;return}return co(!1),ro(te.status),Y()}if(s)return ma(s,{runtime:s!==i})}).catch(o=>console.warn("server mode probe:",o))}function fW(){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 hW(e){Ji=e,re=e.renderRoot,b$=re.querySelector("#file-list"),iT(re.querySelector("#encryption-toggle")),hT(re.querySelector("#storage-status")),re.addEventListener("click",e7),re.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&t.target.closest?.('[data-action="toggle-client-mode"]')&&(t.preventDefault(),e7(t))}),re.addEventListener("dblclick",ZV),re.addEventListener("dragstart",QV),re.addEventListener("dragend",eW),re.addEventListener("dragover",tW),re.addEventListener("dragleave",rW),re.addEventListener("drop",nW),nr(re,KV),re.querySelector("#sidebar-search-input")?.addEventListener("input",qV),fW(),ro(te.status),br()||Lg(!Kc()),Y(),te.onServerInfo(t=>{if(l.serverMode!=="e2e")return;let r=br(),n=r&&{...r,...l.deepviewScanServer?{deepviewScanServer:l.deepviewScanServer}:{}};return ma(ev(n,t))}),mt(),l.serverMode==="managed"&&ya()}var Ji,re,b$,fp,$$,v$,hp,Fg,Bg,IV,YT,Xi,gc,mp,XT,LV,FV,o7,HV,jV,VV,WV,i7,f$,h$,KV,YV,m$,y$,g$,w$,qr,k$,Xt,r7,hc,ga,ba,Og,pp,sW,Ng,aW,mc,uW,x$,Zn=$(()=>{"use strict";Ws();Kt();T();Pt();Je();U();dn();Kt();Lh();$l();wl();Oh();g3();v3();Sl();x3();yo();uo();Qd();tg();wk();tT();dp();jx();mT();qt();gT();Ck();bT();hg();Ui();Ni();kT();hk();$T();ST();ET();RT();IT();LT();BT();NT();DT();un();ht();zl();Mo();xi();Ji=null,re=null,b$=null;z3();fp=typeof location>"u"||location.hostname.endsWith(".github.io")?"":`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/sync`,$$="application/x-deepview-report",v$="application/x-deepview-source-ws",hp="application/x-deepview-bundle",Fg=!1,Bg=!1,IV={default:"Reports","claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium",[Xe]:"Links"},YT=["default","claude-security","codex-security","deepsec","piolium",Xe],Xi="",gc=!1,mp=new Map,XT="";LV=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>`,FV=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>`;o7=d`${V(rr)}`;HV=d`${V(yi)}`,jV=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>`,VV=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>`,WV=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>`,i7=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>`;f$=(e,t)=>Ie(e).localeCompare(Ie(t));h$=!1;rt(()=>{Y()});G0(s7);KV={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}};YV={off:"Sync off",online:"Online",offline:"Offline",connecting:"Connecting\u2026",error:"Sync error"};te.onStatusChange(ro);m$=!1,y$=!1;te.onPersistenceDegraded(e=>{ro(),e?u7():y$=!1});g$=!1,w$=!1;te.onProxyAuthRequired(e=>{ro(),e?p7():w$=!1});qr=null,k$=null,Xt=0,r7=0,hc=null,ga=!0,ba=!0,Og=!1,pp=null;eA((e,t,r)=>_$(e,{strict:!0,signal:t,revision:r}));sW=b3(K6);Ng={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:"},aW=new Set(["admin-users","manage-repos","manage-teams","manage-import"]),mc=null;document.addEventListener("managed-bundle-open",e=>{if(C()&&typeof e.detail?.id=="string"){let t=Bh(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));Be.navigate(_l(r,t,n?.id,l.currentView==="bundles"?l.bundleDetailsTab:"overview"))}});document.addEventListener("managed-import-complete",()=>{ya()});document.addEventListener("managed-feed-closed",()=>{ga=!0,ca(),cp(),Jn({history:!1}).then(()=>ya()),_t("Workspace access changed. Refreshing your session.")});document.addEventListener("managed-notice",e=>_t(e.detail.message,{kind:"error"}));document.addEventListener("managed-admin-navigate",e=>{let t=e.detail?.view,r=e.detail?.actor;typeof t=="string"&&da(t,{actor:r})});x$=class extends J{static styles=[F(qi),F(rT)];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(Ph)}</button></div><div id="user-menu" popover class="user-menu"></div>`}firstUpdated(){hW(this)}};customElements.define("app-sidebar",x$)});var Hg,A$=$(()=>{Hg=`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 bc,Wg=$(()=>{bc=`.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 X7,Y7=$(()=>{X7=`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={};yb(Z7,{openManagedCommentsDialog:()=>qW});function qW(e,t){return le("managed-comments-dialog",{finding:e,changed:t})}var j$,Q7=$(()=>{"use strict";T();Je();U();O1();Gl();sa();Pm();ht();pe();A$();Wg();Y7();j$=class extends D{static styles=[...D.styles,F(Hg),F(bc),F(X7)];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=Pu(this.finding?._managedReportId),this._comments=Yn(this.finding),this._unsubscribeComments?.(),this._unsubscribeComments=Bm(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=Yn(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 Wl(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=Yn(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 EM(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=Yn(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 CM(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=Yn(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=Nm(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(M3)}</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(R3)}</button>`:m}`}_deleteConfirmation(t){return this._deleting!==t.id||!Nm(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=Om();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":""}`}">${Kl(r,Ao(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">${P1(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",j$)});T();He();Pt();so();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();Zn();Ui();Mo();Tg();sh();U();dn();vu();var m7={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 g7(){I6(async(e,t,r)=>{let n=Ky(e);try{return await Tl(e,n,m7[r]??m7.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 S$=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",S$);function b7({retry:e=!1}={}){return le("sync-auth-dialog",{retry:!!e})}function v7(){A6(async({retry:e})=>{try{return await b7({retry:e})}catch(t){return console.warn("Sync auth dialog failed to open:",t),null}})}T();U();var zg="https://triage.space/",mW=[{hostname:"deepaudit.dev",pathPrefix:"/",supportsSync:!0},{hostname:"chalker.github.io",pathPrefix:"/deepview/",supportsSync:!1}];function gW(){for(let e of mW)if(location.hostname===e.hostname&&location.pathname.startsWith(e.pathPrefix))return e;return null}var bW=["deepview.triage","deepview.triage.pending"],vW="deepview.repoUrls";function yW(){try{for(let e of bW)if(localStorage.getItem(e))return!0}catch{return!0}try{let e=localStorage.getItem(vW);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 wW(){if(yW())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 kd()}catch{return!0}}var C$=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="${zg}" target="_blank" rel="noopener noreferrer">${zg}</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",C$);function kW(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 y7(){let e=gW();return e?await wW()?await kW(e)?(location.assign(zg),!0):!1:(location.replace(zg),!0):!1}qt();T();U();pe();Ys();var E$=class extends D{static styles=[...D.styles,F(Pr)];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 L0({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=Nn(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&&Nn(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=Nn(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",E$);function w7({encoded:e}={}){return $i("workspace-unlock-link-dialog",{encoded:e??""},t=>{t.encoded=""})}jx();U();Zn();var Jt=null,Ug=!1,gp=null;function xW(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 $W(){if(Jt)return Jt;Jt=document.createElement("div"),Jt.id="lock-overlay",Jt.setAttribute("role","dialog"),Jt.setAttribute("aria-modal","true"),Jt.setAttribute("aria-label","Unlock DeepView"),Jt.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=Le.querySelector("button"),t=Le.querySelector(".lock-overlay-error");return e.addEventListener("click",async()=>{if(!li){li=!0,t.hidden=!0,t.textContent="",e.disabled=!0,e.textContent="Waiting\u2026",_o=new AbortController;try{let n=await Cn({signal:_o.signal})}catch(n){let o=Bv(n);t.textContent=o,t.hidden=!o}finally{li=!1,_o=null,e.disabled=!1,e.textContent="Unlock with passkey"}}}),Le.querySelector(".lock-overlay-wipe").addEventListener("click",async n=>{if(n.preventDefault(),!li&&confirm(`Wipe ALL local DeepView data and start over?
183
+ `;let e=Jt.querySelector("button"),t=Jt.querySelector(".lock-overlay-error");return e.addEventListener("click",async()=>{if(!(Ug||!M$())){Ug=!0,t.hidden=!0,t.textContent="",e.disabled=!0,e.textContent="Waiting\u2026",gp=new AbortController;try{await hs({signal:gp.signal})}catch(n){let o=xW(n);t.textContent=o,t.hidden=!o}finally{Ug=!1,gp=null,e.disabled=!1,e.textContent="Unlock with passkey"}}}),Jt.querySelector(".lock-overlay-wipe").addEventListener("click",async n=>{if(n.preventDefault(),!(Ug||!M$())&&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 En()}catch(o){alert(`Wipe failed: ${o?.message??o}. Try again or clear localStorage manually via DevTools.`);return}location.reload()}}),document.body.append(Le),Le}function Mv(){return bt()?X()&&!it():!1}function xh(){if(Mv()){let e=Fv();e.hidden=!1;let t=e.querySelector("button");t&&t.focus()}else if(Le&&(Le.hidden=!0,_o))try{_o.abort()}catch{}}ge(xh);xh();var _h=`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: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)}}
71
- `;var mc=class extends T{static styles=[...T.styles,A(sn),A(_h)];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 c`<dialog @close="${this._onClose}"><header><h3>${n?"Edit comment":"Add comment"}</h3><div class="finding">${an(t.severity)} ${r?c`<span class="loc" title="${r}">${r}</span>`:g}</div>${t.description?c`<div class="desc" title="${t.description}">${t.description}</div>`:g}</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?c`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:g} <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",mc);function Sh({initial:e="",finding:t=null}={}){return V("comment-dialog",{initial:e,finding:t})}var Ch=`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: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: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}
72
- `;var bc=class extends T{static styles=[...T.styles,A(sn),A(Ch)];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('input[type="url"]');if(t){t.focus();try{t.select()}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.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._value??"").trim(),s=Xr(o);return c`<dialog @close="${this._onClose}"><header><h3>${n?"Edit fix link":"Add fix link"}</h3><div class="finding">${an(t.severity)} ${r?c`<span class="loc" title="${r}">${r}</span>`:g}</div>${t.description?c`<div class="desc" title="${t.description}">${t.description}</div>`:g}</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}"> ${s?c`<a class="open" href="${o}" target="_blank" rel="noopener noreferrer" title="Open in a new tab">Open ↗</a>`:g}</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?c`<button type="button" class="danger" @click="${this._onClear}">Clear</button>`:g} <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("fix-link-dialog",bc);function Eh({initial:e="",finding:t=null}={}){return V("fix-link-dialog",{initial:e,finding:t})}var Ov={critical:"Critical",high:"High",medium:"Medium",low:"Low",high_bug:"High Bug",bug:"Bug",informational:"Informational"},Nv=["critical","high","medium","low","high_bug","bug","informational"];function Dv(e){return Ov[e]??e}function Ah(e){let t=Nv.indexOf(e);return t===-1?999:t}function Th(e){let t=parseInt(e.line,10);return Number.isFinite(t)?`${e.file}:${t}`:e.file}function Uv(e){let t=P(e),r=a.triage.get(t),n=r?.triage,o=Qr(e),s=r?.color,i=r?.comment??"",l=et(e.description??"",e),d=yr(e),p=[d?`### ${Th(e)} - ${d}`:`### ${Th(e)}`,""],f=[];return e.confidence!==void 0&&f.push(`**Confidence:** ${e.confidence}/10`),n?f.push(`**Triage:** ${n}`):o&&f.push("**Ignored**"),s&&f.push(`**Mark:** ${s}`),f.length>0&&(p.push(f.join(", ")),p.push("")),l&&(p.push(l.trim()),p.push("")),e.recommendation&&(p.push(`**Recommendation:** ${et(e.recommendation,e).trim()}`),p.push("")),e.confidenceReason&&(p.push(`**Confidence reason:** ${et(e.confidenceReason,e).trim()}`),p.push("")),e.fix&&(p.push(`**Fix:** ${et(e.fix,e).trim()}`),p.push("")),i&&(p.push(`**Comment:** ${i.trim()}`),p.push("")),p.join(`
73
- `)}function zv(e){let t=(e.groups??[]).flat(),r=[`# ${e.fileName}`,""];if(e.source&&(r.push(`**Source:** ${e.source}`),r.push("")),r.push(`**Findings:** ${t.length}`),r.push(""),t.length===0)return r.join(`
74
- `);let n=new Map;for(let s of t){let i=s.severity??"informational";n.has(i)||n.set(i,[]),n.get(i).push(s)}let o=[...n.keys()].toSorted((s,i)=>Ah(s)-Ah(i));for(let s of o){let i=n.get(s);r.push(`## ${Dv(s)} (${i.length})`),r.push("");for(let l of i)r.push(Uv(l))}return r.join(`
75
- `).trimEnd()+`
76
- `}function Wv(e){return e.map(zv).join(`
77
- ---
78
-
79
- `)}function Hv(e){let t=e.map(n=>n.fileName),r="";return t.length===1?r=t[0]:t.length>1&&(r=Fs(t)),r=r.replace(/\.json$/u,""),`${r||"deepview-report"}.md`}function Ih(e){if(e.length===0)return;let t=Wv(e),r=new Blob([t],{type:"text/markdown;charset=utf-8"});Fr(r,Hv(e))}ga(()=>{a.currentView==="bundles"&&a.selectedBundle?$():a.currentView==="packages"?$():a.currentView==="repositories"?$():(a.currentView==="findings"||a.currentView==="files")&&j().catch(()=>{})});function Rh(){a.currentView==="bundles"&&a.bundleDetailsTab==="graph"?Qs():Jl()}function pi(){a.currentView==="bundles"&&a.bundleDetailsTab==="graph"?Zs():Xl()}function So(){let e=document.querySelector(".bundle-source-code-wrap"),t=e?.scrollTop??0,r=e?.scrollLeft??0;$();let n=document.querySelector(".bundle-source-code-wrap");n&&(n.scrollTop=t,n.scrollLeft=r)}function wc(e){let r=document.querySelector(e)?.scrollTop??0;$();let n=document.querySelector(e);n&&(n.scrollTop=r)}function Cr(){a.viewMode==="table"?wc(".findings-table-list"):$()}function Q(e,t){for(let r of e.composedPath())if(r?.matches?.(t))return r;return null}function Bh(e){let r=Q(e,"[data-gid]")?.dataset?.gid,n=r?vr(r):null;if(!n)return null;let o=Te(n),s=!1,i=null;for(let d of yt().values())if(d.files.has(o.file)){s=!0,d.repos&&d.repos.size===1&&(i=[...d.repos][0]);break}s||(i=o.repo?.github??o._repoFallback??a.repoUrl??null,i||(i=null));let l=[];return i&&l.push(`Repo: ${i}`),o.file&&l.push(`File: ${o.file}`),o.line!==void 0&&o.line!==null&&o.line!==""&&l.push(`Line: ${o.line}`),o.description&&l.push(`Description: ${o.description}`),o.confidence!==void 0&&o.confidence!==null&&l.push(`Confidence: ${o.confidence}/10`),l.join(`
80
- `)}C.addEventListener("click",e=>{let t=Q(e,"[data-finding-code-bundle]");if(t){let _=t.dataset.findingCodeBundle,K=t.dataset.findingCodeFile,Z=t.dataset.findingCodeLine,ie=Z?parseInt(Z,10):null;a.bundleSourceFile=K||null,a.bundleSourceFindingIdx=null,a.bundleDetailsTab==="code"&&(a.bundleDetailsTab="overview");let pe=()=>{Number.isFinite(ie)&&queueMicrotask(()=>{let te=document.querySelector(`.bundle-source-lineno-row[data-line="${ie}"]`);te&&te.scrollIntoView({block:"start",behavior:"instant"})})};if(a.selectedBundle===_&&a.bundleDetails?.integrity===_){$(),pe();return}a.selectedBundle=_,a.bundleDetails=null,$(),(async()=>(await Qt(_),pe()))();return}let r=e.target.closest("[data-package-expand]");if(r){let _=r.dataset.packageExpand;a.expandedPackages.has(_)?a.expandedPackages.delete(_):a.expandedPackages.add(_),$();return}let n=e.target.closest("[data-package-row-issues]");if(n){let _=n.dataset.packageRowIssues,K=n.dataset.packageRowIssuesVersion;a.selectedPackage=_,a.selectedPackageVersion=K||null,a.packageDetailsTab="issues",a.packageSlideTriage=null,a.packageSlideTransient=!0,$();return}let o=e.target.closest("[data-repository-row-issues]");if(o){let _=o.dataset.repositoryRowIssues;a.selectedRepository=_,a.repositoryDetailsTab="issues",a.repositorySlideTriage=null,a.repositorySlideTransient=!0,$();return}let s=e.target.closest("[data-select-package]");if(s){let _=s.dataset.selectPackage,K=s.dataset.selectPackageVersion??"",Z=K===""?null:K;if(a.selectedPackage===_&&a.selectedPackageVersion===Z)return;a.selectedPackage=_,a.selectedPackageVersion=Z,a.packageDetailsTab="overview",a.packageSlideTriage=null,a.packageSlideTransient=!1,$();return}if(e.target.closest("[data-deselect-package]")){a.selectedPackage=null,a.selectedPackageVersion=null,$();return}let i=e.target.closest("[data-package-tab]");if(i){let _=i.dataset.packageTab;(_==="overview"||_==="issues")&&a.packageDetailsTab!==_&&(a.packageDetailsTab=_,$());return}if(e.target.closest('[data-action="package-slide-back"]')){a.packageDetailsTab="overview",a.packageSlideTriage=null,a.packageSlideTransient&&(a.selectedPackage=null,a.selectedPackageVersion=null,a.packageSlideTransient=!1),$();return}let l=e.target.closest("[data-package-report]");if(l){let _=l.dataset.packageReport;_&&_t(_);return}let d=e.target.closest("[data-select-repository]");if(d){let _=d.dataset.selectRepository;if(a.selectedRepository===_)return;a.selectedRepository=_,a.repositoryDetailsTab="overview",a.repositorySlideTriage=null,a.repositorySlideTransient=!1,$();return}if(e.target.closest("[data-deselect-repository]")){a.selectedRepository=null,$();return}let u=e.target.closest("[data-repository-tab]");if(u){let _=u.dataset.repositoryTab;(_==="overview"||_==="issues")&&a.repositoryDetailsTab!==_&&(a.repositoryDetailsTab=_,$());return}if(e.target.closest('[data-action="repository-slide-back"]')){a.repositoryDetailsTab="overview",a.repositorySlideTriage=null,a.repositorySlideTransient&&(a.selectedRepository=null,a.repositorySlideTransient=!1),$();return}let p=e.target.closest("[data-bundle-tab]");if(p){let _=p.dataset.bundleTab;po.has(_)&&(a.bundleDetailsTab==="graph"&&_!=="graph"&&ze(),a.bundleDetailsTab=_,a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.selectedBundle&&ln(a.selectedBundle,_),$());return}if(e.target.closest("[data-advisories-consent]")){bf(),$();return}let f=e.target.closest("[data-bundle-issue-report]");if(f){let _=f.dataset.bundleIssueReport;_&&_t(_);return}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 h=e.target.closest("[data-bundle-source-finding]");if(h){let _=parseInt(h.dataset.bundleSourceFinding,10);Number.isFinite(_)&&(a.bundleSourceFindingIdx=a.bundleSourceFindingIdx===_?null:_,So());return}let b=Q(e,"[data-bundle-view-source]");if(b){let _=b.dataset.bundleViewSource;if(!_)return;let K=b.dataset.bundleViewFindingIdx,Z=K===void 0?null:parseInt(K,10),ie=b.dataset.bundleViewLine,pe=ie?parseInt(ie,10):null;if(a.bundleSourceFile=_,Number.isFinite(Z)&&(a.bundleSourceFindingIdx=Z),b.closest(".bundle-code-rail")?wc(".bundle-code-rail-body"):b.closest(".bundles-slide-body")?wc(".bundles-slide-body"):$(),Number.isFinite(pe)){let te=b.dataset.bundleViewScrollBlock||"center";queueMicrotask(()=>{let We=document.querySelector(`.bundle-source-lineno-row[data-line="${pe}"]`);We&&We.scrollIntoView({block:te,behavior:"smooth"})})}return}if(e.target.closest('[data-action="toggle-files"]')){a.currentView==="files"?a.currentView="findings":(a.viewMode==="graph"&&ze(),a.currentView="files"),document.body.classList.remove("report-fullscreen"),$();return}let y=Q(e,"[data-g2-pkg]");if(y){let _=y.dataset.g2Pkg;E.solo=E.solo===_?null:_,E.solo&&(E.selected=null),Rh(),pi(),E.graphState?.requestDraw?.();return}let k=Q(e,"[data-g2-select]");if(k){E.selected=k.dataset.g2Select,Rh();return}let w=Q(e,"[data-g2-top-pkgs]");if(w){E.topPkgsTab=w.dataset.g2TopPkgs,pi();return}let v=Q(e,"[data-g2-jump-findings]");if(v){if(a.currentView==="bundles"){a.bundleDetailsTab==="graph"&&ze(),a.bundleDetailsTab="issues",a.bundleSourceFile=null,a.bundleSourceFindingIdx=null,a.selectedBundle&&ln(a.selectedBundle,"issues"),$();return}Ls(),a.filterConfMin=0,a.filterInclude=v.dataset.g2JumpFindings,a.currentView="findings",a.viewMode==="graph"&&(a.viewMode="table"),ze(),$();return}let S=Q(e,"[data-g2-jump-file]");if(S){let _=S.dataset.g2JumpFile;a.currentView="files",ze(),$(),requestAnimationFrame(()=>{let K=document.querySelector(`#${ao(_)}`);K&&K.scrollIntoView({behavior:"smooth",block:"start"})});return}if(Q(e,"#g2-path-filter-clear")){E.pathFilter="";let _=document.querySelector("graph-layout")?.shadowRoot?.querySelector("#g2-path-filter");_&&(_.value=""),E.graphState?.requestDraw?.();return}if(Q(e,"#g2-fullscreen")){document.body.classList.toggle("report-fullscreen");return}if(Q(e,"[data-g2-show-all]")){E.showAll=!E.showAll,E.layoutCache=null,E.selected=null,ze(),$();return}let R=Q(e,".graph2-triage-selector [data-triage-show]");if(R){let _=R.dataset.triageShow;a.shownTriage=a.shownTriage===_?null:_,E.layoutCache=null,E.selected=null,ze(),$();return}let O=Q(e,"[data-g2-focus-pkg]");if(O){E.focusedPkg=O.dataset.g2FocusPkg,E.layoutCache=null,ze(),$();return}if(Q(e,"#g2-back-to-full")){E.focusedPkg=null,E.layoutCache=null,ze(),$();return}let we=Q(e,".tab");if(we&&Q(e,".tabs")){let K=Q(e,"[data-gid]").dataset.gid,Z=we.dataset.tid;a.activeTabByGroup.set(K,Z),Cr();return}let q=Q(e,"[data-triage-action]");if(q){let _=q.closest(".triage-menu"),K=_?.dataset.gid;if(!K)return;let Z=vr(K);if(!Z)return;let ie=q.dataset.triageAction;if(!["fixed","invalid","deleted","ignored","restore"].includes(ie))return;let te=be(Z).hasConflict?[Te(Z)]:Z;for(let We of te){let Ye=P(We),Tr=Ms(We);ie==="restore"?(M(a.triage,Ye,{triage:void 0}),ne(a.triage,Ye,Tr,!1)):ie==="ignored"?It(a.triage,Ye,Tr)?ne(a.triage,Ye,Tr,!1):(M(a.triage,Ye,{triage:void 0}),ne(a.triage,Ye,Tr,!0)):a.triage.get(Ye)?.triage===ie?M(a.triage,Ye,{triage:void 0}):(M(a.triage,Ye,{triage:ie}),ne(a.triage,Ye,Tr,!1))}try{_.hidePopover()}catch{}oe(),Cr();return}if(Q(e,".mark-comment")){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)?.comment??"";Sh({initial:te,finding:ie}).then(We=>(We===null||(M(a.triage,pe,{comment:We||void 0}),oe(),Cr()),null)).catch(()=>{});return}let Re=Q(e,".mark-copy");if(Re){let _=Bh(e);if(_===null)return;try{navigator.clipboard.writeText(_).then(()=>(Re.classList.add("copied"),setTimeout(()=>Re.classList.remove("copied"),1e3),null)).catch(()=>{})}catch{}return}let nt=Q(e,".mark-claude");if(nt){let _=Bh(e);if(_===null)return;let K=`claude://code/new?q=${encodeURIComponent(`Confirm and fix:
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
- `;var Qv=["is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-fixed","triage-invalid","triage-deleted","triage-ignored","selected"],Cc=class extends L{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=A(Wh);constructor(){super(),this.group=null,this.selected=!1}render(){if(!this.group)return c``;this.dataset.gid=io(this.group);let t=new Set(Mp(this.group));this.selected&&t.add("selected");for(let r of Qv)this.classList.toggle(r,t.has(r));return c`<div class="row">${Lp(this.group)}</div>`}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._onClick),this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this.removeEventListener("click",this._onClick),super.disconnectedCallback()}_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",Cc);var Hh=`:host{display:block;background:var(--surface);backdrop-filter:var(--glass-blur);border:1px solid var(--border);border-radius:6px;overflow:hidden;box-shadow:var(--shadow-glass);margin-bottom:1rem;max-width:1200px}
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 t0=["finding","is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-fixed","triage-invalid","triage-deleted","triage-ignored","multi-case"],Ac=class extends L{static properties={group:{attribute:!1},inGroup:{type:Boolean,attribute:"in-group",reflect:!0},context:{type:String,reflect:!0}};static styles=A(jh);constructor(){super(),this.group=null,this.inGroup=!1,this.context=null}render(){if(!this.group)return c``;this.dataset.gid=en(this.group);let t=new Set(Bp(this.group));for(let r of t0)this.classList.toggle(r,t.has(r));return c`<div class="card">${Fp(this.group,{context:this.context})}</div>`}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.requestUpdate()}};customElements.define("finding-card",Ac);var Vh=`:host{display:inline-flex;gap:4px;align-items:center}button{width:14px;height:14px;user-select:none;padding:0;background:transparent;border:1.5px solid currentcolor;border-radius:50%;opacity:.55;transition:opacity .12s,transform .12s}button:hover{opacity:1;transform:scale(1.12)}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)}
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 Lc=class extends H{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=A(Jh);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 c`<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(i=>Number(i.value)),n=r[0]>r[1],o=n?1:0,s=n?0:1;this.low!==r[o]&&(this._inputs[o].value=this.low),this.high!==r[s]&&(this._inputs[s].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",Lc);var Pc=class extends H{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 c`<span>${this.low}</span><span class="dash">–</span><span>${this.high}</span>`}};customElements.define("conf-range-mirror",Pc);var Xh=`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: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: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: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:5px;padding:.3rem .8rem;font:inherit;font-size:.78rem;&:hover{border-color:var(--accent);color:var(--accent)}}
89
- `;var Oc=class extends T{static styles=[...T.styles,A(Xh)];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 Xa();Fr(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 Qa(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 Za(this.parsed,this.mode);$(),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 c`<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?c`<div class="error">Failed to parse: ${this.parseError}</div>`:g} ${t?c`<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?c`<span class="meta">Exported ${t.exportedAt}.</span>`:g}</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>`:g}</section>${this.status?c`<div class="${`status status-${this.status.kind}`}">${this.status.text}</div>`:g}<footer class="actions"><button type="button" @click="${this._onClose}">Close</button></footer></dialog>`}};customElements.define("triage-export-dialog",Oc);function Qh(){return V("triage-export-dialog")}var Zh=`:host{display:inline-block;vertical-align:middle;position:relative}.chip{display:inline-flex;align-items:center;gap:.375rem;cursor:default;user-select:none;min-height:24px;box-sizing:border-box;padding:.125rem .375rem .125rem .5rem;background:var(--surface);border:1px solid var(--border);border-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}.edit-btn{width:18px;height:18px;display:grid;place-items:center;padding:0;margin-left:.125rem;background:transparent;border:0;border-radius:4px;color:var(--muted)}.edit-btn:hover{color:var(--text);background:rgb(from var(--text) r g b / .06)}.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: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}}
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 Wc()}catch(o){alert(`Wipe failed: ${o?.message??o}. Try again or clear localStorage manually via DevTools.`);return}location.reload()}}),document.body.append(Jt),Jt}function M$(){return C()||!_n()?!1:me()&&!Qt()}async function R$(){if(await mt(),M$()){let e=$W();e.hidden=!1;let t=e.querySelector("button");t&&t.focus()}else if(Jt&&(Jt.hidden=!0,gp))try{gp.abort()}catch{}}rt(R$);document.addEventListener("managed-client-mode-change",R$);R$();uo();Oh();wl();Kt();Ch();sa();U();mr();he();ct();pn();Fm();Tm();lk();qt();ip();px();T();U();he();pe();bu();A$();wo();var I$=class extends D{static styles=[...D.styles,F(Si),F(Hg)];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">${Ci(ue(t,l.severityMode))} ${r?d`<span class="loc" data-tooltip-truncated data-tooltip="${r}">${r}</span>`:m}</div>${t.description?d`<div class="desc" data-tooltip-truncated data-tooltip="${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",I$);function k7({initial:e="",finding:t=null}={}){return le("comment-dialog",{initial:e,finding:t})}T();Je();pe();Kt();he();ra();Lm();var x7=`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 Zi=`.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 T$=class extends D{static styles=[...D.styles,F(x7),F(Zi)];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 Eh(this.reportId).then(s=>({data:s}),s=>({error:s}));if(this._settled||!this.isConnected)return;let n=xl(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;Hl(this.renderRoot.querySelector(".source-scroll"),this.renderRoot.querySelectorAll(".cited"));let i=Mr(this._path,t?.formats?.get(this._path));if(i&&this._content!==null){let s=await Hr(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",T$);function $7({reportId:e,file:t,line:r}){return le("finding-source-dialog",{reportId:e,file:t,line:r})}T();pe();ko();var L$=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",L$);function _7({name:e,encrypted:t}={}){return le("download-bundle-dialog",{bundleName:e??"",encrypted:!!t})}T();pe();wo();T();var S7=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>`,C7=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>`,E7=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 EW(e,t){let r=Kh.find(n=>n.value===e)?.label??e;return qh(e)?.includes("partial")?t==="exclude"?`${r} (full only)`:t==="only"?`${r} (partial only)`:r:r}function MW(e){return Ae.filter(t=>e.has(t)).map(t=>Wa[t]??t).join(", ")}function F$(e=l){let t=[];if(e.filterSeverities.size>0&&t.push({key:"severity",label:"Severity",value:MW(e.filterSeverities),clear:{filterSeverities:new Set}}),e.filterColors.size>0&&t.push({key:"marks",label:"Marks",value:[...e.filterColors].map(r=>sd[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===Mi?"(none)":e.filterAnalyzer,clear:{filterAnalyzer:""}}),e.filterModel&&t.push({key:"model",label:"Model",value:e.filterModel===Ri?"(none)":e.filterModel,clear:{filterModel:""}}),e.filterRepo&&t.push({key:"repo",label:"Repository",value:e.filterRepo===Qs?"(no repo)":e.filterRepo,clear:{filterRepo:""}}),qh(e.filterRevalidate)&&t.push({key:"revalidate",label:"Revalidation",value:EW(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 B$(){return Er().filter(e=>Ke(e).commonTriage===l.shownTriage)}function O$(){return l.shownTriage?ei[l.shownTriage]??l.shownTriage:null}function jg(e,t=N4()){let r=B$(),n=r.length;ku(t);let o;try{o=Ai(r).length}finally{xu()}return{included:o,total:n,excluded:n-o,fields:t,filters:F$(t),bucketLabel:O$(),focusedOnly:e==="print"&&l.viewMode==="focus"}}var M7=`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
+ `;Zx();var AW=[{id:"download",label:"Markdown",icon:C7},{id:"print",label:"Print",icon:E7}],N$=class extends D{static styles=[...D.styles,F(M7),F(Mg)];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=jg(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>${rm({tabs:AW,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",N$);function R7(e="download"){let t=jg(e),r=e==="print"?t.focusedOnly:jg("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();ra();up();ge();var IW=160,TW=320,LW=/^ {0,3}#{1,6}(?: |$)/u,FW=/^ {0,3}(?:=+|-+) *$/u,Vg=/^\|?[^|\n]+(?:\|[^|\n]+)+\|?$/u,A7=/^\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?$/u;function I7(e,t=e.join(`
192
+ `),{target:r=IW,max:n=TW}={}){let o=e.length;if(o===0)return[];let i=It(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=>Vg.test(e[v]),f=v=>!c()&&!(A7.test(e[v])&&p(v-1))&&!(FW.test(e[v])&&!u(v-1)),h=v=>u(v-1)||LW.test(e[v]),g=[],b=0;for(let v=1;v<o;v++){a+=e[v-1].length+1;let k=v-b;k<r||!f(v)||(k>=n||h(v))&&(g.push([b,v]),b=v)}return g.push([b,o]),g}function T7(e,t){if(t<2||!Vg.test(e[t])||!Vg.test(e[t-1]))return null;let r=t-1;for(;r>0&&Vg.test(e[r-1]);)r--;for(let n=r+1;n<t;n++)if(A7.test(e[n]))return[n-1,n+1];return null}function L7(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}var F7=`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 OW=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 NW(e,t,r,n=null){let o="";for(let i=t;i<r;i++){let s=n===null?L7(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 P$=class extends D{static styles=[...D.styles,F(Zi),F(F7)];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=I7(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}">${OW}${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
+ `,pc(t,o=>{o&&(Po(t),this._paint(t,r))})}}disconnectedCallback(){for(let t of this.renderRoot.querySelectorAll(".evd-chunk[data-watched]"))Po(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=T7(this._lines,n.start),i=[...o?this._lines.slice(o[0],o[1]):[],...this._lines.slice(n.start,n.end)].join(`
198
+ `),s=await Hr(i,"markdown");if(!this.isConnected)return;let a=s===null?null:xE(s).slice(o?o[1]-o[0]:0);t.innerHTML=NW(this._lines,n.start,n.end,a?.length===n.end-n.start?a:null),t.classList.remove("evd-pending")}};customElements.define("export-view-dialog",P$);function B7(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();bu();var O7=`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
+ `;wo();var D$=class extends D{static styles=[...D.styles,F(Si),F(O7)];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">${Ci(ue(t,l.severityMode))} ${r?d`<span class="loc" data-tooltip-truncated data-tooltip="${r}">${r}</span>`:m}</div>${t.description?d`<div class="desc" data-tooltip-truncated data-tooltip="${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",D$);function N7({initial:e="",finding:t=null,canApplyToGroup:r=!1}={}){return le("fix-link-dialog",{initial:e,finding:t,canApplyToGroup:r})}T();Je();pe();wo();un();he();Pw();bu();dp();var P7=`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 zW={revalidate:"Outcome",revalidateVerdict:"Explanation",revalidateRecommendation:"Recommendation"},z$=class extends D{static styles=[...D.styles,F(Si),F(qi),F(P7)];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">${Ci(t.severity)} ${t.file?d`<span class="location">${t.file}${Bt(t.line)?`:${Qh(Bt(t.line))}`:""}</span>`:m} <code>${Zs(t.id)??t.id}</code></div><h4>${Ge(t)}</h4><dl>${Z4(r).map(({field:n,variants:o})=>d`<dt>${zW[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 ${Ie(a)} at this finding`}" @click="${()=>this._finish({id:t.id,reportName:a})}">${V(ot[it(a)]??ot.default)}<span>${Ie(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",z$);function D7(e){return le("revalidation-conflicts-dialog",{conflicts:[...e.values()]})}Ni();Tg();pm();U();var z7=2;function U7(e,t){l.focusSplit=t,e.closest(".focus-main")?.style.setProperty("--focus-split",String(t)),e.setAttribute("aria-valuenow",String(Math.round(t)))}function H7(){try{localStorage.setItem(nf,String(l.focusSplit))}catch{}}function j7(e,t){U7(e,Jc(t)),H7()}function V7(e,t){j7(e,l.focusSplit+t)}function W7(e){j7(e,Xc)}function G7(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&&U7(e,Jc((i.clientX-s.left)/s.width*100))},o=()=>{e.removeEventListener("pointermove",n),e.removeEventListener("pointerup",o),e.removeEventListener("pointercancel",o),e.classList.remove("dragging"),H7()};e.addEventListener("pointermove",n),e.addEventListener("pointerup",o),e.addEventListener("pointercancel",o)}U();mr();pn();he();ct();ge();function UW(e,t){return cm(Ai(e)).map(r=>t?[Ne(r)]:Gn(r))}var HW={annotation(e){let t=Ce(e),r=qw(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=>Dr(e,ir(e)),evidence:(e,t,r)=>em(e,t,ir(t),r),commit:e=>tm(e.repo?.github,e.commitHash),report:e=>e._reportName??null};function jW(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&&!or(s.file)&&o.add(s.repo.github);return o.size===1?[...o][0]:o.size===0&&!l.currentWorkspace&&l.repoUrl?l.repoUrl:null}function U$(e){return e.replace(/\.(?:json|md|codex)$/iu,"")}function K7(){return l.currentWorkspace?Q().find(e=>e.id===l.currentWorkspace)??null:null}function VW(e,t){if(t)return t.name;let r=e.map(o=>o.fileName);return r.length===1?U$(r[0]):hu(r).replace(/[-_. ]+$/u,"")||`${r.length} reports`}function H$({oneSamplePerGroup:e=!1}={}){let t=l.reports,r=Wn(),n=B$(),o=UW(n,e),i=K7(),s=t.flatMap(u=>u.groups??[]),a=s.some(u=>u.some(yr)),c=s.some(u=>u.some(n4));return Dv({title:VW(t,i),workspace:i?.name??null,reports:t.map(u=>({name:u.fileName,source:u.source})),repo:jW(t,o),generatedAt:new Date,view:{bucket:O$(),severityMode:a?l.severityMode:null,revalidation:c?l.showRevalidation:null,revalidationDetail:c&&l.showRevalidation!==!1?$o():null},filters:F$(r),counts:{included:o.length,total:n.length},groups:o},HW)}function WW(){let e=K7(),t=l.reports.map(n=>n.fileName),r="";return e?r=e.name:t.length===1?r=U$(t[0]):t.length>1&&(r=U$(hu(t))),r=r.replaceAll(/[\\/:*?"<>|\p{Cc}]/gu,"-").trim(),`${r||"deepview-report"}.md`}function q7(e){if(l.reports.length===0)return;let t=new Blob([H$(e)],{type:"text/markdown;charset=utf-8"});ao(t,WW())}ax();Wr();Mo();Zn();Ui();ju();yo();$l();function V$(e){return!C()||!Be.active||!l.currentManagedTeam?null:Be.navigate(vt({view:e,teamId:l.currentManagedTeam,reportId:l.currentManagedReport},l.managedTeams))}var X$=!1;dy(()=>{if(X$)return;X$=!0;let e=2;function t(){--e===0&&YW()}requestAnimationFrame(t),setTimeout(t,350)});function YW(){X$=!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 W$=!1;yy(()=>{l.currentView!=="findings"&&l.currentView!=="files"&&!Sr()||W$||(W$=!0,queueMicrotask(()=>{W$=!1,!(l.currentView!=="findings"&&l.currentView!=="files"&&!Sr())&&(l.bundleHashTick++,E())}))});Ds(()=>{l.linksTick++,E()});function eL(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?yg():Fx()}function Yg(){l.currentView==="bundles"&&l.bundleDetailsTab==="graph"?wg():Bx()}function Xg(){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 wa(e){let r=document.querySelector(e)?.scrollTop??0;E();let n=document.querySelector(e);n&&(n.scrollTop=r)}function Do(){l.viewMode==="table"?wa(".findings-table-list"):E()}var G$=0;function tL(){G$||(G$=requestAnimationFrame(()=>{G$=0,E()}))}function ie(e,t){for(let r of e.composedPath())if(r?.matches?.(t))return r;return null}function K$(e,t){queueMicrotask(()=>{let r=document.querySelector(`.bundle-source-lineno-row[data-line="${e}"]`);r&&r.scrollIntoView(t)})}function aL(e){e.classList.add("copied"),setTimeout(()=>e.classList.remove("copied"),1e3)}function Gg(e,t){try{navigator.clipboard.writeText(t).then(()=>(aL(e),null)).catch(()=>{})}catch{}}function lL(e){let t=Ql(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile);l.bundleCodeHistory=VR(t,e),l.bundleSourceFile=e}function rL(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 cL(e){let t=e.target.closest("[data-bundle-code-history]");if(t){let o=Ql(l.bundleCodeHistory,l.bundleDetails?.integrity??null,l.bundleSourceFile),i=WR(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="",wa(".bundle-code-rail-body"),Gi(),rL()),!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=bp(e),a=xM(s,i.dataset.focusCodeIntegrity,i.dataset.focusCodeFile,o);return a&&(e_(s,a),queueMicrotask(()=>i.querySelector(".focus-code-source")?.focus({preventScroll:!0}))),!0}return dt(l.bundleDetails).has(o)&&(l.currentView==="bundles"&&l.bundleDetailsTab==="search"&&(Ul("code",{preserveSource:!0}),l.selectedBundle&&To(l.selectedBundle,"code")),lL(o),l.bundleSourceFindingIdx=null,l.bundleDetailsTab==="code"&&(l.bundleCodeSearchMode="files",l.bundleCodeSearchQuery=""),wa(".bundle-code-rail-body"),Gi(),rL(!0)),!0}if(e.target.classList?.contains("bundle-source-overlay")||e.target.closest('[data-action="bundle-source-close"]'))return l.bundleSourceFile&&(Ul(l.bundleDetailsTab),E()),!0;if(e.target.closest('[data-action="bundle-source-panel-close"]'))return l.bundleSourceFindingIdx!=null&&(l.bundleSourceFindingIdx=null,Xg()),!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,Xg()),!0}return!1}function nL(e){let t=bp(e);if(!t)return null;let r=Ne(t);return $4(r,hm(r))}N.addEventListener("click",e=>{if(ie(e,"[data-finding-history]")){let I=bp(e),H=I&&Ne(I);Gs(H)&&J6(H);return}let t=ie(e,"[data-code-nav-file]");if(t){e_(bp(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Bt(t.dataset.codeNavLine)});return}let r=ie(e,"[data-code-history]");if(r){JW(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()){$7({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)&&K$(K,{block:"start",behavior:"instant"})};if(l.selectedBundle===I&&l.bundleDetails?.integrity===I){E(),oa().then(()=>(l.selectedBundle===I&&l.bundleSourceFile===H&&Ee(),null));return}l.selectedBundle=I,l.selectedBundleWorkspace=null,l.bundleDetails=null,E(),(async()=>(await Eo(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 Ig(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&&To(l.selectedBundle,I);return}l.bundleDetailsTab==="graph"&&I!=="graph"&&(Ze(),document.body.classList.remove("report-fullscreen")),Ul(I),l.selectedBundle&&To(l.selectedBundle,I),E(),I==="code"&&oa().then(()=>(l.bundleDetailsTab==="code"&&Gi(),null))}return}if(e.target.closest("[data-bundle-retry-sources]")){l.bundleDetails&&delete l.bundleDetails.sourceError,E();return}let k=e.target.closest("[data-bundle-download]");if(k){let I=k.dataset.bundleDownload,H=(l.bundles??[]).find(G=>G.integrity===I);if(!H)return;(async()=>{let{confirmed:G}=await _7({name:H.name,encrypted:me()});if(G)try{let K=await an(I);ao(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?TI(H,G):LI(H,G),ut=`${mg(G.name)}.${K?"cdx":"spdx"}.json`;ao(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,wa(".bundle-search-results");return}if(e.target.closest("[data-advisories-consent]")){DI(),E();return}if(e.target.closest("[data-advisories-retry]")){jI(l.bundleDetails,E).catch(()=>{}),E();return}let x=e.target.closest("[data-bundle-issue-report]");if(x){let I=x.dataset.bundleIssueReport;I&&ur(I);return}if(cL(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,Xg(),Ee.line>0&&K$(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(lL(I),Number.isFinite(G)?l.bundleSourceFindingIdx=G:ut&&(l.bundleSourceFindingIdx=null),S.closest(".bundle-code-rail")?wa(".bundle-code-rail-body"):S.closest(".bundle-search-results")?wa(".bundle-search-results"):S.closest(".bundles-slide-body")?wa(".bundles-slide-body"):E(),Number.isFinite(Ee)){let hr=S.dataset.bundleViewScrollBlock||"center";oa().then(()=>(l.bundleSourceFile===I&&K$(Ee,{block:hr,behavior:"smooth"}),null))}return}if(e.target.closest('[data-action="toggle-files"]')){if(V$(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 A=ie(e,"[data-g2-pkg]");if(A){let I=A.dataset.g2Pkg;B.solo=B.solo===I?null:I,B.solo&&(B.selected=null),eL(),Yg(),B.graphState?.requestDraw?.();return}let P=ie(e,"[data-g2-select]");if(P){B.selected=P.dataset.g2Select,eL(),B.graphState?.requestDraw?.();return}let L=ie(e,"[data-g2-top-pkgs]");if(L){B.topPkgsTab=L.dataset.g2TopPkgs,Yg();return}let R=ie(e,"[data-g2-jump-findings]");if(R){if(l.currentView==="bundles"){l.bundleDetailsTab==="graph"&&Ze(),Ul("issues"),l.selectedBundle&&To(l.selectedBundle,"issues"),E();return}if(Fl(),l.filterConfMin=0,l.filterInclude=R.dataset.g2JumpFindings,l.currentView="findings",l.viewMode==="graph"&&(l.viewMode="table"),Ze(),V$("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(`#${Hu(I)}`);K&&K.scrollIntoView({behavior:"smooth",block:"start"})}),G=V$("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 ts=ie(e,".tab");if(ts&&ie(e,".tabs")){let H=ie(e,"[data-gid]").dataset.gid,G=ts.dataset.tid;l.activeTabByGroup.set(H,G),Do();return}let Vo=ie(e,"[data-triage-action]");if(Vo){let I=Vo.closest(".triage-menu"),H=I?.dataset.gid;if(!H)return;let G=sr(H);if(!G)return;let K=Vo.dataset.triageAction;if(!["inprogress","fixed","invalid","deleted","ignored","restore"].includes(K))return;let{targets:Ee,clearing:ut}=lE(G,K);if(Ee.length===0)return;dL(Ee,ut?"untriaged":K);try{I.hidePopover()}catch{}_e(),Do();return}if(ie(e,".mark-comment")){let H=ie(e,"[data-gid]").dataset.gid,G=sr(H);if(!G)return;let K=Ne(G);if(!Ue(K))return;if(C()){Promise.resolve().then(()=>(Q7(),Z7)).then(({openManagedCommentsDialog:hr})=>hr(K,Do)).catch(()=>_t("Could not open comments. Please retry."));return}let Ee=q(K),ut=Ce(K)?.comment??"";k7({initial:ut,finding:K}).then(hr=>(hr===null||!Ue(K)||(ee(l.triage,Ee,{comment:hr||void 0}),_e(),Do()),null)).catch(()=>{});return}let Sc=ie(e,".mark-copy");if(Sc){let I=nL(e);if(I===null)return;Gg(Sc,I);return}let xp=ie(e,".mark-link");if(xp){let I=ie(e,"[data-gid]"),H=I?sr(I.dataset.gid):null;if(!H)return;let G=Vl(Ne(H));if(!G)return;Gg(xp,G);return}let Cc=ie(e,"[data-copy-report]");if(Cc){Gg(Cc,Cc.dataset.copyReport);return}let Ca=ie(e,"[data-copy-path]");if(Ca){Gg(Ca,Ca.dataset.copyPath);return}let Ec=ie(e,".mark-issue");if(Ec&&C()&&l.managedSession&&!l.managedSession.publicShare&&l.currentManagedTeam){let I=ie(e,"[data-gid]"),H=I?sr(I.dataset.gid):null,G=H?Ne(H):null;if(G?._managedReportId&&G.id){e.preventDefault();let K=new URL(Ec.dataset.issueForm);X6({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:Dr(G,ir(G)),evidence:mu(G),showRevalidation:uu()},renderBody:lr}).catch(()=>_t("Could not open issue creation. Please retry."));return}}let Mc=ie(e,".mark-claude");if(Mc){let I=nL(e);if(I===null)return;let H=`claude://code/new?q=${encodeURIComponent(`Confirm and fix:
201
+
202
+ ${I}`)}`;try{window.location.href=H,aL(Mc)}catch{}return}if(ie(e,".mark-fix")){let H=ie(e,"[data-gid]")?.dataset.gid,G=H?sr(H):null;if(!G)return;let K=Ne(G);if(!Ue(K))return;let Ee=uE(G),ut=Ce(K)?.fix??"";N7({initial:ut,finding:K,canApplyToGroup:aE(Ee,ut)}).then(hr=>{if(hr===null||!Ue(K))return null;let Ra=hr.scope==="group"?Ee.filter(rs=>Ue(rs)&&(rs===K||Yw(rs,ut))):[K],Rc=!1;for(let rs of Ra)ee(l.triage,q(rs),{fix:hr.value||void 0})&&(Rc=!0);return Rc&&(Ra.length>1&&l.activeTabByGroup.set(H,q(K)),Do(),queueMicrotask(_e)),null}).catch(()=>{});return}let vb=ie(e,"[data-flag-toggle]");if(vb){let I=vb.dataset.flagToggle,H=ie(e,"[data-gid]")?.dataset.gid,G=(H?sr(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(),Do();return}let Ea=e.target.closest("[data-triage-show]");if(Ea&&!Ea.closest(".graph2-triage-selector")){let I=Ea.dataset.triageShow;l.shownTriage=l.shownTriage===I?null:I,E();return}if(e.target.closest("[data-table-deselect]")){l.tableSelectedGid=null,Do();return}let Ma=e.target.closest("[data-tree-select]");if(Ma){let I=Ma.dataset.treeSelect;l.filesSelectedFile=l.filesSelectedFile===I?null:I,E();return}e.target.closest("[data-tree-deselect]")&&(l.filesSelectedFile=null,E())});var oL=document.querySelector("#bundle-source-overlay-slot");oL&&oL.addEventListener("click",cL);function Jg(e){let t=e?sr(e):null;t&&mm(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&&Jg(t),Do()});var Zg="application/x-deepview-kanban-gid";function dL(e,t){for(let r of e){if(!Ue(r))continue;let n=q(r),o=Kw(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 J$(){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=sr(r);if(!n||Ii(n).length===0){e.preventDefault();return}e.dataTransfer.setData(Zg,r),e.dataTransfer.setData("text/plain",r),e.dataTransfer.effectAllowed="move",t.classList.add("dragging")});N.addEventListener("dragend",J$);N.addEventListener("dragover",e=>{if(!e.dataTransfer?.types.includes(Zg))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(Zg))return;let t=e.target.closest?.(".kanban-column[data-kanban-target]");if(!t){J$();return}e.preventDefault();let r=e.dataTransfer.getData(Zg),n=t.dataset.kanbanTarget;if(J$(),!r||!n)return;let o=sr(r);if(!o||(Ke(o).commonTriage??"untriaged")===n)return;let s=Ii(o);s.length!==0&&(dL(s,n),E(),queueMicrotask(_e))});var q$=!1;function ka(e){return e?N.querySelector(`.kanban-card[data-gid="${CSS.escape(e)}"]`):null}function Kg(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 XW(){let e=N.querySelector(".kanban-detail-side [data-kanban-select].active");e&&e.scrollIntoView({block:"nearest",behavior:"instant"})}function Y$(e){l.kanbanPopoverGid=e,l.focusCodeStack=[],l.focusCodeAt=0}function iL(){XW(),Ro()}function xa(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){Jg(e),Y$(e),E(),iL();return}if(q$)return;Jg(e),q$=!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),q$=!1};if(r){let u=ka(e);u?(Kg(u),u.style.viewTransitionName="kanban-detail-modal",u.getBoundingClientRect()):Kg(),Y$(e);let p=document.startViewTransition(()=>{E(),iL(),u&&(u.style.viewTransitionName="")}),f=setTimeout(()=>i(u),600);(async()=>{try{await p.finished}catch{}clearTimeout(f),i(u)})();return}Kg(),Y$(e);let s=null,a=document.startViewTransition(()=>{E(),s=ka(t),s&&(Kg(s),s.style.viewTransitionName="kanban-detail-modal")}),c=setTimeout(()=>i(s??ka(t)),600);(async()=>{try{await a.finished}catch{}clearTimeout(c),i(s??ka(t))})()}function uL(e){let t=ka(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;xa(s);let a=ka(s);a&&(a.focus({preventScroll:!0}),a.scrollIntoView({block:"nearest",behavior:"instant"}))}var qg=null;function Z$(){um(),l.focusCodeStack=[],l.focusCodeAt=0,E(),qg?.isConnected&&qg.focus({preventScroll:!0}),qg=null}N.addEventListener("click",e=>{let t=e.target.closest?.("[data-links-preview]");if(t){e.preventDefault(),qg=t;let s=t.dataset.previewRow,a=tE(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(),Ro();let c=Sr()?.group?.[0]._bundleHashes;if(Array.isArray(c))for(let u of c)E1(u).catch(()=>{});return null});return}if(e.target.closest?.(".kanban-detail-close")){if(Sr()){Z$();return}xa(null);return}if(e.target.closest?.("[data-kanban-detail-fullscreen]")){l.kanbanDetailFullscreen=!l.kanbanDetailFullscreen;try{localStorage.setItem(of,String(l.kanbanDetailFullscreen))}catch{}E(),Ro();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&&ka(l.kanbanPopoverGid)?.closest(".kanban-column")?.dataset.kanbanTarget!==a&&(l.kanbanPopoverGid=null),E();return}let n=e.target.closest?.("[data-kanban-nav]");if(n){uL(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&&xa(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;xa(l.kanbanPopoverGid===s?null:s);return}if(!ie(e,".kanban-detail-modal, .kanban-detail-side")){if(Sr()){Z$();return}l.kanbanPopoverGid&&xa(null)}});N.addEventListener("change",e=>{let t=e.target.closest?.("[data-kanban-column]");if(!t)return;let r=t.selectedOptions[0]?.dataset.gid;r&&xa(r)});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(Sr()){!e.defaultPrevented&&!mL(e)&&!document.querySelector(":popover-open:not(#styled-tooltip)")&&Z$();return}if(l.kanbanPopoverGid){xa(null);return}l.viewMode!=="kanban"||l.kanbanExpandedColumn===null||(l.kanbanExpandedColumn=null,E())}});function bp(e){let r=ie(e,"[data-gid]")?.dataset?.gid;return r?sr(r):null}function e_(e,t){if(!t.integrity||!t.file)return;let r=jl(e);if(!r)return;let n=mM(r,t);n&&(l.focusCodeStack=n.stack,l.focusCodeAt=n.at,E()),t.range||pL(),Ro()}function pL(){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(),e_(bp(e),{integrity:t.dataset.codeNavIntegrity,file:t.dataset.codeNavFile,range:Bt(t.dataset.codeNavLine)}))});function JW(e){let t=gM(l.focusCodeStack,l.focusCodeAt,e);t!==l.focusCodeAt&&(l.focusCodeAt=t,E(),l.focusCodeStack[t]?.range||pL(),Ro())}function fL(e){if(!e||l.focusGid===e)return;Jg(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"}),Ro()}function hL(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&&fL(o)}N.addEventListener("click",e=>{let t=e.target.closest?.("[data-focus-nav]");if(t){hL(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&&fL(n)});N.addEventListener("pointerdown",e=>{if(e.button!==0)return;let t=e.target.closest?.("[data-focus-splitter]");t&&G7(t,e)});N.addEventListener("dblclick",e=>{let t=e.target.closest?.("[data-focus-splitter]");t&&W7(t)});function mL(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||mL(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){V7(o,n*z7);return}t?hL(n):uL(n)});N.addEventListener("mark-color",e=>{let t=ie(e,"[data-gid]");if(!t)return;let r=t.dataset.gid,n=sr(r);if(!n)return;let o=Ne(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(),Do()});var $a=null,Q$=null,vc=null,Qg=!1;function gL(){if($a!==null)return;if(l.reports.length===0){vc=null,Qg=!1;return}$a=l.viewMode,Q$=document.title;let e=!1;l.viewMode==="table"&&(l.viewMode="list",e=!0),vc&&(ku(vc),e=!0),e&&E();for(let n of N.querySelectorAll("finding-card"))n.toggleAttribute("print-one-sample",Qg),n.ensureRendered({sync:!0});let t=l.reports.map(n=>n.fileName),r="";t.length===1?r=t[0]:t.length>1&&(r=hu(t)),r=r.replace(/\.json$/u,""),r&&(document.title=r)}function bL(){if($a===null)return;for(let t of N.querySelectorAll("finding-card"))t.removeAttribute("print-one-sample");Qg=!1;let e=!1;l.viewMode!==$a&&(l.viewMode=$a,e=!0),vc&&(xu(),vc=null,e=!0),e&&E(),document.title=Q$,$a=null,Q$=null}window.addEventListener("beforeprint",gL);window.addEventListener("afterprint",bL);async function ZW(e,{oneSamplePerGroup:t=!1}={}){if($a===null){vc=e,Qg=t;try{gL(),await Promise.all([...N.querySelectorAll("finding-card")].map(r=>r.ensureRendered())),window.print()}catch(r){throw bL(),r}}}function sL(e,t){if(!e)return t();ku(e);try{return t()}finally{xu()}}document.addEventListener("download-requested",async()=>{if(l.reports.length===0)return;let{confirmed:e,view:t,fields:r,mode:n,oneSamplePerGroup:o}=await R7("download");if(t){await B7(sL(r,()=>H$({oneSamplePerGroup:o})));return}if(e){if(n==="print"){await ZW(r,{oneSamplePerGroup:o});return}sL(r,()=>q7({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||or(o.file)))))?_t("App mode off is not recommended; it can conflate triage for issues in dependencies.",{kind:"warning"}):e.detail.on&&lw(),_i(l.showRevalidation,l.upstreamOnly),ea(Kn(),{resetSort:!1}),E()});N.addEventListener("revalidation-conflicts-open",()=>{(async()=>{let e=await D7(l.revalidateConflicts);if(!e)return;let t=await Ig(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,_i(l.showRevalidation,l.upstreamOnly),!l.upstreamOnly){let t=Kn();Lw(t,am(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"&&Gi())});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){Be.navigate(_l(l.managedTeams,r,l.currentManagedTeam,"compare"));return}Co(t,"compare"),To(t,"compare"),E(),Y(),Eo(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),tL();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,tL();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?.(),Yg();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?.(),Yg();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(rf,t)}catch{}E()}});N.addEventListener("repo-edit-start",()=>{C()||(l.repoEditing=!0,E())});N.addEventListener("repo-input",e=>{C()||(l.repoUrl=e.detail.url,tn(l.currentFile,l.repoUrl))});N.addEventListener("repo-commit",e=>{C()||(l.repoUrl=e.detail.url,tn(l.currentFile,l.repoUrl),l.repoEditing=!1,E())});N.addEventListener("repo-cancel",e=>{C()||(l.repoUrl=e.detail.url,tn(l.currentFile,l.repoUrl),l.repoEditing=!1,E())});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(l.bundleSourceFindingIdx!=null){l.bundleSourceFindingIdx=null,Xg();return}if(l.bundleSourceFile){if(l.currentView==="bundles"&&l.bundleDetailsTab==="code")return;Ul(l.bundleDetailsTab),E()}}});T();function st(e,t){for(let[r,n]of Object.entries(t))e.hasAttribute(r)||e.setAttribute(r,n)}var zo=Math.PI*2;function QW(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 vL(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 eG(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 t_(e){return e.slice(1).reduce((t,r,n)=>t+Math.hypot(r.x-e[n].x,r.y-e[n].y),0)}function tG(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 yL(e,t,r=7){let n=QW(r),o={x:e*1820/1920,y:t*90/1080},i=Math.hypot(e,t),s=(y,x)=>y<1e-8?0:y>x-1e-8?x:y,a=y=>({x:s(y.x,e),y:s(y.y,t)}),c=Array.from({length:20},(y,x)=>((x+(n()-.5)*.35)*zo/20+zo)%zo);for(let[y,x]of[[0,0],[e,0],[e,t],[0,t]])c.push((Math.atan2(x-o.y,y-o.x)+zo)%zo);c.sort((y,x)=>y-x);let p=[.045,.29,.58].map(y=>y*Math.min(e,t)).map(y=>c.map(x=>{let _=Math.min(y*(.92+n()*.16),vL(o,x,e,t));return a({x:o.x+Math.cos(x)*_,y:o.y+Math.sin(x)*_})}));p.push(c.map(y=>{let x=vL(o,y,e,t);return a({x:o.x+Math.cos(y)*x,y:o.y+Math.sin(y)*x})}));let f=p.map((y,x)=>y.map((_,S)=>{let M=y[(S+1)%y.length],A={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),R=x===p.length-1||L?0:(n()-.5)*P*.08,W=Math.atan2(A.y-o.y,A.x-o.x);return[_,a({x:A.x+Math.cos(W)*R,y:A.y+Math.sin(W)*R}),M]})),h=p.slice(1).map((y,x)=>y.map((_,S)=>{let M=p[x][S],A=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]+zo)%zo,R=(c[(S+1)%c.length]-c[S]+zo)%zo,W=Math.min(L,R)*Math.hypot(P.x-o.x,P.y-o.y),ce=(n()-.5)*Math.min(A*.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=>{eG(y)>.01&&g.push({points:y,...tG(y,o,t,n)})};b(f[0].flatMap(y=>y.slice(0,-1)));for(let y=0;y<p.length-1;y++)for(let x=0;x<c.length;x++){let _=(x+1)%c.length;b([...h[y][x],...f[y+1][x].slice(1),...h[y][_].toReversed().slice(1),...f[y][x].toReversed().slice(1)])}let v=Math.max(...g.map(y=>y.distance));for(let y of g)y.delay+=y.distance/v*400;let k=[],w=(y,x,_,S)=>{let M=t_(y);M>.1&&k.push({points:y,length:M,delay:x,duration:_,width:S})};for(let y=0;y<c.length;y++){let x=[o,p[0][y],...h.flatMap(_=>_[y].slice(1))];w(x,0,200+t_(x)/i*1e3,1.1)}for(let y of f.slice(0,-1))for(let x of y){let _=Math.hypot(x[0].x-o.x,x[0].y-o.y);w(x,_/i*1e3,220+t_(x)/i*400,.7)}for(let y of p[1]){let x=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(x+(n()-.5)*.3)*_*M/3,y:y.y+Math.sin(x+(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:k}}var wL=`.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 nG="http://www.w3.org/2000/svg",r_=1.5,oG=0;function bn(e,t={}){let r=document.createElementNS(nG,e);for(let[n,o]of Object.entries(t))r.setAttribute(n,String(o));return r}function iG(e){let t=document.createElement("div");t.className="screen-crack",t.setAttribute("aria-hidden","true");let r=document.createElement("style");r.textContent=wL;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-${++oG}`,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"),k=bn("g");v.classList.add("screen-crack-shard"),k.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"),k.append(w),s.append(v),c.append(k),{masked:v,outlined:k,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 sG(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*r_,delay:n.delay*r_,easing:"cubic-bezier(.2,.7,.2,1)"})}}}function kL(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=yL(r,t),{overlay:o,glass:i,cracks:s,shards:a,flash:c}=iG(n);document.body.append(o);let u=document.timeline.currentTime,p=[],f=(S,M,A)=>{let P=S.animate(M,{fill:"both",...A});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",k),o.remove();for(let S of p)S.cancel();b()}},k=()=>{document.hidden&&v()};window.addEventListener("resize",v,{once:!0}),window.addEventListener("beforeprint",v,{once:!0}),document.addEventListener("visibilitychange",k),sG(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))*r_,y=500,x=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:x-1}).finished.then(b,()=>{}),f(s,[{opacity:1},{opacity:0}],{duration:450,delay:x,easing:"ease-out"});for(let{masked:S,outlined:M,outline:A,piece:P}of a){let L=x+P.delay,R=[{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,R,{duration:1700,delay:L,easing:"cubic-bezier(.32,0,.82,.94)"});f(A,[{opacity:0},{opacity:1}],{duration:250,delay:L})}return Promise.all(p.map(S=>S.finished)).then(v,v)}var xL=`: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 o_="deepview.theme",tb=Object.freeze(["dark","light","green","pink","paper"]),n_=Object.freeze(["dark","green","pink","paper","light"]),lG={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"}},i_=window.matchMedia?.("(display-mode: window-controls-overlay)"),$L=window.matchMedia?.("(display-mode: standalone)"),_L=window.navigator?.windowControlsOverlay,cG={light:"\u2600",dark:"\u263E",green:"\u{1F576}\uFE0F",pink:"\u273F",paper:"\u{1F4C4}"},s_="deepview-theme-changed",vn="dark",u_=!1,dG=0,a_=!1,eb=!1,l_=0;function uG(){return a_?n_[(n_.indexOf(vn)+1)%n_.length]:vn==="light"?"dark":"light"}function c_(){window.dispatchEvent(new CustomEvent(s_,{detail:{theme:vn}}))}function pG(){try{let e=localStorage.getItem(o_);return tb.includes(e)?e:"dark"}catch{return"dark"}}function rb(){let e=document.querySelector('meta[name="theme-color"]');if(!e)return;let{base:t,dim:r,sidebar:n}=lG[vn],o=_L?.visible??i_?.matches??!1,i=($L?.matches||i_?.matches)&&!o;e.setAttribute("content",u_?r:i&&n?n:t)}function yc(e){tb.includes(e)||(e="dark"),vn=e;for(let t of tb)t!=="dark"&&document.body.classList.remove(`theme-${t}`);e!=="dark"&&document.body.classList.add(`theme-${e}`);try{e==="dark"?localStorage.removeItem(o_):localStorage.setItem(o_,e)}catch{}rb(),c_()}yc(pG());i_?.addEventListener("change",rb);$L?.addEventListener("change",rb);_L?.addEventListener("geometrychange",rb);window.addEventListener("beforeprint",()=>{u_=!0,yc(vn)});window.addEventListener("afterprint",()=>{u_=!1,yc(vn)});function SL(e){if(!tb.includes(e))throw new TypeError("unknown theme");l_++,yc(e)}function CL(){return vn}var d_=class extends J{static properties={_theme:{state:!0}};static styles=F(xL);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(s_,this._onThemeChanged),this._onThemeChanged()}disconnectedCallback(){window.removeEventListener(s_,this._onThemeChanged),this.removeEventListener("click",this._toggle),this.removeEventListener("keydown",this._onKeydown),super.disconnectedCallback()}_onThemeChanged=()=>{this._theme=vn,this.setAttribute("aria-disabled",String(eb))};_toggle=()=>{if(!eb){if(!a_&&++dG>=8&&vn==="dark"){a_=!0,eb=!0,c_();let t=l_,r=()=>{l_===t&&yc("green")},n=()=>{eb=!1,c_()};try{kL(r).catch(r).finally(n)}catch{r(),n()}return}yc(uG())}};_onKeydown=t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.repeat||this._toggle())};render(){return d`${cG[this._theme]}`}};customElements.define("theme-toggle",d_);T();Pt();ct();T();Re();xi();up();ct();sa();var EL=`: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 nb=`.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
+ `;dp();var ob=`.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 ib=`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 bG=["is-critical","mark-red","mark-blue","mark-green","mark-gray","has-conflict","triage-inprogress","triage-fixed","triage-invalid","triage-deleted","triage-ignored","selected"],p_=class extends X{static properties={group:{attribute:!1},selected:{type:Boolean}};static styles=[F(qi),F(ob),F(EL),F(ib),F(nb)];_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(U1(this.group));this.selected&&t.add("selected");for(let r of bG)this.classList.toggle(r,t.has(r));return d`<div class="row">${DM(this.group)}</div>`}connectedCallback(){super.connectedCallback(),nr(this.renderRoot),this.addEventListener("click",this._onClick),this._watching=!0,pc(this,t=>this._onNear(t))}disconnectedCallback(){this.removeEventListener("click",this._onClick),this._watching&&(Po(this),this._watching=!1),super.disconnectedCallback()}_onNear(t){t?(this._watching&&(Po(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",p_);var ML=`: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 f_=class extends J{static properties={items:{attribute:!1},selectedGid:{attribute:!1}};static styles=F(ML);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",f_);T();Re();xi();up();ct();sa();Lm();var RL=`: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
+ `;dp();Wg();var wG=["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"],h_=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(qi),F(ob),F(RL),F(ib),F(nb),F(Zi),F(bc)];_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(NM(this.group));for(let r of wG)this.classList.toggle(r,t.has(r));return d`<div class="card">${PM(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&&(Hl(t,n),t.dataset.revealedTo=String(Math.round(t.scrollTop)))}}connectedCallback(){if(super.connectedCallback(),nr(this.renderRoot),this.lazy){this._watched=this.closest(".flat-group")??this,pc(this._watched,t=>this._onNear(t));return}this.hasUpdated&&this.requestUpdate()}disconnectedCallback(){this._watched&&(Po(this._watched),this._watched=null),super.disconnectedCallback()}_onNear(t){t?(this._watched&&(Po(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",h_);T();var AL=`: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
+ `;var xG=["red","blue","green","gray"],m_=class extends J{static properties={selected:{type:String},disabled:{type:Boolean}};static styles=F(AL);constructor(){super(),this.selected=null,this.disabled=!1}render(){return d`${xG.map(t=>d`<button type="button" class="${`color-${t}${this.selected===t?" active":""}`}" data-color="${t}" aria-label="${`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",m_);e1();T();He();Re();U();var g_=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})}" data-tooltip="${s}">Confidence</span> <span class="${z({"conf-range":!0,replaced:i,disabled:o})}" ?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",g_);T();He();dr();Re();U();var IL={files:"Filter files\u2026",code:"Search code\u2026",issues:"Search issues\u2026"},TL={files:"Filter files",code:"Search code",issues:"Search issues"},$G=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>`,_G={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>`},b_=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=IL[n]??IL.files;return d`${$G} <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="${TL[i]??i}" aria-label="${TL[i]??i}" @click="${()=>this._selectMode(i)}">${_G[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",b_);var wc=320,v_=class extends HTMLElement{constructor(){super(),this._drag=null,this.addEventListener("pointerdown",t=>this._startDrag(t)),this.addEventListener("pointermove",t=>{this._drag?.id===t.pointerId&&(wc=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",()=>{wc=320,this._apply(wc)})}connectedCallback(){this._view=this.closest(".bundle-code-view"),this._view&&(this._observer=new ResizeObserver(()=>this._apply(wc)),this._observer.observe(this._view),this._apply(wc))}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(),wc=this._apply(i))}};customElements.define("bundle-code-splitter",v_);T();He();dr();Re();U();var SG=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>`,y_=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`${SG} <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",y_);T();dr();Re();U();function no(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 CG={packages:{stateKey:"packagesSearchQuery",label:"Filter packages"},repositories:{stateKey:"repositoriesSearchQuery",label:"Filter repositories"}},w_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=no("entity-search",CG,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",w_);T();dr();Re();U();var EG=[["findings-desc","Findings \u2193"],["files-desc","Files \u2193"],["reports-desc","Reports \u2193"],["name-asc","Name A\u2192Z"]],MG={packages:{stateKey:"packagesSortBy",aria:"Sort packages"},repositories:{stateKey:"repositoriesSortBy",aria:"Sort repositories"}},k_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=no("entity-sort",MG,this.kind);return t?d`<select class="packages-sort" aria-label="${t.aria}" .value="${ke(l[t.stateKey])}" @change="${this._onChange}">${EG.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",k_);T();dr();Re();U();var x_=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",x_);T();var LL=`: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 $_=class extends J{static properties={min:{type:Number},max:{type:Number},step:{type:Number},low:{type:Number},high:{type:Number}};static styles=F(LL);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",$_);T();var __=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",__);vu();T();U();mr();qt();pe();var FL=`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 S_=class extends D{static styles=[...D.styles,F(FL)];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 w0();ao(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 k0(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 x0(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",S_);function BL(){return le("triage-export-dialog")}T();dr();var OL=`: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 C_=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>`,NL=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>`,E_=class extends J{static properties={url:{type:String},editable:{type:Boolean,reflect:!0},editing:{type:Boolean,reflect:!0},_copied:{state:!0}};static styles=F(OL);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?Qe(this.url):"Set repo";return d`<span class="${t?"chip":"chip empty"}" aria-hidden="true" inert>${C_} <span class="label">${r}</span> <button type="button" class="edit-btn">${NL}</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?Qe(this.url):"Set repo",n=t?this._copied?"chip copied":"chip":"chip empty";return d`<span class="${n}" @click="${t?null:this._onEdit}">${C_} ${t?this._slugLabel(r):d`<span class="label">${r}</span>`} <button type="button" class="edit-btn" aria-label="Edit repo URL" @click="${this._onEdit}">${NL}</button></span>`}if(this.url){let t=this._copied?"chip readonly copied":"chip readonly";return d`<span class="${t}">${C_} ${this._slugLabel(Qe(this.url))}</span>`}return m}_slugLabel(t){return d`<span class="label" @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=Qe(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",E_);T();He();Je();Re();U();ht();var TG=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>`,LG=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>`,FG=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>`,BG=V(El.replace('width="14" height="14"','width="12" height="12"')),OG=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>`,NG=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>`,PG=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>`,DG=[{key:"comment",glyph:TG,label:"commented",stateKey:"filterComment",hasKey:"hasComment"},{key:"fix",glyph:LG,label:"fixed",stateKey:"filterFix",hasKey:"hasFix"},{key:"flag",glyph:FG,label:"flagged",stateKey:"filterFlagged",hasKey:"hasFlagged"},{key:"duplicates",glyph:BG,label:"rows with duplicates in other reports",stateKey:"filterDuplicates",hasKey:"hasDuplicates"},{key:"cross-context",glyph:OG,label:"rows across multiple repos or packages",stateKey:"filterCrossContext",hasKey:"hasCrossContext"},{key:"app-stacked",glyph:NG,label:"stacked App rows",stateKey:"filterAppStacked",hasKey:"hasAppStacked"},{key:"security",glyph:PG,label:"security-related rows",stateKey:"filterSecurity",hasKey:"hasSecurityContrast"}],PL=new Set(["duplicates","cross-context","app-stacked","security"]),M_=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=DG.filter(n=>this.group==="context"===PL.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=PL.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",M_);T();He();Re();U();var zG=[["critical","Critical"],["high","High"],["medium","Medium"],["low","Low"],["high_bug","High bug"],["bug","Bug"],["informational","Info"]],R_=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=zG.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",R_);T();He();Re();U();var UG=[["corrected","Corrected","Show corrected severities (application-specific re-ratings)"],["original","Original",m]],A_=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">${UG.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",A_);T();He();Re();U();var HG=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>`,DL="Show underlying code findings",jG=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>`,zL="Show only upstream dependency findings",I_=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="${DL}" data-tooltip="${DL}" ?disabled="${!n||i}" @click="${this._toggleDetail}">${HG}</button>`:m}${this.canUpstream?d`<button type="button" class="${z({"revalidation-upstream":!0,on:s})}" aria-pressed="${String(s)}" aria-label="${zL}" data-tooltip="${zL}" ?disabled="${this.upstreamDisabled}" @click="${this._toggleUpstream}">${jG}</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",I_);bw();var UL=`: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 T_=class extends V3{static properties={checked:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},label:{type:String},accessibleLabel:{type:String,attribute:"accessible-label"}};static styles=G3(UL);constructor(){super(),this.checked=!1,this.disabled=!1,this.label="",this.accessibleLabel=""}_checkboxClick(t){(this.disabled||t.target.tagName!=="INPUT")&&t.stopPropagation()}render(){return cu`<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",T_);Re();U();var WG=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>`,L_=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}">${WG}<span>Delete current</span></button>`}};customElements.define("sidebar-delete-current",L_);T();He();Re();U();var GG=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>`,KG=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>`,qG={packages:{title:"Show packages",icon:GG,view:"packages"},repositories:{title:"Show repositories",icon:KG,view:"repositories"}},F_=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=no("sidebar-view-button",qG,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})}" aria-label="${t.title}">${t.icon}<span class="view-btn-count">${this.count}</span></button>`}};customElements.define("sidebar-view-button",F_);T();He();Re();U();var YG=["invalid","deleted"],XG={package:{stateKey:"packageSlideTriage"},repository:{stateKey:"repositorySlideTriage"}},B_=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=no("slide-triage-tabs",XG,this.kind);if(!t)return m;let r=l[t.stateKey],n=YG.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",B_);He();Re();U();var JG=[["own","Sources"],["modules","Deps"]],O_=class extends X{createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),st(this,{role:"group","aria-label":"Source filter"})}render(){return d`${JG.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",O_);T();He();dr();Re();U();var ZG=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>`,QG=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>`,eK={findings:{stateKey:"filterInclude",placeholder:"Search findings\u2026"},files:{stateKey:"filesSearch",placeholder:"Search files\u2026"}},N_=class extends X{static properties={kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.kind=""}render(){let t=no("toolbar-search",eK,this.kind);if(!t)return m;let r=l[t.stateKey];return d`${ZG} <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}">${QG}</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",N_);Re();U();pn();he();cg();var P_=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??Qs,label:r==null?"(no repo)":Qe(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",P_);T();dr();He();Re();he();U();var HL={"":{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"}},D_=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=HL[l.filterPartial]??HL[""];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=Yh.indexOf(l.filterPartial),r=Yh[(t+1)%Yh.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",D_);T();Re();U();var jL=[["none","none","unmarked"],["red","r","red"],["blue","b","blue"],["green","g","green"],["gray","x","gray"]],z_=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 jL.some(([n])=>(this.counts[n]??0)||t.has(n))?d`${jL.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})`}" 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",z_);T();He();Re();U();var tK=["inprogress","fixed","invalid","deleted","ignored"],U_={graph:"graph2-triage-selector",packages:"packages-triage-selector"},rK={inprogress:"In progress"},nK=e=>rK[e]??e.charAt(0).toUpperCase()+e.slice(1),H_=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??tK,r=t.reduce((i,s)=>i+(this.counts[s]??0),0),n=this.variant?U_[this.variant]:null;this.variant&&n===void 0&&console.warn(`<triage-selector>: unknown variant ${JSON.stringify(this.variant)}; expected one of ${Object.keys(U_).map(i=>JSON.stringify(i)).join(", ")} or "".`);for(let i of Object.values(U_))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=nK(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",H_);He();Re();U();Je();ht();var oK={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(S3)}`},iK={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)"},j_=["kanban","focus","table","list","grouped","graph"],V_=class extends X{static properties={modes:{type:String},kind:{type:String}};createRenderRoot(){return this}constructor(){super(),this.modes=j_.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=>j_.includes(o)),n=r.length>0?r:j_;return d`${n.map(o=>d`<button type="button" class="${z({"view-mode-btn":!0,active:t===o})}" aria-label="${iK[o]}" aria-pressed="${String(t===o)}" @click="${()=>this._select(o,t)}">${oK[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",V_);T();so();He();Wr();ug();he();aa();tc();Qu();var KL=6,VL=14,sb=2,WL=24,vp=4,sK=1.5,ab=new Map,lb=new Map,GL="treemap";function aK(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 lK(e,t,r,n){let o=r*r,i=n*n;return Math.max(i*e/o,o/(i*t))}function qL(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,k=1/0;for(;h<n.length;){let y=n[h].value*u,x=y>b?y:b,_=y<v?y:v,S=lK(x,_,g+y,f);if(h===p||S<=k)k=S,g+=y,b=x,v=_,h++;else break}let w=g/f;if(s>=a){let y=i;for(let x=p;x<h;x++){let _=x===h-1?i+a-y:n[x].value*u/w;r.push({node:n[x],x:o,y,w,h:_}),y+=_}o+=w,s-=w}else{let y=o;for(let x=p;x<h;x++){let _=x===h-1?o+s-y:n[x].value*u/w;r.push({node:n[x],x:y,y:i,w:_,h:w}),y+=_}i+=w,a-=w}p=h}return r}function YL(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())YL(t)}function XL(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+=XL(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 JL(e,t,r,n,o,i,s){if(n<vp||o<vp)return;if(e.isFile){s.push({kind:"file",node:e,x:t,y:r,w:n,h:o});return}if(!(i<KL&&n>=WL&&o>=WL&&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>=VL+vp+sb?VL:0,u=t+sb,p=r+c,f=n-sb*2,h=o-c-sb;if(f<vp||h<vp)return;let g=[...e.children.values()].toSorted((b,v)=>v.value-b.value);for(let b of qL(g,{x:u,y:p,w:f,h}))JL(b.node,b.x,b.y,b.w,b.h,i+1,s)}function W_(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 cK(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 dK(e,t){let r=Math.max(4,Math.floor(t/6.4));return e.length>r?`${e.slice(0,r-1)}\u2026`:e}var G_=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=GL,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=lb.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=Yt(this.details),r=[...t.keys()].filter(h=>t.get(h)!==null);if(r.length===0){this._status="empty";return}this._reasons=Bo(this.details,r),this._reasons.has(this._reason)||(this._reason="",lb.delete(this.details.integrity));let n=this._reasons.get(this._reason),o=Vr(this.details),i=Dl(this.details),{prefix:s,stripped:a}=_r(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,k=!1;for(let x=0;x<b.length-1;x++){let _=v.children.get(b[x]);if(_&&_.isFile){k=!0;break}_||(_={name:b[x],children:new Map,value:0,isFile:!1},v.children.set(b[x],_)),v=_}if(k)continue;let w=b.at(-1),y=v.children.get(w);if(!(y&&!y.isFile)){if(!y){let x=gt(a[h],{packageDir:o?.get(r[h])});y={name:w,isFile:!0,value:0,origPath:r[h],pkg:x,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())YL(h);let p=new Map;XL(c,"",null,p),this._root=c,this._dirByPath=p,this._meta={total:u,prefix:s},this._status="ok";let f=this.details?.integrity?ab.get(this.details.integrity):null;if(f){let h=p.get(f);h?this._focus=this._chainTo(h):ab.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?ab.set(t,r):ab.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",GL=this._mode,this._hideTooltip()}_changeReason(t){this._reason=t.detail.value.replace(/^reason:/u,"");let r=this.details?.integrity;r&&(this._reason?lb.set(r,this._reason):lb.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-truncated 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" data-tooltip-truncated data-tooltip="${o.path}">${o.name}</span>`:""}</nav>`}_cell(t){let r=W_(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??gt(t.node.path),s=cr(i),a=Me({...n,background:s,color:aK(s)}),c=Qn(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=W_(t.value,n),i=t.pkg??gt(t.path),s=cr(i),a=Qn(i);if(t.isFile)return Et`<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 Et`<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,KL),c=Math.min(Math.max(s*.18,26),s*.45),u=(s-c)/a,p=this._meta.total||1,f=[],h=(w,y,x,_)=>{let S=[...w.children.values()].toSorted((P,L)=>L.value-P.value),M=x-y,A=y;for(let P of S){let L=M*(P.value/w.value),R=c+(_-1)*u,W=R+u;L*W>=sK&&(f.push(this._arc(P,cK(o,i,R,W,A,A+L),p)),!P.isFile&&_<a&&P.children.size>0&&h(P,A,A+L,_+1)),A+=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?Et`<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 ${W_(t.value,p)}%`}
239
+ ></circle>`:Et`<circle class="bundle-treemap-center" cx=${o} cy=${i} r=${b}></circle>`,k=Et`<text class="bundle-treemap-center-label" x=${o} y=${i} text-anchor="middle">
240
+ ${g?Et`<tspan x=${o} dy="-0.3em">${dK(t.name,b*2-12)}</tspan><tspan class="bundle-treemap-center-sub" x=${o} dy="1.5em">${we(t.value)}</tspan>`:Et`<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}${k}</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 qL(c,{x:0,y:0,w:this._w,h:this._h}))JL(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",G_);T();Pt();so();U();he();aa();tc();Wr();Mo();ix();Wr();function tF(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 cb(e){return Eu(e)??0}function uK(e,t){return e===t||e?.format==="base64"&&t?.format==="base64"&&e.data===t.data}function QL(e){return(t,r)=>Math.abs(r.delta)-Math.abs(t.delta)||t[e].localeCompare(r[e])}function db(e){return(t,r)=>r.bytes-t.bytes||t[e].localeCompare(r[e])}function pK(){return{baseBytes:0,otherBytes:0,onlyBaseFiles:0,onlyOtherFiles:0,changedFiles:0}}function rF(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 x=r(y),_=h.get(x);return _||(_=pK(),h.set(x,_)),_},b=new Set([...e.keys(),...t.keys()]);for(let y of b){let x=e.has(y),_=t.has(y),S=g(y);if(x&&_){let M=e.get(y),A=t.get(y),P=uK(M,A),L=cb(M),R=P?L:cb(A);if(s+=L,a+=R,S.baseBytes+=L,S.otherBytes+=R,P)f++;else{let W=R-L;i.push({path:y,baseBytes:L,otherBytes:R,delta:W}),p+=W,S.changedFiles++}}else if(x){let M=cb(e.get(y));s+=M,c+=M,S.baseBytes+=M,S.onlyBaseFiles++,n.push({path:y,bytes:M})}else{let M=cb(t.get(y));a+=M,u+=M,S.otherBytes+=M,S.onlyOtherFiles++,o.push({path:y,bytes:M})}}let v=[],k=[],w=[];for(let[y,x]of h){let _=x.baseBytes>0||x.onlyBaseFiles>0||x.changedFiles>0,S=x.otherBytes>0||x.onlyOtherFiles>0||x.changedFiles>0,M=x.onlyBaseFiles+x.onlyOtherFiles+x.changedFiles;_&&!S?v.push({pkg:y,bytes:x.baseBytes}):S&&!_?k.push({pkg:y,bytes:x.otherBytes}):(M>0||x.baseBytes!==x.otherBytes)&&w.push({pkg:y,baseBytes:x.baseBytes,otherBytes:x.otherBytes,delta:x.otherBytes-x.baseBytes})}return n.sort(db("path")),o.sort(db("path")),i.sort(QL("path")),v.sort(db("pkg")),k.sort(db("pkg")),w.sort(QL("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:k,changed:w}}}function eF(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 yp(e,t){if(e===t)return 0;let r=eF(e),n=eF(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 fK(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 hK(e,t){let r=yp(t.at(-1),e.at(-1));return r>0?"up":r<0?"down":"changed"}function nF(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(yp),f=[...u].toSorted(yp);if(fK(p,f))continue;r.push({pkg:a,baseVersions:p,otherVersions:f,direction:hK(p,f)})}else c?o.push({pkg:a,versions:[...c].toSorted(yp)}):n.push({pkg:a,versions:[...u].toSorted(yp)})}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}}}Wr();function K_(...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 ub(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 q_(e,t=""){let r=new Map;if(e?.kind!=="stasis"||!e.bundle)return r;let n=t?hn(e):null,o=t?ub(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 mK=/[ \t\n\v\f\r]/gu,gK=/[ \t\n\v\f\r]+/gu,oF=/[ \t\n\v\f\r]+$/u,iF=e=>e.replace(/[A-Z]/gu,t=>t.toLowerCase());function pb({ignoreCase:e=!1,whitespace:t="none"}={}){let r=null;return t==="all"?r=n=>n.replace(mK,""):t==="change"?r=n=>n.replace(oF,"").replace(gK," "):t==="trailing"&&(r=n=>n.replace(oF,"")),e?r?n=>iF(r(n)):iF:r}function Qi(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 kc=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(?: ?(.*?))?\n?$/u,_a=/^\*{15,}(?: (.*?))?\n?$/u,fb=/^\*{3} (\d+)(?:,(\d+))? \*{4}\n?$/u,wp=/^--- (\d+)(?:,(\d+))? ----\n?$/u,xc=/^(\d+)(?:,(\d+))?([acd])(\d+)(?:,(\d+))?[ \t]*\r?\n?$/u;var Yr=class extends Error{constructor(t,r){super(r===void 0?t:`${t} at line ${r+1}`),this.name="PatchError",this.line=r}},sF=(e,t)=>t===0?Number(e):Number(e)-1,Y_=e=>e!==void 0&&e.startsWith("\\"),X_=e=>e.replace(/\n$/u,"");function J_(e){let t=Qi(e),r=[],n={old:null,new:null},o=!1;for(let i=0;i<t.length;){let s=t[i],a=aF(s,o);if(o=s.startsWith("***************")?!1:s.startsWith("*** "),a){n=a.names??{...n,[a.slot]:a.name},i++;continue}let c=kc.test(s)?"unified":_a.test(s)?"context":xc.test(s)?"normal":null;if(c===null){i++;continue}let u=[],p=xK[c];for(let f=p(t,i);f!==null&&(u.push(f.hunk),i=f.next,!(i>=t.length||aF(t[i],!1)));f=p(t,i));r.push({old:n.old,new:n.new,format:c,hunks:u,blocks:bK(u)}),n={old:null,new:null}}return r}function aF(e,t){let r=/^diff --git (\S+) (\S+)\n?$/u.exec(e);if(r)return{names:{old:r[1],new:r[2]}};if(fb.test(e)||wp.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 bK(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 vK(e,t){let r=kc.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:sF(r[1],n),newStart:sF(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 Yr("the patch ends inside a hunk",a);let p=u===`
243
+ `?" ":u[0];if(p!==" "&&p!=="-"&&p!=="+")throw new Yr(`a hunk line begins with ${JSON.stringify(p)}`,a);let f=u===`
244
+ `?u:u.slice(1);if(Y_(e[a+1])&&(f=X_(f),a++),p!=="+"&&c++,p!=="-"&&s++,c>n||s>o)throw new Yr("a hunk has more lines than its header says",a);i.lines.push({tag:p,text:f})}return{hunk:i,next:a}}function yK(e,t){let r=xc.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 Yr("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 k=0;k<g;k++,f++){let w=e[f];if(w===void 0)throw new Yr("the patch ends inside a hunk",f);if(w[0]!==b)throw new Yr(`${JSON.stringify(b)} expected`,f);let y=w.slice(2);Y_(e[f+1])&&(y=X_(y),f++),p.lines.push({tag:v,text:y})}};if(h(c,"<","-"),i==="c"){if(e[f]!==`---
245
+ `)throw new Yr("'---' expected",f);f++}return h(u,">","+"),{hunk:p,next:f}}function wK(e,t){let r=_a.exec(e[t]??"");if(!r)return null;let n=fb.exec(e[t+1]??"");if(!n)throw new Yr("'*** ' range expected",t+1);let o=t+2,i=cF(e,o,wp,"-");o=i.next;let s=wp.exec(e[o]??"");if(!s)throw new Yr("'--- ' range expected",o);let a=cF(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=lF(n,c.length),f=lF(s,u.length);return{hunk:{oldStart:p,newStart:f,label:r[1]||null,lines:kK(c,u)},next:a.next}}var lF=(e,t)=>t===0?Number(e[1]):Number(e[1])-1;function cF(e,t,r,n){let o=[],i=t;for(;i<e.length;i++){let s=e[i];if(r&&r.test(s)||_a.test(s)||fb.test(s)||!r&&wp.test(s))break;if(Y_(s)){o[o.length-1].text=X_(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 kK(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 xK={unified:vK,context:wK,normal:yK};var Uo=class extends Error{constructor(t){super(`the rendered diff does not say what the change set says (${t})`),this.name="FormatError"}};function Z_(e,t,r,n){if(r.length===0){if(n!=="")throw new Uo("there was nothing to print, and something was printed");return}let o;try{o=J_(n)}catch(s){throw new Uo(`it does not read back (${s.message})`)}if(o.length!==1)throw new Uo(`${o.length} files read back, not one`);let i=o[0].blocks;if(i.length!==r.length)throw new Uo(`${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 Uo(`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 Uo(`a ${u==="+"?"added":u==="-"?"removed":"kept"} line is not the line it stands for`);u!=="+"&&a++,u!=="-"&&c++}}}function hF(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 $K=`
248
+ \
249
+ `,Ho=(e,t)=>e+t+(t.endsWith(`
250
+ `)?"":$K);function dF(e,t){return t>e+1?`${e+1},${t}`:`${t>e?e+1:e}`}function mF(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+=dF(o,i)+c+dF(s,a)+`
251
+ `;for(let u=o;u<i;u++)n+=Ho("< ",e[u]);c==="c"&&(n+=`---
252
+ `);for(let u=s;u<a;u++)n+=Ho("> ",t[u])}return Z_(e,t,r,n),n}function uF(e,t){return t<=e?`${e},0`:t===e+1?`${e+1}`:`${e+1},${t-e}`}function gF(e,t,r,{context:n,label:o=null}){let i="";for(let s of hF(r,n,e.length,t.length)){let a=o?o(s.a0):null;i+=`@@ -${uF(s.a0,s.a1)} +${uF(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+=Ho(" ",e[c]);for(;c<f;c++)i+=Ho("-",e[c]);for(;u<h;u++)i+=Ho("+",t[u])}for(;c<s.a1;c++,u++)i+=Ho(" ",e[c])}return Z_(e,t,r,i),i}function pF(e,t){return t<=e?`${e}`:t===e+1?`${e+1}`:`${e+1},${t}`}function bF(e,t,r,{context:n,label:o=null}){let i="";for(let s of hF(r,n,e.length,t.length)){let a=o?o(s.a0):null;i+=`***************${a===null?"":" "+a}
254
+ `,i+=`*** ${pF(s.a0,s.a1)} ****
255
+ `,s.blocks.some(c=>c.a0<c.a1)&&(i+=fF(e,s.a0,s.a1,s.blocks,"a")),i+=`--- ${pF(s.b0,s.b1)} ----
256
+ `,s.blocks.some(c=>c.b0<c.b1)&&(i+=fF(t,s.b0,s.b1,s.blocks,"b"))}return Z_(e,t,r,i),i}function fF(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+=Ho(" ",e[u]);let f=p[a+"0"]<p[a+"1"]?"! ":o==="a"?"- ":"+ ";for(;u<p[i];u++)c+=Ho(f,e[u])}for(;u<r;u++)c+=Ho(" ",e[u]);return c}function _K(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 Q_(e,t,r){let n=t.length,o=_K(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 SK(e){let t=1;for(let r=e;r!==0;r>>=2)t<<=1;return Math.max(256,t)}function vF(e,t,{ignoreCase:r=!1,whitespace:n="none",minimal:o=!1,slide:i=!0}={}){let s=pb({ignoreCase:r,whitespace:n});if(s===null&&eS(e,t,null))return[];let{A:a,B:c}=CK(e,t,s),u=new Uint8Array(a.length),p=new Uint8Array(c.length);EK(a,c,u,p,o),i&&(Q_(a,u,p),Q_(c,p,u));let f=AK(u,p);return IK(e,t,f,s),f}function eS(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 CK(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 EK(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:SK(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}MK(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 MK(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,k=t-n,w=v,y=v,x=k,_=k,S=(k-v&1)!==0;u[f+k]=t,p[f+v]=r;for(let M=1;;M++){_>b?u[f+--_-1]=-1:++_,x<g?u[f+ ++x+1]=-1:--x;for(let A=x;A>=_;A-=2){let P=u[f+A+1],L=u[f+A-1],R=L<P?P:L+1,W=R-A;for(;R<r&&W<o&&a[R]===c[W];)R++,W++;if(u[f+A]=R,S&&y<=A&&A<=w&&p[f+A]<=R){s.xmid=R,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 A=w;A>=y;A-=2){let P=p[f+A+1],L=p[f+A-1],R=L<P?L:P-1,W=R-A;for(;t<R&&n<W&&a[R-1]===c[W-1];)R--,W--;if(p[f+A]=R,!S&&_<=A&&A<=x&&R<=u[f+A]){s.xmid=R,s.ymid=W,s.loMinimal=s.hiMinimal=!0;return}}if(!(i||M<h)){RK(e,{xoff:t,xlim:r,yoff:n,ylim:o,fmin:_,fmax:x,bmin:y,bmax:w},s);return}}}function RK(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 x=Math.min(n[i+y],a),_=x-y;u<_&&(x=u+y,_=u),v<x+_&&(v=x+_,b=x)}let k=0,w=2147483647;for(let y=g;y>=h;y-=2){let x=Math.max(s,o[i+y]),_=x-y;_<c&&(x=c+y,_=c),x+_<w&&(w=x+_,k=x)}a+u-w<v-(s+c)?(r.xmid=b,r.ymid=v-b,r.loMinimal=!0,r.hiMinimal=!1):(r.xmid=k,r.ymid=w-k,r.loMinimal=!1,r.hiMinimal=!0)}function AK(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 IK(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 TK={unified:gF,context:bF},yF=`Files differ
257
+ `;function LK(e,t,r){if(e===t)return"";let n=pb(r);return n===null?yF:eS(Qi(e),Qi(t),n)?"":yF}function tS(e,t,{format:r="unified",context:n=3,label:o=null,...i}={}){if(r==="brief")return LK(e,t,i);let s=Qi(e),a=Qi(t),{slide:c=r!=="normal"&&n>0,...u}=i,p=vF(s,a,{...u,slide:c});return p.length===0?"":r==="normal"?mF(s,a,p):TK[r](s,a,p,{context:n,label:o})}var FK={unified:[[/^--- /u,"bold"],[/^\+\+\+ /u,"bold"],[kc,"cyan"],[/^\+/u,"green"],[/^-/u,"red"],[/^\\ /u,"gray"]],context:[[_a,"cyan"],[/^\*{3} \d/u,"cyan"],[/^--- \d/u,"cyan"],[/^\*{3} /u,"bold"],[/^--- /u,"bold"],[/^! /u,"yellow"],[/^\+ /u,"green"],[/^- /u,"red"]],normal:[[xc,"cyan"],[/^< /u,"red"],[/^> /u,"green"],[/^---$/u,"gray"]]};function BK(e){return e.some(t=>_a.test(t))?"context":e.some(t=>kc.test(t))?"unified":e.some(t=>xc.test(t))?"normal":null}function wF(e){let t=e.split(`
258
+ `),r=FK[BK(t)];return r===void 0?null:t.map(n=>r.find(([o])=>o.test(n))?.[1]??null)}var OK={bold:"head",cyan:"hunk",green:"add",red:"del",yellow:"chg",gray:"meta"};function kF(e){let t=wF(e);return t===null?null:e.split(`
259
+ `).map((r,n)=>({text:r,kind:t[n]===null?"":OK[t[n]]??""}))}function xF(e,t){if(typeof e!="string"||typeof t!="string")return null;let r=tS(e,t,{format:"unified",context:3});return kF(r)??r.split(`
260
+ `).map(n=>({text:n,kind:""}))}Wr();he();ra();var $F=`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 rS=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(Zi),F($F)];constructor(){super(),this._lines=null,this._error=null,this._highlighted=null}beforeOpen(){if(this.kind==="changed")try{this._lines=xF(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 Hr(t,Mr(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(Eu(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",rS);function _F(e){return $i("bundle-file-dialog",e,t=>{t.before=null,t.after=null})}$l();dg();Qu();var SF=400,$c=null;function oS(e){return e===0?"\xB10":`${e>0?"+":"\u2212"}${Math.abs(e).toLocaleString()}`}function CF(e){return`${oS(e)} B`}function hb(e){return e>0?"up":e<0?"down":""}function PK(e,t){if(!t)return"";let r=e/t*100;return`${r>0?"+":r<0?"\u2212":"\xB1"}${Math.abs(r).toFixed(1)}%`}function nS(e){return e.join(", ")}var iS=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"&&!K_(this.details,this._otherDetails).some(r=>r.id===this._scope)&&(this._scope=""),!!t.has("integrity")){if($c&&this.integrity===$c.base){let r=$c.target;this._scope=$c.scope,$c=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||rc(l.bundles??[],this.integrity).some(r=>r.integrity===t)&&($c={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=rc(l.bundles??[],this.integrity).find(o=>o.integrity===t);if(!r){this._status="idle",this._targetIntegrity=null;return}let n;try{n=await So(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;_F({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=>_t(o.message,{kind:"error"}))}_fileRow(t,r,n,o){let i=d`<span class="bundle-compare-row-path mono" data-tooltip-truncated data-tooltip="${t}">${r}</span>${o}`;return n==="removed"&&Dl(this.details).get(t)!=="resource"?d`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" data-bundle-view-source="${t}">${i}</button></li>`:d`<li><button type="button" class="bundle-compare-row bundle-compare-row-link" @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,SF),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 ${hb(t.delta)}`}">${CF(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"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${Qn(o.pkg)}">${Qn(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" aria-label="${`${t.pkg} \xB7 ${n}`}"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(t.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${t.pkg}">${t.pkg}</span> <span class="bundle-compare-ver"><span class="bundle-compare-ver-from">${nS(t.baseVersions)}</span> <span class="bundle-compare-ver-arrow" aria-hidden="true">→</span> <span class="${`bundle-compare-ver-to ${t.direction}`}">${nS(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"><span class="bundle-compare-pkg-dot" style="${Me({background:cr(o.pkg)})}"></span> <span class="bundle-compare-row-path" data-tooltip-truncated data-tooltip="${o.pkg}">${o.pkg}</span> <span class="bundle-compare-dep-ver">${nS(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,SF),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=ub(this.details,this._scope),n=ub(this._otherDetails,this._scope),{prefix:o}=_r([...r.keys(),...n.keys()]),i=Vr(this.details),s=Vr(this._otherDetails),a=i||s?new Map([...i??[],...s??[]]):null,c=u=>gt(o&&u.startsWith(o)?u.slice(o.length):u,{packageDir:a?.get(u)});this._diff=rF(r,n,c),this._diff.resolutions=tF(q_(this.details,this._scope),q_(this._otherDetails,this._scope)),this._diff.versionUpdates=nF(Mu(this.details,this._scope?r.keys():null),Mu(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=PK(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 ${hb(r.fileDelta)}`}">${oS(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 ${hb(r.byteDelta)}`}">${CF(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 ${hb(i)}`}">${oS(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" data-tooltip-truncated data-tooltip="${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=rc(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?K_(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}=_r(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",iS);T();Re();U();var sS=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}">${S7}</button>`:m}_onClick=()=>{this.dispatchEvent(new CustomEvent("download-requested",{bubbles:!0,composed:!0}))}};customElements.define("download-button",sS);T();Je();T();Re();xi();var es=class extends X{static styles=Le`.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(),nr(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&&(ki(),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();ow();Lh();ht();var aS={open:"Open",draft:"Draft",closed:"Closed",merged:"Merged",completed:"Completed",not_planned:"Not planned",duplicate:"Duplicate",unknown:"Closed"},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="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>`,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"/><circle cx="8" cy="8" r="1.5" fill="currentColor" stroke="none"/></svg>`,UK=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>`,HK=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>`,jK={completed:UK,not_planned:HK},lS=class extends es{static properties={url:{type:String},compact:{type:Boolean,reflect:!0}};static styles=[es.styles,Le`: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=f3(()=>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=tw(this.url),r=!t&&rw(this.url),n=t||r,o=iw.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?DK:r?jK[i]??zK: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?`${aS[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}`}">${aS[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(Vn)}<span>${a}</span></span> <span class="${`status ${i}`}">${s}${o?aS[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",lS);T();U();Gl();Pm();Dm();Wg();var cS=class extends es{static properties={finding:{attribute:!1},comment:{type:String}};static styles=[es.styles,F(bc),Le`: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?Bm(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?Yn(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=>Kl(s,Ao(s.body))):d`<div class="comment-body">${Ao(this.comment)}</div><div class="preview-footer"><button type="button" class="mark-comment edit-hint">Edit</button></div>`}</div>`}};customElements.define("comment-preview",cS);U();dn();qt();Zn();T();U();ge();ge();gs();function RF(e){if(Ar(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 ft(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 VK(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 EF(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 jo(e,t,r){let n=(e.byId.get(t)??[]).map(o=>r==="verdict"?$e(o)||null:r==="severity"?Lr(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 MF=(e,t)=>e.length===t.length&&e.every((r,n)=>r===t[n]),mb=(e,t)=>[...e].filter(r=>!t.has(r)).toSorted();function AF(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=>VK(b.rows.map(v=>v.filter(k=>i.has(k)))),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 k=jo(e,b,v),w=jo(t,b,v),y={id:b,before:k,after:w};if(v==="severity"&&(y.originalBefore=jo(e,b,"originalSeverity"),y.originalAfter=jo(t,b,"originalSeverity")),MF(k,w)&&(v!=="severity"||MF(y.originalBefore,y.originalAfter)))continue;if(v!=="verdict"){u[v].push(y);continue}let x=w.length===1&&w[0]==="confirmed"?"confirmed":w.length===1&&w[0]==="refuted"?"refuted":"otherVerdicts";u[x].push(y)}let p=EF(mb(c,a)),f=EF(mb(a,c)),h=mb(n,r),g=mb(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 IF=`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 dS=()=>({key:"",name:"",report:null,error:"",loading:!1}),Sa=(e,t)=>e.map(r=>r===null?"Not supplied":t==="confidence"?`${r}/10`:String(r).replaceAll("_"," ")).join(" / "),uS=50,pS=class extends D{static styles=[...D.styles,F(IF)];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=[dS(),dS()],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?AF(n,o):null}async _select(t,r,n){let o=++this._tokens[t],i={...dS(),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:RF(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]??uS;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+uS}}}">Show ${Math.min(uS,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">${Sa(t.before,r)}</span><span aria-label="to">→</span><span>${Sa(t.after,r)}</span> ${n?d`<small>Original: ${Sa(t.originalBefore)} → ${Sa(t.originalAfter)}</small>`:m}</span></li>`}_presenceRow(t,r){let n=Sa(jo(r,t,"verdict"));return d`<li class="change-row">${this._finding(t)}<span class="change-value"> <span>${Sa(jo(r,t,"severity"))}</span><span>${Sa(jo(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=>jo(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",pS);function TF(){if(C())throw new Error("Report comparison is available in local/E2E mode.");return le("report-compare-dialog")}ct();function kp(e){let t=new Map;for(let[r,n]of l.triage)n[e]&&t.set(r,n[e]);return t}var GK={get markers(){return kp("color")},get triageState(){return kp("triage")},get comments(){return kp("comment")},get fixes(){return kp("fix")},get flags(){return kp("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 Er()},get findings(){return Er().flat()},get currentFile(){return l.currentFile},get currentWorkspace(){return l.currentWorkspace},triage:GK,forceManagedMode:h7,setTheme:SL,get theme(){return CL()},triageSync:te,refresh(){E()},export(){return BL()},compareReports(){return TF()}};m1();un();ht();var KK={default:Se.default,"claude-security":Se["claude-security"],"codex-security":Se["codex-security"],deepsec:Se.deepsec,piolium:Se.piolium,bundle:rr,workspace:yi,links:El,github:Vn};for(let e of document.querySelectorAll(".drop-supported-icon[data-icon]")){let t=KK[e.dataset.icon];t&&(e.innerHTML=t)}hg();R6(E);s0(E);M6(E);te.onStatusChange(E);C6(async(e,t)=>{l.currentWorkspace===e?await Gr(e):l.currentFile&&l.currentFile===t?await ur(t):await Y()});E6(async()=>{await Y(),l.currentView==="bundles"&&E()});g7();v7();async function BF(){let e=B0();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t;try{t=await w7({encoded:e})}catch(n){return alert(`Couldn't open the share-link unlock prompt: ${n.message}`),!1}if(!t)return!1;let r=await Py({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 Gr(r.workspace.id):await Y(),!0}async function OF(){let e=Xo();if(!e)return!1;try{history.replaceState(null,"",location.pathname)}catch{}let t=await p$(e);return t.ok?!0:(alert(t.reason),!1)}var _c=!1;async function NF(){if(await mt(),!_c&&!(!C()&&me()&&!Qt())){_c=!0;try{await qK()}finally{Ye.hidden=!1}}}async function qK(){let e=nt(),t=()=>e===nt()&&!C();if(C()){await Y();return}if(await Cn(),!t()||(Od(),await Promise.all([Y(),th().catch(i=>console.warn("initial linked findings:",i))]),!t())||await BF()||!t()||await OF()||!t())return;let o=Fe(ji);if(o)if(o.startsWith("ws:")){let i=o.slice(3);Q().some(s=>s.id===i)&&await Gr(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)&&(Co(a,u),E(),Eo(a),await Y())}else{let i=await fe();if(!t())return;let s=ih(o);s&&i.includes(s.name)&&await ur(s.name,void 0,{workspaceId:s.workspaceId})}}var gb=!1,LF=!1;document.addEventListener("managed-client-mode-change",()=>{gb=!C()&&me()});function FF(e){LF||(LF=!0,queueMicrotask(()=>{alert(e+" This tab will reload to refresh its state. Any unsaved edits in this tab will be lost."),location.reload()}))}rt(async()=>{if(await mt(),C()){E();return}let e=gb,t=me();if(gb=t,E(),!_c&&Qt()){NF().catch(r=>console.warn("continueBoot:",r));return}if(_c&&t&&!Qt()){FF("Encryption was just enabled in another tab.");return}_c&&e&&!t&&!jb()&&FF("Encryption was disabled in another tab.")});window.addEventListener("hashchange",()=>{!_c||C()||(async()=>{await BF()||await OF()})().catch(e=>console.warn("deep-link hashchange:",e))});(async()=>{if(!await y7()){await mt(),gb=!C()&&me();try{let e=window.matchMedia?.("(display-mode: window-controls-overlay)").matches;if(!e&&!C()&&localStorage.getItem("deepview.sidebarCollapsed")==="1"&&a2.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()&&!Qt()||await NF()}})();
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