@visulima/vis 1.0.0-alpha.37 → 1.0.0-alpha.38

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 (177) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE.md +1 -503
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/config/index.d.ts +7 -0
  6. package/dist/packem_chunks/DEFAULT_CLEAN_KEEP.js +1 -0
  7. package/dist/packem_chunks/bin.js +302 -515
  8. package/dist/packem_chunks/bloom-sync.js +1 -1
  9. package/dist/packem_chunks/catalog-detector.js +1 -0
  10. package/dist/packem_chunks/detect.js +3 -0
  11. package/dist/packem_chunks/detect2.js +8 -0
  12. package/dist/packem_chunks/discord.js +4 -0
  13. package/dist/packem_chunks/dynamic-import.js +1 -0
  14. package/dist/packem_chunks/extra-files.js +3 -0
  15. package/dist/packem_chunks/fix.js +1 -1
  16. package/dist/packem_chunks/git.js +3 -0
  17. package/dist/packem_chunks/handler10.js +1 -1
  18. package/dist/packem_chunks/handler12.js +1 -1
  19. package/dist/packem_chunks/handler13.js +1 -1
  20. package/dist/packem_chunks/handler14.js +1 -1
  21. package/dist/packem_chunks/handler15.js +1 -1
  22. package/dist/packem_chunks/handler16.js +1 -1
  23. package/dist/packem_chunks/handler17.js +1 -1
  24. package/dist/packem_chunks/handler18.js +1 -1
  25. package/dist/packem_chunks/handler19.js +1 -1
  26. package/dist/packem_chunks/handler21.js +1 -1
  27. package/dist/packem_chunks/handler27.js +1 -1
  28. package/dist/packem_chunks/handler28.js +1 -1
  29. package/dist/packem_chunks/handler29.js +1 -1
  30. package/dist/packem_chunks/handler3.js +4 -4
  31. package/dist/packem_chunks/handler30.js +2 -7
  32. package/dist/packem_chunks/handler31.js +2 -33
  33. package/dist/packem_chunks/handler32.js +2 -3
  34. package/dist/packem_chunks/handler33.js +3 -8
  35. package/dist/packem_chunks/handler34.js +6 -4
  36. package/dist/packem_chunks/handler35.js +1 -1
  37. package/dist/packem_chunks/handler36.js +42 -5
  38. package/dist/packem_chunks/handler37.js +8 -11
  39. package/dist/packem_chunks/handler38.js +9 -3
  40. package/dist/packem_chunks/handler39.js +74 -21
  41. package/dist/packem_chunks/handler4.js +1 -1
  42. package/dist/packem_chunks/handler40.js +5 -61
  43. package/dist/packem_chunks/handler41.js +4 -3
  44. package/dist/packem_chunks/handler42.js +3 -6
  45. package/dist/packem_chunks/handler43.js +2 -24
  46. package/dist/packem_chunks/handler44.js +1 -25
  47. package/dist/packem_chunks/handler45.js +1 -153
  48. package/dist/packem_chunks/handler46.js +1 -10
  49. package/dist/packem_chunks/handler47.js +3 -24
  50. package/dist/packem_chunks/handler48.js +1 -322
  51. package/dist/packem_chunks/handler49.js +7 -708
  52. package/dist/packem_chunks/handler5.js +6 -6
  53. package/dist/packem_chunks/handler50.js +33 -48
  54. package/dist/packem_chunks/handler51.js +3 -27
  55. package/dist/packem_chunks/handler52.js +8 -3
  56. package/dist/packem_chunks/handler53.js +4 -200
  57. package/dist/packem_chunks/handler54.js +1 -38
  58. package/dist/packem_chunks/handler55.js +12 -0
  59. package/dist/packem_chunks/handler56.js +7 -0
  60. package/dist/packem_chunks/handler57.js +5 -0
  61. package/dist/packem_chunks/handler58.js +11 -0
  62. package/dist/packem_chunks/handler59.js +3 -0
  63. package/dist/packem_chunks/handler60.js +22 -0
  64. package/dist/packem_chunks/handler61.js +61 -0
  65. package/dist/packem_chunks/handler62.js +3 -0
  66. package/dist/packem_chunks/handler63.js +6 -0
  67. package/dist/packem_chunks/handler64.js +708 -0
  68. package/dist/packem_chunks/handler65.js +24 -0
  69. package/dist/packem_chunks/handler66.js +25 -0
  70. package/dist/packem_chunks/handler67.js +153 -0
  71. package/dist/packem_chunks/handler68.js +10 -0
  72. package/dist/packem_chunks/handler69.js +24 -0
  73. package/dist/packem_chunks/handler7.js +1 -1
  74. package/dist/packem_chunks/handler70.js +322 -0
  75. package/dist/packem_chunks/handler71.js +48 -0
  76. package/dist/packem_chunks/handler72.js +27 -0
  77. package/dist/packem_chunks/handler73.js +3 -0
  78. package/dist/packem_chunks/handler74.js +190 -0
  79. package/dist/packem_chunks/handler75.js +38 -0
  80. package/dist/packem_chunks/handler8.js +1 -1
  81. package/dist/packem_chunks/handler9.js +1 -1
  82. package/dist/packem_chunks/heal-accept.js +1 -1
  83. package/dist/packem_chunks/heal.js +1 -1
  84. package/dist/packem_chunks/help-command.js +1 -1
  85. package/dist/packem_chunks/index.js +1 -7
  86. package/dist/packem_chunks/index2.js +7 -0
  87. package/dist/packem_chunks/interface.js +2 -0
  88. package/dist/packem_chunks/keys-refresh.js +1 -1
  89. package/dist/packem_chunks/list.js +1 -1
  90. package/dist/packem_chunks/loader.js +1 -1
  91. package/dist/packem_chunks/orchestrator.js +39 -0
  92. package/dist/packem_chunks/pre-mode.js +2 -0
  93. package/dist/packem_chunks/print-config.js +2 -0
  94. package/dist/packem_chunks/prompts.js +7 -0
  95. package/dist/packem_chunks/publish-guards.js +1 -0
  96. package/dist/packem_chunks/registry.js +48 -0
  97. package/dist/packem_chunks/resolveFormatter.js +9 -0
  98. package/dist/packem_chunks/security.js +1 -0
  99. package/dist/packem_chunks/shell-runner.js +1 -0
  100. package/dist/packem_chunks/slack.js +2 -0
  101. package/dist/packem_chunks/snapshot.js +2 -0
  102. package/dist/packem_chunks/stage-publisher.js +1 -0
  103. package/dist/packem_chunks/staged-registry.js +2 -0
  104. package/dist/packem_chunks/state.js +3 -0
  105. package/dist/packem_chunks/success-walk.js +8 -0
  106. package/dist/packem_chunks/sync.js +1 -1
  107. package/dist/packem_chunks/sync2.js +1 -1
  108. package/dist/packem_chunks/tripwire.js +1 -1
  109. package/dist/packem_chunks/verify-lockfile.js +2 -2
  110. package/dist/packem_chunks/version-resolver.js +2 -0
  111. package/dist/packem_chunks/webhook.js +1 -0
  112. package/dist/packem_chunks/workflow-templates.js +167 -0
  113. package/dist/packem_chunks/workspace.js +2 -0
  114. package/dist/packem_shared/AfterAllProjectsVersioned-CAKI2nWf.js +1 -0
  115. package/dist/packem_shared/ReleaseClient-YHzBIxYS.js +1 -0
  116. package/dist/packem_shared/VisReleaseError-DMGRBTNO.js +1 -0
  117. package/dist/packem_shared/{ai-analysis-DT3bU-_M.js → ai-analysis-K-DKU3ZA.js} +1 -1
  118. package/dist/packem_shared/{ai-fix-BkNqd5nP.js → ai-fix-BPrYoCk8.js} +1 -1
  119. package/dist/packem_shared/api.d-BPftyU9r.d.ts +27 -0
  120. package/dist/packem_shared/createAdapter-bU4DIP3F.js +1 -0
  121. package/dist/packem_shared/createVersionActions-BK43SNDH.js +1 -0
  122. package/dist/packem_shared/{cyclonedx-86-DbHtf.js → cyclonedx-kYozDyxp.js} +3 -3
  123. package/dist/packem_shared/defineFormatter-D5dCp6Kv.js +1 -0
  124. package/dist/packem_shared/dependency-scan-anTuZB1t.js +1 -0
  125. package/dist/packem_shared/{docker-tNrDU3oK.js → docker-BMLrNtWm.js} +1 -1
  126. package/dist/packem_shared/{failure-log-Dwqt6_Ga.js → failure-log-CEWP3bP0.js} +1 -1
  127. package/dist/packem_shared/index-BJbpNthk.js +1 -0
  128. package/dist/packem_shared/index-CgcF6_wo.js +1 -0
  129. package/dist/packem_shared/{index-dQ37x8_P.js → index-D1_fbGbj.js} +1 -1
  130. package/dist/packem_shared/interface.d-B7VK2rcH.d.ts +148 -0
  131. package/dist/packem_shared/interface.d-Cezzifoh.d.ts +106 -0
  132. package/dist/packem_shared/{missing-package-json-41VUWFBY.js → missing-package-json-BfWUxTGv.js} +1 -1
  133. package/dist/packem_shared/{native-config-sync-BKAZ0NIs.js → native-config-sync-BEkJW7g3.js} +8 -8
  134. package/dist/packem_shared/pm-runner-OGResYrA.js +1 -0
  135. package/dist/packem_shared/provenance-_CJjMKwu.js +1 -0
  136. package/dist/packem_shared/public-api-WqUCiyIe.js +131 -0
  137. package/dist/packem_shared/{registry-keys-Bf2zzlcZ.js → registry-keys-BfFto6vI.js} +1 -1
  138. package/dist/packem_shared/{resolve-explicit-jH0RKyMJ.js → resolve-explicit-CMDl55Nz.js} +2 -2
  139. package/dist/packem_shared/s1ngularity-Dhr3bPk0.js +1 -0
  140. package/dist/packem_shared/{scan-progress-JBbd9QeT.js → scan-progress-DG7_JmTV.js} +1 -1
  141. package/dist/packem_shared/{signatures-D1H6h6GH.js → signatures-C730vkyK.js} +2 -2
  142. package/dist/packem_shared/slug-DoueYuLo.js +1 -0
  143. package/dist/packem_shared/spinner-CV3WVJLv.js +1 -0
  144. package/dist/packem_shared/sticky-comment-D6_7-w8T.js +1 -0
  145. package/dist/packem_shared/{tabs-BqUepRaD.js → tabs-BuTy5gPV.js} +1 -1
  146. package/dist/packem_shared/{typosquats-C8qg1neE.js → typosquats-DN78xx1x.js} +1 -1
  147. package/dist/packem_shared/use-measured-height-_eVGWtWt.js +1 -0
  148. package/dist/packem_shared/verify-6WCmFmy8.js +1 -0
  149. package/dist/packem_shared/{vis-update-app-CTwRkNgj.js → vis-update-app-k3fDxech.js} +1 -1
  150. package/dist/release/core/changelog/index.d.ts +5 -0
  151. package/dist/release/core/changelog/index.js +1 -0
  152. package/dist/release/core/package-managers/index.d.ts +6 -0
  153. package/dist/release/core/package-managers/index.js +1 -0
  154. package/dist/release/core/version-actions/index.d.ts +14 -0
  155. package/dist/release/core/version-actions/index.js +1 -0
  156. package/dist/release/index.d.ts +196 -0
  157. package/dist/release/index.js +1 -0
  158. package/dist/release/plugin-sdk.d.ts +127 -0
  159. package/dist/release/plugin-sdk.js +1 -0
  160. package/dist/release/presets.d.ts +225 -0
  161. package/dist/release/presets.js +1 -0
  162. package/dist/release/types.d.ts +1377 -0
  163. package/dist/release/types.js +1 -0
  164. package/index.d.ts +201 -201
  165. package/index.js +578 -752
  166. package/package.json +52 -10
  167. package/schemas/vis-config.schema.json +1394 -6
  168. package/schemas/vis-release-config.schema.json +1390 -0
  169. package/dist/packem_shared/dependency-scan-BDTH898x.js +0 -1
  170. package/dist/packem_shared/index-CB4p298r.js +0 -1
  171. package/dist/packem_shared/index-DMefdF51.js +0 -1
  172. package/dist/packem_shared/pm-runner-pVihAfxV.js +0 -1
  173. package/dist/packem_shared/provenance-DMuEftgc.js +0 -1
  174. package/dist/packem_shared/s1ngularity-BkfgC6NO.js +0 -1
  175. package/dist/packem_shared/spinner-BXSl864p.js +0 -1
  176. package/dist/packem_shared/use-measured-height-BBJ9intr.js +0 -1
  177. package/dist/packem_shared/verify-Du7xZ2BJ.js +0 -1
@@ -1,200 +1,4 @@
1
- import{createRequire as As}from"node:module";import{m as ae,H as qr,J as Ds,T as Ur,v as Ls,l as Bs}from"../packem_shared/index-BDmTbWX1.js";import{buildEnhancedPath as Ns,enforceProjectConstraints as _s,expandTokensInString as or,parsePartition as Gs,TaskScheduler as qs,createTaskGraph as Us,reverseTaskGraph as Ws,resolveTurboEnvCompat as zs,CompositeLifeCycle as ir,defaultTaskRunner as ar,createLogReporter as Hs,readLastRunSummary as Vs,getLastRunSummaryPath as Ys,runConcurrently as ot,generateRunSummary as cr,writeChromeTrace as Js,writeRunSummary as Ks,TerminalBuffer as St}from"@visulima/task-runner";import{bk as Xs,bl as Wr,t as H,a4 as i,a5 as v,g as d,bm as lr,bn as Qs,h as pe,k as K,aE as zr,aG as Zs,aD as en,ae as dr,aH as tn,aI as rn,$ as sn,Q as ht,S as Tt,bo as nn,M as on,b as an,O as cn,bp as ln,bq as dn,br as un,j as Ve,aK as fn,bs as hn,z as it,X as pn,bt as gn,bu as mn,bv as wn,bw as yn,bx as vn}from"./bin.js";import{d as xn,r as kn}from"../packem_shared/lockfile-C8Q1_4KK.js";import{F as In}from"../packem_shared/failure-log-Dwqt6_Ga.js";import{r as En}from"../packem_shared/toolchain-pR7AJ-tB.js";import{i as Rn,r as Mn,s as Fn,a as On,c as An,d as Pn,e as Dn,H as Ln,f as Bn,b as Nn}from"../packem_shared/lifecycle-4z9hHE5b.js";import{p as _n,r as Gn,f as qn}from"../packem_shared/selectors-GCJIe342.js";import{T as Vr,C as Yr,D as pt,E as Jr}from"../packem_shared/symbols-DPTlrJ3B.js";import{q as Yn,j as Jn,V as yt,E as hr}from"../packem_shared/Table-CcVkyULl-B_ef6zfS.js";import{g as Kn}from"../packem_shared/_commonjsHelpers-B5Y90VFO.js";import{o as Kr}from"../packem_shared/spinner-BXSl864p.js";import{c as pr,a as to,s as gr}from"../packem_shared/watch-BvIwLG4N.js";const Ps=As(import.meta.url),He=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ee=r=>{if(typeof He<"u"&&He.versions&&He.versions.node){const[e,t]=He.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return He.getBuiltinModule(r)}return Ps(r)},{existsSync:De,mkdirSync:$n,writeFileSync:Ct,readFileSync:Ge,openSync:jn,statSync:ur,readSync:bn,closeSync:Sn,mkdtempSync:Tn}=Ee("node:fs"),{createInterface:Hr,emitKeypressEvents:Cn}=Ee("node:readline"),{spawn:Un}=Ee("node:child_process"),{isAbsolute:Wn,resolve:fr,dirname:zn,relative:Hn}=Ee("node:path"),{fileURLToPath:Vn}=Ee("node:url"),{createRequire:It}=Ee("node:module"),{createHash:Xn}=Ee("node:crypto"),{mkdir:Qn,appendFile:gt}=Ee("node:fs/promises"),{platform:Zn,homedir:Et,tmpdir:eo}=Ee("node:os"),mr=new WeakSet,ro=r=>{if(mr.has(r))return;const e=["y","mo","w","d","h","m","s","ms","future","past"];for(const s of e)if(!Object.hasOwn(r,s))throw new TypeError(`Missing required property: ${s}`);if(typeof r.future!="string"||typeof r.past!="string")throw new TypeError("Properties future and past must be of type string");const t=["y","mo","w","d","h","m","s","ms"];for(const s of t)if(typeof r[s]!="string"&&typeof r[s]!="function")throw new TypeError(`Property ${s} must be of type string or function`);if(r.decimal&&typeof r.decimal!="string")throw new TypeError("Property decimal must be of type string");if(r.delimiter&&typeof r.delimiter!="string")throw new TypeError("Property delimiter must be of type string");if(r._digitReplacements&&!Array.isArray(r._digitReplacements))throw new TypeError("Property _digitReplacements must be an array");if(r._numberFirst&&typeof r._numberFirst!="boolean")throw new TypeError("Property _numberFirst must be of type boolean");if(r.unitMap&&typeof r.unitMap!="object")throw new TypeError("Property unitMap must be an object");if(r.unitMap&&Object.values(r.unitMap).some(s=>typeof s!="string"))throw new TypeError("All values in unitMap must be of type string");mr.add(r)},Xr=(r,e)=>{e=e||-1;const t=new RegExp(String.raw`^-?\d+(?:\.\d{0,${String(e)}})?`).exec(r.toString());return t===null?r:Number.parseFloat(t[0])},wr=({unitCount:r,unitName:e},t,s)=>{let{spacer:o}=s;const{maxDecimalPoints:a}=s;let n=".";s.decimal!==void 0?n=s.decimal:t.decimal!==void 0&&(n=t.decimal);let l;"digitReplacements"in s?l=s.digitReplacements:"_digitReplacements"in t&&(l=t._digitReplacements);let h,f=r;a!==void 0&&(f=Xr(r,a));const u=f.toString();if(!t._hideCountIf2||r!==2)if(l){h="";for(const $ of u)h+=$==="."?n:l[$]}else h=u.replace(".",n);else h="";const p=t[e];let c=p;return typeof p=="function"&&(c=p(r)),t._hideCountIf2&&r===2&&(o=""),t._numberFirst?c+o+h:h+o+c},so=(r,e)=>{const{units:t}=e;if(t.length===0)return[];const{unitMeasures:s}=e,o=e.largest??Number.POSITIVE_INFINITY,a={};let n,l,h,f=r;for(l=0;l<t.length;l++){n=t[l];const p=s[n];h=l===t.length-1?f/p:Math.floor(f/p),a[n]=h,f-=h*p}if(e.round){let p=o;for(l=0;l<t.length;l++)if(n=t[l],h=a[n],h!==0&&(p--,p===0)){for(let c=l+1;c<t.length;c++){const $=t[c],S=a[$];a[n]=(a[n]??0)+S*s[$]/s[n],a[$]=0}break}for(l=t.length-1;l>=0;l--){if(n=t[l],h=a[n],h===0)continue;const c=Math.round(h);if(a[n]=c,l===0)break;const $=t[l-1],S=s[$],F=Math.floor(c*s[n]/S);if(F)a[$]=(a[$]??0)+F,a[n]=0;else break}}const u=[];for(l=0;l<t.length&&u.length<o;l++){if(n=t[l],h=a[n],h&&!e.round&&u.length===o-1){let p,c=0;for(p=l+1,t.length;p<t.length;p++){const $=t[p];c+=a[$]*(e.unitMeasures[$]/e.unitMeasures[n])}h+=c,e.maxDecimalPoints!==void 0&&(h=Xr(h,e.maxDecimalPoints))}h&&u.push({unitCount:h,unitName:n})}return u},no=(r,e,t)=>{const{language:s,units:o}=e;if(r.length===0){const p=o.at(-1);return wr({unitCount:0,unitName:p},s,e)}const{conjunction:a,serialComma:n}=e;let l=", ";e.delimiter!==void 0?l=e.delimiter:s.delimiter!==void 0&&(l=s.delimiter);let h="";e.timeAdverb&&t!==0&&(h=s.future??"",t<0&&(h=s.past??""));const f=r.map(p=>wr(p,s,e));let u;return!a||r.length===1?u=f.join(l):r.length===2?u=f.join(a):u=f.slice(0,-1).join(l)+(n?",":"")+a+(f.at(-1)??""),h&&(u=h.replace("%s",u)),u},oo=(r,e)=>{if(Number.isNaN(r))throw new TypeError("Expected a valid number");if(typeof r!="number")throw new TypeError("Expected a number for milliseconds input");const t={conjunction:"",language:Xs,round:!1,serialComma:!0,spacer:" ",timeAdverb:!1,unitMeasures:{d:864e5,h:36e5,m:6e4,mo:2629746e3,ms:1,s:1e3,w:6048e5,y:31556952e3},units:["w","d","h","m","s"],...e};ro(t.language);const s=Math.abs(r),o=so(s,t);return no(o,t,r)},Qr=r=>r===155||r===157||r===144||r===152||r===158||r===159,Zr=(r,e)=>{for(let t=e;t<r.length;t+=1){const s=r.codePointAt(t);if(s>=64&&s<=126)return t}return-1},at=(r,e,t)=>{for(let s=e;s<r.length;s+=1){const o=r.codePointAt(s);if(o===156||t&&o===7)return s;if(o===27&&r.codePointAt(s+1)===92)return s+1}return-1},io=(r,e)=>{const t=r.codePointAt(e+1);return t===91?Zr(r,e+2):t===93?at(r,e+2,!0):t===80||t===88||t===94||t===95?at(r,e+2,!1):t!==void 0?e+1:-1},ao=(r,e)=>{const t=r.codePointAt(e);return t===155?Zr(r,e+1):t===157?at(r,e+1,!0):t===144||t===152||t===158||t===159?at(r,e+1,!1):-1},co=r=>{if(r.includes(String.fromCodePoint(27)))return!0;for(let e=0;e<r.length;e+=1)if(Qr(r.codePointAt(e)))return!0;return!1},lo=r=>{if(!co(r))return r;let e="",t=0,s=0;const{length:o}=r;for(;s<o;){const a=r.codePointAt(s);let n;if(a===27)n=io(r,s);else if(Qr(a))n=ao(r,s);else{s+=1;continue}n===-1&&(n=o-1),e+=r.slice(t,s),t=n+1,s=n+1}return e+=r.slice(t),e},be="@voidzero-dev/vite-task-client",Rt="@visulima/task-runner-client",ct=`npm:${Rt}@^1`,es=ae(".vis",".vite-client-override-declined"),lt="pnpm-workspace.yaml",uo=["dependencies","devDependencies","optionalDependencies","peerDependencies"],ts=r=>{try{return JSON.parse(Ge(r,"utf8"))}catch{return}},fo=r=>{const e=ae(r,lt);if(De(e))try{return Wr(Ge(e,"utf8")).toJS()?.overrides}catch{return}},ho=r=>r==="pnpm"||r==="aube"?"pnpm.overrides":r==="yarn"?"resolutions":"overrides",po=r=>{const e=ae(r,lt);try{const t=Wr(Ge(e,"utf8"));return t.setIn(["overrides",be],ct),Ct(e,t.toString()),!0}catch{return!1}},yr=r=>r!==void 0&&uo.some(e=>r[e]?.[be]!==void 0),go=(r,e)=>r!==void 0&&(r.pnpm?.overrides?.[be]!==void 0||r.overrides?.[be]!==void 0||r.resolutions?.[be]!==void 0)||e?.[be]!==void 0,mo=(r,e=[])=>{const t=ts(ae(r,"package.json")),s=De(ae(r,"node_modules","@voidzero-dev","vite-task-client"));return{alreadyOverridden:go(t,fo(r)),declined:De(ae(r,es)),manager:xn(r)?.manager,present:yr(t)||s||e.some(o=>yr(o))}},wo=r=>{try{const e=ae(r,es);$n(qr(e),{recursive:!0}),Ct(e,`Declined adding the ${be} → ${Rt} override.
2
- Delete this file to be asked again.
3
- `)}catch{}},yo=(r,e="npm")=>{const t=`${e} install`;if((e==="pnpm"||e==="aube")&&De(ae(r,lt))&&po(r))return{file:lt,installCommand:t};const s=ae(r,"package.json"),o=ts(s);if(!o)return;const a=ho(e);a==="pnpm.overrides"?(o.pnpm??={},o.pnpm.overrides??={},o.pnpm.overrides[be]=ct):(o[a]??={},o[a][be]=ct);try{Ct(s,`${JSON.stringify(o,void 0,4)}
4
- `)}catch{return}return{file:"package.json",installCommand:t}},vo=async(r,e)=>{const t=mo(r,e.projectManifests);if(!t.present||t.alreadyOverridden||t.declined)return!1;const s=Hr({input:process.stdin,output:process.stdout});try{e.logger.info(`Detected ${be}. Its cache hints no-op under @visulima/task-runner unless aliased to ${Rt} (a drop-in replacement).`);const o=await new Promise(n=>{s.question("Add the override now? [y/N] ",n)});if(!/^y(?:es)?$/i.test(o.trim()))return wo(r),e.logger.info("Skipped. Delete .vis/.vite-client-override-declined to be asked again."),!1;const a=yo(r,t.manager);return a===void 0?(e.logger.warn("Could not write the override automatically — add it manually (see @visulima/task-runner-client README)."),!1):(e.logger.info(`Added "${be}": "${ct}" to ${a.file}. Run \`${a.installCommand}\` to apply it.`),!0)}finally{s.close()}},xo=({interactive:r,taskPty:e,workspacePty:t})=>e===!0?!0:e===!1?!1:r&&t!==!1,ko=r=>r.split(",").map(e=>e.trim()).filter(e=>e!==""),$o=(r,e,t)=>{const s=new Set,o=[];if(r===void 0||r.trim()==="")return{skipTaskIds:s,unmatchedPatterns:o};const a=[...t],n=new Set(a),l=new Map;for(const h of a){const f=h.lastIndexOf(":");if(f===-1)continue;const u=h.slice(f+1),p=l.get(u);p===void 0?l.set(u,[h]):p.push(h)}for(const h of ko(r)){if(h.startsWith("~:"))throw new Error(`--skip-cache does not support the closest-project selector "~:" (received "${h}"). Use \`pkg:target\`, \`:target\`, or \`#tag:target\`.`);if(n.has(h)){s.add(h);continue}const f=_n(h);if(!f){o.push(h);continue}let u=!1;switch(f.kind){case"all":{const p=l.get(f.target)??[];for(const c of p)s.add(c),u=!0;break}case"project":{const p=f.projects?.[0];if(p!==void 0){const c=`${p}:${f.target}`;n.has(c)&&(s.add(c),u=!0)}break}case"tag":{const{tag:p}=f;if(p!==void 0){const c=l.get(f.target)??[];for(const $ of c){const S=$.slice(0,$.lastIndexOf(":"));e.projects[S]?.tags?.includes(p)===!0&&(s.add($),u=!0)}}break}}u||o.push(h)}return{skipTaskIds:s,unmatchedPatterns:o}},jo=/\$(?:\{([A-Z_]\w*)(:-[^}]*)?\}|([A-Z_]\w*))/gi,bo=new Set(["0","!","#","$","*","-","?","@","_"]),So=r=>{const e=new Map;for(const t of r.matchAll(jo)){const s=t[1],o=t[3],a=t[2],n=s??o;if(n===void 0||bo.has(n))continue;const l=a!==void 0,h=e.get(n);h===void 0?e.set(n,l):h&&!l&&e.set(n,!1)}return[...e.entries()].map(([t,s])=>({hasDefault:s,name:t}))},To=r=>{const{command:e,processEnv:t,taskEnv:s,taskId:o}=r,a=So(e);if(a.length===0)return;const n=[];for(const{hasDefault:l,name:h}of a){if(l)continue;const f=s[h],u=t[h];f===void 0&&u===void 0&&n.push(h)}if(n.length!==0)return{missing:n.toSorted(),taskId:o}},Co=r=>{const e=r.missing.map(t=>`$${t}`).join(", ");return`Strict env: ${r.taskId} references unset variable${r.missing.length===1?"":"s"} ${e}. Set ${r.missing.length===1?"it":"them"} in the task env, an envFile, or the parent shell or opt out with options.strictEnv: false.`},vr=r=>{const e=new Set;for(const t of Object.values(r.projects))for(const s of Object.keys(t.targets??{}))e.add(s);return[...e].sort()},Io=r=>{const e=new Map;for(const t of r.values())for(const[s,o]of Object.entries(t))for(const a of o.aliases??[])e.has(a)||e.set(a,s);return e},Eo=(r,e)=>e.get(r)??r,Ro=(r,e)=>{if(r.length===0)return e.length;if(e.length===0)return r.length;const t=[];for(let s=0;s<=e.length;s++)t[s]=[s];for(let s=0;s<=r.length;s++)t[0][s]=s;for(let s=1;s<=e.length;s++)for(let o=1;o<=r.length;o++){const a=e[s-1]===r[o-1]?0:1;t[s][o]=Math.min(t[s-1][o]+1,t[s][o-1]+1,t[s-1][o-1]+a)}return t[e.length][r.length]},Mo=(r,e,t=3)=>rs(r,e,1,t)[0],rs=(r,e,t=3,s=3)=>{const o=[];for(const a of e){const n=Ro(r.toLowerCase(),a.toLowerCase());n<=s&&o.push({distance:n,name:a})}return o.sort((a,n)=>a.distance-n.distance||a.name.localeCompare(n.name)),o.slice(0,t).map(a=>a.name)},Fo=r=>r.length===0?" (no targets found)":r.map(e=>` - ${e}`).join(`
5
- `),Oo=async r=>{if(r.length===0||!process.stdin.isTTY||!process.stdout.isTTY)return;const e=Hr({input:process.stdin,output:process.stdout});try{process.stdout.write(`Available targets:
6
- `);for(const[o,a]of r.entries())process.stdout.write(` ${String(o+1).padStart(2," ")}. ${a}
7
- `);process.stdout.write(`
8
- `);const t=(await new Promise(o=>{e.question("Select a target (number or name, blank to cancel): ",o)})).trim();if(t.length===0)return;const s=Number.parseInt(t,10);return Number.isFinite(s)&&s>=1&&s<=r.length?r[s-1]:r.includes(t)?t:Mo(t,r)}finally{e.close()}},Ao=new RegExp("[\x1B›]\\[[0-?]*[ -/]*[@-~]","g"),vt=r=>r.replaceAll(Ao,"").replaceAll("\r","");class xr{#e=[];#s=new Set;#r=new Map;#n=new Map;constructor(e=[]){for(const t of e)this.#n.set(t,{id:t,status:"pending",tailLines:[]});this.#e=[...e],this.#o()}getSnapshot=()=>this.#r;subscribe=e=>(this.#s.add(e),()=>{this.#s.delete(e)});getIds(){return this.#e}getState(e){return this.#n.get(e)}getDockState(){let e=!1,t=!1;for(const s of this.#n.values())s.status==="crashed"||s.status==="failed"?e=!0:(s.status==="pending"||s.status==="starting")&&(t=!0);return e?"crash":t?"boot":"ready"}registerService(e){this.#n.has(e)||(this.#n.set(e,{id:e,status:"pending",tailLines:[]}),this.#e=[...this.#e,e],this.#i())}markStarting(e){this.#t(e,t=>({...t,errorMessage:void 0,startedAt:t.startedAt??Date.now(),status:"starting"}))}markStarted(e,t){this.#t(e,s=>({...s,startedAt:s.startedAt??Date.now(),status:s.status==="ready"?"ready":"starting"}))}markReady(e,t){this.#t(e,s=>({...s,errorMessage:void 0,port:t.port,readyAt:Date.now(),status:"ready"}))}markFailed(e,t,s){const o=s?.message;this.#t(e,a=>({...a,errorMessage:vt(o??t),status:"failed"}))}markCrashed(e,t){const s=t.slice(-256).map(o=>vt(o));this.#t(e,o=>({...o,errorMessage:s.length>0?s[s.length-1]:"process exited",status:"crashed",tailLines:s}))}appendLog(e,t){const s=t.split(`
9
- `).map(o=>vt(o)).filter(o=>o.length>0);s.length!==0&&this.#t(e,o=>{const a=[...o.tailLines,...s];for(;a.length>256;)a.shift();let n=0;for(let l=a.length-1;l>=0;l--)if(n+=a[l].length+1,n>65536){a.splice(0,l+1);break}return{...o,lastLine:s[s.length-1],tailLines:a}})}abortBoot(e){let t=!1;const s=new Map(this.#n);for(const[o,a]of s)(a.status==="pending"||a.status==="starting")&&(s.set(o,{...a,errorMessage:e,status:"failed"}),t=!0);t&&(this.#n=s,this.#o(),this.#i())}#t(e,t){const s=this.#n.get(e);s&&(this.#n.set(e,t(s)),this.#o(),this.#i())}#o(){this.#r=new Map(this.#n)}#i(){for(const e of this.#s)try{e()}catch{}}}const Po=(r,e)=>{if(r===e)return!0;if(!r||!e||r.length!==e.length)return!1;for(const[t,s]of r.entries())if(!Object.is(s,e[t]))return!1;return!0},kr=({children:r,deps:e,onRender:t,style:s,width:o})=>{const a=H.useRef(null),n=H.useRef(!1),l=H.useRef(e),h=H.useRef(r),f=H.useRef(t);f.current=t;let u=!1;e!==void 0?Po(l.current,e)||(u=!0,l.current=e):r!==h.current&&(u=!0,h.current=r),u&&(n.current=!1,a.current&&(a.current.cachedRender=void 0)),H.useLayoutEffect(()=>{const c=a.current;c&&(c.internal_onRendered=()=>{n.current=!0,f.current?.(c)})}),H.useEffect(()=>()=>{const c=a.current;c&&(c.cachedRender=void 0,c.internal_onRendered=void 0)},[]);const p=H.useMemo(()=>({...s,width:o}),[s,o]);return i.jsx("ink-static-render",{ref:a,style:p,children:n.current?null:r()})},Do=r=>Array.isArray(r)?`[${r.join(",")}]`:typeof r=="object"&&r!==null?JSON.stringify(r):String(r),Lo=(r,e,t)=>e==="_"?`${r}${Array.isArray(t)?t.join(" "):String(t)}`:`${r}--${e}=${Do(t)}`,Mt=(r,e,t)=>{const s=new Set(new Set(t.map(c=>c.target.target))),o=new Set(new Set(t.map(c=>c.target.project))),a=e.filter(c=>s.has(c)),n=r.filter(c=>o.has(c)),l=t.length-n.length*a.length,h=a.length===1?"target":"targets",f=a.join(", "),u=n.length===1?`project ${n[0]}`:`${n.length} projects`;let p=`${h} ${f} for ${u}`;return l>0&&(p+=` and ${l} ${l===1?"task":"tasks"} ${l===1?"it depends":"they depend"} on`),p},Bo={error:"red",info:"white",success:"green"},jt=({children:r,title:e,variant:t})=>{const s=Bo[t];return i.jsxs(v,{flexDirection:"column",children:[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,inverse:!0,children:" VIS "}),i.jsx(d,{bold:!0,color:s,children:"•"}),i.jsx(d,{children:e})]}),r]})},ss=({cached:r,failed:e,failedIds:t,projectNames:s,retriedIds:o,skippedIds:a,succeeded:n,targets:l,tasks:h,took:f})=>{const u=Mt(s,l,h),p=o??[];if(e===0&&(!a||a.length===0)){const c=r>0?` (${r} read from cache)`:"";return i.jsx(kr,{children:()=>i.jsx(jt,{title:`Successfully ran ${u}`,variant:"success",children:i.jsxs(v,{flexDirection:"column",marginTop:1,paddingLeft:3,children:[i.jsxs(d,{children:[i.jsx(d,{color:"green",children:Vr})," ",n+r," tasks completed",c?i.jsx(d,{dimColor:!0,children:c}):null,i.jsx(d,{dimColor:!0,children:` · Took ${f}`})]}),p.length>0&&i.jsxs(v,{flexDirection:"column",marginTop:1,children:[i.jsxs(d,{children:[i.jsx(d,{color:"yellow",children:"↻"})," ",i.jsx(d,{color:"yellow",children:String(p.length)})," task",p.length===1?"":"s"," succeeded after retry:"]}),p.map($=>i.jsxs(d,{children:[" ",i.jsx(d,{color:"yellow",children:"↻"})," ",$]},$))]})]})})})}return i.jsx(kr,{children:()=>i.jsx(jt,{title:`Ran ${u}`,variant:"error",children:i.jsxs(v,{flexDirection:"column",marginTop:1,paddingLeft:3,children:[a&&a.length>0&&i.jsxs(v,{flexDirection:"column",children:[i.jsxs(d,{dimColor:!0,children:[a.length," ","task",a.length===1?"":"s"," ","skipped (dependency failed or --bail)"]}),a.map(c=>i.jsxs(d,{dimColor:!0,children:[" - ",c]},c)),i.jsx(d,{})]}),e>0&&i.jsxs(v,{flexDirection:"column",children:[i.jsxs(d,{children:[i.jsx(d,{color:"red",children:String(e)})," ","task",e===1?"":"s"," ","failed:"]}),t.map(c=>i.jsxs(d,{children:[" ",i.jsx(d,{color:"red",children:Yr})," ",c]},c)),i.jsx(d,{})]}),p.length>0&&i.jsxs(v,{flexDirection:"column",children:[i.jsxs(d,{children:[i.jsx(d,{color:"yellow",children:String(p.length)})," ","task",p.length===1?"":"s"," ","finished after retry:"]}),p.map(c=>i.jsxs(d,{children:[" ",i.jsx(d,{color:"yellow",children:"↻"})," ",c]},c)),i.jsx(d,{})]}),i.jsx(d,{dimColor:!0,children:` Took ${f}`})]})})})};class dt{#e;#s=new Set;#r=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,retriedIds:[],retryTaskId:null,rows:e.map(t=>({persistent:!!t.overrides.visOptions?.persistent,status:"pending",taskId:t.id})),selectedIndex:0,startTime:Date.now(),statusFilter:"all",succeeded:0,viewMode:"list"}}getSnapshot=()=>this.#e;subscribe=e=>(this.#s.add(e),()=>{this.#s.delete(e)});startTasks(e){const t=[...this.#e.rows];for(const s of e){const o=t.findIndex(a=>a.taskId===s.id);o!==-1&&(t[o]={...t[o],elapsed:0,status:"running"},this.#r.set(s.id,process.hrtime()))}this.#t({...this.#e,rows:t})}endTasks(e){const t=[...this.#e.rows];let{cached:s,completed:o,failed:a,succeeded:n}=this.#e;const l=new Map(this.#e.outputs),h=[...this.#e.retriedIds];for(const u of e){const p=t.findIndex(c=>c.taskId===u.task.id);switch(p!==-1&&(t[p]={...t[p],duration:u.startTime&&u.endTime?u.endTime-u.startTime:void 0,retryAttempts:u.retryAttempts,status:u.status}),u.retryAttempts&&u.retryAttempts>0&&h.push(u.task.id),o++,u.status){case"failure":{a++;break}case"local-cache":case"local-cache-kept-existing":case"remote-cache":{s++;break}case"success":{n++;break}}u.terminalOutput&&!l.has(u.task.id)&&l.set(u.task.id,u.terminalOutput),this.#r.delete(u.task.id)}let{selectedIndex:f}=this.#e;if(a>this.#e.failed){const u=t.findIndex(p=>p.status==="failure");u!==-1&&(f=u)}this.#t({...this.#e,cached:s,completed:o,failed:a,outputs:l,retriedIds:h,rows:t,selectedIndex:f,succeeded:n})}static#n=256*1024;addOutput(e,t){if(!t.trim())return;let s=(this.#e.outputs.get(e)??"")+t;s.length>dt.#n&&(s=s.slice(-dt.#n)),this.#e.outputs.set(e,s),this.#t({...this.#e})}setOutput(e,t){this.#e.outputs.set(e,t),this.#t({...this.#e})}markDone(){this.#t({...this.#e,done:!0,endTime:Date.now()})}unmarkDone(){this.#t({...this.#e,autoExitCountdown:null,done:!1,endTime:null})}tick(){if(this.#r.size===0)return;let e=!1;const t=[...this.#e.rows];for(let s=0;s<t.length;s++){const o=t[s];if(o.status==="running"){const a=this.#r.get(o.taskId);if(a){const n=process.hrtime(a),l=n[0]*1e3+n[1]/1e6;t[s]={...o,elapsed:l},e=!0}}}e&&this.#t({...this.#e,rows:t})}setSelectedIndex(e){e!==this.#e.selectedIndex&&this.#t({...this.#e,selectedIndex:e})}setFocusedPanel(e){e!==this.#e.focusedPanel&&this.#t({...this.#e,focusedPanel:e})}setFilter(e){this.#t({...this.#e,filterText:e,selectedIndex:0})}setFilterActive(e){e!==this.#e.filterActive&&this.#t({...this.#e,filterActive:e,filterText:e?this.#e.filterText:"",selectedIndex:0})}pinTask(e,t){const s=[...this.#e.pinnedTaskIds];s[e]=t,this.#t({...this.#e,pinnedTaskIds:s})}clearPins(){this.#t({...this.#e,pinnedTaskIds:[null,null]})}requestRetry(e){const t=[...this.#e.rows],s=t.findIndex(l=>l.taskId===e);let{completed:o,failed:a,succeeded:n}=this.#e;if(s!==-1){const l=t[s].status;l==="failure"?(a=Math.max(0,a-1),o=Math.max(0,o-1)):l==="success"&&(n=Math.max(0,n-1),o=Math.max(0,o-1)),t[s]={...t[s],elapsed:0,retryAttempts:void 0,status:"running"},this.#r.set(e,process.hrtime())}this.#t({...this.#e,completed:o,done:!1,endTime:null,failed:a,interactiveMode:!1,retriedIds:this.#e.retriedIds.filter(l=>l!==e),retryTaskId:e,rows:t,succeeded:n})}acknowledgeRetry(){const e=this.#e.retryTaskId;return e&&this.#t({...this.#e,retryTaskId:null}),e}setInteractiveMode(e){e!==this.#e.interactiveMode&&this.#t({...this.#e,interactiveMode:e})}setViewMode(e){e!==this.#e.viewMode&&this.#t({...this.#e,viewMode:e})}setStatusFilter(e){this.#t({...this.#e,selectedIndex:0,statusFilter:e})}requestRerun(){this.#r.clear(),this.#t({...this.#e,autoExitCountdown:null,cached:0,completed:0,done:!1,endTime:null,failed:0,interactiveMode:!1,outputs:new Map,rerunRequested:!0,retriedIds:[],rows:this.#e.rows.map(e=>({persistent:e.persistent,status:"pending",taskId:e.taskId})),startTime:Date.now(),succeeded:0,viewMode:"list"})}acknowledgeRerun(){this.#e.rerunRequested&&this.#t({...this.#e,rerunRequested:!1})}#t(e){this.#e=e;for(const t of this.#s)try{t()}catch{}}}const No=r=>r.replaceAll(/\r\n|\r(?!\n)|\n/gu,`
10
- `),_o=(r,e,t,s)=>{const o={column:0,line:-1,...r.start},a={...o,...r.end},n=o.line,l=o.column,h=a.line,f=a.column;let u=Math.max(n-(t+1),0),p=Math.min(e.length,h+s);n===-1&&(u=0),h===-1&&(p=e.length);const c=h-n,$={};if(c)for(let S=0;S<=c;S++){const F=S+n;if(!l)$[F]=!0;else if(S===0){const D=e[F-1]?.length;$[F]=[l,(D??0)-l+1]}else if(S===c)$[F]=[0,f];else{const D=e[F-S]?.length;$[F]=[0,D]}}else l===f?$[n]=l?[l,0]:!0:$[n]=[l,(f??0)-(l??0)];return{end:p,markerLines:$,start:u}},Go=lr.platform==="win32"&&!lr.env?.WT_SESSION?">":"❯",qo=(r,e,t)=>{const s={linesAbove:2,linesBelow:3,prefix:"",showGutter:!0,tabWidth:4,...t,color:{gutter:S=>S,marker:S=>S,message:S=>S,...t?.color}},o=typeof e.start.column=="number";let a=(r.includes("\r")?No(r):r).split(`
11
- `);typeof s.tabWidth=="number"&&r.includes(" ")&&(a=a.map(S=>S.replaceAll(" "," ".repeat(s.tabWidth))));const{end:n,markerLines:l,start:h}=_o(e,a,s.linesAbove,s.linesBelow),f=String(n).length,{gutter:u,marker:p,message:c}=s.color;let $=a.slice(h,n).map((S,F)=>{const D=h+1+F,j=l[D],g=String(D).padStart(f),x=!l[D+1],y=` ${g}${s.showGutter?" |":""}`;if(j){let T="";if(Array.isArray(j)){const m=S.replaceAll(/[^\t]/g," ").slice(0,Math.max(j[0]-1,0)),k=j[1]||1;T=[`
12
- `,s.prefix+u(y.replaceAll(/\d/g," "))," ",m,p("^").repeat(k)].join(""),x&&s.message&&(T+=` ${c(s.message)}`)}return[s.prefix+p(Go),u(y),S.length>0?` ${S}`:"",T].join("")}return`${s.prefix} ${u(y)}${S.length>0?` ${S}`:""}`}).join(`
13
- `);return s.message&&!o&&($=`${s.prefix+" ".repeat(f+1)+s.message}
14
- ${$}`),$},Uo=new Map([["Error",Error],["EvalError",EvalError],["RangeError",RangeError],["ReferenceError",ReferenceError],["SyntaxError",SyntaxError],["TypeError",TypeError],["URIError",URIError]]);typeof AggregateError<"u"&&Uo.set("AggregateError",AggregateError);const Wo=It(import.meta.url),Ye=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,zo=r=>{if(typeof Ye<"u"&&Ye.versions&&Ye.versions.node){const[e,t]=Ye.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return Ye.getBuiltinModule(r)}return Wo(r)};zo("node:util");const Ho=It(import.meta.url),Je=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ft=r=>{if(typeof Je<"u"&&Je.versions&&Je.versions.node){const[e,t]=Je.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return Je.getBuiltinModule(r)}return Ho(r)};Ft("node:fs");Ft("node:path");Ft("node:url");let ns=class os extends Error{name="SourceMapReadError";constructor(e,t){const s=t instanceof Error?t.message:String(t);super(`${e}:
15
- ${s}`,{cause:t}),Object.setPrototypeOf(this,os.prototype)}};var Vo=44,$r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Yo=new Uint8Array(64),is=new Uint8Array(128);for(let r=0;r<$r.length;r++){const e=$r.charCodeAt(r);Yo[r]=e,is[e]=r}function Ke(r,e){let t=0,s=0,o=0;do{const n=r.next();o=is[n],t|=(o&31)<<s,s+=5}while(o&32);const a=t&1;return t>>>=1,a&&(t=-2147483648|-t),e+t}function jr(r,e){return r.pos>=e?!1:r.peek()!==Vo}typeof TextDecoder<"u"?new TextDecoder:typeof Buffer<"u";var Jo=class{constructor(e){this.pos=0,this.buffer=e}next(){return this.buffer.charCodeAt(this.pos++)}peek(){return this.buffer.charCodeAt(this.pos)}indexOf(e){const{buffer:t,pos:s}=this,o=t.indexOf(e,s);return o===-1?t.length:o}};function Ko(r){const{length:e}=r,t=new Jo(r),s=[];let o=0,a=0,n=0,l=0,h=0;do{const f=t.indexOf(";"),u=[];let p=!0,c=0;for(o=0;t.pos<f;){let $;o=Ke(t,o),o<c&&(p=!1),c=o,jr(t,f)?(a=Ke(t,a),n=Ke(t,n),l=Ke(t,l),jr(t,f)?(h=Ke(t,h),$=[o,a,n,l,h]):$=[o,a,n,l]):$=[o],u.push($),t.pos++}p||Xo(u),s.push(u),t.pos=f+1}while(t.pos<=e);return s}function Xo(r){r.sort(Qo)}function Qo(r,e){return r[0]-e[0]}var nt={exports:{}},Zo=nt.exports,br;function ei(){return br||(br=1,(function(r,e){(function(t,s){r.exports=s()})(Zo,(function(){const t=/^[\w+.-]+:\/\//,s=/^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/,o=/^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;function a(g){return t.test(g)}function n(g){return g.startsWith("//")}function l(g){return g.startsWith("/")}function h(g){return g.startsWith("file:")}function f(g){return/^[.?#]/.test(g)}function u(g){const x=s.exec(g);return c(x[1],x[2]||"",x[3],x[4]||"",x[5]||"/",x[6]||"",x[7]||"")}function p(g){const x=o.exec(g),y=x[2];return c("file:","",x[1]||"","",l(y)?y:"/"+y,x[3]||"",x[4]||"")}function c(g,x,y,T,m,k,M){return{scheme:g,user:x,host:y,port:T,path:m,query:k,hash:M,type:7}}function $(g){if(n(g)){const y=u("http:"+g);return y.scheme="",y.type=6,y}if(l(g)){const y=u("http://foo.com"+g);return y.scheme="",y.host="",y.type=5,y}if(h(g))return p(g);if(a(g))return u(g);const x=u("http://foo.com/"+g);return x.scheme="",x.host="",x.type=g?g.startsWith("?")?3:g.startsWith("#")?2:4:1,x}function S(g){if(g.endsWith("/.."))return g;const x=g.lastIndexOf("/");return g.slice(0,x+1)}function F(g,x){D(x,x.type),g.path==="/"?g.path=x.path:g.path=S(x.path)+g.path}function D(g,x){const y=x<=4,T=g.path.split("/");let m=1,k=0,M=!1;for(let B=1;B<T.length;B++){const Y=T[B];if(!Y){M=!0;continue}if(M=!1,Y!=="."){if(Y===".."){k?(M=!0,k--,m--):y&&(T[m++]=Y);continue}T[m++]=Y,k++}}let R="";for(let B=1;B<m;B++)R+="/"+T[B];(!R||M&&!R.endsWith("/.."))&&(R+="/"),g.path=R}function j(g,x){if(!g&&!x)return"";const y=$(g);let T=y.type;if(x&&T!==7){const k=$(x),M=k.type;switch(T){case 1:y.hash=k.hash;case 2:y.query=k.query;case 3:case 4:F(y,k);case 5:y.user=k.user,y.host=k.host,y.port=k.port;case 6:y.scheme=k.scheme}M>T&&(T=M)}D(y,T);const m=y.query+y.hash;switch(T){case 2:case 3:return m;case 4:{const k=y.path.slice(1);return k?f(x||g)&&!f(k)?"./"+k+m:k+m:m||"."}case 5:return y.path+m;default:return y.scheme+"//"+y.user+y.host+y.port+y.path+m}}return j}))})(nt)),nt.exports}var ti=ei();const ri=Kn(ti);function si(r){if(!r)return"";const e=r.lastIndexOf("/");return r.slice(0,e+1)}function ni(r,e){const t=si(r),s=e?e+"/":"";return o=>ri(s+(o||""),t)}var Ie=0,as=1,cs=2,ls=3,ds=4;function oi(r,e){const t=Sr(r,0);if(t===r.length)return r;e||(r=r.slice());for(let s=t;s<r.length;s=Sr(r,s+1))r[s]=ai(r[s],e);return r}function Sr(r,e){for(let t=e;t<r.length;t++)if(!ii(r[t]))return t;return r.length}function ii(r){for(let e=1;e<r.length;e++)if(r[e][Ie]<r[e-1][Ie])return!1;return!0}function ai(r,e){return e||(r=r.slice()),r.sort(ci)}function ci(r,e){return r[Ie]-e[Ie]}var ut=!1;function li(r,e,t,s){for(;t<=s;){const o=t+(s-t>>1),a=r[o][Ie]-e;if(a===0)return ut=!0,o;a<0?t=o+1:s=o-1}return ut=!1,t-1}function di(r,e,t){for(let s=t+1;s<r.length&&r[s][Ie]===e;t=s++);return t}function ui(r,e,t){for(let s=t-1;s>=0&&r[s][Ie]===e;t=s--);return t}function fi(){return{lastKey:-1,lastNeedle:-1,lastIndex:-1}}function hi(r,e,t,s){const{lastKey:o,lastNeedle:a,lastIndex:n}=t;let l=0,h=r.length-1;if(s===o){if(e===a)return ut=n!==-1&&r[n][Ie]===e,n;e>=a?l=n===-1?0:n:h=n}return t.lastKey=s,t.lastNeedle=e,t.lastIndex=li(r,e,l,h)}function Ot(r){return typeof r=="string"?JSON.parse(r):r}var pi=function(r,e){const t=Ot(r);if(!("sections"in t))return new At(t,e);const s=[],o=[],a=[],n=[],l=[];us(t,e,s,o,a,n,l,0,0,1/0,1/0);const h={version:3,file:t.file,names:n,sources:o,sourcesContent:a,mappings:s,ignoreList:l};return ji(h)};function us(r,e,t,s,o,a,n,l,h,f,u){const{sections:p}=r;for(let c=0;c<p.length;c++){const{map:$,offset:S}=p[c];let F=f,D=u;if(c+1<p.length){const j=p[c+1].offset;F=Math.min(f,l+j.line),F===f?D=Math.min(u,h+j.column):F<f&&(D=h+j.column)}gi($,e,t,s,o,a,n,l+S.line,h+S.column,F,D)}}function gi(r,e,t,s,o,a,n,l,h,f,u){const p=Ot(r);if("sections"in p)return us(...arguments);const c=new At(p,e),$=s.length,S=a.length,F=fs(c),{resolvedSources:D,sourcesContent:j,ignoreList:g}=c;if(xt(s,D),xt(a,c.names),j)xt(o,j);else for(let x=0;x<D.length;x++)o.push(null);if(g)for(let x=0;x<g.length;x++)n.push(g[x]+$);for(let x=0;x<F.length;x++){const y=l+x;if(y>f)return;const T=mi(t,y),m=x===0?h:0,k=F[x];for(let M=0;M<k.length;M++){const R=k[M],B=m+R[Ie];if(y===f&&B>=u)return;if(R.length===1){T.push([B]);continue}const Y=$+R[as],X=R[cs],G=R[ls];T.push(R.length===4?[B,Y,X,G]:[B,Y,X,G,S+R[ds]])}}}function xt(r,e){for(let t=0;t<e.length;t++)r.push(e[t])}function mi(r,e){for(let t=r.length;t<=e;t++)r[t]=[];return r[e]}var wi="`line` must be greater than 0 (lines start at line 1)",yi="`column` must be greater than or equal to 0 (columns start at column 0)",Tr=-1,vi=1,At=class{constructor(e,t){const s=typeof e=="string";if(!s&&e._decodedMemo)return e;const o=Ot(e),{version:a,file:n,names:l,sourceRoot:h,sources:f,sourcesContent:u}=o;this.version=a,this.file=n,this.names=l||[],this.sourceRoot=h,this.sources=f,this.sourcesContent=u,this.ignoreList=o.ignoreList||o.x_google_ignoreList||void 0;const p=ni(t,h);this.resolvedSources=f.map(p);const{mappings:c}=o;if(typeof c=="string")this._encoded=c,this._decoded=void 0;else if(Array.isArray(c))this._encoded=void 0,this._decoded=oi(c,s);else throw o.sections?new Error("TraceMap passed sectioned source map, please use FlattenMap export instead"):new Error(`invalid source map: ${JSON.stringify(o)}`);this._decodedMemo=fi(),this._bySources=void 0,this._bySourceMemos=void 0}};function fs(r){var e;return(e=r)._decoded||(e._decoded=Ko(r._encoded))}function xi(r,e){let{line:t,column:s,bias:o}=e;if(t--,t<0)throw new Error(wi);if(s<0)throw new Error(yi);const a=fs(r);if(t>=a.length)return rt(null,null,null,null);const n=a[t],l=Si(n,r._decodedMemo,t,s,o||vi);if(l===-1)return rt(null,null,null,null);const h=n[l];if(h.length===1)return rt(null,null,null,null);const{names:f,resolvedSources:u}=r;return rt(u[h[as]],h[cs]+1,h[ls],h.length===5?f[h[ds]]:null)}function ki(r,e){const{sources:t,resolvedSources:s}=r;let o=t.indexOf(e);return o===-1&&(o=s.indexOf(e)),o}function $i(r,e){const{sourcesContent:t}=r;if(t==null)return null;const s=ki(r,e);return s===-1?null:t[s]}function ji(r,e){const t=new At(bi(r,[]),e);return t._decoded=r.mappings,t}function bi(r,e){return{version:r.version,file:r.file,names:r.names,sourceRoot:r.sourceRoot,sources:r.sources,sourcesContent:r.sourcesContent,mappings:e,ignoreList:r.ignoreList||r.x_google_ignoreList}}function rt(r,e,t,s){return{source:r,line:e,column:t,name:s}}function Si(r,e,t,s,o){let a=hi(r,s,e,t);return ut?a=(o===Tr?di:ui)(r,s,a):o===Tr&&a++,a===-1||a===r.length?-1:a}class Pt extends Error{name="SourceMapParseError";constructor(e,t){const s=t instanceof Error?t.message:String(t);super(`${e}:
16
- ${s}`,{cause:t}),Object.setPrototypeOf(this,Pt.prototype)}}const Ti=It(import.meta.url),Xe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,mt=r=>{if(typeof Xe<"u"&&Xe.versions&&Xe.versions.node){const[e,t]=Xe.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return Xe.getBuiltinModule(r)}return Ti(r)},{readFileSync:hs}=mt("node:fs");mt("node:fs/promises");const{toNamespacedPath:bt,dirname:Ci,resolve:Ii}=mt("node:path"),{pathToFileURL:Ei,fileURLToPath:Ri}=mt("node:url"),Mi=/^data:application\/json[^,]+base64,/,Fi=/^[a-z][a-z0-9+.-]*:\/\//i,Oi=/^data:/i,Ai=/^[ \t]*\/\/[@#][ \t]+$/,Pi=/^[ \t]*\/\*[@#][ \t]+$/,Di=/[\s'"]/,Cr="sourceMappingURL=",Li=r=>Mi.test(r),Bi=r=>{const e=r.lastIndexOf(Cr);if(e===-1)return;let t=r.lastIndexOf(`
17
- `,e);t=t===-1?0:t+1;const s=r.slice(t,e),o=Ai.test(s),a=Pi.test(s);if(!o&&!a)return;const n=e+Cr.length;if(o){let u=r.indexOf(`
18
- `,n);u===-1&&(u=r.length);const p=r.slice(n,u).trimEnd();return p===""||Di.test(p)?void 0:p}const l=r.indexOf("*/",n);if(l===-1)return;let h=r.indexOf(`
19
- `,l);if(h===-1&&(h=r.length),r.slice(l+2,h).trim()!=="")return;const f=r.slice(n,l).trim();if(!(f===""||f.includes("*")))return f},Ni=(r,e)=>{const t=Bi(r);if(t){if(Li(t))return{inline:t};if(!Oi.test(t))return t.startsWith("file:")?{path:Ri(t)}:Fi.test(t)?{remote:t}:{path:Ii(e,t)}}},_i=r=>{const e=r.slice(r.indexOf(",")+1);return Buffer.from(e,"base64").toString()},kt=(r,e,t)=>{try{return new pi(r,e)}catch(s){throw new Pt(t,s)}},Gi=(r,e,t={},s)=>{const o=Ni(r,e);if(!o)return;const a=s===void 0?void 0:bt(s);if(o.inline){const f=a===void 0?"Error parsing inline sourcemap":`Error parsing sourcemap for file "${a}"`;return kt(_i(o.inline),o.inline,f)}if(o.remote){const f=t.remoteResolver?.(o.remote);return f===void 0?void 0:kt(f,o.remote,`Error parsing sourcemap for remote "${o.remote}"`)}const n=o.path,l=a??bt(n);let h;try{h=hs(n,{encoding:"utf8"})}catch(f){throw new ns(`Error reading sourcemap for file "${l}"`,f)}return kt(h,Ei(n).href,`Error parsing sourcemap for file "${l}"`)},qi=(r,e={})=>{let t;try{t=hs(r,{encoding:"utf8"})}catch(s){throw new ns(`Error reading sourcemap for file "${bt(r)}"`,s)}return Gi(t,Ci(r),e,r)},Ui=r=>lo(r),Wi=/^(?<name>(?:[A-Z][\w$]*)?(?:Error|Exception))(?::[ \t](?<message>.*))?$/,zi=/^\s*at\s+/,Hi=r=>{const e=r.split(`
20
- `);let t;for(let s=0;s<e.length;s++){const o=Wi.exec(e[s].trim());if(!o)continue;const a=[];for(let n=s+1;n<e.length&&n<=s+200;n++){const l=e[n];if(zi.test(l))a.push(l.trim());else if(a.length>0||l.trim()!=="")break}if(a.length>0){const n=o.groups?.name??"Error",l=o.groups?.message??"";t={message:l,name:n,stack:`${n}: ${l}
21
- ${a.map(h=>` ${h}`).join(`
22
- `)}`}}}return t},ps=r=>{if(r.startsWith("file://"))try{return Vn(r)}catch{return r}return r},Vi=r=>!r.includes("node_modules")&&!r.startsWith("node:")&&!r.startsWith("internal/"),Yi=r=>{try{return qi(r)}catch{return}},Ji=(r,e)=>{if(!r.file||r.line===void 0)return;const t=ps(r.file),s=Wn(t)?t:fr(e,t);if(!Vi(s)||!De(s))return;const o=Yi(s);if(o){const a=xi(o,{column:r.column===void 0?0:Math.max(0,r.column-1),line:r.line});if(a.source&&a.line!=null){const n=fr(zn(s),a.source),l=$i(o,a.source)??(De(n)?Ge(n,"utf8"):void 0);if(l!==void 0)return{column:a.column==null?void 0:a.column+1,file:n,line:a.line,source:l}}}return{column:r.column,file:s,line:r.line,source:Ge(s,"utf8")}},Ir=(r,e)=>{const t=Hn(e,r);return t&&!t.startsWith("..")?t:r},gs=(r,e)=>{if(!r?.trim())return r;try{const t=Hi(Ui(r));if(!t)return r;const s=new Error(t.message);s.name=t.name,s.stack=t.stack;const o=Qs(s);if(o.length===0)return r;const a=e.color,n={dim:c=>a?hr(c):c,head:c=>a?Jn(yt(c)):c,loc:c=>a?Yn(c):c};let l,h;for(const c of o){const $=Ji(c,e.cwd);if($){l=$,h=c;break}}const f=[n.head(`✖ ${t.name}${t.message?`: ${t.message}`:""}`)];if(l){const c=`${Ir(l.file,e.cwd)}:${l.line}${l.column?`:${l.column}`:""}`;f.push(` ${n.loc(c)}`,""),f.push(qo(l.source,{start:{column:l.column,line:l.line}},{color:a?{gutter:hr,marker:yt,message:yt}:void 0,linesAbove:2,linesBelow:3}))}const u=o.filter(c=>c!==h).slice(0,8).map(c=>{const $=c.methodName??"<anonymous>",S=c.file?`${Ir(ps(c.file),e.cwd)}${c.line?`:${c.line}`:""}`:"";return n.dim(` at ${$}${S?` (${S})`:""}`)});u.length>0&&f.push("",...u);const p=n.dim("─".repeat(40));return`${f.join(`
23
- `)}
24
- ${p}
25
- ${r}`}catch{return r}},Ki={delimiter:" ",language:{d:()=>" d",future:"in %s",h:()=>" h",m:()=>" m",mo:()=>" mo",ms:()=>" ms",past:"%s ago",s:()=>" s",w:()=>" w",y:()=>" y"},largest:2,round:!0,spacer:"",units:["h","m","s","ms"]},Le=r=>oo(r,Ki),_e=r=>r==="local-cache"||r==="local-cache-kept-existing"||r==="remote-cache",qe=r=>{switch(r){case"failure":return{color:"red",icon:Yr};case"local-cache":case"local-cache-kept-existing":case"remote-cache":case"success":return{color:"green",icon:Vr};case"skipped":return{color:"gray",icon:pt};default:return{color:"gray",icon:"?"}}},Qe=r=>{const{color:e,icon:t}=qe(r);return pe(K.createElement(d,{color:e},t),{columns:10}).trim()},Xi=r=>{const{color:e,icon:t}=qe(r);switch(r){case"local-cache":case"local-cache-kept-existing":case"remote-cache":return pe(K.createElement(d,null,K.createElement(d,{color:e},t)," ",K.createElement(d,{color:"cyan"},"[cache]")),{columns:30}).trim();case"skipped":return pe(K.createElement(d,null,K.createElement(d,{dimColor:!0},t)," ",K.createElement(d,{dimColor:!0},"[skipped]")),{columns:30}).trim();default:return pe(K.createElement(d,{color:e},t),{columns:10}).trim()}},Qi=r=>r==="azure"||r==="buildkite"||r==="github"||r==="gitlab"||r==="off"?r:process.env.GITHUB_ACTIONS==="true"?"github":process.env.GITLAB_CI==="true"?"gitlab":process.env.BUILDKITE==="true"?"buildkite":process.env.TF_BUILD?.toLowerCase()==="true"?"azure":"off",Zi=r=>{const e=r.replaceAll(/\W+/g,"_"),t=Xn("sha256").update(r).digest("hex").slice(0,6);return`${e}_${t}`},ea=(r,e,t,s="auto")=>{const o=t.trim();if(!o)return;const a=`
26
- `,n=Qi(s);if(n==="github"&&e!=="failure"){process.stdout.write(`::group::${Qe(e)} ${r}${a}`),process.stdout.write(o+a),process.stdout.write(`::endgroup::${a}`);return}if(n==="gitlab"&&e!=="failure"){const p=Math.floor(Date.now()/1e3),c=Zi(r),$="\x1B[0K";process.stdout.write(`${$}section_start:${String(p)}:${c}[collapsed=true]\r${$}${Qe(e)} ${r}${a}`),process.stdout.write(o+a);const S=Math.floor(Date.now()/1e3);process.stdout.write(`${$}section_end:${String(S)}:${c}\r${$}${a}`);return}if(n==="buildkite"&&e!=="failure"){process.stdout.write(`--- ${Qe(e)} ${r}${a}`),process.stdout.write(o+a);return}if(n==="azure"&&e!=="failure"){process.stdout.write(`##[group]${Qe(e)} ${r}${a}`),process.stdout.write(o+a),process.stdout.write(`##[endgroup]${a}`);return}const l=process.stdout.columns||80,h=pe(K.createElement(d,{dimColor:!0},pt.repeat(l)),{columns:l}).trim(),f=Xi(e),u=pe(K.createElement(d,{bold:!0},r),{columns:l}).trim();process.stdout.write(`${h}${a}`),process.stdout.write(`${f} ${u}${a}`),process.stdout.write(o+a),process.stdout.write(`${h}${a}`)},ta=r=>r==="running"?{color:"white",icon:"•"}:r==="pending"?{color:"gray",icon:"·"}:qe(r),ra=({autoScroll:r,focused:e,interactiveMode:t,showFullscreenHint:s,statusValue:o,supportsInteractive:a,taskId:n})=>{if(!n)return;if(t)return"Esc cancel | Enter send";const l=r?"":" PAUSED (f resume)",h=a?" i INPUT":"";return e&&o==="running"&&s?`⏎ FULLSCREEN${h} f FOLLOW${l}`:e&&o==="running"?`f FOLLOW${h}${l}`:e&&s?`<enter> full screen${l}`:e?l||void 0:"<tab> or <enter> to focus"},Er=({autoScroll:r=!0,duration:e,focused:t,interactiveMode:s,output:o,scrollRef:a,showFullscreenHint:n,status:l,supportsInteractive:h=!0,taskId:f})=>{const u=l??"pending",{icon:p}=ta(u),c=t?"bold":"single",$=u==="failure"?"red":u==="success"||_e(u)?t?"green":"gray":u==="running"?t?"white":"cyan":t?"white":"gray",S=f?`${p} ${f}`:void 0,F=e===void 0?void 0:Le(e),D=ra({autoScroll:r,focused:t,interactiveMode:s??!1,showFullscreenHint:n??!1,statusValue:u,supportsInteractive:h,taskId:f});if(!f)return i.jsxs(v,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",paddingX:2,paddingY:1,children:[i.jsx(d,{dimColor:!0,children:"Select a task to view output"}),i.jsx(d,{dimColor:!0,children:"Press Enter or 1/2 to pin"})]});const j=[];if(o)for(const g of o.split(`
27
- `))j.push(g.endsWith("\r")?g.slice(0,-1):g);return!o&&(u==="running"||u==="pending")?i.jsx(v,{borderBottomTitle:D,borderColor:$,borderStyle:c,borderTopRightTitle:F,borderTopTitle:S,flexDirection:"column",flexGrow:1,paddingX:2,paddingY:1,children:i.jsx(v,{alignItems:"center",flexGrow:1,justifyContent:"center",children:i.jsx(d,{dimColor:!0,children:"Waiting for task output…"})})}):i.jsxs(v,{borderBottomTitle:D,borderColor:s?"yellow":$,borderStyle:c,borderTopRightTitle:F,borderTopTitle:S,flexDirection:"column",flexGrow:1,children:[i.jsx(v,{flexGrow:1,flexShrink:1,paddingY:1,children:i.jsx(zr,{flexGrow:1,followOutput:r,paddingX:2,ref:a,scrollbar:!0,scrollbarColor:"gray",scrollbarStyle:"block",children:i.jsx(d,{children:j.join(`
28
- `)})})}),s&&i.jsx(v,{flexShrink:0,justifyContent:"center",paddingX:1,children:i.jsx(d,{bold:!0,color:"yellow",children:"INTERACTIVE | keystrokes forwarded to task | Esc to exit"})})]})},sa={crashed:"✖",failed:"✖",pending:"·",ready:"●",starting:"•"},ms=r=>r==="ready"?"green":r==="crashed"||r==="failed"?"red":r==="starting"?"cyan":"gray",na=({status:r})=>r==="starting"?i.jsx(d,{color:"cyan",children:i.jsx(Kr,{type:"dots"})}):i.jsx(d,{bold:!0,color:ms(r),children:sa[r]}),oa=({active:r,focused:e,state:t})=>{const s=e&&r,o=s?">":" ",a=t.status==="ready"?t.port?`running, port ${String(t.port)}`:"running":t.status==="failed"||t.status==="crashed"?t.errorMessage??"exited":t.lastLine??"booting…";return i.jsxs(v,{flexDirection:"row",flexShrink:0,overflow:"hidden",children:[i.jsx(d,{children:o}),i.jsx(d,{children:" "}),i.jsx(v,{flexShrink:0,width:3,children:i.jsx(na,{status:t.status})}),i.jsx(v,{flexGrow:0,flexShrink:0,width:28,children:i.jsx(d,{bold:s,inverse:s,children:t.id})}),i.jsx(v,{flexGrow:1,flexShrink:1,overflow:"hidden",children:i.jsxs(d,{color:ms(t.status),dimColor:t.status!=="crashed"&&t.status!=="failed",wrap:"truncate-end",children:[" ",a]})})]})},ia=({states:r})=>{const e=[];for(const s of r)s.status==="ready"&&e.push(s.id);const t=e.join(", ");return i.jsxs(v,{paddingX:1,children:[i.jsxs(d,{bold:!0,color:"green",children:["● ","Services"]}),i.jsxs(d,{children:[" ",String(e.length)," / ",String(r.length)," running"]}),t.length>0&&i.jsxs(d,{dimColor:!0,children:[" ",t]}),i.jsx(d,{dimColor:!0,children:" [Tab ↓]"})]})},aa=({states:r})=>{const e=r.find(t=>t.status==="crashed"||t.status==="failed");return e?i.jsxs(v,{flexDirection:"column",paddingX:1,children:[i.jsxs(d,{bold:!0,color:"red",children:["✖ ","Service crashed:"," ",e.id]}),e.tailLines.slice(-3).map((t,s)=>i.jsxs(d,{color:"red",dimColor:!0,children:[" ",t]},`crash-${String(s)}`))]}):i.jsx(i.Fragment,{})},ca=({activeIndex:r,focused:e,store:t})=>{const s=H.useSyncExternalStore(t.subscribe,t.getSnapshot),o=t.getIds();if(o.length===0)return i.jsx(i.Fragment,{});const a=o.map(u=>s.get(u)).filter(u=>u!==void 0),n=t.getDockState(),l=n==="crash"?"red":n==="ready"?"gray":e?"white":"cyan",h=n==="crash"?"Services (crashed)":n==="ready"?"Services":"Services (starting)",f=e?n==="crash"?"↑↓ select Enter logs R retry Esc back":"↑↓ select Enter logs Esc back":"Tab to focus services";return n==="ready"&&!e?i.jsx(v,{borderColor:l,borderStyle:"single",flexDirection:"row",flexShrink:0,children:i.jsx(ia,{states:a})}):i.jsxs(v,{borderBottomTitle:f,borderColor:l,borderStyle:e?"bold":"single",borderTopTitle:h,flexDirection:"column",flexGrow:2,flexShrink:0,minHeight:6,paddingX:1,children:[n==="crash"&&i.jsx(aa,{states:a}),a.map((u,p)=>i.jsx(oa,{active:p===r,focused:e,state:u},u.id))]})},ws=6,ys=8,vs=12,la=r=>r==="running"||r==="pending"?Jr:r==="local-cache"||r==="local-cache-kept-existing"?"Local":r==="remote-cache"?"Remote":pt,Rr=(r,e)=>e[0]===r?"[1]":e[1]===r?"[2]":"",Mr=({compact:r,focused:e,isSelected:t,pinLabel:s,row:o})=>{const{persistent:a,status:n,taskId:l}=o,h=e&&t,f=h?">":" ",u=n==="running"&&a===!0;let p;if(u)p=i.jsx(d,{bold:!0,color:"green",children:" ● "});else if(n==="running")p=i.jsxs(d,{bold:!0,color:"white",children:[" ",i.jsx(Kr,{type:"dots"})," "]});else if(n==="pending")p=i.jsx(d,{bold:!0,color:"gray",children:" · "});else{const{color:$,icon:S}=qe(n);p=i.jsxs(d,{bold:!0,color:$,children:[" ",S," "]})}let c=Jr;return u?c="running":n!=="running"&&n!=="pending"?c=o.duration===void 0?pt:Le(o.duration):n==="running"&&o.elapsed!==void 0&&(c=Le(o.elapsed)),i.jsxs(v,{children:[i.jsx(d,{children:f}),i.jsx(v,{width:ws,children:p}),i.jsxs(v,{flexGrow:1,children:[i.jsx(d,{bold:h,inverse:h,children:l}),s?i.jsx(d,{dimColor:!0,children:` ${s}`}):null]}),!r&&i.jsx(v,{justifyContent:"flex-end",width:ys,children:i.jsx(d,{dimColor:!_e(n),children:la(n)})}),!r&&i.jsx(v,{justifyContent:"flex-end",width:vs,children:i.jsx(d,{color:u?"green":void 0,dimColor:n==="pending"||u,children:c})})]})},Fr=({compact:r,filterActive:e,filterText:t,focused:s,headerStatus:o,parallelSlots:a=3,pinnedTaskIds:n,rows:l,scrollRef:h,selectedIndex:f,title:u})=>{const p=o==="error"?"red":o==="success"?"green":s?"white":"gray",c=l[f]?.taskId,$=[];let S=0;for(const g of l)g.status==="running"?$.push(g):g.status==="pending"&&(S+=1);const F=Math.min(a,$.length+S),D=F>1,j=[];if(D)for(let g=0;g<F;g++){const x=$[g];x?j.push(i.jsx(Mr,{compact:r,focused:s,isSelected:x.taskId===c,pinLabel:Rr(x.taskId,n),row:x},`par-${x.taskId}`)):j.push(i.jsxs(v,{children:[i.jsx(d,{children:" "}),i.jsx(v,{width:ws,children:i.jsx(d,{bold:!0,color:"gray",children:" · "})}),i.jsx(d,{dimColor:!0,children:"Waiting for task..."})]},`par-empty-${String(g)}`))}return i.jsxs(v,{borderColor:p,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[i.jsxs(v,{flexShrink:0,paddingX:1,children:[i.jsx(d,{bold:!0,inverse:!0,children:" VIS "}),i.jsx(d,{children:` ${u}`}),!r&&i.jsxs(v,{flexGrow:1,gap:0,justifyContent:"flex-end",children:[i.jsx(v,{justifyContent:"flex-end",width:ys,children:i.jsx(d,{dimColor:!0,children:"Cache"})}),i.jsx(v,{justifyContent:"flex-end",width:vs,children:i.jsx(d,{dimColor:!0,children:"Duration"})})]})]}),i.jsx(zr,{flexGrow:1,flexShrink:1,paddingX:1,paddingY:1,ref:h,scrollbar:!0,scrollbarColor:"gray",scrollbarStyle:"block",children:l.map(g=>i.jsx(Mr,{compact:r,focused:s,isSelected:g.taskId===c,pinLabel:Rr(g.taskId,n),row:g},g.taskId))}),D&&i.jsx(v,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",borderTop:!0,flexDirection:"column",flexShrink:0,paddingX:1,paddingY:1,children:j}),e&&i.jsxs(v,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",borderTop:!0,flexShrink:0,paddingX:1,children:[i.jsx(d,{bold:!0,color:"white",children:"/ "}),i.jsx(d,{children:t}),i.jsx(d,{inverse:!0,children:" "})]})]})},Or=40,Ar=10,Pr=100,da=Object.freeze([]),ua=({autoExitSeconds:r,onRetryService:e,parallelSlots:t,projectNames:s,serviceDockStore:o,stdinRegistry:a,store:n,targets:l,tasks:h})=>{const{exit:f}=Zs(),{columns:u,rows:p}=en(),c=H.useSyncExternalStore(n.subscribe,n.getSnapshot),$=H.useCallback(E=>o?o.subscribe(E):()=>{},[o]);H.useSyncExternalStore($,()=>o?o.getDockState():"ready");const S=o?o.getIds():da,F=S.length>0,[D,j]=H.useState(0),[g,x]=H.useState(null),y=H.useSyncExternalStore($,()=>g&&o?o.getState(g):void 0),[T,m]=H.useState(!1),k=H.useRef(null),M=H.useRef(null),R=H.useRef(null),[B,Y]=H.useState(!1),[X,G]=H.useState(!0),ee=H.useRef({list:0,splitList:0,splitOutput:0}),xe=H.useCallback(()=>{c.viewMode==="list"?ee.current.list=M.current?.getScrollOffset()??0:c.viewMode==="split"&&(ee.current.splitList=M.current?.getScrollOffset()??0,ee.current.splitOutput=R.current?.getScrollOffset()??0)},[c.viewMode]),te=H.useCallback(E=>{setTimeout(()=>{if(E==="list"){const C=ee.current.list;M.current?.scrollTo(C)}else if(E==="split"){const C=ee.current.splitList;C>0?M.current?.scrollTo(C):M.current?.scrollTo(Math.max(0,n.getSnapshot().selectedIndex-2)),R.current?.scrollTo(ee.current.splitOutput)}},0)},[n]),ce=H.useRef(!1);H.useEffect(()=>{c.done&&!ce.current&&(ce.current=!0,r>0&&c.failed===0&&Y(!0)),!c.done&&ce.current&&(ce.current=!1,Y(!1))},[c.done,c.failed,r]);const le=H.useMemo(()=>{const E=S.length>0?new Set(S):null,C=c.filterText?c.filterText.toLowerCase():null,O=[];for(const re of c.rows)E?.has(re.taskId)||c.statusFilter==="failed"&&re.status!=="failure"||c.statusFilter==="running"&&re.status!=="running"&&re.status!=="pending"||c.statusFilter==="passed"&&re.status!=="success"&&!_e(re.status)||C&&!re.taskId.toLowerCase().includes(C)||O.push(re);return O},[c.rows,c.filterText,c.statusFilter,S]),z=H.useMemo(()=>{let E=0;for(const C of c.rows)C.status==="running"&&(E+=1);return E},[c.rows]),V=(le[c.selectedIndex]??null)?.taskId??null,ie=g?null:c.pinnedTaskIds[0]??V,se=ie?c.rows.find(E=>E.taskId===ie):null,A=y??null,de=g?(A?.tailLines??[]).join(`
29
- `):ie?c.outputs.get(ie)??"":"",Re=H.useMemo(()=>se?.status==="failure"&&de?gs(de,{color:!process.env.NO_COLOR,cwd:process.cwd()}):de,[se?.status,de]),Oe=g??ie,Be=g?A?.status==="crashed"||A?.status==="failed"?"failure":"running":se?.status,Ae=Mt(s,l,h),Z=c.done?`Completed ${Ae} (${Le((c.endTime??Date.now())-c.startTime)})`:`Running ${Ae}...`,Me=c.done?c.failed>0?"error":"success":"running",Se=H.useCallback(E=>{M.current?.scrollTo(Math.max(0,E-2))},[]);if(H.useEffect(()=>{c.interactiveMode&&se?.status!=="running"&&n.setInteractiveMode(!1)},[c.interactiveMode,se?.status,n]),H.useEffect(()=>{if(!ie)return;let E=u;c.viewMode==="split"&&u>=Pr?E=u-Math.floor(u*.4)-2:(c.viewMode==="split"||c.viewMode==="fullscreen")&&(E=u-2);const C=Math.max(1,p-4);a.get(ie)?.resize?.(E,C)},[u,p,c.viewMode,ie]),dr((E,C)=>{if(C.escape){n.setInteractiveMode(!1);return}if(!ie)return;const O=a.get(ie);if(!O){n.setInteractiveMode(!1);return}if(C.return)O.write("\r");else if(C.upArrow)O.write("\x1B[A");else if(C.downArrow)O.write("\x1B[B");else if(C.rightArrow)O.write("\x1B[C");else if(C.leftArrow)O.write("\x1B[D");else if(C.backspace)O.write("");else if(C.delete)O.write("\x1B[3~");else if(C.tab)O.write(" ");else if(C.home)O.write("\x1B[H");else if(C.end)O.write("\x1B[F");else if(C.pageUp)O.write("\x1B[5~");else if(C.pageDown)O.write("\x1B[6~");else if(C.ctrl&&E){const re=E.toUpperCase().codePointAt(0);re!==void 0&&re>=65&&re<=90&&O.write(String.fromCodePoint(re-64))}else E&&O.write(E)},{isActive:c.interactiveMode}),dr((E,C)=>{if(E==="c"&&C.ctrl){f();return}if(!B){if(T){C.escape||E==="?"?m(!1):E==="q"?(m(!1),Y(!0)):C.downArrow||E==="j"?k.current?.scrollBy(1):C.upArrow||E==="k"?k.current?.scrollBy(-1):C.pageDown?k.current?.scrollBy(5):C.pageUp?k.current?.scrollBy(-5):C.home?k.current?.scrollToTop():C.end&&k.current?.scrollToBottom();return}if(E==="?"){m(!0);return}if(E==="q"){Y(!0);return}if(E==="r"&&c.done){n.requestRerun();return}if(E==="R"&&c.done){const O=le[c.selectedIndex];O?.status==="failure"&&n.requestRetry(O.taskId);return}if(E==="F"&&!c.filterActive){const O=["all","failed","running","passed"],re=O.indexOf(c.statusFilter);n.setStatusFilter(O[(re+1)%O.length]);return}if(c.filterActive){if(C.escape){n.setFilterActive(!1);return}if(C.return){n.setFilterActive(!1);return}if(C.backspace){n.setFilter(c.filterText.slice(0,-1));return}if(E&&!C.ctrl&&!C.meta){n.setFilter(c.filterText+E);return}return}if(E==="i"&&se?.status==="running"&&(c.viewMode==="fullscreen"||c.viewMode==="split"&&c.focusedPanel==="output")){n.setInteractiveMode(!0);return}if(c.viewMode==="fullscreen"){if(C.escape){n.setViewMode("split"),te("split");return}if(E==="f"){const O=!X;G(O),O&&R.current?.scrollToBottom();return}if(C.downArrow||E==="j"){G(!1),R.current?.scrollBy(1);return}if(C.upArrow||E==="k"){G(!1),R.current?.scrollBy(-1);return}if(C.pageDown||C.ctrl&&E==="d"){G(!1),R.current?.scrollBy(12);return}if(C.pageUp||C.ctrl&&E==="u"){G(!1),R.current?.scrollBy(-12);return}if(C.home){G(!1),R.current?.scrollToTop();return}if(C.end){G(!0),R.current?.scrollToBottom();return}return}if(c.focusedPanel==="dock"&&F&&o){if(C.tab){x(null),n.setFocusedPanel("tasks");return}if(C.escape){n.setFocusedPanel("tasks"),x(null),c.viewMode==="split"&&(n.setViewMode("list"),te("list"));return}if(C.downArrow||E==="j"){j(O=>Math.min(O+1,S.length-1));return}if(C.upArrow||E==="k"){j(O=>Math.max(O-1,0));return}if(C.return){const O=S[D];O&&(x(O),G(!0),xe(),ee.current.splitList=0,ee.current.splitOutput=0,n.setViewMode("split"),n.setFocusedPanel("output"),te("split"));return}if((E==="r"||E==="R")&&e){const O=S[D],re=O?o.getState(O)?.status:void 0;if(O&&(re==="crashed"||re==="failed")){const fe=e(O);fe instanceof Promise&&fe.catch(()=>{})}return}return}if(c.viewMode==="split"){if(C.tab){c.focusedPanel==="tasks"?n.setFocusedPanel("output"):F?n.setFocusedPanel("dock"):(x(null),n.setFocusedPanel("tasks"));return}if(c.focusedPanel==="output"){if(C.escape){if(g&&F){x(null),n.setViewMode("list"),n.setFocusedPanel("dock"),te("list");return}x(null),n.setFocusedPanel("tasks");return}if(C.return){xe(),n.setViewMode("fullscreen");return}if(E==="f"){const O=!X;G(O),O&&R.current?.scrollToBottom();return}if(C.downArrow||E==="j"){G(!1),R.current?.scrollBy(1);return}if(C.upArrow||E==="k"){G(!1),R.current?.scrollBy(-1);return}if(C.pageDown||C.ctrl&&E==="d"){G(!1),R.current?.scrollBy(12);return}if(C.pageUp||C.ctrl&&E==="u"){G(!1),R.current?.scrollBy(-12);return}if(C.home){G(!1),R.current?.scrollToTop();return}if(C.end){G(!0),R.current?.scrollToBottom();return}return}if(C.escape){n.setViewMode("list"),te("list");return}if(C.return){n.setFocusedPanel("output");return}}if(c.viewMode==="list"||c.viewMode==="split"&&c.focusedPanel==="tasks"){if(C.tab&&c.viewMode==="list"&&F){n.setFocusedPanel("dock");return}if(C.downArrow||E==="j"){const O=Math.min(c.selectedIndex+1,Math.max(0,le.length-1));n.setSelectedIndex(O),Se(O);return}if(C.upArrow||E==="k"){const O=Math.max(c.selectedIndex-1,0);n.setSelectedIndex(O),Se(O);return}if(C.return&&c.viewMode==="list"){G(!0),xe(),ee.current.splitList=0,ee.current.splitOutput=0,n.setViewMode("split"),n.setFocusedPanel("output"),te("split");return}if(E==="/"){n.setFilterActive(!0);return}if(E==="1"&&V){n.pinTask(0,V);return}if(E==="2"&&V){n.pinTask(1,V);return}if(E==="0"){n.clearPins();return}C.escape&&c.filterText&&n.setFilter("")}}},{isActive:!c.interactiveMode}),u<Or||p<Ar)return i.jsx(v,{alignItems:"center",height:p,justifyContent:"center",width:u,children:i.jsxs(d,{color:"yellow",children:["Terminal too small (",u,"x",p,"). Minimum:"," ",Or,"x",Ar]})});const ke=i.jsxs(v,{gap:1,children:[c.succeeded>0&&i.jsxs(d,{bold:!0,color:"green",children:["✓"," ",c.succeeded]}),c.failed>0&&i.jsxs(d,{bold:!0,color:"red",children:["✗"," ",c.failed]}),z>0&&i.jsxs(d,{color:"cyan",children:["◷"," ",z]}),i.jsxs(d,{dimColor:!0,children:[c.rows.length," ","total"]}),c.statusFilter!=="all"&&i.jsxs(d,{color:"yellow",children:["[",c.statusFilter,"]"]})]});let ge;if(c.viewMode==="fullscreen")ge=[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"Esc"}),i.jsx(d,{dimColor:!0,children:"BACK"})]},"esc"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"↑↓"}),i.jsx(d,{dimColor:!0,children:"SCROLL"})]},"scroll"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"^u ^d"}),i.jsx(d,{dimColor:!0,children:"PAGE"})]},"page"),...se?.status==="running"?[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"i"}),i.jsx(d,{dimColor:!0,children:"INPUT"})]},"i")]:[],i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"q"}),i.jsx(d,{dimColor:!0,children:"QUIT"})]},"q")];else if(c.done){const E=le[c.selectedIndex]?.status==="failure";ge=[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"q"}),i.jsx(d,{dimColor:!0,children:"QUIT"})]},"q"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"r"}),i.jsx(d,{dimColor:!0,children:"RERUN"})]},"r"),...E?[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"R"}),i.jsx(d,{dimColor:!0,children:"RETRY"})]},"R")]:[],i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"?"}),i.jsx(d,{dimColor:!0,children:"HELP"})]},"?"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"↑↓"}),i.jsx(d,{dimColor:!0,children:"NAV"})]},"nav"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"F"}),i.jsx(d,{dimColor:!0,children:"FILTER"})]},"F"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"⏎"}),i.jsx(d,{dimColor:!0,children:c.viewMode==="list"?"OUTPUT":"FULLSCREEN"})]},"enter")]}else c.viewMode==="split"&&c.focusedPanel==="output"?ge=[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"q"}),i.jsx(d,{dimColor:!0,children:"QUIT"})]},"q"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"Esc"}),i.jsx(d,{dimColor:!0,children:"BACK"})]},"esc"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"↑↓"}),i.jsx(d,{dimColor:!0,children:"SCROLL"})]},"scroll"),...se?.status==="running"?[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"i"}),i.jsx(d,{dimColor:!0,children:"INPUT"})]},"i")]:[],i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"⏎"}),i.jsx(d,{dimColor:!0,children:"FULLSCREEN"})]},"enter"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"Tab"}),i.jsx(d,{dimColor:!0,children:"PANEL"})]},"tab"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"?"}),i.jsx(d,{dimColor:!0,children:"HELP"})]},"?")]:ge=[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"q"}),i.jsx(d,{dimColor:!0,children:"QUIT"})]},"q"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"?"}),i.jsx(d,{dimColor:!0,children:"HELP"})]},"?"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"↑↓"}),i.jsx(d,{dimColor:!0,children:"NAV"})]},"nav"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"/"}),i.jsx(d,{dimColor:!0,children:"FILTER"})]},"/"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"F"}),i.jsx(d,{dimColor:!0,children:"STATUS"})]},"F"),i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"⏎"}),i.jsx(d,{dimColor:!0,children:c.viewMode==="list"?"OUTPUT":"FULLSCREEN"})]},"enter"),...c.viewMode==="split"?[i.jsxs(v,{gap:1,children:[i.jsx(d,{bold:!0,color:"white",children:"Tab"}),i.jsx(d,{dimColor:!0,children:"PANEL"})]},"tab")]:[]];const we=i.jsxs(v,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,justifyContent:"space-between",children:[i.jsx(v,{flexGrow:1,flexWrap:"wrap",gap:2,paddingX:1,children:ge}),i.jsx(v,{flexShrink:0,paddingX:1,children:ke})]}),Te=i.jsxs(tn,{backgroundColor:"#1e1e1e",footer:i.jsxs(d,{dimColor:!0,children:[i.jsx(d,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",i.jsx(d,{bold:!0,color:"white",children:"?"}),"/",i.jsx(d,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:k,title:"KEYBOARD SHORTCUTS",visible:T,width:52,children:[i.jsxs(v,{flexDirection:"column",marginBottom:1,children:[i.jsxs(v,{marginBottom:1,children:[i.jsx(d,{dimColor:!0,children:"── "}),i.jsx(d,{bold:!0,color:"white",children:"NAVIGATION"})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","↑","/k"]}),i.jsx(d,{dimColor:!0,children:" Move up"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","↓","/j"]}),i.jsx(d,{dimColor:!0,children:" Move down"})]})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Tab"]}),i.jsx(d,{dimColor:!0,children:" Switch panel (split)"})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Esc"]}),i.jsx(d,{dimColor:!0,children:" Back / close"})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Enter"]}),i.jsx(d,{dimColor:!0,children:" Show output / fullscreen"})]})]}),i.jsxs(v,{flexDirection:"column",marginBottom:1,children:[i.jsxs(v,{marginBottom:1,children:[i.jsx(d,{dimColor:!0,children:"── "}),i.jsx(d,{bold:!0,color:"white",children:"VIEWS"})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Enter"]}),i.jsxs(d,{dimColor:!0,children:[" ","List"," ","→"," ","Split"," ","→"," ","Fullscreen"]})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Esc"]}),i.jsxs(d,{dimColor:!0,children:[" ","Fullscreen"," ","→"," ","Split"," ","→"," ","List"]})]})]}),i.jsxs(v,{flexDirection:"column",marginBottom:1,children:[i.jsxs(v,{marginBottom:1,children:[i.jsx(d,{dimColor:!0,children:"── "}),i.jsx(d,{bold:!0,color:"white",children:"ACTIONS"})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","/"]}),i.jsx(d,{dimColor:!0,children:" Filter by text"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","F"]}),i.jsx(d,{dimColor:!0,children:" Filter by status"})]})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","1"]}),i.jsx(d,{dimColor:!0,children:"/"}),i.jsx(d,{bold:!0,color:"white",children:"2"}),i.jsx(d,{dimColor:!0,children:" Pin to output pane"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","0"]}),i.jsx(d,{dimColor:!0,children:" Clear pins"})]})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","r"]}),i.jsx(d,{dimColor:!0,children:" Rerun all (done)"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","R"]}),i.jsx(d,{dimColor:!0,children:" Retry failed task"})]})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","i"]}),i.jsx(d,{dimColor:!0,children:" Interactive input (running task)"})]})]}),i.jsxs(v,{flexDirection:"column",marginBottom:1,children:[i.jsxs(v,{marginBottom:1,children:[i.jsx(d,{dimColor:!0,children:"── "}),i.jsx(d,{bold:!0,color:"white",children:"SCROLLING"}),i.jsx(d,{dimColor:!0,children:" (output panel)"})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","↑","/k"]}),i.jsx(d,{dimColor:!0,children:" Scroll up"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","↓","/j"]}),i.jsx(d,{dimColor:!0,children:" Scroll down"})]})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","^u"]}),i.jsx(d,{dimColor:!0,children:" Page up"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","^d"]}),i.jsx(d,{dimColor:!0,children:" Page down"})]})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","Home"]}),i.jsx(d,{dimColor:!0,children:" Top"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","End"]}),i.jsx(d,{dimColor:!0,children:" Bottom (resume follow)"})]})]}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","f"]}),i.jsx(d,{dimColor:!0,children:" Toggle auto-scroll (tail mode)"})]})]}),i.jsxs(v,{flexDirection:"column",children:[i.jsxs(v,{marginBottom:1,children:[i.jsx(d,{dimColor:!0,children:"── "}),i.jsx(d,{bold:!0,color:"white",children:"GENERAL"})]}),i.jsxs(v,{children:[i.jsx(v,{width:24,children:i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","q"]}),i.jsx(d,{dimColor:!0,children:" Quit"})]})}),i.jsxs(d,{children:[i.jsxs(d,{bold:!0,color:"white",children:[" ","?"]}),i.jsx(d,{dimColor:!0,children:" Toggle help"})]})]})]})]}),Ce=i.jsx(rn,{autoExitSeconds:r>0?r:3,onCancel:()=>{Y(!1)},visible:B}),$e=F&&o?i.jsx(ca,{activeIndex:D,focused:c.focusedPanel==="dock",store:o}):null;if(c.viewMode==="fullscreen")return i.jsxs(v,{flexDirection:"column",height:p,width:u,children:[i.jsx(v,{flexGrow:1,children:i.jsx(Er,{autoScroll:X,duration:se?.duration??se?.elapsed,focused:!0,interactiveMode:c.interactiveMode,output:Re,scrollRef:R,status:Be,supportsInteractive:!g,taskId:Oe})}),$e,we,Ce,Te]});if(c.viewMode==="split"){const E=u>=Pr,C=i.jsx(Fr,{compact:!0,filterActive:c.filterActive,filterText:c.filterText,focused:c.focusedPanel==="tasks",headerStatus:Me,parallelSlots:t,pinnedTaskIds:c.pinnedTaskIds,rows:le,scrollRef:M,selectedIndex:c.selectedIndex,title:Z}),O=i.jsx(Er,{autoScroll:X,duration:se?.duration??se?.elapsed,focused:c.focusedPanel==="output",interactiveMode:c.interactiveMode,output:Re,scrollRef:R,showFullscreenHint:!0,status:Be,supportsInteractive:!g,taskId:Oe});if(E){const fe=Math.floor(u*.4);return i.jsxs(v,{flexDirection:"column",height:p,width:u,children:[i.jsxs(v,{flexDirection:"row",flexGrow:1,children:[i.jsx(v,{width:fe,children:C}),i.jsx(v,{flexGrow:1,children:O})]}),$e,we,Ce,Te]})}const re=Math.floor(p*.45);return i.jsxs(v,{flexDirection:"column",height:p,width:u,children:[i.jsx(v,{height:re,children:C}),i.jsx(v,{flexGrow:1,children:O}),$e,we,Ce,Te]})}return i.jsxs(v,{flexDirection:"column",height:p,width:u,children:[i.jsx(v,{flexGrow:1,children:i.jsx(Fr,{filterActive:c.filterActive,filterText:c.filterText,focused:c.focusedPanel!=="dock",headerStatus:Me,parallelSlots:t,pinnedTaskIds:c.pinnedTaskIds,rows:le,scrollRef:M,selectedIndex:c.selectedIndex,title:Z})}),$e,we,Ce,Te]})},fa=r=>{const{args:e,autoExit:t=!1,onRetryService:s,outputStyle:o="normal",projectNames:a,serviceDockStore:n,stdinRegistry:l,tasks:h}=r,f=new dt(h),u=typeof e.parallel=="number"?e.parallel:3,p=t===!0?3:typeof t=="number"?t:0;let c,$;const S=new Promise(k=>{$=k});let F;const D=()=>{F&&(clearInterval(F),F=void 0)},j=()=>{if(process.stdin.isTTY&&typeof process.stdin.setRawMode=="function")try{process.stdin.setRawMode(!1)}catch{}process.stdin.pause(),process.stdin.unref()},g=()=>{if(l){for(const k of l.values())k.kill?.();l.clear()}},x=()=>{D(),m(),g(),j(),process.stdout.write("\x1B[?1049l\x1B[?25h"),c?.cleanup(),process.exit(1)},y=()=>{const k=f.getSnapshot(),M=Le(Date.now()-k.startTime),R=k.rows.filter(X=>X.status==="failure").map(X=>X.taskId),B=process.stdout.columns||80;process.stdout.write(`
30
- `);for(const X of k.rows){const{persistent:G,status:ee,taskId:xe}=X,te=ee==="running"||ee==="pending",ce=qe(ee),le=te&&G?"■":ce.icon,z=te&&G?"gray":ce.color;let V="";switch(ee){case"local-cache":case"local-cache-kept-existing":{V=" [local cache]";break}case"remote-cache":{V=" [remote cache]";break}case"skipped":{V=" [skipped]";break}default:{te&&G?V=" [stopped]":te&&(V=" [skipped]");break}}const ie=X.retryAttempts&&X.retryAttempts>0?` [retried ${X.retryAttempts}x]`:"",se=pe(K.createElement(d,null," ",K.createElement(d,{color:z},le),` vis run ${xe}`,V?K.createElement(d,{dimColor:!0},` ${V}`):null,ie?K.createElement(d,{color:"yellow"},ie):null),{columns:B});process.stdout.write(`${se}
31
- `)}process.stdout.write(`
32
- `);const Y=pe(K.createElement(ss,{cached:k.cached,failed:k.failed,failedIds:R,projectNames:a,retriedIds:k.retriedIds.length>0?k.retriedIds:void 0,succeeded:k.succeeded,targets:e.targets,tasks:h,took:M}),{columns:B});if(process.stdout.write(`${Y}
33
- `),o!=="quiet"){const X=[...k.rows.filter(G=>G.status!=="failure"),...k.rows.filter(G=>G.status==="failure")];for(const G of X){if(G.status==="running"||G.status==="pending")continue;const ee=k.outputs.get(G.taskId);if(!ee?.trim())continue;const{color:xe,icon:te}=qe(G.status),ce=pe(K.createElement(d,null,`
34
- `,K.createElement(d,{bold:!0,color:xe},` ${te} vis run ${G.taskId}`)),{columns:B});process.stdout.write(`${ce}
35
-
36
- `);const le=ee.trim().split(`
37
- `).map(z=>` ${z}`).join(`
38
- `);process.stdout.write(`${le}
39
- `)}}};let T;const m=()=>{T&&(clearInterval(T),T=void 0)};return{lifeCycle:{endCommand(){D(),f.markDone(),T||(T=setInterval(()=>{},1e3))},endTasks(k){f.endTasks(k)},printCacheDisabledByTask(k){f.addOutput(k.id,`ⓘ caching disabled by task via disableCache()
40
- `)},printEmptyFingerprintWarning(k,M){f.addOutput(k.id,`ⓘ caching skipped — ${M}
41
- `)},printSelfModifyingSkip(k,M){f.addOutput(k.id,`ⓘ caching skipped — task modified its own input${M.length===1?"":"s"} (${M.join(", ")})
42
- `)},printTaskTerminalOutput(k,M,R){f.getSnapshot().outputs.has(k.id)||f.addOutput(k.id,R)},startCommand(){process.on("SIGINT",x),process.on("SIGTERM",x),T||(T=setInterval(()=>{},1e3)),c=sn(K.createElement(ua,{autoExitSeconds:p,onRetryService:s,parallelSlots:u,projectNames:a,serviceDockStore:n,stdinRegistry:l??new Map,store:f,targets:e.targets,tasks:h}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}),c.waitUntilExit().then(()=>{m(),g(),j(),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),y(),$()}).catch(()=>{m(),g(),j(),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),$()})},startTasks(k){f.startTasks(k),F||(F=setInterval(()=>{f.tick()},100))}},renderIsDone:S,store:f}},ha=r=>r==="quiet"?"quiet":"normal",pa=(r,e)=>typeof r=="string"?ha(r.toLowerCase()):e===!0?"quiet":"normal",ga=(r,e)=>{const t=r.overrides.visOptions;return t?.outputStyle==="normal"||t?.outputStyle==="quiet"?t.outputStyle:e};class ma{#e;#s;#r;#n=[];#t=[];#o=[];#i=new Map;#a;#c;#l;#u=0;constructor(e){this.#e=e.projectNames,this.#s=e.args.targets,this.#r=e.tasks,this.#a=e.logReporter,this.#c=e.outputStyle??"normal",this.#l=e.ciGrouping??"auto"}startCommand(){this.#u=Date.now();const e=process.stdout.columns||80,t=`Running ${Mt(this.#e,this.#s,this.#r)}`,s=pe(K.createElement(jt,{title:t,variant:"info"}),{columns:e});process.stdout.write(s);const o=this.#r[0],a=o?.overrides?Object.entries(o.overrides).filter(([n])=>n!=="command"):[];if(a.length>0){process.stdout.write(`
43
- With additional flags:
44
- `);for(const[n,l]of a)process.stdout.write(`${Lo(" ",n,l)}
45
- `)}process.stdout.write(`
46
- `)}startTasks(e){const t=process.stdout.columns||80;for(const s of e){const o=pe(K.createElement(d,null,K.createElement(d,{dimColor:!0},">"),` ${s.id}`),{columns:t});process.stdout.write(`${o}
47
- `)}}endTasks(e){const t=process.stdout.columns||80;for(const s of e){this.#i.set(s.task.id,s),s.status==="failure"?this.#n.push(s):_e(s.status)&&this.#t.push(s),s.retryAttempts&&s.retryAttempts>0&&this.#o.push(s);const o=Qe(s.status),a=s.startTime&&s.endTime?` (${Le(s.endTime-s.startTime)})`:"",n=_e(s.status)?" [cache]":"",l=s.retryAttempts&&s.retryAttempts>0?` [retried ${s.retryAttempts}x]`:"",h=pe(K.createElement(d,null,o,` ${s.task.id}`,n?K.createElement(d,{color:"cyan"},n):null,l?K.createElement(d,{color:"yellow"},l):null,a?K.createElement(d,{dimColor:!0},a):null),{columns:t});process.stdout.write(`${h}
48
- `)}}#d(e){const t=process.stdout.columns||80,s=pe(K.createElement(d,{dimColor:!0},` ⓘ ${e}`),{columns:t});process.stdout.write(`${s}
49
- `)}printCacheDisabledByTask(e){this.#d(`${e.id}: caching disabled by task via disableCache()`)}printSelfModifyingSkip(e,t){this.#d(`${e.id}: caching skipped — task modified its own input${t.length===1?"":"s"} (${t.join(", ")})`)}printEmptyFingerprintWarning(e,t){this.#d(`${e.id}: caching skipped — ${t}`)}printTaskTerminalOutput(e,t,s){if(ga(e,this.#c)==="quiet"&&(t==="success"||_e(t)))return;const o=t==="failure"?gs(s,{color:!process.env.NO_COLOR,cwd:process.cwd()}):s;if(this.#a){this.#a.printTaskTerminalOutput(e,t,o);return}ea(e.id,t,o,this.#l)}endCommand(){const e=Le(Date.now()-this.#u),t=this.#r.filter(a=>!this.#i.has(a.id)).map(a=>a.id);process.stdout.write(`
50
- `);const s=process.stdout.columns||80,o=pe(K.createElement(ss,{cached:this.#t.length,failed:this.#n.length,failedIds:this.#n.map(a=>a.task.id),projectNames:this.#e,retriedIds:this.#o.length>0?this.#o.map(a=>a.task.id):void 0,skippedIds:t.length>0?t:void 0,succeeded:this.#i.size-this.#n.length-this.#t.length,targets:this.#s,tasks:this.#r,took:e}),{columns:s});process.stdout.write(`${o}
51
- `)}}const wa=async r=>{if(process.env.VIS_NO_SHELL_HISTORY)return;if(Zn()==="win32"){try{await xa(r)}catch{}return}const e=process.env.SHELL;if(!e)return;const t=Ds(e);try{if(t==="zsh"){await ya(r);return}if(t==="bash"){await va(r);return}t==="fish"&&await ka(r)}catch{}},Dt=r=>r.replaceAll(/[\u0000-\u001F\u007F]/gu," ").trimEnd(),ya=async r=>{const e=process.env.HISTFILE??ae(process.env.ZDOTDIR??Et(),".zsh_history"),t=`: ${Math.floor(Date.now()/1e3)}:0;${Dt(r)}
52
- `;await gt(e,t)},va=async r=>{const e=process.env.HISTFILE??ae(Et(),".bash_history");await gt(e,`${Dt(r)}
53
- `)},xa=async r=>{const e=process.env.VIS_PSREADLINE_HISTORY,t=process.env.APPDATA;if(e===void 0&&(t===void 0||t===""))return;const s=e??ae(t,"Microsoft","Windows","PowerShell","PSReadLine","ConsoleHost_history.txt");await Qn(qr(s),{recursive:!0}),await gt(s,`${Dt(r)}\r
54
- `)},ka=async r=>{const e=ae(Et(),".local","share","fish","fish_history"),t=`- cmd: ${r.replaceAll("\\","\\\\").replaceAll(`
55
- `,String.raw`\n`).replaceAll("\r",String.raw`\r`)}
56
- when: ${Math.floor(Date.now()/1e3)}
57
- `;await gt(e,t)},$a=r=>{const{killGracePeriodMs:e=5e3,onTimeout:t,sendSignal:s,timeoutMs:o}=r;if(o<=0)return{cancel:()=>{}};const a=Math.max(e,0);let n;const l=setTimeout(()=>{t?.(),s("SIGTERM"),a>0&&(n=setTimeout(()=>{s("SIGKILL")},a))},o);return{cancel:()=>{clearTimeout(l),n&&clearTimeout(n)}}},ja=(r,e)=>{const t=e?.trim();if(!t)return{filter:void 0,tasks:[...r]};const s=t.toLowerCase();return{filter:t,tasks:r.filter(o=>o.target.project.toLowerCase().includes(s))}},ba=[""," Watch keybinds:"," r, Enter rerun"," a rerun all (clear filter)"," p filter by project name"," q, Ctrl+C quit"," h, ? show this help",""].join(`
58
- `),Sa=r=>{r.write(`${ba}
59
- `)},Ta=async(r,e)=>{e.write("filter projects (empty to cancel) > ");const t=r,s=t.isRaw===!0;if(s)try{t.setRawMode?.(!1)}catch{}return await new Promise(o=>{let a="";const n=l=>{a+=typeof l=="string"?l:l.toString("utf8");const h=a.indexOf(`
60
- `);if(h===-1)return;const f=a.slice(0,h).replace(/\r$/,"").trim();if(r.off("data",n),s)try{t.setRawMode?.(!0)}catch{}o(f.length>0?f:void 0)};r.on("data",n)})},Ca=r=>{const{handlers:e}=r,t=r.input??process.stdin,s=r.output??process.stdout,o=r.promptFilter??Ta;if(!t||t.isTTY===!1)return{close:()=>{}};Cn(t);const a=t.isRaw===!0;try{t.setRawMode?.(!0)}catch{return{close:()=>{}}}typeof t.resume=="function"&&t.resume();let n=!1;const l=async u=>{if(u.ctrl===!0&&u.name==="c"){await e.onQuit();return}if(!n)switch(u.name){case"?":case"h":{await e.onHelp();break}case"a":{await e.onClearFilter();break}case"p":{n=!0;try{const p=await o(t,s);p===void 0?s.write(`filter cancelled.
61
- `):await e.onFilter(p)}finally{n=!1}break}case"q":{await e.onQuit();break}case"r":{await e.onRerun();break}case"return":{await e.onRerun();break}}},h=(u,p)=>{l(p).catch(c=>{s.write(`[vis watch] keybind handler failed: ${c.message}
62
- `)})},f=t;return f.on("keypress",h),{close:()=>{if(f.off("keypress",h),!a)try{t.setRawMode?.(!1)}catch{}const u=t;if(typeof u.pause=="function")try{u.pause()}catch{}}}},Ia=r=>{const e=r.overrides.visOptions;return e&&typeof e=="object"?e:void 0},Ea=async r=>{const{initialTasks:e,probe:t,registeredEntries:s,taskGraph:o,visVersion:a}=r,n=new Map,l=new Map,h=new Map;for(const m of s)if(Rn(m.pid)){if(m.visVersion!==a){l.set(m.id,m);continue}n.set(m.id,m)}if(t){const m=[...n.values()],k=await Promise.all(m.map(async M=>{try{return[M.id,await t(M)]}catch{return[M.id,!1]}}));for(const[M,R]of k)if(!R){const B=n.get(M);n.delete(M),B&&h.set(M,B)}}const f=new Set(e.map(m=>m.id)),u=new Set,p=[],c=[],$=new Set;for(const m of Object.values(o.dependencies))for(const k of m)$.add(k);for(const[m,k]of Object.entries(o.tasks)){if(!Ia(k)?.service)continue;if(n.has(m)){u.add(m),c.push(n.get(m));continue}if(f.has(m)||!$.has(m))continue;const M=l.get(m),R=h.get(m);let B;M?B=`Service ${m} is registered with vis ${M.visVersion}, but this invocation is vis ${a}. Restart with \`vis service restart ${m}\` to pick up the new version.`:R?B=`Service ${m} is registered (PID ${String(R.pid)}) but failed its readiness probe — the wrapper process is alive but the underlying server is not responding. Run \`vis service restart ${m}\` to recover.`:B=`Target depends on the service ${m}, which is not running. Run \`vis service start ${m}\` first, or invoke \`${m}\` directly.`,p.push({message:B,targetId:m})}if(u.size===0)return{diagnostics:p,initialTasks:e,satisfiedServices:c,serviceDependentsByServiceId:new Map,serviceEnvByTaskId:new Map,taskGraph:o};const S=new Map,F=m=>{const k=new Set,M=[...o.dependencies[m]??[]],R=new Set;for(;M.length>0;){const B=M.pop();if(!R.has(B)){R.add(B),u.has(B)&&k.add(B);for(const Y of o.dependencies[B]??[])R.has(Y)||M.push(Y)}}return[...k].sort()},D=new Map;for(const m of Object.keys(o.dependencies)){if(u.has(m))continue;const k=F(m);if(k.length===0)continue;const M={};for(const R of k){const B=n.get(R);if(!B)continue;Object.assign(M,B.env);const Y=D.get(R);Y?Y.push(m):D.set(R,[m])}Object.keys(M).length>0&&S.set(m,M)}for(const m of D.values())m.sort();const j={};for(const[m,k]of Object.entries(o.tasks))u.has(m)||(j[m]=k);const g={};for(const[m,k]of Object.entries(o.dependencies))u.has(m)||(g[m]=k.filter(M=>!u.has(M)));const x=new Map;for(const m of Object.keys(j))x.set(m,0);for(const m of Object.values(g))for(const k of m)x.has(k)&&x.set(k,(x.get(k)??0)+1);const y=[];for(const m of o.roots)!u.has(m)&&j[m]&&y.push(m);for(const[m,k]of x)k===0&&!y.includes(m)&&j[m]&&y.push(m);const T=e.filter(m=>!u.has(m.id));return{diagnostics:p,initialTasks:T,satisfiedServices:c,serviceDependentsByServiceId:D,serviceEnvByTaskId:S,taskGraph:{dependencies:g,roots:y,tasks:j}}},st="[[VIS_BOOT]]",Ra=250,Ma=1e3,Dr=3,Fa=r=>{try{return process.kill(r,0),!0}catch{return!1}},Lr=r=>{try{const e=Ge(r,"utf8").trim(),t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:null}catch{return null}};class Oa{#e;#s;#r;#n;#t=new Map;#o=new Map;#i=new Map;#a=new Map;#c=new Set;constructor(e){this.#e=e.indexToId,this.#s=new Map(e.services),this.#r=e.sink,this.#n=e.workspaceRoot}onProcessEvent=e=>{if(e.kind!=="stdout"&&e.kind!=="stderr")return;const t=this.#e.get(e.index);t===void 0||e.text===void 0||this.onTaskOutput(t,e.text)};onTaskOutput(e,t){if(!this.#s.has(e))return;const s=((this.#t.get(e)??"")+t).split(`
63
- `),o=s.pop()??"";this.#t.set(e,o);for(const a of s)this.#l(e,a)}notifyRegistryStarting(e){this.#r.starting(e)}notifyRegistryStarted(e,t){this.#r.started(e,t)}onRegistryTaskStarted(e){this.#s.get(e)?.mode==="registry"&&this.notifyRegistryStarting(e)}async onRegistryTaskClosed(e,t,s){if(this.#s.get(e)?.mode!=="registry")return;if(s||t!==0){this.notifyRegistryFailed(e,"exit-code",{exitCode:t,killed:s});return}const o=await Mn(this.#n,e);if(!o){this.notifyRegistryFailed(e,"missing-registry-entry");return}const{config:a}=o,n=a.readiness?.tcp?.port??a.port??0,l=a.readiness?.tcp?.host??"127.0.0.1";this.notifyRegistryReady(e,{host:l,logFile:o.logFile,pid:o.pid,port:n})}notifyRegistryReady(e,t){this.#r.ready(e,{host:t.host,port:t.port}),this.#h(e,t.logFile),t.pid!==null&&this.#p(e,t.pid)}notifyRegistryFailed(e,t,s){this.#r.failed(e,t,s)}async retry(e){const t=this.#s.get(e);if(t){if(this.#f(e),this.#t.delete(e),this.#o.delete(e),this.#r.starting(e),t.mode==="registry"){await this.#v(e,t.registry);return}t.mode==="ephemeral"&&this.#y(e,t.ephemeral)}}async dispose(){for(const e of[...this.#i.keys(),...this.#a.keys()])this.#f(e);this.#c.size>0&&(await Promise.race([Promise.all(this.#c),new Promise(e=>{setTimeout(e,2e3)})]),this.#c.clear()),this.#t.clear(),this.#o.clear()}#l(e,t){if(t.startsWith(st)){this.#u(e,t.slice(st.length));return}const s=this.#o.get(e)??[];s.push(t),s.length>Dr&&s.shift(),this.#o.set(e,s),this.#r.log(e,`${t}
64
- `)}#u(e,t){let s;try{s=JSON.parse(t)}catch{this.#r.log(e,`${st+t}
65
- `);return}switch(s.event){case"failed":{const o=typeof s.reason=="string"?s.reason:"unknown",a={};for(const[n,l]of Object.entries(s))n!=="event"&&n!=="id"&&n!=="reason"&&(a[n]=l);this.#r.failed(e,o,a);break}case"ready":{const o=typeof s.host=="string"?s.host:"127.0.0.1",a=typeof s.port=="number"?s.port:0;this.#r.ready(e,{host:o,port:a}),this.#d(e);break}case"started":{const o=typeof s.pid=="number"?s.pid:null;this.#r.started(e,o);break}default:this.#r.log(e,`${st+t}
66
- `)}}#d(e){const t=this.#s.get(e);if(t?.ephemeral===void 0)return;this.#h(e,t.ephemeral.logFile);const s=Lr(t.ephemeral.pidFile);s!==null&&this.#p(e,s)}#h(e,t){if(this.#i.has(e)||!De(t))return;const s=jn(t,"r"),o=(()=>{try{return ur(t).size}catch{return 0}})(),a={fd:s,logFile:t,pollTimer:setInterval(()=>{this.#m(e)},Ra),position:o};this.#i.set(e,a)}#m(e){const t=this.#i.get(e);if(t)try{const s=ur(t.logFile);if(s.size<=t.position)return;const o=Buffer.alloc(s.size-t.position),a=bn(t.fd,o,0,o.length,t.position);if(a>0){t.position+=a;const n=o.subarray(0,a).toString("utf8");for(const l of n.split(`
67
- `))l.length!==0&&this.#w(e,l);this.#r.log(e,n)}}catch{}}#w(e,t){const s=this.#o.get(e)??[];for(s.push(t);s.length>Dr;)s.shift();this.#o.set(e,s)}#p(e,t){if(this.#a.has(e))return;const s={pid:t,timer:setInterval(()=>{if(!Fa(t)){const o=[...this.#o.get(e)??[]];this.#f(e),this.#r.crashed(e,o)}},Ma)};this.#a.set(e,s)}#f(e){const t=this.#i.get(e);if(t){clearInterval(t.pollTimer);try{Sn(t.fd)}catch{}this.#i.delete(e)}const s=this.#a.get(e);s&&(clearInterval(s.timer),this.#a.delete(e))}#y(e,t){if(t===void 0)return;const s=Lr(t.pidFile);if(s!==null)try{process.kill(-s,"SIGTERM")}catch{}const o=Un("node",[t.scriptPath,t.configFile],{cwd:t.cwd,stdio:["ignore","pipe","pipe"]});o.stdout.on("data",n=>{this.#g(e,n)}),o.stderr.on("data",n=>{this.#g(e,n)}),o.on("error",n=>{this.#r.failed(e,"respawn-error",{message:n.message})});const a=new Promise(n=>{const l=()=>{this.#c.delete(a),n()};o.once("exit",l),o.once("error",l)});this.#c.add(a)}#g(e,t){const s=((this.#t.get(e)??"")+t.toString("utf8")).split(`
68
- `),o=s.pop()??"";this.#t.set(e,o);for(const a of s)this.#l(e,a)}async#v(e,t){if(t!==void 0){try{await Fn({id:e,workspaceRoot:this.#n})}catch{}try{const s=await On({command:t.command,config:t.config,cwd:t.cwd,env:t.env,id:e,workspaceRoot:this.#n}),o=t.config.readiness?.tcp?.port??t.config.port??0,a=t.config.readiness?.tcp?.host??"127.0.0.1";this.#r.started(e,s.entry.pid),this.notifyRegistryReady(e,{host:a,logFile:s.entry.logFile,pid:s.entry.pid,port:o})}catch(s){const o=s instanceof Error?s.message:String(s);this.#r.failed(e,"retry-failed",{message:o})}}}}const Aa=r=>{const e=r.overrides.visOptions;return e&&typeof e=="object"?e:void 0},xs=(r,e,t)=>{const s=[],o=[];for(const a of e){const n=t.tasks[a];if(!n){o.push({id:a,reason:"task not in graph"});continue}const l=n.overrides.command;if(!l){o.push({id:a,reason:"no command resolved"});continue}const h=Aa(n);if(!h?.service){o.push({id:a,reason:"no service config"});continue}const f=ht(r,n.projectRoot,!!h.runFromWorkspaceRoot),{envFile:u}=h,p=u===void 0||u===!1?{}:Tt(f,u),c=h.service.env??{};s.push({command:l,config:h.service,cwd:f,env:{...p,...c},id:a})}return{services:s,skipped:o}},Pa=(r,e)=>{const t=new Set(r),s=new Map;for(const n of r){const l=(e.dependencies[n]??[]).filter(h=>t.has(h));s.set(n,new Set(l))}const o=[],a=new Set;for(;s.size>0;){const n=[];for(const[l,h]of s){for(const f of h)a.has(f)&&h.delete(f);h.size===0&&n.push(l)}n.length===0&&n.push(...s.keys());for(const l of n)a.add(l),s.delete(l);n.sort(),o.push({ids:n})}return o},Da=(r,e)=>{const t=[];for(const s of Pa(r,e))t.push(...s.ids);return t},La=String.raw`import { spawn } from "node:child_process";
69
- import { closeSync, openSync, readFileSync, readSync, statSync, writeFileSync } from "node:fs";
70
- import { createConnection } from "node:net";
71
-
72
- const cfgPath = process.argv[2];
73
-
74
- if (!cfgPath) {
75
- console.error("[vis-service-bootstrap] missing config path");
76
- process.exit(2);
77
- }
78
-
79
- const cfg = JSON.parse(readFileSync(cfgPath, "utf8"));
80
-
81
- // Structured marker for service-event-bridge.ts to consume. Plain
82
- // process.stdout.write keeps the line atomic and on the same stream
83
- // as the tailed child log, so the parser sees one stream.
84
- const emit = (event) => {
85
- process.stdout.write("[[VIS_BOOT]]" + JSON.stringify({ ...event, id: cfg.id }) + "\n");
86
- };
87
-
88
- // Spawn the child with its stdio bound to a real file descriptor on
89
- // disk — NOT inherited from the bootstrap. If the child inherited
90
- // our stdio, it would inherit vis run's task pipes, and vis run would
91
- // block waiting for those pipes to close even after this bootstrap
92
- // exits. The logfile gives the grandchild a stable target it can keep
93
- // writing to long after this bootstrap is gone.
94
- const childLogFd = openSync(cfg.logFile, "a");
95
-
96
- const child = spawn(cfg.command, {
97
- cwd: cfg.cwd,
98
- detached: true,
99
- env: { ...process.env, ...cfg.env },
100
- shell: true,
101
- stdio: ["ignore", childLogFd, childLogFd],
102
- });
103
-
104
- // Close the bootstrap's copy of the fd; the child kept its own.
105
- closeSync(childLogFd);
106
-
107
- if (child.pid !== undefined) {
108
- try {
109
- writeFileSync(cfg.pidFile, String(child.pid));
110
- } catch (error) {
111
- console.error("[vis] failed to write pid file: " + (error?.message ?? String(error)));
112
- }
113
- }
114
-
115
- emit({ event: "started", pid: child.pid ?? null });
116
-
117
- let exitedEarly = false;
118
-
119
- child.once("exit", (code, signal) => {
120
- exitedEarly = true;
121
- emit({ code, event: "failed", reason: "exited-before-ready", signal });
122
- });
123
-
124
- // Forward new bytes from the logfile to our stdout while we're alive.
125
- // Polling-based tail; preflight is short, ~200ms per cycle is fine.
126
- let tailPos = 0;
127
- const tailFd = openSync(cfg.logFile, "r");
128
-
129
- const flushTail = () => {
130
- try {
131
- const stat = statSync(cfg.logFile);
132
- if (stat.size <= tailPos) return;
133
- const remaining = stat.size - tailPos;
134
- const buf = Buffer.alloc(remaining);
135
- const n = readSync(tailFd, buf, 0, remaining, tailPos);
136
- if (n > 0) {
137
- process.stdout.write(buf.subarray(0, n));
138
- tailPos += n;
139
- }
140
- } catch {}
141
- };
142
-
143
- const probeOnce = () => new Promise((resolve) => {
144
- const socket = createConnection({ host: cfg.host || "127.0.0.1", port: cfg.port });
145
- let settled = false;
146
- const finish = (ok) => {
147
- if (settled) return;
148
- settled = true;
149
- try { socket.destroy(); } catch {}
150
- resolve(ok);
151
- };
152
- socket.once("connect", () => finish(true));
153
- socket.once("error", () => finish(false));
154
- socket.setTimeout(1000, () => finish(false));
155
- });
156
-
157
- const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
158
-
159
- (async () => {
160
- const deadline = Date.now() + (cfg.timeoutMs ?? 30000);
161
- while (Date.now() < deadline) {
162
- flushTail();
163
- if (exitedEarly) {
164
- try { closeSync(tailFd); } catch {}
165
- process.exit(1);
166
- }
167
- if (await probeOnce()) {
168
- flushTail();
169
- emit({ event: "ready", host: cfg.host || "127.0.0.1", port: cfg.port });
170
- try { closeSync(tailFd); } catch {}
171
- child.unref();
172
- process.exit(0);
173
- }
174
- await sleep(200);
175
- }
176
- flushTail();
177
- emit({ event: "failed", reason: "timeout", timeoutMs: cfg.timeoutMs ?? 30000 });
178
- try { closeSync(tailFd); } catch {}
179
- try { process.kill(-child.pid, "SIGTERM"); } catch {}
180
- process.exit(1);
181
- })();
182
- `,Ba=()=>{const r=Tn(ae(eo(),"vis-services-")),e=ae(r,"bootstrap.mjs");return Ur(e,La),{runDir:r,scriptPath:e}},ks=(r,e,t)=>{const s=t.replaceAll(/[^\w-]/g,"_");return{configFile:ae(r,`${s}.json`),logFile:ae(r,`${s}.log`),pidFile:ae(r,`${s}.pid`),scriptPath:e}},Na=r=>{const{paths:e,service:t}=r,s=t.config.readiness?.tcp?.port??t.config.port;if(typeof s!="number")throw new TypeError(`Service ${t.id} has no TCP readiness port — declare \`service.port\` or \`service.readiness.tcp.port\`.`);const o={...t.env,PATH:Ns(t.cwd,t.env)};return{command:t.command,cwd:t.cwd,env:o,host:t.config.readiness?.tcp?.host??"127.0.0.1",id:t.id,logFile:e.logFile,pidFile:e.pidFile,port:s,timeoutMs:t.config.readiness?.tcp?.timeoutMs??3e4}},_a=r=>`node ${JSON.stringify(r.scriptPath)} ${JSON.stringify(r.configFile)}`,Ga=r=>{const{id:e,visBin:t,workspaceRoot:s}=r;return`node ${JSON.stringify(t)} service start ${JSON.stringify(e)} --cwd ${JSON.stringify(s)}`},qa=r=>{const{missingServiceIds:e,mode:t,taskGraph:s,visBin:o,workspaceRoot:a}=r,{services:n,skipped:l}=xs(a,e,s);if(n.length===0)return{chain:[],ephemeralPidFiles:[],runDir:void 0,serviceEnvByTaskId:new Map,skipped:l};const h=Da(n.map(j=>j.id),s),f=new Map(n.map(j=>[j.id,j])),u=[],p=[];if(t==="ephemeral")for(const j of h){const g=f.get(j);g&&p.push({id:j,payload:Na({paths:{logFile:"",pidFile:""},service:g})})}let c;t==="ephemeral"&&(c=Ba());let $;for(const j of h){const g=f.get(j),x=s.tasks[j];if(!g||!x)continue;let y;if(t==="ephemeral"){const T=ks(c.runDir,c.scriptPath,j),m={...p.find(k=>k.id===j).payload,logFile:T.logFile,pidFile:T.pidFile};Ur(T.configFile,JSON.stringify(m)),y=_a(T),u.push(T.pidFile)}else y=Ga({id:j,visBin:o,workspaceRoot:a});if(x.overrides={...x.overrides,command:y},x.cache=!1,s.tasks[j]=x,$!==void 0){const T=s.dependencies[j]??[];T.includes($)||(s.dependencies[j]=[...T,$])}$=j}const S=new Set(h),F=new Map,D=j=>{const g=new Set,x=[...s.dependencies[j]??[]],y=new Set;for(;x.length>0;){const T=x.pop();if(!y.has(T)){y.add(T),S.has(T)&&g.add(T);for(const m of s.dependencies[T]??[])y.has(m)||x.push(m)}}return[...g].sort()};for(const j of Object.keys(s.dependencies)){if(S.has(j))continue;const g=D(j);if(g.length===0)continue;const x={};for(const y of g){const T=f.get(y);T?.config.env&&Object.assign(x,T.config.env)}Object.keys(x).length>0&&F.set(j,x)}return{chain:h,ephemeralPidFiles:u,runDir:c?.runDir,serviceEnvByTaskId:F,skipped:l}},Ua=new Set(["auto","ephemeral","off","persistent"]),Wa=r=>{const{cli:e,config:t,isCi:s,isPersistentTarget:o,isTty:a,target:n}=r;if(e!==void 0&&!Ua.has(e))throw new Error(`--services: expected one of auto|ephemeral|persistent|off, got "${e}"`);const l=e??t??(a&&!s?"auto":"off");return l==="off"?"off":l==="ephemeral"?"ephemeral":l==="persistent"?"registry":o||n==="dev"?"ephemeral":"registry"},$s=r=>r.replace(/^--?/u,""),za=new Set(["0","1","false","no","true","yes"]),Ha=r=>!r.startsWith("-")||/^-(?:\d|\.\d)/u.test(r),Br=(r,e,t,s,o,a)=>{if(s!==void 0)return r.set(e,s),0;const n=o[a+1];return(t?.type??"string")==="boolean"?n!==void 0&&za.has(n.toLowerCase())?(r.set(e,n.toLowerCase()),1):(r.set(e,"true"),0):n!==void 0&&Ha(n)?(r.set(e,n),1):(r.set(e,"true"),0)},Va=(r,e)=>{const t=r.type??"string";if(t==="number"){const s=e.trim(),o=Number(s);return s===""||!Number.isFinite(o)?{error:`--${r.name} expects a number, got "${e}"`}:{value:o}}if(t==="boolean")return["1","true","yes"].includes(e.toLowerCase())?{value:!0}:["0","false","no"].includes(e.toLowerCase())?{value:!1}:{error:`--${r.name} expects a boolean, got "${e}"`};if(t==="enum"){const s=r.choices??[];return s.includes(e)?{value:e}:{error:`--${r.name} must be one of [${s.join(", ")}], got "${e}"`}}return{value:e}},Ya=r=>{const e=[],t=new Set;for(const s of r){const o=s.name||"<unnamed>";(!s.name||!/^[a-zA-Z][\w-]*$/u.test(s.name))&&e.push(`argument name "${o}" is empty or invalid (start with a letter; use letters, digits, '-', '_')`),t.has(s.name)&&e.push(`duplicate argument name "${o}"`),t.add(s.name),s.alias!==void 0&&s.alias.length!==1&&e.push(`argument "${o}" alias "${s.alias}" must be a single character`);const a=s.type??"string";if(a==="enum"&&(s.choices===void 0||s.choices.length===0)&&e.push(`argument "${o}" has type "enum" but declares no choices`),s.default!==void 0){const n=typeof s.default;a==="number"&&n==="number"||a==="boolean"&&n==="boolean"||(a==="string"||a==="enum")&&n==="string"?a==="enum"&&s.choices&&!s.choices.includes(s.default)&&e.push(`argument "${o}" default "${String(s.default)}" is not one of its choices`):e.push(`argument "${o}" default ${JSON.stringify(s.default)} does not match type "${a}"`)}}return e},Ja=(r,e)=>{const t=new Map,s=new Map;for(const f of r)t.set(f.name,f),f.alias&&s.set(f.alias,f);const o=new Map,a=[];for(let f=0;f<e.length;f+=1){const u=e[f];if(u==="--"){a.push(...e.slice(f+1));break}if(u.startsWith("--no-")){o.set($s(u.slice(5)),"false");continue}const p=/^--([^=]+)(?:=(.*))?$/su.exec(u);if(p){const S=p[1];f+=Br(o,S,t.get(S),p[2],e,f);continue}const c=/^-([^=-])(?:=(.*))?$/su.exec(u),$=c?.[1];if(c&&$!==void 0){const S=s.get($);f+=Br(o,S?.name??$,S,c[2],e,f);continue}a.push(u)}const n={},l=[];let h=0;for(const f of r){let u=o.get(f.name);if(u===void 0&&f.positional&&h<a.length&&(u=a[h],h+=1),u===void 0){f.default!==void 0?n[f.name]=f.default:f.required&&l.push(`missing required argument --${f.name}`);continue}const{error:p,value:c}=Va(f,u);p?l.push(p):c!==void 0&&(n[f.name]=c)}return{errors:l,values:n}},Ka=r=>`VIS_ARG_${$s(r).replaceAll(/[^a-zA-Z0-9]+/gu,"_").toUpperCase()}`,Xa=r=>{const e={};for(const[t,s]of Object.entries(r))e[Ka(t)]=String(s);return e},$t=(r,e,t)=>{const s=[`Usage: vis run ${r} [-- <args>]`];if(e&&s.push("",e),t.length===0)return s.join(`
183
- `);s.push("","Arguments:");const o=t.map(n=>{const l=n.positional?`<${n.name}>`:`--${n.name}`,h=n.alias?`, -${n.alias}`:"";return{left:`${l}${h}`,right:n}}),a=Math.max(...o.map(n=>n.left.length));for(const{left:n,right:l}of o){const h=[],f=l.type??"string";h.push(f==="enum"?`enum(${(l.choices??[]).join("|")})`:f),l.required&&h.push("required"),l.default!==void 0&&h.push(`default: ${String(l.default)}`);const u=`${l.description??""}${l.description?" ":""}[${h.join(", ")}]`;s.push(` ${n.padEnd(a)} ${u}`)}return s.join(`
184
- `)},Qa=(r,e,t,s)=>{if(!t||t.length===0)return{env:{},kind:"ok"};const o=Ya(t);if(o.length>0)return{errors:o.map(n=>`invalid \`arguments\` schema for "${r}": ${n}`),help:$t(r,e,t),kind:"invalid"};if(s.includes("--help")||s.includes("-h"))return{kind:"help",text:$t(r,e,t)};const a=Ja(t,s);return a.errors.length>0?{errors:a.errors,help:$t(r,e,t),kind:"invalid"}:{env:Xa(a.values),kind:"ok"}},Lt="VIS_AFFECTED_FILES",Za=2e3,Nr=async(r,e,t,s,o,a)=>{const n=r.map(y=>{const T=y.overrides.command;if(!T)return;const m=y.overrides.visOptions,k=ht(e,y.projectRoot,!!m?.runFromWorkspaceRoot),M=m?.envFile?Tt(k,m.envFile):{},R=t&&(m?.affectedFiles==="env"||m?.affectedFiles==="both")?{[Lt]:t.join(`
185
- `)}:{},B=a?.get(y.id)??{},Y=xo({interactive:!!o,taskPty:y.pty,workspacePty:m?.pty});return{command:T,cwd:k,env:{INIT_CWD:s,...M,...B,...R,...y.overrides[Nt]},name:y.id,...Y?{ptySize:{cols:process.stdout.columns??80,rows:process.stdout.rows??24},stdin:"pty"}:{}}}).filter(y=>y!==void 0);if(n.length===0)return;if(!o){await ot(n,{killOthers:["failure"],onEvent:()=>{}});return}const{abortSignal:l,lifeCycle:h,stdinRegistry:f,store:u}=o,p=n.map(y=>r.find(T=>T.id===y.name)).filter(Boolean),c=y=>n[y]?.stdin==="pty",$=new Map,S=y=>{if(!c(y))return;let T=$.get(y);return T||(T=new St(ft),$.set(y,T)),T};u.unmarkDone(),h.startTasks?.(p);const F=new Map,D=new Map;let j;const g=()=>{for(const y of D.values())try{y("SIGTERM")}catch{}j||(j=setTimeout(()=>{for(const y of D.values())try{y("SIGKILL")}catch{}D.clear()},2e3),j.unref?.())};let x;l&&(x=()=>{g()},l.then(()=>{x?.()}).catch(()=>{x?.()}));try{await ot(n,{killOthers:["failure"],onEvent:y=>{const T=p[y.index];if(T)switch(y.kind){case"close":{const m=F.get(T.id)??Date.now(),k=y.killed||y.exitCode===0?"success":"failure";h.endTasks?.([{code:y.exitCode??0,endTime:Date.now(),startTime:m,status:k,task:T,terminalOutput:u.getSnapshot().outputs.get(T.id)??""}]),D.delete(y.index),f?.delete(T.id);break}case"error":{if(y.message){const m=S(y.index);m?(m.write(`${y.message}
186
- `),u.setOutput(T.id,m.toString())):u.addOutput(T.id,`${y.message}
187
- `)}break}case"started":{F.set(T.id,Date.now()),y.kill&&D.set(y.index,y.kill),y.write&&f&&f.set(T.id,{kill:y.kill,resize:y.resize,write:y.write});break}case"stderr":case"stdout":{if(y.text){const m=S(y.index);m?(m.write(y.text),u.setOutput(T.id,m.toString())):u.addOutput(T.id,`${y.text}
188
- `)}break}}}})}finally{j&&(clearTimeout(j),j=void 0),u.markDone()}},_r=r=>{try{return process.kill(-r,0),!0}catch{try{return process.kill(r,0),!0}catch{return!1}}},ec=r=>{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,r)},tc=r=>{const{extraPids:e=[],pidFiles:t,runDir:s}=r,o=[],a=n=>{try{process.kill(-n,"SIGTERM")}catch{try{process.kill(n,"SIGTERM")}catch{}}};for(const n of t){let l;try{const h=Ls(n),f=Number.parseInt(h.trim(),10);l=Number.isFinite(f)&&f>0?f:void 0}catch{continue}l!==void 0&&(o.push(l),a(l))}for(const n of e)!Number.isFinite(n)||n<=0||(o.push(n),a(n));if(o.length>0){const n=Date.now()+1500;for(;Date.now()<n;){let l=!0;for(const h of o)if(_r(h)){l=!1;break}if(l)break;ec(100)}for(const l of o)if(_r(l))try{process.kill(-l,"SIGKILL")}catch{try{process.kill(l,"SIGKILL")}catch{}}}s&&Bs(s)},ft=256*1024;class rc{#e;#s="";#r=!1;constructor(e){this.#e=e}append(e){this.#s+=e,this.#s.length>this.#e&&(this.#s=this.#s.slice(-this.#e),this.#r=!0)}toString(){return this.#r?`[...output truncated, showing last ${Math.round(this.#e/1024)}KB...]
189
- ${this.#s}`:this.#s}}const js=r=>{const e=r.overrides.visOptions;if(e&&typeof e=="object")return e},sc=r=>`'${r.replaceAll("'",String.raw`'\''`)}'`,Bt=r=>process.platform==="win32"?r.length>0&&!/[\s"&|<>^()%!]/.test(r)?r:`"${r.replaceAll('"','""')}"`:sc(r),nc=(r,e,t)=>{if(!e||e.length===0||t===!1||t===void 0)return r;if(t==="args"||t==="both"){const s=e.map(o=>Bt(o)).join(" ");return`${r} ${s}`}return r},bs="visForwardedArgs",Nt="visTaskArgEnv",oc=(r,e)=>{const t=e.overrides[bs];if(!Array.isArray(t)||t.length===0)return r;const s=t.map(o=>Bt(o)).join(" ");return`${r} ${s}`},ic=async(r,e,t)=>{if(!e)return t();const s=r.get(e)??Promise.resolve();let o;const a=new Promise(l=>{o=l}),n=s.then(()=>a);r.set(e,n),await s;try{return await t()}finally{o(),r.get(e)===n&&r.delete(e)}},ac=r=>{let e=Math.max(0,Math.floor(r));return{claim(t){const s=Math.max(0,Math.min(t,e));return e-=s,s},get remaining(){return e}}},cc=(r,e,t)=>{const s=`${e}\0${typeof t=="string"?t:String(t)}`,o=r.get(s);if(o)return o;const a=Tt(e,t);return r.set(s,a),a},Gr=r=>{const e=new Map;return async(t,s)=>{const{affectedFiles:o,currentOs:a,hooks:n,initCwd:l,lifeCycle:h,mutexPool:f,onOutput:u,onOutputReplace:p,retryBudget:c,serviceEnvByTaskId:$,serviceEventBridge:S,stdinRegistry:F,strictEnv:D,workspaceRoot:j}=r,g=js(t),x=ht(j,s.cwd??t.projectRoot,g?.runFromWorkspaceRoot===!0),y=t.overrides.command;if(!y)return{code:0,terminalOutput:`No command configured for ${t.target.project}:${t.target.target}`};const T=oc(y,t),m=nc(T,o,g?.affectedFiles),k=vn(g,a),M=g?.shellArgs,R=M&&M.length>0?M.join(" "):"-c",B=k?`${k} ${R} ${Bt(m)}`:m,Y=g?.envFile?cc(e,x,g.envFile):void 0,X={};o&&o.length>0&&(g?.affectedFiles==="env"||g?.affectedFiles==="both")&&(X[Lt]=o.join(`
190
- `));const G=$?.get(t.id),ee={INIT_CWD:l,...Y,...G,...s.env,...X,...t.overrides[Nt]};if(g?.strictEnv??D??!1){const A=To({command:m,processEnv:process.env,taskEnv:ee,taskId:t.id});if(A){const de=Co(A);return h?.onTaskStderr?.(t,de),{code:1,terminalOutput:de}}}const xe=g?.pty===!0,te=!!F,ce=t.pty===!0?!0:t.pty===!1?!1:te||xe;ce&&(t.cache=!1);const le=ce?void 0:new rc(ft),z=ce?new St(ft):void 0;let V;const ie=A=>{if(A.kind==="started"&&(V=A.kill,A.write&&F&&F.set(t.id,{kill:A.kill,resize:A.resize,write:A.write}),S?.onRegistryTaskStarted(t.id)),(A.kind==="stdout"||A.kind==="stderr")&&A.text!==void 0)if(A.kind==="stdout"?h?.onTaskStdout?.(t,A.text):h?.onTaskStderr?.(t,A.text),z)z.write(A.text),te&&p?.(t.id,z.toString()),S&&S.onTaskOutput(t.id,A.text);else{const de=`${A.text}
191
- `;le.append(de),u?.(t.id,de)}A.kind==="close"&&(F&&F.delete(t.id),S&&S.onRegistryTaskClosed(t.id,A.exitCode??0,!!A.killed).catch(()=>{}))},se=async()=>{const A=g?.retryCount??0,de=g?.retryDelay,Re=c?c.claim(A):A,Oe=typeof g?.timeout=="number"&&g.timeout>0?g.timeout:0,Be=typeof g?.killGracePeriodMs=="number"&&g.killGracePeriodMs>=0?g.killGracePeriodMs:5e3;let Ae=!1,Z=0;const Me=$a({killGracePeriodMs:Be,onTimeout:()=>{Ae=!0},sendSignal:we=>{V?.(we)},timeoutMs:Oe});let Se;try{Se=await ot([{command:B,cwd:x,env:ee,name:t.id,...ce?{ptySize:{cols:process.stdout.columns??80,rows:process.stdout.rows??24},stdin:"pty"}:{}}],{killOthers:["failure"],onEvent:ie,...Re>0?{restart:{delay:de??"exponential",onRetry:async(we,Te,Ce)=>{Z=we,n&&await n.callHook("task:retry",t,we,Ce)},tries:Re}}:{}})}finally{Me.cancel()}const ke=Se.closeEvents[0],ge=z?z.toString():le.toString();return Ae?{code:124,retryAttempts:Z,terminalOutput:`${ge}
192
- [timeout] Task "${t.id}" exceeded ${Oe}ms budget.
193
- `}:{code:ke?.exitCode??1,retryAttempts:Z,terminalOutput:ge}};return f?ic(f,g?.mutex,se):se()}},lc=r=>{if(!r||r.trim().length===0)return;const e=Number.parseFloat(r);return!Number.isFinite(e)||e<=0?{invalid:r}:{value:Math.floor(e)}},dc=async(r,e)=>{const t=await Vs(r,{dataDirectory:it(r)});if(!t){e.warn(`No previous run recorded yet. Run a task at least once to populate ${Ys(r,{dataDirectory:it(r)})}.`);return}const s=(t.duration/1e3).toFixed(2);if(e.info(""),e.info(`Last run — ${t.startTime} (${s}s)`),e.info(""),e.info(` Total: ${String(t.stats.total)}`),e.info(` Succeeded: ${String(t.stats.succeeded)}`),e.info(` Cached: ${String(t.stats.cached)}`),e.info(` Failed: ${String(t.stats.failed)}`),e.info(` Skipped: ${String(t.stats.skipped)}`),e.info(""),t.stats.failed>0){const a=t.tasks.filter(n=>n.exitCode!==void 0&&n.exitCode!==0);e.info("Failed tasks:");for(const n of a){const l=n.duration??0;e.info(` × ${n.taskId} (exit ${String(n.exitCode??-1)}, ${l}ms)`)}e.info("")}const o=[...t.tasks].filter(a=>typeof a.duration=="number").sort((a,n)=>(n.duration??0)-(a.duration??0)).slice(0,5);if(o.length>0){e.info("Slowest tasks:");for(const a of o)e.info(` ${a.taskId.padEnd(40)} ${String(a.duration??0).padStart(6)}ms [${a.cacheStatus}]`);e.info("")}},uc=r=>{if(!(r===void 0||r==="")){if(r!=="read"&&r!=="write"&&r!=="readwrite")throw new Error(`--cache-mode must be one of: read, write, readwrite (received "${r}")`);return r}},fc=r=>{if(!(r===void 0||r==="")){if(r!=="http"&&r!=="reapi")throw new Error(`--cache-backend must be one of: http, reapi (received "${r}")`);return r}},hc=r=>{if(!(r===void 0||r==="")){if(r!=="declared"&&r!=="trace")throw new Error(`--hash-mode must be one of: declared, trace (received "${r}")`);return r}},Rc=async({argument:r,logger:e,options:t,runtime:s,visConfig:o,workspaceRoot:a})=>{if(!a)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const n=a;if(nn(n),t.lastDetails===!0){await dc(n,e);return}const l=process.cwd(),h=await on(n),{config:f,packageJsons:u,projectOptions:p,workspace:c}=an(n,o,h),$=cn(n,c,u);let S=r[0];if(!S){const w=vr(c);if(process.stdout.isTTY&&process.stdin.isTTY){const b=await Oo(w);if(!b){e.info("No target selected.");return}S=b,await wa(`vis run ${b}`)}else{e.info("Available targets:"),e.info(""),e.info(Fo(w)),e.info(""),e.info("Usage: vis run <target>");return}}if(f.constraints&&!t.skipConstraints){const w=_s($,f.constraints);if(w.length>0){for(const b of w)e.error(`[${b.rule}] ${b.message}`);throw new Error(`${w.length} project constraint violation(s) found. Use --skip-constraints to bypass.`)}}if(t.affected){const w=[S];t.parallel!==void 0&&w.push(`--parallel=${String(t.parallel)}`),t.cache||w.push("--no-cache"),t.query&&w.push(`--query=${String(t.query)}`),t.reverse&&w.push("--reverse"),typeof t.runnerTags=="string"&&t.runnerTags!==""&&w.push(`--runner-tags=${t.runnerTags}`),await s.runCommand("affected",{argv:w});return}const F=await Gn(S,c,process.cwd(),n),D=Io(p),j=Eo(F.target,D);j!==F.target&&e.debug?.(`Resolved alias "${F.target}" → "${j}"`);let g=F.projects;const x=r.slice(1).map(String);if(t.projects){const w=new Set(t.projects.split(",").map(b=>b.trim()));if(g=g.filter(b=>w.has(b)),g.length===0)throw new Error(`No matching projects found for: ${String(t.projects)}`)}if(t.query&&(g=qn(g,c,t.query),g.length===0)){e.info(`Query "${String(t.query)}" matched no projects.`);return}const y=ln(),T=process.env[Lt],m=T?T.split(`
194
- `).filter(Boolean):void 0,k=(typeof t.runnerTags=="string"?t.runnerTags:process.env.VIS_RUNNER_TAGS)??void 0,M=k?new Set(k.split(",").map(w=>w.trim()).filter(Boolean)):void 0,R=[],B=new Map;for(const w of g){const b=p.get(w)?.[j];if(!b)continue;const I=b.options;if(!I?.internal){if(!dn(I,!!Ve)){e.debug?.(`Skipping ${w}:${j} — runInCI filter`);continue}if(!un(I,M)){e.debug?.(`Skipping ${w}:${j} — runner-tags filter`);continue}R.push(w),B.set(w,b)}}if(R.length===0){const w=vr(c),b=Object.entries(c.projects).filter(([,I])=>I.targets?.[j]!==void 0).map(([I])=>I);if(e.error(`No projects have the "${j}" target.`),b.length>0){e.info(""),e.info(`Target "${j}" exists in these projects but was filtered out:`);for(const I of b.slice(0,5))e.info(` - ${I}`);b.length>5&&e.info(` …and ${b.length-5} more`)}else{const I=rs(j,w,3);I.length>0&&(e.info(""),e.info(I.length===1?`Did you mean "${I[0]}"?`:`Did you mean one of: ${I.map(_=>`"${_}"`).join(", ")}?`)),e.info(""),e.info("Run `vis run` without arguments to see all available targets.")}return}const Y=t.pty===!0,X=R.map(w=>({project:w,schema:B.get(w)?.arguments})).filter(w=>Array.isArray(w.schema)&&w.schema.length>0),G=new Map;for(const{project:w,schema:b}of X){const I=JSON.stringify(b),_=G.get(I)??[];_.push(w),G.set(I,_)}if(G.size>1){const w=[...G.values()].map(b=>b.join(", ")).join(" | ");throw new Error(`Target "${j}" declares conflicting \`arguments\` schemas across projects (${w}). Run a single project (e.g. \`vis run ${X[0]?.project}:${j}\` or --projects=<name>) so the argument contract is unambiguous.`)}const ee=X[0]?.schema,xe=B.get(X[0]?.project??R[0])?.description,te=Qa(j,xe,ee,x);if(te.kind==="help"){e.info(te.text);return}if(te.kind==="invalid"){e.info(`Invalid arguments for "${j}":`);for(const w of te.errors)e.info(` ✖ ${w}`);throw e.info(""),e.info(te.help),new Error(`Invalid arguments for target "${j}"`)}const ce=te.env,le=hc(t.hashMode);let z=R.map(w=>{const b=c.projects[w],I=B.get(w),_={project:w,target:j},W=`${w}:${j}`,J=Y?{...I.options,pty:I.options?.pty??!0}:I.options,N=I.command?or(I.command,{affectedFiles:m,projectRoot:b?.root}):I.command,L=b?.root&&b.root.length>0?b.root:".",ne=(I.outputs??[]).map(P=>typeof P!="string"?P:P.replaceAll("{projectRoot}",L).replaceAll("{projectName}",w));return{cache:I.cache,hashMode:le??I.hashMode,id:W,outputs:ne,overrides:{command:N,...x.length>0?{[bs]:x}:{},...Object.keys(ce).length>0?{[Nt]:ce}:{},...J?{visOptions:J}:{}},parallelism:I.parallelism,projectRoot:b?.root,target:_}});const V=[],ie=[];for(const w of z)js(w)?.persistent?(w.cache=!1,V.push(w)):ie.push(w);z=ie;const se=Gs(t.partition);if(se&&(z=qs.partitionTasks(z,se),e.info(`Partition ${se.index}/${se.total}: running ${z.length} task(s)`),z.length===0)){e.info("No tasks assigned to this partition.");return}let A=Us([...z,...V],{onCycleBroken:w=>{e.warn(`Ignoring dev-only dependency cycle (build order is ambiguous): ${w.join(" → ")}`)},projectGraph:$,targetDefaults:f.tasks,workspace:c});for(const[w,b]of Object.entries(A.tasks)){const I=b.target.project,_=b.target.target,W=p.get(I)?.[_];if(!W)continue;const J=c.projects[I];let N=!1;const L={...b.overrides};L.visOptions===void 0&&W.options&&(L.visOptions=W.options,N=!0),L.command===void 0&&W.command&&(L.command=or(W.command,{affectedFiles:m,projectRoot:J?.root}),N=!0),N&&(b.overrides=L,A.tasks[w]=b)}if(typeof t.skipCache=="string"&&t.skipCache.trim()!=="")if(t.cache){const w=$o(t.skipCache,c,Object.keys(A.tasks));for(const b of w.skipTaskIds){const I=A.tasks[b];I!==void 0&&(I.cache=!1)}w.unmatchedPatterns.length>0&&e.warn(`--skip-cache: no tasks matched ${w.unmatchedPatterns.map(b=>`"${b}"`).join(", ")}`),w.skipTaskIds.size>0&&e.debug?.(`--skip-cache: bypassing cache for ${String(w.skipTaskIds.size)} task(s)`)}else e.debug?.("--skip-cache ignored: --no-cache already disables caching for the whole run");await En(n,f.toolchain,{error:w=>{e.error(w)},info:w=>{e.info(w)},warn:w=>{e.warn(w)}},!!t.skipToolchain);const de=t.preflight!==!1&&f.preflight?.lockfile!==!1,Re=kn(n,Ve,{warn:w=>{e.warn(w)}},{skip:!de});if(!Re.shouldContinue)throw new Error(`${Re.formattedMessage??"preflight: lockfile drift detected"} (pass --no-preflight to bypass)`);de&&!Ve&&process.stdin.isTTY&&process.stdout.isTTY&&await vo(n,{logger:{info:w=>{e.info(w)},warn:w=>{e.warn(w)}},projectManifests:[...u.values()]});const Oe=process.env.VIS_VERSION??"0.0.0",Be=t.dryRun?void 0:async w=>{try{return await Nn(w.config,{timeoutMs:Za}),!0}catch{return!1}},Ae=await An(n),Z=await Ea({initialTasks:[...z,...V],probe:Be,registeredEntries:Ae,taskGraph:A,visVersion:Oe}),Me=[];let Se,ke=0;const ge=[],we=new Map;let Te=[];const Ce=new Set;let $e=null,E=null;if(Z.diagnostics.length>0){const w=!!(process.stdout.isTTY&&process.stdin.isTTY),b=t.dryRun?"off":Wa({cli:t.services,config:f.run?.services,isCi:!!Ve,isPersistentTarget:V.length>0,isTty:w,target:j});if(b==="off"){for(const L of Z.diagnostics)e.error(L.message);throw new Error(`${Z.diagnostics.length} service dependency error(s) — start the missing services or invoke them directly.`)}const I=Z.diagnostics.map(L=>L.targetId),_=b,W=_==="registry"?xs(n,I,A):void 0,J=process.argv[1]??"vis",N=qa({missingServiceIds:I,mode:_,taskGraph:A,visBin:J,workspaceRoot:n});if(N.skipped.length>0){for(const{id:L,reason:ne}of N.skipped)e.error(`Cannot auto-start ${L}: ${ne}`);throw new Error(`${N.skipped.length} service(s) cannot be auto-started — invoke them directly or add a service config.`)}Me.push(...N.ephemeralPidFiles),Se=N.runDir,Te=N.chain;for(const L of N.chain)Ce.add(L);if(_==="registry"&&(ke=N.chain.length,ge.push(...N.chain)),N.chain.length>0){const L=new xr(N.chain),ne=new Map;if(_==="ephemeral"&&N.runDir)for(const P of N.chain){const U=ks(N.runDir,`${N.runDir}/bootstrap.mjs`,P);ne.set(P,{ephemeral:{configFile:U.configFile,cwd:n,logFile:U.logFile,pidFile:U.pidFile,scriptPath:U.scriptPath},mode:"ephemeral"})}else if(_==="registry"&&W)for(const P of W.services)ne.set(P.id,{mode:"registry",registry:{command:P.command,config:P.config,cwd:P.cwd,env:P.env}});if(ne.size>0){const P=new Oa({indexToId:new Map,services:ne,sink:{crashed:(U,q)=>{L.markCrashed(U,q)},failed:(U,q,Q)=>{L.markFailed(U,q,Q)},log:(U,q)=>{L.appendLog(U,q)},ready:(U,q)=>{L.markReady(U,q)},started:(U,q)=>{L.markStarted(U,q),_==="registry"&&q!==null&&we.set(U,q)},starting:U=>{L.markStarting(U)}},workspaceRoot:n});$e=L,E=P}}for(const[L,ne]of N.serviceEnvByTaskId){const P=Z.serviceEnvByTaskId.get(L)??{};Z.serviceEnvByTaskId.set(L,{...P,...ne})}}const C=new Set(V.map(w=>w.id));if(z=Z.initialTasks.filter(w=>!C.has(w.id)),A=Z.taskGraph,Te.length>0&&(z=[...Te.map(w=>A.tasks[w]).filter(w=>w!==void 0),...z]),V.length>0){const w=new Set(V.map(J=>J.id)),b={};for(const[J,N]of Object.entries(A.tasks))w.has(J)||(b[J]=N);const I={};for(const[J,N]of Object.entries(A.dependencies))w.has(J)||(I[J]=N.filter(L=>!w.has(L)));const _=new Set;for(const J of Object.values(I))for(const N of J)_.add(N);const W=Object.keys(b).filter(J=>!_.has(J));A={dependencies:I,roots:W,tasks:b}}const{serviceEnvByTaskId:O}=Z;if(Z.satisfiedServices.length>0){const w=Z.satisfiedServices.map(b=>b.id).join(", ");if(e.debug?.(`Auto-attached to running services: ${w}`),$e)for(const b of Z.satisfiedServices)$e.registerService(b.id);else $e=new xr(Z.satisfiedServices.map(b=>b.id));for(const b of Z.satisfiedServices){const I=b.config.readiness?.tcp?.port??b.config.port??0,_=b.config.readiness?.tcp?.host??"127.0.0.1";$e.markReady(b.id,{host:_,port:I})}}if(t.reverse&&(A=Ws(A),e.debug?.(`Reversed task graph: ${String(A.roots.length)} new root(s) (originally leaves)`)),t.dryRun){const w=Object.keys(A.tasks).length,b=A.roots.length;e.info(`Execution plan (${String(w)} task(s), ${String(b)} root(s)):`),e.info("");const I=new Set,_=(W,J)=>{if(I.has(W))return;I.add(W);for(const P of A.dependencies[W]??[])_(P,J+1);const N=A.tasks[W],L=" ".repeat(J+1),ne=`${N?.cache===!1?" (no-cache)":""}${N?.hashMode==="trace"?" (trace)":""}`;e.info(`${L}${W}${ne}`)};for(const W of A.roots)_(W,0);for(const W of Object.keys(A.tasks))_(W,0);V.length>0&&(e.info(""),e.info(` + ${String(V.length)} persistent task(s) (run after graph completes)`)),e.info("");return}const re=Date.now(),fe=Pn(),_t=(w,b)=>{const I=b instanceof Error?b.message:String(b);e.warn(`Plugin error in ${w}: ${I}`)};await Dn(fe,f.plugins);const Ue=typeof t.profile=="string"?t.profile:void 0,Gt=async w=>{if(!Ue)return;const b=cr(w,A,re),I=Ue.startsWith("/")?Ue:`${n}/${Ue}`;await Js(b,I),e.info(`Profile written to ${Ue}`)},Ze=f.taskRunner??{},Ss=fn(n,t.cacheDir,Ze.cacheDirectory,f.sharedWorktreeCache),Ts=hn(Ss,n,f.branchScopedCache),Ne=lc(process.env.VIS_RUN_CONCURRENCY_LIMIT);Ne&&"invalid"in Ne&&e.warn(`VIS_RUN_CONCURRENCY_LIMIT=${Ne.invalid} is not a positive number; falling back to default concurrency.`);const Cs=Ne&&"value"in Ne?Ne.value:void 0,Is=t.parallel??Cs??3,qt=t.strictEnv??f.strictEnv??!1,Ut=new Set,Pe={dryRun:t.dryRun??!1,parallel:Is,skipNxCache:!t.cache,summarize:t.summarize??!1,...Ze,cacheDirectory:Ts,dataDirectory:Ze.dataDirectory??it(n),namedInputs:f.namedInputs,onDiagnostic:(w,b)=>{Ut.has(w)||(Ut.add(w),e.warn(b))},onFingerprint:async(w,b)=>{await fe.callHook("task:fingerprint",w,b)}},Wt=zs(Ze.remoteCache);if(Wt){const w=uc(t.cacheMode),b=fc(t.cacheBackend);if(Pe.remoteCache={...Wt,...w?{mode:w}:{},...b?{backend:b}:{}},Pe.remoteCache.attestation){const{expectedIdentity:I,requireOnDownload:_}=Pe.remoteCache.attestation;if(!(I!==void 0&&("github"in I&&typeof I.github?.ref=="string"&&typeof I.github.repo=="string"&&typeof I.github.workflow=="string"||"oidcIssuer"in I&&typeof I.oidcIssuer=="string"&&(typeof I.san=="string"||typeof I.sanRegex=="string"))))throw new Error("[vis run] remoteCache.attestation requires a pinned keyless signer via `expectedIdentity`. Use one of:\n • { github: { repo, workflow, ref } } (GitHub Actions — recommended)\n • { oidcIssuer, san } (literal identity; vis regex-escapes + anchors it)\n • { oidcIssuer, sanRegex } (advanced: raw regex, you own anchoring)\nWithout it, verification is integrity-only — use `remoteCache.signing` (HMAC) for that instead.");"sanRegex"in I&&(!I.sanRegex.startsWith("^")||!I.sanRegex.endsWith("$"))&&e.warn("[vis run] remoteCache.attestation.expectedIdentity.sanRegex is not anchored (^…$). sigstore matches it as a regex; an unanchored value is substring-matched and weakens the identity pin. Prefer the literal `san` form unless you need a pattern.");const{installCommandFor:W,isSigstoreInstalled:J}=await import("./loader.js");J()||e.warn(`[vis run] remoteCache.attestation is configured but the optional \`sigstore\` package is not installed. Cache uploads will be unsigned and signed entries can't be verified until you install it:
195
- ${W(n)}`);const{buildCacheAttestationHooks:N}=await import("./cache-attestation.js");Pe.remoteCache.attestation=N({expectedIdentity:I,onReject:(L,ne)=>{e.warn(`[vis run] remote cache entry ${L.slice(0,12)} rejected: attestation ${ne}. Treating as a cache miss.`)},onVerifyFailure:L=>{e.warn(`[vis run] attestation verification failed: ${L}`)},requireOnDownload:_,workspaceRoot:n})}}else(t.cacheMode||t.cacheBackend)&&e.warn("[vis run] --cache-mode and --cache-backend require a `remoteCache` block in vis.config.ts (or TURBO_API env); ignoring.");const Es=process.stdout.isTTY&&!Ve,Rs=o?.run?.quietOnSuccess===!0,Ms=f.tui?.autoExit??(Rs?3:!1),zt={args:{parallel:Pe.parallel,targets:[j]},autoExit:Ms,projectNames:R,tasks:[...z,...V]},Ht=typeof t.retryBudget=="number"?t.retryBudget:void 0,Vt=Ht===void 0?void 0:ac(Ht),Yt=new Ln(fe,_t),Jt=new In(n),Kt=pa(t.outputStyle,o?.run?.quietOnSuccess);if(Z.satisfiedServices.length>0)for(const w of Z.satisfiedServices){const b=Z.serviceDependentsByServiceId.get(w.id)??[];try{await fe.callHook("service:attach",w,b)}catch(I){_t("service:attach",I)}}await fe.callHook("run:before",{tasks:z,workspaceRoot:n});const We=t.stopServices===!0;let Xt=!1;const Qt=()=>{if(Xt)return;Xt=!0,E&&E.dispose().catch(()=>{});const w=We?[...we.values()]:void 0;tc({extraPids:w,pidFiles:Me,runDir:Se})},et=()=>{Qt()},Zt=Me.length>0||Se!==void 0||We&&ge.length>0;Zt&&(process.on("SIGINT",et),process.on("SIGTERM",et));try{if(Es){const w=new Map,b=fa({...zt,onRetryService:E?P=>E.retry(P):void 0,outputStyle:Kt,serviceDockStore:$e,stdinRegistry:w}),{lifeCycle:I,store:_}=b,W=new ir([I,Yt,Jt]),J=Gr({affectedFiles:m,currentOs:y,hooks:fe,initCwd:l,lifeCycle:W,mutexPool:new Map,onOutput:(P,U)=>{E&&Ce.has(P)?E.onTaskOutput(P,U):_.addOutput(P,U)},onOutputReplace:(P,U)=>{_.setOutput(P,U)},retryBudget:Vt,serviceEnvByTaskId:O,serviceEventBridge:E??void 0,stdinRegistry:w,strictEnv:qt,workspaceRoot:n});let N="rerun",L=null,ne=new Map;for(;N!=="quit";){if(N==="rerun"){if(ne=await ar(z,Pe,{lifeCycle:W,projectGraph:$,taskExecutor:J,taskGraph:A,workspaceRoot:n}),V.length>0&&!t.failFast){const P=new Promise(U=>{const q=_.subscribe(()=>{const Q=_.getSnapshot();(Q.rerunRequested||Q.retryTaskId)&&(q(),U())});b.renderIsDone.then(()=>{q(),U()}).catch(()=>{q(),U()})});await Nr(V,n,m,l,{abortSignal:P,lifeCycle:W,stdinRegistry:w,store:_},O)}}else if(N==="retry"&&L){const P=z.find(q=>q.id===L),U=P?.overrides.command;if(P&&U){const q=ht(n,P.projectRoot,!1);W.startTasks?.([P]);const Q=new St(ft),he=(await ot([{command:U,cwd:q,name:P.id,ptySize:{cols:process.stdout.columns??80,rows:process.stdout.rows??24},stdin:"pty"}],{onEvent:oe=>{oe.kind==="started"&&oe.write&&w.set(P.id,{kill:oe.kill,resize:oe.resize,write:oe.write}),(oe.kind==="stdout"||oe.kind==="stderr")&&oe.text&&(Q.write(oe.text),_.setOutput(P.id,Q.toString())),oe.kind==="close"&&w.delete(P.id)}})).closeEvents[0];W.endTasks?.([{code:he?.exitCode??1,status:he?.exitCode===0?"success":"failure",task:P,terminalOutput:_.getSnapshot().outputs.get(P.id)}])}else P&&W.endTasks?.([{code:1,status:"failure",task:P,terminalOutput:`No command configured for ${P.id}`}]);L=null,_.markDone()}N=await new Promise(P=>{const U=_.subscribe(()=>{const q=_.getSnapshot();q.rerunRequested&&(_.acknowledgeRerun(),U(),P("rerun")),q.retryTaskId&&(L=_.acknowledgeRetry(),U(),P("retry"))});b.renderIsDone.then(()=>{U(),P("quit")}).catch(()=>{U(),P("quit")})})}await b.renderIsDone,await fe.callHook("run:after",ne),await Gt(ne),ke>0&&(e.info(""),We?e.info(`${String(ke)} service(s) stopped (--stop-services).`):e.info(`${String(ke)} service(s) started in the background. Run \`vis service stop --all\` to clean up.`))}else{const w=new Map,b=typeof t.log=="string"?t.log.toLowerCase():"",I=b==="labeled"||b==="grouped"||b==="interleaved"?b:void 0,_=I?Hs(I):void 0,W=new ir([new ma({...zt,ciGrouping:o?.run?.ciGrouping??"auto",logReporter:_,outputStyle:Kt}),Yt,Jt]),J=Gr({affectedFiles:m,currentOs:y,hooks:fe,initCwd:l,lifeCycle:W,mutexPool:w,retryBudget:Vt,serviceEnvByTaskId:O,serviceEventBridge:E??void 0,strictEnv:qt,workspaceRoot:n}),N=async()=>{const q=Date.now(),Q=await ar(z,Pe,{lifeCycle:W,projectGraph:$,taskExecutor:J,taskGraph:A,workspaceRoot:n}),he=Date.now()-q;if(t.summarize){const ve=cr(Q,A,re);await Ks(ve,n,{dataDirectory:it(n)})}let oe=!1;for(const[,ve]of Q)ve.status==="failure"&&(oe=!0);const ye=mn(Q,he),je=wn(n),Fe=yn(n,he,je);return e.info(""),e.info(` ${ye}${Fe?` ${Fe}`:""}`),{hasFailure:oe,results:Q,runHistory:je}},L=await N();await fe.callHook("run:after",L.results),await Gt(L.results);const{hasFailure:ne}=L;if(t.watch){const q=R.map(ue=>{const me=c.projects[ue]?.root;if(me)return me.startsWith("/")?me:`${n}/${me}`}).filter(ue=>ue!==void 0),Q=z;let he;const oe=ue=>{const me=ja(Q,ue);return he=me.filter,z=me.tasks,me.tasks.length};let ye=!1,je=L.results;const Fe=()=>{const ue=pr(je,n);if(ue.directories.length>0&&ue.files.size>0){const me=to(ue.files,n,ue.directories);return{handle:gr({filter:me,onChange:tt,paths:ue.directories}),mode:"tracked"}}return{handle:gr({onChange:tt,paths:q}),mode:"roots"}};let ve;const tt=async ue=>{if(!ye){ye=!0;try{e.info(`Change detected in ${ue.length} file(s), rerunning…`),je=(await N()).results,ve?.close(),ve=Fe().handle}finally{ye=!1}}},er=Fe();ve=er.handle;const Fs=er.mode==="tracked"?`Watching ${String(pr(je,n).files.size)} tracked file(s)`:`Watching ${String(q.length)} project root(s)`;e.info(`${Fs} — edit a file to rerun, press h for keybinds, q to quit.`);const wt=async()=>{if(!ye){ye=!0;try{if(z.length===0){e.info("No tasks match the active filter — press a to clear it.");return}je=(await N()).results,ve?.close(),ve=Fe().handle}finally{ye=!1}}};await new Promise(ue=>{let me=!1,tr;const rr=()=>{sr()},sr=()=>{me||(me=!0,tr?.close(),process.off("SIGINT",rr),ve?.close(),ue())};process.on("SIGINT",rr),tr=Ca({handlers:{onClearFilter:async()=>{const ze=oe(void 0);e.info(`Filter cleared — running ${String(ze)} task(s).`),await wt()},onFilter:async ze=>{const Os=he,nr=oe(ze);if(nr===0){e.info(`Filter "${ze}" matched no projects — keeping previous filter.`),oe(Os);return}e.info(`Filter "${ze}" matched ${String(nr)} task(s).`),await wt()},onHelp:()=>{Sa(process.stdout)},onQuit:()=>{sr()},onRerun:wt}})});return}if(t.flaky!==!1){const q=pn(n,{minRuns:2},L.runHistory);if(q.length>0){e.info(""),e.info("Flaky tasks (based on historical runs):"),e.info("");for(const Q of gn(q))e.info(` ${Q}`);e.info("")}}const P=[];for(const[q,Q]of L.results)Q.retryAttempts&&Q.retryAttempts>0&&P.push(q);const U=t.failOnRetry===!0&&P.length>0;if(U){const q=P.slice(0,5),Q=P.length-q.length,he=Q>0?`${q.join(", ")}, and ${String(Q)} more`:q.join(", ");e.warn(""),e.warn(`--fail-on-retry: ${String(P.length)} task(s) succeeded only after retry: ${he}`)}if(ne||U){const q=U&&!ne?"Some tasks succeeded only after retry (--fail-on-retry).":"Some tasks failed.",Q=2e3,he=[];for(const[oe,ye]of L.results){if(ye.status!=="failure")continue;const je=ye.terminalOutput??"",Fe=je.length>Q?`…${je.slice(-Q)}`:je,ve=ye.code??"?";he.push(` ${oe} (exit ${String(ve)}):
196
- ${Fe.split(`
197
- `).map(tt=>` ${tt}`).join(`
198
- `)}`)}throw new Error(he.length>0?`${q}
199
- ${he.join(`
200
- `)}`:q)}V.length>0&&!t.failFast&&await Nr(V,n,m,l,void 0,O),ke>0&&(e.info(""),We?e.info(`${String(ke)} service(s) stopped (--stop-services).`):e.info(`${String(ke)} service(s) started in the background. Run \`vis service stop --all\` to clean up.`))}}finally{Qt(),Zt&&(process.off("SIGINT",et),process.off("SIGTERM",et)),We&&ge.length>0&&await Promise.all(ge.map(async w=>{try{await Bn(n,w)}catch{}}))}};export{ac as createRetryBudget,Rc as default};
1
+ import{E as d}from"../packem_shared/Table-CcVkyULl-B_ef6zfS.js";import{m as g,f as y,v as k,T as w,O as l}from"../packem_shared/index-BDmTbWX1.js";import{a as h,b as x,f as b}from"../packem_shared/subtree-C7bZuiSQ.js";import{o as u}from"../packem_shared/utils-Cxree603.js";import{t as A,W as R}from"./bin.js";import{a as $}from"./config.js";const j=["aube-workspace.yaml","pnpm-workspace.yaml"],v=/^\s*packages\s*:\s*$/,E=/^(\s*)-\s/,q=(c,i)=>{const r=c.includes(`\r
2
+ `)?`\r
3
+ `:`
4
+ `,e=c.split(/\r?\n/),o=e.findIndex(t=>v.test(t));if(o===-1)return;let s=" ";for(let t=o+1;t<e.length;t++){const a=E.exec(e[t]);if(a){s=a[1];break}if(e[t].trim().length>0)break}return e.splice(o+1,0,`${s}- "${i}"`),e.join(r)},I=(c,i,r)=>{const e=g(c,"package.json");let o;try{o=$(e)}catch{return!1}const{workspaces:s}=o;return Array.isArray(s)?s.includes(i)?!1:(r||l(e,{...o,workspaces:[...s,i]},{detectIndent:!0}),!0):s&&typeof s=="object"&&Array.isArray(s.packages)?s.packages.includes(i)?!1:(r||l(e,{...o,workspaces:{...s,packages:[...s.packages,i]}},{detectIndent:!0}),!0):!1},P=({dryRun:c=!1,prefix:i,workspaceRoot:r})=>{const e=u(i),o=A(r);if(!o)return{status:"no-config"};if(R(r,o).some(s=>u(s)===e))return{status:"already-covered"};for(const s of j){const t=g(r,s);if(!y(t))continue;const a=q(k(t),e);if(a!==void 0)return c||w(t,a),{entry:e,file:s,status:"added"}}return I(r,e,c)?{entry:e,file:"package.json",status:"added"}:{status:"no-config"}},H=async({argument:c,fs:i,logger:r,options:e,process:o,workspaceRoot:s})=>{const t=c[0];if(!t)throw new Error("Missing <source>. Pass a git repository URL or local path to import.");if(!e.prefix)throw new Error("Missing --prefix <dir>. Pass the target directory in the monorepo (e.g. packages/tooling/foo).");const a=s??o.cwd,n=u(e.prefix),f=e.ref??"HEAD";if(h(a),await(async p=>{try{return await i.access(p),!0}catch{return!1}})(g(a,n)))throw new Error(`Target "${n}" already exists. git subtree add requires a non-existent prefix.`);if(e.dryRun){const p=e.squash?" --squash":"",m=e.message?` -m "${e.message}"`:"";r.info("Dry run no changes will be made. Planned steps:"),r.info(` git subtree add --prefix=${n}${p}${m} ${t} ${f}`),e.noRegister||r.info(` register ${n} into the workspace config (skipped if already covered by an existing glob)`);return}if(x(a),r.info(`Importing ${d(t)}@${f} ${n} ...`),b({cwd:a,message:e.message,prefix:n,ref:f,repo:t,squash:e.squash}),r.info(`✓ Imported ${t} into ${n} (history preserved).`),e.noRegister)r.info(d(`Skipped workspace registration (--no-register). Add ${n} to your workspace config manually.`));else{const p=P({prefix:n,workspaceRoot:a});p.status==="already-covered"?r.info(`✓ ${n} is already covered by an existing workspace glob.`):p.status==="added"?r.info(`✓ Registered ${p.entry} in ${p.file}.`):r.warn(`Could not auto-register ${n}: no workspace config found. Add it to pnpm-workspace.yaml or package.json#workspaces manually.`)}r.info(d("Note: project.json / nx tags are not generated. Add them if your tooling needs them."))};export{H as default};