@visulima/vis 2.0.2 → 3.0.0

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 (147) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE.md +95 -65
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/packem_chunks/CONFIG_FILES.js +2 -2
  6. package/dist/packem_chunks/bloom-status.js +1 -1
  7. package/dist/packem_chunks/bloom-sync.js +1 -1
  8. package/dist/packem_chunks/catalog.js +47 -47
  9. package/dist/packem_chunks/cli-exec.js +1 -1
  10. package/dist/packem_chunks/cli-main.js +141 -141
  11. package/dist/packem_chunks/dispatch.js +1 -1
  12. package/dist/packem_chunks/fix.js +1 -1
  13. package/dist/packem_chunks/handler.js +1 -1
  14. package/dist/packem_chunks/handler10.js +1 -1
  15. package/dist/packem_chunks/handler11.js +1 -1
  16. package/dist/packem_chunks/handler12.js +1 -1
  17. package/dist/packem_chunks/handler13.js +1 -1
  18. package/dist/packem_chunks/handler14.js +1 -1
  19. package/dist/packem_chunks/handler15.js +1 -1
  20. package/dist/packem_chunks/handler16.js +1 -1
  21. package/dist/packem_chunks/handler17.js +1 -1
  22. package/dist/packem_chunks/handler18.js +1 -1
  23. package/dist/packem_chunks/handler19.js +1 -1
  24. package/dist/packem_chunks/handler2.js +1 -1
  25. package/dist/packem_chunks/handler20.js +1 -1
  26. package/dist/packem_chunks/handler21.js +1 -1
  27. package/dist/packem_chunks/handler22.js +1 -1
  28. package/dist/packem_chunks/handler23.js +1 -1
  29. package/dist/packem_chunks/handler24.js +1 -1
  30. package/dist/packem_chunks/handler26.js +1 -1
  31. package/dist/packem_chunks/handler27.js +1 -1
  32. package/dist/packem_chunks/handler28.js +1 -1
  33. package/dist/packem_chunks/handler29.js +1 -1
  34. package/dist/packem_chunks/handler3.js +1 -1
  35. package/dist/packem_chunks/handler30.js +1 -1
  36. package/dist/packem_chunks/handler4.js +1 -1
  37. package/dist/packem_chunks/handler5.js +1 -1
  38. package/dist/packem_chunks/handler50.js +1 -1
  39. package/dist/packem_chunks/handler51.js +1 -1
  40. package/dist/packem_chunks/handler53.js +1 -1
  41. package/dist/packem_chunks/handler54.js +1 -1
  42. package/dist/packem_chunks/handler55.js +1 -1
  43. package/dist/packem_chunks/handler58.js +1 -1
  44. package/dist/packem_chunks/handler59.js +1 -1
  45. package/dist/packem_chunks/handler6.js +1 -1
  46. package/dist/packem_chunks/handler60.js +1 -1
  47. package/dist/packem_chunks/handler61.js +1 -1
  48. package/dist/packem_chunks/handler62.js +1 -1
  49. package/dist/packem_chunks/handler63.js +1 -1
  50. package/dist/packem_chunks/handler64.js +1 -1
  51. package/dist/packem_chunks/handler66.js +1 -1
  52. package/dist/packem_chunks/handler67.js +13 -13
  53. package/dist/packem_chunks/handler68.js +1 -1
  54. package/dist/packem_chunks/handler69.js +1 -1
  55. package/dist/packem_chunks/handler7.js +1 -1
  56. package/dist/packem_chunks/handler70.js +5 -5
  57. package/dist/packem_chunks/handler71.js +1 -1
  58. package/dist/packem_chunks/handler72.js +1 -1
  59. package/dist/packem_chunks/handler73.js +1 -1
  60. package/dist/packem_chunks/handler74.js +15 -15
  61. package/dist/packem_chunks/handler75.js +1 -1
  62. package/dist/packem_chunks/handler76.js +1 -1
  63. package/dist/packem_chunks/handler77.js +1 -1
  64. package/dist/packem_chunks/handler78.js +1 -1
  65. package/dist/packem_chunks/handler8.js +1 -1
  66. package/dist/packem_chunks/handler9.js +1 -1
  67. package/dist/packem_chunks/heal-accept.js +1 -1
  68. package/dist/packem_chunks/heal.js +1 -1
  69. package/dist/packem_chunks/help-command.js +1 -1
  70. package/dist/packem_chunks/index2.js +6 -4
  71. package/dist/packem_chunks/index3.js +1 -1
  72. package/dist/packem_chunks/index4.js +49 -49
  73. package/dist/packem_chunks/keys-refresh.js +1 -1
  74. package/dist/packem_chunks/lean.js +1 -1
  75. package/dist/packem_chunks/list.js +1 -1
  76. package/dist/packem_chunks/loader.js +1 -1
  77. package/dist/packem_chunks/orchestrator.js +2 -2
  78. package/dist/packem_chunks/prune.js +1 -1
  79. package/dist/packem_chunks/registry.js +10 -10
  80. package/dist/packem_chunks/status.js +1 -1
  81. package/dist/packem_chunks/sync.js +1 -1
  82. package/dist/packem_chunks/sync2.js +1 -1
  83. package/dist/packem_chunks/tripwire.js +1 -1
  84. package/dist/packem_chunks/ts-loader.js +1 -1
  85. package/dist/packem_chunks/verify-lockfile.js +1 -1
  86. package/dist/packem_shared/{advisories-CCBGdU8U.js → advisories-DsXRmIA5.js} +1 -1
  87. package/dist/packem_shared/{affected-selection-Dj-ymxhw.js → affected-selection-BE6VFCDV.js} +1 -1
  88. package/dist/packem_shared/{affected-shas-PwkVbPch.js → affected-shas-BKEu4RZc.js} +1 -1
  89. package/dist/packem_shared/{ai-analysis-bGCAc1jR.js → ai-analysis-DikAj6rX.js} +1 -1
  90. package/dist/packem_shared/{ai-fix-DV5-dHBY.js → ai-fix-bfWo0cZX.js} +1 -1
  91. package/dist/packem_shared/{augment-24KX2nkI.js → augment-BkJxi_GW.js} +1 -1
  92. package/dist/packem_shared/{bin-CtzhnYMp.js → bin-B-TytgzW.js} +1 -1
  93. package/dist/packem_shared/{build-scripts-w4SNeR7D.js → build-scripts-DWypBQ--.js} +1 -1
  94. package/dist/packem_shared/{command-runtime-BLFPUYAT.js → command-runtime-DQ7ZpLYL.js} +1 -1
  95. package/dist/packem_shared/{cyclonedx-C4KaVTn1.js → cyclonedx-DLBi65MV.js} +1 -1
  96. package/dist/packem_shared/dependency-scan-ZLOuLkGN.js +1 -0
  97. package/dist/packem_shared/{docker-DaVs-9wK.js → docker-B4zAZCZG.js} +15 -15
  98. package/dist/packem_shared/{en-D3CfXlO7.js → en-BDYMmM2_.js} +1 -1
  99. package/dist/packem_shared/{failure-log-CTneNcio.js → failure-log-DyhWPqno.js} +1 -1
  100. package/dist/packem_shared/glob-BUjyjdE8-Dp_QcayW.js +1 -0
  101. package/dist/packem_shared/index-BLtnel38.js +35 -0
  102. package/dist/packem_shared/index-CuKDxOCI.js +1 -0
  103. package/dist/packem_shared/index-tNFGWxc0.js +39 -0
  104. package/dist/packem_shared/{lifecycle-B8A2T3gx.js → lifecycle-KY9umOg6.js} +1 -1
  105. package/dist/packem_shared/{lockfile-Bccery3L.js → lockfile-YAuZf1gh.js} +1 -1
  106. package/dist/packem_shared/{manifests-BDkwiVbh.js → manifests-BwTn_1ad.js} +1 -1
  107. package/dist/packem_shared/{min-release-age-OaYpLwux.js → min-release-age-6avfn81h.js} +1 -1
  108. package/dist/packem_shared/{missing-package-json-BqS-OnKd.js → missing-package-json-Cl0vdz6K.js} +1 -1
  109. package/dist/packem_shared/{native-config-sync-Ds1FtcrM.js → native-config-sync-CHMCJx7H.js} +7 -7
  110. package/dist/packem_shared/{osv-bloom-pKp7urSB.js → osv-bloom-DdqDnLCt.js} +2 -2
  111. package/dist/packem_shared/package-version-BNRJ3o9C.js +4 -0
  112. package/dist/packem_shared/{packument-HBVbyf7x.js → packument-B9-WqReu.js} +1 -1
  113. package/dist/packem_shared/{pm-runner-C6eTANt1.js → pm-runner-DRybtzOV.js} +1 -1
  114. package/dist/packem_shared/{project-name-filter-CJ3XX2TI.js → project-name-filter-Dw0fC6IO.js} +1 -1
  115. package/dist/packem_shared/{provenance-D4Cza8cp.js → provenance-CLxuqCfL.js} +1 -1
  116. package/dist/packem_shared/{readJsonSync-DweZd5ZA-0eZh9sGm.js → readJsonSync-DweZd5ZA-CtrDlqpb.js} +1 -1
  117. package/dist/packem_shared/{registry-keys-C0ez2VND.js → registry-keys-cTN24144.js} +1 -1
  118. package/dist/packem_shared/{resolve-explicit-BbT764KS.js → resolve-explicit-Uw6WQl9R.js} +1 -1
  119. package/dist/packem_shared/{resolve-runtime-D_vZovbB.js → resolve-runtime-DztanwkZ.js} +1 -1
  120. package/dist/packem_shared/{run-file-DyPFFN9U.js → run-file-CaE5_xBY.js} +1 -1
  121. package/dist/packem_shared/{runtime-check-D4um-yQq.js → runtime-check-C32yE57I.js} +1 -1
  122. package/dist/packem_shared/{s1ngularity-St6dhKiq.js → s1ngularity-BIYhg82u.js} +1 -1
  123. package/dist/packem_shared/{scan-progress-q-N2JtIp.js → scan-progress-DWfY4zkp.js} +1 -1
  124. package/dist/packem_shared/{selectors-Ce_6UAoY.js → selectors-D2j4M9Ul.js} +1 -1
  125. package/dist/packem_shared/{signatures-Dyeyg1q9.js → signatures-C8iQ5fUq.js} +1 -1
  126. package/dist/packem_shared/target-merge-DLxJTcxn.js +11 -0
  127. package/dist/packem_shared/{target-options-7XcbqGDe.js → target-options-3t4-2F-F.js} +1 -1
  128. package/dist/packem_shared/{toolchain-C_pNMBM6.js → toolchain-BPzbahcQ.js} +1 -1
  129. package/dist/packem_shared/{typosquats-xzcAGPiM.js → typosquats-BWrmhh36.js} +1 -1
  130. package/dist/packem_shared/{use-measured-height-CBjN0fle.js → use-measured-height-BwAwGHjw.js} +1 -1
  131. package/dist/packem_shared/verify-CzUPT6Uk.js +1 -0
  132. package/dist/packem_shared/{vis-update-app-DMAC2pPf.js → vis-update-app-D6Wq8ZHM.js} +1 -1
  133. package/dist/packem_shared/{vis-user-error-xmha3L4n.js → vis-user-error-CfM4_ORo.js} +1 -1
  134. package/dist/packem_shared/{watch-BXOOX7lx.js → watch-D_oAxW_Z.js} +1 -1
  135. package/dist/packem_shared/{watch-loop-Q7UpkVbr.js → watch-loop-BrjblOz5.js} +1 -1
  136. package/dist/runtime/preload.js +1 -1
  137. package/index.d.ts +204 -204
  138. package/index.js +26 -26
  139. package/package.json +13 -13
  140. package/dist/packem_shared/dependency-scan-D_ona0Qm.js +0 -1
  141. package/dist/packem_shared/glob-BUjyjdE8-C4M8e02u.js +0 -1
  142. package/dist/packem_shared/index-CTMU29dI.js +0 -1
  143. package/dist/packem_shared/index-uBVnF4ji.js +0 -35
  144. package/dist/packem_shared/package-version-C47v64aB.js +0 -4
  145. package/dist/packem_shared/public-api-WqUCiyIe.js +0 -131
  146. package/dist/packem_shared/target-merge-Cfy7c__2.js +0 -11
  147. package/dist/packem_shared/verify-Dve9PQj3.js +0 -1
@@ -1,4 +1,4 @@
1
- import{p as r}from"./cli-main.js";import{c as i,f as a}from"../packem_shared/registry-keys-C0ez2VND.js";const n=async({options:s})=>{if(s.clear){const t=i();if(s.json){process.stdout.write(`${JSON.stringify({cleared:t,refetched:!1},void 0,2)}
1
+ import{p as r}from"./cli-main.js";import{c as i,f as a}from"../packem_shared/registry-keys-cTN24144.js";const n=async({options:s})=>{if(s.clear){const t=i();if(s.json){process.stdout.write(`${JSON.stringify({cleared:t,refetched:!1},void 0,2)}
2
2
  `);return}r.success(t?"Cleared cached npm signing keys.":"No cached npm signing keys to clear.");return}const e=await a({forceRefresh:!0});if(e===void 0){if(s.json){process.stdout.write(`${JSON.stringify({cleared:!1,error:"fetch-failed",refetched:!1},void 0,2)}
3
3
  `),process.exitCode=1;return}r.error("Failed to fetch npm signing keys (network error and no cached keys available)."),process.exitCode=1;return}if(s.json){process.stdout.write(`${JSON.stringify({cleared:!1,fromCache:e.fromCache,keyCount:e.keys.length,refetched:!e.fromCache,stale:e.stale??!1},void 0,2)}
4
4
  `);return}if(e.fromCache&&e.stale===!0){r.warn(`Network fetch failed — falling back to expired cache (${String(e.keys.length)} keys).`);return}r.success(`Refreshed npm signing keys (${String(e.keys.length)} keys).`)};export{n as default};
@@ -1,4 +1,4 @@
1
- import{v as a,P as p}from"../packem_shared/index-uBVnF4ji.js";import{r as l}from"../packem_shared/resolve-runtime-D_vZovbB.js";import{r as f}from"../packem_shared/run-file-DyPFFN9U.js";const m=o=>{let t,n=!1,i;const s=[];for(let e=0;e<o.length;e+=1){const r=o[e];if(i===void 0){if(r==="--node"){n=!0;continue}if(r==="--runtime"){t=o[e+1],e+=1;continue}if(r.startsWith("--runtime=")){t=r.slice(10);continue}i=r;continue}s.push(r)}return s[0]==="--"&&s.shift(),{file:i,node:n,runtimeFlag:t,scriptArguments:s}},x=async o=>{const{file:t,node:n,runtimeFlag:i,scriptArguments:s}=m(o);if(t===void 0){process.stderr.write(`No file specified. Usage: vis x <file> [args...]
1
+ import{v as a,P as p}from"../packem_shared/index-BLtnel38.js";import{r as l}from"../packem_shared/resolve-runtime-DztanwkZ.js";import{r as f}from"../packem_shared/run-file-CaE5_xBY.js";const m=o=>{let t,n=!1,i;const s=[];for(let e=0;e<o.length;e+=1){const r=o[e];if(i===void 0){if(r==="--node"){n=!0;continue}if(r==="--runtime"){t=o[e+1],e+=1;continue}if(r.startsWith("--runtime=")){t=r.slice(10);continue}i=r;continue}s.push(r)}return s[0]==="--"&&s.shift(),{file:i,node:n,runtimeFlag:t,scriptArguments:s}},x=async o=>{const{file:t,node:n,runtimeFlag:i,scriptArguments:s}=m(o);if(t===void 0){process.stderr.write(`No file specified. Usage: vis x <file> [args...]
2
2
  `),process.exitCode=1;return}const e=process.cwd(),r=a(t)?t:p(e,t);if(n){const d=await f(r,s,"node",e,{node:!0});d!==0&&(process.exitCode=d);return}let c;try{c=l(e,{flag:i})}catch(d){process.stderr.write(`${d.message}
3
3
  `),process.exitCode=1;return}c.deferredNotice!==void 0&&process.stderr.write(`${c.deferredNotice}
4
4
  `);const u=await f(r,s,c.runtime,e);u!==0&&(process.exitCode=u)};export{m as parseLeanXArgs,x as runLeanX};
@@ -1,3 +1,3 @@
1
- import{createRequire as S}from"node:module";import{j as B,p as o,v as R}from"./cli-main.js";import{A as V}from"../packem_shared/pm-runner-C6eTANt1.js";import{W as q}from"../packem_shared/build-scripts-w4SNeR7D.js";import{w as y,l as w}from"../packem_shared/index-uBVnF4ji.js";import{a as W}from"../packem_shared/readJsonSync-DweZd5ZA-0eZh9sGm.js";let j;const D=c=>(j??=S(import.meta.url))(c),v=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,x=c=>{if(typeof v<"u"&&v.versions&&v.versions.node){const[r,f]=v.versions.node.split(".").map(Number);if(r>22||r===22&&f>=3||r===20&&f>=16)return v.getBuiltinModule(c)}return D(c)},{readdirSync:k,statSync:M}=x("node:fs"),A=(c,r={})=>{const f=y(c,"node_modules");if(!w(f))return[];const l=new Map,p=new Set,$=(n,s,t)=>{const e=`${s}@${t}`;if(p.has(e))return;p.add(e);const i=t.startsWith(c)?t.slice(c.length+1):t;let u=l.get(n);u||(u=[],l.set(n,u)),u.some(b=>b.name===s)||u.push({name:s,relativePath:i})},d=(n,s="")=>{let t;try{t=k(n)}catch{return}for(const e of t){const i=y(n,e);if(e.startsWith("@")){d(i,`${e}/`);continue}if(e===".pnpm"&&s===""){let a;try{a=k(i)}catch{continue}for(const m of a){const h=y(i,m,"node_modules");w(h)&&d(h)}continue}if(e.startsWith("."))continue;const u=s+e,b=y(i,"package.json");try{if(!M(i).isDirectory()||!w(b))continue;const a=W(b),m=typeof a.name=="string"?a.name:u;if(typeof a.bin=="string"){const _=m.includes("/")?m.split("/").pop():m;$(_,m,i)}else if(a.bin&&typeof a.bin=="object")for(const _ of Object.keys(a.bin))$(_,m,i);const h=y(i,"node_modules");w(h)&&d(h)}catch{}}};d(f);const g=[];for(const[n,s]of l)s.length<2||r[n]===!0||s.every(t=>r[`${t.name}#${n}`]===!0)||g.push({bin:n,packages:s});return g.sort((n,s)=>n.bin.localeCompare(s.bin))},C=new Set(["bun","npm","pnpm","yarn"]),z=({options:c,visConfig:r,workspaceRoot:f})=>{const l=f??process.cwd(),p=V(l),$=r?.security?.policies?.installScripts?.allow??{},d=r?.security?.allowBins??{},g=r?.security?.pinVersions===!0,n=q(l,$,{pinVersions:g}),s=A(l,d),t=r&&C.has(p.name)?B(r,p.name,l):void 0;if(c.json){process.stdout.write(`${JSON.stringify({binConflicts:s,drift:t,excess:n.excess,installed:n.installed.map(e=>({hooks:e.hooks,name:e.name,version:e.version})),packageManager:p.name,pinVersions:g,unapproved:n.unapproved.map(e=>({hooks:e.hooks,name:e.name,version:e.version})),versionDrift:n.versionDrift},void 0,2)}
1
+ import{createRequire as S}from"node:module";import{j as B,p as o,v as R}from"./cli-main.js";import{A as V}from"../packem_shared/pm-runner-DRybtzOV.js";import{W as q}from"../packem_shared/build-scripts-DWypBQ--.js";import{w as y,l as w}from"../packem_shared/index-BLtnel38.js";import{a as W}from"../packem_shared/readJsonSync-DweZd5ZA-CtrDlqpb.js";let j;const D=c=>(j??=S(import.meta.url))(c),v=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,x=c=>{if(typeof v<"u"&&v.versions&&v.versions.node){const[r,f]=v.versions.node.split(".").map(Number);if(r>22||r===22&&f>=3||r===20&&f>=16)return v.getBuiltinModule(c)}return D(c)},{readdirSync:k,statSync:M}=x("node:fs"),A=(c,r={})=>{const f=y(c,"node_modules");if(!w(f))return[];const l=new Map,p=new Set,$=(n,s,t)=>{const e=`${s}@${t}`;if(p.has(e))return;p.add(e);const i=t.startsWith(c)?t.slice(c.length+1):t;let u=l.get(n);u||(u=[],l.set(n,u)),u.some(b=>b.name===s)||u.push({name:s,relativePath:i})},d=(n,s="")=>{let t;try{t=k(n)}catch{return}for(const e of t){const i=y(n,e);if(e.startsWith("@")){d(i,`${e}/`);continue}if(e===".pnpm"&&s===""){let a;try{a=k(i)}catch{continue}for(const m of a){const h=y(i,m,"node_modules");w(h)&&d(h)}continue}if(e.startsWith("."))continue;const u=s+e,b=y(i,"package.json");try{if(!M(i).isDirectory()||!w(b))continue;const a=W(b),m=typeof a.name=="string"?a.name:u;if(typeof a.bin=="string"){const _=m.includes("/")?m.split("/").pop():m;$(_,m,i)}else if(a.bin&&typeof a.bin=="object")for(const _ of Object.keys(a.bin))$(_,m,i);const h=y(i,"node_modules");w(h)&&d(h)}catch{}}};d(f);const g=[];for(const[n,s]of l)s.length<2||r[n]===!0||s.every(t=>r[`${t.name}#${n}`]===!0)||g.push({bin:n,packages:s});return g.sort((n,s)=>n.bin.localeCompare(s.bin))},C=new Set(["bun","npm","pnpm","yarn"]),z=({options:c,visConfig:r,workspaceRoot:f})=>{const l=f??process.cwd(),p=V(l),$=r?.security?.policies?.installScripts?.allow??{},d=r?.security?.allowBins??{},g=r?.security?.pinVersions===!0,n=q(l,$,{pinVersions:g}),s=A(l,d),t=r&&C.has(p.name)?B(r,p.name,l):void 0;if(c.json){process.stdout.write(`${JSON.stringify({binConflicts:s,drift:t,excess:n.excess,installed:n.installed.map(e=>({hooks:e.hooks,name:e.name,version:e.version})),packageManager:p.name,pinVersions:g,unapproved:n.unapproved.map(e=>({hooks:e.hooks,name:e.name,version:e.version})),versionDrift:n.versionDrift},void 0,2)}
2
2
  `);return}if(o.info(`Build-script status (${p.name}):
3
3
  `),n.installed.length===0&&n.unapproved.length===0&&o.success(" No installed packages declare lifecycle scripts."),n.installed.length>0){o.success(` Approved (${String(n.installed.length)}):`);for(const e of n.installed)o.info(` ✓ ${e.name} — ${e.hooks.join(", ")}`)}if(n.unapproved.length>0){o.info(""),o.warn(` Unapproved (${String(n.unapproved.length)}):`);for(const e of n.unapproved)o.info(` ✗ ${e.name} — ${e.hooks.join(", ")}`);o.notice(" Run 'vis approve-builds' to review.")}if(n.excess.length>0){o.info(""),o.warn(` Stale allowlist entries (${String(n.excess.length)}):`);for(const e of n.excess)o.info(` ! ${e}`);o.notice(" Remove these from vis.config.ts security.policies.installScripts.allow.")}if(n.versionDrift.length>0){o.info(""),o.warn(` Version drift (pinVersions: true) — ${String(n.versionDrift.length)} entr${n.versionDrift.length===1?"y":"ies"} point at outdated versions:`);for(const{from:e,to:i}of n.versionDrift)o.info(` ${e} → ${i}`);o.notice(" Update vis.config.ts security.policies.installScripts.allow keys to migrate.")}if(s.length>0){o.info(""),o.warn(` Bin conflicts (${String(s.length)}) — multiple packages expose the same bin name:`);for(const e of s)o.info(` ${e.bin} ← ${e.packages.map(i=>i.name).join(", ")}`);o.notice(" Add the bin (or 'pkg#bin') to vis.config.ts security.allowBins to silence this.")}if(t?.hasDrift){o.info("");for(const e of R(t))o.warn(e)}};export{z as default};
@@ -1,4 +1,4 @@
1
- import{createRequire as m}from"node:module";import{A as d,j as $}from"../packem_shared/pm-runner-C6eTANt1.js";let w;const _=e=>(w??=m(import.meta.url))(e),o=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,g=e=>{if(typeof o<"u"&&o.versions&&o.versions.node){const[t,s]=o.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return o.getBuiltinModule(e)}return _(e)},{createInterface:y}=g("node:readline"),r="sigstore",h=()=>!!process.stdout.isTTY&&process.env.CI!=="true",v=e=>new Promise(t=>{const s=y({input:process.stdin,output:process.stderr});s.question(`${e} (Y/n) `,i=>{s.close();const n=i.trim().toLowerCase();t(n===""||n==="y"||n==="yes")})}),I=e=>{const t=d(e),s=$(t,{exact:!1,filter:[],global:!1,optional:!1,packages:[r],peer:!1,saveDev:!0,workspace:!1,workspaceRoot:!1},e,console);return Promise.resolve({exitCode:s})},O=()=>{try{return import.meta.resolve(r),!0}catch{return!1}},D=e=>{let t="pnpm";try{t=d(e).name}catch{}switch(t){case"bun":return`bun add -d ${r}`;case"npm":return`npm install -D ${r}`;case"yarn":return`yarn add -D ${r}`;default:return`pnpm add -D ${r}`}},R=()=>import("sigstore"),T=async(e={})=>{const t=e.interactive??h(),s=e.prompt??v,i=e.runInstall??I,n=e.importImpl??R,l=e.workspaceRoot??process.cwd(),a=D(l);try{return await n()}catch(u){const{code:p,message:f}=u;if(!(p==="ERR_MODULE_NOT_FOUND"||p==="MODULE_NOT_FOUND")||!f.includes(r))throw u}if(!t)throw new Error(`${r} is not installed. \`vis attest\` needs it for keyless signing/verification. Install it in your repo first:
1
+ import{createRequire as m}from"node:module";import{A as d,j as $}from"../packem_shared/pm-runner-DRybtzOV.js";let w;const _=e=>(w??=m(import.meta.url))(e),o=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,g=e=>{if(typeof o<"u"&&o.versions&&o.versions.node){const[t,s]=o.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return o.getBuiltinModule(e)}return _(e)},{createInterface:y}=g("node:readline"),r="sigstore",h=()=>!!process.stdout.isTTY&&process.env.CI!=="true",v=e=>new Promise(t=>{const s=y({input:process.stdin,output:process.stderr});s.question(`${e} (Y/n) `,i=>{s.close();const n=i.trim().toLowerCase();t(n===""||n==="y"||n==="yes")})}),I=e=>{const t=d(e),s=$(t,{exact:!1,filter:[],global:!1,optional:!1,packages:[r],peer:!1,saveDev:!0,workspace:!1,workspaceRoot:!1},e,console);return Promise.resolve({exitCode:s})},O=()=>{try{return import.meta.resolve(r),!0}catch{return!1}},D=e=>{let t="pnpm";try{t=d(e).name}catch{}switch(t){case"bun":return`bun add -d ${r}`;case"npm":return`npm install -D ${r}`;case"yarn":return`yarn add -D ${r}`;default:return`pnpm add -D ${r}`}},R=()=>import("sigstore"),T=async(e={})=>{const t=e.interactive??h(),s=e.prompt??v,i=e.runInstall??I,n=e.importImpl??R,l=e.workspaceRoot??process.cwd(),a=D(l);try{return await n()}catch(u){const{code:p,message:f}=u;if(!(p==="ERR_MODULE_NOT_FOUND"||p==="MODULE_NOT_FOUND")||!f.includes(r))throw u}if(!t)throw new Error(`${r} is not installed. \`vis attest\` needs it for keyless signing/verification. Install it in your repo first:
2
2
  ${a}`);if(!await s(`${r} isn't installed. Install it now?`))throw new Error(`${r} install declined. Re-run \`vis attest\` after installing manually:
3
3
  ${a}`);const c=await i(l);if(c.exitCode!==0)throw new Error(`Install of ${r} failed (exit ${String(c.exitCode)}). Install manually and retry:
4
4
  ${a}`);return await n()};export{D as installCommandFor,O as isSigstoreInstalled,T as loadOptionalSigstore};
@@ -1,5 +1,5 @@
1
- import{createRequire as Ge}from"node:module";import{u as H}from"../packem_shared/index-BAe6e0XE.js";import{DEFAULT_CHANGES_DIR as ae,DEFAULT_DEPENDENCY_BUMP_RULES as qe,DEFAULT_CONFIG as Xe}from"./DEFAULT_CLEAN_KEEP.js";import{VisReleaseError as C}from"../packem_shared/VisReleaseError-DMGRBTNO.js";import{e as Ke,p as Ze,c as Qe}from"./registry.js";import{E as aa}from"../packem_shared/public-api-WqUCiyIe.js";import{BUMP_LEVELS as ye,maxBump as me,bumpRank as te,normaliseGroup as $e}from"../release/types.js";import{isValidPackageName as ta,escapeMarkdown as na,assertValidPackageName as sa}from"./security.js";import ne from"./index.js";import{d as ra,c as oa}from"./detect.js";import{createShellRunner as Q}from"./shell-runner.js";let Ue;const He=e=>(Ue??=Ge(import.meta.url))(e),X=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,we=e=>{if(typeof X<"u"&&X.versions&&X.versions.node){const[a,t]=X.versions.node.split(".").map(Number);if(a>22||a===22&&t>=3||a===20&&t>=16)return X.getBuiltinModule(e)}return He(e)},{readdir:We,readFile:Je,writeFile:Ye,unlink:ze}=we("node:fs/promises"),{resolve:ge,sep:K,join:ea}=we("node:path"),{realpathSync:ve}=we("node:fs"),ia=/^exit[\s-]prerelease\s*:\s*(.+)$/i,ca=/^(.+)@(\d+\.\d+\.\d+(?:[-+].*)?)$/,ke=(e,a,t)=>{if(!ta(e))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid replay condition "${a}": ${JSON.stringify(e)} is not a valid package name.`,packageName:e||void 0});return e},la=(e,a)=>{if(typeof e!="string"||e.trim()==="")throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition: ${JSON.stringify(e)}. Expected "name@1.2.0" or "exit-prerelease:name".`});const t=e.trim(),n=ia.exec(t);if(n)return{kind:"exit-prerelease",package:ke((n[1]??"").trim(),t,a)};const s=ca.exec(t);if(s)return{kind:"version",package:ke((s[1]??"").trim(),t,a),version:s[2]??""};throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition "${t}". Expected "name@1.2.0" or "exit-prerelease:name".`})},pa=(e,a)=>{if(!Array.isArray(e))throw new C({code:"BUMP_FILE_INVALID",file:a,message:'`replay` must be a list of conditions (e.g. ["name@1.2.0", "exit-prerelease:name"]).'});return e.map(t=>la(t,a))},ue=e=>!("bumps"in e.payload)&&Array.isArray(e.payload.replay)&&e.payload.replay.length>0,Pe=e=>/^\d+\.\d+\.\d+-/.test(e),da=(e,a)=>e.package!==a.name?!1:e.kind==="version"?a.newVersion===e.version:Pe(a.oldVersion)&&!Pe(a.newVersion),ga=(e,a)=>{const t=new Map,n=[],s=[];for(const i of e){if(!ue(i))continue;const l=i.payload.replay;let c=!0;for(const o of l){const r=a.find(u=>da(o,u));if(r){const u=t.get(r.name)??[];u.some(g=>g.id===i.id)||u.push(i),t.set(r.name,u)}else c=!1}c?n.push(i):s.push(i)}return{consumed:n,injectionsByPackage:t,retained:s}},ma=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,ua=e=>{const a=ma.exec(e);return a?{body:(a[2]??"").trim(),frontmatter:a[1]??""}:null},fa=/^(?:@[a-z0-9-]+\/)?[\w.-]+$/i,ha=214,wa=e=>e.length===0||e.length>ha||e.startsWith(".")||e.startsWith("_")||e.startsWith("-")?!1:fa.test(e),fe=e=>typeof e=="string"&&ye.includes(e),ya=/^ {0,3}(#{1,3})\s+\S/,ba=/^ {0,3}(?:```|~~~)/,$a=e=>{let a,t=0,n=!1;for(const s of e.split(/\r?\n/)){if(ba.test(s)){n=!n;continue}if(n)continue;const i=ya.exec(s);if(!i)continue;const l=(i[1]??"").length,c=4-l;c>t&&(t=c,a=l===1?"major":l===2?"minor":"patch")}return a},va=/^\s*(pr|commit|author)\s*:\s*(.+?)\s*$/i,ka=e=>{const a=e.split(/\r?\n/),t={};let n=0;for(const i of a){if(i.trim()===""){n+=1;continue}const l=va.exec(i);if(!l)break;const[,c="",o=""]=l;switch(c.toLowerCase()){case"author":{t.author=o.startsWith("@")?o:`@${o}`;break}case"commit":{t.commit=o;break}case"pr":{const r=Number.parseInt(o,10);!Number.isNaN(r)&&r>0&&(t.pr=r);break}}n+=1}const s=a.slice(n).join(`
2
- `).trim();return{meta:Object.keys(t).length>0?t:void 0,remainder:s}},Ce=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&("bump"in e||"replay"in e),Pa=(e,a,t)=>{const n=a.replay!==void 0;if(n&&a.bump!==void 0)throw new C({code:"BUMP_FILE_INVALID",file:t,message:`"${e}" sets both \`bump\` and \`replay\`. Replay files are changelog-only and never bump — remove \`bump\`, or drop \`replay\` to make this a normal change file.`,packageName:e});const s=a.bump===void 0&&n?"none":a.bump;if(!fe(s))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid bump level for "${e}": ${JSON.stringify(a.bump)}. Expected one of: ${ye.join(", ")}`,packageName:e});const i={bump:s,package:e};if(n&&(i.replay=pa(a.replay,t)),a.releaseAs!==void 0){if(typeof a.releaseAs!="string"||!/^\d+\.\d+\.\d+(?:[-+].*)?$/.test(a.releaseAs))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid releaseAs for "${e}": ${JSON.stringify(a.releaseAs)}. Expected a semver string like "2.0.0" or "2.0.0-rc.1".`,packageName:e});i.releaseAs=a.releaseAs}if(a.cascade!==void 0){if(typeof a.cascade!="object"||a.cascade===null||Array.isArray(a.cascade))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Cascade block for "${e}" must be an object mapping package globs to bump levels.`,packageName:e});const l={};for(const[c,o]of Object.entries(a.cascade)){if(!fe(o))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid cascade bump level for "${c}": ${JSON.stringify(o)}.`,packageName:e});l[c]=o}i.cascade=l}return i},ce=e=>e.replaceAll(/^.*[/\\]/g,"").replace(/\.md$/i,""),Ca=(e,a)=>{const t=ua(e);if(!t)throw new C({code:"BUMP_FILE_INVALID",file:a,message:"Change file is missing YAML frontmatter (expected `---` delimiters)."});let n;try{n=aa(t.frontmatter,{schema:"core",strict:!0})}catch(o){throw new C({cause:o,code:"BUMP_FILE_INVALID",file:a,message:`YAML parse failed: ${o.message}`})}if(n==null)return{body:t.body.trim(),id:ce(a),path:a,payload:{bumps:{}}};if(typeof n!="object"||Array.isArray(n))throw new C({code:"BUMP_FILE_INVALID",file:a,message:"Frontmatter must be a YAML object mapping package names to bump levels."});const s=Object.entries(n);if(s.length===0)return{body:t.body.trim(),id:ce(a),path:a,payload:{bumps:{}}};for(const[o]of s)if(!wa(o))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid package name: ${JSON.stringify(o)}.`,packageName:o});let i;if(s.length===1&&Ce(s[0][1])){const[o,r]=s[0];i=Pa(o,r,a)}else{const o={},r=[];for(const[u,g]of s){if(Ce(g))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Mixed simple + nested entries are not allowed. Package "${u}" uses the nested shape but the file has multiple top-level entries.`,packageName:u});if(g==null||g===""){r.push(u);continue}if(!fe(g))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid bump level for "${u}": ${JSON.stringify(g)}. Expected one of: ${ye.join(", ")}`,packageName:u});o[u]=g}if(r.length>0){const u=$a(t.body);if(!u)throw new C({code:"BUMP_FILE_INVALID",file:a,message:`No bump level for ${r.map(g=>`"${g}"`).join(", ")}: the entry is empty and the body has no markdown heading to infer one from. Add an explicit level (e.g. \`${r[0]}: minor\`) or a heading (\`# major\`, \`## minor\`, \`### patch\`).`,packageName:r[0]});for(const g of r)o[g]=u}i={bumps:o}}const{meta:l,remainder:c}=ka(t.body);return{body:c,id:ce(a),meta:l,path:a,payload:i}},mt=(e,a)=>{let t;if("bumps"in e){const n=Object.entries(e.bumps).map(([s,i])=>`${le(s)}: ${i}`);t=n.length>0?n.join(`
1
+ import{createRequire as Ge}from"node:module";import{u as H}from"../packem_shared/index-BAe6e0XE.js";import{DEFAULT_CHANGES_DIR as ae,DEFAULT_DEPENDENCY_BUMP_RULES as qe,DEFAULT_CONFIG as Xe}from"./DEFAULT_CLEAN_KEEP.js";import{VisReleaseError as C}from"../packem_shared/VisReleaseError-DMGRBTNO.js";import{e as Ke,p as Ze,c as Qe}from"./registry.js";import{b as aa}from"../packem_shared/index-tNFGWxc0.js";import{BUMP_LEVELS as ye,maxBump as me,bumpRank as te,normaliseGroup as $e}from"../release/types.js";import{isValidPackageName as ta,escapeMarkdown as na,assertValidPackageName as sa}from"./security.js";import ne from"./index.js";import{d as ra,c as oa}from"./detect.js";import{createShellRunner as Q}from"./shell-runner.js";let Ue;const He=e=>(Ue??=Ge(import.meta.url))(e),X=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,we=e=>{if(typeof X<"u"&&X.versions&&X.versions.node){const[a,t]=X.versions.node.split(".").map(Number);if(a>22||a===22&&t>=3||a===20&&t>=16)return X.getBuiltinModule(e)}return He(e)},{readdir:We,readFile:Je,writeFile:Ye,unlink:ze}=we("node:fs/promises"),{resolve:ge,sep:K,join:ea}=we("node:path"),{realpathSync:ve}=we("node:fs"),ia=/^exit[\s-]prerelease\s*:\s*(.+)$/i,ca=/^(.+)@(\d+\.\d+\.\d+(?:[-+].*)?)$/,ke=(e,a,t)=>{if(!ta(e))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid replay condition "${a}": ${JSON.stringify(e)} is not a valid package name.`,packageName:e||void 0});return e},la=(e,a)=>{if(typeof e!="string"||e.trim()==="")throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition: ${JSON.stringify(e)}. Expected "name@1.2.0" or "exit-prerelease:name".`});const t=e.trim(),n=ia.exec(t);if(n)return{kind:"exit-prerelease",package:ke((n[1]??"").trim(),t,a)};const s=ca.exec(t);if(s)return{kind:"version",package:ke((s[1]??"").trim(),t,a),version:s[2]??""};throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition "${t}". Expected "name@1.2.0" or "exit-prerelease:name".`})},pa=(e,a)=>{if(!Array.isArray(e))throw new C({code:"BUMP_FILE_INVALID",file:a,message:'`replay` must be a list of conditions (e.g. ["name@1.2.0", "exit-prerelease:name"]).'});return e.map(t=>la(t,a))},ue=e=>!("bumps"in e.payload)&&Array.isArray(e.payload.replay)&&e.payload.replay.length>0,Pe=e=>/^\d+\.\d+\.\d+-/.test(e),da=(e,a)=>e.package!==a.name?!1:e.kind==="version"?a.newVersion===e.version:Pe(a.oldVersion)&&!Pe(a.newVersion),ga=(e,a)=>{const t=new Map,n=[],s=[];for(const i of e){if(!ue(i))continue;const l=i.payload.replay;let c=!0;for(const o of l){const r=a.find(u=>da(o,u));if(r){const u=t.get(r.name)??[];u.some(g=>g.id===i.id)||u.push(i),t.set(r.name,u)}else c=!1}c?n.push(i):s.push(i)}return{consumed:n,injectionsByPackage:t,retained:s}},ma=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,ua=e=>{const a=ma.exec(e);return a?{body:(a[2]??"").trim(),frontmatter:a[1]??""}:null},fa=/^(?:@[a-z0-9-]+\/)?[\w.-]+$/i,ha=214,wa=e=>e.length===0||e.length>ha||e.startsWith(".")||e.startsWith("_")||e.startsWith("-")?!1:fa.test(e),fe=e=>typeof e=="string"&&ye.includes(e),ya=/^ {0,3}(#{1,3})\s+\S/,ba=/^ {0,3}(?:```|~~~)/,$a=e=>{let a,t=0,n=!1;for(const s of e.split(/\r?\n/)){if(ba.test(s)){n=!n;continue}if(n)continue;const i=ya.exec(s);if(!i)continue;const l=(i[1]??"").length,c=4-l;c>t&&(t=c,a=l===1?"major":l===2?"minor":"patch")}return a},va=/^\s*(pr|commit|author)\s*:\s*(.+?)\s*$/i,ka=e=>{const a=e.split(/\r?\n/),t={};let n=0;for(const i of a){if(i.trim()===""){n+=1;continue}const l=va.exec(i);if(!l)break;const[,c="",o=""]=l;switch(c.toLowerCase()){case"author":{t.author=o.startsWith("@")?o:`@${o}`;break}case"commit":{t.commit=o;break}case"pr":{const r=Number.parseInt(o,10);!Number.isNaN(r)&&r>0&&(t.pr=r);break}}n+=1}const s=a.slice(n).join(`
2
+ `).trim();return{meta:Object.keys(t).length>0?t:void 0,remainder:s}},Ce=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&("bump"in e||"replay"in e),Pa=(e,a,t)=>{const n=a.replay!==void 0;if(n&&a.bump!==void 0)throw new C({code:"BUMP_FILE_INVALID",file:t,message:`"${e}" sets both \`bump\` and \`replay\`. Replay files are changelog-only and never bump — remove \`bump\`, or drop \`replay\` to make this a normal change file.`,packageName:e});const s=a.bump===void 0&&n?"none":a.bump;if(!fe(s))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid bump level for "${e}": ${JSON.stringify(a.bump)}. Expected one of: ${ye.join(", ")}`,packageName:e});const i={bump:s,package:e};if(n&&(i.replay=pa(a.replay,t)),a.releaseAs!==void 0){if(typeof a.releaseAs!="string"||!/^\d+\.\d+\.\d+(?:[-+].*)?$/.test(a.releaseAs))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid releaseAs for "${e}": ${JSON.stringify(a.releaseAs)}. Expected a semver string like "2.0.0" or "2.0.0-rc.1".`,packageName:e});i.releaseAs=a.releaseAs}if(a.cascade!==void 0){if(typeof a.cascade!="object"||a.cascade===null||Array.isArray(a.cascade))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Cascade block for "${e}" must be an object mapping package globs to bump levels.`,packageName:e});const l={};for(const[c,o]of Object.entries(a.cascade)){if(!fe(o))throw new C({code:"BUMP_FILE_INVALID",file:t,message:`Invalid cascade bump level for "${c}": ${JSON.stringify(o)}.`,packageName:e});l[c]=o}i.cascade=l}return i},ce=e=>e.replaceAll(/^.*[/\\]/g,"").replace(/\.md$/i,""),Ca=(e,a)=>{const t=ua(e);if(!t)throw new C({code:"BUMP_FILE_INVALID",file:a,message:"Change file is missing YAML frontmatter (expected `---` delimiters)."});let n;try{n=aa(t.frontmatter,{strict:!0})}catch(o){throw new C({cause:o,code:"BUMP_FILE_INVALID",file:a,message:`YAML parse failed: ${o.message}`})}if(n==null)return{body:t.body.trim(),id:ce(a),path:a,payload:{bumps:{}}};if(typeof n!="object"||Array.isArray(n))throw new C({code:"BUMP_FILE_INVALID",file:a,message:"Frontmatter must be a YAML object mapping package names to bump levels."});const s=Object.entries(n);if(s.length===0)return{body:t.body.trim(),id:ce(a),path:a,payload:{bumps:{}}};for(const[o]of s)if(!wa(o))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid package name: ${JSON.stringify(o)}.`,packageName:o});let i;if(s.length===1&&Ce(s[0][1])){const[o,r]=s[0];i=Pa(o,r,a)}else{const o={},r=[];for(const[u,g]of s){if(Ce(g))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Mixed simple + nested entries are not allowed. Package "${u}" uses the nested shape but the file has multiple top-level entries.`,packageName:u});if(g==null||g===""){r.push(u);continue}if(!fe(g))throw new C({code:"BUMP_FILE_INVALID",file:a,message:`Invalid bump level for "${u}": ${JSON.stringify(g)}. Expected one of: ${ye.join(", ")}`,packageName:u});o[u]=g}if(r.length>0){const u=$a(t.body);if(!u)throw new C({code:"BUMP_FILE_INVALID",file:a,message:`No bump level for ${r.map(g=>`"${g}"`).join(", ")}: the entry is empty and the body has no markdown heading to infer one from. Add an explicit level (e.g. \`${r[0]}: minor\`) or a heading (\`# major\`, \`## minor\`, \`### patch\`).`,packageName:r[0]});for(const g of r)o[g]=u}i={bumps:o}}const{meta:l,remainder:c}=ka(t.body);return{body:c,id:ce(a),meta:l,path:a,payload:i}},mt=(e,a)=>{let t;if("bumps"in e){const n=Object.entries(e.bumps).map(([s,i])=>`${le(s)}: ${i}`);t=n.length>0?n.join(`
3
3
  `):"{}"}else{const n=[`${le(e.package)}:`,` bump: ${e.bump}`];if(e.releaseAs&&n.push(` releaseAs: ${e.releaseAs}`),e.cascade){n.push(" cascade:");for(const[s,i]of Object.entries(e.cascade))n.push(` ${le(s)}: ${i}`)}if(e.replay&&e.replay.length>0){n.push(" replay:");for(const s of e.replay){const i=s.kind==="version"?`${s.package}@${s.version}`:`exit-prerelease:${s.package}`;n.push(` - "${i}"`)}}t=n.join(`
4
4
  `)}return`---
5
5
  ${t}
@@ -1,3 +1,3 @@
1
- import{p as o}from"./cli-main.js";import{r as d}from"../packem_shared/advisories-CCBGdU8U.js";const f=async({fs:c,logger:u,options:e,workspaceRoot:s})=>{if(!s)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const r=e.db??d(s),t=e.format==="json";if(!e.force){o.warn(`Prune is destructive. Will remove: ${r}`),o.info("Re-run with --force to proceed."),t&&process.stdout.write(`${JSON.stringify({dbPath:r,reason:"needs --force",removed:!1})}
1
+ import{p as o}from"./cli-main.js";import{r as d}from"../packem_shared/advisories-DsXRmIA5.js";const f=async({fs:c,logger:u,options:e,workspaceRoot:s})=>{if(!s)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const r=e.db??d(s),t=e.format==="json";if(!e.force){o.warn(`Prune is destructive. Will remove: ${r}`),o.info("Re-run with --force to proceed."),t&&process.stdout.write(`${JSON.stringify({dbPath:r,reason:"needs --force",removed:!1})}
2
2
  `);return}const a=[r,`${r}-wal`,`${r}-shm`,`${r}-journal`],i=[];for(const n of a)try{await c.rm(n,{force:!0}),i.push(n)}catch{}if(t){process.stdout.write(`${JSON.stringify({dbPath:r,files:i,removed:!0})}
3
3
  `);return}o.success(`Removed ${r}.`)},w=f;export{w as advisoriesPruneExecute};
@@ -1,6 +1,6 @@
1
- import{createRequire as Ne}from"node:module";import{VisReleaseError as l}from"../packem_shared/VisReleaseError-DMGRBTNO.js";import{VersionActions as N}from"../packem_shared/AfterAllProjectsVersioned-CAKI2nWf.js";import{E as Me}from"../packem_shared/public-api-WqUCiyIe.js";import{resolveCleanStripList as Ee}from"./DEFAULT_CLEAN_KEEP.js";import{assertValidPackageName as F,resolveCustomCommands as W,interpolateCommand as J}from"./security.js";let _e;const je=t=>(_e??=Ne(import.meta.url))(t),x=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,V=t=>{if(typeof x<"u"&&x.versions&&x.versions.node){const[e,n]=x.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return x.getBuiltinModule(t)}return je(t)},{readFile:A,writeFile:O,rm:xe,readdir:Ve}=V("node:fs/promises"),{dirname:U,join:h}=V("node:path"),{fileURLToPath:Oe}=V("node:url"),{mkdtempSync:G,writeFileSync:Re}=V("node:fs"),{tmpdir:B}=V("node:os"),De=["dependencies","devDependencies","peerDependencies","optionalDependencies"],fe=(t,e)=>{if(t.startsWith("catalog:")||t==="*"||t==="workspace:*"||t==="workspace:^"||t==="workspace:~")return t;if(t.startsWith("workspace:")){const n=t.slice(10);return`workspace:${L(n)}${e}`}if(t.startsWith("npm:")){const n=t.lastIndexOf("@");if(n<=4)return t;const r=t.slice(4,n),s=t.slice(n+1),a=L(s);return`npm:${r}@${a}${e}`}return`${L(t)}${e}`},Fe=/^([\^~=]|>=?|<=?)/,L=t=>{const e=Fe.exec(t);return e?e[1]??"^":"^"},Ut=async(t,e,n={})=>{const r=n.serializeManifest??Be,s=n.changelogPath??Je,a=n.renderChangelogEntry??He,i=new Map(t.releases.map(p=>[p.name,p.newVersion])),o=await Promise.all(t.releases.map(async p=>{const m=e.getPackage(p.name);if(!m)return;const y=Le(m.manifest,p.newVersion,i),b=n.readManifest?.(m.manifestPath),w=s(m);return{changelogEntry:await a(p),changelogPath:w,manifestWrite:{content:r(y,b),path:m.manifestPath}}})),c=[],d=new Map;for(const p of o){if(!p)continue;c.push(p.manifestWrite);const m=d.get(p.changelogPath);m?m.push(p.changelogEntry):d.set(p.changelogPath,[p.changelogEntry])}for(const[p,m]of d){const y=m.join(`
1
+ import{createRequire as Ne}from"node:module";import{VisReleaseError as l}from"../packem_shared/VisReleaseError-DMGRBTNO.js";import{VersionActions as N}from"../packem_shared/AfterAllProjectsVersioned-CAKI2nWf.js";import{b as Me}from"../packem_shared/index-tNFGWxc0.js";import{resolveCleanStripList as De}from"./DEFAULT_CLEAN_KEEP.js";import{assertValidPackageName as F,resolveCustomCommands as W,interpolateCommand as J}from"./security.js";let _e;const je=t=>(_e??=Ne(import.meta.url))(t),x=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,V=t=>{if(typeof x<"u"&&x.versions&&x.versions.node){const[e,n]=x.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return x.getBuiltinModule(t)}return je(t)},{readFile:A,writeFile:O,rm:xe,readdir:Ve}=V("node:fs/promises"),{dirname:U,join:h}=V("node:path"),{fileURLToPath:Oe}=V("node:url"),{mkdtempSync:G,writeFileSync:Re}=V("node:fs"),{tmpdir:B}=V("node:os"),Ee=["dependencies","devDependencies","peerDependencies","optionalDependencies"],fe=(t,e)=>{if(t.startsWith("catalog:")||t==="*"||t==="workspace:*"||t==="workspace:^"||t==="workspace:~")return t;if(t.startsWith("workspace:")){const n=t.slice(10);return`workspace:${L(n)}${e}`}if(t.startsWith("npm:")){const n=t.lastIndexOf("@");if(n<=4)return t;const r=t.slice(4,n),s=t.slice(n+1),a=L(s);return`npm:${r}@${a}${e}`}return`${L(t)}${e}`},Fe=/^([\^~=]|>=?|<=?)/,L=t=>{const e=Fe.exec(t);return e?e[1]??"^":"^"},Ut=async(t,e,n={})=>{const r=n.serializeManifest??Be,s=n.changelogPath??Je,a=n.renderChangelogEntry??He,i=new Map(t.releases.map(p=>[p.name,p.newVersion])),o=await Promise.all(t.releases.map(async p=>{const m=e.getPackage(p.name);if(!m)return;const y=Le(m.manifest,p.newVersion,i),b=n.readManifest?.(m.manifestPath),w=s(m);return{changelogEntry:await a(p),changelogPath:w,manifestWrite:{content:r(y,b),path:m.manifestPath}}})),c=[],d=new Map;for(const p of o){if(!p)continue;c.push(p.manifestWrite);const m=d.get(p.changelogPath);m?m.push(p.changelogEntry):d.set(p.changelogPath,[p.changelogEntry])}for(const[p,m]of d){const y=m.join(`
2
2
 
3
- `),b=n.readChangelog?.(p);c.push({content:Ge(y,b),path:p})}return{deletions:t.consumedChangeFiles.map(p=>p.path),writes:c}},Le=(t,e,n)=>{const r={...t,version:e};for(const s of De){const a=t[s];if(!a||typeof a!="object")continue;const i={...a};let o=!1;for(const[c,d]of Object.entries(a)){const p=n.get(c);if(p===void 0)continue;const m=fe(d,p);m!==d&&(i[c]=m,o=!0)}o&&(r[s]=i)}return r},Te=/^# .+/,Ue=/^## /m,Ge=(t,e)=>{const n=t.trim();if(!e||e.trim()==="")return`# Changelog
3
+ `),b=n.readChangelog?.(p);c.push({content:Ge(y,b),path:p})}return{deletions:t.consumedChangeFiles.map(p=>p.path),writes:c}},Le=(t,e,n)=>{const r={...t,version:e};for(const s of Ee){const a=t[s];if(!a||typeof a!="object")continue;const i={...a};let o=!1;for(const[c,d]of Object.entries(a)){const p=n.get(c);if(p===void 0)continue;const m=fe(d,p);m!==d&&(i[c]=m,o=!0)}o&&(r[s]=i)}return r},Te=/^# .+/,Ue=/^## /m,Ge=(t,e)=>{const n=t.trim();if(!e||e.trim()==="")return`# Changelog
4
4
 
5
5
  ${n}
6
6
  `;const r=e.split(/\r?\n/);if(r[0]&&Te.test(r[0])){let s=1;for(;s<r.length&&!(r[s]??"").startsWith("## ");)s+=1;const a=r.slice(0,s),i=r.slice(s);return a.length>0&&a[a.length-1]!==""&&a.push(""),[...a,n,"",...i].join(`
@@ -12,7 +12,7 @@ ${e.trimStart()}`:`${n}
12
12
 
13
13
  ${e.trimStart()}`},Be=(t,e)=>{const n=We(e);return`${JSON.stringify(t,null,n)}
14
14
  `},We=t=>{if(!t)return 4;const e=/\n(\s+)"/.exec(t);if(!e)return 4;const n=(e[1]??"").length;return n===2||n===4?n:4},Je=t=>`${t.dir}/CHANGELOG.md`,He=t=>{const e=new Date().toISOString().slice(0,10),n=[`## ${t.newVersion}`,`<sub>${e}</sub>`,""];if(t.isCascadeBump||t.isGroupBump)for(const r of t.sources)n.push(`- Version bump from ${r.name}@${r.newVersion}`);else if(t.isDependencyBump&&t.changeFiles.length===0)for(const r of t.sources)r.newVersion===""?n.push(`- Removed dependency ${r.name}`):n.push(`- Updated dependency ${r.name}@${r.newVersion}`);else for(const r of t.changeFiles)for(const s of r.body.split(/\r?\n/)){if(s.trim()===""){n.push("");continue}n.push(s.startsWith("-")||s.startsWith("*")?s:`- ${s}`)}return n.join(`
15
- `)},Ke=["dependencies","devDependencies","peerDependencies","optionalDependencies"],Q={default:{},named:{}},qe=t=>{if(!t)return Q;let e;try{e=Me(t,{schema:"core",strict:!0})}catch(s){throw new l({cause:s,code:"CONFIG_INVALID",message:`Failed to parse pnpm-workspace.yaml: ${s.message}`})}if(typeof e!="object"||e===null||Array.isArray(e))return Q;const n=e,r={default:{},named:{}};if(typeof n.catalog=="object"&&n.catalog!==null&&!Array.isArray(n.catalog))for(const[s,a]of Object.entries(n.catalog))typeof a=="string"&&(r.default[s]=a);if(typeof n.catalogs=="object"&&n.catalogs!==null&&!Array.isArray(n.catalogs))for(const[s,a]of Object.entries(n.catalogs)){if(typeof a!="object"||a===null||Array.isArray(a))continue;const i={};for(const[o,c]of Object.entries(a))typeof c=="string"&&(i[o]=c);r.named[s]=i}return r},we=(t,e,n)=>{if(!t.startsWith("catalog:"))return t;const r=t.slice(8),s=r===""?n.default:n.named[r];if(s)return s[e]},Y=(t,e)=>{const n={...t};for(const r of Ke){const s=t[r];if(!s||typeof s!="object")continue;const a={...s};for(const[i,o]of Object.entries(s)){if(!o.startsWith("catalog:"))continue;const c=we(o,i,e);if(c===void 0)throw new l({code:"CONFIG_INVALID",message:`Cannot resolve "${o}" for dependency "${i}" in package "${t.name}". Add it to pnpm-workspace.yaml's "catalog" or "catalogs" block.`,packageName:t.name});a[i]=c}n[r]=a}return n},Gt=Object.defineProperty({__proto__:null,parseCatalogs:qe,resolveCatalogRef:we,rewriteCatalogRefs:Y},Symbol.toStringTag,{value:"Module"}),Ye="ACTIONS_ID_TOKEN_REQUEST_URL",z=t=>{const e=!!t.env[Ye],n=!!t.env[t.staticTokenVar],r=t.workspaceConfig?.publish?.preferStaticToken===!0;return e&&!(r&&n)?"oidc":n?"token":"missing"};let T;const ze="https://github.com/visulima/visulima",Qe=async()=>{try{let t=U(Oe(import.meta.url));for(let e=0;e<6;e+=1){const n=h(t,"package.json");try{const s=await A(n,"utf8"),a=JSON.parse(s);if(a.name==="@visulima/vis"&&typeof a.version=="string")return a.version}catch{}const r=U(t);if(r===t)break;t=r}}catch{}return"unknown"},Xe=async()=>(T!==void 0||(T=`vis-release/${await Qe()} (+${ze})`),T),X=new Map,Ze=async t=>{const e=X.get(t);if(e!==void 0)return e;try{const n=await import("./index4.js").then(s=>s.i),r=new n.ProxyAgent(t);return X.set(t,r),r}catch{return}},et=t=>t===301||t===302||t===303||t===307||t===308,tt=(t,e)=>{try{const n=new URL(t),r=new URL(e);return n.host===r.host&&n.protocol===r.protocol}catch{return!1}},j=async(t,e={})=>{const n=e.maxRedirects??2,r={"User-Agent":await Xe(),...e.headers};e.headers?.["User-Agent"]&&(r["User-Agent"]=e.headers["User-Agent"]);let s=t,a=0;const i=e.httpProxy?await Ze(e.httpProxy):void 0;for(;;){let o;try{const p=e.fetchImpl??globalThis.fetch,m={headers:r,method:e.method??"GET",redirect:"manual"};i&&(m.dispatcher=i),o=await p(s,m)}catch{return{json:async()=>{},ok:!1,status:0,text:async()=>""}}if(!et(o.status))return{json:async()=>{try{return await o.json()}catch{return}},ok:o.ok,status:o.status,text:async()=>{try{return await o.text()}catch{return""}}};const c=o.headers.get("location")??o.headers.get("Location");if(!c||a>=n)return{json:async()=>{},ok:!1,status:0,text:async()=>""};let d;try{d=new URL(c,s).toString()}catch{return{json:async()=>{},ok:!1,status:0,text:async()=>""}}if(!tt(t,d))return{json:async()=>{},ok:!1,status:0,text:async()=>""};s=d,a+=1}},nt="https://crates.io/api/v1/crates",rt="Cargo.toml",Z=async t=>{let e;try{e=await A(t,"utf8")}catch(o){throw new l({cause:o,code:"CONFIG_INVALID",file:t,message:`Failed to read Cargo.toml at ${t}: ${o.message}`})}const{parse:n}=await import("./index5.js");let r;try{r=n(e)}catch(o){throw new l({cause:o,code:"CONFIG_INVALID",file:t,message:`Failed to parse Cargo.toml at ${t}: ${o.message}`})}if(!r.package)throw new l({code:"CONFIG_INVALID",file:t,hint:"CargoVersionActions only supports publishable crates with a [package] table. For workspace roots, point per-package config at the member crate directory.",message:`Cargo.toml at ${t} has no [package] table.`});const{name:s}=r.package;if(typeof s!="string"||s.length===0)throw new l({code:"CONFIG_INVALID",file:t,message:`Cargo.toml at ${t} is missing [package].name.`});const a=r.package.version;let i;if(typeof a=="string"?i=a:a&&typeof a=="object"&&a.workspace===!0&&(i=r.workspace?.package?.version),typeof i!="string"||i.length===0)throw new l({code:"CONFIG_INVALID",file:t,hint:"Set [package].version explicitly, or — for workspace-inherited versions — ensure the root Cargo.toml carries [workspace.package].version and point per-package config at it.",message:`Cargo.toml at ${t} has no resolvable [package].version.`});return{name:s,version:i}},ee=async(t,e)=>{const n=`${nt}/${encodeURIComponent(t)}`;try{const r=await j(n,{headers:{Accept:"application/json"},httpProxy:e});if(r.status===404||!r.ok)return;const s=await r.json();return s?.crate?.max_stable_version??s?.crate?.max_version??void 0}catch{return}},st=(t,e)=>z({env:t,staticTokenVar:"CARGO_REGISTRY_TOKEN",workspaceConfig:e})==="oidc",at=async(t,e)=>{const n=await t.run("cargo",["package","--list","--allow-dirty"],{cwd:e,silent:!0});return n.exitCode!==0?[]:n.stdout.split(/\r?\n/).map(r=>r.trim()).filter(r=>r.length>0)};class ot extends N{id="cargo";async readPublishedVersion(e){const n=H(e.pkg);try{const{name:r}=await Z(n);return await ee(r)}catch{return}}async publish(e){if(e.dryRun)return{output:`[dry-run / cargo] would publish ${e.pkg.name}@${e.release.newVersion}`,published:!0};const n=H(e.pkg,e.perPackageConfig),r=it(e.pkg,e.perPackageConfig),{name:s,version:a}=await Z(n);if(a!==e.release.newVersion)throw new l({code:"CONFIG_INVALID",file:n,hint:`Confirm the cargo() preset's crateDir points at the directory containing this Cargo.toml. Expected ${e.release.newVersion} on disk after the extra-files bump.`,message:`Cargo.toml version (${a}) does not match planned release version (${e.release.newVersion}) for ${e.pkg.name}.`,packageName:e.pkg.name});if(await ee(s,e.workspaceConfig?.httpProxy)===e.release.newVersion)return{alreadyPublished:!0,output:`[cargo] ${s}@${e.release.newVersion} already on crates.io`,published:!1};const i=st(process.env,e.workspaceConfig);if(!i&&!process.env.CARGO_REGISTRY_TOKEN)throw new l({code:"AUTH_MISSING",hint:"Set CARGO_REGISTRY_TOKEN, or run from a GH-Actions job with `permissions: id-token: write` for OIDC trusted publishing.",message:`Cannot publish ${s}@${e.release.newVersion}: neither CARGO_REGISTRY_TOKEN nor OIDC trusted publishing is available.`,packageName:e.pkg.name});const o=e.workspaceConfig?.publish?.guards;if(o?.packSecretScan){const p=await at(e.pm.runner,r);if(p.length>0){const{runPackSecretScan:m}=await import("./publish-guards.js"),y=typeof o.packSecretScan=="object"?o.packSecretScan.ignore:void 0,b=await m({files:p,ignore:y,pkgDir:r});if(!b.passed){const{redactTokens:w}=await import("./security.js"),C=b.findings.map(_=>` • [packSecretScan] ${w(_.message)}${_.hint?`
15
+ `)},Ke=["dependencies","devDependencies","peerDependencies","optionalDependencies"],Q={default:{},named:{}},qe=t=>{if(!t)return Q;let e;try{e=Me(t,{strict:!0})}catch(s){throw new l({cause:s,code:"CONFIG_INVALID",message:`Failed to parse pnpm-workspace.yaml: ${s.message}`})}if(typeof e!="object"||e===null||Array.isArray(e))return Q;const n=e,r={default:{},named:{}};if(typeof n.catalog=="object"&&n.catalog!==null&&!Array.isArray(n.catalog))for(const[s,a]of Object.entries(n.catalog))typeof a=="string"&&(r.default[s]=a);if(typeof n.catalogs=="object"&&n.catalogs!==null&&!Array.isArray(n.catalogs))for(const[s,a]of Object.entries(n.catalogs)){if(typeof a!="object"||a===null||Array.isArray(a))continue;const i={};for(const[o,c]of Object.entries(a))typeof c=="string"&&(i[o]=c);r.named[s]=i}return r},we=(t,e,n)=>{if(!t.startsWith("catalog:"))return t;const r=t.slice(8),s=r===""?n.default:n.named[r];if(s)return s[e]},Y=(t,e)=>{const n={...t};for(const r of Ke){const s=t[r];if(!s||typeof s!="object")continue;const a={...s};for(const[i,o]of Object.entries(s)){if(!o.startsWith("catalog:"))continue;const c=we(o,i,e);if(c===void 0)throw new l({code:"CONFIG_INVALID",message:`Cannot resolve "${o}" for dependency "${i}" in package "${t.name}". Add it to pnpm-workspace.yaml's "catalog" or "catalogs" block.`,packageName:t.name});a[i]=c}n[r]=a}return n},Gt=Object.defineProperty({__proto__:null,parseCatalogs:qe,resolveCatalogRef:we,rewriteCatalogRefs:Y},Symbol.toStringTag,{value:"Module"}),Ye="ACTIONS_ID_TOKEN_REQUEST_URL",z=t=>{const e=!!t.env[Ye],n=!!t.env[t.staticTokenVar],r=t.workspaceConfig?.publish?.preferStaticToken===!0;return e&&!(r&&n)?"oidc":n?"token":"missing"};let T;const ze="https://github.com/visulima/visulima",Qe=async()=>{try{let t=U(Oe(import.meta.url));for(let e=0;e<6;e+=1){const n=h(t,"package.json");try{const s=await A(n,"utf8"),a=JSON.parse(s);if(a.name==="@visulima/vis"&&typeof a.version=="string")return a.version}catch{}const r=U(t);if(r===t)break;t=r}}catch{}return"unknown"},Xe=async()=>(T!==void 0||(T=`vis-release/${await Qe()} (+${ze})`),T),X=new Map,Ze=async t=>{const e=X.get(t);if(e!==void 0)return e;try{const n=await import("./index4.js").then(s=>s.i),r=new n.ProxyAgent(t);return X.set(t,r),r}catch{return}},et=t=>t===301||t===302||t===303||t===307||t===308,tt=(t,e)=>{try{const n=new URL(t),r=new URL(e);return n.host===r.host&&n.protocol===r.protocol}catch{return!1}},j=async(t,e={})=>{const n=e.maxRedirects??2,r={"User-Agent":await Xe(),...e.headers};e.headers?.["User-Agent"]&&(r["User-Agent"]=e.headers["User-Agent"]);let s=t,a=0;const i=e.httpProxy?await Ze(e.httpProxy):void 0;for(;;){let o;try{const p=e.fetchImpl??globalThis.fetch,m={headers:r,method:e.method??"GET",redirect:"manual"};i&&(m.dispatcher=i),o=await p(s,m)}catch{return{json:async()=>{},ok:!1,status:0,text:async()=>""}}if(!et(o.status))return{json:async()=>{try{return await o.json()}catch{return}},ok:o.ok,status:o.status,text:async()=>{try{return await o.text()}catch{return""}}};const c=o.headers.get("location")??o.headers.get("Location");if(!c||a>=n)return{json:async()=>{},ok:!1,status:0,text:async()=>""};let d;try{d=new URL(c,s).toString()}catch{return{json:async()=>{},ok:!1,status:0,text:async()=>""}}if(!tt(t,d))return{json:async()=>{},ok:!1,status:0,text:async()=>""};s=d,a+=1}},nt="https://crates.io/api/v1/crates",rt="Cargo.toml",Z=async t=>{let e;try{e=await A(t,"utf8")}catch(o){throw new l({cause:o,code:"CONFIG_INVALID",file:t,message:`Failed to read Cargo.toml at ${t}: ${o.message}`})}const{parse:n}=await import("./index5.js");let r;try{r=n(e)}catch(o){throw new l({cause:o,code:"CONFIG_INVALID",file:t,message:`Failed to parse Cargo.toml at ${t}: ${o.message}`})}if(!r.package)throw new l({code:"CONFIG_INVALID",file:t,hint:"CargoVersionActions only supports publishable crates with a [package] table. For workspace roots, point per-package config at the member crate directory.",message:`Cargo.toml at ${t} has no [package] table.`});const{name:s}=r.package;if(typeof s!="string"||s.length===0)throw new l({code:"CONFIG_INVALID",file:t,message:`Cargo.toml at ${t} is missing [package].name.`});const a=r.package.version;let i;if(typeof a=="string"?i=a:a&&typeof a=="object"&&a.workspace===!0&&(i=r.workspace?.package?.version),typeof i!="string"||i.length===0)throw new l({code:"CONFIG_INVALID",file:t,hint:"Set [package].version explicitly, or — for workspace-inherited versions — ensure the root Cargo.toml carries [workspace.package].version and point per-package config at it.",message:`Cargo.toml at ${t} has no resolvable [package].version.`});return{name:s,version:i}},ee=async(t,e)=>{const n=`${nt}/${encodeURIComponent(t)}`;try{const r=await j(n,{headers:{Accept:"application/json"},httpProxy:e});if(r.status===404||!r.ok)return;const s=await r.json();return s?.crate?.max_stable_version??s?.crate?.max_version??void 0}catch{return}},st=(t,e)=>z({env:t,staticTokenVar:"CARGO_REGISTRY_TOKEN",workspaceConfig:e})==="oidc",at=async(t,e)=>{const n=await t.run("cargo",["package","--list","--allow-dirty"],{cwd:e,silent:!0});return n.exitCode!==0?[]:n.stdout.split(/\r?\n/).map(r=>r.trim()).filter(r=>r.length>0)};class ot extends N{id="cargo";async readPublishedVersion(e){const n=H(e.pkg);try{const{name:r}=await Z(n);return await ee(r)}catch{return}}async publish(e){if(e.dryRun)return{output:`[dry-run / cargo] would publish ${e.pkg.name}@${e.release.newVersion}`,published:!0};const n=H(e.pkg,e.perPackageConfig),r=it(e.pkg,e.perPackageConfig),{name:s,version:a}=await Z(n);if(a!==e.release.newVersion)throw new l({code:"CONFIG_INVALID",file:n,hint:`Confirm the cargo() preset's crateDir points at the directory containing this Cargo.toml. Expected ${e.release.newVersion} on disk after the extra-files bump.`,message:`Cargo.toml version (${a}) does not match planned release version (${e.release.newVersion}) for ${e.pkg.name}.`,packageName:e.pkg.name});if(await ee(s,e.workspaceConfig?.httpProxy)===e.release.newVersion)return{alreadyPublished:!0,output:`[cargo] ${s}@${e.release.newVersion} already on crates.io`,published:!1};const i=st(process.env,e.workspaceConfig);if(!i&&!process.env.CARGO_REGISTRY_TOKEN)throw new l({code:"AUTH_MISSING",hint:"Set CARGO_REGISTRY_TOKEN, or run from a GH-Actions job with `permissions: id-token: write` for OIDC trusted publishing.",message:`Cannot publish ${s}@${e.release.newVersion}: neither CARGO_REGISTRY_TOKEN nor OIDC trusted publishing is available.`,packageName:e.pkg.name});const o=e.workspaceConfig?.publish?.guards;if(o?.packSecretScan){const p=await at(e.pm.runner,r);if(p.length>0){const{runPackSecretScan:m}=await import("./publish-guards.js"),y=typeof o.packSecretScan=="object"?o.packSecretScan.ignore:void 0,b=await m({files:p,ignore:y,pkgDir:r});if(!b.passed){const{redactTokens:w}=await import("./security.js"),C=b.findings.map(_=>` • [packSecretScan] ${w(_.message)}${_.hint?`
16
16
  → ${w(_.hint)}`:""}`).join(`
17
17
  `);throw new l({code:"PUBLISH_FAILED",message:`Pre-publish secret scan failed for ${s}@${e.release.newVersion}:
18
18
  ${C}`,packageName:e.pkg.name})}}}const c=["publish","--allow-dirty"];e.registry&&e.registry!=="https://crates.io"&&c.push("--registry",e.registry);const d=await e.pm.runner.run("cargo",c,{cwd:r,silent:!1});if(d.exitCode!==0)throw new l({code:"PUBLISH_FAILED",hint:"Inspect the cargo output above. Common causes: missing CARGO_REGISTRY_TOKEN, OIDC permission misconfigured, version already published, crates.io rate limit. Re-runs are safe — the published-version probe short-circuits subsequent runs.",message:`cargo publish failed for ${s}@${e.release.newVersion}: exit ${d.exitCode}. stderr: ${d.stderr.trim().slice(0,500)}`,packageName:e.pkg.name});return{output:`[cargo] published ${s}@${e.release.newVersion}${i?" (trusted publishing)":""}`,published:!0}}}const H=(t,e)=>{const n=e?.cargoTomlPath??rt;return h(t.dir,n)},it=(t,e)=>U(H(t,e)),ct=["linux/amd64","linux/arm64"],pt=t=>{const e=t.indexOf("/");if(e===-1)return{registry:"docker.io",repository:`library/${t}`};const n=t.slice(0,e),r=t.slice(e+1);return n==="localhost"||n.includes(".")||n.includes(":")?{registry:n,repository:r}:r.includes("/")?{registry:"docker.io",repository:t}:{registry:"docker.io",repository:`${n}/${r}`}},te=(t,e)=>{const{registry:n,repository:r}=pt(t);return`https://${n==="docker.io"?"registry-1.docker.io":n}/v2/${r}/manifests/${encodeURIComponent(e)}`},ke=t=>{const e=t??{};return{buildContext:e.buildContext,containerBuildArgs:e.containerBuildArgs,containerImage:e.containerImage,containerPlatforms:e.containerPlatforms,containerSigning:e.containerSigning,containerSkipLatest:e.containerSkipLatest}},lt=(t,e)=>{const n=ke(t);if(typeof n.containerImage!="string"||n.containerImage.length===0)throw new l({code:"CONFIG_INVALID",hint:["Container packages must declare `containerImage` in their per-pkg release config:","",' release.packages["<pkg>"] = container({',' image: "ghcr.io/scope/foo",',' platforms: ["linux/amd64", "linux/arm64"],',' signing: "cosign", // optional'," })","",'Or set `versionActions: "container"` + `containerImage` directly.'].join(`
@@ -22,22 +22,22 @@ ${C}`,packageName:e.pkg.name})}}}const c=["publish","--allow-dirty"];e.registry&
22
22
  `))}async readPublishedVersion(e){const n=e.perPackageConfig??{},r=h(e.pkg.dir,n.pomPath??"pom.xml");let s;try{s=await A(r,"utf8")}catch{return}const a=pe(s);if(this.warnIfMultiModule(e.pkg,a),!a.groupId||!a.artifactId||n.mavenMetadataUrl==="")return;const i=n.mavenMetadataUrl??yt(a.groupId,a.artifactId);try{const o=await j(i,{headers:{Accept:"text/xml,application/xml;q=0.9,*/*;q=0.8"},httpProxy:e.workspaceConfig?.httpProxy});if(o.status===404||!o.ok)return;const c=await o.text();return bt(c)}catch{return}}async publish(e){const n=e.perPackageConfig??{},r=h(e.pkg.dir,n.pomPath??"pom.xml");let s;try{const o=await A(r,"utf8");s=pe(o)}catch{s=void 0}const a=s?.groupId&&s?.artifactId?`${s.groupId}:${s.artifactId}`:e.pkg.name;if(e.dryRun)return{output:`[dry-run / maven] would publish ${e.pkg.name}@${e.release.newVersion} (${a}) (native publish not yet implemented — would use shell path)`,published:!0};const i=`Failing artifact: ${a}
23
23
  Pom: ${r}
24
24
 
25
- ${$t}`;throw new l({code:"CONFIG_INVALID",hint:i,message:`Native Maven publishing is not implemented for ${e.pkg.name}@${e.release.newVersion} (${a}). Use \`versionActions: "shell"\` with \`mvn deploy\` until the Sonatype Central Portal client lands.`,packageName:e.pkg.name})}}const be=(t,e)=>{if(e===!1)return{...t};const n=new Set(Ee(e)),r={name:t.name,version:t.version};for(const[s,a]of Object.entries(t))n.has(s)||(r[s]=a);return r},ye="https://registry.npmjs.org/",It="npm:registry.npmjs.org",le=async t=>{const e=h(t,"npm");try{return(await Ve(e,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name)}catch{return[]}},Ct=async t=>{const e=t.ACTIONS_ID_TOKEN_REQUEST_URL,n=t.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!e||!n)return;const r=`${e}${e.includes("?")?"&":"?"}audience=${encodeURIComponent(It)}`,s=await fetch(r,{headers:{Authorization:`Bearer ${n}`}});if(!s.ok)return;const a=await s.json().catch(()=>({}));return typeof a.value=="string"?a.value:void 0},Pt=async(t,e)=>{const n=await fetch(`${ye}-/npm/v1/oidc/token/exchange/package/${encodeURIComponent(t)}`,{headers:{Authorization:`Bearer ${e}`},method:"POST"});if(!n.ok)return;const r=await n.json().catch(()=>({}));return typeof r.token=="string"?r.token:void 0},ue=async(t,e,n)=>{if(e){const s=await Pt(t,e);if(s)return{source:"oidc",token:s}}const r=n.NPM_TOKEN;if(r)return{source:"NPM_TOKEN",token:r};throw new l({code:"AUTH_MISSING",message:`Cannot publish ${t}: OIDC exchange did not succeed and NPM_TOKEN is not set.`,packageName:t})},de=(t,e)=>{Re(t,`//registry.npmjs.org/:_authToken=${e}
25
+ ${$t}`;throw new l({code:"CONFIG_INVALID",hint:i,message:`Native Maven publishing is not implemented for ${e.pkg.name}@${e.release.newVersion} (${a}). Use \`versionActions: "shell"\` with \`mvn deploy\` until the Sonatype Central Portal client lands.`,packageName:e.pkg.name})}}const be=(t,e)=>{if(e===!1)return{...t};const n=new Set(De(e)),r={name:t.name,version:t.version};for(const[s,a]of Object.entries(t))n.has(s)||(r[s]=a);return r},ye="https://registry.npmjs.org/",It="npm:registry.npmjs.org",le=async t=>{const e=h(t,"npm");try{return(await Ve(e,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name)}catch{return[]}},Ct=async t=>{const e=t.ACTIONS_ID_TOKEN_REQUEST_URL,n=t.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!e||!n)return;const r=`${e}${e.includes("?")?"&":"?"}audience=${encodeURIComponent(It)}`,s=await fetch(r,{headers:{Authorization:`Bearer ${n}`}});if(!s.ok)return;const a=await s.json().catch(()=>({}));return typeof a.value=="string"?a.value:void 0},Pt=async(t,e)=>{const n=await fetch(`${ye}-/npm/v1/oidc/token/exchange/package/${encodeURIComponent(t)}`,{headers:{Authorization:`Bearer ${e}`},method:"POST"});if(!n.ok)return;const r=await n.json().catch(()=>({}));return typeof r.token=="string"?r.token:void 0},ue=async(t,e,n)=>{if(e){const s=await Pt(t,e);if(s)return{source:"oidc",token:s}}const r=n.NPM_TOKEN;if(r)return{source:"NPM_TOKEN",token:r};throw new l({code:"AUTH_MISSING",message:`Cannot publish ${t}: OIDC exchange did not succeed and NPM_TOKEN is not set.`,packageName:t})},de=(t,e)=>{Re(t,`//registry.npmjs.org/:_authToken=${e}
26
26
  registry=${ye}
27
27
  `)};class St extends N{id="native-addon";async readPublishedVersion(e){try{F(e.pkg.name);const{execFileSync:n}=await import("node:child_process");return n("npm",["view",e.pkg.name,"version"],{stdio:["ignore","pipe","ignore"]}).toString().trim()||void 0}catch{return}}async publish(e){if(e.dryRun){const c=await le(e.pkg.dir);return{output:`[dry-run] would publish ${e.pkg.name}@${e.release.newVersion} + ${c.length} platform package(s)`,published:!0}}const n=await le(e.pkg.dir);if(n.length===0){const{NpmVersionActions:c}=await Promise.resolve().then(()=>jt);return new c().publish(e)}const{env:r}=process,s=await Ct(r),a=e.release.newVersion,i=new Map,o=[];try{await Promise.all(n.map(async g=>{const u=h(e.pkg.dir,"npm",g,"package.json"),f=await A(u,"utf8");i.set(u,f);const $=JSON.parse(f);$.version=a,await O(u,`${JSON.stringify($,null,4)}
28
- `)}));const{execFileSync:c}=await import("node:child_process"),d=await Promise.all(n.map(async g=>{const u=h(e.pkg.dir,"npm",g),f=h(u,"package.json"),$=await A(f,"utf8"),k=JSON.parse($);F(k.name);const P=await ue(k.name,s,r),v=G(h(B(),"vis-release-napi-"));o.push(v);const S=h(v,".npmrc");return de(S,P.token),{manifest:k,npmrcPath:S,platform:g,platformDir:u}})),p=e.workspaceConfig?.publish?.guards;if(p&&Object.values(p).some(g=>g!==void 0&&g!==!1&&g!=="off")){const{runPublishGuards:g}=await import("./publish-guards.js");for(const{manifest:u,platformDir:f}of d){const $=c("npm",["pack","--dry-run","--json"],{cwd:f,stdio:["ignore","pipe","ignore"]}).toString();let k=[];try{k=JSON.parse($)[0]?.files?.map(v=>v.path)??[]}catch{}const P=await g({config:p,manifest:u,packFiles:k,pkgDir:f,runner:e.pm.runner,sourceManifest:u});if(P.blockers.length>0){const v=P.blockers.flatMap(S=>S.findings.map(D=>` • [${S.gate}] ${D.message}${D.hint?`
29
- → ${D.hint}`:""}`)).join(`
28
+ `)}));const{execFileSync:c}=await import("node:child_process"),d=await Promise.all(n.map(async g=>{const u=h(e.pkg.dir,"npm",g),f=h(u,"package.json"),$=await A(f,"utf8"),k=JSON.parse($);F(k.name);const P=await ue(k.name,s,r),v=G(h(B(),"vis-release-napi-"));o.push(v);const S=h(v,".npmrc");return de(S,P.token),{manifest:k,npmrcPath:S,platform:g,platformDir:u}})),p=e.workspaceConfig?.publish?.guards;if(p&&Object.values(p).some(g=>g!==void 0&&g!==!1&&g!=="off")){const{runPublishGuards:g}=await import("./publish-guards.js");for(const{manifest:u,platformDir:f}of d){const $=c("npm",["pack","--dry-run","--json"],{cwd:f,stdio:["ignore","pipe","ignore"]}).toString();let k=[];try{k=JSON.parse($)[0]?.files?.map(v=>v.path)??[]}catch{}const P=await g({config:p,manifest:u,packFiles:k,pkgDir:f,runner:e.pm.runner,sourceManifest:u});if(P.blockers.length>0){const v=P.blockers.flatMap(S=>S.findings.map(E=>` • [${S.gate}] ${E.message}${E.hint?`
29
+ → ${E.hint}`:""}`)).join(`
30
30
  `);throw new l({code:"PUBLISH_FAILED",message:`Pre-publish guards failed for ${u.name}@${a} (platform package):
31
- ${v}`,packageName:u.name})}}}const m=e.tag??"latest",y=(g,u)=>{const f=["publish",g,"--tag",m,"--access","public","--userconfig",u];return e.provenance&&f.push("--provenance"),f};for(const{manifest:g,npmrcPath:u,platformDir:f}of d)try{c("npm",y(f,u),{env:{...r,NPM_CONFIG_USERCONFIG:u},stdio:"inherit"})}catch($){const k=$.message;if(!k.includes("EPUBLISHCONFLICT")&&!k.includes("cannot publish over"))throw new l({cause:$,code:"PUBLISH_FAILED",message:`Failed to publish platform package ${g.name}@${a}: ${k}`,packageName:g.name})}const b=e.versionedManifestByName.get(e.pkg.name)??e.pkg.manifest,w={...b},C={...b.optionalDependencies};for(const{manifest:g}of d)Object.hasOwn(C,g.name)&&(C[g.name]=a);w.optionalDependencies=C;const _=Y(w,e.catalogs),I=be(_,e.cleanPackageJsonConfig),E=await A(e.pkg.manifestPath,"utf8");try{await O(e.pkg.manifestPath,`${JSON.stringify(I,null,4)}
32
- `),F(e.pkg.name);const g=await ue(e.pkg.name,s,r),u=G(h(B(),"vis-release-napi-parent-"));o.push(u);const f=h(u,".npmrc");de(f,g.token);const $=c("npm",["pack","--pack-destination",u,"--json"],{cwd:e.pkg.dir,env:r,stdio:["ignore","pipe","ignore"]}).toString();let k;try{const v=JSON.parse($);v[0]?.filename&&(k=h(u,v[0].filename))}catch{}const P=["publish",k??e.pkg.dir,"--tag",m,"--access","public","--userconfig",f];if(e.provenance&&P.push("--provenance"),c("npm",P,{env:{...r,NPM_CONFIG_USERCONFIG:f},stdio:"inherit"}),k){const{hashTarball:v}=await import("./publish-guards.js");return{published:!0,tarball:await v(k)}}return{published:!0}}finally{await O(e.pkg.manifestPath,E)}}finally{for(const[c,d]of i)try{await O(c,d)}catch{}for(const c of o)try{await xe(c,{force:!0,recursive:!0})}catch{}}}}const At=async(t,e)=>{const{extractPackFilesFromRaw:n}=await import("./publish-guards.js"),r=n(e.raw);if(r!==void 0)return r;const s=await t.pm.runner.run("npm",["pack","--dry-run","--json"],{cwd:t.pkg.dir,silent:!0});if(s.exitCode!==0)return[];try{return n(JSON.parse(s.stdout))??[]}catch{return[]}},me=1800*1e3,ge=15*1e3,he=t=>{if(t===!0)return{enabled:!0,pollIntervalMs:ge,timeoutMs:me};if(t&&typeof t=="object"){const e=t;return{enabled:!0,pollIntervalMs:e.pollIntervalMs??ge,timeoutMs:e.timeoutMs??me}}return{enabled:!1,pollIntervalMs:0,timeoutMs:0}};class $e extends N{id="npm";async readPublishedVersion(e){try{const n=await e.pm.runner.run("npm",["view",e.pkg.name,"version","--silent"],{cwd:e.pkg.dir,silent:!0});return n.exitCode!==0?void 0:n.stdout.trim()||void 0}catch{return}}async publish(e){if(e.dryRun)return{output:`[dry-run] would publish ${e.pkg.name}@${e.release.newVersion}`,published:!0};if(e.resumeStageId){const d=he(e.workspaceConfig?.publish?.stage);if(!d.enabled)throw new l({code:"CONFIG_INVALID",message:`Cannot resume stage ${e.resumeStageId} for ${e.pkg.name}@${e.release.newVersion}: publish.stage is now disabled. Resolve the stage manually via \`vis release stage approve|reject ${e.resumeStageId}\`.`,packageName:e.pkg.name});return this.resumeStagedPublish(e,d)}const n=e.perPackageConfig&&e.workspaceConfig?W(e.pkg.name,e.perPackageConfig,e.workspaceConfig):{};if(n.buildCommand){const d=J(n.buildCommand,{name:e.pkg.name,version:e.release.newVersion}),p=await e.pm.runner.run(process.platform==="win32"?"cmd":"sh",process.platform==="win32"?["/c",d]:["-c",d],{cwd:e.pkg.dir,silent:!1});if(p.exitCode!==0)throw new Error(`buildCommand failed for ${e.pkg.name}: exit ${p.exitCode}`)}const r=e.versionedManifestByName.get(e.pkg.name)??e.pkg.manifest,s=_t(r,e.versionedManifestByName),a=Y(s,e.catalogs),i=be(a,e.cleanPackageJsonConfig),o=await import("node:fs/promises"),c=await o.readFile(e.pkg.manifestPath,"utf8");try{if(await o.writeFile(e.pkg.manifestPath,`${JSON.stringify(i,null,4)}
31
+ ${v}`,packageName:u.name})}}}const m=e.tag??"latest",y=(g,u)=>{const f=["publish",g,"--tag",m,"--access","public","--userconfig",u];return e.provenance&&f.push("--provenance"),f};for(const{manifest:g,npmrcPath:u,platformDir:f}of d)try{c("npm",y(f,u),{env:{...r,NPM_CONFIG_USERCONFIG:u},stdio:"inherit"})}catch($){const k=$.message;if(!k.includes("EPUBLISHCONFLICT")&&!k.includes("cannot publish over"))throw new l({cause:$,code:"PUBLISH_FAILED",message:`Failed to publish platform package ${g.name}@${a}: ${k}`,packageName:g.name})}const b=e.versionedManifestByName.get(e.pkg.name)??e.pkg.manifest,w={...b},C={...b.optionalDependencies};for(const{manifest:g}of d)Object.hasOwn(C,g.name)&&(C[g.name]=a);w.optionalDependencies=C;const _=Y(w,e.catalogs),I=be(_,e.cleanPackageJsonConfig),D=await A(e.pkg.manifestPath,"utf8");try{await O(e.pkg.manifestPath,`${JSON.stringify(I,null,4)}
32
+ `),F(e.pkg.name);const g=await ue(e.pkg.name,s,r),u=G(h(B(),"vis-release-napi-parent-"));o.push(u);const f=h(u,".npmrc");de(f,g.token);const $=c("npm",["pack","--pack-destination",u,"--json"],{cwd:e.pkg.dir,env:r,stdio:["ignore","pipe","ignore"]}).toString();let k;try{const v=JSON.parse($);v[0]?.filename&&(k=h(u,v[0].filename))}catch{}const P=["publish",k??e.pkg.dir,"--tag",m,"--access","public","--userconfig",f];if(e.provenance&&P.push("--provenance"),c("npm",P,{env:{...r,NPM_CONFIG_USERCONFIG:f},stdio:"inherit"}),k){const{hashTarball:v}=await import("./publish-guards.js");return{published:!0,tarball:await v(k)}}return{published:!0}}finally{await O(e.pkg.manifestPath,D)}}finally{for(const[c,d]of i)try{await O(c,d)}catch{}for(const c of o)try{await xe(c,{force:!0,recursive:!0})}catch{}}}}const At=async(t,e)=>{const{extractPackFilesFromRaw:n}=await import("./publish-guards.js"),r=n(e.raw);if(r!==void 0)return r;const s=await t.pm.runner.run("npm",["pack","--dry-run","--json"],{cwd:t.pkg.dir,silent:!0});if(s.exitCode!==0)return[];try{return n(JSON.parse(s.stdout))??[]}catch{return[]}},me=1800*1e3,ge=15*1e3,he=t=>{if(t===!0)return{enabled:!0,pollIntervalMs:ge,timeoutMs:me};if(t&&typeof t=="object"){const e=t;return{enabled:!0,pollIntervalMs:e.pollIntervalMs??ge,timeoutMs:e.timeoutMs??me}}return{enabled:!1,pollIntervalMs:0,timeoutMs:0}};class $e extends N{id="npm";async readPublishedVersion(e){try{const n=await e.pm.runner.run("npm",["view",e.pkg.name,"version","--silent"],{cwd:e.pkg.dir,silent:!0});return n.exitCode!==0?void 0:n.stdout.trim()||void 0}catch{return}}async publish(e){if(e.dryRun)return{output:`[dry-run] would publish ${e.pkg.name}@${e.release.newVersion}`,published:!0};if(e.resumeStageId){const d=he(e.workspaceConfig?.publish?.stage);if(!d.enabled)throw new l({code:"CONFIG_INVALID",message:`Cannot resume stage ${e.resumeStageId} for ${e.pkg.name}@${e.release.newVersion}: publish.stage is now disabled. Resolve the stage manually via \`vis release stage approve|reject ${e.resumeStageId}\`.`,packageName:e.pkg.name});return this.resumeStagedPublish(e,d)}const n=e.perPackageConfig&&e.workspaceConfig?W(e.pkg.name,e.perPackageConfig,e.workspaceConfig):{};if(n.buildCommand){const d=J(n.buildCommand,{name:e.pkg.name,version:e.release.newVersion}),p=await e.pm.runner.run(process.platform==="win32"?"cmd":"sh",process.platform==="win32"?["/c",d]:["-c",d],{cwd:e.pkg.dir,silent:!1});if(p.exitCode!==0)throw new Error(`buildCommand failed for ${e.pkg.name}: exit ${p.exitCode}`)}const r=e.versionedManifestByName.get(e.pkg.name)??e.pkg.manifest,s=_t(r,e.versionedManifestByName),a=Y(s,e.catalogs),i=be(a,e.cleanPackageJsonConfig),o=await import("node:fs/promises"),c=await o.readFile(e.pkg.manifestPath,"utf8");try{if(await o.writeFile(e.pkg.manifestPath,`${JSON.stringify(i,null,4)}
33
33
  `),n.publishCommand){const p={name:e.pkg.name,version:e.release.newVersion},m=Array.isArray(n.publishCommand)?n.publishCommand:[n.publishCommand];for(const y of m){const b=J(y,p),w=await e.pm.runner.run(process.platform==="win32"?"cmd":"sh",process.platform==="win32"?["/c",b]:["-c",b],{cwd:e.pkg.dir,silent:!1});if(w.exitCode!==0)throw new Error(`publishCommand failed for ${e.pkg.name}: exit ${w.exitCode}`)}return{output:`[custom] published ${e.pkg.name}@${e.release.newVersion}`,published:!0}}const d=G(h(B(),"vis-release-pack-"));try{const p=await e.pm.pack({cwd:e.pkg.dir,destination:d}),m=e.workspaceConfig?.publish?.guards;if(m&&Object.values(m).some(u=>u!==void 0&&u!==!1&&u!=="off")){const{runPublishGuards:u}=await import("./publish-guards.js"),f=await At(e,p),$=await u({config:m,manifest:i,packFiles:f,pkgDir:e.pkg.dir,runner:e.pm.runner,sourceManifest:e.pkg.manifest});if($.blockers.length>0){const{redactTokens:k}=await import("./security.js"),P=$.blockers.flatMap(v=>v.findings.map(S=>` • [${v.gate}] ${k(S.message)}${S.hint?`
34
34
  → ${k(S.hint)}`:""}`)).join(`
35
35
  `);throw new l({code:"PUBLISH_FAILED",message:`Pre-publish guards failed for ${e.pkg.name}@${e.release.newVersion}:
36
36
  ${P}`,packageName:e.pkg.name})}}const{hashTarball:y}=await import("./publish-guards.js"),b=await y(p.tarball);if((e.workspaceConfig?.publish?.publishStrategy??"npm-publish-tarball")==="native"){const u=e.pm.id;return e.provenance&&u==="bun"&&process.stderr.write(`[vis release] ⚠ publishStrategy "native": bun has no --provenance/OIDC support; ${e.pkg.name}@${e.release.newVersion} publishes without provenance.
37
37
  `),e.otp&&u==="yarn"&&process.stderr.write(`[vis release] ⚠ publishStrategy "native": \`yarn npm publish\` ignores --otp; configure 2FA via .yarnrc.yml for ${e.pkg.name}.
38
- `),{...await e.pm.publishNative({access:"public",cwd:e.pkg.dir,otp:e.otp,provenance:e.provenance,registry:e.registry,tag:e.tag}),tarball:b}}const w=he(e.workspaceConfig?.publish?.stage);if(w.enabled){const{refuseRestrictedOidc:u}=await import("./stage-publisher.js"),f=e.pkg.manifest.publishConfig?.access;u(f)}const C=await e.pm.publish({access:"public",otp:e.otp,provenance:e.provenance,registry:e.registry,stage:w.enabled,tag:e.tag,tarball:p.tarball});if(!w.enabled||!C.stageId)return{...C,tarball:b};const{waitForStageDecision:_}=await import("./stage-publisher.js"),{stageId:I}=C,E=Date.now();process.stderr.write(`[vis release] ⏳ ${e.pkg.name}@${e.release.newVersion} staged (id ${I}). Waiting up to ${Math.round(w.timeoutMs/6e4)}m for a maintainer to approve via npmjs.com or \`npm stage approve ${I}\`...
38
+ `),{...await e.pm.publishNative({access:"public",cwd:e.pkg.dir,otp:e.otp,provenance:e.provenance,registry:e.registry,tag:e.tag}),tarball:b}}const w=he(e.workspaceConfig?.publish?.stage);if(w.enabled){const{refuseRestrictedOidc:u}=await import("./stage-publisher.js"),f=e.pkg.manifest.publishConfig?.access;u(f)}const C=await e.pm.publish({access:"public",otp:e.otp,provenance:e.provenance,registry:e.registry,stage:w.enabled,tag:e.tag,tarball:p.tarball});if(!w.enabled||!C.stageId)return{...C,tarball:b};const{waitForStageDecision:_}=await import("./stage-publisher.js"),{stageId:I}=C,D=Date.now();process.stderr.write(`[vis release] ⏳ ${e.pkg.name}@${e.release.newVersion} staged (id ${I}). Waiting up to ${Math.round(w.timeoutMs/6e4)}m for a maintainer to approve via npmjs.com or \`npm stage approve ${I}\`...
39
39
  `);const g=await _({cwd:e.pkg.dir,onProgress:u=>{u>0&&u%3e5<w.pollIntervalMs&&process.stderr.write(`[vis release] still waiting for ${e.pkg.name} stage decision (${Math.round(u/6e4)}m elapsed)...
40
- `)},packageName:e.pkg.name,pollIntervalMs:w.pollIntervalMs,runner:e.pm.runner,stageId:I,timeoutMs:w.timeoutMs,version:e.release.newVersion});return g==="approved"?(process.stderr.write(`[vis release] ✓ ${e.pkg.name}@${e.release.newVersion} approved + promoted (${Math.round((Date.now()-E)/1e3)}s).
40
+ `)},packageName:e.pkg.name,pollIntervalMs:w.pollIntervalMs,runner:e.pm.runner,stageId:I,timeoutMs:w.timeoutMs,version:e.release.newVersion});return g==="approved"?(process.stderr.write(`[vis release] ✓ ${e.pkg.name}@${e.release.newVersion} approved + promoted (${Math.round((Date.now()-D)/1e3)}s).
41
41
  `),{...C,stageId:void 0,tarball:b}):g==="rejected"?(process.stdout.write(`::warning::Stage rejected for ${e.pkg.name}@${e.release.newVersion} (id ${I}). Re-stage by re-running the release once the review feedback is addressed.
42
42
  `),{alreadyPublished:!1,output:`stage-rejected: ${I}`,published:!1,stageId:I}):(process.stdout.write(`::warning::Stage timeout for ${e.pkg.name}@${e.release.newVersion} (id ${I}) after ${Math.round(w.timeoutMs/6e4)}m. Re-run \`vis release publish\` once a maintainer can approve, or run \`vis release stage approve ${I}\` manually.
43
43
  `),{alreadyPublished:!1,output:`stage-timeout: ${I}`,published:!1,stageId:I})}finally{await o.rm(d,{force:!0,recursive:!0})}}finally{await o.writeFile(e.pkg.manifestPath,c)}}async resumeStagedPublish(e,n){const r=e.resumeStageId,s=Date.now();process.stderr.write(`[vis release] ↻ Resuming wait on staged ${e.pkg.name}@${e.release.newVersion} (id ${r}) — tarball already uploaded; not re-publishing.
@@ -1,2 +1,2 @@
1
- import{s as d,E as i,I as y}from"../packem_shared/index.server-CusjRLCh.js";import{p as a}from"./cli-main.js";import{r as l,g as h}from"../packem_shared/advisories-CCBGdU8U.js";const p=r=>{if(r===0)return"0 B";const n=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(r)/Math.log(1024)),n.length-1),o=r/1024**t;return`${o.toFixed(o<10&&t>0?1:0)} ${n[t]}`},v=r=>{if(!r)return"never";const n=Date.parse(r);if(Number.isNaN(n))return r;const t=Date.now()-n;if(t<0)return r;const o=Math.floor(t/6e4);if(o<1)return"just now";if(o<60)return`${o}m ago`;const s=Math.floor(o/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`},g=async({logger:r,options:n,workspaceRoot:t})=>{if(!t)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const o=n.db??l(t),s=await h(t,o);if(n.format==="json"){process.stdout.write(`${JSON.stringify({dbPath:o,ecosystems:s.ecosystems.map(e=>({advisoryCount:e.advisoryCount,lastSyncIso:e.lastSyncIso,manifestEtag:e.manifestEtag??null,name:e.name})),exists:s.exists,schemaVersion:s.schemaVersion,sizeBytes:s.sizeBytes},void 0,2)}
1
+ import{s as d,E as i,I as y}from"../packem_shared/index.server-CusjRLCh.js";import{p as a}from"./cli-main.js";import{r as l,g as h}from"../packem_shared/advisories-DsXRmIA5.js";const p=r=>{if(r===0)return"0 B";const n=["B","KB","MB","GB"],t=Math.min(Math.floor(Math.log(r)/Math.log(1024)),n.length-1),o=r/1024**t;return`${o.toFixed(o<10&&t>0?1:0)} ${n[t]}`},v=r=>{if(!r)return"never";const n=Date.parse(r);if(Number.isNaN(n))return r;const t=Date.now()-n;if(t<0)return r;const o=Math.floor(t/6e4);if(o<1)return"just now";if(o<60)return`${o}m ago`;const s=Math.floor(o/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`},g=async({logger:r,options:n,workspaceRoot:t})=>{if(!t)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const o=n.db??l(t),s=await h(t,o);if(n.format==="json"){process.stdout.write(`${JSON.stringify({dbPath:o,ecosystems:s.ecosystems.map(e=>({advisoryCount:e.advisoryCount,lastSyncIso:e.lastSyncIso,manifestEtag:e.manifestEtag??null,name:e.name})),exists:s.exists,schemaVersion:s.schemaVersion,sizeBytes:s.sizeBytes},void 0,2)}
2
2
  `);return}if(a.info(`DB: ${o}`),!s.exists){a.warn(`No advisory DB yet. Run ${d("vis advisories sync")} to populate.`);return}if(a.info(`Schema: v${s.schemaVersion} Size: ${p(s.sizeBytes)}`),s.ecosystems.length===0){a.warn("DB exists but contains no ecosystems. Run `vis advisories sync`.");return}a.info(""),a.info("Ecosystem Advisories Last sync ETag"),a.info(i("────────── ────────── ───────────────── ──────"));for(const e of s.ecosystems){const c=e.name.padEnd(10),f=e.advisoryCount.toLocaleString().padStart(10),m=`${e.lastSyncIso||"never"} (${v(e.lastSyncIso)})`.padEnd(19),u=e.manifestEtag??i("—");a.info(`${y(c)} ${f} ${m} ${u}`)}},S=g;export{S as advisoriesStatusExecute};
@@ -1,2 +1,2 @@
1
- import{E as g}from"../packem_shared/index.server-CusjRLCh.js";import{p as c}from"./cli-main.js";import{s as $}from"../packem_shared/scan-progress-q-N2JtIp.js";import{s as w,D as v}from"../packem_shared/advisories-CCBGdU8U.js";const S=t=>t?.security?.audit?.advisories??{},D=t=>t?t.split(",").map(r=>r.trim()).filter(r=>r.length>0):["npm"],b=async({logger:t,options:r,visConfig:h,workspaceRoot:d})=>{if(!d)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const l=r.format==="json",u=S(h),m=r.source??u.source??v,p=D(r.ecosystem),y=p.map(s=>({id:s,label:`Sync ${s} advisories`})),n=$(y,{live:!l}),i=[];try{for(const s of p){n.start(s);const o=Date.now();try{const e=await w({allowedHosts:u.allowedHosts,dbPath:r.db,ecosystem:s,force:!!r.force,source:m,workspaceRoot:d});i.push({ecosystem:s,result:e}),e.upToDate?n.finish(s,"ok",`up to date · ${f(Date.now()-o)}`):n.finish(s,"ok",`${e.advisoriesIngested.toLocaleString()} advisories · ${f(e.durationMs)}`)}catch(e){const a=e instanceof Error?e.message:String(e);i.push({ecosystem:s,error:a}),n.finish(s,"error",a)}}}finally{n.stop()}if(l){const s={ecosystems:i.map(o=>({advisoriesIngested:o.result?.advisoriesIngested??0,dbPath:o.result?.dbPath??null,durationMs:o.result?.durationMs??0,ecosystem:o.ecosystem,error:o.error??null,upToDate:o.result?.upToDate??!1})),source:m};process.stdout.write(`${JSON.stringify(s,void 0,2)}
1
+ import{E as g}from"../packem_shared/index.server-CusjRLCh.js";import{p as c}from"./cli-main.js";import{s as $}from"../packem_shared/scan-progress-DWfY4zkp.js";import{s as w,D as v}from"../packem_shared/advisories-DsXRmIA5.js";const S=t=>t?.security?.audit?.advisories??{},D=t=>t?t.split(",").map(r=>r.trim()).filter(r=>r.length>0):["npm"],b=async({logger:t,options:r,visConfig:h,workspaceRoot:d})=>{if(!d)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const l=r.format==="json",u=S(h),m=r.source??u.source??v,p=D(r.ecosystem),y=p.map(s=>({id:s,label:`Sync ${s} advisories`})),n=$(y,{live:!l}),i=[];try{for(const s of p){n.start(s);const o=Date.now();try{const e=await w({allowedHosts:u.allowedHosts,dbPath:r.db,ecosystem:s,force:!!r.force,source:m,workspaceRoot:d});i.push({ecosystem:s,result:e}),e.upToDate?n.finish(s,"ok",`up to date · ${f(Date.now()-o)}`):n.finish(s,"ok",`${e.advisoriesIngested.toLocaleString()} advisories · ${f(e.durationMs)}`)}catch(e){const a=e instanceof Error?e.message:String(e);i.push({ecosystem:s,error:a}),n.finish(s,"error",a)}}}finally{n.stop()}if(l){const s={ecosystems:i.map(o=>({advisoriesIngested:o.result?.advisoriesIngested??0,dbPath:o.result?.dbPath??null,durationMs:o.result?.durationMs??0,ecosystem:o.ecosystem,error:o.error??null,upToDate:o.result?.upToDate??!1})),source:m};process.stdout.write(`${JSON.stringify(s,void 0,2)}
2
2
  `)}else{const s=i.filter(a=>a.error),o=i.filter(a=>a.result),e=o[0];e?.result?.dbPath&&c.info(g(`DB: ${e.result.dbPath}`)),s.length===0?c.success(`Synced ${o.length} ecosystem${o.length===1?"":"s"}.`):c.error(`${s.length} ecosystem${s.length===1?"":"s"} failed to sync.`)}i.some(s=>s.error)&&(process.exitCode=1)},f=t=>t>=1e3?`${(t/1e3).toFixed(1)}s`:`${Math.round(t)}ms`,R=b;export{R as advisoriesSyncExecute};
@@ -1,2 +1,2 @@
1
- import{p as e}from"./cli-main.js";import{A as u}from"../packem_shared/pm-runner-C6eTANt1.js";import{O as g}from"../packem_shared/native-config-sync-Ds1FtcrM.js";import{S as l}from"../packem_shared/min-release-age-OaYpLwux.js";const y=new Set(["bun","npm","pnpm","yarn"]),k=({options:r,visConfig:c,workspaceRoot:f})=>{const s=f??process.cwd(),n=u(s);if(!y.has(n.name)){e.warn(`Package manager '${n.name}' has no native security config to sync.`);return}if(!c?.security){e.warn("vis.config has no `security` block — nothing to sync.");return}const t=c.security.policies??{},a=Object.fromEntries(Object.entries(t.installScripts?.allow??{}).filter(([,o])=>o)),m=t.firstSeen?.minutes,p=t.firstSeen?.exclude??[],i=[];if(Object.keys(a).length>0&&!r.skipAllowBuilds&&i.push(...g(n.name,s,a)),r.skipMinReleaseAge||i.push(...l(n.name,s,m,p)),i.length===0){e.success("Nothing to sync — vis.config and native PM config are aligned.");return}e.info(`Syncing vis.config security settings to ${n.name} native config…
1
+ import{p as e}from"./cli-main.js";import{A as u}from"../packem_shared/pm-runner-DRybtzOV.js";import{O as g}from"../packem_shared/native-config-sync-CHMCJx7H.js";import{S as l}from"../packem_shared/min-release-age-6avfn81h.js";const y=new Set(["bun","npm","pnpm","yarn"]),k=({options:r,visConfig:c,workspaceRoot:f})=>{const s=f??process.cwd(),n=u(s);if(!y.has(n.name)){e.warn(`Package manager '${n.name}' has no native security config to sync.`);return}if(!c?.security){e.warn("vis.config has no `security` block — nothing to sync.");return}const t=c.security.policies??{},a=Object.fromEntries(Object.entries(t.installScripts?.allow??{}).filter(([,o])=>o)),m=t.firstSeen?.minutes,p=t.firstSeen?.exclude??[],i=[];if(Object.keys(a).length>0&&!r.skipAllowBuilds&&i.push(...g(n.name,s,a)),r.skipMinReleaseAge||i.push(...l(n.name,s,m,p)),i.length===0){e.success("Nothing to sync — vis.config and native PM config are aligned.");return}e.info(`Syncing vis.config security settings to ${n.name} native config…
2
2
  `);for(const o of i)e.success(` ${o}`)};export{k as default};
@@ -1,2 +1,2 @@
1
- import{createRequire as m}from"node:module";import{w as d,l as p,j as h}from"../packem_shared/index-uBVnF4ji.js";import{p as e}from"./cli-main.js";import{A as _}from"../packem_shared/pm-runner-C6eTANt1.js";import{a as u}from"../packem_shared/readJsonSync-DweZd5ZA-0eZh9sGm.js";let g;const w=i=>(g??=m(import.meta.url))(i),c=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,y=i=>{if(typeof c<"u"&&c.versions&&c.versions.node){const[t,s]=c.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return c.getBuiltinModule(i)}return w(i)},{spawnSync:v}=y("node:child_process"),n="@lavamoat/preinstall-always-fail",l=i=>{const t=d(i,"package.json");if(!p(t))return"no-package-json";try{const s=u(t);if(s.devDependencies?.[n]||s.dependencies?.[n])return"installed"}catch{}return"missing"},$=i=>{const t=d(i,"package.json");if(!p(t))return!1;try{const s=u(t);let o=!1;const a=r=>!r||!(n in r)?r:(o=!0,Object.fromEntries(Object.entries(r).filter(([f])=>f!==n)));return s.devDependencies=a(s.devDependencies),s.dependencies=a(s.dependencies),o&&h(t,`${JSON.stringify(s,null,2)}
1
+ import{createRequire as m}from"node:module";import{w as d,l as p,j as h}from"../packem_shared/index-BLtnel38.js";import{p as e}from"./cli-main.js";import{A as _}from"../packem_shared/pm-runner-DRybtzOV.js";import{a as u}from"../packem_shared/readJsonSync-DweZd5ZA-CtrDlqpb.js";let g;const w=i=>(g??=m(import.meta.url))(i),c=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,y=i=>{if(typeof c<"u"&&c.versions&&c.versions.node){const[t,s]=c.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return c.getBuiltinModule(i)}return w(i)},{spawnSync:v}=y("node:child_process"),n="@lavamoat/preinstall-always-fail",l=i=>{const t=d(i,"package.json");if(!p(t))return"no-package-json";try{const s=u(t);if(s.devDependencies?.[n]||s.dependencies?.[n])return"installed"}catch{}return"missing"},$=i=>{const t=d(i,"package.json");if(!p(t))return!1;try{const s=u(t);let o=!1;const a=r=>!r||!(n in r)?r:(o=!0,Object.fromEntries(Object.entries(r).filter(([f])=>f!==n)));return s.devDependencies=a(s.devDependencies),s.dependencies=a(s.dependencies),o&&h(t,`${JSON.stringify(s,null,2)}
2
2
  `),o}catch{return!1}},D=({options:i,workspaceRoot:t})=>{const s=t??process.cwd();if(i.status){switch(l(s)){case"installed":{e.success(`Preinstall tripwire is installed (${n}).`),e.info("Removing 'ignore-scripts=true' will cause future installs to fail loudly.");break}case"missing":{e.warn("Preinstall tripwire is not installed."),e.info(`Run 'vis security tripwire' to add ${n} as a devDependency.`);break}default:e.error("No package.json found at the workspace root."),process.exitCode=1}return}if(i.remove){$(s)?e.success(`Removed ${n} from package.json. Run your PM's install to clean node_modules.`):e.info(`${n} was not present in package.json.`);return}if(l(s)==="installed"){e.info(`${n} is already installed.`);return}const o=_(s),a={bun:["add","-d",n],npm:["install","--save-dev",n],pnpm:["add","-D","-w",n],yarn:["add","-D",n]}[o.name];if(!a){e.error(`Cannot install tripwire — unsupported package manager '${o.name}'.`),process.exitCode=1;return}e.info(`Installing ${n} via ${o.name}…`);const r=v(o.name,a,{cwd:s,stdio:"inherit"});if(r.error){e.error(`Failed to install tripwire: ${r.error.message}`),process.exitCode=1;return}if(r.signal!==null){e.error(`${o.name} was terminated by signal ${r.signal}`),process.exitCode=1;return}if(r.status!==0){e.error(`${o.name} exited with code ${String(r.status)}`),process.exitCode=r.status??1;return}e.success(`Installed ${n} as a devDependency.`),e.notice(""),e.notice("How the tripwire works:"),e.notice(` ${n} declares a preinstall script that always fails.`),e.notice(" When 'ignore-scripts=true' is set (.npmrc / bunfig.toml / .yarnrc.yml),"),e.notice(" the script is skipped and installs succeed normally. If someone deletes"),e.notice(" that setting, the next install fails — loudly — instead of silently"),e.notice(" running every dependency's lifecycle scripts.")};export{D as default};
@@ -1,4 +1,4 @@
1
- import{createRequire as Qe}from"node:module";import{z as R,i as tt,E as ot,s as rt,L as st,e as it,P as S,J as I,b as z,h as te,w,k as Le,v as be,W as oe,y as nt,_ as ct,l as $,u as lt}from"../packem_shared/index-uBVnF4ji.js";import{parse as at}from"./index5.js";import"../packem_shared/public-api-WqUCiyIe.js";import{transformTs as _e}from"#native";let Ye;const Xe=e=>(Ye??=Qe(import.meta.url))(e),F=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ge=e=>{if(typeof F<"u"&&F.versions&&F.versions.node){const[o,s]=F.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return F.getBuiltinModule(e)}return Xe(e)},{readFileSync:Oe,statSync:Ne,writeFileSync:Ze,unlinkSync:et}=ge("node:fs"),de=ge("node:module"),{createRequire:D}=de,{fileURLToPath:Y,pathToFileURL:ee}=ge("node:url");function pt(e,o,s){const{beforeParse:t,buffer:r,compression:n,encoding:i="utf8",flag:l}={},a=R(e,{buffer:r,compression:n,encoding:i,flag:l}),p=typeof t=="function"?t(a):a;return tt.parse(p,o)}let ut;const dt=e=>(ut??=D(import.meta.url))(e),U=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ft=e=>{if(typeof U<"u"&&U.versions&&U.versions.node){const[o,s]=U.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return U.getBuiltinModule(e)}return dt(e)};ft("node:fs/promises");let mt;const ht=e=>(mt??=D(import.meta.url))(e),P=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,gt=e=>{if(typeof P<"u"&&P.versions&&P.versions.node){const[o,s]=P.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return P.getBuiltinModule(e)}return ht(e)};gt("node:fs");function Ot(e,o=!1){const s=e.length;let t=0,r="",n=0,i=16,l=0,a=0,p=0,f=0,d=0;function k(c,g){let b=0,m=0;for(;b<c;){let u=e.charCodeAt(t);if(u>=48&&u<=57)m=m*16+u-48;else if(u>=65&&u<=70)m=m*16+u-65+10;else if(u>=97&&u<=102)m=m*16+u-97+10;else break;t++,b++}return b<c&&(m=-1),m}function O(c){t=c,r="",n=0,i=16,d=0}function v(){let c=t;if(e.charCodeAt(t)===48)t++;else for(t++;t<e.length&&L(e.charCodeAt(t));)t++;if(t<e.length&&e.charCodeAt(t)===46)if(t++,t<e.length&&L(e.charCodeAt(t)))for(t++;t<e.length&&L(e.charCodeAt(t));)t++;else return d=3,e.substring(c,t);let g=t;if(t<e.length&&(e.charCodeAt(t)===69||e.charCodeAt(t)===101))if(t++,(t<e.length&&e.charCodeAt(t)===43||e.charCodeAt(t)===45)&&t++,t<e.length&&L(e.charCodeAt(t))){for(t++;t<e.length&&L(e.charCodeAt(t));)t++;g=t}else d=3;return e.substring(c,g)}function T(){let c="",g=t;for(;;){if(t>=s){c+=e.substring(g,t),d=2;break}const b=e.charCodeAt(t);if(b===34){c+=e.substring(g,t),t++;break}if(b===92){if(c+=e.substring(g,t),t++,t>=s){d=2;break}switch(e.charCodeAt(t++)){case 34:c+='"';break;case 92:c+="\\";break;case 47:c+="/";break;case 98:c+="\b";break;case 102:c+="\f";break;case 110:c+=`
1
+ import{createRequire as Qe}from"node:module";import{z as R,i as tt,E as ot,s as rt,L as st,f as it,P as S,J as I,b as z,k as te,w,n as Le,v as be,W as oe,y as nt,_ as ct,l as $,a as lt}from"../packem_shared/index-BLtnel38.js";import{parse as at}from"./index5.js";import"../packem_shared/index-tNFGWxc0.js";import{transformTs as _e}from"#native";let Ye;const Xe=e=>(Ye??=Qe(import.meta.url))(e),F=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ge=e=>{if(typeof F<"u"&&F.versions&&F.versions.node){const[o,s]=F.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return F.getBuiltinModule(e)}return Xe(e)},{readFileSync:Oe,statSync:Ne,writeFileSync:Ze,unlinkSync:et}=ge("node:fs"),de=ge("node:module"),{createRequire:D}=de,{fileURLToPath:Y,pathToFileURL:ee}=ge("node:url");function pt(e,o,s){const{beforeParse:t,buffer:r,compression:n,encoding:i="utf8",flag:l}={},a=R(e,{buffer:r,compression:n,encoding:i,flag:l}),p=typeof t=="function"?t(a):a;return tt.parse(p,o)}let ut;const dt=e=>(ut??=D(import.meta.url))(e),U=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ft=e=>{if(typeof U<"u"&&U.versions&&U.versions.node){const[o,s]=U.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return U.getBuiltinModule(e)}return dt(e)};ft("node:fs/promises");let mt;const ht=e=>(mt??=D(import.meta.url))(e),P=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,gt=e=>{if(typeof P<"u"&&P.versions&&P.versions.node){const[o,s]=P.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return P.getBuiltinModule(e)}return ht(e)};gt("node:fs");function Ot(e,o=!1){const s=e.length;let t=0,r="",n=0,i=16,l=0,a=0,p=0,f=0,d=0;function k(c,g){let b=0,m=0;for(;b<c;){let u=e.charCodeAt(t);if(u>=48&&u<=57)m=m*16+u-48;else if(u>=65&&u<=70)m=m*16+u-65+10;else if(u>=97&&u<=102)m=m*16+u-97+10;else break;t++,b++}return b<c&&(m=-1),m}function O(c){t=c,r="",n=0,i=16,d=0}function v(){let c=t;if(e.charCodeAt(t)===48)t++;else for(t++;t<e.length&&L(e.charCodeAt(t));)t++;if(t<e.length&&e.charCodeAt(t)===46)if(t++,t<e.length&&L(e.charCodeAt(t)))for(t++;t<e.length&&L(e.charCodeAt(t));)t++;else return d=3,e.substring(c,t);let g=t;if(t<e.length&&(e.charCodeAt(t)===69||e.charCodeAt(t)===101))if(t++,(t<e.length&&e.charCodeAt(t)===43||e.charCodeAt(t)===45)&&t++,t<e.length&&L(e.charCodeAt(t))){for(t++;t<e.length&&L(e.charCodeAt(t));)t++;g=t}else d=3;return e.substring(c,g)}function T(){let c="",g=t;for(;;){if(t>=s){c+=e.substring(g,t),d=2;break}const b=e.charCodeAt(t);if(b===34){c+=e.substring(g,t),t++;break}if(b===92){if(c+=e.substring(g,t),t++,t>=s){d=2;break}switch(e.charCodeAt(t++)){case 34:c+='"';break;case 92:c+="\\";break;case 47:c+="/";break;case 98:c+="\b";break;case 102:c+="\f";break;case 110:c+=`
2
2
  `;break;case 114:c+="\r";break;case 116:c+=" ";break;case 117:const m=k(4);m>=0?c+=String.fromCharCode(m):d=4;break;default:d=5}g=t;continue}if(b>=0&&b<=31)if(W(b)){c+=e.substring(g,t),d=2;break}else d=6;t++}return c}function A(){if(r="",d=0,n=t,a=l,f=p,t>=s)return n=s,i=17;let c=e.charCodeAt(t);if(ne(c)){do t++,r+=String.fromCharCode(c),c=e.charCodeAt(t);while(ne(c));return i=15}if(W(c))return t++,r+=String.fromCharCode(c),c===13&&e.charCodeAt(t)===10&&(t++,r+=`
3
3
  `),l++,p=t,i=14;switch(c){case 123:return t++,i=1;case 125:return t++,i=2;case 91:return t++,i=3;case 93:return t++,i=4;case 58:return t++,i=6;case 44:return t++,i=5;case 34:return t++,r=T(),i=10;case 47:const g=t-1;if(e.charCodeAt(t+1)===47){for(t+=2;t<s&&!W(e.charCodeAt(t));)t++;return r=e.substring(g,t),i=12}if(e.charCodeAt(t+1)===42){t+=2;const b=s-1;let m=!1;for(;t<b;){const u=e.charCodeAt(t);if(u===42&&e.charCodeAt(t+1)===47){t+=2,m=!0;break}t++,W(u)&&(u===13&&e.charCodeAt(t)===10&&t++,l++,p=t)}return m||(t++,d=1),r=e.substring(g,t),i=13}return r+=String.fromCharCode(c),t++,i=16;case 45:if(r+=String.fromCharCode(c),t++,t===s||!L(e.charCodeAt(t)))return i=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return r+=v(),i=11;default:for(;t<s&&N(c);)t++,c=e.charCodeAt(t);if(n!==t){switch(r=e.substring(n,t),r){case"true":return i=8;case"false":return i=9;case"null":return i=7}return i=16}return r+=String.fromCharCode(c),t++,i=16}}function N(c){if(ne(c)||W(c))return!1;switch(c){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function h(){let c;do c=A();while(c>=12&&c<=15);return c}return{setPosition:O,getPosition:()=>t,scan:o?h:A,getToken:()=>i,getTokenValue:()=>r,getTokenOffset:()=>n,getTokenLength:()=>t-n,getTokenStartLine:()=>a,getTokenStartCharacter:()=>n-f,getTokenError:()=>d}}function ne(e){return e===32||e===9}function W(e){return e===10||e===13}function L(e){return e>=48&&e<=57}var ve;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(ve||(ve={}));new Array(20).fill(0).map((e,o)=>" ".repeat(o));const _=200;new Array(_).fill(0).map((e,o)=>`
4
4
  `+" ".repeat(o)),new Array(_).fill(0).map((e,o)=>"\r"+" ".repeat(o)),new Array(_).fill(0).map((e,o)=>`\r
@@ -1,2 +1,2 @@
1
- import{p}from"./cli-main.js";import{A as b}from"../packem_shared/pm-runner-C6eTANt1.js";import{r as y,l as w,L as $}from"../packem_shared/dependency-scan-D_ona0Qm.js";import{z as v,w as m,l as C}from"../packem_shared/index-uBVnF4ji.js";import{D as S}from"../packem_shared/package-version-C47v64aB.js";import"../packem_shared/public-api-WqUCiyIe.js";import{e as x}from"../packem_shared/index-CTMU29dI.js";const M=e=>{const s=e.trim();return s===""?!1:/^(?:git\+|git:\/\/|git@|ssh:\/\/)/i.test(s)||/^(?:github|gitlab|bitbucket|gist):/i.test(s)||/^[\w.-]+\/[\w.-]+(?:#.+)?$/.test(s)&&!s.includes("@")?!0:/^https?:\/\//i.test(s)},L=(e,s)=>{for(const t of s)if(t===e||t.endsWith("*")&&e.startsWith(t.slice(0,-1)))return!0;return!1},D=(e,s,t={})=>{const o=y(e,s);if(!o)return[];let i;try{i=v(m(e,o.file))}catch{return[]}const n=S(i,o.type);if(n.length===0)return[];const c=t.allow??[],l=[],f=new Set;for(const r of n){const a=`${r.name}@${r.version}`;for(const d of[r.dependencies,r.optionalDependencies])if(d){for(const[u,h]of Object.entries(d))if(!L(u,c))for(const k of h){if(!M(k))continue;const g=`${a}->${u}@${k}`;f.has(g)||(f.add(g),l.push({declaredBy:a,packageName:u,source:k}))}}}return l.sort((r,a)=>r.packageName.localeCompare(a.packageName)||r.declaredBy.localeCompare(a.declaredBy))},E=new Set(["firstSeen","publisherChange"]),N=e=>e.severity==="block"&&e.acceptedRisk===void 0,R=e=>{const s=e.security?.policies?.firstSeen?.minutes,t=typeof s=="number"&&s>0,o=e.security?.policies?.publisherChange?.mode==="no-downgrade",i=e.security?.blockExoticSubdeps===!0;return t||o||i},V=async e=>{const{offline:s=!1,packageManager:t,visConfig:o,workspaceRoot:i}=e,n=Date.now();if(!R(o))return{decisions:[],durationMs:Date.now()-n,entryCount:0,exoticViolations:[],lockfileMissing:!1,status:"skipped"};const c=y(i,t);if(!c||!C(m(i,c.file)))return{decisions:[],durationMs:Date.now()-n,entryCount:0,exoticViolations:[],lockfileMissing:!0,status:"fail"};const l=w(i,t,{includeDev:!0}),f=l.length,r=await x({offline:s,packageManager:t,packages:l,workspaceRoot:i},"install",{enabledPolicies:new Set(E),visConfig:o}),a=o.security?.blockExoticSubdeps===!0?D(i,t,{allow:o.security.exoticSubdepsAllow}):[],d=r.some(u=>N(u))||a.length>0;return{decisions:r,durationMs:Date.now()-n,entryCount:f,exoticViolations:a,lockfileMissing:!1,status:d?"fail":"pass"}},B=e=>e<1e3?`${String(e)}ms`:`${(e/1e3).toFixed(1)}s`,P=e=>{if(e.status==="skipped")return["– Lockfile supply-chain verification skipped (no firstSeen / publisherChange / blockExoticSubdeps policy configured)"];if(e.lockfileMissing)return["✗ Lockfile supply-chain verification failed — no lockfile found, the resolved closure cannot be attested"];const s=`(${String(e.entryCount)} ${e.entryCount===1?"entry":"entries"}, ${B(e.durationMs)})`;if(e.status==="pass")return[`✓ Lockfile passes supply-chain policies ${s}`];const t=[`✗ Lockfile failed supply-chain policy check ${s}`];for(const o of e.decisions)o.severity==="block"&&o.acceptedRisk===void 0&&t.push(` [${o.policy}] ${o.reason}`);for(const o of e.exoticViolations)t.push(` [blockExoticSubdeps] ${o.packageName} pulled from exotic source by ${o.declaredBy}: ${o.source}`);return t},J=async({options:e,visConfig:s,workspaceRoot:t})=>{const o=t??process.cwd(),i=b(o);if(!$[i.name]){p.warn(`Package manager '${i.name}' has no lockfile vis can verify.`);return}const n=await V({offline:!!e.offline,packageManager:i.name,visConfig:s??{},workspaceRoot:o});if(e.json){process.stdout.write(`${JSON.stringify(n,void 0,2)}
1
+ import{p}from"./cli-main.js";import{A as b}from"../packem_shared/pm-runner-DRybtzOV.js";import{r as y,l as w,L as $}from"../packem_shared/dependency-scan-ZLOuLkGN.js";import{z as v,w as m,l as C}from"../packem_shared/index-BLtnel38.js";import{D as S}from"../packem_shared/package-version-BNRJ3o9C.js";import"../packem_shared/index-tNFGWxc0.js";import{e as x}from"../packem_shared/index-CuKDxOCI.js";const M=e=>{const s=e.trim();return s===""?!1:/^(?:git\+|git:\/\/|git@|ssh:\/\/)/i.test(s)||/^(?:github|gitlab|bitbucket|gist):/i.test(s)||/^[\w.-]+\/[\w.-]+(?:#.+)?$/.test(s)&&!s.includes("@")?!0:/^https?:\/\//i.test(s)},L=(e,s)=>{for(const t of s)if(t===e||t.endsWith("*")&&e.startsWith(t.slice(0,-1)))return!0;return!1},D=(e,s,t={})=>{const o=y(e,s);if(!o)return[];let i;try{i=v(m(e,o.file))}catch{return[]}const n=S(i,o.type);if(n.length===0)return[];const c=t.allow??[],l=[],f=new Set;for(const r of n){const a=`${r.name}@${r.version}`;for(const d of[r.dependencies,r.optionalDependencies])if(d){for(const[u,h]of Object.entries(d))if(!L(u,c))for(const k of h){if(!M(k))continue;const g=`${a}->${u}@${k}`;f.has(g)||(f.add(g),l.push({declaredBy:a,packageName:u,source:k}))}}}return l.sort((r,a)=>r.packageName.localeCompare(a.packageName)||r.declaredBy.localeCompare(a.declaredBy))},E=new Set(["firstSeen","publisherChange"]),N=e=>e.severity==="block"&&e.acceptedRisk===void 0,R=e=>{const s=e.security?.policies?.firstSeen?.minutes,t=typeof s=="number"&&s>0,o=e.security?.policies?.publisherChange?.mode==="no-downgrade",i=e.security?.blockExoticSubdeps===!0;return t||o||i},V=async e=>{const{offline:s=!1,packageManager:t,visConfig:o,workspaceRoot:i}=e,n=Date.now();if(!R(o))return{decisions:[],durationMs:Date.now()-n,entryCount:0,exoticViolations:[],lockfileMissing:!1,status:"skipped"};const c=y(i,t);if(!c||!C(m(i,c.file)))return{decisions:[],durationMs:Date.now()-n,entryCount:0,exoticViolations:[],lockfileMissing:!0,status:"fail"};const l=w(i,t,{includeDev:!0}),f=l.length,r=await x({offline:s,packageManager:t,packages:l,workspaceRoot:i},"install",{enabledPolicies:new Set(E),visConfig:o}),a=o.security?.blockExoticSubdeps===!0?D(i,t,{allow:o.security.exoticSubdepsAllow}):[],d=r.some(u=>N(u))||a.length>0;return{decisions:r,durationMs:Date.now()-n,entryCount:f,exoticViolations:a,lockfileMissing:!1,status:d?"fail":"pass"}},B=e=>e<1e3?`${String(e)}ms`:`${(e/1e3).toFixed(1)}s`,P=e=>{if(e.status==="skipped")return["– Lockfile supply-chain verification skipped (no firstSeen / publisherChange / blockExoticSubdeps policy configured)"];if(e.lockfileMissing)return["✗ Lockfile supply-chain verification failed — no lockfile found, the resolved closure cannot be attested"];const s=`(${String(e.entryCount)} ${e.entryCount===1?"entry":"entries"}, ${B(e.durationMs)})`;if(e.status==="pass")return[`✓ Lockfile passes supply-chain policies ${s}`];const t=[`✗ Lockfile failed supply-chain policy check ${s}`];for(const o of e.decisions)o.severity==="block"&&o.acceptedRisk===void 0&&t.push(` [${o.policy}] ${o.reason}`);for(const o of e.exoticViolations)t.push(` [blockExoticSubdeps] ${o.packageName} pulled from exotic source by ${o.declaredBy}: ${o.source}`);return t},J=async({options:e,visConfig:s,workspaceRoot:t})=>{const o=t??process.cwd(),i=b(o);if(!$[i.name]){p.warn(`Package manager '${i.name}' has no lockfile vis can verify.`);return}const n=await V({offline:!!e.offline,packageManager:i.name,visConfig:s??{},workspaceRoot:o});if(e.json){process.stdout.write(`${JSON.stringify(n,void 0,2)}
2
2
  `),n.status==="fail"&&(process.exitCode=1);return}const[c,...l]=P(n);if(n.status==="skipped"){p.info(c);return}if(n.status==="pass"){p.success(c);return}p.error(c);for(const f of l)p.error(f);process.exitCode=1};export{J as default};
@@ -1 +1 @@
1
- import{createRequire as R}from"node:module";import{F as M}from"./target-merge-Cfy7c__2.js";import{advisoriesQuery as j,advisoriesIngest as q,advisoriesStatus as _,NATIVE_BINDING_VERSION as f}from"#native";let D;const I=s=>(D??=R(import.meta.url))(s),l=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,c=s=>{if(typeof l<"u"&&l.versions&&l.versions.node){const[e,t]=l.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return l.getBuiltinModule(s)}return I(s)},{randomUUID:$}=c("node:crypto"),{existsSync:T,createWriteStream:O}=c("node:fs"),{mkdir:P,unlink:U,stat:k}=c("node:fs/promises"),{join:g,dirname:x}=c("node:path"),{Readable:C}=c("node:stream"),{pipeline:L}=c("node:stream/promises"),w=6;if(f!==w)throw new Error(`vis native binding ABI mismatch in advisories: expected ${w}, got ${f}. Rebuild via \`pnpm --filter @visulima/vis run build:native\` or reinstall the platform binding package.`);const J="https://osv-vulnerabilities.storage.googleapis.com",W=new Set(["osv-vulnerabilities.storage.googleapis.com"]);class B extends Error{cause="DB_NOT_FOUND";constructor(e){super(`No local advisory DB at ${e}. Run 'vis advisories sync' first.`),this.name="AdvisoryDbNotFoundError"}}class p extends Error{cause="SOURCE_NOT_ALLOWED";constructor(e){super(`Advisory source host '${e}' is not in the built-in allowlist. Add it to \`security.audit.advisories.allowedHosts\` if intentional.`),this.name="AdvisorySourceNotAllowedError"}}class A extends Error{cause="SYNC_NETWORK";constructor(e,t){super(`Advisory sync failed for ${e}: ${t}. Check connectivity, proxy env vars, or --source.`),this.name="AdvisorySyncNetworkError"}}const y=s=>{const e=M("vis",{create:!0,cwd:s})??g(s,"node_modules",".cache","vis");return g(e,"advisories","db.sqlite")},F=(s,e)=>{let t;try{t=new URL(s)}catch{throw new p(s)}if(t.protocol!=="https:")throw new p(`${t.protocol}//${t.host}`);if(!new Set([...W,...e??[]]).has(t.host))throw new p(t.host);return t},X=async s=>{const e=s.dbPath??y(s.workspaceRoot);await P(x(e),{recursive:!0});const t=F(s.source,s.allowedHosts),d=new URL(`${s.ecosystem}/all.zip`,G(t.toString())),u=await V(e,s.ecosystem);let r=null;if(!s.force){const i=await b(d,{method:"HEAD"});if(i.ok&&(r=i.headers.get("etag"),r&&u&&r===u))return{advisoriesIngested:0,dbPath:e,durationMs:0,upToDate:!0}}const n=`${e}.${s.ecosystem}.${process.pid}.${$()}.zip.tmp`,o=await b(d,{method:"GET"});if(!o.ok||!o.body)throw new A(d.toString(),o.status);r||(r=o.headers.get("etag"));const v=o.headers.get("content-length"),a=v?Number.parseInt(v,10):null;let m=0;const E=O(n),h=C.fromWeb(o.body);s.onProgress&&a&&h.on("data",i=>{m+=i.byteLength,s.onProgress?.(m,a,"download")}),await L(h,E);try{const i=await q({dbPath:e,ecosystem:s.ecosystem,manifestEtag:r??void 0,zipPath:n},(S,N)=>s.onProgress?.(S,N,"ingest"));return{advisoriesIngested:i.advisoriesIngested,dbPath:e,durationMs:i.durationMs,upToDate:!1}}finally{await U(n).catch(()=>{})}},Z=(s,e)=>{if(s.length===0)return new Map;const t=e.dbPath??y(e.workspaceRoot),d=e.ecosystem??"npm";if(!T(t))throw new B(t);const u=s.map(o=>({ecosystem:d,name:o.name,version:o.version})),r=j(t,u),n=new Map;for(const[o,v]of s.entries()){const a=r[o];!a||a.vulnerabilities.length===0||n.set(v.name,a.vulnerabilities.map(m=>H(m)))}return n},ss=async(s,e)=>{const t=e??y(s);return _(t)},V=async(s,e)=>{try{await k(s)}catch{return null}return _(s).ecosystems.find(t=>t.name===e)?.manifestEtag??null},H=s=>({aliases:s.aliases.length>0?s.aliases:void 0,cvssScore:s.cvssScore??void 0,fixedVersions:s.fixedVersions,id:s.id,severity:z(s.severity),summary:s.summary}),z=s=>{const e=s.toUpperCase();return e==="CRITICAL"||e==="HIGH"||e==="MODERATE"||e==="LOW"?e:"UNKNOWN"},G=s=>s.endsWith("/")?s:`${s}/`,b=async(s,e)=>{try{return await fetch(s,e)}catch(t){throw new A(s.toString(),t instanceof Error?t.message:String(t))}};export{B as A,J as D,ss as g,Z as q,y as r,X as s};
1
+ import{createRequire as R}from"node:module";import{K as M}from"./target-merge-DLxJTcxn.js";import{advisoriesQuery as j,advisoriesIngest as q,advisoriesStatus as _,NATIVE_BINDING_VERSION as f}from"#native";let D;const I=s=>(D??=R(import.meta.url))(s),l=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,c=s=>{if(typeof l<"u"&&l.versions&&l.versions.node){const[e,t]=l.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return l.getBuiltinModule(s)}return I(s)},{randomUUID:$}=c("node:crypto"),{existsSync:T,createWriteStream:O}=c("node:fs"),{mkdir:P,unlink:U,stat:k}=c("node:fs/promises"),{join:g,dirname:x}=c("node:path"),{Readable:C}=c("node:stream"),{pipeline:L}=c("node:stream/promises"),w=6;if(f!==w)throw new Error(`vis native binding ABI mismatch in advisories: expected ${w}, got ${f}. Rebuild via \`pnpm --filter @visulima/vis run build:native\` or reinstall the platform binding package.`);const J="https://osv-vulnerabilities.storage.googleapis.com",W=new Set(["osv-vulnerabilities.storage.googleapis.com"]);class B extends Error{cause="DB_NOT_FOUND";constructor(e){super(`No local advisory DB at ${e}. Run 'vis advisories sync' first.`),this.name="AdvisoryDbNotFoundError"}}class p extends Error{cause="SOURCE_NOT_ALLOWED";constructor(e){super(`Advisory source host '${e}' is not in the built-in allowlist. Add it to \`security.audit.advisories.allowedHosts\` if intentional.`),this.name="AdvisorySourceNotAllowedError"}}class A extends Error{cause="SYNC_NETWORK";constructor(e,t){super(`Advisory sync failed for ${e}: ${t}. Check connectivity, proxy env vars, or --source.`),this.name="AdvisorySyncNetworkError"}}const y=s=>{const e=M("vis",{create:!0,cwd:s})??g(s,"node_modules",".cache","vis");return g(e,"advisories","db.sqlite")},V=(s,e)=>{let t;try{t=new URL(s)}catch{throw new p(s)}if(t.protocol!=="https:")throw new p(`${t.protocol}//${t.host}`);if(!new Set([...W,...e??[]]).has(t.host))throw new p(t.host);return t},X=async s=>{const e=s.dbPath??y(s.workspaceRoot);await P(x(e),{recursive:!0});const t=V(s.source,s.allowedHosts),d=new URL(`${s.ecosystem}/all.zip`,z(t.toString())),u=await H(e,s.ecosystem);let r=null;if(!s.force){const i=await b(d,{method:"HEAD"});if(i.ok&&(r=i.headers.get("etag"),r&&u&&r===u))return{advisoriesIngested:0,dbPath:e,durationMs:0,upToDate:!0}}const n=`${e}.${s.ecosystem}.${process.pid}.${$()}.zip.tmp`,o=await b(d,{method:"GET"});if(!o.ok||!o.body)throw new A(d.toString(),o.status);r||(r=o.headers.get("etag"));const v=o.headers.get("content-length"),a=v?Number.parseInt(v,10):null;let m=0;const E=O(n),h=C.fromWeb(o.body);s.onProgress&&a&&h.on("data",i=>{m+=i.byteLength,s.onProgress?.(m,a,"download")}),await L(h,E);try{const i=await q({dbPath:e,ecosystem:s.ecosystem,manifestEtag:r??void 0,zipPath:n},(S,N)=>s.onProgress?.(S,N,"ingest"));return{advisoriesIngested:i.advisoriesIngested,dbPath:e,durationMs:i.durationMs,upToDate:!1}}finally{await U(n).catch(()=>{})}},Z=(s,e)=>{if(s.length===0)return new Map;const t=e.dbPath??y(e.workspaceRoot),d=e.ecosystem??"npm";if(!T(t))throw new B(t);const u=s.map(o=>({ecosystem:d,name:o.name,version:o.version})),r=j(t,u),n=new Map;for(const[o,v]of s.entries()){const a=r[o];!a||a.vulnerabilities.length===0||n.set(v.name,a.vulnerabilities.map(m=>F(m)))}return n},ss=async(s,e)=>{const t=e??y(s);return _(t)},H=async(s,e)=>{try{await k(s)}catch{return null}return _(s).ecosystems.find(t=>t.name===e)?.manifestEtag??null},F=s=>({aliases:s.aliases.length>0?s.aliases:void 0,cvssScore:s.cvssScore??void 0,fixedVersions:s.fixedVersions,id:s.id,severity:K(s.severity),summary:s.summary}),K=s=>{const e=s.toUpperCase();return e==="CRITICAL"||e==="HIGH"||e==="MODERATE"||e==="LOW"?e:"UNKNOWN"},z=s=>s.endsWith("/")?s:`${s}/`,b=async(s,e)=>{try{return await fetch(s,e)}catch(t){throw new A(s.toString(),t instanceof Error?t.message:String(t))}};export{B as A,J as D,ss as g,Z as q,y as r,X as s};
@@ -1 +1 @@
1
- import{createRequire as k}from"node:module";import{getAffectedProjects as P}from"@visulima/task-runner";import{I as S}from"./index-BWl4DbMp.js";import{a as w}from"./vis-user-error-xmha3L4n.js";import{r as q}from"./affected-shas-PwkVbPch.js";let y;const R=e=>(y??=k(import.meta.url))(e),p=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,C=e=>{if(typeof p<"u"&&p.versions&&p.versions.node){const[t,o]=p.versions.node.split(".").map(Number);if(t>22||t===22&&o>=3||t===20&&o>=16)return p.getBuiltinModule(e)}return R(e)},{spawnSync:A}=C("node:child_process"),_=new Set(["deep","direct","none"]),B=e=>{const t=[],o=e.split("\0");for(let s=0;s<o.length;s++){const r=o[s];if(!r||r.length<4)continue;const f=r.slice(0,2),u=r.slice(3);if(u&&t.push(u),f.includes("R")||f.includes("C")){s+=1;const a=o[s];a&&t.push(a)}}return t},I=e=>{const t=A("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"});return t.error||t.status!==0||typeof t.stdout!="string"?[]:B(t.stdout)},W=async(e,t,o={})=>{const s=e.downstream??"deep",r=e.upstream??"none";if(!_.has(s))throw new w(`Invalid --downstream value: "${s}". Must be "none", "direct", or "deep".`);if(!_.has(r))throw new w(`Invalid --upstream value: "${r}". Must be "none", "direct", or "deep".`);const{projectGraph:f,projects:u,workspaceRoot:a}=t,l=[];let{base:m}=e,{head:n}=e;if(!m||!n){const i=q({defaultBase:o.defaultBase,workspaceRoot:a});m=m||i.base,n=n||i.head,l.push(`Resolved affected refs from ${i.provider} (${i.notes.join("; ")})`)}const v=o.runningInCi??S,h=n==="HEAD"||n==="",b=e.uncommitted??(!v&&h);let d=[];if(b)if(h){const i=(o.readWorkingTreeChanges??I)(a),$=Object.values(u).map(c=>c.root?.replace(/\/$/,"")).filter(c=>!!c&&c!==".");d=i.filter(c=>$.some(j=>c===j||c.startsWith(`${j}/`)));const g=i.length-d.length;d.length>0&&l.push(`including ${d.length} uncommitted working-tree file(s)`),g>0&&l.push(`ignoring ${g} uncommitted path(s) outside any project (untracked scratch would otherwise mark every project affected)`)}else l.push(`ignoring --uncommitted: --head=${n} pins the comparison to a commit, not the working tree`);return{...await P({additionalChangedFiles:d,base:m,downstream:s,head:n,projectGraph:f,projects:u,upstream:r,workspaceRoot:a}),notes:l,uncommittedFileCount:d.length}};export{W as s};
1
+ import{createRequire as k}from"node:module";import{getAffectedProjects as P}from"@visulima/task-runner";import{I as S}from"./index-BWl4DbMp.js";import{a as w}from"./vis-user-error-CfM4_ORo.js";import{r as q}from"./affected-shas-BKEu4RZc.js";let y;const R=e=>(y??=k(import.meta.url))(e),p=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,C=e=>{if(typeof p<"u"&&p.versions&&p.versions.node){const[t,o]=p.versions.node.split(".").map(Number);if(t>22||t===22&&o>=3||t===20&&o>=16)return p.getBuiltinModule(e)}return R(e)},{spawnSync:A}=C("node:child_process"),_=new Set(["deep","direct","none"]),B=e=>{const t=[],o=e.split("\0");for(let s=0;s<o.length;s++){const r=o[s];if(!r||r.length<4)continue;const f=r.slice(0,2),u=r.slice(3);if(u&&t.push(u),f.includes("R")||f.includes("C")){s+=1;const a=o[s];a&&t.push(a)}}return t},I=e=>{const t=A("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"});return t.error||t.status!==0||typeof t.stdout!="string"?[]:B(t.stdout)},W=async(e,t,o={})=>{const s=e.downstream??"deep",r=e.upstream??"none";if(!_.has(s))throw new w(`Invalid --downstream value: "${s}". Must be "none", "direct", or "deep".`);if(!_.has(r))throw new w(`Invalid --upstream value: "${r}". Must be "none", "direct", or "deep".`);const{projectGraph:f,projects:u,workspaceRoot:a}=t,l=[];let{base:m}=e,{head:n}=e;if(!m||!n){const i=q({defaultBase:o.defaultBase,workspaceRoot:a});m=m||i.base,n=n||i.head,l.push(`Resolved affected refs from ${i.provider} (${i.notes.join("; ")})`)}const v=o.runningInCi??S,h=n==="HEAD"||n==="",b=e.uncommitted??(!v&&h);let d=[];if(b)if(h){const i=(o.readWorkingTreeChanges??I)(a),$=Object.values(u).map(c=>c.root?.replace(/\/$/,"")).filter(c=>!!c&&c!==".");d=i.filter(c=>$.some(j=>c===j||c.startsWith(`${j}/`)));const g=i.length-d.length;d.length>0&&l.push(`including ${d.length} uncommitted working-tree file(s)`),g>0&&l.push(`ignoring ${g} uncommitted path(s) outside any project (untracked scratch would otherwise mark every project affected)`)}else l.push(`ignoring --uncommitted: --head=${n} pins the comparison to a commit, not the working tree`);return{...await P({additionalChangedFiles:d,base:m,downstream:s,head:n,projectGraph:f,projects:u,upstream:r,workspaceRoot:a}),notes:l,uncommittedFileCount:d.length}};export{W as s};
@@ -1 +1 @@
1
- import{createRequire as l}from"node:module";import{l as h,z as b}from"./index-uBVnF4ji.js";let E;const d=e=>(E??=l(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,p=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[s,r]=_.versions.node.split(".").map(Number);if(s>22||s===22&&r>=3||s===20&&r>=16)return _.getBuiltinModule(e)}return d(e)},{spawnSync:g}=p("node:child_process"),A="0000000000000000000000000000000000000000",I=e=>{if(h(e))try{const s=b(e);return JSON.parse(s)}catch{return}},f=(e,s)=>{const r=g("git",e,{cwd:s,encoding:"utf8"});if(!(r.error||typeof r.status!="number"||r.status!==0))return typeof r.stdout=="string"?r.stdout.trim():void 0},c=e=>typeof e=="string"&&e.length>0&&e!==A,R=(e,s,r)=>{const t=[],o=e.GITHUB_BASE_REF,i=e.GITHUB_SHA??"HEAD";if(o&&o.length>0)return t.push(`pull_request: $GITHUB_BASE_REF=${o}`),{base:`origin/${o}`,head:i,notes:t,provider:"github"};const a=e.GITHUB_EVENT_PATH,n=a?r(a):void 0;if(n){const u=typeof n.before=="string"?n.before:void 0;if(c(u))return t.push(`push: event.before=${u}`),{base:u,head:i,notes:t,provider:"github"}}return t.push(`fallback: origin/${s}`),{base:`origin/${s}`,head:i,notes:t,provider:"github"}},C=(e,s)=>{const r=[],t=e.CI_COMMIT_SHA??"HEAD";if(e.CI_PIPELINE_SOURCE==="merge_request_event"){const a=e.CI_MERGE_REQUEST_DIFF_BASE_SHA;if(c(a))return r.push(`merge_request: $CI_MERGE_REQUEST_DIFF_BASE_SHA=${a}`),{base:a,head:t,notes:r,provider:"gitlab"};const n=e.CI_MERGE_REQUEST_TARGET_BRANCH_NAME;if(n&&n.length>0)return r.push(`merge_request: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME=${n}`),{base:`origin/${n}`,head:t,notes:r,provider:"gitlab"}}const o=e.CI_COMMIT_BEFORE_SHA;if(c(o))return r.push(`push: $CI_COMMIT_BEFORE_SHA=${o}`),{base:o,head:t,notes:r,provider:"gitlab"};const i=e.CI_DEFAULT_BRANCH??s;return r.push(`fallback: origin/${i}`),{base:`origin/${i}`,head:t,notes:r,provider:"gitlab"}},T=(e,s)=>{const r=[],t=e.BUILDKITE_COMMIT??"HEAD",o=e.BUILDKITE_PULL_REQUEST_BASE_BRANCH;return o&&o.length>0?(r.push(`pull_request: $BUILDKITE_PULL_REQUEST_BASE_BRANCH=${o}`),{base:`origin/${o}`,head:t,notes:r,provider:"buildkite"}):(r.push(`fallback: origin/${s} (buildkite has no canonical previous-build SHA env)`),{base:`origin/${s}`,head:t,notes:r,provider:"buildkite"})},v=(e,s)=>{const r=[],t=e.CIRCLE_SHA1??"HEAD",o=e.CIRCLE_PR_BASE_BRANCH;return o&&o.length>0?(r.push(`pull_request: $CIRCLE_PR_BASE_BRANCH=${o}`),{base:`origin/${o}`,head:t,notes:r,provider:"circleci"}):(r.push(`fallback: origin/${s} (circleci has no canonical previous-build SHA env)`),{base:`origin/${s}`,head:t,notes:r,provider:"circleci"})},B=(e,s,r)=>{const t=[],o=s(["merge-base","HEAD",`origin/${e}`],r);return o&&o.length>0?(t.push(`local: git merge-base HEAD origin/${e}=${o}`),{base:o,head:"HEAD",notes:t,provider:"local"}):(t.push(`local fallback: origin/${e} (no merge-base available)`),{base:`origin/${e}`,head:"HEAD",notes:t,provider:"local"})},S=e=>{const s=e?.env??process.env,r=e?.defaultBase??"main",t=e?.readEventPayload??I,o=e?.runGit??f,i=e?.workspaceRoot??process.cwd();return s.GITHUB_ACTIONS==="true"?R(s,r,t):s.GITLAB_CI==="true"?C(s,r):s.BUILDKITE==="true"?T(s,r):s.CIRCLECI==="true"?v(s,r):B(r,o,i)};export{S as r};
1
+ import{createRequire as l}from"node:module";import{l as h,z as b}from"./index-BLtnel38.js";let E;const d=e=>(E??=l(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,p=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[s,r]=_.versions.node.split(".").map(Number);if(s>22||s===22&&r>=3||s===20&&r>=16)return _.getBuiltinModule(e)}return d(e)},{spawnSync:g}=p("node:child_process"),A="0000000000000000000000000000000000000000",I=e=>{if(h(e))try{const s=b(e);return JSON.parse(s)}catch{return}},f=(e,s)=>{const r=g("git",e,{cwd:s,encoding:"utf8"});if(!(r.error||typeof r.status!="number"||r.status!==0))return typeof r.stdout=="string"?r.stdout.trim():void 0},c=e=>typeof e=="string"&&e.length>0&&e!==A,R=(e,s,r)=>{const t=[],o=e.GITHUB_BASE_REF,i=e.GITHUB_SHA??"HEAD";if(o&&o.length>0)return t.push(`pull_request: $GITHUB_BASE_REF=${o}`),{base:`origin/${o}`,head:i,notes:t,provider:"github"};const a=e.GITHUB_EVENT_PATH,n=a?r(a):void 0;if(n){const u=typeof n.before=="string"?n.before:void 0;if(c(u))return t.push(`push: event.before=${u}`),{base:u,head:i,notes:t,provider:"github"}}return t.push(`fallback: origin/${s}`),{base:`origin/${s}`,head:i,notes:t,provider:"github"}},C=(e,s)=>{const r=[],t=e.CI_COMMIT_SHA??"HEAD";if(e.CI_PIPELINE_SOURCE==="merge_request_event"){const a=e.CI_MERGE_REQUEST_DIFF_BASE_SHA;if(c(a))return r.push(`merge_request: $CI_MERGE_REQUEST_DIFF_BASE_SHA=${a}`),{base:a,head:t,notes:r,provider:"gitlab"};const n=e.CI_MERGE_REQUEST_TARGET_BRANCH_NAME;if(n&&n.length>0)return r.push(`merge_request: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME=${n}`),{base:`origin/${n}`,head:t,notes:r,provider:"gitlab"}}const o=e.CI_COMMIT_BEFORE_SHA;if(c(o))return r.push(`push: $CI_COMMIT_BEFORE_SHA=${o}`),{base:o,head:t,notes:r,provider:"gitlab"};const i=e.CI_DEFAULT_BRANCH??s;return r.push(`fallback: origin/${i}`),{base:`origin/${i}`,head:t,notes:r,provider:"gitlab"}},T=(e,s)=>{const r=[],t=e.BUILDKITE_COMMIT??"HEAD",o=e.BUILDKITE_PULL_REQUEST_BASE_BRANCH;return o&&o.length>0?(r.push(`pull_request: $BUILDKITE_PULL_REQUEST_BASE_BRANCH=${o}`),{base:`origin/${o}`,head:t,notes:r,provider:"buildkite"}):(r.push(`fallback: origin/${s} (buildkite has no canonical previous-build SHA env)`),{base:`origin/${s}`,head:t,notes:r,provider:"buildkite"})},v=(e,s)=>{const r=[],t=e.CIRCLE_SHA1??"HEAD",o=e.CIRCLE_PR_BASE_BRANCH;return o&&o.length>0?(r.push(`pull_request: $CIRCLE_PR_BASE_BRANCH=${o}`),{base:`origin/${o}`,head:t,notes:r,provider:"circleci"}):(r.push(`fallback: origin/${s} (circleci has no canonical previous-build SHA env)`),{base:`origin/${s}`,head:t,notes:r,provider:"circleci"})},B=(e,s,r)=>{const t=[],o=s(["merge-base","HEAD",`origin/${e}`],r);return o&&o.length>0?(t.push(`local: git merge-base HEAD origin/${e}=${o}`),{base:o,head:"HEAD",notes:t,provider:"local"}):(t.push(`local fallback: origin/${e} (no merge-base available)`),{base:`origin/${e}`,head:"HEAD",notes:t,provider:"local"})},S=e=>{const s=e?.env??process.env,r=e?.defaultBase??"main",t=e?.readEventPayload??I,o=e?.runGit??f,i=e?.workspaceRoot??process.cwd();return s.GITHUB_ACTIONS==="true"?R(s,r,t):s.GITLAB_CI==="true"?C(s,r):s.BUILDKITE==="true"?T(s,r):s.CIRCLECI==="true"?v(s,r):B(r,o,i)};export{S as r};
@@ -1,4 +1,4 @@
1
- import{createRequire as te}from"node:module";import{h as oe,R as v,m as se,i as E}from"../packem_chunks/catalog.js";import"./en-D3CfXlO7.js";import{Table as ce}from"@visulima/tui-kit/table";import{U as de,V as le,W as ue,X as pe}from"../packem_chunks/cli-main.js";let ae;const ne=e=>(ae??=te(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,k=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[a,t]=_.versions.node.split(".").map(Number);if(a>22||a===22&&t>=3||a===20&&t>=16)return _.getBuiltinModule(e)}return ne(e)},{execFile:V,spawn:re,execFileSync:U}=k("node:child_process"),{existsSync:G}=k("node:fs"),{platform:ie,homedir:B}=k("node:os"),{join:g}=k("node:path"),{StringDecoder:j}=k("node:string_decoder"),{promisify:F}=k("node:util"),me=/v?(\d+\.\d+\.\d+(?:-[\w.]+)?)/,fe=5e3,ge=1e4,he=3e5,be=4096,O=ie()==="win32",W=["amp","claude","codex","copilot","crush","cursor","droid","gemini","kimi","opencode","qwen"],ve={alternateCommands:[],buildArgs:(e,{dangerous:a})=>{const t=["-x",e];return a&&t.push("--dangerously-allow-all"),t},command:"amp",defaultModel:"",displayName:"Amp",envVariable:"AMP_PATH",sessionMarkers:[{confidence:"definite",variable:"AMP_CURRENT_THREAD_ID"},{confidence:"definite",equals:"amp",variable:"AGENT"}],supportsMaxTokens:!1,supportsModel:!1},ye={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=[];return a&&n.push("--dangerously-skip-permissions"),t&&n.push("--model",t),n.push("--output-format","text","-p",e),n},command:"claude",defaultModel:"",displayName:"Claude Code",envVariable:"CLAUDE_PATH",sessionMarkers:[{confidence:"definite",variable:"CLAUDECODE"},{confidence:"definite",variable:"CLAUDE_CODE"}],supportsMaxTokens:!1,supportsModel:!0},Ee={alternateCommands:["openai-codex"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["exec"];return t&&n.push("--model",t),a&&n.push("--dangerously-bypass-approvals-and-sandbox"),n.push("--",e),n},command:"codex",defaultModel:"",displayName:"Codex",envVariable:"CODEX_PATH",sessionMarkers:[{confidence:"definite",variable:"CODEX_SANDBOX"},{confidence:"definite",variable:"CODEX_THREAD_ID"},{confidence:"definite",variable:"CODEX_CI"}],supportsMaxTokens:!1,supportsModel:!0},Ae={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p",e];return a&&n.push("--allow-all-tools"),t&&n.push("--model",t),n},command:"copilot",defaultModel:"",displayName:"GitHub Copilot CLI",envVariable:"COPILOT_PATH",sessionMarkers:[{confidence:"definite",variable:"COPILOT_MODEL"},{confidence:"definite",variable:"COPILOT_ALLOW_ALL"},{confidence:"definite",variable:"COPILOT_GITHUB_TOKEN"},{agent:"GitHub Copilot in VS Code",confidence:"definite",label:"TERM_PROGRAM+GIT_PAGER",match:{all:[["TERM_PROGRAM","vscode"],["GIT_PAGER","cat"]],none:["CURSOR_TRACE_ID"]}}],supportsMaxTokens:!1,supportsModel:!0},ke={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=["run"];return a&&n.push("--yolo"),t&&n.push("-m",t),n.push("--",e),n},command:"crush",defaultModel:"",displayName:"Crush",envVariable:"CRUSH_PATH",sessionMarkers:[{confidence:"definite",equals:"1",variable:"CRUSH"},{confidence:"definite",equals:"crush",variable:"AGENT"}],supportsMaxTokens:!1,supportsModel:!0},Re={alternateCommands:["cursor"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p"];return a&&n.push("--force"),n.push("--output-format","text"),t&&n.push("--model",t),n.push("--",e),n},command:"agent",defaultModel:"",displayName:"Cursor Agent",envVariable:"CURSOR_PATH",sessionMarkers:[{confidence:"definite",variable:"CURSOR_AGENT"},{confidence:"definite",label:"CURSOR_TRACE_ID+PAGER",match:{all:["CURSOR_TRACE_ID",["PAGER","head -n 10000 | cat"]]}},{agent:"Cursor editor",confidence:"ambient",variable:"CURSOR_TRACE_ID"}],supportsMaxTokens:!1,supportsModel:!0},_e={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=[];return a&&n.push("--skip-permissions-unsafe"),n.push("-o","text"),t&&n.push("-m",t),n.push("--",e),n},command:"droid",defaultModel:"",displayName:"Droid",envVariable:"DROID_PATH",sessionMarkers:[],supportsMaxTokens:!1,supportsModel:!0},we={alternateCommands:["gemini-cli"],buildArgs:(e,{dangerous:a,maxTokens:t,model:n})=>{const r=[];return a||r.push("--sandbox"),n&&r.push("--model",n),r.push("--max-output-tokens",String(t),"-p",e),r},command:"gemini",defaultModel:"gemini-2.5-pro",displayName:"Gemini CLI",envVariable:"GEMINI_PATH",sessionMarkers:[{confidence:"definite",label:"GEMINI_CLI",match:{all:["GEMINI_CLI"],none:["QWEN_CODE"]}}],supportsMaxTokens:!0,supportsModel:!0},Me={alternateCommands:[],buildArgs:(e,{model:a})=>{const t=["--quiet","-p",e];return a&&t.push("-m",a),t},command:"kimi",defaultModel:"",displayName:"Kimi CLI",envVariable:"KIMI_PATH",sessionMarkers:[],supportsMaxTokens:!1,supportsModel:!0},Ce={alternateCommands:[],buildArgs:(e,{model:a})=>{const t=["run"];return a&&t.push("-m",a),t.push("--",e),t},command:"opencode",defaultModel:"",displayName:"opencode",envVariable:"OPENCODE_PATH",sessionMarkers:[{confidence:"definite",label:"OPENCODE",match:{any:["OPENCODE","OPENCODE_BIN_PATH","OPENCODE_SERVER","OPENCODE_APP_INFO","OPENCODE_MODES","OPENCODE_CLIENT"]}}],supportsMaxTokens:!1,supportsModel:!0},Te={alternateCommands:["qwen-code"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p",e];return a&&n.push("--yolo"),n.push("-o","text"),t&&n.push("-m",t),n},command:"qwen",defaultModel:"",displayName:"Qwen Code",envVariable:"QWEN_PATH",sessionMarkers:[{confidence:"definite",equals:"1",variable:"QWEN_CODE"}],supportsMaxTokens:!1,supportsModel:!0},T={amp:ve,claude:ye,codex:Ee,copilot:Ae,crush:ke,cursor:Re,droid:_e,gemini:we,kimi:Me,opencode:Ce,qwen:Te};class A extends Error{exitCode;durationMs;provider;stderr;stdout;timedOut;aborted;constructor(a,t){super(a),this.name="AiRunError",this.provider=t.provider,this.exitCode=t.exitCode??null,this.durationMs=t.durationMs,this.stdout=t.stdout??"",this.stderr=t.stderr??"",this.timedOut=t.timedOut??!1,this.aborted=t.aborted??!1}}F(V);const Oe=[{agent:"Cline",confidence:"definite",variable:"CLINE_ACTIVE"},{agent:"Aider",confidence:"definite",label:"OR_APP_NAME|AIDER_API_KEY",match:{any:[["OR_APP_NAME","Aider"],"AIDER_API_KEY"]}},{agent:"Antigravity",confidence:"definite",label:"ANTIGRAVITY_AGENT",match:{any:["ANTIGRAVITY_AGENT","ANTIGRAVITY_PROJECT_ID"]}},{agent:"Augment",confidence:"definite",variable:"AUGMENT_AGENT"},{agent:"Windsurf",confidence:"definite",variable:"CODEIUM_EDITOR_APP_ROOT"},{agent:"Warp",confidence:"definite",variable:"OZ_RUN_ID"},{agent:"Pi",confidence:"definite",equals:"true",variable:"PI_CODING_AGENT"},{agent:"Jules",confidence:"definite",label:"HOME+USER",match:{all:[["HOME","/home/jules"],["USER","swebot"]]}},{agent:"Replit Agent",confidence:"definite",variable:"REPLIT_CLI"},{agent:"Replit Assistant",confidence:"definite",label:"REPL_ID+REPLIT_MODE",match:{all:["REPL_ID",["REPLIT_MODE","assistant"]]}},{agent:"Bolt.new",confidence:"definite",label:"SHELL+npm_config_yes",match:{all:[["SHELL","/bin/jsh"],"npm_config_yes"]}},{agent:"Zed",confidence:"definite",label:"TERM_PROGRAM+PAGER",match:{all:[["TERM_PROGRAM","zed"],["PAGER","cat"]]}},{agent:"Replit workspace",confidence:"ambient",label:"REPL_ID",match:{all:["REPL_ID"],none:[["REPLIT_MODE","assistant"]]}},{agent:"Bolt.new editor",confidence:"ambient",label:"SHELL",match:{all:[["SHELL","/bin/jsh"]],none:["npm_config_yes"]}},{agent:"Zed editor",confidence:"ambient",label:"TERM_PROGRAM",match:{all:[["TERM_PROGRAM","zed"]],none:[["PAGER","cat"]]}}],Ie={ambient:"interactive",definite:"agent"},K=(e,a,t)=>{const n={agent:e.agent??a,confidence:e.confidence,provider:t,type:e.type??Ie[e.confidence]};return"match"in e?{...n,label:e.label,match:e.match}:{...n,label:e.variable,match:e.equals===void 0?e.variable:[e.variable,e.equals]}},Se=(e,a)=>a.sessionMarkers.map(t=>K(t,a.displayName,e));[...Object.keys(T).flatMap(e=>Se(e,T[e])),...Oe.map(e=>K(e,e.agent,e.provider))].toSorted((e,a)=>e.confidence===a.confidence?0:e.confidence==="definite"?-1:1);F(V);const Pe=/\.(?:bat|cmd)$/i,J=e=>O&&Pe.test(e),P=e=>`"${e.replaceAll('"','""')}"`,q=e=>e==="~"||e.startsWith("~/")||O&&e.startsWith("~\\")?g(B(),e.slice(2)):e,Ne=e=>{try{const a=U(O?"where":"which",[e],{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:fe}).trim().split(`
1
+ import{createRequire as te}from"node:module";import{h as oe,R as v,m as se,i as E}from"../packem_chunks/catalog.js";import"./en-BDYMmM2_.js";import{Table as ce}from"@visulima/tui-kit/table";import{U as de,V as le,W as ue,X as pe}from"../packem_chunks/cli-main.js";let ae;const ne=e=>(ae??=te(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,k=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[a,t]=_.versions.node.split(".").map(Number);if(a>22||a===22&&t>=3||a===20&&t>=16)return _.getBuiltinModule(e)}return ne(e)},{execFile:V,spawn:re,execFileSync:U}=k("node:child_process"),{existsSync:G}=k("node:fs"),{platform:ie,homedir:B}=k("node:os"),{join:g}=k("node:path"),{StringDecoder:j}=k("node:string_decoder"),{promisify:F}=k("node:util"),me=/v?(\d+\.\d+\.\d+(?:-[\w.]+)?)/,fe=5e3,ge=1e4,he=3e5,be=4096,O=ie()==="win32",W=["amp","claude","codex","copilot","crush","cursor","droid","gemini","kimi","opencode","qwen"],ve={alternateCommands:[],buildArgs:(e,{dangerous:a})=>{const t=["-x",e];return a&&t.push("--dangerously-allow-all"),t},command:"amp",defaultModel:"",displayName:"Amp",envVariable:"AMP_PATH",sessionMarkers:[{confidence:"definite",variable:"AMP_CURRENT_THREAD_ID"},{confidence:"definite",equals:"amp",variable:"AGENT"}],supportsMaxTokens:!1,supportsModel:!1},ye={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=[];return a&&n.push("--dangerously-skip-permissions"),t&&n.push("--model",t),n.push("--output-format","text","-p",e),n},command:"claude",defaultModel:"",displayName:"Claude Code",envVariable:"CLAUDE_PATH",sessionMarkers:[{confidence:"definite",variable:"CLAUDECODE"},{confidence:"definite",variable:"CLAUDE_CODE"}],supportsMaxTokens:!1,supportsModel:!0},Ee={alternateCommands:["openai-codex"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["exec"];return t&&n.push("--model",t),a&&n.push("--dangerously-bypass-approvals-and-sandbox"),n.push("--",e),n},command:"codex",defaultModel:"",displayName:"Codex",envVariable:"CODEX_PATH",sessionMarkers:[{confidence:"definite",variable:"CODEX_SANDBOX"},{confidence:"definite",variable:"CODEX_THREAD_ID"},{confidence:"definite",variable:"CODEX_CI"}],supportsMaxTokens:!1,supportsModel:!0},Ae={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p",e];return a&&n.push("--allow-all-tools"),t&&n.push("--model",t),n},command:"copilot",defaultModel:"",displayName:"GitHub Copilot CLI",envVariable:"COPILOT_PATH",sessionMarkers:[{confidence:"definite",variable:"COPILOT_MODEL"},{confidence:"definite",variable:"COPILOT_ALLOW_ALL"},{confidence:"definite",variable:"COPILOT_GITHUB_TOKEN"},{agent:"GitHub Copilot in VS Code",confidence:"definite",label:"TERM_PROGRAM+GIT_PAGER",match:{all:[["TERM_PROGRAM","vscode"],["GIT_PAGER","cat"]],none:["CURSOR_TRACE_ID"]}}],supportsMaxTokens:!1,supportsModel:!0},ke={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=["run"];return a&&n.push("--yolo"),t&&n.push("-m",t),n.push("--",e),n},command:"crush",defaultModel:"",displayName:"Crush",envVariable:"CRUSH_PATH",sessionMarkers:[{confidence:"definite",equals:"1",variable:"CRUSH"},{confidence:"definite",equals:"crush",variable:"AGENT"}],supportsMaxTokens:!1,supportsModel:!0},Re={alternateCommands:["cursor"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p"];return a&&n.push("--force"),n.push("--output-format","text"),t&&n.push("--model",t),n.push("--",e),n},command:"agent",defaultModel:"",displayName:"Cursor Agent",envVariable:"CURSOR_PATH",sessionMarkers:[{confidence:"definite",variable:"CURSOR_AGENT"},{confidence:"definite",label:"CURSOR_TRACE_ID+PAGER",match:{all:["CURSOR_TRACE_ID",["PAGER","head -n 10000 | cat"]]}},{agent:"Cursor editor",confidence:"ambient",variable:"CURSOR_TRACE_ID"}],supportsMaxTokens:!1,supportsModel:!0},_e={alternateCommands:[],buildArgs:(e,{dangerous:a,model:t})=>{const n=[];return a&&n.push("--skip-permissions-unsafe"),n.push("-o","text"),t&&n.push("-m",t),n.push("--",e),n},command:"droid",defaultModel:"",displayName:"Droid",envVariable:"DROID_PATH",sessionMarkers:[],supportsMaxTokens:!1,supportsModel:!0},we={alternateCommands:["gemini-cli"],buildArgs:(e,{dangerous:a,maxTokens:t,model:n})=>{const r=[];return a||r.push("--sandbox"),n&&r.push("--model",n),r.push("--max-output-tokens",String(t),"-p",e),r},command:"gemini",defaultModel:"gemini-2.5-pro",displayName:"Gemini CLI",envVariable:"GEMINI_PATH",sessionMarkers:[{confidence:"definite",label:"GEMINI_CLI",match:{all:["GEMINI_CLI"],none:["QWEN_CODE"]}}],supportsMaxTokens:!0,supportsModel:!0},Me={alternateCommands:[],buildArgs:(e,{model:a})=>{const t=["--quiet","-p",e];return a&&t.push("-m",a),t},command:"kimi",defaultModel:"",displayName:"Kimi CLI",envVariable:"KIMI_PATH",sessionMarkers:[],supportsMaxTokens:!1,supportsModel:!0},Ce={alternateCommands:[],buildArgs:(e,{model:a})=>{const t=["run"];return a&&t.push("-m",a),t.push("--",e),t},command:"opencode",defaultModel:"",displayName:"opencode",envVariable:"OPENCODE_PATH",sessionMarkers:[{confidence:"definite",label:"OPENCODE",match:{any:["OPENCODE","OPENCODE_BIN_PATH","OPENCODE_SERVER","OPENCODE_APP_INFO","OPENCODE_MODES","OPENCODE_CLIENT"]}}],supportsMaxTokens:!1,supportsModel:!0},Te={alternateCommands:["qwen-code"],buildArgs:(e,{dangerous:a,model:t})=>{const n=["-p",e];return a&&n.push("--yolo"),n.push("-o","text"),t&&n.push("-m",t),n},command:"qwen",defaultModel:"",displayName:"Qwen Code",envVariable:"QWEN_PATH",sessionMarkers:[{confidence:"definite",equals:"1",variable:"QWEN_CODE"}],supportsMaxTokens:!1,supportsModel:!0},T={amp:ve,claude:ye,codex:Ee,copilot:Ae,crush:ke,cursor:Re,droid:_e,gemini:we,kimi:Me,opencode:Ce,qwen:Te};class A extends Error{exitCode;durationMs;provider;stderr;stdout;timedOut;aborted;constructor(a,t){super(a),this.name="AiRunError",this.provider=t.provider,this.exitCode=t.exitCode??null,this.durationMs=t.durationMs,this.stdout=t.stdout??"",this.stderr=t.stderr??"",this.timedOut=t.timedOut??!1,this.aborted=t.aborted??!1}}F(V);const Oe=[{agent:"Cline",confidence:"definite",variable:"CLINE_ACTIVE"},{agent:"Aider",confidence:"definite",label:"OR_APP_NAME|AIDER_API_KEY",match:{any:[["OR_APP_NAME","Aider"],"AIDER_API_KEY"]}},{agent:"Antigravity",confidence:"definite",label:"ANTIGRAVITY_AGENT",match:{any:["ANTIGRAVITY_AGENT","ANTIGRAVITY_PROJECT_ID"]}},{agent:"Augment",confidence:"definite",variable:"AUGMENT_AGENT"},{agent:"Windsurf",confidence:"definite",variable:"CODEIUM_EDITOR_APP_ROOT"},{agent:"Warp",confidence:"definite",variable:"OZ_RUN_ID"},{agent:"Pi",confidence:"definite",equals:"true",variable:"PI_CODING_AGENT"},{agent:"Jules",confidence:"definite",label:"HOME+USER",match:{all:[["HOME","/home/jules"],["USER","swebot"]]}},{agent:"Replit Agent",confidence:"definite",variable:"REPLIT_CLI"},{agent:"Replit Assistant",confidence:"definite",label:"REPL_ID+REPLIT_MODE",match:{all:["REPL_ID",["REPLIT_MODE","assistant"]]}},{agent:"Bolt.new",confidence:"definite",label:"SHELL+npm_config_yes",match:{all:[["SHELL","/bin/jsh"],"npm_config_yes"]}},{agent:"Zed",confidence:"definite",label:"TERM_PROGRAM+PAGER",match:{all:[["TERM_PROGRAM","zed"],["PAGER","cat"]]}},{agent:"Replit workspace",confidence:"ambient",label:"REPL_ID",match:{all:["REPL_ID"],none:[["REPLIT_MODE","assistant"]]}},{agent:"Bolt.new editor",confidence:"ambient",label:"SHELL",match:{all:[["SHELL","/bin/jsh"]],none:["npm_config_yes"]}},{agent:"Zed editor",confidence:"ambient",label:"TERM_PROGRAM",match:{all:[["TERM_PROGRAM","zed"]],none:[["PAGER","cat"]]}}],Ie={ambient:"interactive",definite:"agent"},K=(e,a,t)=>{const n={agent:e.agent??a,confidence:e.confidence,provider:t,type:e.type??Ie[e.confidence]};return"match"in e?{...n,label:e.label,match:e.match}:{...n,label:e.variable,match:e.equals===void 0?e.variable:[e.variable,e.equals]}},Se=(e,a)=>a.sessionMarkers.map(t=>K(t,a.displayName,e));[...Object.keys(T).flatMap(e=>Se(e,T[e])),...Oe.map(e=>K(e,e.agent,e.provider))].toSorted((e,a)=>e.confidence===a.confidence?0:e.confidence==="definite"?-1:1);F(V);const Pe=/\.(?:bat|cmd)$/i,J=e=>O&&Pe.test(e),P=e=>`"${e.replaceAll('"','""')}"`,q=e=>e==="~"||e.startsWith("~/")||O&&e.startsWith("~\\")?g(B(),e.slice(2)):e,Ne=e=>{try{const a=U(O?"where":"which",[e],{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:fe}).trim().split(`
2
2
  `)[0]?.trim();return a&&a.length>0?a:void 0}catch{return}},$e=e=>{const a=B();if(O){const t=process.env.APPDATA??"",n=process.env.LOCALAPPDATA??"",r=process.env.ProgramFiles??"";return[g(t,"npm",`${e}.cmd`),g(t,"npm",e),g(n,"Programs",e,`${e}.exe`),g(r,e,`${e}.exe`),g(a,".npm-global","bin",`${e}.cmd`)]}return[`/opt/homebrew/bin/${e}`,`/usr/local/bin/${e}`,g(a,".npm-global","bin",e),g(a,".local","bin",e),g(a,".cargo","bin",e)]},Le=e=>{try{const a=J(e),t=U(a?P(e):e,["--version"],{encoding:"utf8",shell:a,stdio:["pipe","pipe","pipe"],timeout:ge}),n=me.exec(t);return n?n[1]:void 0}catch{return}},Y=(e,a={})=>{const t=T[e],n={available:!1,name:e},r=a.version!==!1,i=s=>{if(r)return Le(s)},o=process.env[t.envVariable];if(o&&G(q(o))){const s=q(o);return{...n,available:!0,detectionMethod:"envvar",path:s,version:i(s)}}const d=[t.command,...t.alternateCommands];for(const s of d){const c=Ne(s);if(c)return{...n,available:!0,detectionMethod:"which",path:c,version:i(c)}}for(const s of d)for(const c of $e(s))if(G(c))return{...n,available:!0,detectionMethod:"known-path",path:c,version:i(c)};return n},De=(e={})=>W.map(a=>Y(a,e)),xe=(e={})=>De(e).filter(a=>a.available),Ge=(e,a,t={})=>{const n=T[e],r=t.model??n.defaultModel,i=t.maxTokens!==void 0&&Number.isFinite(t.maxTokens)?t.maxTokens:be;return n.buildArgs(a,{dangerous:t.dangerous===!0,maxTokens:i,model:r})},je=async(e,a,t={})=>{if(!e.available||!e.path)throw new A(`AI provider "${e.name}" is not available.`,{durationMs:0,provider:e.name});const n=Ge(e.name,a,t),r=t.timeoutMs!==void 0&&Number.isFinite(t.timeoutMs)?t.timeoutMs:he,i=e.path,o=J(i),d=Date.now();if(t.signal?.aborted)throw new A(`${e.name} CLI run was aborted.`,{aborted:!0,durationMs:0,provider:e.name});return new Promise((s,c)=>{const m={cwd:t.cwd,env:{...process.env,...t.env,FORCE_COLOR:"0",NO_COLOR:"1"},shell:o,stdio:["pipe","pipe","pipe"]},p=o?n.map(l=>P(l)):n,f=re(o?P(i):i,p,m);f.stdin?.end();let h="",b="",y=!1;const N=new j("utf8"),$=new j("utf8");let w,L,M;const I=()=>{clearTimeout(L),M&&t.signal?.removeEventListener("abort",M)},ee=()=>{f.kill("SIGKILL")},D=l=>{if(y)return;y=!0,f.kill("SIGTERM"),w=setTimeout(ee,5e3),w.unref(),I();const u=Date.now()-d,R=l?new A(`${e.name} CLI run was aborted.`,{aborted:!0,durationMs:u,provider:e.name,stderr:b,stdout:h}):new A(`${e.name} CLI timed out after ${String(r)}ms`,{durationMs:u,provider:e.name,stderr:b,stdout:h,timedOut:!0});c(R)};L=setTimeout(D,r,!1),M=()=>{D(!0)},t.signal?.addEventListener("abort",M,{once:!0}),f.stdout?.on("data",l=>{const u=N.write(l);u&&(h+=u,t.onStdout?.(u))}),f.stderr?.on("data",l=>{const u=$.write(l);u&&(b+=u,t.onStderr?.(u))}),f.on("close",l=>{clearTimeout(w);const u=N.end();u&&(h+=u,t.onStdout?.(u));const R=$.end();if(R&&(b+=R,t.onStderr?.(R)),y)return;y=!0,I();const x=Date.now()-d;l===0?s({durationMs:x,exitCode:l,provider:e.name,stderr:b,stdout:h}):c(new A(`${e.name} CLI exited with code ${String(l)}: ${b||h}`,{durationMs:x,exitCode:l,provider:e.name,stderr:b,stdout:h}))}),f.on("error",l=>{clearTimeout(w),!y&&(y=!0,I(),c(new A(`Failed to spawn ${e.name} CLI: ${l.message}`,{durationMs:Date.now()-d,provider:e.name,stderr:b,stdout:h})))})})},qe=12e4,He=2,Ve=1e3,Ue=e=>new Promise(a=>{setTimeout(a,e)}),z=async(e,a,t=He)=>{let n;for(let r=0;r<=t;r+=1)try{return(await je(e,a,{timeoutMs:qe})).stdout}catch(i){if(n=i instanceof Error?i:new Error(String(i)),n.message.includes("timed out"))throw n;if(r<t){const o=Ve*2**r;await Ue(o)}}throw n??new Error("AI request failed after retries")},Be={amp:30,claude:80,codex:60,copilot:50,crush:35,cursor:40,droid:20,gemini:100,kimi:25,opencode:35,qwen:30},Fe=e=>{if(e?.provider){if(!W.includes(e.provider))return;const n=Y(e.provider);return n.available?n:void 0}const a=xe();if(a.length===0)return;const t={...Be,...e?.priority};return a.toSorted((n,r)=>(t[r.name]??0)-(t[n.name]??0))[0]},We=new Set(["defer","review","skip","update"]),Ke=new Set(["critical","high","low","medium"]),Je=new Set(["high","low","medium"]),Ye=50,S=30,ze=e=>e.map(a=>{const t=a.vulnerabilities&&a.vulnerabilities.length>0?` [VULNERABILITIES: ${a.vulnerabilities.map(r=>`${r.severity} ${r.id}`).join(", ")}]`:"";let n="";if(a.socketReport){const r=Math.round(a.socketReport.score.overall*100),i=[`score:${String(r)}%`];if(a.socketReport.alerts.length>0){const o={};for(const s of a.socketReport.alerts)o[s.severity]=(o[s.severity]??0)+1;const d=Object.entries(o).map(([s,c])=>`${String(c)} ${s}`).join(", ");i.push(`alerts: ${d}`)}i.push(`supply-chain:${String(Math.round(a.socketReport.score.supplyChain*100))}%`),i.push(`quality:${String(Math.round(a.socketReport.score.quality*100))}%`),n=` [SOCKET.DEV: ${i.join(", ")}]`}return`- ${a.packageName}: ${a.currentRange} → ${a.newRange} (${a.updateType})${t}${n}`}).join(`
3
3
  `),C=`Respond ONLY with valid JSON in this exact structure:
4
4
  {
@@ -1,4 +1,4 @@
1
- import{createRequire as S}from"node:module";import{readLastRunSummary as T}from"@visulima/task-runner";import{a as j}from"./failure-log-CTneNcio.js";import{c as w,d as P,g as k,r as C,O as D,B as F,N as _}from"../packem_chunks/cli-main.js";import{c as N}from"./en-D3CfXlO7.js";import{v as y,P as v,w as B,b as E}from"./index-uBVnF4ji.js";import{R as M,r as q,c as H}from"./ai-analysis-bGCAc1jR.js";let $;const I=t=>($??=S(import.meta.url))(t),d=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,O=t=>{if(typeof d<"u"&&d.versions&&d.versions.node){const[e,a]=d.versions.node.split(".").map(Number);if(e>22||e===22&&a>=3||e===20&&a>=16)return d.getBuiltinModule(t)}return I(t)},{readFile:R,writeFile:A}=O("node:fs/promises"),W=32*1024,L=(t,e)=>{if(t.length<=e)return t;const a=t.slice(-e),o=t.length-a.length;return`[…${String(o)} bytes truncated from head…]
1
+ import{createRequire as S}from"node:module";import{readLastRunSummary as T}from"@visulima/task-runner";import{a as j}from"./failure-log-DyhWPqno.js";import{c as w,d as P,g as k,r as C,O as D,B as F,N as _}from"../packem_chunks/cli-main.js";import{c as N}from"./en-BDYMmM2_.js";import{v as y,P as v,w as B,b as E}from"./index-BLtnel38.js";import{R as M,r as q,c as H}from"./ai-analysis-DikAj6rX.js";let $;const I=t=>($??=S(import.meta.url))(t),d=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,O=t=>{if(typeof d<"u"&&d.versions&&d.versions.node){const[e,a]=d.versions.node.split(".").map(Number);if(e>22||e===22&&a>=3||e===20&&a>=16)return d.getBuiltinModule(t)}return I(t)},{readFile:R,writeFile:A}=O("node:fs/promises"),W=32*1024,L=(t,e)=>{if(t.length<=e)return t;const a=t.slice(-e),o=t.length-a.length;return`[…${String(o)} bytes truncated from head…]
2
2
  ${a}`},Y=async(t,e)=>e===void 0?T(t,{dataDirectory:N(t)}):C(t,e),dt=async(t,e,a={})=>{const o=a.terminalOutputLimit??W,[s,n]=await Promise.all([j(t,e),Y(t,a.runId)]),i=n?w(n,e):void 0;if(!s&&!i)return;let r,c;if(n&&i){const h=await P(t,n.id),p=h?w(h,e):void 0;r=k(i.hashDetails,p?.hashDetails),c=h?.id}const u=s?.terminalOutput??"";return{command:s?.command??void 0,cwd:s?.cwd??void 0,dependencies:i?.dependencies??[],duration:i?.duration,exitCode:s?.exitCode??i?.exitCode,hash:i?.hash??s?.hash,hashDetails:i?.hashDetails,hashDiff:r,previousRunId:c,project:i?.target.project,runId:n?.id??s?.runId,status:s?.status??(i?J(i):void 0),target:i?.target.target,taskId:e,terminalOutput:L(u,o),terminalOutputCaptured:!!s,timestamp:s?.timestamp??i?.endTime??i?.startTime}},J=t=>{if(t.exitCode!==void 0&&t.exitCode!==0)return"failure";switch(t.cacheStatus){case"HIT":return"local-cache";case"REMOTE_HIT":return"remote-cache";case"SKIPPED":return"skipped";default:return t.exitCode===0?"success":void 0}},K=3600*1e3,x=80,U=new Set(["high","low","medium"]),G=()=>`You are an expert software engineer helping fix a failing build/test/lint task.
3
3
 
4
4
  You will be given:
@@ -1,4 +1,4 @@
1
- import{createRequire as T}from"node:module";import{l as P}from"./target-options-7XcbqGDe.js";import{w as q}from"./index-uBVnF4ji.js";let j;const E=e=>(j??=T(import.meta.url))(e),y=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,h=e=>{if(typeof y<"u"&&y.versions&&y.versions.node){const[r,t]=y.versions.node.split(".").map(Number);if(r>22||r===22&&t>=3||r===20&&t>=16)return y.getBuiltinModule(e)}return E(e)},{createRequire:L}=h("node:module"),{pathToFileURL:R}=h("node:url"),m=["temporal","urlpattern","reporterror","regexp-escape","promise-try","float16array","error-iserror","navigator-locks"],F=e=>{const r=e.trim().toLowerCase();return r===""||r==="all"||r==="1"||r==="true"?m:r.split(",").map(t=>t.trim()).filter(t=>m.includes(t))},v=async(e,r)=>{try{const t=L(q(r,"__vis_polyfill_resolver__.js")).resolve(e);return await import(R(t).href)}catch{return}},x=async e=>{if(globalThis.Temporal!==void 0)return;const r=await v("@js-temporal/polyfill",e);r?.Temporal===void 0?process.stderr.write(`vis: --polyfill temporal requested but @js-temporal/polyfill is not installed in this project.
1
+ import{createRequire as T}from"node:module";import{l as P}from"./target-options-3t4-2F-F.js";import{w as q}from"./index-BLtnel38.js";let j;const E=e=>(j??=T(import.meta.url))(e),y=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,h=e=>{if(typeof y<"u"&&y.versions&&y.versions.node){const[r,t]=y.versions.node.split(".").map(Number);if(r>22||r===22&&t>=3||r===20&&t>=16)return y.getBuiltinModule(e)}return E(e)},{createRequire:L}=h("node:module"),{pathToFileURL:R}=h("node:url"),m=["temporal","urlpattern","reporterror","regexp-escape","promise-try","float16array","error-iserror","navigator-locks"],F=e=>{const r=e.trim().toLowerCase();return r===""||r==="all"||r==="1"||r==="true"?m:r.split(",").map(t=>t.trim()).filter(t=>m.includes(t))},v=async(e,r)=>{try{const t=L(q(r,"__vis_polyfill_resolver__.js")).resolve(e);return await import(R(t).href)}catch{return}},x=async e=>{if(globalThis.Temporal!==void 0)return;const r=await v("@js-temporal/polyfill",e);r?.Temporal===void 0?process.stderr.write(`vis: --polyfill temporal requested but @js-temporal/polyfill is not installed in this project.
2
2
  `):globalThis.Temporal=r.Temporal},O=async e=>{if(globalThis.URLPattern!==void 0)return;const r=await v("urlpattern-polyfill",e);r?.URLPattern===void 0?process.stderr.write(`vis: --polyfill urlpattern requested but urlpattern-polyfill is not installed in this project.
3
3
  `):globalThis.URLPattern=r.URLPattern},k=()=>{typeof globalThis.reportError!="function"&&(globalThis.reportError=e=>{const r=e instanceof Error?e.stack??`${e.name}: ${e.message}`:String(e);process.stderr.write(`${r}
4
4
  `)})},I=()=>{if(typeof RegExp.escape=="function")return;const e=new Set(String.raw`^$\.*+?()[]{}|/`),r={"\f":String.raw`\f`,"\n":String.raw`\n`,"\r":String.raw`\r`," ":String.raw`\t`,"\v":String.raw`\v`},t=/\s/u,o=n=>n<=255?String.raw`\x${n.toString(16).padStart(2,"0")}`:String.raw`\u${n.toString(16).padStart(4,"0")}`;RegExp.escape=n=>{if(typeof n!="string")throw new TypeError("RegExp.escape requires a string argument");let a="",i=!0;for(const s of n){const c=s.codePointAt(0);i&&/[\dA-Za-z]/u.test(s)?a+=o(c):e.has(s)?a+=`\\${s}`:r[s]!==void 0?a+=r[s]:t.test(s)?a+=o(c):a+=s,i=!1}return a}},A=()=>{typeof Promise.try!="function"&&(Promise.try=function(e,...r){const t=typeof this=="function"?this:Promise;return new t((o,n)=>{try{o(e(...r))}catch(a){n(a)}})})},w=e=>{const r=new Float32Array(1),t=new Uint32Array(r.buffer);r[0]=e;const o=t[0],n=o>>>16&32768,a=o>>>23&255,i=o&8388607;if(a===255)return i===0?n|31744:n|32256;const s=a-127+15;if(s>=31)return n|31744;if(s<=0){if(s<-10)return n;const l=i|8388608,p=14-s;let d=l>>p;const g=l&(1<<p)-1,u=1<<p-1;return(g>u||g===u&&(d&1)===1)&&(d+=1),n|d}let c=s<<10|i>>13;const f=i&8191;return(f>4096||f===4096&&(c&1)===1)&&(c+=1),n|c},b=e=>{const r=e&32768?-1:1,t=e>>10&31,o=e&1023;return t===0?r*o*2**-24:t===31?o?Number.NaN:r*Number.POSITIVE_INFINITY:r*(1+o/1024)*2**(t-15)},N=()=>{const e=Math;typeof e.f16round!="function"&&(e.f16round=t=>b(w(t)));const r=DataView.prototype;typeof r.getFloat16!="function"&&(r.getFloat16=function(t,o){return b(this.getUint16(t,o))}),typeof r.setFloat16!="function"&&(r.setFloat16=function(t,o,n){this.setUint16(t,w(o),n)})},U=()=>{typeof Error.isError!="function"&&(Error.isError=e=>typeof e=="object"&&e!==null&&Object.prototype.toString.call(e)==="[object Error]")},$=()=>{const e=globalThis,r=e.navigator;if(r?.locks!==void 0)return;const t=new Map,o=new Set,n=i=>i.reason??(typeof DOMException=="function"?new DOMException("The lock request is aborted","AbortError"):Object.assign(new Error("The lock request is aborted"),{name:"AbortError"})),a={request:async(i,s,c)=>{const f=typeof s!="function",l=(f?s:{})??{},p=f?c:s,d=l.mode==="shared"?"shared":"exclusive";if(l.signal?.aborted)throw n(l.signal);if(l.ifAvailable===!0&&o.has(i))return p(null);const g=t.get(i)??Promise.resolve();let u;const _=new Promise(S=>{u=S});if(t.set(i,g.then(()=>_)),await g.catch(()=>{}),l.signal?.aborted)throw u(),n(l.signal);o.add(i);try{return await p({mode:d,name:i})}finally{o.delete(i),u()}}};r===void 0?Object.defineProperty(e,"navigator",{configurable:!0,enumerable:!0,value:{locks:a},writable:!0}):Object.defineProperty(r,"locks",{configurable:!0,enumerable:!0,value:a})},M={"error-iserror":U,float16array:N,"navigator-locks":$,"promise-try":A,"regexp-escape":I,reporterror:k},V=async(e,r=process.cwd())=>{const t=F(e);await Promise.all(t.map(async o=>{o==="temporal"?await x(r):o==="urlpattern"?await O(r):M[o]?.()}))},z=async e=>{for(const[r,t]of Object.entries(P(e,!0)))process.env[r]===void 0&&(process.env[r]=t);process.env.VIS_POLYFILL!==void 0&&await V(process.env.VIS_POLYFILL,e)};export{z as p};
@@ -1 +1 @@
1
- import{createRequire as _}from"node:module";import{c as T}from"./compile-cache-B_Vf_WxT.js";import{t as w,h as R,a as $,u as m,c as M,m as S}from"./package-version-C47v64aB.js";import{I as j}from"./index-BWl4DbMp.js";let g;const x=e=>(g??=_(import.meta.url))(e),r=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,b=e=>{if(typeof r<"u"&&r.versions&&r.versions.node){const[s,o]=r.versions.node.split(".").map(Number);if(s>22||s===22&&o>=3||s===20&&o>=16)return r.getBuiltinModule(e)}return x(e)},{createRequire:y}=b("node:module");let O;const q=e=>(O??=y(import.meta.url))(e),t=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=e=>{if(typeof t<"u"&&t.versions&&t.versions.node){const[s,o]=t.versions.node.split(".").map(Number);if(s>22||s===22&&o>=3||s===20&&o>=16)return t.getBuiltinModule(e)}return q(e)},{execFileSync:N}=f("node:child_process"),{totalmem:z}=f("node:os"),C=/--max-old-space-size=(\d+)/,B=/--max-semi-space-size=(\d+)/,E=e=>Math.floor(z()/1024/1024*e),I=e=>e<=512?4:e<=1024?8:e<=2048?16:e<=4096?32:e<=8192?64:Math.floor(Math.log2(e))*8,d=(e,s)=>{for(const o of s){const n=e.exec(o);if(n)return Number.parseInt(n[1],10)}},L=e=>{const o=[...M()],n=[...w()],a=d(C,o),p=d(B,o);if(a!==void 0&&p!==void 0)return;const l=a??E(.75),h=p??I(l),c=[];if(a===void 0&&c.push(`--max-old-space-size=${String(l)}`),p===void 0&&c.push(`--max-semi-space-size=${String(h)}`),c.length!==0)try{N(R(),[...c,...o,...n.slice(1)],{env:$(),stdio:"inherit"}),m(0)}catch(v){const u=v.status;m(typeof u=="number"?u:1)}},V=()=>{process.env.VIS_VERSION=S()},A=e=>{!process.stdout.isTTY||j||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${e}\x07`)},F=new Set(["","--help","--version","-h","-v","completion","dlx","exec","x"]),i=process.argv[2]??"";!F.has(i)&&!process.argv.includes("--help")&&!process.argv.includes("-h")&&L();process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");V();T();(async()=>{if(i==="__pm-shim"){const{dispatchShim:s}=await import("../packem_chunks/dispatch.js");s(process.argv[3]??"",process.argv.slice(4));return}if(i==="x"){const{runLeanX:s}=await import("../packem_chunks/lean.js");await s(process.argv.slice(3));return}if(i==="exec"||i==="dlx"){const{runExecCli:s}=await import("../packem_chunks/cli-exec.js");await s();return}const{runCli:e}=await import("../packem_chunks/cli-main.js").then(s=>s.ap);await e()})();export{A as s};
1
+ import{createRequire as _}from"node:module";import{c as T}from"./compile-cache-B_Vf_WxT.js";import{t as w,h as R,a as $,u as m,c as M,m as S}from"./package-version-BNRJ3o9C.js";import{I as j}from"./index-BWl4DbMp.js";let g;const x=e=>(g??=_(import.meta.url))(e),r=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,b=e=>{if(typeof r<"u"&&r.versions&&r.versions.node){const[s,o]=r.versions.node.split(".").map(Number);if(s>22||s===22&&o>=3||s===20&&o>=16)return r.getBuiltinModule(e)}return x(e)},{createRequire:y}=b("node:module");let O;const q=e=>(O??=y(import.meta.url))(e),t=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=e=>{if(typeof t<"u"&&t.versions&&t.versions.node){const[s,o]=t.versions.node.split(".").map(Number);if(s>22||s===22&&o>=3||s===20&&o>=16)return t.getBuiltinModule(e)}return q(e)},{execFileSync:N}=f("node:child_process"),{totalmem:z}=f("node:os"),C=/--max-old-space-size=(\d+)/,B=/--max-semi-space-size=(\d+)/,E=e=>Math.floor(z()/1024/1024*e),I=e=>e<=512?4:e<=1024?8:e<=2048?16:e<=4096?32:e<=8192?64:Math.floor(Math.log2(e))*8,d=(e,s)=>{for(const o of s){const n=e.exec(o);if(n)return Number.parseInt(n[1],10)}},L=e=>{const o=[...M()],n=[...w()],a=d(C,o),p=d(B,o);if(a!==void 0&&p!==void 0)return;const l=a??E(.75),h=p??I(l),c=[];if(a===void 0&&c.push(`--max-old-space-size=${String(l)}`),p===void 0&&c.push(`--max-semi-space-size=${String(h)}`),c.length!==0)try{N(R(),[...c,...o,...n.slice(1)],{env:$(),stdio:"inherit"}),m(0)}catch(v){const u=v.status;m(typeof u=="number"?u:1)}},V=()=>{process.env.VIS_VERSION=S()},A=e=>{!process.stdout.isTTY||j||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${e}\x07`)},F=new Set(["","--help","--version","-h","-v","completion","dlx","exec","x"]),i=process.argv[2]??"";!F.has(i)&&!process.argv.includes("--help")&&!process.argv.includes("-h")&&L();process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");V();T();(async()=>{if(i==="__pm-shim"){const{dispatchShim:s}=await import("../packem_chunks/dispatch.js");s(process.argv[3]??"",process.argv.slice(4));return}if(i==="x"){const{runLeanX:s}=await import("../packem_chunks/lean.js");await s(process.argv.slice(3));return}if(i==="exec"||i==="dlx"){const{runExecCli:s}=await import("../packem_chunks/cli-exec.js");await s();return}const{runCli:e}=await import("../packem_chunks/cli-main.js").then(s=>s.ap);await e()})();export{A as s};
@@ -1 +1 @@
1
- import{createRequire as b}from"node:module";import{w as m,l as g}from"./index-uBVnF4ji.js";import{a as M}from"./readJsonSync-DweZd5ZA-0eZh9sGm.js";let $;const w=e=>($??=b(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,k=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[s,n]=_.versions.node.split(".").map(Number);if(s>22||s===22&&n>=3||s===20&&n>=16)return _.getBuiltinModule(e)}return w(e)},{readdirSync:y,statSync:q}=k("node:fs"),x=["preinstall","install","postinstall","prepare"],B=e=>{const s=m(e,"node_modules");if(!g(s))return[];const n=new Map,o=(f,p="")=>{let u;try{u=y(f)}catch{return}for(const r of u){const i=m(f,r);if(r.startsWith("@")){o(i,`${r}/`);continue}if(r===".pnpm"&&p===""){let l;try{l=y(i)}catch{continue}for(const a of l){const c=m(i,a,"node_modules");g(c)&&o(c)}continue}if(r.startsWith("."))continue;const h=p+r,t=m(i,"package.json");try{if(!q(i).isDirectory()||!g(t))continue;const l=M(t),a=l.scripts??{},c=x.filter(v=>a[v]);!a.preinstall&&!a.install&&!a.postinstall&&g(m(i,"binding.gyp"))&&c.push("install (binding.gyp)"),c.length>0&&!n.has(h)&&n.set(h,{directory:i,hooks:c,name:h,version:typeof l.version=="string"?l.version:void 0});const d=m(i,"node_modules");g(d)&&o(d)}catch{}}};return o(s),[...n.values()]},j=e=>{const s=e.startsWith("@"),n=e.indexOf("@",s?1:0);return n===-1?{name:e}:{name:e.slice(0,n),version:e.slice(n+1)}},O=(e,s,n)=>{for(const[o,f]of Object.entries(s)){if(!f)continue;if(o.endsWith("@*")){if(o.slice(0,-2)===e.name)return!0;continue}if(o.endsWith("*")){if(e.name.startsWith(o.slice(0,-1)))return!0;continue}const{name:p,version:u}=j(o);if(p===e.name&&(!n||u===void 0||e.version===u))return!0}return!1},R=(e,s,n={})=>{const o=n.pinVersions===!0,f=B(e),p=[],u=[],r=new Map(f.map(t=>[t.name,t]));for(const t of f)O(t,s,o)?u.push(t):p.push(t);const i=[],h=[];for(const[t,l]of Object.entries(s)){if(!l)continue;if(t.endsWith("@*")){const v=t.slice(0,-2);r.has(v)||i.push(t);continue}if(t.endsWith("*")){const v=t.slice(0,-1);[...r.keys()].some(W=>W.startsWith(v))||i.push(t);continue}const{name:a,version:c}=j(t),d=r.get(a);if(!d){i.push(t);continue}o&&c!==void 0&&c!=="*"&&d.version&&d.version!==c&&h.push({from:t,to:`${a}@${d.version}`})}return{excess:i,installed:u,unapproved:p,versionDrift:h}},E=(e,s)=>R(e,s).unapproved.map(n=>`${n.name} (${n.hooks.join(", ")})`);export{R as W,E as w};
1
+ import{createRequire as b}from"node:module";import{w as m,l as g}from"./index-BLtnel38.js";import{a as M}from"./readJsonSync-DweZd5ZA-CtrDlqpb.js";let $;const w=e=>($??=b(import.meta.url))(e),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,k=e=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[s,n]=_.versions.node.split(".").map(Number);if(s>22||s===22&&n>=3||s===20&&n>=16)return _.getBuiltinModule(e)}return w(e)},{readdirSync:y,statSync:q}=k("node:fs"),x=["preinstall","install","postinstall","prepare"],B=e=>{const s=m(e,"node_modules");if(!g(s))return[];const n=new Map,o=(f,p="")=>{let u;try{u=y(f)}catch{return}for(const r of u){const i=m(f,r);if(r.startsWith("@")){o(i,`${r}/`);continue}if(r===".pnpm"&&p===""){let l;try{l=y(i)}catch{continue}for(const a of l){const c=m(i,a,"node_modules");g(c)&&o(c)}continue}if(r.startsWith("."))continue;const h=p+r,t=m(i,"package.json");try{if(!q(i).isDirectory()||!g(t))continue;const l=M(t),a=l.scripts??{},c=x.filter(v=>a[v]);!a.preinstall&&!a.install&&!a.postinstall&&g(m(i,"binding.gyp"))&&c.push("install (binding.gyp)"),c.length>0&&!n.has(h)&&n.set(h,{directory:i,hooks:c,name:h,version:typeof l.version=="string"?l.version:void 0});const d=m(i,"node_modules");g(d)&&o(d)}catch{}}};return o(s),[...n.values()]},j=e=>{const s=e.startsWith("@"),n=e.indexOf("@",s?1:0);return n===-1?{name:e}:{name:e.slice(0,n),version:e.slice(n+1)}},O=(e,s,n)=>{for(const[o,f]of Object.entries(s)){if(!f)continue;if(o.endsWith("@*")){if(o.slice(0,-2)===e.name)return!0;continue}if(o.endsWith("*")){if(e.name.startsWith(o.slice(0,-1)))return!0;continue}const{name:p,version:u}=j(o);if(p===e.name&&(!n||u===void 0||e.version===u))return!0}return!1},R=(e,s,n={})=>{const o=n.pinVersions===!0,f=B(e),p=[],u=[],r=new Map(f.map(t=>[t.name,t]));for(const t of f)O(t,s,o)?u.push(t):p.push(t);const i=[],h=[];for(const[t,l]of Object.entries(s)){if(!l)continue;if(t.endsWith("@*")){const v=t.slice(0,-2);r.has(v)||i.push(t);continue}if(t.endsWith("*")){const v=t.slice(0,-1);[...r.keys()].some(W=>W.startsWith(v))||i.push(t);continue}const{name:a,version:c}=j(t),d=r.get(a);if(!d){i.push(t);continue}o&&c!==void 0&&c!=="*"&&d.version&&d.version!==c&&h.push({from:t,to:`${a}@${d.version}`})}return{excess:i,installed:u,unapproved:p,versionDrift:h}},E=(e,s)=>R(e,s).unapproved.map(n=>`${n.name} (${n.hooks.join(", ")})`);export{R as W,E as w};