@preventive/triage 1.0.0-alpha.27 → 1.0.0-alpha.28

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 (81) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/client/linked-findings.js +1 -1
  3. package/common/bundle-metadata.js +12 -10
  4. package/common/code-language.js +17 -2
  5. package/common/default-scan-models.ts +3 -3
  6. package/common/finding-id.js +1 -1
  7. package/common/managed/report-content.ts +1 -1
  8. package/common/managed/report-filter.ts +1 -1
  9. package/out/client-managed-import.js +16 -16
  10. package/out/client-managed.js +93 -68
  11. package/out/graph.js +11 -11
  12. package/out/index.html +1 -1
  13. package/out/prism.js +2 -2
  14. package/out/stasis.svg +0 -25
  15. package/out/terminal.js +163 -163
  16. package/out/view.css +1 -1
  17. package/out/view.js +223 -190
  18. package/package.json +18 -28
  19. package/server-e2e/static.ts +3 -4
  20. package/server-managed/bundle-advisories.ts +53 -0
  21. package/server-managed/bundle-advisory-inventory.ts +75 -0
  22. package/server-managed/bundle-build-leases.ts +41 -0
  23. package/server-managed/bundle-build-worker.js +44 -0
  24. package/server-managed/bundle-build.ts +141 -0
  25. package/server-managed/bundle-cache.ts +22 -13
  26. package/server-managed/bundle-summary-cache.ts +27 -9
  27. package/server-managed/bundle.ts +66 -1
  28. package/server-managed/cache-storage.ts +4 -0
  29. package/server-managed/content-access.ts +1 -1
  30. package/server-managed/db-methods.ts +122 -20
  31. package/server-managed/db-neon.ts +121 -32
  32. package/server-managed/db-schema.ts +2 -0
  33. package/server-managed/db.ts +5 -1
  34. package/server-managed/github-app.ts +10 -15
  35. package/server-managed/github-errors.ts +21 -0
  36. package/server-managed/github-issues.ts +1 -1
  37. package/server-managed/github-metadata.ts +34 -1
  38. package/server-managed/github-pulls.ts +142 -30
  39. package/server-managed/http.ts +244 -131
  40. package/server-managed/index.ts +25 -9
  41. package/server-managed/management-catalog.ts +45 -0
  42. package/server-managed/object-storage-vercel.ts +1 -1
  43. package/server-managed/public-workspace.ts +20 -14
  44. package/server-managed/report-migration.ts +1 -1
  45. package/server-managed/report-sources.ts +14 -4
  46. package/server-managed/repository-browser.ts +3 -0
  47. package/server-managed/repository-discovery.ts +1 -1
  48. package/server-managed/revisions.ts +35 -0
  49. package/server-managed/sql-postgres.ts +1 -0
  50. package/server-managed/sql.ts +14 -3
  51. package/server-managed/storage-db.ts +12 -5
  52. package/server-managed/storage-maintenance.ts +37 -22
  53. package/server-managed/storage-payload.ts +16 -4
  54. package/server-managed/storage-stores.ts +2 -2
  55. package/server-managed/storage.ts +6 -4
  56. package/server-managed/team-feed.ts +50 -5
  57. package/server-managed/team-reports.ts +85 -22
  58. package/server-managed/workspace-shares.ts +15 -3
  59. package/report/index.js +0 -260
  60. package/report/src/finding-id.js +0 -80
  61. package/report/src/finding.js +0 -314
  62. package/report/src/labels.js +0 -35
  63. package/report/src/md-structure.js +0 -471
  64. package/report/src/md-text.js +0 -167
  65. package/report/src/meta.js +0 -76
  66. package/report/src/parse-codex.js +0 -149
  67. package/report/src/parse-deepsec.js +0 -199
  68. package/report/src/parse-deepview-fields.js +0 -375
  69. package/report/src/parse-deepview-md.js +0 -186
  70. package/report/src/parse-md-id.js +0 -137
  71. package/report/src/parse-md.js +0 -323
  72. package/report/src/parse-piolium-id.js +0 -79
  73. package/report/src/parse-piolium-rows.js +0 -126
  74. package/report/src/parse-piolium-tokens.js +0 -185
  75. package/report/src/parse-piolium.js +0 -399
  76. package/report/src/security.js +0 -63
  77. package/report/src/severity.js +0 -18
  78. package/report/src/utf8.js +0 -21
  79. package/report/src/write-md-finding.js +0 -273
  80. package/report/src/write-md.js +0 -291
  81. /package/{LICENSE → LICENSE-MIT} +0 -0
@@ -1,95 +1,120 @@
1
- var kl=Object.defineProperty;var y=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(i){throw t=[i],i}};var pr=(r,e)=>{for(var t in e)kl(r,t,{get:e[t],enumerable:!0})};function hs(r){return typeof r=="string"&&fe.includes(r)}function Oe(r,e){let t=fe.indexOf(r);return t!==-1&&t<=fe.indexOf(e)}var fe,ur=y(()=>{"use strict";fe=["admin","manage","triage","view","none"]});var ms,hr,mr=y(()=>{"use strict";ms=["dependencies","security"],hr={dependencies:"Dependencies",security:"Security"}});function fs(r=null){let e=["anthropic/claude-opus-5.5","anthropic/claude-fable-5.1","anthropic/claude-sonnet-5","anthropic/claude-haiku-4.5","openai/gpt-6-astra","openai/gpt-6-astra-pro","openai/gpt-6-sol","openai/gpt-6-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"],t=r==="moonshot"?"moonshotai":r,i=e.filter(s=>!["anthropic","openai","moonshot"].includes(r??"")||s.startsWith(`${t}/`)).map(s=>({id:s,efforts:["low","medium","high","xhigh","max"]}));return{models:i,defaultModel:i[0].id}}var gs=y(()=>{"use strict"});var bs,vs,ys,ws=y(()=>{"use strict";gs();bs=fs(),vs=Object.freeze(bs.models),ys=bs.defaultModel});function Sl(r){if(!r?.startsWith("#public="))return null;let e=/^#public=([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]{43})$/u.exec(r);return e?{id:e[1],token:e[2]}:{id:"",token:""}}function q(){return xs}function fr(r=xs){return`/api/shares/${encodeURIComponent(r.id)}/workspace`}var _s,xs,$t=y(()=>{"use strict";_s=globalThis.location?.hash,xs=Sl(_s);globalThis.addEventListener?.("hashchange",()=>{let r=globalThis.location?.hash;r?.startsWith("#public=")&&r!==_s&&globalThis.location.reload()})});function ge(){return ne?.user.role??null}function Cl(r){if(r!==null&&!hs(r))throw new TypeError(`Unknown managed preview role: ${r}. Expected ${fe.join(", ")}.`);kt++,ne=r===null?null:{user:{id:`preview:${r}`,login:r,name:r[0].toUpperCase()+r.slice(1),role:r,avatarUrl:null,lastSeenAt:Date.now(),lastActivityAt:null},csrfToken:null}}function Rl(r,e){let t=new URL(r,"http://managed-preview.invalid").pathname,i=(e?.method??"GET").toUpperCase();if(i==="POST"&&t==="/api/auth/logout")return Response.json({ok:!0});if(i!=="GET")throw new Error("Changes are not saved in the managed UI preview");if(t==="/api/auth/session")return Response.json(ne);if(t==="/api/teams")return Response.json({teams:[]});if(t.startsWith("/api/admin/")&&!Oe(ne.user.role,"manage"))return Response.json({error:"forbidden"},{status:403});if(["/api/admin/users","/api/admin/teams","/api/admin/repositories"].includes(t)&&ne.user.role!=="admin")return Response.json({error:"forbidden"},{status:403});let s={"/api/admin/users":{users:[ne.user]},"/api/admin/teams":{teams:[],users:[ne.user],repos:[],permissions:ms},"/api/admin/links":{shares:[]},"/api/admin/repositories":{repositories:[],total:0,connectedCount:0,installUrl:null,tokenMissing:!1},"/api/admin/reports":{reports:[],repos:[],maxBytes:10485760},"/api/admin/bundles":{bundles:[],repos:[],maxBytes:209715200},"/api/admin/history":{history:[],total:0,page:1,limit:100,filters:{repos:[],users:[]}},"/api/admin/scan/models":{models:vs,defaultModel:ys},"/api/admin/scan-results":{bundles:[],results:[]}};return Object.hasOwn(s,t)?Response.json(s[t]):Response.json({error:"not-found"},{status:404})}async function El(r,e,t){let i=await t("/api/config",{credentials:"same-origin",signal:e.signal});if(!i.ok)return i;let s=(await i.json()).managed,o=s?.uploadChunkBytes;if(!Number.isSafeInteger(o)||o<=0||o>3*1024*1024)return t(r,e);let n=e.body,a=crypto.randomUUID(),l=r.endsWith("/reports")?"reports":"bundles",d=s?.uploadMaxBytes?.[l];if(Number.isSafeInteger(d)&&d>0&&n.size>d)return Response.json({error:"too-large"},{status:413});let u=Math.ceil(n.size/o),p=new Headers(e.headers);p.set("content-type","application/octet-stream");let m=0,f=!1;try{for(let w=0;w<u;w++){m=w+1;let b=await t(`/api/admin/uploads/${l}/${a}/${w}`,{...e,headers:p,body:n.slice(w*o,(w+1)*o)});if(!b.ok)return b}let g=new Headers(e.headers);g.set("x-upload-id",a),g.set("x-upload-parts",String(u)),g.set("x-upload-size",String(n.size));let v=await t(r,{...e,headers:g,body:""});return f=v.ok,v}finally{if(!f&&m>0){let g=new Headers(e.headers);g.set("x-upload-parts",String(m)),await t(`/api/admin/uploads/${l}/${a}`,{...e,method:"DELETE",headers:g,body:void 0,signal:AbortSignal.timeout(1e4)}).catch(()=>{})}}}async function $(r,e){if(e?.signal?.throwIfAborted(),ne)return Rl(r,e);let t=kt;async function i(s,o){if(t!==kt)throw new DOMException("Managed session changed","AbortError");let n=q();if(n){if(new URL(s,globalThis.location.origin).origin!==globalThis.location.origin)throw new Error("Public workspace requests must be same-origin");let d=new Headers(o?.headers);d.set("x-deepview-share",n.token),o={...o,headers:d,credentials:"omit",redirect:"error"}}let a=await fetch(s,{...o,cache:"no-store"});if(t!==kt)throw new DOMException("Managed session changed","AbortError");return a}return e?.method==="POST"&&["/api/admin/reports","/api/admin/bundles"].includes(r)&&e.body instanceof Blob&&e.body.size>3*1024*1024?El(r,e,i):await i(r,e)}var ne,kt,z=y(()=>{"use strict";ur();mr();ws();$t();ne=null,kt=0});var St,Ct,gr,$s,Ye,k,A,ks,br,vr=y(()=>{St=globalThis,Ct=St.ShadowRoot&&(St.ShadyCSS===void 0||St.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,gr=Symbol(),$s=new WeakMap,Ye=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==gr)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(Ct&&e===void 0){let i=t!==void 0&&t.length===1;i&&(e=$s.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&$s.set(t,e))}return e}toString(){return this.cssText}},k=r=>new Ye(typeof r=="string"?r:r+"",void 0,gr),A=(r,...e)=>{let t=r.length===1?r[0]:e.reduce((i,s,o)=>i+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+r[o+1],r[0]);return new Ye(t,r,gr)},ks=(r,e)=>{if(Ct)r.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(let t of e){let i=document.createElement("style"),s=St.litNonce;s!==void 0&&i.setAttribute("nonce",s),i.textContent=t.cssText,r.appendChild(i)}},br=Ct?r=>r:r=>r instanceof CSSStyleSheet?(e=>{let t="";for(let i of e.cssRules)t+=i.cssText;return k(t)})(r):r});var Al,Ml,Il,Ll,zl,Tl,Rt,Ss,Ol,Nl,Xe,yr,Rs,Cs,Y,Et=y(()=>{vr();vr();({is:Al,defineProperty:Ml,getOwnPropertyDescriptor:Il,getOwnPropertyNames:Ll,getOwnPropertySymbols:zl,getPrototypeOf:Tl}=Object),Rt=globalThis,Ss=Rt.trustedTypes,Ol=Ss?Ss.emptyScript:"",Nl=Rt.reactiveElementPolyfillSupport,Xe=(r,e)=>r,yr={toAttribute(r,e){switch(e){case Boolean:r=r?Ol:null;break;case Object:case Array:r=r==null?r:JSON.stringify(r)}return r},fromAttribute(r,e){let t=r;switch(e){case Boolean:t=r!==null;break;case Number:t=r===null?null:Number(r);break;case Object:case Array:try{t=JSON.parse(r)}catch{t=null}}return t}},Rs=(r,e)=>!Al(r,e),Cs={attribute:!0,type:String,converter:yr,reflect:!1,useDefault:!1,hasChanged:Rs};Symbol.metadata??=Symbol("metadata"),Rt.litPropertyMetadata??=new WeakMap;Y=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Cs){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let i=Symbol(),s=this.getPropertyDescriptor(e,i,t);s!==void 0&&Ml(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){let{get:s,set:o}=Il(this.prototype,e)??{get(){return this[t]},set(n){this[t]=n}};return{get:s,set(n){let a=s?.call(this);o?.call(this,n),this.requestUpdate(e,a,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Cs}static _$Ei(){if(this.hasOwnProperty(Xe("elementProperties")))return;let e=Tl(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(Xe("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Xe("properties"))){let t=this.properties,i=[...Ll(t),...zl(t)];for(let s of i)this.createProperty(s,t[s])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[i,s]of t)this.elementProperties.set(i,s)}this._$Eh=new Map;for(let[t,i]of this.elementProperties){let s=this._$Eu(t,i);s!==void 0&&this._$Eh.set(s,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let i=new Set(e.flat(1/0).reverse());for(let s of i)t.unshift(br(s))}else e!==void 0&&t.push(br(e));return t}static _$Eu(e,t){let i=t.attribute;return i===!1?void 0:typeof i=="string"?i:typeof e=="string"?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return ks(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){let i=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,i);if(s!==void 0&&i.reflect===!0){let o=(i.converter?.toAttribute!==void 0?i.converter:yr).toAttribute(t,i.type);this._$Em=e,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(e,t){let i=this.constructor,s=i._$Eh.get(e);if(s!==void 0&&this._$Em!==s){let o=i.getPropertyOptions(s),n=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:yr;this._$Em=s;let a=n.fromAttribute(t,o.type);this[s]=a??this._$Ej?.get(s)??a,this._$Em=null}}requestUpdate(e,t,i,s=!1,o){if(e!==void 0){let n=this.constructor;if(s===!1&&(o=this[e]),i??=n.getPropertyOptions(e),!((i.hasChanged??Rs)(o,t)||i.useDefault&&i.reflect&&o===this._$Ej?.get(e)&&!this.hasAttribute(n._$Eu(e,i))))return;this.C(e,t,i)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:s,wrapped:o},n){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,n??t??this[e]),o!==!0||n!==void 0)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),s===!0&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[s,o]of this._$Ep)this[s]=o;this._$Ep=void 0}let i=this.constructor.elementProperties;if(i.size>0)for(let[s,o]of i){let{wrapped:n}=o,a=this[s];n!==!0||this._$AL.has(s)||a===void 0||this.C(s,void 0,o,a)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(i=>i.hostUpdate?.()),this.update(t)):this._$EM()}catch(i){throw e=!1,this._$EM(),i}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(e){}firstUpdated(e){}};Y.elementStyles=[],Y.shadowRootOptions={mode:"open"},Y[Xe("elementProperties")]=new Map,Y[Xe("finalized")]=new Map,Nl?.({ReactiveElement:Y}),(Rt.reactiveElementVersions??=[]).push("2.1.2")});function Ps(r,e){if(!kr(r)||!r.hasOwnProperty("raw"))throw Error("invalid template strings array");return As!==void 0?As.createHTML(e):e}function we(r,e,t=r,i){if(e===I)return e;let s=i!==void 0?t._$Co?.[i]:t._$Cl,o=tt(e)?void 0:e._$litDirective$;return s?.constructor!==o&&(s?._$AO?.(!1),o===void 0?s=void 0:(s=new o(r),s._$AT(r,t,i)),i!==void 0?(t._$Co??=[])[i]=s:t._$Cl=s),s!==void 0&&(e=we(r,s._$AS(r,e.values),s,i)),e}var _r,Es,At,As,xr,X,$r,Pl,ye,et,tt,kr,Os,wr,Qe,Ms,Is,be,Ls,zs,Ns,Sr,c,it,vu,I,h,Ts,ve,Bs,rt,Mt,Ne,_e,It,Lt,zt,Tt,Ds,Bl,Cr,V=y(()=>{_r=globalThis,Es=r=>r,At=_r.trustedTypes,As=At?At.createPolicy("lit-html",{createHTML:r=>r}):void 0,xr="$lit$",X=`lit$${Math.random().toFixed(9).slice(2)}$`,$r="?"+X,Pl=`<${$r}>`,ye=document,et=()=>ye.createComment(""),tt=r=>r===null||typeof r!="object"&&typeof r!="function",kr=Array.isArray,Os=r=>kr(r)||typeof r?.[Symbol.iterator]=="function",wr=`[
2
- \f\r]`,Qe=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ms=/-->/g,Is=/>/g,be=RegExp(`>|${wr}(?:([^\\s"'>=/]+)(${wr}*=${wr}*(?:[^
3
- \f\r"'\`<>=]|("|')|))|$)`,"g"),Ls=/'/g,zs=/"/g,Ns=/^(?:script|style|textarea|title)$/i,Sr=r=>(e,...t)=>({_$litType$:r,strings:e,values:t}),c=Sr(1),it=Sr(2),vu=Sr(3),I=Symbol.for("lit-noChange"),h=Symbol.for("lit-nothing"),Ts=new WeakMap,ve=ye.createTreeWalker(ye,129);Bs=(r,e)=>{let t=r.length-1,i=[],s,o=e===2?"<svg>":e===3?"<math>":"",n=Qe;for(let a=0;a<t;a++){let l=r[a],d,u,p=-1,m=0;for(;m<l.length&&(n.lastIndex=m,u=n.exec(l),u!==null);)m=n.lastIndex,n===Qe?u[1]==="!--"?n=Ms:u[1]!==void 0?n=Is:u[2]!==void 0?(Ns.test(u[2])&&(s=RegExp("</"+u[2],"g")),n=be):u[3]!==void 0&&(n=be):n===be?u[0]===">"?(n=s??Qe,p=-1):u[1]===void 0?p=-2:(p=n.lastIndex-u[2].length,d=u[1],n=u[3]===void 0?be:u[3]==='"'?zs:Ls):n===zs||n===Ls?n=be:n===Ms||n===Is?n=Qe:(n=be,s=void 0);let f=n===be&&r[a+1].startsWith("/>")?" ":"";o+=n===Qe?l+Pl:p>=0?(i.push(d),l.slice(0,p)+xr+l.slice(p)+X+f):l+X+(p===-2?a:f)}return[Ps(r,o+(r[t]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),i]},rt=class r{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let o=0,n=0,a=e.length-1,l=this.parts,[d,u]=Bs(e,t);if(this.el=r.createElement(d,i),ve.currentNode=this.el.content,t===2||t===3){let p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(s=ve.nextNode())!==null&&l.length<a;){if(s.nodeType===1){if(s.hasAttributes())for(let p of s.getAttributeNames())if(p.endsWith(xr)){let m=u[n++],f=s.getAttribute(p).split(X),g=/([.?@])?(.*)/.exec(m);l.push({type:1,index:o,name:g[2],strings:f,ctor:g[1]==="."?It:g[1]==="?"?Lt:g[1]==="@"?zt:_e}),s.removeAttribute(p)}else p.startsWith(X)&&(l.push({type:6,index:o}),s.removeAttribute(p));if(Ns.test(s.tagName)){let p=s.textContent.split(X),m=p.length-1;if(m>0){s.textContent=At?At.emptyScript:"";for(let f=0;f<m;f++)s.append(p[f],et()),ve.nextNode(),l.push({type:2,index:++o});s.append(p[m],et())}}}else if(s.nodeType===8)if(s.data===$r)l.push({type:2,index:o});else{let p=-1;for(;(p=s.data.indexOf(X,p+1))!==-1;)l.push({type:7,index:o}),p+=X.length-1}o++}}static createElement(e,t){let i=ye.createElement("template");return i.innerHTML=e,i}};Mt=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:i}=this._$AD,s=(e?.creationScope??ye).importNode(t,!0);ve.currentNode=s;let o=ve.nextNode(),n=0,a=0,l=i[0];for(;l!==void 0;){if(n===l.index){let d;l.type===2?d=new Ne(o,o.nextSibling,this,e):l.type===1?d=new l.ctor(o,l.name,l.strings,this,e):l.type===6&&(d=new Tt(o,this,e)),this._$AV.push(d),l=i[++a]}n!==l?.index&&(o=ve.nextNode(),n++)}return ve.currentNode=ye,s}p(e){let t=0;for(let i of this._$AV)i!==void 0&&(i.strings!==void 0?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}},Ne=class r{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,i,s){this.type=2,this._$AH=h,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=i,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=we(this,e,t),tt(e)?e===h||e==null||e===""?(this._$AH!==h&&this._$AR(),this._$AH=h):e!==this._$AH&&e!==I&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Os(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==h&&tt(this._$AH)?this._$AA.nextSibling.data=e:this.T(ye.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:i}=e,s=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=rt.createElement(Ps(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(t);else{let o=new Mt(s,this),n=o.u(this.options);o.p(t),this.T(n),this._$AH=o}}_$AC(e){let t=Ts.get(e.strings);return t===void 0&&Ts.set(e.strings,t=new rt(e)),t}k(e){kr(this._$AH)||(this._$AH=[],this._$AR());let t=this._$AH,i,s=0;for(let o of e)s===t.length?t.push(i=new r(this.O(et()),this.O(et()),this,this.options)):i=t[s],i._$AI(o),s++;s<t.length&&(this._$AR(i&&i._$AB.nextSibling,s),t.length=s)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let i=Es(e).nextSibling;Es(e).remove(),e=i}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},_e=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,i,s,o){this.type=1,this._$AH=h,this._$AN=void 0,this.element=e,this.name=t,this._$AM=s,this.options=o,i.length>2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=h}_$AI(e,t=this,i,s){let o=this.strings,n=!1;if(o===void 0)e=we(this,e,t,0),n=!tt(e)||e!==this._$AH&&e!==I,n&&(this._$AH=e);else{let a=e,l,d;for(e=o[0],l=0;l<o.length-1;l++)d=we(this,a[i+l],t,l),d===I&&(d=this._$AH[l]),n||=!tt(d)||d!==this._$AH[l],d===h?e=h:e!==h&&(e+=(d??"")+o[l+1]),this._$AH[l]=d}n&&!s&&this.j(e)}j(e){e===h?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}},It=class extends _e{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===h?void 0:e}},Lt=class extends _e{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==h)}},zt=class extends _e{constructor(e,t,i,s,o){super(e,t,i,s,o),this.type=5}_$AI(e,t=this){if((e=we(this,e,t,0)??h)===I)return;let i=this._$AH,s=e===h&&i!==h||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==h&&(i===h||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},Tt=class{constructor(e,t,i){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(e){we(this,e)}},Ds={M:xr,P:X,A:$r,C:1,L:Bs,R:Mt,D:Os,V:we,I:Ne,H:_e,N:Lt,U:zt,B:It,F:Tt},Bl=_r.litHtmlPolyfillSupport;Bl?.(rt,Ne),(_r.litHtmlVersions??=[]).push("3.3.3");Cr=(r,e,t)=>{let i=t?.renderBefore??e,s=i._$litPart$;if(s===void 0){let o=t?.renderBefore??null;i._$litPart$=s=new Ne(e.insertBefore(et(),o),o,void 0,t??{})}return s._$AI(r),s}});var Rr,R,Dl,js=y(()=>{Et();Et();V();V();Rr=globalThis,R=class extends Y{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Cr(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return I}};R._$litElement$=!0,R.finalized=!0,Rr.litElementHydrateSupport?.({LitElement:R});Dl=Rr.litElementPolyfillSupport;Dl?.({LitElement:R});(Rr.litElementVersions??=[]).push("4.2.2")});var Us=y(()=>{});var S=y(()=>{Et();V();js();Us()});function jl(r){C.setSession(r)}function Ul(r){return C.setReportCatalog(r)}function Fl(){C.reset()}var Er,C,Q=y(()=>{"use strict";Er=class{constructor(e=()=>{}){this.resources=new Map,this.session=null,this.teamCatalog=null,this.reportCatalog=null,this.bundleCatalog=null,this.generation=0,this.sessionController=new AbortController,this.notify=e}setSession(e){(this.session?.id!==e?.id||this.session?.role!==e?.role)&&this.reset(),this.session=e}reset(){this.generation++,this.sessionController.abort(),this.sessionController=new AbortController,this.invalidate(),this.session=null,this.teamCatalog=null,this.reportCatalog=null,this.bundleCatalog=null}setReportCatalog(e){let t=new Set,i=new Map(e.map(p=>[p.id,JSON.stringify([p.cacheKey??null,p.reports.map(m=>[m.id,m.cacheKey??null]).toSorted(),(p.bundles??[]).map(m=>[m.id,m.filename,m.repoFullName,m.repoDirectory??""]).toSorted()])]));for(let p of new Set([...this.teamCatalog?.keys()??[],...i.keys()]))this.teamCatalog?.get(p)!==i.get(p)&&t.add(`team:${p}`);for(let p of this.resources.keys()){let m="reports:content:team:";if(p.startsWith(m)){let f=p.slice(m.length);(!i.has(f)||this.teamCatalog?.get(f)!==i.get(f))&&this.invalidate([p])}}this.teamCatalog=i;let s=new Map;for(let p of e)for(let m of p.reports){let f=s.get(m.id)??[];f.push(JSON.stringify([p.id,m.cacheKey??null])),s.set(m.id,f)}let o=new Map([...s].map(([p,m])=>[p,JSON.stringify(m.toSorted())])),n=this.reportCatalog;this.reportCatalog=o;let a=new Set(t);for(let p of new Set([...n?.keys()??[],...o.keys()]))n?.get(p)!==o.get(p)&&a.add(p);for(let p of this.resources.keys()){if(!p.startsWith("reports:content:")||p.startsWith("reports:content:team:"))continue;let m=p.slice(16);(!o.has(m)||a.has(m))&&(this.invalidate([p]),a.add(m))}let l=new Map;for(let p of e)for(let m of p.bundles??[]){let f=l.get(m.id)??[];f.push(JSON.stringify([p.id,p.cacheKey??null,m.filename,m.repoFullName,m.repoDirectory??""])),l.set(m.id,f)}let d=!1,u=new Map([...l].map(([p,m])=>[p,JSON.stringify(m.toSorted())]));for(let p of new Set([...this.bundleCatalog?.keys()??[],...u.keys()]))this.bundleCatalog?.get(p)!==u.get(p)&&(d=!0,a.add(`bundle:${p}`),this.invalidate([`bundle-metadata:${p}`]));this.bundleCatalog=u;for(let p of this.resources.keys()){if(!p.startsWith("report-sources:")&&!p.startsWith("finding-history:"))continue;let[,m,f]=p.split(":");(m?t.has(`team:${m}`):d||a.has(f))&&this.invalidate([p])}return a}read(e){return this.resources.get(e)?.data}invalidate(e){for(let[t,i]of this.resources)e&&!e.some(s=>t===s||t.startsWith(`${s}:`))||(i.controller?.abort(),this.resources.delete(t))}async mutate(e,t){let i=this.generation,s;try{s=await e()}catch(o){throw i===this.generation&&o?.name!=="AbortError"&&this.notify(`Couldn't save changes: ${o?.message??o}`),o}if(i!==this.generation)throw new DOMException("Managed session changed","AbortError");return this.invalidate(t),s}async load(e,t,i,{signal:s,apply:o=()=>{}}={}){s?.throwIfAborted();let n=this.resources.get(e);if(n||(n={},this.resources.set(e,n)),n.data!==void 0&&o(n.data),!n.pending){let l=n.controller=new AbortController;n.pending=(async()=>{try{let d=await i(l.signal);return l.signal.throwIfAborted(),n.data=d,d}catch(d){throw!l.signal.aborted&&d?.name!=="AbortError"&&this.notify(`Couldn't refresh ${t}: ${d?.message??d}`),d}})().finally(()=>{n.pending=null})}let a=await n.pending;if(s?.throwIfAborted(),this.resources.get(e)!==n)throw new DOMException("Managed data changed","AbortError");return o(a),a}},C=new Er(r=>{document.dispatchEvent(new CustomEvent("managed-notice",{detail:{message:r}}))})});var F,ae,G,st=y(()=>{F={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},ae=r=>(...e)=>({_$litDirective$:r,values:e}),G=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}});var Fs,le,Hs,qs,Pe,Ot,Vs,Gs,Ws,Ks,ce=y(()=>{"use strict";Fs="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",le='<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>',Hs='<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>',qs='<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>',Pe='<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>',Ot='<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>',Vs='<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>',Gs='<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>',Ws='<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>',Ks='<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 Vl,Js,Xs,Ys,Be,de,Gl,De,Qs,Nt,Pt=y(()=>{V();({I:Vl}=Ds),Js=r=>r,Xs=r=>r.strings===void 0,Ys=()=>document.createComment(""),Be=(r,e,t)=>{let i=r._$AA.parentNode,s=e===void 0?r._$AB:e._$AA;if(t===void 0){let o=i.insertBefore(Ys(),s),n=i.insertBefore(Ys(),s);t=new Vl(o,n,r,r.options)}else{let o=t._$AB.nextSibling,n=t._$AM,a=n!==r;if(a){let l;t._$AQ?.(r),t._$AM=r,t._$AP!==void 0&&(l=r._$AU)!==n._$AU&&t._$AP(l)}if(o!==s||a){let l=t._$AA;for(;l!==o;){let d=Js(l).nextSibling;Js(i).insertBefore(l,s),l=d}}}return t},de=(r,e,t=r)=>(r._$AI(e,t),r),Gl={},De=(r,e=Gl)=>r._$AH=e,Qs=r=>r._$AH,Nt=r=>{r._$AR(),r._$AA.remove()}});function re(r){let e=[],t=-1,i="",s=0,o=0,n=0;for(let a of r.split(`
4
- `)){let l=n;n+=a.length+1;let d=Oc.exec(a);if(t!==-1){d&&d[2]===i&&d[1].length<=s+3&&(e.push([t,l+a.length]),t=-1);continue}if(d&&d[1].length<=o+3){t=l,i=d[2],s=d[1].length;continue}if(!a.trim())continue;let u=Ge.exec(a),p=/^ */u.exec(a)[0].length;u&&u[1].length<=o+3?o=u[0].length:p<o&&(o=0)}return t!==-1&&e.push([t,r.length]),e}function ie(r,e){return r.some(([t,i])=>e>=t&&e<i)}function se(r){return String(r??"").replaceAll(/\r\n?/gu,`
5
- `)}function Ut(r){return/^[0-9a-f]{7,64}$/iu.test(r)}function oe(r,e){let t=re(r),i=[...r.matchAll(e)].filter(s=>!ie(t,s.index));return i.map((s,o)=>({heading:s[1],body:r.slice(s.index+s[0].length+1,i[o+1]?.index)}))}function Ee(r,e){let t=re(r),i=[...r.matchAll(e)].find(s=>!ie(t,s.index));return i?{head:r.slice(0,i.index),subs:oe(r,e)}:{head:r,subs:[]}}function mt(r){let e=r.indexOf(`
6
- `);return e===-1?{title:r.trim(),body:""}:{title:r.slice(0,e).trim(),body:r.slice(e+1)}}function Nc(r){let e=[];for(let t of r.split(`
7
- `)){let i=t.trim();if(!i.startsWith("|")||/^[\s:|-]+$/u.test(i)&&i.includes("-"))continue;let s=i.replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(o=>o.trim());e.push(s)}return e}function ft(r){let e=Nc(r);if(e.length<2)return[];let t=e[0].map(s=>s.toLowerCase()),i=[];for(let s of e.slice(1)){if(s.length===t.length&&s.every((n,a)=>n.toLowerCase()===t[a]))continue;let o={};t.forEach((n,a)=>{n&&(o[n]=s[a]??"")}),i.push(o)}return i}function gn(r){let e=Object.create(null),t=Object.create(null),i=[],s=null,o="",n=[],a="",l=(p,m,f)=>{!p||p in e||(e[p]=f.trim(),t[p]=m)},d=()=>{s&&l(s,o,n.join(`
8
- `)),s=null,o="",n=[]},u=p=>{(s?n:i).push(p)};for(let p of r.split(`
9
- `)){let m=/^ {0,3}(```|~~~)/u.exec(p),f=m!==null&&(!a||m[1]===a);if(f&&(a=a?"":m[1]),f||a){u(p);continue}if(!p.trim()){s?d():i.push(p);continue}let g=/^\s*(?:[-*] +)?\*\*([^:*]+):\*\*\s*(.*)$/u.exec(p);if(g){d();let v=g[1].trim(),w=g[2],b;for(;(b=/\s+[·•]\s+\*\*([^:*]+):\*\*\s*/u.exec(w))!==null;)l(v.toLowerCase(),v,w.slice(0,b.index)),v=b[1].trim(),w=w.slice(b.index+b[0].length);s=v.toLowerCase(),o=v,n=[w];continue}if(/^\s*(?:#{1,6} |\||[-=*_]{3,}\s*$)/u.test(p)){d();continue}u(p)}return d(),{fields:e,labels:t,prose:i.join(`
10
- `).trim()}}function Ft(r){let e=(r||"").trim(),t="",i=We(e);i&&(e=i.label.trim(),t=i.url.trim());let s="",o=/#L(\d+)/u.exec(t);o&&(s=o[1]);let l=[...e.matchAll(/`([^`]+)`/gu)].map(p=>p[1].trim()).find(p=>!p.includes("(")&&(p.includes("/")||/\.\w/u.test(p)))??(e.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),d=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(l);d&&(l=d[1],s||(s=d[2]));let u=hi.exec(l);return u?(s||(s=u[2]),{file:u[1],line:s,locationLink:t}):{file:l,line:s||"?",locationLink:t}}function mi(r){return r.replaceAll("**","")}function We(r){let e=String(r??""),t=Pc(e,Bc(e)),i=Dc(e),s=e.indexOf("]");for(let o=e.indexOf("[");o!==-1;o=e.indexOf("[",o+1)){for(;s!==-1&&s<=o;)s=e.indexOf("]",s+1);for(let n of[s,t.get(o)??-1]){if(n===-1||n===o+1||e[n+1]!=="(")continue;let a=jc(e,n+1,i);if(a!==null)return{label:e.slice(o+1,n),url:a,index:o}}}return null}function Pc(r,e){let t=new Map,i=[];for(let s=0;s<r.length;s++){let o=r[s];bn(r,s)?s++:o==="`"?s=e.get(s)??s:o==="["?i.push(s):o==="]"&&i.length>0&&t.set(i.pop(),s)}return t}function Bc(r){let e=[];for(let s=r.indexOf("`");s!==-1;s=r.indexOf("`",s)){let o=1;for(;r[s+o]==="`";)o++;e.push([s,o]),s+=o}let t=new Map,i=new Map;for(let s=e.length-1;s>=0;s--){let[o,n]=e[s],a=i.get(n);a!==void 0&&t.set(o,a+n-1),i.set(n,o)}return t}function Dc(r){let e=r.length,t=new Int32Array(e+1).fill(-1),i=new Int32Array(e+1).fill(-1),s=new Int32Array(e+1).fill(-1),o=new Int32Array(e+1).fill(-1);for(let l=e-1;l>=0;l--)t[l]=r[l]===")"?l:t[l+1],i[l]=/\s/u.test(r[l])?l:i[l+1],s[l]=r[l]===">"?l:s[l+1],o[l]=r[l]===`
11
- `?l:o[l+1];let n=new Map,a=[];for(let l=0;l<e;l++){let d=r[l];bn(r,l)?l++:i[l]===l?a.length=0:d==="("?a.push(l):d===")"&&a.length>0&&n.set(a.pop(),l)}return{balanced:n,nextClose:t,nextSpace:i,nextAngle:s,nextLine:o}}function jc(r,e,t){let i=Uc(r,e,t);if(i)return i;let s=t.balanced.get(e);if(s!==void 0)return s>e+1?r.slice(e+1,s):null;let o=t.nextClose[e+1],n=t.nextSpace[e+1];return o===-1||o===e+1||n!==-1&&n<o?null:r.slice(e+1,o)}function Uc(r,e,t){if(r[e+1]!=="<")return"";let i=t.nextAngle[e+2],s=t.nextLine[e+2];return i===-1||s!==-1&&s<i||r[i+1]!==")"?"":r.slice(e+2,i)}function bn(r,e){return r[e]==="\\"&&Hc.test(r[e+1]??"")}function vn(r){return typeof r=="string"?r.replace(Fc,"$1"):r}function yn(r){let e=/^\[(.+)\]$/u.exec(r.trim());return e?e[1].trim():r.trim()}function Ae(r){let e=(r||"").trim();return/^[-–—]+$/u.test(e)?"":e}var Oc,Ge,ut,ht,Re,hi,Fc,Hc,K=y(()=>{"use strict";Oc=/^( *)(```|~~~)/u,Ge=/^( *)(?:[-*+]|\d{1,9}[.)]) +(?=\S)/u;ut=/^## +(.*)$/gmu,ht=/^### +(.*)$/gmu,Re=/^#### +(.*)$/gmu,hi=/^(.+):(\d+(?:-\d+)?)$/u;Fc=/\\([!-/:-@[-`{-~])/gu,Hc=/[!-/:-@[-`{-~]/u});function wn(r){if(r._idBasis)return r._idBasis;let{severity:e,description:t}=r;return r.fileHash?{severity:e,description:t,fileHash:r.fileHash}:r.location?{severity:e,description:t,location:r.location}:{severity:e,description:t,file:r.file,line:r.line}}var _n=y(()=>{"use strict"});function xn(r){return typeof r=="string"&&r.trim().toLowerCase()==="informative"?"informational":r}function B(r,e=r.severity){let t=xn(r.severity);return t!==r.severity&&(!r.id&&!r._idBasis&&(r._idBasis=wn({...r,severity:e})),r.severity=t),r.correctedSeverity!==void 0&&(r.correctedSeverity=xn(r.correctedSeverity)),r}var Me=y(()=>{"use strict";_n()});function Vc(r){switch(r.toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"HIGH_BUG":return"high_bug";case"BUG":return"bug";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return"medium"}}function Gc(r){if(r!==void 0)return $n.get(kn(r))??$n.get("medium")}function Sn(r){let t=se(r).trim().split(qc);if(t.length===1)return null;let i=[];for(let s=1;s<t.length;s+=2){let o=Vc(t[s]);for(let n of t[s+1].split(/^### /mu).slice(1)){let a=Kc(n,o);a&&i.push(a)}}return i.length===0?null:{type:"security",source:"deepsec",findings:i}}function Kc(r,e){let{title:t,body:i}=mt(r);if(!t)return null;let s=i.replace(/\n---\s*$/u,"").trim(),o={};for(let w of s.matchAll(/^- \*\*([^:*]+):\*\*\s*(.+)$/gmu))o[w[1].trim().toLowerCase()]=w[2].trim();let n=/^\*\*Recommendation:\*\*\s*/mu.exec(s),a=s,l="";n&&(a=s.slice(0,n.index),l=s.slice(n.index+n[0].length).trim());let d=a.split(`
12
- `).filter(w=>!/^\s*- \*\*/u.test(w)).join(`
13
- `).replaceAll("**","").trim(),u=[t,d].filter(Boolean).join(`
14
-
15
- `),p=(o.file||"unknown").replace(/^`(.*)`$/u,"$1"),m=(o.lines||"").split(",").map(w=>w.trim()).find(Boolean)||"?",f={file:p,line:m,severity:e,description:u};l&&(f.recommendation=l.replaceAll("**",""));let g=Gc(o.confidence);g!==void 0&&(f.confidence=g);let v=Wc.get(kn(o.revalidation));return v&&(f.revalidate=v,f.revalidateSource="deepsec",o.reasoning&&(f.revalidateVerdict=o.reasoning.replaceAll("**",""))),o.slug&&(f.slug=o.slug),B(f,e==="informative"?"medium":e)}var qc,kn,$n,Wc,Cn=y(()=>{"use strict";K();Me();qc=/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*\n/mu;kn=r=>String(r??"").toLowerCase().replaceAll(/[^a-z]+/gu,""),$n=new Map([["high",8],["medium",6],["low",4]]);Wc=new Map([["confirmed","confirmed"],["falsepositive","refuted"],["uncertain","unknown"]])});var Rn,Ht,fi=y(()=>{"use strict";Rn={critical:"Critical",high:"High",medium:"Medium",low:"Low",high_bug:"High bug",bug:"Bug",informational:"Informational"},Ht={"claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium"}});function En(r){return Zc.has(r?.revalidate)?r.revalidate:""}function gi(r,e=r?.source){return Object.hasOwn(Ht,e)||En(r)==="revalidation"}function Vt(r,e){if(!r)return r;let t=r;e?.exportsMode==="isolate"&&(t=t.replace(/^\((?:[^()]|\([^()]*\))*\): \[export:\s*\w+\] /u,""),t=t.replace(/^\[export:\s*\w+\] /u,""));let i=[e?.exportName,e?.methodName].filter(Boolean).map(s=>s.replaceAll(/[.*+?^${}()|[\]\\]/gu,"\\$&"));for(let s of i)t=t.replaceAll(new RegExp(`\\[export:\\s*${s}\\]\\s*`,"gu"),"");for(let s of i)t=t.replace(new RegExp(`^\\(\`?${s}\`?\\): `,"u"),"");return t}function bi(r){if(!r)return"";for(let e of r.split(`
16
- `))if(e.trim())return e.trim();return""}function Yc(r){let e=re(r);if(e.length===0)return r.split(/\n{2,}/u);let t=[],i=0;for(let s of r.matchAll(/\n{2,}/gu))ie(e,s.index)||(t.push(r.slice(i,s.index)),i=s.index+s[0].length);return t.push(r.slice(i)),t}function vi(r){let e=[];for(let t of Yc(r||"")){if(!t.trim())continue;let i=Jc.exec(t);if(i){e.push({label:i[1].trim(),body:t.slice(i[0].length).trim()});continue}let s=e.at(-1);s&&s.label===null?s.body+=`
17
-
18
- ${t}`:e.push({label:null,body:t})}return e}function gt(r){return Number.isFinite(parseInt(r?.line,10))?`${r.file}:${r.line}`:r?.file??""}var qt,Zc,Jc,Gt=y(()=>{"use strict";K();fi();qt=["revalidation","refuted","unreachable","confirmed","partial","unknown"],Zc=new Set(qt);Jc=/^\*\*([^*\n]+):\*\*[ \t]*/u});function yi(r){if(typeof r!="string"||r.length===0)return!1;try{let e=new URL(r);return e.protocol==="http:"||e.protocol==="https:"}catch{return!1}}function Xc(r,e){let t=re(r),i=0;return r.split(`
19
- `).map(s=>{let o=i;return i+=s.length+1,ie(t,o)?s:e(s)}).join(`
20
- `)}function An(r){return Xc(String(r??""),e=>e.replace(/^( {0,3})\\(\\*#)/u,"$1$2"))}var Mn=y(()=>{"use strict";K()});function Z(r){let e=/(`+)(.+?)\1(?!`)/u.exec(String(r??""));if(!e)return null;let t=e[2];if(t.length>2&&t.startsWith(" ")&&t.endsWith(" ")){let i=t.slice(1,-1);if(i.startsWith("`")||i.endsWith("`"))return i}return t}function Wt(r){let e=We(String(r??""));return e?.index===0?{label:e.label,url:e.url}:null}function zn(r){let e=/^<(https?:[^>\s]*)>$/u.exec(r.trim());return e?e[1]:null}function Tn(r){let e=hi.exec(r);return e?{file:e[1],line:e[2]}:{file:r,line:"?"}}function td(r){let e=r.indexOf(".");return e>0?{exportName:r.slice(0,e),methodName:r.slice(e+1)}:{exportName:r}}function Ie(r){let e=String(r??"").trim();return Qc.get(e.toLowerCase())??e}function rd(r){let e={},t=r.trim(),i=/ · (`+)(.+?)\1$/u.exec(t);i&&(Object.assign(e,td(Z(i[0]))),t=t.slice(0,i.index));let s=Wt(t),o=Z(s?s.label:t);return o!==null&&Object.assign(e,Tn(o)),s&&yi(s.url)&&(e.location=s.url),e}function sd(r){let e={},t=r.trim();t.endsWith(In)&&(e.critical=!0,t=t.slice(0,-In.length));let i=t.indexOf(id);i!==-1&&(t=t.slice(0,i));let s=/^(.*?) — corrected (from|to) (.*)$/u.exec(t);return s?s[2]==="from"?(e.severity=Ie(s[3]),e.correctedSeverity=Ie(s[1])):(e.severity=Ie(s[1]),e.correctedSeverity=Ie(s[3])):e.severity=Ie(t),e}function ad(r){return/\d/u.test(r)||/^(?:opus|sonnet|haiku|gpt|gemini|fable|mythos|llama|mistral)\b/iu.test(r)}function Kt(r){let e=r.trim(),t=Ln.get(e.toLowerCase());if(t)return{source:t};let i={},s=[];for(let o of e.split(" \xB7 ").map(n=>n.trim()).filter(Boolean))o==="revalidate"&&!i.revalidate?i.revalidate="revalidation":nd.has(o)&&!i.exportsMode?i.exportsMode=o:od.has(o)&&!i.effort?i.effort=o:s.push(o);return s.length>1?[i.type,i.model]=s:s.length===1&&(i[ad(s[0])?"model":"type"]=s[0]),{run:i}}function wi(r){let e=r.trim(),t=Wt(e);return t?t.label.trim():zn(e)??e}function ld(r){let e=Wt(r.trim());if(e){let t=e.url.split("/").at(-1)??"";return Ut(t)?t:Z(e.label)??t}return Z(r)??r.trim()}function cd(r){let e=Z(r)??r.trim(),t=e.lastIndexOf("@");return{npm:t>0?{name:e.slice(0,t),version:e.slice(t+1)}:{name:e}}}function dd(r){let e=r.trim().toLowerCase();return e==="the revalidation pass itself"?"revalidation":ed.has(e)?e:void 0}function On(r,e,t){let i=pd.get(e.trim().toLowerCase());i&&i(r,t.trim())}function Nn(r){let e=r.split(`
21
- `),t=0,i=()=>{for(;t<e.length&&!e[t].trim();)t++},s=()=>{let a=[];for(;t<e.length;){let l=ud.exec(e[t]);if(!l)break;a.push([l[1].trim(),l[2].trim()]),t++}return a};i();let o=s();if(o.length>0)return{title:"",facts:o,rest:e.slice(t).join(`
22
- `)};let n=[];for(;t<e.length&&e[t].trim();)n.push(e[t++]);return i(),o=s(),o.length===0?{title:"",facts:o,rest:r}:{title:Ke(n.join(`
1
+ var ic=Object.defineProperty;var w=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(i){throw t=[i],i}};var fr=(r,e)=>{for(var t in e)ic(r,t,{get:e[t],enumerable:!0})};function Cs(r){return typeof r=="string"&&we.includes(r)}function De(r,e){let t=we.indexOf(r);return t!==-1&&t<=we.indexOf(e)}var we,gr=w(()=>{"use strict";we=["admin","manage","triage","view","none"]});var Es,br,vr=w(()=>{"use strict";Es=["dependencies","security"],br={dependencies:"Dependencies",security:"Security"}});function Rs(r=null){let e=["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"],t=r==="moonshot"?"moonshotai":r,i=e.filter(s=>!["anthropic","openai","moonshot"].includes(r??"")||s.startsWith(`${t}/`)).map(s=>({id:s,efforts:["low","medium","high","xhigh","max"]}));return{models:i,defaultModel:i[0].id}}var As=w(()=>{"use strict"});var Ms,Is,Ls,zs=w(()=>{"use strict";As();Ms=Rs(),Is=Object.freeze(Ms.models),Ls=Ms.defaultModel});function sc(r){if(!r?.startsWith("#public="))return null;let e=/^#public=([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]{43})$/u.exec(r);return e?{id:e[1],token:e[2]}:{id:"",token:""}}function Z(){return Ts}function yr(r=Ts){return`/api/shares/${encodeURIComponent(r.id)}/workspace`}var Os,Ts,$t=w(()=>{"use strict";Os=globalThis.location?.hash,Ts=sc(Os);globalThis.addEventListener?.("hashchange",()=>{let r=globalThis.location?.hash;r?.startsWith("#public=")&&r!==Os&&globalThis.location.reload()})});function _e(){return ue?.user.role??null}function oc(r){if(r!==null&&!Cs(r))throw new TypeError(`Unknown managed preview role: ${r}. Expected ${we.join(", ")}.`);kt++,ue=r===null?null:{user:{id:`preview:${r}`,login:r,name:r[0].toUpperCase()+r.slice(1),role:r,avatarUrl:null,lastSeenAt:Date.now(),lastActivityAt:null},csrfToken:null}}function nc(r,e){let t=new URL(r,"http://managed-preview.invalid").pathname,i=(e?.method??"GET").toUpperCase();if(i==="POST"&&t==="/api/auth/logout")return Response.json({ok:!0});if(i!=="GET")throw new Error("Changes are not saved in the managed UI preview");if(t==="/api/auth/session")return Response.json(ue);if(t==="/api/teams")return Response.json({teams:[]});if(t.startsWith("/api/admin/")&&!De(ue.user.role,"manage"))return Response.json({error:"forbidden"},{status:403});if(["/api/admin/users","/api/admin/teams","/api/admin/repositories"].includes(t)&&ue.user.role!=="admin")return Response.json({error:"forbidden"},{status:403});let s={"/api/admin/users":{users:[ue.user]},"/api/admin/teams":{teams:[],users:[ue.user],repos:[],permissions:Es},"/api/admin/links":{shares:[]},"/api/admin/repositories":{repositories:[],total:0,connectedCount:0,installUrl:null,tokenMissing:!1},"/api/admin/reports":{reports:[],repos:[],maxBytes:10485760},"/api/admin/bundles":{bundles:[],repos:[],maxBytes:209715200},"/api/admin/history":{history:[],total:0,page:1,limit:100,filters:{repos:[],users:[]}},"/api/admin/scan/models":{models:Is,defaultModel:Ls},"/api/admin/scan-results":{bundles:[],results:[]}};return Object.hasOwn(s,t)?Response.json(s[t]):Response.json({error:"not-found"},{status:404})}async function ac(r,e,t){let i=await t("/api/config",{credentials:"same-origin",signal:e.signal});if(!i.ok)return i;let s=(await i.json()).managed,o=s?.uploadChunkBytes;if(!Number.isSafeInteger(o)||o<=0||o>3*1024*1024)return t(r,e);let n=e.body,a=crypto.randomUUID(),l=r.endsWith("/reports")?"reports":"bundles",d=s?.uploadMaxBytes?.[l];if(Number.isSafeInteger(d)&&d>0&&n.size>d)return Response.json({error:"too-large"},{status:413});let h=Math.ceil(n.size/o),p=new Headers(e.headers);p.set("content-type","application/octet-stream");let m=0,f=!1;try{for(let v=0;v<h;v++){m=v+1;let b=await t(`/api/admin/uploads/${l}/${a}/${v}`,{...e,headers:p,body:n.slice(v*o,(v+1)*o)});if(!b.ok)return b}let g=new Headers(e.headers);g.set("x-upload-id",a),g.set("x-upload-parts",String(h)),g.set("x-upload-size",String(n.size));let y=await t(r,{...e,headers:g,body:""});return f=y.ok,y}finally{if(!f&&m>0){let g=new Headers(e.headers);g.set("x-upload-parts",String(m)),await t(`/api/admin/uploads/${l}/${a}`,{...e,method:"DELETE",headers:g,body:void 0,signal:AbortSignal.timeout(1e4)}).catch(()=>{})}}}async function $(r,e){if(e?.signal?.throwIfAborted(),ue)return nc(r,e);let t=kt;async function i(s,o){if(t!==kt)throw new DOMException("Managed session changed","AbortError");let n=Z();if(n){if(new URL(s,globalThis.location.origin).origin!==globalThis.location.origin)throw new Error("Public workspace requests must be same-origin");let d=new Headers(o?.headers);d.set("x-deepview-share",n.token),o={...o,headers:d,credentials:"omit",redirect:"error"}}let a=await fetch(s,{...o,cache:"no-store"});if(t!==kt)throw new DOMException("Managed session changed","AbortError");return a}return e?.method==="POST"&&["/api/admin/reports","/api/admin/bundles"].includes(r)&&e.body instanceof Blob&&e.body.size>3*1024*1024?ac(r,e,i):await i(r,e)}var ue,kt,N=w(()=>{"use strict";gr();vr();zs();$t();ue=null,kt=0});var St,Ct,wr,Ns,Qe,x,M,Bs,_r,xr=w(()=>{St=globalThis,Ct=St.ShadowRoot&&(St.ShadyCSS===void 0||St.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wr=Symbol(),Ns=new WeakMap,Qe=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==wr)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(Ct&&e===void 0){let i=t!==void 0&&t.length===1;i&&(e=Ns.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&Ns.set(t,e))}return e}toString(){return this.cssText}},x=r=>new Qe(typeof r=="string"?r:r+"",void 0,wr),M=(r,...e)=>{let t=r.length===1?r[0]:e.reduce((i,s,o)=>i+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+r[o+1],r[0]);return new Qe(t,r,wr)},Bs=(r,e)=>{if(Ct)r.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(let t of e){let i=document.createElement("style"),s=St.litNonce;s!==void 0&&i.setAttribute("nonce",s),i.textContent=t.cssText,r.appendChild(i)}},_r=Ct?r=>r:r=>r instanceof CSSStyleSheet?(e=>{let t="";for(let i of e.cssRules)t+=i.cssText;return x(t)})(r):r});var lc,cc,dc,pc,uc,hc,Et,Ps,mc,fc,et,$r,js,Ds,te,Rt=w(()=>{xr();xr();({is:lc,defineProperty:cc,getOwnPropertyDescriptor:dc,getOwnPropertyNames:pc,getOwnPropertySymbols:uc,getPrototypeOf:hc}=Object),Et=globalThis,Ps=Et.trustedTypes,mc=Ps?Ps.emptyScript:"",fc=Et.reactiveElementPolyfillSupport,et=(r,e)=>r,$r={toAttribute(r,e){switch(e){case Boolean:r=r?mc:null;break;case Object:case Array:r=r==null?r:JSON.stringify(r)}return r},fromAttribute(r,e){let t=r;switch(e){case Boolean:t=r!==null;break;case Number:t=r===null?null:Number(r);break;case Object:case Array:try{t=JSON.parse(r)}catch{t=null}}return t}},js=(r,e)=>!lc(r,e),Ds={attribute:!0,type:String,converter:$r,reflect:!1,useDefault:!1,hasChanged:js};Symbol.metadata??=Symbol("metadata"),Et.litPropertyMetadata??=new WeakMap;te=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Ds){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let i=Symbol(),s=this.getPropertyDescriptor(e,i,t);s!==void 0&&cc(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){let{get:s,set:o}=dc(this.prototype,e)??{get(){return this[t]},set(n){this[t]=n}};return{get:s,set(n){let a=s?.call(this);o?.call(this,n),this.requestUpdate(e,a,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Ds}static _$Ei(){if(this.hasOwnProperty(et("elementProperties")))return;let e=hc(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(et("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(et("properties"))){let t=this.properties,i=[...pc(t),...uc(t)];for(let s of i)this.createProperty(s,t[s])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[i,s]of t)this.elementProperties.set(i,s)}this._$Eh=new Map;for(let[t,i]of this.elementProperties){let s=this._$Eu(t,i);s!==void 0&&this._$Eh.set(s,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let i=new Set(e.flat(1/0).reverse());for(let s of i)t.unshift(_r(s))}else e!==void 0&&t.push(_r(e));return t}static _$Eu(e,t){let i=t.attribute;return i===!1?void 0:typeof i=="string"?i:typeof e=="string"?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Bs(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){let i=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,i);if(s!==void 0&&i.reflect===!0){let o=(i.converter?.toAttribute!==void 0?i.converter:$r).toAttribute(t,i.type);this._$Em=e,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(e,t){let i=this.constructor,s=i._$Eh.get(e);if(s!==void 0&&this._$Em!==s){let o=i.getPropertyOptions(s),n=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:$r;this._$Em=s;let a=n.fromAttribute(t,o.type);this[s]=a??this._$Ej?.get(s)??a,this._$Em=null}}requestUpdate(e,t,i,s=!1,o){if(e!==void 0){let n=this.constructor;if(s===!1&&(o=this[e]),i??=n.getPropertyOptions(e),!((i.hasChanged??js)(o,t)||i.useDefault&&i.reflect&&o===this._$Ej?.get(e)&&!this.hasAttribute(n._$Eu(e,i))))return;this.C(e,t,i)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:s,wrapped:o},n){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,n??t??this[e]),o!==!0||n!==void 0)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),s===!0&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[s,o]of this._$Ep)this[s]=o;this._$Ep=void 0}let i=this.constructor.elementProperties;if(i.size>0)for(let[s,o]of i){let{wrapped:n}=o,a=this[s];n!==!0||this._$AL.has(s)||a===void 0||this.C(s,void 0,o,a)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(i=>i.hostUpdate?.()),this.update(t)):this._$EM()}catch(i){throw e=!1,this._$EM(),i}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(e){}firstUpdated(e){}};te.elementStyles=[],te.shadowRootOptions={mode:"open"},te[et("elementProperties")]=new Map,te[et("finalized")]=new Map,fc?.({ReactiveElement:te}),(Et.reactiveElementVersions??=[]).push("2.1.2")});function Js(r,e){if(!Rr(r)||!r.hasOwnProperty("raw"))throw Error("invalid template strings array");return Fs!==void 0?Fs.createHTML(e):e}function Se(r,e,t=r,i){if(e===L)return e;let s=i!==void 0?t._$Co?.[i]:t._$Cl,o=it(e)?void 0:e._$litDirective$;return s?.constructor!==o&&(s?._$AO?.(!1),o===void 0?s=void 0:(s=new o(r),s._$AT(r,t,i)),i!==void 0?(t._$Co??=[])[i]=s:t._$Cl=s),s!==void 0&&(e=Se(r,s._$AS(r,e.values),s,i)),e}var Sr,Us,At,Fs,Cr,re,Er,gc,ke,rt,it,Rr,Ws,kr,tt,Hs,qs,xe,Vs,Gs,Zs,Ar,c,H,dh,L,u,Ks,$e,Ys,st,Mt,je,Ce,It,Lt,zt,Ot,Xs,bc,Mr,J=w(()=>{Sr=globalThis,Us=r=>r,At=Sr.trustedTypes,Fs=At?At.createPolicy("lit-html",{createHTML:r=>r}):void 0,Cr="$lit$",re=`lit$${Math.random().toFixed(9).slice(2)}$`,Er="?"+re,gc=`<${Er}>`,ke=document,rt=()=>ke.createComment(""),it=r=>r===null||typeof r!="object"&&typeof r!="function",Rr=Array.isArray,Ws=r=>Rr(r)||typeof r?.[Symbol.iterator]=="function",kr=`[
2
+ \f\r]`,tt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Hs=/-->/g,qs=/>/g,xe=RegExp(`>|${kr}(?:([^\\s"'>=/]+)(${kr}*=${kr}*(?:[^
3
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),Vs=/'/g,Gs=/"/g,Zs=/^(?:script|style|textarea|title)$/i,Ar=r=>(e,...t)=>({_$litType$:r,strings:e,values:t}),c=Ar(1),H=Ar(2),dh=Ar(3),L=Symbol.for("lit-noChange"),u=Symbol.for("lit-nothing"),Ks=new WeakMap,$e=ke.createTreeWalker(ke,129);Ys=(r,e)=>{let t=r.length-1,i=[],s,o=e===2?"<svg>":e===3?"<math>":"",n=tt;for(let a=0;a<t;a++){let l=r[a],d,h,p=-1,m=0;for(;m<l.length&&(n.lastIndex=m,h=n.exec(l),h!==null);)m=n.lastIndex,n===tt?h[1]==="!--"?n=Hs:h[1]!==void 0?n=qs:h[2]!==void 0?(Zs.test(h[2])&&(s=RegExp("</"+h[2],"g")),n=xe):h[3]!==void 0&&(n=xe):n===xe?h[0]===">"?(n=s??tt,p=-1):h[1]===void 0?p=-2:(p=n.lastIndex-h[2].length,d=h[1],n=h[3]===void 0?xe:h[3]==='"'?Gs:Vs):n===Gs||n===Vs?n=xe:n===Hs||n===qs?n=tt:(n=xe,s=void 0);let f=n===xe&&r[a+1].startsWith("/>")?" ":"";o+=n===tt?l+gc:p>=0?(i.push(d),l.slice(0,p)+Cr+l.slice(p)+re+f):l+re+(p===-2?a:f)}return[Js(r,o+(r[t]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),i]},st=class r{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let o=0,n=0,a=e.length-1,l=this.parts,[d,h]=Ys(e,t);if(this.el=r.createElement(d,i),$e.currentNode=this.el.content,t===2||t===3){let p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(s=$e.nextNode())!==null&&l.length<a;){if(s.nodeType===1){if(s.hasAttributes())for(let p of s.getAttributeNames())if(p.endsWith(Cr)){let m=h[n++],f=s.getAttribute(p).split(re),g=/([.?@])?(.*)/.exec(m);l.push({type:1,index:o,name:g[2],strings:f,ctor:g[1]==="."?It:g[1]==="?"?Lt:g[1]==="@"?zt:Ce}),s.removeAttribute(p)}else p.startsWith(re)&&(l.push({type:6,index:o}),s.removeAttribute(p));if(Zs.test(s.tagName)){let p=s.textContent.split(re),m=p.length-1;if(m>0){s.textContent=At?At.emptyScript:"";for(let f=0;f<m;f++)s.append(p[f],rt()),$e.nextNode(),l.push({type:2,index:++o});s.append(p[m],rt())}}}else if(s.nodeType===8)if(s.data===Er)l.push({type:2,index:o});else{let p=-1;for(;(p=s.data.indexOf(re,p+1))!==-1;)l.push({type:7,index:o}),p+=re.length-1}o++}}static createElement(e,t){let i=ke.createElement("template");return i.innerHTML=e,i}};Mt=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:i}=this._$AD,s=(e?.creationScope??ke).importNode(t,!0);$e.currentNode=s;let o=$e.nextNode(),n=0,a=0,l=i[0];for(;l!==void 0;){if(n===l.index){let d;l.type===2?d=new je(o,o.nextSibling,this,e):l.type===1?d=new l.ctor(o,l.name,l.strings,this,e):l.type===6&&(d=new Ot(o,this,e)),this._$AV.push(d),l=i[++a]}n!==l?.index&&(o=$e.nextNode(),n++)}return $e.currentNode=ke,s}p(e){let t=0;for(let i of this._$AV)i!==void 0&&(i.strings!==void 0?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}},je=class r{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,i,s){this.type=2,this._$AH=u,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=i,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=Se(this,e,t),it(e)?e===u||e==null||e===""?(this._$AH!==u&&this._$AR(),this._$AH=u):e!==this._$AH&&e!==L&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Ws(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==u&&it(this._$AH)?this._$AA.nextSibling.data=e:this.T(ke.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:i}=e,s=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=st.createElement(Js(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(t);else{let o=new Mt(s,this),n=o.u(this.options);o.p(t),this.T(n),this._$AH=o}}_$AC(e){let t=Ks.get(e.strings);return t===void 0&&Ks.set(e.strings,t=new st(e)),t}k(e){Rr(this._$AH)||(this._$AH=[],this._$AR());let t=this._$AH,i,s=0;for(let o of e)s===t.length?t.push(i=new r(this.O(rt()),this.O(rt()),this,this.options)):i=t[s],i._$AI(o),s++;s<t.length&&(this._$AR(i&&i._$AB.nextSibling,s),t.length=s)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let i=Us(e).nextSibling;Us(e).remove(),e=i}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},Ce=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,i,s,o){this.type=1,this._$AH=u,this._$AN=void 0,this.element=e,this.name=t,this._$AM=s,this.options=o,i.length>2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=u}_$AI(e,t=this,i,s){let o=this.strings,n=!1;if(o===void 0)e=Se(this,e,t,0),n=!it(e)||e!==this._$AH&&e!==L,n&&(this._$AH=e);else{let a=e,l,d;for(e=o[0],l=0;l<o.length-1;l++)d=Se(this,a[i+l],t,l),d===L&&(d=this._$AH[l]),n||=!it(d)||d!==this._$AH[l],d===u?e=u:e!==u&&(e+=(d??"")+o[l+1]),this._$AH[l]=d}n&&!s&&this.j(e)}j(e){e===u?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}},It=class extends Ce{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===u?void 0:e}},Lt=class extends Ce{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==u)}},zt=class extends Ce{constructor(e,t,i,s,o){super(e,t,i,s,o),this.type=5}_$AI(e,t=this){if((e=Se(this,e,t,0)??u)===L)return;let i=this._$AH,s=e===u&&i!==u||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==u&&(i===u||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},Ot=class{constructor(e,t,i){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(e){Se(this,e)}},Xs={M:Cr,P:re,A:Er,C:1,L:Ys,R:Mt,D:Ws,V:Se,I:je,H:Ce,N:Lt,U:zt,B:It,F:Ot},bc=Sr.litHtmlPolyfillSupport;bc?.(st,je),(Sr.litHtmlVersions??=[]).push("3.3.3");Mr=(r,e,t)=>{let i=t?.renderBefore??e,s=i._$litPart$;if(s===void 0){let o=t?.renderBefore??null;i._$litPart$=s=new je(e.insertBefore(rt(),o),o,void 0,t??{})}return s._$AI(r),s}});var Ir,E,vc,Qs=w(()=>{Rt();Rt();J();J();Ir=globalThis,E=class extends te{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Mr(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return L}};E._$litElement$=!0,E.finalized=!0,Ir.litElementHydrateSupport?.({LitElement:E});vc=Ir.litElementPolyfillSupport;vc?.({LitElement:E});(Ir.litElementVersions??=[]).push("4.2.2")});var eo=w(()=>{});var S=w(()=>{Rt();J();Qs();eo()});function ie(r){let e=[],t=-1,i="",s=0,o=0,n=0;for(let a of r.split(`
4
+ `)){let l=n;n+=a.length+1;let d=yc.exec(a);if(t!==-1){d&&d[2]===i&&d[1].length<=s+3&&(e.push([t,l+a.length]),t=-1);continue}if(d&&d[1].length<=o+3){t=l,i=d[2],s=d[1].length;continue}if(!a.trim())continue;let h=Ue.exec(a),p=/^ */u.exec(a)[0].length;h&&h[1].length<=o+3?o=h[0].length:p<o&&(o=0)}return t!==-1&&e.push([t,r.length]),e}function se(r,e){return r.some(([t,i])=>e>=t&&e<i)}function oe(r){return String(r??"").replaceAll(/\r\n?/gu,`
5
+ `)}function Tt(r){return/^[0-9a-f]{7,64}$/iu.test(r)}function ne(r,e){let t=ie(r),i=[...r.matchAll(e)].filter(s=>!se(t,s.index));return i.map((s,o)=>({heading:s[1],body:r.slice(s.index+s[0].length+1,i[o+1]?.index)}))}function Re(r,e){let t=ie(r),i=[...r.matchAll(e)].find(s=>!se(t,s.index));return i?{head:r.slice(0,i.index),subs:ne(r,e)}:{head:r,subs:[]}}function at(r){let e=r.indexOf(`
6
+ `);return e===-1?{title:r.trim(),body:""}:{title:r.slice(0,e).trim(),body:r.slice(e+1)}}function wc(r){let e=[];for(let t of r.split(`
7
+ `)){let i=t.trim();if(!i.startsWith("|")||/^[\s:|-]+$/u.test(i)&&i.includes("-"))continue;let s=i.replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(o=>o.trim());e.push(s)}return e}function lt(r){let e=wc(r);if(e.length<2)return[];let t=e[0].map(s=>s.toLowerCase()),i=[];for(let s of e.slice(1)){if(s.length===t.length&&s.every((n,a)=>n.toLowerCase()===t[a]))continue;let o={};t.forEach((n,a)=>{n&&(o[n]=s[a]??"")}),i.push(o)}return i}function to(r){let e=Object.create(null),t=Object.create(null),i=[],s=null,o="",n=[],a="",l=(p,m,f)=>{!p||p in e||(e[p]=f.trim(),t[p]=m)},d=()=>{s&&l(s,o,n.join(`
8
+ `)),s=null,o="",n=[]},h=p=>{(s?n:i).push(p)};for(let p of r.split(`
9
+ `)){let m=/^ {0,3}(```|~~~)/u.exec(p),f=m!==null&&(!a||m[1]===a);if(f&&(a=a?"":m[1]),f||a){h(p);continue}if(!p.trim()){s?d():i.push(p);continue}let g=/^\s*(?:[-*] +)?\*\*([^:*]+):\*\*\s*(.*)$/u.exec(p);if(g){d();let y=g[1].trim(),v=g[2],b;for(;(b=/\s+[·•]\s+\*\*([^:*]+):\*\*\s*/u.exec(v))!==null;)l(y.toLowerCase(),y,v.slice(0,b.index)),y=b[1].trim(),v=v.slice(b.index+b[0].length);s=y.toLowerCase(),o=y,n=[v];continue}if(/^\s*(?:#{1,6} |\||[-=*_]{3,}\s*$)/u.test(p)){d();continue}h(p)}return d(),{fields:e,labels:t,prose:i.join(`
10
+ `).trim()}}function Nt(r){let e=(r||"").trim(),t="",i=Fe(e);i&&(e=i.label.trim(),t=i.url.trim());let s="",o=/#L(\d+)/u.exec(t);o&&(s=o[1]);let l=[...e.matchAll(/`([^`]+)`/gu)].map(p=>p[1].trim()).find(p=>!p.includes("(")&&(p.includes("/")||/\.\w/u.test(p)))??(e.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),d=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(l);d&&(l=d[1],s||(s=d[2]));let h=Lr.exec(l);return h?(s||(s=h[2]),{file:h[1],line:s,locationLink:t}):{file:l,line:s||"?",locationLink:t}}function zr(r){return r.replaceAll("**","")}function Fe(r){let e=String(r??""),t=_c(e,xc(e)),i=$c(e),s=e.indexOf("]");for(let o=e.indexOf("[");o!==-1;o=e.indexOf("[",o+1)){for(;s!==-1&&s<=o;)s=e.indexOf("]",s+1);for(let n of[s,t.get(o)??-1]){if(n===-1||n===o+1||e[n+1]!=="(")continue;let a=kc(e,n+1,i);if(a!==null)return{label:e.slice(o+1,n),url:a,index:o}}}return null}function _c(r,e){let t=new Map,i=[];for(let s=0;s<r.length;s++){let o=r[s];ro(r,s)?s++:o==="`"?s=e.get(s)??s:o==="["?i.push(s):o==="]"&&i.length>0&&t.set(i.pop(),s)}return t}function xc(r){let e=[];for(let s=r.indexOf("`");s!==-1;s=r.indexOf("`",s)){let o=1;for(;r[s+o]==="`";)o++;e.push([s,o]),s+=o}let t=new Map,i=new Map;for(let s=e.length-1;s>=0;s--){let[o,n]=e[s],a=i.get(n);a!==void 0&&t.set(o,a+n-1),i.set(n,o)}return t}function $c(r){let e=r.length,t=new Int32Array(e+1).fill(-1),i=new Int32Array(e+1).fill(-1),s=new Int32Array(e+1).fill(-1),o=new Int32Array(e+1).fill(-1);for(let l=e-1;l>=0;l--)t[l]=r[l]===")"?l:t[l+1],i[l]=/\s/u.test(r[l])?l:i[l+1],s[l]=r[l]===">"?l:s[l+1],o[l]=r[l]===`
11
+ `?l:o[l+1];let n=new Map,a=[];for(let l=0;l<e;l++){let d=r[l];ro(r,l)?l++:i[l]===l?a.length=0:d==="("?a.push(l):d===")"&&a.length>0&&n.set(a.pop(),l)}return{balanced:n,nextClose:t,nextSpace:i,nextAngle:s,nextLine:o}}function kc(r,e,t){let i=Sc(r,e,t);if(i)return i;let s=t.balanced.get(e);if(s!==void 0)return s>e+1?r.slice(e+1,s):null;let o=t.nextClose[e+1],n=t.nextSpace[e+1];return o===-1||o===e+1||n!==-1&&n<o?null:r.slice(e+1,o)}function Sc(r,e,t){if(r[e+1]!=="<")return"";let i=t.nextAngle[e+2],s=t.nextLine[e+2];return i===-1||s!==-1&&s<i||r[i+1]!==")"?"":r.slice(e+2,i)}function ro(r,e){return r[e]==="\\"&&Ec.test(r[e+1]??"")}function io(r){return typeof r=="string"?r.replace(Cc,"$1"):r}function so(r){let e=/^\[(.+)\]$/u.exec(r.trim());return e?e[1].trim():r.trim()}function Ae(r){let e=(r||"").trim();return/^[-–—]+$/u.test(e)?"":e}var yc,Ue,ot,nt,Ee,Lr,Cc,Ec,Y=w(()=>{yc=/^( *)(```|~~~)/u,Ue=/^( *)(?:[-*+]|\d{1,9}[.)]) +(?=\S)/u;ot=/^## +(.*)$/gmu,nt=/^### +(.*)$/gmu,Ee=/^#### +(.*)$/gmu,Lr=/^(.+):(\d+(?:-\d+)?)$/u;Cc=/\\([!-/:-@[-`{-~])/gu,Ec=/[!-/:-@[-`{-~]/u});function oo(r){if(r._idBasis)return r._idBasis;let{severity:e,description:t}=r;return r.fileHash?{severity:e,description:t,fileHash:r.fileHash}:r.location?{severity:e,description:t,location:r.location}:{severity:e,description:t,file:r.file,line:r.line}}var no=w(()=>{});function ao(r){return typeof r=="string"&&r.trim().toLowerCase()==="informative"?"informational":r}function j(r,e=r.severity){let t=ao(r.severity);return t!==r.severity&&(!r.id&&!r._idBasis&&(r._idBasis=oo({...r,severity:e})),r.severity=t),r.correctedSeverity!==void 0&&(r.correctedSeverity=ao(r.correctedSeverity)),r}var Me=w(()=>{no()});function Ac(r){switch(r.toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"HIGH_BUG":return"high_bug";case"BUG":return"bug";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return"medium"}}function Mc(r){if(r!==void 0)return lo.get(co(r))??lo.get("medium")}function po(r){let t=oe(r).trim().split(Rc);if(t.length===1)return null;let i=[];for(let s=1;s<t.length;s+=2){let o=Ac(t[s]);for(let n of t[s+1].split(/^### /mu).slice(1)){let a=Lc(n,o);a&&i.push(a)}}return i.length===0?null:{type:"security",source:"deepsec",findings:i}}function Lc(r,e){let{title:t,body:i}=at(r);if(!t)return null;let s=i.replace(/\n---\s*$/u,"").trim(),o={};for(let v of s.matchAll(/^- \*\*([^:*]+):\*\*\s*(.+)$/gmu))o[v[1].trim().toLowerCase()]=v[2].trim();let n=/^\*\*Recommendation:\*\*\s*/mu.exec(s),a=s,l="";n&&(a=s.slice(0,n.index),l=s.slice(n.index+n[0].length).trim());let d=a.split(`
12
+ `).filter(v=>!/^\s*- \*\*/u.test(v)).join(`
13
+ `).replaceAll("**","").trim(),h=[t,d].filter(Boolean).join(`
14
+
15
+ `),p=(o.file||"unknown").replace(/^`(.*)`$/u,"$1"),m=(o.lines||"").split(",").map(v=>v.trim()).find(Boolean)||"?",f={file:p,line:m,severity:e,description:h};l&&(f.recommendation=l.replaceAll("**",""));let g=Mc(o.confidence);g!==void 0&&(f.confidence=g);let y=Ic.get(co(o.revalidation));return y&&(f.revalidate=y,f.revalidateSource="deepsec",o.reasoning&&(f.revalidateVerdict=o.reasoning.replaceAll("**",""))),o.slug&&(f.slug=o.slug),j(f,e==="informative"?"medium":e)}var Rc,co,lo,Ic,uo=w(()=>{Y();Me();Rc=/^## ([A-Z][A-Z_]*)\s*\(\d+\)\s*\n/mu;co=r=>String(r??"").toLowerCase().replaceAll(/[^a-z]+/gu,""),lo=new Map([["high",8],["medium",6],["low",4]]);Ic=new Map([["confirmed","confirmed"],["falsepositive","refuted"],["uncertain","unknown"]])});var ho,Bt,Or=w(()=>{ho={critical:"Critical",high:"High",medium:"Medium",low:"Low",high_bug:"High bug",bug:"Bug",informational:"Informational"},Bt={"claude-security":"Claude Security","codex-security":"Codex Security",deepsec:"DeepSec",piolium:"Piolium"}});function mo(r){return zc.has(r?.revalidate)?r.revalidate:""}function Tr(r,e=r?.source){return Object.hasOwn(Bt,e)||mo(r)==="revalidation"}function Dt(r,e){if(!r)return r;let t=r;e?.exportsMode==="isolate"&&(t=t.replace(/^\((?:[^()]|\([^()]*\))*\): \[export:\s*\w+\] /u,""),t=t.replace(/^\[export:\s*\w+\] /u,""));let i=[e?.exportName,e?.methodName].filter(Boolean).map(s=>s.replaceAll(/[.*+?^${}()|[\]\\]/gu,"\\$&"));for(let s of i)t=t.replaceAll(new RegExp(`\\[export:\\s*${s}\\]\\s*`,"gu"),"");for(let s of i)t=t.replace(new RegExp(`^\\(\`?${s}\`?\\): `,"u"),"");return t}function Nr(r){if(!r)return"";for(let e of r.split(`
16
+ `))if(e.trim())return e.trim();return""}function Tc(r){let e=ie(r);if(e.length===0)return r.split(/\n{2,}/u);let t=[],i=0;for(let s of r.matchAll(/\n{2,}/gu))se(e,s.index)||(t.push(r.slice(i,s.index)),i=s.index+s[0].length);return t.push(r.slice(i)),t}function Br(r){let e=[];for(let t of Tc(r||"")){if(!t.trim())continue;let i=Oc.exec(t);if(i){e.push({label:i[1].trim(),body:t.slice(i[0].length).trim()});continue}let s=e.at(-1);s&&s.label===null?s.body+=`
17
+
18
+ ${t}`:e.push({label:null,body:t})}return e}function ct(r){return Number.isFinite(parseInt(r?.line,10))?`${r.file}:${r.line}`:r?.file??""}var Pt,zc,Oc,jt=w(()=>{Y();Or();Pt=["revalidation","refuted","unreachable","confirmed","partial","unknown"],zc=new Set(Pt);Oc=/^\*\*([^*\n]+):\*\*[ \t]*/u});function Pr(r){if(typeof r!="string"||r.length===0)return!1;try{let e=new URL(r);return e.protocol==="http:"||e.protocol==="https:"}catch{return!1}}function Nc(r,e){let t=ie(r),i=0;return r.split(`
19
+ `).map(s=>{let o=i;return i+=s.length+1,se(t,o)?s:e(s)}).join(`
20
+ `)}function fo(r){return Nc(String(r??""),e=>e.replace(/^( {0,3})\\(\\*#)/u,"$1$2"))}var go=w(()=>{Y()});function X(r){let e=/(`+)(.+?)\1(?!`)/u.exec(String(r??""));if(!e)return null;let t=e[2];if(t.length>2&&t.startsWith(" ")&&t.endsWith(" ")){let i=t.slice(1,-1);if(i.startsWith("`")||i.endsWith("`"))return i}return t}function Ut(r){let e=Fe(String(r??""));return e?.index===0?{label:e.label,url:e.url}:null}function yo(r){let e=/^<(https?:[^>\s]*)>$/u.exec(r.trim());return e?e[1]:null}function wo(r){let e=Lr.exec(r);return e?{file:e[1],line:e[2]}:{file:r,line:"?"}}function Dc(r){let e=r.indexOf(".");return e>0?{exportName:r.slice(0,e),methodName:r.slice(e+1)}:{exportName:r}}function Ie(r){let e=String(r??"").trim();return Bc.get(e.toLowerCase())??e}function jc(r){let e={},t=r.trim(),i=/ · (`+)(.+?)\1$/u.exec(t);i&&(Object.assign(e,Dc(X(i[0]))),t=t.slice(0,i.index));let s=Ut(t),o=X(s?s.label:t);return o!==null&&Object.assign(e,wo(o)),s&&Pr(s.url)&&(e.location=s.url),e}function Fc(r){let e={},t=r.trim();t.endsWith(bo)&&(e.critical=!0,t=t.slice(0,-bo.length));let i=t.indexOf(Uc);i!==-1&&(t=t.slice(0,i));let s=/^(.*?) — corrected (from|to) (.*)$/u.exec(t);return s?s[2]==="from"?(e.severity=Ie(s[3]),e.correctedSeverity=Ie(s[1])):(e.severity=Ie(s[1]),e.correctedSeverity=Ie(s[3])):e.severity=Ie(t),e}function Vc(r){return/\d/u.test(r)||/^(?:opus|sonnet|haiku|gpt|gemini|fable|mythos|llama|mistral)\b/iu.test(r)}function Ft(r){let e=r.trim(),t=vo.get(e.toLowerCase());if(t)return{source:t};let i={},s=[];for(let o of e.split(" \xB7 ").map(n=>n.trim()).filter(Boolean))o==="revalidate"&&!i.revalidate?i.revalidate="revalidation":qc.has(o)&&!i.exportsMode?i.exportsMode=o:Hc.has(o)&&!i.effort?i.effort=o:s.push(o);return s.length>1?[i.type,i.model]=s:s.length===1&&(i[Vc(s[0])?"model":"type"]=s[0]),{run:i}}function Dr(r){let e=r.trim(),t=Ut(e);return t?t.label.trim():yo(e)??e}function Gc(r){let e=Ut(r.trim());if(e){let t=e.url.split("/").at(-1)??"";return Tt(t)?t:X(e.label)??t}return X(r)??r.trim()}function Kc(r){let e=X(r)??r.trim(),t=e.lastIndexOf("@");return{npm:t>0?{name:e.slice(0,t),version:e.slice(t+1)}:{name:e}}}function Wc(r){let e=r.trim().toLowerCase();return e==="the revalidation pass itself"?"revalidation":Pc.has(e)?e:void 0}function _o(r,e,t){let i=Zc.get(e.trim().toLowerCase());i&&i(r,t.trim())}function xo(r){let e=r.split(`
21
+ `),t=0,i=()=>{for(;t<e.length&&!e[t].trim();)t++},s=()=>{let a=[];for(;t<e.length;){let l=Jc.exec(e[t]);if(!l)break;a.push([l[1].trim(),l[2].trim()]),t++}return a};i();let o=s();if(o.length>0)return{title:"",facts:o,rest:e.slice(t).join(`
22
+ `)};let n=[];for(;t<e.length&&e[t].trim();)n.push(e[t++]);return i(),o=s(),o.length===0?{title:"",facts:o,rest:r}:{title:He(n.join(`
23
23
  `).trim()),facts:o,rest:e.slice(t).join(`
24
- `)}}function Ke(r){return An(r)}function Pn(r,e){let t=new RegExp(`^#{${e}} +(.*)$`,"gmu"),i=re(r),s=[...r.matchAll(t)].filter(a=>!ie(i,a.index)),o=r.slice(0,s[0]?.index??r.length).trim(),n=s.map((a,l)=>({label:a[1].trim(),body:r.slice(a.index+a[0].length,s[l+1]?.index).trim()}));return{lead:o,sections:n}}function Bn(r){let e=[],t=re(r),i=0;for(let s of r.split(`
25
- `)){let o=ie(t,i)?null:hd.exec(s);i+=s.length+1,o?e.push({ref:o[2].trim(),indent:o[1].length+2,note:[]}):e.length>0&&e.at(-1).note.push(s)}return e.map(s=>md(s))}function md({ref:r,indent:e,note:t}){let i={},s=Wt(r),o=zn(r),n=o===null?Z(s?s.label:r):null;n!==null&&Object.assign(i,Tn(n));let a=s?s.url:o;yi(a)&&(i.url=a);let l=Ke(t.map(d=>d.slice(Math.min(e,/^ */u.exec(d)[0].length))).join(`
26
- `).trim());return l&&(i.text=l),i}function jn(r){let e=r.length,t=1/0;for(let i=r.length-1;i>=0;i--){let s=fd.indexOf(r[i].label.toLowerCase());if(s===-1||s>=t)break;t=s,e=i}return{paragraphs:r.slice(0,e),fields:r.slice(e).map(i=>[Dn.get(i.label.toLowerCase()),i.body])}}function Un(r,e,t){let i=[],s=bi(e),o=r.endsWith("\u2026")?r.slice(0,-1).trimEnd():"";!r||s===r||o&&s.startsWith(o)?i.push(e):i.push(r,e);for(let{label:n,body:a}of t)i.push(a?`**${n}:** ${a}`:`**${n}:**`);return i.filter(Boolean).join(`
27
-
28
- `)}var Qc,Ln,ed,In,id,od,nd,pd,ud,hd,Dn,fd,Fn=y(()=>{"use strict";Gt();fi();K();Mn();Qc=new Map(Object.entries(Rn).map(([r,e])=>[e.toLowerCase(),r])),Ln=new Map(Object.entries(Ht).map(([r,e])=>[e.toLowerCase(),r])),ed=new Set(qt);In=" \xB7 flagged critical by the analyzer",id=" (varies across reports \u2014 ";od=new Set(["max","xhigh","high","medium","low","minimal"]),nd=new Set(["list","isolate"]);pd=new Map([["location",(r,e)=>Object.assign(r,rd(e))],["severity",(r,e)=>Object.assign(r,sd(e))],["confidence",(r,e)=>{let t=/^(\d+(?:\.\d+)?)\/10$/u.exec(e);t&&(r.confidence=Number(t[1]))}],["revalidation",(r,e)=>{let t=dd(e);t&&(r.revalidate=t)}],["revalidated by",(r,e)=>{let t=e.trim();t&&(r.revalidateSource=Ln.get(t.toLowerCase())??t)}],["repository",(r,e)=>{r.repo={github:wi(e)}}],["introduced in",(r,e)=>{r.commitHash=ld(e)}],["package",(r,e)=>{r.package=cd(e)}],["priority",(r,e)=>{r.priority=/^-?\d+(?:\.\d+)?$/u.test(e)?Number(e):e}],["found while analyzing",(r,e)=>{r.discoveredIn=Z(e)??e}],["detailed report",(r,e)=>{r.reportPath=Z(e)??e}],["commit audited",(r,e)=>{r.auditedCommit=Z(e)??e}],["id",(r,e)=>{r.id=Z(e)??e}],...[["category","category"],["status","status"],["branch","branch"],["date created","dateCreated"],["detected at","detectedAt"],["committed at","committedAt"],["poc status","pocStatus"],["variant of","parent"],["slug","slug"]].map(([r,e])=>[r,(t,i)=>{t[e]=i}])]);ud=/^- \*\*([^*\n]+?):\*\* ?(.*)$/u;hd=/^(\d+)\. (.*)$/u;Dn=new Map([["impact","impact"],["reproduction","reproduction"],["recommendation","recommendation"],["confidence reasoning","confidenceReason"],["revalidation verdict","revalidateVerdict"],["revalidation recommendation","revalidateRecommendation"]]),fd=[...Dn.keys()]});function qn(r){let e=se(r).trim();if(!gd.test(e))return null;let{head:t,subs:i}=Ee(e,ut),s=[];for(let{heading:o,body:n}of i){if(o.trim().toLowerCase()==="summary")continue;let a=wd(o);for(let l of oe(n,ht))s.push(xd(l,a))}return kd(_d(t),s)}function wd(r){let e=/^(.*?)\s*\(\d+\)\s*$/u.exec(r.trim());return Ie(e?e[1]:r)}function _d(r){let e=new Map;for(let t of r.matchAll(vd)){let i=t[1].trim().toLowerCase();e.has(i)||e.set(i,t[2].trim())}return{sources:(e.get("source")??"").split(",").map(t=>Kt(t).source).filter(Boolean),analyzers:(e.get("analyzer")??e.get("analyzers")??"").split(";").map(t=>t.trim()).filter(Boolean),repo:e.has("repository")?wi(e.get("repository")):""}}function xd({heading:r,body:e},t){let i=r.trim().replace(/^\d+\.\s+/u,""),s=Ee(e,Re).subs.filter(o=>bd.test(o.heading.trim()));return s.length===0?[Hn(e,4,i,t)]:s.map(o=>Hn(o.body,5,i,t))}function Hn(r,e,t,i){let{title:s,facts:o,rest:n}=Nn(r),{lead:a,sections:l}=Pn(n,e),d={file:"unknown",line:"?"},u=null;for(let[x,E]of o)x.trim().toLowerCase()==="analyzer"?u=Kt(E):On(d,x,E);d.severity||(d.severity=i||"medium");let p=s||t,m=p!=="Untitled finding"&&p!==gt(d),f=l.filter(x=>!yd.has(x.label.toLowerCase())).map(x=>({label:x.label,body:Ke(x.body)})),{paragraphs:g,fields:v}=jn(f);d.description=Un(m?p:"",Ke(a),g);let w=l.filter(x=>x.label.toLowerCase()==="evidence").flatMap(x=>Bn(x.body));w.length>0&&(d.evidence=w);for(let[x,E]of v)d[x]=E;let b=l.find(x=>x.label.toLowerCase()==="severity correction");return b?.body&&(d.correctedSeverityReason=Ke(b.body)),{finding:B(d),analyzer:u}}function $d(r,e){let t={source:null,run:{}};if(e.some(s=>s.analyzer!==null)){let s=new Set(e.map(o=>o.analyzer?.source??null));s.size===1&&!s.has(null)&&([t.source]=s);for(let o of e)o.analyzer?.run?Object.assign(o.finding,o.analyzer.run):o.analyzer?.source&&!t.source&&(o.finding.source=o.analyzer.source);return t}let i=r.analyzers.length===1?Kt(r.analyzers[0]):null;return i?.source?t.source=i.source:i?.run?t.run=i.run:r.analyzers.length===0&&r.sources.length===1&&([t.source]=r.sources),t}function kd(r,e){let t=e.flat(),{source:i,run:s}=$d(r,t),o={},n=new Set(t.map(d=>d.finding.type).filter(Boolean)),a=s.type??(n.size===1?[...n][0]:null)??(i?"security":null);a&&(o.type=a),i&&(o.source=i);for(let d of["model","effort","exportsMode"])s[d]&&(o[d]=s[d]);r.repo&&(o.repo={github:r.repo});let l=e.map(d=>d.map(u=>u.finding));return l.every(d=>d.length===1)?o.findings=l.flat():o.groups=l,o}var gd,bd,vd,yd,Vn=y(()=>{"use strict";Gt();K();Fn();Me();gd=/^<!--\s*DeepView findings export\b[^>]*-->/u,bd=/^Case \d+ of \d+(?:\s|$)/u,vd=/^- \*\*([^*\n]+?):\*\* ?(.*)$/gmu,yd=new Set(["evidence","severity correction","comment"])});function Gn(r){let e=Cd(r);if(!e)return null;let{severity:t,description:i,location:s,file:o,line:n}=e;return s?{severity:t,description:i,location:s}:{severity:t,description:i,file:o,line:n}}function Cd(r){let e=r.indexOf(`
29
- `),t=(e===-1?r:r.slice(0,e)).trim();if(!t)return null;let i=e===-1?"":r.slice(e+1),{sectionsText:s,metaText:o}=Rd(i),n=Ed(s),a=Ad(o),{file:l,line:d,locationLink:u}=Md(n.location||""),p=(a.severity||"").toLowerCase();return{severity:Sd.has(p)?p:"medium",description:Id(t,n),location:u,file:l||"unknown",line:d}}function Rd(r){let e=/^---\s*$/mu,t=e.exec(r);if(!t)return{sectionsText:r,metaText:""};let i=r.slice(0,t.index).trim(),s=r.slice(t.index+t[0].length).replace(/^\n/u,""),o=e.exec(s),n=o?s.slice(0,o.index):s;return{sectionsText:i,metaText:n}}function Ed(r){let e={},t=r.split(/^## /mu);for(let i=1;i<t.length;i++){let s=t[i],o=s.indexOf(`
30
- `),n=(o===-1?s:s.slice(0,o)).trim().toLowerCase(),a=(o===-1?"":s.slice(o+1)).trim();n&&(e[n]=a)}return e}function Ad(r){let e={};for(let t of r.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))e[t[1].trim().toLowerCase()]=t[2].trim();return e}function Md(r){let e="",t="?",i="",s=r.match(/\[([^\]]+)\]\(([^)]+)\)/u);if(s){e=s[1].trim(),i=s[2];let n=s[2].match(/#L(\d+)/u);n&&(t=n[1])}else e=r.trim(),i=r.trim();let o=e.match(/^(.+):(\d+)$/u);return o&&(e=o[1],t==="?"&&(t=o[2])),{file:e,line:t,locationLink:i}}function Id(r,e){let t=[r];return e.details&&t.push(e.details),e.impact&&t.push(`Impact: ${e.impact}`),e["reproduction steps"]&&t.push(`Reproduction: ${e["reproduction steps"]}`),Ld(t.join(`
31
-
32
- `))}function Ld(r){return r.replaceAll("**","")}var Sd,Wn=y(()=>{"use strict";Sd=new Set(["critical","high","medium","low","high_bug","bug","informational"])});function Jn(r){let e=se(r).trim();if(!e.startsWith("# "))return null;let t=e.split(/^# /mu).filter(s=>s.trim().length>0),i=[];for(let s of t){let o=Td(s);o&&i.push(o)}return i.length===0?null:{type:"security",source:"claude-security",findings:i}}function Td(r){let{title:e,body:t}=mt(r);if(!e)return null;let{sectionsText:i,metaText:s}=Od(t),o=Nd(i),n=Pd(s),a=Ud(o.evidence||""),{file:l,line:d,locationLink:u}=Yn(o.location||a[0]?.ref||""),p=(n.severity||"").toLowerCase(),m=zd.has(p)?p:"medium",f=Hd(e,o,a.length>0),g={file:l||"unknown",line:d,severity:m,description:f};u&&(g.location=u),a.length>0&&(g.evidence=a.map(Fd)),o["reproduction steps"]&&(g.reproduction=Bd(o["reproduction steps"])),o["recommended fix"]&&(g.recommendation=o["recommended fix"]),n.repository&&(g.repo={github:n.repository}),n.branch&&(g.branch=n.branch),n["date created"]&&(g.dateCreated=n["date created"]),n.status&&(g.status=n.status),n.category&&(g.category=n.category);let v=Gn(r);return v&&(g._idBasis=v),B(g)}function Od(r){let e=/^---\s*$/mu,t=e.exec(r);if(!t)return{sectionsText:r,metaText:""};let i=r.slice(0,t.index).trim(),s=r.slice(t.index+t[0].length).replace(/^\n/u,""),o=e.exec(s),n=o?s.slice(0,o.index):s;return{sectionsText:i,metaText:n}}function Nd(r){let e={};for(let t of r.split(/^## /mu).slice(1)){let{title:i,body:s}=mt(t),o=i.toLowerCase();o&&(e[o]=s.trim())}return e}function Pd(r){let e={};for(let t of r.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))e[t[1].trim().toLowerCase()]=t[2].trim();return e}function Yn(r){let e="",t="?",i="",s=We(r);if(s){e=s.label.trim(),i=s.url.trim();let n=i.match(/#L(\d+)(?:-L?(\d+))?/u);n&&(t=n[2]?`${n[1]}-${n[2]}`:n[1])}else e=r.trim(),i=r.trim();e=vn(e.replaceAll("`","")).trim();let o=e.match(/^(.+):(\d+)(?:\s*[-–—]\s*L?(\d+))?$/u);return o&&(e=o[1],t==="?"&&(t=o[3]?`${o[2]}-${o[3]}`:o[2])),{file:e,line:t,locationLink:i,linked:s!==null}}function Bd(r){let e=r.split(`
33
- `),t=e.findIndex(a=>a.trim());if(t===-1||!Ge.test(e[t])||e.some((a,l)=>l!==t&&Ge.test(a)))return r;let i=e[t].replace(/^ */u,""),s=i.replace(Ge,"");if(!s.trim())return r;let o=Kn(s)??Kn(i);if(o===null&&(Ge.test(s)||jd.test(i)))return r;let n=o===null?[s]:o.length===1?[o[0].step]:o.map(({number:a,step:l})=>`${a}. ${l}`);return e.splice(t,1,...n),e.join(`
34
- `)}function Kn(r){let e=[...r.matchAll(Dd)];if(e.length===0||e[0].index!==0)return null;let t=[];for(let[i,s]of e.entries()){let o=Number(s[1]);if(i>0&&o<=t[i-1].number)return null;let n=r.slice(s.index+s[0].length,e[i+1]?.index).trim();if(!n)return null;t.push({number:o,step:n})}return t}function Ud(r){let e=[];for(let t of r.split(`
35
- `))Zn.test(t)?e.push({ref:t.replace(Zn,"").trim(),note:[]}):e.length>0&&t.trim()&&e.at(-1).note.push(t.trim());if(e.length===0){let t=r.split(`
36
- `).map(o=>o.trim()).filter(Boolean),i=t.findIndex(o=>We(o)!==null);if(i===-1&&t.length!==1)return[];let s=i===-1?0:i;e.push({ref:t[s],note:t.filter((o,n)=>n!==s)})}return e.filter(t=>t.ref)}function Fd({ref:r,note:e}){let{file:t,line:i,locationLink:s,linked:o}=Yn(r),n={file:t||"unknown",line:i};s&&o&&(n.url=s);let a=e.join(`
37
- `);return a&&(n.text=a),n}function Hd(r,e,t){let i=[r];return e.details&&i.push(e.details),e.evidence&&!t&&i.push(`**Evidence:**
24
+ `)}}function He(r){return fo(r)}function $o(r,e){let t=new RegExp(`^#{${e}} +(.*)$`,"gmu"),i=ie(r),s=[...r.matchAll(t)].filter(a=>!se(i,a.index)),o=r.slice(0,s[0]?.index??r.length).trim(),n=s.map((a,l)=>({label:a[1].trim(),body:r.slice(a.index+a[0].length,s[l+1]?.index).trim()}));return{lead:o,sections:n}}function ko(r){let e=[],t=ie(r),i=0;for(let s of r.split(`
25
+ `)){let o=se(t,i)?null:Yc.exec(s);i+=s.length+1,o?e.push({ref:o[2].trim(),indent:o[1].length+2,note:[]}):e.length>0&&e.at(-1).note.push(s)}return e.map(s=>Xc(s))}function Xc({ref:r,indent:e,note:t}){let i={},s=Ut(r),o=yo(r),n=o===null?X(s?s.label:r):null;n!==null&&Object.assign(i,wo(n));let a=s?s.url:o;Pr(a)&&(i.url=a);let l=He(t.map(d=>d.slice(Math.min(e,/^ */u.exec(d)[0].length))).join(`
26
+ `).trim());return l&&(i.text=l),i}function Co(r){let e=r.length,t=1/0;for(let i=r.length-1;i>=0;i--){let s=Qc.indexOf(r[i].label.toLowerCase());if(s===-1||s>=t)break;t=s,e=i}return{paragraphs:r.slice(0,e),fields:r.slice(e).map(i=>[So.get(i.label.toLowerCase()),i.body])}}function Eo(r,e,t){let i=[],s=Nr(e),o=r.endsWith("\u2026")?r.slice(0,-1).trimEnd():"";!r||s===r||o&&s.startsWith(o)?i.push(e):i.push(r,e);for(let{label:n,body:a}of t)i.push(a?`**${n}:** ${a}`:`**${n}:**`);return i.filter(Boolean).join(`
27
+
28
+ `)}var Bc,vo,Pc,bo,Uc,Hc,qc,Zc,Jc,Yc,So,Qc,Ro=w(()=>{jt();Or();Y();go();Bc=new Map(Object.entries(ho).map(([r,e])=>[e.toLowerCase(),r])),vo=new Map(Object.entries(Bt).map(([r,e])=>[e.toLowerCase(),r])),Pc=new Set(Pt);bo=" \xB7 flagged critical by the analyzer",Uc=" (varies across reports \u2014 ";Hc=new Set(["max","xhigh","high","medium","low","minimal"]),qc=new Set(["list","isolate"]);Zc=new Map([["location",(r,e)=>Object.assign(r,jc(e))],["severity",(r,e)=>Object.assign(r,Fc(e))],["confidence",(r,e)=>{let t=/^(\d+(?:\.\d+)?)\/10$/u.exec(e);t&&(r.confidence=Number(t[1]))}],["revalidation",(r,e)=>{let t=Wc(e);t&&(r.revalidate=t)}],["revalidated by",(r,e)=>{let t=e.trim();t&&(r.revalidateSource=vo.get(t.toLowerCase())??t)}],["repository",(r,e)=>{r.repo={github:Dr(e)}}],["introduced in",(r,e)=>{r.commitHash=Gc(e)}],["package",(r,e)=>{r.package=Kc(e)}],["priority",(r,e)=>{r.priority=/^-?\d+(?:\.\d+)?$/u.test(e)?Number(e):e}],["found while analyzing",(r,e)=>{r.discoveredIn=X(e)??e}],["detailed report",(r,e)=>{r.reportPath=X(e)??e}],["commit audited",(r,e)=>{r.auditedCommit=X(e)??e}],["id",(r,e)=>{r.id=X(e)??e}],...[["category","category"],["status","status"],["branch","branch"],["date created","dateCreated"],["detected at","detectedAt"],["committed at","committedAt"],["poc status","pocStatus"],["variant of","parent"],["slug","slug"]].map(([r,e])=>[r,(t,i)=>{t[e]=i}])]);Jc=/^- \*\*([^*\n]+?):\*\* ?(.*)$/u;Yc=/^(\d+)\. (.*)$/u;So=new Map([["impact","impact"],["reproduction","reproduction"],["recommendation","recommendation"],["confidence reasoning","confidenceReason"],["revalidation verdict","revalidateVerdict"],["revalidation recommendation","revalidateRecommendation"]]),Qc=[...So.keys()]});function Mo(r){let e=oe(r).trim();if(!ed.test(e))return null;let{head:t,subs:i}=Re(e,ot),s=[];for(let{heading:o,body:n}of i){if(o.trim().toLowerCase()==="summary")continue;let a=sd(o);for(let l of ne(n,nt))s.push(nd(l,a))}return ld(od(t),s)}function sd(r){let e=/^(.*?)\s*\(\d+\)\s*$/u.exec(r.trim());return Ie(e?e[1]:r)}function od(r){let e=new Map;for(let t of r.matchAll(rd)){let i=t[1].trim().toLowerCase();e.has(i)||e.set(i,t[2].trim())}return{sources:(e.get("source")??"").split(",").map(t=>Ft(t).source).filter(Boolean),analyzers:(e.get("analyzer")??e.get("analyzers")??"").split(";").map(t=>t.trim()).filter(Boolean),repo:e.has("repository")?Dr(e.get("repository")):""}}function nd({heading:r,body:e},t){let i=r.trim().replace(/^\d+\.\s+/u,""),s=Re(e,Ee).subs.filter(o=>td.test(o.heading.trim()));return s.length===0?[Ao(e,4,i,t)]:s.map(o=>Ao(o.body,5,i,t))}function Ao(r,e,t,i){let{title:s,facts:o,rest:n}=xo(r),{lead:a,sections:l}=$o(n,e),d={file:"unknown",line:"?"},h=null;for(let[k,A]of o)k.trim().toLowerCase()==="analyzer"?h=Ft(A):_o(d,k,A);d.severity||(d.severity=i||"medium");let p=s||t,m=p!=="Untitled finding"&&p!==ct(d),f=l.filter(k=>!id.has(k.label.toLowerCase())).map(k=>({label:k.label,body:He(k.body)})),{paragraphs:g,fields:y}=Co(f);d.description=Eo(m?p:"",He(a),g);let v=l.filter(k=>k.label.toLowerCase()==="evidence").flatMap(k=>ko(k.body));v.length>0&&(d.evidence=v);for(let[k,A]of y)d[k]=A;let b=l.find(k=>k.label.toLowerCase()==="severity correction");return b?.body&&(d.correctedSeverityReason=He(b.body)),{finding:j(d),analyzer:h}}function ad(r,e){let t={source:null,run:{}};if(e.some(s=>s.analyzer!==null)){let s=new Set(e.map(o=>o.analyzer?.source??null));s.size===1&&!s.has(null)&&([t.source]=s);for(let o of e)o.analyzer?.run?Object.assign(o.finding,o.analyzer.run):o.analyzer?.source&&!t.source&&(o.finding.source=o.analyzer.source);return t}let i=r.analyzers.length===1?Ft(r.analyzers[0]):null;return i?.source?t.source=i.source:i?.run?t.run=i.run:r.analyzers.length===0&&r.sources.length===1&&([t.source]=r.sources),t}function ld(r,e){let t=e.flat(),{source:i,run:s}=ad(r,t),o={},n=new Set(t.map(d=>d.finding.type).filter(Boolean)),a=s.type??(n.size===1?[...n][0]:null)??(i?"security":null);a&&(o.type=a),i&&(o.source=i);for(let d of["model","effort","exportsMode"])s[d]&&(o[d]=s[d]);r.repo&&(o.repo={github:r.repo});let l=e.map(d=>d.map(h=>h.finding));return l.every(d=>d.length===1)?o.findings=l.flat():o.groups=l,o}var ed,td,rd,id,Io=w(()=>{jt();Y();Ro();Me();ed=/^<!--\s*DeepView findings export\b[^>]*-->/u,td=/^Case \d+ of \d+(?:\s|$)/u,rd=/^- \*\*([^*\n]+?):\*\* ?(.*)$/gmu,id=new Set(["evidence","severity correction","comment"])});function Lo(r){let e=dd(r);if(!e)return null;let{severity:t,description:i,location:s,file:o,line:n}=e;return s?{severity:t,description:i,location:s}:{severity:t,description:i,file:o,line:n}}function dd(r){let e=r.indexOf(`
29
+ `),t=(e===-1?r:r.slice(0,e)).trim();if(!t)return null;let i=e===-1?"":r.slice(e+1),{sectionsText:s,metaText:o}=pd(i),n=ud(s),a=hd(o),{file:l,line:d,locationLink:h}=md(n.location||""),p=(a.severity||"").toLowerCase();return{severity:cd.has(p)?p:"medium",description:fd(t,n),location:h,file:l||"unknown",line:d}}function pd(r){let e=/^---\s*$/mu,t=e.exec(r);if(!t)return{sectionsText:r,metaText:""};let i=r.slice(0,t.index).trim(),s=r.slice(t.index+t[0].length).replace(/^\n/u,""),o=e.exec(s),n=o?s.slice(0,o.index):s;return{sectionsText:i,metaText:n}}function ud(r){let e={},t=r.split(/^## /mu);for(let i=1;i<t.length;i++){let s=t[i],o=s.indexOf(`
30
+ `),n=(o===-1?s:s.slice(0,o)).trim().toLowerCase(),a=(o===-1?"":s.slice(o+1)).trim();n&&(e[n]=a)}return e}function hd(r){let e={};for(let t of r.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))e[t[1].trim().toLowerCase()]=t[2].trim();return e}function md(r){let e="",t="?",i="",s=r.match(/\[([^\]]+)\]\(([^)]+)\)/u);if(s){e=s[1].trim(),i=s[2];let n=s[2].match(/#L(\d+)/u);n&&(t=n[1])}else e=r.trim(),i=r.trim();let o=e.match(/^(.+):(\d+)$/u);return o&&(e=o[1],t==="?"&&(t=o[2])),{file:e,line:t,locationLink:i}}function fd(r,e){let t=[r];return e.details&&t.push(e.details),e.impact&&t.push(`Impact: ${e.impact}`),e["reproduction steps"]&&t.push(`Reproduction: ${e["reproduction steps"]}`),gd(t.join(`
31
+
32
+ `))}function gd(r){return r.replaceAll("**","")}var cd,zo=w(()=>{cd=new Set(["critical","high","medium","low","high_bug","bug","informational"])});function No(r){let e=oe(r).trim();if(!e.startsWith("# "))return null;let t=e.split(/^# /mu).filter(s=>s.trim().length>0),i=[];for(let s of t){let o=vd(s);o&&i.push(o)}return i.length===0?null:{type:"security",source:"claude-security",findings:i}}function vd(r){let{title:e,body:t}=at(r);if(!e)return null;let{sectionsText:i,metaText:s}=yd(t),o=wd(i),n=_d(s),a=Sd(o.evidence||""),{file:l,line:d,locationLink:h}=Bo(o.location||a[0]?.ref||""),p=(n.severity||"").toLowerCase(),m=bd.has(p)?p:"medium",f=Ed(e,o,a.length>0),g={file:l||"unknown",line:d,severity:m,description:f};h&&(g.location=h),a.length>0&&(g.evidence=a.map(Cd)),o["reproduction steps"]&&(g.reproduction=xd(o["reproduction steps"])),o["recommended fix"]&&(g.recommendation=o["recommended fix"]),n.repository&&(g.repo={github:n.repository}),n.branch&&(g.branch=n.branch),n["date created"]&&(g.dateCreated=n["date created"]),n.status&&(g.status=n.status),n.category&&(g.category=n.category);let y=Lo(r);return y&&(g._idBasis=y),j(g)}function yd(r){let e=/^---\s*$/mu,t=e.exec(r);if(!t)return{sectionsText:r,metaText:""};let i=r.slice(0,t.index).trim(),s=r.slice(t.index+t[0].length).replace(/^\n/u,""),o=e.exec(s),n=o?s.slice(0,o.index):s;return{sectionsText:i,metaText:n}}function wd(r){let e={};for(let t of r.split(/^## /mu).slice(1)){let{title:i,body:s}=at(t),o=i.toLowerCase();o&&(e[o]=s.trim())}return e}function _d(r){let e={};for(let t of r.matchAll(/\*\*([^:]+):\*\*\s*(.+)/gu))e[t[1].trim().toLowerCase()]=t[2].trim();return e}function Bo(r){let e="",t="?",i="",s=Fe(r);if(s){e=s.label.trim(),i=s.url.trim();let n=i.match(/#L(\d+)(?:-L?(\d+))?/u);n&&(t=n[2]?`${n[1]}-${n[2]}`:n[1])}else e=r.trim(),i=r.trim();e=io(e.replaceAll("`","")).trim();let o=e.match(/^(.+):(\d+)(?:\s*[-–—]\s*L?(\d+))?$/u);return o&&(e=o[1],t==="?"&&(t=o[3]?`${o[2]}-${o[3]}`:o[2])),{file:e,line:t,locationLink:i,linked:s!==null}}function xd(r){let e=r.split(`
33
+ `),t=e.findIndex(a=>a.trim());if(t===-1||!Ue.test(e[t])||e.some((a,l)=>l!==t&&Ue.test(a)))return r;let i=e[t].replace(/^ */u,""),s=i.replace(Ue,"");if(!s.trim())return r;let o=Oo(s)??Oo(i);if(o===null&&(Ue.test(s)||kd.test(i)))return r;let n=o===null?[s]:o.length===1?[o[0].step]:o.map(({number:a,step:l})=>`${a}. ${l}`);return e.splice(t,1,...n),e.join(`
34
+ `)}function Oo(r){let e=[...r.matchAll($d)];if(e.length===0||e[0].index!==0)return null;let t=[];for(let[i,s]of e.entries()){let o=Number(s[1]);if(i>0&&o<=t[i-1].number)return null;let n=r.slice(s.index+s[0].length,e[i+1]?.index).trim();if(!n)return null;t.push({number:o,step:n})}return t}function Sd(r){let e=[];for(let t of r.split(`
35
+ `))To.test(t)?e.push({ref:t.replace(To,"").trim(),note:[]}):e.length>0&&t.trim()&&e.at(-1).note.push(t.trim());if(e.length===0){let t=r.split(`
36
+ `).map(o=>o.trim()).filter(Boolean),i=t.findIndex(o=>Fe(o)!==null);if(i===-1&&t.length!==1)return[];let s=i===-1?0:i;e.push({ref:t[s],note:t.filter((o,n)=>n!==s)})}return e.filter(t=>t.ref)}function Cd({ref:r,note:e}){let{file:t,line:i,locationLink:s,linked:o}=Bo(r),n={file:t||"unknown",line:i};s&&o&&(n.url=s);let a=e.join(`
37
+ `);return a&&(n.text=a),n}function Ed(r,e,t){let i=[r];return e.details&&i.push(e.details),e.evidence&&!t&&i.push(`**Evidence:**
38
38
  ${e.evidence}`),e.impact&&i.push(`**Impact:** ${e.impact}`),i.join(`
39
39
 
40
- `)}var zd,Dd,jd,Zn,Xn=y(()=>{"use strict";Wn();Me();K();zd=new Set(["critical","high","medium","low","high_bug","bug","informational","informative"]);Dd=/(?:^|[ \t])(\d{1,9})\)(?=[ \t]|$)/gu,jd=/^\d{1,9}\)(?=[ \t]|$)/u;Zn=/^[ \t]*(?:\d+[.)]|[-*+])\s+/u});function qd(r){let e=(r||"").trim(),t="",i=/\[([^\]]+)\]\(([^)]+)\)/u.exec(e);i&&(e=i[1].trim(),t=i[2].trim());let s="",o=/#L(\d+)/u.exec(t);o&&(s=o[1]);let l=[...e.matchAll(/`([^`]+)`/gu)].map(p=>p[1].trim()).find(p=>!p.includes("(")&&(p.includes("/")||/\.\w/u.test(p)))??(e.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),d=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(l);d&&(l=d[1],s||(s=d[2]));let u=/^(.+):(\d+(?:-\d+)?)$/u.exec(l);return u?(s||(s=u[2]),{file:u[1],line:s,locationLink:t}):{file:l,line:s||"?",locationLink:t}}function Zt({severity:r,description:e,ref:t,lineBullet:i="",id:s=""}){let o=qd(t),n=o.file||"unknown",a=o.line==="?"&&i?i:o.line,l=o.locationLink||(n==="unknown"&&s?`piolium:${s}`:"");return l?{severity:r,description:e,location:l}:{severity:r,description:e,file:n,line:a}}var _i=y(()=>{"use strict"});function Qn(r){return Vd.test(r)}var Vd,ea=y(()=>{"use strict";Vd=/^[\w.-]+\/[\w.-]+$/u});function he(r){switch(((r||"").trim().split(/\s+/u)[0]||"").replaceAll(/[`*]+/gu,"").toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return""}}function bt(...r){return{severity:r.find(Boolean)||"medium",identitySeverity:r.find(e=>e&&e!=="informative")||"medium"}}function vt(r){let e=/^([CHML])-?\d+$/iu.exec((r||"").trim());return e?{C:"critical",H:"high",M:"medium",L:"low"}[e[1].toUpperCase()]:""}function xi(r){let e=/^(critical|high|medium|low|informational|informative|info)(?:[ -](?:severity|risk))?(?:[ -]findings?)?(?:\s*\(\d+\))?$/iu.exec((r||"").trim());return e?he(e[1]):""}function ta(r){let e=/^(critical|high|medium|low|informational|informative|info)\b/iu.exec((r||"").trim());return e?he(e[1]):""}function Yt(r){return/^variants?\s*(?:\(\d+\))?\s*:?$/iu.test((r||"").trim())}function Xt(r){let e=/^([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(r||"");return e?{id:e[1].toUpperCase(),slug:e[2]||""}:null}function Jt(r){return(r||"").replaceAll("-"," ")}function yt(r){let e=(r||"").trim(),t=/^\[([^\]]+)\]\([^)]*\)$/u.exec(e);return yn(t?t[1]:e).toUpperCase()}function $i(r){let e=/^\[([^\]]+)\]\(([^)]+)\)\s*[:—–-]*\s*(.*)$/u.exec(r);return e?{text:e[3]?`${e[1].trim()} ${e[3].trim()}`:e[1].trim(),link:e[2].trim()}:null}function ki(r){let e=r.search(/\s/u),t=(e===-1?r:r.slice(0,e)).replace(/[:.,—–-]+$/u,""),i=Xt(t);if(!i)return null;let s=(e===-1?"":r.slice(e+1)).replace(/^[:—–-]+\s*/u,"").trim();return{id:i.id,slug:i.slug,rest:s}}function Si(r){let{text:e,link:t}=$i(r)??{text:r,link:""},i=/^\[([^\]]+)\] *(.*)$/u.exec(e);if(i){let o=Xt(i[1].trim());return o?{id:o.id,title:i[2].trim()||Jt(o.slug)||o.id,link:t}:{id:i[1].trim().toUpperCase(),title:i[2].trim(),link:t}}let s=ki(e);return s?{id:s.id,title:s.rest||Jt(s.slug)||s.id,link:t}:{id:"",title:e.trim(),link:t}}function ra(r){let e={},t=o=>(/`([^`]+)`/u.exec(o)?.[1]??o.split(/\s+/u)[0]??"").trim(),i=/^\s*(?:[-*] +)?\*\*Target:?\*\*\s*(.*)$/imu.exec(r||"");if(i){let o=t(i[1]);Qn(o)&&(e.repo=o)}let s=/^\s*(?:[-*] +)?\*\*Commit[^:*]*:?\*\*\s*(.*)$/imu.exec(r||"");if(s){let o=t(s[1]);Ut(o)&&(e.commitHash=o)}return e}function Ri(r){for(let e of Ci)if(r[e])return r[e];return""}var Ci,Ei=y(()=>{"use strict";K();ea();Ci=["key code reference","key code","code reference","location","affected file","file","path"]});function Qt(r){return{id:yt(r.id||""),title:Ae(r.title),severity:Ae(r.severity),pocStatus:Ae(r["poc status"]||r.poc),status:Ae(r.status),parent:yt(Ae(r.parent||"")),location:Ae(r.location)}}function er(r,e=""){let{severity:t,identitySeverity:i}=bt(he(r.severity),e,vt(r.id)),{file:s,line:o,locationLink:n}=Ft(r.location||""),a={file:s||"unknown",line:o,severity:t,description:mi(r.title||r.id)};return n?a.location=n:a.file==="unknown"&&r.id&&(a.location=`piolium:${r.id}`),a._idBasis=Zt({severity:i,description:a.description,ref:r.location||"",id:r.id}),r.pocStatus&&(a.pocStatus=r.pocStatus),r.status&&(a.status=r.status),r.parent&&(a.parent=r.parent),B(a)}function Ai(r,e,t){let i=[];for(let s of r.split(`
41
- `)){let o=/^\s{0,3}(?:[-*+]|\d{1,3}[.)])\s+(.+)$/u.exec(s);if(!o)continue;let n=o[1].trim();if(/^\*\*[^:*]+:\*\*/u.test(n))continue;let a=$i(n),l=a?.link??"";if(a)n=a.text;else{let w=/^\*\*([^*]+)\*\*\s*[:—–-]*\s*(.*)$/u.exec(n);w&&(n=w[2]?`${w[1].trim()} ${w[2].trim()}`:w[1].trim())}if(/^(?:none\b|no |n\/a\b)/iu.test(n))continue;let d=ki(n),u=d?.id??"",p=n;if(d){let w=Jt(d.slug);p=w&&d.rest?`${w}
40
+ `)}var bd,$d,kd,To,Po=w(()=>{zo();Me();Y();bd=new Set(["critical","high","medium","low","high_bug","bug","informational","informative"]);$d=/(?:^|[ \t])(\d{1,9})\)(?=[ \t]|$)/gu,kd=/^\d{1,9}\)(?=[ \t]|$)/u;To=/^[ \t]*(?:\d+[.)]|[-*+])\s+/u});function Rd(r){let e=(r||"").trim(),t="",i=/\[([^\]]+)\]\(([^)]+)\)/u.exec(e);i&&(e=i[1].trim(),t=i[2].trim());let s="",o=/#L(\d+)/u.exec(t);o&&(s=o[1]);let l=[...e.matchAll(/`([^`]+)`/gu)].map(p=>p[1].trim()).find(p=>!p.includes("(")&&(p.includes("/")||/\.\w/u.test(p)))??(e.replaceAll("`","").trim().split(/[\s,]+/u).find(Boolean)||""),d=/^(.*?)#L(\d+)(?:-L?\d+)?$/u.exec(l);d&&(l=d[1],s||(s=d[2]));let h=/^(.+):(\d+(?:-\d+)?)$/u.exec(l);return h?(s||(s=h[2]),{file:h[1],line:s,locationLink:t}):{file:l,line:s||"?",locationLink:t}}function Ht({severity:r,description:e,ref:t,lineBullet:i="",id:s=""}){let o=Rd(t),n=o.file||"unknown",a=o.line==="?"&&i?i:o.line,l=o.locationLink||(n==="unknown"&&s?`piolium:${s}`:"");return l?{severity:r,description:e,location:l}:{severity:r,description:e,file:n,line:a}}var jr=w(()=>{});function Ur(r){return Md.test(r)}function qt(r){let e=r?.repo?.github;if(typeof e!="string")return null;let t=e.trim().replace(/\/+$/u,"");if(!t)return null;let i=Ad.exec(t),s=(i?`${i[1]}/${i[2]}`:t).replace(/\.git$/u,"");return Ur(s)?s:null}var Ad,Md,Fr=w(()=>{Ad=/^(?:https?:\/\/)?(?:www\.)?github\.com\/([^/?#]+)\/([^/?#]+?)(?:\.git)?(?:[/?#].*)?$/iu,Md=/^[\w.-]+\/[\w.-]+$/u});function he(r){switch(((r||"").trim().split(/\s+/u)[0]||"").replaceAll(/[`*]+/gu,"").toUpperCase()){case"CRITICAL":return"critical";case"HIGH":return"high";case"MEDIUM":return"medium";case"LOW":return"low";case"INFO":case"INFORMATIONAL":return"informational";case"INFORMATIVE":return"informative";default:return""}}function dt(...r){return{severity:r.find(Boolean)||"medium",identitySeverity:r.find(e=>e&&e!=="informative")||"medium"}}function pt(r){let e=/^([CHML])-?\d+$/iu.exec((r||"").trim());return e?{C:"critical",H:"high",M:"medium",L:"low"}[e[1].toUpperCase()]:""}function Hr(r){let e=/^(critical|high|medium|low|informational|informative|info)(?:[ -](?:severity|risk))?(?:[ -]findings?)?(?:\s*\(\d+\))?$/iu.exec((r||"").trim());return e?he(e[1]):""}function Do(r){let e=/^(critical|high|medium|low|informational|informative|info)\b/iu.exec((r||"").trim());return e?he(e[1]):""}function Gt(r){return/^variants?\s*(?:\(\d+\))?\s*:?$/iu.test((r||"").trim())}function Kt(r){let e=/^([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(r||"");return e?{id:e[1].toUpperCase(),slug:e[2]||""}:null}function Vt(r){return(r||"").replaceAll("-"," ")}function ut(r){let e=(r||"").trim(),t=/^\[([^\]]+)\]\([^)]*\)$/u.exec(e);return so(t?t[1]:e).toUpperCase()}function qr(r){let e=/^\[([^\]]+)\]\(([^)]+)\)\s*[:—–-]*\s*(.*)$/u.exec(r);return e?{text:e[3]?`${e[1].trim()} ${e[3].trim()}`:e[1].trim(),link:e[2].trim()}:null}function Vr(r){let e=r.search(/\s/u),t=(e===-1?r:r.slice(0,e)).replace(/[:.,—–-]+$/u,""),i=Kt(t);if(!i)return null;let s=(e===-1?"":r.slice(e+1)).replace(/^[:—–-]+\s*/u,"").trim();return{id:i.id,slug:i.slug,rest:s}}function Gr(r){let{text:e,link:t}=qr(r)??{text:r,link:""},i=/^\[([^\]]+)\] *(.*)$/u.exec(e);if(i){let o=Kt(i[1].trim());return o?{id:o.id,title:i[2].trim()||Vt(o.slug)||o.id,link:t}:{id:i[1].trim().toUpperCase(),title:i[2].trim(),link:t}}let s=Vr(e);return s?{id:s.id,title:s.rest||Vt(s.slug)||s.id,link:t}:{id:"",title:e.trim(),link:t}}function jo(r){let e={},t=o=>(/`([^`]+)`/u.exec(o)?.[1]??o.split(/\s+/u)[0]??"").trim(),i=/^\s*(?:[-*] +)?\*\*Target:?\*\*\s*(.*)$/imu.exec(r||"");if(i){let o=t(i[1]);Ur(o)&&(e.repo=o)}let s=/^\s*(?:[-*] +)?\*\*Commit[^:*]*:?\*\*\s*(.*)$/imu.exec(r||"");if(s){let o=t(s[1]);Tt(o)&&(e.commitHash=o)}return e}function Wr(r){for(let e of Kr)if(r[e])return r[e];return""}var Kr,Zr=w(()=>{Y();Fr();Kr=["key code reference","key code","code reference","location","affected file","file","path"]});function Wt(r){return{id:ut(r.id||""),title:Ae(r.title),severity:Ae(r.severity),pocStatus:Ae(r["poc status"]||r.poc),status:Ae(r.status),parent:ut(Ae(r.parent||"")),location:Ae(r.location)}}function Zt(r,e=""){let{severity:t,identitySeverity:i}=dt(he(r.severity),e,pt(r.id)),{file:s,line:o,locationLink:n}=Nt(r.location||""),a={file:s||"unknown",line:o,severity:t,description:zr(r.title||r.id)};return n?a.location=n:a.file==="unknown"&&r.id&&(a.location=`piolium:${r.id}`),a._idBasis=Ht({severity:i,description:a.description,ref:r.location||"",id:r.id}),r.pocStatus&&(a.pocStatus=r.pocStatus),r.status&&(a.status=r.status),r.parent&&(a.parent=r.parent),j(a)}function Jr(r,e,t){let i=[];for(let s of r.split(`
41
+ `)){let o=/^\s{0,3}(?:[-*+]|\d{1,3}[.)])\s+(.+)$/u.exec(s);if(!o)continue;let n=o[1].trim();if(/^\*\*[^:*]+:\*\*/u.test(n))continue;let a=qr(n),l=a?.link??"";if(a)n=a.text;else{let v=/^\*\*([^*]+)\*\*\s*[:—–-]*\s*(.*)$/u.exec(n);v&&(n=v[2]?`${v[1].trim()} ${v[2].trim()}`:v[1].trim())}if(/^(?:none\b|no |n\/a\b)/iu.test(n))continue;let d=Vr(n),h=d?.id??"",p=n;if(d){let v=Vt(d.slug);p=v&&d.rest?`${v}
42
42
 
43
- ${d.rest}`:d.rest||w||d.id}let m=t.get(u),{severity:f,identitySeverity:g}=bt(he(m?.severity),e,vt(u)),v={file:"unknown",line:"?",severity:f,description:mi(p)};u?v.location=`piolium:${u}`:l&&(v.location=l),l.endsWith("report.md")&&(v.reportPath=l),m?.pocStatus&&(v.pocStatus=m.pocStatus),m?.status&&(v.status=m.status),m?.parent&&(v.parent=m.parent),i.push({id:u,finding:B(v,g)})}return i}function Mi(r,e,t,i=""){let s=[];for(let n of ft(r)){let a=Qt(n);!a.id&&!a.title||(!a.parent&&t&&(a.parent=t),a.id&&!e.has(a.id)&&e.set(a.id,a),s.push({id:a.id,finding:er(a,i)}))}if(s.length>0)return s;let o=Ai(r,i,e);for(let n of o)t&&!n.finding.parent&&(n.finding.parent=t);return o}var ia=y(()=>{"use strict";K();_i();Me();Ei()});function Wd(r){return Gd.has(r)||r.startsWith("findings by severity")}function Zd(r){return Kd.test(r)}function sa(r){let{id:e}=Si(r);return!!(e&&Xt(e))}function Jd(r){let e=oe(r,ht);return(e.length>0?e:oe(r,Re)).some(({heading:i})=>sa(i))}function oa(r){let e=se(r).trim();if(!/^# +Security Audit Report\b/mu.test(e)&&!/^## +Technical Findings Detail\s*$/imu.test(e)&&!/^## +Findings by Severity\b/imu.test(e))return null;let t=ep(e),i=tp(t["summary of findings"]||""),s=ra(Ee(e,ut).head),o=[],n=new Set,a=[],l=({id:u,finding:p})=>{o.push(p),u&&n.add(u)},d=u=>{for(let p of u)l(p)};for(let[u,p]of Object.entries(t)){let m=xi(u);m||Wd(u)?d(Ii(p,m,i,a)):!Zd(u)&&Jd(p)&&d(Ii(p,ta(u),i,a))}for(let u of a)(!u.id||!n.has(u.id))&&l(u);for(let u of i.values())n.has(u.id)||l({id:u.id,finding:er(u)});if(o.length===0)return null;for(let u of o)s.repo&&(u.repo={github:s.repo}),s.commitHash&&!u.auditedCommit&&(u.auditedCommit=s.commitHash);return{type:"security",source:"piolium",findings:o}}function Yd(r,e,t,i){let s=[],o="";for(let{heading:n,body:a}of r){let l=xi(n);if(l)s.push(...Ii(a,l,e,t)),o="";else if(Yt(n))s.push(...Qd(a,e,o,t,i));else{let d=Xd(n,a,e,t,i);s.push(...d),o=d[0]?.id||o}}return s}function Xd(r,e,t,i,s){let{head:o,subs:n}=Ee(e,Re),a=na(r,o,t,s),l=a!==null&&!a.id&&n.some(u=>!Yt(u.heading)&&sa(u.heading)),d=a&&!l?[a]:[];return d.push(...Li(n,t,i,s,a?.id||"")),d}function Qd(r,e,t,i,s){let{head:o,subs:n}=Ee(r,Re);return i.push(...Mi(o,e,t,s)),Li(n,e,i,s,"")}function Li(r,e,t,i,s){let o=[],n="";for(let{heading:a,body:l}of r){if(Yt(a)){t.push(...Mi(l,e,s??n,i));continue}let d=na(a,l,e,i);d&&(o.push(d),n=d.id||n)}return o}function Ii(r,e,t,i){let s=oe(r,ht);if(s.length>0)return Yd(s,t,i,e);let o=Li(oe(r,Re),t,i,e,null);if(o.length>0)return o;let n=ft(r).map(Qt).filter(a=>a.id||a.title);if(n.length>0){for(let a of n)!a.severity&&e&&(a.severity=e),a.id&&!t.has(a.id)?t.set(a.id,a):a.id||i.push({id:"",finding:er(a,e)});return[]}return i.push(...Ai(r,e,t)),[]}function na(r,e,t,i=""){let s=r.trim();if(!s)return null;let{id:o,title:n,link:a}=Si(s),l=t.get(o);!o&&n&&(l=[...t.values()].find(J=>J.title.toLowerCase()===n.toLowerCase()),o=l?.id??"");let{fields:d,labels:u,prose:p}=gn(e),{severity:m,identitySeverity:f}=bt(he(d.severity),he(l?.severity),i,vt(o)),g=Ft(Ri(d)),v=/\d+/u.exec(d.line||d.lines||"")?.[0]??"",w=g.line==="?"&&v?v:g.line,b=/\*\*Variant of:?\*\*\s*\[?([^\]\s)]+)/iu.exec(e),x=p.split(`
44
- `).filter(J=>!/^\s*<a\s[^>]*>\s*<\/a>\s*$/iu.test(J)&&!/\*\*Variant of:?\*\*/iu.test(J)).join(`
45
- `).trim(),E={file:g.file||"unknown",line:w,severity:m,description:ip(n||o,d,u,x)};g.locationLink?E.location=g.locationLink:E.file==="unknown"&&o&&(E.location=`piolium:${o}`),E._idBasis=Zt({severity:f,description:E.description,ref:Ri(d),lineBullet:v,id:o});let ze=d["poc status"]||d.poc||l?.pocStatus;ze&&(E.pocStatus=ze);let xt=d["detailed report"]||(a.endsWith("report.md")?a:"");xt&&(E.reportPath=xt),l?.status&&(E.status=l.status);let Te=l?.parent||(b?yt(b[1]):"");return Te&&(E.parent=Te),{id:o,finding:B(E)}}function ep(r){let e=Object.create(null);for(let{heading:t,body:i}of oe(r,ut)){let s=t.trim().toLowerCase();s&&(e[s]=s in e?`${e[s]}
46
- ${i}`:i)}return e}function tp(r){let e=new Map;for(let t of ft(r)){let i=Qt(t);i.id&&e.set(i.id,i)}return e}function ip(r,e,t,i){let s=[r];e.summary&&s.push(e.summary),i&&s.push(i);for(let[o,n]of Object.entries(e))!n||rp.has(o)||s.push(`**${t[o]||o}:** ${n}`);return s.filter(Boolean).join(`
43
+ ${d.rest}`:d.rest||v||d.id}let m=t.get(h),{severity:f,identitySeverity:g}=dt(he(m?.severity),e,pt(h)),y={file:"unknown",line:"?",severity:f,description:zr(p)};h?y.location=`piolium:${h}`:l&&(y.location=l),l.endsWith("report.md")&&(y.reportPath=l),m?.pocStatus&&(y.pocStatus=m.pocStatus),m?.status&&(y.status=m.status),m?.parent&&(y.parent=m.parent),i.push({id:h,finding:j(y,g)})}return i}function Yr(r,e,t,i=""){let s=[];for(let n of lt(r)){let a=Wt(n);!a.id&&!a.title||(!a.parent&&t&&(a.parent=t),a.id&&!e.has(a.id)&&e.set(a.id,a),s.push({id:a.id,finding:Zt(a,i)}))}if(s.length>0)return s;let o=Jr(r,i,e);for(let n of o)t&&!n.finding.parent&&(n.finding.parent=t);return o}var Uo=w(()=>{Y();jr();Me();Zr()});function Ld(r){return Id.has(r)||r.startsWith("findings by severity")}function Od(r){return zd.test(r)}function Fo(r){let{id:e}=Gr(r);return!!(e&&Kt(e))}function Td(r){let e=ne(r,nt);return(e.length>0?e:ne(r,Ee)).some(({heading:i})=>Fo(i))}function Ho(r){let e=oe(r).trim();if(!/^# +Security Audit Report\b/mu.test(e)&&!/^## +Technical Findings Detail\s*$/imu.test(e)&&!/^## +Findings by Severity\b/imu.test(e))return null;let t=Dd(e),i=jd(t["summary of findings"]||""),s=jo(Re(e,ot).head),o=[],n=new Set,a=[],l=({id:h,finding:p})=>{o.push(p),h&&n.add(h)},d=h=>{for(let p of h)l(p)};for(let[h,p]of Object.entries(t)){let m=Hr(h);m||Ld(h)?d(Xr(p,m,i,a)):!Od(h)&&Td(p)&&d(Xr(p,Do(h),i,a))}for(let h of a)(!h.id||!n.has(h.id))&&l(h);for(let h of i.values())n.has(h.id)||l({id:h.id,finding:Zt(h)});if(o.length===0)return null;for(let h of o)s.repo&&(h.repo={github:s.repo}),s.commitHash&&!h.auditedCommit&&(h.auditedCommit=s.commitHash);return{type:"security",source:"piolium",findings:o}}function Nd(r,e,t,i){let s=[],o="";for(let{heading:n,body:a}of r){let l=Hr(n);if(l)s.push(...Xr(a,l,e,t)),o="";else if(Gt(n))s.push(...Pd(a,e,o,t,i));else{let d=Bd(n,a,e,t,i);s.push(...d),o=d[0]?.id||o}}return s}function Bd(r,e,t,i,s){let{head:o,subs:n}=Re(e,Ee),a=qo(r,o,t,s),l=a!==null&&!a.id&&n.some(h=>!Gt(h.heading)&&Fo(h.heading)),d=a&&!l?[a]:[];return d.push(...Qr(n,t,i,s,a?.id||"")),d}function Pd(r,e,t,i,s){let{head:o,subs:n}=Re(r,Ee);return i.push(...Yr(o,e,t,s)),Qr(n,e,i,s,"")}function Qr(r,e,t,i,s){let o=[],n="";for(let{heading:a,body:l}of r){if(Gt(a)){t.push(...Yr(l,e,s??n,i));continue}let d=qo(a,l,e,i);d&&(o.push(d),n=d.id||n)}return o}function Xr(r,e,t,i){let s=ne(r,nt);if(s.length>0)return Nd(s,t,i,e);let o=Qr(ne(r,Ee),t,i,e,null);if(o.length>0)return o;let n=lt(r).map(Wt).filter(a=>a.id||a.title);if(n.length>0){for(let a of n)!a.severity&&e&&(a.severity=e),a.id&&!t.has(a.id)?t.set(a.id,a):a.id||i.push({id:"",finding:Zt(a,e)});return[]}return i.push(...Jr(r,e,t)),[]}function qo(r,e,t,i=""){let s=r.trim();if(!s)return null;let{id:o,title:n,link:a}=Gr(s),l=t.get(o);!o&&n&&(l=[...t.values()].find(z=>z.title.toLowerCase()===n.toLowerCase()),o=l?.id??"");let{fields:d,labels:h,prose:p}=to(e),{severity:m,identitySeverity:f}=dt(he(d.severity),he(l?.severity),i,pt(o)),g=Nt(Wr(d)),y=/\d+/u.exec(d.line||d.lines||"")?.[0]??"",v=g.line==="?"&&y?y:g.line,b=/\*\*Variant of:?\*\*\s*\[?([^\]\s)]+)/iu.exec(e),k=p.split(`
44
+ `).filter(z=>!/^\s*<a\s[^>]*>\s*<\/a>\s*$/iu.test(z)&&!/\*\*Variant of:?\*\*/iu.test(z)).join(`
45
+ `).trim(),A={file:g.file||"unknown",line:v,severity:m,description:Fd(n||o,d,h,k)};g.locationLink?A.location=g.locationLink:A.file==="unknown"&&o&&(A.location=`piolium:${o}`),A._idBasis=Ht({severity:f,description:A.description,ref:Wr(d),lineBullet:y,id:o});let R=d["poc status"]||d.poc||l?.pocStatus;R&&(A.pocStatus=R);let D=d["detailed report"]||(a.endsWith("report.md")?a:"");D&&(A.reportPath=D),l?.status&&(A.status=l.status);let F=l?.parent||(b?ut(b[1]):"");return F&&(A.parent=F),{id:o,finding:j(A)}}function Dd(r){let e=Object.create(null);for(let{heading:t,body:i}of ne(r,ot)){let s=t.trim().toLowerCase();s&&(e[s]=s in e?`${e[s]}
46
+ ${i}`:i)}return e}function jd(r){let e=new Map;for(let t of lt(r)){let i=Wt(t);i.id&&e.set(i.id,i)}return e}function Fd(r,e,t,i){let s=[r];e.summary&&s.push(e.summary),i&&s.push(i);for(let[o,n]of Object.entries(e))!n||Ud.has(o)||s.push(`**${t[o]||o}:** ${n}`);return s.filter(Boolean).join(`
47
47
 
48
- `)}var Gd,Kd,rp,aa=y(()=>{"use strict";K();_i();Me();ia();Ei();Gd=new Set(["technical findings detail","technical findings","detailed findings","findings detail","findings"]);Kd=/^(?:summary of findings|deferred|methodolog|executive|conclusion|attack surface|coverage|discoveries|scope|table of contents|contents|appendix|recommendation|remediation)/u;rp=new Set([...Ci,"severity","summary","files","poc","poc status","line","lines","detailed report","proof of concept","evidence","variant of","pattern","status","id","title"])});function Ze(r){return Array.isArray(r?.findings)?r.findings:Array.isArray(r?.groups)?r.groups:null}function la(r){let e;try{let t=JSON.parse(r);if(Ze(t)){for(let i of op(Ze(t)))B(i);return{data:t,format:"json",reason:null}}return{data:null,format:null,reason:"JSON, but not a report: no findings array"}}catch(t){e=t}for(let[t,i]of sp){let s=i(r);if(s)return{data:s,format:t,reason:null}}return{data:null,format:null,reason:`Not JSON, and not a recognized markdown format. (JSON error: ${e.message})`}}function op(r){return r.flat().filter(e=>e&&typeof e=="object")}var sp,tr=y(()=>{"use strict";Cn();Vn();Xn();aa();Me();Gt();sp=[["deepview-md",qn],["deepsec",Sn],["piolium",oa],["claude-security",Jn]]});var ir,$a=y(()=>{V();st();Pt();ir=ae(class extends G{constructor(){super(...arguments),this.key=h}render(r,e){return this.key=r,e}update(r,[e,t]){return e!==this.key&&(De(r),this.key=e),t}})});var Ui=y(()=>{$a()});var Fb,Hb,qb,za=y(()=>{"use strict";S();Fb=document.querySelector("#drop-zone"),Hb=document.querySelector("#report"),qb=document.querySelector("app-sidebar")});function ts(r=document){if(r.querySelector(":modal"))return!0;for(let e of r.querySelectorAll("*"))if(e.shadowRoot&&ts(e.shadowRoot))return!0;return!1}var Ta=y(()=>{"use strict"});function Rp(){return U||(U=document.createElement("div"),U.id="styled-tooltip",U.setAttribute("popover","manual"),document.body.append(U),U)}function Ep(r){typeof r.showPopover=="function"&&(r.matches(":popover-open")&&r.hidePopover(),r.showPopover())}function Lp(r,{placement:e="cursor"}={}){e=r.dataset.tooltipPlacement??e;let t=Rp(),i=r.dataset.tooltip??"",s=r.dataset.tooltipRepo??"",o=["stasis","sourcemap"].includes(r.dataset.tooltipBundle)?r.dataset.tooltipBundle:"",n=r.dataset.tooltipStats??"";if(!i||nr===r&&Oa===i&&Na===s&&Pa===o&&Ba===n)return;if(t.textContent=i,s){let v=document.createElement("div");v.className="tooltip-repo",v.innerHTML=Gs;let w=document.createElement("span");w.textContent=s,v.append(w),t.append(v)}if(o||n){let v=document.createElement("div");if(v.className="tooltip-bundle",o==="stasis"){let x=document.createElement("img");x.src="./stasis.svg",x.alt="",v.append(x)}else v.innerHTML=le;let w=document.createElement("span"),b=o==="stasis"?"Stasis":o==="sourcemap"?"Sourcemap":"";w.textContent=[b,n].filter(Boolean).join(" \xB7 "),v.append(w),t.append(v)}Ep(t),t.style.left="0px",t.style.top="0px",t.style.transform="none",t.classList.add("visible");let a=Fa,l=Ha+Mp;if(e==="right"||e==="right-start"){let v=r.getBoundingClientRect();a=v.right+Ip,l=v.top+(e==="right"?v.height/2:0)}let d=window.innerWidth-t.offsetWidth-or,u=Math.max(or,Math.min(a,d));t.style.left=`${Math.round(u)}px`;let p=t.offsetHeight,m=e==="right"?l-p/2:l,f=window.innerHeight-p-or,g=Math.max(or,Math.min(m,f));t.style.top=`${Math.round(g)}px`,nr=r,Oa=i,Na=s,Pa=o,Ba=n}function Da(){clearTimeout(ar),ar=null,U&&(U.classList.remove("visible"),typeof U.hidePopover=="function"&&U.matches(":popover-open")&&U.hidePopover()),nr=null}function zp(r,{gate:e,placement:t}={}){e&&!e(r)||(clearTimeout(ar),ar=setTimeout(()=>{Lp(r,{placement:t})},Ap))}function Ua(r,e){for(let t of r.composedPath()){if(t===e)break;if(t.nodeType===1&&Object.hasOwn(t.dataset,"tooltip"))return t}return null}function qa(r,e){!r||ja.has(r)||(ja.add(r),r.addEventListener("mouseover",t=>{let i=Ua(t,r);if(!i){Da();return}i!==nr&&zp(i,e)}),r.addEventListener("mouseout",t=>{let i=Ua(t,r),s=t.relatedTarget?.closest?.("[data-tooltip]")??null;i&&i===s||Da()}))}var U,nr,Oa,Na,Pa,Ba,ar,Fa,Ha,Ap,Mp,Ip,or,ja,Va=y(()=>{"use strict";ce();nr=null,Oa="",Na="",Pa="",Ba="",ar=null,Fa=0,Ha=0;document.addEventListener("mousemove",r=>{Fa=r.clientX,Ha=r.clientY},{passive:!0});Ap=100,Mp=14,Ip=8,or=8;ja=new WeakSet});var Wa,Ga=y(()=>{Wa=`a{cursor:default}*,*: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)}}&.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}}
49
- `});function Je(r,e={}){return new Promise(t=>{let i=document.createElement(r);Object.assign(i,e),i.addEventListener("resolve",s=>{i.remove(),t(s.detail)}),document.body.append(i)})}var H,lr=y(()=>{"use strict";S();za();Ta();Va();Ga();H=class extends R{static styles=[k(Wa)];exclusive=!1;firstUpdated(){qa(this.renderRoot),this.beforeOpen();let e=this.renderRoot.querySelector("dialog");if(e){if(this.exclusive&&ts()){this._conflict(new DOMException("Another modal dialog is already open","InvalidStateError"));return}try{e.showModal()}catch(t){this._conflict(t);return}this.focusInitial()}}_conflict(e){this._settled=!0,this.dispatchEvent(new CustomEvent("modal-conflict",{detail:{cause:e}}))}beforeOpen(){}focusInitial(){(this.renderRoot.querySelector("input, textarea")??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector("button"))?.focus()}_finish(e){this._settled||(this._settled=!0,this.renderRoot.querySelector("dialog")?.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:e})))}_onClose=()=>this._finish(null)}});async function me(r,e=null,t={}){let i;try{i=await $(r,{credentials:"same-origin",headers:{accept:"application/json"},...t})}catch{return e}if(i.status===401||i.status===403)return null;if(!i.ok)return e;try{return await i.json()}catch{return e}}async function n1({fallback:r=null}={}){let e;try{let i=q(),s=await $(i?fr(i):"/api/auth/session",{credentials:"same-origin",headers:{accept:"application/json"}});if(s.status===401||s.status===403)return null;if(!s.ok)return r;e=await s.json()}catch{return r}let t=e?.user;return t===null?null:t===void 0||typeof t.login!="string"?r:{id:t.id,login:t.login,name:typeof t.name=="string"?t.name:null,avatarUrl:typeof t.avatarUrl=="string"?t.avatarUrl:null,role:typeof t.role=="string"?t.role:"none",csrfToken:typeof e.csrfToken=="string"?e.csrfToken:null,...q()?{publicShare:!0}:{}}}async function a1({fallback:r=[],signal:e,onRevision:t}={}){let i=q(),s=i?await me(fr(i),null,{signal:e}):null,o=i?{teams:s?.team?[s.team]:[]}:await me("/api/teams",{teams:r},{signal:e}),n=o?.teams;return Array.isArray(n)?(t?.(typeof o.revision=="string"?o.revision:null),n.filter(a=>a!=null&&typeof a.id=="string"&&typeof a.name=="string").map(a=>({id:a.id,slug:a.slug,name:a.name,...typeof a.cacheKey=="string"?{cacheKey:a.cacheKey}:{},reports:Array.isArray(a.reports)?a.reports.filter(l=>l!=null&&typeof l.id=="string"&&typeof l.filename=="string").map(l=>({id:l.id,slug:l.slug,filename:l.filename,...l.analyzer===null||typeof l.analyzer=="string"?{analyzer:l.analyzer}:{},repoFullName:typeof l.repoFullName=="string"?l.repoFullName:"",repoDirectory:typeof l.repoDirectory=="string"?l.repoDirectory:"",...typeof l.cacheKey=="string"?{cacheKey:l.cacheKey}:{}})):[],bundles:Array.isArray(a.bundles)?a.bundles.filter(l=>l!=null&&typeof l.id=="string"&&typeof l.filename=="string").map(l=>({id:l.id,slug:l.slug,integrity:l.integrity,byteSize:l.byteSize,repoId:l.repoId,filename:l.filename,kind:l.kind,summary:l.summary??null,summaryRetryAt:Number.isSafeInteger(l.summaryRetryAt)&&l.summaryRetryAt>0?l.summaryRetryAt:null,repoDirectory:typeof l.repoDirectory=="string"?l.repoDirectory:"",repoFullName:typeof l.repoFullName=="string"?l.repoFullName:""})):[]}))):o==null?[]:r}function rs(r){return Ze(r?.data)===null||typeof r.repo?.directory!="string"||r.repo.github!==null&&typeof r.repo.github!="string"?null:{data:r.data,repo:r.repo}}async function Ka(r,{signal:e}={}){return rs(await me(`/api/reports/${encodeURIComponent(r)}`,null,{signal:e}))}async function Za(r,{signal:e}={}){let t=[...new Set(r)];if(t.length===0)return[];let i=await me("/api/reports/query",null,{method:"POST",signal:e,headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({ids:t})});if(!Array.isArray(i?.reports)||i.reports.length!==t.length)return null;let s=new Map;for(let o of i.reports){let n=rs(o);if(!n||!t.includes(o.id)||s.has(o.id))return null;s.set(o.id,n)}return r.map(o=>s.get(o))}async function Ja(r,{signal:e}={}){let t=await me(`/api/teams/${encodeURIComponent(r)}/reports`,null,{signal:e});if(!Array.isArray(t?.reports))return null;let i=[],s=new Set;for(let o of t.reports){let n=rs(o);if(!n||typeof o.id!="string"||typeof o.filename!="string"||s.has(o.id))return null;s.add(o.id),i.push({id:o.id,filename:o.filename,...n})}return i}function Le(r){return r?`?team=${encodeURIComponent(r)}`:""}async function l1(r,e,t){let s=(await me(`/api/reports/${encodeURIComponent(r)}/triage${Le(e)}`,null,t))?.entries;return s!=null&&typeof s=="object"&&!Array.isArray(s)?s:null}async function c1(r,e){if(q())return[];let t=await me(`/api/teams/${encodeURIComponent(r)}/fixes`,null,{signal:e});return Array.isArray(t?.fixes)?t.fixes:null}async function d1(r,e,t){let i=await me(`/api/reports/${encodeURIComponent(r)}/comments${Le(e)}`,null,t);return Array.isArray(i?.comments)?i.comments:null}async function p1(r,{findingId:e,body:t,commentId:i=null,version:s},o,n){let a=i==null?"":`/${encodeURIComponent(i)}`;try{let l=await $(`/api/reports/${encodeURIComponent(r)}/comments${a}${Le(n)}`,{method:i==null?"POST":"PATCH",credentials:"same-origin",headers:{"content-type":"application/json",...o?{"x-csrf-token":o}:{}},body:JSON.stringify(i==null?{findingId:e,body:t}:{body:t,version:s})});return{status:l.status,comment:l.ok?(await l.json()).comment:null}}catch{return{status:0,comment:null}}}async function u1(r,e,t,i,s){try{return(await $(`/api/reports/${encodeURIComponent(r)}/comments/${encodeURIComponent(e)}${Le(s)}`,{method:"DELETE",credentials:"same-origin",headers:{"content-type":"application/json",...i?{"x-csrf-token":i}:{}},body:JSON.stringify({version:t})})).status}catch{return 0}}async function h1(r,e,t,i){try{return(await $(`/api/reports/${encodeURIComponent(r)}/triage${Le(i)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...t?{"x-csrf-token":t}:{}},body:JSON.stringify({entries:e})})).status}catch{return 0}}function m1(r){r&&(location.href=r)}async function f1(r){if(q()){location.href="/";return}try{await $("/api/auth/logout",{method:"POST",credentials:"same-origin",headers:r?{"x-csrf-token":r}:{}})}catch{}location.reload()}async function Ya(r){let e=await $(`/api/teams/${encodeURIComponent(r)}/share`,{credentials:"same-origin"});if(!e.ok)throw new Error(`Could not load public links (${e.status})`);return(await e.json()).shares}async function Xa(r,e,{id:t,revoke:i=!1,dependencies:s=!1,security:o=!1}={}){let n=t?`/${encodeURIComponent(t)}`:"",a=await $(`/api/teams/${encodeURIComponent(r)}/share${n}`,{method:i?"DELETE":t?"PATCH":"POST",credentials:"same-origin",headers:{"x-csrf-token":e,"content-type":"application/json"},...i?{}:{body:JSON.stringify({dependencies:s,security:o})}});if(!a.ok)throw new Error(`Could not ${i?"revoke":t?"update":"create"} public link (${a.status})`);return a.json()}async function g1(r,e){let t=await $(`/api/bundles/${encodeURIComponent(r)}/download`,{credentials:"same-origin"});if(!t.ok)throw new Error(`Could not download bundle (${t.status})`);let i=URL.createObjectURL(await t.blob()),s=document.createElement("a");s.href=i,s.download=e,s.click(),setTimeout(()=>URL.revokeObjectURL(i),6e4)}var _t=y(()=>{"use strict";z();$t();tr()});var el,Qa=y(()=>{el=`.share-field{display:grid;gap:.35rem;margin-top:.8rem;font-size:.82rem}fieldset{display:grid;gap:.55rem;border:0;margin-top:1rem;font-size:.82rem}legend{margin-bottom:.55rem;font-weight:600}fieldset label{display:flex;align-items:center;gap:.5rem}input[type=checkbox]{accent-color:var(--accent)}.nwd-actions{flex-wrap:wrap}.revoke-all{margin-top:.75rem;border:0;background:none;color:var(--muted);font:inherit;font-size:.74rem}.revoke-all:hover:not(:disabled){color:var(--critical)}
50
- `});var ss={};pr(ss,{openManagedShareDialog:()=>Np});function Np(r,e="",t=null){return Je("managed-share-dialog",{team:r,initialId:e,session:t})}var is,os=y(()=>{"use strict";S();lr();_t();Q();Qa();is=class extends H{static styles=[...H.styles,k(el)];static properties={team:{attribute:!1},session:{attribute:!1},initialId:{attribute:!1},selectedId:{state:!0},links:{state:!0},dependencies:{state:!0},security:{state:!0},busy:{state:!0},message:{state:!0}};constructor(){super(),this.team=null,this.initialId="",this.selectedId="",this.links=[],this.dependencies=!1,this.security=!1,this.busy=!0,this.message="",this.urls=new Map}beforeOpen(){this.load(this.initialId)}select(e){let t=this.links.find(i=>i.id===e);this.selectedId=t?.id??"",this.dependencies=t?.permissions.dependencies===!0,this.security=t?.permissions.security===!0,this.message=""}async load(e=this.selectedId){this.busy=!0;try{let t=await Ya(this.team.id);return this._settled?void 0:(this.links=t,this.select(e),!0)}catch(t){return this.message=t.message,!1}finally{this.busy=!1}}async change(e=!1,t=!1){if(!this.busy){this.busy=!0,this.message="";try{let i=await Xa(this.team.id,this.session?.csrfToken,{id:t?void 0:this.selectedId||void 0,revoke:e,dependencies:this.dependencies,security:this.security});if(C.invalidate(["links","history"]),this._settled)return;i.path&&(this.urls.set(i.id,new URL(i.path,location.origin).href),this.links=[{id:i.id,createdAt:Date.now(),createdBy:this.session?.login??"",permissions:{dependencies:this.dependencies,security:this.security}},...this.links],this.selectedId=i.id),e&&(t?this.urls.clear():this.urls.delete(this.selectedId)),await this.load(e?"":i.id??this.selectedId)&&(this.message=e?t?"All public links revoked.":"Link revoked.":i.path?"Link created.":"Permissions saved. The link URL is unchanged.")}catch(i){this.message=i.message}finally{this.busy=!1}}}async copy(){try{await navigator.clipboard.writeText(this.urls.get(this.selectedId)),this.message="Link copied."}catch{this.message="Select the link and copy it."}}render(){let e=this.urls.get(this.selectedId);return c`<dialog @close="${this._onClose}"><header><h3>Share ${this.team?.name}</h3></header><p class="nwd-intro">Anyone with this link can read this workspace’s published reports, comments, triage, and available source files without signing in.<br>New published reports will also be included.</p><label class="share-field">Public links <select class="nwd-input" ?disabled="${this.busy}" @change="${t=>this.select(t.target.value)}"><option value="" ?selected="${!this.selectedId}">Create a new link</option>${this.links.map(t=>c`<option value="${t.id}" ?selected="${this.selectedId===t.id}">${new Date(t.createdAt).toLocaleString()} · ${t.createdBy} · ${t.id.slice(0,8)}</option>`)}</select></label><fieldset ?disabled="${this.busy}"><legend>Include in this link</legend><label><input type="checkbox" .checked="${this.security}" @change="${t=>{this.security=t.target.checked}}"> Security findings and advisories</label> <label><input type="checkbox" .checked="${this.dependencies}" @change="${t=>{this.dependencies=t.target.checked}}"> Findings in dependencies</label></fieldset><p class="nwd-note">Both options are off for new links.<br>Existing links keep their URL when permissions change.</p>${e?c`<label class="share-field">Public link<input class="nwd-input" readonly="readonly" .value="${e}" @focus="${t=>t.target.select()}"></label>`:h} ${this.message?c`<p class="nwd-note" role="status">${this.message}</p>`:h}<footer class="nwd-actions">${this.selectedId?c`<button class="danger" ?disabled="${this.busy}" @click="${()=>this.change(!0)}">Revoke link</button>`:h} <span class="nwd-spacer"></span> ${e?c`<button @click="${()=>this.copy()}">Copy link</button>`:h} <button class="primary" ?disabled="${this.busy}" @click="${()=>this.change()}">${this.selectedId?"Save changes":"Create public link"}</button> <button @click="${()=>this._finish(null)}">Close</button></footer>${this.links.length>0?c`<button class="revoke-all" ?disabled="${this.busy}" @click="${()=>this.change(!0,!0)}">Revoke all links for this workspace</button>`:h}</dialog>`}};customElements.define("managed-share-dialog",is)});async function ls(r,e,t,i=null){let s=`/api/teams/${encodeURIComponent(r)}/issues`,o,n;try{o=await $(i?s:`${s}?${new URLSearchParams(e)}`,{method:i?"POST":"GET",credentials:"same-origin",headers:{accept:"application/json",...i?{"content-type":"application/json","x-csrf-token":t}:{}},...i?{body:JSON.stringify({...e,...i})}:{}}),n=await o.json()}catch{throw new Error(i?"github-create-uncertain":"github-unavailable")}if(!o.ok){let a=typeof n?.error=="string"&&n.error?n.error:null;throw new Error(i&&o.status>=500&&!Gp.has(a)?"github-create-uncertain":a??(i?"github-create-uncertain":"github-unavailable"))}return n}var Gp,rl=y(()=>{"use strict";z();Gp=new Set(["github-unavailable","unavailable","shutting-down","github-create-failed"])});function sl(r,{sourceUrl:e,evidence:t="",showRevalidation:i=!0}={}){let s=[],o=new Map,n=(p,m,f)=>{if(!f?.trim())return;let g=o.get(p)??{id:p,label:m,parts:[]};g.parts.includes(f.trim())||g.parts.push(f.trim()),o.set(p,g)},a=gt(r);r.file&&s.push(`File: ${e?`[${a}](${e})`:a}`);let l=null;for(let p of vi(Vt(r.description,r))){if(p.label!==null){let m=il(p.label);l=["description","details","summary"].includes(m)?null:{id:Wp.get(m)??m,label:p.label}}l?n(l.id,l.label,p.body):s.push(p.label?`**${p.label}:** ${p.body}`:p.body)}r.confidence!=null&&s.push(`Confidence: ${r.confidence}/10`);for(let[p,m]of dr){if(p.startsWith("revalidate")&&!i){o.delete(p);continue}let f=p==="evidence"?t.replace(/^\*\*Evidence:\*\*\n/u,""):Vt(r[p],r);n(p,m,f)}let d=[...dr.map(([p])=>o.get(p)).filter(Boolean),...[...o.values()].filter(p=>!dr.some(([m])=>m===p.id))],u={body:s.join(`
48
+ `)}var Id,zd,Ud,Vo=w(()=>{Y();jr();Me();Uo();Zr();Id=new Set(["technical findings detail","technical findings","detailed findings","findings detail","findings"]);zd=/^(?:summary of findings|deferred|methodolog|executive|conclusion|attack surface|coverage|discoveries|scope|table of contents|contents|appendix|recommendation|remediation)/u;Ud=new Set([...Kr,"severity","summary","files","poc","poc status","line","lines","detailed report","proof of concept","evidence","variant of","pattern","status","id","title"])});function qe(r){return Array.isArray(r?.findings)?r.findings:Array.isArray(r?.groups)?r.groups:null}function Go(r){let e;try{let t=JSON.parse(r);if(qe(t)){for(let i of qd(qe(t)))j(i);return{data:t,format:"json",reason:null}}return{data:null,format:null,reason:"JSON, but not a report: no findings array"}}catch(t){e=t}for(let[t,i]of Hd){let s=i(r);if(s)return{data:s,format:t,reason:null}}return{data:null,format:null,reason:`Not JSON, and not a recognized markdown format. (JSON error: ${e.message})`}}function qd(r){return r.flat().filter(e=>e&&typeof e=="object")}var Hd,ht=w(()=>{uo();Io();Po();Vo();Me();Fr();jt();Hd=[["deepview-md",Mo],["deepsec",po],["piolium",Ho],["claude-security",No]]});function Vd(r){C.setSession(r)}function Gd(r){return C.setReportCatalog(r)}function Kd(){C.reset()}var ei,C,ae=w(()=>{"use strict";ei=class{constructor(e=()=>{}){this.resources=new Map,this.session=null,this.teamCatalog=null,this.reportCatalog=null,this.bundleCatalog=null,this.generation=0,this.sessionController=new AbortController,this.notify=e}setSession(e){(this.session?.id!==e?.id||this.session?.role!==e?.role)&&this.reset(),this.session=e}reset(){this.generation++,this.sessionController.abort(),this.sessionController=new AbortController,this.invalidate(),this.session=null,this.teamCatalog=null,this.reportCatalog=null,this.bundleCatalog=null}setReportCatalog(e){let t=new Set,i=new Map(e.map(p=>[p.id,JSON.stringify([p.cacheKey??null,p.reports.map(m=>[m.id,m.cacheKey??null]).toSorted(),(p.bundles??[]).map(m=>[m.id,m.filename,m.repoFullName,m.repoDirectory??""]).toSorted()])]));for(let p of new Set([...this.teamCatalog?.keys()??[],...i.keys()]))this.teamCatalog?.get(p)!==i.get(p)&&t.add(`team:${p}`);for(let p of this.resources.keys()){let m="reports:content:team:";if(p.startsWith(m)){let f=p.slice(m.length);(!i.has(f)||this.teamCatalog?.get(f)!==i.get(f))&&this.invalidate([p])}}this.teamCatalog=i;let s=new Map;for(let p of e)for(let m of p.reports){let f=s.get(m.id)??[];f.push(JSON.stringify([p.id,m.cacheKey??null])),s.set(m.id,f)}let o=new Map([...s].map(([p,m])=>[p,JSON.stringify(m.toSorted())])),n=this.reportCatalog;this.reportCatalog=o;let a=new Set(t);for(let p of new Set([...n?.keys()??[],...o.keys()]))n?.get(p)!==o.get(p)&&a.add(p);for(let p of this.resources.keys()){if(!p.startsWith("reports:content:")||p.startsWith("reports:content:team:"))continue;let m=p.slice(16);(!o.has(m)||a.has(m))&&(this.invalidate([p]),a.add(m))}let l=new Map;for(let p of e)for(let m of p.bundles??[]){let f=l.get(m.id)??[];f.push(JSON.stringify([p.id,p.cacheKey??null,m.filename,m.repoFullName,m.repoDirectory??""])),l.set(m.id,f)}let d=!1,h=new Map([...l].map(([p,m])=>[p,JSON.stringify(m.toSorted())]));for(let p of new Set([...this.bundleCatalog?.keys()??[],...h.keys()]))this.bundleCatalog?.get(p)!==h.get(p)&&(d=!0,a.add(`bundle:${p}`),this.invalidate([`bundle-metadata:${p}`]));this.bundleCatalog=h;for(let p of this.resources.keys()){if(!p.startsWith("report-sources:")&&!p.startsWith("finding-history:"))continue;let[,m,f]=p.split(":");(m?t.has(`team:${m}`):d||a.has(f))&&this.invalidate([p])}return a}read(e){return this.resources.get(e)?.data}invalidate(e){for(let[t,i]of this.resources)e&&!e.some(s=>t===s||t.startsWith(`${s}:`))||(i.controller?.abort(),this.resources.delete(t))}async mutate(e,t){let i=this.generation,s;try{s=await e()}catch(o){throw i===this.generation&&o?.name!=="AbortError"&&this.notify(`Couldn't save changes: ${o?.message??o}`),o}if(i!==this.generation)throw new DOMException("Managed session changed","AbortError");return this.invalidate(t),s}async load(e,t,i,{signal:s,apply:o=()=>{}}={}){s?.throwIfAborted();let n=this.resources.get(e);if(n||(n={},this.resources.set(e,n)),n.data!==void 0&&o(n.data),!n.pending){let l=n.controller=new AbortController;n.pending=(async()=>{try{let d=await i(l.signal);return l.signal.throwIfAborted(),n.data=d,d}catch(d){throw!l.signal.aborted&&d?.name!=="AbortError"&&this.notify(`Couldn't refresh ${t}: ${d?.message??d}`),d}})().finally(()=>{n.pending=null})}let a=await n.pending;if(s?.throwIfAborted(),this.resources.get(e)!==n)throw new DOMException("Managed data changed","AbortError");return o(a),a}},C=new ei(r=>{document.dispatchEvent(new CustomEvent("managed-notice",{detail:{message:r}}))})});var G,me,Q,mt=w(()=>{G={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},me=r=>(...e)=>({_$litDirective$:r,values:e}),Q=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}});var Ko,fe,Wo,Zo,Ve,Jt,Jo,Yo,Xo,Qo,ge=w(()=>{"use strict";Ko="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",fe='<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>',Wo='<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>',Zo='<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>',Ve='<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>',Jt='<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>',Jo='<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>',Yo='<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>',Xo='<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>',Qo='<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 Jd,tn,sn,rn,Ge,be,Yd,Ke,on,Yt,Xt=w(()=>{J();({I:Jd}=Xs),tn=r=>r,sn=r=>r.strings===void 0,rn=()=>document.createComment(""),Ge=(r,e,t)=>{let i=r._$AA.parentNode,s=e===void 0?r._$AB:e._$AA;if(t===void 0){let o=i.insertBefore(rn(),s),n=i.insertBefore(rn(),s);t=new Jd(o,n,r,r.options)}else{let o=t._$AB.nextSibling,n=t._$AM,a=n!==r;if(a){let l;t._$AQ?.(r),t._$AM=r,t._$AP!==void 0&&(l=r._$AU)!==n._$AU&&t._$AP(l)}if(o!==s||a){let l=t._$AA;for(;l!==o;){let d=tn(l).nextSibling;tn(i).insertBefore(l,s),l=d}}}return t},be=(r,e,t=r)=>(r._$AI(e,t),r),Yd={},Ke=(r,e=Yd)=>r._$AH=e,on=r=>r._$AH,Yt=r=>{r._$AR(),r._$AA.remove()}});var lr,sl=w(()=>{J();mt();Xt();lr=me(class extends Q{constructor(){super(...arguments),this.key=u}render(r,e){return this.key=r,e}update(r,[e,t]){return e!==this.key&&(Ke(r),this.key=e),t}})});var Qi=w(()=>{sl()});var X1,Q1,ev,fl=w(()=>{"use strict";S();X1=document.querySelector("#drop-zone"),Q1=document.querySelector("#report"),ev=document.querySelector("app-sidebar")});function hs(r=document){if(r.querySelector(":modal"))return!0;for(let e of r.querySelectorAll("*"))if(e.shadowRoot&&hs(e.shadowRoot))return!0;return!1}var gl=w(()=>{"use strict"});function yu(){return V||(V=document.createElement("div"),V.id="styled-tooltip",V.setAttribute("popover","manual"),document.body.append(V),V)}function wu(r){typeof r.showPopover=="function"&&(r.matches(":popover-open")&&r.hidePopover(),r.showPopover())}function ku(r,{placement:e="cursor"}={}){e=r.dataset.tooltipPlacement??e;let t=yu(),i=r.dataset.tooltip??"",s=r.dataset.tooltipRepo??"",o=["stasis","sourcemap"].includes(r.dataset.tooltipBundle)?r.dataset.tooltipBundle:"",n=r.dataset.tooltipStats??"",a=r.dataset.tooltipPackage??"",l=r.dataset.tooltipEcosystem??"",d=r.dataset.tooltipVersion??"",h=r.dataset.tooltipFiles??"",p=JSON.stringify([i,s,o,n,a,l,d,h]);if(!i||dr===r&&bl===p)return;if(t.textContent=i,a){let R=document.createElement("div");R.className="tooltip-package";let D=r.querySelector("svg")?.cloneNode(!0);D&&R.append(D);let F=document.createElement("span");F.className="tooltip-package-details";for(let z of[a,d,/^\d+$/u.test(h)?`${h} ${h==="1"?"file":"files"}`:""].filter(Boolean)){let Ss=document.createElement("span");Ss.textContent=z,F.append(Ss)}R.append(F),t.append(R)}if(s){let R=document.createElement("div");R.className="tooltip-repo",R.innerHTML=Yo;let D=document.createElement("span");D.textContent=s,R.append(D),t.append(R)}if(o||n){let R=document.createElement("div");if(R.className="tooltip-bundle",o==="stasis"){let z=document.createElement("img");z.src="./stasis.svg",z.alt="",R.append(z)}else R.innerHTML=fe;let D=document.createElement("span"),F=o==="stasis"?"Stasis":o==="sourcemap"?"Sourcemap":"";D.textContent=[F,n].filter(Boolean).join(" \xB7 "),R.append(D),t.append(R)}wu(t),t.style.left="0px",t.style.top="0px",t.style.transform="none",t.classList.add("visible");let m=_l,f=xl+xu;if(e==="right"||e==="right-start"){let R=r.getBoundingClientRect();m=R.right+$u,f=R.top+(e==="right"?R.height/2:0)}let g=window.innerWidth-t.offsetWidth-cr,y=Math.max(cr,Math.min(m,g));t.style.left=`${Math.round(y)}px`;let v=t.offsetHeight,b=e==="right"?f-v/2:f,k=window.innerHeight-v-cr,A=Math.max(cr,Math.min(b,k));t.style.top=`${Math.round(A)}px`,dr=r,bl=p}function vl(){clearTimeout(pr),pr=null,V&&(V.classList.remove("visible"),typeof V.hidePopover=="function"&&V.matches(":popover-open")&&V.hidePopover()),dr=null}function Su(r,{gate:e,placement:t}={}){e&&!e(r)||(clearTimeout(pr),pr=setTimeout(()=>{ku(r,{placement:t})},_u))}function wl(r,e){for(let t of r.composedPath()){if(t===e)break;if(t.nodeType===1&&Object.hasOwn(t.dataset,"tooltip"))return t}return null}function $l(r,e){!r||yl.has(r)||(yl.add(r),r.addEventListener("mouseover",t=>{let i=wl(t,r);if(!i){vl();return}i!==dr&&Su(i,e)}),r.addEventListener("mouseout",t=>{let i=wl(t,r),s=t.relatedTarget?.closest?.("[data-tooltip]")??null;i&&i===s||vl()}))}var V,dr,bl,pr,_l,xl,_u,xu,$u,cr,yl,kl=w(()=>{"use strict";ge();dr=null,bl="",pr=null,_l=0,xl=0;document.addEventListener("mousemove",r=>{_l=r.clientX,xl=r.clientY},{passive:!0});_u=100,xu=14,$u=8,cr=8;yl=new WeakSet});var Cl,Sl=w(()=>{Cl=`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}}
49
+ `});function Xe(r,e={}){return new Promise(t=>{let i=document.createElement(r);Object.assign(i,e),i.addEventListener("resolve",s=>{i.remove(),t(s.detail)}),document.body.append(i)})}var W,ur=w(()=>{"use strict";S();fl();gl();kl();Sl();W=class extends E{static styles=[x(Cl)];exclusive=!1;firstUpdated(){$l(this.renderRoot),this.beforeOpen();let e=this.renderRoot.querySelector("dialog");if(e){if(this.exclusive&&hs()){this._conflict(new DOMException("Another modal dialog is already open","InvalidStateError"));return}try{e.showModal()}catch(t){this._conflict(t);return}this.focusInitial()}}_conflict(e){this._settled=!0,this.dispatchEvent(new CustomEvent("modal-conflict",{detail:{cause:e}}))}beforeOpen(){}focusInitial(){(this.renderRoot.querySelector("input, textarea")??this.renderRoot.querySelector("button.primary")??this.renderRoot.querySelector("button"))?.focus()}_finish(e){this._settled||(this._settled=!0,this.renderRoot.querySelector("dialog")?.close(),this.dispatchEvent(new CustomEvent("resolve",{detail:e})))}_onClose=()=>this._finish(null)}});async function pe(r,e=null,t={}){let i;try{i=await $(r,{credentials:"same-origin",headers:{accept:"application/json"},...t})}catch{return e}if(i.status===401||i.status===403)return null;if(!i.ok)return e;try{return await i.json()}catch{return e}}async function gv({fallback:r=null}={}){let e;try{let i=Z(),s=await $(i?yr(i):"/api/auth/session",{credentials:"same-origin",headers:{accept:"application/json"}});if(s.status===401||s.status===403)return null;if(!s.ok)return r;e=await s.json()}catch{return r}let t=e?.user;return t===null?null:t===void 0||typeof t.login!="string"?r:{id:t.id,login:t.login,name:typeof t.name=="string"?t.name:null,avatarUrl:typeof t.avatarUrl=="string"?t.avatarUrl:null,role:typeof t.role=="string"?t.role:"none",csrfToken:typeof e.csrfToken=="string"?e.csrfToken:null,...Z()?{publicShare:!0}:{}}}async function bv({fallback:r=[],signal:e,onRevision:t}={}){let i=Z(),s=i?await pe(yr(i),null,{signal:e}):null,o=i?{teams:s?.team?[s.team]:[]}:await pe("/api/teams",{teams:r},{signal:e}),n=o?.teams;return Array.isArray(n)?(t?.(typeof o.revision=="string"?o.revision:null),n.filter(a=>a!=null&&typeof a.id=="string"&&typeof a.name=="string").map(a=>({id:a.id,slug:a.slug,name:a.name,...typeof a.cacheKey=="string"?{cacheKey:a.cacheKey}:{},reports:Array.isArray(a.reports)?a.reports.filter(l=>l!=null&&typeof l.id=="string"&&typeof l.filename=="string").map(l=>({id:l.id,slug:l.slug,filename:l.filename,...l.analyzer===null||typeof l.analyzer=="string"?{analyzer:l.analyzer}:{},repoFullName:typeof l.repoFullName=="string"?l.repoFullName:"",repoDirectory:typeof l.repoDirectory=="string"?l.repoDirectory:"",...typeof l.cacheKey=="string"?{cacheKey:l.cacheKey}:{}})):[],bundles:Array.isArray(a.bundles)?a.bundles.filter(l=>l!=null&&typeof l.id=="string"&&typeof l.filename=="string").map(l=>({id:l.id,slug:l.slug,integrity:l.integrity,byteSize:l.byteSize,repoId:l.repoId,filename:l.filename,kind:l.kind,summary:l.summary??null,summaryRetryAt:Number.isSafeInteger(l.summaryRetryAt)&&l.summaryRetryAt>0?l.summaryRetryAt:null,repoDirectory:typeof l.repoDirectory=="string"?l.repoDirectory:"",repoFullName:typeof l.repoFullName=="string"?l.repoFullName:""})):[]}))):o==null?[]:r}function ms(r){return qe(r?.data)===null||typeof r.repo?.directory!="string"||r.repo.github!==null&&typeof r.repo.github!="string"?null:{data:r.data,repo:r.repo}}async function El(r,{signal:e}={}){return ms(await pe(`/api/reports/${encodeURIComponent(r)}`,null,{signal:e}))}async function Rl(r,{signal:e}={}){let t=[...new Set(r)];if(t.length===0)return[];let i=await pe("/api/reports/query",null,{method:"POST",signal:e,headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({ids:t})});if(!Array.isArray(i?.reports)||i.reports.length!==t.length)return null;let s=new Map;for(let o of i.reports){let n=ms(o);if(!n||!t.includes(o.id)||s.has(o.id))return null;s.set(o.id,n)}return r.map(o=>s.get(o))}async function Al(r,{signal:e}={}){let t=await pe(`/api/teams/${encodeURIComponent(r)}/reports`,null,{signal:e});if(!Array.isArray(t?.reports))return null;let i=[],s=new Set;for(let o of t.reports){let n=ms(o);if(!n||typeof o.id!="string"||typeof o.filename!="string"||s.has(o.id))return null;s.add(o.id),i.push({id:o.id,filename:o.filename,...n})}return i}function Pe(r){return r?`?team=${encodeURIComponent(r)}`:""}async function vv(r,{reportId:e,...t}={}){let i=e==null?"":`?reportId=${encodeURIComponent(e)}`,s=await pe(`/api/teams/${encodeURIComponent(r)}/annotations${i}`,null,t),{reports:o,entries:n,comments:a}=s??{};if(!o||typeof o!="object"||Array.isArray(o)||!n||typeof n!="object"||Array.isArray(n)||!Array.isArray(a)||Object.values(o).some(p=>!Array.isArray(p)||p.some(m=>typeof m!="string"))||a.some(p=>!p||typeof p.findingId!="string"))return null;let l=new Map;for(let[p,m]of a.entries()){let f=m.findingId,g=l.get(f)??[];g.push(p),l.set(f,g)}let d=new Map,h=new Map;return p=>{if(!Object.hasOwn(o,p))return null;if(h.has(p))return h.get(p);let m=JSON.stringify(o[p]),f=d.get(m);if(!f){let g=[...new Set(o[p])],y=g.flatMap(v=>l.get(v)??[]);f={entries:Object.fromEntries(g.filter(v=>Object.hasOwn(n,v)).map(v=>[v,n[v]])),comments:y.toSorted((v,b)=>v-b).map(v=>a[v])},d.set(m,f)}return h.set(p,f),f}}async function yv(r,e,t){let s=(await pe(`/api/reports/${encodeURIComponent(r)}/triage${Pe(e)}`,null,t))?.entries;return s!=null&&typeof s=="object"&&!Array.isArray(s)?s:null}async function wv(r,e){if(Z())return[];let t=await pe(`/api/teams/${encodeURIComponent(r)}/fixes`,null,{signal:e});return Array.isArray(t?.fixes)?t.fixes:null}async function _v(r,e,t){let i=await pe(`/api/reports/${encodeURIComponent(r)}/comments${Pe(e)}`,null,t);return Array.isArray(i?.comments)?i.comments:null}async function xv(r,{findingId:e,body:t,commentId:i=null,version:s},o,n){let a=i==null?"":`/${encodeURIComponent(i)}`;try{let l=await $(`/api/reports/${encodeURIComponent(r)}/comments${a}${Pe(n)}`,{method:i==null?"POST":"PATCH",credentials:"same-origin",headers:{"content-type":"application/json",...o?{"x-csrf-token":o}:{}},body:JSON.stringify(i==null?{findingId:e,body:t}:{body:t,version:s})});return{status:l.status,comment:l.ok?(await l.json()).comment:null}}catch{return{status:0,comment:null}}}async function $v(r,e,t,i,s){try{return(await $(`/api/reports/${encodeURIComponent(r)}/comments/${encodeURIComponent(e)}${Pe(s)}`,{method:"DELETE",credentials:"same-origin",headers:{"content-type":"application/json",...i?{"x-csrf-token":i}:{}},body:JSON.stringify({version:t})})).status}catch{return 0}}async function kv(r,e,t,i){try{return(await $(`/api/reports/${encodeURIComponent(r)}/triage${Pe(i)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...t?{"x-csrf-token":t}:{}},body:JSON.stringify({entries:e})})).status}catch{return 0}}function Sv(r){r&&(location.href=r)}async function Cv(r){if(Z()){location.href="/";return}try{await $("/api/auth/logout",{method:"POST",credentials:"same-origin",headers:r?{"x-csrf-token":r}:{}})}catch{}location.reload()}async function Ml(r){let e=await $(`/api/teams/${encodeURIComponent(r)}/share`,{credentials:"same-origin"});if(!e.ok)throw new Error(`Could not load public links (${e.status})`);return(await e.json()).shares}async function Il(r,e,{id:t,revoke:i=!1,dependencies:s=!1,security:o=!1}={}){let n=t?`/${encodeURIComponent(t)}`:"",a=await $(`/api/teams/${encodeURIComponent(r)}/share${n}`,{method:i?"DELETE":t?"PATCH":"POST",credentials:"same-origin",headers:{"x-csrf-token":e,"content-type":"application/json"},...i?{}:{body:JSON.stringify({dependencies:s,security:o})}});if(!a.ok)throw new Error(`Could not ${i?"revoke":t?"update":"create"} public link (${a.status})`);return a.json()}async function Ev(r,e){let t=await $(`/api/bundles/${encodeURIComponent(r)}/download`,{credentials:"same-origin"});if(!t.ok)throw new Error(`Could not download bundle (${t.status})`);let i=URL.createObjectURL(await t.blob()),s=document.createElement("a");s.href=i,s.download=e,s.click(),setTimeout(()=>URL.revokeObjectURL(i),6e4)}var xt=w(()=>{"use strict";N();$t();ht()});var zl,Ll=w(()=>{zl=`.share-field{display:grid;gap:.35rem;margin-top:.8rem;font-size:.82rem}fieldset{display:grid;gap:.55rem;border:0;margin-top:1rem;font-size:.82rem}legend{margin-bottom:.55rem;font-weight:600}fieldset label{display:flex;align-items:center;gap:.5rem}input[type=checkbox]{accent-color:var(--accent)}.nwd-actions{flex-wrap:wrap}.revoke-all{margin-top:.75rem;border:0;background:none;color:var(--muted);font:inherit;font-size:.74rem}.revoke-all:hover:not(:disabled){color:var(--critical)}
50
+ `});var gs={};fr(gs,{openManagedShareDialog:()=>Ru});function Ru(r,e="",t=null){return Xe("managed-share-dialog",{team:r,initialId:e,session:t})}var fs,bs=w(()=>{"use strict";S();ur();xt();ae();Ll();fs=class extends W{static styles=[...W.styles,x(zl)];static properties={team:{attribute:!1},session:{attribute:!1},initialId:{attribute:!1},selectedId:{state:!0},links:{state:!0},dependencies:{state:!0},security:{state:!0},busy:{state:!0},message:{state:!0}};constructor(){super(),this.team=null,this.initialId="",this.selectedId="",this.links=[],this.dependencies=!1,this.security=!1,this.busy=!0,this.message="",this.urls=new Map}beforeOpen(){this.load(this.initialId)}select(e){let t=this.links.find(i=>i.id===e);this.selectedId=t?.id??"",this.dependencies=t?.permissions.dependencies===!0,this.security=t?.permissions.security===!0,this.message=""}async load(e=this.selectedId){this.busy=!0;try{let t=await Ml(this.team.id);return this._settled?void 0:(this.links=t,this.select(e),!0)}catch(t){return this.message=t.message,!1}finally{this.busy=!1}}async change(e=!1,t=!1){if(!this.busy){this.busy=!0,this.message="";try{let i=await Il(this.team.id,this.session?.csrfToken,{id:t?void 0:this.selectedId||void 0,revoke:e,dependencies:this.dependencies,security:this.security});if(C.invalidate(["links","history"]),this._settled)return;i.path&&(this.urls.set(i.id,new URL(i.path,location.origin).href),this.links=[{id:i.id,createdAt:Date.now(),createdBy:this.session?.login??"",permissions:{dependencies:this.dependencies,security:this.security}},...this.links],this.selectedId=i.id),e&&(t?this.urls.clear():this.urls.delete(this.selectedId)),await this.load(e?"":i.id??this.selectedId)&&(this.message=e?t?"All public links revoked.":"Link revoked.":i.path?"Link created.":"Permissions saved. The link URL is unchanged.")}catch(i){this.message=i.message}finally{this.busy=!1}}}async copy(){try{await navigator.clipboard.writeText(this.urls.get(this.selectedId)),this.message="Link copied."}catch{this.message="Select the link and copy it."}}render(){let e=this.urls.get(this.selectedId);return c`<dialog @close="${this._onClose}"><header><h3>Share ${this.team?.name}</h3></header><p class="nwd-intro ui-hint">Anyone with this link can read this workspace’s published reports, comments, triage, and available source files without signing in.<br>New published reports will also be included.</p><label class="share-field">Public links <select class="nwd-input" ?disabled="${this.busy}" @change="${t=>this.select(t.target.value)}"><option value="" ?selected="${!this.selectedId}">Create a new link</option>${this.links.map(t=>c`<option value="${t.id}" ?selected="${this.selectedId===t.id}">${new Date(t.createdAt).toLocaleString()} · ${t.createdBy} · ${t.id.slice(0,8)}</option>`)}</select></label><fieldset ?disabled="${this.busy}"><legend>Include in this link</legend><label><input type="checkbox" .checked="${this.security}" @change="${t=>{this.security=t.target.checked}}"> Security findings and advisories</label> <label><input type="checkbox" .checked="${this.dependencies}" @change="${t=>{this.dependencies=t.target.checked}}"> Findings in dependencies</label></fieldset><p class="nwd-note ui-hint">Both options are off for new links.<br>Existing links keep their URL when permissions change.</p>${e?c`<label class="share-field">Public link<input class="nwd-input" readonly="readonly" .value="${e}" @focus="${t=>t.target.select()}"></label>`:u} ${this.message?c`<p class="nwd-note" role="status">${this.message}</p>`:u}<footer class="nwd-actions">${this.selectedId?c`<button class="danger" ?disabled="${this.busy}" @click="${()=>this.change(!0)}">Revoke link</button>`:u} <span class="nwd-spacer"></span> ${e?c`<button @click="${()=>this.copy()}">Copy link</button>`:u} <button class="primary" ?disabled="${this.busy}" @click="${()=>this.change()}">${this.selectedId?"Save changes":"Create public link"}</button> <button @click="${()=>this._finish(null)}">Close</button></footer>${this.links.length>0?c`<button class="revoke-all" ?disabled="${this.busy}" @click="${()=>this.change(!0,!0)}">Revoke all links for this workspace</button>`:u}</dialog>`}};customElements.define("managed-share-dialog",fs)});async function ws(r,e,t,i=null){let s=`/api/teams/${encodeURIComponent(r)}/issues`,o,n;try{o=await $(i?s:`${s}?${new URLSearchParams(e)}`,{method:i?"POST":"GET",credentials:"same-origin",headers:{accept:"application/json",...i?{"content-type":"application/json","x-csrf-token":t}:{}},...i?{body:JSON.stringify({...e,...i})}:{}}),n=await o.json()}catch{throw new Error(i?"github-create-uncertain":"github-unavailable")}if(!o.ok){let a=typeof n?.error=="string"&&n.error?n.error:null;throw new Error(i&&o.status>=500&&!Pu.has(a)?"github-create-uncertain":a??(i?"github-create-uncertain":"github-unavailable"))}return n}var Pu,Tl=w(()=>{"use strict";N();Pu=new Set(["github-unavailable","unavailable","shutting-down","github-create-failed"])});function Bl(r,{sourceUrl:e,evidence:t="",showRevalidation:i=!0}={}){let s=[],o=new Map,n=(p,m,f)=>{if(!f?.trim())return;let g=o.get(p)??{id:p,label:m,parts:[]};g.parts.includes(f.trim())||g.parts.push(f.trim()),o.set(p,g)},a=ct(r);r.file&&s.push(`File: ${e?`[${a}](${e})`:a}`);let l=null;for(let p of Br(Dt(r.description,r))){if(p.label!==null){let m=Nl(p.label);l=["description","details","summary"].includes(m)?null:{id:Du.get(m)??m,label:p.label}}l?n(l.id,l.label,p.body):s.push(p.label?`**${p.label}:** ${p.body}`:p.body)}r.confidence!=null&&s.push(`Confidence: ${r.confidence}/10`);for(let[p,m]of mr){if(p.startsWith("revalidate")&&!i){o.delete(p);continue}let f=p==="evidence"?t.replace(/^\*\*Evidence:\*\*\n/u,""):Dt(r[p],r);n(p,m,f)}let d=[...mr.map(([p])=>o.get(p)).filter(Boolean),...[...o.values()].filter(p=>!mr.some(([m])=>m===p.id))],h={body:s.join(`
51
51
 
52
52
  `),sections:d.map(({id:p,label:m,parts:f})=>({id:p,label:m,text:`**${m}:**
53
53
  ${f.join(`
54
54
 
55
- `)}`,selected:!1,start:0,end:0}))};return o.has("impact")&&(u=cs(u,"impact",!0)),u}function ol(r,e){let t=r.body;if(e===t)return r;let i=t.length,s=e.length,o=0;for(;o<i&&o<s&&t[o]===e[o];)o++;for(;i>o&&s>o&&t[i-1]===e[s-1];)i--,s--;let n=e.length-t.length,a=r.sections.map(l=>l.selected?o>=l.start&&i<=l.end?{...l,end:l.end+n}:i<=l.start?{...l,start:l.start+n,end:l.end+n}:o>=l.end?l:{...l,text:t.slice(l.start,l.end),selected:!1,start:0,end:0}:l);return{body:e,sections:a}}function cs(r,e,t){let i=r.sections.find(p=>p.id===e);if(!i||i.selected===t)return r;if(t){let p=!r.body||r.body.endsWith(`
55
+ `)}`,selected:!1,start:0,end:0}))};return o.has("impact")&&(h=_s(h,"impact",!0)),h}function Pl(r,e){let t=r.body;if(e===t)return r;let i=t.length,s=e.length,o=0;for(;o<i&&o<s&&t[o]===e[o];)o++;for(;i>o&&s>o&&t[i-1]===e[s-1];)i--,s--;let n=e.length-t.length,a=r.sections.map(l=>l.selected?o>=l.start&&i<=l.end?{...l,end:l.end+n}:i<=l.start?{...l,start:l.start+n,end:l.end+n}:o>=l.end?l:{...l,text:t.slice(l.start,l.end),selected:!1,start:0,end:0}:l);return{body:e,sections:a}}function _s(r,e,t){let i=r.sections.find(p=>p.id===e);if(!i||i.selected===t)return r;if(t){let p=!r.body||r.body.endsWith(`
56
56
 
57
57
  `)?"":r.body.endsWith(`
58
58
  `)?`
59
59
  `:`
60
60
 
61
- `,m=r.body+p+i.text,f=r.body.length+p.length;return{body:m,sections:r.sections.map(g=>g===i?{...g,selected:t,separator:p,start:f,end:m.length}:g)}}let s=r.body.slice(i.start,i.end),o=i.separator??"",n=i.start-o.length,l=r.body.slice(n,i.start)===o&&!r.sections.some(p=>p!==i&&p.selected&&p.start<i.start&&p.end>n)?n:i.start,d=r.body.slice(0,l)+r.body.slice(i.end),u=l-i.end;return{body:d,sections:r.sections.map(p=>p===i?{...p,text:s,selected:t,start:0,end:0}:p.selected&&p.start>=i.end?{...p,start:p.start+u,end:p.end+u}:p)}}var dr,il,Wp,nl=y(()=>{"use strict";tr();dr=[["impact","Impact"],["evidence","Evidence"],["reproduction","Reproduction"],["recommendation","Recommendation"],["confidenceReason","Confidence reason"],["revalidateVerdict","Revalidation verdict"],["revalidateRecommendation","Revalidation recommendation"]],il=r=>r.toLowerCase().replaceAll(/[^\p{L}\p{N}]/gu,""),Wp=new Map([...dr.map(([r,e])=>[il(e),r]),["reproductionsteps","reproduction"],["recommendedfix","recommendation"]])});var ll,al=y(()=>{ll=`dialog{max-width:1040px;width:min(1040px,calc(100vw - 32px));margin-top:2rem;max-height:calc(100dvh - 4rem);overflow:hidden}dialog[open]{display:flex;flex-direction:column}header,.nwd-actions{flex-shrink:0}.dialog-content{min-height:0;overflow:auto;scrollbar-gutter:stable;padding:3px}.nwd-intro{overflow-wrap:anywhere}label{display:flex;flex-direction:column;gap:6px;margin:12px 0}textarea{min-height:clamp(240px,45dvh,540px);resize:vertical;line-height:1.55}.description-heading{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;margin:16px 0 6px}.description-heading label{margin:0}.description-sections{display:flex;flex:1;flex-wrap:wrap;justify-content:flex-end;gap:6px}.description-sections label{flex-direction:row;align-items:center;font-size:.8rem;line-height:1.3;cursor:default;padding:5px 8px;border:1px solid var(--border);border-radius:6px;color:var(--muted);background:var(--surface)}.description-sections label:has(input:checked){color:var(--text);border-color:color-mix(in srgb,var(--accent) 65%,var(--border));background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.description-sections label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.description-sections label:has(input:disabled){opacity:.55}.description-sections input{accent-color:var(--accent);flex-shrink:0}.description-help{margin:0 0 8px}.nwd-actions{flex-wrap:wrap}.nwd-actions a{font-size:.8rem}@media(width<=600px){dialog{margin-top:1rem;max-height:calc(100dvh - 2rem)}.description-sections{flex-basis:100%;justify-content:flex-start}}a{color:var(--accent)}.created-issue{padding:16px;border:1px solid var(--border);border-radius:8px}.issue-heading{display:flex;align-items:center;gap:8px;margin-bottom:12px}.issue-status{padding:3px 10px;border-radius:20px;background:#238636;color:#fff;font-size:.8rem}.issue-status.closed{background:#8250df}.issue-status.not_planned,.issue-status.duplicate,.issue-status.unknown{background:#656d76}.issue-number{color:var(--muted)}h4{font-size:1.15rem;line-height:1.4;overflow-wrap:anywhere}.issue-description{margin-top:16px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:40vh;overflow:auto;line-height:1.5;font-size:.9rem}.issue-labels{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.issue-labels span{border:1px solid var(--border);border-radius:12px;padding:2px 8px;font-size:.75rem}.para+.para,.md-list{margin-top:.75em}.md-list{padding-left:1.5em}.inline-code,.code-block{font-family:monospace;background:var(--bg, var(--surface));border-radius:4px}.inline-code{padding:1px 4px}.code-block{white-space:pre;overflow:auto;padding:10px;margin:10px 0}
62
- `});var cl={};pr(cl,{openManagedIssueDialog:()=>Zp});function Zp(r){return Je("managed-issue-dialog",r)}var ds,ps,dl=y(()=>{"use strict";S();rl();lr();nl();al();ds={"github-unavailable":"GitHub could not be reached. Try checking again.","github-issue-forbidden":"GitHub did not permit issue creation. Check your repository access and authorization.","github-create-uncertain":"GitHub may have created this issue. Check the repository before trying again.","github-create-failed":"GitHub could not create the issue. Check the title and description before trying again.",unauthenticated:"Your session expired. Sign in again before creating an issue.","workspace-changed":"Your workspace access changed. Reopen the finding before creating an issue.","bad-issue-repository":"The finding\u2019s repository changed. Reopen the finding before creating an issue.","no-finding":"This finding is no longer available in this workspace."},ps=class extends H{static styles=[...H.styles,k(ll)];static properties={teamId:{attribute:!1},context:{attribute:!1},session:{attribute:!1},formUrl:{attribute:!1},title:{state:!0},body:{state:!0},prepared:{state:!0},busy:{state:!0},creating:{state:!0},message:{state:!0},uncertain:{state:!0},createdUrl:{state:!0},createdIssue:{state:!0},detailsUnavailable:{state:!0},sections:{state:!0}};constructor(){super(),this.title="",this.body="",this.prepared=null,this.busy=!1,this.creating=!1,this.message="",this.uncertain=!1,this.createdUrl="",this.createdIssue=null,this.detailsUnavailable=!1,this.sections=[]}beforeOpen(){this.finding&&Object.assign(this,sl(this.finding,this.draftOptions)),this.check(!0)}editBody(e){Object.assign(this,ol(this,e))}toggleSection(e,t){Object.assign(this,cs(this,e,t))}current(){return!this._settled&&this.isCurrent()}fallbackUrl(){let e=new URL(this.formUrl);return e.searchParams.set("title",this.title),e.searchParams.set("body",this.body),this.prepared?.labels&&e.searchParams.set("labels",this.prepared.labels.join(",")),e.href}async check(e=!1){if(!(this.busy||!this.current())){this.busy=!0,this.message="";try{let t=await ls(this.teamId,this.context,this.session.csrfToken);if(!this.current())return;this.prepared=t,this.uncertain=!1,t.mode==="existing"&&window.location.assign(t.url),e&&t.mode==="form"&&window.location.assign(this.fallbackUrl())}catch(t){!this.uncertain&&!["pending","created-unavailable"].includes(this.prepared?.mode)&&(this.prepared=null),this.message=ds[t.message]??"Unable to check this issue. Please retry."}finally{this.busy=!1}}}async create(){if(!(this.busy||this.uncertain||this.createdUrl||this.prepared?.mode!=="api")){if(!this.current()){this.message=ds["workspace-changed"],this.prepared=null;return}this.busy=!0,this.creating=!0,this.message="";try{let e=await ls(this.teamId,this.context,this.session.csrfToken,{title:this.title,body:this.body});if(!this.current())return;e.mode==="existing"?window.location.assign(e.url):e.url?(this.createdUrl=e.url,this.createdIssue=e.issue,this.detailsUnavailable=e.detailsUnavailable===!0):this.prepared=e}catch(e){e.message==="github-authorization-required"?this.prepared={mode:"authorize",authorizationPath:"/api/oauth/github/issues/login"}:(this.uncertain=e.message==="github-create-uncertain",["workspace-changed","bad-issue-repository","no-team","no-report","no-finding","unauthenticated","forbidden"].includes(e.message)&&(this.prepared=null),this.message=ds[e.message]??"Could not create this issue. Check the title, description, and repository access.")}finally{this.busy=!1,this.creating=!1}}}render(){let e=this.createdIssue,t=this.prepared,i=t?.mode==="created-unavailable",s=this.createdUrl||i,o=this.uncertain||t?.mode==="pending",n=this.creating||o,a=!this.busy&&!o&&t?.mode==="form";return c`<dialog aria-labelledby="issue-dialog-title" @close="${this._onClose}" @cancel="${l=>{this.creating&&l.preventDefault()}}"><header><h3 id="issue-dialog-title">${s?"Issue created":"Create a GitHub issue"}</h3></header><div class="dialog-content"><p class="nwd-intro">${s?"Created":"Create"} in <strong>${this.context?.repository}</strong> as <strong>@${this.session?.login}</strong>.</p>${this.createdUrl?c`<section class="created-issue" aria-label="Created GitHub issue"><div class="issue-heading"><span class="${`issue-status ${e?.status??"open"} ${e?.stateReason??""}`}">${e?.status==="closed"?e.stateReason==="not_planned"?"Not planned":e.stateReason==="duplicate"?"Duplicate":e.stateReason==="completed"?"Completed":"Closed":"Open"}</span> <span class="issue-number">${e?.number?`#${e.number}`:""}</span></div><h4><a href="${this.createdUrl}" target="_blank" rel="noopener">${e?.title??this.title}</a></h4><p class="nwd-note">Opened by @${e?.author??this.session?.login}</p>${e?.labels?.length?c`<div class="issue-labels">${e.labels.map(l=>c`<span>${l}</span>`)}</div>`:h}<div class="issue-description">${this.renderBody?this.renderBody(e?.description??this.body):e?.description??this.body}</div><p class="nwd-note">Linked permanently to this finding. The Issue button will open this issue next time.</p>${this.detailsUnavailable?c`<p class="nwd-note">GitHub’s latest details could not be loaded. The issue was created and its link is saved.</p>`:h}</section>`:i?c`<p role="status">The issue was created and linked permanently to this finding. Its details cannot be shown because workspace access could not be confirmed. Check its status again once workspace access is available.</p>`:c`<label>Title<input class="nwd-input" maxlength="256" .value="${this.title}" ?disabled="${n}" @input="${l=>{this.title=l.target.value}}"></label><div class="description-heading"><label for="issue-description">Description</label> ${this.sections.length>0?c`<div class="description-sections" role="group" aria-label="Include in description">${this.sections.map(l=>c`<label><input type="checkbox" .checked="${l.selected}" ?disabled="${n}" @change="${d=>this.toggleSection(l.id,d.target.checked)}">${l.label}</label>`)}</div>`:h}</div><p id="description-help" class="nwd-note description-help">${this.sections.length>0?"Add or remove sections above. Your edits are kept when toggling them.":"Edit the description before creating the issue."}</p><textarea id="issue-description" class="nwd-input" maxlength="65536" .value="${this.body}" aria-describedby="description-help" ?disabled="${n}" @input="${l=>this.editBody(l.target.value)}"></textarea> ${t?.labels?.length?c`<p class="nwd-note">Labels: ${t.labels.join(", ")}</p>`:h} ${t?.mode==="permissions"?c`<p>Ask a repository owner to approve the app’s Issues read and write permission. ${t.authorizationPath?c`<a href="${t.authorizationPath}" target="_blank" rel="noopener">Review repository permissions</a>`:h}</p>`:h} ${t?.mode==="authorize"?c`<p><a href="${t.authorizationPath}" target="_blank" rel="noopener">Authorize GitHub</a>, then check authorization here.</p>`:h} ${t?.mode==="pending"?c`<p role="status">An issue is being created, or its creation could not be confirmed. Check its status before continuing; another issue will not be created.</p>`:h} ${t?.mode==="unavailable"?c`<p role="status">This finding already has a managed issue in a repository outside this workspace.</p>`:h}`} ${!this.createdUrl&&this.message?c`<p class="nwd-note" role="status">${this.message}</p>`:h} ${!this.createdUrl&&this.busy?c`<p role="status">${this.creating?"Creating issue\u2026":"Checking repository access\u2026"}</p>`:h}</div><footer class="nwd-actions">${this.createdUrl?c`<a href="${this.createdUrl}" target="_blank" rel="noopener">Open issue on GitHub</a>`:!this.busy&&o?c`<a href="${t?.repositoryUrl??`https://github.com/${this.context?.repository}/issues`}" target="_blank" rel="noopener">Check repository issues</a>`:a?c`<a href="${this.fallbackUrl()}" target="_blank" rel="noopener">Use GitHub form</a>`:h} <span class="nwd-spacer"></span> ${!this.createdUrl&&t?.mode!=="unavailable"?t?.mode==="api"&&!this.uncertain?c`<button class="primary" ?disabled="${this.busy||!this.title.trim()}" @click="${this.create}">Create issue</button>`:c`<button ?disabled="${this.busy}" @click="${()=>this.check()}">${o||i?"Check issue status":"Check authorization"}</button>`:h} <button ?disabled="${this.creating}" @click="${()=>this._finish(null)}">${s?"Close":"Cancel"}</button></footer></dialog>`}};customElements.define("managed-issue-dialog",ps)});function pl(r,e){return e==="triage"?Yp[r?.triage]??"Untriaged":e==="flagged"?r?.flagged?"Yes":"No":r?.[e]||"None"}function ul(r,e){return Object.entries(Jp).flatMap(([t,i])=>{let s=pl(r,t);if(e===void 0)return r?.[t]===void 0?[]:[{label:i,after:s}];let o=pl(e,t);return o===s?[]:[{label:i,before:o,after:s}]})}var Jp,Yp,hl=y(()=>{"use strict";Jp={triage:"Status",color:"Label",flagged:"Flagged",fix:"Fix",comment:"Comment"},Yp={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted"}});function ml(r,e){return r?ir(r,c`<span class="managed-comment-avatar" aria-hidden="true"><span>${(e?.[0]??"?").toUpperCase()}</span> ${q()?h:c`<img alt="" src="${`/api/avatar/${encodeURIComponent(r)}`}" loading="lazy" @error="${t=>{t.currentTarget.hidden=!0}}">`}</span>`):h}var fl=y(()=>{"use strict";$t();S();Ui()});var bl,gl=y(()=>{bl=`.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}}
63
- `});var yl,vl=y(()=>{yl=`.detail-action{width:22px;height:22px;display:grid;place-items:center;padding:0;background:transparent;border:0;border-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}}
64
- `});var _l,wl=y(()=>{_l=`dialog{width:min(94vw,720px);max-width:720px;max-height:calc(100dvh - 4rem);margin-block:2rem;padding:0;overflow:hidden;background:rgb(from var(--surface) r g b / 1)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;justify-content:space-between;gap:1rem;padding:1.1rem 1.25rem;border-bottom:1px solid var(--border);flex:none}.history-heading{min-width:0}header h3{display:flex;align-items:center;gap:.55rem;margin:0;line-height:1.5}header svg{flex:none;color:var(--muted)}header .detail-action{flex:none;width:1.75rem;height:1.75rem}.location{margin-top:.4rem;color:var(--muted);font:.76rem/1.5 ui-monospace,monospace;overflow-wrap:anywhere}.history-summary{display:flex;justify-content:space-between;gap:.5rem;flex:none;padding:.75rem 1.25rem .25rem;color:var(--muted);font-size:.72rem}.history-body{min-height:0;overflow:auto;overscroll-behavior:contain;padding:1rem 1.25rem 1.25rem;font-size:.82rem;line-height:1.5}.timeline{list-style:none}.event{position:relative;display:grid;grid-template-columns:2rem minmax(0,1fr);gap:.75rem;padding-bottom:1.5rem}.event:last-child{padding-bottom:0}.event:not(:last-child):before{content:"";position:absolute;top:2.4rem;bottom:.4rem;left:calc(1rem - .5px);width:1px;background:var(--border)}.managed-comment-avatar{width:2rem;height:2rem;font-size:.8rem;background:var(--surface-active)}.event-content{min-width:0}.event-meta{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.15rem .75rem}.event-user{display:flex;flex-wrap:wrap;align-items:baseline;gap:.1rem .45rem;min-width:0;overflow-wrap:anywhere}.event-user strong{font-weight:600}.username{color:var(--muted);font-size:.75rem}time{color:var(--muted);font-size:.7rem;white-space:nowrap}.event-action{margin-top:.1rem;color:var(--muted);font-size:.75rem}.changes{margin-top:.65rem;border:1px solid var(--border);border-radius:7px;overflow:hidden}.change{display:grid;grid-template-columns:4.5rem minmax(0,1fr);align-items:baseline;gap:.65rem;padding:.55rem .7rem}.change+.change{border-top:1px solid var(--border)}dt{color:var(--muted);font-size:.75rem}dd{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:baseline;gap:.65rem}dd.snapshot{grid-template-columns:minmax(0,1fr)}.before,.after{white-space:pre-wrap;overflow-wrap:anywhere}.before,.change-arrow{color:var(--muted)}.after{font-weight:500}.history-state{padding:2rem .75rem;text-align:center;color:var(--muted)}.history-state strong{display:block;margin-bottom:.35rem;color:var(--text);font-weight:500}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media(width<=540px){dialog{margin-block:1rem;max-height:calc(100dvh - 2rem)}header{padding:.85rem}.history-summary{padding-inline:.85rem}.history-body{padding:.85rem}.event{gap:.6rem}.event-meta{flex-direction:column}.change{grid-template-columns:minmax(0,1fr);gap:.3rem;padding:.5rem .6rem}dd{gap:.45rem}}
65
- `});var xl={};pr(xl,{openFindingHistoryDialog:()=>tu});function tu(r){return r.isCurrent()?Je("finding-history-dialog",r):Promise.resolve(null)}var us,$l=y(()=>{"use strict";S();z();Q();lr();hl();fl();gl();vl();wl();us=class extends H{static styles=[...H.styles,k(yl),k(bl),k(_l)];static properties={finding:{attribute:!1},teamId:{attribute:!1},_events:{state:!0},_loading:{state:!0},_error:{state:!0}};constructor(){super(),this._events=[],this._loading=!0,this._error=!1}beforeOpen(){this._load()}async _load(){if(!this.isCurrent()){this._finish(null);return}this._loading=!0,this._error=!1;let{_managedReportId:e,id:t}=this.finding;this._key=`finding-history:${this.teamId??""}:${e}:${t}`,C.invalidate([this._key]);let i=C.load(this._key,"issue history",async s=>{let o=new URLSearchParams({finding:t});this.teamId&&o.set("team",this.teamId);let n=await $(`/api/reports/${encodeURIComponent(e)}/triage/history?${o}`,{credentials:"same-origin",signal:s});if(!n.ok)throw new Error(`History request failed (${n.status})`);let a=await n.json();if(a.finding!==t||!Array.isArray(a.events))throw new Error("Invalid history response");return a.events});this._owner=C.resources.get(this._key),this._signal=this._owner.controller.signal,this._signal.addEventListener("abort",this._onClose,{once:!0});try{let s=await i;if(this._settled||!this.isConnected)return;if(!this.isCurrent()){this._finish(null);return}this._events=s}catch(s){if(this._settled||!this.isConnected)return;s.name==="AbortError"||!this.isCurrent()?this._finish(null):this._error=!0}finally{this._loading=!1}}disconnectedCallback(){this._signal?.removeEventListener("abort",this._onClose),this._owner&&C.resources.get(this._key)===this._owner&&C.invalidate([this._key]),this._events=[],super.disconnectedCallback()}_onKeydown=e=>{e.key==="Escape"&&e.stopPropagation()};_renderEvent(e,t){let i=this._events[t+1],s=ul(e.entry,i?.entry),o=new Date(e.at),n=e.actorLogin?`@${e.actorLogin}`:"";return c`<li class="event">${e.actorId?ml(e.actorId,e.actorName||e.actorLogin):c`<span class="managed-comment-avatar" aria-hidden="true">${(e.actorLogin?.[0]||"?").toUpperCase()}</span>`}<div class="event-content"><div class="event-meta"><div class="event-user"><strong>${e.actorName||n||"Unknown user"}</strong> ${e.actorName&&n?c`<span class="username">${n}</span>`:h}</div><time datetime="${o.toISOString()}" data-tooltip="${o.toLocaleString()}">${o.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}</time></div><p class="event-action">${e.entry===null?"Cleared triage":i?"Updated triage":"Recorded triage state"}</p>${s.length>0?c`<dl class="changes">${s.map(a=>c`<div class="change"><dt>${a.label}</dt><dd class="${a.before===void 0?"snapshot":""}">${a.before===void 0?h:c`<span class="before"><span class="sr-only">Previously: </span>${a.before}</span> <span class="change-arrow" aria-hidden="true">→</span>`} <span class="after"><span class="sr-only">${a.before===void 0?"Recorded: ":"Changed to: "}</span>${a.after}</span></dd></div>`)}</dl>`:h}</div></li>`}render(){let e=this.finding??{};return c`<dialog aria-labelledby="history-title" @close="${this._onClose}" @keydown="${this._onKeydown}"><header><div class="history-heading"><h3 id="history-title"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11a9 9 0 1 1 2.5 7M3 5v6h6M12 7v5l3 2"/></svg>Issue history</h3><p class="location">${e.file}${e.line?`:${e.line}`:""}</p></div><button type="button" class="detail-action" aria-label="Close issue history" @click="${this._onClose}">×</button></header>${!this._loading&&!this._error&&this._events.length>0?c`<div class="history-summary"><span>${this._events.length} ${this._events.length===1?"record":"records"}</span><span>Newest first</span></div>`:h}<div class="history-body" aria-busy="${String(this._loading)}">${this._loading?c`<p class="history-state" role="status">Loading history…</p>`:this._error?c`<div class="history-state" role="alert"><strong>Couldn’t load issue history</strong><p>Close and reopen to try again.</p></div>`:this._events.length===0?c`<div class="history-state" role="status"><strong>No triage changes yet</strong><p>Changes to status, labels, flags, and fixes will appear here.</p></div>`:c`<ol class="timeline">${this._events.map((t,i)=>this._renderEvent(t,i))}</ol>`}</div></dialog>`}};customElements.define("finding-history-dialog",us)});z();S();S();Q();var L=class extends R{static properties={session:{attribute:!1},allowShare:{attribute:!1},_loading:{state:!0}};constructor(){super(),this.session=null,this.allowShare=!1,this.appState=C,this._loading=!1,this._loadRequest=null}get _role(){return this.session?.role??null}get _csrf(){return this.session?.csrfToken??null}get _me(){return this.session?.id??null}disconnectedCallback(){this._loadRequest?.abort(),super.disconnectedCallback()}async _loadCollection(e,t,i,s){this._loadRequest?.abort();let o=new AbortController;this._loadRequest=o,this._loading=!0;try{await this.appState.load(e,t,i,{signal:o.signal,apply:s})}catch(n){!o.signal.aborted&&n?.name!=="AbortError"&&this.appState.read(e)===void 0&&(this._error=String(n?.message??n))}finally{this._loadRequest===o&&(this._loading=!1)}}};function ee(r){return c`<div class="loading-rows" role="status"><span class="sr-only">${r}</span><div aria-hidden="true">${[0,1,2,3].map(()=>c`<div class="loading-row"><span></span><span></span></div>`)}</div></div>`}V();st();var ot=class extends G{constructor(e){if(super(e),this.it=h,e.type!==F.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===h||e==null)return this._t=void 0,this.it=e;if(e===I)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};ot.directiveName="unsafeHTML",ot.resultType=1;var M=ae(ot);ur();mr();ce();var Zs={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="${Fs}"/>`},"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"/>'}},Hl={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"]},Ar=Object.fromEntries(Object.entries(Zs).map(([r,{className:e,mark:t}])=>{let[i,s]=Hl[r],o=r==="codex-security"||r==="deepsec"?` stroke="${s}" stroke-width=".5"`:"";return[r,`<svg class="file-icon ${e}" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path class="bg" fill="${i}"${o} d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/><g fill="${s}">${t}</g></svg>`]})),Mr=Object.fromEntries(Object.entries(Zs).map(([r,{className:e,mark:t}])=>[r,`<span class="report-logo ${e}" aria-hidden="true"><svg viewBox="${r==="default"?"3.5 4 9 9":"4 5 8 8"}" width="14" height="14">${t}</svg></span>`]));ce();S();ce();var ql=[["manage","Overview"],["manage-bundles","Bundles"],["manage-scans","Scans"],["manage-reports","Reports"],["manage-repos","Repositories","admin"],["admin-users","Users","admin"],["manage-teams","Teams","admin"],["manage-import","Import","admin"],["manage-links","Links"],["manage-history","History"]];function O(r,e,t=!1){return c`<nav class="manage-nav" aria-label="Management pages">${ql.filter(([i,,s])=>(s==null||s===e)&&(i!=="manage-links"||t)).map(([i,s])=>c`<button type="button" aria-current="${r===i?"page":h}" @click="${()=>{document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:i},bubbles:!0,composed:!0}))}}">${s}</button>`)}</nav>`}function N(r){if(r==="bundle")return M(le);if(r==="report"||r==="preview")return M(Pe);if(r==="scan")return M(qs);let e={users:"M10.75 4.75a2.75 2.75 0 1 1-5.5 0 2.75 2.75 0 0 1 5.5 0ZM3 14v-1.5A3.5 3.5 0 0 1 6.5 9h3a3.5 3.5 0 0 1 3.5 3.5V14",team:"M8.5 5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM1.5 14v-1.5A3.5 3.5 0 0 1 5 9h2a3.5 3.5 0 0 1 3.5 3.5V14M11 2.75a2.5 2.5 0 0 1 0 4.5m1 2a3 3 0 0 1 2.5 3V14",repo:"M3 12.5V3a1.5 1.5 0 0 1 1.5-1.5H13v13H4.5a1.5 1.5 0 0 1 0-3H13M7 1.5v6l2-1.5 2 1.5v-6",history:"M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5",arrow:"M3 8h10M9 4l4 4-4 4",show:"M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8Zm9 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0",hide:"m2 2 12 12M6 3.75A8 8 0 0 1 8 3.5c4.5 0 7 4.5 7 4.5a12 12 0 0 1-2 2.5M3.5 5A13 13 0 0 0 1 8s2.5 4.5 7 4.5a8 8 0 0 0 3-.6",download:"M8 2v8M5 7l3 3 3-3M2 11v3h12v-3",upload:"M8 11V2m-3 3 3-3 3 3M2 10v4h12v-4"};return c`<svg class="${r==="repo"?"repo-icon":h}" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${e[r]??e.repo}"></path></svg>`}S();S();V();st();Pt();var D=ae(class extends G{constructor(r){if(super(r),r.type!==F.PROPERTY&&r.type!==F.ATTRIBUTE&&r.type!==F.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Xs(r))throw Error("`live` bindings can only contain a single expression")}render(r){return r}update(r,[e]){if(e===I||e===h)return e;let t=r.element,i=r.name;if(r.type===F.PROPERTY){if(e===t[i])return I}else if(r.type===F.BOOLEAN_ATTRIBUTE){if(!!e===t.hasAttribute(i))return I}else if(r.type===F.ATTRIBUTE&&t.getAttribute(i)===e+"")return I;return De(r),e}});var T=class extends R{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=A`: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: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: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: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: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:4px;background:transparent;text-align:left;font-size:.76rem}.option svg{width:.8rem;height:.8rem;opacity:0;color:var(--accent)}.option[aria-selected=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.option[aria-selected=true] svg{opacity:1}.option:disabled{opacity:.45}.option:hover:not(:disabled),.org:hover{background:rgb(from var(--text) r g b / .05)}.pinned{padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid var(--border)}.empty{margin:0;padding:1.3rem .7rem;color:var(--muted);font-size:.76rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(max-width:40rem){.facets{width:8.5rem}}@media(max-width:28rem){.facets{width:7rem}.option{gap:.35rem}}`;constructor(){super(),this.options=[],this.value=null,this.label="Choose",this.placeholder="Choose",this.disabled=!1,this._query="",this._facet=null,this._open=!1,this._menuHeight=null,this._onViewport=()=>this._position()}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._onViewport),window.addEventListener("scroll",this._onViewport,!0)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onViewport),window.removeEventListener("scroll",this._onViewport,!0)}render(){let e=this.options.find(n=>n.value===this.value),t=this.choices(),s=[...t.pinned,...t.sections.flatMap(n=>n.options)].filter(n=>!n.disabled),o=s.find(n=>n.value===this.value)?.value??s[0]?.value;return c`<button type="button" class="trigger" popovertarget="selector-menu" aria-label="${this.label}" aria-haspopup="dialog" aria-expanded="${this._open}" ?disabled="${this.disabled}">${e?this.optionIcon(e):h}<span class="name">${e?.label??this.placeholder}</span>${e?.detail?c`<span class="detail">${e.detail}</span>`:h} <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="${D(this._query)}" @input="${n=>{this._query=n.target.value}}"> <span class="count" role="status">${t.count}${t.count===t.total?"":` / ${t.total}`}</span></div><div class="body">${t.showFacets?c`<div class="facets" role="group" aria-label="${this.facetLabel}"><button type="button" class="org" aria-pressed="${t.activeFacet==null}" @click="${()=>this._filterFacet(null)}"><span class="name">${this.allFacetsLabel}</span><span class="count">${t.total}</span></button> ${t.facets.map(n=>c`<button type="button" class="org" title="${n.name}" aria-pressed="${t.activeFacet===n.value}" @click="${()=>this._filterFacet(n.value)}"><span class="name">${n.name}</span><span class="count">${n.count}</span></button>`)}</div>`:h}<div class="results" id="selector-options" role="listbox" aria-label="${this.optionsLabel}">${t.pinned.length>0?c`<div class="pinned">${t.pinned.map(n=>this._option(n,!1,o))}</div>`:h} ${t.sections.map((n,a)=>c`<div class="group" role="group" aria-labelledby="${n.label?`selector-group-${a}`:h}">${n.label?c`<h3 class="heading" id="${`selector-group-${a}`}">${n.organization?c`<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>`:h}${n.label}</h3>`:h} ${n.options.map(l=>this._option(l,n.organization,o))}</div>`)} ${t.count?h:c`<p class="empty">${this.options.length>0?this.noMatchesLabel:this.emptyLabel}</p>`}</div></div></div>`}optionIcon(e){return e.initials?c`<span class="avatar" aria-hidden="true">${e.initials}</span>`:h}optionTitle(e){return e.label}_option(e,t,i){return c`<button type="button" class="option" role="option" ?data-reset="${e.reset}" ?disabled="${e.disabled}" aria-label="${e.label}" title="${this.optionTitle(e)}" aria-selected="${e.value===this.value}" tabindex="${e.value===i?0:-1}" @click="${()=>this._pick(e.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(e)}<span class="option-copy"><span class="name">${e.displayLabel??(t?e.name:e.label)}</span>${e.secondary?c`<span class="secondary">${e.secondary}</span>`:h}</span>${e.detail?c`<span class="detail">${e.detail}</span>`:h}</button>`}updated(e){this.disabled&&this._open&&this._close(!1),e.has("options")&&(this._menuHeight=null),this._position(),(e.has("_query")||e.has("_facet"))&&(this.renderRoot.querySelector(".results").scrollTop=0)}_beforeToggle(e){this._open=e.newState==="open",delete e.target.dataset.positioned,this._open&&(this._query="",this._facet=null,this._menuHeight=null)}async _toggle(e){e.newState==="open"&&(await this.updateComplete,!(!this._open||!this.isConnected)&&(this._position(),this.renderRoot.querySelector("input").focus({preventScroll:!0})))}_position(){let e=this.renderRoot.querySelector(".menu");if(!e?.matches(":popover-open"))return;let t=this.renderRoot.querySelector(".trigger").getBoundingClientRect(),i=8,s=e.querySelector(".facets")!=null,o=Math.min(Math.max(t.width,s?560:360),window.innerWidth-i*2),n=window.innerHeight-t.bottom-i-4,a=t.top-i-4;e.style.width=`${o}px`,this._menuHeight??=Math.min(480,e.querySelector(".search").offsetHeight+Math.max(e.querySelector(".results").scrollHeight,e.querySelector(".facets")?.scrollHeight??0)+2);let l=this._menuHeight,d=n<l&&a>n;e.style.maxHeight=`${Math.max(0,Math.min(l,d?a:n))}px`,e.style.left=`${Math.max(i,Math.min(t.left,window.innerWidth-o-i))}px`,e.style.top=`${Math.max(i,d?t.top-e.offsetHeight-4:t.bottom+4)}px`,e.dataset.positioned=""}_filterFacet(e){this._facet=e,this.renderRoot.querySelector("input").focus({preventScroll:!0})}_keyDown(e){if(e.stopPropagation(),e.key==="Escape"){e.preventDefault(),this._close();return}let t=this.renderRoot.querySelector("input"),i=this.renderRoot.activeElement,s=[...this.renderRoot.querySelectorAll(".option:not(:disabled)")],o=s.indexOf(i);if(i!==t&&o<0)return;if(e.key==="Enter"&&i===t){e.preventDefault(),(this.renderRoot.querySelector(".option:not([data-reset]):not(:disabled)")??s[0])?.click();return}let n;if(e.key==="ArrowDown")n=Math.min(o+1,s.length-1);else if(e.key==="ArrowUp")n=o-1;else if(i!==t&&e.key==="Home")n=0;else if(i!==t&&e.key==="End")n=s.length-1;else if(i!==t&&e.key.length===1&&e.key!==" "&&!e.ctrlKey&&!e.metaKey&&!e.altKey){e.preventDefault(),this._query+=e.key,t.focus();return}else return;e.preventDefault();for(let[a,l]of s.entries())l.tabIndex=a===n?0:-1;n<0?t.focus():s[n]?.focus()}_pick(e){this.disabled||!this.options.some(t=>t.value===e&&!t.disabled)||(this._close(),this.dispatchEvent(new CustomEvent(this.changeEvent,{detail:{value:e},bubbles:!0,composed:!0})))}_close(e=!0){this.renderRoot.querySelector(".menu").hidePopover(),this._open=!1,e&&this.renderRoot.querySelector(".trigger").focus({preventScroll:!0})}};var Ir=class extends T{get changeEvent(){return"local-item-change"}get searchLabel(){return"Search local files"}get optionsLabel(){return"Local files"}get noMatchesLabel(){return"No matching files."}get emptyLabel(){return"No local files available."}optionTitle(){return h}choices(){let e=this._query.trim().toLocaleLowerCase(),t=this.options.filter(i=>`${i.label} ${i.secondary??""}`.toLocaleLowerCase().includes(e));return{pinned:[],sections:[{options:t}],count:t.length,total:this.options.length,showFacets:!1}}};customElements.define("managed-local-item-selector",Ir);var nt=class{constructor(e,t,i){this.host=e,this.kind=t,this.upload=i,this.source=null,this.hasData=!1,this.open=!1,this.options=[],this.value=null,this.busy=!1,this.loading=!1,this.error="",this.success="",this.generation=0,this.readAbort=null,this.onChange=s=>{if(s?.kind){if(s.kind!==this.kind)return;if(s.value!==this.value){this.refresh();return}}this.readAbort&&!this.readAbort.signal.aborted&&(this.readAbort.abort(),this.error=`The local ${this.kind} changed or the list was refreshed. Select it again before importing.`),this.options=[],this.value=null,this.success="",this.refresh()},this.onBlur=()=>{this.readAbort&&!this.readAbort.signal.aborted&&this.onChange()},this.onVisibilityChange=()=>{globalThis.document?.visibilityState==="hidden"&&this.onBlur()},e.addController(this)}hostConnected(){globalThis.addEventListener("focus",this.onChange),globalThis.addEventListener("blur",this.onBlur),globalThis.addEventListener("storage",this.onChange),globalThis.document?.addEventListener("visibilitychange",this.onVisibilityChange),this.connectSource()}hostUpdated(){this.connectSource()}connectSource(){this.source!==this.host.localImportSource&&(this.unsubscribe?.(),this.abort?.abort(),this.source=this.host.localImportSource,this.unsubscribe=this.source?.subscribe(this.onChange),this.onChange())}hostDisconnected(){++this.generation,this.abort?.abort(),this.unsubscribe?.(),this.source=null,globalThis.removeEventListener("focus",this.onChange),globalThis.removeEventListener("blur",this.onBlur),globalThis.removeEventListener("storage",this.onChange),globalThis.document?.removeEventListener("visibilitychange",this.onVisibilityChange)}async refresh(){let e=++this.generation,t=this.source;this.loading=!0,this.host.requestUpdate();try{let i=t?await t.hasData(this.kind):!1;if(e!==this.generation)return;this.hasData=i;let s=this.open&&!t?.locked?await t?.list(this.kind)??[]:[];if(e!==this.generation)return;this.options=s,s.some(o=>o.value===this.value)||(this.value=null)}catch(i){e===this.generation&&(this.error=String(i?.message??i))}finally{e===this.generation&&(this.loading=!1,this.host.requestUpdate())}}toggle(){this.busy||(this.open=!this.open,this.error="",this.success="",this.options=[],this.value=null,this.refresh())}async unlock(){if(this.busy)return;this.busy=!0,this.error="";let e=this.abort=new AbortController;this.host.requestUpdate();try{await this.source.unlock({signal:e.signal})&&!e.signal.aborted&&await this.refresh()}catch(t){e.signal.aborted||(this.error=String(t?.message??t))}finally{this.busy=!1,this.host.requestUpdate()}}async importSelected(){if(this.busy||this.loading||!this.value||this.source?.locked)return;this.busy=!0,this.error="",this.success="";let e=this.options.find(i=>i.value===this.value)?.label,t=this.abort=new AbortController;this.readAbort=t,this.host.requestUpdate();try{await this.source.importItem(this.kind,this.value,i=>(this.readAbort=null,this.upload(i)),{signal:t.signal}),!t.signal.aborted&&!this.source?.locked&&(this.success=`Imported ${e}.`,this.value=null)}catch(i){t.signal.aborted||(this.error=String(i?.message??i))}finally{this.readAbort===t&&(this.readAbort=null),this.busy=!1,this.host.requestUpdate()}}renderAction(){return this.hasData||this.open?c`<button type="button" class="local-import-toggle" aria-expanded="${this.open}" aria-controls="local-import-panel" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Import</button>`:h}renderPanel(e){if(!this.open)return h;let t=this.source?.locked;return c`<section class="local-import-panel" id="local-import-panel" aria-label="${`Import local ${this.kind}`}"><div class="local-import-copy"><strong>Import local ${this.kind}</strong><p>${t?"Unlock local data with your passkey to choose a file.":"Copy a file from this browser to the managed workspace. The local copy stays on this device."}</p></div><div class="local-import-controls">${t?c`<button type="button" class="local-import-submit" ?disabled="${this.busy}" @click="${()=>this.unlock()}">${this.busy?"Waiting for passkey\u2026":"Unlock with passkey"}</button>`:c`<managed-local-item-selector label="${`Choose local ${this.kind}`}" placeholder="${this.loading?"Loading local files\u2026":`Choose local ${this.kind}\u2026`}" .options="${this.options}" .value="${this.value}" ?disabled="${this.busy||this.loading}" @local-item-change="${i=>{this.value=i.detail.value,this.success="",this.host.requestUpdate()}}"></managed-local-item-selector><button type="button" class="local-import-submit" ?disabled="${e||this.busy||this.loading||!this.value}" @click="${()=>this.importSelected()}">${this.busy?"Importing\u2026":`Import ${this.kind}`}</button>`} <button type="button" class="local-import-close" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Close</button></div>${!t&&!this.loading&&this.options.length===0?c`<p class="local-import-message">No local ${this.kind}s available.</p>`:h} ${this.error?c`<p class="local-import-message error" role="alert">${this.error} <button type="button" ?disabled="${this.busy}" @click="${()=>{this.error="",this.refresh()}}">Retry</button></p>`:h} ${this.success?c`<p class="local-import-message" role="status">${this.success}</p>`:h}</section>`}};z();async function xe(r,e){let t=await $(r,{signal:e,credentials:"same-origin",headers:{accept:"application/json"}});if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function $e(r,e,t){let i={"content-type":"application/json"};return e&&(i["x-csrf-token"]=e),$(r,{method:"POST",credentials:"same-origin",headers:i,body:JSON.stringify(t)})}async function eo(r,e,t){let i=t?{"x-csrf-token":t}:{},s=await $(`/api/admin/${r}/${encodeURIComponent(e)}`,{method:"DELETE",credentials:"same-origin",headers:i});if(!s.ok)throw new Error(`HTTP ${s.status}`)}async function to(r,e,t,i,s,o){let n=new URLSearchParams({page:String(e),limit:"100",kind:t,q:i.trim()});s&&n.set("repo",s),o&&n.set("actor",o);let a=await xe(`/api/admin/history?${n}`,r);if(!Array.isArray(a?.history)||!Number.isSafeInteger(a.total)||a.total<0||!Number.isSafeInteger(a.page)||a.page<1)throw new Error("No history returned");return a}async function ro(r){let e=await xe("/api/admin/users",r);return Array.isArray(e?.users)?e.users:[]}async function io(r,e,t){let i=await $e("/api/admin/set-role",t,{userId:r,role:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function so(r,e,t,i){let s=new URLSearchParams({scope:r});return r==="installed"&&s.set("showAll",String(e)),t&&s.set("refresh","true"),await xe(`/api/admin/repositories?${s}`,i)}async function oo(r,e,t){let i=await $e("/api/admin/repositories/select",t,{repoId:r,selected:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function no(r,e){let t=await $("/api/admin/repositories/add-public",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json","x-csrf-token":e},body:JSON.stringify({repository:r})});if(!t.ok){let i={400:"Enter a repository as owner/repo or a GitHub repository URL.",403:"You do not have permission to add arbitrary public repositories.",404:"No public repository was found at that address.",409:"Choose a public, non-archived repository."};throw new Error(i[t.status]??`GitHub lookup failed (HTTP ${t.status}). Try again.`)}}async function ao(r,e){let t=await xe(`/api/admin/repositories/impact?repoId=${encodeURIComponent(r)}`,e);if(t?.repoId!==r||!Array.isArray(t.reports)||!Array.isArray(t.bundles)||!Number.isSafeInteger(t.triageCount)||t.triageCount<0)throw new Error("Invalid repository data");return t}async function lo(r,e){let t=await $("/api/admin/repositories/connect-app",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json","x-csrf-token":e},body:JSON.stringify({repoId:r})}),i=await t.json();if(!t.ok){let s={"github-app-not-configured":"The GitHub App is not configured on this server.","repo-identity-changed":"The repository has changed on GitHub. Refresh and check its connection.","repo-connection-changed":"The connection or your permissions changed. Refresh and try again.","repo-not-connected":"This repository is no longer connected.",forbidden:"Administrator access is required to connect the GitHub App."};throw new Error(s[i.error]??`Could not connect the GitHub App (HTTP ${t.status}). Try again.`)}if(i.connected===!0)return i;if(i.connected!==!1||typeof i.installUrl!="string"||!/^https:\/\/github\.com\/apps\/[^/?#]+\/installations\/new$/u.test(i.installUrl))throw new Error("Invalid GitHub installation response.");return i}async function co(r,e,t,i){let s=await $e("/api/admin/repositories/remove",i,{repoId:r,fullName:e,acknowledge:!0,deleteTriage:t});if(!s.ok)throw new Error(`HTTP ${s.status}`);return s.json()}async function po(r){return await xe("/api/admin/reports",r)}async function Lr(r,e,t=null,i=""){let s={"content-type":r.type||"application/json","x-report-filename":encodeURIComponent(r.name)};e&&(s["x-csrf-token"]=e),t!=null&&(s["x-repo-id"]=String(t)),i!==""&&(s["x-repo-directory"]=encodeURIComponent(i));let o=await $("/api/admin/reports",{method:"POST",credentials:"same-origin",headers:s,body:r});if(!o.ok){if(o.status===413)throw new Error("too large");if(o.status===403)throw new Error("choose a repository and directory within your team access");let n="";try{let a=await o.json();a?.error==="repo-not-connected"&&typeof a.repo=="string"&&(n=`: ${a.repo} is not connected`)}catch{}throw new Error(`HTTP ${o.status}${n}`)}return o.json()}async function uo(r,e,t){let i=await $e("/api/admin/reports/set-visible",t,{reportId:r,visible:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function ho(r,e,t,i){let s=await $e("/api/admin/reports/set-repo",i,{reportId:r,repoId:e,directory:t});if(!s.ok)throw s.status===409?new Error("this report already defines its repository"):s.status===403?new Error("choose a repository and directory within your team access"):new Error(s.status===400?"invalid repository or directory":`HTTP ${s.status}`);return s.json()}async function mo(r,e){await eo("reports",r,e)}async function zr(r){return await xe("/api/admin/bundles",r)}async function Tr(r,e,t,i=""){let s={"content-type":"application/octet-stream","x-bundle-filename":encodeURIComponent(r.name)};e&&(s["x-csrf-token"]=e),t!=null&&(s["x-repo-id"]=String(t)),i&&(s["x-repo-directory"]=encodeURIComponent(i));let o=await $("/api/admin/bundles",{method:"POST",credentials:"same-origin",headers:s,body:r});if(!o.ok)throw new Error(o.status===413?"too large":o.status===403?"choose a repository and directory within your team access":`HTTP ${o.status}`);return o.json()}async function fo(r,e){await eo("bundles",r,e)}async function go(r,e,t,i){let s=await $e("/api/admin/bundles/set-repo",i,{bundleId:r,repoId:e,directory:t});if(!s.ok)throw new Error(s.status===403?"choose a repository and directory within your team access":s.status===400?"invalid repository or directory":`HTTP ${s.status}`)}async function Or(r){return await xe("/api/admin/teams",r)}async function te(r,e,t){let i=await $e(r,e,t);if(!i.ok)throw new Error(i.status===409?"name already taken":`HTTP ${i.status}`)}function Nr(r,e=!0){let t=document.createElement("input");t.type="file",t.multiple=e,t.addEventListener("change",()=>{r([...t.files])},{once:!0}),t.click()}function Pr(r,e,t){let i=0,s=d=>Array.from(d.dataTransfer?.types??[]).includes("Files"),o=d=>{s(d)&&(d.preventDefault(),i+=1,t(!0))},n=d=>{s(d)&&d.preventDefault()},a=d=>{s(d)&&(i=Math.max(0,i-1),i===0&&t(!1))},l=d=>{s(d)&&(d.preventDefault(),d.stopPropagation(),i=0,t(!1),e([...d.dataTransfer.files]))};return r.addEventListener("dragenter",o),r.addEventListener("dragover",n),r.addEventListener("dragleave",a),r.addEventListener("drop",l),()=>{r.removeEventListener("dragenter",o),r.removeEventListener("dragover",n),r.removeEventListener("dragleave",a),r.removeEventListener("drop",l)}}async function Br(r,e,t,i){if(r._busy||!r._csrf)throw new Error("Wait for the current operation to finish, then try again.");r._busy=!0;try{await r.appState.mutate(()=>t(e),i)}finally{await r._load(),r._busy=!1;let s=r._queue.splice(0);s.length>0&&r._upload(s)}}async function Dr(r,e,t,i){if(e.length!==0&&(r._queue.push(...e),!r._busy)){r._busy=!0,r._error=null;try{for(;r._queue.length>0;){let s=r._queue.shift();await r.appState.mutate(()=>t(s),i)}}catch(s){r._queue=[],r._error=`Upload failed: ${String(s?.message??s)}`}finally{r._busy=!1,await r._load({preserveError:!0})}}}var jr=`.local-import-toggle{flex-shrink:0;margin-block:calc(-.25rem - 1px);margin-left:auto;padding:.25rem .6rem;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--muted);font:inherit;font-size:.75rem;line-height:1.5}.local-import-toggle:hover,.local-import-toggle[aria-expanded=true]{color:var(--text);background:rgb(from var(--text) r g b / .06)}.local-import-panel{display:grid;gap:.8rem;padding:1rem;margin-bottom:1.25rem;border:1px solid var(--border);border-radius:8px;background:rgb(from var(--accent) r g b / .025)}.local-import-copy strong{font-size:.82rem;font-weight:600}.local-import-copy p,.local-import-message{margin:.3rem 0 0;color:var(--muted);font-size:.75rem;line-height:1.5}.local-import-controls{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}managed-local-item-selector{flex:1 1 16rem;min-width:0}.local-import-controls button,.local-import-message button{padding:.35rem .7rem;border:1px solid var(--border);border-radius:5px;background:transparent;color:var(--text);font:inherit;font-size:.75rem;line-height:1.5}.local-import-controls .local-import-submit{border-color:rgb(from var(--accent) r g b / .4);background:rgb(from var(--accent) r g b / .1);color:var(--accent)}.local-import-controls .local-import-close{color:var(--muted)}.local-import-panel button:disabled,.local-import-toggle:disabled{opacity:.5}.local-import-panel button:focus-visible,.local-import-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.local-import-message.error{color:var(--critical)}
66
- `;var P=`:host{display:block;position:relative;padding:0 clamp(1rem,3vw,3rem) 3rem;color:var(--text);container-type:inline-size;font-family:var(--sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);font-size:.875rem;line-height:1.5;--panel:color-mix(in srgb, var(--bg) 50%, var(--surface));--panel-hover:color-mix(in srgb, var(--text) 3%, var(--panel))}*,*:before,*:after{box-sizing:border-box}.wrap{width:100%;max-width:76rem;margin:0 auto}.manage-nav button{flex:0 0 auto;position:relative;min-height:3.7rem;padding:.9rem 0;border:0;border-radius:0;color:var(--muted);background:none;font-size:.8rem;font-weight:500;white-space:nowrap}.manage-nav button:hover,.manage-nav button[aria-current=page]{color:var(--text)}.manage-nav button[aria-current=page]:after{content:"";position:absolute;bottom:0;inset-inline:0;height:2px;background:var(--accent);border-radius:2px}.manage-nav button:focus-visible{outline-offset:-3px}.head{display:flex;align-items:center;flex-wrap:wrap;gap:.7rem;margin:0 0 .5rem}h1,.head h1{margin:0;font-size:1.9rem;font-weight:600;letter-spacing:-.045em;line-height:1.2}.count{display:inline-flex;align-items:center;justify-content:center;min-width:1.6rem;padding:.12rem .5rem;border:1px solid var(--border);border-radius:6px;color:var(--muted);background:var(--surface);font-size:.73rem;font-weight:500;font-variant-numeric:tabular-nums}button,input,select{font:inherit}button,select,input[type=checkbox]{cursor:default}button,a,input,select{-webkit-app-region:no-drag}button,a{transition:background .15s,color .15s,border-color .15s}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button:disabled,select:disabled{opacity:.45}input:not([type=checkbox]),select{min-width:0;min-height:2.25rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:7px;background:var(--bg);color:var(--text);font-size:.8rem}input::placeholder{color:var(--muted)}input[type=checkbox]{accent-color:var(--accent)}.btn,.drop-browse{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:2.25rem;height:auto;padding:.45rem .8rem;border:1px solid var(--border);border-radius:7px;background:var(--surface);color:var(--text);font-size:.8rem;font-weight:500;text-decoration:none;white-space:nowrap}.btn:hover:not(:disabled),.drop-browse:hover:not(:disabled){background:var(--surface-active);border-color:var(--muted)}.btn.primary,.drop-browse{color:var(--bg);background:var(--accent);border-color:var(--accent)}.btn.primary:hover:not(:disabled),.drop-browse:hover:not(:disabled){background:var(--accent);filter:brightness(1.08)}.btn svg,.icon-btn svg{width:1rem;height:1rem}.icon-btn{width:2rem;height:2rem}.avatar{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--bg));border:1px solid color-mix(in srgb,var(--accent) 16%,var(--border))}.breadcrumb{display:flex;align-items:center;flex-basis:100%;gap:.4rem;margin-bottom:.8rem}.breadcrumb-manage{padding:.1rem 0;border:0;background:transparent;color:var(--muted);font-size:.78rem}.breadcrumb-manage:hover{color:var(--text)}.breadcrumb-separator{color:var(--muted)}.msg{margin:1rem 0;padding:1.1rem 1.25rem;border:1px solid var(--border);border-radius:9px;color:var(--muted);font-size:.85rem}.msg.error{color:var(--critical);border-color:color-mix(in srgb,var(--critical) 35%,var(--border))}.empty{padding:3.5rem 1.5rem;border:1px dashed var(--border);border-radius:10px;color:var(--muted);text-align:center}.empty strong{display:block;margin-bottom:.4rem;color:var(--text);font-size:.95rem;font-weight:500}.empty p{margin:0;font-size:.85rem}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@container (max-width: 35rem){.manage-nav{gap:1.2rem;margin-bottom:1.75rem}.manage-nav button{min-height:3.25rem}h1,.head h1{font-size:1.65rem}.intro{margin-bottom:1.5rem}}@media(prefers-reduced-motion:reduce){button,a{transition:none}}.collection-toolbar input{flex:1;max-width:26rem;min-width:10rem}.collection-toolbar select{min-width:10rem}.result-count{min-width:8rem;text-align:right;white-space:nowrap;margin-left:auto;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}@container (max-width: 35rem){.collection-toolbar input{flex-basis:100%;max-width:none}}.manage-nav{display:flex;gap:1.35rem;align-items:stretch;overflow-x:auto;scrollbar-width:thin;border-bottom:1px solid var(--border);margin-bottom:1.5rem;padding:0 .1rem}.intro{margin:0 0 1.25rem;max-width:46rem;color:var(--muted);font-size:.875rem;line-height:1.65}.collection-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-bottom:.85rem}.page-intro{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem 1rem;margin-bottom:1.25rem}.page-intro .intro{margin:0}a{cursor:default}.loading-rows{border:1px solid var(--border);border-radius:10px;overflow:hidden}.loading-row{display:grid;align-content:center;gap:.6rem;min-height:4.25rem;padding:.85rem 1rem}.loading-row+.loading-row{border-top:1px solid var(--border)}.loading-row span{width:40%;height:.65rem;border-radius:3px;background:color-mix(in srgb,var(--muted) 15%,transparent)}.loading-row span+span{width:65%;height:.5rem}.drop-browse{min-width:7rem}
67
- `;var bo=`.home-section{margin-top:1.1rem;margin-bottom:2rem}.section-heading{display:flex;align-items:baseline;gap:1rem;margin-bottom:.85rem}.section-heading h2{margin:0;font-size:.86rem;font-weight:600}.section-heading>span{color:var(--muted);font-size:.75rem}.pages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}.page{display:flex;flex-direction:column;gap:.85rem;padding:1.35rem;border:1px solid var(--border);border-radius:12px;color:var(--text);background:var(--panel);text-align:left;font:inherit}.page:hover{background:var(--panel-hover);border-color:color-mix(in srgb,var(--muted) 60%,var(--border))}.page-top{display:flex;align-items:center;gap:.75rem;width:100%}.page-icon{display:grid;place-items:center;flex-shrink:0;width:2.5rem;height:2.5rem;border:1px solid color-mix(in srgb,var(--accent) 16%,var(--border));border-radius:9px;background:color-mix(in srgb,var(--accent) 7%,var(--panel));color:var(--accent)}.page-bundle .page-icon{color:var(--green);border-color:color-mix(in srgb,var(--green) 18%,var(--border));background:color-mix(in srgb,var(--green) 6%,var(--panel))}.page-scan .page-icon{color:var(--scan-icon-color, var(--yellow));border-color:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 18%,var(--border));background:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 6%,var(--panel))}:host-context(body.theme-light) .page-scan .page-icon{--scan-icon-color: #bf8700}:host-context(body.theme-green) :is(.page-bundle,.page-scan) .page-icon,:host-context(body.theme-pink) :is(.page-bundle,.page-scan) .page-icon{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 16%,var(--border));background:color-mix(in srgb,var(--accent) 7%,var(--panel))}.page-icon svg{width:1.2rem;height:1.2rem}.arrow{display:flex;margin-left:auto;flex-shrink:0;color:var(--muted)}.arrow svg{width:1rem;height:1rem}.page:hover .arrow{color:var(--text)}.page-copy{display:grid;gap:.45rem}.page>.page-copy{margin-inline-start:3.25rem}.page-copy strong,.page-title{font-size:1rem;font-weight:600;letter-spacing:-.015em}.page-copy>span{color:var(--muted);font-size:.8rem;line-height:1.65}.workspace-pages .page{gap:.85rem;padding:1.2rem 1.35rem}.workspace-pages .page-icon{width:2rem;height:2rem;color:var(--muted);background:transparent;border-color:var(--border)}.workspace-pages .page-title{font-size:.9rem}.workspace-pages .page-copy{margin-inline-start:2.75rem}.history-link{display:flex;align-items:center;gap:1rem;width:100%;padding:1.25rem 0;border:0;border-top:1px solid var(--border);text-align:left;color:var(--text);background:transparent}.history-link>.page-icon{color:var(--muted);background:transparent;border-color:var(--border)}.history-link .page-copy strong{font-size:.85rem}.history-cta{display:flex;align-items:center;gap:.6rem;flex-shrink:0;margin-left:auto;color:var(--muted);font-size:.78rem}.history-cta svg{width:1rem;height:1rem}.history-link:hover .history-cta{color:var(--accent)}@container (max-width: 48rem){.pages{grid-template-columns:1fr;gap:.65rem}.page,.workspace-pages .page{gap:.65rem;padding:1.15rem}.page-top .arrow{display:none}.workspace-pages .page-icon{width:2.5rem;height:2.5rem}.workspace-pages .page-copy{margin-inline-start:3.25rem}.page-copy{gap:.2rem}.page-copy strong,.page-title{font-size:.95rem}.section-heading>span{display:none}.history-cta{font-size:0}}
68
- `;var vo=`.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin-bottom:.9rem}.toolbar input{flex:2 1 12rem}.toolbar select{flex:0 1 9rem}.toolbar repository-selector{flex:1 1 12rem}.toolbar user-selector{flex:1.5 1 16rem}.toolbar>*{min-width:0}.toolbar input[type=search],.toolbar select,.toolbar .btn{min-height:2rem;padding:.28rem .5rem;border-radius:5px}.history{overflow-x:auto;border:1px solid var(--border);border-radius:9px;background:var(--panel)}.row,.history-head{display:grid;grid-template-columns:4.7rem minmax(16rem,1fr) minmax(12rem,1fr) 12rem;align-items:center;gap:.85rem;min-width:52rem;padding:.45rem .85rem}.history-head{background:rgb(from var(--text) r g b / .025);color:var(--muted);font-size:.7rem}.row{border-top:1px solid var(--border);min-height:2.35rem}.row:hover{background:var(--panel-hover)}.kind{display:inline-flex;align-items:center;justify-content:center;width:fit-content;padding:.05rem .35rem;border:1px solid var(--border);border-radius:4px;color:var(--muted);font-size:.65rem;text-transform:capitalize}.kind.triage{color:var(--accent);border-color:rgb(from var(--accent) r g b / .25);background:rgb(from var(--accent) r g b / .06)}.kind.upload{color:var(--green);border-color:rgb(from var(--green) r g b / .25);background:rgb(from var(--green) r g b / .06)}.kind.visibility{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .25);background:rgb(from var(--yellow) r g b / .06)}.activity-description,.detail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem}.actor{color:var(--text);font-weight:500}.action,.detail{color:var(--muted)}.history-time{display:flex;align-items:center;gap:.35rem;color:var(--muted);font-size:.7rem;white-space:nowrap;font-variant-numeric:tabular-nums}.history .empty{border:0;margin:0}.pagination{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem;margin-top:1rem;color:var(--muted);font-size:.75rem}.pagination>span:first-child{margin-right:auto}
69
- `;var yo=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:5px;color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.list-head{color:var(--muted);font-size:.7rem;font-weight:500;min-height:2.25rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.users{list-style:none;margin:0;padding:0}.users li+li{border-top:1px solid var(--border)}.who{display:grid;gap:.15rem;min-width:0}.name-text,.login{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login{color:var(--muted);font-size:.75rem}.last-seen time,.last-activity time{color:var(--text)}.activity-link{display:block;min-width:0;padding:.15rem .2rem;border:0;border-radius:4px;color:inherit;background:transparent;text-align:left}.activity-link:hover{color:var(--accent);background:rgb(from var(--accent) r g b / .08)}.you{padding:.05rem .35rem;border-radius:4px;color:var(--accent);background:rgb(from var(--accent) r g b / .1);font-size:.75rem;font-weight:500}.permission-granted{color:var(--accent)}.permission-denied{color:var(--muted)}.no-team{color:var(--muted);font-size:.75rem}.access{display:flex;align-items:center;min-width:0}.role{width:100%;height:auto;font-size:.78rem}.self-note{display:flex;align-items:center;gap:.5rem;margin:1rem 0;color:var(--muted);font-size:.75rem}.users li:hover{background:var(--panel-hover)}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:1.85rem;height:1.85rem;border-radius:50%;overflow:hidden;font-size:.85rem;font-weight:600}.directory{border:1px solid var(--border);border-radius:11px;overflow:hidden;background:var(--panel);overflow-x:auto}.list-head,.users{min-width:49rem}.list-head,.users li{display:grid;grid-template-columns:minmax(11rem,1fr) minmax(14rem,1.2fr) 6.2rem 6.2rem 6.5rem;gap:.7rem;padding:.5rem .85rem;align-items:center}.users li{padding-top:.6rem;padding-bottom:.6rem}.person{display:flex;align-items:center;gap:.65rem;min-width:0}.name{display:flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:500}.last-seen,.last-activity{display:grid;gap:.08rem;color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums}.memberships{display:grid;gap:.1rem;min-width:0}.team-access{display:flex;gap:.2rem .5rem;min-width:0;font-size:.7rem;line-height:1.4;align-items:center;flex-wrap:nowrap}.team-access strong{display:inline-flex;align-items:center;gap:.25rem;color:var(--text);font-weight:500;min-width:0;max-width:8rem}.team-access strong svg{width:.8rem;height:.8rem;flex-shrink:0;color:var(--muted)}.team-access strong span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-perms{display:inline-flex;flex-wrap:nowrap;gap:.45rem;font-size:inherit;flex-shrink:0}
70
- `;var wo=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:5px;color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:2rem;height:2rem;border-radius:50%;overflow:hidden;background:var(--surface-active);color:var(--muted);font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.8rem;font-weight:600;user-select:none}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin:1.5rem 0 1.65rem}.repository-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin-left:auto}.breadcrumb{flex-wrap:wrap}.breadcrumb .breadcrumb-current{margin:0;color:var(--text);font-size:.85rem;font-weight:500}.public-repository-form{padding:1rem;margin:-1rem 0 1.5rem;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.public-repository-form .confirm-field{margin:0}.search{flex:1 1 14rem;max-width:25rem;margin-right:auto}.search input{width:100%}.show-all{display:inline-flex;align-items:center;gap:.5rem;white-space:nowrap;font-size:.78rem}.show-all input{appearance:none;width:2rem;height:1.15rem;margin:0;padding:2px;border:1px solid var(--border);border-radius:1rem;background:var(--surface-active)}.show-all input:before{content:"";display:block;width:.775rem;height:.775rem;border-radius:50%;background:var(--muted)}.show-all input:checked{border-color:var(--accent);background:var(--accent)}.show-all input:checked:before{transform:translate(.85rem);background:var(--bg)}.show-all input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.repository-count{margin:-.8rem 0 .6rem;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}.repository-browser{display:flex;overflow:hidden;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.organization-list{flex:0 0 12rem;padding:.4rem;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.organization{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem;border:0;border-radius:4px;color:var(--text);background:transparent;text-align:left;font-size:.76rem;cursor:default}.organization:hover{background:rgb(from var(--text) r g b / .05)}.organization[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.organization-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organization-count{color:var(--muted);font-size:.7rem;font-variant-numeric:tabular-nums}.repo-results{flex:1;min-width:0}.organization-list,.repo-results{max-height:min(65vh,40rem);overflow:auto;overscroll-behavior:contain}.repo-group+.repo-group{border-top:1px solid var(--border)}.owner-head{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:.6rem;margin:0;padding:.55rem .85rem;color:var(--muted);background:var(--panel);font-size:.8rem;font-weight:500}.owner-icon{display:grid;place-items:center;width:1.6rem;height:1.6rem;border:1px solid var(--border);border-radius:5px;background:var(--surface);text-transform:uppercase;font-size:.75rem}.repos{margin:0;padding:0;list-style:none}.repos li+li{border-top:1px solid var(--border)}button.repo-row{border:0;background:transparent;color:var(--text);cursor:default}button.repo-row:hover{background:var(--surface-active)}button.repo-row:focus-visible{outline-offset:-2px}.btn.connect-app{min-height:1.9rem;padding:.3rem .6rem;font-size:.72rem}.repo-icon{width:1.15rem;height:1.15rem;flex-shrink:0;color:var(--muted)}.repo-meta:before{content:none}.arrow{width:1rem;height:1rem;flex:0 0 auto;color:var(--muted)}.connected{display:inline-flex;align-items:center;gap:.25rem;flex:0 0 auto;color:var(--muted);font-size:.75rem;white-space:nowrap}.connected svg{width:.85rem;height:.85rem}.access-note{display:flex;align-items:center;gap:.85rem;padding:.85rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:8px}.access-note p{flex:1;margin:0;color:var(--muted);font-size:.78rem;line-height:1.5}a.btn{color:var(--text);text-decoration:none;cursor:default}.empty{padding:2.5rem 1rem;text-align:center}.empty strong{display:block;margin-bottom:.4rem;font-size:.9rem;font-weight:500}.empty p{margin:0;color:var(--muted);font-size:.8rem}.loading{min-height:8rem;display:grid;place-items:center;color:var(--muted);font-size:.8rem}.section{margin-top:1.75rem;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--panel)}.section h2{margin:0;padding:1rem 1.25rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025);font-size:.85rem;font-weight:600}.settings-row{display:flex;align-items:center;gap:1rem;padding:1.25rem}.settings-copy{flex:1;min-width:0}.settings-copy strong{font-size:.83rem;font-weight:500}.settings-copy p{margin:.25rem 0 0;color:var(--muted);font-size:.76rem;line-height:1.5}.settings-row+.settings-row{border-top:1px solid var(--border)}.btn.danger,.error{color:var(--critical, #e5534b)}.status-line{display:inline-flex;align-items:center;gap:.35rem;color:var(--muted);font-size:.75rem}.status-line.inactive{color:var(--warning, #d19a24)}.data-section{margin-top:1.5rem}.data-section h2{margin:0 0 .5rem;font-size:.85rem;font-weight:500}.data-list{margin:0;padding:0;list-style:none;border:1px solid var(--border);border-radius:8px;overflow:hidden}.data-list li{display:flex;align-items:baseline;gap:.75rem;padding:.85rem 1rem;font-size:.8rem}.data-list li+li{border-top:1px solid var(--border)}.data-list strong{min-width:0;overflow-wrap:anywhere;font-weight:500}.data-list span{margin-left:auto;color:var(--muted);font-size:.75rem;white-space:nowrap}.data-empty{margin:0;color:var(--muted);font-size:.75rem}.dialog-backdrop{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:1rem;background:#000000a6}.dialog{width:min(40rem,100%);max-height:calc(100vh - 3rem);overflow:auto;padding:1.5rem;border:1px solid var(--border);border-radius:12px;background:var(--bg);box-shadow:0 1rem 3rem #00000059}.dialog.small{width:min(28rem,100%)}.dialog h2{margin:0;font-size:1.05rem;font-weight:600;overflow-wrap:anywhere}.dialog-copy{margin:.55rem 0 1rem;color:var(--muted);font-size:.78rem;line-height:1.5}.dialog-data{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin:0 0 1rem}.dialog-data section{min-width:0;padding:.65rem;border:1px solid var(--border);border-radius:7px}.dialog-data h3{margin:0 0 .4rem;font-size:.75rem;font-weight:600}.dialog-data ul{max-height:9rem;overflow:auto;margin:0;padding-left:1rem;color:var(--muted);font-size:.75rem}.dialog-data li{margin:.2rem 0;overflow-wrap:anywhere}.confirm-line{display:flex;align-items:flex-start;gap:.5rem;margin:.7rem 0;color:var(--text);font-size:.76rem;line-height:1.4}.confirm-line input{flex:0 0 auto;margin-top:.15rem;accent-color:var(--accent)}.confirm-line span{min-width:0}.confirm-field{display:grid;gap:.5rem;margin-top:1.1rem;color:var(--text);font-size:.78rem;line-height:1.5;overflow-wrap:anywhere}.confirm-name{width:100%;min-width:0;padding:.45rem .55rem;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font:inherit;font-size:.78rem}.dialog-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;margin-top:1rem}.dialog-actions .danger{color:var(--critical, #e5534b);border-color:rgb(from var(--critical, #e5534b) r g b / .4)}@container (max-width: 35rem){.organization-list{flex-basis:9rem}.intro{margin-left:0}.search{flex-basis:100%;max-width:none}.access-note,.settings-row{flex-wrap:wrap}.access-note p,.settings-copy{flex-basis:100%}.head h1{font-size:1.35rem}.repo-copy{gap:.35rem}.repo-meta{max-width:100%}.dialog-data{grid-template-columns:1fr}}.repo-name{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.83rem;font-weight:500}.repo-row{display:flex;align-items:center;gap:.75rem;width:100%;min-height:2.8rem;padding:.55rem .85rem;text-align:left}.repo-copy{display:flex;flex-direction:row;align-items:center;gap:.85rem;flex:1;min-width:0}.repo-meta{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.72rem;margin-left:auto}@container (max-width: 35rem){.repo-copy{flex-direction:column;align-items:flex-start;gap:.1rem}.repo-meta{margin-left:0}}.data-section .dialog-data section{height:12rem;display:flex;flex-direction:column;align-items:flex-start}.data-section .dialog-data ul{width:100%;min-height:0;max-height:none}.access-action{flex-shrink:0}@container (max-width: 28rem){.repository-browser{flex-direction:column}.organization-list{display:flex;flex:0 0 auto;gap:.25rem;border-right:0;border-bottom:1px solid var(--border)}.organization{flex:0 0 auto;width:auto;max-width:12rem}}
71
- `;var _o=`.report-logo.brand-deepview{--brand-bg:#2563eb;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-claude{--brand-bg:#d97757;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-codex{--brand-bg:#fff;--brand-fg:#000;background:var(--brand-bg)}.report-logo.brand-vercel{--brand-bg:#000;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-piolium{--brand-bg:#fbb829;--brand-fg:#1c1b19;background:var(--brand-bg)}.report-logo .fg{fill:var(--brand-fg)}.report-logo .bg{fill:var(--brand-bg)}.report-logo.brand-codex .bg,.report-logo.brand-vercel .bg{stroke:var(--brand-fg);stroke-width:.5}.dropzone{position:absolute;inset:.6rem;z-index:5;display:grid;place-items:center;border:2px dashed var(--accent);border-radius:10px;background:rgb(from var(--bg) r g b / .94);color:var(--accent);font-weight:600;pointer-events:none}.drop-card{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;padding:.7rem .85rem;border:1px dashed color-mix(in srgb,var(--muted) 35%,var(--border));border-radius:8px;background:var(--panel)}.drop-icon{display:grid;place-items:center;flex-shrink:0;width:1.8rem;height:1.8rem;color:var(--muted)}.drop-icon svg{width:1.1rem;height:1.1rem}.drop-copy{min-width:0;display:flex;align-items:baseline;flex-wrap:wrap;gap:.2rem .6rem}.drop-copy strong{font-size:.8rem;font-weight:500}.drop-copy>span{color:var(--muted);font-size:.75rem}.drop-browse{margin-left:auto;flex-shrink:0}.report-list{overflow-x:auto;border:1px solid var(--border);border-radius:9px;background:var(--panel)}.reports{min-width:47rem;margin:0;padding:0;list-style:none}.report-list-head,.report-main{display:grid;grid-template-columns:1.5rem minmax(12rem,1fr) minmax(7rem,.6fr) 4.1rem 9rem;align-items:center;gap:.7rem;padding:.5rem .85rem}.report-list-head{min-width:47rem;min-height:2.25rem;color:var(--muted);background:rgb(from var(--text) r g b / .025);border-bottom:1px solid var(--border);font-size:.7rem}.report-heading{grid-column:1 / 3}.actions-heading{text-align:right;padding-right:.25rem}.report+.report{border-top:1px solid var(--border)}.report-main{min-height:3.4rem}.report-main:hover{background:var(--panel-hover)}.report-logo{display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:5px;overflow:hidden}.report-logo svg{width:1.1rem;height:1.1rem}.report-copy,.report-meta{display:grid;min-width:0;gap:.15rem}.report-name{color:var(--text);font-size:.8rem;font-weight:500}.report-name,.report-location,.report-meta>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.report-location{color:var(--muted);font-size:.7rem}.report-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums}.report-meta>span:first-child{color:var(--text);opacity:.8;font-size:.72rem}.status{display:inline-flex;align-items:center;gap:.3rem;width:fit-content;padding:.1rem .4rem;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:.65rem}.status:before{content:"";width:.25rem;height:.25rem;border-radius:50%;background:currentcolor}.status.visible{color:var(--green);border-color:rgb(from var(--green) r g b / .2);background:rgb(from var(--green) r g b / .06)}.report-actions{display:flex;justify-content:flex-end;align-items:center;gap:.1rem}.report-actions .action,.action-spacer{display:grid;place-items:center;flex-shrink:0;width:1.7rem;height:1.8rem;padding:.3rem;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted)}.action svg{width:.95rem;height:.95rem}.report-actions .action:hover:not(:disabled),.report-actions .action[aria-expanded=true]{color:var(--text);background:var(--surface-active);border-color:var(--border)}.report-actions .action.danger:hover{color:var(--critical);background:rgb(from var(--critical) r g b / .08)}.preview{height:20rem;border-top:1px solid var(--border);padding:.85rem}.preview pre{height:100%;overflow:auto;margin:0;padding:.85rem;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font:.75rem/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.preview-loading{color:var(--muted);font-size:.8rem}@container (max-width: 35rem){.drop-copy>span{display:none}}
72
- `;var xo=`button,select{font:inherit;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.dropzone{position:absolute;inset:.6rem;z-index:5;display:grid;place-items:center;border:2px dashed var(--accent);border-radius:10px;background:rgb(from var(--bg) r g b / .94);color:var(--accent);font-size:1rem;font-weight:600;pointer-events:none}.upload-copy{display:flex;align-items:center;gap:1rem}.upload-copy>span{color:var(--muted);font-size:.75rem}.upload-controls{display:flex;align-items:end;gap:.65rem}.repo-picker{width:14rem;display:grid;gap:.3rem;min-width:0}.repo-picker-label{color:var(--muted);font-size:.75rem}.repo-select{min-width:0;width:100%;max-width:18rem}.drop-browse{height:2rem;flex-shrink:0;padding:.3rem .75rem;border:1px solid var(--accent);border-radius:5px;color:var(--bg);background:var(--accent);font-size:.75rem;font-weight:600}.drop-browse:hover:not(:disabled){filter:brightness(1.08)}.drop-browse:disabled{opacity:.5}.section-head{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:.75rem;margin-bottom:.9rem}.section-head h2{margin:0;font-size:.85rem;font-weight:600}.summary{min-height:1.5em;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}.unassigned{color:var(--high, #d97732)}.bundles{margin:0;padding:0;list-style:none}.bundle-group-head strong{min-width:0;overflow-wrap:anywhere;font-size:.8rem;font-weight:500}.bundle-group-head span{color:var(--muted);font-size:.75rem}.bundle-row+.bundle-row{border-top:1px solid var(--border)}.bundle-icon svg{width:1rem;height:1rem}.kind{color:var(--muted);padding:.05rem .35rem;border:1px solid var(--border);border-radius:4px;font-size:.65rem}.action{display:grid;place-items:center;width:2rem;height:2rem;padding:.45rem;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--muted);text-decoration:none}.action svg{width:1rem;height:1rem}.action:hover{color:var(--text);border-color:var(--border);background:var(--surface)}.action.danger:hover{color:var(--critical, #e5534b)}.msg{padding:1rem 0;margin:0;color:var(--muted);font-size:.8rem}.msg.error{color:var(--critical, #e5534b)}.drop-icon svg{width:1rem;height:1rem}.bundle-group{overflow:hidden;border:1px solid var(--border);border-radius:10px;background:var(--panel);overflow-x:auto}.bundle-group-head,.bundles{min-width:43rem}.bundle-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,15rem) auto;align-items:center;gap:.85rem;padding:.55rem .85rem}.bundle-location{display:block;min-width:0;grid-column:auto;padding-left:0;color:var(--muted);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;gap:.2rem;grid-column:auto;grid-row:auto}.bundle-group-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .85rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.bundle-groups{display:grid;gap:.85rem}.identity{display:flex;align-items:center;min-width:0;gap:.65rem}.bundle-icon{display:grid;place-items:center;width:1.6rem;height:1.6rem;flex-shrink:0;border:0;border-radius:7px;background:transparent;color:var(--muted)}.who{display:grid;min-width:0;gap:.15rem}.filename{font-size:.8rem;font-weight:500;overflow-wrap:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta{display:flex;flex-wrap:nowrap;align-items:center;gap:.3rem .6rem;color:var(--muted);font-size:.65rem;line-height:1.5;overflow:hidden;white-space:nowrap}.meta>span:last-child{overflow:hidden;text-overflow:ellipsis}.upload-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.65rem;padding:.7rem .85rem;margin-bottom:1rem;border:1px dashed color-mix(in srgb,var(--muted) 45%,var(--border));border-radius:11px;background:var(--panel)}.upload-copy strong{display:block;font-size:.8rem;font-weight:500}.upload-description{display:block;margin-top:.3rem;color:var(--muted);font-size:.75rem}.drop-icon{display:grid;place-items:center;width:1.8rem;height:1.8rem;flex-shrink:0;border:0;border-radius:8px;color:var(--muted);background:transparent}.summary>span{min-width:5.5rem}@container (max-width: 55rem){.upload-panel{grid-template-columns:1fr}.upload-controls{justify-content:space-between;padding-left:2.8rem}.repo-picker{flex:1}.repo-select{max-width:none}}@container (max-width: 30rem){.upload-controls{padding-left:0;flex-wrap:wrap}.repo-picker{flex-basis:100%}.section-head{align-items:flex-start;flex-direction:column}}.bundle-actions{display:flex;align-items:center;gap:.5rem}.bundle-open{padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left}.bundle-open:hover{color:var(--accent);text-decoration:underline}.bundle-row>.location-editor{grid-column:1 / -1}.upload-directory{width:12rem}.breadcrumb{flex-wrap:wrap}.breadcrumb .breadcrumb-current{margin:0;color:var(--text);font-size:.85rem;font-weight:500}
73
- `;var Ur=`.location-editor{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,.7fr) auto;align-items:end;gap:.75rem;padding:.85rem;border-top:1px solid var(--border);background:rgb(from var(--bg) r g b / .35)}.location-field{display:grid;gap:.35rem;min-width:0}.location-field>span,.location-field label{color:var(--muted);font-size:.75rem}.location-field input{width:100%}.location-actions{display:flex;gap:.4rem}.location-actions .action{width:auto;padding:.4rem .65rem;min-height:2.25rem;border:1px solid var(--border);border-radius:6px;color:var(--text);background:var(--bg);font-size:.78rem}
74
- `;var $o=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:5px;color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:2rem;height:2rem;border-radius:50%;overflow:hidden;background:var(--surface-active);color:var(--muted);font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.8rem;font-weight:600;user-select:none}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.create-team{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.new-name{flex:1 1 14rem;width:16rem;max-width:24rem}.access-note{flex:1 1 24rem;margin:0 0 0 auto;color:var(--muted);font-size:.75rem;text-align:right}.team .icon-btn{width:1.8rem;height:1.8rem}.team{border:1px solid var(--border);border-radius:8px;margin-bottom:.85rem;background:var(--panel);overflow:hidden}.team-head{display:flex;align-items:center;gap:.5rem;min-height:2.75rem;padding:.4rem .85rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.team-icon{display:grid;place-items:center;flex:0 0 auto;width:1.25rem;height:1.25rem;color:var(--muted)}.team-icon svg{width:1.05rem;height:1.05rem}.team-name{margin:0;min-width:0;font-size:.875rem;font-weight:600;letter-spacing:-.015em;overflow-wrap:anywhere}.team-actions{display:flex;gap:.25rem;margin-left:auto}.rename-input{flex:1;max-width:22rem;width:0}.team-body{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.sub{min-width:0;padding:.75rem .85rem}.sub+.sub{border-left:1px solid var(--border)}.sub-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .4rem;font-size:.75rem;font-weight:600}.sub-title .count{height:1.1rem;min-width:1.1rem;font-size:.75rem;padding:0 .3rem}.links{list-style:none;margin:0 0 .5rem;padding:0}.links li{display:flex;align-items:center;gap:.5rem;min-height:2.25rem;padding:.25rem 0}.links li+li{border-top:1px solid var(--border)}.repo-icon{flex:0 0 auto;color:var(--muted);width:.95rem;height:.95rem}.repo-copy{display:flex;min-width:0;flex-direction:column;gap:.1rem}.ln{min-width:0;font-size:.8rem;font-weight:500;overflow-wrap:anywhere}.path{color:var(--muted);font-family:var(--mono);font-size:.75rem;overflow-wrap:anywhere}.repo-row .icon-btn{margin-left:auto}.links .member-row{display:grid;grid-template-columns:minmax(0,1fr) auto 1.8rem;gap:.45rem}.member{display:flex;align-items:center;gap:.45rem;min-width:0}.member .avatar{width:1.6rem;height:1.6rem;font-size:.75rem}.perms{display:flex;flex-wrap:wrap;gap:.3rem}.perm{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .3rem;border:1px solid var(--border);border-radius:4px;font-size:.7rem;color:var(--muted);user-select:none}.perm:has(:checked){color:var(--text);background:rgb(from var(--accent) r g b / .07);border-color:rgb(from var(--accent) r g b / .2)}.perm:has(:disabled){opacity:.5}.add-row{display:flex;align-items:center;gap:.5rem;padding-top:.45rem}.add-row select,.add-row repository-selector,.add-row user-selector{flex:1;width:0}.add-repo-path{flex:.75;width:0}.add-row .btn{flex:0 0 auto}.muted{color:var(--muted);font-size:.78rem;margin:.5rem 0}@container (max-width: 50rem){.access-note{flex-basis:100%;margin-left:0;text-align:left}.team-body{grid-template-columns:1fr}.sub+.sub{border-left:0;border-top:1px solid var(--border)}.add-row{max-width:36rem}}@container (max-width: 32rem){.create-team{flex-wrap:wrap}.new-name{flex:1;width:0}.team-head,.sub{padding-left:.75rem;padding-right:.75rem}.add-row:has(.add-repo-sel){display:grid;grid-template-columns:minmax(0,1fr) auto}.add-row .add-repo-sel{width:100%}.add-repo-path{grid-column:1 / -1;grid-row:2;width:100%}}@container (max-width: 26rem){.links .member-row{grid-template-columns:minmax(0,1fr) 1.8rem}.perms{grid-row:2;padding-left:2.05rem}.member-row>.icon-btn{grid-column:2;grid-row:1}}
75
- `;S();V();st();Pt();var ko=(r,e,t)=>{let i=new Map;for(let s=e;s<=t;s++)i.set(r[s],s);return i},Bt=ae(class extends G{constructor(r){if(super(r),r.type!==F.CHILD)throw Error("repeat() can only be used in text expressions")}dt(r,e,t){let i;t===void 0?t=e:e!==void 0&&(i=e);let s=[],o=[],n=0;for(let a of r)s[n]=i?i(a,n):n,o[n]=t(a,n),n++;return{values:o,keys:s}}render(r,e,t){return this.dt(r,e,t).values}update(r,[e,t,i]){let s=Qs(r),{values:o,keys:n}=this.dt(e,t,i);if(!Array.isArray(s))return this.ut=n,o;let a=this.ut??=[],l=[],d,u,p=0,m=s.length-1,f=0,g=o.length-1;for(;p<=m&&f<=g;)if(s[p]===null)p++;else if(s[m]===null)m--;else if(a[p]===n[f])l[f]=de(s[p],o[f]),p++,f++;else if(a[m]===n[g])l[g]=de(s[m],o[g]),m--,g--;else if(a[p]===n[g])l[g]=de(s[p],o[g]),Be(r,l[g+1],s[p]),p++,g--;else if(a[m]===n[f])l[f]=de(s[m],o[f]),Be(r,s[p],s[m]),m--,f++;else if(d===void 0&&(d=ko(n,f,g),u=ko(a,p,m)),d.has(a[p]))if(d.has(a[m])){let v=u.get(n[f]),w=v!==void 0?s[v]:null;if(w===null){let b=Be(r,s[p]);de(b,o[f]),l[f]=b}else l[f]=de(w,o[f]),Be(r,s[p],w),s[v]=null;f++}else Nt(s[m]),m--;else Nt(s[p]),p++;for(;f<=g;){let v=Be(r,l[g+1]);de(v,o[f]),l[f++]=v}for(;p<=m;){let v=s[p++];v!==null&&Nt(v)}return this.ut=n,De(r,l),I}});ce();var ic=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"]]),sc=new Map([["openai","OpenAI"],["anthropic","Anthropic"],["moonshotai","Moonshot AI"],["google","Google"],["nvidia","NVIDIA"],["qwen","Qwen"],["deepseek","DeepSeek"],["x-ai","xAI"],["z-ai","Z.ai"]]),oc=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"],["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 So(r){let e=r.replace(/:free$/u,"").replaceAll("_","-").split("-").filter(Boolean),t=[];for(let s=0;s<e.length;s++){let o=e[s],n=e[s+1];if(/^\d+$/u.test(o)&&/^\d+$/u.test(n??"")){t.push(`${o}.${n}`),s++;continue}let a=oc.get(o.toLowerCase());t.push(a??(/^(?:[a-z]+\d+|\d+[a-z]+)$/iu.test(o)?o.toUpperCase():o[0]?.toUpperCase()+o.slice(1)))}return t.join(" ").replace(/^GPT (\d)/u,"GPT-$1")}function ke(r){return ic.get(r)??So(r.includes("/")?r.slice(r.indexOf("/")+1):r)}function at(r){let e=r.includes("/")?r.split("/")[0]:"other";return{key:e,name:sc.get(e)??(e==="other"?"Other":So(e))}}function Se(r){return r==="xhigh"?"Extra high":r?r[0].toUpperCase()+r.slice(1):"Unavailable"}function je(r){return r.efforts.includes("max")?"max":r.efforts.at(-1)??null}async function Ue(r,e=fetch){let t=await e("/api/admin/scan/models",{credentials:"same-origin",headers:{accept:"application/json"},signal:r});if(!t.ok)throw new Error(`HTTP ${t.status}`);let i=await t.json();return nc(i)}function nc(r){if(!Array.isArray(r?.models))throw new Error("No model catalogue returned");let e=r.models.filter(t=>typeof t?.id=="string"&&t.id.length>0).map(t=>({id:t.id,efforts:Array.isArray(t.efforts)?[...new Set(t.efforts.filter(i=>typeof i=="string"&&i.length>0))]:[]}));if(e.length===0)throw new Error("No models available");return{models:e,defaultModel:e.find(t=>t.id===r.defaultModel)?.id??e[0].id}}S();function Fr(r){let e=new Map(r.map(i=>[i.id,i])),t=new Set;return r.flatMap(i=>{if(t.has(i.id))return[];let s=i.id.endsWith("-pro")?i.id.slice(0,-4):i.id,o=e.get(s),n=e.get(`${s}-pro`);return!/(?:^|\/)gpt-.+$/u.test(s)||s.endsWith("-pro")||!o||!n?[i]:(t.add(o.id),t.add(n.id),[{...o,pro:n}])})}function Hr(r){return[...Map.groupBy(Fr(r),t=>at(t.id).key)].map(([t,i])=>({key:t,models:i}))}function Co(r,e){if(r.length===0)return[];let t=Math.min(r.length,Math.max(1,e)),i=r.map(d=>d.models.length*2+3),s=i.reduce((d,u)=>d+u,0),o=Math.max(...i);for(;o<s;){let d=Math.floor((o+s)/2),u=0,p=1;for(let m of i)u+m>d&&(p++,u=0),u+=m;p>t?o=d+1:s=d}let n=[],a=[],l=0;for(let[d,u]of r.entries())a.length>0&&(l+i[d]>o||r.length-d===t-n.length-1)&&(n.push(a),a=[],l=0),a.push(u),l+=i[d];return n.push(a),n}S();S();var Ro=c`<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>`;S();var Eo=c`<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>`;S();var Ao=c`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
61
+ `,m=r.body+p+i.text,f=r.body.length+p.length;return{body:m,sections:r.sections.map(g=>g===i?{...g,selected:t,separator:p,start:f,end:m.length}:g)}}let s=r.body.slice(i.start,i.end),o=i.separator??"",n=i.start-o.length,l=r.body.slice(n,i.start)===o&&!r.sections.some(p=>p!==i&&p.selected&&p.start<i.start&&p.end>n)?n:i.start,d=r.body.slice(0,l)+r.body.slice(i.end),h=l-i.end;return{body:d,sections:r.sections.map(p=>p===i?{...p,text:s,selected:t,start:0,end:0}:p.selected&&p.start>=i.end?{...p,start:p.start+h,end:p.end+h}:p)}}var mr,Nl,Du,Dl=w(()=>{"use strict";ht();mr=[["impact","Impact"],["evidence","Evidence"],["reproduction","Reproduction"],["recommendation","Recommendation"],["confidenceReason","Confidence reason"],["revalidateVerdict","Revalidation verdict"],["revalidateRecommendation","Revalidation recommendation"]],Nl=r=>r.toLowerCase().replaceAll(/[^\p{L}\p{N}]/gu,""),Du=new Map([...mr.map(([r,e])=>[Nl(e),r]),["reproductionsteps","reproduction"],["recommendedfix","recommendation"]])});var Ul,jl=w(()=>{Ul=`dialog{max-width:1040px;width:min(1040px,calc(100vw - 32px));margin-top:2rem;max-height:calc(100dvh - 4rem);overflow:hidden}dialog[open]{display:flex;flex-direction:column}header,.nwd-actions{flex-shrink:0}.dialog-content{min-height:0;overflow:auto;scrollbar-gutter:stable;padding:3px}.nwd-intro{overflow-wrap:anywhere}label{display:flex;flex-direction:column;gap:6px;margin:12px 0}textarea{min-height:clamp(240px,45dvh,540px);resize:vertical;line-height:1.55}.description-heading{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;margin:16px 0 6px}.description-heading label{margin:0}.description-sections{display:flex;flex:1;flex-wrap:wrap;justify-content:flex-end;gap:6px}.description-sections label{flex-direction:row;align-items:center;font-size:.8rem;line-height:1.3;cursor:default;padding:5px 8px;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--muted);background:var(--surface)}.description-sections label:has(input:checked){color:var(--text);border-color:color-mix(in srgb,var(--accent) 65%,var(--border));background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.description-sections label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.description-sections label:has(input:disabled){opacity:.55}.description-sections input{accent-color:var(--accent);flex-shrink:0}.description-help{margin:0 0 8px}.nwd-actions{flex-wrap:wrap}.nwd-actions a{font-size:.8rem}@media(width<=600px){dialog{margin-top:1rem;max-height:calc(100dvh - 2rem)}.description-sections{flex-basis:100%;justify-content:flex-start}}a{color:var(--accent)}.created-issue{padding:16px;border:1px solid var(--border);border-radius:var(--ui-radius, 8px)}.issue-heading{display:flex;align-items:center;gap:8px;margin-bottom:12px}.issue-status{padding:3px 10px;border-radius:20px;background:#238636;color:#fff;font-size:.8rem}.issue-status.closed{background:#8250df}.issue-status.not_planned,.issue-status.duplicate,.issue-status.unknown{background:#656d76}.issue-number{color:var(--muted)}h4{font-size:1.15rem;line-height:1.4;overflow-wrap:anywhere}.issue-description{margin-top:16px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:40vh;overflow:auto;line-height:1.5;font-size:.9rem}.issue-labels{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.issue-labels span{border:1px solid var(--border);border-radius:12px;padding:2px 8px;font-size:.75rem}.para+.para,.md-list{margin-top:.75em}.md-list{padding-left:1.5em}.inline-code,.code-block{font-family:monospace;background:var(--bg, var(--surface));border-radius:4px}.inline-code{padding:1px 4px}.code-block{white-space:pre;overflow:auto;padding:10px;margin:10px 0}
62
+ `});var Fl={};fr(Fl,{openManagedIssueDialog:()=>Uu});function Uu(r){return Xe("managed-issue-dialog",r)}var xs,$s,Hl=w(()=>{"use strict";S();Tl();ur();Dl();jl();xs={"github-unavailable":"GitHub could not be reached. Try checking again.","github-issue-forbidden":"GitHub did not permit issue creation. Check your repository access and authorization.","github-create-uncertain":"GitHub may have created this issue. Check the repository before trying again.","github-create-failed":"GitHub could not create the issue. Check the title and description before trying again.",unauthenticated:"Your session expired. Sign in again before creating an issue.","workspace-changed":"Your workspace access changed. Reopen the finding before creating an issue.","bad-issue-repository":"The finding\u2019s repository changed. Reopen the finding before creating an issue.","no-finding":"This finding is no longer available in this workspace."},$s=class extends W{static styles=[...W.styles,x(Ul)];static properties={teamId:{attribute:!1},context:{attribute:!1},session:{attribute:!1},formUrl:{attribute:!1},title:{state:!0},body:{state:!0},prepared:{state:!0},busy:{state:!0},creating:{state:!0},message:{state:!0},uncertain:{state:!0},createdUrl:{state:!0},createdIssue:{state:!0},detailsUnavailable:{state:!0},sections:{state:!0}};constructor(){super(),this.title="",this.body="",this.prepared=null,this.busy=!1,this.creating=!1,this.message="",this.uncertain=!1,this.createdUrl="",this.createdIssue=null,this.detailsUnavailable=!1,this.sections=[]}beforeOpen(){this.finding&&Object.assign(this,Bl(this.finding,this.draftOptions)),this.check(!0)}editBody(e){Object.assign(this,Pl(this,e))}toggleSection(e,t){Object.assign(this,_s(this,e,t))}current(){return!this._settled&&this.isCurrent()}fallbackUrl(){let e=new URL(this.formUrl);return e.searchParams.set("title",this.title),e.searchParams.set("body",this.body),this.prepared?.labels&&e.searchParams.set("labels",this.prepared.labels.join(",")),e.href}async check(e=!1){if(!(this.busy||!this.current())){this.busy=!0,this.message="";try{let t=await ws(this.teamId,this.context,this.session.csrfToken);if(!this.current())return;this.prepared=t,this.uncertain=!1,t.mode==="existing"&&window.location.assign(t.url),e&&t.mode==="form"&&window.location.assign(this.fallbackUrl())}catch(t){!this.uncertain&&!["pending","created-unavailable"].includes(this.prepared?.mode)&&(this.prepared=null),this.message=xs[t.message]??"Unable to check this issue. Please retry."}finally{this.busy=!1}}}async create(){if(!(this.busy||this.uncertain||this.createdUrl||this.prepared?.mode!=="api")){if(!this.current()){this.message=xs["workspace-changed"],this.prepared=null;return}this.busy=!0,this.creating=!0,this.message="";try{let e=await ws(this.teamId,this.context,this.session.csrfToken,{title:this.title,body:this.body});if(!this.current())return;e.mode==="existing"?window.location.assign(e.url):e.url?(this.createdUrl=e.url,this.createdIssue=e.issue,this.detailsUnavailable=e.detailsUnavailable===!0):this.prepared=e}catch(e){e.message==="github-authorization-required"?this.prepared={mode:"authorize",authorizationPath:"/api/oauth/github/issues/login"}:(this.uncertain=e.message==="github-create-uncertain",["workspace-changed","bad-issue-repository","no-team","no-report","no-finding","unauthenticated","forbidden"].includes(e.message)&&(this.prepared=null),this.message=xs[e.message]??"Could not create this issue. Check the title, description, and repository access.")}finally{this.busy=!1,this.creating=!1}}}render(){let e=this.createdIssue,t=this.prepared,i=t?.mode==="created-unavailable",s=this.createdUrl||i,o=this.uncertain||t?.mode==="pending",n=this.creating||o,a=!this.busy&&!o&&t?.mode==="form";return c`<dialog aria-labelledby="issue-dialog-title" @close="${this._onClose}" @cancel="${l=>{this.creating&&l.preventDefault()}}"><header><h3 id="issue-dialog-title">${s?"Issue created":"Create a GitHub issue"}</h3></header><div class="dialog-content"><p class="nwd-intro">${s?"Created":"Create"} in <strong>${this.context?.repository}</strong> as <strong>@${this.session?.login}</strong>.</p>${this.createdUrl?c`<section class="created-issue" aria-label="Created GitHub issue"><div class="issue-heading"><span class="${`issue-status ${e?.status??"open"} ${e?.stateReason??""}`}">${e?.status==="closed"?e.stateReason==="not_planned"?"Not planned":e.stateReason==="duplicate"?"Duplicate":e.stateReason==="completed"?"Completed":"Closed":"Open"}</span> <span class="issue-number">${e?.number?`#${e.number}`:""}</span></div><h4><a href="${this.createdUrl}" target="_blank" rel="noopener">${e?.title??this.title}</a></h4><p class="nwd-note">Opened by @${e?.author??this.session?.login}</p>${e?.labels?.length?c`<div class="issue-labels">${e.labels.map(l=>c`<span>${l}</span>`)}</div>`:u}<div class="issue-description">${this.renderBody?this.renderBody(e?.description??this.body):e?.description??this.body}</div><p class="nwd-note ui-hint">Linked permanently to this finding. The Issue button will open this issue next time.</p>${this.detailsUnavailable?c`<p class="nwd-note">GitHub’s latest details could not be loaded. The issue was created and its link is saved.</p>`:u}</section>`:i?c`<p role="status">The issue was created and linked permanently to this finding. Its details cannot be shown because workspace access could not be confirmed. Check its status again once workspace access is available.</p>`:c`<label>Title<input class="nwd-input" maxlength="256" .value="${this.title}" ?disabled="${n}" @input="${l=>{this.title=l.target.value}}"></label><div class="description-heading"><label for="issue-description">Description</label> ${this.sections.length>0?c`<div class="description-sections" role="group" aria-label="Include in description">${this.sections.map(l=>c`<label><input type="checkbox" .checked="${l.selected}" ?disabled="${n}" @change="${d=>this.toggleSection(l.id,d.target.checked)}">${l.label}</label>`)}</div>`:u}</div><p id="description-help" class="nwd-note description-help ui-hint">${this.sections.length>0?"Add or remove sections above. Your edits are kept when toggling them.":"Edit the description before creating the issue."}</p><textarea id="issue-description" class="nwd-input" maxlength="65536" .value="${this.body}" aria-describedby="description-help" ?disabled="${n}" @input="${l=>this.editBody(l.target.value)}"></textarea> ${t?.labels?.length?c`<p class="nwd-note">Labels: ${t.labels.join(", ")}</p>`:u} ${t?.mode==="permissions"?c`<p>Ask a repository owner to approve the app’s Issues read and write permission. ${t.authorizationPath?c`<a href="${t.authorizationPath}" target="_blank" rel="noopener">Review repository permissions</a>`:u}</p>`:u} ${t?.mode==="authorize"?c`<p><a href="${t.authorizationPath}" target="_blank" rel="noopener">Authorize GitHub</a>, then check authorization here.</p>`:u} ${t?.mode==="pending"?c`<p role="status">An issue is being created, or its creation could not be confirmed. Check its status before continuing; another issue will not be created.</p>`:u} ${t?.mode==="unavailable"?c`<p role="status">This finding already has a managed issue in a repository outside this workspace.</p>`:u}`} ${!this.createdUrl&&this.message?c`<p class="nwd-note" role="status">${this.message}</p>`:u} ${!this.createdUrl&&this.busy?c`<p role="status">${this.creating?"Creating issue\u2026":"Checking repository access\u2026"}</p>`:u}</div><footer class="nwd-actions">${this.createdUrl?c`<a href="${this.createdUrl}" target="_blank" rel="noopener">Open issue on GitHub</a>`:!this.busy&&o?c`<a href="${t?.repositoryUrl??`https://github.com/${this.context?.repository}/issues`}" target="_blank" rel="noopener">Check repository issues</a>`:a?c`<a href="${this.fallbackUrl()}" target="_blank" rel="noopener">Use GitHub form</a>`:u} <span class="nwd-spacer"></span> ${!this.createdUrl&&t?.mode!=="unavailable"?t?.mode==="api"&&!this.uncertain?c`<button class="primary" ?disabled="${this.busy||!this.title.trim()}" @click="${this.create}">Create issue</button>`:c`<button ?disabled="${this.busy}" @click="${()=>this.check()}">${o||i?"Check issue status":"Check authorization"}</button>`:u} <button ?disabled="${this.creating}" @click="${()=>this._finish(null)}">${s?"Close":"Cancel"}</button></footer></dialog>`}};customElements.define("managed-issue-dialog",$s)});function ql(r,e){return e==="triage"?Hu[r?.triage]??"Untriaged":e==="flagged"?r?.flagged?"Yes":"No":r?.[e]||"None"}function Vl(r,e){return Object.entries(Fu).flatMap(([t,i])=>{let s=ql(r,t);if(e===void 0)return r?.[t]===void 0?[]:[{label:i,after:s}];let o=ql(e,t);return o===s?[]:[{label:i,before:o,after:s}]})}var Fu,Hu,Gl=w(()=>{"use strict";Fu={triage:"Status",color:"Label",flagged:"Flagged",fix:"Fix",comment:"Comment"},Hu={inprogress:"In progress",fixed:"Fixed",invalid:"Invalid",deleted:"Deleted"}});function Kl(r,e){return r?lr(r,c`<span class="managed-comment-avatar" aria-hidden="true"><span>${(e?.[0]??"?").toUpperCase()}</span> ${Z()?u:c`<img alt="" src="${`/api/avatar/${encodeURIComponent(r)}`}" loading="lazy" @error="${t=>{t.currentTarget.hidden=!0}}">`}</span>`):u}var Wl=w(()=>{"use strict";$t();S();Qi()});var Jl,Zl=w(()=>{Jl=`.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}}
63
+ `});var Xl,Yl=w(()=>{Xl=`.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}}
64
+ `});var ec,Ql=w(()=>{ec=`dialog{width:min(94vw,720px);max-width:720px;max-height:calc(100dvh - 4rem);margin-block:2rem;padding:0;overflow:hidden;background:rgb(from var(--surface) r g b / 1)}dialog[open]{display:flex;flex-direction:column}header{display:flex;align-items:start;justify-content:space-between;gap:1rem;padding:.75rem 1rem;border-bottom:1px solid var(--border);flex:none}.history-heading{min-width:0}header h3{display:flex;align-items:center;gap:.55rem;margin:0;line-height:1.5}header svg{flex:none;color:var(--muted)}header .detail-action{flex:none;width:1.75rem;height:1.75rem}.location{margin-top:.4rem;color:var(--muted);font:.76rem/1.5 ui-monospace,monospace;overflow-wrap:anywhere}.history-summary{display:flex;justify-content:space-between;gap:.5rem;flex:none;padding:.5rem 1rem .25rem;color:var(--muted);font-size:.72rem}.history-body{min-height:0;overflow:auto;overscroll-behavior:contain;padding:.75rem 1rem 1rem;font-size:.82rem;line-height:1.5}.timeline{list-style:none}.event{position:relative;display:grid;grid-template-columns:2rem minmax(0,1fr);gap:.75rem;padding-bottom:1rem}.event:last-child{padding-bottom:0}.event:not(:last-child):before{content:"";position:absolute;top:2.4rem;bottom:.4rem;left:calc(1rem - .5px);width:1px;background:var(--border)}.managed-comment-avatar{width:2rem;height:2rem;font-size:.8rem;background:var(--surface-active)}.event-content{min-width:0}.event-meta{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.15rem .75rem}.event-user{display:flex;flex-wrap:wrap;align-items:baseline;gap:.1rem .45rem;min-width:0;overflow-wrap:anywhere}.event-user strong{font-weight:600}.username{color:var(--muted);font-size:.75rem}time{color:var(--muted);font-size:.7rem;white-space:nowrap}.event-action{margin-top:.1rem;color:var(--muted);font-size:.75rem}.changes{margin-top:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden}.change{display:grid;grid-template-columns:4.5rem minmax(0,1fr);align-items:baseline;gap:.65rem;padding:.4rem .6rem}.change+.change{border-top:1px solid var(--border)}dt{color:var(--muted);font-size:.75rem}dd{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:baseline;gap:.65rem}dd.snapshot{grid-template-columns:minmax(0,1fr)}.before,.after{white-space:pre-wrap;overflow-wrap:anywhere}.before,.change-arrow{color:var(--muted)}.after{font-weight:500}.history-state{padding:1.5rem .5rem;text-align:center;color:var(--muted)}.history-state strong{display:block;margin-bottom:.35rem;color:var(--text);font-weight:500}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media(width<=540px){dialog{margin-block:1rem;max-height:calc(100dvh - 2rem)}header{padding:.65rem}.history-summary{padding-inline:.65rem}.history-body{padding:.65rem}.event{gap:.6rem}.event-meta{flex-direction:column}.change{grid-template-columns:minmax(0,1fr);gap:.3rem;padding:.35rem .5rem}dd{gap:.45rem}}
65
+ `});var tc={};fr(tc,{openFindingHistoryDialog:()=>Ku});function Ku(r){return r.isCurrent()?Xe("finding-history-dialog",r):Promise.resolve(null)}var ks,rc=w(()=>{"use strict";S();N();ae();ur();Gl();Wl();Zl();Yl();Ql();ks=class extends W{static styles=[...W.styles,x(Xl),x(Jl),x(ec)];static properties={finding:{attribute:!1},teamId:{attribute:!1},_events:{state:!0},_loading:{state:!0},_error:{state:!0}};constructor(){super(),this._events=[],this._loading=!0,this._error=!1}beforeOpen(){this._load()}async _load(){if(!this.isCurrent()){this._finish(null);return}this._loading=!0,this._error=!1;let{_managedReportId:e,id:t}=this.finding;this._key=`finding-history:${this.teamId??""}:${e}:${t}`,C.invalidate([this._key]);let i=C.load(this._key,"issue history",async s=>{let o=new URLSearchParams({finding:t});this.teamId&&o.set("team",this.teamId);let n=await $(`/api/reports/${encodeURIComponent(e)}/triage/history?${o}`,{credentials:"same-origin",signal:s});if(!n.ok)throw new Error(`History request failed (${n.status})`);let a=await n.json();if(a.finding!==t||!Array.isArray(a.events))throw new Error("Invalid history response");return a.events});this._owner=C.resources.get(this._key),this._signal=this._owner.controller.signal,this._signal.addEventListener("abort",this._onClose,{once:!0});try{let s=await i;if(this._settled||!this.isConnected)return;if(!this.isCurrent()){this._finish(null);return}this._events=s}catch(s){if(this._settled||!this.isConnected)return;s.name==="AbortError"||!this.isCurrent()?this._finish(null):this._error=!0}finally{this._loading=!1}}disconnectedCallback(){this._signal?.removeEventListener("abort",this._onClose),this._owner&&C.resources.get(this._key)===this._owner&&C.invalidate([this._key]),this._events=[],super.disconnectedCallback()}_onKeydown=e=>{e.key==="Escape"&&e.stopPropagation()};_renderEvent(e,t){let i=this._events[t+1],s=Vl(e.entry,i?.entry),o=new Date(e.at),n=e.actorLogin?`@${e.actorLogin}`:"";return c`<li class="event">${e.actorId?Kl(e.actorId,e.actorName||e.actorLogin):c`<span class="managed-comment-avatar" aria-hidden="true">${(e.actorLogin?.[0]||"?").toUpperCase()}</span>`}<div class="event-content"><div class="event-meta"><div class="event-user"><strong>${e.actorName||n||"Unknown user"}</strong> ${e.actorName&&n?c`<span class="username">${n}</span>`:u}</div><time datetime="${o.toISOString()}" data-tooltip="${o.toLocaleString()}">${o.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}</time></div><p class="event-action">${e.entry===null?"Cleared triage":i?"Updated triage":"Recorded triage state"}</p>${s.length>0?c`<dl class="changes">${s.map(a=>c`<div class="change"><dt>${a.label}</dt><dd class="${a.before===void 0?"snapshot":""}">${a.before===void 0?u:c`<span class="before"><span class="sr-only">Previously: </span>${a.before}</span> <span class="change-arrow" aria-hidden="true">→</span>`} <span class="after"><span class="sr-only">${a.before===void 0?"Recorded: ":"Changed to: "}</span>${a.after}</span></dd></div>`)}</dl>`:u}</div></li>`}render(){let e=this.finding??{};return c`<dialog aria-labelledby="history-title" @close="${this._onClose}" @keydown="${this._onKeydown}"><header><div class="history-heading"><h3 id="history-title"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11a9 9 0 1 1 2.5 7M3 5v6h6M12 7v5l3 2"/></svg>Issue history</h3><p class="location">${e.file}${e.line?`:${e.line}`:""}</p></div><button type="button" class="detail-action" aria-label="Close issue history" @click="${this._onClose}">×</button></header>${!this._loading&&!this._error&&this._events.length>0?c`<div class="history-summary"><span>${this._events.length} ${this._events.length===1?"record":"records"}</span><span>Newest first</span></div>`:u}<div class="history-body" aria-busy="${String(this._loading)}">${this._loading?c`<p class="history-state" role="status">Loading history…</p>`:this._error?c`<div class="history-state" role="alert"><strong>Couldn’t load issue history</strong><p>Close and reopen to try again.</p></div>`:this._events.length===0?c`<div class="history-state" role="status"><strong>No triage changes yet</strong><p>Changes to status, labels, flags, and fixes will appear here.</p></div>`:c`<ol class="timeline">${this._events.map((t,i)=>this._renderEvent(t,i))}</ol>`}</div></dialog>`}};customElements.define("finding-history-dialog",ks)});N();S();ht();S();ae();var O=class extends E{static properties={session:{attribute:!1},allowShare:{attribute:!1},_loading:{state:!0}};constructor(){super(),this.session=null,this.allowShare=!1,this.appState=C,this._loading=!1,this._loadRequest=null}get _role(){return this.session?.role??null}get _csrf(){return this.session?.csrfToken??null}get _me(){return this.session?.id??null}disconnectedCallback(){this._loadRequest?.abort(),super.disconnectedCallback()}async _loadCollection(e,t,i,s){this._loadRequest?.abort();let o=new AbortController;this._loadRequest=o,this._loading=!0;try{await this.appState.load(e,t,i,{signal:o.signal,apply:s})}catch(n){!o.signal.aborted&&n?.name!=="AbortError"&&this.appState.read(e)===void 0&&(this._error=String(n?.message??n))}finally{this._loadRequest===o&&(this._loading=!1)}}};function le(r){return c`<div class="loading-rows" role="status"><span class="sr-only">${r}</span><div aria-hidden="true">${[0,1,2,3].map(()=>c`<div class="loading-row"><span></span><span></span></div>`)}</div></div>`}J();mt();var ft=class extends Q{constructor(e){if(super(e),this.it=u,e.type!==G.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===u||e==null)return this._t=void 0,this.it=e;if(e===L)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};ft.directiveName="unsafeHTML",ft.resultType=1;var I=me(ft);gr();vr();ge();var en={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="${Ko}"/>`},"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"/>'}},Wd={default:["#2563eb","#fff"],"claude-security":["#d97757","#fff"],"codex-security":["#fff","#000"],deepsec:["#000","#fff"],piolium:["#fbb829","#1c1b19"]},ti=Object.fromEntries(Object.entries(en).map(([r,{className:e,mark:t}])=>{let[i,s]=Wd[r],o=r==="codex-security"||r==="deepsec"?` stroke="${s}" stroke-width=".5"`:"";return[r,`<svg class="file-icon ${e}" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path class="bg" fill="${i}"${o} d="M3 2h6l4 4v8H3z"/><path fill="rgba(0,0,0,.18)" d="M9 2v4h4Z"/><g fill="${s}">${t}</g></svg>`]})),ri=Object.fromEntries(Object.entries(en).map(([r,{className:e,mark:t}])=>[r,`<span class="report-logo ${e}" aria-hidden="true"><svg viewBox="${r==="default"?"3.5 4 9 9":"4 5 8 8"}" width="14" height="14">${t}</svg></span>`]));ge();S();ge();var Zd=[["manage","Overview"],["manage-bundles","Bundles"],["manage-scans","Scans"],["manage-reports","Reports"],["manage-repos","Repositories","admin"],["admin-users","Users","admin"],["manage-teams","Teams","admin"],["manage-import","Import","admin"],["manage-links","Links"],["manage-history","History"]];function U(r,e,t=!1){return c`<nav class="manage-nav" aria-label="Management pages">${Zd.filter(([i,,s])=>(s==null||s===e)&&(i!=="manage-links"||t)).map(([i,s])=>c`<button type="button" aria-current="${r===i?"page":u}" @click="${()=>{document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:i},bubbles:!0,composed:!0}))}}">${s}</button>`)}</nav>`}function B(r){if(r==="bundle")return I(fe);if(r==="report"||r==="preview")return I(Ve);if(r==="scan")return I(Zo);let e={users:"M10.75 4.75a2.75 2.75 0 1 1-5.5 0 2.75 2.75 0 0 1 5.5 0ZM3 14v-1.5A3.5 3.5 0 0 1 6.5 9h3a3.5 3.5 0 0 1 3.5 3.5V14",team:"M8.5 5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM1.5 14v-1.5A3.5 3.5 0 0 1 5 9h2a3.5 3.5 0 0 1 3.5 3.5V14M11 2.75a2.5 2.5 0 0 1 0 4.5m1 2a3 3 0 0 1 2.5 3V14",repo:"M3 12.5V3a1.5 1.5 0 0 1 1.5-1.5H13v13H4.5a1.5 1.5 0 0 1 0-3H13M7 1.5v6l2-1.5 2 1.5v-6",history:"M2 5a6.25 6.25 0 1 1-.25 5M1.5 1.5V5H5M8 4.5V8l3 1.5",arrow:"M3 8h10M9 4l4 4-4 4",show:"M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8Zm9 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0",hide:"m2 2 12 12M6 3.75A8 8 0 0 1 8 3.5c4.5 0 7 4.5 7 4.5a12 12 0 0 1-2 2.5M3.5 5A13 13 0 0 0 1 8s2.5 4.5 7 4.5a8 8 0 0 0 3-.6",download:"M8 2v8M5 7l3 3 3-3M2 11v3h12v-3",upload:"M8 11V2m-3 3 3-3 3 3M2 10v4h12v-4"};return c`<svg class="${r==="repo"?"repo-icon":u}" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${e[r]??e.repo}"></path></svg>`}S();S();J();mt();Xt();var q=me(class extends Q{constructor(r){if(super(r),r.type!==G.PROPERTY&&r.type!==G.ATTRIBUTE&&r.type!==G.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!sn(r))throw Error("`live` bindings can only contain a single expression")}render(r){return r}update(r,[e]){if(e===L||e===u)return e;let t=r.element,i=r.name;if(r.type===G.PROPERTY){if(e===t[i])return L}else if(r.type===G.BOOLEAN_ATTRIBUTE){if(!!e===t.hasAttribute(i))return L}else if(r.type===G.ATTRIBUTE&&t.getAttribute(i)===e+"")return L;return Ke(r),e}});var P=class extends E{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=M`:host{display:block;min-width:0}*{box-sizing:border-box}button,input{font:inherit;color:var(--text)}button{cursor:default;user-select:none}.trigger{display:flex;align-items:center;gap:.6rem;width:100%;height:2rem;padding:.28rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);text-align:left;font-size:.76rem}.trigger:hover:not(:disabled){border-color:var(--muted)}.trigger:disabled{opacity:.5}:host([variant=filter]){display:inline-block;max-width:min(20rem,100%)}:host([variant=filter]) .trigger{height:30px;min-width:8.5rem;background:transparent;font-size:.8rem;font-weight:500;border-radius:var(--ui-radius, 4px)}.name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.option-copy{flex:1;min-width:0;display:grid;gap:.08rem}.secondary{color:var(--muted);font-size:.64rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{display:grid;place-items:center;flex:0 0 1.5rem;width:1.5rem;height:1.5rem;border-radius:50%;color:var(--accent);background:rgb(from var(--accent) r g b / .13);font-family:sans-serif;font-size:.62rem;font-weight:600}.detail,.count{flex:0 0 auto;color:var(--muted);font-size:.66rem;font-variant-numeric:tabular-nums;white-space:nowrap}svg{flex:0 0 auto;width:.9rem;height:.9rem;color:var(--muted)}.menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--bg);color:var(--text);box-shadow:0 .6rem 1.6rem #0006;user-select:none}.menu:popover-open{display:flex;flex-direction:column}.menu[data-positioned]{visibility:visible}.search{display:flex;align-items:center;gap:.5rem;flex:0 0 auto;padding:.55rem .65rem;border-bottom:1px solid var(--border)}input{flex:1;min-width:0;width:0;padding:.15rem 0;border:0;background:transparent;font-size:.78rem;outline:none}input::placeholder{color:var(--muted)}.search:focus-within{box-shadow:inset 0 -2px var(--accent)}.body{display:flex;min-height:0;flex:1}.facets{width:10.5rem;flex:0 0 auto;padding:.35rem;overflow:auto;overscroll-behavior:none;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.org{display:flex;align-items:center;gap:.4rem;width:100%;padding:.4rem .45rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.7rem}.org[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.results{flex:1;min-width:0;overflow:auto;overscroll-behavior:none;padding:.3rem}.group+.group{margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--border)}.heading{position:sticky;top:-.3rem;z-index:1;display:flex;align-items:center;gap:.4rem;margin:0;padding:.4rem .5rem;color:var(--muted);background:var(--bg);font-size:.68rem;font-weight:600}.heading svg{width:.8rem;height:.8rem}.option{display:flex;align-items:center;gap:.65rem;width:100%;padding:.35rem .5rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;text-align:left;font-size:.76rem}.option svg{width:.8rem;height:.8rem;opacity:0;color:var(--accent)}.option[aria-selected=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.option[aria-selected=true] svg{opacity:1}.option:disabled{opacity:.45}.option:hover:not(:disabled),.org:hover{background:rgb(from var(--text) r g b / .05)}.pinned{padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid var(--border)}.empty{margin:0;padding:1.3rem .7rem;color:var(--muted);font-size:.76rem}button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media(max-width:40rem){.facets{width:8.5rem}}@media(max-width:28rem){.facets{width:7rem}.option{gap:.35rem}}`;constructor(){super(),this.options=[],this.value=null,this.label="Choose",this.placeholder="Choose",this.disabled=!1,this._query="",this._facet=null,this._open=!1,this._menuHeight=null,this._onViewport=()=>this._position()}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._onViewport),window.addEventListener("scroll",this._onViewport,!0)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._onViewport),window.removeEventListener("scroll",this._onViewport,!0)}render(){let e=this.options.find(n=>n.value===this.value),t=this.choices(),s=[...t.pinned,...t.sections.flatMap(n=>n.options)].filter(n=>!n.disabled),o=s.find(n=>n.value===this.value)?.value??s[0]?.value;return c`<button type="button" class="trigger" popovertarget="selector-menu" aria-label="${this.label}" aria-haspopup="dialog" aria-expanded="${this._open}" ?disabled="${this.disabled}">${e?this.optionIcon(e):u}<span class="name">${e?.label??this.placeholder}</span>${e?.detail?c`<span class="detail">${e.detail}</span>`:u} <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="${q(this._query)}" @input="${n=>{this._query=n.target.value}}"> <span class="count" role="status">${t.count}${t.count===t.total?"":` / ${t.total}`}</span></div><div class="body">${t.showFacets?c`<div class="facets" role="group" aria-label="${this.facetLabel}"><button type="button" class="org" aria-pressed="${t.activeFacet==null}" @click="${()=>this._filterFacet(null)}"><span class="name">${this.allFacetsLabel}</span><span class="count">${t.total}</span></button> ${t.facets.map(n=>c`<button type="button" class="org" title="${n.name}" aria-pressed="${t.activeFacet===n.value}" @click="${()=>this._filterFacet(n.value)}"><span class="name">${n.name}</span><span class="count">${n.count}</span></button>`)}</div>`:u}<div class="results" id="selector-options" role="listbox" aria-label="${this.optionsLabel}">${t.pinned.length>0?c`<div class="pinned">${t.pinned.map(n=>this._option(n,!1,o))}</div>`:u} ${t.sections.map((n,a)=>c`<div class="group" role="group" aria-labelledby="${n.label?`selector-group-${a}`:u}">${n.label?c`<h3 class="heading" id="${`selector-group-${a}`}">${n.organization?c`<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>`:u}${n.label}</h3>`:u} ${n.options.map(l=>this._option(l,n.organization,o))}</div>`)} ${t.count?u:c`<p class="empty">${this.options.length>0?this.noMatchesLabel:this.emptyLabel}</p>`}</div></div></div>`}optionIcon(e){return e.initials?c`<span class="avatar" aria-hidden="true">${e.initials}</span>`:u}optionTitle(e){return e.label}_option(e,t,i){return c`<button type="button" class="option" role="option" ?data-reset="${e.reset}" ?disabled="${e.disabled}" aria-label="${e.label}" title="${this.optionTitle(e)}" aria-selected="${e.value===this.value}" tabindex="${e.value===i?0:-1}" @click="${()=>this._pick(e.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(e)}<span class="option-copy"><span class="name">${e.displayLabel??(t?e.name:e.label)}</span>${e.secondary?c`<span class="secondary">${e.secondary}</span>`:u}</span>${e.detail?c`<span class="detail">${e.detail}</span>`:u}</button>`}updated(e){this.disabled&&this._open&&this._close(!1),e.has("options")&&(this._menuHeight=null),this._position(),(e.has("_query")||e.has("_facet"))&&(this.renderRoot.querySelector(".results").scrollTop=0)}_beforeToggle(e){this._open=e.newState==="open",delete e.target.dataset.positioned,this._open&&(this._query="",this._facet=null,this._menuHeight=null)}async _toggle(e){e.newState==="open"&&(await this.updateComplete,!(!this._open||!this.isConnected)&&(this._position(),this.renderRoot.querySelector("input").focus({preventScroll:!0})))}_position(){let e=this.renderRoot.querySelector(".menu");if(!e?.matches(":popover-open"))return;let t=this.renderRoot.querySelector(".trigger").getBoundingClientRect(),i=8,s=e.querySelector(".facets")!=null,o=Math.min(Math.max(t.width,s?560:360),window.innerWidth-i*2),n=window.innerHeight-t.bottom-i-4,a=t.top-i-4;e.style.width=`${o}px`,this._menuHeight??=Math.min(480,e.querySelector(".search").offsetHeight+Math.max(e.querySelector(".results").scrollHeight,e.querySelector(".facets")?.scrollHeight??0)+2);let l=this._menuHeight,d=n<l&&a>n;e.style.maxHeight=`${Math.max(0,Math.min(l,d?a:n))}px`,e.style.left=`${Math.max(i,Math.min(t.left,window.innerWidth-o-i))}px`,e.style.top=`${Math.max(i,d?t.top-e.offsetHeight-4:t.bottom+4)}px`,e.dataset.positioned=""}_filterFacet(e){this._facet=e,this.renderRoot.querySelector("input").focus({preventScroll:!0})}_keyDown(e){if(e.stopPropagation(),e.key==="Escape"){e.preventDefault(),this._close();return}let t=this.renderRoot.querySelector("input"),i=this.renderRoot.activeElement,s=[...this.renderRoot.querySelectorAll(".option:not(:disabled)")],o=s.indexOf(i);if(i!==t&&o<0)return;if(e.key==="Enter"&&i===t){e.preventDefault(),(this.renderRoot.querySelector(".option:not([data-reset]):not(:disabled)")??s[0])?.click();return}let n;if(e.key==="ArrowDown")n=Math.min(o+1,s.length-1);else if(e.key==="ArrowUp")n=o-1;else if(i!==t&&e.key==="Home")n=0;else if(i!==t&&e.key==="End")n=s.length-1;else if(i!==t&&e.key.length===1&&e.key!==" "&&!e.ctrlKey&&!e.metaKey&&!e.altKey){e.preventDefault(),this._query+=e.key,t.focus();return}else return;e.preventDefault();for(let[a,l]of s.entries())l.tabIndex=a===n?0:-1;n<0?t.focus():s[n]?.focus()}_pick(e){this.disabled||!this.options.some(t=>t.value===e&&!t.disabled)||(this._close(),this.dispatchEvent(new CustomEvent(this.changeEvent,{detail:{value:e},bubbles:!0,composed:!0})))}_close(e=!0){this.renderRoot.querySelector(".menu").hidePopover(),this._open=!1,e&&this.renderRoot.querySelector(".trigger").focus({preventScroll:!0})}};var ii=class extends P{get changeEvent(){return"local-item-change"}get searchLabel(){return"Search local files"}get optionsLabel(){return"Local files"}get noMatchesLabel(){return"No matching files."}get emptyLabel(){return"No local files available."}optionTitle(){return u}choices(){let e=this._query.trim().toLocaleLowerCase(),t=this.options.filter(i=>`${i.label} ${i.secondary??""}`.toLocaleLowerCase().includes(e));return{pinned:[],sections:[{options:t}],count:t.length,total:this.options.length,showFacets:!1}}};customElements.define("managed-local-item-selector",ii);var gt=class{constructor(e,t,i){this.host=e,this.kind=t,this.upload=i,this.source=null,this.hasData=!1,this.open=!1,this.options=[],this.value=null,this.busy=!1,this.loading=!1,this.error="",this.success="",this.generation=0,this.readAbort=null,this.onChange=s=>{if(s?.kind){if(s.kind!==this.kind)return;if(s.value!==this.value){this.refresh();return}}this.readAbort&&!this.readAbort.signal.aborted&&(this.readAbort.abort(),this.error=`The local ${this.kind} changed or the list was refreshed. Select it again before importing.`),this.options=[],this.value=null,this.success="",this.refresh()},this.onBlur=()=>{this.readAbort&&!this.readAbort.signal.aborted&&this.onChange()},this.onVisibilityChange=()=>{globalThis.document?.visibilityState==="hidden"&&this.onBlur()},e.addController(this)}hostConnected(){globalThis.addEventListener("focus",this.onChange),globalThis.addEventListener("blur",this.onBlur),globalThis.addEventListener("storage",this.onChange),globalThis.document?.addEventListener("visibilitychange",this.onVisibilityChange),this.connectSource()}hostUpdated(){this.connectSource()}connectSource(){this.source!==this.host.localImportSource&&(this.unsubscribe?.(),this.abort?.abort(),this.source=this.host.localImportSource,this.unsubscribe=this.source?.subscribe(this.onChange),this.onChange())}hostDisconnected(){++this.generation,this.abort?.abort(),this.unsubscribe?.(),this.source=null,globalThis.removeEventListener("focus",this.onChange),globalThis.removeEventListener("blur",this.onBlur),globalThis.removeEventListener("storage",this.onChange),globalThis.document?.removeEventListener("visibilitychange",this.onVisibilityChange)}async refresh(){let e=++this.generation,t=this.source;this.loading=!0,this.host.requestUpdate();try{let i=t?await t.hasData(this.kind):!1;if(e!==this.generation)return;this.hasData=i;let s=this.open&&!t?.locked?await t?.list(this.kind)??[]:[];if(e!==this.generation)return;this.options=s,s.some(o=>o.value===this.value)||(this.value=null)}catch(i){e===this.generation&&(this.error=String(i?.message??i))}finally{e===this.generation&&(this.loading=!1,this.host.requestUpdate())}}toggle(){this.busy||(this.open=!this.open,this.error="",this.success="",this.options=[],this.value=null,this.refresh())}async unlock(){if(this.busy)return;this.busy=!0,this.error="";let e=this.abort=new AbortController;this.host.requestUpdate();try{await this.source.unlock({signal:e.signal})&&!e.signal.aborted&&await this.refresh()}catch(t){e.signal.aborted||(this.error=String(t?.message??t))}finally{this.busy=!1,this.host.requestUpdate()}}async importSelected(){if(this.busy||this.loading||!this.value||this.source?.locked)return;this.busy=!0,this.error="",this.success="";let e=this.options.find(i=>i.value===this.value)?.label,t=this.abort=new AbortController;this.readAbort=t,this.host.requestUpdate();try{await this.source.importItem(this.kind,this.value,i=>(this.readAbort=null,this.upload(i)),{signal:t.signal}),!t.signal.aborted&&!this.source?.locked&&(this.success=`Imported ${e}.`,this.value=null)}catch(i){t.signal.aborted||(this.error=String(i?.message??i))}finally{this.readAbort===t&&(this.readAbort=null),this.busy=!1,this.host.requestUpdate()}}renderAction(){return this.hasData||this.open?c`<button type="button" class="local-import-toggle" aria-expanded="${this.open}" aria-controls="local-import-panel" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Import</button>`:u}renderPanel(e){if(!this.open)return u;let t=this.source?.locked;return c`<section class="local-import-panel" id="local-import-panel" aria-label="${`Import local ${this.kind}`}"><div class="local-import-copy"><strong>Import local ${this.kind}</strong><p>${t?"Unlock local data with your passkey to choose a file.":"Copy a file from this browser to the managed workspace. The local copy stays on this device."}</p></div><div class="local-import-controls">${t?c`<button type="button" class="local-import-submit" ?disabled="${this.busy}" @click="${()=>this.unlock()}">${this.busy?"Waiting for passkey\u2026":"Unlock with passkey"}</button>`:c`<managed-local-item-selector label="${`Choose local ${this.kind}`}" placeholder="${this.loading?"Loading local files\u2026":`Choose local ${this.kind}\u2026`}" .options="${this.options}" .value="${this.value}" ?disabled="${this.busy||this.loading}" @local-item-change="${i=>{this.value=i.detail.value,this.success="",this.host.requestUpdate()}}"></managed-local-item-selector><button type="button" class="local-import-submit" ?disabled="${e||this.busy||this.loading||!this.value}" @click="${()=>this.importSelected()}">${this.busy?"Importing\u2026":`Import ${this.kind}`}</button>`} <button type="button" class="local-import-close" ?disabled="${this.busy}" @click="${()=>this.toggle()}">Close</button></div>${!t&&!this.loading&&this.options.length===0?c`<p class="local-import-message">No local ${this.kind}s available.</p>`:u} ${this.error?c`<p class="local-import-message error" role="alert">${this.error} <button type="button" ?disabled="${this.busy}" @click="${()=>{this.error="",this.refresh()}}">Retry</button></p>`:u} ${this.success?c`<p class="local-import-message" role="status">${this.success}</p>`:u}</section>`}};N();ae();async function Xd(){let r=await $("/api/admin/bundles",{credentials:"same-origin",signal:C.sessionController.signal});if(!r.ok)throw new Error(`Bundle catalogue request failed (${r.status})`);return(await r.json()).bundles??[]}async function Qt(r,e,t){let i=C.generation,s=await $(`/api/bundles/${encodeURIComponent(r)}/${e}`,{credentials:"same-origin",signal:t});if(t?.throwIfAborted(),!s.ok)throw Object.assign(new Error(`Bundle ${e} request failed (${s.status})`),{status:s.status});let o=e==="contents"?await s.text():await s.json();if(t?.throwIfAborted(),i!==C.generation)throw new DOMException("Managed session changed","AbortError");return o}function si(r,{signal:e}={}){return C.load(`bundle-metadata:${r}`,"bundle metadata",t=>Qt(r,"metadata",t),{signal:e})}async function nn(r,{signal:e}={}){return e=e?AbortSignal.any([e,C.sessionController.signal]):C.sessionController.signal,(await Qt(r,"metadata",e))?.bundle?.repo??null}async function Qd(r,{signal:e}={}){e=e?AbortSignal.any([e,C.sessionController.signal]):C.sessionController.signal;try{return await Qt(r,"contents",e)}catch(t){throw t.name!=="AbortError"&&C.notify(`Couldn't load bundle contents: ${t.message}`),t}}function ep(r,e,t="",i=!1){let s=[e?`team=${encodeURIComponent(e)}`:"",t?`reason=${encodeURIComponent(t)}`:"",i?"repoAdvisories=true":""].filter(Boolean).join("&"),o=`advisories${s?`?${s}`:""}`;return Qt(r,o,C.sessionController.signal)}N();async function Le(r,e){let t=await $(r,{signal:e,credentials:"same-origin",headers:{accept:"application/json"}});if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function ze(r,e,t){let i={"content-type":"application/json"};return e&&(i["x-csrf-token"]=e),$(r,{method:"POST",credentials:"same-origin",headers:i,body:JSON.stringify(t)})}async function an(r,e,t){let i=t?{"x-csrf-token":t}:{},s=await $(`/api/admin/${r}/${encodeURIComponent(e)}`,{method:"DELETE",credentials:"same-origin",headers:i});if(!s.ok)throw new Error(`HTTP ${s.status}`)}async function ln(r,e,t,i,s,o){let n=new URLSearchParams({page:String(e),limit:"100",kind:t,q:i.trim()});s&&n.set("repo",s),o&&n.set("actor",o);let a=await Le(`/api/admin/history?${n}`,r);if(!Array.isArray(a?.history)||!Number.isSafeInteger(a.total)||a.total<0||!Number.isSafeInteger(a.page)||a.page<1)throw new Error("No history returned");return a}async function cn(r){let e=await Le("/api/admin/users",r);return Array.isArray(e?.users)?e.users:[]}async function dn(r,e,t){let i=await ze("/api/admin/set-role",t,{userId:r,role:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function pn(r,e,t,i){let s=new URLSearchParams({scope:r});return r==="installed"&&s.set("showAll",String(e)),t&&s.set("refresh","true"),await Le(`/api/admin/repositories?${s}`,i)}async function un(r,e,t){let i=await ze("/api/admin/repositories/select",t,{repoId:r,selected:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function hn(r,e){let t=await $("/api/admin/repositories/add-public",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json","x-csrf-token":e},body:JSON.stringify({repository:r})});if(!t.ok){let i={400:"Enter a repository as owner/repo or a GitHub repository URL.",403:"You do not have permission to add arbitrary public repositories.",404:"No public repository was found at that address.",409:"Choose a public, non-archived repository."};throw new Error(i[t.status]??`GitHub lookup failed (HTTP ${t.status}). Try again.`)}}async function mn(r,e){let t=await Le(`/api/admin/repositories/impact?repoId=${encodeURIComponent(r)}`,e);if(t?.repoId!==r||!Array.isArray(t.reports)||!Array.isArray(t.bundles)||!Number.isSafeInteger(t.triageCount)||t.triageCount<0)throw new Error("Invalid repository data");return t}async function fn(r,e){let t=await $("/api/admin/repositories/connect-app",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json","x-csrf-token":e},body:JSON.stringify({repoId:r})}),i=await t.json();if(!t.ok){let s={"github-app-not-configured":"The GitHub App is not configured on this server.","repo-identity-changed":"The repository has changed on GitHub. Refresh and check its connection.","repo-connection-changed":"The connection or your permissions changed. Refresh and try again.","repo-not-connected":"This repository is no longer connected.",forbidden:"Administrator access is required to connect the GitHub App."};throw new Error(s[i.error]??`Could not connect the GitHub App (HTTP ${t.status}). Try again.`)}if(i.connected===!0)return i;if(i.connected!==!1||typeof i.installUrl!="string"||!/^https:\/\/github\.com\/apps\/[^/?#]+\/installations\/new$/u.test(i.installUrl))throw new Error("Invalid GitHub installation response.");return i}async function gn(r,e,t,i){let s=await ze("/api/admin/repositories/remove",i,{repoId:r,fullName:e,acknowledge:!0,deleteTriage:t});if(!s.ok)throw new Error(`HTTP ${s.status}`);return s.json()}async function bn(r){return await Le("/api/admin/reports",r)}async function vn(r,e,t){let i=await $("/api/admin/bundles/create",{method:"POST",credentials:"same-origin",signal:t,headers:{"content-type":"application/json","x-csrf-token":e},body:JSON.stringify(r)}),s=await i.json();if(!i.ok){let o={"unsupported-entries":"Select JavaScript/TypeScript files or Solidity files. Stasis cannot mix languages or use JSON, JSX, TSX, or Rust as remote entry points.","bad-conditions":"Check the export conditions and selected platforms.","metro-conditions":"Stasis\u2019s Metro preset requires the react-native condition without manual changes.","build-lockfile":"Stasis needs a supported lockfile: pnpm-lock.yaml, yarn.lock (Yarn 1), package-lock.json, or soldeer.lock.","build-scope":"Your team needs access to the bundle\u2019s project root, including its lockfile and dependencies.","build-busy":"A bundle is already being built, or the server is busy. Try again shortly.","build-timeout":"The bundle build timed out. Try a smaller selection or retry.","too-large":"This bundle exceeds the server\u2019s size limit.","github-rate-limited":"GitHub\u2019s API rate limit has been reached. Retry after the limit resets.","github-build-failed":"Could not fetch the repository from GitHub. Check access and retry.","repository-changed":"The repository connection changed during the build. Reload and try again.","bundle-conflict":"This bundle already exists but is outside your current access.","build-failed":"Stasis could not build this selection. Check that its lockfile is supported and all entry points and imports exist at this commit."};throw new Error(o[s.error]??(i.status===401?"Sign in again to create a bundle.":i.status===403||i.status===404?"Repository access is required to create this bundle.":"Could not create the bundle. Try again."))}return s}async function oi(r,e,t=null,i=""){let s={"content-type":r.type||"application/json","x-report-filename":encodeURIComponent(r.name)};e&&(s["x-csrf-token"]=e),t!=null&&(s["x-repo-id"]=String(t)),i!==""&&(s["x-repo-directory"]=encodeURIComponent(i));let o=await $("/api/admin/reports",{method:"POST",credentials:"same-origin",headers:s,body:r});if(!o.ok){if(o.status===413)throw new Error("too large");if(o.status===403)throw new Error("choose a repository and directory within your team access");let n="";try{let a=await o.json();a?.error==="repo-not-connected"&&typeof a.repo=="string"&&(n=`: ${a.repo} is not connected`)}catch{}throw new Error(`HTTP ${o.status}${n}`)}return o.json()}async function yn(r,e,t){let i=await ze("/api/admin/reports/set-visible",t,{reportId:r,visible:e});if(!i.ok)throw new Error(`HTTP ${i.status}`)}async function wn(r,e,t,i){let s=await ze("/api/admin/reports/set-repo",i,{reportId:r,repoId:e,directory:t});if(!s.ok)throw s.status===409?new Error("this report already defines its repository"):s.status===403?new Error("choose a repository and directory within your team access"):new Error(s.status===400?"invalid repository or directory":`HTTP ${s.status}`);return s.json()}async function _n(r,e){await an("reports",r,e)}async function ni(r){return await Le("/api/admin/bundles",r)}async function ai(r,e,t,i=""){let s={"content-type":"application/octet-stream","x-bundle-filename":encodeURIComponent(r.name)};e&&(s["x-csrf-token"]=e),t!=null&&(s["x-repo-id"]=String(t)),i&&(s["x-repo-directory"]=encodeURIComponent(i));let o=await $("/api/admin/bundles",{method:"POST",credentials:"same-origin",headers:s,body:r});if(!o.ok)throw new Error(o.status===413?"too large":o.status===403?"choose a repository and directory within your team access":`HTTP ${o.status}`);return o.json()}async function xn(r,e){await an("bundles",r,e)}async function $n(r,e,t,i){let s=await ze("/api/admin/bundles/set-repo",i,{bundleId:r,repoId:e,directory:t});if(!s.ok)throw new Error(s.status===403?"choose a repository and directory within your team access":s.status===400?"invalid repository or directory":`HTTP ${s.status}`)}async function li(r){return await Le("/api/admin/teams",r)}async function ce(r,e,t){let i=await ze(r,e,t);if(!i.ok)throw new Error(i.status===409?"name already taken":`HTTP ${i.status}`)}function ci(r,e=!0){let t=document.createElement("input");t.type="file",t.multiple=e,t.addEventListener("change",()=>{r([...t.files])},{once:!0}),t.click()}function di(r,e,t){let i=0,s=d=>Array.from(d.dataTransfer?.types??[]).includes("Files"),o=d=>{s(d)&&(d.preventDefault(),i+=1,t(!0))},n=d=>{s(d)&&d.preventDefault()},a=d=>{s(d)&&(i=Math.max(0,i-1),i===0&&t(!1))},l=d=>{s(d)&&(d.preventDefault(),d.stopPropagation(),i=0,t(!1),e([...d.dataTransfer.files]))};return r.addEventListener("dragenter",o),r.addEventListener("dragover",n),r.addEventListener("dragleave",a),r.addEventListener("drop",l),()=>{r.removeEventListener("dragenter",o),r.removeEventListener("dragover",n),r.removeEventListener("dragleave",a),r.removeEventListener("drop",l)}}async function pi(r,e,t,i){if(r._busy||!r._csrf)throw new Error("Wait for the current operation to finish, then try again.");r._busy=!0;try{await r.appState.mutate(()=>t(e),i)}finally{await r._load(),r._busy=!1;let s=r._queue.splice(0);s.length>0&&r._upload(s)}}async function ui(r,e,t,i){if(e.length!==0&&(r._queue.push(...e),!r._busy)){r._busy=!0,r._error=null;try{for(;r._queue.length>0;){let s=r._queue.shift();await r.appState.mutate(()=>t(s),i)}}catch(s){r._queue=[],r._error=`Upload failed: ${String(s?.message??s)}`}finally{r._busy=!1,await r._load({preserveError:!0})}}}var hi=`.local-import-toggle{flex-shrink:0;margin-block:calc(-.25rem - 1px);margin-left:auto;padding:.25rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:transparent;color:var(--muted);font:inherit;font-size:.75rem;line-height:1.5}.local-import-toggle:hover,.local-import-toggle[aria-expanded=true]{color:var(--text);background:rgb(from var(--text) r g b / .06)}.local-import-panel{display:grid;gap:.8rem;padding:1rem;margin-bottom:1.25rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:rgb(from var(--accent) r g b / .025)}.local-import-copy strong{font-size:.82rem;font-weight:600}.local-import-copy p,.local-import-message{margin:.3rem 0 0;color:var(--muted);font-size:.75rem;line-height:1.5}.local-import-controls{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}managed-local-item-selector{flex:1 1 16rem;min-width:0}.local-import-controls button,.local-import-message button{padding:.35rem .7rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:transparent;color:var(--text);font:inherit;font-size:.75rem;line-height:1.5}.local-import-controls .local-import-submit{border-color:rgb(from var(--accent) r g b / .4);background:rgb(from var(--accent) r g b / .1);color:var(--accent)}.local-import-controls .local-import-close{color:var(--muted)}.local-import-panel button:disabled,.local-import-toggle:disabled{opacity:.5}.local-import-panel button:focus-visible,.local-import-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.local-import-message.error{color:var(--critical)}
66
+ `;var T=`:host{display:block;position:relative;padding:0 clamp(1rem,3vw,3rem) 3rem;color:var(--text);container-type:inline-size;font-family:var(--sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);font-size:.875rem;line-height:1.5;--panel:color-mix(in srgb, var(--bg) 50%, var(--surface));--panel-hover:color-mix(in srgb, var(--text) 3%, var(--panel))}*,*:before,*:after{box-sizing:border-box}button,summary,select,label,legend,h1,h2,h3,.section-heading,.ui-hint,.page-intro>.intro,.count,.result-count,.repository-count,.breadcrumb-separator,.list-head,.report-list-head,.history-head,.drop-copy,.local-import-copy,.location-field>span,.empty:not(.error,[role=alert]),.msg:not(.error,[role=alert]),.local-import-message:not(.error,[role=status]),.data-empty,.revision-empty{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}.wrap{width:100%;max-width:76rem;margin:0 auto}.manage-nav button{flex:0 0 auto;position:relative;min-height:3.7rem;padding:.9rem 0;border:0;border-radius:0;color:var(--muted);background:none;font-size:.8rem;font-weight:500;white-space:nowrap}.manage-nav button:hover,.manage-nav button[aria-current=page]{color:var(--text)}.manage-nav button[aria-current=page]:after{content:"";position:absolute;bottom:0;inset-inline:0;height:2px;background:var(--accent);border-radius:var(--ui-radius, 2px)}.manage-nav button:focus-visible{outline-offset:-3px}.head{display:flex;align-items:center;flex-wrap:wrap;gap:.7rem;margin:0 0 .5rem}h1,.head h1{margin:0;font-size:1.9rem;font-weight:600;letter-spacing:-.045em;line-height:1.2}.count{display:inline-flex;align-items:center;justify-content:center;min-width:1.6rem;padding:.12rem .5rem;border:1px solid var(--border);border-radius:6px;color:var(--muted);background:var(--surface);font-size:.73rem;font-weight:500;font-variant-numeric:tabular-nums}button,input,select{font:inherit}button,select,input[type=checkbox]{cursor:default}button,a,input,select{-webkit-app-region:no-drag}button,a{transition:background .15s,color .15s,border-color .15s}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button:disabled,select:disabled{opacity:.45}input:not([type=checkbox]),select{min-width:0;min-height:2.25rem;padding:.45rem .65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);background:var(--bg);color:var(--text);font-size:.8rem}input::placeholder{color:var(--muted)}input[type=checkbox]{accent-color:var(--accent)}.btn,.drop-browse{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:2.25rem;height:auto;padding:.45rem .8rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px);background:var(--surface);color:var(--text);font-size:.8rem;font-weight:500;text-decoration:none;white-space:nowrap}.btn:hover:not(:disabled),.drop-browse:hover:not(:disabled){background:var(--surface-active);border-color:var(--muted)}.btn.primary,.drop-browse{color:var(--bg);background:var(--accent);border-color:var(--accent)}.btn.primary:hover:not(:disabled),.drop-browse:hover:not(:disabled){background:var(--accent);filter:brightness(1.08)}.btn svg,.icon-btn svg{width:1rem;height:1rem}.icon-btn{width:2rem;height:2rem}.avatar{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--bg));border:1px solid color-mix(in srgb,var(--accent) 16%,var(--border))}.breadcrumb{display:flex;align-items:center;flex-basis:100%;gap:.4rem;margin-bottom:.8rem}.breadcrumb-manage{padding:.1rem 0;border:0;background:transparent;color:var(--muted);font-size:.78rem}.breadcrumb-manage:hover{color:var(--text)}.breadcrumb-separator{color:var(--muted)}.msg{margin:1rem 0;padding:1.1rem 1.25rem;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);color:var(--muted);font-size:.85rem}.msg.error{color:var(--critical);border-color:color-mix(in srgb,var(--critical) 35%,var(--border))}.empty{padding:3.5rem 1.5rem;border:1px dashed var(--border);border-radius:var(--ui-radius, 10px);color:var(--muted);text-align:center}.empty strong{display:block;margin-bottom:.4rem;color:var(--text);font-size:.95rem;font-weight:500}.empty p{margin:0;font-size:.85rem}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@container (max-width: 35rem){.drop-copy>span{display:none}.manage-nav{gap:1.2rem;margin-bottom:1.75rem}.manage-nav button{min-height:3.25rem}h1,.head h1{font-size:1.65rem}.intro{margin-bottom:1.5rem}}@media(prefers-reduced-motion:reduce){button,a{transition:none}}.collection-toolbar input{flex:1;max-width:26rem;min-width:10rem}.collection-toolbar select{min-width:10rem}.result-count{text-align:right;white-space:nowrap;margin-left:auto;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}@container (max-width: 35rem){.collection-toolbar input{flex-basis:100%;max-width:none}}.manage-nav{display:flex;gap:1.35rem;align-items:stretch;overflow-x:auto;scrollbar-width:thin;border-bottom:1px solid var(--border);margin-bottom:1.5rem;padding:0 .1rem}.intro{margin:0 0 1.25rem;max-width:46rem;color:var(--muted);font-size:.875rem;line-height:1.65}.collection-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-bottom:.85rem}.page-intro{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem 1rem;margin-bottom:1.25rem}.page-intro .intro{margin:0}a{cursor:default}.loading-rows{border:1px solid var(--border);border-radius:var(--ui-radius, 10px);overflow:hidden}.loading-row{display:grid;align-content:center;gap:.6rem;min-height:4.25rem;padding:.85rem 1rem}.loading-row+.loading-row{border-top:1px solid var(--border)}.loading-row span{width:40%;height:.65rem;border-radius:3px;background:color-mix(in srgb,var(--muted) 15%,transparent)}.loading-row span+span{width:65%;height:.5rem}.drop-card{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;padding:.7rem .85rem;border:1px dashed color-mix(in srgb,var(--muted) 35%,var(--border));border-radius:var(--ui-radius, 8px);background:var(--panel)}.drop-icon{display:grid;place-items:center;flex-shrink:0;width:1.8rem;height:1.8rem;color:var(--muted)}.drop-icon svg{width:1.1rem;height:1.1rem}.drop-copy{min-width:0;display:flex;align-items:baseline;flex-wrap:wrap;gap:.2rem .6rem}.drop-copy strong{font-size:.8rem;font-weight:500}.drop-copy>span{color:var(--muted);font-size:.75rem}.drop-browse{min-width:7rem;margin-left:auto;flex-shrink:0}
67
+ `;var kn=`.home-section{margin-top:1.1rem;margin-bottom:2rem}.section-heading{display:flex;align-items:baseline;gap:1rem;margin-bottom:.85rem}.section-heading h2{margin:0;font-size:.86rem;font-weight:600}.section-heading>span{color:var(--muted);font-size:.75rem}.pages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}.page{display:flex;flex-direction:column;gap:.85rem;padding:1.35rem;border:1px solid var(--border);border-radius:var(--ui-radius, 12px);color:var(--text);background:var(--panel);text-align:left;font:inherit}.page:hover{background:var(--panel-hover);border-color:color-mix(in srgb,var(--muted) 60%,var(--border))}.page-top{display:flex;align-items:center;gap:.75rem;width:100%}.page-icon{display:grid;place-items:center;flex-shrink:0;width:2.5rem;height:2.5rem;border:1px solid color-mix(in srgb,var(--accent) 16%,var(--border));border-radius:var(--ui-radius, 9px);background:color-mix(in srgb,var(--accent) 7%,var(--panel));color:var(--accent)}.page-bundle .page-icon{color:var(--green);border-color:color-mix(in srgb,var(--green) 18%,var(--border));background:color-mix(in srgb,var(--green) 6%,var(--panel))}.page-scan .page-icon{color:var(--scan-icon-color, var(--yellow));border-color:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 18%,var(--border));background:color-mix(in srgb,var(--scan-icon-color, var(--yellow)) 6%,var(--panel))}:host-context(body.theme-light) .page-scan .page-icon{--scan-icon-color: #bf8700}:host-context(body.theme-green) :is(.page-bundle,.page-scan) .page-icon,:host-context(body.theme-pink) :is(.page-bundle,.page-scan) .page-icon{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 16%,var(--border));background:color-mix(in srgb,var(--accent) 7%,var(--panel))}.page-icon svg{width:1.2rem;height:1.2rem}.arrow{display:flex;margin-left:auto;flex-shrink:0;color:var(--muted)}.arrow svg{width:1rem;height:1rem}.page:hover .arrow{color:var(--text)}.page-copy{display:grid;gap:.45rem}.page>.page-copy{margin-inline-start:3.25rem}.page-copy strong,.page-title{font-size:1rem;font-weight:600;letter-spacing:-.015em}.page-copy>span{color:var(--muted);font-size:.8rem;line-height:1.65}.workspace-pages .page{gap:.85rem;padding:1.2rem 1.35rem}.workspace-pages .page-icon{width:2rem;height:2rem;color:var(--muted);background:transparent;border-color:var(--border)}.workspace-pages .page-title{font-size:.9rem}.workspace-pages .page-copy{margin-inline-start:2.75rem}.history-link{display:flex;align-items:center;gap:1rem;width:100%;padding:1.25rem 0;border:0;border-top:1px solid var(--border);text-align:left;color:var(--text);background:transparent}.history-link>.page-icon{color:var(--muted);background:transparent;border-color:var(--border)}.history-link .page-copy strong{font-size:.85rem}.history-cta{display:flex;align-items:center;gap:.6rem;flex-shrink:0;margin-left:auto;color:var(--muted);font-size:.78rem}.history-cta svg{width:1rem;height:1rem}.history-link:hover .history-cta{color:var(--accent)}@container (max-width: 48rem){.pages{grid-template-columns:1fr;gap:.65rem}.page,.workspace-pages .page{gap:.65rem;padding:1.15rem}.page-top .arrow{display:none}.workspace-pages .page-icon{width:2.5rem;height:2.5rem}.workspace-pages .page-copy{margin-inline-start:3.25rem}.page-copy{gap:.2rem}.page-copy strong,.page-title{font-size:.95rem}.section-heading>span{display:none}.history-cta{font-size:0}}
68
+ `;var Sn=`.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin-bottom:.9rem}.toolbar input{flex:2 1 12rem}.toolbar select{flex:0 1 9rem}.toolbar repository-selector{flex:1 1 12rem}.toolbar user-selector{flex:1.5 1 16rem}.toolbar>*{min-width:0}.toolbar input[type=search],.toolbar select,.toolbar .btn{min-height:2rem;padding:.28rem .5rem;border-radius:var(--ui-radius, 5px)}.history{overflow-x:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--panel)}.row,.history-head{display:grid;grid-template-columns:4.7rem minmax(16rem,1fr) minmax(12rem,1fr) 12rem;align-items:center;gap:.85rem;min-width:52rem;padding:.45rem .85rem}.history-head{background:rgb(from var(--text) r g b / .025);color:var(--muted);font-size:.7rem}.row{border-top:1px solid var(--border);min-height:2.35rem}.row:hover{background:var(--panel-hover)}.kind{display:inline-flex;align-items:center;justify-content:center;width:fit-content;padding:.05rem .35rem;border:1px solid var(--border);border-radius:4px;color:var(--muted);font-size:.65rem;text-transform:capitalize}.kind.triage{color:var(--accent);border-color:rgb(from var(--accent) r g b / .25);background:rgb(from var(--accent) r g b / .06)}.kind.upload{color:var(--green);border-color:rgb(from var(--green) r g b / .25);background:rgb(from var(--green) r g b / .06)}.kind.visibility{color:var(--yellow);border-color:rgb(from var(--yellow) r g b / .25);background:rgb(from var(--yellow) r g b / .06)}.activity-description,.detail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem}.actor{color:var(--text);font-weight:500}.action,.detail{color:var(--muted)}.history-time{display:flex;align-items:center;gap:.35rem;color:var(--muted);font-size:.7rem;white-space:nowrap;font-variant-numeric:tabular-nums}.history .empty{border:0;margin:0}.pagination{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem;margin-top:1rem;color:var(--muted);font-size:.75rem}.pagination>span:first-child{margin-right:auto}
69
+ `;var Cn=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:var(--ui-radius, 5px);color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.list-head{color:var(--muted);font-size:.7rem;font-weight:500;min-height:2.25rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.users{list-style:none;margin:0;padding:0}.users li+li{border-top:1px solid var(--border)}.who{display:grid;gap:.15rem;min-width:0}.name-text,.login{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login{color:var(--muted);font-size:.75rem}.last-seen time,.last-activity time{color:var(--text)}.activity-link{display:block;min-width:0;padding:.15rem .2rem;border:0;border-radius:var(--ui-radius, 4px);color:inherit;background:transparent;text-align:left}.activity-link:hover{color:var(--accent);background:rgb(from var(--accent) r g b / .08)}.you{padding:.05rem .35rem;border-radius:4px;color:var(--accent);background:rgb(from var(--accent) r g b / .1);font-size:.75rem;font-weight:500}.permission-granted{color:var(--accent)}.permission-denied{color:var(--muted)}.no-team{color:var(--muted);font-size:.75rem}.access{display:flex;align-items:center;min-width:0}.role{width:100%;height:auto;font-size:.78rem}.self-note{display:flex;align-items:center;gap:.5rem;margin:1rem 0;color:var(--muted);font-size:.75rem}.users li:hover{background:var(--panel-hover)}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:1.85rem;height:1.85rem;border-radius:50%;overflow:hidden;font-size:.85rem;font-weight:600}.directory{border:1px solid var(--border);border-radius:var(--ui-radius, 11px);overflow:hidden;background:var(--panel);overflow-x:auto}.list-head,.users{min-width:49rem}.list-head,.users li{display:grid;grid-template-columns:minmax(11rem,1fr) minmax(14rem,1.2fr) 6.2rem 6.2rem 6.5rem;gap:.7rem;padding:.5rem .85rem;align-items:center}.users li{padding-top:.6rem;padding-bottom:.6rem}.person{display:flex;align-items:center;gap:.65rem;min-width:0}.name{display:flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:500}.last-seen,.last-activity{display:grid;gap:.08rem;color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums}.memberships{display:grid;gap:.1rem;min-width:0}.team-access{display:flex;gap:.2rem .5rem;min-width:0;font-size:.7rem;line-height:1.4;align-items:center;flex-wrap:nowrap}.team-access strong{display:inline-flex;align-items:center;gap:.25rem;color:var(--text);font-weight:500;min-width:0;max-width:8rem}.team-access strong svg{width:.8rem;height:.8rem;flex-shrink:0;color:var(--muted)}.team-access strong span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-perms{display:inline-flex;flex-wrap:nowrap;gap:.45rem;font-size:inherit;flex-shrink:0}
70
+ `;var En=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:var(--ui-radius, 5px);color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:2rem;height:2rem;border-radius:50%;overflow:hidden;background:var(--surface-active);color:var(--muted);font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.8rem;font-weight:600;user-select:none}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin:1.5rem 0 1.65rem}.repository-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;margin-left:auto;margin-block:calc(-.45rem - 1px)}.breadcrumb{flex-wrap:wrap}.breadcrumb .breadcrumb-current{margin:0;color:var(--text);font-size:.85rem;font-weight:500}.public-repository-form{padding:1rem;margin:-1rem 0 1.5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--panel)}.public-repository-form .confirm-field{margin:0}.search{flex:1 1 14rem;max-width:25rem;margin-right:auto}.search input{width:100%}.show-all,.show-all-paper{align-items:center;gap:.5rem;white-space:nowrap;font-size:.78rem}.show-all{display:var(--switch-button-display, inline-flex)}.show-all-paper{display:var(--switch-checkbox-display, none);& input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent)}}.show-all input{appearance:none;width:2rem;height:1.15rem;margin:0;padding:2px;border:1px solid var(--border);border-radius:var(--ui-radius, 1rem);background:var(--surface-active)}.show-all input:before{content:"";display:block;width:.775rem;height:.775rem;border-radius:50%;background:var(--muted)}.show-all input:checked{border-color:var(--accent);background:var(--accent)}.show-all input:checked:before{transform:translate(.85rem);background:var(--bg)}.show-all input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.repository-count{margin:-.8rem 0 .6rem;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}.repository-browser{display:flex;overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--panel)}.organization-list{flex:0 0 12rem;padding:.4rem;border-right:1px solid var(--border);background:rgb(from var(--bg) r g b / .25)}.organization{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem;border:0;border-radius:var(--ui-radius, 4px);color:var(--text);background:transparent;text-align:left;font-size:.76rem;cursor:default}.organization:hover{background:rgb(from var(--text) r g b / .05)}.organization[aria-pressed=true]{color:var(--accent);background:rgb(from var(--accent) r g b / .1)}.organization-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organization-count{color:var(--muted);font-size:.7rem;font-variant-numeric:tabular-nums}.repo-results{flex:1;min-width:0}.organization-list,.repo-results{max-height:min(65vh,40rem);overflow:auto;overscroll-behavior:contain}.repo-group+.repo-group{border-top:1px solid var(--border)}.owner-head{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:.6rem;margin:0;padding:.55rem .85rem;color:var(--muted);background:var(--panel);font-size:.8rem;font-weight:500}.owner-icon{display:grid;place-items:center;width:1.6rem;height:1.6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--surface);text-transform:uppercase;font-size:.75rem}.repos{margin:0;padding:0;list-style:none}.repos li+li{border-top:1px solid var(--border)}button.repo-row{border:0;background:transparent;color:var(--text);cursor:default}button.repo-row:hover{background:var(--surface-active)}button.repo-row:focus-visible{outline-offset:-2px}.btn.connect-app{min-height:1.9rem;padding:.3rem .6rem;font-size:.72rem}.repo-icon{width:1.15rem;height:1.15rem;flex-shrink:0;color:var(--muted)}.repo-meta:before{content:none}.arrow{width:1rem;height:1rem;flex:0 0 auto;color:var(--muted)}.connected{display:inline-flex;align-items:center;gap:.25rem;flex:0 0 auto;color:var(--muted);font-size:.75rem;white-space:nowrap}.connected svg{width:.85rem;height:.85rem}.access-note{display:flex;align-items:center;gap:.85rem;padding:.85rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--ui-radius, 8px)}.access-note p{flex:1;margin:0;color:var(--muted);font-size:.78rem;line-height:1.5}a.btn{color:var(--text);text-decoration:none;cursor:default}.empty{padding:2.5rem 1rem;text-align:center}.empty strong{display:block;margin-bottom:.4rem;font-size:.9rem;font-weight:500}.empty p{margin:0;color:var(--muted);font-size:.8rem}.loading{min-height:8rem;display:grid;place-items:center;color:var(--muted);font-size:.8rem}.section{margin-top:1.75rem;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);overflow:hidden;background:var(--panel)}.section h2{margin:0;padding:1rem 1.25rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025);font-size:.85rem;font-weight:600}.settings-row{display:flex;align-items:center;gap:1rem;padding:1.25rem}.settings-copy{flex:1;min-width:0}.settings-copy strong{font-size:.83rem;font-weight:500}.settings-copy p{margin:.25rem 0 0;color:var(--muted);font-size:.76rem;line-height:1.5}.settings-row+.settings-row{border-top:1px solid var(--border)}.btn.danger,.error{color:var(--critical, #e5534b)}.status-line{display:inline-flex;align-items:center;gap:.35rem;color:var(--muted);font-size:.75rem}.status-line.inactive{color:var(--warning, #d19a24)}.data-section{margin-top:1.5rem}.data-section h2{margin:0 0 .5rem;font-size:.85rem;font-weight:500}.data-list{margin:0;padding:0;list-style:none;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);overflow:hidden}.data-list li{display:flex;align-items:baseline;gap:.75rem;padding:.85rem 1rem;font-size:.8rem}.data-list li+li{border-top:1px solid var(--border)}.data-list strong{min-width:0;overflow-wrap:anywhere;font-weight:500}.data-list span{margin-left:auto;color:var(--muted);font-size:.75rem;white-space:nowrap}.data-empty{margin:0;color:var(--muted);font-size:.75rem}.dialog-backdrop{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:1rem;background:#000000a6}.dialog{width:min(40rem,100%);max-height:calc(100vh - 3rem);overflow:auto;padding:1.5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 12px);background:var(--bg);box-shadow:0 1rem 3rem #00000059}.dialog.small{width:min(28rem,100%)}.dialog h2{margin:0;font-size:1.05rem;font-weight:600;overflow-wrap:anywhere}.dialog-copy{margin:.55rem 0 1rem;color:var(--muted);font-size:.78rem;line-height:1.5}.dialog-data{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin:0 0 1rem}.dialog-data section{min-width:0;padding:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 7px)}.dialog-data h3{margin:0 0 .4rem;font-size:.75rem;font-weight:600}.dialog-data ul{max-height:9rem;overflow:auto;margin:0;padding-left:1rem;color:var(--muted);font-size:.75rem}.dialog-data li{margin:.2rem 0;overflow-wrap:anywhere}.confirm-line{display:flex;align-items:flex-start;gap:.5rem;margin:.7rem 0;color:var(--text);font-size:.76rem;line-height:1.4}.confirm-line input{flex:0 0 auto;margin-top:.15rem;accent-color:var(--accent)}.confirm-line span{min-width:0}.confirm-field{display:grid;gap:.5rem;margin-top:1.1rem;color:var(--text);font-size:.78rem;line-height:1.5;overflow-wrap:anywhere}.confirm-name{width:100%;min-width:0;padding:.45rem .55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font:inherit;font-size:.78rem}.dialog-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;margin-top:1rem}.dialog-actions .danger{color:var(--critical, #e5534b);border-color:rgb(from var(--critical, #e5534b) r g b / .4)}@container (max-width: 35rem){.organization-list{flex-basis:9rem}.intro{margin-left:0}.search{flex-basis:100%;max-width:none}.access-note,.settings-row{flex-wrap:wrap}.access-note p,.settings-copy{flex-basis:100%}.head h1{font-size:1.35rem}.repo-copy{gap:.35rem}.repo-meta{max-width:100%}.dialog-data{grid-template-columns:1fr}}.repo-name{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.83rem;font-weight:500}.repo-row{display:flex;align-items:center;gap:.75rem;width:100%;min-height:2.8rem;padding:.55rem .85rem;text-align:left}.repo-copy{display:flex;flex-direction:row;align-items:center;gap:.85rem;flex:1;min-width:0}.repo-meta{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.72rem;margin-left:auto}@container (max-width: 35rem){.repo-copy{flex-direction:column;align-items:flex-start;gap:.1rem}.repo-meta{margin-left:0}}.data-section .dialog-data section{height:12rem;display:flex;flex-direction:column;align-items:flex-start}.data-section .dialog-data ul{width:100%;min-height:0;max-height:none}.access-action{flex-shrink:0}@container (max-width: 28rem){.repository-browser{flex-direction:column}.organization-list{display:flex;flex:0 0 auto;gap:.25rem;border-right:0;border-bottom:1px solid var(--border)}.organization{flex:0 0 auto;width:auto;max-width:12rem}}
71
+ `;var Rn=`.report-logo.brand-deepview{--brand-bg:#2563eb;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-claude{--brand-bg:#d97757;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-codex{--brand-bg:#fff;--brand-fg:#000;background:var(--brand-bg)}.report-logo.brand-vercel{--brand-bg:#000;--brand-fg:#fff;background:var(--brand-bg)}.report-logo.brand-piolium{--brand-bg:#fbb829;--brand-fg:#1c1b19;background:var(--brand-bg)}.report-logo .fg{fill:var(--brand-fg)}.report-logo .bg{fill:var(--brand-bg)}.report-logo.brand-codex .bg,.report-logo.brand-vercel .bg{stroke:var(--brand-fg);stroke-width:.5}.dropzone{position:absolute;inset:.6rem;z-index:5;display:grid;place-items:center;border:2px dashed var(--accent);border-radius:var(--ui-radius, 10px);background:rgb(from var(--bg) r g b / .94);color:var(--accent);font-weight:600;pointer-events:none}.report-list{overflow-x:auto;border:1px solid var(--border);border-radius:var(--ui-radius, 9px);background:var(--panel)}.reports{min-width:61rem;margin:0;padding:0;list-style:none}.report-list-head,.report-main{display:grid;grid-template-columns:1.5rem minmax(12rem,1fr) minmax(8rem,.6fr) 8rem 6.5rem 4.5rem 4.1rem 9rem;align-items:center;gap:.7rem;padding:.35rem .85rem}.report-list-head{min-width:61rem;min-height:2.25rem;color:var(--muted);background:rgb(from var(--text) r g b / .025);border-bottom:1px solid var(--border);font-size:.7rem}.report-heading{grid-column:1 / 3}.actions-heading{text-align:right;padding-right:.25rem}.report+.report{border-top:1px solid var(--border)}.report-main{min-height:2.7rem}.report-main:hover{background:var(--panel-hover)}.report-logo{display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:5px;overflow:hidden}.report-logo svg{width:1.1rem;height:1.1rem}.report-name{color:var(--text);font-size:.8rem;font-weight:500}.report-name,.report-location,.report-meta{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.report-location{color:var(--muted);font-size:.7rem}.report-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums}.report-uploader{color:var(--text);opacity:.8;font-size:.72rem}.report-size,.size-heading{padding-right:.65rem;text-align:right}.status{display:inline-flex;align-items:center;gap:.3rem;width:fit-content;padding:.1rem .4rem;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:.65rem}.status:before{content:"";width:.25rem;height:.25rem;border-radius:50%;background:currentcolor}.status.visible{color:var(--green);border-color:rgb(from var(--green) r g b / .2);background:rgb(from var(--green) r g b / .06)}.report-actions{display:flex;justify-content:flex-end;align-items:center;gap:.1rem}.report-actions .action,.action-spacer{display:grid;place-items:center;flex-shrink:0;width:1.7rem;height:1.8rem;padding:.3rem;border:1px solid transparent;border-radius:var(--ui-radius, 5px);background:transparent;color:var(--muted)}.action svg{width:.95rem;height:.95rem}.report-actions .action:hover:not(:disabled),.report-actions .action[aria-expanded=true]{color:var(--text);background:var(--surface-active);border-color:var(--border)}.report-actions .action.danger:hover{color:var(--critical);background:rgb(from var(--critical) r g b / .08)}.preview{height:20rem;border-top:1px solid var(--border);padding:.85rem}.preview pre{height:100%;overflow:auto;margin:0;padding:.85rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg);color:var(--text);font:.75rem/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.preview-loading{color:var(--muted);font-size:.8rem}
72
+ `;var An=`button,select{font:inherit;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.dropzone{position:absolute;inset:.6rem;z-index:5;display:grid;place-items:center;border:2px dashed var(--accent);border-radius:var(--ui-radius, 10px);background:rgb(from var(--bg) r g b / .94);color:var(--accent);font-size:1rem;font-weight:600;pointer-events:none}.summary{min-height:1.5em;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}.unassigned{color:var(--high, #d97732)}.bundles{margin:0;padding:0;list-style:none}.bundle-group-head strong{min-width:0;overflow-wrap:anywhere;font-size:.8rem;font-weight:500}.bundle-group-head span{color:var(--muted);font-size:.75rem}.bundle-row+.bundle-row{border-top:1px solid var(--border)}.bundle-icon svg,.bundle-icon img{width:1rem;height:1rem}.action{display:grid;place-items:center;width:2rem;height:2rem;padding:.45rem;border:1px solid transparent;border-radius:var(--ui-radius, 6px);background:transparent;color:var(--muted);text-decoration:none}.action svg{width:1rem;height:1rem}.action:hover{color:var(--text);border-color:var(--border);background:var(--surface)}.action.danger:hover{color:var(--critical, #e5534b)}.msg{padding:1rem 0;margin:0;color:var(--muted);font-size:.8rem}.msg.error{color:var(--critical, #e5534b)}.bundle-group{overflow:hidden;border:1px solid var(--border);border-radius:var(--ui-radius, 10px);background:var(--panel);overflow-x:auto}.bundle-group-head,.bundles{min-width:52rem}.bundle-row{display:grid;grid-template-columns:minmax(12rem,1fr) 8rem 6.5rem 4.5rem minmax(8rem,12rem) 6.4rem;align-items:center;gap:.85rem;padding:.35rem .85rem}.bundle-location{display:block;min-width:0;grid-column:auto;padding-left:0;color:var(--muted);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:.2rem;grid-column:auto;grid-row:auto}.bundle-group-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .85rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.bundle-groups{display:grid;gap:.85rem}.identity{display:flex;align-items:center;min-width:0;gap:.65rem}.bundle-icon{display:grid;place-items:center;width:1.6rem;height:1.6rem;flex-shrink:0;border:0;border-radius:var(--ui-radius, 7px);background:transparent;color:var(--muted)}.filename{min-width:0;font-size:.8rem;font-weight:500;overflow-wrap:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta{min-width:0;color:var(--muted);font-size:.65rem;line-height:1.5;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bundle-size{padding-right:.65rem;text-align:right}.bundle-actions{display:flex;align-items:center;gap:.5rem}.bundle-open{padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left}.bundle-open:hover{color:var(--accent)}.bundle-row>.location-editor{grid-column:1 / -1}.location-field-header{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;min-width:0;color:var(--muted);font-size:.75rem}.location-field-header>:first-child{flex-shrink:0}.location-metadata{display:flex;align-items:baseline;gap:.25rem;min-width:0;padding:0;border:0;color:inherit;background:none;font:inherit}.location-metadata>.ui-hint{flex-shrink:0}.location-metadata-value{min-width:0;user-select:text;-webkit-user-select:text;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.location-metadata:hover:not(:disabled){color:var(--text)}.location-origin{grid-column:1 / -1;margin:0;color:var(--muted);font-size:.72rem;overflow-wrap:anywhere}.origin-retry{padding:0;border:0;background:none;color:var(--accent);font:inherit}.breadcrumb{flex-wrap:wrap}.breadcrumb .breadcrumb-current{margin:0;color:var(--text);font-size:.85rem;font-weight:500}
73
+ `;var mi=`.location-editor{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,.7fr) auto;align-items:end;gap:.75rem;padding:.85rem;border-top:1px solid var(--border);background:rgb(from var(--bg) r g b / .35)}.location-field{display:grid;gap:.35rem;min-width:0}.location-field>span,.location-field label{color:var(--muted);font-size:.75rem}.location-field input{width:100%}.location-field input[type=text],.location-actions .action{height:2rem;min-height:2rem;padding-block:.28rem}.location-actions{display:flex;gap:.4rem}.location-actions .action{width:auto;padding-inline:.65rem;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);color:var(--text);background:var(--bg);font-size:.78rem}
74
+ `;var Mn=`.icon-btn{display:inline-grid;place-items:center;flex:0 0 auto;width:1.8rem;height:1.8rem;padding:0;border:1px solid transparent;border-radius:var(--ui-radius, 5px);color:var(--muted);background:transparent}.icon-btn:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.icon-btn.danger:hover:not(:disabled){color:var(--critical, #e5534b);background:rgb(from var(--critical, #e5534b) r g b / .1)}.icon-btn svg,.btn svg{width:.9rem;height:.9rem}.avatar{position:relative;display:inline-grid;place-items:center;flex:0 0 auto;width:2rem;height:2rem;border-radius:50%;overflow:hidden;background:var(--surface-active);color:var(--muted);font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.8rem;font-weight:600;user-select:none}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar img.broken{display:none}.create-team{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.new-name{flex:1 1 14rem;width:16rem;max-width:24rem}.access-note{flex:1 1 24rem;margin:0 0 0 auto;color:var(--muted);font-size:.75rem;text-align:right}.team .icon-btn{width:1.8rem;height:1.8rem}.team{border:1px solid var(--border);border-radius:var(--ui-radius, 8px);margin-bottom:.85rem;background:var(--panel);overflow:hidden}.team-head{display:flex;align-items:center;gap:.5rem;min-height:2.75rem;padding:.4rem .85rem;border-bottom:1px solid var(--border);background:rgb(from var(--text) r g b / .025)}.team-icon{display:grid;place-items:center;flex:0 0 auto;width:1.25rem;height:1.25rem;color:var(--muted)}.team-icon svg{width:1.05rem;height:1.05rem}.team-name{margin:0;min-width:0;font-size:.875rem;font-weight:600;letter-spacing:-.015em;overflow-wrap:anywhere}.team-actions{display:flex;gap:.25rem;margin-left:auto}.rename-input{flex:1;max-width:22rem;width:0}.team-body{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.sub{min-width:0;padding:.75rem .85rem}.sub+.sub{border-left:1px solid var(--border)}.sub-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .4rem;font-size:.75rem;font-weight:600}.sub-title .count{height:1.1rem;min-width:1.1rem;font-size:.75rem;padding:0 .3rem}.links{list-style:none;margin:0 0 .5rem;padding:0}.links li{display:flex;align-items:center;gap:.5rem;min-height:2.25rem;padding:.25rem 0}.links li+li{border-top:1px solid var(--border)}.repo-icon{flex:0 0 auto;color:var(--muted);width:.95rem;height:.95rem}.repo-copy{display:flex;min-width:0;flex-direction:column;gap:.1rem}.ln{min-width:0;font-size:.8rem;font-weight:500;overflow-wrap:anywhere}.path{color:var(--muted);font-family:var(--mono);font-size:.75rem;overflow-wrap:anywhere}.repo-row .icon-btn{margin-left:auto}.links .member-row{display:grid;grid-template-columns:minmax(0,1fr) auto 1.8rem;gap:.45rem}.member{display:flex;align-items:center;gap:.45rem;min-width:0}.member .avatar{width:1.6rem;height:1.6rem;font-size:.75rem}.perms{display:flex;flex-wrap:wrap;gap:.3rem}.perm{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .3rem;border:1px solid var(--border);border-radius:4px;font-size:.7rem;color:var(--muted);user-select:none}.perm:has(:checked){color:var(--text);background:rgb(from var(--accent) r g b / .07);border-color:rgb(from var(--accent) r g b / .2)}.perm:has(:disabled){opacity:.5}.add-row{display:flex;align-items:center;gap:.5rem;padding-top:.45rem}.add-row select,.add-row repository-selector,.add-row user-selector{flex:1;width:0}.add-repo-path{flex:.75;width:0}.add-row .btn{flex:0 0 auto}.muted{color:var(--muted);font-size:.78rem;margin:.5rem 0}@container (max-width: 50rem){.access-note{flex-basis:100%;margin-left:0;text-align:left}.team-body{grid-template-columns:1fr}.sub+.sub{border-left:0;border-top:1px solid var(--border)}.add-row{max-width:36rem}}@container (max-width: 32rem){.create-team{flex-wrap:wrap}.new-name{flex:1;width:0}.team-head,.sub{padding-left:.75rem;padding-right:.75rem}.add-row:has(.add-repo-sel){display:grid;grid-template-columns:minmax(0,1fr) auto}.add-row .add-repo-sel{width:100%}.add-repo-path{grid-column:1 / -1;grid-row:2;width:100%}}@container (max-width: 26rem){.links .member-row{grid-template-columns:minmax(0,1fr) 1.8rem}.perms{grid-row:2;padding-left:2.05rem}.member-row>.icon-btn{grid-column:2;grid-row:1}}
75
+ `;S();J();mt();Xt();var In=(r,e,t)=>{let i=new Map;for(let s=e;s<=t;s++)i.set(r[s],s);return i},er=me(class extends Q{constructor(r){if(super(r),r.type!==G.CHILD)throw Error("repeat() can only be used in text expressions")}dt(r,e,t){let i;t===void 0?t=e:e!==void 0&&(i=e);let s=[],o=[],n=0;for(let a of r)s[n]=i?i(a,n):n,o[n]=t(a,n),n++;return{values:o,keys:s}}render(r,e,t){return this.dt(r,e,t).values}update(r,[e,t,i]){let s=on(r),{values:o,keys:n}=this.dt(e,t,i);if(!Array.isArray(s))return this.ut=n,o;let a=this.ut??=[],l=[],d,h,p=0,m=s.length-1,f=0,g=o.length-1;for(;p<=m&&f<=g;)if(s[p]===null)p++;else if(s[m]===null)m--;else if(a[p]===n[f])l[f]=be(s[p],o[f]),p++,f++;else if(a[m]===n[g])l[g]=be(s[m],o[g]),m--,g--;else if(a[p]===n[g])l[g]=be(s[p],o[g]),Ge(r,l[g+1],s[p]),p++,g--;else if(a[m]===n[f])l[f]=be(s[m],o[f]),Ge(r,s[p],s[m]),m--,f++;else if(d===void 0&&(d=In(n,f,g),h=In(a,p,m)),d.has(a[p]))if(d.has(a[m])){let y=h.get(n[f]),v=y!==void 0?s[y]:null;if(v===null){let b=Ge(r,s[p]);be(b,o[f]),l[f]=b}else l[f]=be(v,o[f]),Ge(r,s[p],v),s[y]=null;f++}else Yt(s[m]),m--;else Yt(s[p]),p++;for(;f<=g;){let y=Ge(r,l[g+1]);be(y,o[f]),l[f++]=y}for(;p<=m;){let y=s[p++];y!==null&&Yt(y)}return this.ut=n,Ke(r,l),L}});ge();var pp=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"]]),up=new Map([["openai","OpenAI"],["anthropic","Anthropic"],["moonshotai","Moonshot AI"],["google","Google"],["nvidia","NVIDIA"],["qwen","Qwen"],["deepseek","DeepSeek"],["x-ai","xAI"],["z-ai","Z.ai"]]),hp=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 Ln(r){let e=r.replace(/:free$/u,"").replaceAll("_","-").split("-").filter(Boolean),t=[];for(let s=0;s<e.length;s++){let o=e[s],n=e[s+1];if(/^\d+$/u.test(o)&&/^\d+$/u.test(n??"")){t.push(`${o}.${n}`),s++;continue}let a=hp.get(o.toLowerCase());t.push(a??(/^(?:[a-z]+\d+|\d+[a-z]+)$/iu.test(o)?o.toUpperCase():o[0]?.toUpperCase()+o.slice(1)))}return t.join(" ").replace(/^GPT (\d)/u,"GPT-$1")}function Oe(r){return pp.get(r)??Ln(r.includes("/")?r.slice(r.indexOf("/")+1):r)}function bt(r){let e=r.includes("/")?r.split("/")[0]:"other";return{key:e,name:up.get(e)??(e==="other"?"Other":Ln(e))}}function Te(r){return r==="xhigh"?"Extra high":r?r[0].toUpperCase()+r.slice(1):"Unavailable"}function We(r){return r.efforts.includes("max")?"max":r.efforts.at(-1)??null}async function Ze(r,e=fetch){let t=await e("/api/admin/scan/models",{credentials:"same-origin",headers:{accept:"application/json"},signal:r});if(!t.ok)throw new Error(`HTTP ${t.status}`);let i=await t.json();return mp(i)}function mp(r){if(!Array.isArray(r?.models))throw new Error("No model catalogue returned");let e=r.models.filter(t=>typeof t?.id=="string"&&t.id.length>0).map(t=>({id:t.id,efforts:Array.isArray(t.efforts)?[...new Set(t.efforts.filter(i=>typeof i=="string"&&i.length>0))]:[]}));if(e.length===0)throw new Error("No models available");return{models:e,defaultModel:e.find(t=>t.id===r.defaultModel)?.id??e[0].id}}S();function fi(r){let e=new Map(r.map(i=>[i.id,i])),t=new Set;return r.flatMap(i=>{if(t.has(i.id))return[];let s=i.id.endsWith("-pro")?i.id.slice(0,-4):i.id,o=e.get(s),n=e.get(`${s}-pro`);return!/(?:^|\/)gpt-.+$/u.test(s)||s.endsWith("-pro")||!o||!n?[i]:(t.add(o.id),t.add(n.id),[{...o,pro:n}])})}function gi(r){return[...Map.groupBy(fi(r),t=>bt(t.id).key)].map(([t,i])=>({key:t,models:i}))}function zn(r,e){if(r.length===0)return[];let t=Math.min(r.length,Math.max(1,e)),i=r.map(d=>d.models.length*2+3),s=i.reduce((d,h)=>d+h,0),o=Math.max(...i);for(;o<s;){let d=Math.floor((o+s)/2),h=0,p=1;for(let m of i)h+m>d&&(p++,h=0),h+=m;p>t?o=d+1:s=d}let n=[],a=[],l=0;for(let[d,h]of r.entries())a.length>0&&(l+i[d]>o||r.length-d===t-n.length-1)&&(n.push(a),a=[],l=0),a.push(h),l+=i[d];return n.push(a),n}S();S();var On=c`<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>`;S();var Tn=c`<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>`;S();var Nn=c`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
76
76
  <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"/>
77
77
  <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"/>
78
78
  <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"/>
79
79
  <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"/>
80
80
  </svg>
81
- `;S();var Mo=c`<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>`;S();var qr=c`<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>`;S();var Io=c`<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>`;S();var Lo=c`<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>`;S();var zo=c`<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>`;S();var To=c`<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>`;S();var Oo=c`<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>`;var No={anthropic:Ro,deepseek:Eo,google:Ao,moonshot:qr,moonshotai:qr,nvidia:Io,openai:Lo,openrouter:zo,qwen:To,"x-ai":Mo,"z-ai":Oo},ac=c`<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 Vr(r){return Object.hasOwn(No,r)?No[r]:ac}var lc=c`<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>`,Gr=class extends R{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=A`:host{display:block;min-width:0;container:scan-controls / inline-size}*{box-sizing:border-box}.layout{display:grid;grid-template-columns:minmax(13rem,1fr) minmax(14rem,1fr);gap:1.25rem;align-items:start}.layout.with-extra{grid-template-columns:minmax(13rem,.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: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: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{position:absolute;right:2.05rem;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;gap:.3rem;width:3.65rem;height:1.65rem;padding:.2rem .3rem;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--muted);font:inherit;font-size:.65rem;font-weight:600;cursor:default;user-select:none}.pro-toggle:hover{border-color:var(--muted);color:var(--text)}.pro-track{position:relative;flex:0 0 1.3rem;height:.8rem;border-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.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: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: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: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: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:4px;background:var(--bg);color:var(--text);font:inherit}@container scan-controls (max-width: 50rem){.layout.with-extra{grid-template-columns:minmax(13rem,1fr) minmax(14rem,1fr)}.layout.with-extra .extra{grid-column:1 / -1;align-self:start;min-height:0}}@container scan-controls (max-width: 30rem){.layout,.layout.with-extra{grid-template-columns:minmax(0,1fr);gap:1rem}.layout.with-extra .extra{grid-column:auto}}`;constructor(){super(),this.loadModels=Ue,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=e=>{e.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(e){(e.has("loadModels")||e.has("pending"))&&this.isConnected&&this._load(),e.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 e=new AbortController;this._controller=e,this._error=null;let t=!1,i=s=>{if(e.signal.aborted)return;t=!0,this._models=s.models;let o=s.models.find(n=>n.id===this.value);o?o.efforts.includes(this.effort)||this._setEffort(je(o)):this._select(s.defaultModel)};try{i(await this.loadModels(e.signal,i))}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}}_close(){this._resetMenuPosition();let e=this.renderRoot.querySelector("details");e&&(e.open=!1)}_resetMenuPosition(){this._positionRequest++;let e=this.renderRoot.querySelector(".menu");e&&delete e.dataset.positioned}_toggleMenu(e){this._resetMenuPosition(),e.currentTarget.open&&this._positionMenu()}get _selectedRow(){return Fr(this._models).find(e=>e.id===this.value||e.pro?.id===this.value)}async _positionMenu(){let e=++this._positionRequest,t=this.renderRoot.querySelector("details"),i=this.renderRoot.querySelector("summary"),s=this.renderRoot.querySelector(".menu");if(!t?.open||!i||!s)return;let o=i.getBoundingClientRect(),n=6,a=8,l=Hr(this._models),d=l.reduce((Te,J)=>Te+J.models.length,0),u=Math.min(3,l.length,Math.ceil((d+l.length*1.5)/9)),p=parseFloat(getComputedStyle(s).fontSize),m=0;for(let Te of s.querySelectorAll(".choice span, legend")){let J=document.createRange();J.selectNodeContents(Te),m=Math.max(m,J.getBoundingClientRect().width)}let f=Math.max(11*p,Math.min(18*p,m+2.5*p)),g=1.3*p+2,v=Math.max(1,Math.min(u,Math.floor((window.innerWidth-a*2-g+p)/(f+p)))),w=Math.min(v*f+(v-1)*p+g,window.innerWidth-a*2),b=Math.max(a,Math.min(o.left,window.innerWidth-w-a));if(this._menuColumns=v,await this.updateComplete,e!==this._positionRequest||!this.isConnected||!t.open)return;s.style.left=`${b}px`,s.style.width=`${w}px`,s.style.setProperty("--model-columns",v),s.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let x=s.getBoundingClientRect().height,E=window.innerHeight-o.bottom-n-a,ze=o.top-n-a,xt=E<x&&ze>E?o.top-n-x:o.bottom+n;s.style.bottom="auto",s.style.top=`${Math.max(a,Math.min(xt,window.innerHeight-x-a))}px`,s.dataset.positioned=""}_select(e,{preserveEffort:t=!1,close:i=!0}={}){let s=this._models.find(o=>o.id===e);s&&(this.value=e,this._setEffort(t&&s.efforts.includes(this.effort)?this.effort:je(s)),i&&this._close())}_selectRow(e){let t=this._selectedRow?.pro?.id===this.value;this._select(t&&e.pro?e.pro.id:e.id)}_togglePro(){let e=this._selectedRow;e?.pro&&this._select(this.value===e.pro.id?e.id:e.pro.id,{preserveEffort:!0,close:!1})}_setEffort(e){this.effort=e,this.dispatchEvent(new CustomEvent("model-change",{detail:{model:this.value,effort:e},bubbles:!0,composed:!0}))}render(){let e=this._models.find(o=>o.id===this.value);if(this.pending||!e)return c`<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?c`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?c`<div class="extra"><slot name="effort-extra"></slot></div>`:h}</div>`;let t=this._selectedRow,i=at(e.id),s=Co(Hr(this._models),this._menuColumns);return c`${this._error?c`<p class="message error" role="alert">Couldn’t refresh models: ${this._error}<button class="retry" @click="${()=>{this._load()}}">Retry</button></p>`:h}<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="${o=>{o.key==="Escape"&&(this._close(),this.renderRoot.querySelector("summary")?.focus())}}"><summary aria-labelledby="model-label selected-model" @click="${this._resetMenuPosition}"><span class="${`icon ${i.key}`}" aria-hidden="true">${Vr(i.key)}</span><span class="selected-copy"><strong id="selected-model">${ke(t.id)}</strong><small>${i.name}</small></span>${t.pro?c`<span class="pro-space" aria-hidden="true"></span>`:h}${lc}</summary><div class="menu"><div class="groups">${s.map(o=>c`<div class="provider-column">${o.map(n=>this._modelSection(n))}</div>`)}</div></div></details>${t.pro?c`<button type="button" class="pro-toggle" role="switch" aria-label="Pro model" aria-checked="${e.id===t.pro.id}" @click="${this._togglePro}"><span>Pro</span><span class="pro-track" aria-hidden="true"></span></button>`:h}</div></div>${e.efforts.length>0?this._effortSlider(e.efforts):c`<div class="field" aria-hidden="true"></div>`} ${this.hasExtra?c`<div class="extra"><slot name="effort-extra"></slot></div>`:h}</div>`}_modelSection({key:e,models:t}){return c`<fieldset><legend><span class="${`icon ${e}`}" aria-hidden="true">${Vr(e)}</span>${at(t[0].id).name}</legend>${t.map(i=>c`<label class="choice"><input type="radio" name="scan-model" value="${i.id}" .checked="${i.id===this.value||i.pro?.id===this.value}" @change="${()=>{this._selectRow(i),this.renderRoot.querySelector("summary")?.focus()}}"><span>${ke(i.id)}</span></label>`)}</fieldset>`}_effortSlider(e){let t=Math.max(0,e.indexOf(this.effort)),i=Math.max(1,e.length-1);return c`<div class="field"><div class="label"><label for="effort">Effort</label><output for="effort">${Se(e[t])}</output></div><div class="slider" style="${`--effort-fill: calc(var(--thumb-size) / 2 + (100% - var(--thumb-size)) * ${t/i})`}"><input id="effort" type="range" min="0" max="${i}" step="1" .value="${String(t)}" ?disabled="${e.length===1}" aria-valuetext="${Se(e[t])}" @input="${s=>this._setEffort(e[Number(s.target.value)])}"><div class="steps">${e.map((s,o)=>c`<button type="button" class="${`step ${s===this.effort?"active":""}`}" style="${`--step-position: ${o/i*100}%`}" aria-label="${`Set effort to ${Se(s)}`}" aria-pressed="${s===this.effort}" @click="${()=>this._setEffort(s)}">${Se(s)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",Gr);function cc(r){if(/^https?:\/\//iu.test(r)){try{let t=new URL(r),i=t.pathname.split("/").filter(Boolean);if(i.length>=2)return{owner:`${t.host}/${i[0]}`,name:i.slice(1).join("/")}}catch{}return{owner:null,name:r}}let e=/^([^\s/:]+)\/(.+)$/u.exec(r);return e?{owner:e[1],name:e[2]}:{owner:null,name:r}}var Po=r=>r.normalize("NFKC").toLocaleLowerCase(),Wr=(r,e)=>r.localeCompare(e,void 0,{numeric:!0,sensitivity:"base"}),Kr=Symbol("other repositories");function Dt(r,e="",t=null,{includeSingletonOrganizations:i=!1}={}){let s=r.map(b=>({...b,...b.special?{owner:null,name:b.label}:cc(b.label)})),o=new Map;for(let b of s)b.owner!=null&&o.set(b.owner,(o.get(b.owner)??0)+1);let n=i?1:2,a=[...o].filter(([,b])=>b>=n).toSorted(([b],[x])=>Wr(b,x)).map(([b,x])=>({value:b,name:b,count:x})),l=b=>(o.get(b.owner)??0)<n,d=s.filter(b=>!b.special&&!b.reset&&l(b)).length;d>0&&a.push({value:Kr,name:"Other",count:d});let u=a.some(b=>b.value===t)?t:null,p=Po(e.trim()).split(/\s+/u).filter(Boolean),m=b=>p.every(x=>Po(b.label).includes(x)),f=s.filter(b=>b.reset||b.special&&m(b)),g=s.filter(b=>!b.reset&&!b.special&&m(b)&&(u==null||(u===Kr?l(b):b.owner===u))),v=new Map;for(let b of g){let x=(o.get(b.owner)??0)>=n?b.owner:null;v.has(x)||v.set(x,[]),v.get(x).push(b)}let w=[...v].toSorted(([b],[x])=>b==null?1:x==null?-1:Wr(b,x)).map(([b,x])=>({label:b??(a.some(E=>E.value!==Kr)?"Other":null),organization:b!=null,options:x.toSorted((E,ze)=>Wr(E.label,ze.label))}));return{facets:a,activeFacet:u,pinned:f,sections:w,count:g.length+f.filter(b=>!b.reset).length,total:s.filter(b=>!b.reset).length,showFacets:a.length>1}}var Zr=class extends T{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 Dt(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",Zr);var Jr=class extends T{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 e=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),t=this.options.filter(i=>e.every(s=>i.label.normalize("NFKC").toLocaleLowerCase().includes(s))).toSorted((i,s)=>i.label.localeCompare(s.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:t}],facets:[],showFacets:!1,count:t.length,total:this.options.length}}};customElements.get("workspace-selector")||customElements.define("workspace-selector",Jr);S();ce();function W(r){return!Number.isFinite(r)||r<0?"\u2014":r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(1)} KiB`:r<1073741824?`${(r/1048576).toFixed(1)} MiB`:`${(r/1073741824).toFixed(1)} GiB`}function lt(r){return Array.isArray(r)?r.reduce((e,t)=>({bytes:e.bytes!=null&&Number.isFinite(t.bytes)?e.bytes+t.bytes:null,lines:e.lines!=null&&Number.isFinite(t.lines)?e.lines+t.lines:null}),{bytes:0,lines:0}):{bytes:null,lines:null}}function Yr(r){return(r??[]).filter(e=>!["resource:base64","directory"].includes(e.format))}function dc(r){return r.map(e=>{let t=["sourcemap","sourcemaps"].includes(e.kind)||e.filename.toLowerCase().endsWith(".map")?"sourcemap":"stasis",i=t==="sourcemap"?"Sourcemap":"Stasis",s=[];if(typeof e.size=="string"&&!["","\u2014"].includes(e.size)&&s.push(e.size),e.files){s.push(`${e.files.length.toLocaleString()} files`);let{lines:o}=lt(e.files);o!=null&&s.push(`${o.toLocaleString()} LoC`)}else e.summary&&(Number.isSafeInteger(e.summary.files)&&e.summary.files>=0&&s.push(`${e.summary.files.toLocaleString()} files`),Number.isSafeInteger(e.summary.lines)&&e.summary.lines>=0&&s.push(`${e.summary.lines.toLocaleString()} LoC`));return{value:e.id,label:e.filename,detail:i,format:t,secondary:s.join(" \xB7 ")}})}var Xr=class extends T{static properties={bundles:{attribute:!1}};static styles=[T.styles,A`.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(e){e.has("bundles")&&(this.options=dc(this.bundles))}optionIcon(e){return c`<span class="bundle-icon" aria-hidden="true">${e.format==="sourcemap"?M(le):c`<img src="./stasis.svg" alt="">`}</span>`}optionTitle(e){return h}choices(){let e=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),t=this.options.filter(i=>e.every(s=>`${i.label} ${i.detail}`.normalize("NFKC").toLocaleLowerCase().includes(s))).toSorted((i,s)=>i.label.localeCompare(s.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:t}],facets:[],showFacets:!1,count:t.length,total:this.options.length}}};customElements.get("bundle-selector")||customElements.define("bundle-selector",Xr);S();var ct=r=>({kind:r,sourceId:null,ids:new Set}),Qr=class extends R{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=ct("bundle"),this._link=ct("repository")}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(e){if(e.has("loadSources")){this._load();return}e.has("mode")&&this._selectOnlySource(),e.has("restore")&&this._restore(),["_sources","_merge","_link","mode","restore"].some(t=>e.has(t))&&this._notify()}get _current(){return this.mode==="merge"?this._merge:this._link}get _parents(){if(this.mode==="merge")return this._sources?.merge?.bundles??[];let e=this._sources?.link?.reports??[];return this._current.kind==="workspace"?(this._sources?.link?.workspaces??[]).filter(t=>e.some(i=>t.reports.includes(i.id))):(this._sources?.link?.repositories??[]).filter(t=>e.some(i=>i.repoIds.includes(t.id)))}get _parent(){return this._parents.find(e=>e.id===this._current.sourceId)}get _scopeOptions(){let e=this._sources?.link?.reports??[];return this._parents.map(t=>{let i=e.filter(s=>this._current.kind==="workspace"?t.reports.includes(s.id):s.repoIds.includes(t.id)).length;return{value:t.id,label:t.label,detail:`${i} ${i===1?"report":"reports"}`}})}get _inputs(){return this._parent?this.mode==="merge"?(this._sources?.merge?.results??[]).filter(e=>e.bundleId===this._parent.id):(this._sources?.link?.reports??[]).filter(e=>this._current.kind==="workspace"?this._parent.reports.includes(e.id):e.repoIds.includes(this._parent.id)):[]}get selection(){let e=this._parent;return{mode:this.mode,source:e?{kind:this._current.kind,id:e.id,label:e.label??e.filename}:null,inputs:this._loading||this._error?[]:this._inputs.filter(t=>this._current.ids.has(t.id))}}_notify(){this.dispatchEvent(new CustomEvent("report-inputs-change",{detail:this.selection,bubbles:!0,composed:!0}))}async _load(){this._controller?.abort();let e=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let t=!1,i=s=>{if(e.signal.aborted)return;let o=!t;t=!0,this._sources=s,o&&(this._merge=ct("bundle"),this._link=ct(Array.isArray(s.link?.workspaces)?"workspace":"repository")),this._selectOnlySource(),o&&this._restore(),this._loading=!1,this._notify()};try{i(this.loadSources?await this.loadSources(e.signal,i):{merge:{bundles:[],results:[]},link:{repositories:[],reports:[]}})}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}finally{e.signal.aborted||(this._loading=!1,this._notify())}}_setCurrent(e){this.mode==="merge"?this._merge=e:this._link=e}_selectSource(e){e===this._current.sourceId||!this._parents.some(t=>t.id===e)||(this._setCurrent({...this._current,sourceId:e,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.map(t=>t.id))}),this._notify())}_changeKind(e){["workspace","repository"].includes(e)&&(e==="workspace"&&!Array.isArray(this._sources?.link?.workspaces)||(e!==this._link.kind&&(this._link=ct(e)),this._selectOnlySource(),this._notify()))}_selectOnlySource(){this.mode==="link"&&this._current.sourceId==null&&this._parents.length===1&&this._selectSource(this._parents[0].id)}_toggle(e,t){if(!this._inputs.some(s=>s.id===e))return;let i=new Set(this._current.ids);t?i.add(e):i.delete(e),this._setCurrent({...this._current,ids:i}),this._notify()}_selectAll(e){this._setCurrent({...this._current,ids:new Set(e?this._inputs.map(t=>t.id):[])}),this._notify()}_restore(){let e=this.restore;if(!this._sources||e?.mode!==this.mode||!e.source)return;let t=this.mode==="merge"?"bundle":e.source.kind;this.mode==="link"&&(t==="workspace"?!Array.isArray(this._sources.link?.workspaces):t!=="repository")||(this._setCurrent({kind:t,sourceId:e.source.id,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(i=>e.inputIds.includes(i.id)).map(i=>i.id))}))}render(){let e=this.mode==="merge",t=this._inputs,i=t.filter(n=>this._current.ids.has(n.id)).length,s=Array.isArray(this._sources?.link?.workspaces),o=this._parent?e?"No scan results for this bundle.":`No saved reports in this ${this._current.kind}.`:e?"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 c`<section class="panel" aria-label="${e?"Merge scan results":"Link saved reports"}" aria-busy="${this._loading}"><div class="source">${!e&&s?c`<div class="kinds" role="radiogroup" aria-label="Report source">${[["workspace","Workspace"],["repository","Repository"]].map(([n,a])=>c`<button type="button" role="radio" aria-checked="${n===this._link.kind}" @click="${()=>this._changeKind(n)}">${a}</button>`)}</div>`:h}<div class="field">${e?c`<span>Bundle with scan results</span>`:h} ${e?c`<bundle-selector .bundles="${this._parents}" .value="${this._current.sourceId}" ?disabled="${this._loading||this._parents.length===0}" @bundle-change="${n=>this._selectSource(n.detail.value)}"></bundle-selector>`:this._current.kind==="workspace"?c`<workspace-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @workspace-change="${n=>this._selectSource(n.detail.value)}"></workspace-selector>`:c`<repository-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @repository-change="${n=>this._selectSource(n.detail.value)}"></repository-selector>`}</div></div><div class="input-results">${this._error?c`<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?c`<p class="empty" role="status">Loading report inputs…</p>`:t.length>0?c`<div class="list-head"><label><input type="checkbox" aria-label="Select all" ?disabled="${this._loading}" .checked="${i===t.length}" .indeterminate="${i>0&&i<t.length}" @change="${n=>this._selectAll(n.target.checked)}"><strong>All</strong></label><span>${i} of ${t.length} selected</span></div><div class="list">${t.map(n=>this._row(n))}</div>`:c`<p class="empty">${e&&this._parents.length===0?"No scan results available.":o}</p>`}</div></section>`}_row(e){let t=this.mode==="link"?e.appFindings:e.findings,i=[e.model?ke(e.model):null,t==null?null:`${t} ${this.mode==="link"?"app ":""}${t===1?"finding":"findings"}`,e.createdAt,e.repo?`${e.repo}${e.directory?`/${e.directory}`:""}`:null].filter(Boolean);return c`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(e.id)}" @change="${s=>this._toggle(e.id,s.target.checked)}">${M(Ar[e.analyzer]??Ar.default)}<span class="copy"><strong>${e.title??e.filename}</strong><span>${i.join(" \xB7 ")}</span></span></label>`}static styles=A`:host{display:block;min-width:0}*{box-sizing:border-box}.panel{border:1px solid var(--border);border-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: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: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",Qr);S();S();var pc=c`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,uc=c`<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>`,ei=class extends R{static properties={isolate:{type:Boolean},vertical:{type:Boolean,reflect:!0}};constructor(){super(),this.isolate=!1,this.vertical=!1}_select(e){this.isolate!==e&&(this.isolate=e,this.dispatchEvent(new CustomEvent("depth-change",{detail:{isolate:e},bubbles:!0,composed:!0})))}render(){return c`<div class="scan-depth"><div class="depth-options" role="radiogroup" aria-label="Scan depth" aria-orientation="${this.vertical?"vertical":"horizontal"}" aria-describedby="${this.vertical?h:"scan-depth-description"}">${[[!1,"List",pc],[!0,"Isolate",uc]].map(([e,t,i])=>c`<label class="depth-choice"><input type="radio" name="scan-depth" value="${e?"isolate":"list"}" .checked="${this.isolate===e}" @change="${()=>this._select(e)}"><span>${i}${t}</span></label>`)}</div>${this.vertical?h:c`<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=A`: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:8px;background:var(--bg)}.depth-options:before{content:"";position:absolute;inset:.2rem auto .2rem .2rem;width:calc((100% - .4rem)/2);border-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: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",ei);var ti=["security","generic","correctness"],hc=r=>JSON.stringify([r.mode,r.model,r.effort,r.isolate]);function Bo(r){let e=r[0];return e?.model&&r.every(t=>t.model===e.model&&t.effort===e.effort)?{model:e.model,effort:e.effort}:null}function Do(r,e){let t=e.models.find(i=>i.id===r?.model)??e.models.find(i=>i.id===e.defaultModel)??e.models[0];return t?{model:t.id,effort:t.efforts.includes(r?.effort)?r.effort:je(t)}:null}function ri(r,e){let t=e.models.find(i=>i.id===e.defaultModel)??e.models[0];return t?(r.length>0?r:[{mode:"generic",isolate:!1}]).map(i=>{let s=e.models.find(o=>o.id===i.model)??t;return{...i,mode:ti.includes(i.mode)?i.mode:"generic",model:s.id,effort:s.efforts.includes(i.effort)?i.effort:je(s),isolate:!!i.isolate}}):[]}function ii(r){let e=new Set;return r.map(t=>{let i=hc(t),s=e.has(i);return e.add(i),s})}var si=class extends R{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(e){if(e.has("loadModels")){this._load();return}e.has("value")&&this.value!==this._lastEmitted&&!this._loading?(this._setRows(this.value),this._notify()):(e.has("appModel")||e.has("appModelAutomatic"))&&!this._loading&&this._notify()}_setRows(e){this._rows=ri(e,this._catalogue).map(t=>({...t,id:t.id??++this._nextId}))}_notify(){let e=this._loading&&this._rows.length===0?this.value:this._rows.map(({id:i,...s})=>s);this._loading||this._syncAppModel();let t=!this._loading&&!this._error&&this._resolvedAppModel!=null&&e.length>0&&!ii(e).includes(!0);this._lastEmitted=e,this.dispatchEvent(new CustomEvent("regimes-change",{detail:{value:e,ready:t,appModel:this._resolvedAppModel??this.appModel,appModelAutomatic:this.appModelAutomatic},bubbles:!0,composed:!0}))}_syncAppModel(){let e=Bo(this._rows),t=Do((this.appModelAutomatic?e:null)??this.appModel??this._rows[0],this._catalogue);(this.appModel?.model!==t?.model||this.appModel?.effort!==t?.effort)&&(this.appModel=t),this._resolvedAppModel=this.appModel;let i=!!e&&e.model===t?.model&&e.effort===t?.effort;i!==this._appModelsAgree&&(this._appModelOpen=!i),this._appModelsAgree=i}_changeAppModel(e){e.model===this._resolvedAppModel?.model&&e.effort===this._resolvedAppModel?.effort||(this.appModelAutomatic=!1,this.appModel={model:e.model,effort:e.effort},this._notify())}async _load(){this._controller?.abort();let e=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let t=!1,i=s=>{e.signal.aborted||(t=!0,this._catalogue=s,this._sharedModels=()=>Promise.resolve(s),this._setRows(this._rows.length>0?this._rows:this.value),this._loading=!1,this._notify())};try{i(await this.loadModels(e.signal,i))}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}finally{e.signal.aborted||(this._loading=!1,this._notify())}}_change(e,t){let i=this._rows.find(o=>o.id===e);if(!i)return;let s=ri([{...i,...t}],this._catalogue)[0];s&&(this._rows=this._rows.map(o=>o.id===e?s:o),this._notify())}_add(){let e=this._rows.at(-1);e&&(this._rows=[...this._rows,{...e,id:++this._nextId}],this._notify())}_remove(e){this._rows.length<=1||(this._rows=this._rows.filter(t=>t.id!==e),this._notify())}render(){let e=this._loading&&this._rows.length===0,t=e?(this.value.length>0?this.value:[{mode:"generic",isolate:!1}]).map((s,o)=>({...s,id:`pending-${o}`})):this._rows,i=ii(this._rows);return c`<section aria-label="Scan regimes" aria-busy="${this._loading}"><div class="heading"><h2>Scan regimes</h2><span>${t.length} ${t.length===1?"regime":"regimes"}</span></div>${this._error?c`<p class="message" role="alert">Couldn’t load models: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:h} ${Bt(t,s=>s.id,(s,o)=>this._row(s,o,i[o],e))}<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">${i.includes(!0)?"Change or remove duplicate regimes to run the scan":"Results from these regimes will be merged"}</span></div>${e?c`<div class="app-model"><div class="app-model-placeholder">App model: Loading…</div></div>`:this._appModelRow()}</section>`}_appModelRow(){let e=this._resolvedAppModel;return e?c`<details class="app-model" .open="${D(this._appModelOpen)}" @toggle="${t=>{this._appModelOpen=t.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>${ke(e.model)}</strong></span><span class="app-model-effort">Effort: <strong>${Se(e.effort)}</strong></span></summary><div class="app-model-controls"><scan-model-picker .loadModels="${this._sharedModels}" .value="${D(e.model)}" .effort="${D(e.effort)}" @model-change="${t=>{t.stopPropagation(),this._changeAppModel(t.detail)}}"></scan-model-picker></div></details>`:h}_row(e,t,i,s=!1){return c`<div class="${`row${i?" duplicate":""}`}" ?inert="${s}" role="group" aria-label="${`Regime ${t+1}`}" aria-describedby="${i?`duplicate-${e.id}`:h}"><div class="mode" role="radiogroup" aria-label="Scan mode">${ti.map(o=>c`<label class="mode-choice"><input type="radio" name="${`regime-mode-${e.id}`}" .checked="${e.mode===o}" @change="${()=>this._change(e.id,{mode:o})}"><span>${o[0].toUpperCase()+o.slice(1)}</span></label>`)}</div><scan-model-picker .pending="${s}" .loadModels="${this._sharedModels}" .value="${D(e.model)}" .effort="${D(e.effort)}" @model-change="${o=>{o.stopPropagation(),this._change(e.id,o.detail)}}"></scan-model-picker><div class="row-actions"><scan-depth-toggle vertical .isolate="${e.isolate}" @depth-change="${o=>{o.stopPropagation(),this._change(e.id,{isolate:o.detail.isolate})}}"></scan-depth-toggle>${i?c`<span class="duplicate-label" id="${`duplicate-${e.id}`}">Duplicate regime</span>`:h}</div><button type="button" class="remove" aria-label="${`Remove regime ${t+1}`}" ?disabled="${this._rows.length===1}" @click="${()=>this._remove(e.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=A`: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: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: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: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",si);S();ce();var jo=`: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: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: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: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}}
82
- `;var fc=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Ot},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:Hs},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:Vs},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:Pe}],gc=[{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"}],bc=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],oi=class extends R{static properties={mode:{},analyzer:{},reportMode:{}};static styles=k(jo);constructor(){super(),this.mode="code",this.analyzer="generic",this.reportMode="link"}_choose(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}render(){let e=this.mode==="code",t=this.mode==="report",i=e?gc:bc,s=e?this.analyzer:this.reportMode;return c`<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>${fc.map(o=>c`<label class="mode"><input type="radio" name="scan-mode" .checked="${this.mode===o.id}" aria-label="${o.label}" @change="${()=>this._choose("scan-mode-change",{mode:o.id})}"> <span class="mode-icon" aria-hidden="true">${M(o.icon)}</span> <span class="mode-copy"><strong>${o.label}</strong><span>${o.detail}</span></span> <span class="indicator" aria-hidden="true"></span></label>`)}</fieldset>${e||t?c`<div class="subtype-wrap"><fieldset class="${`subtype-options ${t?"report-subtypes":""}`}"><legend class="sr-only">${e?"Code subtype":"Reports submode"}</legend>${i.map(o=>c`<label class="subtype-option"><input type="radio" name="scan-focus" .checked="${s===o.id}" aria-label="${o.label}" @change="${()=>e?this._choose("scan-analyzer-change",{analyzer:o.id}):this._choose("scan-report-mode-change",{mode:o.id})}"> <strong>${o.label}</strong><span>${o.detail}</span></label>`)}</fieldset>${e?c`<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>`:h}</div>`:h}</section>`}};customElements.get("scan-mode-selector")||customElements.define("scan-mode-selector",oi);S();var Uo=A`: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: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{cursor:default}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}.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: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: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: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: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: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: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: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:absolute;width:1px;height:1px;opacity:0}.switch-track{position:relative;width:2rem;height:1.1rem;border-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: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:5px;color:var(--text);background:var(--bg);font:inherit;font-size:.76rem}.run{padding:.48rem .8rem;border:0;border-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: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}}`;S();var Fo=[{key:"metro",label:"metro",subtitle:"Metro bundle contents"},{key:"run",label:"run",subtitle:"Node.js CLI"},{key:"add",label:"add",subtitle:"Manually added files"}];function Ho(r){let e=r.filter(i=>i.id!=="all");if(e.length===0)return null;let t=new Map(e.map(i=>[String(i.id).replace(/^reason:/u,""),i]));return t.size!==e.length||[...t.keys()].some(i=>!Fo.some(s=>s.key===i))?null:[{id:"",label:"All files",subtitle:"Everything"},...Fo.filter(i=>t.has(i.key)).map(({key:i,...s})=>({...s,id:t.get(i).id,subtitle:i==="run"&&t.has("metro")?"Bundler and Node.js CLI":s.subtitle}))]}var ni=class extends R{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value="",this.label="Choose scope"}_select(e){this.dispatchEvent(new CustomEvent("scope-change",{detail:{value:e},bubbles:!0,composed:!0}))}render(){let e=this.reasons.filter(s=>s.id!=="all");if(e.length===0)return h;let t=Ho(e);if(!t)return c`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${D(this.value==="all"?"":this.value)}" @change="${s=>this._select(s.target.value)}"><option value="">All files</option>${e.map(s=>c`<option value="${s.id}">${s.label??s.id}</option>`)}</select></label>`;let i=t.find(s=>s.id===this.value)??t[0];return c`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${t.map(s=>c`<label class="scope-option"><input type="radio" name="scope" value="${s.id}" .checked="${i.id===s.id}" @change="${()=>this._select(s.id)}"><span>${s.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${i.subtitle}</span></div>`}static styles=A`:host{display:block;min-width:0}*{box-sizing:border-box}.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:5px;overflow:hidden;background:var(--bg)}.scope-option{position:relative;flex:1 0 auto;user-select:none}.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:5px;background:var(--bg);color:var(--text);font:inherit;font-size:.76rem}`};customElements.get("bundle-scope-selector")||customElements.define("bundle-scope-selector",ni);var qo={code:M(Ot),report:M(Pe)},ai=class extends R{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=Uo;constructor(){super(),this.loadModels=Ue,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(e){if(e.has("selection")&&(this._pendingSelection=this.selection),e.has("source")&&(this._bundles=this.source?.bundles??[],this._repositories=this.source?.repositories??[],this._scans=this.source?.scans??[]),e.has("source")||e.has("selection")){this._excluded=new Set,this._excludedModules=new Set;let t=this._repositories.find(o=>o.id===this._selectedRepoId),i=this._pendingSelection,s=i?this._bundles.find(o=>o.id===i.bundleId&&(i.repoId==null||o.repoId===i.repoId)):this._bundles.find(o=>o.id===this._selectedBundleId&&o.repoId===this._selectedRepoId)??(this.scopeLabel==="Workspace"?null:this._bundles.find(o=>o.id===this._selectedBundleId))??(t?this._bundles.find(o=>o.repoId===t.id):this._bundles[0]);this._selectedRepoId=s?.repoId??i?.repoId??t?.id??this._repositories[0]?.id??"unattached",this._selectedBundleId=s?.id??null,this._reason=s?.reasons?.[0]?.id??"",i&&(this._tab="new",this._mode="code",this._notice=s||this.source==null?null:"The selected bundle is no longer available in this source. Choose another bundle.",s&&(this._pendingSelection=null))}}updated(e){(e.has("source")||e.has("selection")||e.has("loadBundle"))&&this._loadSelectedBundle()}async _loadSelectedBundle(){this._bundleController?.abort(),this._loadingBundle=!1,this._bundleError=null;let e=this._bundle;if(!this.loadBundle||!e||Array.isArray(e.files))return;let t=this._bundleController=new AbortController;this._loadingBundle=!0;try{let i=await this.loadBundle(e,t.signal);if(t.signal.aborted)return;this._bundles=this._bundles.map(s=>s.id===e.id?{...i,repoId:s.repoId,repo:s.repo}:s),this._reason=i.reasons?.[0]?.id??""}catch(i){t.signal.aborted||(this._bundleError=String(i?.message??i))}finally{t.signal.aborted||(this._loadingBundle=!1)}}disconnectedCallback(){super.disconnectedCallback(),this._bundleController?.abort();for(let e of this._timers)clearTimeout(e);this._timers.clear()}get _repoBundles(){return this._bundles.filter(e=>e.repoId===this._selectedRepoId)}get _bundle(){return this._repoBundles.find(e=>e.id===this._selectedBundleId)}get _reasonData(){return this._bundle?.reasons.find(e=>e.id===this._reason)??this._bundle?.reasons[0]}_packageLabel(e){return e==="__own__"?"Own code":e}get _scopeFiles(){let e=this._reasonData,t=e?.fileModules,i=e?.filePaths?new Set(e.filePaths):null;return(this._bundle?.files??[]).filter(s=>(t==null||t.includes(s.module))&&(i==null||i.has(s.path))).toSorted((s,o)=>o.bytes-s.bytes)}get _files(){return Yr(this._scopeFiles)}render(){return c`<div class="wrap">${this.hideHeading?c`<h1 class="sr-only">Scans</h1>`:c`<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?c`<p class="notice" role="status">${this._notice}</p>`:h} ${this._bundleError?c`<p class="notice" role="alert">Couldn’t load bundle: ${this._bundleError}<button @click="${()=>{this._loadSelectedBundle()}}">Retry</button></p>`:h} ${this._tab==="new"?this._newScan():this._history()}</div>`}_newScan(){let e=this._mode,t=this._bundle,i=e==="code"?this._files:e==="dependencies"?this._scopeFiles:t?.files??[],s=this._excluded,o=this._excludedModules,n=i.filter(f=>!s.has(f.path)&&!o.has(f.module)),a=lt(t?.files?n:null),l=new Map;for(let f of i){let g=l.get(f.module)??{bytes:0,count:0,included:0};g.bytes+=f.bytes,g.count++,s.has(f.path)||g.included++,l.set(f.module,g)}let d=[...l.keys()].toSorted((f,g)=>l.get(g).bytes-l.get(f).bytes||this._packageLabel(f).localeCompare(this._packageLabel(g))),u=i.slice(0,80),p=d.filter(f=>!o.has(f)).length,m=this._reportInput?.mode===this._reportMode?this._reportInput.inputs:[];return c`<div class="setup"><scan-mode-selector .mode="${e}" .analyzer="${this._options.analyzer}" .reportMode="${this._reportMode}" @scan-mode-change="${f=>this._changeMode(f.detail.mode)}" @scan-analyzer-change="${f=>this._setOption("analyzer",f.detail.analyzer)}" @scan-report-mode-change="${f=>{this._reportMode=f.detail.mode,this._reportRestore=null}}"></scan-mode-selector>${e==="report"?c`<scan-report-inputs .mode="${this._reportMode}" .loadSources="${this.loadReportSources}" .restore="${this._reportRestore}" @report-inputs-change="${f=>{this._reportInput=f.detail}}"></scan-report-inputs>`:this._sourcePanel(t,i)} ${e==="code"?c`<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>${n.length} of ${i.length} files · ${p} of ${d.length} packages</span> <span>${W(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>${d.length} total · sorted by size</span></div><div class="package-list">${d.map(f=>{let{bytes:g,count:v,included:w}=l.get(f),b=!o.has(f);return c`<label class="${`package-row ${b?"":"excluded"}`}"><input type="checkbox" .checked="${b}" @change="${x=>this._toggleModule(f)}"><span class="package-name">${this._packageLabel(f)}</span><span class="package-size">${W(g)} · ${w}/${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 ${u.length} of ${i.length}</span></div>${i.length===0?c`<p class="empty">No files in this selection.</p>`:c`<div class="file-list">${u.map(f=>{let g=!s.has(f.path)&&!o.has(f.module);return c`<label class="${`file ${g?"":"excluded"}`}"><input type="checkbox" .checked="${g}" @change="${v=>this._toggleFile(f,v.target.checked)}"><span class="file-copy"><span class="file-path" data-tooltip-truncated data-tooltip="${f.path}">${f.path}</span><span class="file-meta">${f.size} · ${this._packageLabel(f.module)}</span></span></label>`})}</div>`}</section></div></details>`:h} ${e==="agentic"?this._agenticPanel():h}<slot name="access"></slot>${this._optionsPanel(e,t,e==="report"?m.length:n.length)}</div>`}_sourcePanel(e,t){if(this.sourceLoading)return c`<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 i=this._mode==="code"?this._repoBundles.map(d=>d.files?{...d,files:Yr(d.files)}:d.summary?{...d,summary:{...d.summary,files:d.summary.codeFiles}}:d):this._repoBundles,{lines:s}=lt(e?.files?t:null),o=new Map;for(let d of this._bundles)o.set(d.repoId,(o.get(d.repoId)??0)+1);let n=this._repositories.length>1,a=["code","agentic","dependencies"].includes(this._mode)&&e!=null&&(!e.filename.toLowerCase().endsWith(".map")||e.reasons?.some(d=>d.id!=="all")),l=this._repositories.map(d=>{let u=o.get(d.id)??0;return{value:d.id,label:d.label,detail:`${u} ${u===1?"bundle":"bundles"}`,special:d.id==="unattached"}});return c`<section class="panel source-panel" aria-busy="${this._loadingBundle}"><div class="panel-head"><h2>Source</h2></div><div class="${`source-choice ${n?"":"single-repository"}`}">${n?c`<div class="field"><span>${this.scopeLabel}</span>${this.scopeLabel==="Workspace"?c`<workspace-selector .options="${l}" .value="${this._selectedRepoId}" @workspace-change="${d=>this._selectRepoById(d.detail.value)}"></workspace-selector>`:c`<repository-selector .options="${l}" .value="${this._selectedRepoId}" @repository-change="${d=>this._selectRepoById(d.detail.value)}"></repository-selector>`}</div>`:h}<div class="field">${n||this.createBundleHref?this._bundleLabel():h}${i.length>0?c`<bundle-selector .bundles="${i}" .value="${e?.id??null}" @bundle-change="${d=>this._selectBundleById(d.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>${e?.size??"\u2014"}</strong><span>bundle size</span></div><div class="metric">${qo.report}<strong>${t.length}</strong><span>files</span></div><div class="metric">${qo.code}<strong>${s==null?"\u2014":s.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${M(le)}<strong>${new Set(t.map(d=>d.module)).size}</strong><span>packages</span></div></div>${a?c`<div class="scope-slot">${this._scopeField(e)}</div>`:h}</div></div></section>`}_bundleLabel(){let e=this.createBundleHref?.(this._selectedRepoId);return c`<div class="bundle-label"><span>Bundle</span>${e?c`<a class="create-bundle-button" href="${e}">Create a bundle</a>`:h}</div>`}_emptyBundles(){let e=this.createBundleHref?.(this._selectedRepoId);return c`<div class="choice-empty"><span>${this._bundles.length===0?"No stored bundles.":`No stored bundles for this ${this.scopeLabel.toLowerCase()}.`}</span>${e?c`<a href="${e}">Create?</a>`:h}</div>`}_scopeField(e){if(!["code","agentic","dependencies"].includes(this._mode))return h;let t=(e?.reasons??[]).filter(i=>i.id!=="all");return t.length===0?h:c`<bundle-scope-selector .reasons="${t}" .value="${this._reason}" label="${this._mode==="agentic"?"Choose agentic scope":"Choose scan scope"}" @scope-change="${i=>this._changeReason(i.detail.value)}"></bundle-scope-selector>`}_optionsPanel(e,t,i){let s=e==="report"?`${i} ${this._reportMode==="merge"?"scan results":"reports"} selected`:`${t?.filename??"No bundle selected"} \xB7 ${i} files will be analyzed`,o=e==="code"&&this._options.analyzer==="advanced",n=!this.canRun||(e==="report"?i===0:t==null||i===0||o&&(!this._regimesReady||this._regimes.length===0));return c`<section class="panel options"><div class="options-grid">${o?c`<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>`:c`<scan-model-picker .loadModels="${this.loadModels}" ?has-extra="${e==="code"}" .value="${this._options.model}" .effort="${this._options.effort}" @model-change="${a=>{this._options={...this._options,model:a.detail.model,effort:a.detail.effort}}}">${e==="code"?c`<scan-depth-toggle slot="effort-extra" .isolate="${this._options.isolate}" @depth-change="${a=>this._setOption("isolate",a.detail.isolate)}"></scan-depth-toggle>`:h}</scan-model-picker>`}</div><div class="options-footer"><slot name="before-run"></slot><button type="button" class="run" ?disabled="${n}" @click="${()=>this._runScan()}">${e==="report"?this._reportMode==="merge"?"Merge results":"Link reports":"Run scan"}</button><span class="summary">${s}</span></div><div class="checks"><label class="switch"><input type="checkbox" aria-describedby="${this._options.cached?"offline-help":h}" .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?c`<small class="offline-help" id="offline-help">Cache only, no new model requests</small>`:h}</div></section>`}_history(){return c`<section class="panel history"><div class="panel-head"><h2>Scan history</h2><p>${this._scans.length} scans</p></div>${this._scans.length===0?c`<p class="empty">No scans yet.</p>`:this._scans.map(e=>this._scanRow(e))}</section>`}_scanRow(e){let t=e.status==="completed"?e.reportSaved?c`<button type="button" class="action" @click="${()=>this._deleteSavedReport(e)}">Delete saved report</button>`:c`<button type="button" class="action" @click="${()=>this._saveReport(e)}">Save report</button>`:h;return c`<div class="scan-row"><div class="scan-main"><div class="scan-title"><strong>${e.bundleName}</strong><span class="${`status ${e.status}`}">${e.status}</span></div><span class="scan-meta">${e.reason} · ${e.files} ${e.mode==="report"?e.reportMode==="merge"?"results":"reports":"files"} · ${e.createdAt}${e.duration?` \xB7 ${e.duration}`:""}${e.reportSaved?" \xB7 Report saved":e.status==="completed"?" \xB7 Report available":""}</span></div><span class="scan-actions">${t}${e.status==="running"?c`<button type="button" class="action" @click="${()=>this._stopScan(e)}">Stop</button>`:h}${e.status==="stopped"?c`<button type="button" class="action" @click="${()=>this._restartScan(e)}">Restart as new scan</button>`:h}</span><span aria-hidden="true"></span></div>`}_selectBundle(e){this._pendingSelection=null,this._selectedRepoId=e.repoId,this._selectedBundleId=e.id,this._reason=e.reasons?.[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_selectBundleById(e){let t=this._repoBundles.find(i=>i.id===e);t!=null&&this._selectBundle(t)}_selectRepoById(e){if(e===this._selectedRepoId||!this._repositories.some(i=>i.id===e))return;this._selectedRepoId=e,this._pendingSelection=null;let t=this._bundles.find(i=>i.repoId===e);this._selectedBundleId=t?.id??null,this._reason=t?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_changeMode(e){!["dependencies","code","agentic","report"].includes(e)||e===this._mode||(this._mode=e,this._reportInput=null,this._reportRestore=null,this._excluded=new Set,this._excludedModules=new Set,this._notice=null)}_changeReason(e){this._reason=e,this._excluded=new Set,this._excludedModules=new Set}_toggleFile(e,t){let i=new Set(this._excluded);t?i.delete(e.path):i.add(e.path),this._excluded=i}_toggleModule(e){let t=new Set(this._excludedModules);t.has(e)?t.delete(e):t.add(e),this._excludedModules=t}_setOption(e,t){this._options[e]!==t&&(e==="analyzer"&&t==="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,[e]:t})}_agenticPanel(){return c`<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">${Bt(this._prompts,e=>e.id,(e,t)=>c`<div class="prompt-row"><textarea aria-label="${`Prompt ${t+1}`}" rows="3" placeholder="${this._promptPlaceholder(t)}" .value="${D(e.text)}" @input="${i=>{this._prompts=this._prompts.map(s=>s.id===e.id?{...s,text:i.target.value}:s)}}"></textarea>${this._prompts.length>1?c`<button type="button" class="prompt-action" aria-label="${`Remove prompt ${t+1}`}" @click="${()=>this._removePrompt(e.id)}"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button>`:h}</div>`)}</div></section>`}_promptPlaceholder(e){let t=["","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"][e];return t!=null?`What should the ${t?`${t} `:""}agent focus on?`:`What should agent ${e+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(e){this._prompts.length>1&&(this._prompts=this._prompts.filter(t=>t.id!==e))}_runScan(){if(!this.canRun)return;let e=this._mode,t=e==="code"&&this._options.analyzer==="advanced";if(t&&(!this._regimesReady||this._regimes.length===0))return;let i=this._bundle,s=this._reportInput?.mode===this._reportMode?this._reportInput:null,o=s?.inputs??[],n=e==="code"?this._files.filter(d=>!this._excluded.has(d.path)&&!this._excludedModules.has(d.module)):e==="dependencies"?this._scopeFiles:i?.files??[];if(e==="report"&&(!s?.source||o.length===0)||e!=="report"&&(!i||n.length===0))return;let a={id:`scan-${Date.now()}`,mode:e,bundleId:e==="report"?this._reportMode==="merge"?s.source.id:null:i?.id??null,bundleName:e==="report"?s.source.label:i.filename,reason:e==="report"?this._reportMode==="merge"?"Merge scan results":"Link saved reports":this._reasonData?.label??"All files",status:"running",createdAt:"Just now",duration:"",files:e==="report"?o.length:n.length,reportSaved:!1,cached:this._options.cached,isolate:e==="code"&&this._options.isolate,model:this._options.model,effort:this._options.effort};e!=="report"&&(a.repoId=this._selectedRepoId,a.scopeId=this._reason),e==="code"&&(a.analyzer=this._options.analyzer),t&&(a.regimes=this._regimes.map(d=>({...d})),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),e==="agentic"&&(a.prompts=this._prompts.map(d=>d.text)),e==="report"&&(a.reportMode=this._reportMode,a.reportSource={...s.source},a.inputIds=o.map(d=>d.id)),this._scans=[a,...this._scans],this._tab="history",this._notice="Scan started. The server will update its status as work progresses.";let l=setTimeout(()=>{this._timers.delete(l),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(l)}_stopScan(e){e.status==="running"&&(e.status="stopped",e.duration=e.duration||"stopped by user",this._notice="Scan stopped. It cannot continue, but you can restart it as a new scan.",this.requestUpdate())}_restartScan(e){if(this._options={...this._options,model:e.model??this._options.model,effort:e.effort??this._options.effort,cached:e.cached??!1,isolate:e.isolate??!1,analyzer:e.analyzer??"generic"},e.mode==="report"){this._mode="report",this._reportMode=e.reportMode==="link"?"link":"merge",this._reportInput=null,this._reportRestore={mode:this._reportMode,source:e.reportSource,inputIds:e.inputIds??[]},this._tab="new",this._notice="New report scan settings restored from the stopped run.";return}let t=this._bundles.find(i=>i.id===e.bundleId&&(e.repoId==null||i.repoId===e.repoId));t&&(this._selectBundle(t),this._mode=e.mode??"dependencies",e.mode==="agentic"&&(this._prompts=(e.prompts?.length>0?e.prompts:[""]).map(i=>({id:++this._nextPromptId,text:i}))),e.regimes?.length>0&&(this._options={...this._options,analyzer:"advanced"},this._regimes=e.regimes.map(i=>({...i})),this._appModel=e.appModel?{...e.appModel}:null,this._appModelAutomatic=e.appModelAutomatic!==!1,this._regimesReady=!1),this._reason=t.reasons.find(i=>i.label===e.reason)?.id??t.reasons[0]?.id??"",this._reason=e.scopeId??this._reason,this._tab="new",this._notice="New scan settings restored from the stopped run.")}_saveReport(e){e.reportSaved=!0,this._notice="Report saved. You can delete it from Reports and save this completed scan again.",this.requestUpdate()}_deleteSavedReport(e){e.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",ai);S();V();var pe=r=>r??h;z();S();function vc(r){let e=String(r).split("/").at(-1),t=e.includes(".")?e.split(".").at(-1).toLowerCase():"";return["js","jsx","mjs","cjs"].includes(t)?"js":["ts","tsx","mts","cts"].includes(t)?"ts":t==="sol"?"solidity":t==="rs"?"rust":"generic"}function li(r){let e=vc(r),t=e==="js"||e==="ts"?it`<rect x="1" y="1" width="14" height="14" rx="2" fill=${e==="js"?"#e6c84f":"#3178c6"}/><text x="8" y="11.5" text-anchor="middle" fill=${e==="js"?"#202020":"#fff"} font-family="sans-serif" font-size="8" font-weight="700">${e.toUpperCase()}</text>`:e==="solidity"?it`<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"/>`:e==="rust"?it`<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>`:it`<path d="M4 1.5h5l3 3v10H4Zm5 0v3h3M6 8h4M6 10.5h4" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>`;return c`<svg class="source-file-icon" data-file-type="${e}" width="16" height="16" viewBox="0 0 16 16" style="flex: none" aria-hidden="true">${t}</svg>`}var Vo=c`<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>`,Ef=c`<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>`;var Go=`:host{padding:0}.field,.browser,.entry-points{line-height:1.5}.note{color:var(--muted);font-size:.75rem}.source-fields{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(0,1.6fr);align-items:end;gap:1rem;margin:1rem 0}.field{display:flex;flex-direction:column;gap:.4rem;min-width:0;font-size:.75rem;color:var(--muted)}.revision{display:flex;align-items:center;min-width:0;height:2rem;border:1px solid var(--border);border-radius:5px;background:var(--bg)}.revision:focus-within{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.revision-name{flex:1}.revision input{height:100%;min-height:0;padding:.3rem .6rem;min-width:0;border:0;border-radius:0;background:transparent;color:var(--text);font-size:.76rem}.revision input:focus-visible{outline:none}.revision-switch{display:flex;flex:none;align-self:stretch;padding:2px;gap:2px}.revision-switch button{display:grid;place-items:center;width:1.8rem;padding:0;border:0;border-radius:3px;background:transparent;color:var(--muted)}.revision-switch button:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.revision-switch button:focus-visible{outline-offset:-2px}.revision-switch button[aria-pressed=true]{color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,var(--bg))}.revision-switch svg{width:1rem;height:1rem}.revision-expand{display:grid;place-items:center;align-self:stretch;flex:none;width:2rem;padding:0;border:0;border-radius:4px;color:var(--muted);background:transparent}.revision-expand svg{width:.9rem;height:.9rem}.revision-expand:hover:not(:disabled){color:var(--text)}.revision-expand:focus-visible{outline-offset:-2px}.revision-menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:.45rem;overflow:auto;overscroll-behavior:contain;border:1px solid var(--border);border-radius:8px;background:var(--surface-active);color:var(--text);box-shadow:0 .65rem 1.8rem #00000073}.revision-menu[data-positioned]{visibility:visible}.revision-options{display:grid;grid-template-columns:repeat(var(--revision-columns, 1),minmax(0,1fr));gap:.15rem .5rem}.revision-options button{min-width:0;padding:.4rem .6rem;border:0;border-radius:4px;background:transparent;color:var(--text);text-align:left;font-size:.76rem}.revision-options button span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.revision-options button[aria-selected=true]{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.revision-options button:hover,.revision-options button[data-active]{background:color-mix(in srgb,var(--text) 8%,transparent)}.revision-options button[data-active]{outline:1px solid var(--accent);outline-offset:-1px}.revision-empty{margin:0;padding:.65rem;color:var(--muted);font-size:.75rem}button:disabled,input:disabled{opacity:.5}.browser{border:1px solid var(--border);border-radius:7px;overflow:hidden}.browser-head{display:flex;align-items:center;gap:.75rem;padding:.65rem .8rem;border-bottom:1px solid var(--border);background:var(--bg);font-size:.75rem}.commit-link{display:inline-flex;align-items:center;flex:none;gap:.3rem;margin-left:auto;color:var(--muted);text-decoration:none}.commit-link svg{width:1rem;height:1rem}.commit-link:hover{color:var(--accent)}.commit-link:focus-visible{outline:1px solid var(--accent);outline-offset:3px;border-radius:2px}.breadcrumbs{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;min-width:0}.breadcrumbs button{border:0;padding:.1rem;background:transparent;color:var(--muted);overflow-wrap:anywhere}.breadcrumbs button[aria-current]{color:var(--text)}.breadcrumbs button:hover:not(:disabled){color:var(--accent)}.file-browser{min-height:18rem;max-height:50vh;overflow:auto;padding:.75rem}.file-browser:has(>.empty){display:grid;place-items:center}.file-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,16rem),1fr));gap:.5rem}.file-tile{display:flex;align-items:center;gap:.5rem;min-width:0;height:2.05rem;padding:.4rem .6rem;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font-size:.75rem}.file-tile>span:not(.arrow){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.file-tile input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent);flex:none}.file-tile:hover,.file-tile:focus-within{border-color:var(--accent)}.file-tile.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.directory{color:var(--muted)}.directory .arrow{margin-left:auto}.unsupported{opacity:.55}.empty{margin:0;padding:1rem;border:0;border-radius:0;text-align:center;color:var(--muted);font-size:.8rem;line-height:1.5}.error{color:var(--critical)}.message{padding:.5rem .8rem;color:var(--muted);font-size:.75rem;line-height:1.5}.text-action{border:0;padding:.1rem .2rem;color:var(--accent);background:transparent;font-size:.75rem}.entry-points{display:flex;align-items:center;gap:1rem;margin-top:1rem}.package-suggestions{display:flex;align-items:center;gap:1rem;margin-top:1rem;color:var(--muted);font-size:.75rem}.package-suggestions>div{flex:1;min-width:0}.package-suggestions p{margin:0 0 .4rem}.package-suggestions .suggestions-note{margin:.4rem 0 0}.package-suggestions ul{display:flex;flex-wrap:wrap;gap:.4rem .8rem;padding:0;margin:0;list-style:none;max-height:6rem;overflow:auto}.package-suggestions li{min-width:0;max-width:100%}.package-suggestions li code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.package-suggestions .btn{flex:none;font-size:.72rem}.entry-points>.btn{flex:none}.selection{flex:1;min-width:0}.selection .note{margin:.5rem 0 0}.selection-head{display:flex;align-items:center;gap:.75rem}.btn.clear-selection{min-height:1.65rem;padding:.2rem .5rem;font-size:.72rem}h2{margin:0;font-size:.8rem;font-weight:500}h2 span{color:var(--muted);margin-left:.4rem}.entry-points ul{padding:0;display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;max-height:7rem;overflow:auto;margin:.6rem 0 0}.entry-points li{display:flex;align-items:center;gap:.4rem;min-width:0;max-width:100%;padding:.2rem .4rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);font-size:.72rem}.entry-points li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-points li button{display:grid;place-items:center;flex:none;width:1.3rem;height:1.3rem;padding:0;border:0;border-radius:3px;background:transparent;color:var(--muted);cursor:default}.entry-points li button svg{width:1rem;height:1rem}.entry-points li button:hover{color:var(--critical);background:color-mix(in srgb,var(--critical) 12%,transparent)}.entry-points li button:focus-visible{outline:1px solid var(--accent);outline-offset:1px}@container (width <= 45rem){.source-fields{grid-template-columns:1fr}}
83
- `;S();function Wo(r,e,t){return Zo(r,e,t,c`Entry points declared in <code>package.json</code>`,"Suggested entry points")}function Ko(r,e,t,i){return Zo(r,e,t,"Suggested Solidity sources","Suggested Solidity sources",i)}function Zo(r,e,t,i,s,o=!1){let n=r.filter(a=>!e.has(a));return n.length===0?h:c`<aside class="package-suggestions" aria-label="${s}"><div><p>${i}</p><ul>${n.map(a=>c`<li><code data-tooltip="${a}">${a}</code></li>`)}</ul>${o?c`<p class="suggestions-note">Suggestions are limited. Browse the source directories to select more files.</p>`:h}</div><button type="button" class="btn" @click="${()=>t(n)}">Use suggestions</button></aside>`}var Jo=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="3"/><path d="M1 8h4m6 0h4"/></svg>`,wc=100,_c=[{kind:"branch",label:"Branch",icon:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="4" cy="3" r="1.5"/><circle cx="4" cy="13" r="1.5"/><circle cx="12" cy="3" r="1.5"/><path d="M4 4.5v7m0-3h3a5 5 0 0 0 5-4"/></svg>`},{kind:"tag",label:"Tag",icon:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" aria-hidden="true"><path d="M2 2h5.5l6.5 6.5-5.5 5.5L2 7.5Z"/><circle cx="5" cy="5" r="1"/></svg>`},{kind:"commit",label:"Commit SHA",icon:Jo}];async function ci(r,e,t){let i=await $(`/api/admin/repositories/${r}?${new URLSearchParams(e)}`,{credentials:"same-origin",headers:{accept:"application/json"},signal:t});if(!i.ok){let s=await i.json().catch(()=>null);if(s?.error==="github-rate-limited"){let o=Number(i.headers.get("retry-after")),n=Math.ceil(o/60),a=Number.isFinite(o)&&o>0?` Try again in about ${n} ${n===1?"minute":"minutes"}.`:" Try again after the limit resets.";throw new Error(`GitHub\u2019s API rate limit has been reached.${a}`)}throw s?.error==="github-status-403"?new Error("GitHub denied this request. Check repository access and the GitHub App\u2019s read permissions."):s?.error==="github-unauthorized"?new Error("GitHub authentication has expired or was revoked. Sign in again and check the repository App installation."):s?.error==="github-unreachable"?new Error("Could not connect to GitHub. Try again shortly."):i.status===404?new Error("This repository, revision, or directory is unavailable."):i.status===403?new Error("Repository access is required to browse files."):new Error("Could not load repository files from GitHub. Try again.")}return i.json()}var di=class extends R{static styles=[k(P),k(Go)];static properties={installTooltips:{attribute:!1},initialRepoId:{attribute:!1},_repos:{state:!0},_loadingRepos:{state:!0},_reposError:{state:!0},_repoId:{state:!0},_refs:{state:!0},_refKind:{state:!0},_refName:{state:!0},_path:{state:!0},_entries:{state:!0},_selected:{state:!0},_commit:{state:!0},_packageEntryPoints:{state:!0},_solidityEntryPoints:{state:!0},_soliditySuggestionsLimited:{state:!0},_loadingRefs:{state:!0},_loading:{state:!0},_error:{state:!0},_refsError:{state:!0},_limited:{state:!0},_revisionOpen:{state:!0},_revisionQuery:{state:!0},_activeRevision:{state:!0}};constructor(){super(),this._repos=[],this._loadingRepos=!0,this._reposError="",this.initialRepoId=null,this._repoId=null,this._refs={branches:[],tags:[]},this._refKind="branch",this._refName="",this._path="",this._entries=null,this._selected=new Set,this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._commit="",this._directories=new Map,this._loadingRefs=!1,this._loading=!1,this._error="",this._refsError="",this._limited=!1,this._revisionOpen=!1,this._revisionQuery="",this._activeRevision=-1,this._onViewport=()=>this.positionRevisionSuggestions()}connectedCallback(){super.connectedCallback(),globalThis.addEventListener("resize",this._onViewport),globalThis.addEventListener("scroll",this._onViewport,!0)}updated(e){e.has("installTooltips")&&this.installTooltips?.(this.renderRoot),this.positionRevisionSuggestions()}firstUpdated(){this.loadRepositories()}async loadRepositories(){this._reposRequest?.abort(),this.selectRepository(null),this._repos=[],this._reposError="",this._loadingRepos=!0;let e=new AbortController;this._reposRequest=e;try{let t=await ci("browsable",{},e.signal);if(e.signal.aborted)return;this._repos=t.repos,this._repos.some(i=>i.repoId===this.initialRepoId)&&this.selectRepository(this.initialRepoId)}catch{e.signal.aborted||(this._reposError="Could not load repositories. Try again.")}finally{e.signal.aborted||(this._loadingRepos=!1)}}disconnectedCallback(){globalThis.removeEventListener("resize",this._onViewport),globalThis.removeEventListener("scroll",this._onViewport,!0),clearTimeout(this._browseTimer),this._reposRequest?.abort(),this._refsRequest?.abort(),this._request?.abort(),this._directories.clear(),this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,super.disconnectedCallback()}resetFiles(){clearTimeout(this._browseTimer),this._request?.abort(),this._directories.clear(),this._loading=!1,this._entries=null,this._path="",this._commit="",this._selected=new Set,this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._error="",this._limited=!1}async selectRepository(e){if(this.closeRevisionSuggestions(),this._refsRequest?.abort(),this.resetFiles(),this._repoId=e,this._refs={branches:[],tags:[]},this._refsError="",this._refKind="branch",this._refName="",e==null){this._loadingRefs=!1;return}let t=new AbortController;this._refsRequest=t,this._loadingRefs=!0;try{let i=await ci("refs",{repoId:e},t.signal);if(t.signal.aborted)return;this._refs=i,this._refName=i.defaultBranch||i.branches[0]||"",this._refName&&this.loadDirectory("")}catch(i){t.signal.aborted||(this._refsError=i.message)}finally{t.signal.aborted||(this._loadingRefs=!1)}}changeRevision(e,t){this.resetFiles(),this._refKind=e,this._refName=t}selectRevisionType(e){this._refKind!==e&&(this.closeRevisionSuggestions(),this.changeRevision(e,e==="branch"&&this._refs.defaultBranch||""),this._refName&&this.loadDirectory(""))}editRevision(e){this.changeRevision(this._refKind,e);let t=e.trim();if(!t)return;let i=this._refKind==="branch"?this._refs.branches:this._refs.tags;this._refKind!=="commit"&&(i.includes(t)||this._refKind==="branch"&&t===this._refs.defaultBranch)?this.loadDirectory(""):this._browseTimer=setTimeout(()=>{this.loadDirectory("")},350)}revisionSuggestions(){let e=this._refKind==="branch"?this._refs.branches:this._refKind==="tag"?this._refs.tags:[],t=this._refKind==="branch"&&this._refs.defaultBranch?[this._refs.defaultBranch,...e.filter(s=>s!==this._refs.defaultBranch)]:e,i=this._revisionQuery.trim().toLowerCase();return t.filter(s=>s.toLowerCase().includes(i))}showRevisionSuggestions(e=!0){this._refKind==="commit"||this._repoId==null||this._loadingRefs||(this._revisionQuery=e?"":this._refName,this._activeRevision=-1,this.renderRoot.querySelector(".revision-menu").showPopover())}closeRevisionSuggestions(){this.renderRoot?.querySelector(".revision-menu")?.hidePopover(),this._revisionOpen=!1,this._activeRevision=-1}pickRevision(e){this.editRevision(e),this.renderRoot.querySelector(".revision-name").focus({preventScroll:!0}),this.closeRevisionSuggestions()}positionRevisionSuggestions(){if(!this._revisionOpen)return;let e=this.renderRoot.querySelector(".revision-menu"),t=this.renderRoot.querySelector(".revision-name").getBoundingClientRect(),i=8,s=6,n=15*parseFloat(getComputedStyle(this).fontSize),a=Math.max(1,Math.min(3,Math.ceil(this.revisionSuggestions().length/8),Math.floor((window.innerWidth-2*i)/n))),l=Math.min(Math.max(t.width,a*n),window.innerWidth-2*i);e.style.width=`${l}px`,e.style.setProperty("--revision-columns",a),e.style.left=`${Math.max(i,Math.min(t.left,window.innerWidth-l-i))}px`;let d=window.innerHeight-t.bottom-s-i,u=t.top-s-i,p=d<Math.min(e.scrollHeight,320)&&u>d;e.style.maxHeight=`${Math.max(0,Math.min(320,p?u:d))}px`,e.style.top=`${Math.max(i,p?t.top-e.offsetHeight-s:t.bottom+s)}px`,e.dataset.positioned=""}async revisionKeyDown(e){if(e.key==="Escape"||e.key==="Tab"){e.key==="Escape"&&this._revisionOpen&&(e.preventDefault(),e.stopPropagation()),this.closeRevisionSuggestions();return}if(e.key==="Enter"){let i=this.revisionSuggestions()[this._activeRevision];this._revisionOpen&&i!=null?(e.preventDefault(),this.pickRevision(i)):this.closeRevisionSuggestions();return}if(this._refKind==="commit"||!["ArrowDown","ArrowUp"].includes(e.key))return;e.preventDefault(),this._revisionOpen||this.showRevisionSuggestions();let t=this.revisionSuggestions().length;this._activeRevision=t===0?-1:e.key==="ArrowDown"?Math.min(this._activeRevision+1,t-1):this._activeRevision<=0?t-1:this._activeRevision-1,await this.updateComplete,this.renderRoot.querySelector("[data-active]")?.scrollIntoView({block:"nearest"})}async loadDirectory(e,t=!1){if(clearTimeout(this._browseTimer),this._repoId==null||!this._refName.trim())return;t&&this.resetFiles(),this._request?.abort();let i=new AbortController;this._request=i,this._path=e,this._entries=null,this._error="",this._limited=!1,this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._loading=!1;let s=this._refName.trim();if(this._refKind==="commit"&&!/^[a-f\d]{7,40}$/iu.test(s)){this._error="Enter a commit SHA with 7 to 40 hexadecimal characters.";return}let o=this._commit||(this._refKind==="commit"?s:`${this._refKind==="branch"?"heads":"tags"}/${s}`),n=JSON.stringify([this._repoId,this._commit,e]),a=this._commit&&this._directories.get(n);if(a){this._directories.delete(n),this._directories.set(n,a),this._entries=a.entries,this._limited=a.limited,this._packageEntryPoints=a.packageEntryPoints,this._solidityEntryPoints=a.solidityEntryPoints,this._soliditySuggestionsLimited=a.soliditySuggestionsLimited;return}this._loading=!0;try{let l=await ci("contents",{repoId:this._repoId,ref:o,path:e},i.signal);if(i.signal.aborted)return;if(this._commit=l.commit,this._entries=l.entries.toSorted((d,u)=>+(u.type==="dir")-+(d.type==="dir")||d.name.localeCompare(u.name)),this._limited=l.limited,this._packageEntryPoints=l.packageEntryPoints??[],this._solidityEntryPoints=l.solidityEntryPoints??[],this._soliditySuggestionsLimited=l.soliditySuggestionsLimited??!1,/^[a-f\d]{40}$/iu.test(l.commit)){let d=JSON.stringify([this._repoId,l.commit,e]);this._directories.set(d,{entries:this._entries,limited:this._limited,packageEntryPoints:this._packageEntryPoints,solidityEntryPoints:this._solidityEntryPoints,soliditySuggestionsLimited:this._soliditySuggestionsLimited}),this._directories.size>wc&&this._directories.delete(this._directories.keys().next().value)}}catch(l){i.signal.aborted||(this._directories.clear(),this._error=l.message)}finally{i.signal.aborted||(this._loading=!1)}}toggleFile(e){let t=new Set(this._selected);t.has(e)?t.delete(e):t.add(e),this._selected=t}render(){let e=this._repos.find(n=>n.repoId===this._repoId),t=this._path.split("/").filter(Boolean),i=e&&this._commit?`https://github.com/${[...e.fullName.split("/"),"tree",this._commit,...t].map(encodeURIComponent).join("/")}`:null,s=this.revisionSuggestions(),o=this._refKind==="commit"?"Commit SHA":this._refKind==="tag"?"Tag":"Branch";return c`<p class="intro">Choose a repository and revision, then select files to use as entry points.</p><div class="source-fields"><div class="field"><span>Repository</span><repository-selector label="Repository" ?disabled="${this._loadingRepos}" .options="${this._repos.map(n=>({value:n.repoId,label:n.fullName}))}" .value="${this._repoId}" @repository-change="${n=>this.selectRepository(n.detail.value)}"></repository-selector></div><form class="revision" @focusout="${n=>{n.currentTarget.contains(n.relatedTarget)||this.closeRevisionSuggestions()}}" @submit="${n=>{n.preventDefault(),this.loadDirectory("",!0)}}"><div class="revision-switch" role="group" aria-label="Revision type">${_c.map(({kind:n,label:a,icon:l})=>c`<button type="button" aria-label="${a}" data-tooltip="${a}" aria-pressed="${this._refKind===n}" ?disabled="${!e||this._loadingRefs}" @click="${()=>{this.selectRevisionType(n),this.renderRoot.querySelector(".revision-name").focus(),this.showRevisionSuggestions()}}">${l}</button>`)}</div><input class="revision-name" type="text" aria-label="${o}" role="${pe(this._refKind==="commit"?void 0:"combobox")}" aria-autocomplete="${pe(this._refKind==="commit"?void 0:"list")}" aria-expanded="${pe(this._refKind==="commit"?void 0:String(this._revisionOpen))}" aria-controls="${pe(this._refKind==="commit"?void 0:"bundle-revisions")}" aria-activedescendant="${pe(this._revisionOpen&&this._activeRevision>=0?`revision-${this._activeRevision}`:void 0)}" autocomplete="off" placeholder="${this._refKind==="commit"?"Commit SHA\u2026":`Choose or enter a ${this._refKind}\u2026`}" .value="${this._refName}" ?disabled="${!e||this._loadingRefs}" @focus="${()=>this.showRevisionSuggestions()}" @click="${()=>this.showRevisionSuggestions()}" @keydown="${this.revisionKeyDown}" @input="${n=>{this.editRevision(n.target.value),this.showRevisionSuggestions(!1)}}"> ${this._refKind==="commit"?h:c`<button type="button" class="revision-expand" aria-label="${`Show ${this._refKind} suggestions`}" aria-expanded="${this._revisionOpen}" ?disabled="${!e||this._loadingRefs}" @mousedown="${n=>n.preventDefault()}" @click="${()=>{this._revisionOpen?this.closeRevisionSuggestions():(this.renderRoot.querySelector(".revision-name").focus(),this.showRevisionSuggestions())}}"><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="revision-menu" id="bundle-revisions" popover="auto" role="listbox" aria-label="${`${o} suggestions`}" @beforetoggle="${n=>{this._revisionOpen=n.newState==="open",delete n.target.dataset.positioned,this._revisionOpen||(this._activeRevision=-1)}}"><div class="revision-options">${s.map((n,a)=>c`<button type="button" role="option" id="${`revision-${a}`}" aria-selected="${n===this._refName}" ?data-active="${a===this._activeRevision}" tabindex="-1" data-tooltip="${n}" @mousedown="${l=>l.preventDefault()}" @click="${()=>this.pickRevision(n)}"><span>${n}</span></button>`)}</div>${s.length>0?h:c`<p class="revision-empty">${this._revisionQuery?"No matching suggestions. Enter a revision name to browse.":`No ${this._refKind} suggestions available.`}</p>`}</div></form></div>${this._reposError?c`<p class="message" role="alert">${this._reposError} <button type="button" class="text-action" @click="${()=>this.loadRepositories()}">Retry</button></p>`:h} ${this._refsError?c`<p class="message" role="status">${this._refsError} <button type="button" class="text-action" @click="${()=>this.selectRepository(this._repoId)}">Retry</button></p>`:h}<section class="browser" aria-label="Repository files" aria-busy="${this._loadingRepos||this._loading||this._loadingRefs}"><div class="browser-head"><nav class="breadcrumbs" aria-label="Repository directory"><button type="button" ?disabled="${!this._commit}" aria-current="${pe(this._path?void 0:"location")}" @click="${()=>this.loadDirectory("")}">${e?.fullName??"Repository"}</button>${t.map((n,a)=>c`<span aria-hidden="true">/</span><button type="button" aria-current="${pe(a===t.length-1?"location":void 0)}" @click="${()=>this.loadDirectory(t.slice(0,a+1).join("/"))}">${n}</button>`)}</nav>${i?c`<a class="commit-link" href="${i}" target="_blank" rel="noopener noreferrer" data-tooltip="${this._commit}" aria-label="${`View directory at commit ${this._commit.slice(0,7)} on GitHub`}">${Jo}<code>${this._commit.slice(0,7)}</code></a>`:h}</div><div class="file-browser">${this._loadingRepos||this._loading||this._loadingRefs?c`<p class="empty" role="status">${this._loadingRepos?"Loading repositories\u2026":this._loadingRefs?"Loading revisions\u2026":"Loading files\u2026"}</p>`:this._error?c`<p class="empty error" role="alert">${this._error} <button type="button" class="text-action" @click="${()=>this.loadDirectory(this._path)}">Retry</button></p>`:this._entries==null?c`<p class="empty">${e?"Choose a revision to browse its files.":this._repos.length>0?"Select a repository to browse its files.":"No accessible repositories available."}</p>`:this._entries.length===0?c`<p class="empty">This directory is empty.</p>`:c`<div class="file-grid">${this._entries.map(n=>n.type==="dir"?c`<button type="button" class="file-tile directory" data-tooltip="${n.path}" @click="${()=>this.loadDirectory(n.path)}">${Vo}<span>${n.name}</span><span class="arrow" aria-hidden="true">›</span></button>`:c`<label class="${`file-tile ${this._selected.has(n.path)?"selected":""} ${n.type==="file"?"":"unsupported"}`}" data-tooltip="${n.type==="file"?n.path:`${n.path} (${n.type})`}"><input type="checkbox" aria-label="${`Select ${n.path} as an entry point`}" .checked="${this._selected.has(n.path)}" ?disabled="${n.type!=="file"}" @change="${()=>this.toggleFile(n.path)}">${li(n.name)}<span>${n.name}</span></label>`)}</div>`}</div>${this._limited?c`<p class="message">Showing GitHub’s first 1,000 entries in this directory.</p>`:h}</section>${Wo(this._packageEntryPoints,this._selected,n=>{this._selected=new Set([...this._selected,...n])})} ${Ko(this._solidityEntryPoints,this._selected,n=>{this._selected=new Set([...this._selected,...n])},this._soliditySuggestionsLimited)}<section class="entry-points" aria-label="Selected entry points"><div class="selection"><div class="selection-head"><h2>Entry points <span aria-live="polite">${this._selected.size}</span></h2>${this._selected.size>0?c`<button type="button" class="btn clear-selection" @click="${()=>{this._selected=new Set}}">Clear all</button>`:h}</div>${this._selected.size>0?c`<ul>${[...this._selected].map(n=>c`<li>${li(n)}<span data-tooltip="${n}">${n}</span><button type="button" aria-label="${`Remove ${n}`}" @click="${()=>this.toggleFile(n)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></li>`)}</ul>`:c`<p class="note">Select files above. You can choose entry points from multiple directories.</p>`}</div><button type="button" class="btn primary" disabled="disabled">Create a bundle</button></section>`}};customElements.define("managed-create-bundle",di);var xc={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",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"};function Yo(r){if(typeof r!="string")return null;let e=r.slice(r.lastIndexOf("/")+1),t=e.lastIndexOf(".");return t<=0?null:xc[e.slice(t+1).toLowerCase()]??null}var $c=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"}),kc=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 Sc(r){let e=typeof r=="string"?r.slice(r.lastIndexOf("/")+1):"",t=e.lastIndexOf("."),i=t>0?e.slice(t+1).trim().toLowerCase():"",s=Yo(r)??kc[i];return s?{key:s,label:$c[s]??s}:i?{key:`extension:${i}`,label:`.${i}`}:{key:"other",label:"Other"}}function Xo(r,e){let t=new Map,i=0,s=0;for(let[o,n]of r){let a=Sc(o),l=t.get(a.key)??{...a,files:0,lines:0,bytes:0};l.files++,l.lines+=n,l.bytes+=e.get(o)??0,t.set(a.key,l),s+=n,i+=e.get(o)??0}return{files:r.size,lines:s,bytes:i,languages:[...t.values()].toSorted((o,n)=>n.lines-o.lines||o.label.localeCompare(n.label))}}var Cc=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),Rc=new Set(["solidity","php","shell","rust"]),Ec=new Set(["java","kotlin","gradle","objc","objcpp","swift","c","cpp","c-header","cpp-header","ruby","cmake","podspec","podfile","podfile-lock","template","xml","env","fastlane","pbxproj"]),Ac=new Set(["resource","resource:base64"]),tn=new Set(["stat:file","stat:directory"]),rn=new Set([...Cc,...Rc,...Ec,...Ac,"patch","directory",...tn]),pi=r=>tn.has(r),Qo=r=>r==="directory"||r==="stat:directory"?"directory":"file";function Mc(r,e,t){if(r===e)return r;let i=pi(r),s=pi(e);if(i!==s&&Qo(r)===Qo(e))return i?e:r;throw new Error(`format conflict for '${t}' ('${e}' vs '${r}')`)}function Fe(r,e){return e===""?r:r==="."?e:`${r}/${e}`}function sn(r,{scope:e="full"}={}){let t=new Set;for(let[i,{files:s}]of r)if(!(e!=="full"&&!Ve(i)))for(let o of Object.keys(s))t.add(Fe(i,o));return t}function Ic(r,{what:e,files:t,formats:i,scope:s}){if(j(r))return"escapes the root";if(s!=="full"&&!Ve(r))return`is outside node_modules, which a '${s}'-scope ${e} does not record`;if(!t.has(r))return`names no file the ${e} records`;let o=i.get(r);return o==="directory"?"is a directory capture, not a file":pi(o)?`is a payload-free '${o}' record, not a file`:null}function on(r,{what:e,files:t,formats:i,scope:s}){for(let o of r){let n=Ic(o,{what:e,files:t,formats:i,scope:s});_(n===null,`${e}: executable entry '${o}' ${n}`)}}function nn(r,{what:e,files:t,formats:i,scope:s="full"}){if(r===void 0)return new Set;let o=`${e}: executable`;_(Array.isArray(r),`${o} must be an array of file paths`);let n=new Set;for(let a of r)_(typeof a=="string"&&a!=="",`${o} entry must be a non-empty string`),_(!n.has(a),`${o} entry '${a}' is listed twice`),n.add(a);return on(n,{what:e,files:t,formats:i,scope:s}),n}function an(r,{what:e,modules:t,formats:i,scope:s}){if(r.size!==0)return on(r,{what:e,files:sn(t,{scope:s}),formats:i,scope:s}),jt(r)}function _(r,e){if(!r)throw new Error(e)}function He(r,e){let[t,i]=[r.split("/"),e.split("/")];for(;t.length>0&&t[0]===i[0];)t.shift(),i.shift();if(t.length===0&&i.length===0)return 0;if(t.length<2)return i.length<2&&t>i?1:-1;if(i.length<2)return 1;if(t[0]==="*")return-1;if(i[0]==="*"||t[0]==="node_modules")return 1;if(i[0]==="node_modules")return-1;let[s,o]=[t,i].map(n=>n.join(String.fromCodePoint(0)));if(s<o)return-1;if(s>o)return 1;throw new Error("Unreachable")}var pt=r=>r&&[null,Object.prototype].includes(Object.getPrototypeOf(r)),qe=r=>Object.setPrototypeOf(Object.fromEntries(r),null),jt=r=>[...r].toSorted((e,t)=>He(e,t)),dt=(r,{sorted:e=!0}={})=>{if(!e){let t=Object.create(null);for(let[i,s]of r)t[i]=s instanceof Map?dt(s,{sorted:e}):s;return t}return qe([...r].toSorted((t,i)=>He(t[0],i[0])).map(([t,i])=>[t,i instanceof Map?dt(i,{sorted:e}):i]))},ui=r=>new Map(Object.entries(r).map(([e,t])=>[e,pt(t)?ui(t):t]));function j(r){if(r.startsWith("/"))return!0;let e=0;for(let t of r.split("/"))if(!(t==="."||t==="")){if(t!=="..")e++;else if(--e<0)return!0}return!1}function Lc(r,e){let t=r instanceof Map;if(t!==e instanceof Map)return!1;if(!t)return r===e;if(r.size!==e.size)return!1;for(let[i,s]of r)if(e.get(i)!==s)return!1;return!0}var en=r=>r instanceof Map?`{${[...r].map(([e,t])=>`${e}: ${t}`).join(", ")}}`:r;function ln(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=i.get(n);l===void 0&&i.set(n,l=new Map);for(let[d,u]of a){let p=l.get(d);p===void 0&&l.set(d,p=new Map);for(let[m,f]of u)p.has(m)?_(Lc(p.get(m),f),`${t}: import '${m}' from '${d}' resolves differently ('${en(p.get(m))}' vs '${en(f)}')`):p.set(m,f instanceof Map?new Map(f):f)}}};return s(r),s(e),i}function cn(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=i.get(n);if(l===void 0){i.set(n,a);continue}try{i.set(n,Mc(a,l,n))}catch(d){throw new Error(`${t}: ${d.message}`,{cause:d})}}};return s(r),s(e),i}function dn(r,e,t,i){if(r.size===0)return new Set(e);let s=sn(t,{scope:i}),o=new Set(e);for(let n of r)s.has(n)||o.add(n);return o}function pn(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=i.get(n);if(l===void 0){i.set(n,{name:a.name,version:a.version,...a.ecosystem===void 0?{}:{ecosystem:a.ecosystem},files:Object.assign(Object.create(null),a.files)});continue}_(l.name===a.name,`${t}: module '${n}' name mismatch ('${l.name}' vs '${a.name}')`),_(l.version===a.version,`${t}: module '${n}' version mismatch ('${l.version}' vs '${a.version}')`),_(l.ecosystem===a.ecosystem,`${t}: module '${n}' ecosystem mismatch ('${l.ecosystem??"(none)"}' vs '${a.ecosystem??"(none)"}')`);for(let[d,u]of Object.entries(a.files))Object.hasOwn(l.files,d)?_(l.files[d]===u,`${t}: content mismatch for '${Fe(n,d)}'`):l.files[d]=u}};return s(r),s(e),i}function Ve(r){return r.split("/").includes("node_modules")}function zc(r){let e="node_modules/",t=r.length;for(;(t=r.lastIndexOf(e,t-1))!==-1;)if(t===0||r[t-1]==="/")return t;return-1}function un(r){let e="node_modules/",t=zc(r);if(t===-1)return null;let i=t+e.length,s=r.slice(i).split("/"),o=s[0].startsWith("@")?2:1;if(s.length<=o||s.slice(0,o).some(a=>!a))return null;let n=s.slice(0,o).join("/");return{dir:r.slice(0,i)+n,rel:s.slice(o).join("/"),name:n}}var ue=1,hn=0,mn=({name:r,version:e,ecosystem:t,files:i})=>(_(t===void 0||typeof t=="string"),{name:r,version:e,...t===void 0?{}:{ecosystem:t},files:qe(Object.entries(i))}),Tc=r=>un(r)??{dir:".",rel:r,name:null},fn=(r,e)=>{if(r===void 0)return e;if(e===void 0)return r;let t={};for(let i of[r,e])for(let[s,o]of Object.entries(i))t[s]=jt(new Set([...t[s]??[],...o]));return t},Ce=class r{static VERSION=ue;version=ue;config;entries;modules;formats;imports;executable;reason;constructor({config:e={scope:"full"},entries:t,modules:i,formats:s,imports:o,executable:n,reason:a,version:l=ue}={}){_([hn,ue].includes(l)),_(["node_modules","full"].includes(e.scope)),this.version=l,this.config=e,this.entries=t??new Set,this.modules=i??new Map,this.formats=s??new Map,this.imports=o??new Map,this.executable=n??new Set,this.reason=a}get sources(){let e=new Map;for(let[t,{files:i}]of this.modules)for(let[s,o]of Object.entries(i))e.set(Fe(t,s),o);return e}static isResourceFormat(e){return e==="resource"||e==="resource:base64"||e==="directory"}get hasCode(){for(let[e,{files:t}]of this.modules)for(let i of Object.keys(t))if(!r.isResourceFormat(this.formats.get(Fe(e,i))))return!0;return!1}static parse(e){let t=JSON.parse(e);_(t.version===ue||t.version===hn),_(["node_modules","full"].includes(t.config?.scope)),_(pt(t.formats)),_(pt(t.imports));let i=new Map;for(let[d,u]of Object.entries(t.formats)){_(!j(d)),_(rn.has(u),`unknown format '${u}' for ${d}`);let p=d===""?".":d;_(!i.has(p),`duplicate format key '${p}'`),i.set(p,u)}let s=new Map,o=new Set;if(t.version===ue){let d=t.config.scope==="full";if(t.modules!==void 0){_(typeof t.modules=="object"&&t.modules!==null);for(let[u,p]of Object.entries(t.modules))_(Ve(u)),_(!j(u)),_(p?.name&&p.version&&p.files),s.set(u,mn(p))}if(d){_(t.sources&&typeof t.sources=="object");for(let[u,p]of Object.entries(t.sources))_(!Ve(u)),_(!j(u)),_(p?.name&&p.version&&p.files),s.set(u,mn(p));_(t.entries===void 0||Array.isArray(t.entries)),o=new Set(t.entries)}else _(t.entries===void 0),_(t.sources===void 0);for(let[,{files:u}]of s)for(let p of Object.keys(u))_(!j(p))}else{_(t.sources);for(let[d,u]of Object.entries(t.sources)){_(!j(d));let{dir:p,rel:m,name:f}=Tc(d);_(!j(p)&&!j(m)),s.has(p)||s.set(p,{name:f,version:null,files:Object.create(null)}),s.get(p).files[m]=u}}let n=new Set;for(let[d,{files:u}]of s)for(let p of Object.keys(u)){let m=Fe(d,p);_(!n.has(m),`duplicate file key '${m}' across bundle buckets`),n.add(m)}let a=ui(t.imports),l=d=>{if(typeof d=="string"){_(!j(d));return}_(d instanceof Map&&d.size>0,"import target must be a file or a non-empty {platform: file} map");for(let[u,p]of d)_(typeof u=="string"&&u.length>0&&!u.includes("/"),`invalid platform key '${u}'`),_(typeof p=="string"),_(!j(p))};for(let[,d]of a){_(d instanceof Map);for(let[u,p]of d){_(!j(u)),_(p instanceof Map);for(let[,m]of p)l(m)}}return new r({version:t.version,config:t.config,entries:o,modules:s,formats:i,imports:a,executable:t.version===ue?nn(t.executable,{what:"bundle",files:n,formats:i,scope:t.config.scope}):new Set,reason:pt(t.reason)?t.reason:void 0})}#e(){let e=[],t=[];for(let[i,{name:s,version:o,ecosystem:n,files:a}]of this.modules){if(Object.keys(a).length===0)continue;let l=Ve(i);l&&_(s&&o&&a);let d=qe(Object.entries(a).toSorted((p,m)=>He(p[0],m[0])));(l?e:t).push([i,{name:s,version:o,...n===void 0?{}:{ecosystem:n},files:d}])}return e.sort((i,s)=>He(i[0],s[0])),t.sort((i,s)=>He(i[0],s[0])),{modules:qe(e),sources:qe(t)}}serialize(){let e=jt(this.entries),{modules:t,sources:i}=this.#e(),s=dt(this.formats),o=dt(this.imports),n={version:ue,config:this.config};this.config.scope==="full"&&Object.assign(n,{entries:e,sources:i}),Object.assign(n,{modules:t,formats:s,imports:o});let a=an(this.executable,{what:"bundle",modules:this.modules,formats:this.formats,scope:this.config.scope});return a!==void 0&&(n.executable=a),this.reason!==void 0&&(n.reason=this.reason),JSON.stringify(n,void 0,2)}withReason(e){let t=[...this.sources.keys()];return new r({version:this.version,config:this.config,entries:this.entries,modules:this.modules,formats:this.formats,imports:this.imports,executable:this.executable,reason:fn(this.reason,{[e]:t})})}merge(e){return _(this.config.scope===e.config.scope,`bundle merge: scope mismatch ('${this.config.scope}' vs '${e.config.scope}')`),new r({config:{scope:this.config.scope},entries:new Set([...this.entries,...e.entries]),modules:pn(this.modules,e.modules,"bundle merge"),formats:cn(this.formats,e.formats,"bundle merge"),imports:ln(this.imports,e.imports,"bundle merge"),executable:dn(this.executable,e.executable,e.modules,this.config.scope),reason:fn(this.reason,e.reason)})}};var np=new TextEncoder,o0=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});var ap=2;function zi(r){if(typeof r!="string")throw new TypeError(`utf8ByteLength expects a string, got ${typeof r}`);if(/[\u0100-\uFFFF]/.test(r))return np.encode(r).byteLength;let e=/[\u0080-\u00FF]/gu,t=r.length;for(;e.test(r);){let i=e.lastIndex-1;for(let s=0;i<r.length&&s<ap;i++)r.codePointAt(i)>127?(t++,s=0):s++;e.lastIndex=i}return t}var Ti=new WeakMap,Oi=new WeakMap,Ni=new WeakMap;function rr(r){if(r?.metadataOnly)return new Map;let e=r?.bundle??r?.json;if(e&&Ti.has(e))return Ti.get(e);let t=new Map;if(!r)return t;if(r.kind==="stasis"){if(!r.bundle)return t;let i=r.bundle.formats;for(let[s,o]of r.bundle.sources)typeof o=="string"&&(Ce.isResourceFormat(i?.get(s))||t.set(s,o))}else if(r.kind==="sourcemap"){if(!r.json)return t;let i=r.json.sources??[],s=r.json.sourcesContent??[];for(let o=0;o<i.length;o++)typeof s[o]=="string"&&t.set(i[o],s[o])}return e&&Ti.set(e,t),t}function lp(r){let e=r?.bundle??r?.json;if(e&&Oi.has(e))return Oi.get(e);let t=new Map(rr(r));if(r?.kind==="stasis"&&r.bundle){let i=r.bundle.formats;for(let[s,o]of r.bundle.sources){if(typeof o!="string")continue;let n=i?.get(s);n==="resource"?t.set(s,o):n==="resource:base64"&&t.set(s,{format:"base64",data:o})}}return e&&Oi.set(e,t),t}var cp="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function dp(r){let e=r.endsWith("=");if(e?r.length%4!==0||r.at(-3)==="=":r.length%4===1)return null;let t=e?r.slice(0,r.endsWith("==")?-2:-1):r;if(/[^A-Za-z0-9+/]/u.test(t))return null;let i=t.length%4;return i>1&&cp.indexOf(t.at(-1))&(i===2?15:3)?null:Math.floor(t.length*3/4)}function pp(r){return typeof r=="string"?zi(r):r?.format==="base64"?dp(r.data):null}function wt(r){if(r?.fileSizes)return r.fileSizes;let e=r?.bundle??r?.json;if(e&&Ni.has(e))return Ni.get(e);let t=new Map,i=lp(r),s=r?.kind==="stasis"?r.bundle?.sources.keys():r?.json?.sources;for(let o of s??[])t.set(o,pp(i.get(o)));return e&&Ni.set(e,t),t}function ca(r){if(r?.kind!=="stasis"||!r.bundle?.modules)return null;let e=new Map;for(let[t,i]of r.bundle.modules)for(let s of Object.keys(i.files))e.set(t==="."?s:`${t}/${s}`,t);return e}var up=2,da=up;function pa(r){return typeof r!="string"||r.length===0?0:(r.match(/\r\n|\r|\n/gu)?.length??0)+(/[\r\n]$/u.test(r)?0:1)}function ua(r,e){if(r?.version!==1&&r?.version!==da||r.integrity!==e||!["stasis","sourcemap"].includes(r.kind)||!Number.isSafeInteger(r.size)||r.size<0||!Array.isArray(r.files))throw new Error("Invalid bundle metadata");let t=r.version!==da,i=new Map,s=new Map,o=new Map;for(let l of r.files){if(!Array.isArray(l)||l.length!==4&&!(t&&l.length===3))throw new Error("Invalid bundle metadata file");let[d,u,p,m]=l;if(typeof d!="string"||s.has(d)||u!==null&&(!Number.isSafeInteger(u)||u<0)||p!==null&&(typeof p!="string"||!/^sha512-[A-Za-z0-9+/]{86}==$/u.test(p))||u===null&&p!==null||t&&u!==null&&p===null||m!=null&&(!Number.isSafeInteger(m)||m<0))throw new Error("Invalid bundle metadata file");s.set(d,u),p!==null&&i.set(d,p),m!=null&&o.set(d,m)}let n=new Set(r.unsized??[]);if(r.unsized!==void 0&&(t||!Array.isArray(r.unsized)||n.size!==r.unsized.length)||[...n].some(l=>typeof l!="string"||!s.has(l)||s.get(l)!==null))throw new Error("Invalid bundle metadata");let a={integrity:e,kind:r.kind,size:r.size,metadataOnly:!0,fileSizes:s,fileHashes:i,lineCounts:o,unsizedFiles:n,stale:t};if(r.kind==="stasis"){a.bundle=Ce.parse(JSON.stringify(r.bundle));let l=a.bundle.sources;if(l.size!==s.size||[...l.keys()].some(u=>!s.has(u)))throw new Error("Invalid bundle metadata inventory");let d=a.bundle.formats;if(!t&&[...s].some(([u,p])=>i.has(u)!==(p!==null&&!Ce.isResourceFormat(d.get(u)))))throw new Error("Invalid bundle metadata inventory");if([...n].some(u=>d.get(u)!=="resource:base64"))throw new Error("Invalid bundle metadata inventory")}else{if(!r.json||typeof r.json!="object"||![null,void 0].includes(r.namesCount)&&(!Number.isSafeInteger(r.namesCount)||r.namesCount<0))throw new Error("Invalid sourcemap metadata");if(!Array.isArray(r.json.sources)||r.json.sources.some(l=>!s.has(l))||!Array.isArray(r.sourceSizes)||r.sourceSizes.length!==r.json.sources.length||r.sourceSizes.some(l=>l!==null&&(!Number.isSafeInteger(l)||l<0))||[...s].some(([l,d])=>i.has(l)!==(d!==null))||n.size>0)throw new Error("Invalid sourcemap inventory");a.json=r.json,a.sourceSizes=r.sourceSizes,a.namesCount=r.namesCount}if(r.codeStats===void 0)a.codeStats=Xo(o,s);else{let l=r.codeStats,d=u=>Number.isSafeInteger(u)&&u>=0;if(!l||![l.files,l.lines,l.bytes].every(d)||!Array.isArray(l.languages)||l.languages.some(u=>!u||typeof u.key!="string"||typeof u.label!="string"||![u.files,u.lines,u.bytes].every(d)))throw new Error("Invalid bundle code stats");a.codeStats=l}return a}z();Q();async function hp(){let r=await $("/api/admin/bundles",{credentials:"same-origin",signal:C.sessionController.signal});if(!r.ok)throw new Error(`Bundle catalogue request failed (${r.status})`);return(await r.json()).bundles??[]}async function Pi(r,e,t){let i=C.generation,s=await $(`/api/bundles/${encodeURIComponent(r)}/${e}`,{credentials:"same-origin",signal:t});if(!s.ok)throw new Error(`Bundle ${e} request failed (${s.status})`);let o=e==="contents"?await s.text():await s.json();if(t?.throwIfAborted(),i!==C.generation)throw new DOMException("Managed session changed","AbortError");return o}function Bi(r,{signal:e}={}){return C.load(`bundle-metadata:${r}`,"bundle metadata",t=>Pi(r,"metadata",t),{signal:e})}async function mp(r,{signal:e}={}){e=e?AbortSignal.any([e,C.sessionController.signal]):C.sessionController.signal;try{return await Pi(r,"contents",e)}catch(t){throw t.name!=="AbortError"&&C.notify(`Couldn't load bundle contents: ${t.message}`),t}}function fp(r,e,t=""){let i=[e?`team=${encodeURIComponent(e)}`:"",t?`reason=${encodeURIComponent(t)}`:""].filter(Boolean).join("&"),s=`advisories${i?`?${i}`:""}`;return Pi(r,s,C.sessionController.signal)}function Di(r,{splitOwnDirs:e=!0,packageDir:t=null}={}){if(t){if(t!=="."){let i=t.match(/(?:^|\/)node_modules\/(@[^/]+\/[^/]+|[^/]+)$/u);return i&&i[1]!==".pnpm"?i[1]:t}}else{let i=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,s;for(;(s=i.exec(r))!==null;)if(s[1]!==".pnpm")return s[1]}if(e){let i=r.indexOf("/");if(i>0)return r.slice(0,i)}return"__own__"}function ji(r,e){let t=new Map,i=r?.kind==="stasis"?r.bundle?.reason:null;if(!i||typeof i!="object"||Array.isArray(i))return t;let s=new Set(e??[...wt(r)].filter(([,o])=>o!=null).map(([o])=>o));for(let[o,n]of Object.entries(i).toSorted(([a],[l])=>a.localeCompare(l))){if(!o||!Array.isArray(n))continue;let a=new Set(n.filter(l=>typeof l=="string"&&s.has(l)));a.size>0&&t.set(o,a)}return[...t.values()].some(o=>o.size<s.size)||t.clear(),t}function ha(r,e){if(e.error)throw new Error(e.error);let t=ca(e),i=e.kind==="stasis"?e.bundle?.formats:null,s=e.lineCounts??new Map([...rr(e)].map(([a,l])=>[a,pa(l)])),o=[...wt(e)].filter(([,a])=>a!=null).map(([a,l])=>({path:a,format:i?.get(a)??null,bytes:l,lines:s.get(a)??0,size:W(l),module:Di(a,{splitOwnDirs:!1,packageDir:t?.get(a)})})),n=[{id:"all",label:"All",filePaths:null},...[...ji(e,o.map(a=>a.path))].map(([a,l])=>({id:`reason:${a}`,label:a,filePaths:[...l]}))];return{...r,files:o,reasons:n,size:W(e.size)}}function ma(r){let e=new Map((r.repos??[]).map(i=>[i.repoId,{id:i.repoId,label:i.fullName}])),t=(r.bundles??[]).map(i=>{let s=i.repoId??"unattached";return e.has(s)||e.set(s,{id:s,label:s==="unattached"?"Unattached":i.repoFullName??String(s)}),{...i,repoId:s,repo:e.get(s).label,size:W(i.byteSize),files:null,reasons:[]}});return{repositories:[...e.values()],bundles:t,scans:[]}}async function fa(r,e){let t=await Bi(r.id,{signal:e});e?.throwIfAborted();let i=ua(t,r.integrity);return ha(r,i)}var ga=new Set(["overview","graph","treemap","compare","advisories","issues","code","search","terminal"]);var gp=/^\d+$/u;function bp(r){for(let e=0;e<r.length;e++){let t=r.codePointAt(e);if(t<32||t===127)return!0}return!1}var ba=512;function vp(r){return typeof r=="string"&&r.length>0&&r.length<=ba&&!bp(r)}function va(r){return vp(r)&&!gp.test(r)}var ya=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 yp(r){if(!va(r)||r==="."||r==="..")return null;try{return`/finding/${encodeURIComponent(r)}`}catch{return null}}function wa(r){if(!r)return null;if(r.view==="home")return"/";if(r.view==="bundles"){if(!/^[A-Za-z0-9_-]+$/u.test(r.bundleSlug??"")||r.teamSlug!=null&&!/^[A-Za-z0-9_-]+$/u.test(r.teamSlug))return null;let i=r.bundleTab??"overview";return ga.has(i)?`${r.teamSlug?`/team/${r.teamSlug}`:"/manage"}/bundle/${r.bundleSlug}${i==="overview"?"":`/${i}`}`:null}if(Object.hasOwn(ya,r.view)){let i=ya[r.view];return r.view==="manage-bundles"&&Number.isSafeInteger(r.createRepoId)&&r.createRepoId>0?`${i}?createRepo=${r.createRepoId}`:r.view==="manage-scans"&&r.bundleId?`${i}?bundle=${encodeURIComponent(r.bundleId)}`:r.view==="manage-history"&&r.actor?`${i}?actor=${encodeURIComponent(r.actor)}`:i}if(!["findings","files"].includes(r.view)||!r.teamSlug||[r.teamSlug,r.reportSlug].some(i=>i!=null&&!/^[A-Za-z0-9_-]+$/u.test(i)))return null;let e=`/team/${encodeURIComponent(r.teamSlug)}`,t=r.reportSlug?`/report/${encodeURIComponent(r.reportSlug)}`:"";if(r.finding){let i=yp(r.finding.id);return r.view==="findings"&&i?`${e}${t}${i}`:null}return`${e}${t}${r.view==="files"?"/files":""}`}tr();function wp(r){let{data:e}=la(r);return e&&_a(e)>0?e:null}function _a(r){return(Ze(r)??[]).filter(e=>(Array.isArray(e)?e:[e]).some(t=>t&&typeof t=="object"&&gi(t,t.source??r.source))).length}function xa(r,e){let t=(r.reports??[]).filter(n=>n.visible&&n.repoId!=null).flatMap(n=>{let a=wp(n.content??"");return a?[{id:n.id,filename:n.filename,repoIds:[n.repoId],repo:n.repoFullName,directory:n.repoDirectory,analyzer:n.analyzer,appFindings:_a(a)}]:[]}),i=new Map((r.repos??[]).map(n=>[n.repoId,{id:n.repoId,label:n.fullName}]));for(let n of t)i.has(n.repoIds[0])||i.set(n.repoIds[0],{id:n.repoIds[0],label:n.repo??String(n.repoIds[0])});let s=e.results??[],o=new Set(s.map(n=>n.bundleId));return{merge:{bundles:(e.bundles??[]).filter(n=>o.has(n.id)).map(n=>({...n,size:W(n.byteSize)})),results:s},link:{repositories:[...i.values()].filter(n=>t.some(a=>a.repoIds.includes(n.id))),reports:t}}}S();Ui();z();function ka(r){return r.map(e=>{let t=e.login||String(e.id),i=e.name?.trim()||`@${t}`,s=i===`@${t}`?"":`@${t}`,o=i.replace(/^@/u,"").split(/\s+/u).filter(Boolean).slice(0,2).map(n=>n[0]).join("").toUpperCase();return{value:e.id,label:s?`${i} ${s}`:i,displayLabel:i,secondary:s,initials:o,disabled:e.disabled,detail:e.detail}})}function Sa(r,e){let t=e.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),i=r.filter(o=>!o.reset),s=i.filter(o=>t.every(n=>o.label.normalize("NFKC").toLocaleLowerCase().includes(n))).toSorted((o,n)=>o.label.localeCompare(n.label,void 0,{sensitivity:"base",numeric:!0}));return{pinned:r.filter(o=>o.reset),sections:[{label:null,options:s}],facets:[],showFacets:!1,count:s.length,total:i.length}}var Fi=class extends T{static properties={users:{attribute:!1},resetLabel:{type:String,attribute:"reset-label"}};static styles=[T.styles,A`.avatar{position:relative;overflow:hidden}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}`];constructor(){super(),this.users=[],this.resetLabel="",this.label="Choose user",this.placeholder="Choose user"}get searchLabel(){return"Search users"}get optionsLabel(){return"Users"}get noMatchesLabel(){return"No matching users"}get emptyLabel(){return"No users available"}get changeEvent(){return"user-change"}willUpdate(e){(e.has("users")||e.has("resetLabel"))&&(this.options=[...this.resetLabel?[{value:"",label:this.resetLabel,reset:!0}]:[],...ka(this.users)])}choices(){return Sa(this.options,this._query)}optionIcon(e){return e.initials?c`<span class="avatar" aria-hidden="true">${e.initials}${ge()?h:ir(e.value,c`<img alt="" loading="lazy" decoding="async" src="${`/api/avatar/${encodeURIComponent(e.value)}`}" @error="${t=>{t.currentTarget.hidden=!0}}">`)}</span>`:h}};customElements.get("user-selector")||customElements.define("user-selector",Fi);function Ca(r){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:r},bubbles:!0,composed:!0}))}function Ma(r,e){return c`<span class="avatar" aria-hidden="true"><span>${(e?.[0]??"?").toUpperCase()}</span> ${ge()?h:c`<img alt="" src="${`/api/avatar/${encodeURIComponent(r)}`}" @error="${t=>t.currentTarget.classList.add("broken")}">`}</span>`}var _p=M(Ws),es=M(Ks),Ra=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg>`,Hi=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg>`,xp={admin:"Admin",manage:"Manager",triage:"Triage",view:"Viewer",none:"No access"},$p={admin:"Manage workspace access and teams",manage:"Manage content and triage within team access",triage:"Review and triage findings",view:"Read-only access",none:"No workspace access"},qi=class extends L{static styles=[k(bo),k(P)];render(){let e=[["manage-bundles","Bundles","Keep source archives ready for review.","bundle"],["manage-scans","Scans","Run and monitor scans from stored bundles.","scan"],["manage-reports","Reports","Review, publish, and organize findings.","report"]],t=[["manage-repos","Repositories","Connect sources and manage repository settings.","repo"],["admin-users","Users","Manage accounts, roles, and workspace access.","users"],["manage-teams","Teams","Bring people and repositories together.","team"]];return c`<div class="wrap">${O("manage",this._role,this.allowShare)}<h1 class="sr-only">Manage</h1>${this._role==null?c`<p class="msg" role="status">Loading management pages…</p>`:c`<section class="home-section" aria-labelledby="content-heading"><div class="section-heading"><h2 id="content-heading">Content & activity</h2><span>From source to findings</span></div><div class="pages">${e.filter(([i])=>i!=="manage-scans"||["admin","manage"].includes(this._role)).map(i=>this._page(i))}</div></section>${this._role==="admin"?c`<section class="home-section" aria-labelledby="workspace-heading"><div class="section-heading"><h2 id="workspace-heading">Workspace & access</h2><span>Sources, people, and permissions</span></div><div class="pages workspace-pages">${t.map(i=>this._page(i))}</div></section>`:h} <button type="button" class="history-link" @click="${()=>Ca("manage-history")}"><span class="page-icon" aria-hidden="true">${N("history")}</span> <span class="page-copy"><strong>Workspace history</strong><span>Follow activity and triage changes across your workspace.</span></span> <span class="history-cta">View history ${N("arrow")}</span></button>`}</div>`}_page([e,t,i,s]){return c`<button type="button" class="${`page page-${s}`}" @click="${()=>Ca(e)}"><span class="page-top"><span class="page-icon" aria-hidden="true">${N(s)}</span><strong class="page-title">${t}</strong><span class="arrow" aria-hidden="true">${N("arrow")}</span></span> <span class="page-copy"><span>${i}</span></span></button>`}};customElements.define("managed-admin-home",qi);var Vi=class extends L{static properties={_page:{state:!0},_history:{state:!0},_total:{state:!0},_error:{state:!0},_filter:{state:!0},_query:{state:!0},_repo:{state:!0},_actor:{state:!0},_options:{state:!0}};static styles=[k(vo),k(P)];constructor(){super(),this._history=null,this._total=0,this._searchTimer=null,this._error=null,this._page=1,this._filter="all",this._query="",this._repo="",this._actor="",this._options={repos:[],users:[]},this._onActorFilter=e=>{let t=e.detail?.actor;if(typeof t!="string")return;let i=t.startsWith("user:")||t.startsWith("legacy:");this._query=i?"":t,this._filter="all",this._repo="",this._actor=i?t:"",this._load()}}connectedCallback(){super.connectedCallback(),document.addEventListener("managed-history-filter",this._onActorFilter),this._load()}disconnectedCallback(){clearTimeout(this._searchTimer),document.removeEventListener("managed-history-filter",this._onActorFilter),super.disconnectedCallback()}async _load(e=1){clearTimeout(this._searchTimer),this._error=null;let t=this._filter,i=this._query.trim(),s=this._actor,o=this._repo,n=`history:${JSON.stringify([e,t,i,o,s])}`;await this._loadCollection(n,"history",a=>to(a,e,t,i,o,s),a=>{this._history=a.history,this._total=a.total,this._page=a.page,this._options=a.filters??{repos:[],users:[]}})}_search(e){this._query=e,clearTimeout(this._searchTimer),this._loadRequest?.abort(),this._loadRequest=null,this._loading=!0,this._searchTimer=setTimeout(()=>{this._load()},250)}_setRepo(e){return this._repo=e,this._load()}_setActor(e){return this._actor=e,this._load()}_clearContext(){return this._repo="",this._actor="",this._load()}_contextFilters(){let e=this._options.repos,t=this._options.users??[],i=[{value:"",label:"All repositories",special:!0,reset:!0},...this._repo&&!e.includes(this._repo)?[{value:this._repo,label:this._repo}]:[],...e.map(s=>({value:s,label:s}))];return c`<repository-selector label="Filter history by repository" .options="${i}" .value="${this._repo}" @repository-change="${s=>{this._setRepo(s.detail.value)}}"></repository-selector><user-selector label="Filter history by user" reset-label="All users" placeholder="${this._actor?"Selected user":"All users"}" .users="${t}" .value="${this._actor}" @user-change="${s=>{this._setActor(s.detail.value)}}"></user-selector><button type="button" class="btn" aria-label="Clear repository and user filters" ?disabled="${!this._repo&&!this._actor}" @click="${()=>{this._clearContext()}}">Clear selection</button>`}render(){let e=this._history??[],t=this._page,i=(t-1)*100;return c`<div class="wrap">${O("manage-history",this._role,this.allowShare)}<h1 class="sr-only">History</h1><div class="page-intro"><p class="intro">${this._role==="admin"?"Uploads, access changes, repository changes, deletions, and triage.":"Bundle, report, and triage history within your team access."}</p><span class="result-count">${this._history?this._total:"\u2026"} entries</span></div><div class="toolbar" role="search"><input type="search" maxlength="500" aria-label="Search history" placeholder="Search history…" .value="${this._query}" @input="${s=>this._search(s.target.value)}"> <select aria-label="Filter history by type" .value="${this._filter}" @change="${s=>{this._filter=s.target.value,this._load()}}"><option value="all">All activity</option><option value="triage">Triage</option><option value="visibility">Visibility</option><option value="upload">Uploads</option><option value="repository">${this._role==="admin"?"Repositories":"Assignments"}</option>${this._role==="admin"?c`<option value="access">Access</option>`:h}<option value="delete">Deletions</option></select> ${this._contextFilters()} <button type="button" class="btn" ?disabled="${this._loading}" @click="${()=>this._load(t)}">Refresh</button></div>${this._error?c`<p class="msg error" role="alert">Couldn’t load history: ${this._error} <button type="button" class="btn" @click="${()=>this._load()}">Retry</button></p>`:h}<div aria-busy="${this._loading}">${this._history==null?this._error?h:ee("Loading history\u2026"):e.length===0?c`<div class="history"><p class="empty">${this._query.trim()||this._filter!=="all"||this._repo||this._actor?"No activity matches your filters.":"No history available yet."}</p></div>`:c`<div class="history" aria-label="Workspace history"><div class="history-head" aria-hidden="true"><span>Type</span><span>Activity</span><span>Repository / report / finding</span><span>Time</span></div>${e.map(s=>this._row(s))}</div>`}</div>${this._total>100?c`<nav class="pagination" aria-label="History pages"><span role="status">${i+1}–${Math.min(i+100,this._total)} of ${this._total} entries</span><button type="button" class="btn" ?disabled="${this._loading||t===1}" @click="${()=>this._changePage(t-1)}">Previous</button><span>Page ${t} of ${Math.ceil(this._total/100)}</span><button type="button" class="btn" ?disabled="${this._loading||i+100>=this._total}" @click="${()=>this._changePage(t+1)}">Next</button></nav>`:h}</div>`}async _changePage(e){await this._load(e),await this.updateComplete,this.renderRoot.querySelector(".history")?.scrollIntoView({block:"start"})}_row(e){let t=[e.repo??e.repository,e.report,e.finding].filter(Boolean).join(" \xB7 "),i=e.actor??e.user??"Unknown user",s=e.action??"updated workspace data";return c`<div class="row"><span class="${`kind ${e.kind??""}`}">${e.kind??"activity"}</span><span class="activity-description" data-tooltip-truncated data-tooltip="${`${i} ${s}`}"><strong class="actor">${i}</strong> <span class="action">${s}</span></span><span class="detail" data-tooltip-truncated data-tooltip="${t}">${t||"\u2014"}</span><span class="history-time">${Gi(e.at)}</span></div>`}};customElements.define("managed-admin-history",Vi);function Gi(r){if(r==null||r==="")return c`<span>Unknown</span>`;let e=typeof r=="number"?r:Number(r);if(!Number.isFinite(e))return c`<span>Unknown</span>`;let t=new Date(e);return Number.isNaN(t.getTime())?c`<span>Unknown</span>`:c`<time datetime="${t.toISOString()}">${t.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}</time><span>${t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}</span>`}function Ea(r){if(r==null||r==="")return"Unknown";let e=typeof r=="number"?r:Number(r);return Number.isFinite(e)&&!Number.isNaN(new Date(e).getTime())?`Last seen ${new Date(e).toLocaleString()}`:"Unknown"}function Aa(r){return r?.lastActivityAt??r?.lastActivity??r?.lastWriteAt??r?.lastActiveAt}var Wi=class extends L{static properties={_query:{state:!0},_users:{state:!0},_teams:{state:!0},_error:{state:!0}};static styles=[k(yo),k(P)];constructor(){super(),this._users=null,this._query="",this._teams=null,this._error=null}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("users","users",e=>Promise.all([ro(e),Or(e)]),([e,t])=>{this._users=e,this._teams=Array.isArray(t?.teams)?t.teams:[]})}_filteredUsers(){let e=this._query.trim().toLocaleLowerCase();return(this._users??[]).filter(t=>[t.name,t.login,t.role,...(this._teams??[]).filter(i=>i.members?.some(s=>s.userId===t.id)).map(i=>i.name)].filter(Boolean).join(" ").toLocaleLowerCase().includes(e))}render(){let e=this._filteredUsers();return c`<div class="wrap">${O("admin-users",this._role,this.allowShare)}<h1 class="sr-only">Users</h1><div class="page-intro"><p class="intro">Manage workspace access and roles.</p></div><div class="collection-toolbar" role="search"><input type="search" aria-label="Search users" placeholder="Search by name, username, or team…" .value="${this._query}" @input="${t=>{this._query=t.target.value}}"><span class="result-count" role="status">${this._users&&this._query.trim()?`${e.length} matching out of `:""}${this._users?.length??"\u2026"} users</span></div>${this._error?c`<p class="msg error" role="alert">Couldn't load users: ${this._error}</p>`:h}<div aria-busy="${this._loading}">${this._users==null?this._error?h:ee("Loading users\u2026"):this._list(e)}</div></div>`}_list(e){return this._users.length===0?c`<p class="msg">No users yet.</p>`:e.length===0?c`<div class="empty"><strong>No matching users</strong><p>Try another name, username, or team.</p></div>`:c`<div class="directory"><div class="list-head" aria-hidden="true"><span>Account</span><span>Team access</span><span>Last seen</span><span>Last activity</span><span>Role</span></div><ul class="users">${e.map(t=>this._row(t))}</ul></div>${this._users.some(t=>t.id===this._me)?c`<p class="self-note">Your own role can only be changed by another admin.</p>`:h}`}_row(e){let t=e.id===this._me,i=(this._teams??[]).flatMap(s=>{let o=s.members?.find(n=>n.userId===e.id);return o==null?[]:[{team:s,member:o}]});return c`<li><span class="person">${Ma(e.id,e.login)} <span class="who"><span class="name"><span class="name-text">${e.name||e.login}</span>${t?c`<span class="you">You</span>`:h}</span> <span class="login">@${e.login}</span> </span></span><span class="memberships">${Oe(e.role,"manage")?c`<span class="team-access"><strong>${e.role==="admin"?"All reports":"Owned and team reports"}</strong><span class="team-perms"><span class="permission-granted">+ Deps</span><span class="permission-granted">+ Security</span></span></span>`:i.length===0?c`<span class="no-team">No team access</span>`:i.map(({team:s,member:o})=>c`<span class="team-access"><strong>${N("team")}<span>${s.name}</span></strong><span class="team-perms">${["dependencies","security"].map(n=>c`<span class="${o[n]===!0?"permission-granted":"permission-denied"}">${o[n]===!0?"+":"\u2212"} ${n==="dependencies"?"Deps":"Security"}</span>`)}</span></span>`)} </span><span class="last-seen" aria-label="${Ea(e.lastSeenAt)}">${Gi(e.lastSeenAt)}</span> <button type="button" class="activity-link" aria-label="${`Show activity by ${e.login}`}" @click="${()=>this._showActivity(e.id)}"><span class="last-activity" aria-label="${`Last activity ${Ea(Aa(e)).replace(/^Last seen /u,"")}`}">${Gi(Aa(e))}</span></button> <span class="access"><select class="role" ?disabled="${t}" aria-label="${`Change ${e.login}\u2019s role`}" aria-description="${$p[e.role]??""}" @change="${s=>this._changeRole(e,s.target.value,s.target)}">${fe.map(s=>c`<option value="${s}" ?selected="${s===e.role}">${xp[s]}</option>`)}</select></span></li>`}async _changeRole(e,t,i){let s=e.role;if(t!==s){try{await this.appState.mutate(()=>io(e.id,t,this._csrf),["users","teams","reports","history"]),e.role=t,await this._load()}catch(o){console.warn("admin: set role failed:",o),i.value=s}this.requestUpdate()}}_showActivity(e){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-history",actor:`user:${e}`},bubbles:!0,composed:!0}))}};customElements.define("managed-admin-users",Wi);var Ia=N("repo"),Ki=class extends L{static properties={_publicRepoOpen:{state:!0},_publicRepository:{state:!0},_publicRepoError:{state:!0},_addingPublic:{state:!0},_data:{state:!0},_error:{state:!0},_actionError:{state:!0},_scope:{state:!0},_showAll:{state:!0},_query:{state:!0},_organization:{state:!0},_loading:{state:!0},_busy:{state:!0},_connectingApp:{state:!0},_detail:{state:!0},_impact:{state:!0},_impactLoading:{state:!0},_removeOpen:{state:!0},_acknowledge:{state:!0},_deleteTriage:{state:!0},_confirmName:{state:!0}};static styles=[k(wo),k(P)];constructor(){super(),this._publicRepoOpen=!1,this._publicRepository="",this._publicRepoError=null,this._addingPublic=!1,this._data=null,this._error=null,this._actionError=null,this._scope="connected",this._showAll=!1,this._query="",this._organization=null,this._loading=!0,this._busy=null,this._connectingApp=!1,this._detail=null,this._impact=null,this._impactLoading=!1,this._impactFresh=!1,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._impactRequest=null}connectedCallback(){super.connectedCallback(),this._load()}disconnectedCallback(){super.disconnectedCallback(),this._impactRequest?.abort()}_repositoryKey(){return`repos:${JSON.stringify([this._scope,this._showAll])}`}async _load(e=!1){this._error=null;let{_scope:t,_showAll:i}=this;await this._loadCollection(this._repositoryKey(),"repositories",s=>so(t,i,e,s),s=>{this._data=s,this._organization=this._repositoryChoices().activeFacet})}_open(e){this._impactRequest?.abort(),this._publicRepoOpen=!1,this._scope=e,this._showAll=!1,this._query="",this._organization=null,this._detail=null,this._impact=null,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._data=null,this._actionError=null,this._load()}_setShowAll(e){this._showAll=e,this._organization=null,this._data=null,this._load()}_search(e){this._query=e}_repositoryChoices(){let e=(this._data?.repositories??[]).map(t=>({value:t.id,label:t.fullName,repo:t}));return Dt(e,this._query,this._organization,{includeSingletonOrganizations:!0})}_back(e=null){return c`<div class="breadcrumb"><button type="button" class="breadcrumb-manage" @click="${()=>{document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage"},bubbles:!0,composed:!0}))}}">Manage</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> <button type="button" class="breadcrumb-manage" aria-label="Back to repositories" @click="${()=>{this._detail?(this._impactRequest?.abort(),this._detail=null,this._actionError=null):this._open("connected")}}">Repositories</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> ${e?c`<h1 class="breadcrumb-current">${e}</h1>`:h}</div>`}_openDetail(e){this._detail=e,this._actionError=null,this._impact=this.appState.read(`repo-impact:${e.id}`)??null,this._impactFresh=!1,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._impactLoading=!0,this._impactRequest?.abort();let t=new AbortController;this._impactRequest=t,this.appState.load(`repo-impact:${e.id}`,"repository data",i=>ao(e.id,i),{signal:t.signal,apply:i=>{this._impact=i}}).then(i=>(t.signal.aborted||(this._impactFresh=!0),i)).catch(i=>{!t.signal.aborted&&i?.name!=="AbortError"&&!this._impact&&(this._actionError=`Couldn't load repository data: ${i?.message??i}`)}).finally(()=>{this._impactRequest===t&&(this._impactLoading=!1)})}render(){if(this._detail)return this._detailPage(this._detail);let e=this._scope==="connected",t=e?"Repositories":`Add ${this._scope} repository`,i=this._repositoryChoices();return c`<div class="wrap">${O("manage-repos",this._role,this.allowShare)} ${e?c`<h1 class="sr-only">${t}</h1>`:this._back(t)}<div class="page-intro"><p class="intro">${e?"Manage connected repositories and their settings.":this._scope==="installed"?this._showAll?"Showing all repositories the GitHub App can read.":"Showing installed repositories you can access on GitHub.":"Choose a public repository your GitHub account is involved with."}</p>${e?c`<div class="repository-actions"><button type="button" class="btn" @click="${()=>this._open("installed")}">${this._accessIcon("private")} Add installed repository</button> <button type="button" class="btn" @click="${()=>this._open("public")}">${this._accessIcon("public")} Add your public repository</button> ${this._role==="admin"&&this._data?.canAddAnyPublicRepository?c`<button type="button" class="btn" aria-expanded="${this._publicRepoOpen}" @click="${()=>this._openPublicRepository()}">${this._accessIcon("public")} Add a public repository</button>`:h}</div>`:h}</div>${!e&&this._scope==="installed"?c`<div class="access-note"><p>Installed repositories are readable through the GitHub App. Install it on a repository or organization to make it available here.</p><span class="access-action">${this._data?.installUrl?c`<a class="btn" href="${this._data.installUrl}" target="_blank" rel="noopener noreferrer">Configure GitHub access</a>`:c`<button type="button" class="btn" disabled="disabled">Configure GitHub access</button>`}</span></div>`:h}<div class="toolbar"><label class="search"><input type="search" aria-label="${e?"Search connected repositories":`Search ${this._scope} repositories`}" placeholder="Search by repository or owner…" .value="${this._query}" @input="${s=>this._search(s.target.value)}"></label> ${this._scope==="installed"?c`<label class="show-all"><input type="checkbox" role="switch" .checked="${this._showAll}" @change="${s=>this._setShowAll(s.target.checked)}"><span>Show all</span></label>`:h} ${e?c`<span class="result-count" role="status">${this._data&&(this._query.trim()||i.activeFacet!=null)?`${i.count} ${i.count===1?"repository":"repositories"} out of `:""}${this._data?.connectedCount??"\u2026"} connected</span>`:c`<button type="button" class="btn" ?disabled="${this._loading}" @click="${()=>{this._load(!0)}}">Refresh</button>`}</div>${e&&this._publicRepoOpen&&this._role==="admin"&&this._data?.canAddAnyPublicRepository?this._publicRepositoryForm():h} ${this._actionError?c`<p class="msg error" role="alert">${this._actionError}</p>`:h} ${this._error?c`<p class="msg error" role="alert">Couldn't load repositories: ${this._error}</p><button type="button" class="btn" @click="${()=>{this._load()}}">Try again</button>`:h} ${!e&&this._data?c`<p class="repository-count" role="status">${i.count}${i.count===i.total?"":` of ${i.total}`} ${i.total===1?"repository":"repositories"}</p>`:h}<div aria-busy="${this._loading}">${this._body(i)}</div></div>`}_body(e){return this._data?c`${this._data.tokenMissing&&!this._showAll&&this._scope!=="connected"?c`<p class="msg">Log out and back in to refresh your GitHub membership access.</p>`:h}<div class="repository-browser">${e.showFacets?c`<nav class="organization-list" aria-label="Filter by organization"><button type="button" class="organization" aria-pressed="${e.activeFacet==null}" @click="${()=>{this._organization=null}}"><span class="organization-name">All organizations</span><span class="organization-count">${e.total}</span></button> ${e.facets.map(t=>c`<button type="button" class="organization" title="${t.name}" aria-pressed="${e.activeFacet===t.value}" @click="${()=>{this._organization=t.value}}"><span class="organization-name">${t.name}</span><span class="organization-count">${t.count}</span></button>`)}</nav>`:h}<div class="repo-results">${e.sections.map(t=>c`<section class="repo-group" aria-label="${t.label??"Repositories"}">${t.label?c`<h2 class="owner-head"><span class="owner-icon" aria-hidden="true">${t.label[0]??"?"}</span>${t.label}</h2>`:h}<ul class="repos">${t.options.map(i=>this._row(i.repo,t.organization?i.name:i.label))}</ul></section>`)} ${e.count?h:c`<div class="empty"><strong>${e.total?"No matching repositories":this._scope==="connected"?"No connected repositories yet":`No ${this._scope} repositories available`}</strong><p>${e.total?"Try a different search or organization.":this._scope==="connected"?"Add an installed or public repository to get started.":this._scope==="installed"?this._showAll?"Install the GitHub App, then refresh this list.":"No installed repositories match your GitHub access. Turn on Show all to browse every installation.":"Public repositories associated with your GitHub account will appear here."}</p></div>`}</div></div>`:this._error?h:ee("Loading repositories\u2026")}_openPublicRepository(){this._publicRepoOpen=!0,this._publicRepoError=null,this.updateComplete.then(()=>this.renderRoot?.querySelector("#public-repository")?.focus())}_publicRepositoryForm(){return c`<form class="public-repository-form" aria-label="Add a public repository" @submit="${e=>{e.preventDefault(),this._addPublicRepository()}}"><label class="confirm-field" for="public-repository"><span>Public GitHub repository</span> <input id="public-repository" class="confirm-name" type="text" placeholder="owner/repo or https://github.com/owner/repo" autocomplete="off" required .value="${this._publicRepository}" ?disabled="${this._addingPublic}" @input="${e=>{this._publicRepository=e.target.value}}"></label><div class="dialog-actions"><button type="button" class="btn" ?disabled="${this._addingPublic}" @click="${()=>{this._publicRepoOpen=!1}}">Cancel</button><button type="submit" class="btn" ?disabled="${this._addingPublic||!this._publicRepository.trim()}">${this._addingPublic?"Adding\u2026":"Add repository"}</button></div>${this._publicRepoError?c`<p class="msg error" role="alert">${this._publicRepoError}</p>`:h}</form>`}async _addPublicRepository(){if(!(this._addingPublic||!this._publicRepository.trim())){this._addingPublic=!0,this._publicRepoError=null;try{await this.appState.mutate(()=>no(this._publicRepository.trim(),this._csrf),["repos","reports","bundles","teams","users","history","scan-sources"]),this._publicRepoOpen=!1,this._publicRepository="",await this._load()}catch(e){this._publicRepoError=e?.message??String(e)}finally{this._addingPublic=!1}}}_row(e,t){let i=`${this._accessLabel(e)}${this._scope==="connected"&&e.active===!1?" \xB7 Deactivated":""}`,s=c`${Ia}<span class="repo-copy"><span class="repo-name">${t}</span><span class="repo-meta">${i}</span></span>`;return this._scope==="connected"?c`<li><button type="button" class="repo-row" aria-label="${`Manage ${e.fullName}`}" @click="${()=>this._openDetail(e)}">${s}<svg class="arrow" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button></li>`:c`<li class="repo-row">${s} ${e.selected?c`<span class="connected"><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>Connected</span>`:e.private&&!e.installed?c`<span class="repo-meta">Needs App access</span>`:c`<button type="button" class="btn" aria-label="${`Add ${e.fullName}`}" ?disabled="${this._busy!=null}" @click="${()=>{this._setActive(e,!0)}}">${this._busy===e.id?"Adding\u2026":"Add"}</button>`}</li>`}_accessLabel(e){let t=e.visibility==="public"?"Public":e.visibility==="internal"?"Internal":e.private?"Private":null,i=e.installed?"GitHub App":"GitHub";return t?`${t} \xB7 ${i}`:i}_connectAppButton(e){return e.installed?h:c`<button type="button" class="btn connect-app" aria-label="${`Connect GitHub App to ${e.fullName}`}" ?disabled="${this._busy!=null}" @click="${()=>{this._connectApp(e)}}">${this._connectingApp&&this._busy===e.id?"Connecting\u2026":"Connect GitHub App"}</button>`}async _connectApp(e){if(!(this._busy!=null||e.installed)){this._busy=e.id,this._connectingApp=!0,this._actionError=null;try{let t=await this.appState.mutate(()=>lo(e.id,this._csrf),["repos","history","scan-sources"]);if(!this.isConnected)return;if(!t.connected){globalThis.location.assign(t.installUrl);return}this._detail?.id===e.id&&(this._detail={...this._detail,installed:!0}),this._data&&(this._data={...this._data,repositories:this._data.repositories.map(i=>i.id===e.id?{...i,installed:!0}:i)}),await this._load()}catch(t){this._actionError=`Couldn't connect ${e.fullName}: ${t?.message??t}`}finally{this._busy=null,this._connectingApp=!1}}}_detailPage(e){let t=e.active!==!1,i=this._impact?.reports??[],s=this._impact?.bundles??[];return c`<div class="wrap">${O("manage-repos",this._role,this.allowShare)}<div class="head">${this._back()}<h1>${e.fullName}</h1></div><p class="intro">Repository settings and stored data.</p>${this._actionError?c`<p class="msg error" role="alert">${this._actionError}</p>`:h}<section class="section" aria-label="Repository connection"><h2>Connection</h2><div class="settings-row"><div class="settings-copy"><strong>${this._accessLabel(e)}</strong><p>${t?"Active for new scans and uploads.":"Deactivated. Stored reports and bundles are retained."}</p></div><span class="${`status-line ${t?"":"inactive"}`}">${t?"Active":"Deactivated"}</span> ${this._connectAppButton(e)} ${e.htmlUrl?c`<a class="btn" href="${e.htmlUrl}" target="_blank" rel="noopener noreferrer">View on GitHub</a>`:h}</div><div class="settings-row"><div class="settings-copy"><strong>${t?"Deactivate repository":"Reactivate repository"}</strong><p>${t?"Pause new scans while preserving all stored data and attachments.":"Make this repository available for new scans and bundle attachments again."}</p></div><button type="button" class="btn" ?disabled="${this._busy!=null}" @click="${()=>{this._setActive(e,!t)}}">${this._busy===e.id&&!this._connectingApp?t?"Deactivating\u2026":"Reactivating\u2026":t?"Deactivate":"Reactivate"}</button></div></section><section class="data-section" aria-label="Stored repository data"><h2>Stored data</h2><div class="dialog-data" aria-busy="${this._impactLoading}">${[["Reports",i],["Bundles",s]].map(([o,n])=>c`<section><h3>${o} (${this._impact==null?"\u2026":n.length})</h3>${this._impactLoading&&this._impact==null?c`<p class="data-empty" role="status">Loading ${o.toLowerCase()}…</p>`:this._impact==null?c`<p class="data-empty">Attached data could not be loaded.</p><button type="button" class="btn" @click="${()=>this._openDetail(e)}">Try again</button>`:n.length>0?c`<ul>${n.map(a=>c`<li>${a.filename}${a.repoDirectory?` \xB7 ${a.repoDirectory}`:h}</li>`)}</ul>`:c`<p class="data-empty">No ${o.toLowerCase()} attached.</p>`}</section>`)}</div></section><section class="section" aria-label="Permanent repository removal"><h2>Permanent removal</h2><div class="settings-row"><div class="settings-copy"><strong>Delete repository and stored data</strong><p>Deactivation is reversible. Permanent removal deletes this repository’s attached reports and bundles; it cannot be undone.</p></div><button type="button" class="btn danger" ?disabled="${this._busy!=null||this._impactLoading||!this._impactFresh||this._impact==null}" @click="${()=>{this._removeOpen=!0,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName=""}}">Remove permanently</button></div></section>${this._removeOpen&&this._impact!=null&&!this._impactLoading?this._removeDialog(e,i,s):h}</div>`}_removeDialog(e,t,i){let s=t.length>0||i.length>0,o=this._canRemove(e);return c`<div class="dialog-backdrop" role="presentation" @click="${n=>{n.target===n.currentTarget&&(this._removeOpen=!1)}}"><section class="${`dialog ${s?"":"small"}`}" role="dialog" aria-modal="true" aria-labelledby="remove-repo-title"><h2 id="remove-repo-title">Remove ${e.fullName} permanently?</h2><p class="dialog-copy">${s?"This destructive action will remove the repository and the stored data listed below. Deactivation keeps all of it.":"This repository has no attached reports or bundles. Permanent removal deletes its connection record."}</p>${s?c`<div class="dialog-data"><section><h3>Reports to delete (${t.length})</h3><ul>${t.map(n=>c`<li>${n.filename}${n.repoDirectory?` \xB7 ${n.repoDirectory}`:h}</li>`)}</ul></section><section><h3>Bundles to delete (${i.length})</h3><ul>${i.map(n=>c`<li>${n.filename}</li>`)}</ul></section></div>`:h} <label class="confirm-line"><input type="checkbox" .checked="${this._acknowledge}" @change="${n=>{this._acknowledge=n.target.checked}}"><span>I understand this permanently deletes the repository connection${s?", reports, and bundles":""}.</span></label> ${(this._impact?.triageCount??0)>0?c`<label class="confirm-line"><input type="checkbox" .checked="${this._deleteTriage}" @change="${n=>{this._deleteTriage=n.target.checked}}"><span>Also delete ${this._impact.triageCount} triage entr${this._impact.triageCount===1?"y":"ies"} belonging only to this repository.</span></label>`:h} ${s?c`<label class="confirm-field"><span>Type <strong>${e.fullName}</strong> to confirm.</span><input class="confirm-name" type="text" autocomplete="off" .value="${this._confirmName}" @input="${n=>{this._confirmName=n.target.value}}"></label>`:h}<div class="dialog-actions"><button type="button" class="btn" @click="${()=>{this._removeOpen=!1}}">Cancel</button><button type="button" class="btn danger" ?disabled="${!o}" @click="${()=>{this._remove(e)}}">${this._busy===e.id?"Removing\u2026":"Remove permanently"}</button></div></section></div>`}_accessIcon(e){return e==="private"?c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="7" width="10" height="7" rx="1"/><path d="M5 7V5a3 3 0 0 1 6 0v2"/></svg>`:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M2.5 8h11M8 2c1.5 1.7 2.2 3.7 2.2 6S9.5 12.3 8 14c-1.5-1.7-2.2-3.7-2.2-6S6.5 3.7 8 2Z"/></svg>`}async _setActive(e,t){if(this._busy==null){this._busy=e.id,this._actionError=null;try{if(await this.appState.mutate(()=>oo(e.id,t,this._csrf),["repos","reports","bundles","teams","users","history"]),!this.isConnected)return;this._detail?.id===e.id&&(this._detail={...this._detail,active:t}),this._data&&(this._data={...this._data,repositories:this._data.repositories.map(i=>i.id===e.id?{...i,active:t}:i)}),await this._load()}catch(i){let s=t?e.active===!1?"reactivate":"add":"deactivate";this._actionError=`Couldn't ${s} ${e.fullName}: ${i?.message??i}`}finally{this._busy=null}}}_canRemove(e){return this._busy!=null||this._impactLoading||!this._impactFresh||this._impact?.repoId!==e.id||!this._acknowledge?!1:!(this._impact.reports.length>0||this._impact.bundles.length>0)||this._confirmName===e.fullName}async _remove(e){if(this._canRemove(e)){this._busy=e.id,this._actionError=null;try{await this.appState.mutate(()=>co(e.id,e.fullName,this._deleteTriage,this._csrf),["repos","repo-impact","reports","report-preview","bundles","teams","users","history","scan-sources"]),this._removeOpen=!1,this._detail=null,this._impact=null,await this._load()}catch(t){this._actionError=`Couldn't remove ${e.fullName}: ${t?.message??t}`}finally{this._busy=null}}}};customElements.define("managed-admin-repos",Ki);function Zi(r){return typeof r!="number"||!Number.isFinite(r)?"":r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(1)} KB`:`${(r/1048576).toFixed(1)} MB`}function sr(r,e=!0){return[...e?[{value:null,label:"No repository",special:!0}]:[],...r.map(t=>({value:t.repoId,label:t.fullName}))]}function kp(r,e,t,i="Repository for new bundles",s=!0){let o=!Array.isArray(r);return c`<div class="repo-picker"><span class="repo-picker-label">${i}</span><repository-selector class="repo-select" .options="${o?[{value:null,label:"Loading repositories\u2026"}]:sr(r,s)}" .value="${e}" label="${i}" ?disabled="${o||r.length===0}" @repository-change="${n=>t(n.detail.value)}"></repository-selector></div>`}var Ji=class extends L{static properties={localImportSource:{attribute:!1},_query:{state:!0},_visibility:{state:!0},_data:{state:!0},_error:{state:!0},_busy:{state:!0},_dragOver:{state:!0},_preview:{state:!0},_previewLoading:{state:!0},_locationReport:{state:!0},_locationRepo:{state:!0},_locationDirectory:{state:!0},_locationBusy:{state:!0},_repoId:{state:!0},_repoDirectory:{state:!0}};static styles=[k(_o),k(Ur),k(P),k(jr)];constructor(){super(),this._query="",this._visibility="all",this._data=null,this._error=null,this._busy=!1,this._dragOver=!1,this._preview=null,this._previewLoading=null,this._previewRequest=null,this._locationReport=null,this._locationRepo=null,this._locationDirectory="",this._locationBusy=!1,this._repoId=null,this._repoDirectory="",this._teardownDrop=null,this._queue=[],this._localImport=new nt(this,"report",e=>Br(this,e,t=>Lr(t,this._csrf,this._repoId,this._repoDirectory.trim()),["reports","repo-impact","history","scan-sources"]))}connectedCallback(){super.connectedCallback(),this._load(),this._teardownDrop=Pr(this,e=>{this._upload(e)},e=>{this._dragOver=e})}disconnectedCallback(){super.disconnectedCallback(),this._teardownDrop?.(),this._cancelPreview()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("reports","reports",po,t=>{this._data=t,this._preview&&!t.reports?.some(i=>i.id===this._preview)&&this._cancelPreview()})}render(){return c`${this._dragOver?c`<div class="dropzone">Drop reports to upload</div>`:h}<div class="wrap">${O("manage-reports",this._role,this.allowShare)}<h1 class="sr-only">Reports</h1><div class="page-intro"><p class="intro">Upload reports. New reports stay hidden until you make them visible.</p>${this._localImport.renderAction()}</div>${this._localImport.renderPanel(this._busy||!this._csrf)}<div class="drop-card"><span class="drop-icon" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><path d="M8 10V2m0 0L5 5m3-3 3 3M3 9v3.5A1.5 1.5 0 0 0 4.5 14h7a1.5 1.5 0 0 0 1.5-1.5V9"/></svg></span><span class="drop-copy"><strong>Upload reports</strong><span>Drop files anywhere on this page, or browse your computer.</span></span><button type="button" class="drop-browse" ?disabled="${this._busy}" @click="${()=>Nr(e=>{this._upload(e)})}">${this._busy?"Uploading\u2026":"Browse files"}</button></div><div class="location-editor" aria-label="Location for reports without repository metadata"><div class="location-field"><span>Repository (when absent from report)</span><repository-selector label="Repository for new reports" .options="${sr(this._data?.repos??[])}" .value="${this._repoId}" ?disabled="${!this._data?.repos?.length}" @repository-change="${e=>{this._repoId=e.detail.value}}"></repository-selector></div><div class="location-field"><label for="report-upload-directory">Directory</label><input id="report-upload-directory" placeholder="Repository root" .value="${this._repoDirectory}" @input="${e=>{this._repoDirectory=e.target.value}}"></div></div>${this._data?.repoScopes?.length?c`<p class="intro">Team paths: ${this._data.repoScopes.map(e=>`${this._data.repos.find(t=>t.repoId===e.repoId)?.fullName??e.repoId}/${e.path??""}`).join(", ")}</p>`:h} ${this._body()}</div>`}_body(){let e=Array.isArray(this._data?.reports)?this._data.reports:[],t=this._query.trim().toLocaleLowerCase(),i=e.filter(s=>[s.filename,s.repoFullName,s.repoDirectory,s.uploadedByLogin].filter(Boolean).join(" ").toLocaleLowerCase().includes(t)&&(this._visibility==="all"||!!s.visible==(this._visibility==="visible")));return c`<div class="collection-toolbar" role="search"><input type="search" aria-label="Search reports" placeholder="Search reports or repositories…" .value="${this._query}" @input="${s=>{this._query=s.target.value}}"><select aria-label="Report visibility" .value="${this._visibility}" @change="${s=>{this._visibility=s.target.value}}"><option value="all">All reports</option><option value="visible">Visible to teams</option><option value="hidden">Hidden reports</option></select><span class="result-count" role="status">${this._data==null?"\u2026 reports":`${i.length} of ${e.length} reports`}</span></div>${this._error?c`<p class="msg error" role="alert">${this._error}</p>`:h}<div aria-busy="${this._loading}">${this._data==null?this._error?h:ee("Loading reports\u2026"):i.length>0?c`<div class="report-list"><div class="report-list-head" aria-hidden="true"><span class="report-heading">Report / repository</span><span>Uploaded by</span><span>Visibility</span><span class="actions-heading">Actions</span></div><ul class="reports">${i.map(s=>this._row(s))}</ul></div>`:c`<div class="empty"><strong>${e.length===0?"No reports uploaded yet":"No matching reports"}</strong><p>${e.length===0?"Drop a report here or browse files above.":"Try a different search or visibility filter."}</p></div>`}</div>`}_row(e){let t=e.analyzer??e.source??e.producer??"default",i=Mr[t]??Mr.default,s=e.repoEmbedded!==!0&&e.canChangeRepo!==!1,o=e.repoEmbedded===!0||e.repoId!=null,n=e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:"No repository assigned",a=Number.isFinite(e.uploadedAt)?new Date(e.uploadedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"";return c`<li class="report"><div class="report-main"><span class="report-mark" aria-hidden="true">${M(i)}</span> <span class="report-copy"><span class="report-name" data-tooltip-truncated data-tooltip="${e.filename}">${e.filename}</span><span class="report-location" data-tooltip-truncated data-tooltip="${n}">${n}</span></span> <span class="report-meta"><span data-tooltip-truncated data-tooltip="${e.uploadedByLogin??""}">${e.uploadedByLogin??"Uploader removed"}</span><span>${a} · ${Zi(e.byteSize)}</span></span> <span class="${`status ${e.visible?"visible":"hidden"}`}">${e.visible?"Visible":"Hidden"}</span> <span class="report-actions">${s?c`<button type="button" class="action" data-tooltip="Set repository location" aria-label="${`Set location for ${e.filename}`}" @click="${()=>this._openLocation(e)}">${N("repo")}</button>`:c`<span class="action-spacer"></span>`} <button type="button" class="action" data-tooltip="${this._preview===e.id?"Close preview":"Preview report"}" aria-label="${`Preview ${e.filename}`}" aria-expanded="${this._preview===e.id}" @click="${()=>{this._togglePreview(e)}}">${N("preview")}</button> <button type="button" class="action" data-tooltip="${e.visible?"Hide from teams":o?"Make visible to teams":"Assign a repository before publishing"}" aria-label="${`${e.visible?"Hide":"Make visible"} ${e.filename}`}" ?disabled="${e.canChangeRepo===!1||!o&&!e.visible}" @click="${()=>{this._setVisible(e,!e.visible)}}">${N(e.visible?"hide":"show")}</button> <a class="action" aria-label="${`Download ${e.filename}`}" href="${`/api/admin/reports/${encodeURIComponent(e.id)}`}">${N("download")}</a> <button type="button" class="action danger" aria-label="${`Delete ${e.filename}`}" ?disabled="${e.canChangeRepo===!1}" @click="${()=>this._delete(e)}">${es}</button></span></div>${this._preview===e.id?c`<div class="preview">${this._previewLoading===e.id?c`<span class="preview-loading">Loading preview…</span>`:c`<pre>${this._previewText??""}</pre>`}</div>`:h} ${this._locationReport===e.id?this._locationEditor(e):h}</li>`}_openLocation(e){e.canChangeRepo!==!1&&(this._locationReport=e.id,this._locationRepo=e.repoId??null,this._locationDirectory=e.repoDirectory??"",this._error=null)}_locationEditor(e){let t=Array.isArray(this._data?.repos)?this._data.repos:[];return c`<div class="location-editor"><div class="location-field"><span>Repository</span><repository-selector label="Repository for report" .options="${sr(t)}" .value="${this._locationRepo}" ?disabled="${this._locationBusy}" @repository-change="${i=>{this._locationRepo=i.detail.value}}"></repository-selector></div><div class="location-field"><label for="${`report-dir-${e.id}`}">Directory (optional)</label><input id="${`report-dir-${e.id}`}" type="text" placeholder="Repository root" .value="${this._locationDirectory}" @input="${i=>{this._locationDirectory=i.target.value}}"></div><div class="location-actions"><button type="button" class="action" @click="${()=>{this._locationReport=null}}">Cancel</button><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>{this._saveLocation(e)}}">Save</button></div></div>`}async _saveLocation(e){if(!this._locationBusy){this._locationBusy=!0,this._error=null;try{await this.appState.mutate(()=>ho(e.id,this._locationRepo,this._locationDirectory.trim(),this._csrf),["reports","repo-impact","history","scan-sources"]),this._locationReport=null,await this._load({preserveError:!0})}catch(t){this._error=`Couldn't set report location: ${String(t?.message??t)}`}finally{this._locationBusy=!1}}}_cancelPreview(){this._previewRequest?.abort(),this._previewRequest=null,this._preview=null,this._previewLoading=null,this._previewText=""}async _togglePreview(e){let t=this._preview===e.id;if(this._cancelPreview(),t)return;let i=new AbortController;this._previewRequest=i;let s=()=>this._previewRequest===i&&!i.signal.aborted;this._preview=e.id,this._previewText=this.appState.read(`report-preview:${e.id}`)??"",this._previewLoading=this.appState.read(`report-preview:${e.id}`)===void 0?e.id:null;try{await this.appState.load(`report-preview:${e.id}`,"report preview",async o=>{let n=await $(`/api/admin/reports/${encodeURIComponent(e.id)}`,{credentials:"same-origin",signal:o});if(!n.ok)throw new Error(`HTTP ${n.status}`);let a=await n.text();return a.slice(0,4e3)+(a.length>4e3?`
84
- \u2026`:"")},{signal:i.signal,apply:o=>{this._previewText=o}})}catch(o){s()&&o?.name!=="AbortError"&&!this._previewText&&(this._previewText=`Preview unavailable: ${o?.message??o}`)}finally{s()&&(this._previewLoading=null)}}async _setVisible(e,t){this._error=null;try{await this.appState.mutate(()=>uo(e.id,t,this._csrf),["reports","history","scan-sources"]),e.visible=t,this.requestUpdate(),await this._load()}catch(i){this._error=`Couldn't change report visibility: ${String(i?.message??i)}`}}async _upload(e){await Dr(this,e,t=>Lr(t,this._csrf,this._repoId,this._repoDirectory.trim()),["reports","repo-impact","history","scan-sources"])}async _delete(e){if(globalThis.confirm?.(`Delete \u201C${e.filename}\u201D? This can't be undone.`)){this._error=null;try{await this.appState.mutate(()=>mo(e.id,this._csrf),["reports",`report-preview:${e.id}`,"repo-impact","history","scan-sources"])}catch(t){this._error=`Delete failed: ${String(t?.message??t)}`}await this._load({preserveError:!0})}}};customElements.define("managed-admin-reports",Ji);var Sp=c`<svg class="report-icon" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M8.878.392a1.75 1.75 0 0 0-1.756 0l-5.25 3.045A1.75 1.75 0 0 0 1 4.951v6.098c0 .624.332 1.2.872 1.514l5.25 3.045a1.75 1.75 0 0 0 1.756 0l5.25-3.045c.54-.313.872-.89.872-1.514V4.951c0-.624-.332-1.2-.872-1.514ZM7.875 1.69a.25.25 0 0 1 .25 0l4.63 2.685L8 7.133 3.245 4.375Zm-5.125 4.4 4.5 2.61v5.317l-4.375-2.537a.25.25 0 0 1-.125-.216Zm6 7.927V8.7l4.5-2.61v3.96a.25.25 0 0 1-.125.216Z"/></svg>`,Yi=class extends L{static properties={createRepoId:{attribute:!1},installTooltips:{attribute:!1},localImportSource:{attribute:!1},_query:{state:!0},_creating:{state:!0},_data:{state:!0},_repoId:{state:!0},_repoDirectory:{state:!0},_locationBundle:{state:!0},_locationRepo:{state:!0},_locationDirectory:{state:!0},_locationBusy:{state:!0},_error:{state:!0},_busy:{state:!0},_dragOver:{state:!0}};static styles=[k(xo),k(Ur),k(P),k(jr)];constructor(){super(),this._query="",this._creating=!1,this._data=null,this._error=null,this._busy=!1,this._repoId=null,this._repoDirectory="",this._locationBundle=null,this._locationRepo=null,this._locationDirectory="",this._locationBusy=!1,this._dragOver=!1,this._teardownDrop=null,this._queue=[],this._localImport=new nt(this,"bundle",e=>Br(this,e,t=>Tr(t,this._csrf,this._repoId,this._repoDirectory.trim()),["bundles","reports","repo-impact","history","scan-sources"]))}connectedCallback(){super.connectedCallback(),this._load(),this._teardownDrop=Pr(this,e=>{this._creating||this._upload(e)},e=>{this._dragOver=!this._creating&&e})}disconnectedCallback(){super.disconnectedCallback(),this._teardownDrop?.()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("bundles","bundles",zr,t=>{this._data=t})}_showCreate(e){if(!e&&this.createRepoId!=null){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}));return}this._creating=e,this._dragOver=!1,e||this.updateComplete.then(()=>this.renderRoot.querySelector(".create-bundle-action")?.focus())}willUpdate(e){e.has("createRepoId")&&(this._repoId=this.createRepoId??null,this._creating=this.createRepoId!=null)}render(){return this._creating?c`<div class="wrap">${O("manage-bundles",this._role,this.allowShare)}<div class="breadcrumb"><button type="button" class="breadcrumb-manage" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage"},bubbles:!0,composed:!0}))}">Manage</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> <button type="button" class="breadcrumb-manage" aria-label="Back to bundles" @click="${()=>this._showCreate(!1)}">Bundles</button> <span class="breadcrumb-separator" aria-hidden="true">›</span><h1 class="breadcrumb-current">Create a bundle</h1></div><managed-create-bundle .initialRepoId="${this._repoId}" .installTooltips="${this.installTooltips}"></managed-create-bundle></div>`:c`${this._dragOver?c`<div class="dropzone">Drop bundles to upload</div>`:h}<div class="wrap">${O("manage-bundles",this._role,this.allowShare)}<h1 class="sr-only">Bundles</h1><div class="page-intro"><p class="intro">Source bundles for your repositories.</p><div class="bundle-actions">${this._localImport.renderAction()}<button type="button" class="local-import-toggle create-bundle-action" ?disabled="${!this._data}" @click="${()=>this._showCreate(!0)}">Create</button></div></div>${this._localImport.renderPanel(this._busy||!this._csrf)}<section class="upload-panel" aria-label="Upload bundles"><div class="upload-copy"><span class="drop-icon" aria-hidden="true">${N("upload")}</span><span><strong>Upload source bundles</strong><span class="upload-description">Drop source archives anywhere on this page.</span></span></div><div class="upload-controls">${kp(this._data?.repos,this._repoId,e=>{this._repoId=e},"Repository")}<div class="location-field upload-directory"><label for="bundle-upload-directory">Directory</label><input id="bundle-upload-directory" type="text" placeholder="Repository root" .value="${this._repoDirectory}" @input="${e=>{this._repoDirectory=e.target.value}}"></div><button type="button" class="drop-browse" ?disabled="${this._busy}" @click="${()=>Nr(e=>{this._upload(e)})}">${this._busy?"Uploading\u2026":"Browse files"}</button></div></section>${this._body()}</div>`}_body(){let e=Array.isArray(this._data?.bundles)?this._data.bundles:[],t=e.filter(a=>a.repoId==null).length,i=e.reduce((a,l)=>a+(Number.isFinite(l.byteSize)?l.byteSize:0),0),s=this._query.trim().toLocaleLowerCase(),o=e.filter(a=>[a.filename,a.repoFullName,a.repoDirectory,a.kind,a.uploadedByLogin].filter(Boolean).join(" ").toLocaleLowerCase().includes(s)),n=Map.groupBy(o,a=>a.repoFullName||"Unattached");return c`<div class="collection-toolbar" role="search"><input type="search" aria-label="Search bundles" placeholder="Search bundles or repositories…" .value="${this._query}" @input="${a=>{this._query=a.target.value}}"></div><div class="section-head"><h2>Stored bundles</h2><span class="summary"><span>${this._data==null?"\u2026 bundles":`${e.length} ${e.length===1?"bundle":"bundles"}`}</span><span>${this._data==null?"\u2026":Zi(i)}</span><span class="unassigned">${this._data==null?"\u2026 unattached":t?`${t} unattached`:""}</span></span></div>${this._error?c`<p class="msg error" role="alert">${this._error}</p>`:h}<div aria-busy="${this._loading}">${this._data==null?this._error?h:ee("Loading bundles\u2026"):o.length>0?c`<div class="bundle-groups">${[...n].toSorted(([a],[l])=>a==="Unattached"?-1:l==="Unattached"?1:a.localeCompare(l)).map(([a,l])=>c`<section class="bundle-group"><div class="bundle-group-head"><strong>${a}</strong><span>${l.length} ${l.length===1?"bundle":"bundles"}</span></div><ul class="bundles">${l.map(d=>this._row(d))}</ul></section>`)}</div>`:c`<div class="empty"><strong>${s?"No matching bundles":"No bundles uploaded yet"}</strong><p>${s?"Try another filename or repository.":"Drop source archives here or browse files above."}</p></div>`}</div>`}_row(e){let t=e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:"No repository assigned",i=Number.isFinite(e.uploadedAt)?new Date(e.uploadedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"";return c`<li class="bundle-row"><span class="identity"><span class="bundle-icon" aria-hidden="true">${Sp}</span><span class="who"> <button type="button" class="filename bundle-open" @click="${()=>this.dispatchEvent(new CustomEvent("managed-bundle-open",{detail:e,bubbles:!0,composed:!0}))}">${e.filename}</button> <span class="meta"><span class="kind">${e.kind==="stasis"?"Stasis":"Sourcemaps"}</span><span>${Zi(e.byteSize)}</span><span>${i}</span>${e.uploadedByLogin?c`<span>@${e.uploadedByLogin}</span>`:h}</span> </span></span><span class="bundle-location" data-tooltip-truncated data-tooltip="${t}">${t}</span> <span class="actions">${e.canChangeRepo===!1?h:c`<button type="button" class="action" aria-label="${`Set location for ${e.filename}`}" data-tooltip="Set repository location" ?disabled="${this._locationBusy}" @click="${()=>this._openLocation(e)}">${N("repo")}</button>`} <a class="action" aria-label="${`Download ${e.filename}`}" href="${`/api/admin/bundles/${encodeURIComponent(e.id)}`}"><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="M8 2v8m-3-3 3 3 3-3M3 11v3h10v-3"/></svg></a><button type="button" class="action danger" aria-label="${`Delete ${e.filename}`}" ?disabled="${e.canChangeRepo===!1}" data-tooltip="${e.canChangeRepo===!1?"Repository access is required to detach or delete this bundle":"Delete bundle"}" @click="${()=>this._delete(e)}">${es}</button> </span>${this._locationBundle===e.id?this._locationEditor(e):h}</li>`}_openLocation(e){this._locationBusy||e.canChangeRepo===!1||(this._locationBundle=e.id,this._locationRepo=e.repoId??null,this._locationDirectory=e.repoDirectory??"",this._error=null)}_locationEditor(e){let t=Array.isArray(this._data?.repos)?this._data.repos:[];return c`<div class="location-editor"><div class="location-field"><span>Repository</span><repository-selector label="Repository for bundle" .options="${sr(t)}" .value="${this._locationRepo}" ?disabled="${this._locationBusy}" @repository-change="${i=>{this._locationRepo=i.detail.value}}"></repository-selector></div><div class="location-field"><label for="${`bundle-dir-${e.id}`}">Directory (optional)</label><input id="${`bundle-dir-${e.id}`}" type="text" placeholder="Repository root" .value="${this._locationDirectory}" ?disabled="${this._locationBusy}" @input="${i=>{this._locationDirectory=i.target.value}}"></div><div class="location-actions"><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>{this._locationBundle=null}}">Cancel</button><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>{this._saveLocation(e)}}">Save</button></div></div>`}async _saveLocation(e){if(!(this._locationBusy||e.canChangeRepo===!1)){this._locationBusy=!0,this._error=null;try{await this.appState.mutate(()=>go(e.id,this._locationRepo,this._locationDirectory.trim(),this._csrf),["bundles","teams","repo-impact","history","scan-sources"]),this._locationBundle=null,await this._load({preserveError:!0})}catch(t){this._error=`Couldn't set bundle location: ${String(t?.message??t)}`}finally{this._locationBusy=!1}}}async _upload(e){await Dr(this,e,t=>Tr(t,this._csrf,this._repoId,this._repoDirectory.trim()),["bundles","bundle-metadata","reports","repo-impact","history","scan-sources"])}async _delete(e){if(globalThis.confirm?.(`Delete \u201C${e.filename}\u201D? Linked reports will keep their pending link.`)){this._error=null;try{await this.appState.mutate(()=>fo(e.id,this._csrf),["bundles","bundle-metadata","reports","repo-impact","history","scan-sources"])}catch(t){this._error=`Delete failed: ${String(t?.message??t)}`}await this._load({preserveError:!0})}}};customElements.define("managed-admin-bundles",Yi);var Xi=class extends L{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0}};static styles=k(P);constructor(){super(),this._loadModels=(e,t)=>this.appState.load("models","scan models",i=>Ue(i,$),{signal:e,apply:t}),this._source=null,this._error=null,this._loadReportSources=(e,t)=>this.appState.load("scan-sources","scan report inputs",async i=>{let[s,o]=await Promise.all([$("/api/admin/reports",{signal:i,credentials:"same-origin"}),$("/api/admin/scan-results",{signal:i,credentials:"same-origin"})]);if(!s.ok)throw new Error(`Reports: HTTP ${s.status}`);if(!o.ok&&o.status!==404)throw new Error(`Scan results: HTTP ${o.status}`);let n=await s.json();return n.reports=await Promise.all((n.reports??[]).filter(a=>a.visible&&a.repoId!=null).map(async a=>{let l=await $(`/api/admin/reports/${encodeURIComponent(a.id)}`,{signal:i,credentials:"same-origin"});if(!l.ok)throw new Error(`Report ${a.filename}: HTTP ${l.status}`);return{...a,content:await l.text()}})),xa(n,o.ok?await o.json():{bundles:[],results:[]})},{signal:e,apply:t})}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("bundles","bundles",zr,e=>{this._source=ma(e)})}render(){return c`<div class="wrap">${O("manage-scans",this._role,this.allowShare)} ${this._error?c`<p class="msg error" role="alert">Couldn’t load scan sources: ${this._error} <button type="button" class="btn" @click="${()=>{this._load()}}">Retry</button></p>`:h}<deepview-scan-page hide-heading .selection="${this.selection}" .source="${this._source}" .sourceLoading="${this._loading&&this._source==null}" .loadBundle="${fa}" .loadModels="${this._loadModels}" .loadReportSources="${this._loadReportSources}" .createBundleHref="${e=>Number.isSafeInteger(e)&&e>0?wa({view:"manage-bundles",createRepoId:e}):null}"></deepview-scan-page></div>`}};customElements.define("managed-admin-scans",Xi);var Qi=class extends L{static properties={_data:{state:!0},_error:{state:!0},_busy:{state:!0},_renamingId:{state:!0},_repoChoices:{state:!0},_memberChoices:{state:!0}};static styles=[k($o),k(P)];constructor(){super(),this._data=null,this._error=null,this._busy=!1,this._renamingId=null,this._repoChoices=new Map,this._memberChoices=new Map}connectedCallback(){super.connectedCallback(),this._load()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("teams","teams",Or,t=>{this._data=t})}async _do(e){if(!this._busy){this._busy=!0,this._error=null;try{await this.appState.mutate(e,["teams","users","reports","history"])}catch(t){this._error=String(t?.message??t)}finally{this._busy=!1,await this._load({preserveError:!0})}}}render(){return c`<div class="wrap">${O("manage-teams",this._role,this.allowShare)}<h1 class="sr-only">Teams</h1><div class="page-intro"><p class="intro">Manage repository and finding access for each team.</p><span class="result-count">${this._data?.teams?.length??"\u2026"} teams</span></div><div class="create-team"><label class="sr-only" for="new-team-name">New team</label> <input id="new-team-name" class="new-name" type="text" placeholder="Team name" maxlength="100" ?disabled="${this._busy}" @keydown="${e=>{e.key==="Enter"&&this._create()}}"> <button class="btn primary" ?disabled="${this._busy}" @click="${()=>this._create()}">${Hi} Create team</button><p class="access-note">All members can view standard findings. Set dependencies and security access per member.</p></div><div aria-busy="${this._loading}">${this._body()}</div></div>`}_body(){if(this._error!=null&&this._data==null)return c`<p class="msg error">Couldn't load teams: ${this._error}</p>`;if(this._data==null)return ee("Loading teams\u2026");let e=Array.isArray(this._data.teams)?this._data.teams:[];return c`${this._error==null?h:c`<p class="msg error">${this._error}</p>`} ${e.length===0?c`<p class="msg">No teams yet. Create one above.</p>`:e.map(t=>this._team(t))}`}_team(e){return c`<section class="team" aria-label="${e.name}"><div class="team-head"><span class="team-icon" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="5" r="2.5"/><path d="M1.5 13v-1c0-2 1.8-3.5 4.5-3.5s4.5 1.5 4.5 3.5v1M11 2.5a2.5 2.5 0 0 1 0 5M12 9c1.7.5 2.5 1.5 2.5 3v1"/></svg></span>${this._renamingId===e.id?c`<input class="rename-input" type="text" .value="${e.name}" maxlength="100" aria-label="Team name" @keydown="${t=>this._renameKey(t,e)}"> <button class="btn" ?disabled="${this._busy}" @click="${t=>this._saveRename(e,t)}">Save</button> <button class="btn" @click="${()=>{this._renamingId=null}}">Cancel</button>`:c`<h2 class="team-name">${e.name}</h2><span class="team-actions"><button class="icon-btn" aria-label="${`Rename ${e.name}`}" ?disabled="${this._busy}" @click="${()=>{this._renamingId=e.id}}">${_p}</button> <button class="icon-btn danger" aria-label="${`Delete ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._deleteTeam(e)}">${es}</button></span>`}</div><div class="team-body"><div class="sub"><h3 class="sub-title">Repositories <span class="count">${e.repos.length}</span></h3>${e.repos.length===0?c`<p class="muted">No repositories linked.</p>`:c`<ul class="links">${e.repos.map(t=>this._repoRow(e,t))}</ul>`} ${this._addRepoRow(e)}</div><div class="sub"><h3 class="sub-title">Members <span class="count">${e.members.length}</span></h3>${e.members.length===0?c`<p class="muted">No members.</p>`:c`<ul class="links">${e.members.map(t=>this._memberRow(e,t))}</ul>`} ${this._addMemberRow(e)}</div></div></section>`}_repoRow(e,t){return c`<li class="repo-row">${Ia} <span class="repo-copy"><span class="ln">${t.fullName}</span>${t.path?c`<span class="path">/${t.path.replace(/^\/+/u,"")}</span>`:h}</span> <button class="icon-btn danger" aria-label="${`Remove ${t.fullName}${t.path?`/${t.path}`:""} from ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._do(()=>te("/api/admin/teams/remove-repo",this._csrf,{teamId:e.id,repoId:t.repoId,path:t.path??null}))}">${Ra}</button></li>`}_addRepoRow(e){let t=Array.isArray(this._data.repos)?this._data.repos:[];return t.length===0?c`<p class="muted">No selected repositories to link — pick some on “Manage repositories”.</p>`:c`<div class="add-row"><repository-selector class="add-repo-sel" label="${`Repository to add to ${e.name}`}" placeholder="Add repository…" ?disabled="${this._busy}" .options="${t.map(i=>({value:i.repoId,label:i.fullName}))}" .value="${this._repoChoices.get(e.id)??null}" @repository-change="${i=>{this._repoChoices=new Map(this._repoChoices).set(e.id,i.detail.value)}}"></repository-selector><input class="add-repo-path" type="text" placeholder="Path (optional)" aria-label="${`Repository path in ${e.name} (optional)`}" maxlength="500" ?disabled="${this._busy}"> <button class="btn" aria-label="${`Add repository to ${e.name}`}" ?disabled="${this._busy||!this._repoChoices.has(e.id)}" @click="${i=>this._addRepo(e,i)}">${Hi} Add</button></div>`}_memberRow(e,t){let i=Array.isArray(this._data.permissions)?this._data.permissions:[],s=this._data.users?.some(o=>o.id===t.userId&&Oe(o.role,"manage"));return c`<li class="member-row"><span class="member">${Ma(t.userId,t.login)}<span class="ln">${t.login}</span></span> <span class="perms">${i.map(o=>c`<label class="perm"><input type="checkbox" .checked="${s||t[o]===!0}" ?disabled="${this._busy||s}" aria-label="${`${hr[o]??o} access for ${t.login} in ${e.name}`}" @change="${n=>this._togglePerm(e,t,o,n.target.checked)}"> ${hr[o]??o}</label>`)} </span><button class="icon-btn danger" aria-label="${`Remove ${t.login} from ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._do(()=>te("/api/admin/teams/remove-member",this._csrf,{teamId:e.id,userId:t.userId}))}">${Ra}</button></li>`}_addMemberRow(e){let t=Array.isArray(this._data.users)?this._data.users:[],i=new Set(e.members.map(s=>s.userId));return c`<div class="add-row"><user-selector class="add-member-sel" label="${`Member to add to ${e.name}`}" placeholder="Add member…" ?disabled="${this._busy}" .users="${t.map(s=>({...s,disabled:i.has(s.id),detail:i.has(s.id)?"Member":""}))}" .value="${this._memberChoices.get(e.id)??null}" @user-change="${s=>{this._memberChoices=new Map(this._memberChoices).set(e.id,s.detail.value)}}"></user-selector><button class="btn" aria-label="${`Add member to ${e.name}`}" ?disabled="${this._busy||!this._memberChoices.has(e.id)||i.has(this._memberChoices.get(e.id))}" @click="${()=>this._addMember(e)}">${Hi} Add</button></div>`}_create(){let e=this.renderRoot.querySelector(".new-name"),t=e?.value.trim();t&&this._do(async()=>{await te("/api/admin/teams",this._csrf,{name:t}),e&&(e.value="")})}_deleteTeam(e){globalThis.confirm?.(`Delete team \u201C${e.name}\u201D? Its repo + member links are removed.`)&&this._do(()=>te("/api/admin/teams/delete",this._csrf,{teamId:e.id}))}_renameKey(e,t){e.key==="Enter"?this._saveRename(t,e):e.key==="Escape"&&(this._renamingId=null)}_saveRename(e,t){if(this._busy)return;let i=t.target.closest(".team-head")?.querySelector(".rename-input")?.value.trim()??"";this._renamingId=null,!(i===""||i===e.name)&&this._do(()=>te("/api/admin/teams/rename",this._csrf,{teamId:e.id,name:i}))}_addRepo(e,t){let i=t.target.closest(".add-row"),s=this._repoChoices.get(e.id);if(!Number.isSafeInteger(s)||s<=0)return;let o=i?.querySelector(".add-repo-path")?.value??"";this._do(async()=>{await te("/api/admin/teams/set-repo",this._csrf,{teamId:e.id,repoId:s,path:o});let n=new Map(this._repoChoices);n.delete(e.id),this._repoChoices=n;let a=i?.querySelector(".add-repo-path");a&&(a.value="")})}_addMember(e){let t=this._memberChoices.get(e.id);!t||e.members.some(i=>i.userId===t)||this._do(async()=>{await te("/api/admin/teams/set-member",this._csrf,{teamId:e.id,userId:t});let i=new Map(this._memberChoices);i.delete(e.id),this._memberChoices=i})}_togglePerm(e,t,i,s){if(this._data.users?.some(n=>n.id===t.userId&&Oe(n.role,"manage")))return;let o={};for(let n of this._data.permissions??[])o[n]=t[n]===!0;o[i]=s,this._do(()=>te("/api/admin/teams/set-member",this._csrf,{teamId:e.id,userId:t.userId,...o}))}};customElements.define("managed-admin-teams",Qi);S();z();var La=`.link-team{margin-top:1.5rem}.link-team h2{margin:0 0 .5rem;font-size:1rem;font-weight:600}.link-table{overflow-x:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:.8rem}th{color:var(--muted);font-weight:500}th,td{padding:.6rem .65rem;border-bottom:1px solid var(--border);white-space:nowrap}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0;text-align:right}
85
- `;async function Pp(r){let e=await $("/api/admin/links",{signal:r,credentials:"same-origin"});if(!e.ok)throw new Error(`HTTP ${e.status}`);let t=await e.json();if(!Array.isArray(t?.shares))throw new Error("No public links returned");return t}var ns=class extends L{static properties={_data:{state:!0},_error:{state:!0}};static styles=[k(P),k(La)];constructor(){super(),this._data=null,this._error=null}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("links","public links",Pp,e=>{this._data=e})}async _edit(e){let{openManagedShareDialog:t}=await Promise.resolve().then(()=>(os(),ss));await t({id:e.teamId,name:e.teamName},e.id,this.session),this.isConnected&&await this._load()}_groups(){let e=new Map;for(let t of this._data?.shares??[])e.has(t.teamId)||e.set(t.teamId,{name:t.teamName,links:[]}),e.get(t.teamId).links.push(t);return[...e.values()]}_body(){return this._data==null?this._error?c`<p class="msg error">Couldn't load public links: ${this._error}</p>`:ee("Loading public links\u2026"):this._data.shares.length===0?c`<p class="msg">No public links. Create one with the share button beside a workspace in the sidebar.</p>`:this._groups().map(e=>c`<section class="link-team" aria-label="${e.name}"><h2>${e.name}</h2><div class="link-table"><table><thead><tr><th>Link</th><th>Created by</th><th>Created</th><th>Security</th><th>Dependencies</th><th><span class="sr-only">Actions</span></th></tr></thead><tbody>${e.links.map(t=>c`<tr><td><span title="${t.id}">${t.id.slice(0,8)}</span></td><td>${t.createdBy}</td><td>${new Date(t.createdAt).toLocaleString()}</td><td>${t.permissions.security?"On":"Off"}</td><td>${t.permissions.dependencies?"On":"Off"}</td><td><button class="btn" aria-label="${`Edit public link ${t.id.slice(0,8)} for ${e.name}`}" @click="${()=>this._edit(t)}">Edit</button></td></tr>`)}</tbody></table></div></section>`)}render(){return c`<div class="wrap">${O("manage-links",this._role,this.allowShare)}<h1 class="sr-only">Public links</h1><div class="page-intro"><p class="intro">Manage public links and the findings each link can show.</p><span class="result-count">${this._data?.shares.length??"\u2026"} links</span></div>${this._loading&&this._data?c`<span class="sr-only" role="status">Refreshing public links…</span>`:h}<div aria-busy="${this._loading}">${this._body()}</div></div>`}};customElements.define("managed-admin-links",ns);z();Q();_t();z();function Bp(r,e){return new Promise(t=>{if(e.aborted){t();return}let i=()=>{clearTimeout(s),e.removeEventListener("abort",i),t()},s=setTimeout(i,r);e.addEventListener("abort",i,{once:!0})})}async function Dp(r,{signal:e,onUpdate:t,onTeams:i,onClose:s}){if(ge())return;let o=1e3,n=async(a,l,d)=>{if(d.throwIfAborted(),a==="close")return await s(),!1;if(a==="triage"||a==="teams"){let u=null;if(a==="teams")try{let p=JSON.parse(l);typeof p?.revision=="string"&&(u=p.revision)}catch{}if(await(a==="teams"?i?.(d,u):t(d))===!1)throw new Error("Team refresh failed");d.throwIfAborted(),o=1e3}return!0};for(;!e.aborted;){let a=new AbortController,l=()=>a.abort();e.addEventListener("abort",l,{once:!0});let d,u,p=()=>{clearTimeout(u),u=setTimeout(l,45e3)};try{p();let m=await $(r?`/api/teams/${encodeURIComponent(r)}/feed`:"/api/teams/feed",{credentials:"same-origin",headers:{accept:"text/event-stream"},signal:a.signal});if([401,403,404].includes(m.status)){await m.body?.cancel(),e.aborted||await s();return}if(!m.ok||!m.headers.get("content-type")?.startsWith("text/event-stream"))throw await m.body?.cancel(),new Error("Team feed unavailable");if(d=m.body.getReader(),await jp(d,e,p,(g,v)=>n(g,v,a.signal)))return}catch{}finally{clearTimeout(u),l(),await d?.cancel().catch(()=>{}),e.removeEventListener("abort",l)}await Bp(o,e),o=Math.min(o*2,3e4)}}async function jp(r,e,t,i){let s=new TextDecoder,o="";for(;!e.aborted;){let{done:n,value:a}=await r.read();if(n)return!1;if(t(),o=(o+s.decode(a,{stream:!0})).replaceAll(`\r
81
+ `;S();var Bn=c`<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>`;S();var bi=c`<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>`;S();var Pn=c`<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>`;S();var Dn=c`<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>`;S();var jn=c`<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>`;S();var Un=c`<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>`;S();var Fn=c`<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>
82
+ `;S();var Hn=c`<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>`;var qn={anthropic:On,deepseek:Tn,google:Nn,moonshot:bi,moonshotai:bi,nvidia:Pn,openai:Dn,openrouter:jn,qwen:Un,xiaomi:Fn,"x-ai":Bn,"z-ai":Hn},fp=c`<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 vi(r){return Object.hasOwn(qn,r)?qn[r]:fp}var gp=c`<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>`,yi=class extends E{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=M`: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=Ze,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=e=>{e.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(e){(e.has("loadModels")||e.has("pending"))&&this.isConnected&&this._load(),e.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 e=new AbortController;this._controller=e,this._error=null;let t=!1,i=s=>{if(e.signal.aborted)return;t=!0,this._models=s.models;let o=s.models.find(n=>n.id===this.value);o?o.efforts.includes(this.effort)||this._setEffort(We(o)):this._select(s.defaultModel)};try{i(await this.loadModels(e.signal,i))}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}}_close(){this._resetMenuPosition();let e=this.renderRoot.querySelector("details");e&&(e.open=!1)}_resetMenuPosition(){this._positionRequest++;let e=this.renderRoot.querySelector(".menu");e&&delete e.dataset.positioned}_toggleMenu(e){this._resetMenuPosition(),e.currentTarget.open&&this._positionMenu()}get _selectedRow(){return fi(this._models).find(e=>e.id===this.value||e.pro?.id===this.value)}async _positionMenu(){let e=++this._positionRequest,t=this.renderRoot.querySelector("details"),i=this.renderRoot.querySelector("summary"),s=this.renderRoot.querySelector(".menu");if(!t?.open||!i||!s)return;let o=i.getBoundingClientRect(),n=6,a=8,l=gi(this._models),d=l.reduce((F,z)=>F+z.models.length,0),h=Math.min(3,l.length,Math.ceil((d+l.length*1.5)/9)),p=parseFloat(getComputedStyle(s).fontSize),m=0;for(let F of s.querySelectorAll(".choice span, legend")){let z=document.createRange();z.selectNodeContents(F),m=Math.max(m,z.getBoundingClientRect().width)}let f=Math.max(11*p,Math.min(18*p,m+2.5*p)),g=1.3*p+2,y=Math.max(1,Math.min(h,Math.floor((window.innerWidth-a*2-g+p)/(f+p)))),v=Math.min(y*f+(y-1)*p+g,window.innerWidth-a*2),b=Math.max(a,Math.min(o.left,window.innerWidth-v-a));if(this._menuColumns=y,await this.updateComplete,e!==this._positionRequest||!this.isConnected||!t.open)return;s.style.left=`${b}px`,s.style.width=`${v}px`,s.style.setProperty("--model-columns",y),s.style.maxHeight=`${Math.max(0,window.innerHeight-a*2)}px`;let k=s.getBoundingClientRect().height,A=window.innerHeight-o.bottom-n-a,R=o.top-n-a,D=A<k&&R>A?o.top-n-k:o.bottom+n;s.style.bottom="auto",s.style.top=`${Math.max(a,Math.min(D,window.innerHeight-k-a))}px`,s.dataset.positioned=""}_select(e,{preserveEffort:t=!1,close:i=!0}={}){let s=this._models.find(o=>o.id===e);s&&(this.value=e,this._setEffort(t&&s.efforts.includes(this.effort)?this.effort:We(s)),i&&this._close())}_selectRow(e){let t=this._selectedRow?.pro?.id===this.value;this._select(t&&e.pro?e.pro.id:e.id)}_togglePro(){let e=this._selectedRow;e?.pro&&this._select(this.value===e.pro.id?e.id:e.pro.id,{preserveEffort:!0,close:!1})}_setEffort(e){this.effort=e,this.dispatchEvent(new CustomEvent("model-change",{detail:{model:this.value,effort:e},bubbles:!0,composed:!0}))}render(){let e=this._models.find(o=>o.id===this.value);if(this.pending||!e)return c`<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?c`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?c`<div class="extra"><slot name="effort-extra"></slot></div>`:u}</div>`;let t=this._selectedRow,i=bt(e.id),s=zn(gi(this._models),this._menuColumns);return c`${this._error?c`<p class="message error" role="alert">Couldn’t refresh models: ${this._error}<button class="retry" @click="${()=>{this._load()}}">Retry</button></p>`:u}<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="${o=>{o.key==="Escape"&&(this._close(),this.renderRoot.querySelector("summary")?.focus())}}"><summary aria-labelledby="model-label selected-model" @click="${this._resetMenuPosition}"><span class="${`icon ${i.key}`}" aria-hidden="true">${vi(i.key)}</span><span class="selected-copy"><strong id="selected-model">${Oe(t.id)}</strong><small>${i.name}</small></span>${t.pro?c`<span class="pro-space" aria-hidden="true"></span>`:u}${gp}</summary><div class="menu"><div class="groups">${s.map(o=>c`<div class="provider-column">${o.map(n=>this._modelSection(n))}</div>`)}</div></div></details>${t.pro?c`<button type="button" class="pro-toggle" role="switch" aria-label="Pro model" aria-checked="${e.id===t.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="${e.id===t.pro.id}" @change="${this._togglePro}"><span>Pro</span></label>`:u}</div></div>${e.efforts.length>0?this._effortSlider(e.efforts):c`<div class="field" aria-hidden="true"></div>`} ${this.hasExtra?c`<div class="extra"><slot name="effort-extra"></slot></div>`:u}</div>`}_modelSection({key:e,models:t}){return c`<fieldset><legend><span class="${`icon ${e}`}" aria-hidden="true">${vi(e)}</span>${bt(t[0].id).name}</legend>${t.map(i=>c`<label class="choice"><input type="radio" name="scan-model" value="${i.id}" .checked="${i.id===this.value||i.pro?.id===this.value}" @change="${()=>{this._selectRow(i),this.renderRoot.querySelector("summary")?.focus()}}"><span>${Oe(i.id)}</span></label>`)}</fieldset>`}_effortSlider(e){let t=Math.max(0,e.indexOf(this.effort)),i=Math.max(1,e.length-1);return c`<div class="field"><div class="label"><label for="effort">Effort</label><output for="effort">${Te(e[t])}</output></div><div class="slider" style="${`--effort-fill: calc(var(--thumb-size) / 2 + (100% - var(--thumb-size)) * ${t/i})`}"><input id="effort" type="range" min="0" max="${i}" step="1" .value="${String(t)}" ?disabled="${e.length===1}" aria-valuetext="${Te(e[t])}" @input="${s=>this._setEffort(e[Number(s.target.value)])}"><div class="steps">${e.map((s,o)=>c`<button type="button" class="${`step ${s===this.effort?"active":""}`}" style="${`--step-position: ${o/i*100}%`}" aria-label="${`Set effort to ${Te(s)}`}" aria-pressed="${s===this.effort}" @click="${()=>this._setEffort(s)}">${Te(s)}</button>`)}</div></div></div>`}};customElements.get("scan-model-picker")||customElements.define("scan-model-picker",yi);function bp(r){if(/^https?:\/\//iu.test(r)){try{let t=new URL(r),i=t.pathname.split("/").filter(Boolean);if(i.length>=2)return{owner:`${t.host}/${i[0]}`,name:i.slice(1).join("/")}}catch{}return{owner:null,name:r}}let e=/^([^\s/:]+)\/(.+)$/u.exec(r);return e?{owner:e[1],name:e[2]}:{owner:null,name:r}}var Vn=r=>r.normalize("NFKC").toLocaleLowerCase(),wi=(r,e)=>r.localeCompare(e,void 0,{numeric:!0,sensitivity:"base"}),_i=Symbol("other repositories");function tr(r,e="",t=null,{includeSingletonOrganizations:i=!1}={}){let s=r.map(b=>({...b,...b.special?{owner:null,name:b.label}:bp(b.label)})),o=new Map;for(let b of s)b.owner!=null&&o.set(b.owner,(o.get(b.owner)??0)+1);let n=i?1:2,a=[...o].filter(([,b])=>b>=n).toSorted(([b],[k])=>wi(b,k)).map(([b,k])=>({value:b,name:b,count:k})),l=b=>(o.get(b.owner)??0)<n,d=s.filter(b=>!b.special&&!b.reset&&l(b)).length;d>0&&a.push({value:_i,name:"Other",count:d});let h=a.some(b=>b.value===t)?t:null,p=Vn(e.trim()).split(/\s+/u).filter(Boolean),m=b=>p.every(k=>Vn(b.label).includes(k)),f=s.filter(b=>b.reset||b.special&&m(b)),g=s.filter(b=>!b.reset&&!b.special&&m(b)&&(h==null||(h===_i?l(b):b.owner===h))),y=new Map;for(let b of g){let k=(o.get(b.owner)??0)>=n?b.owner:null;y.has(k)||y.set(k,[]),y.get(k).push(b)}let v=[...y].toSorted(([b],[k])=>b==null?1:k==null?-1:wi(b,k)).map(([b,k])=>({label:b??(a.some(A=>A.value!==_i)?"Other":null),organization:b!=null,options:k.toSorted((A,R)=>wi(A.label,R.label))}));return{facets:a,activeFacet:h,pinned:f,sections:v,count:g.length+f.filter(b=>!b.reset).length,total:s.filter(b=>!b.reset).length,showFacets:a.length>1}}var xi=class extends P{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 tr(this.options,this._query,this._facet)}};customElements.get("repository-selector")||customElements.define("repository-selector",xi);var $i=class extends P{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 e=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),t=this.options.filter(i=>e.every(s=>i.label.normalize("NFKC").toLocaleLowerCase().includes(s))).toSorted((i,s)=>i.label.localeCompare(s.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:t}],facets:[],showFacets:!1,count:t.length,total:this.options.length}}};customElements.get("workspace-selector")||customElements.define("workspace-selector",$i);S();ge();function ee(r){return!Number.isFinite(r)||r<0?"\u2014":r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(1)} KiB`:r<1073741824?`${(r/1048576).toFixed(1)} MiB`:`${(r/1073741824).toFixed(1)} GiB`}function vt(r){return Array.isArray(r)?r.reduce((e,t)=>({bytes:e.bytes!=null&&Number.isFinite(t.bytes)?e.bytes+t.bytes:null,lines:e.lines!=null&&Number.isFinite(t.lines)?e.lines+t.lines:null}),{bytes:0,lines:0}):{bytes:null,lines:null}}function ki(r){return(r??[]).filter(e=>!["resource:base64","directory"].includes(e.format))}function vp(r){return r.map(e=>{let t=["sourcemap","sourcemaps"].includes(e.kind)||e.filename.toLowerCase().endsWith(".map")?"sourcemap":"stasis",i=t==="sourcemap"?"Sourcemap":"Stasis",s=[];if(typeof e.size=="string"&&!["","\u2014"].includes(e.size)&&s.push(e.size),e.files){s.push(`${e.files.length.toLocaleString()} files`);let{lines:o}=vt(e.files);o!=null&&s.push(`${o.toLocaleString()} LoC`)}else e.summary&&(Number.isSafeInteger(e.summary.files)&&e.summary.files>=0&&s.push(`${e.summary.files.toLocaleString()} files`),Number.isSafeInteger(e.summary.lines)&&e.summary.lines>=0&&s.push(`${e.summary.lines.toLocaleString()} LoC`));return{value:e.id,label:e.filename,detail:i,format:t,secondary:s.join(" \xB7 ")}})}var Si=class extends P{static properties={bundles:{attribute:!1}};static styles=[P.styles,M`.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(e){e.has("bundles")&&(this.options=vp(this.bundles))}optionIcon(e){return c`<span class="bundle-icon" aria-hidden="true">${e.format==="sourcemap"?I(fe):c`<img src="./stasis.svg" alt="">`}</span>`}optionTitle(e){return u}choices(){let e=this._query.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),t=this.options.filter(i=>e.every(s=>`${i.label} ${i.detail}`.normalize("NFKC").toLocaleLowerCase().includes(s))).toSorted((i,s)=>i.label.localeCompare(s.label,void 0,{numeric:!0,sensitivity:"base"}));return{pinned:[],sections:[{label:null,options:t}],facets:[],showFacets:!1,count:t.length,total:this.options.length}}};customElements.get("bundle-selector")||customElements.define("bundle-selector",Si);S();var yt=r=>({kind:r,sourceId:null,ids:new Set}),Ci=class extends E{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=yt("bundle"),this._link=yt("repository")}disconnectedCallback(){super.disconnectedCallback(),this._controller?.abort()}updated(e){if(e.has("loadSources")){this._load();return}e.has("mode")&&this._selectOnlySource(),e.has("restore")&&this._restore(),["_sources","_merge","_link","mode","restore"].some(t=>e.has(t))&&this._notify()}get _current(){return this.mode==="merge"?this._merge:this._link}get _parents(){if(this.mode==="merge")return this._sources?.merge?.bundles??[];let e=this._sources?.link?.reports??[];return this._current.kind==="workspace"?(this._sources?.link?.workspaces??[]).filter(t=>e.some(i=>t.reports.includes(i.id))):(this._sources?.link?.repositories??[]).filter(t=>e.some(i=>i.repoIds.includes(t.id)))}get _parent(){return this._parents.find(e=>e.id===this._current.sourceId)}get _scopeOptions(){let e=this._sources?.link?.reports??[];return this._parents.map(t=>{let i=e.filter(s=>this._current.kind==="workspace"?t.reports.includes(s.id):s.repoIds.includes(t.id)).length;return{value:t.id,label:t.label,detail:`${i} ${i===1?"report":"reports"}`}})}get _inputs(){return this._parent?this.mode==="merge"?(this._sources?.merge?.results??[]).filter(e=>e.bundleId===this._parent.id):(this._sources?.link?.reports??[]).filter(e=>this._current.kind==="workspace"?this._parent.reports.includes(e.id):e.repoIds.includes(this._parent.id)):[]}get selection(){let e=this._parent;return{mode:this.mode,source:e?{kind:this._current.kind,id:e.id,label:e.label??e.filename}:null,inputs:this._loading||this._error?[]:this._inputs.filter(t=>this._current.ids.has(t.id))}}_notify(){this.dispatchEvent(new CustomEvent("report-inputs-change",{detail:this.selection,bubbles:!0,composed:!0}))}async _load(){this._controller?.abort();let e=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let t=!1,i=s=>{if(e.signal.aborted)return;let o=!t;t=!0,this._sources=s,o&&(this._merge=yt("bundle"),this._link=yt(Array.isArray(s.link?.workspaces)?"workspace":"repository")),this._selectOnlySource(),o&&this._restore(),this._loading=!1,this._notify()};try{i(this.loadSources?await this.loadSources(e.signal,i):{merge:{bundles:[],results:[]},link:{repositories:[],reports:[]}})}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}finally{e.signal.aborted||(this._loading=!1,this._notify())}}_setCurrent(e){this.mode==="merge"?this._merge=e:this._link=e}_selectSource(e){e===this._current.sourceId||!this._parents.some(t=>t.id===e)||(this._setCurrent({...this._current,sourceId:e,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.map(t=>t.id))}),this._notify())}_changeKind(e){["workspace","repository"].includes(e)&&(e==="workspace"&&!Array.isArray(this._sources?.link?.workspaces)||(e!==this._link.kind&&(this._link=yt(e)),this._selectOnlySource(),this._notify()))}_selectOnlySource(){this.mode==="link"&&this._current.sourceId==null&&this._parents.length===1&&this._selectSource(this._parents[0].id)}_toggle(e,t){if(!this._inputs.some(s=>s.id===e))return;let i=new Set(this._current.ids);t?i.add(e):i.delete(e),this._setCurrent({...this._current,ids:i}),this._notify()}_selectAll(e){this._setCurrent({...this._current,ids:new Set(e?this._inputs.map(t=>t.id):[])}),this._notify()}_restore(){let e=this.restore;if(!this._sources||e?.mode!==this.mode||!e.source)return;let t=this.mode==="merge"?"bundle":e.source.kind;this.mode==="link"&&(t==="workspace"?!Array.isArray(this._sources.link?.workspaces):t!=="repository")||(this._setCurrent({kind:t,sourceId:e.source.id,ids:new Set}),this._setCurrent({...this._current,ids:new Set(this._inputs.filter(i=>e.inputIds.includes(i.id)).map(i=>i.id))}))}render(){let e=this.mode==="merge",t=this._inputs,i=t.filter(n=>this._current.ids.has(n.id)).length,s=Array.isArray(this._sources?.link?.workspaces),o=this._parent?e?"No scan results for this bundle.":`No saved reports in this ${this._current.kind}.`:e?"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 c`<section class="panel" aria-label="${e?"Merge scan results":"Link saved reports"}" aria-busy="${this._loading}"><div class="source">${!e&&s?c`<div class="kinds" role="radiogroup" aria-label="Report source">${[["workspace","Workspace"],["repository","Repository"]].map(([n,a])=>c`<button type="button" role="radio" aria-checked="${n===this._link.kind}" @click="${()=>this._changeKind(n)}">${a}</button>`)}</div>`:u}<div class="field">${e?c`<span>Bundle with scan results</span>`:u} ${e?c`<bundle-selector .bundles="${this._parents}" .value="${this._current.sourceId}" ?disabled="${this._loading||this._parents.length===0}" @bundle-change="${n=>this._selectSource(n.detail.value)}"></bundle-selector>`:this._current.kind==="workspace"?c`<workspace-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @workspace-change="${n=>this._selectSource(n.detail.value)}"></workspace-selector>`:c`<repository-selector .options="${this._scopeOptions}" .value="${this._current.sourceId}" ?disabled="${this._loading}" @repository-change="${n=>this._selectSource(n.detail.value)}"></repository-selector>`}</div></div><div class="input-results">${this._error?c`<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?c`<p class="empty" role="status">Loading report inputs…</p>`:t.length>0?c`<div class="list-head"><label><input type="checkbox" aria-label="Select all" ?disabled="${this._loading}" .checked="${i===t.length}" .indeterminate="${i>0&&i<t.length}" @change="${n=>this._selectAll(n.target.checked)}"><strong>All</strong></label><span>${i} of ${t.length} selected</span></div><div class="list">${t.map(n=>this._row(n))}</div>`:c`<p class="empty">${e&&this._parents.length===0?"No scan results available.":o}</p>`}</div></section>`}_row(e){let t=this.mode==="link"?e.appFindings:e.findings,i=[e.model?Oe(e.model):null,t==null?null:`${t} ${this.mode==="link"?"app ":""}${t===1?"finding":"findings"}`,e.createdAt,e.repo?`${e.repo}${e.directory?`/${e.directory}`:""}`:null].filter(Boolean);return c`<label class="option"><input type="checkbox" ?disabled="${this._loading}" .checked="${this._current.ids.has(e.id)}" @change="${s=>this._toggle(e.id,s.target.checked)}">${I(ti[e.analyzer]??ti.default)}<span class="copy"><strong>${e.title??e.filename}</strong><span>${i.join(" \xB7 ")}</span></span></label>`}static styles=M`: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",Ci);S();S();var yp=c`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4h7M6 8h7M6 12h7M3 4h.01M3 8h.01M3 12h.01"/></svg>`,wp=c`<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>`,Ei=class extends E{static properties={isolate:{type:Boolean},vertical:{type:Boolean,reflect:!0}};constructor(){super(),this.isolate=!1,this.vertical=!1}_select(e){this.isolate!==e&&(this.isolate=e,this.dispatchEvent(new CustomEvent("depth-change",{detail:{isolate:e},bubbles:!0,composed:!0})))}render(){return c`<div class="scan-depth"><div class="depth-options" role="radiogroup" aria-label="Scan depth" aria-orientation="${this.vertical?"vertical":"horizontal"}" aria-describedby="${this.vertical?u:"scan-depth-description"}">${[[!1,"List",yp],[!0,"Isolate",wp]].map(([e,t,i])=>c`<label class="depth-choice"><input type="radio" name="scan-depth" value="${e?"isolate":"list"}" .checked="${this.isolate===e}" @change="${()=>this._select(e)}"><span>${i}${t}</span></label>`)}</div>${this.vertical?u:c`<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=M`: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",Ei);var Ri=["security","generic","correctness"],_p=r=>JSON.stringify([r.mode,r.model,r.effort,r.isolate]);function Gn(r){let e=r[0];return e?.model&&r.every(t=>t.model===e.model&&t.effort===e.effort)?{model:e.model,effort:e.effort}:null}function Kn(r,e){let t=e.models.find(i=>i.id===r?.model)??e.models.find(i=>i.id===e.defaultModel)??e.models[0];return t?{model:t.id,effort:t.efforts.includes(r?.effort)?r.effort:We(t)}:null}function Ai(r,e){let t=e.models.find(i=>i.id===e.defaultModel)??e.models[0];return t?(r.length>0?r:[{mode:"generic",isolate:!1}]).map(i=>{let s=e.models.find(o=>o.id===i.model)??t;return{...i,mode:Ri.includes(i.mode)?i.mode:"generic",model:s.id,effort:s.efforts.includes(i.effort)?i.effort:We(s),isolate:!!i.isolate}}):[]}function Mi(r){let e=new Set;return r.map(t=>{let i=_p(t),s=e.has(i);return e.add(i),s})}var Ii=class extends E{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(e){if(e.has("loadModels")){this._load();return}e.has("value")&&this.value!==this._lastEmitted&&!this._loading?(this._setRows(this.value),this._notify()):(e.has("appModel")||e.has("appModelAutomatic"))&&!this._loading&&this._notify()}_setRows(e){this._rows=Ai(e,this._catalogue).map(t=>({...t,id:t.id??++this._nextId}))}_notify(){let e=this._loading&&this._rows.length===0?this.value:this._rows.map(({id:i,...s})=>s);this._loading||this._syncAppModel();let t=!this._loading&&!this._error&&this._resolvedAppModel!=null&&e.length>0&&!Mi(e).includes(!0);this._lastEmitted=e,this.dispatchEvent(new CustomEvent("regimes-change",{detail:{value:e,ready:t,appModel:this._resolvedAppModel??this.appModel,appModelAutomatic:this.appModelAutomatic},bubbles:!0,composed:!0}))}_syncAppModel(){let e=Gn(this._rows),t=Kn((this.appModelAutomatic?e:null)??this.appModel??this._rows[0],this._catalogue);(this.appModel?.model!==t?.model||this.appModel?.effort!==t?.effort)&&(this.appModel=t),this._resolvedAppModel=this.appModel;let i=!!e&&e.model===t?.model&&e.effort===t?.effort;i!==this._appModelsAgree&&(this._appModelOpen=!i),this._appModelsAgree=i}_changeAppModel(e){e.model===this._resolvedAppModel?.model&&e.effort===this._resolvedAppModel?.effort||(this.appModelAutomatic=!1,this.appModel={model:e.model,effort:e.effort},this._notify())}async _load(){this._controller?.abort();let e=this._controller=new AbortController;this._loading=!0,this._error=null,this._notify();let t=!1,i=s=>{e.signal.aborted||(t=!0,this._catalogue=s,this._sharedModels=()=>Promise.resolve(s),this._setRows(this._rows.length>0?this._rows:this.value),this._loading=!1,this._notify())};try{i(await this.loadModels(e.signal,i))}catch(s){!e.signal.aborted&&!t&&(this._error=String(s?.message??s))}finally{e.signal.aborted||(this._loading=!1,this._notify())}}_change(e,t){let i=this._rows.find(o=>o.id===e);if(!i)return;let s=Ai([{...i,...t}],this._catalogue)[0];s&&(this._rows=this._rows.map(o=>o.id===e?s:o),this._notify())}_add(){let e=this._rows.at(-1);e&&(this._rows=[...this._rows,{...e,id:++this._nextId}],this._notify())}_remove(e){this._rows.length<=1||(this._rows=this._rows.filter(t=>t.id!==e),this._notify())}render(){let e=this._loading&&this._rows.length===0,t=e?(this.value.length>0?this.value:[{mode:"generic",isolate:!1}]).map((s,o)=>({...s,id:`pending-${o}`})):this._rows,i=Mi(this._rows);return c`<section aria-label="Scan regimes" aria-busy="${this._loading}"><div class="heading"><h2>Scan regimes</h2><span>${t.length} ${t.length===1?"regime":"regimes"}</span></div>${this._error?c`<p class="message" role="alert">Couldn’t load models: ${this._error} <button type="button" @click="${()=>{this._load()}}">Retry</button></p>`:u} ${er(t,s=>s.id,(s,o)=>this._row(s,o,i[o],e))}<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">${i.includes(!0)?"Change or remove duplicate regimes to run the scan":"Results from these regimes will be merged"}</span></div>${e?c`<div class="app-model"><div class="app-model-placeholder">App model: Loading…</div></div>`:this._appModelRow()}</section>`}_appModelRow(){let e=this._resolvedAppModel;return e?c`<details class="app-model" .open="${q(this._appModelOpen)}" @toggle="${t=>{this._appModelOpen=t.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>${Oe(e.model)}</strong></span><span class="app-model-effort">Effort: <strong>${Te(e.effort)}</strong></span></summary><div class="app-model-controls"><scan-model-picker .loadModels="${this._sharedModels}" .value="${q(e.model)}" .effort="${q(e.effort)}" @model-change="${t=>{t.stopPropagation(),this._changeAppModel(t.detail)}}"></scan-model-picker></div></details>`:u}_row(e,t,i,s=!1){return c`<div class="${`row${i?" duplicate":""}`}" ?inert="${s}" role="group" aria-label="${`Regime ${t+1}`}" aria-describedby="${i?`duplicate-${e.id}`:u}"><div class="mode" role="radiogroup" aria-label="Scan mode">${Ri.map(o=>c`<label class="mode-choice"><input type="radio" name="${`regime-mode-${e.id}`}" .checked="${e.mode===o}" @change="${()=>this._change(e.id,{mode:o})}"><span>${o[0].toUpperCase()+o.slice(1)}</span></label>`)}</div><scan-model-picker .pending="${s}" .loadModels="${this._sharedModels}" .value="${q(e.model)}" .effort="${q(e.effort)}" @model-change="${o=>{o.stopPropagation(),this._change(e.id,o.detail)}}"></scan-model-picker><div class="row-actions"><scan-depth-toggle vertical .isolate="${e.isolate}" @depth-change="${o=>{o.stopPropagation(),this._change(e.id,{isolate:o.detail.isolate})}}"></scan-depth-toggle>${i?c`<span class="duplicate-label" id="${`duplicate-${e.id}`}">Duplicate regime</span>`:u}</div><button type="button" class="remove" aria-label="${`Remove regime ${t+1}`}" ?disabled="${this._rows.length===1}" @click="${()=>this._remove(e.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=M`: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",Ii);S();ge();var Wn=`: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}}
83
+ `;var $p=[{id:"code",label:"Code",detail:"Run a full scan of the codebase",icon:Jt},{id:"dependencies",label:"Dependency alerts",detail:"Validate incoming alerts against actual code",icon:Wo},{id:"agentic",label:"Agentic",detail:"Free-form analysis with your instructions",icon:Jo},{id:"report",label:"Reports",detail:"Link saved reports or merge scan results",icon:Ve}],kp=[{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"}],Sp=[{id:"link",label:"Link",detail:"Link findings across saved reports"},{id:"merge",label:"Merge",detail:"Combine scan results for one bundle"}],Li=class extends E{static properties={mode:{},analyzer:{},reportMode:{}};static styles=x(Wn);constructor(){super(),this.mode="code",this.analyzer="generic",this.reportMode="link"}_choose(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}render(){let e=this.mode==="code",t=this.mode==="report",i=e?kp:Sp,s=e?this.analyzer:this.reportMode;return c`<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>${$p.map(o=>c`<label class="mode"><input type="radio" name="scan-mode" .checked="${this.mode===o.id}" aria-label="${o.label}" @change="${()=>this._choose("scan-mode-change",{mode:o.id})}"> <span class="mode-icon" aria-hidden="true">${I(o.icon)}</span> <span class="mode-copy"><strong>${o.label}</strong><span>${o.detail}</span></span> <span class="indicator" aria-hidden="true"></span></label>`)}</fieldset>${e||t?c`<div class="subtype-wrap"><fieldset class="${`subtype-options ${t?"report-subtypes":""}`}"><legend class="sr-only">${e?"Code subtype":"Reports submode"}</legend>${i.map(o=>c`<label class="subtype-option"><input type="radio" name="scan-focus" .checked="${s===o.id}" aria-label="${o.label}" @change="${()=>e?this._choose("scan-analyzer-change",{analyzer:o.id}):this._choose("scan-report-mode-change",{mode:o.id})}"> <strong>${o.label}</strong><span>${o.detail}</span></label>`)}</fieldset>${e?c`<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>`:u}</div>`:u}</section>`}};customElements.get("scan-mode-selector")||customElements.define("scan-mode-selector",Li);S();var Zn=M`: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}}`;S();var Jn=[{key:"metro",label:"metro",subtitle:"Metro bundle contents"},{key:"run",label:"run",subtitle:"Node.js CLI"},{key:"add",label:"add",subtitle:"Manually added files"}];function Yn(r){let e=r.filter(i=>i.id!=="all");if(e.length===0)return null;let t=new Map(e.map(i=>[String(i.id).replace(/^reason:/u,""),i]));return t.size!==e.length||[...t.keys()].some(i=>!Jn.some(s=>s.key===i))?null:[{id:"",label:"All files",subtitle:"Everything"},...Jn.filter(i=>t.has(i.key)).map(({key:i,...s})=>({...s,id:t.get(i).id,subtitle:i==="run"&&t.has("metro")?"Bundler and Node.js CLI":s.subtitle}))]}var zi=class extends E{static properties={reasons:{attribute:!1},value:{attribute:!1},label:{type:String}};constructor(){super(),this.reasons=[],this.value="",this.label="Choose scope"}_select(e){this.dispatchEvent(new CustomEvent("scope-change",{detail:{value:e},bubbles:!0,composed:!0}))}render(){let e=this.reasons.filter(s=>s.id!=="all");if(e.length===0)return u;let t=Yn(e);if(!t)return c`<label class="scope-field"><span>Scope</span><select aria-label="${this.label}" .value="${q(this.value==="all"?"":this.value)}" @change="${s=>this._select(s.target.value)}"><option value="">All files</option>${e.map(s=>c`<option value="${s.id}">${s.label??s.id}</option>`)}</select></label>`;let i=t.find(s=>s.id===this.value)??t[0];return c`<div class="scope-toggle"><div class="scope-options" role="radiogroup" aria-label="${this.label}" aria-describedby="scope-description">${t.map(s=>c`<label class="scope-option"><input type="radio" name="scope" value="${s.id}" .checked="${i.id===s.id}" @change="${()=>this._select(s.id)}"><span>${s.label}</span></label>`)}</div><span class="scope-description" id="scope-description">${i.subtitle}</span></div>`}static styles=M`: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",zi);var Xn={code:I(Jt),report:I(Ve)},Oi=class extends E{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=Zn;constructor(){super(),this.loadModels=Ze,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(e){if(e.has("selection")&&(this._pendingSelection=this.selection),e.has("source")&&(this._bundles=this.source?.bundles??[],this._repositories=this.source?.repositories??[],this._scans=this.source?.scans??[]),e.has("source")||e.has("selection")){this._excluded=new Set,this._excludedModules=new Set;let t=this._repositories.find(o=>o.id===this._selectedRepoId),i=this._pendingSelection,s=i?this._bundles.find(o=>o.id===i.bundleId&&(i.repoId==null||o.repoId===i.repoId)):this._bundles.find(o=>o.id===this._selectedBundleId&&o.repoId===this._selectedRepoId)??(this.scopeLabel==="Workspace"?null:this._bundles.find(o=>o.id===this._selectedBundleId))??(t?this._bundles.find(o=>o.repoId===t.id):this._bundles[0]);this._selectedRepoId=s?.repoId??i?.repoId??t?.id??this._repositories[0]?.id??"unattached",this._selectedBundleId=s?.id??null,this._reason=s?.reasons?.[0]?.id??"",i&&(this._tab="new",this._mode="code",this._notice=s||this.source==null?null:"The selected bundle is no longer available in this source. Choose another bundle.",s&&(this._pendingSelection=null))}}updated(e){(e.has("source")||e.has("selection")||e.has("loadBundle"))&&this._loadSelectedBundle()}async _loadSelectedBundle(){this._bundleController?.abort(),this._loadingBundle=!1,this._bundleError=null;let e=this._bundle;if(!this.loadBundle||!e||Array.isArray(e.files))return;let t=this._bundleController=new AbortController;this._loadingBundle=!0;try{let i=await this.loadBundle(e,t.signal);if(t.signal.aborted)return;this._bundles=this._bundles.map(s=>s.id===e.id?{...i,repoId:s.repoId,repo:s.repo}:s),this._reason=i.reasons?.[0]?.id??""}catch(i){t.signal.aborted||(this._bundleError=String(i?.message??i))}finally{t.signal.aborted||(this._loadingBundle=!1)}}disconnectedCallback(){super.disconnectedCallback(),this._bundleController?.abort();for(let e of this._timers)clearTimeout(e);this._timers.clear()}get _repoBundles(){return this._bundles.filter(e=>e.repoId===this._selectedRepoId)}get _bundle(){return this._repoBundles.find(e=>e.id===this._selectedBundleId)}get _reasonData(){return this._bundle?.reasons.find(e=>e.id===this._reason)??this._bundle?.reasons[0]}_packageLabel(e){return e==="__own__"?"Own code":e}get _scopeFiles(){let e=this._reasonData,t=e?.fileModules,i=e?.filePaths?new Set(e.filePaths):null;return(this._bundle?.files??[]).filter(s=>(t==null||t.includes(s.module))&&(i==null||i.has(s.path))).toSorted((s,o)=>o.bytes-s.bytes)}get _files(){return ki(this._scopeFiles)}render(){return c`<div class="wrap">${this.hideHeading?c`<h1 class="sr-only">Scans</h1>`:c`<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?c`<p class="notice" role="status">${this._notice}</p>`:u} ${this._bundleError?c`<p class="notice" role="alert">Couldn’t load bundle: ${this._bundleError}<button @click="${()=>{this._loadSelectedBundle()}}">Retry</button></p>`:u} ${this._tab==="new"?this._newScan():this._history()}</div>`}_newScan(){let e=this._mode,t=this._bundle,i=e==="code"?this._files:e==="dependencies"?this._scopeFiles:t?.files??[],s=this._excluded,o=this._excludedModules,n=i.filter(f=>!s.has(f.path)&&!o.has(f.module)),a=vt(t?.files?n:null),l=new Map;for(let f of i){let g=l.get(f.module)??{bytes:0,count:0,included:0};g.bytes+=f.bytes,g.count++,s.has(f.path)||g.included++,l.set(f.module,g)}let d=[...l.keys()].toSorted((f,g)=>l.get(g).bytes-l.get(f).bytes||this._packageLabel(f).localeCompare(this._packageLabel(g))),h=i.slice(0,80),p=d.filter(f=>!o.has(f)).length,m=this._reportInput?.mode===this._reportMode?this._reportInput.inputs:[];return c`<div class="setup"><scan-mode-selector .mode="${e}" .analyzer="${this._options.analyzer}" .reportMode="${this._reportMode}" @scan-mode-change="${f=>this._changeMode(f.detail.mode)}" @scan-analyzer-change="${f=>this._setOption("analyzer",f.detail.analyzer)}" @scan-report-mode-change="${f=>{this._reportMode=f.detail.mode,this._reportRestore=null}}"></scan-mode-selector>${e==="report"?c`<scan-report-inputs .mode="${this._reportMode}" .loadSources="${this.loadReportSources}" .restore="${this._reportRestore}" @report-inputs-change="${f=>{this._reportInput=f.detail}}"></scan-report-inputs>`:this._sourcePanel(t,i)} ${e==="code"?c`<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>${n.length} of ${i.length} files · ${p} of ${d.length} packages</span> <span>${ee(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>${d.length} total · sorted by size</span></div><div class="package-list">${d.map(f=>{let{bytes:g,count:y,included:v}=l.get(f),b=!o.has(f);return c`<label class="${`package-row ${b?"":"excluded"}`}"><input type="checkbox" .checked="${b}" @change="${k=>this._toggleModule(f)}"><span class="package-name">${this._packageLabel(f)}</span><span class="package-size">${ee(g)} · ${v}/${y}</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 ${h.length} of ${i.length}</span></div>${i.length===0?c`<p class="empty">No files in this selection.</p>`:c`<div class="file-list">${h.map(f=>{let g=!s.has(f.path)&&!o.has(f.module);return c`<label class="${`file ${g?"":"excluded"}`}"><input type="checkbox" .checked="${g}" @change="${y=>this._toggleFile(f,y.target.checked)}"><span class="file-copy"><span class="file-path" data-tooltip-truncated data-tooltip="${f.path}">${f.path}</span><span class="file-meta">${f.size} · ${this._packageLabel(f.module)}</span></span></label>`})}</div>`}</section></div></details>`:u} ${e==="agentic"?this._agenticPanel():u}<slot name="access"></slot>${this._optionsPanel(e,t,e==="report"?m.length:n.length)}</div>`}_sourcePanel(e,t){if(this.sourceLoading)return c`<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 i=this._mode==="code"?this._repoBundles.map(d=>d.files?{...d,files:ki(d.files)}:d.summary?{...d,summary:{...d.summary,files:d.summary.codeFiles}}:d):this._repoBundles,{lines:s}=vt(e?.files?t:null),o=new Map;for(let d of this._bundles)o.set(d.repoId,(o.get(d.repoId)??0)+1);let n=this._repositories.length>1,a=["code","agentic","dependencies"].includes(this._mode)&&e!=null&&(!e.filename.toLowerCase().endsWith(".map")||e.reasons?.some(d=>d.id!=="all")),l=this._repositories.map(d=>{let h=o.get(d.id)??0;return{value:d.id,label:d.label,detail:`${h} ${h===1?"bundle":"bundles"}`,special:d.id==="unattached"}});return c`<section class="panel source-panel" aria-busy="${this._loadingBundle}"><div class="panel-head"><h2>Source</h2></div><div class="${`source-choice ${n?"":"single-repository"}`}">${n?c`<div class="field"><span>${this.scopeLabel}</span>${this.scopeLabel==="Workspace"?c`<workspace-selector .options="${l}" .value="${this._selectedRepoId}" @workspace-change="${d=>this._selectRepoById(d.detail.value)}"></workspace-selector>`:c`<repository-selector .options="${l}" .value="${this._selectedRepoId}" @repository-change="${d=>this._selectRepoById(d.detail.value)}"></repository-selector>`}</div>`:u}<div class="field">${n||this.createBundleHref?this._bundleLabel():u}${i.length>0?c`<bundle-selector .bundles="${i}" .value="${e?.id??null}" @bundle-change="${d=>this._selectBundleById(d.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>${e?.size??"\u2014"}</strong><span>bundle size</span></div><div class="metric">${Xn.report}<strong>${t.length}</strong><span>files</span></div><div class="metric">${Xn.code}<strong>${s==null?"\u2014":s.toLocaleString()}</strong><span>LoC</span></div><div class="metric">${I(fe)}<strong>${new Set(t.map(d=>d.module)).size}</strong><span>packages</span></div></div>${a?c`<div class="scope-slot">${this._scopeField(e)}</div>`:u}</div></div></section>`}_bundleLabel(){let e=this.createBundleHref?.(this._selectedRepoId);return c`<div class="bundle-label"><span>Bundle</span>${e?c`<a class="create-bundle-button" href="${e}">Create a bundle</a>`:u}</div>`}_emptyBundles(){let e=this.createBundleHref?.(this._selectedRepoId);return c`<div class="choice-empty"><span>${this._bundles.length===0?"No stored bundles.":`No stored bundles for this ${this.scopeLabel.toLowerCase()}.`}</span>${e?c`<a href="${e}">Create?</a>`:u}</div>`}_scopeField(e){if(!["code","agentic","dependencies"].includes(this._mode))return u;let t=(e?.reasons??[]).filter(i=>i.id!=="all");return t.length===0?u:c`<bundle-scope-selector .reasons="${t}" .value="${this._reason}" label="${this._mode==="agentic"?"Choose agentic scope":"Choose scan scope"}" @scope-change="${i=>this._changeReason(i.detail.value)}"></bundle-scope-selector>`}_optionsPanel(e,t,i){let s=e==="report"?`${i} ${this._reportMode==="merge"?"scan results":"reports"} selected`:`${t?.filename??"No bundle selected"} \xB7 ${i} files will be analyzed`,o=e==="code"&&this._options.analyzer==="advanced",n=!this.canRun||(e==="report"?i===0:t==null||i===0||o&&(!this._regimesReady||this._regimes.length===0));return c`<section class="panel options"><div class="options-grid">${o?c`<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>`:c`<scan-model-picker .loadModels="${this.loadModels}" ?has-extra="${e==="code"}" .value="${this._options.model}" .effort="${this._options.effort}" @model-change="${a=>{this._options={...this._options,model:a.detail.model,effort:a.detail.effort}}}">${e==="code"?c`<scan-depth-toggle slot="effort-extra" .isolate="${this._options.isolate}" @depth-change="${a=>this._setOption("isolate",a.detail.isolate)}"></scan-depth-toggle>`:u}</scan-model-picker>`}</div><div class="options-footer"><slot name="before-run"></slot><button type="button" class="run" ?disabled="${n}" @click="${()=>this._runScan()}">${e==="report"?this._reportMode==="merge"?"Merge results":"Link reports":"Run scan"}</button><span class="summary">${s}</span></div><div class="checks"><label class="switch"><input type="checkbox" aria-describedby="${this._options.cached?"offline-help":u}" .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?c`<small class="offline-help" id="offline-help">Cache only, no new model requests</small>`:u}</div></section>`}_history(){return c`<section class="panel history"><div class="panel-head"><h2>Scan history</h2><p>${this._scans.length} scans</p></div>${this._scans.length===0?c`<p class="empty">No scans yet.</p>`:this._scans.map(e=>this._scanRow(e))}</section>`}_scanRow(e){let t=e.status==="completed"?e.reportSaved?c`<button type="button" class="action" @click="${()=>this._deleteSavedReport(e)}">Delete saved report</button>`:c`<button type="button" class="action" @click="${()=>this._saveReport(e)}">Save report</button>`:u;return c`<div class="scan-row"><div class="scan-main"><div class="scan-title"><strong>${e.bundleName}</strong><span class="${`status ${e.status}`}">${e.status}</span></div><span class="scan-meta">${e.reason} · ${e.files} ${e.mode==="report"?e.reportMode==="merge"?"results":"reports":"files"} · ${e.createdAt}${e.duration?` \xB7 ${e.duration}`:""}${e.reportSaved?" \xB7 Report saved":e.status==="completed"?" \xB7 Report available":""}</span></div><span class="scan-actions">${t}${e.status==="running"?c`<button type="button" class="action" @click="${()=>this._stopScan(e)}">Stop</button>`:u}${e.status==="stopped"?c`<button type="button" class="action" @click="${()=>this._restartScan(e)}">Restart as new scan</button>`:u}</span><span aria-hidden="true"></span></div>`}_selectBundle(e){this._pendingSelection=null,this._selectedRepoId=e.repoId,this._selectedBundleId=e.id,this._reason=e.reasons?.[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_selectBundleById(e){let t=this._repoBundles.find(i=>i.id===e);t!=null&&this._selectBundle(t)}_selectRepoById(e){if(e===this._selectedRepoId||!this._repositories.some(i=>i.id===e))return;this._selectedRepoId=e,this._pendingSelection=null;let t=this._bundles.find(i=>i.repoId===e);this._selectedBundleId=t?.id??null,this._reason=t?.reasons[0]?.id??"",this._excluded=new Set,this._excludedModules=new Set,this._notice=null,this._loadSelectedBundle()}_changeMode(e){!["dependencies","code","agentic","report"].includes(e)||e===this._mode||(this._mode=e,this._reportInput=null,this._reportRestore=null,this._excluded=new Set,this._excludedModules=new Set,this._notice=null)}_changeReason(e){this._reason=e,this._excluded=new Set,this._excludedModules=new Set}_toggleFile(e,t){let i=new Set(this._excluded);t?i.delete(e.path):i.add(e.path),this._excluded=i}_toggleModule(e){let t=new Set(this._excludedModules);t.has(e)?t.delete(e):t.add(e),this._excludedModules=t}_setOption(e,t){this._options[e]!==t&&(e==="analyzer"&&t==="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,[e]:t})}_agenticPanel(){return c`<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">${er(this._prompts,e=>e.id,(e,t)=>c`<div class="prompt-row"><textarea aria-label="${`Prompt ${t+1}`}" rows="3" placeholder="${this._promptPlaceholder(t)}" .value="${q(e.text)}" @input="${i=>{this._prompts=this._prompts.map(s=>s.id===e.id?{...s,text:i.target.value}:s)}}"></textarea>${this._prompts.length>1?c`<button type="button" class="prompt-action" aria-label="${`Remove prompt ${t+1}`}" @click="${()=>this._removePrompt(e.id)}"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="m4 4 8 8M12 4l-8 8"/></svg></button>`:u}</div>`)}</div></section>`}_promptPlaceholder(e){let t=["","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"][e];return t!=null?`What should the ${t?`${t} `:""}agent focus on?`:`What should agent ${e+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(e){this._prompts.length>1&&(this._prompts=this._prompts.filter(t=>t.id!==e))}_runScan(){if(!this.canRun)return;let e=this._mode,t=e==="code"&&this._options.analyzer==="advanced";if(t&&(!this._regimesReady||this._regimes.length===0))return;let i=this._bundle,s=this._reportInput?.mode===this._reportMode?this._reportInput:null,o=s?.inputs??[],n=e==="code"?this._files.filter(d=>!this._excluded.has(d.path)&&!this._excludedModules.has(d.module)):e==="dependencies"?this._scopeFiles:i?.files??[];if(e==="report"&&(!s?.source||o.length===0)||e!=="report"&&(!i||n.length===0))return;let a={id:`scan-${Date.now()}`,mode:e,bundleId:e==="report"?this._reportMode==="merge"?s.source.id:null:i?.id??null,bundleName:e==="report"?s.source.label:i.filename,reason:e==="report"?this._reportMode==="merge"?"Merge scan results":"Link saved reports":this._reasonData?.label??"All files",status:"running",createdAt:"Just now",duration:"",files:e==="report"?o.length:n.length,reportSaved:!1,cached:this._options.cached,isolate:e==="code"&&this._options.isolate,model:this._options.model,effort:this._options.effort};e!=="report"&&(a.repoId=this._selectedRepoId,a.scopeId=this._reason),e==="code"&&(a.analyzer=this._options.analyzer),t&&(a.regimes=this._regimes.map(d=>({...d})),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),e==="agentic"&&(a.prompts=this._prompts.map(d=>d.text)),e==="report"&&(a.reportMode=this._reportMode,a.reportSource={...s.source},a.inputIds=o.map(d=>d.id)),this._scans=[a,...this._scans],this._tab="history",this._notice="Scan started. The server will update its status as work progresses.";let l=setTimeout(()=>{this._timers.delete(l),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(l)}_stopScan(e){e.status==="running"&&(e.status="stopped",e.duration=e.duration||"stopped by user",this._notice="Scan stopped. It cannot continue, but you can restart it as a new scan.",this.requestUpdate())}_restartScan(e){if(this._options={...this._options,model:e.model??this._options.model,effort:e.effort??this._options.effort,cached:e.cached??!1,isolate:e.isolate??!1,analyzer:e.analyzer??"generic"},e.mode==="report"){this._mode="report",this._reportMode=e.reportMode==="link"?"link":"merge",this._reportInput=null,this._reportRestore={mode:this._reportMode,source:e.reportSource,inputIds:e.inputIds??[]},this._tab="new",this._notice="New report scan settings restored from the stopped run.";return}let t=this._bundles.find(i=>i.id===e.bundleId&&(e.repoId==null||i.repoId===e.repoId));t&&(this._selectBundle(t),this._mode=e.mode??"dependencies",e.mode==="agentic"&&(this._prompts=(e.prompts?.length>0?e.prompts:[""]).map(i=>({id:++this._nextPromptId,text:i}))),e.regimes?.length>0&&(this._options={...this._options,analyzer:"advanced"},this._regimes=e.regimes.map(i=>({...i})),this._appModel=e.appModel?{...e.appModel}:null,this._appModelAutomatic=e.appModelAutomatic!==!1,this._regimesReady=!1),this._reason=t.reasons.find(i=>i.label===e.reason)?.id??t.reasons[0]?.id??"",this._reason=e.scopeId??this._reason,this._tab="new",this._notice="New scan settings restored from the stopped run.")}_saveReport(e){e.reportSaved=!0,this._notice="Report saved. You can delete it from Reports and save this completed scan again.",this.requestUpdate()}_deleteSavedReport(e){e.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",Oi);S();J();var ve=r=>r??u;N();S();var Cp={__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"},Qn={__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 rr(r,e){if(typeof e=="string"&&Qn[e])return Qn[e];if(typeof r!="string")return null;let t=r.slice(r.lastIndexOf("/")+1),i=t.lastIndexOf(".");return i<=0?null:Cp[t.slice(i+1).toLowerCase()]??null}var Ep=H`<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"/>`,Rp=H`<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>`;var Ap=H`<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>`;function Mp(r,e){let t=rr(r,e);return["javascript","jsx"].includes(t)?"js":["typescript","tsx"].includes(t)?"ts":["solidity","rust","php","python","json"].includes(t)?t:"generic"}function Ti(r,e){let t=Mp(r,e),i=t==="js"||t==="ts"?H`<rect x="1" y="1" width="14" height="14" rx="2" fill=${t==="js"?"#e6c84f":"#3178c6"}/><text x="8" y="11.5" text-anchor="middle" fill=${t==="js"?"#202020":"#fff"} font-family="sans-serif" font-size="8" font-weight="700">${t.toUpperCase()}</text>`:t==="solidity"?H`<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"/>`:t==="rust"?Rp:t==="php"?Ap:t==="python"?Ep:t==="json"?H`<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"/>`:H`<path d="M4 1.5h5l3 3v10H4Zm5 0v3h3M6 8h4M6 10.5h4" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>`;return c`<svg class="source-file-icon" data-file-type="${t}" width="16" height="16" viewBox="0 0 16 16" style="flex: none" aria-hidden="true">${i}</svg>`}var ea=c`<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>`,H0=c`<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>`,q0=c`<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>`,V0=c`<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>`,G0=c`<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>`;var ta=`:host{padding:0}.field,.browser,.entry-points{line-height:1.5}.note{color:var(--muted);font-size:.75rem}.source-fields{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(0,1.6fr);align-items:end;gap:1rem;margin:1rem 0}.field{display:flex;flex-direction:column;gap:.4rem;min-width:0;font-size:.75rem;color:var(--muted)}.revision{display:flex;align-items:center;min-width:0;height:2rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg)}.revision:focus-within{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.revision-name{flex:1}.revision input{height:100%;min-height:0;padding:.3rem .6rem;min-width:0;border:0;border-radius:0;background:transparent;color:var(--text);font-size:.76rem}.revision input:focus-visible{outline:none}.revision-switch{display:flex;flex:none;align-self:stretch;padding:2px;gap:2px}.revision-switch button{display:grid;place-items:center;width:1.8rem;padding:0;border:0;border-radius:var(--ui-radius, 3px);background:transparent;color:var(--muted)}.revision-switch button:hover:not(:disabled){color:var(--text);background:var(--surface-active)}.revision-switch button:focus-visible{outline-offset:-2px}.revision-switch button[aria-pressed=true]{color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,var(--bg))}.revision-switch svg{width:1rem;height:1rem}.revision-expand{display:grid;place-items:center;align-self:stretch;flex:none;width:2rem;padding:0;border:0;border-radius:var(--ui-radius, 4px);color:var(--muted);background:transparent}.revision-expand svg{width:.9rem;height:.9rem}.revision-expand:hover:not(:disabled){color:var(--text)}.revision-expand:focus-visible{outline-offset:-2px}.revision-menu{visibility:hidden;position:fixed;inset:auto;margin:0;padding:.45rem;overflow:auto;overscroll-behavior:contain;border:1px solid var(--border);border-radius:var(--ui-radius, 8px);background:var(--surface-active);color:var(--text);box-shadow:0 .65rem 1.8rem #00000073}.revision-menu[data-positioned]{visibility:visible}.revision-options{display:grid;grid-template-columns:repeat(var(--revision-columns, 1),minmax(0,1fr));gap:.15rem .5rem}.revision-options button{min-width:0;padding:.4rem .6rem;border:0;border-radius:var(--ui-radius, 4px);background:transparent;color:var(--text);text-align:left;font-size:.76rem}.revision-options button span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.revision-options button[aria-selected=true]{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.revision-options button:hover,.revision-options button[data-active]{background:color-mix(in srgb,var(--text) 8%,transparent)}.revision-options button[data-active]{outline:1px solid var(--accent);outline-offset:-1px}.revision-empty{margin:0;padding:.65rem;color:var(--muted);font-size:.75rem}button:disabled,input:disabled{opacity:.5}.browser{border:1px solid var(--border);border-radius:var(--ui-radius, 7px);overflow:hidden}.browser-head{display:flex;align-items:center;gap:.75rem;padding:.65rem .8rem;border-bottom:1px solid var(--border);background:var(--bg);font-size:.75rem}.commit-link{display:inline-flex;align-items:center;flex:none;gap:.3rem;margin-left:auto;color:var(--muted);text-decoration:none}.commit-link svg{width:1rem;height:1rem}.commit-link:hover{color:var(--accent)}.commit-link:focus-visible{outline:1px solid var(--accent);outline-offset:3px;border-radius:var(--ui-radius, 2px)}.breadcrumbs{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;min-width:0}.breadcrumbs button{border:0;padding:.1rem;background:transparent;color:var(--muted);overflow-wrap:anywhere}.breadcrumbs button[aria-current]{color:var(--text)}.breadcrumbs button:hover:not(:disabled){color:var(--accent)}.file-browser{min-height:18rem;max-height:50vh;overflow:auto;padding:.75rem}.file-browser:has(>.empty){display:grid;place-items:center}.file-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,16rem),1fr));gap:.5rem}.file-tile{display:flex;align-items:center;gap:.5rem;min-width:0;height:2.05rem;padding:.4rem .6rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg);color:var(--text);font-size:.75rem}.file-tile>span:not(.arrow){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.file-tile input{width:.85rem;height:.85rem;margin:0;accent-color:var(--accent);flex:none}.file-tile:hover,.file-tile:focus-within{border-color:var(--accent)}.file-tile.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.directory{color:var(--muted)}.directory .arrow{margin-left:auto}.unsupported{opacity:.55}.empty{margin:0;padding:1rem;border:0;border-radius:0;text-align:center;color:var(--muted);font-size:.8rem;line-height:1.5}.error{color:var(--critical)}.message{padding:.5rem .8rem;color:var(--muted);font-size:.75rem;line-height:1.5}.text-action{border:0;padding:.1rem .2rem;color:var(--accent);background:transparent;font-size:.75rem}.entry-points{display:flex;align-items:center;gap:1rem;margin-top:1rem}.package-suggestions{display:flex;align-items:center;gap:1rem;margin-top:1rem;color:var(--muted);font-size:.75rem}.package-suggestions>div{flex:1;min-width:0}.package-suggestions p{margin:0 0 .4rem}.package-suggestions .suggestions-note{margin:.4rem 0 0}.package-suggestions ul{display:flex;flex-wrap:wrap;gap:.4rem .8rem;padding:0;margin:0;list-style:none;max-height:6rem;overflow:auto}.package-suggestions li{min-width:0;max-width:100%}.package-suggestions li code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.package-suggestions .btn{flex:none;font-size:.72rem}.selection{flex:1;min-width:0}.selection .note{margin:.5rem 0 0}.selection-head{display:flex;align-items:center;gap:.75rem}.btn.clear-selection{min-height:1.65rem;padding:.2rem .5rem;font-size:.72rem}h2{margin:0;font-size:.8rem;font-weight:500}h2 span{color:var(--muted);margin-left:.4rem}.entry-points ul{padding:0;display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;max-height:7rem;overflow:auto;margin:.6rem 0 0}.entry-points li{display:flex;align-items:center;gap:.4rem;min-width:0;max-width:100%;padding:.2rem .4rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--bg);font-size:.72rem}.entry-points li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-points li button{display:grid;place-items:center;flex:none;width:1.3rem;height:1.3rem;padding:0;border:0;border-radius:var(--ui-radius, 3px);background:transparent;color:var(--muted);cursor:default}.entry-points li button svg{width:1rem;height:1rem}.entry-points li button:hover{color:var(--critical);background:color-mix(in srgb,var(--critical) 12%,transparent)}.entry-points li button:focus-visible{outline:1px solid var(--accent);outline-offset:1px}@container (width <= 45rem){.source-fields{grid-template-columns:1fr}}
84
+ `;S();function ra(r,e,t){return sa(r,e,t,c`Entry points declared in <code>package.json</code>`,"Suggested entry points")}function ia(r,e,t,i){return sa(r,e,t,"Suggested Solidity sources","Suggested Solidity sources",i)}function sa(r,e,t,i,s,o=!1){let n=r.filter(a=>!e.has(a));return n.length===0&&!o?u:c`<aside class="package-suggestions" aria-label="${s}"><div><p>${i}</p>${n.length>0?c`<ul>${n.map(a=>c`<li><code data-tooltip="${a}">${a}</code></li>`)}</ul>`:u} ${o?c`<p class="suggestions-note">Suggestions are limited. Browse the source directories to select more files.</p>`:u}</div>${n.length>0?c`<button type="button" class="btn" @click="${()=>t(n)}">Use suggestions</button>`:u}</aside>`}S();var oa=`:host{padding:0;margin:1.2rem 0}.conditions-head{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem 1rem}.conditions-head[data-conditions-hidden]>:not(slot){visibility:hidden}slot[name=actions]::slotted(*){flex:none}h2{margin:0;font-size:.8rem;font-weight:500}.presets{display:flex;gap:2px;padding:3px;border:1px solid var(--border);border-radius:var(--ui-radius, 6px);background:var(--bg)}.presets button{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .65rem;border:0;border-radius:var(--ui-radius, 3px);background:transparent;color:var(--muted);font-size:.75rem}.presets button:hover{background:var(--surface-active);color:var(--text)}.presets button[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 15%,var(--bg));color:var(--accent)}.presets button:focus-visible{outline-offset:-1px}svg{width:1rem;height:1rem;flex:none}.platforms{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;font-size:.75rem}.platforms>span{color:var(--muted)}.platforms label{display:inline-flex;align-items:center;gap:.35rem}.platforms input{margin:0;width:.85rem;height:.85rem}.manual-toggle{display:flex;align-items:center;gap:.25rem;margin-left:auto;padding:.25rem 0;border:0;border-radius:var(--ui-radius, 2px);background:transparent;color:var(--muted);font-size:.75rem;white-space:nowrap}.manual-toggle:hover{color:var(--text)}.manual-toggle[aria-expanded=true] svg{transform:rotate(90deg)}#manual-conditions{margin-top:.75rem}.condition-editor{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;min-height:2.25rem;padding:.3rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);background:var(--bg)}.condition-editor:focus-within{border-color:var(--accent)}ul{display:flex;flex-wrap:wrap;gap:.35rem;max-width:100%;margin:0;padding:0;list-style:none}li{display:inline-flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;padding:.1rem .25rem .1rem .5rem;border:1px solid var(--border);border-radius:var(--ui-radius, 4px);background:var(--surface);color:var(--text);font-size:.73rem}li code{overflow-wrap:anywhere}li button,.add-condition{display:grid;place-items:center;flex:none;width:1.3rem;height:1.3rem;padding:0;border:0;border-radius:var(--ui-radius, 3px);background:transparent;color:var(--muted)}li button:hover{color:var(--critical);background:color-mix(in srgb,var(--critical) 12%,transparent)}.condition-input{display:flex;align-items:center;flex:1;min-width:9rem}.condition-editor input{flex:1;width:0;min-width:0;min-height:1.5rem;padding:.15rem .4rem;border:0;border-radius:0;background:transparent;font-size:.75rem}.condition-editor input:focus-visible{outline:none}.add-condition{width:1.6rem;height:1.6rem}.add-condition:hover:not(:disabled){color:var(--accent);background:var(--surface-active)}p{margin:.5rem 0 0;color:var(--muted);font-size:.7rem}.error{color:var(--critical)}@container (width <= 30rem){.conditions-head{gap:.6rem}.presets{margin-left:auto}.presets button{padding-inline:.4rem}.platforms{flex-basis:100%}}
85
+ `;var na=[{id:"node",label:"Node.js",conditions:["node"],icon:H`<path d="m8 1.5 5.5 3.2v6.6L8 14.5l-5.5-3.2V4.7Z"/><path d="M6 10V6l4 4V6"/>`},{id:"browser",label:"Browser",conditions:["browser"],icon:H`<rect x="1.5" y="2.5" width="13" height="11" rx="1.5"/><path d="M1.5 6h13M4 4.3h.1m2 0h.1"/>`},{id:"metro",label:"Metro",conditions:["react-native"],icon:H`<rect x="4" y="1.5" width="8" height="13" rx="2"/><path d="M6.5 3.5h3M7 12.5h2"/>`}],Ni=[{id:"ios",label:"iOS"},{id:"android",label:"Android"}],zp=new Set(["default","import","require"]);function aa(){return{preset:"node",conditions:["node"],platforms:[]}}var Bi=class extends E{static styles=[x(T),x(oa)];static properties={showConditions:{attribute:!1},_preset:{state:!0},_conditions:{state:!0},_platforms:{state:!0},_draft:{state:!0},_error:{state:!0},_manualOpen:{state:!0}};constructor(){super(),this.showConditions=!0,this._preset="node",this._conditions=["node"],this._platforms=["ios","android"],this._draft="",this._error="",this._manualOpen=!1}get value(){return{preset:this._preset,conditions:[...this._conditions],platforms:this._preset==="metro"?[...this._platforms]:[]}}notifyChange(){this.dispatchEvent(new CustomEvent("conditions-change",{detail:this.value,bubbles:!0,composed:!0}))}selectPreset(e){let t=na.find(i=>i.id===e);t&&(this._preset=e,this._conditions=[...t.conditions],this._draft="",this._error="",this.notifyChange())}togglePlatform(e){if(!Ni.some(i=>i.id===e))return;let t=this._platforms.includes(e);t&&this._platforms.length===1||(this._platforms=Ni.map(i=>i.id).filter(i=>i===e?!t:this._platforms.includes(i)),this.notifyChange())}addConditions(){let e=this._draft.trim().split(/[\s,]+/u).filter(Boolean);if(e.length===0)return;if(e.some(i=>zp.has(i))){this._error="import, require, and default are handled automatically.";return}if(e.some(i=>i.length>64||i.startsWith(".")||/^\d+$/u.test(i))){this._error="Use condition names of up to 64 characters, without a leading dot or an all-numeric name.";return}let t=[...new Set([...this._conditions,...e])];if(t.length>16){this._error="Use up to 16 conditions.";return}this._conditions=t,this._draft="",this._error="",this.notifyChange()}removeCondition(e){this._conditions=this._conditions.filter(t=>t!==e),this._error="",this.notifyChange()}render(){return c`<section aria-label="${this.showConditions?"Conditions":"Bundle actions"}"><div class="conditions-head" ?data-conditions-hidden="${!this.showConditions}"><h2 id="conditions-heading">Conditions</h2><div class="presets" role="group" aria-label="Condition preset">${na.map(e=>c`<button type="button" aria-pressed="${this._preset===e.id}" @click="${()=>this.selectPreset(e.id)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e.icon}</svg>${e.label}</button>`)}</div>${this._preset==="metro"?c`<div class="platforms" role="group" aria-label="Metro platforms"><span>Platforms</span>${Ni.map(({id:e,label:t})=>c`<label><input type="checkbox" .checked="${this._platforms.includes(e)}" ?disabled="${this._platforms.includes(e)&&this._platforms.length===1}" @change="${()=>this.togglePlatform(e)}">${t}</label>`)}</div>`:u} <button type="button" class="manual-toggle" aria-expanded="${this._manualOpen}" aria-controls="manual-conditions" @click="${()=>{this._manualOpen=!this._manualOpen}}"><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="m6 4 4 4-4 4"/></svg>Manual conditions</button><slot name="actions"></slot></div><div id="manual-conditions" ?hidden="${!this.showConditions||!this._manualOpen}"><form class="condition-editor" @submit="${e=>{e.preventDefault(),this.addConditions()}}"><ul aria-label="Export conditions">${this._conditions.map(e=>c`<li><code>${e}</code><button type="button" aria-label="${`Remove condition ${e}`}" @click="${()=>this.removeCondition(e)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></li>`)}</ul><div class="condition-input"><input type="text" aria-label="Add conditions" aria-describedby="conditions-help" aria-invalid="${!!this._error}" aria-errormessage="condition-error" placeholder="Add condition…" autocomplete="off" maxlength="1040" .value="${this._draft}" @input="${e=>{this._draft=e.target.value,this._error=""}}"> <button type="submit" class="add-condition" aria-label="Add conditions" ?disabled="${!this._draft.trim()}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg></button></div></form><p id="conditions-help">Package export conditions. <code>import</code> / <code>require</code> and <code>default</code> are automatic.</p>${this._error?c`<p id="condition-error" class="error" role="alert">${this._error}</p>`:u}</div></section>`}};customElements.define("bundle-conditions",Bi);var la=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="8" cy="8" r="3"/><path d="M1 8h4m6 0h4"/></svg>`,Op=100,Tp=[{kind:"branch",label:"Branch",icon:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><circle cx="4" cy="3" r="1.5"/><circle cx="4" cy="13" r="1.5"/><circle cx="12" cy="3" r="1.5"/><path d="M4 4.5v7m0-3h3a5 5 0 0 0 5-4"/></svg>`},{kind:"tag",label:"Tag",icon:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" aria-hidden="true"><path d="M2 2h5.5l6.5 6.5-5.5 5.5L2 7.5Z"/><circle cx="5" cy="5" r="1"/></svg>`},{kind:"commit",label:"Commit SHA",icon:la}];async function Pi(r,e,t){let i=await $(`/api/admin/repositories/${r}?${new URLSearchParams(e)}`,{credentials:"same-origin",headers:{accept:"application/json"},signal:t});if(!i.ok){let s=await i.json().catch(()=>null);if(s?.error==="github-rate-limited"){let o=Number(i.headers.get("retry-after")),n=Math.ceil(o/60),a=Number.isFinite(o)&&o>0?` Try again in about ${n} ${n===1?"minute":"minutes"}.`:" Try again after the limit resets.";throw new Error(`GitHub\u2019s API rate limit has been reached.${a}`)}throw s?.error==="github-status-403"?new Error("GitHub denied this request. Check repository access and the GitHub App\u2019s read permissions."):s?.error==="github-unauthorized"?new Error("GitHub authentication has expired or was revoked. Sign in again and check the repository App installation."):s?.error==="github-unreachable"?new Error("Could not connect to GitHub. Try again shortly."):i.status===404?new Error("This repository, revision, or directory is unavailable."):i.status===403?new Error("Repository access is required to browse files."):new Error("Could not load repository files from GitHub. Try again.")}return i.json()}var Di=class extends E{static styles=[x(T),x(ta)];static properties={installTooltips:{attribute:!1},createBundle:{attribute:!1},_building:{state:!0},_buildError:{state:!0},initialRepoId:{attribute:!1},_repos:{state:!0},_loadingRepos:{state:!0},_reposError:{state:!0},_repoId:{state:!0},_refs:{state:!0},_refKind:{state:!0},_refName:{state:!0},_path:{state:!0},_entries:{state:!0},_selected:{state:!0},_commit:{state:!0},_packageEntryPoints:{state:!0},_solidityEntryPoints:{state:!0},_soliditySuggestionsLimited:{state:!0},_loadingRefs:{state:!0},_loading:{state:!0},_error:{state:!0},_refsError:{state:!0},_limited:{state:!0},_revisionOpen:{state:!0},_revisionQuery:{state:!0},_activeRevision:{state:!0}};constructor(){super(),this._repos=[],this._loadingRepos=!0,this._reposError="",this.initialRepoId=null,this._building=!1,this._buildError="",this._repoId=null,this._refs={branches:[],tags:[]},this._refKind="branch",this._refName="",this._path="",this._entries=null,this._selected=new Set,this._dismissedSuggestions=new Set,this._bundleConditions=aa(),this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._commit="",this._directories=new Map,this._loadingRefs=!1,this._loading=!1,this._error="",this._refsError="",this._limited=!1,this._revisionOpen=!1,this._revisionQuery="",this._activeRevision=-1,this._onViewport=()=>this.positionRevisionSuggestions()}connectedCallback(){super.connectedCallback(),globalThis.addEventListener("resize",this._onViewport),globalThis.addEventListener("scroll",this._onViewport,!0)}updated(e){e.has("installTooltips")&&this.installTooltips?.(this.renderRoot),this.positionRevisionSuggestions()}firstUpdated(){this.loadRepositories()}async loadRepositories(){this._reposRequest?.abort(),this.selectRepository(null),this._repos=[],this._reposError="",this._loadingRepos=!0;let e=new AbortController;this._reposRequest=e;try{let t=await Pi("browsable",{},e.signal);if(e.signal.aborted)return;this._repos=t.repos,this._repos.some(i=>i.repoId===this.initialRepoId)&&this.selectRepository(this.initialRepoId)}catch{e.signal.aborted||(this._reposError="Could not load repositories. Try again.")}finally{e.signal.aborted||(this._loadingRepos=!1)}}disconnectedCallback(){this._buildRequest?.abort(),globalThis.removeEventListener("resize",this._onViewport),globalThis.removeEventListener("scroll",this._onViewport,!0),clearTimeout(this._browseTimer),this._reposRequest?.abort(),this._refsRequest?.abort(),this._request?.abort(),this._directories.clear(),this._dismissedSuggestions.clear(),this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,super.disconnectedCallback()}resetFiles(){this._buildError="",clearTimeout(this._browseTimer),this._request?.abort(),this._directories.clear(),this._loading=!1,this._entries=null,this._path="",this._commit="",this._selected=new Set,this._dismissedSuggestions.clear(),this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._error="",this._limited=!1}async selectRepository(e){if(this.closeRevisionSuggestions(),this._refsRequest?.abort(),this.resetFiles(),this._repoId=e,this._refs={branches:[],tags:[]},this._refsError="",this._refKind="branch",this._refName="",e==null){this._loadingRefs=!1;return}let t=new AbortController;this._refsRequest=t,this._loadingRefs=!0;try{let{defaultContents:i,...s}=await Pi("refs",{repoId:e,withDefault:"true"},t.signal);if(t.signal.aborted)return;this._refs=s,this._refName=s.defaultBranch||s.branches[0]||"",i?this.useDirectory(i,""):this._refName&&this.loadDirectory("")}catch(i){t.signal.aborted||(this._refsError=i.message)}finally{t.signal.aborted||(this._loadingRefs=!1)}}changeRevision(e,t){this._refsRequest?.abort(),this._loadingRefs=!1,this.resetFiles(),this._refKind=e,this._refName=t}selectRevisionType(e){this._refKind!==e&&(this.closeRevisionSuggestions(),this.changeRevision(e,e==="branch"&&this._refs.defaultBranch||""),this._refName&&this.loadDirectory(""))}editRevision(e){this.changeRevision(this._refKind,e);let t=e.trim();if(!t)return;let i=this._refKind==="branch"?this._refs.branches:this._refs.tags;this._refKind!=="commit"&&(i.includes(t)||this._refKind==="branch"&&t===this._refs.defaultBranch)?this.loadDirectory(""):this._browseTimer=setTimeout(()=>{this.loadDirectory("")},350)}revisionSuggestions(){let e=this._refKind==="branch"?this._refs.branches:this._refKind==="tag"?this._refs.tags:[],t=this._refKind==="branch"&&this._refs.defaultBranch?[this._refs.defaultBranch,...e.filter(s=>s!==this._refs.defaultBranch)]:e,i=this._revisionQuery.trim().toLowerCase();return t.filter(s=>s.toLowerCase().includes(i))}showRevisionSuggestions(e=!0){this._refKind==="commit"||this._repoId==null||this._loadingRefs||(this._revisionQuery=e?"":this._refName,this._activeRevision=-1,this.renderRoot.querySelector(".revision-menu").showPopover())}closeRevisionSuggestions(){this.renderRoot?.querySelector(".revision-menu")?.hidePopover(),this._revisionOpen=!1,this._activeRevision=-1}pickRevision(e){this.editRevision(e),this.renderRoot.querySelector(".revision-name").focus({preventScroll:!0}),this.closeRevisionSuggestions()}positionRevisionSuggestions(){if(!this._revisionOpen)return;let e=this.renderRoot.querySelector(".revision-menu"),t=this.renderRoot.querySelector(".revision-name").getBoundingClientRect(),i=8,s=6,n=15*parseFloat(getComputedStyle(this).fontSize),a=Math.max(1,Math.min(3,Math.ceil(this.revisionSuggestions().length/8),Math.floor((window.innerWidth-2*i)/n))),l=Math.min(Math.max(t.width,a*n),window.innerWidth-2*i);e.style.width=`${l}px`,e.style.setProperty("--revision-columns",a),e.style.left=`${Math.max(i,Math.min(t.left,window.innerWidth-l-i))}px`;let d=window.innerHeight-t.bottom-s-i,h=t.top-s-i,p=d<Math.min(e.scrollHeight,320)&&h>d;e.style.maxHeight=`${Math.max(0,Math.min(320,p?h:d))}px`,e.style.top=`${Math.max(i,p?t.top-e.offsetHeight-s:t.bottom+s)}px`,e.dataset.positioned=""}async revisionKeyDown(e){if(e.key==="Escape"||e.key==="Tab"){e.key==="Escape"&&this._revisionOpen&&(e.preventDefault(),e.stopPropagation()),this.closeRevisionSuggestions();return}if(e.key==="Enter"){let i=this.revisionSuggestions()[this._activeRevision];this._revisionOpen&&i!=null?(e.preventDefault(),this.pickRevision(i)):this.closeRevisionSuggestions();return}if(this._refKind==="commit"||!["ArrowDown","ArrowUp"].includes(e.key))return;e.preventDefault(),this._revisionOpen||this.showRevisionSuggestions();let t=this.revisionSuggestions().length;this._activeRevision=t===0?-1:e.key==="ArrowDown"?Math.min(this._activeRevision+1,t-1):this._activeRevision<=0?t-1:this._activeRevision-1,await this.updateComplete,this.renderRoot.querySelector("[data-active]")?.scrollIntoView({block:"nearest"})}async loadDirectory(e,t=!1){if(clearTimeout(this._browseTimer),this._repoId==null||!this._refName.trim())return;t&&this.resetFiles(),this._request?.abort();let i=new AbortController;this._request=i,this._path=e,this._entries=null,this._error="",this._limited=!1,this._packageEntryPoints=[],this._solidityEntryPoints=[],this._soliditySuggestionsLimited=!1,this._loading=!1;let s=this._refName.trim();if(this._refKind==="commit"&&!/^[a-f\d]{7,40}$/iu.test(s)){this._error="Enter a commit SHA with 7 to 40 hexadecimal characters.";return}let o=this._commit||(this._refKind==="commit"?s:`${this._refKind==="branch"?"heads":"tags"}/${s}`),n=JSON.stringify([this._repoId,this._commit,e]),a=this._commit&&this._directories.get(n);if(a){this._directories.delete(n),this._directories.set(n,a),this._entries=a.entries,this._limited=a.limited,this._packageEntryPoints=a.packageEntryPoints,this._solidityEntryPoints=a.solidityEntryPoints,this._soliditySuggestionsLimited=a.soliditySuggestionsLimited;return}this._loading=!0;try{let l=await Pi("contents",{repoId:this._repoId,ref:o,path:e},i.signal);if(i.signal.aborted)return;this.useDirectory(l,e)}catch(l){i.signal.aborted||(this._directories.clear(),this._error=l.message)}finally{i.signal.aborted||(this._loading=!1)}}useDirectory(e,t){this._path=t,this._commit=e.commit,this._entries=e.entries.toSorted((s,o)=>+(o.type==="dir")-+(s.type==="dir")||s.name.localeCompare(o.name)),this._limited=e.limited,this._packageEntryPoints=e.packageEntryPoints??[],this._solidityEntryPoints=e.solidityEntryPoints??[],this._soliditySuggestionsLimited=e.soliditySuggestionsLimited??!1;let i=[...this._packageEntryPoints,...this._solidityEntryPoints].filter(s=>!this._dismissedSuggestions.has(s));if(this._selected=new Set([...this._selected,...i]),/^[a-f\d]{40}$/iu.test(e.commit)){let s=JSON.stringify([this._repoId,e.commit,t]);this._directories.set(s,{entries:this._entries,limited:this._limited,packageEntryPoints:this._packageEntryPoints,solidityEntryPoints:this._solidityEntryPoints,soliditySuggestionsLimited:this._soliditySuggestionsLimited}),this._directories.size>Op&&this._directories.delete(this._directories.keys().next().value)}}toggleFile(e){let t=new Set(this._selected);t.has(e)?(t.delete(e),this._dismissedSuggestions.add(e)):(t.add(e),this._dismissedSuggestions.delete(e)),this._selected=t}clearFiles(){for(let e of this._selected)this._dismissedSuggestions.add(e);this._selected=new Set}hasScriptEntryPoints(){return[...this._selected].some(e=>/\.[mc]?[jt]s$/iu.test(e))}async buildBundle(){if(this._building||!this.createBundle||!this._commit||this._selected.size===0)return;let e=new AbortController;this._buildRequest=e,this._building=!0,this._buildError="";try{let t=await this.createBundle({repoId:this._repoId,commit:this._commit,entries:[...this._selected],conditions:this._bundleConditions},e.signal);e.signal.aborted||this.dispatchEvent(new CustomEvent("bundle-created",{detail:t,bubbles:!0,composed:!0}))}catch(t){e.signal.aborted||(this._buildError=t.message)}finally{this._building=!1}}render(){let e=this._repos.find(n=>n.repoId===this._repoId),t=this._path.split("/").filter(Boolean),i=e&&this._commit?`https://github.com/${[...e.fullName.split("/"),"tree",this._commit,...t].map(encodeURIComponent).join("/")}`:null,s=this.revisionSuggestions(),o=this._refKind==="commit"?"Commit SHA":this._refKind==="tag"?"Tag":"Branch";return c`<p class="intro ui-hint">Choose a repository and revision, then select files to use as entry points.</p><div ?inert="${this._building}"><div class="source-fields"><div class="field"><span>Repository</span><repository-selector label="Repository" ?disabled="${this._loadingRepos}" .options="${this._repos.map(n=>({value:n.repoId,label:n.fullName}))}" .value="${this._repoId}" @repository-change="${n=>this.selectRepository(n.detail.value)}"></repository-selector></div><form class="revision" @focusout="${n=>{n.currentTarget.contains(n.relatedTarget)||this.closeRevisionSuggestions()}}" @submit="${n=>{n.preventDefault(),this.loadDirectory("",!0)}}"><div class="revision-switch" role="group" aria-label="Revision type">${Tp.map(({kind:n,label:a,icon:l})=>c`<button type="button" aria-label="${a}" data-tooltip="${a}" aria-pressed="${this._refKind===n}" ?disabled="${!e||this._loadingRefs}" @click="${()=>{this.selectRevisionType(n),this.renderRoot.querySelector(".revision-name").focus(),this.showRevisionSuggestions()}}">${l}</button>`)}</div><input class="revision-name" type="text" aria-label="${o}" role="${ve(this._refKind==="commit"?void 0:"combobox")}" aria-autocomplete="${ve(this._refKind==="commit"?void 0:"list")}" aria-expanded="${ve(this._refKind==="commit"?void 0:String(this._revisionOpen))}" aria-controls="${ve(this._refKind==="commit"?void 0:"bundle-revisions")}" aria-activedescendant="${ve(this._revisionOpen&&this._activeRevision>=0?`revision-${this._activeRevision}`:void 0)}" autocomplete="off" placeholder="${this._refKind==="commit"?"Commit SHA\u2026":`Choose or enter a ${this._refKind}\u2026`}" .value="${this._refName}" ?disabled="${!e||this._loadingRefs}" @focus="${()=>this.showRevisionSuggestions()}" @click="${()=>this.showRevisionSuggestions()}" @keydown="${this.revisionKeyDown}" @input="${n=>{this.editRevision(n.target.value),this.showRevisionSuggestions(!1)}}"> ${this._refKind==="commit"?u:c`<button type="button" class="revision-expand" aria-label="${`Show ${this._refKind} suggestions`}" aria-expanded="${this._revisionOpen}" ?disabled="${!e||this._loadingRefs}" @mousedown="${n=>n.preventDefault()}" @click="${()=>{this._revisionOpen?this.closeRevisionSuggestions():(this.renderRoot.querySelector(".revision-name").focus(),this.showRevisionSuggestions())}}"><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="revision-menu" id="bundle-revisions" popover="auto" role="listbox" aria-label="${`${o} suggestions`}" @beforetoggle="${n=>{this._revisionOpen=n.newState==="open",delete n.target.dataset.positioned,this._revisionOpen||(this._activeRevision=-1)}}"><div class="revision-options">${s.map((n,a)=>c`<button type="button" role="option" id="${`revision-${a}`}" aria-selected="${n===this._refName}" ?data-active="${a===this._activeRevision}" tabindex="-1" data-tooltip="${n}" @mousedown="${l=>l.preventDefault()}" @click="${()=>this.pickRevision(n)}"><span>${n}</span></button>`)}</div>${s.length>0?u:c`<p class="revision-empty">${this._revisionQuery?"No matching suggestions. Enter a revision name to browse.":`No ${this._refKind} suggestions available.`}</p>`}</div></form></div>${this._reposError?c`<p class="message" role="alert">${this._reposError} <button type="button" class="text-action" @click="${()=>this.loadRepositories()}">Retry</button></p>`:u} ${this._refsError?c`<p class="message" role="status">${this._refsError} <button type="button" class="text-action" @click="${()=>this.selectRepository(this._repoId)}">Retry</button></p>`:u}<section class="browser" aria-label="Repository files" aria-busy="${this._loadingRepos||this._loading||this._loadingRefs}"><div class="browser-head"><nav class="breadcrumbs" aria-label="Repository directory"><button type="button" ?disabled="${!this._commit}" aria-current="${ve(this._path?void 0:"location")}" @click="${()=>this.loadDirectory("")}">${e?.fullName??"Repository"}</button>${t.map((n,a)=>c`<span aria-hidden="true">/</span><button type="button" aria-current="${ve(a===t.length-1?"location":void 0)}" @click="${()=>this.loadDirectory(t.slice(0,a+1).join("/"))}">${n}</button>`)}</nav>${i?c`<a class="commit-link" href="${i}" target="_blank" rel="noopener noreferrer" data-tooltip="${this._commit}" aria-label="${`View directory at commit ${this._commit.slice(0,7)} on GitHub`}">${la}<code>${this._commit.slice(0,7)}</code></a>`:u}</div><div class="file-browser">${this._loadingRepos||this._loading||this._loadingRefs?c`<p class="empty" role="status">${this._loadingRepos?"Loading repositories\u2026":this._loadingRefs?"Loading revisions\u2026":"Loading files\u2026"}</p>`:this._error?c`<p class="empty error" role="alert">${this._error} <button type="button" class="text-action" @click="${()=>this.loadDirectory(this._path)}">Retry</button></p>`:this._entries==null?c`<p class="empty">${e?"Choose a revision to browse its files.":this._repos.length>0?"Select a repository to browse its files.":"No accessible repositories available."}</p>`:this._entries.length===0?c`<p class="empty">This directory is empty.</p>`:c`<div class="file-grid">${this._entries.map(n=>n.type==="dir"?c`<button type="button" class="file-tile directory" data-tooltip="${n.path}" @click="${()=>this.loadDirectory(n.path)}">${ea}<span>${n.name}</span><span class="arrow" aria-hidden="true">›</span></button>`:c`<label class="${`file-tile ${this._selected.has(n.path)?"selected":""} ${n.type==="file"?"":"unsupported"}`}" data-tooltip="${n.type==="file"?n.path:`${n.path} (${n.type})`}"><input type="checkbox" aria-label="${`Select ${n.path} as an entry point`}" .checked="${this._selected.has(n.path)}" ?disabled="${n.type!=="file"}" @change="${()=>this.toggleFile(n.path)}">${Ti(n.name)}<span>${n.name}</span></label>`)}</div>`}</div>${this._limited?c`<p class="message">Showing GitHub’s first 1,000 entries in this directory.</p>`:u}</section>${ra(this._packageEntryPoints,this._selected,n=>{this._selected=new Set([...this._selected,...n])})} ${ia(this._solidityEntryPoints,this._selected,n=>{this._selected=new Set([...this._selected,...n])},this._soliditySuggestionsLimited)}<section class="entry-points" aria-label="Selected entry points"><div class="selection"><div class="selection-head"><h2>Entry points <span aria-live="polite">${this._selected.size}</span></h2>${this._selected.size>0?c`<button type="button" class="btn clear-selection" @click="${this.clearFiles}">Clear all</button>`:u}</div>${this._selected.size>0?c`<ul>${[...this._selected].map(n=>c`<li>${Ti(n)}<span data-tooltip="${n}">${n}</span><button type="button" aria-label="${`Remove ${n}`}" @click="${()=>this.toggleFile(n)}"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg></button></li>`)}</ul>`:c`<p class="note">Select files above. You can choose entry points from multiple directories.</p>`}</div></section><bundle-conditions .showConditions="${this.hasScriptEntryPoints()}" @conditions-change="${n=>{this._bundleConditions=n.detail}}"><button type="button" slot="actions" class="btn primary" ?disabled="${this._building||!this.createBundle||!this._commit||this._selected.size===0||this._loading||this._loadingRefs}" @click="${this.buildBundle}">${this._building?"Creating\u2026":"Create a bundle"}</button></bundle-conditions></div>${this._building?c`<p class="message" role="status">Building the selected entry points with Stasis…</p>`:u} ${this._buildError?c`<p class="message error" role="alert">${this._buildError}</p>`:u}`}};customElements.define("managed-create-bundle",Di);var Np=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"}),Bp=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 Pp(r){let e=typeof r=="string"?r.slice(r.lastIndexOf("/")+1):"",t=e.lastIndexOf("."),i=t>0?e.slice(t+1).trim().toLowerCase():"",s=rr(r)??Bp[i];return s?{key:s,label:Np[s]??s}:i?{key:`extension:${i}`,label:`.${i}`}:{key:"other",label:"Other"}}function ca(r,e){let t=new Map,i=0,s=0;for(let[o,n]of r){let a=Pp(o),l=t.get(a.key)??{...a,files:0,lines:0,bytes:0};l.files++,l.lines+=n,l.bytes+=e.get(o)??0,t.set(a.key,l),s+=n,i+=e.get(o)??0}return{files:r.size,lines:s,bytes:i,languages:[...t.values()].toSorted((o,n)=>n.lines-o.lines||o.label.localeCompare(n.label))}}var Dp=new Set(["module","commonjs","json","module-typescript","commonjs-typescript"]),jp=new Set(["solidity","php","shell","rust"]),Up=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"]),Fp=new Set(["resource","resource:base64"]),ha=new Set(["stat:file","stat:directory"]),Hp=new Set([...Dp,...jp,...Up,...Fp,"patch","directory",...ha]),ji=r=>ha.has(r);var da=r=>r==="directory"||r==="stat:directory"?"directory":"file";function qp(r,e,t){if(r===e)return r;let i=ji(r);if(i!==ji(e)&&da(r)===da(e))return i?e:r;throw new Error(`format conflict for '${t}' ('${e}' vs '${r}')`)}function Ne(r,e){return e===""?r:r==="."?e:`${r}/${e}`}var Ui=({name:r,version:e,ecosystem:t,files:i})=>({name:r,version:e,...t===void 0?{}:{ecosystem:t},files:i});function Fi({name:r,version:e,ecosystem:t,files:i}){return _(t===void 0||typeof t=="string"),Ui({name:r,version:e??void 0,ecosystem:t,files:K(Object.entries(i))})}function ma(r,{scope:e="full"}={}){let t=new Set;for(let[i,{files:s}]of r)if(!(e!=="full"&&!Ye(i)))for(let o of Object.keys(s))t.add(Ne(i,o));return t}function Vp(r,{what:e,files:t,formats:i,scope:s}){if(r.includes("\\"))return"holds a '\\'";if(wt(r))return"escapes the root";if(s!=="full"&&!Ye(r))return`is outside node_modules, which a '${s}'-scope ${e} does not record`;if(!t.has(r))return`names no file the ${e} records`;let o=i.get(r);return o==="directory"?"is a directory capture, not a file":ji(o)?`is a payload-free '${o}' record, not a file`:null}function fa(r,{what:e,files:t,formats:i,scope:s}){for(let o of r){let n=Vp(o,{what:e,files:t,formats:i,scope:s});_(n===null,`${e}: executable entry '${o}' ${n}`)}}function ga(r,{what:e,files:t,formats:i,scope:s="full"}){if(r===void 0)return new Set;let o=`${e}: executable`;_(Array.isArray(r),`${o} must be an array of file paths`);let n=new Set;for(let a of r)_(typeof a=="string"&&a!=="",`${o} entry must be a non-empty string`),_(!n.has(a),`${o} entry '${a}' is listed twice`),n.add(a);return fa(n,{what:e,files:t,formats:i,scope:s}),n}function ba(r,{what:e,modules:t,formats:i,scope:s}){if(r.size!==0)return fa(r,{what:e,files:ma(t,{scope:s}),formats:i,scope:s}),sr(r)}function _(r,e){if(!r)throw new Error(e)}function va(r,e){let[t,i]=[r.split("/"),e.split("/")];for(;t.length>0&&t[0]===i[0];)t.shift(),i.shift();if(t.length===0&&i.length===0)return 0;if(t.length<2)return i.length<2&&t>i?1:-1;if(i.length<2)return 1;if(t[0]==="*")return-1;if(i[0]==="*"||t[0]==="node_modules")return 1;if(i[0]==="node_modules")return-1;let[s,o]=[t,i].map(n=>n.join(String.fromCodePoint(0)));if(s<o)return-1;if(s>o)return 1;throw new Error("Unreachable")}var ir=(r,e)=>va(r[0],e[0]),Je=r=>r&&[null,Object.prototype].includes(Object.getPrototypeOf(r)),K=r=>Object.setPrototypeOf(Object.fromEntries(r),null),sr=r=>[...r].toSorted(va),Hi=(r,{sorted:e=!0}={})=>{let t=e?[...r].toSorted(ir):[...r];return K(t.map(([i,s])=>[i,s instanceof Map?Hi(s,{sorted:e}):s]))},pa=(r,e)=>r.get(e)??r.set(e,new Map).get(e),ya=r=>new Map(Object.entries(r).map(([e,t])=>[e,Je(t)?ya(t):t]));function wt(r){if(r.startsWith("/"))return!0;if(!r.includes(".."))return!1;let e=0;for(let t of r.split("/"))if(!(t==="."||t==="")){if(t!=="..")e++;else if(--e<0)return!0}return!1}var wa=r=>r.includes("\\")||wt(r),de=(r,e)=>_(!wa(r),`${e}: path '${r}' escapes the root or holds a '\\'`),_a=(r,e)=>_(typeof r=="string"&&r!==""&&!wa(r),`${e}: invalid entry ${JSON.stringify(r)}`);function xa(r,e){_(Array.isArray(r),`${e}: entries must be an array of file paths`);let t=new Set;for(let i of r)_a(i,e),_(!t.has(i),`${e}: entry '${i}' is listed twice`),t.add(i);return t}function $a(r,e){for(let t of r)_a(t,e);return sr(r)}function ka(r,e){de(r,"formats"),_(Hp.has(e),`unknown format '${e}' for ${r}`)}function Sa(r){_(Je(r));let e=new Map;for(let[t,i]of Object.entries(r)){ka(t,i);let s=t===""?".":t;_(!e.has(s),`duplicate format key '${s}'`),e.set(s,i)}return e}function Ca(r){for(let[e,t]of r)ka(e,t);return Hi(r)}function Ea(r){for(let[,e]of r){_(e instanceof Map);for(let[t,i]of e){de(t,"imports"),_(i instanceof Map);for(let[,s]of i){if(typeof s=="string"){de(s,"imports");continue}_(s instanceof Map&&s.size>0,"import target must be a file or a non-empty {platform: file} map");for(let[o,n]of s)_(typeof o=="string"&&o.length>0&&!o.includes("/"),`invalid platform key '${o}'`),_(typeof n=="string"),de(n,"imports")}}}}function Ra(r){_(Je(r));let e=ya(r);return Ea(e),e}function Aa(r){return Ea(r),Hi(r)}function Ma(r,{skipEmpty:e=!1}={}){let t={modules:[],sources:[]};for(let[i,s]of r){if(e&&Object.keys(s.files).length===0)continue;let o=Ye(i);o&&_(s.name&&s.version&&s.files);let n=K(Object.entries(s.files).toSorted(ir));t[o?"modules":"sources"].push([i,Ui({...s,files:n})])}return{modules:K(t.modules.toSorted(ir)),sources:K(t.sources.toSorted(ir))}}function Gp(r,e){let t=r instanceof Map;if(t!==e instanceof Map)return!1;if(!t)return r===e;if(r.size!==e.size)return!1;for(let[i,s]of r)if(e.get(i)!==s)return!1;return!0}var ua=r=>r instanceof Map?`{${[...r].map(([e,t])=>`${e}: ${t}`).join(", ")}}`:r;function Ia(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=pa(i,n);for(let[d,h]of a){let p=pa(l,d);for(let[m,f]of h)p.has(m)?_(Gp(p.get(m),f),`${t}: import '${m}' from '${d}' resolves differently ('${ua(p.get(m))}' vs '${ua(f)}')`):p.set(m,f instanceof Map?new Map(f):f)}}};return s(r),s(e),i}function La(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=i.get(n);if(l===void 0){i.set(n,a);continue}try{i.set(n,qp(a,l,n))}catch(d){throw new Error(`${t}: ${d.message}`,{cause:d})}}};return s(r),s(e),i}function za(r,e,t,i){if(r.size===0)return new Set(e);let s=ma(t,{scope:i}),o=new Set(e);for(let n of r)s.has(n)||o.add(n);return o}var Kp=/(?:^|\/)\.{0,2}(?:\/|$)/u;function or(r,e,t){let i=Ne(r,e);return(i!=="."||e!=="")&&Kp.test(i)&&_(!1,`${t}: non-canonical file key ${JSON.stringify(i)}`),i.includes("\\")&&_(!1,`${t}: file key '${i}' holds a '\\', which no path may`),i}function nr(r,e,t){let i=new Map;for(let[s,{files:o}]of r){typeof s!="string"&&_(!1,`${e}: bucket dir ${String(s)} is not a string`),de(s,e);for(let n of Object.keys(o)){let a=or(s,n,e),l=i.get(a);l!==void 0&&t(a,l,s),i.set(a,s)}}return i}var Oa=(r,e)=>t=>_(!1,`duplicate file key '${t}' across ${r} buckets -- module bucketing changed between writes (a workspace package without a version now owns its own bucket); regenerate the ${e}`);function Ta(r,e,t){let i=new Map,s=o=>{for(let[n,a]of o){let l=i.get(n);if(l===void 0){i.set(n,Ui({...a,files:Object.assign(Object.create(null),a.files)}));continue}_(l.name===a.name,`${t}: module '${n}' name mismatch ('${l.name}' vs '${a.name}')`),_(l.version===a.version,`${t}: module '${n}' version mismatch ('${l.version}' vs '${a.version}')`+(l.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)")),_(l.ecosystem===a.ecosystem,`${t}: module '${n}' ecosystem mismatch ('${l.ecosystem??"(none)"}' vs '${a.ecosystem??"(none)"}')`);for(let[d,h]of Object.entries(a.files))Object.hasOwn(l.files,d)?_(l.files[d]===h,`${t}: content mismatch for '${Ne(n,d)}'`):l.files[d]=h}};return s(r),s(e),nr(i,t,(o,n,a)=>_(!1,`${t}: file '${o}' is bucketed under both '${n}' 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)`)),i}function Ye(r){return r.split("/").includes("node_modules")}function Wp(r){let e="node_modules/",t=r.length;for(;(t=r.lastIndexOf(e,t-1))!==-1;)if(t===0||r[t-1]==="/")return t;return-1}function Na(r){let e="node_modules/",t=Wp(r);if(t===-1)return null;let i=t+e.length,s=r.slice(i).split("/"),o=s[0].startsWith("@")?2:1;if(s.length<=o||s.slice(0,o).some(a=>!a))return null;let n=s.slice(0,o).join("/");return{dir:r.slice(0,i)+n,rel:s.slice(o).join("/"),name:n}}var ye=1,Ba=0,Pa=Oa("bundle","artifact (bundle=replace)"),Da=r=>Na(r)??{dir:".",rel:r==="."?"":r,name:null};function Zp(){throw new Error("bundle: file contents are not retained by this contents-free Bundle")}var Jp=(r,{files:e,...t})=>{let i=Object.create(null);for(let[s,o]of Object.entries(e))typeof o!="symbol"&&_(!1,`bundle: file '${Ne(r,s)}' is not a placeholder`),Object.defineProperty(i,s,{get:Zp,enumerable:!0});return{...t,files:Object.freeze(i)}},qi=(r,e)=>{if(r===void 0&&e===void 0)return;let t=new Map;for(let i of[r,e])for(let[s,o]of Object.entries(i??{})){if(!Array.isArray(o))continue;let n=t.get(s);n===void 0&&t.set(s,n=new Set);for(let a of o)n.add(a)}return K([...t.keys()].toSorted().map(i=>[i,sr(t.get(i))]))},Yp=/^(?=[A-Za-z0-9-]{1,39}\/)[A-Za-z0-9](?:-?[A-Za-z0-9])*\/(?!\.\.?$)[\w.-]{1,100}$/u,Xp=/^(?!\.\.?(?:\/|$))[\w.~@+-]+(?:\/(?!\.\.?(?:\/|$))[\w.~@+-]+)*$/u,Qp=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u,Fa={github:r=>typeof r=="string"&&Yp.test(r),directory:r=>typeof r=="string"&&r.length<=1024&&Xp.test(r),root:r=>r===!0,commit:r=>typeof r=="string"&&Qp.test(r)};var eu=(r,e)=>{if(r?.github===void 0||r.github.toLowerCase()!==e?.github?.toLowerCase())return;let t=Object.keys(Fa).filter(i=>r[i]!==void 0&&(i==="github"||r[i]===e[i]));return K(t.map(i=>[i,r[i]]))},Gi=(r,e,t)=>{if(r===void 0)return;_(Je(r),`bundle ${t} must be an object`);for(let s of Object.keys(r))_(Object.hasOwn(e,s),`unknown bundle ${t} key '${s}'`);let i=Object.entries(e).map(([s,o])=>typeof o=="object"?[s,Gi(r[s],o,`${t}.${s}`)]:(_(r[s]===void 0||o(r[s]),`invalid bundle ${t}.${s}: ${JSON.stringify(r[s])}`),[s,r[s]])).filter(([,s])=>s!==void 0);return i.length===0?void 0:Object.freeze(K(i))},ja=r=>{let e=Gi(r,Fa,"repo");return _(e?.directory===void 0||e.root===void 0,"bundle repo has both directory and root"),e},Ua=r=>typeof r=="string"&&/^[\w.+@/~'!()*-]+$/u.test(r),Vi={name:Ua,version:Ua},Ha={npm:Vi,composer:Vi,cargo:Vi},tu=(r,e)=>K(Object.keys(Ha).map(t=>{let[i,s]=[r?.[t],e?.[t]];return[t,i?.name!==void 0&&i.name===s?.name?K(Object.entries(i).filter(([o,n])=>n===s[o])):void 0]})),Be=class r{static VERSION=ye;version=ye;config;entries;modules;formats;imports;executable;reason;#e;get repo(){return this.#e}set repo(e){this.#e=ja(e)}#t;get package(){return this.#t}set package(e){this.#t=Gi(e,Ha,"package")}constructor({config:e={scope:"full"},entries:t,modules:i,formats:s,imports:o,executable:n,reason:a,repo:l,package:d,version:h=ye}={}){_([Ba,ye].includes(h)),_(["node_modules","full"].includes(e.scope)),this.version=h,this.config=e,this.entries=t??new Set,this.modules=i??new Map,this.formats=s??new Map,this.imports=o??new Map,this.executable=n??new Set,this.reason=a,this.repo=ja(l),this.package=d}get sources(){let e=new Map;for(let[t,{files:i}]of this.modules)for(let[s,o]of Object.entries(i))e.set(Ne(t,s),o);return e}static isResourceFormat(e){return e==="resource"||e==="resource:base64"||e==="directory"}get hasCode(){for(let[e,{files:t}]of this.modules)for(let i of Object.keys(t))if(!r.isResourceFormat(this.formats.get(Ne(e,i))))return!0;return!1}static parse(e){return r.fromJSON(JSON.parse(e))}static fileKeyAt(e){let[t,i,s,o]=e;if(typeof i=="string"){if(e.length===2&&t==="sources"){let n=Da(i);return or(n.dir,n.rel,"bundle")}if(e.length===4&&(t==="sources"||t==="modules")&&s==="files"&&typeof o=="string")return or(i,o,"bundle")}}static fromJSON(e,{contents:t=!0}={}){_(e.version===ye||e.version===Ba),_(["node_modules","full"].includes(e.config?.scope));let i=Sa(e.formats),s=new Map,o=new Set;if(e.version===ye){let l=e.config.scope==="full";if(e.modules!==void 0){_(typeof e.modules=="object"&&e.modules!==null);for(let[d,h]of Object.entries(e.modules))_(Ye(d)),de(d,"bundle"),_(h?.name&&h.version&&h.files),s.set(d,Fi(h))}if(l){_(e.sources&&typeof e.sources=="object");for(let[d,h]of Object.entries(e.sources))_(!Ye(d)),de(d,"bundle"),_(h?.name&&h.files),s.set(d,Fi(h));e.entries!==void 0&&(o=xa(e.entries,"bundle"))}else _(e.entries===void 0),_(e.sources===void 0)}else{_(e.sources);for(let[l,d]of Object.entries(e.sources)){de(l,"bundle");let{dir:h,rel:p,name:m}=Da(l);_(!wt(h)&&!wt(p)),s.has(h)||s.set(h,{name:m,version:null,files:Object.create(null)});let{files:f}=s.get(h);_(!Object.hasOwn(f,p),"bundle: duplicate file key '.' (v0 '' and '.')"),f[p]=d}}let n=nr(s,"bundle",Pa),a=Ra(e.imports);if(!t)for(let[l,d]of s)s.set(l,Jp(l,d));return new r({version:e.version,config:e.config,entries:o,modules:s,formats:i,imports:a,executable:e.version===ye?ga(e.executable,{what:"bundle",files:n,formats:i,scope:e.config.scope}):new Set,reason:Je(e.reason)?e.reason:void 0,repo:e.repo,package:e.package})}serialize(){nr(this.modules,"bundle",Pa);let{modules:e,sources:t}=Ma(this.modules,{skipEmpty:!0}),i=this.config.scope==="full",s={version:ye,config:this.config};this.repo!==void 0&&(s.repo=this.repo),this.package!==void 0&&(s.package=this.package),i&&(s.entries=$a(this.entries,"bundle")),s.formats=Ca(this.formats),s.imports=Aa(this.imports);let o=ba(this.executable,{what:"bundle",modules:this.modules,formats:this.formats,scope:this.config.scope});return o!==void 0&&(s.executable=o),this.reason!==void 0&&(s.reason=qi(this.reason,void 0)),i&&(s.sources=t),s.modules=e,JSON.stringify(s,void 0,2)}withReason(e){let{version:t,config:i,entries:s,modules:o,formats:n,imports:a,executable:l,repo:d,package:h}=this,p=qi(this.reason,{[e]:[...this.sources.keys()]});return new r({version:t,config:i,entries:s,modules:o,formats:n,imports:a,executable:l,reason:p,repo:d,package:h})}merge(e){return _(this.config.scope===e.config.scope,`bundle merge: scope mismatch ('${this.config.scope}' vs '${e.config.scope}')`),new r({config:{scope:this.config.scope},entries:new Set([...this.entries,...e.entries]),modules:Ta(this.modules,e.modules,"bundle merge"),formats:La(this.formats,e.formats,"bundle merge"),imports:Ia(this.imports,e.imports,"bundle merge"),executable:za(this.executable,e.executable,e.modules,this.config.scope),reason:qi(this.reason,e.reason),repo:eu(this.repo,e.repo),package:tu(this.package,e.package)})}};var ru=new TextEncoder,bb=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});var iu=2;function Ki(r){if(typeof r!="string")throw new TypeError(`utf8ByteLength expects a string, got ${typeof r}`);if(/[\u0100-\uFFFF]/.test(r))return ru.encode(r).byteLength;let e=/[\u0080-\u00FF]/gu,t=r.length;for(;e.test(r);){let i=e.lastIndex-1;for(let s=0;i<r.length&&s<iu;i++)r.codePointAt(i)>127?(t++,s=0):s++;e.lastIndex=i}return t}var Wi=new WeakMap,Zi=new WeakMap,Ji=new WeakMap;function ar(r){if(r?.metadataOnly)return new Map;let e=r?.bundle??r?.json;if(e&&Wi.has(e))return Wi.get(e);let t=new Map;if(!r)return t;if(r.kind==="stasis"){if(!r.bundle)return t;let i=r.bundle.formats;for(let[s,o]of r.bundle.sources)typeof o=="string"&&(Be.isResourceFormat(i?.get(s))||t.set(s,o))}else if(r.kind==="sourcemap"){if(!r.json)return t;let i=r.json.sources??[],s=r.json.sourcesContent??[];for(let o=0;o<i.length;o++)typeof s[o]=="string"&&t.set(i[o],s[o])}return e&&Wi.set(e,t),t}function su(r){let e=r?.bundle??r?.json;if(e&&Zi.has(e))return Zi.get(e);let t=new Map(ar(r));if(r?.kind==="stasis"&&r.bundle){let i=r.bundle.formats;for(let[s,o]of r.bundle.sources){if(typeof o!="string")continue;let n=i?.get(s);n==="resource"?t.set(s,o):n==="resource:base64"&&t.set(s,{format:"base64",data:o})}}return e&&Zi.set(e,t),t}var ou="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function nu(r){let e=r.endsWith("=");if(e?r.length%4!==0||r.at(-3)==="=":r.length%4===1)return null;let t=e?r.slice(0,r.endsWith("==")?-2:-1):r;if(/[^A-Za-z0-9+/]/u.test(t))return null;let i=t.length%4;return i>1&&ou.indexOf(t.at(-1))&(i===2?15:3)?null:Math.floor(t.length*3/4)}function au(r){return typeof r=="string"?Ki(r):r?.format==="base64"?nu(r.data):null}function _t(r){if(r?.fileSizes)return r.fileSizes;let e=r?.bundle??r?.json;if(e&&Ji.has(e))return Ji.get(e);let t=new Map,i=su(r),s=r?.kind==="stasis"?r.bundle?.sources.keys():r?.json?.sources;for(let o of s??[])t.set(o,au(i.get(o)));return e&&Ji.set(e,t),t}function qa(r){if(r?.kind!=="stasis"||!r.bundle?.modules)return null;let e=new Map;for(let[t,i]of r.bundle.modules)for(let s of Object.keys(i.files))e.set(t==="."?s:`${t}/${s}`,t);return e}var lu=3,Va=lu;function Ga(r){return typeof r!="string"||r.length===0?0:(r.match(/\r\n|\r|\n/gu)?.length??0)+(/[\r\n]$/u.test(r)?0:1)}function Ka(r,e){if(![1,2,Va].includes(r?.version)||r.integrity!==e||!["stasis","sourcemap"].includes(r.kind)||!Number.isSafeInteger(r.size)||r.size<0||!Array.isArray(r.files))throw new Error("Invalid bundle metadata");let t=r.version!==Va,i=r.version===1,s=new Map,o=new Map,n=new Map;for(let d of r.files){if(!Array.isArray(d)||d.length!==4&&!(i&&d.length===3))throw new Error("Invalid bundle metadata file");let[h,p,m,f]=d;if(typeof h!="string"||o.has(h)||p!==null&&(!Number.isSafeInteger(p)||p<0)||m!==null&&(typeof m!="string"||!/^sha512-[A-Za-z0-9+/]{86}==$/u.test(m))||p===null&&m!==null||i&&p!==null&&m===null||f!=null&&(!Number.isSafeInteger(f)||f<0))throw new Error("Invalid bundle metadata file");o.set(h,p),m!==null&&s.set(h,m),f!=null&&n.set(h,f)}let a=new Set(r.unsized??[]);if(r.unsized!==void 0&&(i||!Array.isArray(r.unsized)||a.size!==r.unsized.length)||[...a].some(d=>typeof d!="string"||!o.has(d)||o.get(d)!==null))throw new Error("Invalid bundle metadata");let l={integrity:e,kind:r.kind,size:r.size,metadataOnly:!0,fileSizes:o,fileHashes:s,lineCounts:n,unsizedFiles:a,stale:t};if(r.kind==="stasis"){l.bundle=Be.parse(JSON.stringify(r.bundle));let d=l.bundle.sources;if(d.size!==o.size||[...d.keys()].some(p=>!o.has(p)))throw new Error("Invalid bundle metadata inventory");let h=l.bundle.formats;if(!i&&[...o].some(([p,m])=>s.has(p)!==(m!==null&&!Be.isResourceFormat(h.get(p)))))throw new Error("Invalid bundle metadata inventory");if([...a].some(p=>h.get(p)!=="resource:base64"))throw new Error("Invalid bundle metadata inventory")}else{if(!r.json||typeof r.json!="object"||![null,void 0].includes(r.namesCount)&&(!Number.isSafeInteger(r.namesCount)||r.namesCount<0))throw new Error("Invalid sourcemap metadata");if(!Array.isArray(r.json.sources)||r.json.sources.some(d=>!o.has(d))||!Array.isArray(r.sourceSizes)||r.sourceSizes.length!==r.json.sources.length||r.sourceSizes.some(d=>d!==null&&(!Number.isSafeInteger(d)||d<0))||[...o].some(([d,h])=>s.has(d)!==(h!==null))||a.size>0)throw new Error("Invalid sourcemap inventory");l.json=r.json,l.sourceSizes=r.sourceSizes,l.namesCount=r.namesCount}if(r.codeStats===void 0)l.codeStats=ca(n,o);else{let d=r.codeStats,h=p=>Number.isSafeInteger(p)&&p>=0;if(!d||![d.files,d.lines,d.bytes].every(h)||!Array.isArray(d.languages)||d.languages.some(p=>!p||typeof p.key!="string"||typeof p.label!="string"||![p.files,p.lines,p.bytes].every(h)))throw new Error("Invalid bundle code stats");l.codeStats=d}return l}function Yi(r,{splitOwnDirs:e=!0,packageDir:t=null}={}){if(t){if(t!=="."){let i=t.match(/(?:^|\/)node_modules\/(@[^/]+\/[^/]+|[^/]+)$/u);return i&&i[1]!==".pnpm"?i[1]:t}}else{let i=/(?:^|\/)(?:node_modules|dependencies)\/(@[^/]+\/[^/]+|[^/]+)/gu,s;for(;(s=i.exec(r))!==null;)if(s[1]!==".pnpm")return s[1]}if(e){let i=r.indexOf("/");if(i>0)return r.slice(0,i)}return"__own__"}function Xi(r,e){let t=new Map,i=r?.kind==="stasis"?r.bundle?.reason:null;if(!i||typeof i!="object"||Array.isArray(i))return t;let s=new Set(e??[..._t(r)].filter(([,o])=>o!=null).map(([o])=>o));for(let[o,n]of Object.entries(i).toSorted(([a],[l])=>a.localeCompare(l))){if(!o||!Array.isArray(n))continue;let a=new Set(n.filter(l=>typeof l=="string"&&s.has(l)));a.size>0&&t.set(o,a)}return[...t.values()].some(o=>o.size<s.size)||t.clear(),t}function Wa(r,e){if(e.error)throw new Error(e.error);let t=qa(e),i=e.kind==="stasis"?e.bundle?.formats:null,s=e.lineCounts??new Map([...ar(e)].map(([a,l])=>[a,Ga(l)])),o=[..._t(e)].filter(([,a])=>a!=null).map(([a,l])=>({path:a,format:i?.get(a)??null,bytes:l,lines:s.get(a)??0,size:ee(l),module:Yi(a,{splitOwnDirs:!1,packageDir:t?.get(a)})})),n=[{id:"all",label:"All",filePaths:null},...[...Xi(e,o.map(a=>a.path))].map(([a,l])=>({id:`reason:${a}`,label:a,filePaths:[...l]}))];return{...r,files:o,reasons:n,size:ee(e.size)}}function Za(r){let e=new Map((r.repos??[]).map(i=>[i.repoId,{id:i.repoId,label:i.fullName}])),t=(r.bundles??[]).map(i=>{let s=i.repoId??"unattached";return e.has(s)||e.set(s,{id:s,label:s==="unattached"?"Unattached":i.repoFullName??String(s)}),{...i,repoId:s,repo:e.get(s).label,size:ee(i.byteSize),files:null,reasons:[]}});return{repositories:[...e.values()],bundles:t,scans:[]}}async function Ja(r,e){let t=await si(r.id,{signal:e});e?.throwIfAborted();let i=Ka(t,r.integrity);return Wa(r,i)}var Ya=new Set(["overview","graph","treemap","compare","advisories","issues","code","search","terminal"]);var cu=/^\d+$/u;function du(r){for(let e=0;e<r.length;e++){let t=r.codePointAt(e);if(t<32||t===127)return!0}return!1}var Xa=512;function pu(r){return typeof r=="string"&&r.length>0&&r.length<=Xa&&!du(r)}function Qa(r){return pu(r)&&!cu.test(r)}var el=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 uu(r){if(!Qa(r)||r==="."||r==="..")return null;try{return`/finding/${encodeURIComponent(r)}`}catch{return null}}function tl(r){if(!r)return null;if(r.view==="home")return"/";if(r.view==="bundles"){if(!/^[A-Za-z0-9_-]+$/u.test(r.bundleSlug??"")||r.teamSlug!=null&&!/^[A-Za-z0-9_-]+$/u.test(r.teamSlug))return null;let i=r.bundleTab??"overview";return Ya.has(i)?`${r.teamSlug?`/team/${r.teamSlug}`:"/manage"}/bundle/${r.bundleSlug}${i==="overview"?"":`/${i}`}`:null}if(Object.hasOwn(el,r.view)){let i=el[r.view];return r.view==="manage-bundles"&&Number.isSafeInteger(r.createRepoId)&&r.createRepoId>0?`${i}?createRepo=${r.createRepoId}`:r.view==="manage-scans"&&r.bundleId?`${i}?bundle=${encodeURIComponent(r.bundleId)}`:r.view==="manage-history"&&r.actor?`${i}?actor=${encodeURIComponent(r.actor)}`:i}if(!["findings","files"].includes(r.view)||!r.teamSlug||[r.teamSlug,r.reportSlug].some(i=>i!=null&&!/^[A-Za-z0-9_-]+$/u.test(i)))return null;let e=`/team/${encodeURIComponent(r.teamSlug)}`,t=r.reportSlug?`/report/${encodeURIComponent(r.reportSlug)}`:"";if(r.finding){let i=uu(r.finding.id);return r.view==="findings"&&i?`${e}${t}${i}`:null}return`${e}${t}${r.view==="files"?"/files":""}`}ht();function hu(r){let{data:e}=Go(r);return e&&rl(e)>0?e:null}function rl(r){return(qe(r)??[]).filter(e=>(Array.isArray(e)?e:[e]).some(t=>t&&typeof t=="object"&&Tr(t,t.source??r.source))).length}function il(r,e){let t=(r.reports??[]).filter(n=>n.visible&&n.repoId!=null).flatMap(n=>{let a=hu(n.content??"");return a?[{id:n.id,filename:n.filename,repoIds:[n.repoId],repo:n.repoFullName,directory:n.repoDirectory,analyzer:n.analyzer,appFindings:rl(a)}]:[]}),i=new Map((r.repos??[]).map(n=>[n.repoId,{id:n.repoId,label:n.fullName}]));for(let n of t)i.has(n.repoIds[0])||i.set(n.repoIds[0],{id:n.repoIds[0],label:n.repo??String(n.repoIds[0])});let s=e.results??[],o=new Set(s.map(n=>n.bundleId));return{merge:{bundles:(e.bundles??[]).filter(n=>o.has(n.id)).map(n=>({...n,size:ee(n.byteSize)})),results:s},link:{repositories:[...i.values()].filter(n=>t.some(a=>a.repoIds.includes(n.id))),reports:t}}}S();Qi();N();function ol(r){return r.map(e=>{let t=e.login||String(e.id),i=e.name?.trim()||`@${t}`,s=i===`@${t}`?"":`@${t}`,o=i.replace(/^@/u,"").split(/\s+/u).filter(Boolean).slice(0,2).map(n=>n[0]).join("").toUpperCase();return{value:e.id,label:s?`${i} ${s}`:i,displayLabel:i,secondary:s,initials:o,disabled:e.disabled,detail:e.detail}})}function nl(r,e){let t=e.normalize("NFKC").toLocaleLowerCase().trim().split(/\s+/u).filter(Boolean),i=r.filter(o=>!o.reset),s=i.filter(o=>t.every(n=>o.label.normalize("NFKC").toLocaleLowerCase().includes(n))).toSorted((o,n)=>o.label.localeCompare(n.label,void 0,{sensitivity:"base",numeric:!0}));return{pinned:r.filter(o=>o.reset),sections:[{label:null,options:s}],facets:[],showFacets:!1,count:s.length,total:i.length}}var es=class extends P{static properties={users:{attribute:!1},resetLabel:{type:String,attribute:"reset-label"}};static styles=[P.styles,M`.avatar{position:relative;overflow:hidden}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}`];constructor(){super(),this.users=[],this.resetLabel="",this.label="Choose user",this.placeholder="Choose user"}get searchLabel(){return"Search users"}get optionsLabel(){return"Users"}get noMatchesLabel(){return"No matching users"}get emptyLabel(){return"No users available"}get changeEvent(){return"user-change"}willUpdate(e){(e.has("users")||e.has("resetLabel"))&&(this.options=[...this.resetLabel?[{value:"",label:this.resetLabel,reset:!0}]:[],...ol(this.users)])}choices(){return nl(this.options,this._query)}optionIcon(e){return e.initials?c`<span class="avatar" aria-hidden="true">${e.initials}${_e()?u:lr(e.value,c`<img alt="" loading="lazy" decoding="async" src="${`/api/avatar/${encodeURIComponent(e.value)}`}" @error="${t=>{t.currentTarget.hidden=!0}}">`)}</span>`:u}};customElements.get("user-selector")||customElements.define("user-selector",es);function al(r){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:r},bubbles:!0,composed:!0}))}function pl(r,e){return c`<span class="avatar" aria-hidden="true"><span>${(e?.[0]??"?").toUpperCase()}</span> ${_e()?u:c`<img alt="" src="${`/api/avatar/${encodeURIComponent(r)}`}" @error="${t=>t.currentTarget.classList.add("broken")}">`}</span>`}var mu=I(Xo),us=I(Qo),ll=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="m4 4 8 8m0-8-8 8"/></svg>`,ts=c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true"><path d="M8 3v10M3 8h10"/></svg>`,fu={admin:"Admin",manage:"Manager",triage:"Triage",view:"Viewer",none:"No access"},gu={admin:"Manage workspace access and teams",manage:"Manage content and triage within team access",triage:"Review and triage findings",view:"Read-only access",none:"No workspace access"},rs=class extends O{static styles=[x(kn),x(T)];render(){let e=[["manage-bundles","Bundles","Keep source archives ready for review.","bundle"],["manage-scans","Scans","Run and monitor scans from stored bundles.","scan"],["manage-reports","Reports","Review, publish, and organize findings.","report"]],t=[["manage-repos","Repositories","Connect sources and manage repository settings.","repo"],["admin-users","Users","Manage accounts, roles, and workspace access.","users"],["manage-teams","Teams","Bring people and repositories together.","team"]];return c`<div class="wrap">${U("manage",this._role,this.allowShare)}<h1 class="sr-only">Manage</h1>${this._role==null?c`<p class="msg" role="status">Loading management pages…</p>`:c`<section class="home-section" aria-labelledby="content-heading"><div class="section-heading"><h2 id="content-heading">Content & activity</h2><span>From source to findings</span></div><div class="pages">${e.filter(([i])=>i!=="manage-scans"||["admin","manage"].includes(this._role)).map(i=>this._page(i))}</div></section>${this._role==="admin"?c`<section class="home-section" aria-labelledby="workspace-heading"><div class="section-heading"><h2 id="workspace-heading">Workspace & access</h2><span>Sources, people, and permissions</span></div><div class="pages workspace-pages">${t.map(i=>this._page(i))}</div></section>`:u} <button type="button" class="history-link" @click="${()=>al("manage-history")}"><span class="page-icon" aria-hidden="true">${B("history")}</span> <span class="page-copy"><strong>Workspace history</strong><span>Follow activity and triage changes across your workspace.</span></span> <span class="history-cta">View history ${B("arrow")}</span></button>`}</div>`}_page([e,t,i,s]){return c`<button type="button" class="${`page page-${s}`}" @click="${()=>al(e)}"><span class="page-top"><span class="page-icon" aria-hidden="true">${B(s)}</span><strong class="page-title">${t}</strong><span class="arrow" aria-hidden="true">${B("arrow")}</span></span> <span class="page-copy"><span>${i}</span></span></button>`}};customElements.define("managed-admin-home",rs);var is=class extends O{static properties={_page:{state:!0},_history:{state:!0},_total:{state:!0},_error:{state:!0},_filter:{state:!0},_query:{state:!0},_repo:{state:!0},_actor:{state:!0},_options:{state:!0}};static styles=[x(Sn),x(T)];constructor(){super(),this._history=null,this._total=0,this._searchTimer=null,this._error=null,this._page=1,this._filter="all",this._query="",this._repo="",this._actor="",this._options={repos:[],users:[]},this._onActorFilter=e=>{let t=e.detail?.actor;if(typeof t!="string")return;let i=t.startsWith("user:")||t.startsWith("legacy:");this._query=i?"":t,this._filter="all",this._repo="",this._actor=i?t:"",this._load()}}connectedCallback(){super.connectedCallback(),document.addEventListener("managed-history-filter",this._onActorFilter),this._load()}disconnectedCallback(){clearTimeout(this._searchTimer),document.removeEventListener("managed-history-filter",this._onActorFilter),super.disconnectedCallback()}async _load(e=1){clearTimeout(this._searchTimer),this._error=null;let t=this._filter,i=this._query.trim(),s=this._actor,o=this._repo,n=`history:${JSON.stringify([e,t,i,o,s])}`;await this._loadCollection(n,"history",a=>ln(a,e,t,i,o,s),a=>{this._history=a.history,this._total=a.total,this._page=a.page,this._options=a.filters??{repos:[],users:[]}})}_search(e){this._query=e,clearTimeout(this._searchTimer),this._loadRequest?.abort(),this._loadRequest=null,this._loading=!0,this._searchTimer=setTimeout(()=>{this._load()},250)}_setRepo(e){return this._repo=e,this._load()}_setActor(e){return this._actor=e,this._load()}_clearContext(){return this._repo="",this._actor="",this._load()}_contextFilters(){let e=this._options.repos,t=this._options.users??[],i=[{value:"",label:"All repositories",special:!0,reset:!0},...this._repo&&!e.includes(this._repo)?[{value:this._repo,label:this._repo}]:[],...e.map(s=>({value:s,label:s}))];return c`<repository-selector label="Filter history by repository" .options="${i}" .value="${this._repo}" @repository-change="${s=>{this._setRepo(s.detail.value)}}"></repository-selector><user-selector label="Filter history by user" reset-label="All users" placeholder="${this._actor?"Selected user":"All users"}" .users="${t}" .value="${this._actor}" @user-change="${s=>{this._setActor(s.detail.value)}}"></user-selector><button type="button" class="btn" aria-label="Clear repository and user filters" ?disabled="${!this._repo&&!this._actor}" @click="${()=>{this._clearContext()}}">Clear selection</button>`}render(){let e=this._history??[],t=this._page,i=(t-1)*100;return c`<div class="wrap">${U("manage-history",this._role,this.allowShare)}<h1 class="sr-only">History</h1><div class="page-intro"><p class="intro">${this._role==="admin"?"Uploads, access changes, repository changes, deletions, and triage.":"Bundle, report, and triage history within your team access."}</p><span class="result-count">${this._history?this._total:"\u2026"} entries</span></div><div class="toolbar" role="search"><input type="search" maxlength="500" aria-label="Search history" placeholder="Search history…" .value="${this._query}" @input="${s=>this._search(s.target.value)}"> <select aria-label="Filter history by type" .value="${this._filter}" @change="${s=>{this._filter=s.target.value,this._load()}}"><option value="all">All activity</option><option value="triage">Triage</option><option value="visibility">Visibility</option><option value="upload">Uploads</option><option value="repository">${this._role==="admin"?"Repositories":"Assignments"}</option>${this._role==="admin"?c`<option value="access">Access</option>`:u}<option value="delete">Deletions</option></select> ${this._contextFilters()} <button type="button" class="btn" ?disabled="${this._loading}" @click="${()=>this._load(t)}">Refresh</button></div>${this._error?c`<p class="msg error" role="alert">Couldn’t load history: ${this._error} <button type="button" class="btn" @click="${()=>this._load()}">Retry</button></p>`:u}<div aria-busy="${this._loading}">${this._history==null?this._error?u:le("Loading history\u2026"):e.length===0?c`<div class="history"><p class="empty">${this._query.trim()||this._filter!=="all"||this._repo||this._actor?"No activity matches your filters.":"No history available yet."}</p></div>`:c`<div class="history" aria-label="Workspace history"><div class="history-head" aria-hidden="true"><span>Type</span><span>Activity</span><span>Repository / report / finding</span><span>Time</span></div>${e.map(s=>this._row(s))}</div>`}</div>${this._total>100?c`<nav class="pagination" aria-label="History pages"><span role="status">${i+1}–${Math.min(i+100,this._total)} of ${this._total} entries</span><button type="button" class="btn" ?disabled="${this._loading||t===1}" @click="${()=>this._changePage(t-1)}">Previous</button><span>Page ${t} of ${Math.ceil(this._total/100)}</span><button type="button" class="btn" ?disabled="${this._loading||i+100>=this._total}" @click="${()=>this._changePage(t+1)}">Next</button></nav>`:u}</div>`}async _changePage(e){await this._load(e),await this.updateComplete,this.renderRoot.querySelector(".history")?.scrollIntoView({block:"start"})}_row(e){let t=[e.repo??e.repository,e.report,e.finding].filter(Boolean).join(" \xB7 "),i=e.actor??e.user??"Unknown user",s=e.action??"updated workspace data";return c`<div class="row"><span class="${`kind ${e.kind??""}`}">${e.kind??"activity"}</span><span class="activity-description" data-tooltip-truncated data-tooltip="${`${i} ${s}`}"><strong class="actor">${i}</strong> <span class="action">${s}</span></span><span class="detail" data-tooltip-truncated data-tooltip="${t}">${t||"\u2014"}</span><span class="history-time">${ss(e.at)}</span></div>`}};customElements.define("managed-admin-history",is);function ss(r){if(r==null||r==="")return c`<span>Unknown</span>`;let e=typeof r=="number"?r:Number(r);if(!Number.isFinite(e))return c`<span>Unknown</span>`;let t=new Date(e);return Number.isNaN(t.getTime())?c`<span>Unknown</span>`:c`<time datetime="${t.toISOString()}">${t.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}</time><span>${t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}</span>`}function cl(r){if(r==null||r==="")return"Unknown";let e=typeof r=="number"?r:Number(r);return Number.isFinite(e)&&!Number.isNaN(new Date(e).getTime())?`Last seen ${new Date(e).toLocaleString()}`:"Unknown"}function dl(r){return r?.lastActivityAt??r?.lastActivity??r?.lastWriteAt??r?.lastActiveAt}var os=class extends O{static properties={_query:{state:!0},_users:{state:!0},_teams:{state:!0},_error:{state:!0}};static styles=[x(Cn),x(T)];constructor(){super(),this._users=null,this._query="",this._teams=null,this._error=null}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("users","users",e=>Promise.all([cn(e),li(e)]),([e,t])=>{this._users=e,this._teams=Array.isArray(t?.teams)?t.teams:[]})}_filteredUsers(){let e=this._query.trim().toLocaleLowerCase();return(this._users??[]).filter(t=>[t.name,t.login,t.role,...(this._teams??[]).filter(i=>i.members?.some(s=>s.userId===t.id)).map(i=>i.name)].filter(Boolean).join(" ").toLocaleLowerCase().includes(e))}render(){let e=this._filteredUsers();return c`<div class="wrap">${U("admin-users",this._role,this.allowShare)}<h1 class="sr-only">Users</h1><div class="page-intro"><p class="intro">Manage workspace access and roles.</p></div><div class="collection-toolbar" role="search"><input type="search" aria-label="Search users" placeholder="Search by name, username, or team…" .value="${this._query}" @input="${t=>{this._query=t.target.value}}"><span class="result-count" role="status">${this._users&&this._query.trim()?`${e.length} matching out of `:""}${this._users?.length??"\u2026"} users</span></div>${this._error?c`<p class="msg error" role="alert">Couldn't load users: ${this._error}</p>`:u}<div aria-busy="${this._loading}">${this._users==null?this._error?u:le("Loading users\u2026"):this._list(e)}</div></div>`}_list(e){return this._users.length===0?c`<p class="msg">No users yet.</p>`:e.length===0?c`<div class="empty"><strong>No matching users</strong><p>Try another name, username, or team.</p></div>`:c`<div class="directory"><div class="list-head" aria-hidden="true"><span>Account</span><span>Team access</span><span>Last seen</span><span>Last activity</span><span>Role</span></div><ul class="users">${e.map(t=>this._row(t))}</ul></div>${this._users.some(t=>t.id===this._me)?c`<p class="self-note">Your own role can only be changed by another admin.</p>`:u}`}_row(e){let t=e.id===this._me,i=(this._teams??[]).flatMap(s=>{let o=s.members?.find(n=>n.userId===e.id);return o==null?[]:[{team:s,member:o}]});return c`<li><span class="person">${pl(e.id,e.login)} <span class="who"><span class="name"><span class="name-text">${e.name||e.login}</span>${t?c`<span class="you">You</span>`:u}</span> <span class="login">@${e.login}</span> </span></span><span class="memberships">${De(e.role,"manage")?c`<span class="team-access"><strong>${e.role==="admin"?"All reports":"Owned and team reports"}</strong><span class="team-perms"><span class="permission-granted">+ Deps</span><span class="permission-granted">+ Security</span></span></span>`:i.length===0?c`<span class="no-team">No team access</span>`:i.map(({team:s,member:o})=>c`<span class="team-access"><strong>${B("team")}<span>${s.name}</span></strong><span class="team-perms">${["dependencies","security"].map(n=>c`<span class="${o[n]===!0?"permission-granted":"permission-denied"}">${o[n]===!0?"+":"\u2212"} ${n==="dependencies"?"Deps":"Security"}</span>`)}</span></span>`)} </span><span class="last-seen" aria-label="${cl(e.lastSeenAt)}">${ss(e.lastSeenAt)}</span> <button type="button" class="activity-link" aria-label="${`Show activity by ${e.login}`}" @click="${()=>this._showActivity(e.id)}"><span class="last-activity" aria-label="${`Last activity ${cl(dl(e)).replace(/^Last seen /u,"")}`}">${ss(dl(e))}</span></button> <span class="access"><select class="role" ?disabled="${t}" aria-label="${`Change ${e.login}\u2019s role`}" aria-description="${gu[e.role]??""}" @change="${s=>this._changeRole(e,s.target.value,s.target)}">${we.map(s=>c`<option value="${s}" ?selected="${s===e.role}">${fu[s]}</option>`)}</select></span></li>`}async _changeRole(e,t,i){let s=e.role;if(t!==s){try{await this.appState.mutate(()=>dn(e.id,t,this._csrf),["users","teams","reports","history"]),e.role=t,await this._load()}catch(o){console.warn("admin: set role failed:",o),i.value=s}this.requestUpdate()}}_showActivity(e){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-history",actor:`user:${e}`},bubbles:!0,composed:!0}))}};customElements.define("managed-admin-users",os);var ul=B("repo"),ns=class extends O{static properties={_publicRepoOpen:{state:!0},_publicRepository:{state:!0},_publicRepoError:{state:!0},_addingPublic:{state:!0},_data:{state:!0},_error:{state:!0},_actionError:{state:!0},_scope:{state:!0},_showAll:{state:!0},_query:{state:!0},_organization:{state:!0},_loading:{state:!0},_busy:{state:!0},_connectingApp:{state:!0},_detail:{state:!0},_impact:{state:!0},_impactLoading:{state:!0},_removeOpen:{state:!0},_acknowledge:{state:!0},_deleteTriage:{state:!0},_confirmName:{state:!0}};static styles=[x(En),x(T)];constructor(){super(),this._publicRepoOpen=!1,this._publicRepository="",this._publicRepoError=null,this._addingPublic=!1,this._data=null,this._error=null,this._actionError=null,this._scope="connected",this._showAll=!1,this._query="",this._organization=null,this._loading=!0,this._busy=null,this._connectingApp=!1,this._detail=null,this._impact=null,this._impactLoading=!1,this._impactFresh=!1,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._impactRequest=null}connectedCallback(){super.connectedCallback(),this._load()}disconnectedCallback(){super.disconnectedCallback(),this._impactRequest?.abort()}_repositoryKey(){return`repos:${JSON.stringify([this._scope,this._showAll])}`}async _load(e=!1){this._error=null;let{_scope:t,_showAll:i}=this;await this._loadCollection(this._repositoryKey(),"repositories",s=>pn(t,i,e,s),s=>{this._data=s,this._organization=this._repositoryChoices().activeFacet})}_open(e){this._impactRequest?.abort(),this._publicRepoOpen=!1,this._scope=e,this._showAll=!1,this._query="",this._organization=null,this._detail=null,this._impact=null,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._data=null,this._actionError=null,this._load()}_setShowAll(e){this._showAll=e,this._organization=null,this._data=null,this._load()}_search(e){this._query=e}_repositoryChoices(){let e=(this._data?.repositories??[]).map(t=>({value:t.id,label:t.fullName,repo:t}));return tr(e,this._query,this._organization,{includeSingletonOrganizations:!0})}_back(e=null){return c`<div class="breadcrumb"><button type="button" class="breadcrumb-manage" @click="${()=>{document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage"},bubbles:!0,composed:!0}))}}">Manage</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> <button type="button" class="breadcrumb-manage" aria-label="Back to repositories" @click="${()=>{this._detail?(this._impactRequest?.abort(),this._detail=null,this._actionError=null):this._open("connected")}}">Repositories</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> ${e?c`<h1 class="breadcrumb-current">${e}</h1>`:u}</div>`}_openDetail(e){this._detail=e,this._actionError=null,this._impact=this.appState.read(`repo-impact:${e.id}`)??null,this._impactFresh=!1,this._removeOpen=!1,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName="",this._impactLoading=!0,this._impactRequest?.abort();let t=new AbortController;this._impactRequest=t,this.appState.load(`repo-impact:${e.id}`,"repository data",i=>mn(e.id,i),{signal:t.signal,apply:i=>{this._impact=i}}).then(i=>(t.signal.aborted||(this._impactFresh=!0),i)).catch(i=>{!t.signal.aborted&&i?.name!=="AbortError"&&!this._impact&&(this._actionError=`Couldn't load repository data: ${i?.message??i}`)}).finally(()=>{this._impactRequest===t&&(this._impactLoading=!1)})}render(){if(this._detail)return this._detailPage(this._detail);let e=this._scope==="connected",t=e?"Repositories":`Add ${this._scope} repository`,i=this._repositoryChoices();return c`<div class="wrap">${U("manage-repos",this._role,this.allowShare)} ${e?c`<h1 class="sr-only">${t}</h1>`:this._back(t)}<div class="page-intro"><p class="intro">${e?"Manage connected repositories and their settings.":this._scope==="installed"?this._showAll?"Showing all repositories the GitHub App can read.":"Showing installed repositories you can access on GitHub.":"Choose a public repository your GitHub account is involved with."}</p>${e?c`<div class="repository-actions"><button type="button" class="btn" @click="${()=>this._open("installed")}">${this._accessIcon("private")} Add installed repository</button> <button type="button" class="btn" @click="${()=>this._open("public")}">${this._accessIcon("public")} Add your public repository</button> ${this._role==="admin"&&this._data?.canAddAnyPublicRepository?c`<button type="button" class="btn" aria-expanded="${this._publicRepoOpen}" @click="${()=>this._openPublicRepository()}">${this._accessIcon("public")} Add a public repository</button>`:u}</div>`:u}</div>${!e&&this._scope==="installed"?c`<div class="access-note"><p>Installed repositories are readable through the GitHub App. Install it on a repository or organization to make it available here.</p><span class="access-action">${this._data?.installUrl?c`<a class="btn" href="${this._data.installUrl}" target="_blank" rel="noopener noreferrer">Configure GitHub access</a>`:c`<button type="button" class="btn" disabled="disabled">Configure GitHub access</button>`}</span></div>`:u}<div class="toolbar"><label class="search"><input type="search" aria-label="${e?"Search connected repositories":`Search ${this._scope} repositories`}" placeholder="Search by repository or owner…" .value="${this._query}" @input="${s=>this._search(s.target.value)}"></label> ${this._scope==="installed"?c`<label class="show-all"><input type="checkbox" role="switch" .checked="${this._showAll}" @change="${s=>this._setShowAll(s.target.checked)}"><span>Show all</span></label><label class="show-all-paper"><input type="checkbox" .checked="${this._showAll}" @change="${s=>this._setShowAll(s.target.checked)}"><span>Show all</span></label>`:u} ${e?c`<span class="result-count" role="status">${this._data&&(this._query.trim()||i.activeFacet!=null)?`${i.count} ${i.count===1?"repository":"repositories"} out of `:""}${this._data?.connectedCount??"\u2026"} connected</span>`:c`<button type="button" class="btn" ?disabled="${this._loading}" @click="${()=>{this._load(!0)}}">Refresh</button>`}</div>${e&&this._publicRepoOpen&&this._role==="admin"&&this._data?.canAddAnyPublicRepository?this._publicRepositoryForm():u} ${this._actionError?c`<p class="msg error" role="alert">${this._actionError}</p>`:u} ${this._error?c`<p class="msg error" role="alert">Couldn't load repositories: ${this._error}</p><button type="button" class="btn" @click="${()=>{this._load()}}">Try again</button>`:u} ${!e&&this._data?c`<p class="repository-count" role="status">${i.count}${i.count===i.total?"":` of ${i.total}`} ${i.total===1?"repository":"repositories"}</p>`:u}<div aria-busy="${this._loading}">${this._body(i)}</div></div>`}_body(e){return this._data?c`${this._data.tokenMissing&&!this._showAll&&this._scope!=="connected"?c`<p class="msg">Log out and back in to refresh your GitHub membership access.</p>`:u}<div class="repository-browser">${e.showFacets?c`<nav class="organization-list" aria-label="Filter by organization"><button type="button" class="organization" aria-pressed="${e.activeFacet==null}" @click="${()=>{this._organization=null}}"><span class="organization-name">All organizations</span><span class="organization-count">${e.total}</span></button> ${e.facets.map(t=>c`<button type="button" class="organization" title="${t.name}" aria-pressed="${e.activeFacet===t.value}" @click="${()=>{this._organization=t.value}}"><span class="organization-name">${t.name}</span><span class="organization-count">${t.count}</span></button>`)}</nav>`:u}<div class="repo-results">${e.sections.map(t=>c`<section class="repo-group" aria-label="${t.label??"Repositories"}">${t.label?c`<h2 class="owner-head"><span class="owner-icon" aria-hidden="true">${t.label[0]??"?"}</span>${t.label}</h2>`:u}<ul class="repos">${t.options.map(i=>this._row(i.repo,t.organization?i.name:i.label))}</ul></section>`)} ${e.count?u:c`<div class="empty"><strong>${e.total?"No matching repositories":this._scope==="connected"?"No connected repositories yet":`No ${this._scope} repositories available`}</strong><p>${e.total?"Try a different search or organization.":this._scope==="connected"?"Add an installed or public repository to get started.":this._scope==="installed"?this._showAll?"Install the GitHub App, then refresh this list.":"No installed repositories match your GitHub access. Turn on Show all to browse every installation.":"Public repositories associated with your GitHub account will appear here."}</p></div>`}</div></div>`:this._error?u:le("Loading repositories\u2026")}_openPublicRepository(){this._publicRepoOpen=!0,this._publicRepoError=null,this.updateComplete.then(()=>this.renderRoot?.querySelector("#public-repository")?.focus())}_publicRepositoryForm(){return c`<form class="public-repository-form" aria-label="Add a public repository" @submit="${e=>{e.preventDefault(),this._addPublicRepository()}}"><label class="confirm-field" for="public-repository"><span>Public GitHub repository</span> <input id="public-repository" class="confirm-name" type="text" placeholder="owner/repo or https://github.com/owner/repo" autocomplete="off" required .value="${this._publicRepository}" ?disabled="${this._addingPublic}" @input="${e=>{this._publicRepository=e.target.value}}"></label><div class="dialog-actions"><button type="button" class="btn" ?disabled="${this._addingPublic}" @click="${()=>{this._publicRepoOpen=!1}}">Cancel</button><button type="submit" class="btn" ?disabled="${this._addingPublic||!this._publicRepository.trim()}">${this._addingPublic?"Adding\u2026":"Add repository"}</button></div>${this._publicRepoError?c`<p class="msg error" role="alert">${this._publicRepoError}</p>`:u}</form>`}async _addPublicRepository(){if(!(this._addingPublic||!this._publicRepository.trim())){this._addingPublic=!0,this._publicRepoError=null;try{await this.appState.mutate(()=>hn(this._publicRepository.trim(),this._csrf),["repos","reports","bundles","teams","users","history","scan-sources"]),this._publicRepoOpen=!1,this._publicRepository="",await this._load()}catch(e){this._publicRepoError=e?.message??String(e)}finally{this._addingPublic=!1}}}_row(e,t){let i=`${this._accessLabel(e)}${this._scope==="connected"&&e.active===!1?" \xB7 Deactivated":""}`,s=c`${ul}<span class="repo-copy"><span class="repo-name">${t}</span><span class="repo-meta">${i}</span></span>`;return this._scope==="connected"?c`<li><button type="button" class="repo-row" aria-label="${`Manage ${e.fullName}`}" @click="${()=>this._openDetail(e)}">${s}<svg class="arrow" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="m6 4 4 4-4 4"/></svg></button></li>`:c`<li class="repo-row">${s} ${e.selected?c`<span class="connected"><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>Connected</span>`:e.private&&!e.installed?c`<span class="repo-meta">Needs App access</span>`:c`<button type="button" class="btn" aria-label="${`Add ${e.fullName}`}" ?disabled="${this._busy!=null}" @click="${()=>{this._setActive(e,!0)}}">${this._busy===e.id?"Adding\u2026":"Add"}</button>`}</li>`}_accessLabel(e){let t=e.visibility==="public"?"Public":e.visibility==="internal"?"Internal":e.private?"Private":null,i=e.installed?"GitHub App":"GitHub";return t?`${t} \xB7 ${i}`:i}_connectAppButton(e){return e.installed?u:c`<button type="button" class="btn connect-app" aria-label="${`Connect GitHub App to ${e.fullName}`}" ?disabled="${this._busy!=null}" @click="${()=>{this._connectApp(e)}}">${this._connectingApp&&this._busy===e.id?"Connecting\u2026":"Connect GitHub App"}</button>`}async _connectApp(e){if(!(this._busy!=null||e.installed)){this._busy=e.id,this._connectingApp=!0,this._actionError=null;try{let t=await this.appState.mutate(()=>fn(e.id,this._csrf),["repos","history","scan-sources"]);if(!this.isConnected)return;if(!t.connected){globalThis.location.assign(t.installUrl);return}this._detail?.id===e.id&&(this._detail={...this._detail,installed:!0}),this._data&&(this._data={...this._data,repositories:this._data.repositories.map(i=>i.id===e.id?{...i,installed:!0}:i)}),await this._load()}catch(t){this._actionError=`Couldn't connect ${e.fullName}: ${t?.message??t}`}finally{this._busy=null,this._connectingApp=!1}}}_detailPage(e){let t=e.active!==!1,i=this._impact?.reports??[],s=this._impact?.bundles??[];return c`<div class="wrap">${U("manage-repos",this._role,this.allowShare)}<div class="head">${this._back()}<h1>${e.fullName}</h1></div><p class="intro ui-hint">Repository settings and stored data.</p>${this._actionError?c`<p class="msg error" role="alert">${this._actionError}</p>`:u}<section class="section" aria-label="Repository connection"><h2>Connection</h2><div class="settings-row"><div class="settings-copy"><strong>${this._accessLabel(e)}</strong><p>${t?"Active for new scans and uploads.":"Deactivated. Stored reports and bundles are retained."}</p></div><span class="${`status-line ${t?"":"inactive"}`}">${t?"Active":"Deactivated"}</span> ${this._connectAppButton(e)} ${e.htmlUrl?c`<a class="btn" href="${e.htmlUrl}" target="_blank" rel="noopener noreferrer">View on GitHub</a>`:u}</div><div class="settings-row"><div class="settings-copy"><strong>${t?"Deactivate repository":"Reactivate repository"}</strong><p>${t?"Pause new scans while preserving all stored data and attachments.":"Make this repository available for new scans and bundle attachments again."}</p></div><button type="button" class="btn" ?disabled="${this._busy!=null}" @click="${()=>{this._setActive(e,!t)}}">${this._busy===e.id&&!this._connectingApp?t?"Deactivating\u2026":"Reactivating\u2026":t?"Deactivate":"Reactivate"}</button></div></section><section class="data-section" aria-label="Stored repository data"><h2>Stored data</h2><div class="dialog-data" aria-busy="${this._impactLoading}">${[["Reports",i],["Bundles",s]].map(([o,n])=>c`<section><h3>${o} (${this._impact==null?"\u2026":n.length})</h3>${this._impactLoading&&this._impact==null?c`<p class="data-empty" role="status">Loading ${o.toLowerCase()}…</p>`:this._impact==null?c`<p class="data-empty">Attached data could not be loaded.</p><button type="button" class="btn" @click="${()=>this._openDetail(e)}">Try again</button>`:n.length>0?c`<ul>${n.map(a=>c`<li>${a.filename}${a.repoDirectory?` \xB7 ${a.repoDirectory}`:u}</li>`)}</ul>`:c`<p class="data-empty">No ${o.toLowerCase()} attached.</p>`}</section>`)}</div></section><section class="section" aria-label="Permanent repository removal"><h2>Permanent removal</h2><div class="settings-row"><div class="settings-copy"><strong>Delete repository and stored data</strong><p>Deactivation is reversible. Permanent removal deletes this repository’s attached reports and bundles; it cannot be undone.</p></div><button type="button" class="btn danger" ?disabled="${this._busy!=null||this._impactLoading||!this._impactFresh||this._impact==null}" @click="${()=>{this._removeOpen=!0,this._acknowledge=!1,this._deleteTriage=!1,this._confirmName=""}}">Remove permanently</button></div></section>${this._removeOpen&&this._impact!=null&&!this._impactLoading?this._removeDialog(e,i,s):u}</div>`}_removeDialog(e,t,i){let s=t.length>0||i.length>0,o=this._canRemove(e);return c`<div class="dialog-backdrop" role="presentation" @click="${n=>{n.target===n.currentTarget&&(this._removeOpen=!1)}}"><section class="${`dialog ${s?"":"small"}`}" role="dialog" aria-modal="true" aria-labelledby="remove-repo-title"><h2 id="remove-repo-title">Remove ${e.fullName} permanently?</h2><p class="dialog-copy">${s?"This destructive action will remove the repository and the stored data listed below. Deactivation keeps all of it.":"This repository has no attached reports or bundles. Permanent removal deletes its connection record."}</p>${s?c`<div class="dialog-data"><section><h3>Reports to delete (${t.length})</h3><ul>${t.map(n=>c`<li>${n.filename}${n.repoDirectory?` \xB7 ${n.repoDirectory}`:u}</li>`)}</ul></section><section><h3>Bundles to delete (${i.length})</h3><ul>${i.map(n=>c`<li>${n.filename}</li>`)}</ul></section></div>`:u} <label class="confirm-line"><input type="checkbox" .checked="${this._acknowledge}" @change="${n=>{this._acknowledge=n.target.checked}}"><span>I understand this permanently deletes the repository connection${s?", reports, and bundles":""}.</span></label> ${(this._impact?.triageCount??0)>0?c`<label class="confirm-line"><input type="checkbox" .checked="${this._deleteTriage}" @change="${n=>{this._deleteTriage=n.target.checked}}"><span>Also delete ${this._impact.triageCount} triage entr${this._impact.triageCount===1?"y":"ies"} belonging only to this repository.</span></label>`:u} ${s?c`<label class="confirm-field"><span>Type <strong>${e.fullName}</strong> to confirm.</span><input class="confirm-name" type="text" autocomplete="off" .value="${this._confirmName}" @input="${n=>{this._confirmName=n.target.value}}"></label>`:u}<div class="dialog-actions"><button type="button" class="btn" @click="${()=>{this._removeOpen=!1}}">Cancel</button><button type="button" class="btn danger" ?disabled="${!o}" @click="${()=>{this._remove(e)}}">${this._busy===e.id?"Removing\u2026":"Remove permanently"}</button></div></section></div>`}_accessIcon(e){return e==="private"?c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="7" width="10" height="7" rx="1"/><path d="M5 7V5a3 3 0 0 1 6 0v2"/></svg>`:c`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="8" r="6"/><path d="M2.5 8h11M8 2c1.5 1.7 2.2 3.7 2.2 6S9.5 12.3 8 14c-1.5-1.7-2.2-3.7-2.2-6S6.5 3.7 8 2Z"/></svg>`}async _setActive(e,t){if(this._busy==null){this._busy=e.id,this._actionError=null;try{if(await this.appState.mutate(()=>un(e.id,t,this._csrf),["repos","reports","bundles","teams","users","history"]),!this.isConnected)return;this._detail?.id===e.id&&(this._detail={...this._detail,active:t}),this._data&&(this._data={...this._data,repositories:this._data.repositories.map(i=>i.id===e.id?{...i,active:t}:i)}),await this._load()}catch(i){let s=t?e.active===!1?"reactivate":"add":"deactivate";this._actionError=`Couldn't ${s} ${e.fullName}: ${i?.message??i}`}finally{this._busy=null}}}_canRemove(e){return this._busy!=null||this._impactLoading||!this._impactFresh||this._impact?.repoId!==e.id||!this._acknowledge?!1:!(this._impact.reports.length>0||this._impact.bundles.length>0)||this._confirmName===e.fullName}async _remove(e){if(this._canRemove(e)){this._busy=e.id,this._actionError=null;try{await this.appState.mutate(()=>gn(e.id,e.fullName,this._deleteTriage,this._csrf),["repos","repo-impact","reports","report-preview","bundles","teams","users","history","scan-sources"]),this._removeOpen=!1,this._detail=null,this._impact=null,await this._load()}catch(t){this._actionError=`Couldn't remove ${e.fullName}: ${t?.message??t}`}finally{this._busy=null}}}};customElements.define("managed-admin-repos",ns);function as(r){return typeof r!="number"||!Number.isFinite(r)?"":r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(1)} KB`:`${(r/1048576).toFixed(1)} MB`}function hl(r){return[{value:null,label:"No repository",special:!0},...r.map(e=>({value:e.repoId,label:e.fullName}))]}var ls=class extends O{static properties={localImportSource:{attribute:!1},_query:{state:!0},_visibility:{state:!0},_data:{state:!0},_error:{state:!0},_busy:{state:!0},_dragOver:{state:!0},_preview:{state:!0},_previewLoading:{state:!0},_locationReport:{state:!0},_locationRepo:{state:!0},_locationDirectory:{state:!0},_locationBusy:{state:!0}};static styles=[x(Rn),x(mi),x(T),x(hi)];constructor(){super(),this._query="",this._visibility="all",this._data=null,this._error=null,this._busy=!1,this._dragOver=!1,this._preview=null,this._previewLoading=null,this._previewRequest=null,this._locationReport=null,this._locationRepo=null,this._locationDirectory="",this._locationBusy=!1,this._teardownDrop=null,this._queue=[],this._localImport=new gt(this,"report",e=>pi(this,e,t=>oi(t,this._csrf),["reports","repo-impact","history","scan-sources"]))}connectedCallback(){super.connectedCallback(),this._load(),this._teardownDrop=di(this,e=>{this._upload(e)},e=>{this._dragOver=e})}disconnectedCallback(){super.disconnectedCallback(),this._teardownDrop?.(),this._cancelPreview()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("reports","reports",bn,t=>{this._data=t,this._preview&&!t.reports?.some(i=>i.id===this._preview)&&this._cancelPreview()})}render(){return c`${this._dragOver?c`<div class="dropzone">Drop reports to upload</div>`:u}<div class="wrap">${U("manage-reports",this._role,this.allowShare)}<h1 class="sr-only">Reports</h1><div class="page-intro"><p class="intro">Upload reports. New reports stay hidden until you make them visible.</p>${this._localImport.renderAction()}</div>${this._localImport.renderPanel(this._busy||!this._csrf)}<div class="drop-card"><span class="drop-icon" aria-hidden="true">${B("upload")}</span><span class="drop-copy"><strong>Upload reports</strong><span>Drop files anywhere on this page.</span></span><button type="button" class="drop-browse" ?disabled="${this._busy}" @click="${()=>ci(e=>{this._upload(e)})}">${this._busy?"Uploading\u2026":"Browse files"}</button></div>${this._data?.repoScopes?.length?c`<p class="intro">Team paths: ${this._data.repoScopes.map(e=>`${this._data.repos.find(t=>t.repoId===e.repoId)?.fullName??e.repoId}/${e.path??""}`).join(", ")}</p>`:u} ${this._body()}</div>`}_body(){let e=Array.isArray(this._data?.reports)?this._data.reports:[],t=this._query.trim().toLocaleLowerCase(),i=e.filter(o=>[o.filename,o.repoFullName,o.repoDirectory,o.uploadedByLogin].filter(Boolean).join(" ").toLocaleLowerCase().includes(t)&&(this._visibility==="all"||!!o.visible==(this._visibility==="visible"))),s=`${t||this._visibility!=="all"?`${i.length} of `:""}${e.length} ${e.length===1?"report":"reports"}`;return c`<div class="collection-toolbar" role="search"><input type="search" aria-label="Search reports" placeholder="Search reports or repositories…" .value="${this._query}" @input="${o=>{this._query=o.target.value}}"><select aria-label="Report visibility" .value="${this._visibility}" @change="${o=>{this._visibility=o.target.value}}"><option value="all">All reports</option><option value="visible">Visible to teams</option><option value="hidden">Hidden reports</option></select><span class="result-count" role="status">${this._data==null?"\u2026 reports":s}</span></div>${this._error?c`<p class="msg error" role="alert">${this._error}</p>`:u}<div aria-busy="${this._loading}">${this._data==null?this._error?u:le("Loading reports\u2026"):i.length>0?c`<div class="report-list"><div class="report-list-head" aria-hidden="true"><span class="report-heading">Report</span><span>Repository</span><span>Uploaded by</span><span>Date</span><span class="size-heading">Size</span><span>Visibility</span><span class="actions-heading">Actions</span></div><ul class="reports">${i.map(o=>this._row(o))}</ul></div>`:c`<div class="empty"><strong>${e.length===0?"No reports uploaded yet":"No matching reports"}</strong><p>${e.length===0?"Drop a report here or browse files above.":"Try a different search or visibility filter."}</p></div>`}</div>`}_row(e){let t=e.analyzer??e.source??e.producer??"default",i=ri[t]??ri.default,s=e.repoEmbedded!==!0&&e.canChangeRepo!==!1,o=e.repoEmbedded===!0||e.repoId!=null,n=e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:"No repository assigned",a=Number.isFinite(e.uploadedAt)?new Date(e.uploadedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"";return c`<li class="report"><div class="report-main"><span class="report-mark" aria-hidden="true">${I(i)}</span> <span class="report-name" data-tooltip-truncated data-tooltip="${e.filename}">${e.filename}</span> <span class="report-location" data-tooltip-truncated data-tooltip="${n}">${n}</span> <span class="report-meta report-uploader" data-tooltip-truncated data-tooltip="${e.uploadedByLogin??"Uploader removed"}">${e.uploadedByLogin??"Uploader removed"}</span> <span class="report-meta report-date">${a}</span> <span class="report-meta report-size">${as(e.byteSize)}</span> <span class="${`status ${e.visible?"visible":"hidden"}`}">${e.visible?"Visible":"Hidden"}</span> <span class="report-actions">${s?c`<button type="button" class="action" data-tooltip="Set repository location" aria-label="${`Set location for ${e.filename}`}" @click="${()=>this._openLocation(e)}">${B("repo")}</button>`:c`<span class="action-spacer"></span>`} <button type="button" class="action" data-tooltip="${this._preview===e.id?"Close preview":"Preview report"}" aria-label="${`Preview ${e.filename}`}" aria-expanded="${this._preview===e.id}" @click="${()=>{this._togglePreview(e)}}">${B("preview")}</button> <button type="button" class="action" data-tooltip="${e.visible?"Hide from teams":o?"Make visible to teams":"Assign a repository before publishing"}" aria-label="${`${e.visible?"Hide":"Make visible"} ${e.filename}`}" ?disabled="${e.canChangeRepo===!1||!o&&!e.visible}" @click="${()=>{this._setVisible(e,!e.visible)}}">${B(e.visible?"hide":"show")}</button> <a class="action" aria-label="${`Download ${e.filename}`}" href="${`/api/admin/reports/${encodeURIComponent(e.id)}`}">${B("download")}</a> <button type="button" class="action danger" aria-label="${`Delete ${e.filename}`}" ?disabled="${e.canChangeRepo===!1}" @click="${()=>this._delete(e)}">${us}</button></span></div>${this._preview===e.id?c`<div class="preview">${this._previewLoading===e.id?c`<span class="preview-loading">Loading preview…</span>`:c`<pre>${this._previewText??""}</pre>`}</div>`:u} ${this._locationReport===e.id?this._locationEditor(e):u}</li>`}_openLocation(e){e.canChangeRepo!==!1&&(this._locationReport=e.id,this._locationRepo=e.repoId??null,this._locationDirectory=e.repoDirectory??"",this._error=null)}_locationEditor(e){let t=Array.isArray(this._data?.repos)?this._data.repos:[];return c`<div class="location-editor"><div class="location-field"><span>Repository</span><repository-selector label="Repository for report" .options="${hl(t)}" .value="${this._locationRepo}" ?disabled="${this._locationBusy}" @repository-change="${i=>{this._locationRepo=i.detail.value}}"></repository-selector></div><div class="location-field"><label for="${`report-dir-${e.id}`}">Directory (optional)</label><input id="${`report-dir-${e.id}`}" type="text" placeholder="Repository root" .value="${this._locationDirectory}" @input="${i=>{this._locationDirectory=i.target.value}}"></div><div class="location-actions"><button type="button" class="action" @click="${()=>{this._locationReport=null}}">Cancel</button><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>{this._saveLocation(e)}}">Save</button></div></div>`}async _saveLocation(e){if(!this._locationBusy){this._locationBusy=!0,this._error=null;try{await this.appState.mutate(()=>wn(e.id,this._locationRepo,this._locationDirectory.trim(),this._csrf),["reports","repo-impact","history","scan-sources"]),this._locationReport=null,await this._load({preserveError:!0})}catch(t){this._error=`Couldn't set report location: ${String(t?.message??t)}`}finally{this._locationBusy=!1}}}_cancelPreview(){this._previewRequest?.abort(),this._previewRequest=null,this._preview=null,this._previewLoading=null,this._previewText=""}async _togglePreview(e){let t=this._preview===e.id;if(this._cancelPreview(),t)return;let i=new AbortController;this._previewRequest=i;let s=()=>this._previewRequest===i&&!i.signal.aborted;this._preview=e.id,this._previewText=this.appState.read(`report-preview:${e.id}`)??"",this._previewLoading=this.appState.read(`report-preview:${e.id}`)===void 0?e.id:null;try{await this.appState.load(`report-preview:${e.id}`,"report preview",async o=>{let n=await $(`/api/admin/reports/${encodeURIComponent(e.id)}`,{credentials:"same-origin",signal:o});if(!n.ok)throw new Error(`HTTP ${n.status}`);let a=await n.text();return a.slice(0,4e3)+(a.length>4e3?`
86
+ \u2026`:"")},{signal:i.signal,apply:o=>{this._previewText=o}})}catch(o){s()&&o?.name!=="AbortError"&&!this._previewText&&(this._previewText=`Preview unavailable: ${o?.message??o}`)}finally{s()&&(this._previewLoading=null)}}async _setVisible(e,t){this._error=null;try{await this.appState.mutate(()=>yn(e.id,t,this._csrf),["reports","history","scan-sources"]),e.visible=t,this.requestUpdate(),await this._load()}catch(i){this._error=`Couldn't change report visibility: ${String(i?.message??i)}`}}async _upload(e){await ui(this,e,t=>oi(t,this._csrf),["reports","repo-impact","history","scan-sources"])}async _delete(e){if(globalThis.confirm?.(`Delete \u201C${e.filename}\u201D? This can't be undone.`)){this._error=null;try{await this.appState.mutate(()=>_n(e.id,this._csrf),["reports",`report-preview:${e.id}`,"repo-impact","history","scan-sources"])}catch(t){this._error=`Delete failed: ${String(t?.message??t)}`}await this._load({preserveError:!0})}}};customElements.define("managed-admin-reports",ls);var bu=c`<svg class="report-icon" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M8.878.392a1.75 1.75 0 0 0-1.756 0l-5.25 3.045A1.75 1.75 0 0 0 1 4.951v6.098c0 .624.332 1.2.872 1.514l5.25 3.045a1.75 1.75 0 0 0 1.756 0l5.25-3.045c.54-.313.872-.89.872-1.514V4.951c0-.624-.332-1.2-.872-1.514ZM7.875 1.69a.25.25 0 0 1 .25 0l4.63 2.685L8 7.133 3.245 4.375Zm-5.125 4.4 4.5 2.61v5.317l-4.375-2.537a.25.25 0 0 1-.125-.216Zm6 7.927V8.7l4.5-2.61v3.96a.25.25 0 0 1-.125.216Z"/></svg>`,cs=class extends O{static properties={createRepoId:{attribute:!1},installTooltips:{attribute:!1},localImportSource:{attribute:!1},_query:{state:!0},_creating:{state:!0},_data:{state:!0},_locationBundle:{state:!0},_locationOrigin:{state:!0},_locationOriginError:{state:!0},_locationRepo:{state:!0},_locationDirectory:{state:!0},_locationBusy:{state:!0},_error:{state:!0},_busy:{state:!0},_dragOver:{state:!0}};static styles=[x(An),x(mi),x(T),x(hi)];constructor(){super(),this._query="",this._creating=!1,this._data=null,this._error=null,this._busy=!1,this._locationBundle=null,this._locationOrigin=null,this._locationOriginError=null,this._locationOriginRequest=null,this._locationRepo=null,this._locationDirectory="",this._locationBusy=!1,this._dragOver=!1,this._teardownDrop=null,this._queue=[],this._localImport=new gt(this,"bundle",e=>pi(this,e,t=>ai(t,this._csrf),["bundles","reports","repo-impact","history","scan-sources"]))}connectedCallback(){super.connectedCallback(),this._load(),this._teardownDrop=di(this,e=>{this._creating||this._upload(e)},e=>{this._dragOver=!this._creating&&e})}disconnectedCallback(){super.disconnectedCallback(),this._teardownDrop?.(),this._closeLocation()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("bundles","bundles",ni,t=>{this._data=t,this._locationBundle&&!t.bundles?.some(i=>i.id===this._locationBundle)&&this._closeLocation()})}_showCreate(e){if(!e&&this.createRepoId!=null){document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage-bundles"},bubbles:!0,composed:!0}));return}this._creating=e,this._dragOver=!1,e||this.updateComplete.then(()=>this.renderRoot.querySelector(".create-bundle-action")?.focus())}willUpdate(e){e.has("createRepoId")&&(this._creating=this.createRepoId!=null)}render(){return this._creating?c`<div class="wrap">${U("manage-bundles",this._role,this.allowShare)}<div class="breadcrumb"><button type="button" class="breadcrumb-manage" @click="${()=>document.dispatchEvent(new CustomEvent("managed-admin-navigate",{detail:{view:"manage"},bubbles:!0,composed:!0}))}">Manage</button> <span class="breadcrumb-separator" aria-hidden="true">›</span> <button type="button" class="breadcrumb-manage" aria-label="Back to bundles" @click="${()=>this._showCreate(!1)}">Bundles</button> <span class="breadcrumb-separator" aria-hidden="true">›</span><h1 class="breadcrumb-current">Create a bundle</h1></div><managed-create-bundle .initialRepoId="${this.createRepoId??null}" .installTooltips="${this.installTooltips}" .createBundle="${this._csrf?(e,t)=>this.appState.mutate(()=>vn(e,this._csrf,t),["bundles","bundle-metadata","reports","repo-impact","history","scan-sources"]):void 0}" @bundle-created="${()=>{this._load(),this._showCreate(!1)}}"></managed-create-bundle></div>`:c`${this._dragOver?c`<div class="dropzone">Drop bundles to upload</div>`:u}<div class="wrap">${U("manage-bundles",this._role,this.allowShare)}<h1 class="sr-only">Bundles</h1><div class="page-intro"><p class="intro">Source bundles for your repositories.</p><div class="bundle-actions">${this._localImport.renderAction()}<button type="button" class="local-import-toggle create-bundle-action" ?disabled="${!this._data}" @click="${()=>this._showCreate(!0)}">Create</button></div></div>${this._localImport.renderPanel(this._busy||!this._csrf)}<section class="drop-card" aria-label="Upload bundles"><span class="drop-icon" aria-hidden="true">${B("upload")}</span><span class="drop-copy"><strong>Upload source bundles</strong><span>Drop source archives anywhere on this page.</span></span> <button type="button" class="drop-browse" ?disabled="${this._busy}" @click="${()=>ci(e=>{this._upload(e)})}">${this._busy?"Uploading\u2026":"Browse files"}</button></section>${this._body()}</div>`}_body(){let e=Array.isArray(this._data?.bundles)?this._data.bundles:[],t=this._query.trim().toLocaleLowerCase(),i=e.filter(l=>[l.filename,l.repoFullName,l.repoDirectory,l.kind,l.uploadedByLogin].filter(Boolean).join(" ").toLocaleLowerCase().includes(t)),s=i.filter(l=>l.repoId==null).length,o=i.reduce((l,d)=>l+(Number.isFinite(d.byteSize)?d.byteSize:0),0),n=`${t?`${i.length} of `:""}${e.length} ${e.length===1?"bundle":"bundles"}`,a=Map.groupBy(i,l=>l.repoFullName||"Unattached");return c`<div class="collection-toolbar" role="search"><input type="search" aria-label="Search bundles" placeholder="Search bundles or repositories…" .value="${this._query}" @input="${l=>{this._query=l.target.value}}"> <span class="summary result-count" role="status"><span>${this._data==null?"\u2026 bundles":n}</span><span>${this._data==null?"\u2026":as(o)}</span> ${this._data==null||s?c`<span class="unassigned">${this._data==null?"\u2026 unattached":`${s} unattached`}</span>`:u}</span></div>${this._error?c`<p class="msg error" role="alert">${this._error}</p>`:u}<div aria-busy="${this._loading}">${this._data==null?this._error?u:le("Loading bundles\u2026"):i.length>0?c`<div class="bundle-groups">${[...a].toSorted(([l],[d])=>l==="Unattached"?-1:d==="Unattached"?1:l.localeCompare(d)).map(([l,d])=>c`<section class="bundle-group"><div class="bundle-group-head"><strong>${l}</strong><span>${d.length} ${d.length===1?"bundle":"bundles"}</span></div><ul class="bundles">${d.map(h=>this._row(h))}</ul></section>`)}</div>`:c`<div class="empty"><strong>${t?"No matching bundles":"No bundles uploaded yet"}</strong><p>${t?"Try another filename or repository.":"Drop source archives here or browse files above."}</p></div>`}</div>`}_row(e){let t=e.repoFullName?`${e.repoFullName}${e.repoDirectory?`/${e.repoDirectory}`:""}`:"No repository assigned",i=Number.isFinite(e.uploadedAt)?new Date(e.uploadedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"";return c`<li class="bundle-row"><span class="identity"><span class="bundle-icon" aria-hidden="true">${e.kind==="stasis"?c`<img src="./stasis.svg" width="16" height="16" alt="">`:bu}</span> <button type="button" class="filename bundle-open" data-tooltip-truncated data-tooltip="${e.filename}" @click="${()=>this.dispatchEvent(new CustomEvent("managed-bundle-open",{detail:e,bubbles:!0,composed:!0}))}">${e.filename}</button> </span><span class="meta bundle-uploader" data-tooltip-truncated data-tooltip="${e.uploadedByLogin?`@${e.uploadedByLogin}`:""}">${e.uploadedByLogin?`@${e.uploadedByLogin}`:""}</span> <span class="meta bundle-date">${i}</span> <span class="meta bundle-size">${as(e.byteSize)}</span> <span class="bundle-location" data-tooltip-truncated data-tooltip="${t}">${t}</span> <span class="actions">${e.canChangeRepo===!1?u:c`<button type="button" class="action" aria-label="${`Set location for ${e.filename}`}" data-tooltip="Set repository location" ?disabled="${this._locationBusy}" @click="${()=>this._openLocation(e)}">${B("repo")}</button>`} <a class="action" aria-label="${`Download ${e.filename}`}" href="${`/api/admin/bundles/${encodeURIComponent(e.id)}`}"><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="M8 2v8m-3-3 3 3 3-3M3 11v3h10v-3"/></svg></a><button type="button" class="action danger" aria-label="${`Delete ${e.filename}`}" ?disabled="${e.canChangeRepo===!1}" data-tooltip="${e.canChangeRepo===!1?"Repository access is required to detach or delete this bundle":"Delete bundle"}" @click="${()=>this._delete(e)}">${us}</button> </span>${this._locationBundle===e.id?this._locationEditor(e):u}</li>`}_openLocation(e){this._locationBusy||e.canChangeRepo===!1||(this._closeLocation(),this._locationBundle=e.id,this._locationRepo=e.repoId??null,this._locationDirectory=e.repoDirectory??"",this._error=null,e.kind==="stasis"&&this._loadLocationOrigin(e))}_closeLocation(){this._locationOriginRequest?.abort(),this._locationOriginRequest=null,this._locationBundle=null,this._locationOrigin=null,this._locationOriginError=null}async _loadLocationOrigin(e){this._locationOriginRequest?.abort();let t=new AbortController;this._locationOriginRequest=t,this._locationOrigin=void 0,this._locationOriginError=null;try{let i=await nn(e.id,{signal:t.signal});if(this._locationOriginRequest!==t)return;this._locationOrigin=typeof i?.github=="string"&&i.github?{github:i.github,directory:typeof i.directory=="string"?i.directory:i.root===!0?"/":null}:null}catch(i){if(this._locationOriginRequest!==t)return;this._locationOrigin=null,i?.name!=="AbortError"&&(this._locationOriginError="Couldn't load the bundle\u2019s self-reported location.")}}_locationEditor(e){let t=Array.isArray(this._data?.repos)?this._data.repos:[],i=this._locationOrigin,s=qt({repo:i})?.toLowerCase(),o=s&&t.find(a=>a.fullName.toLowerCase()===s),n=(a,l,d)=>{let h=c`<span class="ui-hint">metadata: </span><span class="location-metadata-value" data-tooltip-truncated data-tooltip="${a}">${a}</span>`;return d?c`<button type="button" class="location-metadata" aria-label="${`Use ${l} from metadata: ${a}`}" ?disabled="${this._locationBusy}" @click="${d}">${h}</button>`:c`<span class="location-metadata">${h}</span>`};return c`<div class="location-editor"><div class="location-field"><div class="location-field-header"><span class="ui-hint">Repository</span>${i?n(i.github,"repository",o?()=>{this._locationRepo=o.repoId,i.directory!=null&&(this._locationDirectory=i.directory)}:null):u}</div><repository-selector label="Repository for bundle" .options="${hl(t)}" .value="${this._locationRepo}" ?disabled="${this._locationBusy}" @repository-change="${a=>{this._locationRepo=a.detail.value}}"></repository-selector></div><div class="location-field"><div class="location-field-header"><label for="${`bundle-dir-${e.id}`}">Directory (optional)</label>${i?n(i.directory??"Directory not specified","directory",i.directory==null?null:()=>{this._locationDirectory=i.directory}):u}</div><input id="${`bundle-dir-${e.id}`}" type="text" placeholder="Repository root" .value="${this._locationDirectory}" ?disabled="${this._locationBusy}" @input="${a=>{this._locationDirectory=a.target.value}}"></div><div class="location-actions"><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>this._closeLocation()}">Cancel</button><button type="button" class="action" ?disabled="${this._locationBusy}" @click="${()=>{this._saveLocation(e)}}">Save</button></div>${this._locationOriginError?c`<p class="location-origin" role="status">${this._locationOriginError} <button type="button" class="origin-retry" @click="${()=>{this._loadLocationOrigin(e)}}">Retry</button></p>`:u}</div>`}async _saveLocation(e){if(!(this._locationBusy||e.canChangeRepo===!1)){this._locationBusy=!0,this._error=null;try{await this.appState.mutate(()=>$n(e.id,this._locationRepo,this._locationDirectory.trim(),this._csrf),["bundles","teams","repo-impact","history","scan-sources"]),this._closeLocation(),await this._load({preserveError:!0})}catch(t){this._error=`Couldn't set bundle location: ${String(t?.message??t)}`}finally{this._locationBusy=!1}}}async _upload(e){await ui(this,e,t=>ai(t,this._csrf),["bundles","bundle-metadata","reports","repo-impact","history","scan-sources"])}async _delete(e){if(globalThis.confirm?.(`Delete \u201C${e.filename}\u201D? Linked reports will keep their pending link.`)){this._error=null;try{await this.appState.mutate(()=>xn(e.id,this._csrf),["bundles","bundle-metadata","reports","repo-impact","history","scan-sources"])}catch(t){this._error=`Delete failed: ${String(t?.message??t)}`}await this._load({preserveError:!0})}}};customElements.define("managed-admin-bundles",cs);var ds=class extends O{static properties={selection:{attribute:!1},_source:{state:!0},_error:{state:!0}};static styles=x(T);constructor(){super(),this._loadModels=(e,t)=>this.appState.load("models","scan models",i=>Ze(i,$),{signal:e,apply:t}),this._source=null,this._error=null,this._loadReportSources=(e,t)=>this.appState.load("scan-sources","scan report inputs",async i=>{let[s,o]=await Promise.all([$("/api/admin/reports",{signal:i,credentials:"same-origin"}),$("/api/admin/scan-results",{signal:i,credentials:"same-origin"})]);if(!s.ok)throw new Error(`Reports: HTTP ${s.status}`);if(!o.ok&&o.status!==404)throw new Error(`Scan results: HTTP ${o.status}`);let n=await s.json();return n.reports=await Promise.all((n.reports??[]).filter(a=>a.visible&&a.repoId!=null).map(async a=>{let l=await $(`/api/admin/reports/${encodeURIComponent(a.id)}`,{signal:i,credentials:"same-origin"});if(!l.ok)throw new Error(`Report ${a.filename}: HTTP ${l.status}`);return{...a,content:await l.text()}})),il(n,o.ok?await o.json():{bundles:[],results:[]})},{signal:e,apply:t})}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("bundles","bundles",ni,e=>{this._source=Za(e)})}render(){return c`<div class="wrap">${U("manage-scans",this._role,this.allowShare)} ${this._error?c`<p class="msg error" role="alert">Couldn’t load scan sources: ${this._error} <button type="button" class="btn" @click="${()=>{this._load()}}">Retry</button></p>`:u}<deepview-scan-page hide-heading .selection="${this.selection}" .source="${this._source}" .sourceLoading="${this._loading&&this._source==null}" .loadBundle="${Ja}" .loadModels="${this._loadModels}" .loadReportSources="${this._loadReportSources}" .createBundleHref="${e=>Number.isSafeInteger(e)&&e>0?tl({view:"manage-bundles",createRepoId:e}):null}"></deepview-scan-page></div>`}};customElements.define("managed-admin-scans",ds);var ps=class extends O{static properties={_data:{state:!0},_error:{state:!0},_busy:{state:!0},_renamingId:{state:!0},_repoChoices:{state:!0},_memberChoices:{state:!0}};static styles=[x(Mn),x(T)];constructor(){super(),this._data=null,this._error=null,this._busy=!1,this._renamingId=null,this._repoChoices=new Map,this._memberChoices=new Map}connectedCallback(){super.connectedCallback(),this._load()}async _load({preserveError:e=!1}={}){e||(this._error=null),await this._loadCollection("teams","teams",li,t=>{this._data=t})}async _do(e){if(!this._busy){this._busy=!0,this._error=null;try{await this.appState.mutate(e,["teams","users","reports","history"])}catch(t){this._error=String(t?.message??t)}finally{this._busy=!1,await this._load({preserveError:!0})}}}render(){return c`<div class="wrap">${U("manage-teams",this._role,this.allowShare)}<h1 class="sr-only">Teams</h1><div class="page-intro"><p class="intro">Manage repository and finding access for each team.</p><span class="result-count">${this._data?.teams?.length??"\u2026"} teams</span></div><div class="create-team"><label class="sr-only" for="new-team-name">New team</label> <input id="new-team-name" class="new-name" type="text" placeholder="Team name" maxlength="100" ?disabled="${this._busy}" @keydown="${e=>{e.key==="Enter"&&this._create()}}"> <button class="btn primary" ?disabled="${this._busy}" @click="${()=>this._create()}">${ts} Create team</button><p class="access-note">All members can view standard findings. Set dependencies and security access per member.</p></div><div aria-busy="${this._loading}">${this._body()}</div></div>`}_body(){if(this._error!=null&&this._data==null)return c`<p class="msg error">Couldn't load teams: ${this._error}</p>`;if(this._data==null)return le("Loading teams\u2026");let e=Array.isArray(this._data.teams)?this._data.teams:[];return c`${this._error==null?u:c`<p class="msg error">${this._error}</p>`} ${e.length===0?c`<p class="msg">No teams yet. Create one above.</p>`:e.map(t=>this._team(t))}`}_team(e){return c`<section class="team" aria-label="${e.name}"><div class="team-head"><span class="team-icon" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="5" r="2.5"/><path d="M1.5 13v-1c0-2 1.8-3.5 4.5-3.5s4.5 1.5 4.5 3.5v1M11 2.5a2.5 2.5 0 0 1 0 5M12 9c1.7.5 2.5 1.5 2.5 3v1"/></svg></span>${this._renamingId===e.id?c`<input class="rename-input" type="text" .value="${e.name}" maxlength="100" aria-label="Team name" @keydown="${t=>this._renameKey(t,e)}"> <button class="btn" ?disabled="${this._busy}" @click="${t=>this._saveRename(e,t)}">Save</button> <button class="btn" @click="${()=>{this._renamingId=null}}">Cancel</button>`:c`<h2 class="team-name">${e.name}</h2><span class="team-actions"><button class="icon-btn" aria-label="${`Rename ${e.name}`}" ?disabled="${this._busy}" @click="${()=>{this._renamingId=e.id}}">${mu}</button> <button class="icon-btn danger" aria-label="${`Delete ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._deleteTeam(e)}">${us}</button></span>`}</div><div class="team-body"><div class="sub"><h3 class="sub-title">Repositories <span class="count">${e.repos.length}</span></h3>${e.repos.length===0?c`<p class="muted ui-hint">No repositories linked.</p>`:c`<ul class="links">${e.repos.map(t=>this._repoRow(e,t))}</ul>`} ${this._addRepoRow(e)}</div><div class="sub"><h3 class="sub-title">Members <span class="count">${e.members.length}</span></h3>${e.members.length===0?c`<p class="muted ui-hint">No members.</p>`:c`<ul class="links">${e.members.map(t=>this._memberRow(e,t))}</ul>`} ${this._addMemberRow(e)}</div></div></section>`}_repoRow(e,t){return c`<li class="repo-row">${ul} <span class="repo-copy"><span class="ln">${t.fullName}</span>${t.path?c`<span class="path">/${t.path.replace(/^\/+/u,"")}</span>`:u}</span> <button class="icon-btn danger" aria-label="${`Remove ${t.fullName}${t.path?`/${t.path}`:""} from ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._do(()=>ce("/api/admin/teams/remove-repo",this._csrf,{teamId:e.id,repoId:t.repoId,path:t.path??null}))}">${ll}</button></li>`}_addRepoRow(e){let t=Array.isArray(this._data.repos)?this._data.repos:[];return t.length===0?c`<p class="muted ui-hint">No selected repositories to link — pick some on “Manage repositories”.</p>`:c`<div class="add-row"><repository-selector class="add-repo-sel" label="${`Repository to add to ${e.name}`}" placeholder="Add repository…" ?disabled="${this._busy}" .options="${t.map(i=>({value:i.repoId,label:i.fullName}))}" .value="${this._repoChoices.get(e.id)??null}" @repository-change="${i=>{this._repoChoices=new Map(this._repoChoices).set(e.id,i.detail.value)}}"></repository-selector><input class="add-repo-path" type="text" placeholder="Path (optional)" aria-label="${`Repository path in ${e.name} (optional)`}" maxlength="500" ?disabled="${this._busy}"> <button class="btn" aria-label="${`Add repository to ${e.name}`}" ?disabled="${this._busy||!this._repoChoices.has(e.id)}" @click="${i=>this._addRepo(e,i)}">${ts} Add</button></div>`}_memberRow(e,t){let i=Array.isArray(this._data.permissions)?this._data.permissions:[],s=this._data.users?.some(o=>o.id===t.userId&&De(o.role,"manage"));return c`<li class="member-row"><span class="member">${pl(t.userId,t.login)}<span class="ln">${t.login}</span></span> <span class="perms">${i.map(o=>c`<label class="perm"><input type="checkbox" .checked="${s||t[o]===!0}" ?disabled="${this._busy||s}" aria-label="${`${br[o]??o} access for ${t.login} in ${e.name}`}" @change="${n=>this._togglePerm(e,t,o,n.target.checked)}"> ${br[o]??o}</label>`)} </span><button class="icon-btn danger" aria-label="${`Remove ${t.login} from ${e.name}`}" ?disabled="${this._busy}" @click="${()=>this._do(()=>ce("/api/admin/teams/remove-member",this._csrf,{teamId:e.id,userId:t.userId}))}">${ll}</button></li>`}_addMemberRow(e){let t=Array.isArray(this._data.users)?this._data.users:[],i=new Set(e.members.map(s=>s.userId));return c`<div class="add-row"><user-selector class="add-member-sel" label="${`Member to add to ${e.name}`}" placeholder="Add member…" ?disabled="${this._busy}" .users="${t.map(s=>({...s,disabled:i.has(s.id),detail:i.has(s.id)?"Member":""}))}" .value="${this._memberChoices.get(e.id)??null}" @user-change="${s=>{this._memberChoices=new Map(this._memberChoices).set(e.id,s.detail.value)}}"></user-selector><button class="btn" aria-label="${`Add member to ${e.name}`}" ?disabled="${this._busy||!this._memberChoices.has(e.id)||i.has(this._memberChoices.get(e.id))}" @click="${()=>this._addMember(e)}">${ts} Add</button></div>`}_create(){let e=this.renderRoot.querySelector(".new-name"),t=e?.value.trim();t&&this._do(async()=>{await ce("/api/admin/teams",this._csrf,{name:t}),e&&(e.value="")})}_deleteTeam(e){globalThis.confirm?.(`Delete team \u201C${e.name}\u201D? Its repo + member links are removed.`)&&this._do(()=>ce("/api/admin/teams/delete",this._csrf,{teamId:e.id}))}_renameKey(e,t){e.key==="Enter"?this._saveRename(t,e):e.key==="Escape"&&(this._renamingId=null)}_saveRename(e,t){if(this._busy)return;let i=t.target.closest(".team-head")?.querySelector(".rename-input")?.value.trim()??"";this._renamingId=null,!(i===""||i===e.name)&&this._do(()=>ce("/api/admin/teams/rename",this._csrf,{teamId:e.id,name:i}))}_addRepo(e,t){let i=t.target.closest(".add-row"),s=this._repoChoices.get(e.id);if(!Number.isSafeInteger(s)||s<=0)return;let o=i?.querySelector(".add-repo-path")?.value??"";this._do(async()=>{await ce("/api/admin/teams/set-repo",this._csrf,{teamId:e.id,repoId:s,path:o});let n=new Map(this._repoChoices);n.delete(e.id),this._repoChoices=n;let a=i?.querySelector(".add-repo-path");a&&(a.value="")})}_addMember(e){let t=this._memberChoices.get(e.id);!t||e.members.some(i=>i.userId===t)||this._do(async()=>{await ce("/api/admin/teams/set-member",this._csrf,{teamId:e.id,userId:t});let i=new Map(this._memberChoices);i.delete(e.id),this._memberChoices=i})}_togglePerm(e,t,i,s){if(this._data.users?.some(n=>n.id===t.userId&&De(n.role,"manage")))return;let o={};for(let n of this._data.permissions??[])o[n]=t[n]===!0;o[i]=s,this._do(()=>ce("/api/admin/teams/set-member",this._csrf,{teamId:e.id,userId:t.userId,...o}))}};customElements.define("managed-admin-teams",ps);S();N();var ml=`.link-team{margin-top:1.5rem}.link-team h2{margin:0 0 .5rem;font-size:1rem;font-weight:600}.link-table{overflow-x:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:.8rem}th{color:var(--muted);font-weight:500}th,td{padding:.6rem .65rem;border-bottom:1px solid var(--border);white-space:nowrap}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0;text-align:right}
87
+ `;async function Au(r){let e=await $("/api/admin/links",{signal:r,credentials:"same-origin"});if(!e.ok)throw new Error(`HTTP ${e.status}`);let t=await e.json();if(!Array.isArray(t?.shares))throw new Error("No public links returned");return t}var vs=class extends O{static properties={_data:{state:!0},_error:{state:!0}};static styles=[x(T),x(ml)];constructor(){super(),this._data=null,this._error=null}connectedCallback(){super.connectedCallback(),this._load()}async _load(){this._error=null,await this._loadCollection("links","public links",Au,e=>{this._data=e})}async _edit(e){let{openManagedShareDialog:t}=await Promise.resolve().then(()=>(bs(),gs));await t({id:e.teamId,name:e.teamName},e.id,this.session),this.isConnected&&await this._load()}_groups(){let e=new Map;for(let t of this._data?.shares??[])e.has(t.teamId)||e.set(t.teamId,{name:t.teamName,links:[]}),e.get(t.teamId).links.push(t);return[...e.values()]}_body(){return this._data==null?this._error?c`<p class="msg error">Couldn't load public links: ${this._error}</p>`:le("Loading public links\u2026"):this._data.shares.length===0?c`<p class="msg">No public links. Create one with the share button beside a workspace in the sidebar.</p>`:this._groups().map(e=>c`<section class="link-team" aria-label="${e.name}"><h2>${e.name}</h2><div class="link-table"><table><thead><tr><th>Link</th><th>Created by</th><th>Created</th><th>Security</th><th>Dependencies</th><th><span class="sr-only">Actions</span></th></tr></thead><tbody>${e.links.map(t=>c`<tr><td><span title="${t.id}">${t.id.slice(0,8)}</span></td><td>${t.createdBy}</td><td>${new Date(t.createdAt).toLocaleString()}</td><td>${t.permissions.security?"On":"Off"}</td><td>${t.permissions.dependencies?"On":"Off"}</td><td><button class="btn" aria-label="${`Edit public link ${t.id.slice(0,8)} for ${e.name}`}" @click="${()=>this._edit(t)}">Edit</button></td></tr>`)}</tbody></table></div></section>`)}render(){return c`<div class="wrap">${U("manage-links",this._role,this.allowShare)}<h1 class="sr-only">Public links</h1><div class="page-intro"><p class="intro">Manage public links and the findings each link can show.</p><span class="result-count">${this._data?.shares.length??"\u2026"} links</span></div>${this._loading&&this._data?c`<span class="sr-only" role="status">Refreshing public links…</span>`:u}<div aria-busy="${this._loading}">${this._body()}</div></div>`}};customElements.define("managed-admin-links",vs);N();ae();xt();N();function Mu(r,e){return new Promise(t=>{if(e.aborted){t();return}let i=()=>{clearTimeout(s),e.removeEventListener("abort",i),t()},s=setTimeout(i,r);e.addEventListener("abort",i,{once:!0})})}async function Iu(r,{signal:e,onUpdate:t,onTeams:i,onClose:s}){if(_e())return;let o=1e3,n=async(a,l,d)=>{if(d.throwIfAborted(),a==="close")return await s(),!1;if(a==="triage"||a==="teams"){let h=null;if(a==="teams")try{let p=JSON.parse(l);typeof p?.revision=="string"&&(h=p.revision)}catch{}if(await(a==="teams"?i?.(d,h):t(d))===!1)throw new Error("Team refresh failed");d.throwIfAborted(),o=1e3}return!0};for(;!e.aborted;){let a=new AbortController,l=()=>a.abort();e.addEventListener("abort",l,{once:!0});let d,h,p=()=>{clearTimeout(h),h=setTimeout(l,45e3)};try{p();let m=await $(r?`/api/teams/${encodeURIComponent(r)}/feed`:"/api/teams/feed",{credentials:"same-origin",headers:{accept:"text/event-stream"},signal:a.signal});if([401,403,404].includes(m.status)){await m.body?.cancel(),e.aborted||await s();return}if(!m.ok||!m.headers.get("content-type")?.startsWith("text/event-stream"))throw await m.body?.cancel(),new Error("Team feed unavailable");if(d=m.body.getReader(),await Lu(d,e,p,(g,y)=>n(g,y,a.signal)))return}catch{}finally{clearTimeout(h),l(),await d?.cancel().catch(()=>{}),e.removeEventListener("abort",l)}await Mu(o,e),o=Math.min(o*2,3e4)}}async function Lu(r,e,t,i){let s=new TextDecoder,o="";for(;!e.aborted;){let{done:n,value:a}=await r.read();if(n)return!1;if(t(),o=(o+s.decode(a,{stream:!0})).replaceAll(`\r
86
88
  `,`
87
89
  `),o.length>16384)throw new Error("Team feed frame too large");let l;for(;(l=o.indexOf(`
88
90
 
89
- `))!==-1;){let d=o.slice(0,l);o=o.slice(l+2);let u=d.split(`
91
+ `))!==-1;){let d=o.slice(0,l);o=o.slice(l+2);let h=d.split(`
90
92
  `).find(m=>m.startsWith("event:"))?.slice(6).trim(),p=d.split(`
91
93
  `).filter(m=>m.startsWith("data:")).map(m=>m.slice(5).trimStart()).join(`
92
- `);if(e.aborted||await i(u,p)===!1)return!0}}return!0}_t();Q();var tl=r=>`reports:content:${r}`;async function as(r,e){let t=tl(r),i=C.read(t);if(i!==void 0)return i;try{return await C.load(t,"report",async s=>{let o=await e(s);if(o===null)throw new Error("Could not load report");return o})}catch{return null}}function Up(r){return as(r,e=>Ka(r,{signal:e}))}async function Fp(r){let e=[...new Set(r)].filter(s=>{let o=C.resources.get(tl(s));return o?.data===void 0&&!o?.pending}).toSorted(),t,i=await Promise.all(r.map(s=>as(s,async o=>(t??=Za(e,{signal:o}),(await t)?.[e.indexOf(s)]??null))));return i.some(s=>s===null)?null:i}function Hp(r){return as(`team:${r}`,e=>Ja(r,{signal:e}))}z();Q();_t();z();Q();function cr(r,e){return C.resources.get(`report-sources:${e??""}:${r}`)}function qp(){C.invalidate(["report-sources"])}async function Vp(r,e){let t=`report-sources:${e??""}:${r}`,i=cr(r,e);if(i?.data!==void 0)return i.data;if(i?.error)return null;let s=C.load(t,"report sources",async n=>{let a=await $(`/api/reports/${encodeURIComponent(r)}/sources${Le(e)}`,{credentials:"same-origin",signal:n});if(a.status===204||a.status===404)return null;if(!a.ok)throw new Error(`Sources request failed (${a.status})`);let l=await a.json();return{integrity:l.integrity,sources:new Map(l.files),paths:new Map(l.paths),imports:new Map((l.imports??[]).map(([d,u])=>[d,new Map(u)]))}}),o=cr(r,e);try{return await s}catch(n){if(n.name!=="AbortError"){let a=cr(r,e);a===o&&(a.error=n)}throw n}}function bv(){C.invalidate(["finding-history"])}async function vv(){(await import("./client-managed-import.js")).registerWorkspaceImport(L,$)}async function yv(...r){return(await Promise.resolve().then(()=>(os(),ss))).openManagedShareDialog(...r)}async function wv(r){return(await Promise.resolve().then(()=>(dl(),cl))).openManagedIssueDialog(r)}async function _v(r){return(await Promise.resolve().then(()=>($l(),xl))).openFindingHistoryDialog(r)}export{Xa as changeWorkspaceShare,bv as clearFindingHistory,qp as clearReportSources,u1 as deleteReportComment,g1 as downloadManagedBundle,fp as fetchBundleAdvisories,mp as fetchBundleContents,Bi as fetchBundleMetadata,c1 as fetchFixes,hp as fetchManagedBundleCatalog,Up as fetchReport,d1 as fetchReportComments,Vp as fetchReportSources,l1 as fetchReportTriage,Fp as fetchReports,Hp as fetchTeamReports,ge as getPreviewRole,Ya as listWorkspaceShares,vv as loadWorkspaceImportPage,m1 as login,f1 as logout,_v as openFindingHistoryDialog,wv as openManagedIssueDialog,yv as openManagedShareDialog,n1 as probeSession,a1 as probeTeams,h1 as pushReportTriage,cr as readReportSources,Fl as resetManagedAppState,p1 as saveReportComment,jl as setManagedAppSession,Ul as setManagedReportCatalog,Cl as setPreviewRole,Le as teamQuery,Dp as watchTeamFeed};
94
+ `);if(e.aborted||await i(h,p)===!1)return!0}}return!0}xt();ae();var Ol=r=>`reports:content:${r}`;async function ys(r,e){let t=Ol(r),i=C.read(t);if(i!==void 0)return i;try{return await C.load(t,"report",async s=>{let o=await e(s);if(o===null)throw new Error("Could not load report");return o})}catch{return null}}function zu(r){return ys(r,e=>El(r,{signal:e}))}async function Ou(r){let e=[...new Set(r)].filter(s=>{let o=C.resources.get(Ol(s));return o?.data===void 0&&!o?.pending}).toSorted(),t,i=await Promise.all(r.map(s=>ys(s,async o=>(t??=Rl(e,{signal:o}),(await t)?.[e.indexOf(s)]??null))));return i.some(s=>s===null)?null:i}function Tu(r){return ys(`team:${r}`,e=>Al(r,{signal:e}))}N();ae();xt();N();ae();function hr(r,e){return C.resources.get(`report-sources:${e??""}:${r}`)}function Nu(){C.invalidate(["report-sources"])}async function Bu(r,e){let t=`report-sources:${e??""}:${r}`,i=hr(r,e);if(i?.data!==void 0)return i.data;if(i?.error)return null;let s=C.load(t,"report sources",async n=>{let a=await $(`/api/reports/${encodeURIComponent(r)}/sources${Pe(e)}`,{credentials:"same-origin",signal:n});if(a.status===204||a.status===404)return null;if(!a.ok)throw new Error(`Sources request failed (${a.status})`);let l=await a.json();return{integrity:l.integrity,sources:new Map(l.files),paths:new Map(l.paths),imports:new Map((l.imports??[]).map(([d,h])=>[d,new Map(h)])),formats:new Map(l.formats??[])}}),o=hr(r,e);try{return await s}catch(n){if(n.name!=="AbortError"){let a=hr(r,e);a===o&&(a.error=n)}throw n}}function Ry(){C.invalidate(["finding-history"])}async function Ay(){(await import("./client-managed-import.js")).registerWorkspaceImport(O,$)}async function My(...r){return(await Promise.resolve().then(()=>(bs(),gs))).openManagedShareDialog(...r)}async function Iy(r){return(await Promise.resolve().then(()=>(Hl(),Fl))).openManagedIssueDialog(r)}async function Ly(r){return(await Promise.resolve().then(()=>(rc(),tc))).openFindingHistoryDialog(r)}export{Il as changeWorkspaceShare,Ry as clearFindingHistory,Nu as clearReportSources,$v as deleteReportComment,Ev as downloadManagedBundle,ep as fetchBundleAdvisories,Qd as fetchBundleContents,si as fetchBundleMetadata,wv as fetchFixes,Xd as fetchManagedBundleCatalog,zu as fetchReport,_v as fetchReportComments,Bu as fetchReportSources,yv as fetchReportTriage,Ou as fetchReports,vv as fetchTeamAnnotations,Tu as fetchTeamReports,_e as getPreviewRole,Ml as listWorkspaceShares,Ay as loadWorkspaceImportPage,Sv as login,Cv as logout,Ly as openFindingHistoryDialog,Iy as openManagedIssueDialog,My as openManagedShareDialog,gv as probeSession,bv as probeTeams,kv as pushReportTriage,hr as readReportSources,Kd as resetManagedAppState,xv as saveReportComment,Vd as setManagedAppSession,Gd as setManagedReportCatalog,oc as setPreviewRole,Pe as teamQuery,Iu as watchTeamFeed};
95
+ /*!
96
+ * PHP elephant adapted from Material Icon Theme:
97
+ * https://github.com/material-extensions/vscode-material-icon-theme/blob/main/icons/php_elephant.svg
98
+ * Copyright (c) 2025 Material Extensions
99
+ *
100
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
101
+ * of this software and associated documentation files (the "Software"), to deal
102
+ * in the Software without restriction, including without limitation the rights
103
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
104
+ * of the Software, and to permit persons to whom the Software is furnished to do
105
+ * so, subject to the following conditions:
106
+ *
107
+ * The above copyright notice and this permission notice shall be included in all
108
+ * copies or substantial portions of the Software.
109
+ *
110
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
111
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
112
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
113
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
114
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
115
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
116
+ * SOFTWARE.
117
+ */
93
118
  /*! Bundled license information:
94
119
 
95
120
  @lit/reactive-element/css-tag.js: