@visulima/vis 1.0.0-alpha.2 → 1.0.0-alpha.4

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 (103) hide show
  1. package/CHANGELOG.md +136 -14
  2. package/LICENSE.md +27 -0
  3. package/README.md +15 -9
  4. package/dist/audit-config.d.ts +24 -0
  5. package/dist/bin.js +777 -70
  6. package/dist/catalog.d.ts +16 -8
  7. package/dist/commands/add.d.ts +3 -0
  8. package/dist/commands/approve-builds.d.ts +3 -0
  9. package/dist/commands/audit.d.ts +23 -0
  10. package/dist/commands/clean.d.ts +3 -0
  11. package/dist/commands/create/discovery.d.ts +42 -0
  12. package/dist/commands/create/index.d.ts +13 -0
  13. package/dist/commands/create/prompts.d.ts +31 -0
  14. package/dist/commands/create/random-name.d.ts +15 -0
  15. package/dist/commands/create/templates/builtin.d.ts +15 -0
  16. package/dist/commands/create/templates/generator.d.ts +14 -0
  17. package/dist/commands/create/templates/index.d.ts +13 -0
  18. package/dist/commands/create/templates/monorepo.d.ts +16 -0
  19. package/dist/commands/create/templates/remote.d.ts +41 -0
  20. package/dist/commands/create/templates/types.d.ts +46 -0
  21. package/dist/commands/create/utils.d.ts +42 -0
  22. package/dist/commands/dedupe.d.ts +3 -0
  23. package/dist/commands/devcontainer.d.ts +3 -0
  24. package/dist/commands/dlx.d.ts +3 -0
  25. package/dist/commands/doctor.d.ts +15 -0
  26. package/dist/commands/exec.d.ts +3 -0
  27. package/dist/commands/implode.d.ts +3 -0
  28. package/dist/commands/init.d.ts +14 -0
  29. package/dist/commands/install.d.ts +3 -0
  30. package/dist/commands/link.d.ts +3 -0
  31. package/dist/commands/optimize.d.ts +38 -0
  32. package/dist/commands/pm.d.ts +3 -0
  33. package/dist/commands/remove.d.ts +3 -0
  34. package/dist/commands/sort-package-json.d.ts +3 -0
  35. package/dist/commands/unlink.d.ts +3 -0
  36. package/dist/commands/upgrade.d.ts +3 -0
  37. package/dist/commands/why.d.ts +3 -0
  38. package/dist/config.d.ts +38 -11
  39. package/dist/config.js +1 -1
  40. package/dist/native-binding.d.ts +151 -0
  41. package/dist/output.d.ts +40 -0
  42. package/dist/overrides.d.ts +82 -0
  43. package/dist/plugins/config-loader.d.ts +3 -0
  44. package/dist/plugins/post-command.d.ts +3 -0
  45. package/dist/plugins/security-enforcement.d.ts +3 -0
  46. package/dist/pm-runner.d.ts +23 -0
  47. package/dist/security.d.ts +64 -0
  48. package/dist/socket-security.d.ts +129 -0
  49. package/dist/tips.d.ts +41 -0
  50. package/dist/tui/components/CheckProgressApp.d.ts +6 -0
  51. package/dist/tui/components/CommandSummary.d.ts +17 -0
  52. package/dist/tui/components/Header.d.ts +13 -0
  53. package/dist/tui/components/OutputPanel.d.ts +16 -0
  54. package/dist/tui/components/QuitDialog.d.ts +15 -0
  55. package/dist/tui/components/TaskListPanel.d.ts +19 -0
  56. package/dist/tui/components/TaskRow.d.ts +12 -0
  57. package/dist/tui/components/TaskStore.d.ts +80 -0
  58. package/dist/tui/components/VisTaskRunnerApp.d.ts +17 -0
  59. package/dist/tui/components/devcontainer/DevcontainerStore.d.ts +66 -0
  60. package/dist/tui/components/devcontainer/VisDevcontainerApp.d.ts +9 -0
  61. package/dist/tui/components/devcontainer/catalogs/extensions.d.ts +8 -0
  62. package/dist/tui/components/devcontainer/catalogs/features.d.ts +8 -0
  63. package/dist/tui/components/devcontainer/catalogs/filters.d.ts +4 -0
  64. package/dist/tui/components/devcontainer/catalogs/mount-suggestions.d.ts +19 -0
  65. package/dist/tui/components/devcontainer/catalogs/templates.d.ts +8 -0
  66. package/dist/tui/components/devcontainer/devcontainer-io.d.ts +14 -0
  67. package/dist/tui/components/devcontainer/sections/DockerComposeSection.d.ts +11 -0
  68. package/dist/tui/components/devcontainer/sections/EnvironmentSection.d.ts +16 -0
  69. package/dist/tui/components/devcontainer/sections/ExtensionsSection.d.ts +11 -0
  70. package/dist/tui/components/devcontainer/sections/FeaturesSection.d.ts +11 -0
  71. package/dist/tui/components/devcontainer/sections/GeneralSection.d.ts +12 -0
  72. package/dist/tui/components/devcontainer/sections/LifecycleSection.d.ts +13 -0
  73. package/dist/tui/components/devcontainer/sections/MountsSection.d.ts +16 -0
  74. package/dist/tui/components/devcontainer/sections/PortsSection.d.ts +10 -0
  75. package/dist/tui/components/devcontainer/sections/PreviewPanel.d.ts +11 -0
  76. package/dist/tui/components/devcontainer/types.d.ts +53 -0
  77. package/dist/tui/components/devcontainer/validate.d.ts +16 -0
  78. package/dist/tui/components/graph/GraphStore.d.ts +42 -0
  79. package/dist/tui/components/graph/ProjectDetailPanel.d.ts +10 -0
  80. package/dist/tui/components/graph/ProjectListPanel.d.ts +20 -0
  81. package/dist/tui/components/graph/VisGraphApp.d.ts +8 -0
  82. package/dist/tui/components/optimize/OptimizeDetailPanel.d.ts +9 -0
  83. package/dist/tui/components/optimize/OptimizeListPanel.d.ts +16 -0
  84. package/dist/tui/components/optimize/OptimizeStore.d.ts +50 -0
  85. package/dist/tui/components/optimize/VisOptimizeApp.d.ts +8 -0
  86. package/dist/tui/components/optimize/constants.d.ts +7 -0
  87. package/dist/tui/components/update/PackageDetailPanel.d.ts +12 -0
  88. package/dist/tui/components/update/PackageListPanel.d.ts +18 -0
  89. package/dist/tui/components/update/UpdateStore.d.ts +62 -0
  90. package/dist/tui/components/update/VisUpdateApp.d.ts +11 -0
  91. package/dist/tui/dynamic-life-cycle.d.ts +21 -0
  92. package/dist/tui/formatting-utils.d.ts +17 -0
  93. package/dist/tui/pretty-time.d.ts +8 -0
  94. package/dist/tui/static-life-cycle.d.ts +22 -0
  95. package/dist/tui/status-utils.d.ts +20 -0
  96. package/dist/tui/symbols.d.ts +7 -0
  97. package/dist/tui/types.d.ts +11 -0
  98. package/dist/typosquats.d.ts +70 -0
  99. package/dist/upgrade-check.d.ts +30 -0
  100. package/dist/utils.d.ts +22 -0
  101. package/dist/workspace.d.ts +262 -5
  102. package/index.js +600 -0
  103. package/package.json +34 -11
package/dist/bin.js CHANGED
@@ -1,9 +1,19 @@
1
1
  #!/usr/bin/env node
2
- var ra=Object.defineProperty;var y=(e,t)=>ra(e,"name",{value:t,configurable:!0});import{createRequire as oa}from"node:module";import{createCerebro as ia}from"@visulima/cerebro";import{findPackageManagerSync as xe,getPackageManagerVersion as ca,findMonorepoRootSync as la}from"@visulima/package";import{getAffectedProjects as pa,projectGraphToDot as ua,createTaskGraph as da,ConsoleLifeCycle as ga,defaultTaskRunner as fa,generateRunSummary as ma,writeRunSummary as ha}from"@visulima/task-runner";import{readJsonSync as W,walkSync as Ee,isAccessibleSync as b,readFileSync as A,writeFileSync as te,writeJsonSync as st,removeSync as ya,ensureDirSync as Ge}from"@visulima/fs";import{join as u,resolve as Re,dirname as va}from"@visulima/path";import{runProvider as it,PROVIDER_NAMES as ka,detectProvider as $a,detectAvailableProviders as wa,detectAllProviders as ba}from"@visulima/find-ai-runner";import{createTable as Ne}from"@visulima/tabular";import{boxen as ct}from"@visulima/boxen";import{findVisConfigFile as pt,loadVisConfig as xa}from"./config.js";import __cjs_mod__ from "node:module"; // -- packem CommonJS require shim --
2
+ var Aa=Object.defineProperty;var $=(t,e)=>Aa(t,"name",{value:e,configurable:!0});import{createRequire as Ia}from"node:module";import{createCerebro as Oa}from"@visulima/cerebro";import Pa from"@visulima/cerebro/compile-cache";import{applyHeapTuning as Na}from"@visulima/cerebro/heap-tuning";import{errorHandlerPlugin as Da}from"@visulima/cerebro/plugins/error-handler";import{isAccessibleSync as ae,readFileSync as _e,walkSync as On,readJsonSync as Je,ensureDirSync as vn,writeJsonSync as Pn,writeFileSync as sr,removeSync as Ma}from"@visulima/fs";import{findPackageManagerSync as zr,getPackageManagerVersion as Ba,findMonorepoRootSync as xi}from"@visulima/package";import{join as A,resolve as Pt,dirname as Nn}from"@visulima/path";import{red as ot,yellow as Ge,dim as Re,green as Si,cyan as yt,magenta as Ci,bold as vo}from"@visulima/colorize";import{coerce as Wr,rcompare as La,parse as Fa}from"semver";import{hyperlink as Ga}from"@visulima/ansi";import{getAffectedProjects as Ya,projectGraphToDot as Xa,TerminalBuffer as Ai,runConcurrently as Ii,enforceProjectConstraints as Ka,parsePartition as Qa,TaskScheduler as Za,createTaskGraph as ec,defaultTaskRunner as wo,generateRunSummary as tc,writeRunSummary as rc}from"@visulima/task-runner";import"lint-staged";import{runProvider as Ri,PROVIDER_NAMES as nc,detectProvider as oc,detectAvailableProviders as ic,detectAllProviders as sc}from"@visulima/find-ai-runner";import{renderToString as ge,Box as f,Text as a,Table as Mn,useWindowSize as Dt,Spinner as Oi,useApp as Mt,useInput as Ae,Dialog as At,ScrollView as Bt,ScrollBar as ar,render as st,TextInput as Bn,Tabs as ac,Tab as cc,StaticRender as ko}from"@visulima/tui";import H,{useState as se,useRef as we,useEffect as ze,useCallback as We,useSyncExternalStore as cr,useMemo as He}from"react";import{findCacheDirSync as Pi}from"@visulima/find-cache-dir";import{parse as lc}from"lockparse";import{readYamlSync as Ln}from"@visulima/fs/yaml";import{jsxs as d,jsx as c,Fragment as Xt}from"react/jsx-runtime";import{getRandomWord as bo}from"@nkzw/safe-word-list";import dc from"validate-npm-package-name";import{downloadTemplate as uc}from"giget";import{stripJsonComments as pc}from"@visulima/fs/utils";import{getManifestData as fc}from"@socketsecurity/registry";import gc from"module-replacements/manifests/micro-utilities.json"with{type:"json"};import hc from"module-replacements/manifests/native.json"with{type:"json"};import mc from"module-replacements/manifests/preferred.json"with{type:"json"};import{findVisConfigFile as er,loadVisConfig as $o}from"./config.js";import{duration as Ni}from"@visulima/humanizer";import __cjs_mod__ from "node:module"; // -- packem CommonJS require shim --
3
3
  const require = __cjs_mod__.createRequire(import.meta.url);
4
- const sa=oa(import.meta.url),K=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,he=y(e=>{if(typeof K<"u"&&K.versions&&K.versions.node){const[t,a]=K.versions.node.split(".").map(Number);if(t>22||t===22&&a>=3||t===20&&a>=16)return K.getBuiltinModule(e)}return sa(e)},"__cjs_getBuiltinModule"),{existsSync:k,readFileSync:B,rmSync:ee,writeFileSync:E,mkdirSync:Oe,readdirSync:Be,statSync:Ie,unlinkSync:Sa}=he("node:fs"),{homedir:ja}=he("node:os"),{cwd:lt}=K,{createInterface:Ca}=he("node:readline"),{spawnSync:F,execSync:Pe}=he("node:child_process");var Ea="1.0.0-alpha.1";const Ra={version:Ea};var Na=Object.defineProperty,L=y((e,t)=>Na(e,"name",{value:t,configurable:!0}),"a$4");const Oa=/\/+$/,Ba=/\/\*\*$/,Ia=/\/\*\/\*$/,Pa=/^['"]|['"]$/g,ut=/node_modules/,dt=/\.git/,ie=L(e=>{try{return W(e)}catch{return}},"readJsonFileSafe"),Aa=L((e,t,a)=>{for(const n of Ee(e,{includeFiles:!1,skip:[ut,dt]}))if(n.path!==e&&b(u(n.path,"package.json"))){const r=n.path.slice(e.length+1);a.push(`${t}/${r}`)}},"scanDirectoryRecursive"),La=L((e,t,a)=>{const n=t.slice(0,-2),r=Re(e,n);if(b(r))for(const o of Ee(r,{includeFiles:!1,maxDepth:1,skip:[ut,dt]}))o.path!==r&&b(u(o.path,"package.json"))&&a.push(u(n,o.name))},"resolveSimpleGlob"),Ta=L((e,t,a)=>{const n=t.replace(Ba,"").replace(Ia,""),r=Re(e,n);b(r)&&Aa(r,n,a)},"resolveDoubleGlob"),Ua=L((e,t,a)=>{const n=Re(e,t);b(n)&&b(u(n,"package.json"))&&a.push(t)},"resolveExactDirectory"),gt=L((e,t)=>{const a=[];for(const n of t){const r=n.replace(Oa,"");r.startsWith("!")||(r.endsWith("/*")?La(e,r,a):r.endsWith("/**")||r.endsWith("/*/*")?Ta(e,r,a):Ua(e,r,a))}return a},"resolveWorkspacePatterns"),Ma=L(e=>{const t=u(e,"pnpm-workspace.yaml");if(!b(t))return;const a=A(t),n=[];let r=!1;for(const o of a.split(`
5
- `)){const s=o.trim();if(s==="packages:"){r=!0;continue}if(r){if(s.startsWith("- ")){const i=s.slice(2).replaceAll(Pa,"");n.push(i)}else if(s&&!s.startsWith("#"))break}}return n.length>0?n:void 0},"readPnpmWorkspacePatterns"),Va=L((e,t)=>{const a={};for(const[n,r]of Object.entries(e)){const o=t?.[n];a[n]={...o,command:r}}return a},"createTargetsFromScripts"),ye=L((e,t={})=>{const a={},n=Ma(e),r=ie(u(e,"package.json"));let o;if(n?o=n:r?.workspaces&&(o=Array.isArray(r.workspaces)?r.workspaces:r.workspaces.packages),!o)throw new Error("No workspace configuration found. Expected pnpm-workspace.yaml or package.json workspaces field.");const s=gt(e,o);for(const i of s){const c=u(e,i,"package.json"),l=ie(c);if(!l?.name)continue;const p=u(e,i,"project.json"),g=ie(p),f=l.scripts?Va(l.scripts,t.targetDefaults):{};a[l.name]={projectType:g?.projectType??"library",root:i,sourceRoot:g?.sourceRoot??`${i}/src`,tags:g?.tags,targets:f}}return{config:t,workspace:{projects:a}}},"discoverWorkspace"),Ae=L((e,t)=>{const a={},n={},r=new Set(Object.keys(t.projects));for(const[o,s]of Object.entries(t.projects)){a[o]={data:s,name:o,type:s.projectType??"library"},n[o]=[];const i=ie(u(e,s.root,"package.json"));if(!i)continue;const c={...i.dependencies,...i.devDependencies,...i.peerDependencies};for(const l of Object.keys(c))r.has(l)&&n[o]?.push({source:o,target:l,type:"static"})}return{dependencies:n,nodes:a}},"buildProjectGraph");var Fa=Object.defineProperty,Da=y((e,t)=>Fa(e,"name",{value:t,configurable:!0}),"f$6");const Ja={argument:{description:"The target to run (e.g., build, test, lint)",name:"target",type:String},description:"Run a target only on projects affected by recent changes",examples:[["vis affected build","Run build on affected projects"],["vis affected test --base=main","Run tests on projects changed since main"]],execute:Da(async({argument:e,logger:t,options:a,runtime:n,visConfig:r,workspaceRoot:o})=>{const s=e[0];if(!s)throw new Error("Missing target. Usage: vis affected <target>");if(!o)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const i=o,{workspace:c}=ye(i,r),l=Ae(i,c),p={base:a.base,head:a.head,projectGraph:l,projects:c.projects,workspaceRoot:i},g=await pa(p);if(g.changedFiles.length===0){t.info("No files changed. Nothing to run.");return}if(g.affectedProjects.length===0){t.info("No projects affected by the changes.");return}t.info(`Affected projects: ${g.affectedProjects.join(", ")}`);const f=[s,`--projects=${g.affectedProjects.join(",")}`];a.parallel!==void 0&&f.push(`--parallel=${String(a.parallel)}`),a.cache||f.push("--no-cache"),a.dryRun&&f.push("--dry-run"),await n.runCommand("run",{argv:f})},"execute"),name:"affected",options:[{defaultValue:"HEAD~1",description:"Git base ref for comparison",name:"base",type:String},{defaultValue:"HEAD",description:"Git head ref for comparison",name:"head",type:String},{defaultValue:3,description:"Maximum number of parallel tasks",name:"parallel",type:Number},{defaultValue:!0,description:"Enable caching (use --no-cache to disable)",name:"cache",type:Boolean},{defaultValue:!1,description:"Show what would run without executing",name:"dry-run",type:Boolean}]};var Wa=Object.defineProperty,h=y((e,t)=>Wa(e,"name",{value:t,configurable:!0}),"f$5");const Y=(1n<<128n)-1n,m=(1n<<64n)-1n,pe=(1n<<32n)-1n,ft=0x9E3779B1n,mt=0x85EBCA77n,_a=0xC2B2AE3Dn,J=0x9E3779B185EBCA87n,q=0xC2B2AE3D27D4EB4Fn,ht=0x165667B19E3779F9n,Le=0x85EBCA77C2B2AE63n,za=0x27D4EB2F165667C5n,Ha=0x165667919E3779F9n,Ga=0x9FB21C651E98DF25n,M=64,yt=M/8,qa=8,I=Buffer.from("b8fe6c3923a44bbe7c01812cf721ad1cded46de9839097db7240a4a4b7b3671fcb79e64eccc0e578825ad07dccff7221b8084674f743248ee03590e6813a264c3c2852bb91c300cb88d0658b1b532ea371644897a20df94e3819ef46a9deacd8a8fa763fe39c343ff9dcbbc7c70b4f1d8a51e04bcdb45931c89f7ec9d9787364eac5ac8334d3ebc3c581a0fffa1363eb170ddd51b7f0da49d316552629d4689e2b16be587d47a1fc8ff8b8d17ad031ce45cb3a8f95160428afd7fbcabb4b407e","hex"),v=h((e,t=0)=>Buffer.from(e.buffer,e.byteOffset+t,e.length-t),"getView"),Ka=h(e=>{const t=Buffer.allocUnsafe(8);return t.writeBigUInt64LE(e),t.readBigUInt64BE()},"bswap64"),Ya=h(e=>{let t=e;return t=(t&0x0000FFFFn)<<16n|(t&0xFFFF0000n)>>16n,t=(t&0x00FF00FFn)<<8n|(t&0xFF00FF00n)>>8n,t},"bswap32"),Xa=h((e,t)=>(e&pe)*(t&pe)&m,"multU32ToU64"),Za=h((e,t)=>(e<<t|e>>32n-t)&pe,"rotl32"),Se=h((e,t)=>e^e>>t,"xorshift64"),je=h(e=>~e+1n&m,"inv64"),vt=h((e,t)=>{const a=e*t&Y;return a&m^a>>64n},"mul128Fold64"),P=h(e=>{let t=e;return t^=t>>37n,t=t*Ha&m,t^=t>>32n,t},"avalanche"),ue=h(e=>{let t=e;return t^=t>>33n,t=t*q&m,t^=t>>29n,t=t*ht&m,t^=t>>32n,t},"avalanche64"),kt=h((e,t,a)=>{for(let n=0;n<yt;n++){const r=t.readBigUInt64LE(n*8),o=r^a.readBigUInt64LE(n*8);e[n^1]+=r,e[n]+=Xa(o,o>>32n)}return e},"accumulate512"),qe=h((e,t,a,n)=>{for(let r=0;r<n;r++)kt(e,v(t,r*M),v(a,r*8));return e},"accumulate"),Qa=h((e,t)=>{for(let a=0;a<yt;a++){const n=t.readBigUInt64LE(a*8);let r=e[a];r=Se(r,47n),r^=n,r*=ft,e[a]=r&m}return e},"scrambleAcc"),oe=h((e,t)=>vt(e[0]^t.readBigUInt64LE(0),e[1]^t.readBigUInt64LE(qa)),"mix2Accs"),Ke=h((e,t,a)=>{let n=a;return n+=oe(e.slice(0),v(t,0)),n+=oe(e.slice(2),v(t,16)),n+=oe(e.slice(4),v(t,32)),n+=oe(e.slice(6),v(t,48)),P(n&m)},"mergeAccs"),en=h((e,t,a)=>{const n=Math.floor((a.byteLength-M)/8),r=M*n,o=Math.floor((t.byteLength-1)/r);for(let i=0;i<o;i++)qe(e,v(t,i*r),a,n),Qa(e,v(a,a.byteLength-M));const s=Math.floor((t.byteLength-1-r*o)/M);return qe(e,v(t,o*r),a,s),kt(e,v(t,t.byteLength-M),v(a,a.byteLength-M-7)),e},"hashLong"),tn=h((e,t)=>{const a=new BigUint64Array([_a,J,q,ht,Le,mt,za,ft]);en(a,e,t);const n=Ke(a,v(t,11),BigInt(e.byteLength)*J&m);return Ke(a,v(t,t.byteLength-M-11),~(BigInt(e.byteLength)*q)&m)<<64n|n},"hashLong128b"),Ye=h((e,t,a)=>vt((e.readBigUInt64LE(0)^t.readBigUInt64LE(0)+a)&m,(e.readBigUInt64LE(8)^t.readBigUInt64LE(8)-a)&m),"mix16B"),ce=h((e,t,a,n,r)=>{let o=e&m,s=e>>64n&m;return o+=Ye(t,n,r),o^=a.readBigUInt64LE(0)+a.readBigUInt64LE(8),o&=m,s+=Ye(a,v(n,16),r),s^=t.readBigUInt64LE(0)+t.readBigUInt64LE(8),s&=m,s<<64n|o},"mix32B"),an=h((e,t,a)=>{const n=e.byteLength,r=BigInt(e.readUInt8(n-1))|BigInt(n<<8)|BigInt(e.readUInt8(0)<<16)|BigInt(e.readUInt8(n>>1)<<24),o=(BigInt(t.readUInt32LE(0))^BigInt(t.readUInt32LE(4)))+a,s=(r^o)&m,i=(BigInt(t.readUInt32LE(8))^BigInt(t.readUInt32LE(12)))-a,c=(Za(Ya(r),13n)^i)&m;return(ue(c)&m)<<64n|ue(s)},"len1to3_128b"),nn=h((e,t,a)=>{const n=e.byteLength,r=e.readUInt32LE(0),o=e.readUInt32LE(n-4),s=BigInt(r)|BigInt(o)<<32n,i=(t.readBigUInt64LE(16)^t.readBigUInt64LE(24))+a&m;let c=(s^i)*(J+(BigInt(n)<<2n))&Y;return c+=(c&m)<<65n,c&=Y,c^=c>>67n,Se(Se(c&m,35n)*Ga&m,28n)|P(c>>64n)<<64n},"len4to8_128b"),rn=h((e,t,a)=>{const n=e.byteLength,r=(t.readBigUInt64LE(32)^t.readBigUInt64LE(40))+a&m,o=(t.readBigUInt64LE(48)^t.readBigUInt64LE(56))-a&m,s=e.readBigUInt64LE();let i=e.readBigUInt64LE(n-8),c=(s^i^r)*J;const l=(c&m)+(BigInt(n-1)<<54n);c=c&(Y^m)|l,i^=o,c+=i+(i&pe)*(mt-1n)<<64n,c&=Y,c^=Ka(c>>64n);let p=(c&m)*q;return p+=(c>>64n)*q<<64n,p&=Y,P(p&m)|P(p>>64n)<<64n},"len9to16_128b"),on=h((e,t)=>{const a=e.byteLength;return a>8?rn(e,I,t):a>=4?nn(e,I,t):a>0?an(e,I,t):ue(t^I.readBigUInt64LE(64)^I.readBigUInt64LE(72))|ue(t^I.readBigUInt64LE(80)^I.readBigUInt64LE(88))<<64n},"len0to16_128b"),sn=h((e,t,a)=>{let n=BigInt(e.byteLength)*J&m,r=BigInt(e.byteLength-1)/32n;for(;r>=0n;){const i=Number(r);n=ce(n,v(e,16*i),v(e,e.byteLength-16*(i+1)),v(t,32*i),a),r--}let o=n+(n>>64n)&m;o=P(o);let s=(n&m)*J+(n>>64n)*Le+(BigInt(e.byteLength)-a&m)*q;return s&=m,s=je(P(s)),o|s<<64n},"len17to128_128b"),cn=h((e,t,a)=>{let n=BigInt(e.byteLength)*J&m;for(let s=32;s<160;s+=32)n=ce(n,v(e,s-32),v(e,s-16),v(t,s-32),a);n=P(n&m)|P(n>>64n)<<64n;for(let s=160;s<=e.byteLength;s+=32)n=ce(n,v(e,s-32),v(e,s-16),v(t,3+s-160),a);n=ce(n,v(e,e.byteLength-16),v(e,e.byteLength-32),v(t,103),je(a));let r=n+(n>>64n)&m;r=P(r);let o=(n&m)*J+(n>>64n)*Le+(BigInt(e.byteLength)-a&m)*q;return o&=m,o=je(P(o)),r|o<<64n},"len129to240_128b"),ln=h((e,t=0n)=>{const a=e.byteLength;return a<=16?on(e,t):a<=128?sn(e,I,t):a<=240?cn(e,I,t):tn(e,I)},"xxh3_128"),pn=h(e=>{const t=e>>64n&m,a=e&m;return t.toString(16).padStart(16,"0")+a.toString(16).padStart(16,"0")},"bigintToHex"),$t=h(e=>pn(ln(e)),"xxh3Hash");class un{static{y(this,"gn")}static{h(this,"Xxh3Hasher")}#e=[];update(t){return typeof t=="string"?this.#e.push(Buffer.from(t)):this.#e.push(t),this}digest(){return $t(Buffer.concat(this.#e))}}h(()=>new un,"createXxh3Hasher");var dn=Object.defineProperty,_=y((e,t)=>dn(e,"name",{value:t,configurable:!0}),"i$4");const ae=_(()=>u(ja(),".vis","cache","ai"),"getCacheDirectory"),gn=3600*1e3,fn=1800*1e3,mn=_(()=>{const e=ae();k(e)||Oe(e,{recursive:!0})},"ensureCacheDirectory"),hn=_((e,t,a)=>{const n=a.map(o=>({currentRange:o.currentRange,name:o.packageName,targetVersion:o.targetVersion})).toSorted((o,s)=>o.name.localeCompare(s.name)),r=JSON.stringify({analysisType:t,packages:n,provider:e});return $t(Buffer.from(r))},"buildCacheKey"),yn=_(e=>{const t=u(ae(),`${e}.json`);if(k(t))try{const a=B(t,"utf8"),n=JSON.parse(a);if(Date.now()-n.createdAt>n.ttlMs){ee(t,{force:!0});return}return n.result}catch{ee(t,{force:!0});return}},"getCachedAnalysis"),vn=_((e,t,a)=>{mn();const n=ae(),r={createdAt:Date.now(),result:t,ttlMs:a};E(u(n,`${e}.json`),JSON.stringify(r,void 0,2),"utf8")},"setCachedAnalysis"),kn=_((e,t)=>t!==void 0&&t>0?t:e==="security"?fn:gn,"getTtlForAnalysisType"),$n=_(()=>{const e=ae();if(!k(e))return{entries:0,newestEntry:void 0,oldestEntry:void 0,totalSizeBytes:0};const t=Be(e).filter(o=>o.endsWith(".json"));let a=0,n,r;for(const o of t){const s=u(e,o),i=Ie(s);a+=i.size;const{mtimeMs:c}=i;(n===void 0||c<n)&&(n=c),(r===void 0||c>r)&&(r=c)}return{entries:t.length,newestEntry:r,oldestEntry:n,totalSizeBytes:a}},"getCacheStats"),wn=_(()=>{const e=ae();if(!k(e))return 0;const t=Be(e).filter(a=>a.endsWith(".json"));for(const a of t)ee(u(e,a),{force:!0});return t.length},"clearCache");var bn=Object.defineProperty,S=y((e,t)=>bn(e,"name",{value:t,configurable:!0}),"a$2");const le={amp:30,claude:80,codex:60,copilot:50,crush:35,cursor:40,droid:20,gemini:100,kimi:25,opencode:35,qwen:30},Te=S(e=>{if(e?.provider){if(!ka.includes(e.provider))return;const n=$a(e.provider);return n.available?n:void 0}const t=wa();if(t.length===0)return;const a={...le,...e?.priority};return t.toSorted((n,r)=>(a[r.name]??0)-(a[n.name]??0))[0]},"resolveProvider"),Sn=new Set(["defer","review","skip","update"]),jn=new Set(["critical","high","low","medium"]),Cn=new Set(["high","low","medium"]),xn=50,$e=30,En=2,Rn=1e3,Nn=12e4,On=S(e=>e.map(t=>{const a=t.vulnerabilities&&t.vulnerabilities.length>0?` [VULNERABILITIES: ${t.vulnerabilities.map(n=>`${n.severity} ${n.id}`).join(", ")}]`:"";return`- ${t.packageName}: ${t.currentRange} → ${t.newRange} (${t.updateType})${a}`}).join(`
6
- `),"buildPackageList"),se=`Respond ONLY with valid JSON in this exact structure:
4
+ const Ra=Ia(import.meta.url),jt=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,xt=$(t=>{if(typeof jt<"u"&&jt.versions&&jt.versions.node){const[e,r]=jt.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return jt.getBuiltinModule(t)}return Ra(t)},"__cjs_getBuiltinModule"),{createInterface:Nt}=xt("node:readline"),{readFileSync:Y,existsSync:V,readdirSync:lt,rmSync:it,mkdirSync:ye,writeFileSync:_,statSync:_r,lstatSync:Va,unlinkSync:Ei,chmodSync:Ua}=xt("node:fs"),{env:cn,cwd:ji}=jt,{join:F,dirname:Ti,parse:za,resolve:Qe,basename:Wa,relative:Dn,sep:_a,isAbsolute:Ha}=xt("node:path"),{createRequire:Ja}=xt("node:module"),{homedir:Ce}=xt("node:os"),{fileURLToPath:qa}=xt("node:url"),{execSync:Hr,spawnSync:Oe}=xt("node:child_process");var yc="1.0.0-alpha.3";const Di={version:yc};var vc=Object.defineProperty,wc=$((t,e)=>vc(t,"name",{value:e,configurable:!0}),"t$c");const xo=wc(t=>t in cn&&cn[t]!=="0"&&cn[t]!=="false","check"),De=xo("CI")||xo("CONTINUOUS_INTEGRATION");var kc=Object.defineProperty,xe=$((t,e)=>kc(t,"name",{value:e,configurable:!0}),"s$m");const bc=xe(()=>process.env.NO_COLOR!==void 0?!1:process.env.FORCE_COLOR!==void 0?!0:!!process.stderr.isTTY,"supportsColor"),$c=bc(),dt=xe((t,e)=>r=>$c?`\x1B[${t}m${r}\x1B[${e}m`:r,"ansi"),le=dt("1","22"),ee=dt("2","22"),Mi=dt("31","39"),Bi=dt("32","39"),Li=dt("33","39"),xc=dt("34","39"),Ee=dt("36","39"),Sc=dt("90","39"),Cc=xe(()=>process.platform==="win32"?!!process.env.WT_SESSION||process.env.TERM_PROGRAM==="vscode"||process.env.TERM==="xterm-256color":process.env.TERM!=="linux","isUnicodeSupported"),ln=Cc(),Fn={arrow:ln?"→":"->",failure:ln?"✗":"x",success:ln?"":"v"},v=xe(t=>{process.stderr.write(`${le(xc("info:"))} ${t}
5
+ `)},"info"),oe=xe(t=>{process.stderr.write(`${le(Li("warn:"))} ${t}
6
+ `)},"warn"),vt=xe(t=>{process.stderr.write(`${le(Mi("error:"))} ${t}
7
+ `)},"error"),Q=xe(t=>{process.stderr.write(`${le(Sc("note:"))} ${t}
8
+ `)},"note"),X=xe(t=>{process.stderr.write(`${Bi(Fn.success)} ${t}
9
+ `)},"success"),tr=xe(t=>{process.stderr.write(`${Mi(Fn.failure)} ${t}
10
+ `)},"failure");xe((t,e)=>!process.stderr.isTTY||process.env.TERM==="dumb"?t===e?e:`${t} (${ee(e)})`:Ga(t,e),"link");const Ec=xe(()=>{if(process.env.VIS_VERSION)return process.env.VIS_VERSION;try{const t=new URL("../../package.json",import.meta.url);return JSON.parse(Y(t,"utf8")).version}catch{return"0.0.0"}},"getVersion"),jc=xe(()=>{process.env.VIS_VERSION=Ec()},"injectVersion"),Tc=xe(t=>{!process.stdout.isTTY||De||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${t}\x07`)},"setTerminalTitle");var Ac=Object.defineProperty,Fi=$((t,e)=>Ac(t,"name",{value:e,configurable:!0}),"n$8");let kr,So=!1;const Ic=Ja(import.meta.url),Jr=Fi(()=>{if(So)return kr;So=!0;try{const t=Ic("../index.js");typeof t.detectPackageManager=="function"&&typeof t.execPmCommand=="function"&&(kr=t)}catch{kr=void 0}return kr},"loadNativeBindings");Fi(()=>Jr()!==void 0,"isNativeAvailable");var Rc=Object.defineProperty,ve=$((t,e)=>Rc(t,"name",{value:e,configurable:!0}),"s$k");const Vn=ve(()=>{const t=Jr();if(!t)throw new Error("Native bindings for package manager operations failed to load. Ensure the correct platform binary is installed.");return t},"requireNative"),br=ve((t,e)=>{try{const r=F(t,"package.json");if(V(r)){const n=JSON.parse(Y(r,"utf8"));if(n.packageManager?.startsWith(`${e}@`))return n.packageManager.slice(e.length+1)}}catch{}},"readPackageManagerVersion"),Oc=ve(t=>{if(V(F(t,"pnpm-lock.yaml"))||V(F(t,"pnpm-workspace.yaml")))return{name:"pnpm",version:br(t,"pnpm")??"latest"};if(V(F(t,"yarn.lock")))return{name:"yarn",version:br(t,"yarn")??"latest"};if(V(F(t,"bun.lock"))||V(F(t,"bun.lockb")))return{name:"bun",version:br(t,"bun")??"latest"};if(V(F(t,"package-lock.json"))||V(F(t,"npm-shrinkwrap.json")))return{name:"npm",version:br(t,"npm")??"latest"};try{const e=F(t,"package.json");if(V(e)){const r=JSON.parse(Y(e,"utf8"));if(r.packageManager){const n=/^(pnpm|yarn|npm|bun)@(.+)$/.exec(r.packageManager);if(n)return{name:n[1],version:n[2]}}}}catch{}},"detectPmInDir"),Pc=ve(t=>{let e=t;for(;;){const r=Oc(e);if(r)return r;const n=Ti(e);if(n===e||za(e).root===e)break;e=n}throw new Error(`Could not detect package manager in ${t}. No lockfile or packageManager field found.`)},"detectPmFallback"),pe=ve(t=>{if(!V(t))throw new Error(`Could not detect package manager in ${t}. Directory does not exist.`);try{const e=Vn().detectPackageManager(t);return{name:e.name,version:e.version||"latest"}}catch{return Pc(t)}},"detectPm"),Nc=ve((t,e,r)=>{for(const n of t.warnings)r.warn(`warning: ${n}`);return Vn().execPmCommandInteractive(t.bin,t.args,e)},"runResolved"),Me=ve((t,e,r)=>{const n=t(Vn());return Nc(n,e,r)},"resolveAndRun"),qr=ve((t,e,r,n)=>Me(i=>i.resolveInstall(t.name,t.version,e),r,n),"runInstall"),Dc=ve((t,e,r,n)=>Me(i=>i.resolveAdd(t.name,t.version,e),r,n),"runAdd"),Mc=ve((t,e,r,n)=>Me(i=>i.resolveRemove(t.name,t.version,e),r,n),"runRemove"),Bc=ve((t,e,r,n)=>Me(i=>i.resolveDedupe(t.name,t.version,e),r,n),"runDedupe"),Lc=ve((t,e,r,n)=>Me(i=>i.resolveWhy(t.name,t.version,e),r,n),"runWhy");ve((t,e,r,n)=>Me(i=>i.resolveOutdated(t.name,t.version,e),r,n),"runOutdated");const Fc=ve((t,e,r,n)=>Me(i=>i.resolveLink(t.name,e),r,n),"runLink"),Vc=ve((t,e,r,n,i)=>Me(o=>o.resolveUnlink(t.name,t.version,e,r),n,i),"runUnlink"),Un=ve((t,e,r,n)=>Me(i=>i.resolveDlx(t.name,t.version,e),r,n),"runDlx"),Uc=ve((t,e,r,n)=>Me(i=>i.resolveExec(t.name,t.version,e),r,n),"runExec"),Gc=ve((t,e,r,n,i)=>Me(o=>o.resolvePmCommand(t.name,t.version,e,r),n,i),"runPmSubcommand");var zc=Object.defineProperty,me=$((t,e)=>zc(t,"name",{value:e,configurable:!0}),"c$j");const Wc="https://api.socket.dev/v0/purl?alerts=true",Yr=me(()=>A(Ce(),".vis","cache","socket-security"),"getCacheDirectory"),_c=3600*1e3,nt=.4,Co=100,Hc=me(t=>typeof t=="object"&&t!=null&&"id"in t&&"type"in t&&"name"in t&&"version"in t&&"alerts"in t&&"score"in t&&t.type==="npm","isPackageReportData"),Jc=me(()=>{const t=Yr();V(t)||ye(t,{recursive:!0})},"ensureCacheDirectory"),Vi=me((t,e)=>`${encodeURIComponent(t)}@${encodeURIComponent(e)}`,"buildCacheKey"),qc=me((t,e)=>{const r=Vi(t,e),n=A(Yr(),`${r}.json`);try{const i=Y(n,"utf8"),o=JSON.parse(i);if(Date.now()-o.createdAt>o.ttlMs){it(n,{force:!0});return}return o.report}catch{return}},"getCachedReport"),Yc=me((t,e,r,n)=>{const i=Vi(t,e),o={createdAt:Date.now(),report:r,ttlMs:n};_(A(Yr(),`${i}.json`),JSON.stringify(o),"utf8")},"setCachedReport"),Xc=me(t=>{const e=[t.license,t.maintenance,t.quality,t.supplyChain,t.vulnerability];return Number((e.reduce((r,n)=>r+n,0)/e.length).toFixed(2))},"calculateOverallScore"),Lt=me(async(t,e={})=>{const{apiToken:r,cacheTtlMs:n=_c,timeoutMs:i=15e3}=e,o=new Map;if(t.length===0||!r)return o;const s=[];for(const g of t){const p=qc(g.name,g.version);p?o.set(`${g.name}@${g.version}`,p):s.push(g)}if(s.length===0)return o;const l=`Basic ${Buffer.from(`${r}:`).toString("base64")}`;Jc();const u=[];for(let g=0;g<s.length;g+=Co)u.push(s.slice(g,g+Co));for(const g of u){const p=g.map(y=>({purl:`pkg:npm/${y.name}@${y.version}`})),h=new AbortController,m=setTimeout(()=>{h.abort()},i);try{const y=await fetch(Wc,{body:JSON.stringify({components:p}),headers:{Authorization:l,"Content-Type":"application/json","User-Agent":"@visulima/vis"},method:"POST",signal:h.signal});if(!y.ok)continue;const b=await y.text();Kc(b,g,o,n)}catch{}finally{clearTimeout(m)}}return o},"fetchSocketReports"),Kc=me((t,e,r,n)=>{const i=new Map;for(const s of e)i.set(`${s.name}@${s.version}`,s);const o=t.split(`}
11
+ `);for(const s of o){const l=s.trim();if(l)try{const u=JSON.parse(l.endsWith("}")?l:`${l}}`),g=`${u.namespace?`${u.namespace}/`:""}${u.name}`,p=`${g}@${u.version}`;if(!i.has(p))continue;const h=u.score.overall??Xc(u.score),m={alerts:u.alerts,author:u.author,id:u.id,license:u.license,name:u.name,score:{...u.score,overall:h},size:u.size,type:"npm",version:u.version};u.namespace&&(m.namespace=u.namespace),Hc(m)&&(r.set(p,m),Yc(g,u.version,m,n))}catch{}}},"parseNdjsonResponse"),It=me(t=>t.namespace?`${t.namespace}/${t.name}`:t.name,"getFullPackageName"),Gn=me(t=>t>=.8?"excellent":t>=.6?"good":t>=.4?"fair":t>=.2?"poor":"critical","scoreLabel"),lr=me(t=>t>=.6?"green":t>=.4?"yellow":"red","scoreColor"),Eo=me(t=>{const e=It(t),r=`score: ${String(Math.round(t.score.overall*100))}%`,n=t.alerts.length,i=n>0?`${String(n)} alert${n===1?"":"s"}`:"no alerts";return`${e}@${t.version} (${r}, ${i})`},"formatReportSummary");me(t=>{const e=[`${It(t)}@${t.version}`,` License: ${t.license||"unknown"}`];if(e.push(` Overall Score: ${String(Math.round(t.score.overall*100))}% (${Gn(t.score.overall)})`),e.push(` Supply Chain: ${String(Math.round(t.score.supplyChain*100))}%`),e.push(` Quality: ${String(Math.round(t.score.quality*100))}%`),e.push(` Maintenance: ${String(Math.round(t.score.maintenance*100))}%`),e.push(` Vulnerability: ${String(Math.round(t.score.vulnerability*100))}%`),e.push(` License: ${String(Math.round(t.score.license*100))}%`),t.alerts.length>0){e.push(` Alerts (${String(t.alerts.length)}):`);for(const r of t.alerts){const n=r.props?.cveId?` (${r.props.cveId})`:"";e.push(` [${r.severity.toUpperCase()}] ${r.type}${n} — ${r.category}`)}}return e.join(`
12
+ `)},"formatReportDetailed");const Qc=me(t=>{if(t.size===0)return"";let e=0,r=0,n=0,i=0,o=0,s=0;for(const u of t.values()){for(const g of u.alerts)switch(e++,g.severity){case"critical":{r++;break}case"high":{n++;break}case"medium":{i++;break}default:o++}u.score.overall<nt&&s++}const l=[];if(l.push(`Socket.dev: scanned ${String(t.size)} package${t.size===1?"":"s"}`),e>0){const u=[];r>0&&u.push(`${String(r)} critical`),n>0&&u.push(`${String(n)} high`),i>0&&u.push(`${String(i)} medium`),o>0&&u.push(`${String(o)} low`),l.push(` Alerts: ${String(e)} total (${u.join(", ")})`)}else l.push(" No security alerts found.");return s>0&&l.push(` ${String(s)} package${s===1?"":"s"} with low security score (<40%)`),l.join(`
13
+ `)},"formatSecurityOverview"),Zc=me(()=>{const t=Yr();if(!V(t))return 0;const e=lt(t).filter(r=>r.endsWith(".json"));for(const r of e)it(A(t,r),{force:!0});return e.length},"clearSocketCache"),St=me(t=>t?.enabled?{apiToken:t.apiToken??process.env.VIS_SOCKET_TOKEN,cacheTtlMs:t.cacheTtlMs,minimumScore:t.minimumScore,timeoutMs:t.timeoutMs}:void 0,"buildSocketOptions"),zn=me((t,e,r)=>{if(!r)return;const n=`${t}@${e}`;if(r[n])return r[n];if(r[t])return r[t];for(const[i,o]of Object.entries(r))if(i.endsWith("*")&&t.startsWith(i.slice(0,-1)))return o},"findAcceptedRisk"),el=me((t,e,r,n)=>[" // Add to security.socket.acceptedRisks in vis.config.ts:",` ${`"${t}"`}: {`,` reason: "${n}",`,` acceptedAt: "${new Date().toISOString()}",`,` acceptedScore: ${String(r)},`," },"].join(`
14
+ `),"formatAcceptedRiskSnippet");var tl=Object.defineProperty,je=$((t,e)=>tl(t,"name",{value:e,configurable:!0}),"o$h");const rl={a:["4","e"],b:["d"],d:["b"],e:["3","a"],g:["9","q"],i:["1","l"],l:["1","i"],m:["n"],n:["m"],o:["0"],s:["5","z"],t:["7"],u:["v"],v:["u"]},nl=je(t=>{const e=new Set;if(t.length<3)return e;for(let n=0;n<t.length;n++){const i=t[n]==="-"||t[n]==="."||t[n]==="_";if(i||e.add(t.slice(0,n)+t.slice(n+1)),i||e.add(t.slice(0,n)+t[n]+t.slice(n)),n<t.length-1&&t[n]!==t[n+1]){const l=t[n+1]==="-"||t[n+1]==="."||t[n+1]==="_";if(!i&&!l){const u=t.split("");[u[n],u[n+1]]=[u[n+1],u[n]],e.add(u.join(""))}}const o=t[n].toLowerCase(),s=rl[o];if(s)for(const l of s)e.add(t.slice(0,n)+l+t.slice(n+1))}const r=/[-._]/g;if(r.test(t))e.add(t.replaceAll(r,"")),e.add(t.replaceAll(r,"-")),e.add(t.replaceAll(r,".")),e.add(t.replaceAll(r,"_"));else if(t.length>5)for(let n=2;n<t.length-2;n++)e.add(`${t.slice(0,n)}-${t.slice(n)}`),e.add(`${t.slice(0,n)}.${t.slice(n)}`),e.add(`${t.slice(0,n)}_${t.slice(n)}`);return t.startsWith("@")||(e.add(`${t}-js`),e.add(`${t}js`),e.add(`${t}-node`)),e.delete(t),e},"generateVariants");let dn,$r;const Ui=je(()=>{if(!dn){const t=Qe(Ti(qa(import.meta.url)),"../data/typosquats.json");dn=JSON.parse(Y(t,"utf8"))}return dn},"loadBlocklist"),ol=je(()=>{if(!$r){$r=new Map;for(const[t,e]of Object.entries(Ui()))for(const r of e)$r.set(r,t)}return $r},"getReverseLookup"),il=je(t=>t.startsWith("@")?t.split("/")[1]??t:t,"bareName"),sl=je(t=>{const e=il(t),r=ol().get(e);if(r)return{input:t,legitimate:r,method:"blocklist"};for(const n of Object.keys(Ui()))if(nl(n).has(e))return{input:t,legitimate:n,method:"heuristic"}},"checkTyposquat"),Gi=je((t,e)=>{const r=e?new Set(e):void 0,n=[];for(const i of t){if(r?.has(i))continue;const o=sl(i);o&&n.push(o)}return n},"checkTyposquats"),zi=je((t,e)=>{oe(""),oe(ot(`Possible typosquat${t.length===1?"":"s"} ${e}:`));for(const r of t){const n=r.method==="blocklist"?"known typosquat":"similar name";oe(` ${Ge("⚠")} ${ot(r.input)} — did you mean ${Ge(r.legitimate)}? (${n})`)}oe("")},"printTyposquatWarnings"),Wi=je(async t=>{if(!process.stdin.isTTY){oe("Aborting: potential typosquat detected in non-interactive mode. Use --no-typosquat-check to skip.");return}const e=Nt({input:process.stdin,output:process.stdout}),r=await new Promise(n=>{e.question(t,i=>{n(i.trim().toLowerCase())})});return e.close(),r},"askConfirmation"),_i=je(async(t,e)=>{const r=Gi(t,e);if(r.length===0)return{ok:!0,packages:t};zi(r,"detected");const n=await Wi(`Use suggested package${r.length===1?"":"s"} instead? [S]uggested / [y]es, keep original / [N]o, abort (default: N) `);if(n===void 0)return{ok:!1,packages:t};if(n==="s"||n==="suggested"){const i=new Map(r.map(o=>[o.input,o.legitimate]));return{ok:!0,packages:t.map(o=>i.get(o)??o)}}return n==="y"||n==="yes"?{ok:!0,packages:t}:{ok:!1,packages:t}},"runTyposquatCheck"),al=/^(?:npm|pnpm|yarn):(.+?)(?:@.*)?$/,cl=je(t=>al.exec(t)?.[1],"parseAliasTarget"),ll=je(t=>{if(!V(t))return[];const e=JSON.parse(Y(t,"utf8")),r={...e.dependencies,...e.devDependencies,...e.optionalDependencies,...e.peerDependencies},n=new Set;for(const[i,o]of Object.entries(r)){n.add(i);const s=cl(o);s&&n.add(s)}return[...n]},"readDepsFromPackageJson"),Hi=je(async(t,e)=>{const r=F(t,"package.json"),n=ll(r);if(n.length===0)return!0;const i=Gi(n,e);if(i.length===0)return!0;zi(i,"in package.json dependencies"),oe("Fix the package name in package.json before proceeding.");const o=await Wi("Continue anyway? [y/N] ");return o==="y"||o==="yes"},"scanDepsForTyposquats");var dl=Object.defineProperty,Wn=$((t,e)=>dl(t,"name",{value:e,configurable:!0}),"s$j");const dr=Wn(t=>t?Array.isArray(t)?t:[t]:[],"toStringArray"),wn=Wn(t=>t instanceof Error?t.message:typeof t=="string"?t:String(t),"errorMessage"),ul=/^(.+?)(?:@(.+))?$/,_n=Wn(t=>{if(t.startsWith("@")){const r=t.indexOf("/");if(r===-1)return{name:t,versionSpec:void 0};const n=t.slice(r+1),i=n.indexOf("@");return i===-1?{name:t,versionSpec:void 0}:{name:t.slice(0,r+1+i),versionSpec:n.slice(i+1)}}const e=ul.exec(t);return e?{name:e[1],versionSpec:e[2]}:{name:t,versionSpec:void 0}},"parsePackageArgument");var pl=Object.defineProperty,Rt=$((t,e)=>pl(t,"name",{value:e,configurable:!0}),"m$k");const fl=Rt(async(t,e=1e4)=>{const r=new Map,n=new AbortController,i=setTimeout(()=>{n.abort()},e);try{const o=t.map(async s=>{try{const l=await fetch(`https://registry.npmjs.org/${s}/latest`,{headers:{Accept:"application/json"},signal:n.signal});if(l.ok){const u=await l.json();u.version&&r.set(s,u.version)}}catch{}});await Promise.all(o)}finally{clearTimeout(i)}return r},"resolveLatestVersions"),gl=Rt((t,e,r)=>{const n=[];for(const i of t.values()){const{overall:o}=i.score,s=lr(o),l=`${String(Math.round(o*100))}%`,u=i.alerts.length,g=It(i),p=zn(g,i.version,r),h=s==="red"?ot:s==="yellow"?Ge:Si;if(v(p?` ${h(l)} ${Eo(i)} ${Re(`[accepted: ${p.reason}]`)}`:` ${h(l)} ${Eo(i)}`),u>0){const m=i.alerts.filter(y=>y.severity==="critical"||y.severity==="high").length;m>0&&oe(` ${String(m)} critical/high alert${m===1?"":"s"}`)}o<e&&!p&&n.push(i)}return n},"displaySecurityReports"),hl=Rt(async(t,e)=>{const r=Nt({input:process.stdin,output:process.stdout}),n=Rt(l=>new Promise(u=>{r.question(l,g=>{u(g.trim())})}),"ask"),i=String(Math.round(e*100));oe(""),oe(`${String(t.length)} package${t.length===1?"":"s"} scored below the minimum threshold (${i}%):`);for(const l of t){const u=It(l),g=`${String(Math.round(l.score.overall*100))}%`;oe(` • ${u}@${l.version} — score: ${g} (${Gn(l.score.overall)})`)}oe("");const o=await n("Continue adding these packages? [y/N] ");if(o.toLowerCase()!=="y"&&o.toLowerCase()!=="yes")return r.close(),!1;const s=await n("Remember this decision? (prints config snippet) [y/N] ");if(r.close(),s.toLowerCase()==="y"||s.toLowerCase()==="yes"){Q(""),Q("Add the following to security.socket.acceptedRisks in vis.config.ts:"),Q("");for(const l of t){const u=It(l),g=el(u,l.version,l.score.overall,"Reviewed and accepted");Q(g)}Q("")}return!0},"confirmLowScorePackages"),ml=Rt(async(t,e,r,n)=>{const i=t.map(_n),o=new Map;for(const h of i)if(h.versionSpec){const m=Wr(h.versionSpec);m&&o.set(h.name,m.version)}const s=i.filter(h=>!o.has(h.name)).map(h=>h.name),l=s.length>0?await fl(s):new Map,u=[];for(const h of i){const m=o.get(h.name)??l.get(h.name);m&&u.push({name:h.name,version:m})}if(u.length===0)return!0;v(""),v("Socket.dev security check:");const g=await Lt(u,e);if(g.size===0)return v(" Could not fetch security data. Proceeding."),!0;const p=gl(g,r,n);return p.length===0?(v(""),!0):process.stdin.isTTY?hl(p,r):(oe(`Aborting: ${String(p.length)} package${p.length===1?"":"s"} below minimum score. Use --no-socket-check to skip.`),!1)},"runSocketPreCheck"),yl={group:"Dependencies",argument:{description:"Packages to add (e.g., react react-dom)",name:"packages",type:String},description:"Add packages using the detected package manager",examples:[["vis add react react-dom","Add packages"],["vis add -D typescript @types/react","Add as dev dependencies"],["vis add react --filter app","Add to specific workspace package"],["vis add -g typescript","Add globally (uses npm)"],["vis add lodash -w","Add to workspace root"],["vis add lodash --no-socket-check","Add without Socket.dev check"],["vis add lodash --no-typosquat-check","Skip typosquat name check"]],execute:Rt(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{let o=t;if(!o||o.length===0)throw new Error("No packages specified. Usage: vis add <packages...>");if(!r["no-typosquat-check"]){const g=o.map(h=>_n(h)),p=await _i(g.map(h=>h.name),n?.security?.typosquatAllowlist);if(!p.ok){process.exitCode=1;return}o=g.map((h,m)=>{const y=p.packages[m];return y!==h.name?h.versionSpec?`${y}@${h.versionSpec}`:y:o[m]})}if(!r["no-socket-check"]){const g=St(n?.security?.socket);if(g){const p=g.minimumScore??nt;if(!await ml(o,g,p,n?.security?.socket?.acceptedRisks)){process.exitCode=1;return}}}const s=process.cwd(),l=pe(i??s),u=Dc(l,{exact:r.exact||!1,filter:dr(r.filter),global:r.global||!1,optional:r["save-optional"]||!1,packages:o,peer:r["save-peer"]||!1,saveDev:r["save-dev"]||!1,workspace:r.workspace||!1,workspaceRoot:r["workspace-root"]||!1},s,e);u!==0&&(process.exitCode=u)},"execute"),name:"add",options:[{alias:"D",defaultValue:!1,description:"Add as dev dependency",name:"save-dev",type:Boolean},{alias:"E",defaultValue:!1,description:"Save exact version",name:"exact",type:Boolean},{alias:"P",defaultValue:!1,description:"Add as peer dependency",name:"save-peer",type:Boolean},{alias:"O",defaultValue:!1,description:"Add as optional dependency",name:"save-optional",type:Boolean},{alias:"g",defaultValue:!1,description:"Install globally (uses npm)",name:"global",type:Boolean},{alias:"w",defaultValue:!1,description:"Add to workspace root",name:"workspace-root",type:Boolean},{defaultValue:!1,description:"Use workspace protocol (pnpm)",name:"workspace",type:Boolean},{alias:"F",description:"Filter by workspace package name",multiple:!0,name:"filter",type:String},{defaultValue:!1,description:"Skip typosquat name check before adding",name:"no-typosquat-check",type:Boolean},{defaultValue:!1,description:"Skip Socket.dev security check before adding",name:"no-socket-check",type:Boolean}]};var vl=Object.defineProperty,qe=$((t,e)=>vl(t,"name",{value:e,configurable:!0}),"a$b");const wl=/\/+$/,kl=/\/\*\*$/,bl=/\/\*\/\*$/,$l=/^['"]|['"]$/g,Ji=/node_modules/,qi=/\.git/,jr=qe(t=>{try{return Je(t)}catch{return}},"readJsonFileSafe"),xl=qe((t,e,r)=>{for(const n of On(t,{includeFiles:!1,includeSymlinks:!1,skip:[Ji,qi]}))if(n.path!==t&&ae(A(n.path,"package.json"))){const i=n.path.slice(t.length+1);r.push(`${e}/${i}`)}},"scanDirectoryRecursive"),Sl=qe((t,e,r)=>{const n=e.slice(0,-2),i=Pt(t,n);if(ae(i))for(const o of On(i,{includeFiles:!1,includeSymlinks:!1,maxDepth:1,skip:[Ji,qi]}))o.path!==i&&ae(A(o.path,"package.json"))&&r.push(A(n,o.name))},"resolveSimpleGlob"),Cl=qe((t,e,r)=>{const n=e.replace(kl,"").replace(bl,""),i=Pt(t,n);ae(i)&&xl(i,n,r)},"resolveDoubleGlob"),El=qe((t,e,r)=>{const n=Pt(t,e);ae(n)&&ae(A(n,"package.json"))&&r.push(e)},"resolveExactDirectory"),wt=qe((t,e)=>{const r=[];for(const n of e){const i=n.replace(wl,"");i.startsWith("!")||(i.endsWith("/*")?Sl(t,i,r):i.endsWith("/**")||i.endsWith("/*/*")?Cl(t,i,r):El(t,i,r))}return r},"resolveWorkspacePatterns"),Xr=qe(t=>{const e=A(t,"pnpm-workspace.yaml");if(!ae(e))return;const r=_e(e),n=[];let i=!1;for(const o of r.split(`
15
+ `)){const s=o.trim();if(s==="packages:"){i=!0;continue}if(i){if(s.startsWith("- ")){const l=s.slice(2).replaceAll($l,"");n.push(l)}else if(s&&!s.startsWith("#"))break}}return n.length>0?n:void 0},"readPnpmWorkspacePatterns"),jl=qe((t,e)=>{const r={};for(const[n,i]of Object.entries(t)){const o=e?.[n];r[n]={...o,command:i}}return r},"createTargetsFromScripts"),Kr=qe((t,e={})=>{const r={},n=Xr(t),i=jr(A(t,"package.json"));let o;if(n?o=n:i?.workspaces&&(o=Array.isArray(i.workspaces)?i.workspaces:i.workspaces.packages),!o)throw new Error("No workspace configuration found. Expected pnpm-workspace.yaml or package.json workspaces field.");const s=wt(t,o);for(const l of s){const u=A(t,l,"package.json"),g=jr(u);if(!g?.name)continue;const p=A(t,l,"project.json"),h=jr(p),m=g.scripts?jl(g.scripts,e.targetDefaults):{};let y="library";h?.projectType?y=h.projectType:g.bin!==void 0&&(y="application"),r[g.name]={projectType:y,root:l,sourceRoot:h?.sourceRoot??`${l}/src`,tags:h?.tags,targets:m}}return{config:e,workspace:{projects:r}}},"discoverWorkspace"),Hn=qe((t,e)=>{const r={},n={},i=new Set(Object.keys(e.projects));for(const[o,s]of Object.entries(e.projects)){r[o]={data:s,name:o,type:s.projectType??"library"},n[o]=[];const l=jr(A(t,s.root,"package.json"));if(!l)continue;const u=[[l.dependencies,"static"],[l.devDependencies,"devDependency"],[l.peerDependencies,"peerDependency"]],g=new Set;for(const[p,h]of u)if(p)for(const m of Object.keys(p))i.has(m)&&!g.has(m)&&(g.add(m),n[o]?.push({source:o,target:m,type:h}))}return{dependencies:n,nodes:r}},"buildProjectGraph");var Tl=Object.defineProperty,Al=$((t,e)=>Tl(t,"name",{value:e,configurable:!0}),"u$f");const Il={group:"Run & Execute",argument:{description:"The target to run (e.g., build, test, lint)",name:"target",type:String},description:"Run a target only on projects affected by recent changes",examples:[["vis affected build","Run build on affected projects"],["vis affected test --base=main","Run tests on projects changed since main"]],execute:Al(async({argument:t,logger:e,options:r,runtime:n,visConfig:i,workspaceRoot:o})=>{const s=t[0];if(!s)throw new Error("Missing target. Usage: vis affected <target>");if(!o)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const l=o,{workspace:u}=Kr(l,i),g=Hn(l,u),p=new Set(["deep","direct","none"]),h=r.downstream??"deep",m=r.upstream??"none";if(!p.has(h))throw new Error(`Invalid --downstream value: "${h}". Must be "none", "direct", or "deep".`);if(!p.has(m))throw new Error(`Invalid --upstream value: "${m}". Must be "none", "direct", or "deep".`);const y={base:r.base,downstream:h,head:r.head,projectGraph:g,projects:u.projects,upstream:m,workspaceRoot:l},b=await Ya(y);if(b.changedFiles.length===0){e.info("No files changed. Nothing to run.");return}if(b.affectedProjects.length===0){e.info("No projects affected by the changes.");return}e.info(`Affected projects: ${b.affectedProjects.join(", ")}`);const x=[s,`--projects=${b.affectedProjects.join(",")}`];r.parallel!==void 0&&x.push(`--parallel=${String(r.parallel)}`),r.cache||x.push("--no-cache"),r.dryRun&&x.push("--dry-run"),r.partition&&x.push(`--partition=${String(r.partition)}`),await n.runCommand("run",{argv:x})},"execute"),name:"affected",options:[{defaultValue:"HEAD~1",description:"Git base ref for comparison",name:"base",type:String},{defaultValue:"HEAD",description:"Git head ref for comparison",name:"head",type:String},{defaultValue:"deep",description:'Downstream scope: "none", "direct", or "deep" — controls how far to include dependents of changed projects',name:"downstream",type:String},{defaultValue:"none",description:'Upstream scope: "none", "direct", or "deep" — controls how far to include dependencies of changed projects',name:"upstream",type:String},{defaultValue:3,description:"Maximum number of parallel tasks",name:"parallel",type:Number},{defaultValue:!0,description:"Enable caching (use --no-cache to disable)",name:"cache",type:Boolean},{defaultValue:!1,description:"Show what would run without executing",name:"dry-run",type:Boolean},{description:'Partition tasks for distributed CI (e.g., "1/4" for first of four runners). Falls back to VIS_PARTITION env var.',name:"partition",type:String}]};var Rl=Object.defineProperty,ie=$((t,e)=>Rl(t,"name",{value:e,configurable:!0}),"f$g");const Tt=(1n<<128n)-1n,K=(1n<<64n)-1n,Rr=(1n<<32n)-1n,Yi=0x9E3779B1n,Xi=0x85EBCA77n,Ol=0xC2B2AE3Dn,at=0x9E3779B185EBCA87n,kt=0xC2B2AE3D27D4EB4Fn,Ki=0x165667B19E3779F9n,Jn=0x85EBCA77C2B2AE63n,Pl=0x27D4EB2F165667C5n,Nl=0x165667919E3779F9n,Dl=0x9FB21C651E98DF25n,Ke=64,Qi=Ke/8,Ml=8,Ve=Buffer.from("b8fe6c3923a44bbe7c01812cf721ad1cded46de9839097db7240a4a4b7b3671fcb79e64eccc0e578825ad07dccff7221b8084674f743248ee03590e6813a264c3c2852bb91c300cb88d0658b1b532ea371644897a20df94e3819ef46a9deacd8a8fa763fe39c343ff9dcbbc7c70b4f1d8a51e04bcdb45931c89f7ec9d9787364eac5ac8334d3ebc3c581a0fffa1363eb170ddd51b7f0da49d316552629d4689e2b16be587d47a1fc8ff8b8d17ad031ce45cb3a8f95160428afd7fbcabb4b407e","hex"),ce=ie((t,e=0)=>Buffer.from(t.buffer,t.byteOffset+e,t.length-e),"getView"),Bl=ie(t=>{const e=Buffer.allocUnsafe(8);return e.writeBigUInt64LE(t),e.readBigUInt64BE()},"bswap64"),Ll=ie(t=>{let e=t;return e=(e&0x0000FFFFn)<<16n|(e&0xFFFF0000n)>>16n,e=(e&0x00FF00FFn)<<8n|(e&0xFF00FF00n)>>8n,e},"bswap32"),Fl=ie((t,e)=>(t&Rr)*(e&Rr)&K,"multU32ToU64"),Vl=ie((t,e)=>(t<<e|t>>32n-e)&Rr,"rotl32"),kn=ie((t,e)=>t^t>>e,"xorshift64"),bn=ie(t=>~t+1n&K,"inv64"),Zi=ie((t,e)=>{const r=t*e&Tt;return r&K^r>>64n},"mul128Fold64"),Ue=ie(t=>{let e=t;return e^=e>>37n,e=e*Nl&K,e^=e>>32n,e},"avalanche"),Or=ie(t=>{let e=t;return e^=e>>33n,e=e*kt&K,e^=e>>29n,e=e*Ki&K,e^=e>>32n,e},"avalanche64"),es=ie((t,e,r)=>{for(let n=0;n<Qi;n++){const i=e.readBigUInt64LE(n*8),o=i^r.readBigUInt64LE(n*8);t[n^1]+=i,t[n]+=Fl(o,o>>32n)}return t},"accumulate512"),jo=ie((t,e,r,n)=>{for(let i=0;i<n;i++)es(t,ce(e,i*Ke),ce(r,i*8));return t},"accumulate"),Ul=ie((t,e)=>{for(let r=0;r<Qi;r++){const n=e.readBigUInt64LE(r*8);let i=t[r];i=kn(i,47n),i^=n,i*=Yi,t[r]=i&K}return t},"scrambleAcc"),xr=ie((t,e)=>Zi(t[0]^e.readBigUInt64LE(0),t[1]^e.readBigUInt64LE(Ml)),"mix2Accs"),To=ie((t,e,r)=>{let n=r;return n+=xr(t.slice(0),ce(e,0)),n+=xr(t.slice(2),ce(e,16)),n+=xr(t.slice(4),ce(e,32)),n+=xr(t.slice(6),ce(e,48)),Ue(n&K)},"mergeAccs"),Gl=ie((t,e,r)=>{const n=Math.floor((r.byteLength-Ke)/8),i=Ke*n,o=Math.floor((e.byteLength-1)/i);for(let l=0;l<o;l++)jo(t,ce(e,l*i),r,n),Ul(t,ce(r,r.byteLength-Ke));const s=Math.floor((e.byteLength-1-i*o)/Ke);return jo(t,ce(e,o*i),r,s),es(t,ce(e,e.byteLength-Ke),ce(r,r.byteLength-Ke-7)),t},"hashLong"),zl=ie((t,e)=>{const r=new BigUint64Array([Ol,at,kt,Ki,Jn,Xi,Pl,Yi]);Gl(r,t,e);const n=To(r,ce(e,11),BigInt(t.byteLength)*at&K);return To(r,ce(e,e.byteLength-Ke-11),~(BigInt(t.byteLength)*kt)&K)<<64n|n},"hashLong128b"),Ao=ie((t,e,r)=>Zi((t.readBigUInt64LE(0)^e.readBigUInt64LE(0)+r)&K,(t.readBigUInt64LE(8)^e.readBigUInt64LE(8)-r)&K),"mix16B"),Tr=ie((t,e,r,n,i)=>{let o=t&K,s=t>>64n&K;return o+=Ao(e,n,i),o^=r.readBigUInt64LE(0)+r.readBigUInt64LE(8),o&=K,s+=Ao(r,ce(n,16),i),s^=e.readBigUInt64LE(0)+e.readBigUInt64LE(8),s&=K,s<<64n|o},"mix32B"),Wl=ie((t,e,r)=>{const n=t.byteLength,i=BigInt(t.readUInt8(n-1))|BigInt(n<<8)|BigInt(t.readUInt8(0)<<16)|BigInt(t.readUInt8(n>>1)<<24),o=(BigInt(e.readUInt32LE(0))^BigInt(e.readUInt32LE(4)))+r,s=(i^o)&K,l=(BigInt(e.readUInt32LE(8))^BigInt(e.readUInt32LE(12)))-r,u=(Vl(Ll(i),13n)^l)&K;return(Or(u)&K)<<64n|Or(s)},"len1to3_128b"),_l=ie((t,e,r)=>{const n=t.byteLength,i=t.readUInt32LE(0),o=t.readUInt32LE(n-4),s=BigInt(i)|BigInt(o)<<32n,l=(e.readBigUInt64LE(16)^e.readBigUInt64LE(24))+r&K;let u=(s^l)*(at+(BigInt(n)<<2n))&Tt;return u+=(u&K)<<65n,u&=Tt,u^=u>>67n,kn(kn(u&K,35n)*Dl&K,28n)|Ue(u>>64n)<<64n},"len4to8_128b"),Hl=ie((t,e,r)=>{const n=t.byteLength,i=(e.readBigUInt64LE(32)^e.readBigUInt64LE(40))+r&K,o=(e.readBigUInt64LE(48)^e.readBigUInt64LE(56))-r&K,s=t.readBigUInt64LE();let l=t.readBigUInt64LE(n-8),u=(s^l^i)*at;const g=(u&K)+(BigInt(n-1)<<54n);u=u&(Tt^K)|g,l^=o,u+=l+(l&Rr)*(Xi-1n)<<64n,u&=Tt,u^=Bl(u>>64n);let p=(u&K)*kt;return p+=(u>>64n)*kt<<64n,p&=Tt,Ue(p&K)|Ue(p>>64n)<<64n},"len9to16_128b"),Jl=ie((t,e)=>{const r=t.byteLength;return r>8?Hl(t,Ve,e):r>=4?_l(t,Ve,e):r>0?Wl(t,Ve,e):Or(e^Ve.readBigUInt64LE(64)^Ve.readBigUInt64LE(72))|Or(e^Ve.readBigUInt64LE(80)^Ve.readBigUInt64LE(88))<<64n},"len0to16_128b"),ql=ie((t,e,r)=>{let n=BigInt(t.byteLength)*at&K,i=BigInt(t.byteLength-1)/32n;for(;i>=0n;){const l=Number(i);n=Tr(n,ce(t,16*l),ce(t,t.byteLength-16*(l+1)),ce(e,32*l),r),i--}let o=n+(n>>64n)&K;o=Ue(o);let s=(n&K)*at+(n>>64n)*Jn+(BigInt(t.byteLength)-r&K)*kt;return s&=K,s=bn(Ue(s)),o|s<<64n},"len17to128_128b"),Yl=ie((t,e,r)=>{let n=BigInt(t.byteLength)*at&K;for(let s=32;s<160;s+=32)n=Tr(n,ce(t,s-32),ce(t,s-16),ce(e,s-32),r);n=Ue(n&K)|Ue(n>>64n)<<64n;for(let s=160;s<=t.byteLength;s+=32)n=Tr(n,ce(t,s-32),ce(t,s-16),ce(e,3+s-160),r);n=Tr(n,ce(t,t.byteLength-16),ce(t,t.byteLength-32),ce(e,103),bn(r));let i=n+(n>>64n)&K;i=Ue(i);let o=(n&K)*at+(n>>64n)*Jn+(BigInt(t.byteLength)-r&K)*kt;return o&=K,o=bn(Ue(o)),i|o<<64n},"len129to240_128b"),Xl=ie((t,e=0n)=>{const r=t.byteLength;return r<=16?Jl(t,e):r<=128?ql(t,Ve,e):r<=240?Yl(t,Ve,e):zl(t,Ve)},"xxh3_128"),Kl=ie(t=>{const e=t>>64n&K,r=t&K;return e.toString(16).padStart(16,"0")+r.toString(16).padStart(16,"0")},"bigintToHex"),ts=ie(t=>Kl(Xl(t)),"xxh3Hash");class Ql{static{$(this,"gn")}static{ie(this,"Xxh3Hasher")}#e=[];update(e){return typeof e=="string"?this.#e.push(Buffer.from(e)):this.#e.push(e),this}digest(){return ts(Buffer.concat(this.#e))}}ie(()=>new Ql,"createXxh3Hasher");var Zl=Object.defineProperty,ut=$((t,e)=>Zl(t,"name",{value:e,configurable:!0}),"i$8");const ur=ut(()=>A(Ce(),".vis","cache","ai"),"getCacheDirectory"),ed=3600*1e3,td=1800*1e3,rd=ut(()=>{const t=ur();V(t)||ye(t,{recursive:!0})},"ensureCacheDirectory"),nd=ut((t,e,r)=>{const n=r.map(o=>({currentRange:o.currentRange,name:o.packageName,targetVersion:o.targetVersion})).toSorted((o,s)=>o.name.localeCompare(s.name)),i=JSON.stringify({analysisType:e,packages:n,provider:t});return ts(Buffer.from(i))},"buildCacheKey"),od=ut(t=>{const e=A(ur(),`${t}.json`);if(V(e))try{const r=Y(e,"utf8"),n=JSON.parse(r);if(Date.now()-n.createdAt>n.ttlMs){it(e,{force:!0});return}return n.result}catch{it(e,{force:!0});return}},"getCachedAnalysis"),id=ut((t,e,r)=>{rd();const n=ur(),i={createdAt:Date.now(),result:e,ttlMs:r};_(A(n,`${t}.json`),JSON.stringify(i,void 0,2),"utf8")},"setCachedAnalysis"),sd=ut((t,e)=>e!==void 0&&e>0?e:t==="security"?td:ed,"getTtlForAnalysisType"),ad=ut(()=>{const t=ur();if(!V(t))return{entries:0,newestEntry:void 0,oldestEntry:void 0,totalSizeBytes:0};const e=lt(t).filter(o=>o.endsWith(".json"));let r=0,n,i;for(const o of e){const s=A(t,o),l=_r(s);r+=l.size;const{mtimeMs:u}=l;(n===void 0||u<n)&&(n=u),(i===void 0||u>i)&&(i=u)}return{entries:e.length,newestEntry:i,oldestEntry:n,totalSizeBytes:r}},"getCacheStats"),cd=ut(()=>{const t=ur();if(!V(t))return 0;const e=lt(t).filter(r=>r.endsWith(".json"));for(const r of e)it(A(t,r),{force:!0});return e.length},"clearCache");var ld=Object.defineProperty,he=$((t,e)=>ld(t,"name",{value:e,configurable:!0}),"o$e");const Ar={amp:30,claude:80,codex:60,copilot:50,crush:35,cursor:40,droid:20,gemini:100,kimi:25,opencode:35,qwen:30},qn=he(t=>{if(t?.provider){if(!nc.includes(t.provider))return;const n=oc(t.provider);return n.available?n:void 0}const e=ic();if(e.length===0)return;const r={...Ar,...t?.priority};return e.toSorted((n,i)=>(r[i.name]??0)-(r[n.name]??0))[0]},"resolveProvider"),dd=new Set(["defer","review","skip","update"]),ud=new Set(["critical","high","low","medium"]),pd=new Set(["high","low","medium"]),fd=50,un=30,gd=2,hd=1e3,md=12e4,yd=he(t=>t.map(e=>{const r=e.vulnerabilities&&e.vulnerabilities.length>0?` [VULNERABILITIES: ${e.vulnerabilities.map(i=>`${i.severity} ${i.id}`).join(", ")}]`:"";let n="";if(e.socketReport){const i=Math.round(e.socketReport.score.overall*100),o=[`score:${String(i)}%`];if(e.socketReport.alerts.length>0){const s=e.socketReport.alerts.reduce((u,g)=>(u[g.severity]=(u[g.severity]??0)+1,u),{}),l=Object.entries(s).map(([u,g])=>`${String(g)} ${u}`).join(", ");o.push(`alerts: ${l}`)}o.push(`supply-chain:${String(Math.round(e.socketReport.score.supplyChain*100))}%`),o.push(`quality:${String(Math.round(e.socketReport.score.quality*100))}%`),n=` [SOCKET.DEV: ${o.join(", ")}]`}return`- ${e.packageName}: ${e.currentRange} → ${e.newRange} (${e.updateType})${r}${n}`}).join(`
16
+ `),"buildPackageList"),Sr=`Respond ONLY with valid JSON in this exact structure:
7
17
  {
8
18
  "summary": "Brief overall summary",
9
19
  "recommendations": [
@@ -17,9 +27,9 @@ const sa=oa(import.meta.url),K=typeof globalThis<"u"&&typeof globalThis.process<
17
27
  }
18
28
  ],
19
29
  "warnings": ["warning1"]
20
- }`,Bn={compatibility:S(e=>`Analyze the compatibility of these package updates:
30
+ }`,vd={compatibility:he(t=>`Analyze the compatibility of these package updates:
21
31
 
22
- ${e}
32
+ ${t}
23
33
 
24
34
  For each package:
25
35
  1. Check peer dependency compatibility
@@ -28,9 +38,9 @@ For each package:
28
38
  4. Check for deprecated features being removed
29
39
  5. Evaluate Node.js version requirements
30
40
 
31
- ${se}`,"compatibility"),impact:S(e=>`Analyze the impact of updating these npm packages:
41
+ ${Sr}`,"compatibility"),impact:he(t=>`Analyze the impact of updating these npm packages:
32
42
 
33
- ${e}
43
+ ${t}
34
44
 
35
45
  For each package, provide:
36
46
  1. Risk level (low/medium/high/critical)
@@ -39,9 +49,9 @@ For each package, provide:
39
49
  4. Known breaking changes (if any)
40
50
  5. Estimated migration effort (low/medium/high)
41
51
 
42
- ${se}`,"impact"),recommend:S(e=>`Provide smart recommendations for updating these packages:
52
+ ${Sr}`,"impact"),recommend:he(t=>`Provide smart recommendations for updating these packages:
43
53
 
44
- ${e}
54
+ ${t}
45
55
 
46
56
  Consider:
47
57
  1. Update priority based on security, features, and stability
@@ -49,10 +59,11 @@ Consider:
49
59
  3. Best practices for the specific package ecosystem
50
60
  4. Risk vs. benefit analysis
51
61
  5. Suggested update order
62
+ 6. If Socket.dev scores are provided, prioritize packages with low supply chain or quality scores
52
63
 
53
- ${se}`,"recommend"),security:S(e=>`Analyze the security implications of these package updates:
64
+ ${Sr}`,"recommend"),security:he(t=>`Analyze the security implications of these package updates:
54
65
 
55
- ${e}
66
+ ${t}
56
67
 
57
68
  For each package:
58
69
  1. Check if the update fixes known vulnerabilities (use the vulnerability data above)
@@ -60,39 +71,670 @@ For each package:
60
71
  3. Evaluate if this is a security-sensitive package (auth, crypto, session, etc.)
61
72
  4. Recommend urgency of the update based on vulnerability severity
62
73
  5. Flag any packages where skipping the update poses security risk
74
+ 6. If Socket.dev scores are provided, factor in supply chain and quality scores — low scores indicate higher risk
63
75
 
64
- ${se}`,"security")},In=new Set(["compatibility","impact","recommend","security"]),Ue=S(e=>In.has(e)?e:"impact","validateAnalysisType"),wt=S((e,t="impact")=>{const a=On(e);return Bn[t](a)},"buildAnalysisPrompt"),Pn=/```(?:json)?\s*([\s\S]*?)```/,An=/\{[\s\S]*\}/,Ln=S(e=>{try{return JSON.parse(e)}catch{}const t=Pn.exec(e);if(t?.[1])try{return JSON.parse(t[1])}catch{}const a=An.exec(e);if(a?.[0])try{return JSON.parse(a[0])}catch{}},"extractJson"),Tn=S(e=>({action:Sn.has(e.action)?e.action:"review",breakingChanges:Array.isArray(e.breakingChanges)?e.breakingChanges:[],effort:Cn.has(e.effort)?e.effort:"medium",package:typeof e.package=="string"?e.package:"",reason:typeof e.reason=="string"?e.reason:"",riskLevel:jn.has(e.riskLevel)?e.riskLevel:"medium"}),"normalizeRecommendation"),bt=S((e,t,a)=>{const n=Ln(e);if(!n||typeof n!="object")return{analysisType:a,provider:t,recommendations:[],summary:"Failed to parse AI response.",warnings:["AI response was not valid JSON."]};const r=n,o=Array.isArray(r.recommendations)?r.recommendations:[];return{analysisType:a,provider:t,recommendations:o.map(s=>Tn(s)),summary:typeof r.summary=="string"?r.summary:"",warnings:Array.isArray(r.warnings)?r.warnings:[]}},"parseAiResponse"),Un={eslint:["ESLint 9.0: Flat config required","ESLint 8.0+: New rule formats"],next:["Next.js 13+: App router changes","Next.js 14+: Server components default"],react:["React 17 to 18: Concurrent features","React 18+: Strict mode changes"],typescript:["TypeScript 5.0: New decorators","TypeScript 4.7+: ESM changes"],vite:["Vite 5: Node.js 18+ required"],vue:["Vue 3: Composition API","Vue 3: Breaking template changes"],webpack:["Webpack 5: Node.js polyfills removed"]},Mn=new Set(["bcrypt","cors","crypto-js","express-session","helmet","jose","jsonwebtoken","node-forge","oauth","passport"]),Xe=S((e,t)=>{const a=e.map(n=>{const r=n.vulnerabilities&&n.vulnerabilities.length>0,o=Mn.has(n.packageName),s=Un[n.packageName]??[];let i="low",c="update",l="low",p="Patch/minor update, safe to apply.";return n.updateType==="major"?(i="high",c=s.length>0?"review":"update",l="medium",p=s.length>0?`Major update with known breaking changes: ${s[0]}`:"Major version update, review changelog before applying."):n.updateType==="minor"&&(i="medium",p="Minor update, generally safe."),r&&(i="high",c="update",p="Security update — current version has known vulnerabilities."),o&&n.updateType==="major"&&(c="review",p="Security-sensitive package with major update, careful review needed.",l="high"),{action:c,breakingChanges:s,effort:l,package:n.packageName,reason:p,riskLevel:i}});return{analysisType:t,provider:"rule-engine",recommendations:a,summary:`Rule-based ${t} analysis for ${String(e.length)} packages.`,warnings:["No AI provider available — using built-in rule engine."]}},"ruleBasedAnalysis"),Vn=S(e=>new Promise(t=>{setTimeout(t,e)}),"sleep"),St=S(async(e,t,a=En)=>{let n;for(let r=0;r<=a;r+=1)try{return(await it(e,t,{timeoutMs:Nn})).stdout}catch(o){if(n=o instanceof Error?o:new Error(String(o)),n.message.includes("timed out"))throw n;if(r<a){const s=Rn*2**r;await Vn(s)}}throw n??new Error("AI analysis failed after retries")},"runWithRetry"),Fn=S(async(e,t,a)=>{const n=wt(t,a),r=await St(e,n);return bt(r,e.name,a)},"analyzeChunk"),Dn=S((e,t,a)=>{const n=[],r=[],o=[];for(const s of e)n.push(...s.recommendations),r.push(...s.warnings),s.summary&&o.push(s.summary);return{analysisType:a,provider:t,recommendations:n,summary:o.length===1?o[0]??"":`Analyzed ${String(n.length)} packages in ${String(e.length)} batches.`,warnings:[...new Set(r)]}},"mergeResults"),jt={compatibility:"Compatibility",impact:"Impact",recommend:"Recommendations",security:"Security"},de=S(e=>{const t=Ne();t.setHeaders(["Package","Risk","Action","Effort","Reason"]);for(const r of e.recommendations)t.addRow([r.package,r.riskLevel,r.action,r.effort,r.reason]),r.breakingChanges.length>0&&t.addRow(["",{colSpan:4,content:`Breaking: ${r.breakingChanges.join("; ")}`}]);const a=`${jt[e.analysisType]??e.analysisType} Analysis (${e.provider})`,n=[t.toString()];return e.warnings.length>0&&n.push(e.warnings.map(r=>` ${r}`).join(`
65
- `)),ct(`${e.summary}
66
-
67
- ${n.join(`
68
- `)}`,{headerText:a,padding:{left:1,right:1}})},"formatAiAnalysis");S(e=>JSON.stringify(e,void 0,2),"formatAiAnalysisJson");const Me=S(async(e,t,a,n="impact")=>{const r=Te(a);if(!r)return t.info(`No AI CLI tool found, using rule-based analysis.
69
- `),Xe(e,n);const o=hn(r.name,n,e),s=yn(o);if(s)return t.info(`Using cached ${n} analysis from ${s.provider}.
70
- `),s;const i=jt[n]??n;t.info(`Running ${i.toLowerCase()} analysis with ${r.name}...
71
- `);try{let c;if(e.length>xn){t.info(`Splitting ${String(e.length)} packages into batches of ${String($e)}...
72
- `);const l=[];for(let g=0;g<e.length;g+=$e)l.push(e.slice(g,g+$e));const p=[];for(let g=0;g<l.length;g+=1){t.info(` Batch ${String(g+1)}/${String(l.length)}...`);const f=l[g];f&&p.push(await Fn(r,f,n))}c=Dn(p,r.name,n)}else{const l=await St(r,wt(e,n));c=bt(l,r.name,n)}return vn(o,c,kn(n,a?.cacheTtl)),c}catch(c){const l=c instanceof Error?c.message:String(c);return t.warn(`AI analysis failed (${l}), falling back to rule engine.
73
- `),Xe(e,n)}},"runAiAnalysis");var Jn=Object.defineProperty,ve=y((e,t)=>Jn(e,"name",{value:t,configurable:!0}),"r$4");const Wn=ve((e,t)=>{const a=$n();if(e==="json"){process.stdout.write(`${JSON.stringify(a,void 0,2)}
74
- `);return}t.info("AI Cache Statistics:"),t.info(` Entries: ${String(a.entries)}`),t.info(` Total size: ${String(Math.round(a.totalSizeBytes/1024))} KB`),t.info(` Oldest: ${a.oldestEntry?new Date(a.oldestEntry).toISOString():"N/A"}`),t.info(` Newest: ${a.newestEntry?new Date(a.newestEntry).toISOString():"N/A"}`)},"handleCacheStats"),_n=ve(async(e,t)=>{const a=Te(t);if(!a){e.error("No AI provider available to test."),process.exitCode=1;return}e.info(`Testing ${a.name}...`);try{const n=await it(a,"Reply with exactly: OK",{timeoutMs:3e4});e.info(`Provider ${a.name} responded: ${n.stdout.trim().slice(0,200)}`)}catch(n){const r=n instanceof Error?n.message:String(n);e.error(`Provider ${a.name} failed: ${r}`),process.exitCode=1}},"handleTest"),zn=ve((e,t,a)=>{const n=ba(),r=Te(a);if(e==="json"){const s=n.map(i=>({available:i.available,method:i.detectionMethod,name:i.name,path:i.path,priority:le[i.name]??0,selected:i.name===r?.name,version:i.version}));process.stdout.write(`${JSON.stringify(s,void 0,2)}
75
- `);return}const o=Ne();o.setHeaders(["Provider","Status","Version","Method","Path","Priority","Selected"]);for(const s of n)o.addRow([s.name,s.available?"available":"not found",s.version??"-",s.detectionMethod??"-",s.path??"-",String(le[s.name]??0),s.name===r?.name?">>>":""]);t.info(o.toString()),r?t.info(`
76
- Selected provider: ${r.name} (priority ${String(le[r.name]??0)})`):t.info(`
77
- No AI provider available. Install one of the supported AI CLI tools.`)},"handleProviderStatus"),Hn={alias:"a",description:"Show AI provider status, test connectivity, and manage cache",examples:[["vis ai","Show all AI providers and their status"],["vis ai --test","Test the best available provider"],["vis ai --cache-stats","Show AI response cache statistics"],["vis ai --clear-cache","Clear the AI response cache"],["vis ai --format json","Output as JSON"]],execute:ve(async({logger:e,options:t,visConfig:a})=>{const n=t.format??"table";if(t["cache-stats"]){Wn(n,e);return}if(t["clear-cache"]){const r=wn();e.info(`Cleared ${String(r)} cached AI response${r===1?"":"s"}.`);return}if(t.test){await _n(e,a?.ai);return}zn(n,e,a?.ai)},"execute"),name:"ai",options:[{defaultValue:!1,description:"Test the best available AI provider with a quick prompt",name:"test",type:Boolean},{defaultValue:!1,description:"Show AI response cache statistics",name:"cache-stats",type:Boolean},{defaultValue:!1,description:"Clear the AI response cache",name:"clear-cache",type:Boolean},{description:"Output format: table or json (default: table)",name:"format",type:String}]};var Gn=Object.defineProperty,d=y((e,t)=>Gn(e,"name",{value:t,configurable:!0}),"c$4");const qn=/(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.]+))?/i,Kn=/^([\^~]|>=|<=|[><=])/,Yn=/^(?:'([^']+)'|"([^"]+)"|([^:\s]+)):\s*(?:'([^']+)'|"([^"]+)"|(\S+))/,Xn=/^catalog:/m,Zn=/^catalogs:/m,Qn=/^(@[^:]+):registry$/,er=/^\/\/(.+)\/:_authToken$/,tr=/\*+/g,ar=/[.+^${}()|[\]\\]/g,Ze=/[.*+?^${}()|[\]\\]/g,Ct=/^['"]|['"]$/g,nr=/^https?:\/\//,xt=/\/$/,rr=/\n(\s+)/,or=new Set(["dependencies","devDependencies","optionalDependencies","peerDependencies"]),Ve=".vis-backup",D=d(e=>{const t=qn.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]??""}},"parseVersion"),Et=d(e=>Kn.exec(e)?.[1]??"","extractPrefix"),Rt=d((e,t)=>e.major!==t.major?"major":e.minor!==t.minor?"minor":e.patch!==t.patch?"patch":"none","getUpdateType"),Qe=d((e,t)=>t.major!==e.major?t.major>e.major:t.minor!==e.minor?t.minor>e.minor:t.patch!==e.patch?t.patch>e.patch:e.prerelease&&!t.prerelease?!0:e.prerelease&&t.prerelease?t.prerelease>e.prerelease:!1,"isNewer"),et=d((e,t)=>{const a=t.replaceAll(tr,"*").replaceAll(ar,String.raw`\$&`);return new RegExp(`^${a.replaceAll("*",".*").replaceAll("?",".")}$`).test(e)},"matchesPattern"),sr=d((e,t,a)=>a.some(n=>et(e,n))?!1:t.length>0?t.some(n=>et(e,n)):!0,"matchesFilters"),Nt=d(e=>{const t=Yn.exec(e);if(!t)return;const a=t[1]??t[2]??t[3],n=t[4]??t[5]??t[6];if(!(!a||!n))return[a,n]},"parseYamlEntry"),Ot=d((e,t,a,n)=>{e.has(t)||e.set(t,new Map);const r=e.get(t);r&&r.set(a,n)},"setCatalogEntry"),ir=d((e,t,a)=>{if(a<2)return;const n=Nt(t);n&&Ot(e,"default",n[0],n[1])},"parseCatalogSection"),cr=d((e,t,a,n)=>{if(a===2&&t.endsWith(":"))return t.slice(0,-1).trim().replaceAll(Ct,"");if(a>=4&&n){const r=Nt(t);r&&Ot(e,n,r[0],r[1])}return n},"parseCatalogsSection"),Bt=d(e=>e==="catalog:"||e.startsWith("catalog:")?"catalog":e==="catalogs:"||e.startsWith("catalogs:")?"catalogs":"none","detectTopLevelSection"),lr=d(e=>{const t=new Map;let a="none",n="";for(const r of e.split(`
78
- `)){const o=r.trimStart(),s=r.length-o.length;if(s===0&&o.length>0&&!o.startsWith("#")){a=Bt(o),a==="catalogs"&&(n="");continue}o.length===0||o.startsWith("#")||(a==="catalog"&&ir(t,o,s),a==="catalogs"&&(n=cr(t,o,s,n)))}return t},"parseCatalogsFromYaml"),pr=d(e=>{const t=u(e,"pnpm-workspace.yaml");if(!b(t))return!1;const a=A(t);return Xn.test(a)||Zn.test(a)},"hasPnpmCatalogs"),ur=d(e=>{const t=u(e,"pnpm-workspace.yaml");if(!b(t))return new Map;const a=A(t);return lr(a)},"readPnpmCatalogs"),It=d(e=>{if(b(e))try{return W(e)}catch{return}},"readPackageJsonSafe"),dr=d(e=>{const t=It(u(e,"package.json"));return!!(t?.workspaces?.catalog||t?.workspaces?.catalogs)},"hasBunCatalogs"),gr=d(e=>{const t=new Map;if(e.workspaces?.catalog&&typeof e.workspaces.catalog=="object"&&t.set("default",new Map(Object.entries(e.workspaces.catalog))),e.workspaces?.catalogs&&typeof e.workspaces.catalogs=="object")for(const[a,n]of Object.entries(e.workspaces.catalogs))typeof n=="object"&&n!==void 0&&t.set(a,new Map(Object.entries(n)));return t},"parseBunCatalogs"),fr=d(e=>{const t=It(u(e,"package.json"));return t?gr(t):new Map},"readBunCatalogs"),Fe=d(e=>{const t=e.lastIndexOf(":");if(t===-1)return;const a=e.slice(t+1);if(or.has(a))return{depType:a,relativePath:e.slice(0,t)}},"parseCompositeCatalogName"),mr=d(e=>e?.dev?["devDependencies"]:e?.prod?["dependencies"]:["dependencies","devDependencies","peerDependencies","optionalDependencies"],"getDepTypesToInclude"),hr=d((e,t,a)=>{const n=new Set;t&&n.add(t);for(const r of a){const o=u(e,r,"package.json");if(b(o))try{const s=W(o);s.name&&n.add(s.name)}catch{}}return n},"collectInternalPackageNames"),yr=d((e,t)=>{const a=new Map;for(const[n,r]of Object.entries(e))t.has(n)||r.startsWith("workspace:")||r.startsWith("file:")||r.startsWith("link:")||a.set(n,r);return a},"filterExternalDeps"),vr=d((e,t,a,n,r,o)=>{const s=t==="."?a:u(e,t,"package.json");if(!b(s))return;let i;try{i=W(s)}catch{return}for(const c of n){const l=i[c];if(!l||typeof l!="object")continue;const p=yr(l,r);p.size>0&&o.set(`${t}:${c}`,p)}},"scanDirectoryDeps"),we=d((e,t)=>{const a=new Map,n=u(e,"package.json");if(!b(n))return a;const r=W(n);let o=[];const s=r.workspaces;if(s){const p=Array.isArray(s)?s:s.packages;o=gt(e,p)}const i=hr(e,r.name,o),c=mr(t),l=[".",...o];for(const p of l)vr(e,p,n,c,i,a);return a},"readPackageJsonDeps"),be=d(e=>{const t=u(e,"package.json");if(!b(t))return!1;try{const a=W(t);return!!(a.dependencies||a.devDependencies||a.peerDependencies||a.optionalDependencies)}catch{return!1}},"hasPackageJsonDeps"),kr=d((e,t)=>{const a=new Map;for(const n of t){const r=Fe(n.catalogName);if(!r)continue;const o=r.relativePath==="."?u(e,"package.json"):u(e,r.relativePath,"package.json");a.has(o)||a.set(o,[]);const s=a.get(o);s&&s.push({depType:r.depType,newRange:n.newRange,packageName:n.packageName})}for(const[n,r]of a){const o=W(n);for(const{depType:s,newRange:i,packageName:c}of r)o[s]&&(o[s][c]=i);st(n,o,{detectIndent:!0,overwrite:!0})}},"applyPackageJsonUpdates"),$r=d((e,t)=>t==="bun"?dr(e)||be(e):t==="npm"||t==="yarn"?be(e):pr(e)||be(e),"hasCatalogs"),De=d((e,t,a)=>{if(t==="bun"){const r=fr(e);return r.size>0?r:we(e,a)}if(t==="npm"||t==="yarn")return we(e,a);const n=ur(e);return n.size>0?n:we(e,a)},"readCatalogs"),tt=d(e=>{const t=new Map,a=new Map;let n="https://registry.npmjs.org";for(const r of e.split(`
79
- `)){const o=r.trim();if(!o||o.startsWith("#")||o.startsWith(";"))continue;const s=o.indexOf("=");if(s===-1)continue;const i=o.slice(0,s).trim(),c=o.slice(s+1).trim(),l=Qn.exec(i);if(l?.[1]){t.set(l[1],c);continue}if(i==="registry"){n=c;continue}const p=er.exec(i);p?.[1]&&a.set(p[1],c)}return{authTokens:a,defaultRegistry:n,registries:t}},"parseNpmrc"),wr=d((e,t)=>({authTokens:new Map([...e.authTokens,...t.authTokens]),defaultRegistry:t.defaultRegistry==="https://registry.npmjs.org"?e.defaultRegistry:t.defaultRegistry,registries:new Map([...e.registries,...t.registries])}),"mergeNpmrcConfigs"),Pt=d(e=>{const t={authTokens:new Map,defaultRegistry:"https://registry.npmjs.org",registries:new Map},a=process.env.HOME??process.env.USERPROFILE??"",n=u(a,".npmrc");let r=a&&b(n)?tt(A(n)):t;const o=u(e,".npmrc");return b(o)&&(r=wr(r,tt(A(o)))),r},"loadNpmrc"),br=d((e,t)=>{let a=t.defaultRegistry;if(e.startsWith("@")){const r=e.split("/")[0];if(r&&t.registries.has(r)){const o=t.registries.get(r);o&&(a=o)}}const n=a.replace(nr,"").replace(xt,"");return{token:t.authTokens.get(n),url:a}},"getRegistryForPackage"),Sr=15e3,At=d(async(e,t,a=Sr)=>{const n=`${(t?.url??"https://registry.npmjs.org").replace(xt,"")}/${e}`,r={Accept:"application/vnd.npm.install-v1+json"};t?.authToken&&(r.Authorization=`Bearer ${t.authToken}`);const o=new AbortController,s=setTimeout(()=>o.abort(),a);try{const i=await fetch(n,{headers:r,signal:o.signal});if(!i.ok)throw new Error(`Failed to fetch ${e}: ${String(i.status)} ${i.statusText}`);const c=await i.json();return{latest:c["dist-tags"]?.latest??"",versions:Object.keys(c.versions??{})}}finally{clearTimeout(s)}},"fetchPackageVersions"),jr=d(e=>{const t=e.database_specific?.severity?.toUpperCase();if(t==="CRITICAL"||t==="HIGH"||t==="MODERATE"||t==="LOW")return t;const a=e.severity?.find(n=>n.type==="CVSS_V3")?.score;if(a){const n=Number.parseFloat(a);return n>=9?"CRITICAL":n>=7?"HIGH":n>=4?"MODERATE":"LOW"}return"UNKNOWN"},"mapOsvSeverity"),Cr=d(e=>{const t=e.severity?.find(a=>a.type==="CVSS_V3")?.score;return t?Number.parseFloat(t):void 0},"mapOsvCvss"),xr=d(e=>{const t=[];for(const a of e.affected??[])for(const n of a.ranges??[])for(const r of n.events??[])r.fixed&&t.push(r.fixed);return t},"mapOsvFixedVersions"),Er=d(e=>({cvssScore:Cr(e),fixedVersions:xr(e),id:e.id,severity:jr(e),summary:e.summary??""}),"mapOsvVuln"),Lt=d(async(e,t=1e4)=>{if(e.length===0)return new Map;const a=e.map(o=>({package:{ecosystem:"npm",name:o.name},version:o.version})),n=new AbortController,r=setTimeout(()=>n.abort(),t);try{const o=await fetch("https://api.osv.dev/v1/querybatch",{body:JSON.stringify({queries:a}),headers:{"Content-Type":"application/json"},method:"POST",signal:n.signal});if(!o.ok)return new Map;const s=await o.json(),i=new Map;for(const[c,l]of e.entries()){const p=s.results[c]?.vulns;p&&p.length>0&&i.set(l.name,p.map(g=>Er(g)))}return i}catch{return new Map}finally{clearTimeout(r)}},"fetchVulnerabilities"),Rr=d((e,t)=>e.parsed.major!==t.parsed.major?t.parsed.major-e.parsed.major:e.parsed.minor!==t.parsed.minor?t.parsed.minor-e.parsed.minor:t.parsed.patch-e.parsed.patch,"sortVersionCandidates"),Nr=d((e,t,a,n,r)=>{const o=D(a);if(o){if(n==="latest"){const s=D(t);return!s||!r&&s.prerelease||!Qe(o,s)?void 0:t}return e.map(s=>({parsed:D(s),raw:s})).filter(s=>!s.parsed||!r&&s.parsed.prerelease||!Qe(o,s.parsed)?!1:n==="patch"?s.parsed.major===o.major&&s.parsed.minor===o.minor:s.parsed.major===o.major).toSorted(Rr)[0]?.raw}},"findTargetVersion"),Or=d((e,t)=>{const a=[];for(const[n,r]of e)for(const[o,s]of r)s.startsWith("workspace:")||s.startsWith("file:")||s.startsWith("link:")||s==="*"||sr(o,t.include,t.exclude)&&a.push({catalogName:n,packageName:o,range:s});return a},"collectEntries"),Br=d(async(e,t,a)=>{const n=new Map,r=[],o=8;let s=0;for(let i=0;i<e.length;i+=o){const c=e.slice(i,i+o),l=await Promise.allSettled(c.map(async p=>{const g=t?br(p,t):void 0,f=await At(p,g?{authToken:g.token,url:g.url}:void 0);return n.set(p,f),p}));for(const[p,g]of l.entries())if(s+=1,g.status==="rejected"){const f=c[p];f&&r.push(f)}a&&a(s,e.length)}return{failed:r,versionCache:n}},"fetchVersionsBatched"),Ir=d((e,t,a)=>{const n=[];for(const r of e){const o=t.get(r.packageName);if(!o)continue;const s=Nr(o.versions,o.latest,r.range,a.target,a.includePrerelease);if(!s)continue;const i=D(r.range),c=D(s);if(!i||!c)continue;const l=Rt(i,c);if(l==="none")continue;const p=Et(r.range);n.push({catalogName:r.catalogName,currentRange:r.range,newRange:`${p}${s}`,packageName:r.packageName,targetVersion:s,updateType:l})}return n},"buildOutdatedEntries"),Pr=d(async(e,t)=>{const a=[...new Map(t.map(r=>{const o=D(r.range);return[r.packageName,{name:r.packageName,version:o?`${String(o.major)}.${String(o.minor)}.${String(o.patch)}`:""}]})).values()].filter(r=>r.version),n=await Lt(a);for(const r of e){const o=n.get(r.packageName);o&&o.length>0&&(r.vulnerabilities=o)}},"enrichWithSecurity"),Tt=d(async(e,t,a,n)=>{const r=Or(e,t),o=[...new Set(r.map(l=>l.packageName))],{failed:s,versionCache:i}=await Br(o,a,n),c=Ir(r,i,t);return t.security&&c.length>0&&await Pr(c,r),{failed:s,outdated:c}},"checkOutdated"),Je=d((e,t)=>t==="bun"?u(e,"package.json"):u(e,"pnpm-workspace.yaml"),"getCatalogFilePath"),Ar=d((e,t)=>{const a=u(e,Ve),n=new Set;for(const r of t){const o=Fe(r.catalogName);o&&n.add(o.relativePath==="."?"package.json":u(o.relativePath,"package.json"))}if(n.size!==0){Ge(a);for(const r of n){const o=u(e,r);if(b(o)){const s=u(a,r),i=va(s);Ge(i),te(s,A(o))}}return a}},"createPackageJsonBackup"),Lr=d((e,t,a)=>{if((t==="npm"||t==="yarn")&&a)return Ar(e,a);const n=Je(e,t);if(!b(n))return;const r=`${n}.bak`,o=A(n);return te(r,o),r},"createBackup"),Tr=d(e=>{const t=u(e,Ve);if(!b(t))return!1;for(const a of Ee(t,{includeDirs:!1})){const n=a.path.slice(t.length+1),r=u(e,n);te(r,A(a.path))}return ya(t),!0},"restorePackageJsonBackup"),Ur=d((e,t)=>{if(t==="npm"||t==="yarn")return Tr(e);const a=Je(e,t),n=`${a}.bak`;if(!b(n))return!1;const r=A(n);return te(a,r),!0},"restoreFromBackup"),Mr=d((e,t)=>{if(t==="npm"||t==="yarn")return b(u(e,Ve));const a=Je(e,t);return b(`${a}.bak`)},"hasBackup"),Vr=d(e=>JSON.stringify(e,void 0,2),"formatOutdatedJson"),Ut=d(e=>e.map(t=>`${t.packageName} ${t.currentRange} → ${t.newRange}`).join(`
80
- `),"formatOutdatedMinimal"),V=d(e=>e?Array.isArray(e)?e:[e]:[],"toFilterArray"),Fr=d(e=>{const t=new Map;for(const a of e){t.has(a.catalogName)||t.set(a.catalogName,[]);const n=t.get(a.catalogName);n&&n.push(a)}return t},"groupByCatalog"),Dr=d(e=>{const t=Fe(e);return t?`${t.relativePath==="."?"root":t.relativePath} (${t.depType})`:`Catalog: ${e}`},"formatCatalogDisplayName"),Mt=d((e,t)=>{const a=Fr(e);for(const[n,r]of a){const o=Ne();o.setHeaders(["Package","Current","Target","Type"]);for(const i of r){const c=i.vulnerabilities&&i.vulnerabilities.length>0?`[SEC] ${i.packageName}`:i.packageName;if(o.addRow([c,i.currentRange,i.newRange,i.updateType]),i.vulnerabilities)for(const l of i.vulnerabilities)o.addRow([` ${l.severity} ${l.id}`,{colSpan:3,content:l.summary}])}const s=Dr(n);t.info(`${s}
81
- ${o.toString()}
82
- `)}},"formatOutdatedTable"),Vt=d(e=>{const t=e.filter(i=>i.updateType==="major").length,a=e.filter(i=>i.updateType==="minor").length,n=e.filter(i=>i.updateType==="patch").length,r=e.filter(i=>i.vulnerabilities&&i.vulnerabilities.length>0).length,o=[];t&&o.push(`${String(t)} major`),a&&o.push(`${String(a)} minor`),n&&o.push(`${String(n)} patch`),r&&o.push(`${String(r)} with vulnerabilities`);const s=`Found ${String(e.length)} outdated (${o.join(", ")})`;return ct(s,{headerText:"Summary",padding:{left:1,right:1}})},"formatSummary"),Jr=d((e,t)=>{const a=e.replaceAll(Ze,String.raw`\$&`),n=t.replaceAll(Ze,String.raw`\$&`);return new RegExp(String.raw`^(?:'${a}'|"${a}"|${a}):\s*['"]?${n}['"]?`)},"buildLineMatchRegex"),Wr=d((e,t,a)=>Jr(t,a).test(e),"lineMatchesPackage"),_r=d(e=>{const t=new Map;for(const a of e){t.has(a.catalogName)||t.set(a.catalogName,new Map);const n=t.get(a.catalogName);n&&n.set(a.packageName,{newRange:a.newRange,oldRange:a.currentRange})}return t},"buildUpdateMap"),at=d((e,t,a)=>{if(!a)return e;for(const[n,{newRange:r,oldRange:o}]of a)if(Wr(t,n,o))return e.replace(o,r);return e},"applyLineUpdate"),zr=d((e,t,a,n)=>{const r=e.trimStart(),o=e.length-r.length;return r.length===0||r.startsWith("#")?e:t==="catalog"&&o>=2?at(e,r,n.get("default")):t==="catalogs"&&o>=4&&a?at(e,r,n.get(a)):e},"processYamlLineForUpdate"),Hr=d((e,t)=>{const a=u(e,"pnpm-workspace.yaml"),n=A(a).split(`
83
- `),r=_r(t);let o="none",s="";const i=[];for(const c of n){const l=c.trimStart(),p=c.length-l.length;p===0&&l.length>0&&!l.startsWith("#")&&(o=Bt(l),o==="catalogs"&&(s="")),o==="catalogs"&&p===2&&l.endsWith(":")&&(s=l.slice(0,-1).trim().replaceAll(Ct,"")),i.push(zr(c,o,s,r))}te(a,i.join(`
84
- `))},"applyPnpmCatalogUpdates");d(e=>{const t=rr.exec(e);if(!t)return 2;const a=t[1];return a?a.includes(" ")?a:a.length:2},"detectJsonIndent");const Gr=d((e,t)=>{const a=u(e,"package.json"),n=W(a);for(const r of t)if(r.catalogName==="default")n.workspaces?.catalog&&(n.workspaces.catalog[r.packageName]=r.newRange);else{const o=n.workspaces?.catalogs?.[r.catalogName];o&&(o[r.packageName]=r.newRange)}st(a,n,{detectIndent:!0,overwrite:!0})},"applyBunCatalogUpdates"),qr=d((e,t,a,n=!0)=>{let r;return n&&(r=Lr(e,a,t)),a==="npm"||a==="yarn"?kr(e,t):a==="bun"?Gr(e,t):Hr(e,t),r},"applyCatalogUpdates"),Kr=d(async e=>{const{createInterface:t}=await import("node:readline"),a=t({input:process.stdin,output:process.stdout}),n=d(o=>new Promise(s=>{a.question(o,i=>s(i.trim()))}),"ask");process.stdout.write(`
76
+ ${Sr}`,"security")},wd=new Set(["compatibility","impact","recommend","security"]),Yn=he(t=>wd.has(t)?t:"impact","validateAnalysisType"),rs=he((t,e="impact")=>{const r=yd(t);return vd[e](r)},"buildAnalysisPrompt"),kd=/```(?:json)?\s*([\s\S]*?)```/,bd=/\{[\s\S]*\}/,$d=he(t=>{try{return JSON.parse(t)}catch{}const e=kd.exec(t);if(e?.[1])try{return JSON.parse(e[1])}catch{}const r=bd.exec(t);if(r?.[0])try{return JSON.parse(r[0])}catch{}},"extractJson"),xd=he(t=>({action:dd.has(t.action)?t.action:"review",breakingChanges:Array.isArray(t.breakingChanges)?t.breakingChanges:[],effort:pd.has(t.effort)?t.effort:"medium",package:typeof t.package=="string"?t.package:"",reason:typeof t.reason=="string"?t.reason:"",riskLevel:ud.has(t.riskLevel)?t.riskLevel:"medium"}),"normalizeRecommendation"),ns=he((t,e,r)=>{const n=$d(t);if(!n||typeof n!="object")return{analysisType:r,provider:e,recommendations:[],summary:"Failed to parse AI response.",warnings:["AI response was not valid JSON."]};const i=n,o=Array.isArray(i.recommendations)?i.recommendations:[];return{analysisType:r,provider:e,recommendations:o.map(s=>xd(s)),summary:typeof i.summary=="string"?i.summary:"",warnings:Array.isArray(i.warnings)?i.warnings:[]}},"parseAiResponse"),Sd={eslint:["ESLint 9.0: Flat config required","ESLint 8.0+: New rule formats"],next:["Next.js 13+: App router changes","Next.js 14+: Server components default"],react:["React 17 to 18: Concurrent features","React 18+: Strict mode changes"],typescript:["TypeScript 5.0: New decorators","TypeScript 4.7+: ESM changes"],vite:["Vite 5: Node.js 18+ required"],vue:["Vue 3: Composition API","Vue 3: Breaking template changes"],webpack:["Webpack 5: Node.js polyfills removed"]},Cd=new Set(["bcrypt","cors","crypto-js","express-session","helmet","jose","jsonwebtoken","node-forge","oauth","passport"]),Io=he((t,e)=>{const r=t.map(n=>{const i=n.vulnerabilities&&n.vulnerabilities.length>0,o=Cd.has(n.packageName),s=Sd[n.packageName]??[];let l="low",u="update",g="low",p="Patch/minor update, safe to apply.";return n.updateType==="major"?(l="high",u=s.length>0?"review":"update",g="medium",p=s.length>0?`Major update with known breaking changes: ${s[0]}`:"Major version update, review changelog before applying."):n.updateType==="minor"&&(l="medium",p="Minor update, generally safe."),i&&(l="high",u="update",p="Security update — current version has known vulnerabilities."),o&&n.updateType==="major"&&(u="review",p="Security-sensitive package with major update, careful review needed.",g="high"),{action:u,breakingChanges:s,effort:g,package:n.packageName,reason:p,riskLevel:l}});return{analysisType:e,provider:"rule-engine",recommendations:r,summary:`Rule-based ${e} analysis for ${String(t.length)} packages.`,warnings:["No AI provider available — using built-in rule engine."]}},"ruleBasedAnalysis"),Ed=he(t=>new Promise(e=>{setTimeout(e,t)}),"sleep"),os=he(async(t,e,r=gd)=>{let n;for(let i=0;i<=r;i+=1)try{return(await Ri(t,e,{timeoutMs:md})).stdout}catch(o){if(n=o instanceof Error?o:new Error(String(o)),n.message.includes("timed out"))throw n;if(i<r){const s=hd*2**i;await Ed(s)}}throw n??new Error("AI analysis failed after retries")},"runWithRetry"),jd=he(async(t,e,r)=>{const n=rs(e,r),i=await os(t,n);return ns(i,t.name,r)},"analyzeChunk"),Td=he((t,e,r)=>{const n=[],i=[],o=[];for(const s of t)n.push(...s.recommendations),i.push(...s.warnings),s.summary&&o.push(s.summary);return{analysisType:r,provider:e,recommendations:n,summary:o.length===1?o[0]??"":`Analyzed ${String(n.length)} packages in ${String(t.length)} batches.`,warnings:[...new Set(i)]}},"mergeResults"),is={compatibility:"Compatibility",impact:"Impact",recommend:"Recommendations",security:"Security"},Pr=he(t=>{const e=`${is[t.analysisType]??t.analysisType} Analysis (${t.provider})`,r=t.recommendations.flatMap(i=>{const o=[{action:i.action,effort:i.effort,package:i.package,reason:i.reason,risk:i.riskLevel}];return i.breakingChanges.length>0&&o.push({action:"",effort:"",package:"",reason:`Breaking: ${i.breakingChanges.join("; ")}`,risk:""}),o}),n=process.stdout.columns||80;return ge(H.createElement(f,{borderStyle:"round",flexDirection:"column",paddingLeft:1,paddingRight:1},H.createElement(a,{bold:!0},e),H.createElement(a,null,""),H.createElement(a,null,t.summary),H.createElement(a,null,""),H.createElement(Mn,{borderStyle:"none",data:r}),...t.warnings.length>0?[H.createElement(a,null,""),...t.warnings.map((i,o)=>H.createElement(a,{dimColor:!0,key:String(o)},` ${i}`))]:[]),{columns:n})},"formatAiAnalysis");he(t=>JSON.stringify(t,void 0,2),"formatAiAnalysisJson");const Xn=he(async(t,e,r,n="impact")=>{const i=qn(r);if(!i)return e.info(`No AI CLI tool found, using rule-based analysis.
77
+ `),Io(t,n);const o=nd(i.name,n,t),s=od(o);if(s)return e.info(`Using cached ${n} analysis from ${s.provider}.
78
+ `),s;const l=is[n]??n;e.info(`Running ${l.toLowerCase()} analysis with ${i.name}...
79
+ `);try{let u;if(t.length>fd){e.info(`Splitting ${String(t.length)} packages into batches of ${String(un)}...
80
+ `);const g=[];for(let h=0;h<t.length;h+=un)g.push(t.slice(h,h+un));const p=[];for(let h=0;h<g.length;h+=1){e.info(` Batch ${String(h+1)}/${String(g.length)}...`);const m=g[h];m&&p.push(await jd(i,m,n))}u=Td(p,i.name,n)}else{const g=await os(i,rs(t,n));u=ns(g,i.name,n)}return id(o,u,sd(n,r?.cacheTtl)),u}catch(u){const g=u instanceof Error?u.message:String(u);return e.warn(`AI analysis failed (${g}), falling back to rule engine.
81
+ `),Io(t,n)}},"runAiAnalysis");var Ad=Object.defineProperty,Qr=$((t,e)=>Ad(t,"name",{value:e,configurable:!0}),"c$g");const Id=Qr((t,e)=>{const r=ad();if(t==="json"){process.stdout.write(`${JSON.stringify(r,void 0,2)}
82
+ `);return}e.info("AI Cache Statistics:"),e.info(` Entries: ${String(r.entries)}`),e.info(` Total size: ${String(Math.round(r.totalSizeBytes/1024))} KB`),e.info(` Oldest: ${r.oldestEntry?new Date(r.oldestEntry).toISOString():"N/A"}`),e.info(` Newest: ${r.newestEntry?new Date(r.newestEntry).toISOString():"N/A"}`)},"handleCacheStats"),Rd=Qr(async(t,e)=>{const r=qn(e);if(!r){t.error("No AI provider available to test."),process.exitCode=1;return}t.info(`Testing ${r.name}...`);try{const n=await Ri(r,"Reply with exactly: OK",{timeoutMs:3e4});t.info(`Provider ${r.name} responded: ${n.stdout.trim().slice(0,200)}`)}catch(n){const i=n instanceof Error?n.message:String(n);t.error(`Provider ${r.name} failed: ${i}`),process.exitCode=1}},"handleTest"),Od=Qr((t,e,r)=>{const n=sc(),i=qn(r);if(t==="json"){const u=n.map(g=>({available:g.available,method:g.detectionMethod,name:g.name,path:g.path,priority:Ar[g.name]??0,selected:g.name===i?.name,version:g.version}));process.stdout.write(`${JSON.stringify(u,void 0,2)}
83
+ `);return}const o=n.map(u=>({method:u.detectionMethod??"-",path:u.path??"-",priority:String(Ar[u.name]??0),provider:u.name,selected:u.name===i?.name?">>>":"",status:u.available?"available":"not found",version:u.version??"-"})),s=process.stdout.columns||80,l=ge(H.createElement(Mn,{data:o}),{columns:s});e.info(l),i?e.info(`
84
+ Selected provider: ${i.name} (priority ${String(Ar[i.name]??0)})`):e.info(`
85
+ No AI provider available. Install one of the supported AI CLI tools.`)},"handleProviderStatus"),Pd={group:"System",alias:"a",description:"Show AI provider status, test connectivity, and manage cache",examples:[["vis ai","Show all AI providers and their status"],["vis ai --test","Test the best available provider"],["vis ai --cache-stats","Show AI response cache statistics"],["vis ai --clear-cache","Clear the AI response cache"],["vis ai --format json","Output as JSON"]],execute:Qr(async({logger:t,options:e,visConfig:r})=>{const n=e.format??"table";if(e["cache-stats"]){Id(n,t);return}if(e["clear-cache"]){const i=cd(),o=Zc();t.info(`Cleared ${String(i)} cached AI response${i===1?"":"s"}.`),o>0&&t.info(`Cleared ${String(o)} cached Socket.dev report${o===1?"":"s"}.`);return}if(e.test){await Rd(t,r?.ai);return}Od(n,t,r?.ai)},"execute"),name:"ai",options:[{defaultValue:!1,description:"Test the best available AI provider with a quick prompt",name:"test",type:Boolean},{defaultValue:!1,description:"Show AI response cache statistics",name:"cache-stats",type:Boolean},{defaultValue:!1,description:"Clear the AI response cache",name:"clear-cache",type:Boolean},{description:"Output format: table or json (default: table)",name:"format",type:String}]};var Nd=Object.defineProperty,B=$((t,e)=>Nd(t,"name",{value:e,configurable:!0}),"c$f");const Dd=/^([\^~]|>=|<=|[><=])/,Md=/^(?:'([^']+)'|"([^"]+)"|([^:\s]+)):\s*(?:'([^']+)'|"([^"]+)"|(\S+))/,Bd=/^catalog:/m,Ld=/^catalogs:/m,Fd=/^(@[^:]+):registry$/,Vd=/^\/\/(.+)\/:_authToken$/,Ud=/\*+/g,Gd=/[.+^${}()|[\]\\]/g,Ro=/[.*+?^${}()|[\]\\]/g,ss=/^['"]|['"]$/g,zd=/^https?:\/\//,as=/\/$/,Wd=/\n(\s+)/,_d=new Set(["dependencies","devDependencies","optionalDependencies","peerDependencies"]),Kn=B(t=>{const e=Pi("vis",{create:!0,cwd:t});if(!e)throw new Error("Cannot resolve cache directory. Ensure node_modules exists in your workspace. Run your package manager's install command first.");return A(e,"backup")},"getBackupDir"),Ze=B(t=>{const e=t.replace(/^[\^~]|^>=|^<=|^[><]/,""),r=Fa(e);if(r)return{major:r.major,minor:r.minor,patch:r.patch,prerelease:Array.isArray(r.prerelease)?r.prerelease.join("."):String(r.prerelease??"")};const n=Wr(t);if(n)return{major:n.major,minor:n.minor,patch:n.patch,prerelease:""}},"parseVersion"),cs=B(t=>Dd.exec(t)?.[1]??"","extractPrefix"),Hd=B(t=>{const e=`${String(t.major)}.${String(t.minor)}.${String(t.patch)}`;return t.prerelease?`${e}-${t.prerelease}`:e},"versionToString"),ls=B((t,e)=>t.major!==e.major?"major":t.minor!==e.minor?"minor":t.patch!==e.patch||t.prerelease!==e.prerelease?"patch":"none","getUpdateType"),Jd=B((t,e)=>t.major!==e.major?t.major-e.major:t.minor!==e.minor?t.minor-e.minor:t.patch!==e.patch?t.patch-e.patch:!t.prerelease&&e.prerelease?1:t.prerelease&&!e.prerelease?-1:t.prerelease&&e.prerelease?t.prerelease<e.prerelease?-1:t.prerelease>e.prerelease?1:0:0,"compareVersions"),Oo=B((t,e)=>Jd(e,t)>0,"isNewer"),$n=B((t,e)=>{const r=e.replaceAll(Ud,"*").replaceAll(Gd,String.raw`\$&`);return new RegExp(`^${r.replaceAll("*",".*").replaceAll("?",".")}$`).test(t)},"matchesPattern"),qd=B((t,e,r)=>r.some(n=>$n(t,n))?!1:e.length>0?e.some(n=>$n(t,n)):!0,"matchesFilters"),ds=B(t=>{const e=Md.exec(t);if(!e)return;const r=e[1]??e[2]??e[3],n=e[4]??e[5]??e[6];if(!(!r||!n))return[r,n]},"parseYamlEntry"),us=B((t,e,r,n)=>{t.has(e)||t.set(e,new Map);const i=t.get(e);i&&i.set(r,n)},"setCatalogEntry"),Yd=B((t,e,r)=>{if(r<2)return;const n=ds(e);n&&us(t,"default",n[0],n[1])},"parseCatalogSection"),Xd=B((t,e,r,n)=>{if(r===2&&e.endsWith(":"))return e.slice(0,-1).trim().replaceAll(ss,"");if(r>=4&&n){const i=ds(e);i&&us(t,n,i[0],i[1])}return n},"parseCatalogsSection"),ps=B(t=>t==="catalog:"||t.startsWith("catalog:")?"catalog":t==="catalogs:"||t.startsWith("catalogs:")?"catalogs":"none","detectTopLevelSection"),Kd=B(t=>{const e=new Map;let r="none",n="";for(const i of t.split(`
86
+ `)){const o=i.trimStart(),s=i.length-o.length;if(s===0&&o.length>0&&!o.startsWith("#")){r=ps(o),r==="catalogs"&&(n="");continue}o.length===0||o.startsWith("#")||(r==="catalog"&&Yd(e,o,s),r==="catalogs"&&(n=Xd(e,o,s,n)))}return e},"parseCatalogsFromYaml"),Qd=B(t=>{const e=A(t,"pnpm-workspace.yaml");if(!ae(e))return!1;const r=_e(e);return Bd.test(r)||Ld.test(r)},"hasPnpmCatalogs"),Zd=B(t=>{const e=A(t,"pnpm-workspace.yaml");if(!ae(e))return new Map;const r=_e(e);return Kd(r)},"readPnpmCatalogs"),fs=B(t=>{if(ae(t))try{return Je(t)}catch{return}},"readPackageJsonSafe"),eu=B(t=>{const e=fs(A(t,"package.json"));return!!(e?.workspaces?.catalog||e?.workspaces?.catalogs)},"hasBunCatalogs"),tu=B(t=>{const e=new Map;if(t.workspaces?.catalog&&typeof t.workspaces.catalog=="object"&&e.set("default",new Map(Object.entries(t.workspaces.catalog))),t.workspaces?.catalogs&&typeof t.workspaces.catalogs=="object")for(const[r,n]of Object.entries(t.workspaces.catalogs))typeof n=="object"&&n!==void 0&&e.set(r,new Map(Object.entries(n)));return e},"parseBunCatalogs"),ru=B(t=>{const e=fs(A(t,"package.json"));return e?tu(e):new Map},"readBunCatalogs"),pr=B(t=>{const e=t.lastIndexOf(":");if(e===-1)return;const r=t.slice(e+1);if(_d.has(r))return{depType:r,relativePath:t.slice(0,e)}},"parseCompositeCatalogName"),nu=B(t=>t?.dev?["devDependencies"]:t?.prod?["dependencies"]:["dependencies","devDependencies","peerDependencies","optionalDependencies"],"getDepTypesToInclude"),ou=B((t,e,r)=>{const n=new Set;e&&n.add(e);for(const i of r){const o=A(t,i,"package.json");if(ae(o))try{const s=Je(o);s.name&&n.add(s.name)}catch{}}return n},"collectInternalPackageNames"),iu=B((t,e)=>{const r=new Map;for(const[n,i]of Object.entries(t))e.has(n)||i.startsWith("workspace:")||i.startsWith("file:")||i.startsWith("link:")||i.startsWith("catalog:")||r.set(n,i);return r},"filterExternalDeps"),su=B((t,e,r,n,i,o)=>{const s=e==="."?r:A(t,e,"package.json");if(!ae(s))return;let l;try{l=Je(s)}catch{return}for(const u of n){const g=l[u];if(!g||typeof g!="object")continue;const p=iu(g,i);p.size>0&&o.set(`${e}:${u}`,p)}},"scanDirectoryDeps"),au=B((t,e)=>{const r=new Map,n=A(t,"package.json");if(!ae(n))return r;const i=Je(n);let o=[];const s=i.workspaces;if(s){const p=Array.isArray(s)?s:s.packages;p&&(o=wt(t,p))}if(o.length===0){const p=Xr(t);p&&(o=wt(t,p))}const l=ou(t,i.name,o),u=nu(e),g=[".",...o];for(const p of g)su(t,p,n,u,l,r);return r},"readPackageJsonDeps"),pn=B(t=>{const e=A(t,"package.json");if(!ae(e))return!1;try{const r=Je(e);return!!(r.dependencies||r.devDependencies||r.peerDependencies||r.optionalDependencies)}catch{return!1}},"hasPackageJsonDeps"),Po=B((t,e)=>{const r=new Map;for(const n of e){const i=pr(n.catalogName);if(!i)continue;const o=i.relativePath==="."?A(t,"package.json"):A(t,i.relativePath,"package.json");r.has(o)||r.set(o,[]);const s=r.get(o);s&&s.push({depType:i.depType,newRange:n.newRange,packageName:n.packageName})}for(const[n,i]of r){const o=Je(n);for(const{depType:s,newRange:l,packageName:u}of i)o[s]&&(o[s][u]=l);Pn(n,o,{detectIndent:!0,overwrite:!0})}},"applyPackageJsonUpdates"),cu=B((t,e)=>e==="bun"?eu(t)||pn(t):e==="npm"||e==="yarn"?pn(t):Qd(t)||pn(t),"hasCatalogs"),Zr=B((t,e,r)=>{let n;e==="bun"?n=ru(t):e==="npm"||e==="yarn"?n=new Map:n=Zd(t);const i=au(t,r);for(const[o,s]of i)n.has(o)||n.set(o,s);return n},"readCatalogs"),No=B(t=>{const e=new Map,r=new Map;let n="https://registry.npmjs.org";for(const i of t.split(`
87
+ `)){const o=i.trim();if(!o||o.startsWith("#")||o.startsWith(";"))continue;const s=o.indexOf("=");if(s===-1)continue;const l=o.slice(0,s).trim(),u=o.slice(s+1).trim(),g=Fd.exec(l);if(g?.[1]){e.set(g[1],u);continue}if(l==="registry"){n=u;continue}const p=Vd.exec(l);p?.[1]&&r.set(p[1],u)}return{authTokens:r,defaultRegistry:n,registries:e}},"parseNpmrc"),lu=B((t,e)=>({authTokens:new Map([...t.authTokens,...e.authTokens]),defaultRegistry:e.defaultRegistry==="https://registry.npmjs.org"?t.defaultRegistry:e.defaultRegistry,registries:new Map([...t.registries,...e.registries])}),"mergeNpmrcConfigs"),Qn=B(t=>{const e={authTokens:new Map,defaultRegistry:"https://registry.npmjs.org",registries:new Map},r=process.env.HOME??process.env.USERPROFILE??"",n=A(r,".npmrc");let i=r&&ae(n)?No(_e(n)):e;const o=A(t,".npmrc");return ae(o)&&(i=lu(i,No(_e(o)))),i},"loadNpmrc"),du=B((t,e)=>{let r=e.defaultRegistry;if(t.startsWith("@")){const i=t.split("/")[0];if(i&&e.registries.has(i)){const o=e.registries.get(i);o&&(r=o)}}const n=r.replace(zd,"").replace(as,"");return{token:e.authTokens.get(n),url:r}},"getRegistryForPackage"),uu=15e3,gs=B(async(t,e,r=uu)=>{const n=`${(e?.url??"https://registry.npmjs.org").replace(as,"")}/${t}`,i={Accept:"application/vnd.npm.install-v1+json"};e?.authToken&&(i.Authorization=`Bearer ${e.authToken}`);const o=new AbortController,s=setTimeout(()=>{o.abort()},r);try{const l=await fetch(n,{headers:i,signal:o.signal});if(!l.ok)throw new Error(`Failed to fetch ${t}: ${String(l.status)} ${l.statusText}`);const u=await l.json();return{latest:u["dist-tags"]?.latest??"",versions:Object.keys(u.versions??{})}}finally{clearTimeout(s)}},"fetchPackageVersions"),pu=B(t=>{const e=t.database_specific?.severity?.toUpperCase();if(e==="CRITICAL"||e==="HIGH"||e==="MODERATE"||e==="LOW")return e;const r=t.severity?.find(n=>n.type==="CVSS_V3")?.score;if(r){const n=Number.parseFloat(r);return n>=9?"CRITICAL":n>=7?"HIGH":n>=4?"MODERATE":"LOW"}return"UNKNOWN"},"mapOsvSeverity"),fu=B(t=>{const e=t.severity?.find(r=>r.type==="CVSS_V3")?.score;return e?Number.parseFloat(e):void 0},"mapOsvCvss"),gu=B(t=>{const e=[];for(const r of t.affected??[])for(const n of r.ranges??[])for(const i of n.events??[])i.fixed&&e.push(i.fixed);return e},"mapOsvFixedVersions"),hu=B(t=>({aliases:t.aliases?.length?t.aliases:void 0,cvssScore:fu(t),fixedVersions:gu(t),id:t.id,severity:pu(t),summary:t.summary??""}),"mapOsvVuln"),en=B(async(t,e=1e4)=>{if(t.length===0)return new Map;const r=t.map(o=>({package:{ecosystem:"npm",name:o.name},version:o.version})),n=new AbortController,i=setTimeout(()=>{n.abort()},e);try{const o=await fetch("https://api.osv.dev/v1/querybatch",{body:JSON.stringify({queries:r}),headers:{"Content-Type":"application/json"},method:"POST",signal:n.signal});if(!o.ok)return new Map;const s=await o.json(),l=new Map;for(const[u,g]of t.entries()){const p=s.results[u]?.vulns;p&&p.length>0&&l.set(g.name,p.map(h=>hu(h)))}return l}catch{return new Map}finally{clearTimeout(i)}},"fetchVulnerabilities"),mu=B((t,e,r,n,i)=>{const o=Ze(r);if(o){if(n==="latest"){const s=Ze(e);return!s||!i&&s.prerelease!==""||!Oo(o,s)?void 0:e}return t.map(s=>({parsed:Ze(s),raw:s})).filter(s=>!s.parsed||!i&&s.parsed.prerelease!==""||!Oo(o,s.parsed)?!1:n==="patch"?s.parsed.major===o.major&&s.parsed.minor===o.minor:s.parsed.major===o.major).toSorted((s,l)=>La(s.raw,l.raw))[0]?.raw}},"findTargetVersion"),yu=B((t,e)=>{const r=[],n=new Set;for(const[i,o]of t)for(const[s,l]of o)if(!(l.startsWith("workspace:")||l.startsWith("file:")||l.startsWith("link:")||l==="*")){if(e.ignore.some(u=>$n(s,u))){n.add(s);continue}qd(s,e.include,e.exclude)&&r.push({catalogName:i,packageName:s,range:l})}return{entries:r,ignored:[...n]}},"collectEntries"),vu=B(async(t,e,r)=>{const n=new Map,i=[],o=8;let s=0;for(let l=0;l<t.length;l+=o){const u=t.slice(l,l+o),g=await Promise.allSettled(u.map(async p=>{const h=e?du(p,e):void 0,m=await gs(p,h?{authToken:h.token,url:h.url}:void 0);return n.set(p,m),p}));for(const[p,h]of g.entries())if(s+=1,h.status==="rejected"){const m=u[p];m&&i.push(m)}r&&r(s,t.length)}return{failed:i,versionCache:n}},"fetchVersionsBatched"),wu=B((t,e,r)=>{const n=[];for(const i of t){const o=e.get(i.packageName);if(!o)continue;const s=mu(o.versions,o.latest,i.range,r.target,r.includePrerelease);if(!s)continue;const l=Ze(i.range),u=Ze(s);if(!l||!u)continue;const g=ls(l,u);if(g==="none")continue;const p=cs(i.range);n.push({catalogName:i.catalogName,currentRange:i.range,newRange:`${p}${s}`,packageName:i.packageName,targetVersion:s,updateType:g})}return n},"buildOutdatedEntries"),Do=B(t=>t?Hd(t):"","formatVersionString"),ku=B(async(t,e,r,n)=>{const i=[...new Map(e.map(u=>{const g=Ze(u.range);return[u.packageName,{name:u.packageName,version:Do(g)}]})).values()].filter(u=>u.version),o=r?Lt(i,r):void 0,[s,l]=await Promise.all([en(i),o]);for(const u of t){const g=s.get(u.packageName);g&&g.length>0&&(u.vulnerabilities=g);const p=Ze(u.currentRange),h=Do(p);if(l){const m=l.get(`${u.packageName}@${h}`);m&&(u.socketReport={alerts:m.alerts,license:m.license,score:m.score})}if(n){const m=zn(u.packageName,h,n);m&&(u.acceptedRisk=m)}}},"enrichWithSecurity"),bu=6e4,$u=B((t,e,r,n)=>{const i=[];for(const[l,u]of t)for(const[g,p]of u)i.push(`${l}:${g}=${p}`);i.push(`target=${e.target},pre=${String(e.includePrerelease)},sec=${String(e.security??!1)}`),i.push(`in=${e.include.join(",")},ex=${e.exclude.join(",")},ig=${e.ignore.join(",")}`),i.push(`socket=${String(r??!1)}`),n&&n.length>0&&i.push(`risks=${n.toSorted().join(",")}`);let o=5381;const s=i.join("|");for(let l=0;l<s.length;l++)o=(o<<5)+o+s.charCodeAt(l)|0;return String(o)},"computeCacheHash"),hs=B(t=>{const e=Pi("vis",{create:!0,cwd:t});return e?A(e,"outdated-cache.json"):void 0},"getOutdatedCachePath"),xu=B((t,e)=>{const r=hs(t);if(!(!r||!ae(r)))try{const n=Je(r);if(n.hash===e&&Date.now()-n.timestamp<bu)return n.result}catch{}},"readOutdatedCache"),Su=B((t,e,r)=>{const n=hs(t);if(n)try{vn(Nn(n)),Pn(n,{hash:e,result:r,timestamp:Date.now()})}catch{}},"writeOutdatedCache"),Zn=B(async(t,e,r,n,i,o,s)=>{const l=$u(t,e,!!o,s?Object.keys(s):void 0);if(i){const x=xu(i,l);if(x)return x}const{entries:u,ignored:g}=yu(t,e),p=[...new Set(u.map(x=>x.packageName))],{failed:h,versionCache:m}=await vu(p,r,n),y=wu(u,m,e);(e.security||o)&&y.length>0&&await ku(y,u,o,s);const b={failed:h,ignored:g,outdated:y};return i&&Su(i,l,b),b},"checkOutdated"),eo=B((t,e)=>e==="bun"?A(t,"package.json"):A(t,"pnpm-workspace.yaml"),"getCatalogFilePath"),Mo=B((t,e)=>{const r=Kn(t),n=new Set;for(const i of e){const o=pr(i.catalogName);o&&n.add(o.relativePath==="."?"package.json":A(o.relativePath,"package.json"))}if(n.size!==0){vn(r);for(const i of n){const o=A(t,i);if(ae(o)){const s=A(r,i),l=Nn(s);vn(l),sr(s,_e(o))}}return r}},"createPackageJsonBackup"),Cu=B((t,e,r)=>{if((e==="npm"||e==="yarn")&&r)return Mo(t,r);let n;const i=eo(t,e);if(ae(i)&&(n=`${i}.bak`,sr(n,_e(i))),r){const o=r.filter(s=>pr(s.catalogName));o.length>0&&Mo(t,o)}return n},"createBackup"),Eu=B(t=>{const e=Kn(t);if(!ae(e))return!1;for(const r of On(e,{includeDirs:!1})){const n=r.path.slice(e.length+1),i=A(t,n);sr(i,_e(r.path))}return Ma(e),!0},"restorePackageJsonBackup"),ju=B((t,e)=>{if(e==="npm"||e==="yarn")return Eu(t);const r=eo(t,e),n=`${r}.bak`;if(!ae(n))return!1;const i=_e(n);return sr(r,i),!0},"restoreFromBackup"),Tu=B((t,e)=>{if(e==="npm"||e==="yarn")try{const n=Kn(t);return ae(n)}catch{return!1}const r=eo(t,e);return ae(`${r}.bak`)},"hasBackup"),Au=B(t=>JSON.stringify(t,void 0,2),"formatOutdatedJson"),ms=B(t=>t.map(e=>`${e.packageName} ${e.currentRange} → ${e.newRange}`).join(`
88
+ `),"formatOutdatedMinimal"),Ie=B(t=>t?Array.isArray(t)?t:[t]:[],"toFilterArray"),Iu=B(t=>{const e=new Map;for(const r of t){e.has(r.catalogName)||e.set(r.catalogName,[]);const n=e.get(r.catalogName);n&&n.push(r)}return e},"groupByCatalog"),Ru=B(t=>{const e=pr(t);return e?`${e.relativePath==="."?"root":e.relativePath} (${e.depType})`:`Catalog: ${t}`},"formatCatalogDisplayName"),ys=B((t,e)=>{const r=Iu(t),n=process.stdout.columns||80,i=t.some(o=>o.socketReport);for(const[o,s]of r){const l=s.flatMap(p=>{const h=p.vulnerabilities&&p.vulnerabilities.length>0,m=p.socketReport&&p.socketReport.alerts.length>0,y=`${h||m?"[SEC] ":""}${p.packageName}`,b=p.socketReport?`${String(Math.round(p.socketReport.score.overall*100))}%`:"",x={current:p.currentRange,package:y,target:p.newRange,type:p.updateType};i&&(x.score=b);const E=[x];if(p.vulnerabilities)for(const C of p.vulnerabilities){const D={current:C.summary,package:` ${C.severity} ${C.id}`,target:"",type:""};i&&(D.score=""),E.push(D)}if(p.socketReport)for(const C of p.socketReport.alerts){const D={current:C.category,package:` [${C.severity.toUpperCase()}] ${C.type}`,target:"",type:""};i&&(D.score=""),E.push(D)}return E}),u=Ru(o),g=ge(H.createElement(Mn,{data:l}),{columns:n});e.info(`${u}
89
+ ${g}
90
+ `)}},"formatOutdatedTable"),Nr=B(t=>{let e=0,r=0,n=0,i=0,o=0,s=0;for(const h of t)h.updateType==="major"?e++:h.updateType==="minor"?r++:n++,h.vulnerabilities&&h.vulnerabilities.length>0&&i++,h.socketReport?.alerts.length&&o++,h.socketReport&&h.socketReport.score.overall<nt&&s++;const l=[];e&&l.push(`${String(e)} major`),r&&l.push(`${String(r)} minor`),n&&l.push(`${String(n)} patch`),i&&l.push(`${String(i)} with vulnerabilities`),o&&l.push(`${String(o)} with Socket.dev alerts`);const u=`Found ${String(t.length)} outdated (${l.join(", ")})`,g=process.stdout.columns||80,p=[H.createElement(a,{bold:!0},"─ Summary"),H.createElement(a,null,` ${u}`)];return s>0&&p.push(H.createElement(a,{color:"yellow"},` ${String(s)} package${s===1?"":"s"} with low Socket.dev score (<${String(nt*100)}%)`)),ge(H.createElement(f,{flexDirection:"column",paddingX:1},...p),{columns:g})},"formatSummary"),Ou=B((t,e)=>{const r=t.replaceAll(Ro,String.raw`\$&`),n=e.replaceAll(Ro,String.raw`\$&`);return new RegExp(String.raw`^(?:'${r}'|"${r}"|${r}):\s*['"]?${n}['"]?`)},"buildLineMatchRegex"),Pu=B((t,e,r)=>Ou(e,r).test(t),"lineMatchesPackage"),Nu=B(t=>{const e=new Map;for(const r of t){e.has(r.catalogName)||e.set(r.catalogName,new Map);const n=e.get(r.catalogName);n&&n.set(r.packageName,{newRange:r.newRange,oldRange:r.currentRange})}return e},"buildUpdateMap"),Bo=B((t,e,r)=>{if(!r)return t;for(const[n,{newRange:i,oldRange:o}]of r)if(Pu(e,n,o))return t.replace(o,i);return t},"applyLineUpdate"),Du=B((t,e,r,n)=>{const i=t.trimStart(),o=t.length-i.length;return i.length===0||i.startsWith("#")?t:e==="catalog"&&o>=2?Bo(t,i,n.get("default")):e==="catalogs"&&o>=4&&r?Bo(t,i,n.get(r)):t},"processYamlLineForUpdate"),Mu=B((t,e)=>{const r=A(t,"pnpm-workspace.yaml"),n=_e(r).split(`
91
+ `),i=Nu(e);let o="none",s="";const l=[];for(const u of n){const g=u.trimStart(),p=u.length-g.length;p===0&&g.length>0&&!g.startsWith("#")&&(o=ps(g),o==="catalogs"&&(s="")),o==="catalogs"&&p===2&&g.endsWith(":")&&(s=g.slice(0,-1).trim().replaceAll(ss,"")),l.push(Du(u,o,s,i))}sr(r,l.join(`
92
+ `))},"applyPnpmCatalogUpdates");B(t=>{const e=Wd.exec(t);if(!e)return 2;const r=e[1];return r?r.includes(" ")?r:r.length:2},"detectJsonIndent");const Bu=B((t,e)=>{const r=A(t,"package.json"),n=Je(r);for(const i of e)if(i.catalogName==="default")n.workspaces?.catalog&&(n.workspaces.catalog[i.packageName]=i.newRange);else{const o=n.workspaces?.catalogs?.[i.catalogName];o&&(o[i.packageName]=i.newRange)}Pn(r,n,{detectIndent:!0,overwrite:!0})},"applyBunCatalogUpdates"),Lu=B((t,e,r,n=!0)=>{let i;n&&(i=Cu(t,r,e));const o=[],s=[];for(const l of e)pr(l.catalogName)?s.push(l):o.push(l);return o.length>0&&(r==="npm"||r==="yarn"?Po(t,o):r==="bun"?Bu(t,o):Mu(t,o)),s.length>0&&Po(t,s),i},"applyCatalogUpdates"),Fu=B(async t=>{const{createInterface:e}=await import("node:readline"),r=e({input:process.stdin,output:process.stdout}),n=B(o=>new Promise(s=>{r.question(o,l=>{s(l.trim())})}),"ask");process.stdout.write(`
85
93
  Outdated catalog dependencies:
86
- `);for(const[o,s]of e.entries())s&&process.stdout.write(` ${String(o+1)}. ${s.packageName}: ${s.currentRange} → ${s.newRange} (${s.updateType})
94
+ `);for(const[o,s]of t.entries())s&&process.stdout.write(` ${String(o+1)}. ${s.packageName}: ${s.currentRange} → ${s.newRange} (${s.updateType})
87
95
  `);process.stdout.write(`
88
- `);const r=await n("Apply updates? [a]ll / [n]one / [s]elect: ");if(r.toLowerCase()==="a"||r.toLowerCase()==="all")return a.close(),e;if(r.toLowerCase()==="n"||r.toLowerCase()==="none")return a.close(),[];if(r.toLowerCase()==="s"||r.toLowerCase()==="select"){const o=await n("Enter numbers to apply (comma-separated): ");return a.close(),o.split(",").map(s=>Number.parseInt(s.trim(),10)-1).filter(s=>s>=0&&s<e.length).map(s=>e[s]).filter(s=>s!==void 0)}return a.close(),[]},"promptPackageSelection"),Yr=/github\.com[/:]([\w.-]+)\/([\w.-]+?)(?:\.git|\/|$)/,Xr=d(async(e,t=1e4)=>{const a=[],n=new AbortController,r=setTimeout(()=>n.abort(),t);try{const o=e.map(async s=>{const i=`https://www.npmjs.com/package/${s.packageName}`;try{const c=await fetch(`https://registry.npmjs.org/${s.packageName}`,{headers:{Accept:"application/json"},signal:n.signal});if(!c.ok)return{npmUrl:i,packageName:s.packageName};const l=(await c.json()).repository?.url;if(!l)return{npmUrl:i,packageName:s.packageName};const p=Yr.exec(l);if(!p)return{npmUrl:i,packageName:s.packageName,repoUrl:l};const g=p[1],f=p[2],w=`https://github.com/${g}/${f}/releases/tag/v${s.targetVersion}`;return{npmUrl:i,packageName:s.packageName,releaseUrl:w,repoUrl:`https://github.com/${g}/${f}`}}catch{return{npmUrl:i,packageName:s.packageName}}});a.push(...await Promise.all(o))}finally{clearTimeout(r)}return a},"fetchChangelogInfo");var Zr=Object.defineProperty,Qr=y((e,t)=>Zr(e,"name",{value:t,configurable:!0}),"w$3");const eo=/^[\^~>=<]+/,to={argument:{description:"Package name to analyze (e.g., react)",name:"package",required:!0,type:String},description:"Analyze a single package update with AI",examples:[["vis analyze react","Analyze updating react to latest"],["vis analyze react 19.0.0","Analyze updating react to specific version"],["vis analyze react --ai-type security","Run security-focused analysis"],["vis analyze react --format json","Output as JSON"]],execute:Qr(async({argument:e,logger:t,options:a,visConfig:n,workspaceRoot:r})=>{if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const o=e,s=o[0];if(!s)throw new Error("Package name is required. Usage: vis analyze <package> [version]");const i=o[1],{packageManager:c}=xe(r);let l,p="default";const g=De(r,c);for(const[O,R]of g){const U=R.get(s);if(U){l=U,p=O;break}}if(!l)throw new Error(`Package "${s}" not found in any catalog or package.json. Make sure it exists in your workspace dependencies.`);let f;if(i)f=i;else{t.info(`Fetching latest version for ${s}...
89
- `);const O=await At(s);if(!O.latest)throw new Error(`Could not determine latest version for "${s}".`);f=O.latest}const w=D(l),$=D(f);if(!w||!$)throw new Error(`Could not parse versions: current="${l}", target="${f}".`);const x=Rt(w,$);if(x==="none"){t.info(`${s} is already at ${f}. Nothing to analyze.`);return}const G=Et(l),j={catalogName:p,currentRange:l,newRange:`${G}${f}`,packageName:s,targetVersion:f,updateType:x},T=Ue(a["ai-type"]??"impact");if(T==="security"||a.security){t.info(`Checking for known vulnerabilities...
90
- `);const O=(await Lt([{name:s,version:l.replace(eo,"")}])).get(s);O&&O.length>0&&(j.vulnerabilities=O)}const Q=await Me([j],t,n?.ai,T);(a.format??"table")==="json"?process.stdout.write(`${JSON.stringify(Q,void 0,2)}
91
- `):t.info(de(Q))},"execute"),name:"analyze",options:[{description:"AI analysis type: impact, security, compatibility, or recommend (default: impact)",name:"ai-type",type:String},{defaultValue:!1,description:"Check for known security vulnerabilities",name:"security",type:Boolean},{description:"Output format: table or json (default: table)",name:"format",type:String}]};var ao=Object.defineProperty,no=y((e,t)=>ao(e,"name",{value:t,configurable:!0}),"g$3");const ro={alias:"c",argument:{description:"Specific packages to check (checks all if omitted)",name:"packages",type:String},description:"Check for outdated dependencies in workspace packages",examples:[["vis check","Check all catalog dependencies"],["vis check react","Check specific packages"],["vis check --target minor","Only show minor/patch updates"],["vis check --exclude '@types/*'","Exclude packages by pattern"]],execute:no(async({argument:e,logger:t,options:a,visConfig:n,workspaceRoot:r})=>{if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const o=r,{packageManager:s}=xe(o),i=Pt(o),c=n?.update??{},l=De(o,s,{dev:a.dev,prod:a.prod});if(l.size===0){t.info("No catalogs found.");return}const p=a.target??c.target??"latest";if(!["latest","minor","patch"].includes(p))throw new Error(`Invalid target "${p}". Use: latest, minor, or patch.`);const g={exclude:[...V(a.exclude),...V(c.exclude)],include:[...V(a.include),...V(c.include),...e],includePrerelease:a.prerelease||c.prerelease||!1,security:a.security||a.ai||c.security||!1,target:p};let f=0;for(const T of l.values())f+=T.size;t.info(`Checking ${String(f)} catalog dependencies against npm registry...
92
- `);const{failed:w,outdated:$}=await Tt(l,g,i);if(w.length>0&&t.warn(`Failed to fetch: ${w.join(", ")}`),$.length===0){t.info("All catalog dependencies are up to date.");return}const x=a.format??c.format??"table",G=Ue(a["ai-type"]??"impact"),j=a.ai?await Me($,t,n?.ai,G):void 0;if(x==="json"){const T={failed:w,outdated:$};j&&(T.aiAnalysis=j),process.stdout.write(`${JSON.stringify(T,void 0,2)}
93
- `)}else x==="minimal"?process.stdout.write(`${Ut($)}
94
- `):(Mt($,t),t.info(Vt($)),j&&(t.info(""),t.info(de(j))));a["exit-code"]&&$.length>0&&(process.exitCode=1)},"execute"),name:"check",options:[{alias:"t",description:"Update target: latest, minor, or patch (default: latest)",name:"target",type:String},{description:"Glob pattern to include packages (repeatable)",lazyMultiple:!0,name:"include",type:String},{description:"Glob pattern to exclude packages (repeatable)",lazyMultiple:!0,name:"exclude",type:String},{defaultValue:!1,description:"Include prerelease versions",name:"prerelease",type:Boolean},{defaultValue:!1,description:"Check for known security vulnerabilities (via OSV.dev)",name:"security",type:Boolean},{description:"Output format: table, json, or minimal (default: table)",name:"format",type:String},{defaultValue:!1,description:"Exit with code 1 if outdated dependencies found (for CI)",name:"exit-code",type:Boolean},{defaultValue:!1,description:"Run AI analysis on outdated packages",name:"ai",type:Boolean},{description:"AI analysis type: impact, security, compatibility, or recommend (default: impact)",name:"ai-type",type:String},{alias:"D",defaultValue:!1,description:"Check only devDependencies (npm/yarn mode)",name:"dev",type:Boolean},{alias:"P",defaultValue:!1,description:"Check only dependencies (npm/yarn mode)",name:"prod",type:Boolean}]};var oo=Object.defineProperty,We=y((e,t)=>oo(e,"name",{value:t,configurable:!0}),"p$2");const so=We(e=>{const t=["Project Dependency Graph","=======================",""];for(const[a,n]of Object.entries(e.nodes)){const r=e.dependencies[a]??[],o=n.type==="application"?" (app)":"";if(r.length===0)t.push(` ${a}${o}`);else{t.push(` ${a}${o}`);for(const s of r)t.push(` └── ${s.target}`)}t.push("")}return t.join(`
95
- `)},"projectGraphToAscii"),io=We(e=>{const t=Object.values(e.nodes).map(a=>({name:a.name,type:a.type}));return{edges:Object.values(e.dependencies).flat(),nodes:t}},"projectGraphToJson"),co={description:"Visualize the project dependency graph",examples:[["vis graph","Show ASCII dependency graph"],["vis graph --format=dot","Output in Graphviz DOT format"],["vis graph --format=json --output=graph.json","Save JSON graph to file"]],execute:We(async({logger:e,options:t,visConfig:a,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const r=n,{workspace:o}=ye(r,a),s=Ae(r,o),i=t.format??"ascii",c=t.output;let l;switch(i){case"dot":{l=ua(s);break}case"json":{l=JSON.stringify(io(s),void 0,2);break}default:l=so(s)}c?(E(c,l,"utf8"),e.info(`Graph written to ${c}`)):e.info(l)},"execute"),name:"graph",options:[{alias:"f",defaultValue:"ascii",description:"Output format: ascii, dot, json",name:"format",type:String},{alias:"o",description:"Write output to file instead of stdout",name:"output",type:String}]},Ft=["pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","applypatch-msg","pre-applypatch","post-applypatch","pre-rebase","post-rewrite","post-checkout","post-merge","pre-push","pre-auto-gc"],ge=".vis-hooks";var lo=Object.defineProperty,fe=y((e,t)=>lo(e,"name",{value:t,configurable:!0}),"o$3");const po=/\/$/,uo=fe(e=>{let t='"$0"';for(let a=0;a<e;a+=1)t=`"$(dirname ${t})"`;return t},"nestedDirname"),go=fe(e=>{const t=e.split("/").filter(a=>a!==""&&a!==".").length+2;return`#!/usr/bin/env sh
96
+ `);const i=await n("Apply updates? [a]ll / [n]one / [s]elect: ");if(i.toLowerCase()==="a"||i.toLowerCase()==="all")return r.close(),t;if(i.toLowerCase()==="n"||i.toLowerCase()==="none")return r.close(),[];if(i.toLowerCase()==="s"||i.toLowerCase()==="select"){const o=await n("Enter numbers to apply (comma-separated): ");return r.close(),o.split(",").map(s=>Number.parseInt(s.trim(),10)-1).filter(s=>s>=0&&s<t.length).map(s=>t[s]).filter(s=>s!==void 0)}return r.close(),[]},"promptPackageSelection"),Vu=/github\.com[/:]([\w.-]+)\/([\w.-]+?)(?:\.git|\/|$)/,vs=B(async(t,e=1e4)=>{const r=[],n=new AbortController,i=setTimeout(()=>{n.abort()},e);try{const o=t.map(async s=>{const l=`https://www.npmjs.com/package/${s.packageName}`;try{const u=await fetch(`https://registry.npmjs.org/${s.packageName}`,{headers:{Accept:"application/json"},signal:n.signal});if(!u.ok)return{npmUrl:l,packageName:s.packageName};const g=(await u.json()).repository?.url;if(!g)return{npmUrl:l,packageName:s.packageName};const p=Vu.exec(g);if(!p)return{npmUrl:l,packageName:s.packageName,repoUrl:g};const h=p[1],m=p[2],y=`https://github.com/${h}/${m}/releases/tag/v${s.targetVersion}`;return{npmUrl:l,packageName:s.packageName,releaseUrl:y,repoUrl:`https://github.com/${h}/${m}`}}catch{return{npmUrl:l,packageName:s.packageName}}});r.push(...await Promise.all(o))}finally{clearTimeout(i)}return r},"fetchChangelogInfo");var Uu=Object.defineProperty,Gu=$((t,e)=>Uu(t,"name",{value:e,configurable:!0}),"A$6");const zu=/^[\^~>=<]+/,Wu={group:"System",argument:{description:"Package name to analyze (e.g., react)",name:"package",required:!0,type:String},description:"Analyze a single package update with AI",examples:[["vis analyze react","Analyze updating react to latest"],["vis analyze react 19.0.0","Analyze updating react to specific version"],["vis analyze react --ai-type security","Run security-focused analysis"],["vis analyze react --format json","Output as JSON"]],execute:Gu(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const o=t,s=o[0];if(!s)throw new Error("Package name is required. Usage: vis analyze <package> [version]");const l=o[1],{packageManager:u}=zr(i);let g,p="default";const h=Zr(i,u);for(const[L,j]of h){const O=j.get(s);if(O){g=O,p=L;break}}if(!g)throw new Error(`Package "${s}" not found in any catalog or package.json. Make sure it exists in your workspace dependencies.`);let m;if(l)m=l;else{e.info(`Fetching latest version for ${s}...
97
+ `);const L=await gs(s);if(!L.latest)throw new Error(`Could not determine latest version for "${s}".`);m=L.latest}const y=Ze(g),b=Ze(m);if(!y||!b)throw new Error(`Could not parse versions: current="${g}", target="${m}".`);const x=ls(y,b);if(x==="none"){e.info(`${s} is already at ${m}. Nothing to analyze.`);return}const E=cs(g),C={catalogName:p,currentRange:g,newRange:`${E}${m}`,packageName:s,targetVersion:m,updateType:x},D=Yn(r["ai-type"]??"impact");if(D==="security"||r.security){e.info(`Checking for known vulnerabilities...
98
+ `);const L=g.replace(zu,""),j=(await en([{name:s,version:L}])).get(s);j&&j.length>0&&(C.vulnerabilities=j);const O=St(n?.security?.socket);if(O){const R=(await Lt([{name:s,version:L}],O)).get(`${s}@${L}`);R&&(C.socketReport={alerts:R.alerts,license:R.license,score:R.score})}}const N=await Xn([C],e,n?.ai,D);(r.format??"table")==="json"?process.stdout.write(`${JSON.stringify(N,void 0,2)}
99
+ `):e.info(Pr(N))},"execute"),name:"analyze",options:[{description:"AI analysis type: impact, security, compatibility, or recommend (default: impact)",name:"ai-type",type:String},{defaultValue:!1,description:"Check for known security vulnerabilities",name:"security",type:Boolean},{description:"Output format: table or json (default: table)",name:"format",type:String}]};var _u=Object.defineProperty,Pe=$((t,e)=>_u(t,"name",{value:e,configurable:!0}),"f$e");const ws=Pe((t,e)=>{const r={errors:[],warnings:[]},{security:n}=t;if(!n)return r.warnings.push("No security settings configured. Use defineConfig() from '@visulima/vis/config' to get secure defaults automatically."),r;if((!n.allowBuilds||Object.keys(n.allowBuilds).length===0)&&r.warnings.push(e==="pnpm"?"security.allowBuilds is not configured. pnpm blocks build scripts by default since v10. Run 'vis approve-builds' to review.":"security.allowBuilds is not configured. Consider listing which packages are allowed to run install/postinstall scripts."),n.minimumReleaseAge===0&&r.warnings.push("security.minimumReleaseAge is explicitly set to 0. New packages can be installed immediately after publishing."),n.trustPolicy==="off"&&r.warnings.push("security.trustPolicy is explicitly set to 'off'. Packages whose trust level has decreased will not be blocked."),n.blockExoticSubdeps===!1&&r.warnings.push("security.blockExoticSubdeps is explicitly disabled. Transitive dependencies can pull code from git repos or tarball URLs."),n.strictDepBuilds===!1&&r.warnings.push("security.strictDepBuilds is explicitly disabled. Unapproved build scripts will only produce warnings, not errors."),n.strictDepBuilds&&(!n.allowBuilds||Object.keys(n.allowBuilds).length===0)&&r.errors.push("security.strictDepBuilds is enabled but security.allowBuilds is empty. All dependencies with build scripts will be blocked. Run 'vis approve-builds' to review and add packages."),n.socket?.acceptedRisks){const i=Date.now();for(const[o,s]of Object.entries(n.socket.acceptedRisks)){const l=new Date(s.acceptedAt).getTime();i-l>7776e6&&r.warnings.push(`Accepted risk for "${o}" is over 90 days old (accepted ${s.acceptedAt}). Consider re-evaluating with 'vis audit'.`)}}return r},"checkSecurityConfig"),Hu=Pe((t,e)=>{if(De&&!process.env.VIS_SECURITY_WARNINGS)return;const r=ws(t,e);for(const n of r.errors)vt(n);r.warnings.length>0&&oe(`${r.warnings.length} security recommendation${r.warnings.length===1?"":"s"} found. Run 'vis check --security-config' for details.`)},"emitSecurityWarnings"),Ju=Pe((t,e)=>{const r=ws(t,e),{security:n}=t;if(n){if(v("Active security settings:"),v(` minimumReleaseAge: ${n.minimumReleaseAge??"not set"} minutes`),v(` trustPolicy: ${n.trustPolicy??"not set"}`),v(` trustPolicyIgnoreAfter: ${n.trustPolicyIgnoreAfter??"not set"} minutes`),v(` blockExoticSubdeps: ${n.blockExoticSubdeps??!1}`),v(` strictDepBuilds: ${n.strictDepBuilds??!1}`),v(` allowBuilds: ${n.allowBuilds?`${Object.keys(n.allowBuilds).length} entries`:"not configured"}`),v(""),v("Socket.dev integration:"),v(` socket.enabled: ${n.socket?.enabled??!1}`),v(` socket.apiToken: ${n.socket?.apiToken||process.env.VIS_SOCKET_TOKEN?"configured":"using public token"}`),v(` socket.minimumScore: ${n.socket?.minimumScore??"default (0.4)"}`),v(` socket.cacheTtlMs: ${n.socket?.cacheTtlMs??"default (1 hour)"}`),v(` socket.timeoutMs: ${n.socket?.timeoutMs??"default (15s)"}`),n.socket?.acceptedRisks){const i=Object.entries(n.socket.acceptedRisks);v(` socket.acceptedRisks: ${String(i.length)} entr${i.length===1?"y":"ies"}`);for(const[o,s]of i)v(` ${o}: ${s.reason} (accepted ${s.acceptedAt.slice(0,10)})`)}else v(" socket.acceptedRisks: none");v("")}if(r.errors.length===0&&r.warnings.length===0){v("All recommended security settings are configured.");return}for(const i of r.errors)vt(i);for(const i of r.warnings)oe(i);Q(""),Q("Secure defaults are applied by defineConfig(). You only need to add allowBuilds:"),Q(""),Q(" import { defineConfig } from '@visulima/vis/config';"),Q(""),Q(" export default defineConfig({"),Q(" security: {"),Q(" allowBuilds: {"),Q(" esbuild: true,"),Q(" '@prisma/client': true,"),Q(" },"),Q(" },"),Q(" });")},"printSecurityReport"),qu=Pe(t=>{const{security:e}=t;if(!e)return[];const r=[];return e.minimumReleaseAge!==void 0&&r.push(`minimumReleaseAge: ${e.minimumReleaseAge}`),e.trustPolicy&&e.trustPolicy!=="off"&&r.push(`trustPolicy: ${e.trustPolicy}`),e.blockExoticSubdeps&&r.push("blockExoticSubdeps: true"),e.allowBuilds&&r.push(`allowBuilds: ${Object.keys(e.allowBuilds).length} entries`),e.strictDepBuilds&&r.push("strictDepBuilds: true"),e.trustPolicyIgnoreAfter!==void 0&&r.push(`trustPolicyIgnoreAfter: ${e.trustPolicyIgnoreAfter}`),r},"previewPnpmSync"),ks=Pe((t,e)=>{const r=F(t,"node_modules");if(!V(r))return[];const n=[],i=Pe((o,s="")=>{let l;try{l=require("node:fs").readdirSync(o)}catch{return}for(const u of l){const g=F(o,u);if(u.startsWith("@")){i(g,`${u}/`);continue}if(u.startsWith("."))continue;const p=s+u,h=F(g,"package.json");try{if(!require("node:fs").statSync(g).isDirectory()||!V(h))continue;const m=JSON.parse(Y(h,"utf8")).scripts??{};if(!m.preinstall&&!m.install&&!m.postinstall&&!m.prepare)continue;if(!Object.entries(e).some(([y,b])=>b?y===p?!0:y.endsWith("*")?p.startsWith(y.slice(0,-1)):!1:!1)){const y=["preinstall","install","postinstall","prepare"].filter(b=>m[b]);n.push(`${p} (${y.join(", ")})`)}}catch{}}},"scanDir");return i(r),n},"scanUnapprovedBuildScripts"),bs=Pe(t=>V(F(t,".yarnrc.yml")),"isYarnBerry"),Yu=Pe((t,e,r)=>{const n={extraArgs:[],postInstallPackages:[],scriptsBlockedByDefault:!1,warnings:[]},i=r.security?.allowBuilds??{},o=Object.keys(i).length>0;switch(t){case"bun":{if(n.scriptsBlockedByDefault=!0,o){const s=F(e,"package.json");try{(V(s)?JSON.parse(Y(s,"utf8")):{}).trustedDependencies?.length||n.warnings.push("vis security.allowBuilds is configured but trustedDependencies is empty. Run 'vis approve-builds --sync-native'.")}catch{}}break}case"npm":{n.scriptsBlockedByDefault=!1;const s=F(e,".npmrc"),l=V(s)&&/^\s*ignore-scripts\s*=\s*true\s*$/m.test(Y(s,"utf8"));if(!l&&o?(n.warnings.push("npm does not block lifecycle scripts. vis will add --ignore-scripts automatically."),n.extraArgs.push("--ignore-scripts")):!l&&!o&&n.warnings.push("npm does not block lifecycle scripts. Add 'ignore-scripts=true' to .npmrc and configure security.allowBuilds."),o)for(const[u,g]of Object.entries(i))g&&n.postInstallPackages.push(u);break}case"pnpm":{n.scriptsBlockedByDefault=!0,o||n.warnings.push("pnpm blocks build scripts by default. Run 'vis approve-builds' to review packages that need scripts.");break}case"yarn":{if(n.scriptsBlockedByDefault=!1,bs(e)){const s=Y(F(e,".yarnrc.yml"),"utf8");/^\s*enableScripts\s*:\s*false\s*$/m.test(s)?n.scriptsBlockedByDefault=!0:n.warnings.push("yarn berry supports enableScripts. Add 'enableScripts: false' to .yarnrc.yml.")}else if(n.warnings.push("yarn classic does not support blocking lifecycle scripts. Consider upgrading to yarn berry."),o){n.extraArgs.push("--ignore-scripts");for(const[s,l]of Object.entries(i))l&&n.postInstallPackages.push(s)}break}}return n},"enforceScriptSecurity"),to=Pe((t,e,r)=>{const n=[],i=Object.entries(r).filter(([,o])=>o).map(([o])=>o);switch(t){case"bun":{const o=F(e,"package.json");if(V(o))try{const s=JSON.parse(Y(o,"utf8"));s.trustedDependencies=i,_(o,`${JSON.stringify(s,null,2)}
100
+ `),n.push(`Updated package.json trustedDependencies with ${i.length} packages`)}catch(s){n.push(`Failed to update package.json: ${s instanceof Error?s.message:String(s)}`)}break}case"npm":{const o=F(e,".npmrc");let s=V(o)?Y(o,"utf8"):"";/^\s*ignore-scripts\s*=\s*true\s*$/m.test(s)?n.push(".npmrc already has ignore-scripts=true"):(s=`${s.trimEnd()}
101
+ ignore-scripts=true
102
+ `,_(o,s),n.push("Added ignore-scripts=true to .npmrc"));break}case"pnpm":{n.push(`pnpm manages allowBuilds natively in pnpm-workspace.yaml (${i.length} packages approved)`);break}case"yarn":{if(bs(e)){const o=F(e,".yarnrc.yml");let s=Y(o,"utf8");const l=/^\s*enableScripts\s*:/m.test(s),u=/^\s*enableScripts\s*:\s*false\s*$/m.test(s);l?u?n.push(".yarnrc.yml already has enableScripts: false"):(s=s.replace(/^\s*enableScripts\s*:.+$/m,"enableScripts: false"),_(o,s),n.push("Changed enableScripts to false in .yarnrc.yml")):(s=`${s.trimEnd()}
103
+ enableScripts: false
104
+ `,_(o,s),n.push("Added enableScripts: false to .yarnrc.yml"))}else{const o=F(e,".npmrc");let s=V(o)?Y(o,"utf8"):"";/^\s*ignore-scripts\s*=\s*true\s*$/m.test(s)?n.push(".npmrc already has ignore-scripts=true"):(s=`${s.trimEnd()}
105
+ ignore-scripts=true
106
+ `,_(o,s),n.push("Added ignore-scripts=true to .npmrc (yarn classic lacks enableScripts)"))}break}}return n},"syncAllowBuildsToNativeConfig"),Xu=Pe((t,e)=>{const{readdirSync:r,statSync:n}=require("node:fs"),i=F(t,"node_modules"),o=[];for(const s of e){if(!s.endsWith("*")){o.push(s);continue}const l=s.slice(0,-1);try{if(l.startsWith("@")&&l.endsWith("/")){const u=F(i,l.slice(0,-1));for(const g of r(u))!g.startsWith(".")&&n(F(u,g)).isDirectory()&&o.push(`${l.slice(0,-1)}/${g}`)}else for(const u of r(i))u.startsWith(l)&&n(F(i,u)).isDirectory()&&o.push(u)}catch{}}return o},"expandPatterns"),Ku=Pe((t,e)=>{if(e.length===0)return;const r=Xu(t,e);if(r.length===0)return;const n=F(t,"node_modules");let i=!1;for(const o of r){if(o.includes("..")||o.startsWith("/")||o.startsWith("\\")){oe(`Skipping invalid package name: ${o}`);continue}const s=(o.match(/\//g)||[]).length;if(s>1||s===1&&!o.startsWith("@")){oe(`Skipping invalid package name: ${o}`);continue}const l=F(n,o),u=F(l,"package.json");if(V(u))try{const g=JSON.parse(Y(u,"utf8")).scripts??{};for(const p of["preinstall","install","postinstall"])if(g[p]){v(`Running ${p} for ${o}...`);try{Hr(g[p],{cwd:l,env:{...process.env},stdio:"inherit"})}catch{vt(`${p} script failed for ${o}`),i=!0}}}catch{}}i&&(process.exitCode=1)},"runApprovedScripts");var Qu=Object.defineProperty,Zu=$((t,e)=>Qu(t,"name",{value:e,configurable:!0}),"r$h");const ep={group:"Security & Health",description:"Review and approve dependencies with build scripts",examples:[["vis approve-builds","Scan and list unapproved build scripts"],["vis approve-builds --all","Approve all pending builds (pnpm)"],["vis approve-builds --sync-native","Sync allowBuilds to native PM config"]],execute:Zu(async({options:t,visConfig:e,workspaceRoot:r})=>{const n=r??process.cwd(),i=pe(n);if(i.name==="pnpm"&&!t.scan){v("Delegating to pnpm approve-builds...");const o=["approve-builds"];t.all&&o.push("--all");const s=Oe("pnpm",o,{cwd:n,stdio:"inherit"});if(s.error)throw new Error(`Failed to run pnpm approve-builds: ${s.error.message}`);if(s.status!==0&&s.status!==null&&(vt(`pnpm approve-builds exited with code ${s.status}`),process.exitCode=s.status),!t["sync-native"])return}else{const o=e?.security?.allowBuilds??{},s=ks(n,o);if(s.length===0)X("No unapproved build scripts found.");else{oe(`Found ${s.length} package${s.length===1?"":"s"} with unapproved build scripts:
107
+ `);for(const l of s)v(` ${l}`);Q(""),Q("To approve these packages, add them to vis.config.ts:"),Q(""),Q(" security: {"),Q(" allowBuilds: {");for(const l of s){const u=l.split(" (")[0];Q(` "${u}": true,`)}Q(" },"),Q(" },"),i.name==="pnpm"&&(Q(""),Q("Or run 'pnpm approve-builds' to update pnpm-workspace.yaml directly."))}}if(t["sync-native"]){const o=e?.security?.allowBuilds??{};if(Object.keys(o).length===0)oe("No security.allowBuilds configured in vis.config.ts. Nothing to sync.");else{const s=to(i.name,n,o);v("");for(const l of s)X(l)}}},"execute"),name:"approve-builds",options:[{defaultValue:!1,description:"Approve all pending builds without prompting (pnpm only)",name:"all",type:Boolean},{defaultValue:!1,description:"Force vis scanning even for pnpm (instead of delegating)",name:"scan",type:Boolean},{defaultValue:!1,description:"Sync allowBuilds to native PM config (bun: trustedDependencies, npm: .npmrc, yarn: .yarnrc.yml)",name:"sync-native",type:Boolean}]};var tp=Object.defineProperty,pt=$((t,e)=>tp(t,"name",{value:e,configurable:!0}),"o$d");const Dr=pt(t=>Array.isArray(t)?t.filter(e=>typeof e=="string"):[],"toStringArray"),xn=pt((t,e)=>{for(const r of e)if(r===t||r.endsWith("*")&&t.startsWith(r.slice(0,-1)))return!0;return!1},"matchesGlobList"),$s=pt(t=>{const e=A(t,"pnpm-workspace.yaml");if(!ae(e))return{excludedPackages:[],ignoredAdvisories:[]};try{const r=Ln(e);return{excludedPackages:[],ignoredAdvisories:[...Dr(r?.auditConfig?.ignoreCves),...Dr(r?.auditConfig?.ignoreGhsas)]}}catch{return{excludedPackages:[],ignoredAdvisories:[]}}},"readPnpmAuditExclusions"),xs=pt(t=>{const e=A(t,".yarnrc.yml");if(!ae(e))return{excludedPackages:[],ignoredAdvisories:[]};try{const r=Ln(e);return{excludedPackages:Dr(r?.npmAuditExcludePackages),ignoredAdvisories:Dr(r?.npmAuditIgnoreAdvisories)}}catch{return{excludedPackages:[],ignoredAdvisories:[]}}},"readYarnAuditExclusions"),rp=pt((t,e)=>{switch(e){case"pnpm":return $s(t);case"yarn":return xs(t);default:return{excludedPackages:[],ignoredAdvisories:[]}}},"readNativeAuditExclusions"),Lo=pt((t,e,r)=>{if(xn(t,e.ignoredAdvisories))return!0;if(r){for(const n of r)if(xn(n,e.ignoredAdvisories))return!0}return!1},"isAdvisoryExcluded"),np=pt((t,e)=>xn(t,e.excludedPackages),"isPackageExcluded"),op=pt((t,e,r)=>{if(r.length===0)return["No advisory IDs to sync."];const n=[];switch(t){case"bun":{n.push(`bun has no audit config file. Use CLI flags: bun audit ${r.map(i=>`--ignore ${i}`).join(" ")}`);break}case"npm":{n.push("npm has no native audit exclusion config. vis accepted risks are the only layer.");break}case"pnpm":{const i=A(e,"pnpm-workspace.yaml");if(!V(i)){n.push("pnpm-workspace.yaml not found. Cannot sync.");break}const o=$s(e),s=new Set(o.ignoredAdvisories.filter(x=>x.startsWith("CVE-"))),l=new Set(o.ignoredAdvisories.filter(x=>x.startsWith("GHSA-"))),u=r.filter(x=>x.startsWith("CVE-")),g=r.filter(x=>x.startsWith("GHSA-")),p=[...new Set([...s,...u])],h=[...new Set([...l,...g])],m=u.filter(x=>!s.has(x)).length,y=g.filter(x=>!l.has(x)).length;if(m===0&&y===0){n.push("All advisory IDs already present in pnpm-workspace.yaml.");break}let b=Y(i,"utf8");if(p.length>0){const x=` ignoreCves:
108
+ ${p.map(E=>` - ${E}`).join(`
109
+ `)}
110
+ `;/auditConfig:/.test(b)?b=/ignoreCves:/.test(b)?b.replace(/ignoreCves:\s*\n(?:\s+-\s+(?:\S.*|[\t\v\f \u00A0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])\n)*/,x):b.replace(/auditConfig:\s*\n/,`auditConfig:
111
+ ${x}`):b=`${b.trimEnd()}
112
+
113
+ auditConfig:
114
+ ${x}`,m>0&&n.push(`Added ${String(m)} new CVE${m===1?"":"s"} to pnpm-workspace.yaml (${String(p.length)} total)`)}if(h.length>0){const x=` ignoreGhsas:
115
+ ${h.map(E=>` - ${E}`).join(`
116
+ `)}
117
+ `;/auditConfig:/.test(b)&&(b=/ignoreGhsas:/.test(b)?b.replace(/ignoreGhsas:\s*\n(?:\s+-\s+(?:\S.*|[\t\v\f \u00A0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])\n)*/,x):b.replace(/(auditConfig:[\s\S]*?)(\n\S|\n?$)/m,`$1${x}$2`)),y>0&&n.push(`Added ${String(y)} new GHSA${y===1?"":"s"} to pnpm-workspace.yaml (${String(h.length)} total)`)}_(i,b);break}case"yarn":{const i=A(e,".yarnrc.yml");if(!V(i)){n.push(".yarnrc.yml not found. Cannot sync.");break}const o=xs(e),s=new Set(o.ignoredAdvisories),l=[...new Set([...s,...r])],u=r.filter(h=>!s.has(h)).length;if(u===0){n.push("All advisory IDs already present in .yarnrc.yml.");break}let g=Y(i,"utf8");const p=`npmAuditIgnoreAdvisories:
118
+ ${l.map(h=>` - "${h}"`).join(`
119
+ `)}
120
+ `;g=/npmAuditIgnoreAdvisories:/.test(g)?g.replace(/npmAuditIgnoreAdvisories:\s*\n(?:\s+-\s+(?:\S.*|[\t\v\f \u00A0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF])\n)*/,p):`${g.trimEnd()}
121
+
122
+ ${p}`,_(i,g),n.push(`Synced ${String(u)} advisor${u===1?"y":"ies"} to .yarnrc.yml (${String(l.length)} total)`);break}default:n.push(`Unknown package manager: ${t}`)}return n},"syncAcceptedRisksToNativeConfig");var ip=Object.defineProperty,et=$((t,e)=>ip(t,"name",{value:e,configurable:!0}),"h$e");const Ss=et(t=>{const e=A(t,"node_modules");if(!V(e))return[];const r=[],n=A(t,"package.json");let i=new Set;if(V(n))try{const s=JSON.parse(Y(n,"utf8"));i=new Set(Object.keys(s.devDependencies??{}))}catch{}const o=et((s,l)=>{let u;try{u=lt(s)}catch{return}for(const g of u){if(g.startsWith("."))continue;const p=A(s,g);if(g.startsWith("@")){o(p,`${g}/`);continue}const h=l+g,m=A(p,"package.json");try{if(!_r(p).isDirectory()||!V(m))continue;const y=JSON.parse(Y(m,"utf8"));y.version&&r.push({isDev:i.has(h),name:h,version:y.version});const b=A(p,"node_modules");V(b)&&o(b,"")}catch{}}},"scanDir");return o(e,""),r},"scanInstalledPackages"),sp={bun:{file:"bun.lock",type:"bun"},npm:{file:"package-lock.json",type:"npm"},pnpm:{file:"pnpm-lock.yaml",type:"pnpm"},yarn:{file:"yarn.lock",type:"yarn"}},Cs=et(async(t,e)=>{const r=sp[e];if(!r)return[];let n,i;try{n=Y(A(t,r.file),"utf8")}catch{return[]}try{i=JSON.parse(Y(A(t,"package.json"),"utf8"))}catch{}let o;try{o=await lc(n,r.type,i)}catch{return[]}if(!o?.packages)return[];const s=new Map;for(const u of o.packages)!u.name||!u.version||(s.has(u.name)||s.set(u.name,new Set),s.get(u.name).add(u.version));const l=[];for(const[u,g]of s)g.size<=1||l.push({name:u,versions:[...g]});return l.sort((u,g)=>u.name.localeCompare(g.name))},"findDuplicateDependencies"),fn={CRITICAL:0,HIGH:1,LOW:3,MODERATE:2,UNKNOWN:4},ap={critical:ot,high:Ci,low:yt,medium:Ge},gn=et((t,e)=>{const r=fn[e.toUpperCase()]??fn.MODERATE??2;return(fn[t.toUpperCase()]??4)<=r},"severityPassesFilter"),cp={CRITICAL:ot,HIGH:Ci,LOW:yt,MODERATE:Ge,UNKNOWN:Re},lp=et((t,e,r,n)=>{const i=cp[r.severity]??Re,o=n?` ${Re("[acknowledged]")}`:"",s=r.fixedVersions??[],l=s.length>0?` (fix: ${s.join(", ")})`:"";return` ${i(r.severity)} ${r.id} — ${t}@${e}${o}
123
+ ${r.summary}${l}`},"formatVulnLine"),dp=et((t,e)=>{const r=It(t),n=`${String(Math.round(t.score.overall*100))}%`,i=e?` ${Re("[acknowledged]")}`:"",o=t.alerts.length>0?`, ${String(t.alerts.length)} alert${t.alerts.length===1?"":"s"}`:"";return` ${n} ${r}@${t.version} (${Gn(t.score.overall)}${o})${i}`},"formatSocketLine"),up=et(async(t,e,r,n)=>{const i=e.severity??"low",o=e.format==="json"||!!e.json,s=!!e.fix,l=!!e["show-accepted"],u=r?.security?.socket,g=u?.acceptedRisks,p=pe(t),h=rp(t,p.name);(h.ignoredAdvisories.length>0||h.excludedPackages.length>0)&&v(`Loaded ${String(h.ignoredAdvisories.length)} ignored advisor${h.ignoredAdvisories.length===1?"y":"ies"} and ${String(h.excludedPackages.length)} excluded package${h.excludedPackages.length===1?"":"s"} from ${p.name} config.`),v("Scanning installed packages...");const m=Ss(t);if(m.length===0){v("No packages found in node_modules. Run your package manager's install command first.");return}v(`Found ${String(m.length)} packages.
124
+ `);const y=m.map(w=>({name:w.name,version:w.version})),b=St(u),[x,E,C]=await Promise.all([en(y),b?Lt(y,b):Promise.resolve(new Map),Cs(t,p.name)]),D=[];for(const w of m){if(np(w.name,h))continue;const k=x.get(w.name)??[],I=E.get(`${w.name}@${w.version}`),z=zn(w.name,w.version,g),q=k.length>0,Z=I?I.score.overall<nt:!1,ue=I?I.alerts.length>0:!1;(q||Z||ue)&&D.push({acceptedRisk:z,name:w.name,socketReport:I,version:w.version,vulnerabilities:k})}const N=D.filter(w=>{const k=w.vulnerabilities.some(q=>gn(q.severity,i)),I=w.socketReport?.alerts.some(q=>gn(q.severity==="medium"?"MODERATE":q.severity.toUpperCase(),i)),z=w.socketReport&&w.socketReport.score.overall<nt;return k||I||z});if(o){const w={duplicates:C.map(k=>({name:k.name,versionCount:k.versions.length,versions:k.versions})),packages:m.length,results:N.map(k=>({acceptedRisk:k.acceptedRisk??null,name:k.name,socketAlerts:k.socketReport?.alerts??[],socketScore:k.socketReport?.score.overall??null,version:k.version,vulnerabilities:k.vulnerabilities})),summary:{accepted:N.filter(k=>k.acceptedRisk).length,duplicatePackages:C.length,issues:N.filter(k=>!k.acceptedRisk).length,total:N.length}};process.stdout.write(`${JSON.stringify(w,void 0,2)}
125
+ `),e["exit-code"]&&w.summary.issues>0&&(process.exitCode=1);return}if(N.length===0){X(`No security issues found across ${String(m.length)} packages.`);return}const L={CRITICAL:[],HIGH:[],LOW:[],MODERATE:[]};for(const w of N)for(const k of w.vulnerabilities)if(gn(k.severity,i)){const I=k.severity==="UNKNOWN"?"LOW":k.severity;L[I]?.push({entry:w,vuln:k})}let j=0,O=0;for(const w of["CRITICAL","HIGH","MODERATE","LOW"]){const k=L[w];if(!(!k||k.length===0)){v(`
126
+ ── ${w} (${String(k.length)}) ──`);for(const{entry:I,vuln:z}of k){const q=!!I.acceptedRisk||Lo(z.id,h,z.aliases);q&&(O++,!l)||(j++,v(lp(I.name,I.version,z,q)),s&&(z.fixedVersions??[]).length>0&&Q(` Fix: update to ${z.fixedVersions.at(-1)}`))}}}const R=N.filter(w=>w.socketReport&&(w.socketReport.score.overall<nt||w.socketReport.alerts.length>0));if(R.length>0){v(`
127
+ ── Socket.dev Supply Chain (${String(R.length)}) ──`);for(const w of R){if(!w.socketReport)continue;const k=!!w.acceptedRisk;if(!(k&&!l)){v(dp(w.socketReport,k));for(const I of w.socketReport.alerts){const z=ap[I.severity]??Re;v(` ${z(`[${I.severity.toUpperCase()}]`)} ${I.type} — ${I.category}`)}}}}if(C.length>0){v(`
128
+ ── Duplicate Dependencies (${String(C.length)}) ──`);for(const w of C){const k=w.versions.join(", ");v(` ${w.name} — ${String(w.versions.length)} versions: ${Ge(k)}`)}}const P=et(w=>!!w.acceptedRisk||w.vulnerabilities.length>0&&w.vulnerabilities.every(k=>Lo(k.id,h,k.aliases)),"isEntryExcluded"),M=N.filter(w=>!P(w)).length;if(v(""),v("─ Audit Summary"),v(` ${String(m.length)} packages scanned`),h.ignoredAdvisories.length>0&&v(` ${String(h.ignoredAdvisories.length)} ${p.name} audit exclusion${h.ignoredAdvisories.length===1?"":"s"} applied`),j>0){const w=L.CRITICAL?.filter(I=>!P(I.entry)).length??0,k=L.HIGH?.filter(I=>!P(I.entry)).length??0;vt(` ${String(j)} vulnerabilit${j===1?"y":"ies"} found`),w>0&&vt(` ${String(w)} critical`),k>0&&oe(` ${String(k)} high`)}else X(" No vulnerabilities found");if(R.length>0){const w=R.filter(k=>!P(k)).length;oe(` ${String(w)} package${w===1?"":"s"} with Socket.dev supply chain issues`)}if(C.length>0&&(oe(` ${String(C.length)} package${C.length===1?"":"s"} with duplicate versions`),Q(" Run 'vis dedupe' or your package manager's dedupe command to reduce duplicates.")),O>0&&(v(` ${String(O)} acknowledged (accepted risks)`),l||Q(" Use --show-accepted to see acknowledged issues.")),M===0&&X(`
129
+ All issues are acknowledged. No action required.`),e.sync&&g){const w=new Set;for(const I of D)if(I.acceptedRisk){for(const z of I.vulnerabilities)if((z.id.startsWith("CVE-")||z.id.startsWith("GHSA-"))&&w.add(z.id),z.aliases)for(const q of z.aliases)(q.startsWith("CVE-")||q.startsWith("GHSA-"))&&w.add(q)}const k=[...w];if(k.length>0){v("");const I=op(p.name,t,k);for(const z of I)X(` ${z}`)}else v(`
130
+ No advisory IDs to sync to native PM config.`)}e["exit-code"]&&M>0&&(process.exitCode=1)},"executeAudit"),pp={group:"Security & Health",description:"Audit installed packages for vulnerabilities and supply chain risks",examples:[["vis audit","Full audit of all installed packages"],["vis audit --severity high","Show only high/critical issues"],["vis audit --format json","Output as JSON for CI integration"],["vis audit --fix","Show fix suggestions for vulnerabilities"],["vis audit --exit-code","Exit with code 1 if issues found (for CI)"],["vis audit --show-accepted","Include acknowledged risks in output"],["vis audit --sync","Sync accepted risks to native PM config (pnpm-workspace.yaml / .yarnrc.yml)"]],execute:et(async({logger:t,options:e,visConfig:r,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");await up(n,e,r,t)},"execute"),name:"audit",options:[{description:"Minimum severity to report: low, medium, high, critical (default: low)",name:"severity",type:String},{description:"Output format: table or json (default: table)",name:"format",type:String},{defaultValue:!1,description:"Show fix suggestions for vulnerabilities",name:"fix",type:Boolean},{defaultValue:!1,description:"Exit with code 1 if any issues found (for CI)",name:"exit-code",type:Boolean},{defaultValue:!1,description:"Include acknowledged (accepted risk) issues in output",name:"show-accepted",type:Boolean},{defaultValue:!1,description:"Sync vis accepted risks to native PM config (pnpm-workspace.yaml / .yarnrc.yml)",name:"sync",type:Boolean}]};var fp=Object.defineProperty,gp=$((t,e)=>fp(t,"name",{value:e,configurable:!0}),"a$9");function rr({current:t,total:e}){const{columns:r}=Dt(),n=r||80,i=e>0?t/e:0,o=`${String(Math.round(i*100))}%`,s=Math.max(10,n-4),l=Math.round(s*i),u=s-l;return d(f,{flexDirection:"column",marginTop:1,paddingX:1,children:[d(f,{children:[c(Oi,{type:"dots"}),d(a,{children:[" ","Checking",String(e)," ","catalog dependencies"," "]}),d(a,{dimColor:!0,children:[String(t),"/",String(e)]})]}),d(f,{children:[c(a,{color:"cyan",children:"━".repeat(l)}),c(a,{dimColor:!0,children:"─".repeat(u)}),d(a,{children:[" ",o]})]})]})}$(rr,"T$6");gp(rr,"CheckProgressApp");var hp=Object.defineProperty,Kt=$((t,e)=>hp(t,"name",{value:e,configurable:!0}),"r$g");const Cr=Kt(t=>{const e=new Map;for(const r of t){const n=e.get(r.catalogName);n?n.push(r):e.set(r.catalogName,[r])}return e},"groupByCatalog"),_t=Kt((t,e,r)=>{let n=t;if(e!=="all"&&(n=e==="security"?n.filter(i=>i.vulnerabilities&&i.vulnerabilities.length>0||i.socketReport&&i.socketReport.alerts.length>0):n.filter(i=>i.updateType===e)),r){const i=r.toLowerCase();n=n.filter(o=>o.packageName.toLowerCase().includes(i))}return n},"filterEntries");class Es{static{$(this,"UpdateStore")}static{Kt(this,"UpdateStore")}#e;#t=new Set;#n;constructor(e,r=null){this.#n=e,this.#e={aiResult:r,allChecked:!0,applyProgress:null,checkedEntries:new Set(e.map(n=>n.packageName)),entries:e,error:null,filterActive:!1,filterText:"",filterType:"all",focusedPanel:"list",groupedByCatalog:Cr(e),phase:"browsing",selectedIndex:0}}getSnapshot=Kt(()=>this.#e,"getSnapshot");subscribe=Kt(e=>(this.#t.add(e),()=>{this.#t.delete(e)}),"subscribe");getFilteredEntries(){return _t(this.#n,this.#e.filterType,this.#e.filterText)}getRecommendation(e){return this.#e.aiResult?.recommendations.find(r=>r.package===e)}getCheckedEntries(){return this.#n.filter(e=>this.#e.checkedEntries.has(e.packageName))}setSelectedIndex(e){const r=this.getFilteredEntries(),n=Math.max(0,Math.min(e,r.length-1));n!==this.#e.selectedIndex&&this.#o({...this.#e,selectedIndex:n})}setFocusedPanel(e){e!==this.#e.focusedPanel&&this.#o({...this.#e,focusedPanel:e})}setFilterType(e){if(e!==this.#e.filterType){const r=_t(this.#n,e,this.#e.filterText);this.#o({...this.#e,entries:r,filterType:e,groupedByCatalog:Cr(r),selectedIndex:0})}}setFilter(e){const r=_t(this.#n,this.#e.filterType,e);this.#o({...this.#e,entries:r,filterText:e,groupedByCatalog:Cr(r),selectedIndex:0})}setFilterActive(e){e!==this.#e.filterActive&&this.#o({...this.#e,filterActive:e,filterText:e?this.#e.filterText:"",...e?{}:{entries:_t(this.#n,this.#e.filterType,""),groupedByCatalog:Cr(_t(this.#n,this.#e.filterType,"")),selectedIndex:0}})}toggleCheck(e){const r=new Set(this.#e.checkedEntries);r.has(e)?r.delete(e):r.add(e),this.#o({...this.#e,allChecked:r.size===this.#n.length,checkedEntries:r})}checkAll(){this.#o({...this.#e,allChecked:!0,checkedEntries:new Set(this.#n.map(e=>e.packageName))})}uncheckAll(){this.#o({...this.#e,allChecked:!1,checkedEntries:new Set})}toggleAll(){this.#e.allChecked?this.uncheckAll():this.checkAll()}startApply(){const e=this.getCheckedEntries();this.#o({...this.#e,applyProgress:{current:0,total:e.length},phase:"applying"})}updateApplyProgress(e){this.#e.applyProgress&&this.#o({...this.#e,applyProgress:{...this.#e.applyProgress,current:e}})}markDone(){this.#o({...this.#e,phase:"done"})}setError(e){this.#o({...this.#e,error:e,phase:"error"})}#o(e){this.#e=e;for(const r of this.#t)try{r()}catch{}}}var mp=Object.defineProperty,yp=$((t,e)=>mp(t,"name",{value:e,configurable:!0}),"f$c");const bt=yp(({autoExitSeconds:t,onCancel:e,visible:r})=>{const{exit:n}=Mt(),[i,o]=se(t||3),s=we(null),l=we(0);ze(()=>(r&&(o(t||3),l.current=Date.now(),s.current=setInterval(()=>{o(g=>Math.max(0,g-1))},1e3)),()=>{s.current&&(clearInterval(s.current),s.current=null)}),[r,t]),ze(()=>{i<=0&&r&&(s.current&&(clearInterval(s.current),s.current=null),n())},[i,r,n]);const u=We(()=>{s.current&&(clearInterval(s.current),s.current=null),e()},[e]);return Ae((g,p)=>{Date.now()-l.current<200||(g==="q"?n():u())},{isActive:r}),c(At,{backgroundColor:"#1e1e1e",footer:d(a,{dimColor:!0,children:["Press"," ",c(a,{bold:!0,color:"white",children:"q"})," ","to exit,"," ",c(a,{bold:!0,color:"white",children:"any key"})," ","to stay"]}),title:`Exiting in ${i}…`,visible:r,width:50,children:c(a,{dimColor:!0,children:"Stay to explore the results interactively."})})},"QuitDialog");var vp=Object.defineProperty,wp=$((t,e)=>vp(t,"name",{value:e,configurable:!0}),"d$e");const kp={major:"red",minor:"yellow",patch:"green"},bp={CRITICAL:"red",HIGH:"red",LOW:"gray",MODERATE:"yellow",UNKNOWN:"gray"},$p={critical:"red",high:"red",low:"gray",medium:"yellow"},xp={critical:"red",high:"red",low:"green",medium:"yellow"},Sp={defer:"gray",review:"yellow",skip:"red",update:"green"},Cp=wp(({changelogUrl:t,entry:e,focused:r,recommendation:n,scrollRef:i})=>{const o=r?"white":"gray";if(!e)return c(f,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",children:c(a,{dimColor:!0,children:"No package selected"})});const s=kp[e.updateType]??"white",l=e.vulnerabilities&&e.vulnerabilities.length>0,u=e.socketReport?.score.overall??0,g=e.socketReport?lr(u):"gray";return d(f,{borderColor:o,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[c(f,{flexShrink:0,paddingTop:1,paddingX:2,children:c(a,{bold:!0,color:"white",children:e.packageName})}),d(Bt,{flexGrow:1,flexShrink:1,paddingX:2,ref:i,scrollbar:!0,scrollbarColor:"gray",children:[c(a,{}),d(f,{children:[c(f,{width:12,children:c(a,{dimColor:!0,children:"Current:"})}),c(a,{children:e.currentRange})]}),d(f,{children:[c(f,{width:12,children:c(a,{dimColor:!0,children:"Target:"})}),c(a,{children:e.newRange}),d(a,{bold:!0,color:s,children:[" ","(",e.updateType,")"]})]}),d(f,{children:[c(f,{width:12,children:c(a,{dimColor:!0,children:"Version:"})}),c(a,{children:e.targetVersion})]}),d(f,{children:[c(f,{width:12,children:c(a,{dimColor:!0,children:"Catalog:"})}),c(a,{children:e.catalogName})]}),e.acceptedRisk&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{color:"gray",children:"── "}),c(a,{bold:!0,color:"gray",children:"ACKNOWLEDGED RISK"}),d(f,{flexDirection:"column",paddingLeft:2,children:[d(f,{children:[c(a,{dimColor:!0,children:"Reason: "}),c(a,{children:e.acceptedRisk.reason})]}),d(f,{children:[c(a,{dimColor:!0,children:"Accepted: "}),c(a,{children:e.acceptedRisk.acceptedAt.slice(0,10)})]})]})]}),l&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"red",children:"SECURITY"}),c(a,{}),e.vulnerabilities.map(p=>d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{gap:1,children:[d(a,{bold:!0,color:bp[p.severity]??"gray",children:["⚠"," ",p.severity]}),c(a,{bold:!0,children:p.id})]}),c(f,{paddingLeft:2,children:c(a,{children:p.summary})}),d(f,{gap:2,paddingLeft:2,children:[p.cvssScore!==void 0&&d(a,{dimColor:!0,children:["CVSS:",String(p.cvssScore)]}),p.fixedVersions.length>0&&d(a,{dimColor:!0,children:["Fixed in:",p.fixedVersions.join(", ")]})]})]},p.id))]}),e.socketReport&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"cyan",children:"SOCKET.DEV"}),c(a,{}),d(f,{gap:2,children:[d(f,{children:[c(a,{dimColor:!0,children:"Overall: "}),d(a,{bold:!0,color:g,children:[String(Math.round(u*100)),"%"]})]}),d(f,{children:[c(a,{dimColor:!0,children:"Supply Chain: "}),d(a,{children:[String(Math.round(e.socketReport.score.supplyChain*100)),"%"]})]}),d(f,{children:[c(a,{dimColor:!0,children:"Quality: "}),d(a,{children:[String(Math.round(e.socketReport.score.quality*100)),"%"]})]})]}),d(f,{gap:2,children:[d(f,{children:[c(a,{dimColor:!0,children:"Maintenance: "}),d(a,{children:[String(Math.round(e.socketReport.score.maintenance*100)),"%"]})]}),d(f,{children:[c(a,{dimColor:!0,children:"Vulnerability: "}),d(a,{children:[String(Math.round(e.socketReport.score.vulnerability*100)),"%"]})]}),d(f,{children:[c(a,{dimColor:!0,children:"License: "}),d(a,{children:[e.socketReport.license||"unknown"," ","(",String(Math.round(e.socketReport.score.license*100)),"%)"]})]})]}),e.socketReport.alerts.length>0&&d(f,{flexDirection:"column",marginTop:1,children:[d(a,{bold:!0,color:"yellow",children:["⚠"," ",String(e.socketReport.alerts.length)," ","alert",e.socketReport.alerts.length===1?"":"s",":"]}),e.socketReport.alerts.map(p=>d(f,{gap:1,paddingLeft:2,children:[d(a,{bold:!0,color:$p[p.severity]??"gray",children:["[",p.severity.toUpperCase(),"]"]}),c(a,{children:p.type}),d(a,{dimColor:!0,children:["(",p.category,")"]})]},p.key))]})]}),n&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"AI ANALYSIS"}),c(a,{}),d(f,{gap:2,children:[d(f,{children:[c(a,{dimColor:!0,children:"Action: "}),c(a,{bold:!0,color:Sp[n.action]??"white",children:n.action})]}),d(f,{children:[c(a,{dimColor:!0,children:"Risk: "}),c(a,{bold:!0,color:xp[n.riskLevel]??"white",children:n.riskLevel})]}),d(f,{children:[c(a,{dimColor:!0,children:"Effort: "}),c(a,{bold:!0,children:n.effort})]})]}),n.reason&&c(f,{marginTop:1,paddingLeft:2,children:c(a,{children:n.reason})}),n.breakingChanges.length>0&&d(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:[c(a,{bold:!0,color:"yellow",children:"Breaking changes:"}),n.breakingChanges.map((p,h)=>d(a,{children:[" ","•"," ",p]},String(h)))]})]}),t&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"CHANGELOG"}),c(f,{marginTop:1,paddingLeft:2,children:c(a,{color:"cyan",underline:!0,children:t})})]}),d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"LINKS"}),c(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:d(a,{color:"cyan",underline:!0,children:["https://npmx.dev/",e.packageName]})})]}),!n&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"GUIDANCE"}),d(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:[e.updateType==="major"&&d(Xt,{children:[d(a,{color:"red",children:["⚠"," ","Major update — likely contains breaking changes."]}),c(a,{dimColor:!0,children:" Review the changelog before updating."}),c(a,{dimColor:!0,children:" Use --changelog to fetch release URLs."})]}),e.updateType==="minor"&&d(Xt,{children:[d(a,{color:"yellow",children:["ℹ"," ","Minor update — new features, backward compatible."]}),c(a,{dimColor:!0,children:" Generally safe to update."})]}),e.updateType==="patch"&&d(Xt,{children:[d(a,{color:"green",children:["✓"," ","Patch update — bug fixes only."]}),c(a,{dimColor:!0,children:" Safe to update."})]}),!n&&c(a,{dimColor:!0,children:" Use --ai to get AI-powered analysis."})]})]})]})]})},"PackageDetailPanel");var Ep=Object.defineProperty,ro=$((t,e)=>Ep(t,"name",{value:e,configurable:!0}),"g$g");const jp={major:"red",minor:"yellow",patch:"green"},Tp=[{key:"all",label:"All",shortcut:"1"},{key:"major",label:"Major",shortcut:"2"},{key:"minor",label:"Minor",shortcut:"3"},{key:"patch",label:"Patch",shortcut:"4"},{key:"security",label:"Security",shortcut:"5"}],Ap=ro(({checked:t,entry:e,isSelected:r})=>{const n=jp[e.updateType]??"white",i=e.vulnerabilities&&e.vulnerabilities.length>0,o=e.socketReport&&e.socketReport.alerts.length>0,s=!!e.acceptedRisk,l=t?"☑":"☐",u=e.socketReport?`${String(Math.round(e.socketReport.score.overall*100))}%`:"",g=e.socketReport?lr(e.socketReport.score.overall):"gray";return d(f,{flexShrink:0,height:1,children:[c(a,{children:r?">":" "}),d(a,{color:t?"white":"gray",children:[" ",l," "]}),i||o?c(a,{color:s?"gray":"red",children:s?"✓ ":"⚠ "}):c(a,{children:" "}),c(f,{flexGrow:1,children:d(a,{bold:r,inverse:r,wrap:"truncate",children:[e.packageName,s?" [ack]":""]})}),u&&d(a,{color:g,children:[" ",u]}),d(a,{dimColor:!0,children:[" ",e.currentRange]}),d(a,{dimColor:!0,children:[" ","→"," "]}),d(a,{children:[e.newRange," "]}),c(a,{bold:!0,color:n,children:e.updateType})]})},"PackageRow"),Ip=ro(({count:t,name:e})=>d(f,{flexShrink:0,height:1,marginTop:1,children:[d(a,{dimColor:!0,children:["▼"," "]}),c(a,{bold:!0,color:"white",children:e.toUpperCase()}),d(a,{dimColor:!0,children:[" ","(",t,")"]})]}),"CatalogHeader"),Rp=ro(({checkedEntries:t,entries:e,filterActive:r,filterText:n,filterType:i,focused:o,groupedByCatalog:s,isDryRun:l,scrollOffset:u,selectedIndex:g,totalEntries:p,viewportHeight:h})=>{const m=o?"white":"gray";let y=0,b=0,x=0,E=0;for(const P of e)P.updateType==="major"?y++:P.updateType==="minor"?b++:x++,(P.vulnerabilities&&P.vulnerabilities.length>0||P.socketReport&&P.socketReport.alerts.length>0)&&E++;const C=[];y>0&&C.push(`${y} major`),b>0&&C.push(`${b} minor`),x>0&&C.push(`${x} patch`),E>0&&C.push(`${E} vulnerable`);const D=C.length>0?` (${C.join(", ")})`:"",N=t.size,L=[];let j=0;for(const[P,M]of s){L.push(c(Ip,{count:M.length,name:P},`hdr-${P}`));for(const w of M){const k=j;L.push(c(Ap,{checked:t.has(w.packageName),entry:w,isSelected:k===g},w.packageName)),j++}}let O=0;for(const[,P]of s)O+=2+P.length;const R=O>h&&h>0;return d(f,{borderColor:m,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS "}),d(a,{wrap:"truncate",children:[p," ","outdated",D]}),!l&&N>0&&d(a,{dimColor:!0,children:[" ","—",N," ","selected"]})]}),c(f,{flexShrink:0,gap:1,paddingX:1,paddingY:1,children:Tp.map(P=>{const M=i===P.key;return d(f,{children:[c(a,{dimColor:!M,children:"["}),c(a,{bold:M,color:M?"cyan":"gray",children:P.shortcut}),c(a,{dimColor:!M,children:"]"}),d(a,{color:M?"white":"gray",children:[" ",P.label]})]},P.key)})}),r&&d(f,{flexShrink:0,paddingX:1,children:[c(a,{bold:!0,color:"white",children:"/ "}),c(a,{children:n}),c(a,{inverse:!0,children:" "})]}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:c(f,{flexDirection:"column",marginTop:-u,children:L})}),R&&c(f,{flexShrink:0,marginLeft:1,marginRight:1,children:c(ar,{contentHeight:O,placement:"inset",scrollOffset:u,style:"block",viewportHeight:h})})]})]})},"PackageListPanel");var Op=Object.defineProperty,Pp=$((t,e)=>Op(t,"name",{value:e,configurable:!0}),"q$3");const Np=100,Dp=40,Mp=10,Fo={1:"all",2:"major",3:"minor",4:"patch",5:"security"},js=Pp(({autoExitSeconds:t=0,changelogUrls:e,isDryRun:r,store:n})=>{const{exit:i}=Mt(),{columns:o,rows:s}=Dt(),l=cr(n.subscribe,n.getSnapshot),[u,g]=se(!1),p=we(null),h=we(null),m=we(null),[y,b]=se(0),[x,E]=se(!1),[C,D]=se(!1),N=He(()=>n.getFilteredEntries(),[l.entries,l.filterType,l.filterText]),L=N[l.selectedIndex]??null,j=L?n.getRecommendation(L.packageName):void 0,O=L&&e?e.get(L.packageName):void 0,R=We(T=>{let S=0,G=0;for(const[,be]of l.groupedByCatalog){S+=2;for(let Se=0;Se<be.length;Se++){if(G===T)return S;S+=1,G++}}return S},[l.groupedByCatalog]),P=Math.max(1,s-8-(l.filterActive?1:0)),M=We(T=>{const S=R(T);b(G=>S>G+P-2?Math.max(0,S-P+2):S<G+1?Math.max(0,S-1):G)},[R,P]);if(ze(()=>{h.current?.scrollToTop()},[L?.packageName]),Ae((T,S)=>{if(T==="c"&&S.ctrl){i();return}if(!C){if(x){T==="u"||S.return?(E(!1),n.startApply(),i(n.getCheckedEntries())):S.escape||T==="q"?E(!1):S.downArrow||T==="j"?m.current?.scrollBy(1):S.upArrow||T==="k"?m.current?.scrollBy(-1):S.pageDown?m.current?.scrollBy(5):S.pageUp&&m.current?.scrollBy(-5);return}if(u){S.escape||T==="?"?g(!1):T==="q"?(g(!1),D(!0)):S.downArrow||T==="j"?p.current?.scrollBy(1):(S.upArrow||T==="k")&&p.current?.scrollBy(-1);return}if(T==="?"){g(!0);return}if(T==="q"){D(!0);return}if(S.tab){n.setFocusedPanel(l.focusedPanel==="list"?"detail":"list");return}if(Fo[T]){n.setFilterType(Fo[T]);return}if(l.filterActive){if(S.escape){n.setFilterActive(!1);return}if(S.return){n.setFilterActive(!1);return}if(S.backspace){n.setFilter(l.filterText.slice(0,-1));return}if(T&&!S.ctrl&&!S.meta){n.setFilter(l.filterText+T);return}return}if(l.focusedPanel==="list"){if(S.downArrow||T==="j"){const G=Math.min(l.selectedIndex+1,N.length-1);n.setSelectedIndex(G),M(G);return}if(S.upArrow||T==="k"){const G=Math.max(l.selectedIndex-1,0);n.setSelectedIndex(G),M(G);return}if(S.pageDown){const G=Math.min(l.selectedIndex+10,N.length-1);n.setSelectedIndex(G),M(G);return}if(S.pageUp){const G=Math.max(l.selectedIndex-10,0);n.setSelectedIndex(G),M(G);return}if(S.home){n.setSelectedIndex(0),b(0);return}if(S.end){const G=N.length-1;n.setSelectedIndex(G),M(G);return}if(T===" "||S.return){L&&n.toggleCheck(L.packageName);return}if(T==="a"){n.toggleAll();return}if(T==="/"){n.setFilterActive(!0);return}if(T==="u"&&!r&&l.checkedEntries.size>0){E(!0);return}if(S.rightArrow){n.setFocusedPanel("detail");return}return}if(l.focusedPanel==="detail"){if(S.escape||S.leftArrow){n.setFocusedPanel("list");return}if(S.downArrow||T==="j"){h.current?.scrollBy(1);return}if(S.upArrow||T==="k"){h.current?.scrollBy(-1);return}if(S.pageDown){h.current?.scrollBy(10);return}if(S.pageUp){h.current?.scrollBy(-10);return}if(S.home){h.current?.scrollToTop();return}S.end&&h.current?.scrollToBottom()}}},{isActive:!0}),o<Dp||s<Mp)return c(f,{alignItems:"center",height:s,justifyContent:"center",width:o,children:d(a,{color:"yellow",children:["Terminal too small (",o,"x",s,")"]})});const w=o>=Np,k=[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]},"?"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"NAV"})]},"nav"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Space"}),c(a,{dimColor:!0,children:"CHECK"})]},"sp"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"a"}),c(a,{dimColor:!0,children:"ALL"})]},"a")];!r&&l.checkedEntries.size>0&&k.push(d(f,{gap:1,children:[c(a,{bold:!0,color:"green",children:"u"}),c(a,{dimColor:!0,children:"APPLY"})]},"u")),k.push(d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"1-5 /"}),c(a,{dimColor:!0,children:"FILTER"})]},"f"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:"PANEL"})]},"t"));const I=c(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,children:c(f,{flexWrap:"wrap",gap:2,paddingX:1,children:k})}),z=d(At,{footer:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",c(a,{bold:!0,color:"white",children:"?"}),"/",c(a,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:p,title:"KEYBOARD SHORTCUTS",visible:u,width:52,children:[d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"NAVIGATION"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↑","/k"]}),c(a,{dimColor:!0,children:" Move up"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↓","/j"]}),c(a,{dimColor:!0,children:" Move down"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Tab"]}),c(a,{dimColor:!0,children:" Switch panel"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","→","/","←"]}),c(a,{dimColor:!0,children:" Focus detail/list"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"SELECTION"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Space"]}),c(a,{dimColor:!0,children:" Toggle check on package"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","a"]}),c(a,{dimColor:!0,children:" Toggle check all"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"FILTERS"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","1"]}),c(a,{dimColor:!0,children:" All"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","2"]}),c(a,{dimColor:!0,children:" Major"})]})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","3"]}),c(a,{dimColor:!0,children:" Minor"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","4"]}),c(a,{dimColor:!0,children:" Patch"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","5"]}),c(a,{dimColor:!0,children:" Security only"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","/"]}),c(a,{dimColor:!0,children:" Text filter"})]})]}),d(f,{flexDirection:"column",children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"ACTIONS"})]}),!r&&d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","u"]}),c(a,{dimColor:!0,children:" Apply selected updates"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","q"]}),c(a,{dimColor:!0,children:" Quit"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","?"]}),c(a,{dimColor:!0,children:" Toggle help"})]})]})]}),q=n.getCheckedEntries(),Z=q.filter(T=>T.updateType==="major").length,ue=d(f,{alignItems:"center",flexDirection:"column",children:[Z>0&&c(f,{marginBottom:1,marginTop:1,children:d(a,{color:"yellow",children:["⚠"," ",Z," ","major update",Z===1?"":"s"," ","— review breaking changes"]})}),d(a,{dimColor:!0,children:["Press"," ",c(a,{bold:!0,color:"white",children:"u"})," ","or"," ",c(a,{bold:!0,color:"white",children:"Enter"})," ","to confirm,"," ",c(a,{bold:!0,color:"white",children:"Esc"})," ","to cancel"]})]}),ne=c(At,{footer:ue,scrollRef:m,title:`Apply ${q.length} update${q.length===1?"":"s"}?`,visible:x,width:70,children:q.map(T=>d(f,{gap:1,children:[d(a,{children:[" ",T.packageName]}),d(a,{dimColor:!0,children:[T.currentRange," ","→"," ",T.newRange]}),c(a,{bold:!0,color:T.updateType==="major"?"red":T.updateType==="minor"?"yellow":"green",children:T.updateType})]},T.packageName))}),$e=c(Rp,{checkedEntries:l.checkedEntries,entries:N,filterActive:l.filterActive,filterText:l.filterText,filterType:l.filterType,focused:l.focusedPanel==="list",groupedByCatalog:l.groupedByCatalog,isDryRun:r,scrollOffset:y,selectedIndex:l.selectedIndex,totalEntries:n.getFilteredEntries().length,viewportHeight:P}),fe=c(Cp,{changelogUrl:O,entry:L,focused:l.focusedPanel==="detail",recommendation:j,scrollRef:h});if(w){const T=Math.floor(o*.35);return d(f,{flexDirection:"column",height:s,width:o,children:[d(f,{flexDirection:"row",flexGrow:1,children:[c(f,{flexGrow:1,children:$e}),c(f,{width:T,children:fe})]}),I,ne,c(bt,{autoExitSeconds:t||3,onCancel:$(()=>{D(!1)},"onCancel"),visible:C}),z]})}const Te=Math.floor(s*.55);return d(f,{flexDirection:"column",height:s,width:o,children:[c(f,{height:Te,children:$e}),c(f,{flexGrow:1,children:fe}),I,ne,c(bt,{autoExitSeconds:t||3,onCancel:$(()=>{D(!1)},"onCancel"),visible:C}),z]})},"VisUpdateApp");var Bp=Object.defineProperty,Lp=$((t,e)=>Bp(t,"name",{value:e,configurable:!0}),"E$8");const Fp={group:"Security & Health",alias:["c","outdated"],argument:{description:"Specific packages to check (checks all if omitted)",name:"packages",type:String},description:"Check for outdated dependencies, security vulnerabilities, and supply chain settings",examples:[["vis check","Check all catalog dependencies"],["vis check react","Check specific packages"],["vis check --target minor","Only show minor/patch updates"],["vis check --exclude '@types/*'","Exclude packages by pattern"],["vis check --no-security","Skip vulnerability scanning"],["vis check --security-config","Audit supply chain security settings"],["vis check --security-config --sync","Sync security config to pnpm-workspace.yaml"]],execute:Lp(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const o=i;if(r["security-config"]){const O=pe(o);if(Ju(n??{},O.name),r.sync&&O.name==="pnpm"){const R=qu(n??{});if(R.length>0){v(`
131
+ Settings that would sync to pnpm-workspace.yaml:`);for(const P of R)X(` ${P}`)}else v("No security settings to sync.")}else r.sync&&O.name!=="pnpm"&&(v(`--sync is only available for pnpm projects. Your project uses ${O.name}.`),v("vis enforces security settings at the vis layer for non-pnpm projects."));if(!r.security&&!t?.length)return}const{packageManager:s}=zr(o),l=Qn(o),u=n?.update??{},g=Zr(o,s,{dev:r.dev,prod:r.prod});if(g.size===0){e.info("No catalogs found.");return}const p=r.target??u.target??"latest";if(!["latest","minor","patch"].includes(p))throw new Error(`Invalid target "${p}". Use: latest, minor, or patch.`);const h={exclude:[...Ie(r.exclude),...Ie(u.exclude)],ignore:Ie(u.ignore),include:[...Ie(r.include),...Ie(u.include),...t],includePrerelease:r.prerelease||u.prerelease||!1,security:!r["no-security"],target:p};let m=0;for(const O of g.values())m+=O.size;const y=!!process.stdout.isTTY&&!De;let b;const x=y?(O,R)=>{b?b.rerender(H.createElement(rr,{current:O,total:R})):b=st(H.createElement(rr,{current:O,total:R}),{interactive:!0,patchConsole:!1})}:(O,R)=>{e.info(`Checking ${String(O)}/${String(R)} dependencies...`)};y||e.info(`Checking ${String(m)} catalog dependencies against npm registry...
132
+ `);const E=St(n?.security?.socket),{failed:C,outdated:D}=await Zn(g,h,l,x,o,E,n?.security?.socket?.acceptedRisks);if(b&&(b.clear(),b.unmount()),C.length>0&&e.warn(`Failed to fetch: ${C.join(", ")}`),D.length===0){e.info("All catalog dependencies are up to date.");return}const N=r.format??u.format??"table",L=Yn(r["ai-type"]??"impact"),j=r.ai?await Xn(D,e,n?.ai,L):void 0;if(y&&N==="table"){const O=new Es(D,j??null),R=n?.tui?.autoExit??!1,P=R===!0?3:typeof R=="number"?R:0;await st(H.createElement(js,{autoExitSeconds:P,isDryRun:!0,store:O}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit();const M=process.stdout.columns||80;process.stdout.write(`
133
+ `);for(const w of D){const k=w.vulnerabilities?.length||w.socketReport&&w.socketReport.alerts.length>0,I=!!w.acceptedRisk,z=k?I?"✓":"⚠":"✓",q=I?"gray":w.updateType==="major"?"red":w.updateType==="minor"?"yellow":"green",Z=w.socketReport?.score.overall,ue=Z===void 0?"":` [${String(Math.round(Z*100))}%]`,ne=Z===void 0?void 0:lr(Z);process.stdout.write(`${ge(H.createElement(a,null," ",H.createElement(a,{color:q},z),` ${w.packageName} ${w.currentRange} → ${w.newRange}`,H.createElement(a,{dimColor:!0},` ${w.updateType}`),ne?H.createElement(a,{color:ne},ue):null),{columns:M})}
134
+ `)}process.stdout.write(`
135
+ `),e.info(Nr(D))}else if(N==="json"){const O={failed:C,outdated:D};j&&(O.aiAnalysis=j),process.stdout.write(`${JSON.stringify(O,void 0,2)}
136
+ `)}else N==="minimal"?process.stdout.write(`${ms(D)}
137
+ `):(ys(D,e),e.info(Nr(D)),j&&(e.info(""),e.info(Pr(j))));r["exit-code"]&&D.length>0&&(process.exitCode=1)},"execute"),name:"check",options:[{alias:"t",description:"Update target: latest, minor, or patch (default: latest)",name:"target",type:String},{description:"Glob pattern to include packages (repeatable)",lazyMultiple:!0,name:"include",type:String},{description:"Glob pattern to exclude packages (repeatable)",lazyMultiple:!0,name:"exclude",type:String},{defaultValue:!1,description:"Include prerelease versions",name:"prerelease",type:Boolean},{defaultValue:!1,description:"Skip security vulnerability scanning",name:"no-security",type:Boolean},{defaultValue:!1,description:"Audit supply chain security settings",name:"security-config",type:Boolean},{defaultValue:!1,description:"Sync security settings to pnpm-workspace.yaml (pnpm only, requires --security-config)",name:"sync",type:Boolean},{description:"Output format: table, json, or minimal (default: table)",name:"format",type:String},{defaultValue:!1,description:"Exit with code 1 if outdated dependencies found (for CI)",name:"exit-code",type:Boolean},{defaultValue:!1,description:"Run AI analysis on outdated packages",name:"ai",type:Boolean},{description:"AI analysis type: impact, security, compatibility, or recommend",name:"ai-type",type:String},{alias:"D",defaultValue:!1,description:"Check only devDependencies (npm/yarn mode)",name:"dev",type:Boolean},{alias:"P",defaultValue:!1,description:"Check only dependencies (npm/yarn mode)",name:"prod",type:Boolean}]};var Vp=Object.defineProperty,no=$((t,e)=>Vp(t,"name",{value:e,configurable:!0}),"a$7");const Up=no(t=>{const e=[],r=[t];for(;r.length>0;){const n=r.pop();let i;try{i=lt(n)}catch{continue}for(const o of i){const s=F(n,o);try{const l=Va(s);if(l.isSymbolicLink()||!l.isDirectory())continue}catch{continue}o==="node_modules"?e.push(s):o!==".git"&&o!==".hg"&&r.push(s)}}return e},"findNodeModulesDirectories"),Gp=["pnpm-lock.yaml","package-lock.json","npm-shrinkwrap.json","yarn.lock","bun.lock","bun.lockb"],zp=no((t,e,r)=>{let n=0,i=!1;for(const o of Gp){const s=F(t,o);if(V(s)){if(e){r.info(` ${s}`),n++;continue}try{Ei(s),X(`Removed ${s}`),n++}catch(l){tr(`${s}: ${wn(l)}`),i=!0}}}return{hadError:i,removed:n}},"removeLockfiles"),Wp={group:"Workspace",description:"Remove node_modules from all workspace projects",examples:[["vis clean","Remove all node_modules directories"],["vis clean --lockfile","Also remove lockfiles"],["vis clean --dry-run","Preview what would be removed"]],execute:no(async({logger:t,options:e,workspaceRoot:r})=>{const n=r??process.cwd(),i=e.lockfile||!1;if(e["dry-run"]){const l=Up(n);if(l.length>0){v("Would remove:");for(const u of l)t.info(` ${u}`)}else v("No node_modules directories found.");i&&zp(n,!0,t);return}const o=Jr();if(!o){tr("Native bindings unavailable. Ensure the correct platform binary is installed."),process.exitCode=1;return}const s=o.cleanWorkspace(n,i);for(const l of s.removed)X(`Removed ${l}`);for(const l of s.lockfilesRemoved)X(`Removed ${l}`);for(const l of s.errors)tr(l);s.removed.length===0&&s.lockfilesRemoved.length===0?v("No node_modules directories found."):v(`Cleaned ${s.removed.length} node_modules director${s.removed.length===1?"y":"ies"}`),s.errors.length>0&&(process.exitCode=1)},"execute"),name:"clean",options:[{alias:"l",defaultValue:!1,description:"Also remove lockfiles (pnpm-lock.yaml, package-lock.json, etc.)",name:"lockfile",type:Boolean},{defaultValue:!1,description:"Preview what would be removed without deleting",name:"dry-run",type:Boolean}]};var _p=Object.defineProperty,tn=$((t,e)=>_p(t,"name",{value:e,configurable:!0}),"e$6");const Hp={"vis:app":"builtin:app","vis:application":"builtin:app","vis:generator":"builtin:generator","vis:lib":"builtin:library","vis:library":"builtin:library","vis:monorepo":"builtin:monorepo"},Jp=["https://github.com/","https://gitlab.com/","https://bitbucket.org/","https://raw.githubusercontent.com/","https://git.sr.ht/","git@github.com:","git@gitlab.com:","git@bitbucket.org:","git@git.sr.ht:","github:","gh:","gitlab:","bitbucket:","sourcehut:","git:","http://","https://"],qp=tn(t=>{for(const e of Jp)if(t.startsWith(e))return!0;return!!(!t.startsWith("@")&&/^[^/#@][^/#]*\/[^/#]+/.test(t))},"isGitUrl"),Yp=new Set(["sv"]),Xp=tn(t=>{if(Yp.has(t)||t.startsWith("create-")||t.startsWith("@")&&t.includes("/create-"))return t;if(t.startsWith("@")){const e=t.indexOf("/");if(e!==-1){const r=t.slice(0,e),n=t.slice(e+1);return`${r}/create-${n}`}return t}return`create-${t}`},"expandCreateShorthand"),Kp=tn((t,e=[])=>{if(!t)throw new Error("No template specified.");const r=t.toLowerCase(),n=Hp[r];return n?{args:e,source:r,type:n}:qp(t)?{args:e,source:t,type:"remote:git"}:{args:e,source:Xp(t),type:"remote:npm"}},"discoverTemplate"),Qp=tn(t=>{switch(t){case"builtin:app":return"apps";case"builtin:generator":case"builtin:library":return"packages";default:return"."}},"inferParentDir");var Zp=Object.defineProperty,ef=$((t,e)=>Zp(t,"name",{value:e,configurable:!0}),"o$a");const tf=ef(()=>`${bo()}-${bo()}`,"randomName");var rf=Object.defineProperty,fr=$((t,e)=>rf(t,"name",{value:e,configurable:!0}),"r$f");const Ts=fr(t=>t?dc(t).validForNewPackages:!1,"isValidPackageName"),nr=fr(t=>t.toLowerCase().trim().replaceAll(/\s+/g,"-").replaceAll(/[^a-z\d\-~]/g,"-").replace(/^[._-]+/,"").replaceAll(/-{2,}/g,"-").replace(/-$/,""),"toValidPackageName"),nf=new Set([".DS_Store",".git",".gitkeep","Thumbs.db"]),As=fr(t=>V(t)?lt(t).every(e=>nf.has(e)):!0,"isEmptyDir"),of=fr((t,e)=>{const r=Qe(e,t);return{packageName:nr(Wa(r)),targetDir:r}},"resolveTargetDir"),sf=fr(t=>As(t),"canSafelyOverwrite");var af=Object.defineProperty,rn=$((t,e)=>af(t,"name",{value:e,configurable:!0}),"l$e");const Qt=rn((t,e)=>new Promise(r=>{t.question(e,n=>{r(n.trim())})}),"ask"),hn=rn(async(t,e,r=!0)=>{const n=await Qt(t,` ${e} ${ee(r?"[Y/n]":"[y/N]")} `);return n===""?r:n.toLowerCase()==="y"||n.toLowerCase()==="yes"},"confirm"),Vo=rn(async(t,e,r)=>{process.stderr.write(` ${e}
138
+ `);for(const[n,i]of r.entries()){const o=le(Ee(` ${String(n+1)}.`)),s=i.hint?ee(` — ${i.hint}`):"";process.stderr.write(`${o} ${i.label}${s}
139
+ `)}for(;;){const n=await Qt(t,`
140
+ ${ee(`Enter choice (1-${String(r.length)}):`)} `),i=Number.parseInt(n,10);if(i>=1&&i<=r.length)return r[i-1].value;const o=r.find(s=>s.value===n||s.label.toLowerCase()===n.toLowerCase());if(o)return o.value;process.stderr.write(` ${ee("Invalid choice. Try again.")}
141
+ `)}},"select"),cf=rn(async t=>{const e=Nt({input:process.stdin,output:process.stdout});try{process.stderr.write(`
142
+ ${le(Ee("vis create"))} ${ee("— project scaffolding")}
143
+
144
+ `);const r=t.inMonorepo?[{hint:"Scaffold via create-vite",label:"Vis Application",value:"vis:app"},{hint:"Reusable package scaffold",label:"Vis Library",value:"vis:library"},{hint:"Code generator scaffold",label:"Vis Generator",value:"vis:generator"},{hint:"Enter an npm create-* package or GitHub URL",label:"Custom template",value:"__custom__"}]:[{hint:"Full workspace setup",label:"Vis Monorepo",value:"vis:monorepo"},{hint:"Scaffold via create-vite",label:"Vis Application",value:"vis:app"},{hint:"Reusable package scaffold",label:"Vis Library",value:"vis:library"},{hint:"Code generator scaffold",label:"Vis Generator",value:"vis:generator"},{hint:"Enter an npm create-* package or GitHub URL",label:"Custom template",value:"__custom__"}];let n=await Vo(e,"Select a template:",r);if(n==="__custom__"&&(n=await Qt(e,`
145
+ ${ee("Template (npm package or GitHub URL):")} `),!n))throw new Error("No template specified.");const i=tf(),o=await Qt(e,`
146
+ ${ee(`Project name (${i}):`)} `)||i;if(!Ts(nr(o)))throw new Error(`Invalid project name: "${o}". Must be a valid npm package name.`);const s=nr(o),l=await Qt(e,` ${ee(`Target directory (${s}):`)} `)||s;let u=!1;const g=Qe(t.cwd,l);if(!As(g)&&(u=await hn(e,`Directory "${l}" is not empty. Overwrite?`,!1),!u))throw new Error("Aborted — directory not empty.");let p;t.inMonorepo||(t.defaultPm?(p=t.defaultPm,process.stderr.write(` ${ee(`Package manager: ${p} (from config)`)}
147
+ `)):p=await Vo(e,"Package manager:",[{label:"pnpm",value:"pnpm"},{label:"npm",value:"npm"},{label:"yarn",value:"yarn"},{label:"bun",value:"bun"}]));let h=!1;t.inMonorepo||(h=await hn(e,"Initialize a git repository?",t.defaultGitInit??!1));const m=t.defaultEditor==="vscode",y=await hn(e,"Generate VS Code configuration?",m)?"vscode":void 0;return process.stderr.write(`
148
+ `),{editor:y,gitInit:h,overwrite:u,pm:p,projectName:o,targetDir:l,template:n}}finally{e.close()}},"runInteractivePrompts");var lf=Object.defineProperty,Ct=$((t,e)=>lf(t,"name",{value:e,configurable:!0}),"i$7");const df=Ct((t,e)=>{v("Scaffolding application via create-vite...");const r=[Dn(e.cwd,e.targetDir)||".",...t.args];return r.includes("--no-immediate")||r.push("--no-immediate"),Un(e.pm,{additionalPackages:[],args:r,package:"create-vite",shellMode:!1,silent:!1},e.cwd,e.logger)},"executeApp"),uf=Ct(t=>`${JSON.stringify({devDependencies:{typescript:"^5.0.0",vitest:"^3.0.0"},exports:{".":{default:"./dist/index.js",types:"./dist/index.d.ts"}},files:["dist"],main:"./dist/index.js",name:t,scripts:{build:"tsc",dev:"tsc --watch",test:"vitest run","test:watch":"vitest"},type:"module",types:"./dist/index.d.ts",version:"0.0.1"},null,4)}
149
+ `,"libraryPackageJson"),pf=Ct(()=>`${JSON.stringify({compilerOptions:{declaration:!0,declarationMap:!0,esModuleInterop:!0,module:"Node16",moduleResolution:"Node16",outDir:"./dist",rootDir:"./src",skipLibCheck:!0,sourceMap:!0,strict:!0,target:"ES2022"},include:["src/**/*"]},null,4)}
150
+ `,"libraryTsconfig"),ff=Ct(t=>`/**
151
+ * ${t} — library entry point.
152
+ */
153
+
154
+ export const greet = (name: string): string => \`Hello from ${t}, \${name}!\`;
155
+ `,"librarySrcIndex"),gf=Ct(t=>`import { describe, expect, it } from "vitest";
156
+
157
+ import { greet } from "../src/index";
158
+
159
+ describe("${t}", () => {
160
+ it("should greet", () => {
161
+ expect(greet("world")).toBe("Hello from ${t}, world!");
162
+ });
163
+ });
164
+ `,"libraryTestIndex"),hf=Ct((t,e)=>{const{projectName:r,targetDir:n}=e;return v("Scaffolding library package..."),ye(n,{recursive:!0}),ye(F(n,"src"),{recursive:!0}),ye(F(n,"__tests__"),{recursive:!0}),_(F(n,"package.json"),uf(r)),X("Created package.json"),_(F(n,"tsconfig.json"),pf()),X("Created tsconfig.json"),_(F(n,"src","index.ts"),ff(r)),X("Created src/index.ts"),_(F(n,"__tests__","index.test.ts"),gf(r)),X("Created __tests__/index.test.ts"),_(F(n,".gitignore"),`node_modules/
165
+ dist/
166
+ .env
167
+ .DS_Store
168
+ `),X("Created .gitignore"),0},"executeLibrary"),mf=Ct((t,e)=>{switch(t.type){case"builtin:app":return df(t,e);case"builtin:library":return hf(t,e);default:throw new Error(`Unknown built-in template type: ${t.type}`)}},"executeBuiltin");var yf=Object.defineProperty,gr=$((t,e)=>yf(t,"name",{value:e,configurable:!0}),"r$e");const vf=gr((t,e)=>`${JSON.stringify({bin:{[t]:"./bin/index.js"},description:e,devDependencies:{typescript:"^5.0.0"},name:t,private:!0,scripts:{build:"tsc",dev:"tsc --watch"},type:"module",version:"0.0.1"},null,4)}
169
+ `,"packageJson"),wf=gr(t=>`#!/usr/bin/env node
170
+
171
+ /**
172
+ * ${t} — code generator
173
+ *
174
+ * Usage: npx ${t} [options]
175
+ */
176
+
177
+ console.log("Hello from ${t}!");
178
+ `,"binIndex"),kf=gr(()=>`${JSON.stringify({compilerOptions:{declaration:!0,esModuleInterop:!0,module:"Node16",moduleResolution:"Node16",outDir:"./dist",rootDir:"./src",skipLibCheck:!0,strict:!0,target:"ES2022"},include:["src/**/*","bin/**/*"]},null,4)}
179
+ `,"tsconfigJson"),bf=gr(()=>`/**
180
+ * Generator core logic — export functions used by the CLI entry point.
181
+ */
182
+
183
+ export const generate = (): void => {
184
+ // TODO: Implement your generator logic here
185
+ };
186
+ `,"srcIndex"),$f=gr((t,e="")=>{const{projectName:r,targetDir:n}=t;v("Scaffolding code generator..."),ye(n,{recursive:!0}),ye(F(n,"bin"),{recursive:!0}),ye(F(n,"src"),{recursive:!0}),_(F(n,"package.json"),vf(r,e||`Code generator: ${r}`)),X("Created package.json");const i=F(n,"bin","index.js");return _(i,wf(r)),Ua(i,493),X("Created bin/index.js (executable)"),_(F(n,"tsconfig.json"),kf()),X("Created tsconfig.json"),_(F(n,"src","index.ts"),bf()),X("Created src/index.ts"),0},"executeGeneratorTemplate");var xf=Object.defineProperty,Ft=$((t,e)=>xf(t,"name",{value:e,configurable:!0}),"s$h");const Sf=Ft(t=>`${JSON.stringify({devDependencies:{"@visulima/vis":"latest"},name:t,packageManager:"pnpm@latest",private:!0,scripts:{build:"vis run build",dev:"vis run dev",lint:"vis run lint",test:"vis run test"},type:"module",version:"0.0.0"},null,4)}
187
+ `,"rootPackageJson"),Cf=Ft(()=>`packages:
188
+ - "apps/*"
189
+ - "packages/*"
190
+ `,"pnpmWorkspaceYaml"),Ef=Ft(()=>`# Dependencies
191
+ node_modules/
192
+
193
+ # Build output
194
+ dist/
195
+ .output/
196
+
197
+ # Environment
198
+ .env
199
+ .env.local
200
+ .env.*.local
201
+
202
+ # IDE
203
+ .vscode/*
204
+ !.vscode/settings.json
205
+ !.vscode/extensions.json
206
+ .idea/
207
+
208
+ # OS
209
+ .DS_Store
210
+ Thumbs.db
211
+
212
+ # Logs
213
+ *.log
214
+ npm-debug.log*
215
+ pnpm-debug.log*
216
+
217
+ # Cache
218
+ .turbo/
219
+ .cache/
220
+ `,"gitignore"),jf=Ft(()=>`root = true
221
+
222
+ [*]
223
+ indent_style = space
224
+ indent_size = 4
225
+ end_of_line = lf
226
+ charset = utf-8
227
+ trim_trailing_whitespace = true
228
+ insert_final_newline = true
229
+
230
+ [*.{yml,yaml}]
231
+ indent_size = 2
232
+
233
+ [*.md]
234
+ trim_trailing_whitespace = false
235
+ `,"editorconfig"),Tf=Ft(t=>`# ${t}
236
+
237
+ A monorepo powered by [vis](https://visulima.com/packages/vis).
238
+
239
+ ## Getting Started
240
+
241
+ \`\`\`bash
242
+ # Install dependencies
243
+ pnpm install
244
+
245
+ # Run all apps in development mode
246
+ pnpm dev
247
+
248
+ # Build all packages
249
+ pnpm build
250
+
251
+ # Run tests
252
+ pnpm test
253
+ \`\`\`
254
+
255
+ ## Structure
256
+
257
+ \`\`\`
258
+ ├── apps/ # Applications
259
+ ├── packages/ # Shared packages & libraries
260
+ ├── pnpm-workspace.yaml
261
+ └── package.json
262
+ \`\`\`
263
+ `,"readmeMd"),Af=Ft(t=>{const{projectName:e,targetDir:r}=t;return v("Scaffolding monorepo workspace..."),ye(r,{recursive:!0}),ye(F(r,"apps"),{recursive:!0}),ye(F(r,"packages"),{recursive:!0}),_(F(r,"package.json"),Sf(e)),X("Created package.json"),_(F(r,"pnpm-workspace.yaml"),Cf()),X("Created pnpm-workspace.yaml"),_(F(r,".gitignore"),Ef()),X("Created .gitignore"),_(F(r,".editorconfig"),jf()),X("Created .editorconfig"),_(F(r,"README.md"),Tf(e)),X("Created README.md"),_(F(r,"apps",".gitkeep"),""),_(F(r,"packages",".gitkeep"),""),0},"executeMonorepoTemplate");var If=Object.defineProperty,oo=$((t,e)=>If(t,"name",{value:e,configurable:!0}),"i$6");const Rf={"create-nuxt":{monoArgs:["--no-gitInit"]},"create-vite":{args:["--no-immediate"]},sv:{args:["--no-install"],prependCommand:"create"}},Of=oo((t,e,r)=>{const n=Rf[t];if(!n)return e;const i=[...e];if(n.prependCommand&&!i.includes(n.prependCommand)&&i.unshift(n.prependCommand),n.args)for(const o of n.args)i.includes(o)||i.push(o);if(r&&n.monoArgs)for(const o of n.monoArgs)i.includes(o)||i.push(o);return i},"applyAutoFixes"),Pf=oo((t,e)=>{const r=Dn(e.cwd,e.targetDir)||".",n=[...t.args];n.includes(r)||n.unshift(r);const i=Of(t.source,n,e.inMonorepo);return v(`Running ${t.source} via ${e.pm.name} dlx...`),Un(e.pm,{additionalPackages:[],args:i,package:t.source,shellMode:!1,silent:!1},e.cwd,e.logger)},"executeRemoteNpm"),Nf=oo(async(t,e)=>{const{createConfig:r}=e;v(`Downloading template from ${t.source}...`);try{const n=await uc(t.source,{auth:r?.auth||process.env.GIGET_AUTH||process.env.GITHUB_TOKEN||process.env.GH_TOKEN||void 0,dir:e.targetDir,force:!0,preferOffline:r?.preferOffline,provider:r?.defaultProvider,registry:r?.registry});return v(`Downloaded to ${n.dir}`),0}catch(n){const i=n instanceof Error?n.message:String(n);return oe(`Failed to download template: ${i}`),1}},"executeRemoteGit");var Df=Object.defineProperty,Mf=$((t,e)=>Df(t,"name",{value:e,configurable:!0}),"r$d");const Bf=Mf(async(t,e)=>{switch(t.type){case"builtin:app":case"builtin:library":return mf(t,e);case"builtin:generator":return $f(e);case"builtin:monorepo":return Af(e);case"remote:git":return Nf(t,e);case"remote:npm":return Pf(t,e);default:throw new Error(`Unknown template type: ${t.type}`)}},"executeTemplate");var Lf=Object.defineProperty,ft=$((t,e)=>Lf(t,"name",{value:e,configurable:!0}),"f$9");const Ff=ft(t=>{const e=F(t,".vscode");V(e)||ye(e,{recursive:!0});const r=F(e,"settings.json"),n={"editor.defaultFormatter":"oxc.oxc-vscode","editor.formatOnSave":!0};if(V(r))try{const s=JSON.parse(Y(r,"utf8"));_(r,`${JSON.stringify({...n,...s},null,4)}
264
+ `),X("Merged .vscode/settings.json")}catch{oe("Could not merge .vscode/settings.json, skipping")}else _(r,`${JSON.stringify(n,null,4)}
265
+ `),X("Created .vscode/settings.json");const i=F(e,"extensions.json"),o={recommendations:["oxc.oxc-vscode"]};if(V(i))try{const s=JSON.parse(Y(i,"utf8"));_(i,`${JSON.stringify({...s,recommendations:[...new Set([...s.recommendations||[],...o.recommendations])]},null,4)}
266
+ `),X("Merged .vscode/extensions.json")}catch{oe("Could not merge .vscode/extensions.json, skipping")}else _(i,`${JSON.stringify(o,null,4)}
267
+ `),X("Created .vscode/extensions.json")},"generateVscodeConfig"),Vf=ft((t,e)=>{const r=F(t,".ai");ye(r,{recursive:!0});const n=F(r,"instructions");if(V(n))return;const i=`# Project Instructions
268
+
269
+ This project was scaffolded with vis create.
270
+
271
+ ## Development
272
+
273
+ - Package manager: ${e}
274
+ - Build: \`${e} run build\`
275
+ - Test: \`${e} run test\`
276
+ - Lint: \`${e} run lint\`
277
+
278
+ ## Conventions
279
+
280
+ - Use TypeScript strict mode
281
+ - ESM modules (\`"type": "module"\`)
282
+ - Follow Angular-style conventional commits
283
+ `;_(n,i),X("Created .ai/instructions")},"generateAiInstructions"),Uf=ft(t=>{Oe("git",["init"],{cwd:t,stdio:"pipe"}).status===0?X("Initialized git repository"):oe("Failed to initialize git repository")},"initGitRepo"),Gf=ft((t,e,r,n=!1)=>(v("Installing dependencies..."),qr(e,{dev:!1,filter:[],force:!1,frozenLockfile:!1,ignoreScripts:!1,lockfileOnly:!1,noOptional:!1,offline:n},t,r)===0?(X("Dependencies installed"),!0):(oe("Dependency installation failed (you can run install manually)"),!1)),"installDependencies"),zf=ft(t=>{const e=t.split("#")[0].split("?")[0].replace(/\/+$/,"").replace(/\.git$/,"").split("/").filter(Boolean).at(-1)??"",r=e.includes(":")?e.split(":").pop()??e:e;return nr(r)||"my-project"},"extractRepoName"),Wf=ft(t=>{if(v(""),v(" Built-in templates:"),v(` ${le(Ee("vis:monorepo"))} ${ee("Full pnpm workspace setup")}`),v(` ${le(Ee("vis:app"))} ${ee("Application scaffold via create-vite")}`),v(` ${le(Ee("vis:library"))} ${ee("Reusable TypeScript library package")}`),v(` ${le(Ee("vis:generator"))} ${ee("Code generator scaffold with bin entry")}`),t&&Object.keys(t).length>0){v(""),v(" Config aliases (vis.config.ts → create.templates):");for(const[e,r]of Object.entries(t))v(` ${le(Ee(e))}${" ".repeat(Math.max(1,16-e.length))}${ee(r)}`)}v(""),v(" Remote templates:"),v(` ${ee("Any npm create-* package:")} vis create vite`),v(` ${ee("GitHub repository:")} vis create user/repo`),v(` ${ee("GitLab / Bitbucket:")} vis create gitlab:user/repo`),v(` ${ee("Full URL:")} vis create https://github.com/user/repo`),v(""),v(` ${ee("Template args after --:")} vis create vite -- --template react-ts`),v("")},"listTemplates"),_f=ft((t,e,r,n)=>{const i=Qe(e)===Qe(t)?"":t;process.stderr.write(`
284
+ `),X("Project created successfully!"),process.stderr.write(`
285
+ `),Q("Next steps:"),i&&v(` cd ${i}`),n||v(` ${r} install`),v(` ${r} run dev`),process.stderr.write(`
286
+ `)},"printNextSteps"),Hf={group:"Scaffold & Config",argument:{description:"Template to use (e.g., vis:app, create-vite, user/repo) — omit for interactive mode",name:"template",type:String},description:"Create a new project from a template",examples:[["vis create","Interactive project scaffolding"],["vis create vis:monorepo my-workspace","Create a monorepo workspace"],["vis create vis:app my-app","Scaffold a Vite application"],["vis create vis:library my-lib","Create a TypeScript library"],["vis create vite my-app -- --template react-ts","Use create-vite with React TypeScript"],["vis create user/repo my-project","Clone a GitHub template"],["vis create --list","Show available templates"]],execute:ft(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{const o=Array.isArray(t)?t:t?[t]:[],s=n?.create;if(r.list){Wf(s?.templates);return}const l=r.cwd||i||process.cwd(),u=!!i,g=!!process.stdin.isTTY,p=pe(l);let h,m,y,b=s?.defaultEditor,x=s?.gitInit??!1,E=[],C=p,D=!1;if(o.length===0&&g&&!r["no-interactive"]){const w=await cf({cwd:l,defaultEditor:s?.defaultEditor,defaultGitInit:s?.gitInit,defaultPm:s?.defaultPm,inMonorepo:u});h=w.template,m=w.projectName,y=Qe(l,w.targetDir),b=w.editor??b,x=w.gitInit,D=w.overwrite,w.pm&&(C={name:w.pm,version:p.version})}else{if(o.length===0)throw new Error(`No template specified. Usage: vis create <template> [name] [-- args...]
287
+ Use --list to see available templates, or run interactively in a terminal.`);{const w=o.indexOf("--"),k=w===-1?o:o.slice(0,w);E=w===-1?[]:o.slice(w+1),h=k[0],m=k[1],m||(m=zf(h)),b=r.editor==="vscode"?"vscode":b,x=!!r["git-init"]||x}}if(!h)throw new Error("No template specified.");const N=s?.templates?.[h]??h,L=Kp(N,E);if(!y){const w=u?Qp(L.type):".",k=of(m,Qe(l,w));y=k.targetDir,m=k.packageName}const j=nr(m??"");if(!Ts(j))throw new Error(`Invalid project name: "${m}". Use lowercase alphanumeric characters and hyphens.`);m=j;const O=Qe(y),R=Dn(Qe(l),O);if(R===".."||R.startsWith(`..${_a}`)||Ha(R))throw new Error(`Target directory "${y}" is outside the working directory. Use a name without "../" path segments.`);if(!D&&!sf(y))throw new Error(`Target directory "${y}" is not empty.
288
+ Use a different name or clear the directory first.`);N!==h&&v(`Alias: ${le(Ee(h))} → ${ee(N)}`),v(`Template: ${le(Ee(N))}`),v(`Project: ${le(m)}`),v(`Target: ${ee(y)}`),process.stderr.write(`
289
+ `);const P=await Bf(L,{createConfig:s,cwd:l,inMonorepo:u,logger:e,pm:C,projectName:m,targetDir:y});if(P!==0){process.exitCode=P;return}b==="vscode"&&Ff(y),V(y)&&Vf(y,C.name),x&&!u&&Uf(y);let M=!1;s?.install!==!1&&V(F(y,"package.json"))&&(M=Gf(y,C,e,s?.preferOffline)),_f(y,l,C.name,M)},"execute"),name:"create",options:[{defaultValue:!1,description:"Show available templates",name:"list",type:Boolean},{description:"Generate editor configs (vscode)",name:"editor",type:String},{defaultValue:!1,description:"Initialize a git repository",name:"git-init",type:Boolean},{defaultValue:!1,description:"Skip interactive prompts",name:"no-interactive",type:Boolean}]};var Jf=Object.defineProperty,qf=$((t,e)=>Jf(t,"name",{value:e,configurable:!0}),"i$5");const Yf={group:"Dependencies",description:"Deduplicate dependencies using the detected package manager",examples:[["vis dedupe","Run deduplication"],["vis dedupe --check","Preview changes without modifying (CI-friendly)"]],execute:qf(async({logger:t,options:e,workspaceRoot:r})=>{const n=r??process.cwd(),i=pe(n),o=Bc(i,e.check||!1,n,t);o!==0&&(process.exitCode=o)},"execute"),name:"dedupe",options:[{defaultValue:!1,description:"Preview changes without modifying files (dry-run)",name:"check",type:Boolean}]},Ot=[{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"Node.js",postCreateCommand:"npm install"},description:"Node.js 22 with Git and GitHub CLI",id:"node",name:"Node.js"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",mounts:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-pnpm-store",target:"/home/node/.local/share/pnpm/store",type:"volume"}],name:"Node.js + pnpm Monorepo",postCreateCommand:"corepack enable && pnpm install",remoteUser:"node",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js 22 with pnpm, corepack, and optimized volume mounts",id:"node-pnpm",name:"Node.js + pnpm"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},dockerComposeFile:"docker-compose.yml",forwardPorts:[3e3,5432],name:"Node.js + PostgreSQL",postCreateCommand:"npm install",service:"app",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js with PostgreSQL via Docker Compose",id:"node-postgres",name:"Node.js + PostgreSQL"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},features:{"ghcr.io/devcontainers/features/docker-in-docker:2":{},"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"Node.js + Docker",postCreateCommand:"npm install"},description:"Node.js 22 with Docker-in-Docker for container workflows",id:"node-dind",name:"Node.js + Docker-in-Docker"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},dockerComposeFile:"docker-compose.yml",features:{"ghcr.io/devcontainers/features/docker-in-docker:2":{}},forwardPorts:[3e3,5432,6379],name:"Full Stack",postCreateCommand:"npm install",service:"app",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js + PostgreSQL + Redis + Docker via Compose",id:"fullstack",name:"Full Stack"},{config:{customizations:{vscode:{extensions:["ms-python.python","ms-python.vscode-pylance"],settings:{"editor.formatOnSave":!0,"python.defaultInterpreterPath":"/usr/local/bin/python"}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{},"ghcr.io/devcontainers/features/python:1":{version:"3.12"}},forwardPorts:[8e3],image:"mcr.microsoft.com/devcontainers/python:3.12",name:"Python",postCreateCommand:"pip install -r requirements.txt || true"},description:"Python 3.12 with pip and venv",id:"python",name:"Python"},{config:{customizations:{vscode:{extensions:["golang.go"],settings:{"editor.formatOnSave":!0,"go.toolsManagement.autoUpdate":!0}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/go:1":{version:"1.22"}},forwardPorts:[8080],image:"mcr.microsoft.com/devcontainers/go:1.22",name:"Go",postCreateCommand:"go mod download || true"},description:"Go 1.22 development environment",id:"go",name:"Go"},{config:{customizations:{vscode:{extensions:["rust-lang.rust-analyzer","tamasfe.even-better-toml"],settings:{"editor.formatOnSave":!0}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/rust:1":{}},image:"mcr.microsoft.com/devcontainers/rust:latest",name:"Rust",postCreateCommand:"cargo build || true"},description:"Rust development with cargo and rust-analyzer",id:"rust",name:"Rust"},{config:{customizations:{vscode:{extensions:["vscjava.vscode-java-pack","vscjava.vscode-maven"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/java:1":{version:"17"}},forwardPorts:[8080],image:"mcr.microsoft.com/devcontainers/java:17",name:"Java",postCreateCommand:"./mvnw install || ./gradlew build || true"},description:"Java 17 with Maven/Gradle support",id:"java",name:"Java"},{config:{customizations:{vscode:{extensions:["ms-azuretools.vscode-docker","ms-kubernetes-tools.vscode-kubernetes-tools","hashicorp.terraform"]}},features:{"ghcr.io/devcontainers/features/aws-cli:1":{},"ghcr.io/devcontainers/features/azure-cli:1":{},"ghcr.io/devcontainers/features/docker-in-docker:2":{},"ghcr.io/devcontainers/features/kubectl-helm-minikube:1":{},"ghcr.io/devcontainers/features/terraform:1":{}},image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"DevOps"},description:"Docker, Kubernetes, Terraform, AWS & Azure CLIs",id:"devops",name:"DevOps"},{config:{features:{"ghcr.io/devcontainers/features/common-utils:2":{}},image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"Minimal",remoteUser:"vscode"},description:"Bare Ubuntu with common utilities",id:"minimal",name:"Minimal"},{config:{image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"Custom"},description:"Minimal Ubuntu base - configure from scratch",id:"custom",name:"Custom (Blank)"}];var Xf=Object.defineProperty,Is=$((t,e)=>Xf(t,"name",{value:e,configurable:!0}),"s$f");const Kf=Is(t=>{const e=A(t,".devcontainer","devcontainer.json");if(!V(e))return null;const r=Y(e,"utf8"),n=pc(r),i=n!==r;let o;try{o=JSON.parse(n)}catch(s){const l=s instanceof Error?s.message:String(s);throw new Error(`Failed to parse ${e}: ${l}`)}return{config:o,hadComments:i}},"readDevcontainerJson"),Qf=Is((t,e,r)=>{const n=r?Nn(r):A(t,".devcontainer"),i=r??A(n,"devcontainer.json");ye(n,{recursive:!0}),_(i,JSON.stringify(e,null,2)+`
290
+ `,"utf8")},"writeDevcontainerJson");var Zf=Object.defineProperty,eg=$((t,e)=>Zf(t,"name",{value:e,configurable:!0}),"s$e");const tg={bun:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-bun-cache",target:"/home/node/.bun/install/cache",type:"volume"}],npm:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-npm-cache",target:"/home/node/.npm",type:"volume"}],pnpm:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-pnpm-store",target:"/home/node/.local/share/pnpm/store",type:"volume"}],yarn:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-yarn-cache",target:"/home/node/.yarn/cache",type:"volume"}]},rg=[{featureMatch:"docker-in-docker",mounts:[]},{featureMatch:"docker-outside-of-docker",mounts:[{source:"/var/run/docker.sock",target:"/var/run/docker.sock",type:"bind"}]},{featureMatch:"/features/git:",mounts:[{source:"${localWorkspaceFolderBasename}-git-config",target:"/home/node/.gitconfig",type:"volume"}]}],Uo=eg((t,e,r)=>{const n=[],i=new Set(r.map(s=>typeof s=="string"?s:s.target));if(t)for(const s of tg[t])i.has(s.target)||n.push(s);const o=Object.keys(e);for(const{featureMatch:s,mounts:l}of rg)if(o.some(u=>u.includes(s)))for(const u of l)i.has(u.target)||n.push(u);return n},"getSuggestedMounts"),mt=["general","features","ports","lifecycle","extensions","environment","mounts","compose"];var ng=Object.defineProperty,Ir=$((t,e)=>ng(t,"name",{value:e,configurable:!0}),"c$c");const Ht=Ir(t=>JSON.parse(JSON.stringify(t)),"deepClone");class og{static{$(this,"DevcontainerStore")}static{Ir(this,"DevcontainerStore")}#e=new Set;#t;constructor(e,r,n=null){const i=e===null,o=e??{name:""},s=Ht(o);this.#t={config:s,detectedPm:n,extensionSearch:"",featureSearch:"",fieldEditing:!1,fieldIndex:0,hadComments:r,isDirty:!1,mode:i?"create":"edit",originalConfig:i?null:Ht(o),section:"general",showTemplateSelector:i,suggestedMounts:Uo(n,s.features??{},s.mounts??[]),templateIndex:0}}getSnapshot=Ir(()=>this.#t,"getSnapshot");subscribe=Ir(e=>(this.#e.add(e),()=>{this.#e.delete(e)}),"subscribe");setSection(e){e!==this.#t.section&&this.#r({...this.#t,fieldEditing:!1,fieldIndex:0,section:e})}nextSection(){const e=(mt.indexOf(this.#t.section)+1)%mt.length;this.setSection(mt[e])}previousSection(){const e=(mt.indexOf(this.#t.section)-1+mt.length)%mt.length;this.setSection(mt[e])}setFieldIndex(e){e!==this.#t.fieldIndex&&this.#r({...this.#t,fieldIndex:Math.max(0,e)})}setFieldEditing(e){e!==this.#t.fieldEditing&&this.#r({...this.#t,fieldEditing:e})}setTemplateIndex(e){const r=Math.max(0,Math.min(e,Ot.length-1));r!==this.#t.templateIndex&&this.#r({...this.#t,templateIndex:r})}applyTemplate(e){const r=Ot.find(n=>n.id===e);r&&this.#r(this.#o({...this.#t,config:Ht(r.config),isDirty:!0,showTemplateSelector:!1}))}dismissTemplateSelector(){this.#r({...this.#t,showTemplateSelector:!1})}updateConfig(e){this.#r({...this.#t,config:{...this.#t.config,...e},isDirty:!0})}toggleFeature(e){const r={...this.#t.config.features};r[e]!==void 0?delete r[e]:r[e]={},this.#r(this.#o({...this.#t,config:{...this.#t.config,features:r},isDirty:!0}))}setFeatureSearch(e){this.#r({...this.#t,featureSearch:e,fieldIndex:0})}addPort(e){const r=this.#t.config.forwardPorts??[];if(r.includes(e))return;const n=[...r,e];this.#r({...this.#t,config:{...this.#t.config,forwardPorts:n},isDirty:!0})}removePort(e){const r=[...this.#t.config.forwardPorts??[]];r.splice(e,1),this.#r({...this.#t,config:{...this.#t.config,forwardPorts:r.length>0?r:void 0},isDirty:!0})}toggleExtension(e){const r={...this.#t.config.customizations},n={...r.vscode},i=[...n.extensions??[]],o=i.indexOf(e);o>=0?i.splice(o,1):i.push(e),n.extensions=i.length>0?i:void 0,r.vscode=n.extensions||n.settings?n:void 0,this.#r({...this.#t,config:{...this.#t.config,customizations:r.vscode||r.jetbrains?r:void 0},isDirty:!0})}setExtensionSearch(e){this.#r({...this.#t,extensionSearch:e,fieldIndex:0})}addEnvVar(e,r,n){const i=e==="container"?"containerEnv":"remoteEnv",o={...this.#t.config[i],[r]:n};this.#r({...this.#t,config:{...this.#t.config,[i]:o},isDirty:!0})}removeEnvVar(e,r){const n=e==="container"?"containerEnv":"remoteEnv",i={...this.#t.config[n]};delete i[r],this.#r({...this.#t,config:{...this.#t.config,[n]:Object.keys(i).length>0?i:void 0},isDirty:!0})}addMount(e){const r=[...this.#t.config.mounts??[],e];this.#r(this.#o({...this.#t,config:{...this.#t.config,mounts:r},isDirty:!0}))}removeMount(e){const r=[...this.#t.config.mounts??[]];r.splice(e,1),this.#r(this.#o({...this.#t,config:{...this.#t.config,mounts:r.length>0?r:void 0},isDirty:!0}))}applySuggestedMounts(){if(this.#t.suggestedMounts.length===0)return;const e=[...this.#t.config.mounts??[],...this.#t.suggestedMounts];this.#r(this.#o({...this.#t,config:{...this.#t.config,mounts:e},isDirty:!0}))}setLifecycleCommand(e,r){this.#r({...this.#t,config:{...this.#t.config,[e]:r||void 0},isDirty:!0})}markClean(){this.#r({...this.#t,isDirty:!1,originalConfig:Ht(this.#t.config)})}getJsonPreview(){return JSON.stringify(this.#n(),null,2)}cleanConfig(){return this.#n()}#n(){const e=Ht(this.#t.config);for(const[r,n]of Object.entries(e))(n===""||n===void 0)&&delete e[r];return e.build&&(e.build.dockerfile===""&&delete e.build.dockerfile,e.build.context===""&&delete e.build.context,e.build.args&&Object.keys(e.build.args).length===0&&delete e.build.args,Object.keys(e.build).length===0&&delete e.build),e.forwardPorts?.length===0&&delete e.forwardPorts,e.mounts?.length===0&&delete e.mounts,e.runServices?.length===0&&delete e.runServices,e.capAdd?.length===0&&delete e.capAdd,e.securityOpt?.length===0&&delete e.securityOpt,e.features&&Object.keys(e.features).length===0&&delete e.features,e.customizations?.vscode?.extensions?.length===0&&delete e.customizations.vscode.extensions,e.customizations?.vscode&&Object.keys(e.customizations.vscode).length===0&&delete e.customizations.vscode,e.customizations&&Object.keys(e.customizations).length===0&&delete e.customizations,e.containerEnv&&Object.keys(e.containerEnv).length===0&&delete e.containerEnv,e.remoteEnv&&Object.keys(e.remoteEnv).length===0&&delete e.remoteEnv,e}#o(e){return{...e,suggestedMounts:Uo(e.detectedPm,e.config.features??{},e.config.mounts??[])}}#r(e){this.#t=e;for(const r of this.#e)try{r()}catch{}}}const Go=[{category:"linting",description:"Integrates ESLint into the editor",id:"dbaeumer.vscode-eslint",name:"ESLint"},{category:"linting",description:"Stylelint CSS/SCSS linting",id:"stylelint.vscode-stylelint",name:"Stylelint"},{category:"formatting",description:"Opinionated code formatter",id:"esbenp.prettier-vscode",name:"Prettier"},{category:"formatting",description:"EditorConfig file support",id:"editorconfig.editorconfig",name:"EditorConfig"},{category:"formatting",description:"Fast Rust-based formatter and linter",id:"biomejs.biome",name:"Biome"},{category:"language",description:"Rich TypeScript and JavaScript support",id:"ms-vscode.vscode-typescript-next",name:"TypeScript Nightly"},{category:"language",description:"Tailwind CSS IntelliSense",id:"bradlc.vscode-tailwindcss",name:"Tailwind CSS"},{category:"language",description:"YAML language support with schemas",id:"redhat.vscode-yaml",name:"YAML"},{category:"language",description:"TOML language support",id:"tamasfe.even-better-toml",name:"TOML"},{category:"language",description:"Dockerfile and Docker Compose support",id:"ms-azuretools.vscode-docker",name:"Docker"},{category:"language",description:"Python language support with Pylance",id:"ms-python.python",name:"Python"},{category:"language",description:"Go language support",id:"golang.go",name:"Go"},{category:"language",description:"Rust language support via rust-analyzer",id:"rust-lang.rust-analyzer",name:"rust-analyzer"},{category:"git",description:"Git supercharged: blame, history, stash, etc.",id:"eamodio.gitlens",name:"GitLens"},{category:"git",description:"GitHub Pull Requests and Issues",id:"github.vscode-pull-request-github",name:"GitHub PR"},{category:"testing",description:"Vitest test explorer integration",id:"vitest.explorer",name:"Vitest Explorer"},{category:"testing",description:"Jest test runner and assertions",id:"orta.vscode-jest",name:"Jest"},{category:"debugging",description:"REST client for testing APIs",id:"humao.rest-client",name:"REST Client"},{category:"debugging",description:"Error Lens: inline error highlighting",id:"usernamehw.errorlens",name:"Error Lens"},{category:"other",description:"Intelligent code completion with AI",id:"github.copilot",name:"GitHub Copilot"},{category:"other",description:"Path autocompletion for imports",id:"christian-kohler.path-intellisense",name:"Path Intellisense"},{category:"other",description:"Import cost display in editor",id:"wix.vscode-import-cost",name:"Import Cost"},{category:"other",description:"Todo Tree: highlight and list TODOs",id:"gruntfuggly.todo-tree",name:"Todo Tree"}],zo=[{category:"language",description:"Node.js runtime via nvm with optional pnpm/yarn",id:"ghcr.io/devcontainers/features/node:1",name:"Node.js"},{category:"language",description:"Python runtime with pip and optional tools",id:"ghcr.io/devcontainers/features/python:1",name:"Python"},{category:"language",description:"Go compiler and tools",id:"ghcr.io/devcontainers/features/go:1",name:"Go"},{category:"language",description:"Rust toolchain via rustup",id:"ghcr.io/devcontainers/features/rust:1",name:"Rust"},{category:"language",description:"Java runtime and JDK via SDKMAN",id:"ghcr.io/devcontainers/features/java:1",name:"Java"},{category:"language",description:".NET SDK and runtime",id:"ghcr.io/devcontainers/features/dotnet:2",name:".NET"},{category:"tool",description:"Common utilities: zsh, Oh My Zsh, git, curl, etc.",id:"ghcr.io/devcontainers/features/common-utils:2",name:"Common Utilities"},{category:"tool",description:"Git version control",id:"ghcr.io/devcontainers/features/git:1",name:"Git"},{category:"tool",description:"Git Large File Storage support",id:"ghcr.io/devcontainers/features/git-lfs:1",name:"Git LFS"},{category:"tool",description:"GitHub CLI for repository management",id:"ghcr.io/devcontainers/features/github-cli:1",name:"GitHub CLI"},{category:"tool",description:"Run Docker containers inside the dev container",id:"ghcr.io/devcontainers/features/docker-in-docker:2",name:"Docker-in-Docker"},{category:"tool",description:"Access host Docker daemon from inside the container",id:"ghcr.io/devcontainers/features/docker-outside-of-docker:1",name:"Docker-from-Docker"},{category:"tool",description:"kubectl, Helm, and Minikube for Kubernetes",id:"ghcr.io/devcontainers/features/kubectl-helm-minikube:1",name:"Kubernetes Tools"},{category:"tool",description:"Infrastructure as code with Terraform",id:"ghcr.io/devcontainers/features/terraform:1",name:"Terraform"},{category:"tool",description:"Nix package manager",id:"ghcr.io/devcontainers/features/nix:1",name:"Nix"},{category:"tool",description:"SSH server for remote connections to the container",id:"ghcr.io/devcontainers/features/sshd:1",name:"SSH Server"},{category:"cloud",description:"Amazon Web Services CLI v2",id:"ghcr.io/devcontainers/features/aws-cli:1",name:"AWS CLI"},{category:"cloud",description:"Microsoft Azure CLI",id:"ghcr.io/devcontainers/features/azure-cli:1",name:"Azure CLI"},{category:"cloud",description:"Google Cloud Platform CLI",id:"ghcr.io/devcontainers/features/gcloud:1",name:"Google Cloud CLI"},{category:"database",description:"PostgreSQL client tools",id:"ghcr.io/devcontainers-extra/features/postgres-client:1",name:"PostgreSQL Client"},{category:"database",description:"Redis client tools",id:"ghcr.io/devcontainers-extra/features/redis-client:1",name:"Redis Client"}];var ig=Object.defineProperty,Rs=$((t,e)=>ig(t,"name",{value:e,configurable:!0}),"r$a");const io=Rs(t=>{if(!t)return zo;const e=t.toLowerCase();return zo.filter(r=>r.name.toLowerCase().includes(e)||r.id.toLowerCase().includes(e)||r.description.toLowerCase().includes(e))},"filterFeatures"),so=Rs(t=>{if(!t)return Go;const e=t.toLowerCase();return Go.filter(r=>r.name.toLowerCase().includes(e)||r.id.toLowerCase().includes(e)||r.description.toLowerCase().includes(e))},"filterExtensions");var sg=Object.defineProperty,ag=$((t,e)=>sg(t,"name",{value:e,configurable:!0}),"l$9");const Os=["dockerComposeFile","service"],cg={dockerComposeFile:"Compose File",service:"Service"},Wo={dockerComposeFile:"docker-compose.yml",service:"app"},lg={dockerComposeFile:"Path to Docker Compose file (relative to .devcontainer/)",service:"Which service in the compose file to connect the IDE to"},dg=ag(({config:t,fieldEditing:e,fieldIndex:r,onUpdate:n})=>{const i=!!t.dockerComposeFile,o=!!(t.image||t.build);return d(f,{flexDirection:"column",paddingX:1,children:[c(f,{marginBottom:1,children:c(a,{bold:!0,color:"cyan",children:"Docker Compose Integration"})}),o&&i&&c(f,{marginBottom:1,children:c(a,{color:"yellow",children:"Note: When using Docker Compose, the image/build settings in General are ignored."})}),Os.map((s,l)=>{const u=l===r,g=t[s]??"",p=Array.isArray(t[s])?t[s].join(", "):g;return d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{children:[c(f,{width:20,children:d(a,{bold:u,color:u?"cyan":"white",children:[u?"❯ ":" ",cg[s],":"]})}),c(f,{flexGrow:1,children:u&&e?c(Bn,{defaultValue:p,onChange:$(h=>{n({[s]:h||void 0})},"onChange"),placeholder:Wo[s]}):c(a,{color:p?"white":"gray",children:p||Wo[s]})})]}),c(f,{paddingLeft:4,children:c(a,{dimColor:!0,children:lg[s]})})]},s)}),c(f,{marginTop:1,children:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"Enter"})," edit field"," ",c(a,{bold:!0,color:"white",children:"↑↓"})," navigate"," ",c(a,{bold:!0,color:"white",children:"Esc"})," stop editing"]})})]})},"DockerComposeSection"),ug=Os.length;var pg=Object.defineProperty,Ps=$((t,e)=>pg(t,"name",{value:e,configurable:!0}),"h$c");const fg=Ps(({config:t,fieldIndex:e})=>{const r=t.containerEnv??{},n=t.remoteEnv??{},i=Object.keys(r),o=Object.keys(n),s=i.length,l=i.length+1,u=l+o.length,g=e<=s,p=e>s;return d(f,{flexDirection:"column",paddingX:1,children:[d(f,{borderColor:g?"cyan":"gray",borderStyle:"single",flexDirection:"column",paddingX:1,paddingY:0,children:[d(f,{flexShrink:0,marginBottom:i.length>0?1:0,children:[c(a,{bold:!0,color:g?"cyan":"white",children:"containerEnv"}),c(a,{dimColor:!0,children:" — baked into the container image"})]}),i.map((h,m)=>{const y=m===e;return c(f,{flexShrink:0,children:d(a,{color:y?"cyan":void 0,inverse:y,wrap:"truncate",children:[y?" ❯ ":" ",c(a,{bold:!0,children:h}),c(a,{dimColor:!0,children:" = "}),c(a,{children:r[h]})]})},h)}),c(f,{flexShrink:0,marginTop:i.length>0?1:0,children:d(a,{color:e===s?"cyan":"gray",inverse:e===s,children:[" ","+ Add variable..."]})})]}),d(f,{borderColor:p?"cyan":"gray",borderStyle:"single",flexDirection:"column",marginTop:1,paddingX:1,paddingY:0,children:[d(f,{flexShrink:0,marginBottom:o.length>0?1:0,children:[c(a,{bold:!0,color:p?"cyan":"white",children:"remoteEnv"}),c(a,{dimColor:!0,children:" — set at runtime by the IDE"})]}),o.map((h,m)=>{const y=l+m===e;return c(f,{flexShrink:0,children:d(a,{color:y?"cyan":void 0,inverse:y,wrap:"truncate",children:[y?" ❯ ":" ",c(a,{bold:!0,children:h}),c(a,{dimColor:!0,children:" = "}),c(a,{children:n[h]})]})},h)}),c(f,{flexShrink:0,marginTop:o.length>0?1:0,children:d(a,{color:e===u?"cyan":"gray",inverse:e===u,children:[" ","+ Add variable..."]})})]}),c(f,{flexShrink:0,marginTop:1,children:d(a,{dimColor:!0,wrap:"truncate",children:[c(a,{bold:!0,color:"white",children:"a"}),"/",c(a,{bold:!0,color:"white",children:"Enter"})," add on + row ",c(a,{bold:!0,color:"white",children:"d"})," remove ",c(a,{bold:!0,color:"white",children:"↑↓"})," navigate"]})})]})},"EnvironmentSection"),gg=Ps(t=>{const e=Object.keys(t.containerEnv??{}).length,r=Object.keys(t.remoteEnv??{}).length;return e+1+r+1},"getEnvFieldCount");var hg=Object.defineProperty,mg=$((t,e)=>hg(t,"name",{value:e,configurable:!0}),"h$b");const yg=mg(({config:t,fieldIndex:e,scrollOffset:r,searchText:n,viewportHeight:i})=>{const o=He(()=>new Set(t.customizations?.vscode?.extensions??[]),[t.customizations?.vscode?.extensions]),s=He(()=>so(n),[n]),l=s.length,u=l>i&&i>0;return d(f,{flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[d(a,{bold:!0,color:"cyan",children:[o.size," selected"]}),n&&d(a,{dimColor:!0,children:["— filter: ",c(a,{color:"yellow",children:n})," (",s.length," results)"]})]}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:c(f,{flexDirection:"column",marginTop:-r,children:s.map((g,p)=>{const h=p===e,m=o.has(g.id);return d(f,{flexShrink:0,height:1,children:[c(a,{children:h?">":" "}),d(a,{color:m?"white":"gray",children:[" ",m?"☑":"☐"," "]}),c(f,{flexGrow:1,children:d(a,{bold:h,inverse:h,wrap:"truncate",children:[g.name,d(a,{dimColor:!0,children:[" - ",g.id]})]})})]},g.id)})})}),u&&c(f,{flexShrink:0,marginLeft:1,marginRight:1,children:c(ar,{contentHeight:l,placement:"inset",scrollOffset:r,style:"block",viewportHeight:i})})]}),s.length===0&&c(f,{paddingX:1,children:c(a,{dimColor:!0,children:"No extensions match the search."})})]})},"ExtensionsSection");var vg=Object.defineProperty,wg=$((t,e)=>vg(t,"name",{value:e,configurable:!0}),"p$d");const kg=wg(({config:t,fieldIndex:e,scrollOffset:r,searchText:n,viewportHeight:i})=>{const o=He(()=>new Set(Object.keys(t.features??{})),[t.features]),s=He(()=>io(n),[n]),l=s.length,u=l>i&&i>0;return d(f,{flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[d(a,{bold:!0,color:"cyan",children:[o.size," selected"]}),n&&d(a,{dimColor:!0,children:["— filter: ",c(a,{color:"yellow",children:n})," (",s.length," results)"]})]}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:c(f,{flexDirection:"column",marginTop:-r,children:s.map((g,p)=>{const h=p===e,m=o.has(g.id);return d(f,{flexShrink:0,height:1,children:[c(a,{children:h?">":" "}),d(a,{color:m?"white":"gray",children:[" ",m?"☑":"☐"," "]}),c(f,{flexGrow:1,children:d(a,{bold:h,inverse:h,wrap:"truncate",children:[g.name,d(a,{dimColor:!0,children:[" - ",g.description]})]})})]},g.id)})})}),u&&c(f,{flexShrink:0,marginLeft:1,marginRight:1,children:c(ar,{contentHeight:l,placement:"inset",scrollOffset:r,style:"block",viewportHeight:i})})]}),s.length===0&&c(f,{paddingX:1,children:c(a,{dimColor:!0,children:"No features match the search."})})]})},"FeaturesSection");var bg=Object.defineProperty,$g=$((t,e)=>bg(t,"name",{value:e,configurable:!0}),"u$b");const Sn=["name","image","workspaceFolder","workspaceMount","remoteUser","containerUser","shutdownAction"],xg={containerUser:"Container User",image:"Image",name:"Name",remoteUser:"Remote User",shutdownAction:"Shutdown Action",workspaceFolder:"Workspace Folder",workspaceMount:"Workspace Mount"},_o={containerUser:"root",image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"My Dev Container",remoteUser:"node",shutdownAction:"none | stopContainer",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}",workspaceMount:"source=${localWorkspaceFolder},target=...,type=bind"},Mr=["privileged","overrideCommand"],Sg={overrideCommand:"Override Command",privileged:"Privileged"},Cg=Sn.length+Mr.length,Eg=$g(({config:t,fieldEditing:e,fieldIndex:r,onUpdate:n})=>d(f,{flexDirection:"column",paddingX:1,children:[c(f,{marginBottom:1,children:c(a,{bold:!0,color:"cyan",children:"General Configuration"})}),Sn.map((i,o)=>{const s=o===r,l=t[i]??"";return d(f,{marginBottom:1,children:[c(f,{width:20,children:d(a,{bold:s,color:s?"cyan":"white",children:[s?"❯ ":" ",xg[i],":"]})}),c(f,{flexGrow:1,children:s&&e?c(Bn,{defaultValue:l,onChange:$(u=>{n({[i]:u})},"onChange"),placeholder:_o[i]}):c(a,{color:l?"white":"gray",children:l||_o[i]})})]},i)}),Mr.map((i,o)=>{const s=Sn.length+o===r,l=t[i]??!1;return d(f,{marginBottom:o<Mr.length-1?1:0,children:[c(f,{width:20,children:d(a,{bold:s,color:s?"cyan":"white",children:[s?"❯ ":" ",Sg[i],":"]})}),c(f,{flexGrow:1,children:d(a,{color:l?"green":"gray",children:[l?"yes":"no",s&&c(a,{dimColor:!0,children:" (Space to toggle)"})]})})]},i)}),c(f,{marginTop:1,children:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"Enter"})," edit field"," ",c(a,{bold:!0,color:"white",children:"Space"})," toggle"," ",c(a,{bold:!0,color:"white",children:"↑↓"})," navigate"," ",c(a,{bold:!0,color:"white",children:"Esc"})," stop editing"]})})]}),"GeneralSection"),Ns=Cg,mn=Mr;var jg=Object.defineProperty,Tg=$((t,e)=>jg(t,"name",{value:e,configurable:!0}),"s$c");const Ds=["postCreateCommand","postStartCommand","postAttachCommand","onCreateCommand"],Ag={onCreateCommand:"On Create",postAttachCommand:"Post Attach",postCreateCommand:"Post Create",postStartCommand:"Post Start"},Ig={onCreateCommand:"Runs once when the container is first created",postAttachCommand:"Runs each time the IDE attaches",postCreateCommand:"Runs after the container is created and workspace mounted",postStartCommand:"Runs each time the container starts"},Rg=Tg(({config:t,fieldEditing:e,fieldIndex:r,onSetCommand:n})=>d(f,{flexDirection:"column",paddingX:1,children:[c(f,{marginBottom:1,children:c(a,{bold:!0,color:"cyan",children:"Lifecycle Commands"})}),Ds.map((i,o)=>{const s=o===r,l=t[i],u=Array.isArray(l)?l.join(" && "):l??"";return d(f,{flexDirection:"column",marginBottom:1,children:[c(f,{children:d(a,{bold:s,color:s?"cyan":"white",children:[s?"❯ ":" ",Ag[i]]})}),c(f,{paddingLeft:4,children:c(a,{dimColor:!0,children:Ig[i]})}),c(f,{paddingLeft:4,children:s&&e?c(Bn,{defaultValue:u,onChange:$(g=>{n(i,g)},"onChange"),placeholder:"e.g. npm install"}):c(a,{color:u?"green":"gray",children:u||"(not set)"})})]},i)}),c(f,{marginTop:1,children:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"Enter"})," edit command"," ",c(a,{bold:!0,color:"white",children:"↑↓"})," navigate"," ",c(a,{bold:!0,color:"white",children:"Esc"})," stop editing"]})})]}),"LifecycleSection"),Og=Ds.length;var Pg=Object.defineProperty,Ms=$((t,e)=>Pg(t,"name",{value:e,configurable:!0}),"s$b");const Ho=Ms(t=>typeof t=="string"?t:`[${t.type}] ${t.source} → ${t.target}`,"formatMount"),Ng=Ms(({addingMount:t,config:e,detectedPm:r,fieldIndex:n,mountPhase:i,mountSource:o,mountTarget:s,mountType:l,suggestedMounts:u})=>{const g=e.mounts??[];return d(f,{flexDirection:"column",paddingX:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[d(a,{bold:!0,color:"cyan",children:[g.length," mounts"]}),r&&d(a,{dimColor:!0,children:["— detected: ",c(a,{color:"white",children:r})]})]}),u.length>0&&!t&&d(f,{borderColor:"yellow",borderStyle:"single",flexDirection:"column",marginBottom:1,marginTop:1,paddingX:1,children:[d(f,{flexShrink:0,children:[c(a,{bold:!0,color:"yellow",children:"Suggested mounts"}),d(a,{dimColor:!0,children:[" — press ",c(a,{bold:!0,color:"white",children:"A"})," to add all"]})]}),u.map((p,h)=>c(f,{flexShrink:0,children:d(a,{dimColor:!0,wrap:"truncate",children:[" + ",Ho(p)]})},`suggestion-${String(h)}`))]}),g.length>0&&c(f,{flexDirection:"column",marginBottom:1,children:g.map((p,h)=>{const m=h===n;return d(f,{flexShrink:0,height:1,children:[c(a,{children:m?">":" "}),c(f,{flexGrow:1,children:d(a,{bold:m,inverse:m,wrap:"truncate",children:[" ",Ho(p)]})})]},`mount-${String(h)}`)})}),!t&&c(f,{flexShrink:0,children:d(a,{color:n===g.length?"cyan":"gray",inverse:n===g.length,children:[" ","+ Add mount..."]})}),t&&d(f,{borderColor:"cyan",borderStyle:"single",flexDirection:"column",marginTop:1,paddingX:1,children:[c(f,{flexShrink:0,marginBottom:1,children:c(a,{bold:!0,color:"cyan",children:"New Mount"})}),d(f,{flexShrink:0,children:[c(f,{width:12,children:d(a,{bold:i==="source",color:i==="source"?"cyan":"white",children:[i==="source"?"❯ ":" ","Source:"]})}),c(a,{color:o?"yellow":"gray",children:o||(i==="source"?"_":"(type source, Enter to continue)")})]}),d(f,{flexShrink:0,children:[c(f,{width:12,children:d(a,{bold:i==="target",color:i==="target"?"cyan":"white",children:[i==="target"?"❯ ":" ","Target:"]})}),c(a,{color:s?"yellow":"gray",children:s||(i==="target"?"_":"/container/path")})]}),d(f,{flexShrink:0,children:[c(f,{width:12,children:d(a,{bold:i==="type",color:i==="type"?"cyan":"white",children:[i==="type"?"❯ ":" ","Type:"]})}),i==="type"?d(a,{children:[c(a,{bold:l==="volume",color:l==="volume"?"cyan":"gray",children:"[1] volume"})," ",c(a,{bold:l==="bind",color:l==="bind"?"cyan":"gray",children:"[2] bind"})," ",c(a,{bold:l==="tmpfs",color:l==="tmpfs"?"cyan":"gray",children:"[3] tmpfs"})]}):c(a,{color:"gray",children:l})]}),c(f,{flexShrink:0,marginTop:1,children:c(a,{dimColor:!0,wrap:"truncate",children:i==="type"?"1/2/3 select type, Enter confirm, Esc cancel":"Type text, Enter next step, Esc cancel"})})]}),g.length===0&&!t&&u.length===0&&c(f,{marginTop:1,children:c(a,{dimColor:!0,children:"Tip: Use volume mounts for node_modules and caches to improve performance."})})]})},"MountsSection");var Dg=Object.defineProperty,Mg=$((t,e)=>Dg(t,"name",{value:e,configurable:!0}),"m$a");const Bg=Mg(({addingPort:t,addPortValue:e,config:r,fieldIndex:n})=>{const i=r.forwardPorts??[],o=n===i.length;return d(f,{flexDirection:"column",paddingX:1,children:[d(f,{marginBottom:1,children:[c(a,{bold:!0,color:"cyan",children:"Forwarded Ports"}),d(a,{dimColor:!0,children:[" (",i.length," ports)"]})]}),i.map((s,l)=>{const u=l===n;return c(f,{children:d(a,{color:u?"cyan":void 0,inverse:u,children:[" ",String(s)]})},`port-${String(s)}`)}),c(f,{marginTop:i.length>0?1:0,children:d(a,{color:o?"cyan":"gray",inverse:o,children:[" ",o&&t?d(a,{children:["Enter port: ",c(a,{color:"yellow",children:e||"_"})]}):"+ Add port..."]})}),c(f,{marginTop:1,children:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"Enter"})," ",o?"type port number, Enter to confirm":"select"," ",c(a,{bold:!0,color:"white",children:"d"})," remove selected"," ",c(a,{bold:!0,color:"white",children:"↑↓"})," navigate"]})})]})},"PortsSection");var Lg=Object.defineProperty,Fg=$((t,e)=>Lg(t,"name",{value:e,configurable:!0}),"a$6");const Vg=Fg(({focused:t,hadComments:e,jsonPreview:r,mode:n,scrollRef:i})=>d(f,{borderColor:t?"cyan":"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,paddingX:1,children:[c(a,{bold:!0,color:t?"cyan":"white",children:"Preview"}),d(a,{dimColor:!0,children:[" (",n==="create"?"new":"edit",")"]})]}),e&&n==="edit"&&c(f,{flexShrink:0,paddingX:1,children:c(a,{color:"yellow",children:"Comments will not be preserved."})}),c(Bt,{flexGrow:1,ref:i,scrollbar:!0,scrollbarColor:"gray",children:r.split(`
291
+ `).map((o,s)=>c(a,{color:"green",children:o},`line-${String(s)}`))})]}),"PreviewPanel");var Ug=Object.defineProperty,Gg=$((t,e)=>Ug(t,"name",{value:e,configurable:!0}),"r$9");const zg=Gg(t=>{const e=[],r=[],n=[];if(!t.image&&!t.build&&!t.dockerComposeFile&&e.push({field:"image",message:'One of "image", "build", or "dockerComposeFile" is required'}),t.build&&(t.image&&r.push({field:"image",message:'Both "image" and "build" are set; "build" takes precedence'}),t.build.dockerfile||e.push({field:"build.dockerfile",message:'"build" requires a "dockerfile" path'})),t.dockerComposeFile&&!t.service&&e.push({field:"service",message:'"service" is required when using "dockerComposeFile"'}),t.features!==void 0&&(typeof t.features!="object"||Array.isArray(t.features))&&e.push({field:"features",message:'"features" must be an object mapping feature IDs to options'}),t.forwardPorts)if(!Array.isArray(t.forwardPorts))e.push({field:"forwardPorts",message:'"forwardPorts" must be an array'});else for(const[i,o]of t.forwardPorts.entries())typeof o=="number"&&(o<1||o>65535)&&e.push({field:"forwardPorts",message:`Invalid port ${String(o)} at index ${String(i)}`});return t.customizations?.vscode?.extensions&&!Array.isArray(t.customizations.vscode.extensions)&&e.push({field:"customizations.vscode.extensions",message:"Extensions must be an array"}),t.customizations?.vscode?.settings&&typeof t.customizations.vscode.settings!="object"&&e.push({field:"customizations.vscode.settings",message:"Settings must be an object"}),t.name||n.push({field:"name",message:"Consider adding a name for better identification"}),(!t.features||Object.keys(t.features).length===0)&&n.push({field:"features",message:"Consider adding features for common tools"}),(!t.customizations?.vscode?.extensions||t.customizations.vscode.extensions.length===0)&&n.push({field:"extensions",message:"Consider adding VS Code extensions for your stack"}),t.privileged&&r.push({field:"privileged",message:"Running in privileged mode is a security risk"}),{errors:e,suggestions:n,valid:e.length===0,warnings:r}},"validateConfig");var Wg=Object.defineProperty,Bs=$((t,e)=>Wg(t,"name",{value:e,configurable:!0}),"$$5");const Jo=80,qo=15,_g=120,Yo=[{description:"Container name, base image, workspace folder, and user",id:"general",label:"General"},{description:"Installable tools and runtimes (Node, Python, Docker, etc.)",id:"features",label:"Features"},{description:"Ports to forward from the container to your host",id:"ports",label:"Ports"},{description:"Commands to run at different stages of the container lifecycle",id:"lifecycle",label:"Lifecycle"},{description:"VS Code extensions to auto-install in the container",id:"extensions",label:"Extensions"},{description:"Environment variables for the container and IDE",id:"environment",label:"Env"},{description:"Volume and bind mounts for persistent data and caches",id:"mounts",label:"Mounts"},{description:"Docker Compose integration for multi-container setups",id:"compose",label:"Compose"}],Hg=Bs((t,e,r,n)=>{switch(t){case"general":return Ns;case"features":return io(r).length;case"ports":return(e.forwardPorts?.length??0)+1;case"lifecycle":return Og;case"extensions":return so(n).length;case"environment":return gg(e);case"mounts":return(e.mounts?.length??0)+1;case"compose":return ug;default:return 0}},"getFieldCount"),Jg=Bs(({onSave:t,store:e})=>{const{exit:r}=Mt(),{columns:n,rows:i}=Dt(),o=cr(e.subscribe,e.getSnapshot),[s,l]=se(!1),[u,g]=se(!1),[p,h]=se(!1),[m,y]=se(null),[b,x]=se("editor"),[E,C]=se(0),[D,N]=se(!1),[L,j]=se(""),[O,R]=se(null),[P,M]=se(""),[w,k]=se(""),[I,z]=se("key"),[q,Z]=se(!1),[ue,ne]=se(""),[$e,fe]=se(""),[Te,T]=se("volume"),[S,G]=se("source"),be=we(null),Se=we(null),tt=we(null),wr=we(!0);ze(()=>(wr.current=!0,()=>{wr.current=!1,tt.current&&clearTimeout(tt.current)}),[]);const mo=Hg(o.section,o.config,o.featureSearch,o.extensionSearch),Wt=Math.max(1,i-9);ze(()=>{o.section!=="features"&&o.section!=="extensions"||C(W=>o.fieldIndex>=W+Wt?o.fieldIndex-Wt+1:o.fieldIndex<W?o.fieldIndex:W)},[o.fieldIndex,o.section,Wt]),ze(()=>{C(0)},[o.section,o.featureSearch,o.extensionSearch]);const xa=We(()=>{const W=e.cleanConfig(),J=zg(W);if(!J.valid){const de=J.errors[0];y(de?`Error: ${de.message}`:"Validation failed"),tt.current&&clearTimeout(tt.current),tt.current=setTimeout(()=>{wr.current&&y(null)},3e3);return}t(W),e.markClean();const U=J.warnings.length;y(U>0?`Saved! (${String(U)} warning${U>1?"s":""})`:"Saved!"),tt.current&&clearTimeout(tt.current),tt.current=setTimeout(()=>{wr.current&&y(null)},2e3)},[t,e]);if(Ae((W,J)=>{if(J.downArrow||W==="j")e.setTemplateIndex(o.templateIndex+1);else if(J.upArrow||W==="k")e.setTemplateIndex(o.templateIndex-1);else if(J.return){const U=Ot[o.templateIndex];U&&e.applyTemplate(U.id)}else J.escape&&e.dismissTemplateSelector()},{isActive:o.showTemplateSelector}),Ae((W,J)=>{if(J.escape){N(!1),j("");return}if(J.return){const U=Number.parseInt(L,10);!Number.isNaN(U)&&U>0&&U<=65535&&e.addPort(U),N(!1),j("");return}if(J.backspace){j(U=>U.slice(0,-1));return}W&&/^\d$/u.test(W)&&j(U=>U+W)},{isActive:D}),Ae((W,J)=>{if(J.escape){R(null),M(""),k(""),z("key");return}if(J.return){if(I==="key"&&P){z("value");return}if(I==="value"&&P){e.addEnvVar(O,P,w),R(null),M(""),k(""),z("key");return}}if(J.backspace){I==="key"?M(U=>U.slice(0,-1)):k(U=>U.slice(0,-1));return}W&&!J.ctrl&&!J.meta&&(I==="key"?M(U=>U+W):k(U=>U+W))},{isActive:O!==null}),Ae((W,J)=>{if(J.escape){Z(!1),ne(""),fe(""),G("source");return}if(J.return){if(S==="source"&&ue){G("target");return}if(S==="target"&&$e){G("type");return}if(S==="type"){e.addMount({source:ue,target:$e,type:Te}),Z(!1),ne(""),fe(""),G("source");return}}if(S==="type"){W==="1"?T("volume"):W==="2"?T("bind"):W==="3"&&T("tmpfs");return}if(J.backspace){S==="source"?ne(U=>U.slice(0,-1)):S==="target"&&fe(U=>U.slice(0,-1));return}W&&!J.ctrl&&!J.meta&&(S==="source"?ne(U=>U+W):S==="target"&&fe(U=>U+W))},{isActive:q}),Ae((W,J)=>{if(W==="c"&&J.ctrl){r();return}if(!u){if(s){J.escape||W==="?"?l(!1):J.downArrow||W==="j"?be.current?.scrollBy(1):J.upArrow||W==="k"?be.current?.scrollBy(-1):W==="q"&&(l(!1),g(!0));return}if(p){if(J.escape){h(!1),o.section==="features"?e.setFeatureSearch(""):e.setExtensionSearch("");return}if(J.return){h(!1);return}if(J.backspace){o.section==="features"?e.setFeatureSearch(o.featureSearch.slice(0,-1)):e.setExtensionSearch(o.extensionSearch.slice(0,-1));return}if(W&&!J.ctrl&&!J.meta){o.section==="features"?e.setFeatureSearch(o.featureSearch+W):e.setExtensionSearch(o.extensionSearch+W);return}return}if(o.fieldEditing){if(J.escape){e.setFieldEditing(!1);return}if(J.return){e.setFieldEditing(!1);return}return}if(W==="?"){l(!0);return}if(W==="q"){o.isDirty?g(!0):r();return}if(W==="s"){xa();return}if(J.tab){x(U=>U==="editor"?"preview":"editor");return}if(b==="preview"){if(J.downArrow||W==="j"){Se.current?.scrollBy(1);return}if(J.upArrow||W==="k"){Se.current?.scrollBy(-1);return}if(J.pageDown){Se.current?.scrollBy(10);return}if(J.pageUp){Se.current?.scrollBy(-10);return}if(J.home){Se.current?.scrollToTop();return}if(J.end){Se.current?.scrollToBottom();return}J.escape&&x("editor");return}if(J.downArrow||W==="j"){mo>0&&e.setFieldIndex(Math.min(o.fieldIndex+1,mo-1));return}if(J.upArrow||W==="k"){e.setFieldIndex(Math.max(o.fieldIndex-1,0));return}if(J.return){if(o.section==="general"||o.section==="lifecycle"||o.section==="compose")e.setFieldEditing(!0);else if(o.section==="ports"){const U=o.config.forwardPorts??[];o.fieldIndex===U.length&&(N(!0),j(""))}else if(o.section==="environment"){const U=Object.keys(o.config.containerEnv??{}).length,de=U,Ye=U+1+Object.keys(o.config.remoteEnv??{}).length;o.fieldIndex===de?(R("container"),M(""),k(""),z("key")):o.fieldIndex===Ye&&(R("remote"),M(""),k(""),z("key"))}else if(o.section==="mounts"){const U=o.config.mounts??[];o.fieldIndex===U.length&&(Z(!0),ne(""),fe(""),T("volume"),G("source"))}return}if(W===" "){if(o.section==="general"){const U=Ns-mn.length,de=o.fieldIndex-U;if(de>=0&&de<mn.length){const Ye=mn[de];e.updateConfig({[Ye]:!o.config[Ye]})}}else if(o.section==="features"){const U=io(o.featureSearch)[o.fieldIndex];U&&e.toggleFeature(U.id)}else if(o.section==="extensions"){const U=so(o.extensionSearch)[o.fieldIndex];U&&e.toggleExtension(U.id)}return}if(W==="/"){(o.section==="features"||o.section==="extensions")&&h(!0);return}if(W==="A"&&o.section==="mounts"){e.applySuggestedMounts();return}if(W==="a"){if(o.section==="environment"){const U=Object.keys(o.config.containerEnv??{}).length,de=o.fieldIndex<=U?"container":"remote";R(de),M(""),k(""),z("key")}else o.section==="mounts"&&(Z(!0),ne(""),fe(""),T("volume"),G("source"));return}if(W==="d"){if(o.section==="ports"){const U=o.config.forwardPorts??[];if(o.fieldIndex<U.length){e.removePort(o.fieldIndex);const de=U.length-1;o.fieldIndex>=de&&de>0&&e.setFieldIndex(de-1)}}else if(o.section==="mounts"){const U=o.config.mounts??[];if(o.fieldIndex<U.length){e.removeMount(o.fieldIndex);const de=U.length-1;o.fieldIndex>=de&&de>0&&e.setFieldIndex(de-1)}}else if(o.section==="environment"){const U=Object.keys(o.config.containerEnv??{}),de=Object.keys(o.config.remoteEnv??{});if(o.fieldIndex<U.length)e.removeEnvVar("container",U[o.fieldIndex]),U.length===1||o.fieldIndex>=U.length-1&&e.setFieldIndex(U.length-2);else{const Ye=o.fieldIndex-U.length-1;Ye>=0&&Ye<de.length&&(e.removeEnvVar("remote",de[Ye]),de.length===1||Ye>=de.length-1&&e.setFieldIndex(o.fieldIndex-1))}}}}},{isActive:!o.showTemplateSelector&&!D&&O===null&&!q}),n<Jo||i<qo)return c(f,{alignItems:"center",height:i,justifyContent:"center",width:n,children:d(a,{color:"yellow",children:["Terminal too small (",n,"x",i,"), need ",Jo,"x",qo]})});if(o.showTemplateSelector)return c(f,{alignItems:"center",flexDirection:"column",height:i,justifyContent:"center",width:n,children:d(f,{borderColor:"cyan",borderStyle:"round",flexDirection:"column",paddingX:2,paddingY:1,width:60,children:[c(f,{justifyContent:"center",marginBottom:1,children:c(a,{bold:!0,color:"cyan",children:"Select a Template"})}),Ot.map((W,J)=>{const U=J===o.templateIndex;return c(f,{children:d(a,{color:U?"cyan":void 0,inverse:U,children:[U?" ❯ ":" ",c(a,{bold:U,children:W.name}),d(a,{dimColor:!0,children:[" - ",W.description]})]})},W.id)}),c(f,{justifyContent:"center",marginTop:1,children:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"↑↓"})," ","navigate"," ",c(a,{bold:!0,color:"white",children:"Enter"})," ","select"," ",c(a,{bold:!0,color:"white",children:"Esc"})," ","blank"]})})]})});let Le;switch(o.section){case"general":{Le=c(Eg,{config:o.config,fieldEditing:o.fieldEditing,fieldIndex:o.fieldIndex,onUpdate:$(W=>{e.updateConfig(W)},"onUpdate")});break}case"features":{Le=c(kg,{config:o.config,fieldIndex:o.fieldIndex,scrollOffset:E,searchText:o.featureSearch,viewportHeight:Wt});break}case"ports":{Le=c(Bg,{addingPort:D,addPortValue:L,config:o.config,fieldIndex:o.fieldIndex});break}case"lifecycle":{Le=c(Rg,{config:o.config,fieldEditing:o.fieldEditing,fieldIndex:o.fieldIndex,onSetCommand:$((W,J)=>{e.setLifecycleCommand(W,J)},"onSetCommand")});break}case"extensions":{Le=c(yg,{config:o.config,fieldIndex:o.fieldIndex,scrollOffset:E,searchText:o.extensionSearch,viewportHeight:Wt});break}case"environment":{Le=d(f,{flexDirection:"column",children:[c(fg,{config:o.config,fieldIndex:o.fieldIndex}),O!==null&&c(f,{marginTop:1,paddingX:1,children:d(a,{color:"cyan",children:["Add ",O," env:"," ",I==="key"?d(a,{children:["key=",c(a,{color:"yellow",children:P||"_"})," (Enter to set value)"]}):d(a,{children:[P,"=",c(a,{color:"yellow",children:w||"_"})," (Enter to confirm, Esc to cancel)"]})]})})]});break}case"mounts":{Le=c(Ng,{addingMount:q,config:o.config,detectedPm:o.detectedPm,fieldIndex:o.fieldIndex,mountPhase:S,mountSource:ue,mountTarget:$e,mountType:Te,suggestedMounts:o.suggestedMounts});break}case"compose":{Le=c(dg,{config:o.config,fieldEditing:o.fieldEditing,fieldIndex:o.fieldIndex,onUpdate:$(W=>{e.updateConfig(W)},"onUpdate")});break}default:Le=c(a,{children:"Unknown section"})}const Sa=d(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,children:[d(f,{flexGrow:1,flexWrap:"wrap",gap:2,paddingX:1,children:[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]}),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]}),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"NAV"})]}),(o.section==="features"||o.section==="extensions")&&d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Space"}),c(a,{dimColor:!0,children:"CHECK"})]}),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"←→"}),c(a,{dimColor:!0,children:"TABS"})]}),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:"PANEL"})]}),(o.section==="features"||o.section==="extensions")&&d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"/"}),c(a,{dimColor:!0,children:"FILTER"})]}),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"s"}),c(a,{dimColor:!0,children:"SAVE"})]})]}),d(f,{paddingX:1,children:[m&&d(a,{color:m.startsWith("Error")?"red":"green",children:[m," "]}),o.isDirty&&c(a,{color:"yellow",children:"[modified]"}),!o.isDirty&&!m&&c(a,{dimColor:!0,children:"[saved]"})]})]}),Ca=d(At,{footer:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",c(a,{bold:!0,color:"white",children:"?"}),"/",c(a,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:be,title:"KEYBOARD SHORTCUTS",visible:s,width:56,children:[d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"NAVIGATION"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"←→"}),c(a,{dimColor:!0,children:" Switch tabs"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"↑↓"}),"/",c(a,{bold:!0,color:"white",children:"j/k"}),c(a,{dimColor:!0,children:" Navigate within section"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:" Switch editor/preview panel"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"Enter"}),c(a,{dimColor:!0,children:" Edit selected field"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"Esc"}),c(a,{dimColor:!0,children:" Stop editing / cancel"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"FEATURES / EXTENSIONS"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"Space"}),c(a,{dimColor:!0,children:" Toggle selection"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"/"}),c(a,{dimColor:!0,children:" Search / filter"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"LISTS (Ports, Mounts, Env)"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"a"}),c(a,{dimColor:!0,children:" Add new entry"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"d"}),c(a,{dimColor:!0,children:" Delete selected entry"})]})]}),d(f,{flexDirection:"column",children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"ACTIONS"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"s"}),c(a,{dimColor:!0,children:" Save configuration"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:" Quit"})]}),d(a,{children:[" ",c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:" Toggle help"})]})]})]}),Ea=He(()=>e.getJsonPreview(),[o.config]),ja=c(Vg,{focused:b==="preview",hadComments:o.hadComments,jsonPreview:Ea,mode:o.mode,scrollRef:Se}),yo=n>=_g,Ta=yo?Math.floor(n*.38):0;return d(f,{flexDirection:"column",height:i,width:n,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS "}),d(a,{wrap:"truncate",children:[o.mode==="create"?"Create":"Edit"," devcontainer"]})]}),c(f,{flexShrink:0,paddingX:1,paddingY:1,children:c(ac,{defaultValue:o.section,keyMap:{useNumbers:!1,useTab:!1},onChange:$(W=>{e.setSection(W),x("editor")},"onChange"),showIndex:!1,children:Yo.map(({id:W,label:J})=>c(cc,{name:W,children:J},W))})}),c(f,{flexShrink:0,paddingRight:2,children:c(a,{dimColor:!0,wrap:"truncate",children:Yo.find(W=>W.id===o.section)?.description??""})}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{borderColor:b==="editor"?"white":"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,overflow:"hidden",children:Le}),yo&&c(f,{flexShrink:0,width:Ta,children:ja})]}),Sa,c(bt,{autoExitSeconds:3,onCancel:$(()=>{g(!1)},"onCancel"),visible:u}),Ca]})},"VisDevcontainerApp");var qg=Object.defineProperty,Xo=$((t,e)=>qg(t,"name",{value:e,configurable:!0}),"c$b");const Yg={group:"Scaffold & Config",alias:"dc",description:"Create or update .devcontainer/devcontainer.json interactively",examples:[["vis devcontainer","Launch interactive devcontainer config editor"],["vis dc","Alias for devcontainer"],["vis devcontainer --template node-pnpm","Start from Node.js + pnpm template"]],execute:Xo(async({logger:t,options:e,workspaceRoot:r})=>{if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo or project directory.");const n=r,i=e.template,o=e.output,s=!!process.stdout.isTTY&&!De;let l=null;try{l=pe(n).name}catch{}const u=Kf(n);let g=u?.config??null;const p=u?.hadComments??!1;if(i&&!u){const b=Ot.find(x=>x.id===i);if(!b){const x=Ot.map(E=>E.id).join(", ");throw new Error(`Unknown template "${i}". Valid templates: ${x}`)}g=b.config}if(!s){g?t.info(JSON.stringify(g,null,2)):(t.error("No existing devcontainer.json found. Use --template to generate one in non-TTY mode."),process.exitCode=1);return}process.stdin.isTTY&&typeof process.stdin.setRawMode=="function"&&(process.stdin.setRawMode(!0),process.stdin.ref(),process.stdin.resume());const h=setInterval(()=>{},1e3),m=new og(g,p,l);i&&!u&&m.dismissTemplateSelector();let y=null;if(await st(H.createElement(Jg,{onSave:Xo(b=>{Qf(n,b,o),y=b},"onSave"),store:m}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit(),clearInterval(h),y){const b=o??".devcontainer/devcontainer.json";t.info(`DevContainer config saved to ${b}`)}},"execute"),name:"devcontainer",options:[{alias:"t",description:"Start from a template: node, node-pnpm, node-postgres, node-dind, fullstack, python, go, rust, java, devops, minimal, custom",name:"template",type:String},{alias:"o",description:"Output path (default: .devcontainer/devcontainer.json)",name:"output",type:String}]};var Xg=Object.defineProperty,Kg=$((t,e)=>Xg(t,"name",{value:e,configurable:!0}),"o$8");const Qg={group:"Run & Execute",argument:{description:"Package to execute (optionally with @version)",name:"package",type:String},description:"Execute a remote package without permanent installation",examples:[["vis dlx create-vite my-app","Scaffold a new project"],["vis dlx typescript@5.5.4 tsc --version","Run specific version"],["vis dlx -p cowsay -p lolcatjs -c 'echo hi | cowsay | lolcatjs'","Multiple packages with shell"]],execute:Kg(async({argument:t,logger:e,options:r,workspaceRoot:n})=>{const i=t;if(!i||i.length===0)throw new Error("No package specified. Usage: vis dlx <package[@version]> [args...]");const[o,...s]=i,l=n??process.cwd(),u=pe(l),g=r.package?Array.isArray(r.package)?r.package:[r.package]:[],p=Un(u,{additionalPackages:g,args:s,package:o,shellMode:r["shell-mode"]||!1,silent:r.silent||!1},l,e);p!==0&&(process.exitCode=p)},"execute"),name:"dlx",options:[{alias:"p",description:"Additional packages to install (repeatable)",multiple:!0,name:"package",type:String},{alias:"c",defaultValue:!1,description:"Execute within shell environment",name:"shell-mode",type:Boolean},{alias:"s",defaultValue:!1,description:"Suppress output except command results",name:"silent",type:Boolean}]};var Zg=Object.defineProperty,Be=$((t,e)=>Zg(t,"name",{value:e,configurable:!0}),"c$a");const eh=["dependencies","devDependencies","peerDependencies","peerDependenciesMeta","optionalDependencies","bundleDependencies"],th=["overrides","pnpm","resolutions"],rh=["engines","files"],nh=Be(t=>{const e=Wr(t)?.major;return e!==void 0&&e>=10},"isPnpmV10Plus"),oh=Be(t=>{const e=A(t,"pnpm-workspace.yaml");if(!ae(e))return{overrides:{},source:"pnpm-workspace.yaml"};try{return{overrides:Ln(e)?.overrides??{},source:"pnpm-workspace.yaml"}}catch{return{overrides:{},source:"pnpm-workspace.yaml"}}},"readPnpmWorkspaceOverrides"),ih=Be((t,e)=>{let r={};return e==="pnpm"?r=t.pnpm?.overrides??{}:e==="yarn"||e==="bun"?r=t.resolutions??{}:r=t.overrides??{},{overrides:r,source:"package.json"}},"readPkgJsonOverrides"),sh=Be((t,e,r)=>r.name==="pnpm"&&nh(r.version)?oh(t):ih(e,r.name),"readOverrides"),Ko=Be((t,e)=>{const r=e;for(const i of th){const o=t.indexOf(i);if(o!==-1&&i!==r)return r==="overrides"?o:o+1}let n=-1;for(const i of eh){const o=t.indexOf(i);o>n&&(n=o)}if(n!==-1)return n+1;for(const i of rh){const o=t.indexOf(i);if(o!==-1)return o}return t.length},"findInsertIndex"),ah=Be(t=>/\n(\s+)/.exec(t)?.[1]??" ","detectIndent"),ch=Be((t,e)=>{const r=A(t,"pnpm-workspace.yaml");if(!V(r))throw new Error(`pnpm-workspace.yaml not found at ${r}. Cannot write overrides for pnpm v10+.`);let n=Y(r,"utf8");const i=`overrides:
292
+ ${Object.entries(e).map(([o,s])=>` '${o}': '${s}'`).join(`
293
+ `)}
294
+ `;n=/^overrides:\s*$/m.test(n)||/^overrides:\s*\n/m.test(n)?n.replace(/^overrides:\s*\n(?:(?:[ \t].*)?\n)*/m,i):`${n.trimEnd()}
295
+
296
+ ${i}`,_(r,n)},"writePnpmWorkspaceOverrides"),lh=Be((t,e,r,n)=>{const i=Y(t,"utf8"),o=ah(i);if(n==="pnpm"){const s=e.pnpm??{};if(s.overrides=r,e.pnpm)e.pnpm=s,_(t,`${JSON.stringify(e,null,o)}
297
+ `);else{const l=Object.keys(e),u=Ko(l,"pnpm"),g=Object.entries(e);g.splice(u,0,["pnpm",s]),_(t,`${JSON.stringify(Object.fromEntries(g),null,o)}
298
+ `)}}else{const s=n==="yarn"||n==="bun"?"resolutions":"overrides";if(e[s])e[s]=r,_(t,`${JSON.stringify(e,null,o)}
299
+ `);else{const l=Object.keys(e),u=Ko(l,s),g=Object.entries(e);g.splice(u,0,[s,r]),_(t,`${JSON.stringify(Object.fromEntries(g),null,o)}
300
+ `)}}},"writePkgJsonOverrides"),Ls=Be((t,e,r,n)=>{const i=Y(e,"utf8"),o=JSON.parse(i),{overrides:s,source:l}=sh(t,o,n),u=[],g=[],p=new Set;if(n.name==="npm")for(const m of["dependencies","devDependencies"]){const y=o[m];if(y)for(const b of Object.keys(y))p.add(b)}for(const m of r){const y=s[m.original];if(typeof y=="object")continue;let b=m.spec;n.name==="npm"&&p.has(m.original)&&(b=`$${m.original}`),y!==b&&(y?g.push(m.original):u.push(m.original),s[m.original]=b)}if(u.length===0&&g.length===0)return{added:u,updated:g};const h=Object.fromEntries(Object.entries(s).sort(([m],[y])=>m.localeCompare(y)));return l==="pnpm-workspace.yaml"?ch(t,h):lh(e,o,h,n.name),{added:u,updated:g}},"applyOverrides"),Fs=Be((t,e)=>{const r={bun:["bun.lock"],npm:["npm-shrinkwrap.json","package-lock.json"],pnpm:["pnpm-lock.yaml"],yarn:["yarn.lock"]};for(const n of r[e]??[]){const i=A(t,n);try{return Y(i,"utf8")}catch{continue}}return""},"readLockfileText"),dh=Be((t,e,r)=>{if(!t)return!1;const n=e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`);switch(r){case"bun":return t.includes(`"${e}":`)||new RegExp(String.raw`(^|\s|[",])${n}@`,"m").test(t);case"npm":return t.includes(`"${e}":`)||t.includes(`"node_modules/${e}":`);case"pnpm":return new RegExp(String.raw`(^|\s|['"/])${n}(@|['"]?:)`,"m").test(t);case"yarn":return new RegExp(String.raw`(^|\s|[",])${n}@`,"m").test(t);default:return!1}},"lockfileContainsPackage");var uh=Object.defineProperty,Yt=$((t,e)=>uh(t,"name",{value:e,configurable:!0}),"s$9");const ph=Yt((t,e,r)=>{let n=t;if(e!=="all"&&(n=n.filter(i=>i.category===e)),r){const i=r.toLowerCase();n=n.filter(o=>o.packageName.toLowerCase().includes(i))}return n},"filterEntries");let fh=class{static{$(this,"c")}static{Yt(this,"OptimizeStore")}#e;#t=new Set;constructor(e){this.#e={applyProgress:null,checkedEntries:new Set,entries:e,error:null,filterActive:!1,filterText:"",filterType:"all",focusedPanel:"list",phase:"browsing",selectedIndex:0}}getSnapshot=Yt(()=>this.#e,"getSnapshot");subscribe=Yt(e=>(this.#t.add(e),()=>{this.#t.delete(e)}),"subscribe");getFilteredEntries=Yt(()=>ph(this.#e.entries,this.#e.filterType,this.#e.filterText),"getFilteredEntries");#n(){this.#e={...this.#e};for(const e of this.#t)e()}select(e){const r=this.getFilteredEntries();this.#e.selectedIndex=r.length===0?-1:Math.max(0,Math.min(e,r.length-1)),this.#n()}toggleCheck(e){const r=new Set(this.#e.checkedEntries);r.has(e)?r.delete(e):r.add(e),this.#e.checkedEntries=r,this.#n()}toggleAll(){const e=this.getFilteredEntries(),r=new Set(this.#e.checkedEntries);if(e.every(n=>r.has(n.packageName)))for(const n of e)r.delete(n.packageName);else for(const n of e)r.add(n.packageName);this.#e.checkedEntries=r,this.#n()}setFilter(e){this.#e.filterType=e,this.#e.selectedIndex=0,this.#n()}setFilterText(e){this.#e.filterText=e,this.#e.selectedIndex=0,this.#n()}setFilterActive(e){this.#e.filterActive=e,this.#n()}setFocusedPanel(e){this.#e.focusedPanel=e,this.#n()}setPhase(e){this.#e.phase=e,this.#n()}setProgress(e,r){this.#e.applyProgress={current:e,total:r},this.#n()}setError(e){this.#e.error=e,this.#e.phase="error",this.#n()}getCheckedEntries(){return this.#e.entries.filter(e=>this.#e.checkedEntries.has(e.packageName))}};const Vs={"micro-utility":"gray",native:"green",preferred:"yellow",socket:"cyan"},gh={"micro-utility":"MICRO",native:"NATIVE",preferred:"PREF",socket:"SOCKET"},hh={"micro-utility":"Trivial utility package that can be replaced with inline code.",native:"Polyfill for a native JS/Node.js API. Use the built-in instead.",preferred:"A lighter or faster alternative package exists.",socket:"Security-hardened replacement from Socket.dev's @socketregistry."};var mh=Object.defineProperty,yh=$((t,e)=>mh(t,"name",{value:e,configurable:!0}),"a$5");const vh=yh(({entry:t,focused:e,scrollRef:r})=>{const n=e?"white":"gray";if(!t)return c(f,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",children:c(a,{dimColor:!0,children:"No entry selected"})});const i=Vs[t.category]??"gray";return d(f,{borderColor:n,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[c(f,{flexShrink:0,paddingTop:1,paddingX:2,children:c(a,{bold:!0,color:"white",children:t.packageName})}),d(Bt,{flexGrow:1,flexShrink:1,paddingX:2,ref:r,scrollbar:!0,scrollbarColor:"gray",children:[c(a,{}),d(f,{children:[c(f,{width:14,children:c(a,{dimColor:!0,children:"Category:"})}),c(a,{bold:!0,color:i,children:t.category})]}),d(f,{children:[c(f,{width:14,children:c(a,{dimColor:!0,children:"Replace with:"})}),c(a,{children:t.replacement})]}),t.overrideSpec&&d(f,{children:[c(f,{width:14,children:c(a,{dimColor:!0,children:"Override:"})}),c(a,{color:"cyan",children:t.overrideSpec})]}),d(f,{children:[c(f,{width:14,children:c(a,{dimColor:!0,children:"Codemod:"})}),c(a,{color:t.hasCodemod?"green":"gray",children:t.hasCodemod?"available ⚙":"not available"})]}),d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"DESCRIPTION"}),c(f,{marginTop:1,paddingLeft:2,children:c(a,{children:hh[t.category]??""})})]}),t.category==="native"&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"green",children:"ACTION"}),c(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:t.hasCodemod?d(Xt,{children:[d(a,{color:"green",children:["✓"," ","Codemod will rewrite imports to use native API."]}),c(a,{dimColor:!0,children:" The package can then be removed from dependencies."})]}):d(Xt,{children:[d(a,{color:"yellow",children:["ℹ"," ","No automated codemod available."]}),c(a,{dimColor:!0,children:" Manual migration required — replace usage with native equivalent."})]})})]}),t.category==="socket"&&d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"cyan",children:"ACTION"}),d(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:[d(a,{color:"cyan",children:["✓"," ","Override will redirect resolution to the hardened package."]}),c(a,{dimColor:!0,children:" No source code changes needed — drop-in replacement."})]})]}),d(f,{flexDirection:"column",marginTop:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"LINKS"}),c(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:d(a,{color:"cyan",underline:!0,children:["https://npmx.dev/",t.packageName]})})]})]})]})},"OptimizeDetailPanel");var wh=Object.defineProperty,Us=$((t,e)=>wh(t,"name",{value:e,configurable:!0}),"b$8");const kh=[{key:"all",label:"All",shortcut:"1"},{key:"native",label:"Native",shortcut:"2"},{key:"preferred",label:"Preferred",shortcut:"3"},{key:"micro-utility",label:"Micro",shortcut:"4"},{key:"socket",label:"Socket",shortcut:"5"}],bh=Us(({checked:t,entry:e,isSelected:r})=>{const n=Vs[e.category]??"white",i=gh[e.category]??e.category,o=t?"☑":"☐",s=e.hasCodemod?"⚙":" ";return d(f,{flexShrink:0,height:1,children:[c(a,{children:r?">":" "}),d(a,{color:t?"white":"gray",children:[" ",o," "]}),c(a,{bold:!0,color:n,children:`[${i}]`.padEnd(9)}),d(a,{children:[" ",s," "]}),c(f,{flexGrow:1,children:c(a,{bold:r,inverse:r,wrap:"truncate",children:e.packageName})}),c(a,{dimColor:!0,children:" → "}),c(a,{wrap:"truncate",children:e.replacement})]})},"EntryRow"),$h=Us(({checkedEntries:t,entries:e,filterActive:r,filterText:n,filterType:i,focused:o,isDryRun:s,scrollOffset:l,selectedIndex:u,totalEntries:g,viewportHeight:p})=>{const h=o?"white":"gray";let m=0,y=0,b=0,x=0;for(const O of e)switch(O.category){case"micro-utility":{b++;break}case"native":{m++;break}case"preferred":{y++;break}case"socket":{x++;break}}const E=[];m>0&&E.push(`${m} native`),y>0&&E.push(`${y} preferred`),b>0&&E.push(`${b} micro`),x>0&&E.push(`${x} socket`);const C=E.length>0?` (${E.join(", ")})`:"",D=t.size,N=[];for(const[O,R]of e.entries())N.push(c(bh,{checked:t.has(R.packageName),entry:R,isSelected:O===u},R.packageName));const L=e.length,j=L>p&&p>0;return d(f,{borderColor:h,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS OPTIMIZE "}),d(a,{wrap:"truncate",children:[g," ","optimizations",C]}),!s&&D>0&&d(a,{dimColor:!0,children:[" ","—",D," ","selected"]})]}),c(f,{flexShrink:0,gap:1,paddingX:1,paddingY:1,children:kh.map(O=>{const R=i===O.key;return d(f,{children:[c(a,{dimColor:!R,children:"["}),c(a,{bold:R,color:R?"cyan":"gray",children:O.shortcut}),c(a,{dimColor:!R,children:"]"}),d(a,{color:R?"white":"gray",children:[" ",O.label]})]},O.key)})}),r&&d(f,{flexShrink:0,paddingX:1,children:[c(a,{bold:!0,color:"white",children:"/ "}),c(a,{children:n}),c(a,{inverse:!0,children:" "})]}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:c(f,{flexDirection:"column",marginTop:-l,children:N})}),j&&c(f,{flexShrink:0,marginLeft:1,marginRight:1,children:c(ar,{contentHeight:L,placement:"inset",scrollOffset:l,style:"block",viewportHeight:p})})]})]})},"OptimizeListPanel");var xh=Object.defineProperty,Sh=$((t,e)=>xh(t,"name",{value:e,configurable:!0}),"z$2");const Ch=100,Qo=10,Zo={1:"all",2:"native",3:"preferred",4:"micro-utility",5:"socket"},Eh=Sh(({isDryRun:t,store:e})=>{const{exit:r}=Mt(),{columns:n,rows:i}=Dt(),o=cr(e.subscribe,e.getSnapshot),s=we(null),[l,u]=se(0),[g,p]=se(!1),h=e.getFilteredEntries(),m=h[o.selectedIndex]??null,y=n>=Ch,b=Math.max(0,i-5),x=We(E=>{r(E)},[r]);return Ae((E,C)=>{if(g){E==="y"||E==="Y"?x():p(!1);return}if(o.filterActive){C.escape?(e.setFilterActive(!1),e.setFilterText("")):C.return?e.setFilterActive(!1):C.backspace||C.delete?e.setFilterText(o.filterText.slice(0,-1)):E&&!C.ctrl&&!C.meta&&e.setFilterText(o.filterText+E);return}if(E==="q"){!t&&o.checkedEntries.size>0?p(!0):x();return}if(E==="/"){e.setFilterActive(!0);return}if(Zo[E]){e.setFilter(Zo[E]);return}if(C.tab){e.setFocusedPanel(o.focusedPanel==="list"?"detail":"list");return}if(o.focusedPanel==="list")if(C.upArrow||E==="k"){const D=Math.max(0,o.selectedIndex-1);e.select(D),D<l&&u(D)}else if(C.downArrow||E==="j"){const D=Math.min(h.length-1,o.selectedIndex+1);e.select(D),D>=l+b&&u(D-b+1)}else E===" "?m&&e.toggleCheck(m.packageName):E==="a"?e.toggleAll():C.return&&!t&&o.checkedEntries.size>0&&x(e.getCheckedEntries());else o.focusedPanel==="detail"&&(C.upArrow||E==="k"?s.current?.scrollBy(-1):(C.downArrow||E==="j")&&s.current?.scrollBy(1))},{isActive:o.phase==="browsing"}),i<Qo?c(f,{alignItems:"center",justifyContent:"center",children:d(a,{color:"yellow",children:["Terminal too small. Resize to at least",Qo," ","rows."]})}):d(f,{flexDirection:"column",height:i,width:n,children:[d(f,{flexDirection:y?"row":"column",flexGrow:1,children:[c(f,{flexBasis:y?"50%":void 0,flexGrow:1,children:c($h,{checkedEntries:o.checkedEntries,entries:h,filterActive:o.filterActive,filterText:o.filterText,filterType:o.filterType,focused:o.focusedPanel==="list",isDryRun:t,scrollOffset:l,selectedIndex:o.selectedIndex,totalEntries:o.entries.length,viewportHeight:b})}),c(f,{flexBasis:y?"50%":void 0,flexGrow:1,children:c(vh,{entry:m,focused:o.focusedPanel==="detail",scrollRef:s})})]}),c(f,{flexShrink:0,paddingX:1,children:d(a,{dimColor:!0,children:[t?"Preview mode":"space:toggle a:all enter:apply"," ","| tab:switch panel /: filter q:quit |","⚙","=codemod available"]})}),g&&c(bt,{message:`${o.checkedEntries.size} optimization${o.checkedEntries.size===1?"":"s"} selected but not applied. Quit?`})]})},"VisOptimizeApp");var jh=Object.defineProperty,Ne=$((t,e)=>jh(t,"name",{value:e,configurable:!0}),"g$8");const Br=Ne((t,e)=>{const r=new Set;try{const n=JSON.parse(Y(t,"utf8")),i=e?[n.dependencies,n.optionalDependencies]:[n.dependencies,n.devDependencies,n.peerDependencies,n.optionalDependencies];for(const o of i)if(o)for(const s of Object.keys(o))r.add(s)}catch{}return r},"collectDepsFromPkgJson"),ao=Ne(t=>{const e=Xr(t);if(e)return wt(t,e);const r=A(t,"package.json");if(!V(r))return[];try{const n=JSON.parse(Y(r,"utf8")),i=Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages;return i?wt(t,i):[]}catch{return[]}},"discoverWorkspacePackages"),Gs=Ne(t=>{const e=[],r=Ne((n,i)=>{for(const[,o]of Object.entries(n.mappings)){if(!t.has(o.moduleName))continue;const s=[];for(const l of o.replacements){const u=n.replacements[l];u&&s.push(u.description??u.id)}e.push({category:i,hasCodemod:!1,overrideSpec:void 0,packageName:o.moduleName,replacement:s.join(", ")||o.replacements.join(", ")})}},"scanManifest");return r(hc,"native"),r(mc,"preferred"),r(gc,"micro-utility"),e},"buildE18eEntries"),zs=Ne((t,e,r,n)=>{const i=fc("npm")??[],o=[];for(const[,s]of i){if(s.deprecated)continue;const l=t.has(s.package),u=e?dh(e,s.package,r.name):!1;if(!l&&!u)continue;const g=Wr(s.version)?.major;if(g===void 0)continue;const p=n?`npm:${s.name}@${s.version}`:`npm:${s.name}@^${String(g)}`;o.push({category:"socket",hasCodemod:!1,overrideSpec:p,packageName:s.package,replacement:s.name})}return o},"buildSocketEntries");let Er;const Ws=Ne(async()=>{if(Er)return Er;try{return Er=(await import("module-replacements-codemods")).codemods,Er}catch{return{}}},"loadCodemods"),_s=Ne(async t=>{try{const e=await Ws();for(const r of t)r.category!=="socket"&&e[r.packageName]&&(r.hasCodemod=!0)}catch{}},"markCodemodAvailability"),Hs=Ne(async(t,e)=>{let r=0;try{const n=(await Ws())[e];if(!n)return{filesChanged:0,packageName:e};const i=n({}),o=Th(t);for(const s of o){const l=Y(s,"utf8");if(l.includes(e))try{const u=await i.transform({file:{filename:s,source:l}});u!==l&&(_(s,u,"utf8"),r++)}catch(u){process.stderr.write(`warn: codemod transform failed for ${s}: ${u instanceof Error?u.message:String(u)}
301
+ `)}}}catch{}return{filesChanged:r,packageName:e}},"runCodemod"),Th=Ne(t=>{const e=[],r=new Set([".git",".next",".nuxt","coverage","dist","node_modules"]),n=new Set([".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx"]),i=Ne(o=>{try{for(const s of lt(o,{withFileTypes:!0})){if(s.name.startsWith("."))continue;const l=A(o,s.name);if(s.isDirectory())r.has(s.name)||i(l);else{const u=s.name.slice(s.name.lastIndexOf("."));n.has(u)&&e.push(l)}}}catch{}},"walk");return i(t),e},"collectSourceFiles"),Ah={group:"Workspace",description:"Analyze and optimize dependencies using e18e replacements and @socketregistry overrides",examples:[["vis optimize","Interactive TUI to select and apply optimizations"],["vis optimize --dry-run","Preview available optimizations"],["vis optimize --pin","Pin Socket.dev overrides to exact versions"],["vis optimize --prod","Only optimize production dependencies"]],execute:Ne(async({logger:t,options:e,workspaceRoot:r})=>{if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const n=pe(r),i=!!e["dry-run"],o=!!e.prod,s=!!e.pin;v(`Detected ${n.name} v${n.version}.`);const l=Br(A(r,"package.json"),o),u=ao(r),g=new Set(l);for(const j of u){const O=Br(A(Pt(r,j),"package.json"),o);for(const R of O)g.add(R)}u.length>0&&v(`Scanned ${String(u.length)} workspace package${u.length===1?"":"s"}.`),v(`Scanning dependencies...
302
+ `);const p=Fs(r,n.name),h=Gs(g),m=zs(g,p,n,s),y=new Set(h.map(j=>j.packageName)),b=m.filter(j=>!y.has(j.packageName)),x=[...h,...b];if(await _s(x),x.length===0){v("No optimizations found for your dependencies.");return}const E=!!process.stdout.isTTY&&!De,C=e.format==="json"||!!e.json;if(E&&!i&&!C){const j=new fh(x),O=await st(H.createElement(Eh,{isDryRun:!1,store:j}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit(),R=Array.isArray(O)?O:[];if(R.length===0){v("No optimizations selected.");return}const P=R.filter(k=>k.category!=="socket"&&k.hasCodemod),M=R.filter(k=>k.category!=="socket"&&!k.hasCodemod),w=R.filter(k=>k.category==="socket");if(P.length>0){v(`
303
+ Running ${String(P.length)} codemod${P.length===1?"":"s"}...
304
+ `);for(const k of P){const I=await Hs(r,k.packageName);I.filesChanged>0?X(` ${k.packageName}: ${String(I.filesChanged)} file${I.filesChanged===1?"":"s"} updated`):v(` ${k.packageName}: no files changed`)}}if(M.length>0){oe(`
305
+ ${String(M.length)} selected replacement${M.length===1?"":"s"} require manual migration (no codemod available):`);for(const k of M)v(` ${k.packageName} → ${k.replacement}`);Q(" Replace usage in your source code, then remove from dependencies.")}if(w.length>0){const k=w.filter(z=>z.overrideSpec).map(z=>({original:z.packageName,spec:z.overrideSpec})),I=Ls(r,A(r,"package.json"),k,n);I.added.length>0&&X(`
306
+ Added ${String(I.added.length)} override${I.added.length===1?"":"s"}.`),I.updated.length>0&&X(`Updated ${String(I.updated.length)} override${I.updated.length===1?"":"s"}.`)}if(w.length>0&&!e["no-install"]){v(`
307
+ Running ${n.name} install to update lockfile...`);const k=qr(n,{dev:!1,filter:[],force:!1,frozenLockfile:!1,ignoreScripts:!1,lockfileOnly:!1,noOptional:!1,offline:!1,prod:!1,recursive:!1,silent:!1,workspaceRoot:!1},r,t);k!==0&&oe(`${n.name} install exited with code ${String(k)}. Run it manually.`)}v(""),X("Optimization complete.");return}if(C){process.stdout.write(`${JSON.stringify({e18e:h.map(j=>({category:j.category,hasCodemod:j.hasCodemod,packageName:j.packageName,replacement:j.replacement})),packageManager:n.name,socket:b.map(j=>({overrideSpec:j.overrideSpec,packageName:j.packageName,replacement:j.replacement})),total:x.length,workspaces:u.length},void 0,2)}
308
+ `);return}const D=h.filter(j=>j.category==="native"),N=h.filter(j=>j.category==="preferred"),L=h.filter(j=>j.category==="micro-utility");if(D.length>0){v(`Native replacements (${String(D.length)}):`);for(const j of D)v(` ${j.hasCodemod?"⚙":" "} ${j.packageName} → ${j.replacement}`)}if(N.length>0){v(`
309
+ Preferred alternatives (${String(N.length)}):`);for(const j of N)v(` ${j.hasCodemod?"⚙":" "} ${j.packageName} → ${j.replacement}`)}if(L.length>0){v(`
310
+ Micro-utilities (${String(L.length)}):`);for(const j of L)v(` ${j.hasCodemod?"⚙":" "} ${j.packageName} → ${j.replacement}`)}if(b.length>0){v(`
311
+ Socket.dev overrides (${String(b.length)}):`);for(const j of b)v(` ${j.packageName} → ${j.overrideSpec}`)}v(`
312
+ Total: ${String(x.length)} optimizations available (⚙ = codemod available).`),i&&Q("Run without --dry-run for interactive selection.")},"execute"),name:"optimize",options:[{alias:"d",defaultValue:!1,description:"Preview available optimizations without applying",name:"dry-run",type:Boolean},{defaultValue:!1,description:"Pin Socket.dev overrides to exact versions",name:"pin",type:Boolean},{defaultValue:!1,description:"Only optimize production dependencies",name:"prod",type:Boolean},{defaultValue:!1,description:"Skip running install after applying overrides",name:"no-install",type:Boolean},{description:"Output format: table or json (default: table)",name:"format",type:String}]};var Ih=Object.defineProperty,hr=$((t,e)=>Ih(t,"name",{value:e,configurable:!0}),"b$6");const Rh=hr(async(t,e,r=!1)=>{const n=pe(t),{packageManager:i}=zr(t),o=Br(A(t,"package.json"),!1),s=ao(t),l=new Set(o);for(const M of s){const w=Br(A(Pt(t,M),"package.json"),!1);for(const k of w)l.add(k)}const u=Qn(t),g=Zr(t,i),p=St(e?.security?.socket),h=e?.security?.socket?.acceptedRisks,m=Fs(t,n.name),y={exclude:[],ignore:[],include:[],includePrerelease:!1,security:!0,target:"latest"},[b,x,E,C,D]=await Promise.all([g.size>0?Zn(g,y,u,void 0,t,p,h):Promise.resolve({failed:[],ignored:[],outdated:[]}),Promise.resolve(Ss(t)),Cs(t,n.name),Promise.resolve(Gs(l)),Promise.resolve(zs(l,m,n,!1))]),N=new Set(C.map(M=>M.packageName)),L=D.filter(M=>!N.has(M.packageName)),j=[...C,...L];r&&await _s(j);let O=0,R=0;if(p&&x.length>0){const M=await Lt(x.map(w=>({name:w.name,version:w.version})),p);for(const w of M.values())w.alerts.length>0&&(O+=w.alerts.length),w.score.overall<nt&&R++}let P=0;for(const M of b.outdated)M.vulnerabilities&&M.vulnerabilities.length>0&&(P+=M.vulnerabilities.length);if(x.length>0){const M=await en(x.map(w=>({name:w.name,version:w.version})));for(const w of M.values())P+=w.length}return{duplicates:E,installedCount:x.length,optimizations:j,outdated:b.outdated,socketIssues:{alerts:O,lowScore:R},vulnCount:P,workspaceCount:s.length}},"runAllScans"),Xe=hr(t=>t?Si("✓"):ot("✗"),"icon"),rt=Ge("⚠"),Oh=hr(t=>{const{duplicates:e,installedCount:r,optimizations:n,outdated:i,socketIssues:o,vulnCount:s}=t;if(v(""),v(Re("── Dependencies ────────────────────────")),v(` ${Xe(!0)} ${String(r)} packages installed`),i.length>0){const y=i.filter(C=>C.updateType==="major").length,b=i.filter(C=>C.updateType==="minor").length,x=i.filter(C=>C.updateType==="patch").length,E=[];y>0&&E.push(`${String(y)} major`),b>0&&E.push(`${String(b)} minor`),x>0&&E.push(`${String(x)} patch`),v(` ${rt} ${String(i.length)} outdated (${E.join(", ")})`)}else v(` ${Xe(!0)} All dependencies up to date`);e.length>0?v(` ${rt} ${String(e.length)} packages with duplicate versions`):v(` ${Xe(!0)} No duplicate dependencies`),v(""),v(Re("── Security ────────────────────────────")),s>0?v(` ${Xe(!1)} ${String(s)} vulnerabilit${s===1?"y":"ies"} found`):v(` ${Xe(!0)} No known vulnerabilities`),o.alerts>0&&v(` ${rt} ${String(o.alerts)} Socket.dev security alert${o.alerts===1?"":"s"}`),o.lowScore>0&&v(` ${rt} ${String(o.lowScore)} package${o.lowScore===1?"":"s"} with low security score`),o.alerts===0&&o.lowScore===0&&s===0&&v(` ${Xe(!0)} No security issues detected`),v(""),v(Re("── Optimization ────────────────────────"));let l=0,u=0,g=0,p=0;for(const y of n)switch(y.category){case"micro-utility":{g++;break}case"native":{l++;break}case"preferred":{u++;break}case"socket":{p++;break}}n.length>0?(l>0&&v(` ${rt} ${String(l)} replaceable with native APIs`),u>0&&v(` ${rt} ${String(u)} with lighter alternatives`),g>0&&v(` ${rt} ${String(g)} trivial micro-utilities`),p>0&&v(` ${rt} ${String(p)} @socketregistry overrides available`)):v(` ${Xe(!0)} No optimizations available`),v(""),v(Re("── Summary ─────────────────────────────"));const h=s,m=i.length+e.length+n.length;h===0&&m===0?X(" Everything looks good!"):(h>0&&vt(` ${String(h)} security issue${h===1?"":"s"}`),m>0&&v(` ${String(m)} improvement${m===1?"":"s"} available`))},"displayResults"),Ph=hr(t=>{const e=[];if(t.outdated.length>0&&e.push("vis update — update outdated dependencies"),(t.vulnCount>0||t.socketIssues.alerts>0)&&e.push("vis audit — detailed security analysis"),t.optimizations.length>0&&e.push("vis optimize — apply optimizations interactively"),t.duplicates.length>0&&e.push("vis dedupe — reduce duplicate versions"),e.length>0){v(""),Q(" Next steps:");for(const r of e)Q(` ${r}`)}v("")},"displayActions"),Nh={group:"Security & Health",description:"Run a full project health check (outdated, security, duplicates, optimizations)",examples:[["vis doctor","Full project health check"],["vis doctor --fix","Check and auto-apply safe fixes"],["vis doctor --format json","Machine-readable output for CI"],["vis doctor --exit-code","Exit with code 1 if security issues found"],["vis doctor --exit-code --strict","Fail on any issue (outdated, duplicates, security)"]],execute:hr(async({logger:t,options:e,visConfig:r,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root.");const i=pe(n);v(`
313
+ ${Re("VIS DOCTOR")} — project health check
314
+ `),v(` ${Xe(!0)} Detected ${i.name} v${i.version}`);const o=ao(n);o.length>0&&v(` ${Xe(!0)} ${String(o.length)} workspace package${o.length===1?"":"s"}`),v(`
315
+ Scanning...`);const s=await Rh(n,r,!!e.fix);let l=0,u=0,g=0,p=0;for(const h of s.optimizations)switch(h.category){case"micro-utility":{g++;break}case"native":{l++;break}case"preferred":{u++;break}case"socket":{p++;break}}if(e.format==="json"||e.json){process.stdout.write(`${JSON.stringify({dependencies:{duplicates:s.duplicates.length,installed:s.installedCount,outdated:s.outdated.length},optimizations:{microUtilities:g,native:l,preferred:u,socket:p,total:s.optimizations.length},packageManager:i.name,security:{alerts:s.socketIssues.alerts,lowScorePackages:s.socketIssues.lowScore,vulnerabilities:s.vulnCount},workspaces:s.workspaceCount},void 0,2)}
316
+ `),e["exit-code"]&&(s.vulnCount>0||s.socketIssues.alerts>0)&&(process.exitCode=1);return}if(Oh(s),e.fix&&s.optimizations.length>0){v(""),v(`Applying fixes...
317
+ `);const h=s.optimizations.filter(y=>y.category==="socket"&&y.overrideSpec).map(y=>({original:y.packageName,spec:y.overrideSpec}));if(h.length>0){const y=Ls(n,A(n,"package.json"),h,i);y.added.length>0&&X(` Added ${String(y.added.length)} security override${y.added.length===1?"":"s"}.`),y.updated.length>0&&X(` Updated ${String(y.updated.length)} override${y.updated.length===1?"":"s"}.`)}const m=s.optimizations.filter(y=>y.category!=="socket"&&y.hasCodemod);for(const y of m){const b=await Hs(n,y.packageName);b.filesChanged>0&&X(` ${y.packageName}: ${String(b.filesChanged)} file${b.filesChanged===1?"":"s"} updated`)}h.length>0&&(v(`
318
+ Running ${i.name} install to update lockfile...`),qr(i,{dev:!1,filter:[],force:!1,frozenLockfile:!1,ignoreScripts:!1,lockfileOnly:!1,noOptional:!1,offline:!1,prod:!1,recursive:!1,silent:!1,workspaceRoot:!1},n,t)),v(""),X("Fixes applied.")}else Ph(s);e["exit-code"]&&(e.strict?s.vulnCount>0||s.socketIssues.alerts>0||s.outdated.length>0||s.duplicates.length>0:s.vulnCount>0||s.socketIssues.alerts>0)&&(process.exitCode=1)},"execute"),name:"doctor",options:[{description:"Output format: table or json (default: table)",name:"format",type:String},{defaultValue:!1,description:"Exit with code 1 if issues found",name:"exit-code",type:Boolean},{defaultValue:!1,description:"Auto-apply safe fixes (security overrides + codemods)",name:"fix",type:Boolean},{defaultValue:!1,description:"With --exit-code: also fail on outdated and duplicate deps",name:"strict",type:Boolean}]};var Dh=Object.defineProperty,Mh=$((t,e)=>Dh(t,"name",{value:e,configurable:!0}),"s$8");const Bh={group:"Run & Execute",argument:{description:"Command to execute followed by arguments",name:"command",type:String},description:"Execute a local node_modules/.bin command (no remote fallback)",examples:[["vis exec eslint .","Run local eslint"],["vis exec tsc --noEmit","Run local TypeScript check"],["vis exec -r -- eslint .","Run in all workspace packages"],["vis exec -c 'echo $PATH'","Shell mode"]],execute:Mh(async({argument:t,logger:e,options:r,workspaceRoot:n})=>{const i=t;if(!i||i.length===0)throw new Error("No command specified. Usage: vis exec <command> [args...]");const[o,...s]=i,l=n??process.cwd(),u=pe(l),g=Uc(u,{args:s,command:o,filter:dr(r.filter),parallel:r.parallel||!1,recursive:r.recursive||!1,reverse:r.reverse||!1,shellMode:r["shell-mode"]||!1,workspaceRoot:r["workspace-root"]||!1},l,e);g!==0&&(process.exitCode=g)},"execute"),name:"exec",options:[{alias:"c",defaultValue:!1,description:"Execute within shell environment",name:"shell-mode",type:Boolean},{alias:"r",defaultValue:!1,description:"Run in every workspace package",name:"recursive",type:Boolean},{alias:"w",defaultValue:!1,description:"Run on workspace root only",name:"workspace-root",type:Boolean},{alias:"F",description:"Filter packages by name pattern",multiple:!0,name:"filter",type:String},{defaultValue:!1,description:"Run concurrently without topological ordering",name:"parallel",type:Boolean},{defaultValue:!1,description:"Reverse topological execution order",name:"reverse",type:Boolean}]};var Lh=Object.defineProperty,Zt=$((t,e)=>Lh(t,"name",{value:e,configurable:!0}),"n$4");const Fh=Zt(t=>{const e=new Map;for(const[r,n]of Object.entries(t.dependencies))for(const i of n){const o=e.get(i.target)??[];o.push(r),e.set(i.target,o)}return Object.values(t.nodes).map(r=>({deps:t.dependencies[r.name]??[],name:r.name,reverseDeps:e.get(r.name)??[],type:r.type})).sort((r,n)=>r.type!==n.type?r.type==="application"?-1:1:r.name.localeCompare(n.name))},"buildNodes"),Vh=Zt((t,e,r)=>{let n=t;if(e==="app"?n=n.filter(i=>i.type==="application"):e==="lib"&&(n=n.filter(i=>i.type!=="application")),r){const i=r.toLowerCase();n=n.filter(o=>o.name.toLowerCase().includes(i))}return n},"filterNodes");class Uh{static{$(this,"GraphStore")}static{Zt(this,"GraphStore")}#e;#t=new Set;#n;constructor(e){this.#n=e;const r=Fh(e);this.#e={allNodes:r,filterActive:!1,filterText:"",filterType:"all",focusedPanel:"list",selectedIndex:0}}getSnapshot=Zt(()=>this.#e,"getSnapshot");subscribe=Zt(e=>(this.#t.add(e),()=>{this.#t.delete(e)}),"subscribe");getFilteredNodes(){return Vh(this.#e.allNodes,this.#e.filterType,this.#e.filterText)}getStats(){const e=this.#e.allNodes.filter(i=>i.type==="application").length,r=this.#e.allNodes.length,n=Object.values(this.#n.dependencies).reduce((i,o)=>i+o.length,0);return{apps:e,deps:n,libs:r-e,total:r}}setSelectedIndex(e){const r=this.getFilteredNodes(),n=r.length===0?-1:Math.max(0,Math.min(e,r.length-1));n!==this.#e.selectedIndex&&this.#o({...this.#e,selectedIndex:n})}setFocusedPanel(e){e!==this.#e.focusedPanel&&this.#o({...this.#e,focusedPanel:e})}setFilterType(e){e!==this.#e.filterType&&this.#o({...this.#e,filterType:e,selectedIndex:0})}setFilter(e){this.#o({...this.#e,filterText:e,selectedIndex:0})}setFilterActive(e){e!==this.#e.filterActive&&this.#o({...this.#e,filterActive:e,filterText:e?this.#e.filterText:"",selectedIndex:e?this.#e.selectedIndex:0})}#o(e){this.#e=e;for(const r of this.#t)try{r()}catch{}}}var Gh=Object.defineProperty,zh=$((t,e)=>Gh(t,"name",{value:e,configurable:!0}),"p$9");const Wh=zh(({focused:t,node:e,scrollRef:r})=>{const n=t?"white":"gray";if(!e)return c(f,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",children:c(a,{dimColor:!0,children:"No project selected"})});const i=e.type==="application",o=i?"yellow":"cyan",s=i?"Application":"Library";return c(f,{borderColor:n,borderStyle:"single",borderTopRightTitle:` ${s} `,borderTopTitle:` ${e.name} `,flexDirection:"column",flexGrow:1,children:d(Bt,{flexGrow:1,flexShrink:1,paddingX:2,ref:r,scrollbar:!0,scrollbarColor:"gray",children:[d(f,{flexDirection:"column",marginTop:1,children:[d(f,{children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"DEPENDS ON"}),d(a,{dimColor:!0,children:[" ","(",e.deps.length,")"]})]}),e.deps.length===0?c(f,{marginTop:1,paddingLeft:2,children:c(a,{dimColor:!0,children:"No dependencies"})}):c(f,{flexDirection:"column",marginTop:1,children:e.deps.map(l=>d(f,{gap:1,paddingLeft:2,children:[c(a,{color:"cyan",children:"→"}),c(a,{children:l.target}),l.type!=="static"&&d(a,{dimColor:!0,children:["(",l.type,")"]})]},l.target))})]}),d(f,{flexDirection:"column",marginTop:1,children:[d(f,{children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"REQUIRED BY"}),d(a,{dimColor:!0,children:[" ","(",e.reverseDeps.length,")"]})]}),e.reverseDeps.length===0?c(f,{marginTop:1,paddingLeft:2,children:c(a,{dimColor:!0,children:"No reverse dependencies"})}):c(f,{flexDirection:"column",marginTop:1,children:e.reverseDeps.map(l=>d(f,{gap:1,paddingLeft:2,children:[c(a,{color:"magenta",children:"←"}),c(a,{children:l})]},l))})]}),d(f,{flexDirection:"column",marginTop:1,children:[d(f,{children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"INFO"})]}),d(f,{flexDirection:"column",marginTop:1,paddingLeft:2,children:[d(f,{children:[c(f,{width:16,children:c(a,{dimColor:!0,children:"Type:"})}),c(a,{color:o,children:s})]}),d(f,{children:[c(f,{width:16,children:c(a,{dimColor:!0,children:"Dependencies:"})}),c(a,{children:String(e.deps.length)})]}),d(f,{children:[c(f,{width:16,children:c(a,{dimColor:!0,children:"Required by:"})}),c(a,{children:String(e.reverseDeps.length)})]}),d(f,{children:[c(f,{width:16,children:c(a,{dimColor:!0,children:"Connectivity:"})}),c(a,{children:String(e.deps.length+e.reverseDeps.length)})]})]})]})]})})},"ProjectDetailPanel");var _h=Object.defineProperty,co=$((t,e)=>_h(t,"name",{value:e,configurable:!0}),"g$6");const Hh=[{key:"all",label:"All",shortcut:"1"},{key:"app",label:"Apps",shortcut:"2"},{key:"lib",label:"Libs",shortcut:"3"}],ei=co(({isSelected:t,node:e})=>{const r=e.type==="application",n=r?"yellow":"cyan",i=r?"app":"lib";return d(f,{flexShrink:0,height:1,children:[d(a,{children:[t?"▶":" "," "]}),c(f,{flexGrow:1,children:c(a,{bold:t,inverse:t,wrap:"truncate",children:e.name})}),d(a,{color:n,children:[" ",i]}),d(a,{dimColor:!0,children:[" ","→",e.deps.length," ","←",e.reverseDeps.length]})]})},"ProjectRow"),ti=co(({count:t,label:e})=>d(f,{flexShrink:0,height:1,marginTop:1,children:[d(a,{dimColor:!0,children:["▼"," "]}),c(a,{bold:!0,color:"white",children:e.toUpperCase()}),d(a,{dimColor:!0,children:[" ","(",t,")"]})]}),"TypeHeader"),Jh=co(({filterActive:t,filterText:e,filterType:r,focused:n,nodes:i,scrollOffset:o,selectedIndex:s,stats:l,viewportHeight:u})=>{const g=n?"white":"gray",p=i.filter(E=>E.type==="application"),h=i.filter(E=>E.type!=="application"),m=[];let y=0;if(p.length>0){m.push(c(ti,{count:p.length,label:"Applications"},"hdr-apps"));for(const E of p){const C=y;m.push(c(ei,{isSelected:C===s,node:E},E.name)),y++}}if(h.length>0){m.push(c(ti,{count:h.length,label:"Libraries"},"hdr-libs"));for(const E of h){const C=y;m.push(c(ei,{isSelected:C===s,node:E},E.name)),y++}}let b=0;p.length>0&&(b+=2+p.length),h.length>0&&(b+=2+h.length);const x=b>u&&u>0;return d(f,{borderColor:g,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS "}),d(a,{wrap:"truncate",children:[l.total," ","packages"]}),d(a,{dimColor:!0,children:["(",l.apps," ","apps,"," ",l.libs," ","libs,"," ",l.deps," ","deps)"]})]}),c(f,{flexShrink:0,gap:1,paddingX:1,paddingY:1,children:Hh.map(E=>{const C=r===E.key;return d(f,{children:[c(a,{dimColor:!C,children:"["}),c(a,{bold:C,color:C?"cyan":"gray",children:E.shortcut}),c(a,{dimColor:!C,children:"]"}),d(a,{color:C?"white":"gray",children:[" ",E.label]})]},E.key)})}),t&&d(f,{flexShrink:0,paddingX:1,children:[c(a,{bold:!0,color:"white",children:"/ "}),c(a,{children:e}),c(a,{inverse:!0,children:" "})]}),d(f,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[c(f,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:c(f,{flexDirection:"column",marginTop:-o,children:m})}),x&&c(f,{flexShrink:0,marginLeft:1,marginRight:1,children:c(ar,{contentHeight:b,placement:"inset",scrollOffset:o,style:"block",viewportHeight:u})})]})]})},"ProjectListPanel");var qh=Object.defineProperty,Yh=$((t,e)=>qh(t,"name",{value:e,configurable:!0}),"M$6");const Xh=100,Kh=40,Qh=10,ri={1:"all",2:"app",3:"lib"},Zh=Yh(({autoExitSeconds:t=0,store:e})=>{const{exit:r}=Mt(),{columns:n,rows:i}=Dt(),o=cr(e.subscribe,e.getSnapshot),[s,l]=se(!1),u=we(null),g=we(null),[p,h]=se(0),[m,y]=se(!1),b=He(()=>e.getFilteredNodes(),[o.allNodes,o.filterType,o.filterText]),x=He(()=>e.getStats(),[o.allNodes]),E=b[o.selectedIndex]??null,C=We(w=>{const k=b.filter(Z=>Z.type==="application"),I=b.filter(Z=>Z.type!=="application");let z=0,q=0;if(k.length>0){z+=2;for(let Z=0;Z<k.length;Z++){if(q===w)return z;z+=1,q++}}if(I.length>0){z+=2;for(let Z=0;Z<I.length;Z++){if(q===w)return z;z+=1,q++}}return z},[b]),D=Math.max(1,i-8-(o.filterActive?1:0)),N=We(w=>{const k=C(w);h(I=>k>I+D-2?Math.max(0,k-D+2):k<I+1?Math.max(0,k-1):I)},[C,D]);if(ze(()=>{g.current?.scrollToTop()},[E?.name]),Ae((w,k)=>{if(w==="c"&&k.ctrl){r();return}if(!m){if(s){k.escape||w==="?"?l(!1):w==="q"?(l(!1),y(!0)):k.downArrow||w==="j"?u.current?.scrollBy(1):(k.upArrow||w==="k")&&u.current?.scrollBy(-1);return}if(w==="?"){l(!0);return}if(w==="q"){y(!0);return}if(k.tab){e.setFocusedPanel(o.focusedPanel==="list"?"detail":"list");return}if(ri[w]){e.setFilterType(ri[w]);return}if(o.filterActive){if(k.escape){e.setFilterActive(!1);return}if(k.return){e.setFilterActive(!1);return}if(k.backspace){e.setFilter(o.filterText.slice(0,-1));return}if(w&&!k.ctrl&&!k.meta){e.setFilter(o.filterText+w);return}return}if(o.focusedPanel==="list"){if(b.length===0){w==="/"&&e.setFilterActive(!0);return}if(k.downArrow||w==="j"){const I=Math.min(o.selectedIndex+1,b.length-1);e.setSelectedIndex(I),N(I);return}if(k.upArrow||w==="k"){const I=Math.max(o.selectedIndex-1,0);e.setSelectedIndex(I),N(I);return}if(k.pageDown){const I=Math.min(o.selectedIndex+10,b.length-1);e.setSelectedIndex(I),N(I);return}if(k.pageUp){const I=Math.max(o.selectedIndex-10,0);e.setSelectedIndex(I),N(I);return}if(k.home){e.setSelectedIndex(0),h(0);return}if(k.end){const I=b.length-1;e.setSelectedIndex(I),N(I);return}if(w==="/"){e.setFilterActive(!0);return}if(k.rightArrow){e.setFocusedPanel("detail");return}return}if(o.focusedPanel==="detail"){if(k.escape||k.leftArrow){e.setFocusedPanel("list");return}if(k.downArrow||w==="j"){g.current?.scrollBy(1);return}if(k.upArrow||w==="k"){g.current?.scrollBy(-1);return}if(k.pageDown){g.current?.scrollBy(10);return}if(k.pageUp){g.current?.scrollBy(-10);return}if(k.home){g.current?.scrollToTop();return}k.end&&g.current?.scrollToBottom()}}},{isActive:!0}),n<Kh||i<Qh)return c(f,{alignItems:"center",height:i,justifyContent:"center",width:n,children:d(a,{color:"yellow",children:["Terminal too small (",n,"x",i,")"]})});const L=n>=Xh,j=c(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,children:d(f,{flexWrap:"wrap",gap:2,paddingX:1,children:[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]},"?"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"NAV"})]},"nav"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"1-3 /"}),c(a,{dimColor:!0,children:"FILTER"})]},"f"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:"PANEL"})]},"t")]})}),O=d(At,{footer:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",c(a,{bold:!0,color:"white",children:"?"}),"/",c(a,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:u,title:"KEYBOARD SHORTCUTS",visible:s,width:52,children:[d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"NAVIGATION"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↑","/k"]}),c(a,{dimColor:!0,children:" Move up"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↓","/j"]}),c(a,{dimColor:!0,children:" Move down"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Tab"]}),c(a,{dimColor:!0,children:" Switch panel"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","→","/","←"]}),c(a,{dimColor:!0,children:" Focus detail/list"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","PgUp/PgDn"]}),c(a,{dimColor:!0,children:" Jump 10 items"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Home/End"]}),c(a,{dimColor:!0,children:" Jump to start/end"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"FILTERS"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","1"]}),c(a,{dimColor:!0,children:" All"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","2"]}),c(a,{dimColor:!0,children:" Apps only"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","3"]}),c(a,{dimColor:!0,children:" Libraries only"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","/"]}),c(a,{dimColor:!0,children:" Text filter"})]})]}),d(f,{flexDirection:"column",children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"ACTIONS"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","q"]}),c(a,{dimColor:!0,children:" Quit"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","?"]}),c(a,{dimColor:!0,children:" Toggle help"})]})]})]}),R=c(Jh,{filterActive:o.filterActive,filterText:o.filterText,filterType:o.filterType,focused:o.focusedPanel==="list",nodes:b,scrollOffset:p,selectedIndex:o.selectedIndex,stats:x,viewportHeight:D}),P=c(Wh,{focused:o.focusedPanel==="detail",node:E,scrollRef:g});if(L){const w=Math.floor(n*.35);return d(f,{flexDirection:"column",height:i,width:n,children:[d(f,{flexDirection:"row",flexGrow:1,children:[c(f,{flexGrow:1,children:R}),c(f,{width:w,children:P})]}),j,c(bt,{autoExitSeconds:t??3,onCancel:$(()=>{y(!1)},"onCancel"),visible:m}),O]})}const M=Math.floor(i*.55);return d(f,{flexDirection:"column",height:i,width:n,children:[c(f,{height:M,children:R}),c(f,{flexGrow:1,children:P}),j,c(bt,{autoExitSeconds:t??3,onCancel:$(()=>{y(!1)},"onCancel"),visible:m}),O]})},"VisGraphApp");var ni=Object.freeze,Js=Object.defineProperty,Vt=$((t,e)=>Js(t,"name",{value:e,configurable:!0}),"y$6"),em=$((t,e)=>ni(Js(t,"raw",{value:ni(e||t.slice())})),"k$7");const qs=Vt((t,e,r,n,i,o,s,l)=>{const u=ee(r?"└── ":"├── "),g=i.has(t),p=g?ee(" (*)"):"",h=n.get(t),m=h?.type==="application"?le(t):t;if(o.push(`${e}${u}${m}${p}`),g)return;i.add(t);const y=h?.deps??[],b=r?`${e} `:`${e}${ee("│")} `;if(l>=s&&y.length>0){o.push(`${b}${ee(`... ${y.length} more`)}`);return}for(let x=0;x<y.length;x++){const E=y[x];E&&qs(E.target,b,x===y.length-1,n,i,o,s,l+1)}},"printDepsTree"),oi=Vt((t,e,r,n,i,o)=>{const s=e.get(t),l=s?.type==="application"?le(t):t;n.push(`${o}${l}`),r.add(t);const u=s?.deps??[];if(u.length===0){n.push(`${o} ${ee("(no dependencies)")}`);return}if(i<=0){n.push(`${o} ${ee(`... ${u.length} dependencies`)}`);return}for(let g=0;g<u.length;g++){const p=u[g];p&&qs(p.target,o,g===u.length-1,e,r,n,i,1)}},"printRootProject"),ii=Vt((t,e)=>{const r=new Map;for(const[h,m]of Object.entries(t.nodes))r.set(h,{deps:(t.dependencies[h]??[]).map(y=>({target:y.target,type:y.type})),name:h,type:m.type});const n=[],i=[];for(const[h,m]of r)m.type==="application"?n.push(h):i.push(h);n.sort(),i.sort();const o=n.length+i.length,s=Object.values(t.dependencies).reduce((h,m)=>h+m.length,0),l=[];if(l.push(le("Project Dependency Graph"),""),n.length>0){l.push(` ${le(Ee(`Applications (${n.length})`))}`,"");for(const h of n)oi(h,r,new Set,l,e," "),l.push("")}if(i.length>0){l.push(` ${le(Ee(`Libraries (${i.length})`))}`,"");for(const h of i)oi(h,r,new Set,l,e," "),l.push("")}const u=process.stdout.columns||80;l.push(ee("─".repeat(Math.min(u,60)))),l.push(`${le(String(o))} packages ${ee("·")} ${le(String(s))} dependencies ${ee("·")} ${le(String(n.length))} apps${ee(",")} ${le(String(i.length))} libraries`);const g=new Set;let p=!1;for(const h of[...n,...i]){const m=r.get(h)?.deps??[];for(const y of m)g.has(y.target)&&(p=!0),g.add(y.target);g.add(h)}return p&&l.push(ee("(*) = already shown above")),l.join(`
319
+ `)},"projectGraphToAscii"),tm=Vt(t=>{const e=Object.values(t.nodes).map(r=>({name:r.name,type:r.type}));return{edges:Object.values(t.dependencies).flat(),nodes:e}},"projectGraphToJson");var si;const rm=Vt(t=>{const e=Object.values(t.nodes).map(s=>({name:s.name,type:s.type})),r=[];for(const s of Object.values(t.dependencies))for(const l of s)r.push({source:l.source,target:l.target,type:l.type});const n=e.filter(s=>s.type==="application"),i=e.filter(s=>s.type!=="application"),o={apps:n.length,edges:r,libs:i.length,nodes:e};return String.raw(si||(si=em([`<!DOCTYPE html>
320
+ <html lang="en">
321
+ <head>
322
+ <meta charset="UTF-8">
323
+ <title>Project Dependency Graph</title>
324
+ <style>
325
+ * { margin: 0; padding: 0; box-sizing: border-box; }
326
+ body { font-family: system-ui, -apple-system, sans-serif; background: #0f172a; color: #e2e8f0; overflow: hidden; }
327
+ svg { width: 100vw; height: 100vh; }
328
+ .edge { fill: none; marker-end: url(#arrow); }
329
+ .node rect { rx: 8; ry: 8; cursor: pointer; transition: stroke-width 0.15s; }
330
+ .node text { font-size: 12px; font-weight: 600; pointer-events: none; }
331
+ .node:hover rect { stroke-width: 2.5; stroke: #fff; }
332
+ #info { position: fixed; top: 16px; right: 16px; background: #1e293b; padding: 14px 20px; border-radius: 10px; font-size: 13px; border: 1px solid #334155; box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
333
+ #info b { font-variant-numeric: tabular-nums; }
334
+ .app-count { color: #fbbf24; }
335
+ .lib-count { color: #38bdf8; }
336
+ .dep-count { color: #a78bfa; }
337
+ #legend { position: fixed; bottom: 16px; left: 16px; background: #1e293b; padding: 12px 16px; border-radius: 10px; font-size: 12px; border: 1px solid #334155; display: flex; gap: 16px; align-items: center; }
338
+ .legend-dot { width: 12px; height: 12px; border-radius: 3px; display: inline-block; vertical-align: middle; margin-right: 6px; }
339
+ #tooltip { position: fixed; display: none; background: #1e293b; border: 1px solid #475569; border-radius: 8px; padding: 12px 16px; font-size: 12px; max-width: 320px; box-shadow: 0 8px 24px rgba(0,0,0,0.4); z-index: 10; pointer-events: none; }
340
+ #tooltip h3 { font-size: 14px; margin-bottom: 6px; }
341
+ #tooltip .type-badge { display: inline-block; padding: 1px 8px; border-radius: 4px; font-size: 10px; font-weight: 700; text-transform: uppercase; margin-left: 8px; }
342
+ #tooltip .dep-section { margin-top: 8px; color: #94a3b8; }
343
+ #tooltip ul { list-style: none; padding-left: 0; margin-top: 4px; }
344
+ #tooltip li { padding: 1px 0; color: #cbd5e1; }
345
+ #tooltip li::before { content: "92 "; color: #64748b; }
346
+ </style>
347
+ </head>
348
+ <body>
349
+ <div id="info">
350
+ <b class="app-count">`,`</b> apps &middot;
351
+ <b class="lib-count">`,`</b> libraries &middot;
352
+ <b class="dep-count">`,`</b> dependencies
353
+ </div>
354
+ <div id="legend">
355
+ <span><span class="legend-dot" style="background:#fbbf24"></span>Application</span>
356
+ <span><span class="legend-dot" style="background:#38bdf8"></span>Library</span>
357
+ <span style="color:#64748b">&mdash; solid = static &nbsp; - - - = implicit</span>
358
+ </div>
359
+ <div id="tooltip"></div>
360
+ <svg id="graph">
361
+ <defs>
362
+ <marker id="arrow" viewBox="0 0 10 10" refX="10" refY="5" markerWidth="6" markerHeight="6" orient="auto">
363
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/>
364
+ </marker>
365
+ </defs>
366
+ </svg>
367
+ <script>
368
+ const data = `,`;
369
+ const svg = document.getElementById('graph');
370
+ const tooltip = document.getElementById('tooltip');
371
+ const W = window.innerWidth, H = window.innerHeight;
372
+
373
+ // Build adjacency
374
+ const depMap = {}, rdepMap = {};
375
+ data.nodes.forEach(n => { depMap[n.name] = []; rdepMap[n.name] = []; });
376
+ data.edges.forEach(e => { depMap[e.source]?.push(e.target); rdepMap[e.target]?.push(e.source); });
377
+
378
+ // Escape text for safe DOM insertion
379
+ function esc(s) { const d = document.createElement('div'); d.textContent = s; return d.textContent; }
380
+
381
+ // Force-directed layout
382
+ const repulsion = 5000 + data.nodes.length * 150;
383
+ const nodes = data.nodes.map(n => ({
384
+ ...n, x: W/2 + (Math.random()-0.5)*Math.min(W*0.6, 600),
385
+ y: H/2 + (Math.random()-0.5)*Math.min(H*0.6, 400), vx: 0, vy: 0
386
+ }));
387
+ const nodeMap = new Map(nodes.map(n => [n.name, n]));
388
+ const edges = data.edges.map(e => ({
389
+ source: nodeMap.get(e.source), target: nodeMap.get(e.target), type: e.type
390
+ }));
391
+
392
+ for (let iter = 0; iter < 400; iter++) {
393
+ for (let i = 0; i < nodes.length; i++) {
394
+ for (let j = i+1; j < nodes.length; j++) {
395
+ let dx = nodes[j].x - nodes[i].x, dy = nodes[j].y - nodes[i].y;
396
+ let d = Math.sqrt(dx*dx + dy*dy) || 1;
397
+ let f = repulsion / (d * d);
398
+ nodes[i].vx -= dx/d * f; nodes[i].vy -= dy/d * f;
399
+ nodes[j].vx += dx/d * f; nodes[j].vy += dy/d * f;
400
+ }
401
+ }
402
+ edges.forEach(e => {
403
+ if (!e.source || !e.target) {
404
+ return;
405
+ }
406
+ let dx = e.target.x - e.source.x, dy = e.target.y - e.source.y;
407
+ let d = Math.sqrt(dx*dx + dy*dy) || 1;
408
+ let f = (d - 180) * 0.008;
409
+ e.source.vx += dx/d * f; e.source.vy += dy/d * f;
410
+ e.target.vx -= dx/d * f; e.target.vy -= dy/d * f;
411
+ });
412
+ nodes.forEach(n => {
413
+ n.vx += (W/2 - n.x) * 0.001; n.vy += (H/2 - n.y) * 0.001;
414
+ n.x += n.vx * 0.3; n.y += n.vy * 0.3;
415
+ n.vx *= 0.75; n.vy *= 0.75;
416
+ n.x = Math.max(80, Math.min(W-80, n.x));
417
+ n.y = Math.max(40, Math.min(H-40, n.y));
418
+ });
419
+ }
420
+
421
+ // Measure text widths
422
+ const measure = document.createElementNS('http://www.w3.org/2000/svg','text');
423
+ measure.setAttribute('font-size','12'); measure.setAttribute('font-weight','600');
424
+ measure.setAttribute('font-family','system-ui');
425
+ svg.appendChild(measure);
426
+ const widths = {};
427
+ nodes.forEach(n => { measure.textContent = n.name; widths[n.name] = measure.getComputedTextLength(); });
428
+ svg.removeChild(measure);
429
+
430
+ // Render edges
431
+ edges.forEach(e => {
432
+ if (!e.source || !e.target) {
433
+ return;
434
+ }
435
+ const sw = (widths[e.source.name]||80)/2 + 12;
436
+ const tw = (widths[e.target.name]||80)/2 + 12;
437
+ const dx = e.target.x - e.source.x, dy = e.target.y - e.source.y;
438
+ const d = Math.sqrt(dx*dx+dy*dy)||1;
439
+ const x1 = e.source.x + dx/d*sw, y1 = e.source.y + dy/d*14;
440
+ const x2 = e.target.x - dx/d*tw, y2 = e.target.y - dy/d*14;
441
+ const line = document.createElementNS('http://www.w3.org/2000/svg','line');
442
+ line.setAttribute('x1',x1); line.setAttribute('y1',y1);
443
+ line.setAttribute('x2',x2); line.setAttribute('y2',y2);
444
+ line.setAttribute('class','edge');
445
+ const edgeColors = { implicit: '#475569', devDependency: '#888888', peerDependency: '#CC8800' };
446
+ line.setAttribute('stroke', edgeColors[e.type] || '#64748b');
447
+ line.setAttribute('stroke-width', '1.5');
448
+ if (e.type === 'implicit' || e.type === 'peerDependency') line.setAttribute('stroke-dasharray', '6,4');
449
+ if (e.type === 'devDependency') line.setAttribute('stroke-dasharray', '3,3');
450
+ svg.appendChild(line);
451
+ });
452
+
453
+ // Render nodes
454
+ nodes.forEach(n => {
455
+ const w = (widths[n.name]||80) + 24;
456
+ const h = 32;
457
+ const isApp = n.type === 'application';
458
+ const fill = isApp ? '#fbbf24' : '#38bdf8';
459
+ const textFill = '#0f172a';
460
+ const stroke = isApp ? '#f59e0b' : '#0284c7';
461
+
462
+ const g = document.createElementNS('http://www.w3.org/2000/svg','g');
463
+ g.setAttribute('class','node');
464
+ g.setAttribute('transform','translate('+(n.x - w/2)+','+(n.y - h/2)+')');
465
+ const rect = document.createElementNS('http://www.w3.org/2000/svg','rect');
466
+ rect.setAttribute('width', w); rect.setAttribute('height', h);
467
+ rect.setAttribute('fill', fill); rect.setAttribute('stroke', stroke); rect.setAttribute('stroke-width','1.5');
468
+ g.appendChild(rect);
469
+ const text = document.createElementNS('http://www.w3.org/2000/svg','text');
470
+ text.setAttribute('x', w/2); text.setAttribute('y', h/2 + 4.5);
471
+ text.setAttribute('text-anchor','middle'); text.setAttribute('fill', textFill);
472
+ text.textContent = n.name;
473
+ g.appendChild(text);
474
+
475
+ g.addEventListener('mouseenter', (ev) => {
476
+ const deps = depMap[n.name] || [];
477
+ const rdeps = rdepMap[n.name] || [];
478
+
479
+ // Build tooltip using safe DOM methods
480
+ tooltip.textContent = '';
481
+
482
+ const heading = document.createElement('h3');
483
+ heading.textContent = n.name;
484
+ const badge = document.createElement('span');
485
+ badge.className = 'type-badge';
486
+ badge.style.background = fill;
487
+ badge.style.color = '#0f172a';
488
+ badge.textContent = n.type;
489
+ heading.appendChild(badge);
490
+ tooltip.appendChild(heading);
491
+
492
+ if (deps.length) {
493
+ const label = document.createElement('div');
494
+ label.className = 'dep-section';
495
+ label.textContent = 'Depends on:';
496
+ tooltip.appendChild(label);
497
+ const ul = document.createElement('ul');
498
+ deps.forEach(d => { const li = document.createElement('li'); li.textContent = d; ul.appendChild(li); });
499
+ tooltip.appendChild(ul);
500
+ }
501
+ if (rdeps.length) {
502
+ const label = document.createElement('div');
503
+ label.className = 'dep-section';
504
+ label.textContent = 'Required by:';
505
+ tooltip.appendChild(label);
506
+ const ul = document.createElement('ul');
507
+ rdeps.forEach(d => { const li = document.createElement('li'); li.textContent = d; ul.appendChild(li); });
508
+ tooltip.appendChild(ul);
509
+ }
510
+ if (!deps.length && !rdeps.length) {
511
+ const empty = document.createElement('div');
512
+ empty.style.marginTop = '6px';
513
+ empty.style.color = '#64748b';
514
+ empty.textContent = 'No dependencies';
515
+ tooltip.appendChild(empty);
516
+ }
517
+
518
+ tooltip.style.display = 'block';
519
+ const rect = tooltip.getBoundingClientRect();
520
+ tooltip.style.left = Math.min(ev.clientX + 12, W - rect.width - 12) + 'px';
521
+ tooltip.style.top = Math.min(ev.clientY + 12, H - rect.height - 12) + 'px';
522
+ });
523
+ g.addEventListener('mouseleave', () => { tooltip.style.display = 'none'; });
524
+ svg.appendChild(g);
525
+ });
526
+ <\/script>
527
+ </body>
528
+ </html>`],[`<!DOCTYPE html>
529
+ <html lang="en">
530
+ <head>
531
+ <meta charset="UTF-8">
532
+ <title>Project Dependency Graph</title>
533
+ <style>
534
+ * { margin: 0; padding: 0; box-sizing: border-box; }
535
+ body { font-family: system-ui, -apple-system, sans-serif; background: #0f172a; color: #e2e8f0; overflow: hidden; }
536
+ svg { width: 100vw; height: 100vh; }
537
+ .edge { fill: none; marker-end: url(#arrow); }
538
+ .node rect { rx: 8; ry: 8; cursor: pointer; transition: stroke-width 0.15s; }
539
+ .node text { font-size: 12px; font-weight: 600; pointer-events: none; }
540
+ .node:hover rect { stroke-width: 2.5; stroke: #fff; }
541
+ #info { position: fixed; top: 16px; right: 16px; background: #1e293b; padding: 14px 20px; border-radius: 10px; font-size: 13px; border: 1px solid #334155; box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
542
+ #info b { font-variant-numeric: tabular-nums; }
543
+ .app-count { color: #fbbf24; }
544
+ .lib-count { color: #38bdf8; }
545
+ .dep-count { color: #a78bfa; }
546
+ #legend { position: fixed; bottom: 16px; left: 16px; background: #1e293b; padding: 12px 16px; border-radius: 10px; font-size: 12px; border: 1px solid #334155; display: flex; gap: 16px; align-items: center; }
547
+ .legend-dot { width: 12px; height: 12px; border-radius: 3px; display: inline-block; vertical-align: middle; margin-right: 6px; }
548
+ #tooltip { position: fixed; display: none; background: #1e293b; border: 1px solid #475569; border-radius: 8px; padding: 12px 16px; font-size: 12px; max-width: 320px; box-shadow: 0 8px 24px rgba(0,0,0,0.4); z-index: 10; pointer-events: none; }
549
+ #tooltip h3 { font-size: 14px; margin-bottom: 6px; }
550
+ #tooltip .type-badge { display: inline-block; padding: 1px 8px; border-radius: 4px; font-size: 10px; font-weight: 700; text-transform: uppercase; margin-left: 8px; }
551
+ #tooltip .dep-section { margin-top: 8px; color: #94a3b8; }
552
+ #tooltip ul { list-style: none; padding-left: 0; margin-top: 4px; }
553
+ #tooltip li { padding: 1px 0; color: #cbd5e1; }
554
+ #tooltip li::before { content: "\\2192 "; color: #64748b; }
555
+ </style>
556
+ </head>
557
+ <body>
558
+ <div id="info">
559
+ <b class="app-count">`,`</b> apps &middot;
560
+ <b class="lib-count">`,`</b> libraries &middot;
561
+ <b class="dep-count">`,`</b> dependencies
562
+ </div>
563
+ <div id="legend">
564
+ <span><span class="legend-dot" style="background:#fbbf24"></span>Application</span>
565
+ <span><span class="legend-dot" style="background:#38bdf8"></span>Library</span>
566
+ <span style="color:#64748b">&mdash; solid = static &nbsp; - - - = implicit</span>
567
+ </div>
568
+ <div id="tooltip"></div>
569
+ <svg id="graph">
570
+ <defs>
571
+ <marker id="arrow" viewBox="0 0 10 10" refX="10" refY="5" markerWidth="6" markerHeight="6" orient="auto">
572
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/>
573
+ </marker>
574
+ </defs>
575
+ </svg>
576
+ <script>
577
+ const data = `,`;
578
+ const svg = document.getElementById('graph');
579
+ const tooltip = document.getElementById('tooltip');
580
+ const W = window.innerWidth, H = window.innerHeight;
581
+
582
+ // Build adjacency
583
+ const depMap = {}, rdepMap = {};
584
+ data.nodes.forEach(n => { depMap[n.name] = []; rdepMap[n.name] = []; });
585
+ data.edges.forEach(e => { depMap[e.source]?.push(e.target); rdepMap[e.target]?.push(e.source); });
586
+
587
+ // Escape text for safe DOM insertion
588
+ function esc(s) { const d = document.createElement('div'); d.textContent = s; return d.textContent; }
589
+
590
+ // Force-directed layout
591
+ const repulsion = 5000 + data.nodes.length * 150;
592
+ const nodes = data.nodes.map(n => ({
593
+ ...n, x: W/2 + (Math.random()-0.5)*Math.min(W*0.6, 600),
594
+ y: H/2 + (Math.random()-0.5)*Math.min(H*0.6, 400), vx: 0, vy: 0
595
+ }));
596
+ const nodeMap = new Map(nodes.map(n => [n.name, n]));
597
+ const edges = data.edges.map(e => ({
598
+ source: nodeMap.get(e.source), target: nodeMap.get(e.target), type: e.type
599
+ }));
600
+
601
+ for (let iter = 0; iter < 400; iter++) {
602
+ for (let i = 0; i < nodes.length; i++) {
603
+ for (let j = i+1; j < nodes.length; j++) {
604
+ let dx = nodes[j].x - nodes[i].x, dy = nodes[j].y - nodes[i].y;
605
+ let d = Math.sqrt(dx*dx + dy*dy) || 1;
606
+ let f = repulsion / (d * d);
607
+ nodes[i].vx -= dx/d * f; nodes[i].vy -= dy/d * f;
608
+ nodes[j].vx += dx/d * f; nodes[j].vy += dy/d * f;
609
+ }
610
+ }
611
+ edges.forEach(e => {
612
+ if (!e.source || !e.target) {
613
+ return;
614
+ }
615
+ let dx = e.target.x - e.source.x, dy = e.target.y - e.source.y;
616
+ let d = Math.sqrt(dx*dx + dy*dy) || 1;
617
+ let f = (d - 180) * 0.008;
618
+ e.source.vx += dx/d * f; e.source.vy += dy/d * f;
619
+ e.target.vx -= dx/d * f; e.target.vy -= dy/d * f;
620
+ });
621
+ nodes.forEach(n => {
622
+ n.vx += (W/2 - n.x) * 0.001; n.vy += (H/2 - n.y) * 0.001;
623
+ n.x += n.vx * 0.3; n.y += n.vy * 0.3;
624
+ n.vx *= 0.75; n.vy *= 0.75;
625
+ n.x = Math.max(80, Math.min(W-80, n.x));
626
+ n.y = Math.max(40, Math.min(H-40, n.y));
627
+ });
628
+ }
629
+
630
+ // Measure text widths
631
+ const measure = document.createElementNS('http://www.w3.org/2000/svg','text');
632
+ measure.setAttribute('font-size','12'); measure.setAttribute('font-weight','600');
633
+ measure.setAttribute('font-family','system-ui');
634
+ svg.appendChild(measure);
635
+ const widths = {};
636
+ nodes.forEach(n => { measure.textContent = n.name; widths[n.name] = measure.getComputedTextLength(); });
637
+ svg.removeChild(measure);
638
+
639
+ // Render edges
640
+ edges.forEach(e => {
641
+ if (!e.source || !e.target) {
642
+ return;
643
+ }
644
+ const sw = (widths[e.source.name]||80)/2 + 12;
645
+ const tw = (widths[e.target.name]||80)/2 + 12;
646
+ const dx = e.target.x - e.source.x, dy = e.target.y - e.source.y;
647
+ const d = Math.sqrt(dx*dx+dy*dy)||1;
648
+ const x1 = e.source.x + dx/d*sw, y1 = e.source.y + dy/d*14;
649
+ const x2 = e.target.x - dx/d*tw, y2 = e.target.y - dy/d*14;
650
+ const line = document.createElementNS('http://www.w3.org/2000/svg','line');
651
+ line.setAttribute('x1',x1); line.setAttribute('y1',y1);
652
+ line.setAttribute('x2',x2); line.setAttribute('y2',y2);
653
+ line.setAttribute('class','edge');
654
+ const edgeColors = { implicit: '#475569', devDependency: '#888888', peerDependency: '#CC8800' };
655
+ line.setAttribute('stroke', edgeColors[e.type] || '#64748b');
656
+ line.setAttribute('stroke-width', '1.5');
657
+ if (e.type === 'implicit' || e.type === 'peerDependency') line.setAttribute('stroke-dasharray', '6,4');
658
+ if (e.type === 'devDependency') line.setAttribute('stroke-dasharray', '3,3');
659
+ svg.appendChild(line);
660
+ });
661
+
662
+ // Render nodes
663
+ nodes.forEach(n => {
664
+ const w = (widths[n.name]||80) + 24;
665
+ const h = 32;
666
+ const isApp = n.type === 'application';
667
+ const fill = isApp ? '#fbbf24' : '#38bdf8';
668
+ const textFill = '#0f172a';
669
+ const stroke = isApp ? '#f59e0b' : '#0284c7';
670
+
671
+ const g = document.createElementNS('http://www.w3.org/2000/svg','g');
672
+ g.setAttribute('class','node');
673
+ g.setAttribute('transform','translate('+(n.x - w/2)+','+(n.y - h/2)+')');
674
+ const rect = document.createElementNS('http://www.w3.org/2000/svg','rect');
675
+ rect.setAttribute('width', w); rect.setAttribute('height', h);
676
+ rect.setAttribute('fill', fill); rect.setAttribute('stroke', stroke); rect.setAttribute('stroke-width','1.5');
677
+ g.appendChild(rect);
678
+ const text = document.createElementNS('http://www.w3.org/2000/svg','text');
679
+ text.setAttribute('x', w/2); text.setAttribute('y', h/2 + 4.5);
680
+ text.setAttribute('text-anchor','middle'); text.setAttribute('fill', textFill);
681
+ text.textContent = n.name;
682
+ g.appendChild(text);
683
+
684
+ g.addEventListener('mouseenter', (ev) => {
685
+ const deps = depMap[n.name] || [];
686
+ const rdeps = rdepMap[n.name] || [];
687
+
688
+ // Build tooltip using safe DOM methods
689
+ tooltip.textContent = '';
690
+
691
+ const heading = document.createElement('h3');
692
+ heading.textContent = n.name;
693
+ const badge = document.createElement('span');
694
+ badge.className = 'type-badge';
695
+ badge.style.background = fill;
696
+ badge.style.color = '#0f172a';
697
+ badge.textContent = n.type;
698
+ heading.appendChild(badge);
699
+ tooltip.appendChild(heading);
700
+
701
+ if (deps.length) {
702
+ const label = document.createElement('div');
703
+ label.className = 'dep-section';
704
+ label.textContent = 'Depends on:';
705
+ tooltip.appendChild(label);
706
+ const ul = document.createElement('ul');
707
+ deps.forEach(d => { const li = document.createElement('li'); li.textContent = d; ul.appendChild(li); });
708
+ tooltip.appendChild(ul);
709
+ }
710
+ if (rdeps.length) {
711
+ const label = document.createElement('div');
712
+ label.className = 'dep-section';
713
+ label.textContent = 'Required by:';
714
+ tooltip.appendChild(label);
715
+ const ul = document.createElement('ul');
716
+ rdeps.forEach(d => { const li = document.createElement('li'); li.textContent = d; ul.appendChild(li); });
717
+ tooltip.appendChild(ul);
718
+ }
719
+ if (!deps.length && !rdeps.length) {
720
+ const empty = document.createElement('div');
721
+ empty.style.marginTop = '6px';
722
+ empty.style.color = '#64748b';
723
+ empty.textContent = 'No dependencies';
724
+ tooltip.appendChild(empty);
725
+ }
726
+
727
+ tooltip.style.display = 'block';
728
+ const rect = tooltip.getBoundingClientRect();
729
+ tooltip.style.left = Math.min(ev.clientX + 12, W - rect.width - 12) + 'px';
730
+ tooltip.style.top = Math.min(ev.clientY + 12, H - rect.height - 12) + 'px';
731
+ });
732
+ g.addEventListener('mouseleave', () => { tooltip.style.display = 'none'; });
733
+ svg.appendChild(g);
734
+ });
735
+ <\/script>
736
+ </body>
737
+ </html>`])),o.apps,o.libs,o.edges.length,JSON.stringify(o).replaceAll("</",String.raw`<\/`))},"projectGraphToHtml"),nm={group:"Workspace",description:"Visualize the project dependency graph",examples:[["vis graph","Show colored dependency graph (TUI in TTY, ASCII otherwise)"],["vis graph --format=ascii","Force ASCII tree output"],["vis graph --format=dot","Output in Graphviz DOT format"],["vis graph --format=html --output=graph.html","Generate interactive HTML graph"],["vis graph --format=json --output=graph.json","Save JSON graph to file"]],execute:Vt(async({logger:t,options:e,visConfig:r,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const i=n,{workspace:o}=Kr(i,r),s=Hn(i,o),l=!!process.stdout.isTTY&&!De,u=e.format??(l?"tui":"ascii"),g=e.output,p=e.depth??1/0;let h;switch(u){case"dot":{h=Xa(s);break}case"html":{h=rm(s);break}case"json":{h=JSON.stringify(tm(s),void 0,2);break}case"tui":{if(!l){h=ii(s,p);break}const m=r?.tui?.autoExit===!0?3:typeof r?.tui?.autoExit=="number"?r.tui.autoExit:0;process.stdin.isTTY&&typeof process.stdin.setRawMode=="function"&&(process.stdin.setRawMode(!0),process.stdin.ref(),process.stdin.resume());const y=setInterval(()=>{},1e3),b=new Uh(s);await st(H.createElement(Zh,{autoExitSeconds:m,store:b}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit(),clearInterval(y);return}default:h=ii(s,p)}g?(_(g,h,"utf8"),t.info(`Graph written to ${g}`)):t.info(h)},"execute"),name:"graph",options:[{alias:"f",defaultValue:void 0,description:"Output format: tui, ascii, dot, json, html (default: tui in TTY, ascii otherwise)",name:"format",type:String},{alias:"o",description:"Write output to file instead of stdout",name:"output",type:String},{alias:"d",description:"Maximum dependency tree depth for ASCII output (default: unlimited)",name:"depth",type:Number}]},Ys=["pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","applypatch-msg","pre-applypatch","post-applypatch","pre-rebase","post-rewrite","post-checkout","post-merge","pre-push","pre-auto-gc"],Lr=".vis-hooks";var om=Object.defineProperty,Fr=$((t,e)=>om(t,"name",{value:e,configurable:!0}),"o$5");const im=/\/$/,sm=Fr(t=>{let e='"$0"';for(let r=0;r<t;r+=1)e=`"$(dirname ${e})"`;return e},"nestedDirname"),am=Fr(t=>{const e=t.split("/").filter(r=>r!==""&&r!==".").length+2;return`#!/usr/bin/env sh
96
738
  { [ "$VIS_GIT_HOOKS" = "2" ]; } && set -x
97
739
  n=$(basename "$0")
98
740
  s=$(dirname "$(dirname "$0")")/$n
@@ -101,47 +743,112 @@ s=$(dirname "$(dirname "$0")")/$n
101
743
 
102
744
  { [ "\${VIS_GIT_HOOKS-}" = "0" ]; } && exit 0
103
745
 
104
- d=${uo(t)}
746
+ d=${sm(e)}
105
747
  export PATH="$d/node_modules/.bin:$PATH"
106
748
  sh -e "$s" "$@"
107
749
  c=$?
108
750
 
109
751
  [ $c != 0 ] && echo "vis - $n script failed (code $c)"
110
752
  [ $c = 127 ] && echo "vis - command not found in PATH=$PATH"
111
- exit $c`},"hookScript"),Dt=fe((e=ge)=>{if(process.env.VIS_GIT_HOOKS==="0")return{isError:!1,message:"skip install (git hooks disabled via VIS_GIT_HOOKS=0)"};if(e.includes(".."))return{isError:!0,message:'".." is not allowed in hooks directory path'};const t=F("git",["rev-parse","--show-prefix"]);if(t.status===void 0||t.status===null)return{isError:!0,message:"git command not found"};if(t.status!==0)return{isError:!1,message:".git directory not found (not a git repository)"};const a=fe((l="")=>u(e,"_",l),"internal"),n=t.stdout.toString().trim().replace(po,""),r=n?`${n}/${e}/_`:`${e}/_`,o=F("git",["config","--local","core.hooksPath"]),s=o.status===0?o.stdout?.toString().trim():"";if(s&&s!==r)return{isError:!1,message:`core.hooksPath is already set to "${s}", skipping`};const{status:i,stderr:c}=F("git",["config","core.hooksPath",r]);if(i==null)return{isError:!0,message:"git command not found"};if(i)return{isError:!0,message:String(c)};Oe(a(),{recursive:!0}),E(a(".gitignore"),"*"),E(a("h"),go(e),{mode:493});for(const l of Ft)E(a(l),`#!/usr/bin/env sh
112
- . "$(dirname "$0")/h"`,{mode:493});return{isError:!1,message:""}},"installHooks");var fo=Object.defineProperty,mo=y((e,t)=>fo(e,"name",{value:t,configurable:!0}),"t$1");const Jt=[".lintstagedrc.json",".lintstagedrc"],Wt=[".lintstagedrc.yaml",".lintstagedrc.yml",".lintstagedrc.mjs","lint-staged.config.mjs",".lintstagedrc.cjs","lint-staged.config.cjs",".lintstagedrc.js","lint-staged.config.js",".lintstagedrc.ts","lint-staged.config.ts",".lintstagedrc.mts","lint-staged.config.mts",".lintstagedrc.cts","lint-staged.config.cts"],_e=[...Jt,...Wt],ho=[/^((?:[A-Z_][A-Z0-9_]*(?:=\S*)?\s+)*)(pnpm|pnpm exec|npx|yarn|yarn run|npm exec|npm run|bunx|bun run|bun x)\s+lint-staged\b/,/^((?:[A-Z_][A-Z0-9_]*(?:=\S*)?\s+)*)lint-staged\b/],yo=["husky","lint-staged"],vo=/\(is-ci \|\| husky \|\| exit 0\)\s*&&\s*/g,ko=/\bhusky(?:\s+install)?\s*&&\s*/g,$o=/\s*&&\s*husky(?:\s+install)?/g,wo=/\s*\|\|\s*husky(?:\s+install)?/g,bo=[vo,ko,$o,wo],_t=mo(e=>{if(e==="husky"||e==="husky install")return;let t=e;for(const a of bo)t=t.replace(a,"");return t=t.trim(),t===e?e:t||void 0},"cleanHuskyFromScript");var So=Object.defineProperty,z=y((e,t)=>So(e,"name",{value:t,configurable:!0}),"a$1");const jo=[".husky",".config/husky"],Co=/^\. "\$\(dirname "\$0"\)\/common\.sh"\s*/m,zt=z(e=>{for(const t of jo)if(k(u(e,t))&&Ie(u(e,t)).isDirectory())return t},"detectHuskyDirectory"),xo=z((e,t)=>{const a=new Map,n=u(e,t),r=new Set(Ft);for(const o of Be(n)){if(o==="_"||o===".gitignore"||o.startsWith("."))continue;const s=u(n,o);Ie(s).isFile()&&(!r.has(o)&&o!=="common.sh"||a.set(o,B(s,"utf8")))}return a},"readHuskyHooks"),Eo=z(e=>e.replace(Co,""),"transformHookScript"),Ht=z(e=>k(u(e,"pnpm-lock.yaml"))||k(u(e,"pnpm-workspace.yaml"))?"pnpm":k(u(e,"yarn.lock"))?"yarn":k(u(e,"bun.lockb"))||k(u(e,"bun.lock"))?"bun":"npm","detectPackageManager"),Ro=z((e,t)=>{const a=Ht(e),n={bun:["bun","remove","husky"],npm:["npm","uninstall","husky"],pnpm:["pnpm","remove","husky"],yarn:["yarn","remove","husky"]},[r,...o]=n[a];t.info(`Removing husky package via ${a}...`);const s=F(r,o,{cwd:e,encoding:"utf8",stdio:"pipe"});return s.status!==0?(t.info(`Warning: failed to remove husky via ${a} (${s.stderr?.trim()??"unknown error"})`),!1):!0},"uninstallHuskyPackage"),No=z((e,t,a)=>{const n=_t(a);if(n!==a)return n?(e[t]=n,`updated "${t}" script`):(delete e[t],`removed "${t}" script (was: "${a}")`)},"processScript"),Oo=z(e=>{const t=u(e,"package.json");if(!k(t))return{modified:!1,removedScriptReferences:[]};const a=B(t,"utf8"),n=JSON.parse(a),r=[],o=n.scripts;if(o)for(const[s,i]of Object.entries(o)){if(typeof i!="string")continue;const c=No(o,s,i);c&&r.push(c)}return r.length>0&&E(t,`${JSON.stringify(n,void 0,4)}
113
- `,"utf8"),{modified:r.length>0,removedScriptReferences:r}},"cleanPackageJsonScripts"),Gt=z((e,t,a)=>{const n=zt(e);if(!n)return{isError:!0,message:"No husky installation found (.husky/ or .config/husky/)"};a.info(`Found husky at ${n}/`);const r=xo(e,n);r.size===0&&a.info("No user-defined hooks found in husky directory.");const o=F("git",["config","--local","core.hooksPath"]),s=o.status===0?o.stdout?.toString().trim():"";s&&(s===".husky/_"||s.startsWith(".husky"))&&F("git",["config","--local","--unset","core.hooksPath"]);const i=Dt(t);if(i.isError)return i;i.message&&a.info(i.message);const c=u(e,t);Oe(c,{recursive:!0});let l=0;for(const[f,w]of r){if(f==="common.sh"){E(u(c,f),w,{mode:493}),a.info(" Copied common.sh");continue}const $=Eo(w);E(u(c,f),$,{mode:493}),l+=1,a.info(` Migrated ${f}`)}Ro(e,a);const p=Oo(e);if(p.modified){a.info("Updated package.json scripts:");for(const f of p.removedScriptReferences)a.info(` ${f}`)}const g=u(e,n);return ee(g,{force:!0,recursive:!0}),a.info(`Removed ${n}/`),{isError:!1,message:`Migration complete: ${l} hook${l===1?"":"s"} migrated from ${n}/ to ${t}/`}},"migrateFromHusky");var Bo=Object.defineProperty,Io=y((e,t)=>Bo(e,"name",{value:t,configurable:!0}),"e$1");const Po=Io((e=ge)=>{if(F("git",["config","--local","core.hooksPath"]).status!==0)return{isError:!1,message:"No custom hooks path configured"};const{status:t,stderr:a}=F("git",["config","--local","--unset","core.hooksPath"]);if(t==null)return{isError:!0,message:"git command not found"};if(t&&t!==5)return{isError:!0,message:String(a)};const n=u(e,"_");return k(n)&&ee(n,{force:!0,recursive:!0}),{isError:!1,message:""}},"uninstallHooks");var Ao=Object.defineProperty,ne=y((e,t)=>Ao(e,"name",{value:t,configurable:!0}),"n");const Lo=ne(e=>new Promise(t=>{const a=Ca({input:process.stdin,output:process.stdout});a.question(`${e} (y/N) `,n=>{a.close();const r=n.trim().toLowerCase();t(r==="y"||r==="yes")})}),"confirmPrompt"),To=ne(async(e,t)=>{const a=lt(),n=zt(a);if(n){if(t.info(`Existing husky installation found at ${n}/`),await Lo("Would you like to migrate your husky hooks to vis?")){const o=Gt(a,e,t);if(o.isError)throw new Error(o.message);o.message&&t.info(o.message);return}t.info("Aborting install. Remove husky first or run 'vis hook migrate' to migrate.");return}t.info(`Installing git hooks in ${e}/...`);const r=Dt(e);if(r.message){if(r.isError)throw new Error(r.message);t.info(r.message);return}k(u(a,e,"pre-commit"))||E(u(a,e,"pre-commit"),`#!/usr/bin/env sh
114
- `,{mode:493}),t.info("Git hooks installed successfully.")},"executeInstall"),Uo=ne((e,t)=>{const a=lt(),n=Gt(a,e,t);if(n.isError)throw new Error(n.message);n.message&&t.info(n.message)},"executeMigrate"),Mo=ne((e,t)=>{t.info("Removing git hooks...");const a=Po(e);if(a.message){if(a.isError)throw new Error(a.message);t.info(a.message);return}t.info("Git hooks removed successfully.")},"executeUninstall"),Vo={argument:{description:"Action to perform: install, uninstall, or migrate",name:"action",type:String},description:"Manage git hooks for the workspace",env:[{defaultValue:void 0,description:"Set to 0 to disable git hooks, set to 2 for debug output",name:"VIS_GIT_HOOKS",type:String}],examples:[["vis hook install","Install git hooks in .vis-hooks/"],["vis hook uninstall","Remove git hooks and reset core.hooksPath"],["vis hook migrate","Migrate from husky to vis hooks"],["vis hook install --hooks-dir=.githooks","Install hooks in a custom directory"]],execute:ne(async({argument:e,logger:t,options:a})=>{const n=e[0]??"install",r=a["hooks-dir"]??ge;switch(n){case"install":{await To(r,t);break}case"migrate":{Uo(r,t);break}case"uninstall":{Mo(r,t);break}default:throw new Error(`Unknown action "${n}". Use "install", "uninstall", or "migrate".`)}},"execute"),name:"hook",options:[{defaultValue:ge,description:"Custom hooks directory",name:"hooks-dir",type:String}]};var Fo=Object.defineProperty,ke=y((e,t)=>Fo(e,"name",{value:t,configurable:!0}),"e");const ze=ke(e=>{try{const t=B(e,"utf8");return JSON.parse(t)}catch{return}},"readJsonFile"),qt=ke(e=>{if(!k(e))return!1;try{return JSON.parse(B(e,"utf8")),!0}catch{return!1}},"isJsonFile"),Do=/\n([ \t]+)"/,Kt=ke(e=>Do.exec(e)?.[1]?.length??4,"detectJsonIndent"),Jo=ke((e,t)=>{if(!k(e))return!1;const a=B(e,"utf8");let n;try{n=JSON.parse(a)}catch{return!1}const r=t(n);if(r===void 0)return!1;const o=Kt(a);return E(e,`${JSON.stringify(r,void 0,o)}
115
- `,"utf8"),!0},"editJsonFile");var Wo=Object.defineProperty,H=y((e,t)=>Wo(e,"name",{value:t,configurable:!0}),"d$3");const _o=/\blint-staged\b/g,zo=H((e,t)=>{let a=!1;const n={...e};for(const[r,o]of Object.entries(n)){if(typeof o!="string")continue;let s=_t(o);s&&(s=s.replaceAll(_o,"vis staged").trim()||void 0),s!==o&&(s?n[r]=s:delete n[r],a=!0,t.rewrittenScriptCount+=1)}return{modified:a,scripts:n}},"rewriteScripts"),Yt=H((e,t,a,n)=>{const r=u(e,"package.json");k(r)&&Jo(r,o=>{let s=!1;for(const c of yo){const l=o.dependencies,p=o.devDependencies;l?.[c]&&(delete l[c],s=!0,n.removedPackageCount+=1),p?.[c]&&(delete p[c],s=!0,n.removedPackageCount+=1)}if(Object.keys(a).length>0)switch(t){case"bun":case"npm":{const c=o.overrides??{};o.overrides={...c,...a},s=!0;break}case"pnpm":{const c=o.pnpm??{},l=c.overrides??{};c.overrides={...l,...a},o.pnpm=c,s=!0;break}case"yarn":{const c=o.resolutions??{};o.resolutions={...c,...a},s=!0;break}}const i=o.scripts;if(i){const c=zo(i,n);c.modified&&(o.scripts=c.scripts,s=!0)}return s?o:void 0})},"rewritePackageJson"),Ho=H((e,t,a,n)=>{try{const{workspace:r}=ye(e);for(const o of Object.values(r.projects)){const s=u(e,o.root);Yt(s,t,a,n)}}catch{}},"migrateMonorepoPackages"),Go=H(e=>e.startsWith("- ")||e!==""&&!e.includes(":")&&!e.startsWith("#"),"isCatalogSectionEnd"),qo=H(e=>{let t=!1,a="";const n=new Set;for(const r of e){const o=r.trim();if(o==="catalog:"){t=!0;continue}if(!t)continue;if(Go(o))break;const s=o.includes(":")?o.split(":")[0]?.trim():void 0;s&&(n.add(s),a=a||r.slice(0,r.indexOf(o)))}return{entries:n,indent:a||" "}},"parseCatalogEntries"),Ko=H((e,t,a)=>{const n=[];let r=!1,o=!1;for(let s=0;s<e.length;s+=1){const i=e[s],c=i.trim();if(n.push(i),c==="catalog:"){o=!0;continue}if(o&&!r){const l=e[s+1]?.trim()??"";(!l.includes(":")||l.startsWith("- ")||!l||l==="catalog:")&&(n.push(...t),r=!0,o=!1)}}return r||(a.includes("catalog:")||n.push("catalog:"),n.push(...t)),n},"insertCatalogEntries"),Yo=H((e,t)=>{const a=u(e,"pnpm-workspace.yaml");if(!k(a)||Object.keys(t).length===0)return;const n=B(a,"utf8"),r=n.split(`
116
- `),{entries:o,indent:s}=qo(r),i=[];for(const[l,p]of Object.entries(t))o.has(l)||i.push(`${s}${l}: "${p}"`);if(i.length===0)return;const c=Ko(r,i,n);E(a,c.join(`
117
- `),"utf8")},"updatePnpmWorkspaceCatalog"),Xo=H((e,t,a,n,r,o)=>{const s=a.overrides??{};if(n.dryRun){r.info("[dry-run] Would rewrite package.json files (remove husky/lint-staged, rewrite scripts)"),Object.keys(s).length>0&&r.info(`[dry-run] Would add overrides: ${JSON.stringify(s)}`);return}Yt(e,t,s,o),r.info("Rewritten root package.json"),Ho(e,t,s,o),t==="pnpm"&&Yo(e,s)},"migrateDeps");var Zo=Object.defineProperty,He=y((e,t)=>Zo(e,"name",{value:t,configurable:!0}),"i$1");const Qo=He(()=>({gitHooksConfigured:!1,inlinedLintStagedConfigCount:0,manualSteps:[],mergedStagedConfigCount:0,removedConfigCount:0,removedPackageCount:0,rewrittenScriptCount:0,warnings:[]}),"createMigrationReport"),me=He((e,t)=>{!e||e.warnings.includes(t)||e.warnings.push(t)},"addMigrationWarning"),Xt=He((e,t)=>{!e||e.manualSteps.includes(t)||e.manualSteps.push(t)},"addManualStep");var es=Object.defineProperty,C=y((e,t)=>es(e,"name",{value:t,configurable:!0}),"r$1");const ts=/\bstaged\s*:/,nt=/(defineConfig\(\{)/,rt=/(export\s+default\s+\{)/;C(e=>_e.some(t=>k(u(e,t))),"hasStandaloneLintStagedConfig");const as=C(e=>{for(const a of Wt)if(k(u(e,a)))return!0;const t=u(e,".lintstagedrc");return k(t)&&!qt(t)},"hasUnsupportedLintStagedConfig"),ns=C(e=>{const t=pt(e);if(!t)return!1;const a=B(t,"utf8");return ts.test(a)},"hasStagedConfigInVisConfig"),rs=C(e=>{const t=u(e,"package.json");if(k(t)&&ze(t)?.["lint-staged"])return"package.json";for(const a of _e)if(k(u(e,a)))return a},"detectLintStagedConfig"),os=C(e=>ze(u(e,"package.json"))?.["lint-staged"],"extractLintStagedFromPackageJson"),ss=C(e=>ze(e),"parseLintStagedJsonFile"),Ce=C(e=>` staged: {
118
- ${Object.entries(e).map(([t,a])=>{const n=Array.isArray(a)?`[${a.map(r=>JSON.stringify(r)).join(", ")}]`:JSON.stringify(a);return` ${JSON.stringify(t)}: ${n}`}).join(`,
753
+ exit $c`},"hookScript"),Xs=Fr((t=Lr)=>{if(process.env.VIS_GIT_HOOKS==="0")return{isError:!1,message:"skip install (git hooks disabled via VIS_GIT_HOOKS=0)"};if(t.includes(".."))return{isError:!0,message:'".." is not allowed in hooks directory path'};const e=Oe("git",["rev-parse","--show-prefix"]);if(e.status===void 0||e.status===null)return{isError:!0,message:"git command not found"};if(e.status!==0)return{isError:!1,message:".git directory not found (not a git repository)"};const r=Fr((g="")=>A(t,"_",g),"internal"),n=e.stdout.toString().trim().replace(im,""),i=n?`${n}/${t}/_`:`${t}/_`,o=Oe("git",["config","--local","core.hooksPath"]),s=o.status===0?o.stdout?.toString().trim():"";if(s&&s!==i)return{isError:!1,message:`core.hooksPath is already set to "${s}", skipping`};const{status:l,stderr:u}=Oe("git",["config","core.hooksPath",i]);if(l==null)return{isError:!0,message:"git command not found"};if(l)return{isError:!0,message:String(u)};ye(r(),{recursive:!0}),_(r(".gitignore"),"*"),_(r("h"),am(t),{mode:493});for(const g of Ys)_(r(g),`#!/usr/bin/env sh
754
+ . "$(dirname "$0")/h"`,{mode:493});return{isError:!1,message:""}},"installHooks");var cm=Object.defineProperty,lm=$((t,e)=>cm(t,"name",{value:e,configurable:!0}),"t$7");const Ks=[".lintstagedrc.json",".lintstagedrc"],Qs=[".lintstagedrc.yaml",".lintstagedrc.yml",".lintstagedrc.mjs","lint-staged.config.mjs",".lintstagedrc.cjs","lint-staged.config.cjs",".lintstagedrc.js","lint-staged.config.js",".lintstagedrc.ts","lint-staged.config.ts",".lintstagedrc.mts","lint-staged.config.mts",".lintstagedrc.cts","lint-staged.config.cts"],lo=[...Ks,...Qs],dm=[/^((?:[A-Z_][A-Z0-9_]*(?:=\S*)?\s+)*)(pnpm|pnpm exec|npx|yarn|yarn run|npm exec|npm run|bunx|bun run|bun x)\s+lint-staged\b/,/^((?:[A-Z_][A-Z0-9_]*(?:=\S*)?\s+)*)lint-staged\b/],um=["husky","lint-staged"],pm=/\(is-ci \|\| husky \|\| exit 0\)\s*&&\s*/g,fm=/\bhusky(?:\s+install)?\s*&&\s*/g,gm=/\s*&&\s*husky(?:\s+install)?/g,hm=/\s*\|\|\s*husky(?:\s+install)?/g,mm=[pm,fm,gm,hm],Zs=lm(t=>{if(t==="husky"||t==="husky install")return;let e=t;for(const r of mm)e=e.replace(r,"");return e=e.trim(),e===t?t:e||void 0},"cleanHuskyFromScript");var ym=Object.defineProperty,gt=$((t,e)=>ym(t,"name",{value:e,configurable:!0}),"a$3");const vm=[".husky",".config/husky"],wm=/^\. "\$\(dirname "\$0"\)\/common\.sh"\s*/m,ea=gt(t=>{for(const e of vm)if(V(A(t,e))&&_r(A(t,e)).isDirectory())return e},"detectHuskyDirectory"),km=gt((t,e)=>{const r=new Map,n=A(t,e),i=new Set(Ys);for(const o of lt(n)){if(o==="_"||o===".gitignore"||o.startsWith("."))continue;const s=A(n,o);_r(s).isFile()&&(!i.has(o)&&o!=="common.sh"||r.set(o,Y(s,"utf8")))}return r},"readHuskyHooks"),bm=gt(t=>t.replace(wm,""),"transformHookScript"),ta=gt(t=>V(A(t,"pnpm-lock.yaml"))||V(A(t,"pnpm-workspace.yaml"))?"pnpm":V(A(t,"yarn.lock"))?"yarn":V(A(t,"bun.lockb"))||V(A(t,"bun.lock"))?"bun":"npm","detectPackageManager"),$m=gt((t,e)=>{const r=ta(t),n={bun:["bun","remove","husky"],npm:["npm","uninstall","husky"],pnpm:["pnpm","remove","husky"],yarn:["yarn","remove","husky"]},[i,...o]=n[r];e.info(`Removing husky package via ${r}...`);const s=Oe(i,o,{cwd:t,encoding:"utf8",stdio:"pipe"});return s.status!==0?(e.info(`Warning: failed to remove husky via ${r} (${s.stderr?.trim()??"unknown error"})`),!1):!0},"uninstallHuskyPackage"),xm=gt((t,e,r)=>{const n=Zs(r);if(n!==r)return n?(t[e]=n,`updated "${e}" script`):(delete t[e],`removed "${e}" script (was: "${r}")`)},"processScript"),Sm=gt(t=>{const e=A(t,"package.json");if(!V(e))return{modified:!1,removedScriptReferences:[]};const r=Y(e,"utf8"),n=JSON.parse(r),i=[],o=n.scripts;if(o)for(const[s,l]of Object.entries(o)){if(typeof l!="string")continue;const u=xm(o,s,l);u&&i.push(u)}return i.length>0&&_(e,`${JSON.stringify(n,void 0,4)}
755
+ `,"utf8"),{modified:i.length>0,removedScriptReferences:i}},"cleanPackageJsonScripts"),ra=gt((t,e,r)=>{const n=ea(t);if(!n)return{isError:!0,message:"No husky installation found (.husky/ or .config/husky/)"};r.info(`Found husky at ${n}/`);const i=km(t,n);i.size===0&&r.info("No user-defined hooks found in husky directory.");const o=Oe("git",["config","--local","core.hooksPath"]),s=o.status===0?o.stdout?.toString().trim():"";s&&(s===".husky/_"||s.startsWith(".husky"))&&Oe("git",["config","--local","--unset","core.hooksPath"]);const l=Xs(e);if(l.isError)return l;l.message&&r.info(l.message);const u=A(t,e);ye(u,{recursive:!0});let g=0;for(const[m,y]of i){if(m==="common.sh"){_(A(u,m),y,{mode:493}),r.info(" Copied common.sh");continue}const b=bm(y);_(A(u,m),b,{mode:493}),g+=1,r.info(` Migrated ${m}`)}$m(t,r);const p=Sm(t);if(p.modified){r.info("Updated package.json scripts:");for(const m of p.removedScriptReferences)r.info(` ${m}`)}const h=A(t,n);return it(h,{force:!0,recursive:!0}),r.info(`Removed ${n}/`),{isError:!1,message:`Migration complete: ${g} hook${g===1?"":"s"} migrated from ${n}/ to ${e}/`}},"migrateFromHusky");var Cm=Object.defineProperty,Em=$((t,e)=>Cm(t,"name",{value:e,configurable:!0}),"e$2");const jm=Em((t=Lr)=>{if(Oe("git",["config","--local","core.hooksPath"]).status!==0)return{isError:!1,message:"No custom hooks path configured"};const{status:e,stderr:r}=Oe("git",["config","--local","--unset","core.hooksPath"]);if(e==null)return{isError:!0,message:"git command not found"};if(e&&e!==5)return{isError:!0,message:String(r)};const n=A(t,"_");return V(n)&&it(n,{force:!0,recursive:!0}),{isError:!1,message:""}},"uninstallHooks");var Tm=Object.defineProperty,mr=$((t,e)=>Tm(t,"name",{value:e,configurable:!0}),"n$3");const Am=mr(t=>new Promise(e=>{const r=Nt({input:process.stdin,output:process.stdout});r.question(`${t} (y/N) `,n=>{r.close();const i=n.trim().toLowerCase();e(i==="y"||i==="yes")})}),"confirmPrompt"),Im=mr(async(t,e)=>{const r=ji(),n=ea(r);if(n){if(e.info(`Existing husky installation found at ${n}/`),await Am("Would you like to migrate your husky hooks to vis?")){const o=ra(r,t,e);if(o.isError)throw new Error(o.message);o.message&&e.info(o.message);return}e.info("Aborting install. Remove husky first or run 'vis hook migrate' to migrate.");return}e.info(`Installing git hooks in ${t}/...`);const i=Xs(t);if(i.message){if(i.isError)throw new Error(i.message);e.info(i.message);return}V(A(r,t,"pre-commit"))||_(A(r,t,"pre-commit"),`#!/usr/bin/env sh
756
+ `,{mode:493}),e.info("Git hooks installed successfully.")},"executeInstall"),Rm=mr((t,e)=>{const r=ji(),n=ra(r,t,e);if(n.isError)throw new Error(n.message);n.message&&e.info(n.message)},"executeMigrate"),Om=mr((t,e)=>{e.info("Removing git hooks...");const r=jm(t);if(r.message){if(r.isError)throw new Error(r.message);e.info(r.message);return}e.info("Git hooks removed successfully.")},"executeUninstall"),Pm={group:"Scaffold & Config",argument:{description:"Action to perform: install, uninstall, or migrate",name:"action",type:String},description:"Manage git hooks for the workspace",env:[{defaultValue:void 0,description:"Set to 0 to disable git hooks, set to 2 for debug output",name:"VIS_GIT_HOOKS",type:String}],examples:[["vis hook install","Install git hooks in .vis-hooks/"],["vis hook uninstall","Remove git hooks and reset core.hooksPath"],["vis hook migrate","Migrate from husky to vis hooks"],["vis hook install --hooks-dir=.githooks","Install hooks in a custom directory"]],execute:mr(async({argument:t,logger:e,options:r})=>{const n=t[0]??"install",i=r["hooks-dir"]??Lr;switch(n){case"install":{await Im(i,e);break}case"migrate":{Rm(i,e);break}case"uninstall":{Om(i,e);break}default:throw new Error(`Unknown action "${n}". Use "install", "uninstall", or "migrate".`)}},"execute"),name:"hook",options:[{defaultValue:Lr,description:"Custom hooks directory",name:"hooks-dir",type:String}]};var Nm=Object.defineProperty,na=$((t,e)=>Nm(t,"name",{value:e,configurable:!0}),"f$5");const Jt=F(Ce(),".vis"),oa=[F(Ce(),".zshrc"),F(Ce(),".zshenv"),F(Ce(),".bashrc"),F(Ce(),".bash_profile"),F(Ce(),".profile"),F(Ce(),".config","fish","config.fish")],Dm=na(t=>{const e=[];for(const r of oa)if(V(r))try{const n=Y(r,"utf8").split(`
757
+ `),i=n.filter(o=>!o.includes(".vis/bin")&&!o.includes("VIS_HOME")&&!o.includes("# vis "));i.length!==n.length&&(_(r,i.join(`
758
+ `)),e.push(r))}catch{t.warn(`warning: could not clean ${r}`)}return e},"cleanShellProfiles"),Mm={group:"System",description:"Remove vis from the system (self-uninstall)",examples:[["vis implode","Interactive uninstall"],["vis implode --yes","Non-interactive uninstall (CI)"]],execute:na(async({logger:t,options:e})=>{if(!V(Jt)){t.info("vis is not installed (no ~/.vis directory found).");return}t.info("This will remove:"),t.info(` ${Jt}/`);const r=oa.filter(i=>V(i)&&Y(i,"utf8").includes(".vis"));for(const i of r)t.info(` Lines in ${i}`);if(!e.yes){if(!process.stdin.isTTY)throw new Error("Non-interactive terminal. Use --yes to confirm.");const i=Nt({input:process.stdin,output:process.stdout}),o=await new Promise(s=>{i.question(`
759
+ Type "uninstall" to confirm: `,s)});if(i.close(),o.trim()!=="uninstall"){t.info("Aborted.");return}}const n=Dm(t);for(const i of n)t.info(`Cleaned ${i}`);try{it(Jt,{force:!0,recursive:!0}),t.info(`
760
+ ✓ Removed ${Jt}`)}catch(i){throw new Error(`Failed to remove ${Jt}: ${i instanceof Error?i.message:String(i)}`)}t.info("✓ vis has been uninstalled.")},"execute"),name:"implode",options:[{alias:"y",defaultValue:!1,description:"Skip confirmation prompt",name:"yes",type:Boolean}]};var Bm=Object.defineProperty,Ut=$((t,e)=>Bm(t,"name",{value:e,configurable:!0}),"c$5");const Lm=Ut((t,e)=>new Promise(r=>{t.question(e,n=>{r(n.trim())})}),"ask"),qt=Ut(async(t,e,r=!0)=>{const n=await Lm(t,`${e} ${r?"[Y/n]":"[y/N]"} `);return n===""?r:n.toLowerCase()==="y"||n.toLowerCase()==="yes"},"confirm"),ia=Ut((t,e)=>{const r=[],n=Object.entries(e.allowBuilds).filter(([,o])=>o).map(([o])=>` "${o}": true,`).join(`
761
+ `);let i=` allowBuilds: ${n?`{
762
+ ${n}
763
+ }`:"{}"},`;return e.enableSocket&&(i+=`
764
+ socket: { enabled: true },`),r.push(` security: {
765
+ ${i}
766
+ },`),e.staged&&r.push(` staged: {
767
+ "*.{ts,tsx}": "eslint --fix",
768
+ "*.{ts,tsx,js,jsx,json,md}": "prettier --write",
769
+ },`),`import { defineConfig } from "@visulima/vis/config";
770
+
771
+ export default defineConfig({
772
+ ${r.join(`
773
+
774
+ `)}
775
+ });
776
+ `},"generateConfigContent"),Fm=Ut(async(t,e,r)=>{const n=Nt({input:process.stdin,output:process.stdout});v(`
777
+ vis init — interactive setup
778
+ `);const i=await qt(n," Enable Socket.dev security scanning?");i&&(X(" Socket.dev enabled — scores, alerts, and supply chain data active."),process.env.VIS_SOCKET_TOKEN||Q(" Set VIS_SOCKET_TOKEN for a custom API token (optional).")),v("");const o=await qt(n," Scan for packages with build scripts?"),s={};if(o){v(" Scanning node_modules...");const p=ks(t,{});if(p.length>0){v(` Found ${String(p.length)} package${p.length===1?"":"s"} with build scripts:
779
+ `);for(const h of p){const m=await qt(n,` Allow ${h}?`,!1),y=h.split(" (")[0];s[y]=m,m&&X(` ✓ ${y} approved`)}}else v(" No packages with build scripts found.")}v("");const l=await qt(n," Set up pre-commit hooks (lint-staged)?",!1);let u=!1;(e.name==="pnpm"||e.name==="yarn"||e.name==="npm"||e.name==="bun")&&(v(""),u=await qt(n,` Sync security settings to ${e.name} config?`)),n.close(),v("");const g=ia(e.name,{allowBuilds:s,enableSocket:i,staged:l});if(_(r,g),X(`Created ${r}`),u){const p=Object.fromEntries(Object.entries(s).filter(([,m])=>m)),h=to(e.name,t,p);for(const m of h)X(` ${m}`)}v(""),v(" Setup complete. Your config:"),v(` Security: ${i?"Socket.dev enabled":"defaults only"}`),v(` Build scripts: ${Object.values(s).filter(Boolean).length} approved`),v(` Git hooks: ${l?"lint-staged configured":"not configured"}`),v(` PM sync: ${u?"done":"skipped"}`),v(""),Q(" Run 'vis doctor' to see your project's full health status."),v("")},"runInteractiveInit"),Vm=Ut((t,e,r,n)=>{const i=ia(e.name,{allowBuilds:{},enableSocket:!1,staged:!1});if(_(n,i),X(`Created ${n}`),v(" Secure defaults applied automatically by defineConfig()."),r["sync-native"]){const o=to(e.name,t,{});for(const s of o)X(` ${s}`)}v(""),Q("Run 'vis doctor' for a full health check, or 'vis init' in a terminal for guided setup.")},"runStaticInit"),Um={group:"Scaffold & Config",description:"Initialize vis.config.ts with best-practice security defaults",examples:[["vis init","Interactive setup wizard"],["vis init --no-interactive","Create minimal config without prompts"],["vis init --force","Overwrite existing config"],["vis init --sync-native","Also sync to native PM config files"]],execute:Ut(async({options:t,workspaceRoot:e})=>{const r=e??process.cwd(),n=pe(r),i=er(r);if(i&&!t.force){oe(`Config already exists: ${i}`),Q("Use --force to overwrite, or edit the existing file.");return}const o=i??F(r,"vis.config.ts");process.stdin.isTTY&&t.interactive!==!1&&!t["no-interactive"]?await Fm(r,n,o):Vm(r,n,t,o)},"execute"),name:"init",options:[{defaultValue:!1,description:"Overwrite existing config file",name:"force",type:Boolean},{defaultValue:!1,description:"Skip interactive prompts",name:"no-interactive",type:Boolean},{defaultValue:!1,description:"Sync settings to native PM config files",name:"sync-native",type:Boolean}]};var Gm=Object.defineProperty,zm=$((t,e)=>Gm(t,"name",{value:e,configurable:!0}),"s$6");const Wm={group:"Dependencies",alias:"i",description:"Install dependencies using the detected package manager",examples:[["vis install","Install all dependencies"],["vis i --frozen-lockfile","Install with frozen lockfile (CI mode)"],["vis install --prod","Install production dependencies only"],["vis install --filter app","Install for specific workspace package"],["vis install --ignore-scripts","Install without running lifecycle scripts"],["vis install --no-typosquat-check","Skip typosquat name check"]],execute:zm(async({logger:t,options:e,visConfig:r,workspaceRoot:n})=>{const i=n??process.cwd();if(!e["no-typosquat-check"]&&!await Hi(i,r?.security?.typosquatAllowlist)){process.exitCode=1;return}const o=pe(i),s=dr(e.filter),l=qr(o,{dev:e.dev||!1,filter:s,force:e.force||!1,frozenLockfile:e["frozen-lockfile"]||!1,ignoreScripts:e["ignore-scripts"]||!1,lockfileOnly:e["lockfile-only"]||!1,noOptional:e["no-optional"]||!1,offline:e.offline||!1,prod:e.prod||!1,recursive:e.recursive||!1,silent:e.silent||!1,workspaceRoot:e["workspace-root"]||!1},i,t);l!==0&&(process.exitCode=l)},"execute"),name:"install",options:[{alias:"P",defaultValue:!1,description:"Skip devDependencies",name:"prod",type:Boolean},{alias:"D",defaultValue:!1,description:"Install devDependencies only",name:"dev",type:Boolean},{defaultValue:!1,description:"Use frozen lockfile (CI mode, maps to npm ci)",name:"frozen-lockfile",type:Boolean},{alias:"f",defaultValue:!1,description:"Force reinstall all dependencies",name:"force",type:Boolean},{defaultValue:!1,description:"Skip lifecycle scripts",name:"ignore-scripts",type:Boolean},{defaultValue:!1,description:"Update lockfile without installing",name:"lockfile-only",type:Boolean},{defaultValue:!1,description:"Skip optional dependencies",name:"no-optional",type:Boolean},{defaultValue:!1,description:"Use only cached packages",name:"offline",type:Boolean},{alias:"s",defaultValue:!1,description:"Suppress output",name:"silent",type:Boolean},{alias:"r",defaultValue:!1,description:"Install in all workspace packages",name:"recursive",type:Boolean},{alias:"w",defaultValue:!1,description:"Target workspace root",name:"workspace-root",type:Boolean},{alias:"F",description:"Filter by workspace package name",multiple:!0,name:"filter",type:String},{defaultValue:!1,description:"Skip typosquat name check",name:"no-typosquat-check",type:Boolean}]};var _m=Object.defineProperty,Hm=$((t,e)=>_m(t,"name",{value:e,configurable:!0}),"r$5");const Jm={group:"Dependencies",alias:"ln",argument:{description:"Package name or directory path to link (omit to register current package)",name:"target",type:String},description:"Link a local package for development",examples:[["vis link","Register current package globally"],["vis link react","Link global package to current project"],["vis link ./packages/utils","Link local directory package"]],execute:Hm(async({argument:t,logger:e,workspaceRoot:r})=>{const n=t?.[0]??null,i=r??process.cwd(),o=pe(i),s=Fc(o,n,i,e);s!==0&&(process.exitCode=s)},"execute"),name:"link"};var qm=Object.defineProperty,nn=$((t,e)=>qm(t,"name",{value:e,configurable:!0}),"e$1");const uo=nn(t=>{try{const e=Y(t,"utf8");return JSON.parse(e)}catch{return}},"readJsonFile"),sa=nn(t=>{if(!V(t))return!1;try{return JSON.parse(Y(t,"utf8")),!0}catch{return!1}},"isJsonFile"),Ym=/\n([ \t]+)"/,aa=nn(t=>Ym.exec(t)?.[1]?.length??4,"detectJsonIndent"),Xm=nn((t,e)=>{if(!V(t))return!1;const r=Y(t,"utf8");let n;try{n=JSON.parse(r)}catch{return!1}const i=e(n);if(i===void 0)return!1;const o=aa(r);return _(t,`${JSON.stringify(i,void 0,o)}
780
+ `,"utf8"),!0},"editJsonFile");var Km=Object.defineProperty,ht=$((t,e)=>Km(t,"name",{value:e,configurable:!0}),"f$4");const Qm=/\blint-staged\b/g,Zm=ht((t,e)=>{let r=!1;const n={...t};for(const[i,o]of Object.entries(n)){if(typeof o!="string")continue;let s=Zs(o);s&&(s=s.replaceAll(Qm,"vis staged").trim()||void 0),s!==o&&(s?n[i]=s:delete n[i],r=!0,e.rewrittenScriptCount+=1)}return{modified:r,scripts:n}},"rewriteScripts"),ca=ht((t,e,r,n)=>{const i=A(t,"package.json");V(i)&&Xm(i,o=>{let s=!1;for(const u of um){const g=o.dependencies,p=o.devDependencies;g?.[u]&&(delete g[u],s=!0,n.removedPackageCount+=1),p?.[u]&&(delete p[u],s=!0,n.removedPackageCount+=1)}if(Object.keys(r).length>0)switch(e){case"bun":{const u=o.workspaces,g=u&&!Array.isArray(u)?u:void 0,p={...g?.catalog??o.catalog};for(const[m,y]of Object.entries(r))p[m]=y;g?.catalog==null?o.catalog=p:g.catalog=p;const h=o.overrides??{};for(const m of Object.keys(r))h[m]="catalog:";o.overrides=h,s=!0;break}case"npm":{const u=o.overrides??{};o.overrides={...u,...r},s=!0;break}case"pnpm":{const u=o.pnpm??{},g=u.overrides??{};u.overrides={...g,...r},o.pnpm=u,s=!0;break}case"yarn":{const u=o.resolutions??{};o.resolutions={...u,...r},s=!0;break}}const l=o.scripts;if(l){const u=Zm(l,n);u.modified&&(o.scripts=u.scripts,s=!0)}return s?o:void 0})},"rewritePackageJson"),ey=ht((t,e,r,n)=>{try{const{workspace:i}=Kr(t);for(const o of Object.values(i.projects)){const s=A(t,o.root);ca(s,e,r,n)}}catch{}},"migrateMonorepoPackages"),ty=ht(t=>t.startsWith("- ")||t!==""&&!t.includes(":")&&!t.startsWith("#"),"isCatalogSectionEnd"),ry=ht(t=>{let e=!1,r="";const n=new Set;for(const i of t){const o=i.trim();if(o==="catalog:"){e=!0;continue}if(!e)continue;if(ty(o))break;const s=o.includes(":")?o.split(":")[0]?.trim():void 0;s&&(n.add(s),r=r||i.slice(0,i.indexOf(o)))}return{entries:n,indent:r||" "}},"parseCatalogEntries"),ny=ht((t,e,r)=>{const n=[];let i=!1,o=!1;for(let s=0;s<t.length;s+=1){const l=t[s],u=l.trim();if(n.push(l),u==="catalog:"){o=!0;continue}if(o&&!i){const g=t[s+1]?.trim()??"";(!g.includes(":")||g.startsWith("- ")||!g||g==="catalog:")&&(n.push(...e),i=!0,o=!1)}}return i||(r.includes("catalog:")||n.push("catalog:"),n.push(...e)),n},"insertCatalogEntries"),oy=ht((t,e)=>{const r=A(t,"pnpm-workspace.yaml");if(!V(r)||Object.keys(e).length===0)return;const n=Y(r,"utf8"),i=n.split(`
781
+ `),{entries:o,indent:s}=ry(i),l=[];for(const[g,p]of Object.entries(e))o.has(g)||l.push(`${s}${g}: "${p}"`);if(l.length===0)return;const u=ny(i,l,n);_(r,u.join(`
782
+ `),"utf8")},"updatePnpmWorkspaceCatalog"),iy=ht((t,e,r,n,i,o)=>{const s=r.overrides??{};if(n.dryRun){i.info("[dry-run] Would rewrite package.json files (remove husky/lint-staged, rewrite scripts)"),Object.keys(s).length>0&&i.info(`[dry-run] Would add overrides: ${JSON.stringify(s)}`);return}ca(t,e,s,o),i.info("Rewritten root package.json"),ey(t,e,s,o),e==="pnpm"&&oy(t,s)},"migrateDeps");var sy=Object.defineProperty,po=$((t,e)=>sy(t,"name",{value:e,configurable:!0}),"i$2");const ay=po(()=>({gitHooksConfigured:!1,inlinedLintStagedConfigCount:0,manualSteps:[],mergedStagedConfigCount:0,removedConfigCount:0,removedPackageCount:0,rewrittenScriptCount:0,warnings:[]}),"createMigrationReport"),Vr=po((t,e)=>{!t||t.warnings.includes(e)||t.warnings.push(e)},"addMigrationWarning"),la=po((t,e)=>{!t||t.manualSteps.includes(e)||t.manualSteps.push(e)},"addManualStep");var cy=Object.defineProperty,ke=$((t,e)=>cy(t,"name",{value:e,configurable:!0}),"r$3");const ly=/\bstaged\s*:/,ai=/(defineConfig\(\{)/,ci=/(export\s+default\s+\{)/;ke(t=>lo.some(e=>V(A(t,e))),"hasStandaloneLintStagedConfig");const dy=ke(t=>{for(const r of Qs)if(V(A(t,r)))return!0;const e=A(t,".lintstagedrc");return V(e)&&!sa(e)},"hasUnsupportedLintStagedConfig"),uy=ke(t=>{const e=er(t);if(!e)return!1;const r=Y(e,"utf8");return ly.test(r)},"hasStagedConfigInVisConfig"),py=ke(t=>{const e=A(t,"package.json");if(V(e)&&uo(e)?.["lint-staged"])return"package.json";for(const r of lo)if(V(A(t,r)))return r},"detectLintStagedConfig"),fy=ke(t=>uo(A(t,"package.json"))?.["lint-staged"],"extractLintStagedFromPackageJson"),gy=ke(t=>uo(t),"parseLintStagedJsonFile"),Cn=ke(t=>` staged: {
783
+ ${Object.entries(t).map(([e,r])=>{const n=Array.isArray(r)?`[${r.map(i=>JSON.stringify(i)).join(", ")}]`:JSON.stringify(r);return` ${JSON.stringify(e)}: ${n}`}).join(`,
119
784
  `)},
120
- }`,"generateStagedConfigSnippet"),is=C((e,t,a)=>{const n=pt(e);if(n){const s=B(n,"utf8"),i=Ce(t);let c;return nt.test(s)?c=s.replace(nt,`$1
121
- ${i},`):rt.test(s)&&(c=s.replace(rt,`$1
122
- ${i},`)),c?(E(n,c,"utf8"),a.info(`Merged staged config into ${n}`),!0):(a.warn(`Could not auto-insert staged config into ${n} — please add manually`),!1)}const r=u(e,"vis.config.ts"),o=`import { defineConfig } from "@visulima/vis/config";
785
+ }`,"generateStagedConfigSnippet"),hy=ke((t,e,r)=>{const n=er(t);if(n){const s=Y(n,"utf8"),l=Cn(e);let u;return ai.test(s)?u=s.replace(ai,`$1
786
+ ${l},`):ci.test(s)&&(u=s.replace(ci,`$1
787
+ ${l},`)),u?(_(n,u,"utf8"),r.info(`Merged staged config into ${n}`),!0):(r.warn(`Could not auto-insert staged config into ${n} — please add manually`),!1)}const i=A(t,"vis.config.ts"),o=`import { defineConfig } from "@visulima/vis/config";
123
788
 
124
789
  export default defineConfig({
125
- ${Ce(t)},
790
+ ${Cn(e)},
126
791
  });
127
- `;return E(r,o,"utf8"),a.info(`Created ${r} with staged config`),!0},"insertStagedIntoVisConfig"),cs=C(e=>{const t=u(e,"package.json"),a={configRemoved:!1,dependencyRemoved:!1};if(!k(t))return a;const n=B(t,"utf8"),r=JSON.parse(n);let o=!1;r["lint-staged"]&&(delete r["lint-staged"],o=!0,a.configRemoved=!0);const s=r.devDependencies,i=r.dependencies;if(s?.["lint-staged"]&&(delete s["lint-staged"],o=!0,a.dependencyRemoved=!0),i?.["lint-staged"]&&(delete i["lint-staged"],o=!0,a.dependencyRemoved=!0),o){const c=Kt(n);E(t,`${JSON.stringify(r,void 0,c)}
128
- `,"utf8")}return a},"removeLintStagedFromPackageJson"),ls=C((e,t)=>{for(const a of _e){const n=u(e,a);k(n)&&(Sa(n),t.removedConfigCount+=1)}},"removeLintStagedConfigFiles"),ps=C((e,t)=>{const a=u(e,t,"pre-commit");if(!k(a))return!1;const n=B(a,"utf8");if(n.includes("vis staged"))return!1;const r=n.split(`
129
- `);let o=!1;const s=[];for(const i of r){const c=i.trim();if(!o){let l=!1;for(const p of ho){const g=p.exec(c);if(g){const f=i.slice(0,i.length-i.trimStart().length),w=g[1]?.trim()??"",$=c.slice(g[0].length).trim(),x=[w,"vis staged",$].filter(Boolean);s.push(`${f}${x.join(" ")}`),o=!0,l=!0;break}}if(l)continue}s.push(i)}return o?(E(a,s.join(`
130
- `)),!0):!1},"rewritePreCommitHook"),us=C((e,t,a)=>{if(t==="package.json")return os(e);const n=u(e,t);if(!Jt.includes(t)){me(a,`${t} cannot be auto-migrated — please add "staged" config to vis.config.ts manually`),Xt(a,`Manually convert ${t} to staged config in vis.config.ts`);return}if(t===".lintstagedrc"&&!qt(n)){me(a,".lintstagedrc is not JSON format — please migrate manually");return}return ss(n)},"extractConfig"),Zt=C((e,t)=>{const{configRemoved:a,dependencyRemoved:n}=cs(e);a&&(t.inlinedLintStagedConfigCount+=1),n&&(t.removedPackageCount+=1),ls(e,t)},"cleanupLintStagedArtifacts"),ds=C((e,t,a,n)=>{const r=[".vis-hooks",".husky"];for(const o of r)k(u(e,o))&&ps(e,o)&&(n.gitHooksConfigured=!0,t.silent||a.info(`Rewrote pre-commit hook in ${o}/ to use "vis staged"`))},"rewriteHooks"),gs=C((e,t,a,n,r)=>{is(e,t,n)&&(r.mergedStagedConfigCount+=1),Zt(e,r),ds(e,a,n,r)},"applyMigration"),fs=C((e,t,a,n)=>{const r=rs(e);if(!r)return t.silent||a.info("No lint-staged configuration found — nothing to migrate."),!1;if(as(e)&&(me(n,'Non-JSON lint-staged config found — please migrate to "staged" in vis.config.ts manually'),Xt(n,"Convert your lint-staged config file to JSON format or add staged config to vis.config.ts manually")),ns(e))return me(n,'vis.config.ts already has a "staged" config — skipping lint-staged merge'),t.silent||a.warn('vis.config.ts already has a "staged" config — skipping'),t.dryRun||Zt(e,n),!0;const o=us(e,r,n);return!o||Object.keys(o).length===0?(t.silent||a.warn("lint-staged config is empty — skipping"),!1):t.dryRun?(t.silent||(a.info("[dry-run] Would insert staged config into vis.config.ts:"),a.info(Ce(o))),!0):(gs(e,o,t,a,n),!0)},"migrateLintStaged");var ms=Object.defineProperty,Qt=y((e,t)=>ms(e,"name",{value:t,configurable:!0}),"g");const hs=Qt((e,t)=>{t.info("── Migration Summary ──");const a=[["Staged configs merged into vis.config.ts",e.mergedStagedConfigCount],["Lint-staged configs inlined",e.inlinedLintStagedConfigCount],["Config files removed",e.removedConfigCount],["Packages removed",e.removedPackageCount],["Scripts rewritten",e.rewrittenScriptCount]];for(const[n,r]of a)r>0&&t.info(` ${n}: ${String(r)}`);if(e.gitHooksConfigured&&t.info(" Pre-commit hook updated to use vis staged"),e.warnings.length>0){t.info(""),t.warn("Warnings:");for(const n of e.warnings)t.warn(` - ${n}`)}if(e.manualSteps.length>0){t.info(""),t.info("Manual steps required:");for(const n of e.manualSteps)t.info(` - ${n}`)}},"printSummary"),ys={argument:{description:"Migration type: all, deps, lint-staged",name:"type",type:String},description:"Migrate from other tools (husky, lint-staged) to vis",examples:[["vis migrate","Run all migrations"],["vis migrate deps","Migrate package dependencies and scripts"],["vis migrate lint-staged","Migrate lint-staged config to vis.config.ts"],["vis migrate --dry-run","Preview changes without applying"]],execute:Qt(async({argument:e,logger:t,options:a,visConfig:n,workspaceRoot:r})=>{const o=e[0]??"all",s=!!a["dry-run"],i=r??process.cwd(),c=n??{},l=Ht(i),p=Qo();if(!["all","deps","lint-staged"].includes(o))throw new Error(`Unknown migration type "${o}". Use "all", "deps", or "lint-staged".`);s&&t.info(`Running in dry-run mode — no changes will be made.
131
- `),(o==="all"||o==="deps")&&(t.info("── Migrating dependencies and scripts ──"),Xo(i,l,c,{dryRun:s},t,p),t.info("")),(o==="all"||o==="lint-staged")&&(t.info("── Migrating lint-staged ──"),fs(i,{dryRun:s},t,p),t.info("")),hs(p,t)},"execute"),name:"migrate",options:[{defaultValue:!1,description:"Preview changes without applying",name:"dry-run",type:Boolean}]};var vs=Object.defineProperty,ea=y((e,t)=>vs(e,"name",{value:t,configurable:!0}),"f$1");const ks=ea(e=>async(t,a)=>{const n=a.cwd??t.projectRoot??e,r=n.startsWith("/")?n:`${e}/${n}`,o=t.overrides.command;if(!o)return{code:0,terminalOutput:`No command configured for ${t.target.project}:${t.target.target}`};try{return{code:0,terminalOutput:Pe(o,{cwd:r,encoding:"utf8",env:{...process.env,...a.env},stdio:"pipe"})}}catch(s){const i=s;return{code:i.status??1,terminalOutput:(i.stdout??"")+(i.stderr??"")}}},"createShellExecutor"),$s={argument:{description:"The target to run (e.g., build, test, lint)",name:"target",type:String},description:"Run a target across workspace projects",examples:[["vis run build","Run build on all projects"],["vis run test --projects=pkg-a,pkg-b","Run test on specific projects"],["vis run build --parallel=5","Run build with 5 parallel tasks"],["vis run build --no-cache","Run build without caching"]],execute:ea(async({argument:e,logger:t,options:a,visConfig:n,workspaceRoot:r})=>{const o=e[0];if(!o)throw new Error("Missing target. Usage: vis run <target>");if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const s=r,{config:i,workspace:c}=ye(s,n),l=Ae(s,c);let p=Object.keys(c.projects);if(a.projects){const R=new Set(a.projects.split(",").map(U=>U.trim()));if(p=p.filter(U=>R.has(U)),p.length===0)throw new Error(`No matching projects found for: ${String(a.projects)}`)}const g=p.filter(R=>c.projects[R]?.targets?.[o]!==void 0);if(g.length===0){t.info(`No projects have the "${o}" target.`);return}const f=g.map(R=>{const U=c.projects[R],re=U?.targets?.[o],aa={project:R,target:o},na=`${R}:${o}`;return{cache:re?.cache??i.targetDefaults?.[o]?.cache,id:na,outputs:re?.outputs??i.targetDefaults?.[o]?.outputs??[],overrides:{command:re?.command},parallelism:re?.parallelism??i.targetDefaults?.[o]?.parallelism,projectRoot:U?.root,target:aa}}),w=da(f,{projectGraph:l,targetDefaults:i.targetDefaults,workspace:c}),$=Object.keys(w.tasks).length,x=Date.now();t.info(`vis run ${o} (${$} task${$===1?"":"s"})`);const G={cacheDirectory:a.cacheDir,dryRun:a.dryRun,parallel:a.parallel??3,skipNxCache:!a.cache,summarize:a.summarize,...i.taskRunnerOptions},j=new ga,T=ks(s),Q=await fa(f,G,{lifeCycle:j,projectGraph:l,taskExecutor:T,taskGraph:w,workspaceRoot:s});if(a.summarize){const R=ma(Q,w,x);await ha(R,s)}let O=!1;for(const[,R]of Q)R.status==="failure"&&(O=!0);if(O)throw new Error("Some tasks failed.");t.info("All tasks completed successfully.")},"execute"),name:"run",options:[{alias:"p",description:"Comma-separated list of projects to run",name:"projects",type:String},{defaultValue:3,description:"Maximum number of parallel tasks",name:"parallel",type:Number},{defaultValue:!0,description:"Enable caching (use --no-cache to disable)",name:"cache",type:Boolean},{description:"Custom cache directory",name:"cache-dir",type:String},{defaultValue:!1,description:"Show what would run without executing",name:"dry-run",type:Boolean},{defaultValue:!1,description:"Generate a run summary after execution",name:"summarize",type:Boolean}]};var ws=Object.defineProperty,ta=y((e,t)=>ws(e,"name",{value:t,configurable:!0}),"s$1");const bs=ta((e,t)=>{const a=[["allow-empty","allowEmpty"],["continue-on-error","continueOnError"],["cwd","cwd"],["debug","debug"],["diff","diff"],["diff-filter","diffFilter"],["fail-on-changes","failOnChanges"],["hide-partially-staged","hidePartiallyStaged"],["hide-unstaged","hideUnstaged"],["quiet","quiet"],["relative","relative"],["revert","revert"],["stash","stash"],["verbose","verbose"]];for(const[n,r]of a)e[n]!==void 0&&(t[r]=e[n]);if(e.concurrent!==void 0){const n=e.concurrent;if(n==="true")t.concurrent=!0;else if(n==="false")t.concurrent=!1;else{const r=Number(n);t.concurrent=Number.isNaN(r)||n===""?!0:r}}},"mapOptions"),Ss={description:"Run linters on staged files using config from vis.config.ts",examples:[["vis staged","Run staged linters"],["vis staged --verbose","Run with verbose output"],["vis staged --no-stash","Run without backup stash"],["vis staged --diff HEAD~1","Run against a specific diff"]],execute:ta(async({options:e,visConfig:t})=>{const a=(t??{}).staged;if(!a)throw new Error(`No "staged" config found in vis.config.ts. Please add a staged config:
792
+ `;return _(i,o,"utf8"),r.info(`Created ${i} with staged config`),!0},"insertStagedIntoVisConfig"),my=ke(t=>{const e=A(t,"package.json"),r={configRemoved:!1,dependencyRemoved:!1};if(!V(e))return r;const n=Y(e,"utf8"),i=JSON.parse(n);let o=!1;i["lint-staged"]&&(delete i["lint-staged"],o=!0,r.configRemoved=!0);const s=i.devDependencies,l=i.dependencies;if(s?.["lint-staged"]&&(delete s["lint-staged"],o=!0,r.dependencyRemoved=!0),l?.["lint-staged"]&&(delete l["lint-staged"],o=!0,r.dependencyRemoved=!0),o){const u=aa(n);_(e,`${JSON.stringify(i,void 0,u)}
793
+ `,"utf8")}return r},"removeLintStagedFromPackageJson"),yy=ke((t,e)=>{for(const r of lo){const n=A(t,r);V(n)&&(Ei(n),e.removedConfigCount+=1)}},"removeLintStagedConfigFiles"),vy=ke((t,e)=>{const r=A(t,e,"pre-commit");if(!V(r))return!1;const n=Y(r,"utf8");if(n.includes("vis staged"))return!1;const i=n.split(`
794
+ `);let o=!1;const s=[];for(const l of i){const u=l.trim();if(!o){let g=!1;for(const p of dm){const h=p.exec(u);if(h){const m=l.slice(0,l.length-l.trimStart().length),y=h[1]?.trim()??"",b=u.slice(h[0].length).trim(),x=[y,"vis staged",b].filter(Boolean);s.push(`${m}${x.join(" ")}`),o=!0,g=!0;break}}if(g)continue}s.push(l)}return o?(_(r,s.join(`
795
+ `)),!0):!1},"rewritePreCommitHook"),wy=ke((t,e,r)=>{if(e==="package.json")return fy(t);const n=A(t,e);if(!Ks.includes(e)){Vr(r,`${e} cannot be auto-migrated — please add "staged" config to vis.config.ts manually`),la(r,`Manually convert ${e} to staged config in vis.config.ts`);return}if(e===".lintstagedrc"&&!sa(n)){Vr(r,".lintstagedrc is not JSON format — please migrate manually");return}return gy(n)},"extractConfig"),da=ke((t,e)=>{const{configRemoved:r,dependencyRemoved:n}=my(t);r&&(e.inlinedLintStagedConfigCount+=1),n&&(e.removedPackageCount+=1),yy(t,e)},"cleanupLintStagedArtifacts"),ky=ke((t,e,r,n)=>{const i=[".vis-hooks",".husky"];for(const o of i)V(A(t,o))&&vy(t,o)&&(n.gitHooksConfigured=!0,e.silent||r.info(`Rewrote pre-commit hook in ${o}/ to use "vis staged"`))},"rewriteHooks"),by=ke((t,e,r,n,i)=>{hy(t,e,n)&&(i.mergedStagedConfigCount+=1),da(t,i),ky(t,r,n,i)},"applyMigration"),$y=ke((t,e,r,n)=>{const i=py(t);if(!i)return e.silent||r.info("No lint-staged configuration found — nothing to migrate."),!1;if(dy(t)&&(Vr(n,'Non-JSON lint-staged config found — please migrate to "staged" in vis.config.ts manually'),la(n,"Convert your lint-staged config file to JSON format or add staged config to vis.config.ts manually")),uy(t))return Vr(n,'vis.config.ts already has a "staged" config — skipping lint-staged merge'),e.silent||r.warn('vis.config.ts already has a "staged" config — skipping'),e.dryRun||da(t,n),!0;const o=wy(t,i,n);return!o||Object.keys(o).length===0?(e.silent||r.warn("lint-staged config is empty — skipping"),!1):e.dryRun?(e.silent||(r.info("[dry-run] Would insert staged config into vis.config.ts:"),r.info(Cn(o))),!0):(by(t,o,e,r,n),!0)},"migrateLintStaged");var xy=Object.defineProperty,ua=$((t,e)=>xy(t,"name",{value:e,configurable:!0}),"g$3");const Sy=ua((t,e)=>{e.info("── Migration Summary ──");const r=[["Staged configs merged into vis.config.ts",t.mergedStagedConfigCount],["Lint-staged configs inlined",t.inlinedLintStagedConfigCount],["Config files removed",t.removedConfigCount],["Packages removed",t.removedPackageCount],["Scripts rewritten",t.rewrittenScriptCount]];for(const[n,i]of r)i>0&&e.info(` ${n}: ${String(i)}`);if(t.gitHooksConfigured&&e.info(" Pre-commit hook updated to use vis staged"),t.warnings.length>0){e.info(""),e.warn("Warnings:");for(const n of t.warnings)e.warn(` - ${n}`)}if(t.manualSteps.length>0){e.info(""),e.info("Manual steps required:");for(const n of t.manualSteps)e.info(` - ${n}`)}},"printSummary"),Cy={group:"Scaffold & Config",argument:{description:"Migration type: all, deps, lint-staged",name:"type",type:String},description:"Migrate from other tools (husky, lint-staged) to vis",examples:[["vis migrate","Run all migrations"],["vis migrate deps","Migrate package dependencies and scripts"],["vis migrate lint-staged","Migrate lint-staged config to vis.config.ts"],["vis migrate --dry-run","Preview changes without applying"]],execute:ua(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{const o=t[0]??"all",s=!!r["dry-run"],l=i??process.cwd(),u=n??{},g=ta(l),p=ay();if(!["all","deps","lint-staged"].includes(o))throw new Error(`Unknown migration type "${o}". Use "all", "deps", or "lint-staged".`);s&&e.info(`Running in dry-run mode — no changes will be made.
796
+ `),(o==="all"||o==="deps")&&(e.info("── Migrating dependencies and scripts ──"),iy(l,g,u,{dryRun:s},e,p),e.info("")),(o==="all"||o==="lint-staged")&&(e.info("── Migrating lint-staged ──"),$y(l,{dryRun:s},e,p),e.info("")),Sy(p,e)},"execute"),name:"migrate",options:[{defaultValue:!1,description:"Preview changes without applying",name:"dry-run",type:Boolean}]};var Ey=Object.defineProperty,jy=$((t,e)=>Ey(t,"name",{value:e,configurable:!0}),"a$1");const Ty={group:"System",argument:{description:"Subcommand and arguments (e.g., cache dir, publish --dry-run, list --depth 0)",name:"args",type:String},description:"Package manager utilities (cache, publish, audit, list, config, etc.)",examples:[["vis pm cache dir","Show cache directory"],["vis pm cache clean","Clean cache"],["vis pm publish --dry-run","Preview publishing"],["vis pm list --depth 0","List direct dependencies"],["vis pm audit","Run security audit"],["vis pm whoami","Show logged-in user"]],execute:jy(async({argument:t,logger:e,workspaceRoot:r})=>{const n=t;if(!n||n.length===0)throw new Error("No subcommand specified. Available: cache, publish, audit, list, view, config, whoami, login, logout, pack, owner, dist-tag, search, fund, ping, token, deprecate, rebuild, prune");const[i,...o]=n,s=r??process.cwd(),l=pe(s),u=Gc(l,i,o,s,e);u!==0&&(process.exitCode=u)},"execute"),name:"pm"};var Ay=Object.defineProperty,Iy=$((t,e)=>Ay(t,"name",{value:e,configurable:!0}),"t$5");const Ry={group:"Dependencies",alias:["rm","un","uninstall"],argument:{description:"Packages to remove",name:"packages",type:String},description:"Remove packages using the detected package manager",examples:[["vis remove lodash","Remove a package"],["vis rm old-package","Remove using alias"],["vis remove --filter app react","Remove from specific workspace"],["vis remove -g typescript","Remove global package"]],execute:Iy(async({argument:t,logger:e,options:r,workspaceRoot:n})=>{const i=t;if(!i||i.length===0)throw new Error("No packages specified. Usage: vis remove <packages...>");const o=process.cwd(),s=pe(n??o),l=Mc(s,{filter:dr(r.filter),global:r.global||!1,packages:i,recursive:r.recursive||!1,saveDev:r["save-dev"]||!1,workspaceRoot:r["workspace-root"]||!1},o,e);l!==0&&(process.exitCode=l)},"execute"),name:"remove",options:[{alias:"D",defaultValue:!1,description:"Remove from devDependencies",name:"save-dev",type:Boolean},{alias:"g",defaultValue:!1,description:"Remove global package",name:"global",type:Boolean},{alias:"r",defaultValue:!1,description:"Remove from all workspace packages",name:"recursive",type:Boolean},{alias:"w",defaultValue:!1,description:"Remove from workspace root",name:"workspace-root",type:Boolean},{alias:"F",description:"Filter by workspace package name",multiple:!0,name:"filter",type:String}]};var Oy=Object.defineProperty,fo=$((t,e)=>Oy(t,"name",{value:e,configurable:!0}),"i$1");const Py=fo(t=>Array.isArray(t)?`[${t.join(",")}]`:typeof t=="object"&&t!==null?JSON.stringify(t):String(t),"formatValue"),Ny=fo((t,e,r)=>e==="_"?`${t}${Array.isArray(r)?r.join(" "):String(r)}`:`${t}--${e}=${Py(r)}`,"formatFlags"),go=fo((t,e,r)=>{const n=new Set(new Set(r.map(m=>m.target.target))),i=new Set(new Set(r.map(m=>m.target.project))),o=e.filter(m=>n.has(m)),s=t.filter(m=>i.has(m)),l=r.length-s.length*o.length,u=o.length===1?"target":"targets",g=o.join(", ");let p;p=s.length===1?`project ${s[0]}`:`${s.length} projects`;let h=`${u} ${g} for ${p}`;return l>0&&(h+=` and ${l} ${l===1?"task":"tasks"} ${l===1?"it depends":"they depend"} on`),h},"formatTargetsAndProjects");var Dy=Object.defineProperty,My=$((t,e)=>Dy(t,"name",{value:e,configurable:!0}),"e");const By=My(()=>process.platform==="win32"?!!process.env.WT_SESSION||process.env.TERM_PROGRAM==="vscode"||process.env.TERM==="xterm-256color":process.env.TERM!=="linux","isUnicodeSupported"),on=By(),pa=on?"✓":"√",ho=on?"✖":"×",fa=on?"…":"...",sn=on?"—":"-";var Ly=Object.defineProperty,Fy=$((t,e)=>Ly(t,"name",{value:e,configurable:!0}),"c$4");const Vy={error:"red",info:"white",success:"green"},En=Fy(({children:t,title:e,variant:r})=>{const n=Vy[r];return d(f,{flexDirection:"column",children:[d(f,{gap:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS "}),c(a,{bold:!0,color:n,children:"•"}),c(a,{children:e})]}),t]})},"Header");var Uy=Object.defineProperty,Gy=$((t,e)=>Uy(t,"name",{value:e,configurable:!0}),"s$5");const ga=Gy(({cached:t,failed:e,failedIds:r,projectNames:n,skippedIds:i,succeeded:o,targets:s,tasks:l,took:u})=>{const g=go(n,s,l);if(e===0&&(!i||i.length===0)){const p=t>0?` (${t} read from cache)`:"";return c(ko,{children:$(()=>c(En,{title:`Successfully ran ${g}`,variant:"success",children:d(f,{flexDirection:"column",paddingLeft:2,children:[d(a,{children:[c(a,{color:"green",children:pa})," ",o+t," ","tasks completed",p?c(a,{dimColor:!0,children:p}):null]}),d(a,{dimColor:!0,children:[" ","Took",u]})]})}),"children")})}return c(ko,{children:$(()=>c(En,{title:`Ran ${g}`,variant:"error",children:d(f,{flexDirection:"column",paddingLeft:2,children:[i&&i.length>0&&d(f,{flexDirection:"column",children:[d(a,{dimColor:!0,children:[i.length," ","task",i.length===1?"":"s"," ","skipped (dependency failed or --bail)"]}),i.map(p=>d(a,{dimColor:!0,children:[" - ",p]},p)),c(a,{})]}),e>0&&d(f,{flexDirection:"column",children:[d(a,{children:[c(a,{color:"red",children:String(e)})," ","task",e===1?"":"s"," ","failed:"]}),r.map(p=>d(a,{children:[" ",c(a,{color:"red",children:ho})," ",p]},p)),c(a,{})]}),d(a,{dimColor:!0,children:[" ","Took",u]})]})}),"children")})},"CommandSummary");var zy=Object.defineProperty,yn=$((t,e)=>zy(t,"name",{value:e,configurable:!0}),"u$6");class Ur{static{$(this,"TaskStore")}static{yn(this,"TaskStore")}#e;#t=new Set;#n=new Map;constructor(e){this.#e={autoExitCountdown:null,cached:0,completed:0,done:!1,endTime:null,failed:0,filterActive:!1,filterText:"",focusedPanel:"tasks",interactiveMode:!1,outputs:new Map,pinnedTaskIds:[null,null],rerunRequested:!1,retryTaskId:null,rows:e.map(r=>({status:"pending",taskId:r.id})),selectedIndex:0,startTime:Date.now(),statusFilter:"all",succeeded:0,viewMode:"list"}}getSnapshot=yn(()=>this.#e,"getSnapshot");subscribe=yn(e=>(this.#t.add(e),()=>{this.#t.delete(e)}),"subscribe");startTasks(e){const r=[...this.#e.rows];for(const n of e){const i=r.findIndex(o=>o.taskId===n.id);i!==-1&&(r[i]={...r[i],elapsed:0,status:"running"},this.#n.set(n.id,process.hrtime()))}this.#r({...this.#e,rows:r})}endTasks(e){const r=[...this.#e.rows];let{cached:n,completed:i,failed:o,succeeded:s}=this.#e;const l=new Map(this.#e.outputs);for(const g of e){const p=r.findIndex(h=>h.taskId===g.task.id);switch(p!==-1&&(r[p]={...r[p],duration:g.startTime&&g.endTime?g.endTime-g.startTime:void 0,status:g.status}),i++,g.status){case"failure":{o++;break}case"local-cache":case"local-cache-kept-existing":case"remote-cache":{n++;break}case"success":{s++;break}}g.terminalOutput&&!l.has(g.task.id)&&l.set(g.task.id,g.terminalOutput),this.#n.delete(g.task.id)}let{selectedIndex:u}=this.#e;if(o>this.#e.failed){const g=r.findIndex(p=>p.status==="failure");g!==-1&&(u=g)}this.#r({...this.#e,cached:n,completed:i,failed:o,outputs:l,rows:r,selectedIndex:u,succeeded:s})}static#o=256*1024;addOutput(e,r){if(!r.trim())return;let n=(this.#e.outputs.get(e)??"")+r;n.length>Ur.#o&&(n=n.slice(-Ur.#o)),this.#e.outputs.set(e,n),this.#r({...this.#e})}setOutput(e,r){this.#e.outputs.set(e,r),this.#r({...this.#e})}markDone(){this.#r({...this.#e,done:!0,endTime:Date.now()})}tick(){if(this.#n.size===0)return;let e=!1;const r=[...this.#e.rows];for(let n=0;n<r.length;n++){const i=r[n];if(i.status==="running"){const o=this.#n.get(i.taskId);if(o){const s=process.hrtime(o),l=s[0]*1e3+s[1]/1e6;r[n]={...i,elapsed:l},e=!0}}}e&&this.#r({...this.#e,rows:r})}setSelectedIndex(e){e!==this.#e.selectedIndex&&this.#r({...this.#e,selectedIndex:e})}setFocusedPanel(e){e!==this.#e.focusedPanel&&this.#r({...this.#e,focusedPanel:e})}setFilter(e){this.#r({...this.#e,filterText:e,selectedIndex:0})}setFilterActive(e){e!==this.#e.filterActive&&this.#r({...this.#e,filterActive:e,filterText:e?this.#e.filterText:"",selectedIndex:0})}pinTask(e,r){const n=[...this.#e.pinnedTaskIds];n[e]=r,this.#r({...this.#e,pinnedTaskIds:n})}clearPins(){this.#r({...this.#e,pinnedTaskIds:[null,null]})}requestRetry(e){const r=[...this.#e.rows],n=r.findIndex(l=>l.taskId===e);let{completed:i,failed:o,succeeded:s}=this.#e;if(n!==-1){const l=r[n].status;l==="failure"?(o=Math.max(0,o-1),i=Math.max(0,i-1)):l==="success"&&(s=Math.max(0,s-1),i=Math.max(0,i-1)),r[n]={...r[n],elapsed:0,status:"running"},this.#n.set(e,process.hrtime())}this.#r({...this.#e,completed:i,done:!1,endTime:null,failed:o,interactiveMode:!1,retryTaskId:e,rows:r,succeeded:s})}acknowledgeRetry(){const e=this.#e.retryTaskId;return e&&this.#r({...this.#e,retryTaskId:null}),e}setInteractiveMode(e){e!==this.#e.interactiveMode&&this.#r({...this.#e,interactiveMode:e})}setViewMode(e){e!==this.#e.viewMode&&this.#r({...this.#e,viewMode:e})}setStatusFilter(e){this.#r({...this.#e,selectedIndex:0,statusFilter:e})}requestRerun(){this.#n.clear(),this.#r({...this.#e,autoExitCountdown:null,cached:0,completed:0,done:!1,endTime:null,failed:0,interactiveMode:!1,outputs:new Map,rerunRequested:!0,rows:this.#e.rows.map(e=>({status:"pending",taskId:e.taskId})),startTime:Date.now(),succeeded:0,viewMode:"list"})}acknowledgeRerun(){this.#e.rerunRequested&&this.#r({...this.#e,rerunRequested:!1})}#r(e){this.#e=e;for(const r of this.#t)try{r()}catch{}}}var Wy=Object.defineProperty,Fe=$((t,e)=>Wy(t,"name",{value:e,configurable:!0}),"t$3");const _y={d:Fe(()=>" d","d"),future:"in %s",h:Fe(()=>" h","h"),m:Fe(()=>" m","m"),mo:Fe(()=>" mo","mo"),ms:Fe(()=>" ms","ms"),past:"%s ago",s:Fe(()=>" s","s"),w:Fe(()=>" w","w"),y:Fe(()=>" y","y")},ha={delimiter:" ",language:_y,largest:2,round:!0,spacer:"",units:["h","m","s","ms"]};Fe(t=>{const e=t[0]*1e3+t[1]/1e6;return Ni(e,ha)},"formatHrtime");const $t=Fe(t=>Ni(t,ha),"formatMs");var Hy=Object.defineProperty,yr=$((t,e)=>Hy(t,"name",{value:e,configurable:!0}),"n$2");const or=yr(t=>t==="local-cache"||t==="local-cache-kept-existing"||t==="remote-cache","isCacheStatus"),vr=yr(t=>{switch(t){case"failure":return{color:"red",icon:ho};case"local-cache":case"local-cache-kept-existing":case"remote-cache":case"success":return{color:"green",icon:pa};case"skipped":return{color:"gray",icon:sn};default:return{color:"gray",icon:"?"}}},"getStatusInfo"),ma=yr(t=>{const{color:e,icon:r}=vr(t);return ge(H.createElement(a,{color:e},r),{columns:10}).trim()},"getStatusIcon"),Jy=yr(t=>{const{color:e,icon:r}=vr(t);switch(t){case"local-cache":case"local-cache-kept-existing":case"remote-cache":return ge(H.createElement(a,null,H.createElement(a,{color:e},r)," ",H.createElement(a,{color:"cyan"},"[cache]")),{columns:30}).trim();case"skipped":return ge(H.createElement(a,null,H.createElement(a,{dimColor:!0},r)," ",H.createElement(a,{dimColor:!0},"[skipped]")),{columns:30}).trim();default:return ge(H.createElement(a,{color:e},r),{columns:10}).trim()}},"getStatusPrefix"),qy=yr((t,e,r)=>{const n=r.trim();if(!n)return;const i=`
797
+ `;if(process.env.GITHUB_ACTIONS==="true")process.stdout.write(`::group::${ma(e)} ${t}${i}`),process.stdout.write(n+i),process.stdout.write(`::endgroup::${i}`);else{const o=process.stdout.columns||80,s=ge(H.createElement(a,{dimColor:!0},sn.repeat(o)),{columns:o}).trim(),l=Jy(e),u=ge(H.createElement(a,{bold:!0},t),{columns:o}).trim();process.stdout.write(`${s}${i}`),process.stdout.write(`${l} ${u}${i}`),process.stdout.write(n+i),process.stdout.write(`${s}${i}`)}},"logCommandOutputCI");var Yy=Object.defineProperty,ya=$((t,e)=>Yy(t,"name",{value:e,configurable:!0}),"c$3");const Xy=ya(t=>t==="running"?{color:"white",icon:"•"}:t==="pending"?{color:"gray",icon:"·"}:vr(t),"getDisplayInfo"),li=ya(({duration:t,focused:e,interactiveMode:r,output:n,scrollRef:i,showFullscreenHint:o,status:s,taskId:l})=>{const u=s??"pending",{icon:g}=Xy(u),p=e?"bold":"single",h=u==="failure"?"red":u==="success"||or(u)?e?"green":"gray":u==="running"?e?"white":"cyan":e?"white":"gray",m=l?`${g} ${l}`:void 0,y=t===void 0?void 0:$t(t),b=l?r?"Esc cancel | Enter send":e&&u==="running"&&o?"⏎ FULLSCREEN i INPUT":e&&u==="running"?"i INPUT":e&&o?"<enter> full screen":e?void 0:"<tab> or <enter> to focus":void 0;if(!l)return d(f,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",paddingX:2,paddingY:1,children:[c(a,{dimColor:!0,children:"Select a task to view output"}),c(a,{dimColor:!0,children:"Press Enter or 1/2 to pin"})]});const x=n?n.split(`
798
+ `).map(E=>E.replace(/\r$/,"")):[];return!n&&(u==="running"||u==="pending")?c(f,{borderBottomTitle:b,borderColor:h,borderStyle:p,borderTopRightTitle:y,borderTopTitle:m,flexDirection:"column",flexGrow:1,paddingX:2,paddingY:1,children:c(f,{alignItems:"center",flexGrow:1,justifyContent:"center",children:c(a,{dimColor:!0,children:"Waiting for task output..."})})}):d(f,{borderBottomTitle:b,borderColor:r?"yellow":h,borderStyle:p,borderTopRightTitle:y,borderTopTitle:m,flexDirection:"column",flexGrow:1,children:[c(f,{flexGrow:1,flexShrink:1,paddingY:1,children:c(Bt,{flexGrow:1,followOutput:!0,paddingX:2,ref:i,scrollbar:!0,scrollbarColor:"gray",scrollbarStyle:"block",children:x.map((E,C)=>c(a,{children:E},String(C)))})}),r&&c(f,{flexShrink:0,justifyContent:"center",paddingX:1,children:c(a,{bold:!0,color:"yellow",children:"INTERACTIVE — keystrokes forwarded to task — Esc to exit"})})]})},"OutputPanel");var Ky=Object.defineProperty,an=$((t,e)=>Ky(t,"name",{value:e,configurable:!0}),"x");const va=6,wa=8,ka=10,Qy=an(t=>t==="running"||t==="pending"?fa:t==="local-cache"||t==="local-cache-kept-existing"?"Local":t==="remote-cache"?"Remote":sn,"getCacheLabel"),di=an((t,e)=>e[0]===t?"[1]":e[1]===t?"[2]":"","getPinLabel"),ui=an(({compact:t,isSelected:e,pinLabel:r,row:n})=>{const{status:i,taskId:o}=n,s=e?">":" ";let l;if(i==="running")l=d(a,{bold:!0,color:"white",children:[" ",c(Oi,{type:"dots"})," "]});else if(i==="pending")l=c(a,{bold:!0,color:"gray",children:" · "});else{const{color:g,icon:p}=vr(i);l=d(a,{bold:!0,color:g,children:[" ",p," "]})}let u=fa;return i!=="running"&&i!=="pending"?u=n.duration===void 0?sn:$t(n.duration):i==="running"&&n.elapsed!==void 0&&(u=$t(n.elapsed)),d(f,{children:[c(a,{children:s}),c(f,{width:va,children:l}),d(f,{flexGrow:1,children:[c(a,{bold:e,inverse:e,children:o}),r?c(a,{dimColor:!0,children:` ${r}`}):null]}),!t&&c(f,{justifyContent:"flex-end",width:wa,children:c(a,{dimColor:!or(i),children:Qy(i)})}),!t&&c(f,{justifyContent:"flex-end",width:ka,children:c(a,{dimColor:i==="pending",children:u})})]})},"TaskListRow"),pi=an(({compact:t,filterActive:e,filterText:r,focused:n,headerStatus:i,parallelSlots:o=3,pinnedTaskIds:s,rows:l,scrollRef:u,selectedIndex:g,title:p})=>{const h=i==="error"?"red":i==="success"?"green":n?"white":"gray",m=l[g]?.taskId,y=l.filter(E=>E.status==="running"),b=y.length>0||l.some(E=>E.status==="pending"),x=[];if(b)for(let E=0;E<o;E++){const C=y[E];C?x.push(c(ui,{compact:t,isSelected:C.taskId===m,pinLabel:di(C.taskId,s),row:C},`par-${C.taskId}`)):x.push(d(f,{children:[c(a,{children:" "}),c(f,{width:va,children:c(a,{bold:!0,color:"gray",children:" · "})}),c(a,{dimColor:!0,children:"Waiting for task..."})]},`par-empty-${String(E)}`))}return d(f,{borderColor:h,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[d(f,{flexShrink:0,gap:1,paddingX:1,children:[c(a,{bold:!0,inverse:!0,children:" VIS "}),c(a,{children:p}),!t&&d(f,{flexGrow:1,gap:0,justifyContent:"flex-end",children:[c(f,{justifyContent:"flex-end",width:wa,children:c(a,{dimColor:!0,children:"Cache"})}),c(f,{justifyContent:"flex-end",width:ka,children:c(a,{dimColor:!0,children:"Duration"})})]})]}),c(Bt,{flexGrow:1,flexShrink:1,paddingLeft:1,paddingY:1,ref:u,scrollbar:!0,scrollbarColor:"gray",scrollbarStyle:"block",children:l.map(E=>c(ui,{compact:t,isSelected:E.taskId===m,pinLabel:di(E.taskId,s),row:E},E.taskId))}),b&&c(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",borderTop:!0,flexDirection:"column",flexShrink:0,paddingLeft:1,paddingY:1,children:x}),e&&d(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",borderTop:!0,flexShrink:0,paddingX:1,children:[c(a,{bold:!0,color:"white",children:"/ "}),c(a,{children:r}),c(a,{inverse:!0,children:" "})]})]})},"TaskListPanel");var Zy=Object.defineProperty,ev=$((t,e)=>Zy(t,"name",{value:e,configurable:!0}),"y$1");const fi=40,gi=10,hi=100,tv=ev(({autoExitSeconds:t,parallelSlots:e,projectNames:r,stdinRegistry:n,store:i,targets:o,tasks:s})=>{const{exit:l}=Mt(),{columns:u,rows:g}=Dt(),p=cr(i.subscribe,i.getSnapshot),[h,m]=se(!1),y=we(null),b=we(null),x=we(null),[E,C]=se(!1),D=we({list:0,splitList:0,splitOutput:0}),N=We(()=>{p.viewMode==="list"?D.current.list=b.current?.getScrollOffset()??0:p.viewMode==="split"&&(D.current.splitList=b.current?.getScrollOffset()??0,D.current.splitOutput=x.current?.getScrollOffset()??0)},[p.viewMode]),L=We(T=>{setTimeout(()=>{if(T==="list"){const S=D.current.list;b.current?.scrollTo(S)}else if(T==="split"){const S=D.current.splitList;S>0?b.current?.scrollTo(S):b.current?.scrollTo(Math.max(0,i.getSnapshot().selectedIndex-2)),x.current?.scrollTo(D.current.splitOutput)}},0)},[i]),j=we(!1);ze(()=>{p.done&&!j.current&&(j.current=!0,t>0&&C(!0)),!p.done&&j.current&&(j.current=!1,C(!1))},[p.done,t]);const O=He(()=>{let T=p.rows;if(p.statusFilter!=="all"&&(T=T.filter(S=>p.statusFilter==="failed"?S.status==="failure":p.statusFilter==="running"?S.status==="running"||S.status==="pending":p.statusFilter==="passed"?S.status==="success"||or(S.status):!0)),p.filterText){const S=p.filterText.toLowerCase();T=T.filter(G=>G.taskId.toLowerCase().includes(S))}return T},[p.rows,p.filterText,p.statusFilter]),R=He(()=>p.rows.filter(T=>T.status==="running").length,[p.rows]),P=(O[p.selectedIndex]??null)?.taskId??null,M=p.pinnedTaskIds[0]??P,w=M?p.rows.find(T=>T.taskId===M):null,k=M?p.outputs.get(M)??"":"",I=go(r,o,s),z=p.done?`Completed ${I} (${$t((p.endTime??Date.now())-p.startTime)})`:`Running ${I}...`,q=p.done?p.failed>0?"error":"success":"running",Z=We(T=>{b.current?.scrollTo(Math.max(0,T-2))},[]);if(ze(()=>{p.interactiveMode&&w?.status!=="running"&&i.setInteractiveMode(!1)},[p.interactiveMode,w?.status,i]),ze(()=>{if(!M)return;let T=u;p.viewMode==="split"&&u>=hi?T=u-Math.floor(u*.4)-2:(p.viewMode==="split"||p.viewMode==="fullscreen")&&(T=u-2);const S=Math.max(1,g-4);n.get(M)?.resize?.(T,S)},[u,g,p.viewMode,M]),Ae((T,S)=>{if(S.escape){i.setInteractiveMode(!1);return}if(!M)return;const G=n.get(M);if(!G){i.setInteractiveMode(!1);return}if(S.return)G.write("\r");else if(S.upArrow)G.write("\x1B[A");else if(S.downArrow)G.write("\x1B[B");else if(S.rightArrow)G.write("\x1B[C");else if(S.leftArrow)G.write("\x1B[D");else if(S.backspace)G.write("");else if(S.delete)G.write("\x1B[3~");else if(S.tab)G.write(" ");else if(S.home)G.write("\x1B[H");else if(S.end)G.write("\x1B[F");else if(S.pageUp)G.write("\x1B[5~");else if(S.pageDown)G.write("\x1B[6~");else if(S.ctrl&&T){const be=T.toUpperCase().codePointAt(0);be!==void 0&&be>=65&&be<=90&&G.write(String.fromCodePoint(be-64))}else T&&G.write(T)},{isActive:p.interactiveMode}),Ae((T,S)=>{if(T==="c"&&S.ctrl){l();return}if(!E){if(h){S.escape||T==="?"?m(!1):T==="q"?(m(!1),C(!0)):S.downArrow||T==="j"?y.current?.scrollBy(1):S.upArrow||T==="k"?y.current?.scrollBy(-1):S.pageDown?y.current?.scrollBy(5):S.pageUp?y.current?.scrollBy(-5):S.home?y.current?.scrollToTop():S.end&&y.current?.scrollToBottom();return}if(T==="?"){m(!0);return}if(T==="q"){C(!0);return}if(T==="r"&&p.done){i.requestRerun();return}if(T==="R"&&p.done){const G=O[p.selectedIndex];G?.status==="failure"&&i.requestRetry(G.taskId);return}if(T==="F"&&!p.filterActive){const G=["all","failed","running","passed"],be=G.indexOf(p.statusFilter);i.setStatusFilter(G[(be+1)%G.length]);return}if(p.filterActive){if(S.escape){i.setFilterActive(!1);return}if(S.return){i.setFilterActive(!1);return}if(S.backspace){i.setFilter(p.filterText.slice(0,-1));return}if(T&&!S.ctrl&&!S.meta){i.setFilter(p.filterText+T);return}return}if(T==="i"&&w?.status==="running"&&(p.viewMode==="fullscreen"||p.viewMode==="split"&&p.focusedPanel==="output")){i.setInteractiveMode(!0);return}if(p.viewMode==="fullscreen"){if(S.escape){i.setViewMode("split"),L("split");return}if(S.downArrow||T==="j"){x.current?.scrollBy(1);return}if(S.upArrow||T==="k"){x.current?.scrollBy(-1);return}if(S.pageDown||S.ctrl&&T==="d"){x.current?.scrollBy(12);return}if(S.pageUp||S.ctrl&&T==="u"){x.current?.scrollBy(-12);return}if(S.home){x.current?.scrollToTop();return}if(S.end){x.current?.scrollToBottom();return}return}if(p.viewMode==="split"){if(S.tab){const G=p.focusedPanel==="tasks"?"output":"tasks";i.setFocusedPanel(G);return}if(p.focusedPanel==="output"){if(S.escape){i.setFocusedPanel("tasks");return}if(S.return){N(),i.setViewMode("fullscreen");return}if(S.downArrow||T==="j"){x.current?.scrollBy(1);return}if(S.upArrow||T==="k"){x.current?.scrollBy(-1);return}if(S.pageDown||S.ctrl&&T==="d"){x.current?.scrollBy(12);return}if(S.pageUp||S.ctrl&&T==="u"){x.current?.scrollBy(-12);return}if(S.home){x.current?.scrollToTop();return}if(S.end){x.current?.scrollToBottom();return}return}if(S.escape){i.setViewMode("list"),L("list");return}if(S.return){i.setFocusedPanel("output");return}}if(p.viewMode==="list"||p.viewMode==="split"&&p.focusedPanel==="tasks"){if(S.downArrow||T==="j"){const G=Math.min(p.selectedIndex+1,Math.max(0,O.length-1));i.setSelectedIndex(G),Z(G);return}if(S.upArrow||T==="k"){const G=Math.max(p.selectedIndex-1,0);i.setSelectedIndex(G),Z(G);return}if(S.return&&p.viewMode==="list"){N(),D.current.splitList=0,D.current.splitOutput=0,i.setViewMode("split"),i.setFocusedPanel("output"),L("split");return}if(T==="/"){i.setFilterActive(!0);return}if(T==="1"&&P){i.pinTask(0,P);return}if(T==="2"&&P){i.pinTask(1,P);return}if(T==="0"){i.clearPins();return}S.escape&&p.filterText&&i.setFilter("")}}},{isActive:!p.interactiveMode}),u<fi||g<gi)return c(f,{alignItems:"center",height:g,justifyContent:"center",width:u,children:d(a,{color:"yellow",children:["Terminal too small (",u,"x",g,"). Minimum:"," ",fi,"x",gi]})});const ue=d(f,{gap:1,children:[p.succeeded>0&&d(a,{bold:!0,color:"green",children:["✓"," ",p.succeeded]}),p.failed>0&&d(a,{bold:!0,color:"red",children:["✗"," ",p.failed]}),R>0&&d(a,{color:"cyan",children:["◷"," ",R]}),d(a,{dimColor:!0,children:[p.rows.length," ","total"]}),p.statusFilter!=="all"&&d(a,{color:"yellow",children:["[",p.statusFilter,"]"]})]});let ne;if(p.viewMode==="fullscreen")ne=[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Esc"}),c(a,{dimColor:!0,children:"BACK"})]},"esc"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"SCROLL"})]},"scroll"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"^u ^d"}),c(a,{dimColor:!0,children:"PAGE"})]},"page"),...w?.status==="running"?[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"i"}),c(a,{dimColor:!0,children:"INPUT"})]},"i")]:[],d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q")];else if(p.done){const T=O[p.selectedIndex]?.status==="failure";ne=[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"r"}),c(a,{dimColor:!0,children:"RERUN"})]},"r"),...T?[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"R"}),c(a,{dimColor:!0,children:"RETRY"})]},"R")]:[],d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]},"?"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"NAV"})]},"nav"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"F"}),c(a,{dimColor:!0,children:"FILTER"})]},"F"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"⏎"}),c(a,{dimColor:!0,children:p.viewMode==="list"?"OUTPUT":"FULLSCREEN"})]},"enter")]}else p.viewMode==="split"&&p.focusedPanel==="output"?ne=[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Esc"}),c(a,{dimColor:!0,children:"BACK"})]},"esc"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"SCROLL"})]},"scroll"),...w?.status==="running"?[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"i"}),c(a,{dimColor:!0,children:"INPUT"})]},"i")]:[],d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"⏎"}),c(a,{dimColor:!0,children:"FULLSCREEN"})]},"enter"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:"PANEL"})]},"tab"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]},"?")]:ne=[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"q"}),c(a,{dimColor:!0,children:"QUIT"})]},"q"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"?"}),c(a,{dimColor:!0,children:"HELP"})]},"?"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"↑↓"}),c(a,{dimColor:!0,children:"NAV"})]},"nav"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"/"}),c(a,{dimColor:!0,children:"FILTER"})]},"/"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"F"}),c(a,{dimColor:!0,children:"STATUS"})]},"F"),d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"⏎"}),c(a,{dimColor:!0,children:p.viewMode==="list"?"OUTPUT":"FULLSCREEN"})]},"enter"),...p.viewMode==="split"?[d(f,{gap:1,children:[c(a,{bold:!0,color:"white",children:"Tab"}),c(a,{dimColor:!0,children:"PANEL"})]},"tab")]:[]];const $e=d(f,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,justifyContent:"space-between",children:[c(f,{flexGrow:1,flexWrap:"wrap",gap:2,paddingX:1,children:ne}),c(f,{flexShrink:0,paddingX:1,children:ue})]}),fe=d(At,{backgroundColor:"#1e1e1e",footer:d(a,{dimColor:!0,children:[c(a,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",c(a,{bold:!0,color:"white",children:"?"}),"/",c(a,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:y,title:"KEYBOARD SHORTCUTS",visible:h,width:52,children:[d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"NAVIGATION"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↑","/k"]}),c(a,{dimColor:!0,children:" Move up"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↓","/j"]}),c(a,{dimColor:!0,children:" Move down"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Tab"]}),c(a,{dimColor:!0,children:" Switch panel (split)"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Esc"]}),c(a,{dimColor:!0,children:" Back / close"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Enter"]}),c(a,{dimColor:!0,children:" Show output / fullscreen"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"VIEWS"})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Enter"]}),d(a,{dimColor:!0,children:[" ","List"," ","→"," ","Split"," ","→"," ","Fullscreen"]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Esc"]}),d(a,{dimColor:!0,children:[" ","Fullscreen"," ","→"," ","Split"," ","→"," ","List"]})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"ACTIONS"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","/"]}),c(a,{dimColor:!0,children:" Filter by text"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","F"]}),c(a,{dimColor:!0,children:" Filter by status"})]})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","1"]}),c(a,{dimColor:!0,children:"/"}),c(a,{bold:!0,color:"white",children:"2"}),c(a,{dimColor:!0,children:" Pin to output pane"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","0"]}),c(a,{dimColor:!0,children:" Clear pins"})]})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","r"]}),c(a,{dimColor:!0,children:" Rerun all (done)"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","R"]}),c(a,{dimColor:!0,children:" Retry failed task"})]})]}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","i"]}),c(a,{dimColor:!0,children:" Interactive input (running task)"})]})]}),d(f,{flexDirection:"column",marginBottom:1,children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"SCROLLING"}),c(a,{dimColor:!0,children:" (output panel)"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↑","/k"]}),c(a,{dimColor:!0,children:" Scroll up"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","↓","/j"]}),c(a,{dimColor:!0,children:" Scroll down"})]})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","^u"]}),c(a,{dimColor:!0,children:" Page up"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","^d"]}),c(a,{dimColor:!0,children:" Page down"})]})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","Home"]}),c(a,{dimColor:!0,children:" Top"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","End"]}),c(a,{dimColor:!0,children:" Bottom"})]})]})]}),d(f,{flexDirection:"column",children:[d(f,{marginBottom:1,children:[c(a,{dimColor:!0,children:"── "}),c(a,{bold:!0,color:"white",children:"GENERAL"})]}),d(f,{children:[c(f,{width:24,children:d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","q"]}),c(a,{dimColor:!0,children:" Quit"})]})}),d(a,{children:[d(a,{bold:!0,color:"white",children:[" ","?"]}),c(a,{dimColor:!0,children:" Toggle help"})]})]})]})]}),Te=c(bt,{autoExitSeconds:t>0?t:3,onCancel:$(()=>{C(!1)},"onCancel"),visible:E});if(p.viewMode==="fullscreen")return d(f,{flexDirection:"column",height:g,width:u,children:[c(f,{flexGrow:1,children:c(li,{duration:w?.duration??w?.elapsed,focused:!0,interactiveMode:p.interactiveMode,output:k,scrollRef:x,status:w?.status,taskId:M})}),$e,Te,fe]});if(p.viewMode==="split"){const T=u>=hi,S=c(pi,{compact:!0,filterActive:p.filterActive,filterText:p.filterText,focused:p.focusedPanel==="tasks",headerStatus:q,parallelSlots:e,pinnedTaskIds:p.pinnedTaskIds,rows:O,scrollRef:b,selectedIndex:p.selectedIndex,title:z}),G=c(li,{duration:w?.duration??w?.elapsed,focused:p.focusedPanel==="output",interactiveMode:p.interactiveMode,output:k,scrollRef:x,showFullscreenHint:!0,status:w?.status,taskId:M});if(T){const Se=Math.floor(u*.4);return d(f,{flexDirection:"column",height:g,width:u,children:[d(f,{flexDirection:"row",flexGrow:1,children:[c(f,{width:Se,children:S}),c(f,{flexGrow:1,children:G})]}),$e,Te,fe]})}const be=Math.floor(g*.45);return d(f,{flexDirection:"column",height:g,width:u,children:[c(f,{height:be,children:S}),c(f,{flexGrow:1,children:G}),$e,Te,fe]})}return d(f,{flexDirection:"column",height:g,width:u,children:[c(f,{flexGrow:1,children:c(pi,{filterActive:p.filterActive,filterText:p.filterText,focused:!0,headerStatus:q,parallelSlots:e,pinnedTaskIds:p.pinnedTaskIds,rows:O,scrollRef:b,selectedIndex:p.selectedIndex,title:z})}),$e,Te,fe]})},"VisTaskRunnerApp");var rv=Object.defineProperty,Et=$((t,e)=>rv(t,"name",{value:e,configurable:!0}),"n$1");const nv=Et(t=>{const{args:e,autoExit:r=!1,projectNames:n,stdinRegistry:i,tasks:o}=t,s=new Ur(o),l=typeof e.parallel=="number"?e.parallel:3,u=r===!0?3:typeof r=="number"?r:0;let g,p;const h=new Promise(N=>{p=N});let m;const y=Et(()=>{m&&(clearInterval(m),m=void 0)},"cleanup"),b=Et(()=>{if(i){for(const N of i.values())N.kill?.();i.clear()}},"killAllPtyProcesses"),x=Et(()=>{y(),D(),b(),process.stdout.write("\x1B[?1049l\x1B[?25h"),g?.cleanup(),process.exit(1)},"onSignal"),E=Et(()=>{const N=s.getSnapshot(),L=$t(Date.now()-N.startTime),j=N.rows.filter(P=>P.status==="failure").map(P=>P.taskId),O=process.stdout.columns||80;process.stdout.write(`
799
+ `);for(const P of N.rows){const{status:M,taskId:w}=P,k=vr(M);let I="";switch(M){case"local-cache":case"local-cache-kept-existing":{I=" [local cache]";break}case"remote-cache":{I=" [remote cache]";break}case"skipped":{I=" [skipped]";break}}const z=ge(H.createElement(a,null," ",H.createElement(a,{color:k.color},k.icon),` vis run ${w}`,I?H.createElement(a,{dimColor:!0},` ${I}`):null),{columns:O});process.stdout.write(`${z}
800
+ `)}process.stdout.write(`
801
+ `);const R=ge(H.createElement(ga,{cached:N.cached,failed:N.failed,failedIds:j,projectNames:n,succeeded:N.succeeded,targets:e.targets,tasks:o,took:L}),{columns:O});if(process.stdout.write(`${R}
802
+ `),j.length>0)for(const P of j){const M=N.outputs.get(P);if(M?.trim()){const w=ge(H.createElement(a,null,`
803
+ `,H.createElement(a,{bold:!0,color:"red"},` ${ho} vis run ${P}`)),{columns:O});process.stdout.write(`${w}
804
+
805
+ `);const k=M.trim().split(`
806
+ `).map(I=>` ${I}`).join(`
807
+ `);process.stdout.write(`${k}
808
+ `)}}},"printExitSummary");let C;const D=Et(()=>{C&&(clearInterval(C),C=void 0)},"clearKeepAlive");return{lifeCycle:{endCommand(){y(),s.markDone(),C||(C=setInterval(()=>{},1e3)),process.stdin.isTTY&&typeof process.stdin.setRawMode=="function"&&(process.stdin.setRawMode(!0),process.stdin.ref(),process.stdin.resume())},endTasks(N){s.endTasks(N)},printTaskTerminalOutput(N,L,j){s.getSnapshot().outputs.has(N.id)||s.addOutput(N.id,j)},startCommand(){process.on("SIGINT",x),process.on("SIGTERM",x),C||(C=setInterval(()=>{},1e3)),process.stdin.isTTY&&typeof process.stdin.setRawMode=="function"&&(process.stdin.setRawMode(!0),process.stdin.ref(),process.stdin.resume()),g=st(H.createElement(tv,{autoExitSeconds:u,parallelSlots:l,projectNames:n,stdinRegistry:i??new Map,store:s,targets:e.targets,tasks:o}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}),g.waitUntilExit().then(()=>{D(),b(),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),E(),p()},()=>{D(),b(),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),p()})},startTasks(N){s.startTasks(N),m||(m=setInterval(()=>{s.tick()},100))}},renderIsDone:h,store:s}},"createDynamicOutputRenderer");var ov=Object.defineProperty,iv=$((t,e)=>ov(t,"name",{value:e,configurable:!0}),"u$5");class sv{static{$(this,"StaticOutputLifeCycle")}static{iv(this,"StaticOutputLifeCycle")}#e;#t;#n;#o=[];#r=[];#i=new Map;#s=0;constructor(e){this.#e=e.projectNames,this.#t=e.args.targets,this.#n=e.tasks}startCommand(){this.#s=Date.now();const e=process.stdout.columns||80,r=`Running ${go(this.#e,this.#t,this.#n)}`,n=ge(H.createElement(En,{title:r,variant:"info"}),{columns:e});process.stdout.write(n);const i=this.#n[0],o=i?.overrides?Object.entries(i.overrides).filter(([s])=>s!=="command"):[];if(o.length>0){process.stdout.write(`
809
+ With additional flags:
810
+ `);for(const[s,l]of o)process.stdout.write(`${Ny(" ",s,l)}
811
+ `)}process.stdout.write(`
812
+ `)}startTasks(e){const r=process.stdout.columns||80;for(const n of e){const i=ge(H.createElement(a,null,H.createElement(a,{dimColor:!0},">"),` ${n.id}`),{columns:r});process.stdout.write(`${i}
813
+ `)}}endTasks(e){const r=process.stdout.columns||80;for(const n of e){this.#i.set(n.task.id,n),n.status==="failure"?this.#o.push(n):or(n.status)&&this.#r.push(n);const i=ma(n.status),o=n.startTime&&n.endTime?` (${$t(n.endTime-n.startTime)})`:"",s=or(n.status)?" [cache]":"",l=ge(H.createElement(a,null,i,` ${n.task.id}`,s?H.createElement(a,{color:"cyan"},s):null,o?H.createElement(a,{dimColor:!0},o):null),{columns:r});process.stdout.write(`${l}
814
+ `)}}printTaskTerminalOutput(e,r,n){qy(e.id,r,n)}endCommand(){const e=$t(Date.now()-this.#s),r=this.#n.filter(o=>!this.#i.has(o.id)).map(o=>o.id);process.stdout.write(`
815
+ `);const n=process.stdout.columns||80,i=ge(H.createElement(ga,{cached:this.#r.length,failed:this.#o.length,failedIds:this.#o.map(o=>o.task.id),projectNames:this.#e,skippedIds:r.length>0?r:void 0,succeeded:this.#i.size-this.#o.length-this.#r.length,targets:this.#t,tasks:this.#n,took:e}),{columns:n});process.stdout.write(`${i}
816
+ `)}}var av=Object.defineProperty,ir=$((t,e)=>av(t,"name",{value:e,configurable:!0}),"E$1");const jn=256*1024;let cv=class{static{$(this,"Q")}static{ir(this,"OutputRingBuffer")}#e;#t="";#n=!1;constructor(e){this.#e=e}append(e){this.#t+=e,this.#t.length>this.#e&&(this.#t=this.#t.slice(-this.#e),this.#n=!0)}toString(){return this.#n?`[...output truncated, showing last ${Math.round(this.#e/1024)}KB...]
817
+ ${this.#t}`:this.#t}};const mi=ir((t,e,r,n)=>async(i,o)=>{const s=o.cwd??i.projectRoot??t,l=s.startsWith("/")?s:`${t}/${s}`,u=i.overrides.command;if(!u)return{code:0,terminalOutput:`No command configured for ${i.target.project}:${i.target.target}`};const g=!!e;g&&(i.cache=!1);const p=g?void 0:new cv(jn),h=g?new Ai(jn):void 0,m=ir(y=>{if(y.kind==="started"&&y.write&&e&&e.set(i.id,{kill:y.kill,resize:y.resize,write:y.write}),(y.kind==="stdout"||y.kind==="stderr")&&y.text!==void 0)if(h)h.write(y.text),n?.(i.id,h.toString());else{const b=`${y.text}
818
+ `;p.append(b),r?.(i.id,b)}y.kind==="close"&&e&&e.delete(i.id)},"onEvent");return{code:(await Ii([{command:u,cwd:l,env:o.env,name:i.id,...e?{ptySize:{cols:process.stdout.columns??80,rows:process.stdout.rows??24},stdin:"pty"}:{}}],{killOthers:["failure"],onEvent:m})).closeEvents[0]?.exitCode??1,terminalOutput:h?h.toString():p.toString()}},"createConcurrentExecutor"),lv={group:"Run & Execute",argument:{description:"The target to run (e.g., build, test, lint)",name:"target",type:String},description:"Run a target across workspace projects",examples:[["vis run build","Run build on all projects"],["vis run test --projects=pkg-a,pkg-b","Run test on specific projects"],["vis run build --parallel=5","Run build with 5 parallel tasks"],["vis run build --no-cache","Run build without caching"]],execute:ir(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{const o=t[0];if(!o)throw new Error("Missing target. Usage: vis run <target>");if(!i)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const s=i,{config:l,workspace:u}=Kr(s,n),g=Hn(s,u);if(l.constraints&&!r.skipConstraints){const L=Ka(g,l.constraints);if(L.length>0){for(const j of L)e.error(`[${j.rule}] ${j.message}`);throw new Error(`${L.length} project constraint violation(s) found. Use --skip-constraints to bypass.`)}}let p=Object.keys(u.projects);if(r.projects){const L=new Set(r.projects.split(",").map(j=>j.trim()));if(p=p.filter(j=>L.has(j)),p.length===0)throw new Error(`No matching projects found for: ${String(r.projects)}`)}const h=p.filter(L=>u.projects[L]?.targets?.[o]!==void 0);if(h.length===0){e.info(`No projects have the "${o}" target.`);return}let m=h.map(L=>{const j=u.projects[L],O=j?.targets?.[o],R={project:L,target:o},P=`${L}:${o}`;return{cache:O?.cache??l.targetDefaults?.[o]?.cache,id:P,outputs:O?.outputs??l.targetDefaults?.[o]?.outputs??[],overrides:{command:O?.command},parallelism:O?.parallelism??l.targetDefaults?.[o]?.parallelism,projectRoot:j?.root,target:R}});const y=Qa(r.partition);if(y&&(m=Za.partitionTasks(m,y),e.info(`Partition ${y.index}/${y.total}: running ${m.length} task(s)`),m.length===0)){e.info("No tasks assigned to this partition.");return}const b=ec(m,{projectGraph:g,targetDefaults:l.targetDefaults,workspace:u}),x=Date.now(),E={cacheDirectory:r.cacheDir,dryRun:r.dryRun,parallel:r.parallel??3,skipNxCache:!r.cache,summarize:r.summarize,...l.taskRunnerOptions},C=process.stdout.isTTY&&!De,D=l.tui?.autoExit??!1,N={args:{parallel:E.parallel,targets:[o]},autoExit:D,projectNames:h,tasks:m};if(C){const L=new Map,j=nv({...N,stdinRegistry:L}),{lifeCycle:O,store:R}=j,P=mi(s,L,(k,I)=>R.addOutput(k,I),(k,I)=>R.setOutput(k,I));let M="rerun",w=null;for(;M!=="quit";){if(M==="rerun")await wo(m,E,{lifeCycle:O,projectGraph:g,taskExecutor:P,taskGraph:b,workspaceRoot:s});else if(M==="retry"&&w){const k=m.find(z=>z.id===w),I=k?.overrides.command;if(k&&I){const z=k.projectRoot??s,q=z.startsWith("/")?z:`${s}/${z}`;O.startTasks?.([k]);const Z=new Ai(jn),ue=(await Ii([{command:I,cwd:q,name:k.id,ptySize:{cols:process.stdout.columns??80,rows:process.stdout.rows??24},stdin:"pty"}],{onEvent:ir(ne=>{ne.kind==="started"&&ne.write&&L.set(k.id,{kill:ne.kill,resize:ne.resize,write:ne.write}),(ne.kind==="stdout"||ne.kind==="stderr")&&ne.text&&(Z.write(ne.text),R.setOutput(k.id,Z.toString())),ne.kind==="close"&&L.delete(k.id)},"onEvent")})).closeEvents[0];O.endTasks?.([{code:ue?.exitCode??1,status:ue?.exitCode===0?"success":"failure",task:k,terminalOutput:R.getSnapshot().outputs.get(k.id)}])}else k&&O.endTasks?.([{code:1,status:"failure",task:k,terminalOutput:`No command configured for ${k.id}`}]);w=null,R.markDone()}M=await new Promise(k=>{const I=R.subscribe(()=>{const z=R.getSnapshot();z.rerunRequested&&(R.acknowledgeRerun(),I(),k("rerun")),z.retryTaskId&&(w=R.acknowledgeRetry(),I(),k("retry"))});j.renderIsDone.then(()=>{I(),k("quit")},()=>{I(),k("quit")})})}await j.renderIsDone}else{const L=mi(s),j=new sv(N),O=await wo(m,E,{lifeCycle:j,projectGraph:g,taskExecutor:L,taskGraph:b,workspaceRoot:s});if(r.summarize){const P=tc(O,b,x);await rc(P,s)}let R=!1;for(const[,P]of O)P.status==="failure"&&(R=!0);if(R)throw new Error("Some tasks failed.")}},"execute"),name:"run",options:[{alias:"p",description:"Comma-separated list of projects to run",name:"projects",type:String},{defaultValue:3,description:"Maximum number of parallel tasks",name:"parallel",type:Number},{defaultValue:!0,description:"Enable caching (use --no-cache to disable)",name:"cache",type:Boolean},{description:"Custom cache directory",name:"cache-dir",type:String},{defaultValue:!1,description:"Show what would run without executing",name:"dry-run",type:Boolean},{defaultValue:!1,description:"Generate a run summary after execution",name:"summarize",type:Boolean},{description:'Partition tasks for distributed CI (e.g., "1/4" for first of four runners). Falls back to VIS_PARTITION env var.',name:"partition",type:String},{defaultValue:!1,description:"Skip project constraint validation",name:"skip-constraints",type:Boolean}]};var dv=Object.defineProperty,Gr=$((t,e)=>dv(t,"name",{value:e,configurable:!0}),"d$3");const uv=Gr(t=>{const e=new Set,r=[],n=Gr(o=>{const s=Pt(o);!e.has(s)&&ae(s)&&(e.add(s),r.push(s))},"addFile");n(F(t,"package.json"));const i=Xr(t);if(i){const o=wt(t,i);for(const s of o)n(F(t,s,"package.json"))}else{const o=F(t,"package.json");if(ae(o)){const s=JSON.parse(Y(o,"utf8")),l=Array.isArray(s.workspaces)?s.workspaces:s.workspaces?.packages;if(l){const u=wt(t,l);for(const g of u)n(F(t,g,"package.json"))}}}return r},"findPackageJsonFiles"),pv=Gr((t,e)=>{const r=Jr();if(!r)throw new Error("Native bindings unavailable: sort-package-json requires the native addon. Ensure the correct platform binary is installed.");return r.sortPackageJsonStringWithOptions(t,{pretty:!0,sort_scripts:e})},"sortContents"),fv={group:"Workspace",description:"Sort package.json files across the workspace using the sort-package-json Rust crate",examples:[["vis sort-package-json","Sort all package.json files in the workspace"],["vis sort-package-json --check","Check if files are already sorted (exit 1 if not)"],["vis sort-package-json --sort-scripts","Also sort the scripts field alphabetically"]],execute:Gr(async({options:t,visConfig:e,workspaceRoot:r})=>{const n=r??process.cwd(),i=e?.sortPackageJson,o=t.check||!1,s=t["sort-scripts"]||i?.sortScripts||!1,l=uv(n);if(l.length===0){v("No package.json files found.");return}let u=0,g=0,p=0;for(const h of l)try{const m=Y(h,"utf8");let y;try{y=pv(m,s)}catch(E){tr(`${h}: ${wn(E)}`),p++;continue}const b=m.endsWith(`
819
+ `)?m:`${m}
820
+ `,x=y.endsWith(`
821
+ `)?y:`${y}
822
+ `;if(b===x){g++;continue}u++,o?oe(`${h} is not sorted`):(_(h,x,"utf8"),X(`Sorted ${h}`))}catch(m){tr(`${h}: ${wn(m)}`),p++}if(o)u>0?(v(`${u} file${u===1?"":"s"} not sorted, ${g} already sorted`),process.exitCode=1):v(`All ${g} package.json file${g===1?" is":"s are"} sorted`);else{const h=[];u>0&&h.push(`sorted ${u} file${u===1?"":"s"}`),g>0&&h.push(`${g} already sorted`),p>0&&h.push(`${p} error${p===1?"":"s"}`),v(h.join(", "))}p>0&&(process.exitCode=1)},"execute"),name:"sort-package-json",options:[{alias:"c",defaultValue:!1,description:"Check if package.json files are sorted without writing (exits 1 if unsorted)",name:"check",type:Boolean},{defaultValue:!1,description:"Also sort the scripts field alphabetically",name:"sort-scripts",type:Boolean}]};var gv=Object.defineProperty,ba=$((t,e)=>gv(t,"name",{value:e,configurable:!0}),"s$3");const hv=ba((t,e)=>{const r=[["allow-empty","allowEmpty"],["continue-on-error","continueOnError"],["cwd","cwd"],["debug","debug"],["diff","diff"],["diff-filter","diffFilter"],["fail-on-changes","failOnChanges"],["hide-partially-staged","hidePartiallyStaged"],["hide-unstaged","hideUnstaged"],["quiet","quiet"],["relative","relative"],["revert","revert"],["stash","stash"],["verbose","verbose"]];for(const[n,i]of r)t[n]!==void 0&&(e[i]=t[n]);if(t.concurrent!==void 0){const n=t.concurrent;if(n==="true")e.concurrent=!0;else if(n==="false")e.concurrent=!1;else{const i=Number(n);e.concurrent=Number.isNaN(i)||n===""?!0:i}}},"mapOptions"),mv={group:"Run & Execute",description:"Run linters on staged files using config from vis.config.ts",examples:[["vis staged","Run staged linters"],["vis staged --verbose","Run with verbose output"],["vis staged --no-stash","Run without backup stash"],["vis staged --diff HEAD~1","Run against a specific diff"]],execute:ba(async({options:t,visConfig:e})=>{const r=(e??{}).staged;if(!r)throw new Error(`No "staged" config found in vis.config.ts. Please add a staged config:
132
823
 
133
824
  // vis.config.ts
134
825
  import { defineConfig } from "@visulima/vis/config";
135
826
 
136
827
  export default defineConfig({
137
828
  staged: { '*': 'vis check --fix' },
138
- });`);let n;try{n=(await import("lint-staged")).default}catch{throw new Error("lint-staged is required but not installed. Run: pnpm add -D lint-staged")}const r={config:a};bs(e,r);const o=await n(r);process.exit(o?0:1)},"execute"),name:"staged",options:[{defaultValue:!1,description:"Allow empty commits when tasks revert all staged changes",name:"allow-empty",type:Boolean},{description:"Number of concurrent tasks or false for serial",name:"concurrent",type:String},{defaultValue:!1,description:"Run all tasks to completion even if one fails",name:"continue-on-error",type:Boolean},{description:"Working directory to run all tasks in",name:"cwd",type:String},{defaultValue:!1,description:"Enable debug output",name:"debug",type:Boolean},{description:"Override the default --staged flag of git diff",name:"diff",type:String},{description:"Override the default diff-filter",name:"diff-filter",type:String},{defaultValue:!1,description:"Fail with exit code 1 when tasks modify tracked files",name:"fail-on-changes",type:Boolean},{defaultValue:!1,description:"Hide unstaged changes from partially staged files",name:"hide-partially-staged",type:Boolean},{defaultValue:!1,description:"Hide all unstaged changes before running tasks",name:"hide-unstaged",type:Boolean},{defaultValue:!1,description:"Suppress console output",name:"quiet",type:Boolean},{defaultValue:!1,description:"Pass filepaths relative to cwd to tasks",name:"relative",type:Boolean},{defaultValue:!1,description:"Revert to original state in case of errors",name:"revert",type:Boolean},{defaultValue:!0,description:"Enable backup stash",name:"stash",type:Boolean},{defaultValue:!1,description:"Show task output even when tasks succeed",name:"verbose",type:Boolean}]};var js=Object.defineProperty,X=y((e,t)=>js(e,"name",{value:t,configurable:!0}),"s");const Cs=X(e=>{const t=[];for(const a of e.filters)t.push("--filter",a);return e.workspaceRoot&&t.push("--filter","."),t.push("update"),e.latest&&t.push("--latest"),e.recursive&&t.push("--recursive"),e.interactive&&t.push("--interactive"),e.dev&&t.push("--dev"),e.prod&&t.push("--prod"),e.noOptional&&t.push("--no-optional"),e.noSave&&t.push("--no-save"),t.push(...e.packages),{args:t,bin:"pnpm"}},"resolvePnpm"),xs=X(e=>{const t=[];return e.filters.length>0&&t.push("workspace",e.filters[0]),t.push("upgrade"),e.latest&&t.push("--latest"),t.push(...e.packages),{args:t,bin:"yarn"}},"resolveYarnV1"),Es=X(e=>{const t=[];if(e.filters.length>0||e.recursive){t.push("workspaces","foreach","--all");for(const a of e.filters)t.push("--include",a)}return t.push("up"),e.interactive&&t.push("--interactive"),t.push(...e.packages),{args:t,bin:"yarn"}},"resolveYarnBerry"),Rs=X((e,t)=>{const a=["update"];e.latest&&t.push("npm does not support --latest flag. Packages will be updated within their semver range."),e.interactive&&t.push("npm does not support --interactive mode.");for(const n of e.filters)a.push("--workspace",n);return e.recursive&&a.push("--workspaces"),e.workspaceRoot&&a.push("--include-workspace-root"),e.dev&&a.push("--dev"),e.prod&&a.push("--production"),e.noOptional&&a.push("--no-optional"),e.noSave&&a.push("--no-save"),a.push(...e.packages),{args:a,bin:"npm"}},"resolveNpm"),Ns=X(e=>{const t=["update"];e.latest&&t.push("--latest");for(const a of e.filters)t.push("--filter",a);return t.push(...e.packages),{args:t,bin:"bun"}},"resolveBun"),Os=X((e,t,a)=>{const n=[];if(a.global)return{command:{args:["update","--global",...a.packages],bin:"npm"},warnings:n};let r;switch(e){case"bun":{r=Ns(a);break}case"npm":{r=Rs(a,n);break}case"pnpm":{r=Cs(a);break}case"yarn":{r=t.startsWith("1.")?xs(a):Es(a);break}default:{const o=e;throw new Error(`Unsupported package manager: ${String(o)}`)}}return{command:r,warnings:n}},"resolveUpdateCommand");var Bs=Object.defineProperty,Z=y((e,t)=>Bs(e,"name",{value:t,configurable:!0}),"m");const Is=Z((e,t,a)=>{const n=e.target??t.target??"latest";if(!["latest","minor","patch"].includes(n))throw new Error(`Invalid target "${n}". Use: latest, minor, or patch.`);return{exclude:[...V(e.exclude),...V(t.exclude)],include:[...V(e.include),...V(t.include),...a],includePrerelease:e.prerelease||t.prerelease||!1,security:e.security||e.ai||t.security||!1,target:n}},"buildCatalogCheckOptions"),ot=Z((e,t,a,n)=>{a==="json"?process.stdout.write(`${Vr({failed:t,outdated:e})}
139
- `):a==="minimal"?process.stdout.write(`${Ut(e)}
140
- `):(Mt(e,n),n.info(Vt(e)))},"writeFormattedOutput"),Ps=Z(async(e,t,a,n,r)=>{const o=qr(e,a,t),s=t==="pnpm"?"pnpm-workspace.yaml":"package.json";if(r.info(`
141
- Updated ${s}`),o&&r.info(`Backup saved to ${o}`),n.changelog){r.info(`
142
- Fetching changelogs...`);const i=await Xr(a);for(const c of i){const l=c.releaseUrl??c.repoUrl??c.npmUrl;r.info(` ${c.packageName}: ${l}`)}}if(n.install??!0){const i={bun:"bun install",npm:"npm install",pnpm:"pnpm install",yarn:"yarn install"}[t]??`${t} install`;r.info(`Running ${i}...
143
- `);try{Pe(i,{cwd:e,env:process.env,stdio:"inherit"})}catch{r.warn(`${i} failed. You may need to run it manually.`)}}},"applyCatalogAndInstall"),As=Z(async(e,t,a,n,r,o)=>{const s=a.update??{},i=Pt(e),c=De(e,t,{dev:n.dev,prod:n.prod});if(c.size===0){o.info("No catalogs found.");return}const l=Is(n,s,r);let p=0;for(const j of c.values())p+=j.size;o.info(`Checking ${String(p)} catalog dependencies...
144
- `);const{failed:g,outdated:f}=await Tt(c,l,i);if(g.length>0&&o.warn(`Failed to fetch: ${g.join(", ")}`),f.length===0){o.info("All catalog dependencies are up to date.");return}const w=n.format??s.format??"table";let $;if(n.ai){const j=Ue(n["ai-type"]??"impact");$=await Me(f,o,a.ai,j)}if(n["dry-run"]){if(w==="json"){const j={failed:g,outdated:f};$&&(j.aiAnalysis=$),process.stdout.write(`${JSON.stringify(j,void 0,2)}
145
- `)}else o.info(`Would update ${String(f.length)} dependencies:
146
- `),ot(f,g,w,o),$&&(o.info(""),o.info(de($)));return}$&&w!=="json"&&(o.info(de($)),o.info(""));let x=f;if(n.interactive&&(x=await Kr(f),x.length===0)){o.info("No updates selected.");return}o.info(`Updating ${String(x.length)} catalog dependencies...
147
- `),ot(x,[],w,o);const G={...n,install:n.install??s.install};await Ps(e,t,x,G,o)},"executeCatalogUpdate"),Ls=Z((e,t,a,n,r,o)=>{const s={dev:n.dev,filters:V(n.filter),global:n.global,interactive:n.interactive,latest:n.latest||n.target==="latest",noOptional:n["no-optional"],noSave:n["no-save"],packages:r,prod:n.prod,recursive:n.recursive,workspaceRoot:n["workspace-root"]},{command:i,warnings:c}=Os(t,a,s);for(const p of c)o.warn(p);const l=`${i.bin} ${i.args.join(" ")}`.trim();if(n["dry-run"]){o.info(`Would run: ${l}`);return}o.info(`Running: ${l}`);try{Pe(l,{cwd:e,env:process.env,stdio:"inherit"})}catch(p){const g=p.status??1;throw new Error(`Update command failed with exit code ${String(g)}`,{cause:p})}},"executePmWrapper"),Ts={alias:"up",argument:{description:"Packages to update (updates all if omitted)",name:"packages",type:String},description:"Update packages to their latest versions",examples:[["vis update react","Update react within semver range"],["vis up react -L","Update react to latest"],["vis update -i","Interactive mode"],["vis update --filter app","Update in specific workspace"],["vis update -r","Update in all workspaces"],["vis update --target minor","Only apply minor/patch updates (catalog mode)"],["vis update --dry-run","Preview changes without applying"],["vis update --exclude '@types/*'","Exclude packages by pattern"],["vis update --changelog","Show changelog links after updating"],["vis update --rollback","Restore catalog from last backup"],["vis update --ai","Run AI analysis before applying updates"]],execute:Z(async({argument:e,logger:t,options:a,visConfig:n,workspaceRoot:r})=>{if(!r)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const o=r,{packageManager:s}=xe(o);if(a.rollback){if(!Mr(o,s)){t.info("No backup found. Run 'vis update' first to create a backup.");return}if(Ur(o,s))t.info("Restored from backup.");else throw new Error("Failed to restore from backup.");return}if(!a["no-catalog"]&&$r(o,s))await As(o,s,n??{},a,e,t);else{const i=ca(s);Ls(o,s,i,a,e,t)}},"execute"),name:"update",options:[{alias:"L",defaultValue:!1,description:"Update to latest version (ignore semver range)",name:"latest",type:Boolean},{alias:"t",description:"Update target: latest, minor, or patch (default: latest, catalog mode)",name:"target",type:String},{alias:"d",defaultValue:!1,description:"Preview changes without applying",name:"dry-run",type:Boolean},{alias:"g",defaultValue:!1,description:"Update global packages",name:"global",type:Boolean},{alias:"r",defaultValue:!1,description:"Update recursively in all workspace packages",name:"recursive",type:Boolean},{description:"Filter packages in monorepo",name:"filter",type:String},{alias:"w",defaultValue:!1,description:"Include workspace root",name:"workspace-root",type:Boolean},{alias:"D",defaultValue:!1,description:"Update only devDependencies",name:"dev",type:Boolean},{alias:"P",defaultValue:!1,description:"Update only dependencies",name:"prod",type:Boolean},{alias:"i",defaultValue:!1,description:"Interactive mode",name:"interactive",type:Boolean},{defaultValue:!1,description:"Don't update optionalDependencies",name:"no-optional",type:Boolean},{defaultValue:!1,description:"Update lockfile only",name:"no-save",type:Boolean},{description:"Glob pattern to include packages (repeatable, catalog mode)",lazyMultiple:!0,name:"include",type:String},{description:"Glob pattern to exclude packages (repeatable, catalog mode)",lazyMultiple:!0,name:"exclude",type:String},{defaultValue:!1,description:"Include prerelease versions (catalog mode)",name:"prerelease",type:Boolean},{defaultValue:!1,description:"Check for known security vulnerabilities (via OSV.dev)",name:"security",type:Boolean},{defaultValue:!1,description:"Skip catalog mode, use package manager directly",name:"no-catalog",type:Boolean},{description:"Output format: table, json, or minimal (default: table)",name:"format",type:String},{defaultValue:!1,description:"Show changelog URLs for updated packages",name:"changelog",type:Boolean},{description:"Run install after catalog update, --no-install to skip (default: true)",name:"install",type:Boolean},{defaultValue:!1,description:"Restore catalog file from the last backup",name:"rollback",type:Boolean},{defaultValue:!1,description:"Run AI analysis on outdated packages before updating (catalog mode)",name:"ai",type:Boolean},{description:"AI analysis type: impact, security, compatibility, or recommend (default: impact)",name:"ai-type",type:String}]};var Us=Object.defineProperty,Ms=y((e,t)=>Us(e,"name",{value:t,configurable:!0}),"r");try{require("node:module")?.enableCompileCache?.()||require("v8-compile-cache")}catch{}const N=ia("vis",{packageName:"vis",packageVersion:Ra.version});N.addPlugin({beforeCommand:Ms(async e=>{try{const t=la(process.cwd()).path;e.workspaceRoot=t,e.visConfig=await xa(t)}catch(t){t instanceof Error&&!t.message.includes("monorepo root")&&e.logger.warn(`Failed to load vis config: ${t.message}`),e.visConfig={}}},"beforeCommand"),name:"config-loader"});N.addCommand($s);N.addCommand(co);N.addCommand(Ja);N.addCommand(Vo);N.addCommand(Ts);N.addCommand(ro);N.addCommand(Hn);N.addCommand(to);N.addCommand(ys);N.addCommand(Ss);await N.run();
829
+ });`);let n;try{n=(await import("lint-staged")).default}catch{throw new Error("lint-staged is required but not installed. Run: pnpm add -D lint-staged")}const i={config:r};hv(t,i);const o=await n(i);process.exit(o?0:1)},"execute"),name:"staged",options:[{defaultValue:!1,description:"Allow empty commits when tasks revert all staged changes",name:"allow-empty",type:Boolean},{description:"Number of concurrent tasks or false for serial",name:"concurrent",type:String},{defaultValue:!1,description:"Run all tasks to completion even if one fails",name:"continue-on-error",type:Boolean},{description:"Working directory to run all tasks in",name:"cwd",type:String},{defaultValue:!1,description:"Enable debug output",name:"debug",type:Boolean},{description:"Override the default --staged flag of git diff",name:"diff",type:String},{description:"Override the default diff-filter",name:"diff-filter",type:String},{defaultValue:!1,description:"Fail with exit code 1 when tasks modify tracked files",name:"fail-on-changes",type:Boolean},{defaultValue:!1,description:"Hide unstaged changes from partially staged files",name:"hide-partially-staged",type:Boolean},{defaultValue:!1,description:"Hide all unstaged changes before running tasks",name:"hide-unstaged",type:Boolean},{defaultValue:!1,description:"Suppress console output",name:"quiet",type:Boolean},{defaultValue:!1,description:"Pass filepaths relative to cwd to tasks",name:"relative",type:Boolean},{defaultValue:!1,description:"Revert to original state in case of errors",name:"revert",type:Boolean},{defaultValue:!0,description:"Enable backup stash",name:"stash",type:Boolean},{defaultValue:!1,description:"Show task output even when tasks succeed",name:"verbose",type:Boolean}]};var yv=Object.defineProperty,vv=$((t,e)=>yv(t,"name",{value:e,configurable:!0}),"c$2");const wv={group:"Dependencies",argument:{description:"Packages to unlink (omit for current package)",name:"packages",type:String},description:"Unlink a previously linked package",examples:[["vis unlink","Unlink current package"],["vis unlink react","Unlink specific package"],["vis unlink -r","Unlink in all workspace packages"]],execute:vv(async({argument:t,logger:e,options:r,workspaceRoot:n})=>{const i=t||[],o=n??process.cwd(),s=pe(o),l=Vc(s,i,r.recursive||!1,o,e);l!==0&&(process.exitCode=l)},"execute"),name:"unlink",options:[{alias:"r",defaultValue:!1,description:"Unlink in all workspace packages",name:"recursive",type:Boolean}]};var kv=Object.defineProperty,Gt=$((t,e)=>kv(t,"name",{value:e,configurable:!0}),"s$2");const bv=Gt(t=>{const e=[];for(const r of t.filters)e.push("--filter",r);return t.workspaceRoot&&e.push("--filter","."),e.push("update"),t.latest&&e.push("--latest"),t.recursive&&e.push("--recursive"),t.interactive&&e.push("--interactive"),t.dev&&e.push("--dev"),t.prod&&e.push("--prod"),t.noOptional&&e.push("--no-optional"),t.noSave&&e.push("--no-save"),e.push(...t.packages),{args:e,bin:"pnpm"}},"resolvePnpm"),$v=Gt(t=>{const e=[];return t.filters.length>0&&e.push("workspace",t.filters[0]),e.push("upgrade"),t.latest&&e.push("--latest"),e.push(...t.packages),{args:e,bin:"yarn"}},"resolveYarnV1"),xv=Gt(t=>{const e=[];if(t.filters.length>0||t.recursive){e.push("workspaces","foreach","--all");for(const r of t.filters)e.push("--include",r)}return e.push("up"),t.interactive&&e.push("--interactive"),e.push(...t.packages),{args:e,bin:"yarn"}},"resolveYarnBerry"),Sv=Gt((t,e)=>{const r=["update"];t.latest&&e.push("npm does not support --latest flag. Packages will be updated within their semver range."),t.interactive&&e.push("npm does not support --interactive mode.");for(const n of t.filters)r.push("--workspace",n);return t.recursive&&r.push("--workspaces"),t.workspaceRoot&&r.push("--include-workspace-root"),t.dev&&r.push("--dev"),t.prod&&r.push("--production"),t.noOptional&&r.push("--no-optional"),t.noSave&&r.push("--no-save"),r.push(...t.packages),{args:r,bin:"npm"}},"resolveNpm"),Cv=Gt(t=>{const e=["update"];t.latest&&e.push("--latest");for(const r of t.filters)e.push("--filter",r);return e.push(...t.packages),{args:e,bin:"bun"}},"resolveBun"),Ev=Gt((t,e,r)=>{const n=[];if(r.global)return{command:{args:["update","--global",...r.packages],bin:"npm"},warnings:n};let i;switch(t){case"bun":{i=Cv(r);break}case"npm":{i=Sv(r,n);break}case"pnpm":{i=bv(r);break}case"yarn":{i=e.startsWith("1.")?$v(r):xv(r);break}default:{const o=t;throw new Error(`Unsupported package manager: ${String(o)}`)}}return{command:i,warnings:n}},"resolveUpdateCommand");var jv=Object.defineProperty,zt=$((t,e)=>jv(t,"name",{value:e,configurable:!0}),"h$1");const Tv=zt((t,e,r)=>{const n=t.target??e.target??"latest";if(!["latest","minor","patch"].includes(n))throw new Error(`Invalid target "${n}". Use: latest, minor, or patch.`);return{exclude:[...Ie(t.exclude),...Ie(e.exclude)],ignore:Ie(e.ignore),include:[...Ie(t.include),...Ie(e.include),...r],includePrerelease:t.prerelease||e.prerelease||!1,security:t.security||t.ai||e.security||!1,target:n}},"buildCatalogCheckOptions"),yi=zt((t,e,r,n)=>{r==="json"?process.stdout.write(`${Au({failed:e,ignored:[],outdated:t})}
830
+ `):r==="minimal"?process.stdout.write(`${ms(t)}
831
+ `):(ys(t,n),n.info(Nr(t)))},"writeFormattedOutput"),vi=zt(async(t,e,r,n,i)=>{const o=Lu(t,r,e),s=e==="pnpm"?"pnpm-workspace.yaml":"package.json";if(i.info(`
832
+ Updated ${s}`),o&&i.info(`Backup saved to ${o}`),n.changelog){i.info(`
833
+ Fetching changelogs...`);const l=await vs(r);for(const u of l){const g=u.releaseUrl??u.repoUrl??u.npmUrl;i.info(` ${u.packageName}: ${g}`)}}if(n.install??!0){const l={bun:"bun install",npm:"npm install",pnpm:"pnpm install",yarn:"yarn install"}[e]??`${e} install`;i.info(`Running ${l}...
834
+ `);try{Hr(l,{cwd:t,env:process.env,stdio:"inherit"})}catch{i.warn(`${l} failed. You may need to run it manually.`)}}},"applyCatalogAndInstall"),Av=zt(async(t,e,r,n,i,o)=>{const s=r.update??{},l=Qn(t),u=Zr(t,e,{dev:n.dev,prod:n.prod});if(u.size===0){o.info("No catalogs found.");return}const g=Tv(n,s,i);let p=0;for(const R of u.values())p+=R.size;const h=!!process.stdout.isTTY&&!De;let m;const y=h?(R,P)=>{m?m.rerender(H.createElement(rr,{current:R,total:P})):m=st(H.createElement(rr,{current:R,total:P}),{interactive:!0,patchConsole:!1})}:(R,P)=>{o.info(`Checking ${String(R)}/${String(P)} dependencies...`)};h||o.info(`Checking ${String(p)} catalog dependencies...
835
+ `);const b=St(r.security?.socket),{failed:x,ignored:E,outdated:C}=await Zn(u,g,l,y,t,b,r.security?.socket?.acceptedRisks);if(m&&(m.clear(),m.unmount()),x.length>0&&o.warn(`Failed to fetch: ${x.join(", ")}`),E.length>0&&o.info(`Skipped ${String(E.length)} ignored package${E.length===1?"":"s"}: ${E.join(", ")}`),C.length===0){o.info("All catalog dependencies are up to date.");return}const D=n.format??s.format??"table";let N;if(n.ai){const R=Yn(n["ai-type"]??"impact");N=await Xn(C,o,r.ai,R)}const L=!!n["dry-run"];if(h&&D==="table"){const R=new Es(C,N??null);let P;if(n.changelog){o.info("Fetching changelogs...");const q=await vs(C);P=new Map;for(const Z of q){const ue=Z.releaseUrl??Z.repoUrl??Z.npmUrl;ue&&P.set(Z.packageName,ue)}}const M=r.tui?.autoExit??!1,w=M===!0?3:typeof M=="number"?M:0,k=await st(H.createElement(js,{autoExitSeconds:w,changelogUrls:P,isDryRun:L,store:R}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit(),I=process.stdout.columns||80;process.stdout.write(`
836
+ `);for(const q of C){const Z=q.vulnerabilities?.length||q.socketReport&&q.socketReport.alerts.length>0,ue=!!q.acceptedRisk,ne=Z?ue?"✓":"⚠":"✓",$e=ue?"gray":q.updateType==="major"?"red":q.updateType==="minor"?"yellow":"green",fe=q.socketReport?.score.overall,Te=fe===void 0?"":` [${String(Math.round(fe*100))}%]`,T=fe===void 0?void 0:lr(fe);process.stdout.write(`${ge(H.createElement(a,null," ",H.createElement(a,{color:$e},ne),` ${q.packageName} ${q.currentRange} → ${q.newRange}`,H.createElement(a,{dimColor:!0},` ${q.updateType}`),T?H.createElement(a,{color:T},Te):null),{columns:I})}
837
+ `)}process.stdout.write(`
838
+ `),o.info(Nr(C));const z=Array.isArray(k)?k:[];if(z.length>0&&!L){o.info(`
839
+ Applying ${String(z.length)} updates...
840
+ `);const q={...n,install:n.install??s.install};await vi(t,e,z,q,o)}return}if(L){if(D==="json"){const R={failed:x,ignored:E,outdated:C};N&&(R.aiAnalysis=N),process.stdout.write(`${JSON.stringify(R,void 0,2)}
841
+ `)}else o.info(`Would update ${String(C.length)} dependencies:
842
+ `),yi(C,x,D,o),N&&(o.info(""),o.info(Pr(N)));return}N&&D!=="json"&&(o.info(Pr(N)),o.info(""));let j=C;if(n.interactive&&(j=await Fu(C),j.length===0)){o.info("No updates selected.");return}o.info(`Updating ${String(j.length)} catalog dependencies...
843
+ `),yi(j,[],D,o);const O={...n,install:n.install??s.install};await vi(t,e,j,O,o)},"executeCatalogUpdate"),Iv=zt((t,e,r,n,i,o)=>{const s={dev:n.dev,filters:Ie(n.filter),global:n.global,interactive:n.interactive,latest:n.latest||n.target==="latest",noOptional:n["no-optional"],noSave:n["no-save"],packages:i,prod:n.prod,recursive:n.recursive,workspaceRoot:n["workspace-root"]},{command:l,warnings:u}=Ev(e,r,s);for(const p of u)o.warn(p);const g=`${l.bin} ${l.args.join(" ")}`.trim();if(n["dry-run"]){o.info(`Would run: ${g}`);return}o.info(`Running: ${g}`);try{Hr(g,{cwd:t,env:process.env,stdio:"inherit"})}catch(p){const h=p.status??1;o.error(`
844
+ ${ot("✖")} Update failed (exit code ${String(h)})`),o.error(` Command: ${g}`),o.error(` Directory: ${t}
845
+ `),process.exitCode=h}},"executePmWrapper"),Rv={group:"Dependencies",alias:"up",argument:{description:"Packages to update (updates all if omitted)",name:"packages",type:String},description:"Update packages to their latest versions",examples:[["vis update react","Update react within semver range"],["vis up react -L","Update react to latest"],["vis update -i","Interactive mode"],["vis update --filter app","Update in specific workspace"],["vis update -r","Update in all workspaces"],["vis update --target minor","Only apply minor/patch updates (catalog mode)"],["vis update --dry-run","Preview changes without applying"],["vis update --exclude '@types/*'","Exclude packages by pattern"],["vis update --changelog","Show changelog links after updating"],["vis update --rollback","Restore catalog from last backup"],["vis update --ai","Run AI analysis before applying updates"]],execute:zt(async({argument:t,logger:e,options:r,visConfig:n,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");let o=t;const s=i,{packageManager:l}=zr(s);if(!r["no-typosquat-check"]){if(o.length>0){const u=o.map(h=>_n(h)),g=n?.security?.typosquatAllowlist,p=await _i(u.map(h=>h.name),g);if(!p.ok){process.exitCode=1;return}o=u.map((h,m)=>{const y=p.packages[m];return y!==h.name?h.versionSpec?`${y}@${h.versionSpec}`:y:o[m]})}else if(!await Hi(s,n?.security?.typosquatAllowlist)){process.exitCode=1;return}}if(r.rollback){if(!Tu(s,l)){e.info("No backup found. Run 'vis update' first to create a backup.");return}if(ju(s,l))e.info("Restored from backup.");else throw new Error("Failed to restore from backup.");return}if(!r["no-catalog"]&&cu(s,l))await Av(s,l,n??{},r,o,e);else{const u=Ba(l);Iv(s,l,u,r,o,e)}},"execute"),name:"update",options:[{alias:"L",defaultValue:!1,description:"Update to latest version (ignore semver range)",name:"latest",type:Boolean},{alias:"t",description:"Update target: latest, minor, or patch (default: latest, catalog mode)",name:"target",type:String},{alias:"d",defaultValue:!1,description:"Preview changes without applying",name:"dry-run",type:Boolean},{alias:"g",defaultValue:!1,description:"Update global packages",name:"global",type:Boolean},{alias:"r",defaultValue:!1,description:"Update recursively in all workspace packages",name:"recursive",type:Boolean},{description:"Filter packages in monorepo",name:"filter",type:String},{alias:"w",defaultValue:!1,description:"Include workspace root",name:"workspace-root",type:Boolean},{alias:"D",defaultValue:!1,description:"Update only devDependencies",name:"dev",type:Boolean},{alias:"P",defaultValue:!1,description:"Update only dependencies",name:"prod",type:Boolean},{alias:"i",defaultValue:!1,description:"Interactive mode",name:"interactive",type:Boolean},{defaultValue:!1,description:"Don't update optionalDependencies",name:"no-optional",type:Boolean},{defaultValue:!1,description:"Update lockfile only",name:"no-save",type:Boolean},{description:"Glob pattern to include packages (repeatable, catalog mode)",lazyMultiple:!0,name:"include",type:String},{description:"Glob pattern to exclude packages (repeatable, catalog mode)",lazyMultiple:!0,name:"exclude",type:String},{defaultValue:!1,description:"Include prerelease versions (catalog mode)",name:"prerelease",type:Boolean},{defaultValue:!1,description:"Check for known security vulnerabilities (via OSV.dev)",name:"security",type:Boolean},{defaultValue:!1,description:"Skip catalog mode, use package manager directly",name:"no-catalog",type:Boolean},{description:"Output format: table, json, or minimal (default: table)",name:"format",type:String},{defaultValue:!1,description:"Show changelog URLs for updated packages",name:"changelog",type:Boolean},{description:"Run install after catalog update, --no-install to skip (default: true)",name:"install",type:Boolean},{defaultValue:!1,description:"Restore catalog file from the last backup",name:"rollback",type:Boolean},{defaultValue:!1,description:"Run AI analysis on outdated packages before updating (catalog mode)",name:"ai",type:Boolean},{description:"AI analysis type: impact, security, compatibility, or recommend (default: impact)",name:"ai-type",type:String},{defaultValue:!1,description:"Skip typosquat name check for package arguments",name:"no-typosquat-check",type:Boolean}]};var Ov=Object.defineProperty,Pv=$((t,e)=>Ov(t,"name",{value:e,configurable:!0}),"o$1");const Nv={group:"System",argument:{description:"Target version (defaults to latest)",name:"version",type:String},description:"Update vis itself to the latest version",examples:[["vis self-update","Update to latest"],["vis self-update 2.0.0","Install specific version"],["vis self-update --check","Check for updates without installing"]],execute:Pv(async({argument:t,logger:e,options:r})=>{const n=t?.[0];e.info("info: checking for updates...");let i;try{i=require("../../package.json").version}catch{i="unknown"}let o;try{const s=Hr("npm view @visulima/vis version",{encoding:"utf8"}).trim();o=n??s}catch{throw new Error("Failed to query npm registry. Check your network connection.")}if(i===o&&!r.force){e.info(`
846
+ ✓ Already up to date (${i})`);return}if(r.check){i===o?e.info(`✓ Already up to date (${i})`):e.info(`info: found @visulima/vis@${o} (current: ${i})`);return}if(e.info(`info: found @visulima/vis@${o} (current: ${i})`),e.info("info: installing..."),Oe("npm",["install","-g",`@visulima/vis@${o}`],{encoding:"utf8",stdio:"inherit"}).status!==0)throw new Error("Failed to update. Try running with sudo or fix npm permissions.");e.info(`
847
+ ✓ Updated @visulima/vis from ${i} → ${o}`)},"execute"),name:"self-update",options:[{defaultValue:!1,description:"Check for updates without installing",name:"check",type:Boolean},{defaultValue:!1,description:"Reinstall even if already current",name:"force",type:Boolean},{defaultValue:!1,description:"Suppress output (CI mode)",name:"silent",type:Boolean}]};var Dv=Object.defineProperty,Mv=$((t,e)=>Dv(t,"name",{value:e,configurable:!0}),"t$1");const Bv={group:"Dependencies",alias:"explain",argument:{description:"Package(s) to explain",name:"packages",type:String},description:"Show why a package is installed (dependency chain)",examples:[["vis why react","Show why react is installed"],["vis why react --json","Output as JSON"],["vis why react -r","Check across all workspaces"],["vis explain react","Alias matching npm's command"]],execute:Mv(async({argument:t,logger:e,options:r,workspaceRoot:n})=>{const i=t;if(!i||i.length===0)throw new Error("No packages specified. Usage: vis why <package...>");const o=n??process.cwd(),s=pe(o),l=Lc(s,{depth:r.depth===void 0?void 0:Number(r.depth),dev:r.dev||!1,filter:dr(r.filter),global:r.global||!1,json:r.json||!1,long:r.long||!1,noOptional:r["no-optional"]||!1,packages:i,parseable:r.parseable||!1,prod:r.prod||!1,recursive:r.recursive||!1},o,e);l!==0&&l!==1&&(process.exitCode=l)},"execute"),name:"why",options:[{defaultValue:!1,description:"Output as JSON",name:"json",type:Boolean},{defaultValue:!1,description:"Show extended information (pnpm)",name:"long",type:Boolean},{defaultValue:!1,description:"Machine-readable output (pnpm)",name:"parseable",type:Boolean},{alias:"r",defaultValue:!1,description:"Check across all workspaces",name:"recursive",type:Boolean},{alias:"D",defaultValue:!1,description:"Filter to dev dependencies (pnpm)",name:"dev",type:Boolean},{alias:"P",defaultValue:!1,description:"Filter to production dependencies (pnpm)",name:"prod",type:Boolean},{defaultValue:!1,description:"Exclude optional dependencies (pnpm)",name:"no-optional",type:Boolean},{alias:"g",defaultValue:!1,description:"Check globally installed packages (pnpm)",name:"global",type:Boolean},{description:"Limit dependency tree depth",name:"depth",type:Number},{alias:"F",description:"Filter by workspace package name",multiple:!0,name:"filter",type:String}]};var Lv=Object.defineProperty,Fv=$((t,e)=>Lv(t,"name",{value:e,configurable:!0}),"d");const Vv={beforeCommand:Fv(async t=>{try{const e=t.options?.cwd;let r;r=e?(await import("node:path")).resolve(process.cwd(),e):xi(process.cwd()).path,t.workspaceRoot=r;try{t.visConfig=await $o(r)}catch(i){const o=er(r);if(o){const s=i instanceof Error?i.message:String(i);if(t.logger.error(""),t.logger.error(ot(vo(`✖ Failed to load ${o}`))),t.logger.error(` ${s}`),t.logger.error(""),s.includes("Cannot find module")){const l=/Cannot find module '([^']+)'/.exec(s)?.[1]??"unknown";t.logger.error(`${Ge("→ Hint:")} The module ${vo(l)} could not be resolved.`),l.includes("@visulima/vis")?(t.logger.error(" This usually means the package isn't installed or the export path changed."),t.logger.error(` Try: ${yt("pnpm add @visulima/vis")}`),t.logger.error(` Or regenerate: ${yt("vis init --force")}`)):t.logger.error(` Try: ${yt(`pnpm add ${l}`)}`)}else s.includes("SyntaxError")||s.includes("Unexpected token")?(t.logger.error(`${Ge("→ Hint:")} The config file has a syntax error.`),t.logger.error(" Check your config for typos or invalid syntax."),t.logger.error(` Or regenerate: ${yt("vis init --force")}`)):(t.logger.error(`${Ge("→ Hint:")} Delete the broken config and recreate it:`),t.logger.error(` ${yt(`rm ${o} && vis init`)}`));t.logger.error(""),t.logger.error(` Continuing with default settings.
848
+ `)}t.visConfig={}}const n=process.argv[2]??"";if(!new Set(["--help","--version","-h","-V","create","help","implode","init"]).has(n)&&!er(r)&&!De)if(process.stdin.isTTY){const{createInterface:i}=await import("node:readline"),o=i({input:process.stdin,output:process.stderr}),s=await new Promise(l=>{o.question("\x1B[36;1m?\x1B[0m \x1B[1mNo vis.config.ts found. Create one with best-practice security defaults?\x1B[0m \x1B[90m(\x1B[92mY\x1B[90m/n)\x1B[0m ",l),o.on("SIGINT",()=>{o.close(),l("n")})});if(o.close(),!s.trim()||s.trim().toLowerCase()==="y"||s.trim().toLowerCase()==="yes"){const{writeFileSync:l}=await import("node:fs"),{join:u}=await import("node:path"),g=u(r,"vis.config.mjs"),p=['import { defineConfig } from "@visulima/vis/config";',"","// Secure defaults are applied automatically by defineConfig().","// You only need to add allowBuilds for packages with build scripts.","// Run 'vis check --security-config' to see all active settings.","export default defineConfig({"," security: {"," allowBuilds: {",' // "esbuild": true,'," },"," },","});",""].join(`
849
+ `);l(g,p),t.logger.info(`✓ Created ${g}
850
+ `),t.visConfig=await $o(r)}}else t.logger.warn("No vis.config.ts found. Run 'vis init' to create one with best-practice security defaults.")}catch(e){e instanceof Error&&!e.message.includes("monorepo root")&&t.logger.warn(`Failed to detect workspace: ${e.message}`),t.visConfig={}}},"beforeCommand"),name:"config-loader"};var Uv=Object.defineProperty,re=$((t,e)=>Uv(t,"name",{value:e,configurable:!0}),"s$1");const wi=300*1e3,Tn=F(Ce(),".vis",".tip-state.json"),Gv=re(()=>{try{if(V(Tn))return JSON.parse(Y(Tn,"utf8"))}catch{}return{lastGlobal:0,perTip:{}}},"readState"),zv=re(t=>{try{const e=F(Ce(),".vis");ye(e,{recursive:!0}),_(Tn,JSON.stringify(t))}catch{}},"writeState"),Wv=[{cooldownMs:1800*1e3,id:"short-aliases",matches:re(t=>["install","link","remove","uninstall","update"].includes(t.command),"matches"),message:re(t=>{const e={install:"i",link:"ln",remove:"rm",uninstall:"rm",update:"up"}[t.command];return e?`You can use 'vis ${e}' as a shorthand for 'vis ${t.command}'`:""},"message"),probability:.5},{id:"use-exec",matches:re(t=>t.command==="dlx"&&t.success,"matches"),message:re(()=>"Use 'vis exec' to run locally installed binaries without downloading.","message")},{id:"security-check",matches:re(t=>(t.command==="check"||t.command==="update")&&t.success&&!t.args.includes("--security"),"matches"),message:re(()=>"Add --security to check for known vulnerabilities via OSV.dev","message"),probability:.3},{cooldownMs:3600*1e3,id:"ai-analysis",matches:re(t=>(t.command==="check"||t.command==="update")&&t.success&&!t.args.includes("--ai"),"matches"),message:re(()=>"Add --ai to run AI analysis on outdated packages before updating.","message"),probability:.2},{cooldownMs:1440*60*1e3,id:"socket-security",matches:re(t=>(t.command==="install"||t.command==="update"||t.command==="check")&&t.success,"matches"),message:re(()=>"Enable Socket.dev in vis.config.ts for security scores and supply chain alerts: security.socket.enabled = true","message"),probability:.15},{id:"dedupe-after-install",matches:re(t=>t.command==="install"&&t.success,"matches"),message:re(()=>"Run 'vis dedupe' periodically to remove duplicate dependencies.","message"),probability:.15},{cooldownMs:720*60*1e3,id:"doctor-checkup",matches:re(t=>(t.command==="install"||t.command==="add"||t.command==="update")&&t.success,"matches"),message:re(()=>"Run 'vis doctor' for a full project health check — outdated, security, duplicates, and optimizations in one view.","message"),probability:.25},{cooldownMs:10080*60*1e3,id:"init-config",matches:re(t=>(t.command==="install"||t.command==="run")&&t.success&&!t.hasVisConfig,"matches"),message:re(()=>"Run 'vis init' to create a vis.config.ts with secure defaults — supply chain protection enabled automatically.","message"),probability:.4},{id:"why-command",matches:re(t=>t.command==="outdated"&&t.success,"matches"),message:re(()=>"Use 'vis why <package>' to understand why a dependency is installed.","message"),probability:.3},{id:"graph-command",matches:re(t=>t.command==="run"&&t.success,"matches"),message:re(()=>"Use 'vis graph' to visualize your project dependency graph.","message"),probability:.1},{id:"affected-command",matches:re(t=>t.command==="run"&&t.success&&!t.args.includes("--projects"),"matches"),message:re(()=>"Use 'vis affected <target>' to run tasks only on changed projects.","message"),probability:.2},{id:"pm-cache",matches:re(t=>t.command==="install"&&t.success,"matches"),message:re(()=>"Use 'vis pm cache dir' to find your package manager's cache location.","message"),probability:.1},{id:"create-editor",matches:re(t=>t.command==="create"&&t.success,"matches"),message:re(()=>"Add --editor vscode to generate VS Code configuration during project creation.","message"),probability:.5},{id:"env-pin",matches:re(t=>t.command==="env"&&t.args.includes("install")&&t.success,"matches"),message:re(()=>"Use 'vis env pin <version>' to pin the Node.js version for your project.","message"),probability:.5},{id:"upgrade-check",matches:re(t=>t.command!=="self-update"&&t.success,"matches"),message:re(()=>"Run 'vis self-update --check' to see if a newer version of vis is available.","message"),probability:.05}],_v=re(t=>{if(process.env.VIS_CLI_TEST||De)return;const e=Date.now(),r=Gv();if(e-r.lastGlobal<wi)return;const n=Wv.filter(s=>{if(!s.matches(t))return!1;const l=r.perTip[s.id]??0,u=s.cooldownMs??wi;return e-l>=u});if(n.length===0)return;const i=n.find(s=>{const l=s.probability??1;return Math.random()<l});if(!i)return;const o=i.message(t);o&&(process.stderr.write(`
851
+ \x1B[2mtip: ${o}\x1B[0m
852
+ `),r.lastGlobal=e,r.perTip[i.id]=e,zv(r))},"showTip");var Hv=Object.defineProperty,ki=$((t,e)=>Hv(t,"name",{value:e,configurable:!0}),"o");const Jv=ki(t=>({afterCommand:ki(async e=>{const r=process.argv.slice(2),n=r[0]??"";t&&t(),_v({args:r,command:n,hasVisConfig:e.visConfig!==void 0&&Object.keys(e.visConfig).length>0,success:process.exitCode===void 0||process.exitCode===0})},"afterCommand"),name:"post-command"}),"postCommandPlugin");var qv=Object.defineProperty,An=$((t,e)=>qv(t,"name",{value:e,configurable:!0}),"f");const bi=new Set(["add","install","update"]),Yv=new Set(["add","dedupe","install","remove","update"]),Xv=/(\d+\.\d+\.\d+)/,Kv=An(t=>{const e=A(t,"package.json");if(!V(e))return[];const r=[];try{const n=JSON.parse(Y(e,"utf8")),i={...n.dependencies,...n.devDependencies};for(const[o,s]of Object.entries(i)){const l=A(t,"node_modules",o,"package.json");if(V(l))try{const g=JSON.parse(Y(l,"utf8"));if(g.version){r.push({name:o,version:g.version});continue}}catch{}const u=Xv.exec(s);u&&r.push({name:o,version:u[1]})}}catch{}return r},"resolveInstalledPackages"),Qv={afterCommand:An(async t=>{if(process.exitCode&&process.exitCode!==0)return;const e=t.scriptEnforcement;e?.postInstallPackages.length&&t.workspaceRoot&&Ku(t.workspaceRoot,e.postInstallPackages);const r=process.argv[2]??"",n=St(t.visConfig?.security?.socket);if(bi.has(r)&&n&&t.workspaceRoot)try{const i=Kv(t.workspaceRoot);if(i.length>0){const o=await Lt(i,n);if(o.size>0){const s=Qc(o);if(s){v(""),v(s);let l=0;for(const u of o.values())for(const g of u.alerts)(g.severity==="critical"||g.severity==="high")&&l++;l>0&&oe(`${String(l)} critical/high severity alert${l===1?"":"s"} detected. Run 'vis check --security' for details.`)}}}}catch{}},"afterCommand"),beforeCommand:An(async t=>{const e=process.argv[2]??"";if(Yv.has(e)&&t.visConfig&&t.workspaceRoot){const r=pe(t.workspaceRoot);if(Hu(t.visConfig,r.name),bi.has(e)){const n=Yu(r.name,t.workspaceRoot,t.visConfig);for(const i of n.warnings)t.logger.warn(`security: ${i}`);t.scriptEnforcement=n}}},"beforeCommand"),name:"security-enforcement"};var Zv=Object.defineProperty,ct=$((t,e)=>Zv(t,"name",{value:e,configurable:!0}),"s");const In=F(Ce(),".vis"),Rn=F(In,".upgrade-check.json"),ew=1440*60*1e3,tw=1440*60*1e3,rw=500,nw=new Set(["--help","--version","-h","-V","help","implode","self-update","upgrade"]),ow=ct(()=>{try{if(V(Rn))return JSON.parse(Y(Rn,"utf8"))}catch{}},"readCache"),$a=ct(t=>{try{V(In)||ye(In,{recursive:!0}),_(Rn,JSON.stringify(t))}catch{}},"writeCache"),iw=ct(async t=>{try{const e=new AbortController,r=setTimeout(()=>{e.abort()},rw),n=await fetch(`https://registry.npmjs.org/${t}/latest`,{headers:{accept:"application/json"},signal:e.signal});return clearTimeout(r),n.ok?(await n.json()).version:void 0}catch{return}},"fetchLatestVersion"),sw=ct((t,e)=>{const r=ct(o=>o.replace(/^v/,"").split("-")[0].split(".").map(Number),"parseSemver"),n=r(t),i=r(e);for(let o=0;o<3;o++){if((i[o]??0)>(n[o]??0))return!0;if((i[o]??0)<(n[o]??0))return!1}return!1},"isNewerVersion"),$i=ct((t,e)=>{if(!sw(t,e.latestVersion))return;const r=Date.now();r-e.lastNoticeAt<tw||(process.stderr.write(`
853
+ ${ee("vis update available:")} ${Li(t)} ${ee(Fn.arrow)} ${Bi(le(e.latestVersion))}${ee(", run")} ${Ee("vis upgrade")}
854
+ `),e.lastNoticeAt=r,$a(e))},"showUpgradeNotice"),aw=ct(t=>{if(De||process.env.VIS_CLI_TEST||process.env.VIS_NO_UPDATE_CHECK==="1"||!process.stderr.isTTY||nw.has(t))return!1;const e=new Set(process.argv.slice(2));return!(e.has("--silent")||e.has("-s")||e.has("--json"))},"shouldCheck"),cw=ct((t,e)=>{if(!aw(e))return;const r=ow(),n=Date.now();if(r&&n-r.lastQueryAt<ew)return()=>{$i(t,r)};let i=r;return iw("@visulima/vis").then(o=>{o&&(i={lastNoticeAt:r?.lastNoticeAt??0,lastQueryAt:n,latestVersion:o},$a(i))}).catch(()=>{}),()=>{i&&$i(t,i)}},"startUpgradeCheck");Na();jc();try{const t=xi(process.cwd()).path,e=Je(A(t,"package.json"));e.name&&Tc(e.name)}catch{}const lw=cw(Di.version,process.argv[2]??"");Pa();const te=Oa("vis",{packageName:"vis",packageVersion:Di.version}),dw=process.argv.includes("--debug")||!!process.env.DEBUG;te.addPlugin(Da({detailed:dw,exitOnError:!1}));te.addGlobalOption({description:"Override workspace root directory",name:"cwd",type:String});te.addPlugin(Vv);te.addPlugin(Qv);te.addCommand(lv);te.addCommand(nm);te.addCommand(Il);te.addCommand(Pm);te.addCommand(Rv);te.addCommand(Fp);te.addCommand(Pd);te.addCommand(Wu);te.addCommand(Cy);te.addCommand(fv);te.addCommand(mv);te.addCommand(Wm);te.addCommand(yl);te.addCommand(Ry);te.addCommand(Yf);te.addCommand(Bv);te.addCommand(Jm);te.addCommand(wv);te.addCommand(Qg);te.addCommand(Bh);te.addCommand(Ty);te.addCommand(Um);te.addCommand(Wp);te.addCommand(Hf);te.addCommand(Yg);te.addCommand(Nv);te.addCommand(Mm);te.addCommand(ep);te.addCommand(pp);te.addCommand(Nh);te.addCommand(Ah);te.addPlugin(Jv(lw));try{await te.run()}catch{process.exitCode=process.exitCode||1}